From e0a396dfd879bf63f7768b9fd02a89b2a010cf9c Mon Sep 17 00:00:00 2001 From: Jolly Good <1671375+good-lly@users.noreply.github.com> Date: Tue, 28 May 2024 16:00:31 +0200 Subject: [PATCH 01/18] #13 draft how s3 support might work [wip] --- README.md | 90 +- examples/.env.example | 7 + examples/wrangler.toml | 6 +- package-lock.json | 2947 ++++++++++++++++++++++++++++++++++++++-- package.json | 12 +- src/lowstorage.js | 159 ++- 6 files changed, 2997 insertions(+), 224 deletions(-) create mode 100644 examples/.env.example diff --git a/README.md b/README.md index 525f622..ceede1c 100644 --- a/README.md +++ b/README.md @@ -1,48 +1,70 @@

- lowstorage | for Workers using R2 + lowstorage | for edges & S3-compatible storages

-> Simple, zero-dependency, object pseudo-database for Cloudflare Workers using R2 buckets, strongly inspired by lowdb 🤗(https://github.com/typicode/lowdb/).
![Cloudflare](https://img.shields.io/badge/Cloudflare-F38020?style=for-the-badge&logo=Cloudflare&logoColor=white) [![GitHub issues](https://img.shields.io/github/issues/good-lly/lowstorage)](https://github.com/good-lly/lowstorage/issues/) [![GitHub license](https://img.shields.io/github/license/Naereen/StrapDown.js.svg)](https://github.com/good-lly/lowstorage/blob/master/LICENSE) Contributions welcome +> Simple, single-dependency (@aws-sdk based), object pseudo-database for S3-compatible storages, strongly inspired by lowdb 🤗(https://github.com/typicode/lowdb/).
![AWS S3](https://img.shields.io/badge/AWS%20S3-232F3E?style=for-the-badge&logo=amazon-aws&logoColor=white) ![Cloudflare R2](https://img.shields.io/badge/Cloudflare%20R2-F38020?style=for-the-badge&logo=Cloudflare&logoColor=white) [![GitHub issues](https://img.shields.io/github/issues/good-lly/lowstorage)](https://github.com/good-lly/lowstorage/issues/) [![GitHub license](https://img.shields.io/github/license/Naereen/StrapDown.js.svg)](https://github.com/good-lly/lowstorage/blob/master/LICENSE) Contributions welcome [[github](https://github.com/good-lly/lowstorage)] [[npm](https://www.npmjs.com/package/lowstorage)] ## Sponsors - - [Become a sponsor and have your company logo here](https://github.com/sponsors/good-lly) 👉 [GitHub Sponsors](https://github.com/sponsors/good-lly) ### Important Notice -While Cloudflare R2 operates on a strongly consistent model ([reference](https://developers.cloudflare.com/r2/reference/consistency/)), it's important to note that `lowstorage` is primarily designed for small, hobby, or personal projects. We advise extreme caution when using `lowstorage` for critical applications or production environments, as it may not offer the robustness or features required for such use cases. +`lowstorage` is primarily designed for small, hobby, or personal projects. We advise extreme caution when using `lowstorage` for critical applications or production environments, as it may not offer the robustness or features required for such use cases. + +### Breaking Changes + +#### Version 2 + +Since version 2.0.0, `lowstorage` has undergone significant changes: + +- **Constructor Changes**: The constructor now accepts S3-compatible configuration instead of being tied to Cloudflare R2. +- **Support for Multiple Storages**: Now supports any S3-compatible storage like AWS S3, Cloudflare R2, Minio, Ceph, etc. + +If you are migrating from version 1.x.x, please review the new constructor parameters and usage examples below. + +### Cloudflare R2 - S3 API Compatibility + +R2 implements the S3 API to allow users and their applications to migrate with ease. When comparing to AWS S3, Cloudflare has removed some API operations’ features and added others. The S3 API operations are listed below with their current implementation status. Feature implementation is currently in progress. Refer back to this page for updates. The API is available via the `https://.r2.cloudflarestorage.com` endpoint. Find your account ID in the Cloudflare dashboard. + +#### Bucket region -### Usage +When using the S3 API, the region for an R2 bucket is `auto`. For compatibility with tools that do not allow you to specify a region, an empty value and `us-east-1` will alias to the `auto` region. + +### lowstorage Usage ```js import lowstorage from 'lowstorage'; // Initialize object and get users collection -const storage = new lowstorage(env, 'MY_TESTING_BUCKET'); +const storage = new lowstorage({ + endPoint: 'play.min.io', + port: 80, + region: 'auto', + useSSL: true, + accessKey: 'Q3AM3UQ867SPQQA43P2F', + secretKey: 'zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG', + bucketName: 'mybucket', +}); const userCol = storage.collection('users'); -// or just const userCol = new lowstorage(env, 'MY_TESTING_BUCKET').collection('users') - // Add new user -// you can provide _id or it will be generated as crypto.randomUUID(); -> https://developers.cloudflare.com/workers/runtime-apis/web-crypto/ -const newUser = await usersCol.insert({ +const newUser = await userCol.insert({ name: 'Kevin', gender: 'whatever', posts: [], }); // Show all users -const allUsers = usersCol.find({}); +const allUsers = await userCol.find({}); // Find users with pagination (e.g., page 2, 10 users per page) -const secondPageUsers = await usersCol.find({}, { skip: 10, limit: 10 }); +const secondPageUsers = await userCol.find({}, { skip: 10, limit: 10 }); // Find user by ID and update name -await usersCol.update({ _id: id }, { name: 'Carlos' }); +await userCol.update({ _id: id }, { name: 'Carlos' }); ``` ## Features @@ -50,8 +72,9 @@ await usersCol.update({ _id: id }, { name: 'Carlos' }); - **Lightweight** - **Minimalist** - **Familiar API** +- **S3-compatibility** - **Plain JavaScript** -- **Zero-dependency** +- **Signle-dependency ([@aws-sdk/client-s3](https://www.npmjs.com/package/@aws-sdk/client-s3))** ## Install @@ -59,33 +82,26 @@ await usersCol.update({ _id: id }, { name: 'Carlos' }); npm install lowstorage ``` -#### Why Cloudflare R2? - -> Seamless migration, robust free tier, Nonee gress fees. Dive into the future of data storage with Cloudflare R2 https://developers.cloudflare.com/r2/ +#### Why S3-Compatible Storage? -#### Included features in Forever Free R2 tier +> S3-compatible storages provide a reliable, scalable, and widely supported option for object storage. Platforms like AWS S3, Cloudflare R2, Minio and Ceph offer robust infrastructure with various features and pricing models to suit different needs. -> - Storage: 10 GB/month -> - Class A operations (mutate state): 1,000,000 / month -> - Class B operations (read state): 10,000,000 / month -> - [more details on pricing R2](https://www.cloudflare.com/plans/developer-platform/#overview) +### Setup & config -### Setup & binding R2 to your worker +To set up and bind your storage, configure your storage client with the appropriate credentials and bucket information. Here is an example setup for AWS S3: -1. In the Cloudflare console, go to R2 (left navigation) -2. Click Create Bucket -3. Enter any bucket name you want (we use testing-lowstorage) -4. Click Create Bucket (bottom) -5. Go to 'Worker & Pages' -6. Click on your worker (or create new one) -7. Go to 'Settings' -> Variables -8. In section 'R2 Bucket Bindings' click EDIT VARIABLES -9. Hit '+ Add Binding' and pick variable name (we use 'MY_TESTING_BUCKET') and select your R2 bucket -10. Click 'Save & Deploy' - -Check out [wrangler.toml from examples](https://github.com/good-lly/lowstorage/blob/master/examples/wrangler.toml#L22) +```js +const storage = new lowstorage({ + endPoint: 's3.amazonaws.com', + useSSL: true, + region: 'YOUR-REGION', + accessKey: 'YOUR-ACCESSKEYID', + secretKey: 'YOUR-SECRETACCESSKEY', + bucketName: 'your-bucket-name', +}); +``` -> Insctructions with pictures https://github.com/gfodor/p2pcf/blob/master/INSTALL.md#set-up-the-r2-bucket +For Cloudflare R2, follow similar steps with your R2-specific endpoint and credentials. ## API diff --git a/examples/.env.example b/examples/.env.example new file mode 100644 index 0000000..2723db3 --- /dev/null +++ b/examples/.env.example @@ -0,0 +1,7 @@ +ENDPOINT=YOUR_ENDPOINT.r2.cloudflarestorage.com +ACCESS_KEY=YOUR_ACCESS +SECRET_KEY=YOUR_SECRET +BUCKET_NAME=YOUR_BUCKET +REGION=YOUR_REGION_FALLBACK_AUTO +TOKEN_R2=YOUR_TOKEN +PORT=9000 diff --git a/examples/wrangler.toml b/examples/wrangler.toml index 7268622..aa8a721 100644 --- a/examples/wrangler.toml +++ b/examples/wrangler.toml @@ -19,9 +19,9 @@ compatibility_date = "2023-10-30" # [[r2_buckets]] # binding = "MY_BUCKET" # bucket_name = "my-bucket" -r2_buckets = [ - { binding = "MY_TESTING_BUCKET", bucket_name = "testing-lowstorage", preview_bucket_name = "prod-test-bucket" } -] +# r2_buckets = [ +# { binding = "MY_TESTING_BUCKET", bucket_name = "testing-lowstorage", preview_bucket_name = "prod-test-bucket" } +# ] # Bind a Queue producer. Use this binding to schedule an arbitrary task that may be processed later by a Queue consumer. # Docs: https://developers.cloudflare.com/queues/get-started diff --git a/package-lock.json b/package-lock.json index d2c7110..af6c633 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,6 +8,9 @@ "name": "lowstorage", "version": "0.0.5", "license": "MIT", + "dependencies": { + "@aws-sdk/client-s3": "^3.583.0" + }, "devDependencies": { "esbuild": "^0.19.6", "jest": "^29.7.0", @@ -33,6 +36,809 @@ "node": ">=6.0.0" } }, + "node_modules/@aws-crypto/crc32": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-3.0.0.tgz", + "integrity": "sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA==", + "dependencies": { + "@aws-crypto/util": "^3.0.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/crc32/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-crypto/crc32c": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/crc32c/-/crc32c-3.0.0.tgz", + "integrity": "sha512-ENNPPManmnVJ4BTXlOjAgD7URidbAznURqD0KvfREyc4o20DPYdEldU1f5cQ7Jbj0CJJSPaMIk/9ZshdB3210w==", + "dependencies": { + "@aws-crypto/util": "^3.0.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/crc32c/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-crypto/ie11-detection": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/ie11-detection/-/ie11-detection-3.0.0.tgz", + "integrity": "sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q==", + "dependencies": { + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/ie11-detection/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-crypto/sha1-browser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha1-browser/-/sha1-browser-3.0.0.tgz", + "integrity": "sha512-NJth5c997GLHs6nOYTzFKTbYdMNA6/1XlKVgnZoaZcQ7z7UJlOgj2JdbHE8tiYLS3fzXNCguct77SPGat2raSw==", + "dependencies": { + "@aws-crypto/ie11-detection": "^3.0.0", + "@aws-crypto/supports-web-crypto": "^3.0.0", + "@aws-crypto/util": "^3.0.0", + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-locate-window": "^3.0.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/sha1-browser/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-crypto/sha256-browser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-3.0.0.tgz", + "integrity": "sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ==", + "dependencies": { + "@aws-crypto/ie11-detection": "^3.0.0", + "@aws-crypto/sha256-js": "^3.0.0", + "@aws-crypto/supports-web-crypto": "^3.0.0", + "@aws-crypto/util": "^3.0.0", + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-locate-window": "^3.0.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/sha256-browser/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-crypto/sha256-js": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-3.0.0.tgz", + "integrity": "sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ==", + "dependencies": { + "@aws-crypto/util": "^3.0.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/sha256-js/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-crypto/supports-web-crypto": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-3.0.0.tgz", + "integrity": "sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg==", + "dependencies": { + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/supports-web-crypto/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-crypto/util": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-3.0.0.tgz", + "integrity": "sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w==", + "dependencies": { + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/util/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/client-s3": { + "version": "3.583.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.583.0.tgz", + "integrity": "sha512-pS7wncugSuIQ8RgtRIE9Dystdmd3mMnjfjiO1iA1UhGXkyAgoJzQ4jH0r+5X+eWmYHYQcfy9fUQXT2gqV3t9GA==", + "dependencies": { + "@aws-crypto/sha1-browser": "3.0.0", + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/client-sso-oidc": "3.583.0", + "@aws-sdk/client-sts": "3.583.0", + "@aws-sdk/core": "3.582.0", + "@aws-sdk/credential-provider-node": "3.583.0", + "@aws-sdk/middleware-bucket-endpoint": "3.577.0", + "@aws-sdk/middleware-expect-continue": "3.577.0", + "@aws-sdk/middleware-flexible-checksums": "3.577.0", + "@aws-sdk/middleware-host-header": "3.577.0", + "@aws-sdk/middleware-location-constraint": "3.577.0", + "@aws-sdk/middleware-logger": "3.577.0", + "@aws-sdk/middleware-recursion-detection": "3.577.0", + "@aws-sdk/middleware-sdk-s3": "3.582.0", + "@aws-sdk/middleware-signing": "3.577.0", + "@aws-sdk/middleware-ssec": "3.577.0", + "@aws-sdk/middleware-user-agent": "3.583.0", + "@aws-sdk/region-config-resolver": "3.577.0", + "@aws-sdk/signature-v4-multi-region": "3.582.0", + "@aws-sdk/types": "3.577.0", + "@aws-sdk/util-endpoints": "3.583.0", + "@aws-sdk/util-user-agent-browser": "3.577.0", + "@aws-sdk/util-user-agent-node": "3.577.0", + "@aws-sdk/xml-builder": "3.575.0", + "@smithy/config-resolver": "^3.0.0", + "@smithy/core": "^2.0.1", + "@smithy/eventstream-serde-browser": "^3.0.0", + "@smithy/eventstream-serde-config-resolver": "^3.0.0", + "@smithy/eventstream-serde-node": "^3.0.0", + "@smithy/fetch-http-handler": "^3.0.1", + "@smithy/hash-blob-browser": "^3.0.0", + "@smithy/hash-node": "^3.0.0", + "@smithy/hash-stream-node": "^3.0.0", + "@smithy/invalid-dependency": "^3.0.0", + "@smithy/md5-js": "^3.0.0", + "@smithy/middleware-content-length": "^3.0.0", + "@smithy/middleware-endpoint": "^3.0.0", + "@smithy/middleware-retry": "^3.0.1", + "@smithy/middleware-serde": "^3.0.0", + "@smithy/middleware-stack": "^3.0.0", + "@smithy/node-config-provider": "^3.0.0", + "@smithy/node-http-handler": "^3.0.0", + "@smithy/protocol-http": "^4.0.0", + "@smithy/smithy-client": "^3.0.1", + "@smithy/types": "^3.0.0", + "@smithy/url-parser": "^3.0.0", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.1", + "@smithy/util-defaults-mode-node": "^3.0.1", + "@smithy/util-endpoints": "^2.0.0", + "@smithy/util-retry": "^3.0.0", + "@smithy/util-stream": "^3.0.1", + "@smithy/util-utf8": "^3.0.0", + "@smithy/util-waiter": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-sso": { + "version": "3.583.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.583.0.tgz", + "integrity": "sha512-FNJ2MmiBtZZwgkj4+GLVrzqwmD6D8FBptrFZk7PnGkSf7v1Q8txYNI6gY938RRhYJ4lBW4cNbhPvWoDxAl90Hw==", + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/core": "3.582.0", + "@aws-sdk/middleware-host-header": "3.577.0", + "@aws-sdk/middleware-logger": "3.577.0", + "@aws-sdk/middleware-recursion-detection": "3.577.0", + "@aws-sdk/middleware-user-agent": "3.583.0", + "@aws-sdk/region-config-resolver": "3.577.0", + "@aws-sdk/types": "3.577.0", + "@aws-sdk/util-endpoints": "3.583.0", + "@aws-sdk/util-user-agent-browser": "3.577.0", + "@aws-sdk/util-user-agent-node": "3.577.0", + "@smithy/config-resolver": "^3.0.0", + "@smithy/core": "^2.0.1", + "@smithy/fetch-http-handler": "^3.0.1", + "@smithy/hash-node": "^3.0.0", + "@smithy/invalid-dependency": "^3.0.0", + "@smithy/middleware-content-length": "^3.0.0", + "@smithy/middleware-endpoint": "^3.0.0", + "@smithy/middleware-retry": "^3.0.1", + "@smithy/middleware-serde": "^3.0.0", + "@smithy/middleware-stack": "^3.0.0", + "@smithy/node-config-provider": "^3.0.0", + "@smithy/node-http-handler": "^3.0.0", + "@smithy/protocol-http": "^4.0.0", + "@smithy/smithy-client": "^3.0.1", + "@smithy/types": "^3.0.0", + "@smithy/url-parser": "^3.0.0", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.1", + "@smithy/util-defaults-mode-node": "^3.0.1", + "@smithy/util-endpoints": "^2.0.0", + "@smithy/util-middleware": "^3.0.0", + "@smithy/util-retry": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-sso-oidc": { + "version": "3.583.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.583.0.tgz", + "integrity": "sha512-LO3wmrFXPi2kNE46lD1XATfRrvdNxXd4DlTFouoWmr7lvqoUkcbmtkV2r/XChZA2z0HiDauphC1e8b8laJVeSg==", + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/client-sts": "3.583.0", + "@aws-sdk/core": "3.582.0", + "@aws-sdk/credential-provider-node": "3.583.0", + "@aws-sdk/middleware-host-header": "3.577.0", + "@aws-sdk/middleware-logger": "3.577.0", + "@aws-sdk/middleware-recursion-detection": "3.577.0", + "@aws-sdk/middleware-user-agent": "3.583.0", + "@aws-sdk/region-config-resolver": "3.577.0", + "@aws-sdk/types": "3.577.0", + "@aws-sdk/util-endpoints": "3.583.0", + "@aws-sdk/util-user-agent-browser": "3.577.0", + "@aws-sdk/util-user-agent-node": "3.577.0", + "@smithy/config-resolver": "^3.0.0", + "@smithy/core": "^2.0.1", + "@smithy/fetch-http-handler": "^3.0.1", + "@smithy/hash-node": "^3.0.0", + "@smithy/invalid-dependency": "^3.0.0", + "@smithy/middleware-content-length": "^3.0.0", + "@smithy/middleware-endpoint": "^3.0.0", + "@smithy/middleware-retry": "^3.0.1", + "@smithy/middleware-serde": "^3.0.0", + "@smithy/middleware-stack": "^3.0.0", + "@smithy/node-config-provider": "^3.0.0", + "@smithy/node-http-handler": "^3.0.0", + "@smithy/protocol-http": "^4.0.0", + "@smithy/smithy-client": "^3.0.1", + "@smithy/types": "^3.0.0", + "@smithy/url-parser": "^3.0.0", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.1", + "@smithy/util-defaults-mode-node": "^3.0.1", + "@smithy/util-endpoints": "^2.0.0", + "@smithy/util-middleware": "^3.0.0", + "@smithy/util-retry": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-sts": { + "version": "3.583.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.583.0.tgz", + "integrity": "sha512-xDMxiemPDWr9dY2Q4AyixkRnk/hvS6fs6OWxuVCz1WO47YhaAfOsEGAgQMgDLLaOfj/oLU5D14uTNBEPGh4rBA==", + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/client-sso-oidc": "3.583.0", + "@aws-sdk/core": "3.582.0", + "@aws-sdk/credential-provider-node": "3.583.0", + "@aws-sdk/middleware-host-header": "3.577.0", + "@aws-sdk/middleware-logger": "3.577.0", + "@aws-sdk/middleware-recursion-detection": "3.577.0", + "@aws-sdk/middleware-user-agent": "3.583.0", + "@aws-sdk/region-config-resolver": "3.577.0", + "@aws-sdk/types": "3.577.0", + "@aws-sdk/util-endpoints": "3.583.0", + "@aws-sdk/util-user-agent-browser": "3.577.0", + "@aws-sdk/util-user-agent-node": "3.577.0", + "@smithy/config-resolver": "^3.0.0", + "@smithy/core": "^2.0.1", + "@smithy/fetch-http-handler": "^3.0.1", + "@smithy/hash-node": "^3.0.0", + "@smithy/invalid-dependency": "^3.0.0", + "@smithy/middleware-content-length": "^3.0.0", + "@smithy/middleware-endpoint": "^3.0.0", + "@smithy/middleware-retry": "^3.0.1", + "@smithy/middleware-serde": "^3.0.0", + "@smithy/middleware-stack": "^3.0.0", + "@smithy/node-config-provider": "^3.0.0", + "@smithy/node-http-handler": "^3.0.0", + "@smithy/protocol-http": "^4.0.0", + "@smithy/smithy-client": "^3.0.1", + "@smithy/types": "^3.0.0", + "@smithy/url-parser": "^3.0.0", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.1", + "@smithy/util-defaults-mode-node": "^3.0.1", + "@smithy/util-endpoints": "^2.0.0", + "@smithy/util-middleware": "^3.0.0", + "@smithy/util-retry": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/core": { + "version": "3.582.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.582.0.tgz", + "integrity": "sha512-ofmD96IQc9g1dbyqlCyxu5fCG7kIl9p1NoN5+vGBUyLdbmPCV3Pdg99nRHYEJuv2MgGx5AUFGDPMHcqbJpnZIw==", + "dependencies": { + "@smithy/core": "^2.0.1", + "@smithy/protocol-http": "^4.0.0", + "@smithy/signature-v4": "^3.0.0", + "@smithy/smithy-client": "^3.0.1", + "@smithy/types": "^3.0.0", + "fast-xml-parser": "4.2.5", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-env": { + "version": "3.577.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.577.0.tgz", + "integrity": "sha512-Jxu255j0gToMGEiqufP8ZtKI8HW90lOLjwJ3LrdlD/NLsAY0tOQf1fWc53u28hWmmNGMxmCrL2p66IOgMDhDUw==", + "dependencies": { + "@aws-sdk/types": "3.577.0", + "@smithy/property-provider": "^3.0.0", + "@smithy/types": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-http": { + "version": "3.582.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.582.0.tgz", + "integrity": "sha512-kGOUKw5ryPkDIYB69PjK3SicVLTbWB06ouFN2W1EvqUJpkQGPAUGzYcomKtt3mJaCTf/1kfoaHwARAl6KKSP8Q==", + "dependencies": { + "@aws-sdk/types": "3.577.0", + "@smithy/fetch-http-handler": "^3.0.1", + "@smithy/node-http-handler": "^3.0.0", + "@smithy/property-provider": "^3.0.0", + "@smithy/protocol-http": "^4.0.0", + "@smithy/smithy-client": "^3.0.1", + "@smithy/types": "^3.0.0", + "@smithy/util-stream": "^3.0.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.583.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.583.0.tgz", + "integrity": "sha512-8I0oWNg/yps6ctjhEeL/qJ9BIa/+xXP7RPDQqFKZ2zBkWbmLLOoMWXRvl8uKUBD6qCe+DGmcu9skfVXeXSesEQ==", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.577.0", + "@aws-sdk/credential-provider-process": "3.577.0", + "@aws-sdk/credential-provider-sso": "3.583.0", + "@aws-sdk/credential-provider-web-identity": "3.577.0", + "@aws-sdk/types": "3.577.0", + "@smithy/credential-provider-imds": "^3.0.0", + "@smithy/property-provider": "^3.0.0", + "@smithy/shared-ini-file-loader": "^3.0.0", + "@smithy/types": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sts": "^3.583.0" + } + }, + "node_modules/@aws-sdk/credential-provider-node": { + "version": "3.583.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.583.0.tgz", + "integrity": "sha512-yBNypBXny7zJH85SzxDj8s1mbLXv9c/Vbq0qR3R3POj2idZ6ywB/qlIRC1XwBuv49Wvg8kA1wKXk3K3jrpcVIw==", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.577.0", + "@aws-sdk/credential-provider-http": "3.582.0", + "@aws-sdk/credential-provider-ini": "3.583.0", + "@aws-sdk/credential-provider-process": "3.577.0", + "@aws-sdk/credential-provider-sso": "3.583.0", + "@aws-sdk/credential-provider-web-identity": "3.577.0", + "@aws-sdk/types": "3.577.0", + "@smithy/credential-provider-imds": "^3.0.0", + "@smithy/property-provider": "^3.0.0", + "@smithy/shared-ini-file-loader": "^3.0.0", + "@smithy/types": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-process": { + "version": "3.577.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.577.0.tgz", + "integrity": "sha512-Gin6BWtOiXxIgITrJ3Nwc+Y2P1uVT6huYR4EcbA/DJUPWyO0n9y5UFLewPvVbLkRn15JeEqErBLUrHclkiOKtw==", + "dependencies": { + "@aws-sdk/types": "3.577.0", + "@smithy/property-provider": "^3.0.0", + "@smithy/shared-ini-file-loader": "^3.0.0", + "@smithy/types": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.583.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.583.0.tgz", + "integrity": "sha512-G/1EvL9tBezSiU+06tG4K/kOvFfPjnheT4JSXqjPM7+vjKzgp2jxp1J9MMd69zs4jVWon932zMeGgjrCplzMEg==", + "dependencies": { + "@aws-sdk/client-sso": "3.583.0", + "@aws-sdk/token-providers": "3.577.0", + "@aws-sdk/types": "3.577.0", + "@smithy/property-provider": "^3.0.0", + "@smithy/shared-ini-file-loader": "^3.0.0", + "@smithy/types": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.577.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.577.0.tgz", + "integrity": "sha512-ZGHGNRaCtJJmszb9UTnC7izNCtRUttdPlLdMkh41KPS32vfdrBDHs1JrpbZijItRj1xKuOXsiYSXLAaHGcLh8Q==", + "dependencies": { + "@aws-sdk/types": "3.577.0", + "@smithy/property-provider": "^3.0.0", + "@smithy/types": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sts": "^3.577.0" + } + }, + "node_modules/@aws-sdk/middleware-bucket-endpoint": { + "version": "3.577.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.577.0.tgz", + "integrity": "sha512-twlkNX2VofM6kHXzDEiJOiYCc9tVABe5cbyxMArRWscIsCWG9mamPhC77ezG4XsN9dFEwVdxEYD5Crpm/5EUiw==", + "dependencies": { + "@aws-sdk/types": "3.577.0", + "@aws-sdk/util-arn-parser": "3.568.0", + "@smithy/node-config-provider": "^3.0.0", + "@smithy/protocol-http": "^4.0.0", + "@smithy/types": "^3.0.0", + "@smithy/util-config-provider": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/middleware-expect-continue": { + "version": "3.577.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.577.0.tgz", + "integrity": "sha512-6dPp8Tv4F0of4un5IAyG6q++GrRrNQQ4P2NAMB1W0VO4JoEu1C8GievbbDLi88TFIFmtKpnHB0ODCzwnoe8JsA==", + "dependencies": { + "@aws-sdk/types": "3.577.0", + "@smithy/protocol-http": "^4.0.0", + "@smithy/types": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/middleware-flexible-checksums": { + "version": "3.577.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.577.0.tgz", + "integrity": "sha512-IHAUEipIfagjw92LV8SOSBiCF7ZnqfHcw14IkcZW2/mfrCy1Fh/k40MoS/t3Tro2tQ91rgQPwUoSgB/QCi2Org==", + "dependencies": { + "@aws-crypto/crc32": "3.0.0", + "@aws-crypto/crc32c": "3.0.0", + "@aws-sdk/types": "3.577.0", + "@smithy/is-array-buffer": "^3.0.0", + "@smithy/protocol-http": "^4.0.0", + "@smithy/types": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/middleware-host-header": { + "version": "3.577.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.577.0.tgz", + "integrity": "sha512-9ca5MJz455CODIVXs0/sWmJm7t3QO4EUa1zf8pE8grLpzf0J94bz/skDWm37Pli13T3WaAQBHCTiH2gUVfCsWg==", + "dependencies": { + "@aws-sdk/types": "3.577.0", + "@smithy/protocol-http": "^4.0.0", + "@smithy/types": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/middleware-location-constraint": { + "version": "3.577.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.577.0.tgz", + "integrity": "sha512-DKPTD2D2s+t2QUo/IXYtVa/6Un8GZ+phSTBkyBNx2kfZz4Kwavhl/JJzSqTV3GfCXkVdFu7CrjoX7BZ6qWeTUA==", + "dependencies": { + "@aws-sdk/types": "3.577.0", + "@smithy/types": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/middleware-logger": { + "version": "3.577.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.577.0.tgz", + "integrity": "sha512-aPFGpGjTZcJYk+24bg7jT4XdIp42mFXSuPt49lw5KygefLyJM/sB0bKKqPYYivW0rcuZ9brQ58eZUNthrzYAvg==", + "dependencies": { + "@aws-sdk/types": "3.577.0", + "@smithy/types": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.577.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.577.0.tgz", + "integrity": "sha512-pn3ZVEd2iobKJlR3H+bDilHjgRnNrQ6HMmK9ZzZw89Ckn3Dcbv48xOv4RJvu0aU8SDLl/SNCxppKjeLDTPGBNA==", + "dependencies": { + "@aws-sdk/types": "3.577.0", + "@smithy/protocol-http": "^4.0.0", + "@smithy/types": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/middleware-sdk-s3": { + "version": "3.582.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.582.0.tgz", + "integrity": "sha512-PJqQpLoLaZPRI4L/XZUeHkd9UVK8VAr9R38wv0osGeMTvzD9iwzzk0I2TtBqFda/5xEB1YgVYZwyqvmStXmttg==", + "dependencies": { + "@aws-sdk/types": "3.577.0", + "@aws-sdk/util-arn-parser": "3.568.0", + "@smithy/node-config-provider": "^3.0.0", + "@smithy/protocol-http": "^4.0.0", + "@smithy/signature-v4": "^3.0.0", + "@smithy/smithy-client": "^3.0.1", + "@smithy/types": "^3.0.0", + "@smithy/util-config-provider": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/middleware-signing": { + "version": "3.577.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.577.0.tgz", + "integrity": "sha512-QS/dh3+NqZbXtY0j/DZ867ogP413pG5cFGqBy9OeOhDMsolcwLrQbi0S0c621dc1QNq+er9ffaMhZ/aPkyXXIg==", + "dependencies": { + "@aws-sdk/types": "3.577.0", + "@smithy/property-provider": "^3.0.0", + "@smithy/protocol-http": "^4.0.0", + "@smithy/signature-v4": "^3.0.0", + "@smithy/types": "^3.0.0", + "@smithy/util-middleware": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/middleware-ssec": { + "version": "3.577.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.577.0.tgz", + "integrity": "sha512-i2BPJR+rp8xmRVIGc0h1kDRFcM2J9GnClqqpc+NLSjmYadlcg4mPklisz9HzwFVcRPJ5XcGf3U4BYs5G8+iTyg==", + "dependencies": { + "@aws-sdk/types": "3.577.0", + "@smithy/types": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.583.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.583.0.tgz", + "integrity": "sha512-xVNXXXDWvBVI/AeVtSdA9SVumqxiZaESk/JpUn9GMkmtTKfter0Cweap+1iQ9j8bRAO0vNhmIkbcvdB1S4WVUw==", + "dependencies": { + "@aws-sdk/types": "3.577.0", + "@aws-sdk/util-endpoints": "3.583.0", + "@smithy/protocol-http": "^4.0.0", + "@smithy/types": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/region-config-resolver": { + "version": "3.577.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.577.0.tgz", + "integrity": "sha512-4ChCFACNwzqx/xjg3zgFcW8Ali6R9C95cFECKWT/7CUM1D0MGvkclSH2cLarmHCmJgU6onKkJroFtWp0kHhgyg==", + "dependencies": { + "@aws-sdk/types": "3.577.0", + "@smithy/node-config-provider": "^3.0.0", + "@smithy/types": "^3.0.0", + "@smithy/util-config-provider": "^3.0.0", + "@smithy/util-middleware": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/signature-v4-multi-region": { + "version": "3.582.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.582.0.tgz", + "integrity": "sha512-aFCOjjNqEX2l+V8QjOWy5F7CtHIC/RlYdBuv3No6yxn+pMvVUUe6zdMk2yHWcudVpHWsyvcZzAUBliAPeFLPsQ==", + "dependencies": { + "@aws-sdk/middleware-sdk-s3": "3.582.0", + "@aws-sdk/types": "3.577.0", + "@smithy/protocol-http": "^4.0.0", + "@smithy/signature-v4": "^3.0.0", + "@smithy/types": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/token-providers": { + "version": "3.577.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.577.0.tgz", + "integrity": "sha512-0CkIZpcC3DNQJQ1hDjm2bdSy/Xjs7Ny5YvSsacasGOkNfk+FdkiQy6N67bZX3Zbc9KIx+Nz4bu3iDeNSNplnnQ==", + "dependencies": { + "@aws-sdk/types": "3.577.0", + "@smithy/property-provider": "^3.0.0", + "@smithy/shared-ini-file-loader": "^3.0.0", + "@smithy/types": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sso-oidc": "^3.577.0" + } + }, + "node_modules/@aws-sdk/types": { + "version": "3.577.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.577.0.tgz", + "integrity": "sha512-FT2JZES3wBKN/alfmhlo+3ZOq/XJ0C7QOZcDNrpKjB0kqYoKjhVKZ/Hx6ArR0czkKfHzBBEs6y40ebIHx2nSmA==", + "dependencies": { + "@smithy/types": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/util-arn-parser": { + "version": "3.568.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.568.0.tgz", + "integrity": "sha512-XUKJWWo+KOB7fbnPP0+g/o5Ulku/X53t7i/h+sPHr5xxYTJJ9CYnbToo95mzxe7xWvkLrsNtJ8L+MnNn9INs2w==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/util-endpoints": { + "version": "3.583.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.583.0.tgz", + "integrity": "sha512-ZC9mb2jq6BFXPYsUsD2tmYcnlmd+9PGNwnFNn8jk4abna5Jjk2wDknN81ybktmBR5ttN9W8ugmktuKtvAMIDCQ==", + "dependencies": { + "@aws-sdk/types": "3.577.0", + "@smithy/types": "^3.0.0", + "@smithy/util-endpoints": "^2.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/util-locate-window": { + "version": "3.568.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.568.0.tgz", + "integrity": "sha512-3nh4TINkXYr+H41QaPelCceEB2FXP3fxp93YZXB/kqJvX0U9j0N0Uk45gvsjmEPzG8XxkPEeLIfT2I1M7A6Lig==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.577.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.577.0.tgz", + "integrity": "sha512-zEAzHgR6HWpZOH7xFgeJLc6/CzMcx4nxeQolZxVZoB5pPaJd3CjyRhZN0xXeZB0XIRCWmb4yJBgyiugXLNMkLA==", + "dependencies": { + "@aws-sdk/types": "3.577.0", + "@smithy/types": "^3.0.0", + "bowser": "^2.11.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.577.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.577.0.tgz", + "integrity": "sha512-XqvtFjbSMtycZTWVwDe8DRWovuoMbA54nhUoZwVU6rW9OSD6NZWGR512BUGHFaWzW0Wg8++Dj10FrKTG2XtqfA==", + "dependencies": { + "@aws-sdk/types": "3.577.0", + "@smithy/node-config-provider": "^3.0.0", + "@smithy/types": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "aws-crt": ">=1.0.0" + }, + "peerDependenciesMeta": { + "aws-crt": { + "optional": true + } + } + }, + "node_modules/@aws-sdk/util-utf8-browser": { + "version": "3.259.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz", + "integrity": "sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==", + "dependencies": { + "tslib": "^2.3.1" + } + }, + "node_modules/@aws-sdk/xml-builder": { + "version": "3.575.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.575.0.tgz", + "integrity": "sha512-cWgAwmbFYNCFzPwxL705+lWps0F3ZvOckufd2KKoEZUmtpVw9/txUXNrPySUXSmRTSRhoatIMABNfStWR043bQ==", + "dependencies": { + "@smithy/types": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, "node_modules/@babel/code-frame": { "version": "7.23.5", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", @@ -1444,96 +2250,733 @@ "write-file-atomic": "^4.0.2" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true + }, + "node_modules/@sinonjs/commons": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", + "dev": true, + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^3.0.0" + } + }, + "node_modules/@smithy/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-p6GlFGBt9K4MYLu72YuJ523NVR4A8oHlC5M2JO6OmQqN8kAc/uh1JqLE+FizTokrSJGg0CSvC+BrsmGzKtsZKA==", + "dependencies": { + "@smithy/types": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/chunked-blob-reader": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader/-/chunked-blob-reader-3.0.0.tgz", + "integrity": "sha512-sbnURCwjF0gSToGlsBiAmd1lRCmSn72nu9axfJu5lIx6RUEgHu6GwTMbqCdhQSi0Pumcm5vFxsi9XWXb2mTaoA==", + "dependencies": { + "tslib": "^2.6.2" + } + }, + "node_modules/@smithy/chunked-blob-reader-native": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-3.0.0.tgz", + "integrity": "sha512-VDkpCYW+peSuM4zJip5WDfqvg2Mo/e8yxOv3VF1m11y7B8KKMKVFtmZWDe36Fvk8rGuWrPZHHXZ7rR7uM5yWyg==", + "dependencies": { + "@smithy/util-base64": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@smithy/config-resolver": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-3.0.0.tgz", + "integrity": "sha512-2GzOfADwYLQugYkKQhIyZyQlM05K+tMKvRnc6eFfZcpJGRfKoMUMYdPlBKmqHwQFXQKBrGV6cxL9oymWgDzvFw==", + "dependencies": { + "@smithy/node-config-provider": "^3.0.0", + "@smithy/types": "^3.0.0", + "@smithy/util-config-provider": "^3.0.0", + "@smithy/util-middleware": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/core": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-2.0.1.tgz", + "integrity": "sha512-rcMkjvwxH/bER+oZUPR0yTA0ELD6m3A+d92+CFkdF6HJFCBB1bXo7P5pm21L66XwTN01B6bUhSCQ7cymWRD8zg==", + "dependencies": { + "@smithy/middleware-endpoint": "^3.0.0", + "@smithy/middleware-retry": "^3.0.1", + "@smithy/middleware-serde": "^3.0.0", + "@smithy/protocol-http": "^4.0.0", + "@smithy/smithy-client": "^3.0.1", + "@smithy/types": "^3.0.0", + "@smithy/util-middleware": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/credential-provider-imds": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-3.0.0.tgz", + "integrity": "sha512-lfmBiFQcA3FsDAPxNfY0L7CawcWtbyWsBOHo34nF095728JLkBX4Y9q/VPPE2r7fqMVK+drmDigqE2/SSQeVRA==", + "dependencies": { + "@smithy/node-config-provider": "^3.0.0", + "@smithy/property-provider": "^3.0.0", + "@smithy/types": "^3.0.0", + "@smithy/url-parser": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/eventstream-codec": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-3.0.0.tgz", + "integrity": "sha512-PUtyEA0Oik50SaEFCZ0WPVtF9tz/teze2fDptW6WRXl+RrEenH8UbEjudOz8iakiMl3lE3lCVqYf2Y+znL8QFQ==", + "dependencies": { + "@aws-crypto/crc32": "3.0.0", + "@smithy/types": "^3.0.0", + "@smithy/util-hex-encoding": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@smithy/eventstream-serde-browser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-3.0.0.tgz", + "integrity": "sha512-NB7AFiPN4NxP/YCAnrvYR18z2/ZsiHiF7VtG30gshO9GbFrIb1rC8ep4NGpJSWrz6P64uhPXeo4M0UsCLnZKqw==", + "dependencies": { + "@smithy/eventstream-serde-universal": "^3.0.0", + "@smithy/types": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/eventstream-serde-config-resolver": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-3.0.0.tgz", + "integrity": "sha512-RUQG3vQ3LX7peqqHAbmayhgrF5aTilPnazinaSGF1P0+tgM3vvIRWPHmlLIz2qFqB9LqFIxditxc8O2Z6psrRw==", + "dependencies": { + "@smithy/types": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/eventstream-serde-node": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-3.0.0.tgz", + "integrity": "sha512-baRPdMBDMBExZXIUAoPGm/hntixjt/VFpU6+VmCyiYJYzRHRxoaI1MN+5XE+hIS8AJ2GCHLMFEIOLzq9xx1EgQ==", + "dependencies": { + "@smithy/eventstream-serde-universal": "^3.0.0", + "@smithy/types": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/eventstream-serde-universal": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-3.0.0.tgz", + "integrity": "sha512-HNFfShmotWGeAoW4ujP8meV9BZavcpmerDbPIjkJbxKbN8RsUcpRQ/2OyIxWNxXNH2GWCAxuSB7ynmIGJlQ3Dw==", + "dependencies": { + "@smithy/eventstream-codec": "^3.0.0", + "@smithy/types": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/fetch-http-handler": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-3.0.1.tgz", + "integrity": "sha512-uaH74i5BDj+rBwoQaXioKpI0SHBJFtOVwzrCpxZxphOW0ki5jhj7dXvDMYM2IJem8TpdFvS2iC08sjOblfFGFg==", + "dependencies": { + "@smithy/protocol-http": "^4.0.0", + "@smithy/querystring-builder": "^3.0.0", + "@smithy/types": "^3.0.0", + "@smithy/util-base64": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@smithy/hash-blob-browser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-3.0.0.tgz", + "integrity": "sha512-/Wbpdg+bwJvW7lxR/zpWAc1/x/YkcqguuF2bAzkJrvXriZu1vm8r+PUdE4syiVwQg7PPR2dXpi3CLBb9qRDaVQ==", + "dependencies": { + "@smithy/chunked-blob-reader": "^3.0.0", + "@smithy/chunked-blob-reader-native": "^3.0.0", + "@smithy/types": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@smithy/hash-node": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-3.0.0.tgz", + "integrity": "sha512-84qXstNemP3XS5jcof0el6+bDfjzuvhJPQTEfro3lgtbCtKgzPm3MgiS6ehXVPjeQ5+JS0HqmTz8f/RYfzHVxw==", + "dependencies": { + "@smithy/types": "^3.0.0", + "@smithy/util-buffer-from": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/hash-stream-node": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-3.0.0.tgz", + "integrity": "sha512-J0i7de+EgXDEGITD4fxzmMX8CyCNETTIRXlxjMiNUvvu76Xn3GJ31wQR85ynlPk2wI1lqoknAFJaD1fiNDlbIA==", + "dependencies": { + "@smithy/types": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/invalid-dependency": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-3.0.0.tgz", + "integrity": "sha512-F6wBBaEFgJzj0s4KUlliIGPmqXemwP6EavgvDqYwCH40O5Xr2iMHvS8todmGVZtuJCorBkXsYLyTu4PuizVq5g==", + "dependencies": { + "@smithy/types": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@smithy/is-array-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", + "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/md5-js": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-3.0.0.tgz", + "integrity": "sha512-Tm0vrrVzjlD+6RCQTx7D3Ls58S3FUH1ZCtU1MIh/qQmaOo1H9lMN2as6CikcEwgattnA9SURSdoJJ27xMcEfMA==", + "dependencies": { + "@smithy/types": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@smithy/middleware-content-length": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-3.0.0.tgz", + "integrity": "sha512-3C4s4d/iGobgCtk2tnWW6+zSTOBg1PRAm2vtWZLdriwTroFbbWNSr3lcyzHdrQHnEXYCC5K52EbpfodaIUY8sg==", + "dependencies": { + "@smithy/protocol-http": "^4.0.0", + "@smithy/types": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/middleware-endpoint": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-3.0.0.tgz", + "integrity": "sha512-aXOAWztw/5qAfp0NcA2OWpv6ZI/E+Dh9mByif7i91D/0iyYNUcKvskmXiowKESFkuZ7PIMd3VOR4fTibZDs2OQ==", + "dependencies": { + "@smithy/middleware-serde": "^3.0.0", + "@smithy/node-config-provider": "^3.0.0", + "@smithy/shared-ini-file-loader": "^3.0.0", + "@smithy/types": "^3.0.0", + "@smithy/url-parser": "^3.0.0", + "@smithy/util-middleware": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/middleware-retry": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-3.0.1.tgz", + "integrity": "sha512-hBhSEuL841FhJBK/19WpaGk5YWSzFk/P2UaVjANGKRv3eYNO8Y1lANWgqnuPWjOyCEWMPr58vELFDWpxvRKANw==", + "dependencies": { + "@smithy/node-config-provider": "^3.0.0", + "@smithy/protocol-http": "^4.0.0", + "@smithy/service-error-classification": "^3.0.0", + "@smithy/smithy-client": "^3.0.1", + "@smithy/types": "^3.0.0", + "@smithy/util-middleware": "^3.0.0", + "@smithy/util-retry": "^3.0.0", + "tslib": "^2.6.2", + "uuid": "^9.0.1" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/middleware-serde": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-3.0.0.tgz", + "integrity": "sha512-I1vKG1foI+oPgG9r7IMY1S+xBnmAn1ISqployvqkwHoSb8VPsngHDTOgYGYBonuOKndaWRUGJZrKYYLB+Ane6w==", + "dependencies": { + "@smithy/types": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/middleware-stack": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-3.0.0.tgz", + "integrity": "sha512-+H0jmyfAyHRFXm6wunskuNAqtj7yfmwFB6Fp37enytp2q047/Od9xetEaUbluyImOlGnGpaVGaVfjwawSr+i6Q==", + "dependencies": { + "@smithy/types": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/node-config-provider": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-3.0.0.tgz", + "integrity": "sha512-buqfaSdDh0zo62EPLf8rGDvcpKwGpO5ho4bXS2cdFhlOta7tBkWJt+O5uiaAeICfIOfPclNOndshDNSanX2X9g==", + "dependencies": { + "@smithy/property-provider": "^3.0.0", + "@smithy/shared-ini-file-loader": "^3.0.0", + "@smithy/types": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/node-http-handler": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.0.0.tgz", + "integrity": "sha512-3trD4r7NOMygwLbUJo4eodyQuypAWr7uvPnebNJ9a70dQhVn+US8j/lCnvoJS6BXfZeF7PkkkI0DemVJw+n+eQ==", + "dependencies": { + "@smithy/abort-controller": "^3.0.0", + "@smithy/protocol-http": "^4.0.0", + "@smithy/querystring-builder": "^3.0.0", + "@smithy/types": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/property-provider": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.0.0.tgz", + "integrity": "sha512-LmbPgHBswdXCrkWWuUwBm9w72S2iLWyC/5jet9/Y9cGHtzqxi+GVjfCfahkvNV4KXEwgnH8EMpcrD9RUYe0eLQ==", + "dependencies": { + "@smithy/types": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/protocol-http": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.0.0.tgz", + "integrity": "sha512-qOQZOEI2XLWRWBO9AgIYuHuqjZ2csyr8/IlgFDHDNuIgLAMRx2Bl8ck5U5D6Vh9DPdoaVpuzwWMa0xcdL4O/AQ==", + "dependencies": { + "@smithy/types": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/querystring-builder": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-3.0.0.tgz", + "integrity": "sha512-bW8Fi0NzyfkE0TmQphDXr1AmBDbK01cA4C1Z7ggwMAU5RDz5AAv/KmoRwzQAS0kxXNf/D2ALTEgwK0U2c4LtRg==", + "dependencies": { + "@smithy/types": "^3.0.0", + "@smithy/util-uri-escape": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/querystring-parser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-3.0.0.tgz", + "integrity": "sha512-UzHwthk0UEccV4dHzPySnBy34AWw3V9lIqUTxmozQ+wPDAO9csCWMfOLe7V9A2agNYy7xE+Pb0S6K/J23JSzfQ==", + "dependencies": { + "@smithy/types": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/service-error-classification": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-3.0.0.tgz", + "integrity": "sha512-3BsBtOUt2Gsnc3X23ew+r2M71WwtpHfEDGhHYHSDg6q1t8FrWh15jT25DLajFV1H+PpxAJ6gqe9yYeRUsmSdFA==", + "dependencies": { + "@smithy/types": "^3.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/shared-ini-file-loader": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.0.0.tgz", + "integrity": "sha512-REVw6XauXk8xE4zo5aGL7Rz4ywA8qNMUn8RtWeTRQsgAlmlvbJ7CEPBcaXU2NDC3AYBgYAXrGyWD8XrN8UGDog==", + "dependencies": { + "@smithy/types": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/signature-v4": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-3.0.0.tgz", + "integrity": "sha512-kXFOkNX+BQHe2qnLxpMEaCRGap9J6tUGLzc3A9jdn+nD4JdMwCKTJ+zFwQ20GkY+mAXGatyTw3HcoUlR39HwmA==", + "dependencies": { + "@smithy/is-array-buffer": "^3.0.0", + "@smithy/types": "^3.0.0", + "@smithy/util-hex-encoding": "^3.0.0", + "@smithy/util-middleware": "^3.0.0", + "@smithy/util-uri-escape": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/smithy-client": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.0.1.tgz", + "integrity": "sha512-KAiFY4Y4jdHxR+4zerH/VBhaFKM8pbaVmJZ/CWJRwtM/CmwzTfXfvYwf6GoUwiHepdv+lwiOXCuOl6UBDUEINw==", + "dependencies": { + "@smithy/middleware-endpoint": "^3.0.0", + "@smithy/middleware-stack": "^3.0.0", + "@smithy/protocol-http": "^4.0.0", + "@smithy/types": "^3.0.0", + "@smithy/util-stream": "^3.0.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/types": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.0.0.tgz", + "integrity": "sha512-VvWuQk2RKFuOr98gFhjca7fkBS+xLLURT8bUjk5XQoV0ZLm7WPwWPPY3/AwzTLuUBDeoKDCthfe1AsTUWaSEhw==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/url-parser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-3.0.0.tgz", + "integrity": "sha512-2XLazFgUu+YOGHtWihB3FSLAfCUajVfNBXGGYjOaVKjLAuAxx3pSBY3hBgLzIgB17haf59gOG3imKqTy8mcrjw==", + "dependencies": { + "@smithy/querystring-parser": "^3.0.0", + "@smithy/types": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@smithy/util-base64": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-3.0.0.tgz", + "integrity": "sha512-Kxvoh5Qtt0CDsfajiZOCpJxgtPHXOKwmM+Zy4waD43UoEMA+qPxxa98aE/7ZhdnBFZFXMOiBR5xbcaMhLtznQQ==", + "dependencies": { + "@smithy/util-buffer-from": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/util-body-length-browser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-3.0.0.tgz", + "integrity": "sha512-cbjJs2A1mLYmqmyVl80uoLTJhAcfzMOyPgjwAYusWKMdLeNtzmMz9YxNl3/jRLoxSS3wkqkf0jwNdtXWtyEBaQ==", + "dependencies": { + "tslib": "^2.6.2" + } + }, + "node_modules/@smithy/util-body-length-node": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-3.0.0.tgz", + "integrity": "sha512-Tj7pZ4bUloNUP6PzwhN7K386tmSmEET9QtQg0TgdNOnxhZvCssHji+oZTUIuzxECRfG8rdm2PMw2WCFs6eIYkA==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/util-buffer-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", + "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", + "dependencies": { + "@smithy/is-array-buffer": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/util-config-provider": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-3.0.0.tgz", + "integrity": "sha512-pbjk4s0fwq3Di/ANL+rCvJMKM5bzAQdE5S/6RL5NXgMExFAi6UgQMPOm5yPaIWPpr+EOXKXRonJ3FoxKf4mCJQ==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" } }, - "node_modules/@jest/types": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", - "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", - "dev": true, + "node_modules/@smithy/util-defaults-mode-browser": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.1.tgz", + "integrity": "sha512-nW5kEzdJn1Bn5TF+gOPHh2rcPli8JU9vSSXLbfg7uPnfR1TMRQqs9zlYRhIb87NeSxIbpdXOI94tvXSy+fvDYg==", "dependencies": { - "@jest/schemas": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" + "@smithy/property-provider": "^3.0.0", + "@smithy/smithy-client": "^3.0.1", + "@smithy/types": "^3.0.0", + "bowser": "^2.11.0", + "tslib": "^2.6.2" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">= 10.0.0" } }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", - "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", - "dev": true, + "node_modules/@smithy/util-defaults-mode-node": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.1.tgz", + "integrity": "sha512-TFk+Qb+elLc/MOhtSp+50fstyfZ6avQbgH2d96xUBpeScu+Al9elxv+UFAjaTHe0HQe5n+wem8ZLpXvU8lwV6Q==", "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.24" + "@smithy/config-resolver": "^3.0.0", + "@smithy/credential-provider-imds": "^3.0.0", + "@smithy/node-config-provider": "^3.0.0", + "@smithy/property-provider": "^3.0.0", + "@smithy/smithy-client": "^3.0.1", + "@smithy/types": "^3.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=6.0.0" + "node": ">= 10.0.0" } }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "dev": true, + "node_modules/@smithy/util-endpoints": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-2.0.0.tgz", + "integrity": "sha512-+exaXzEY3DNt2qtA2OtRNSDlVrE4p32j1JSsQkzA5AdP0YtJNjkYbYhJxkFmPYcjI1abuwopOZCwUmv682QkiQ==", + "dependencies": { + "@smithy/node-config-provider": "^3.0.0", + "@smithy/types": "^3.0.0", + "tslib": "^2.6.2" + }, "engines": { - "node": ">=6.0.0" + "node": ">=16.0.0" } }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "dev": true, + "node_modules/@smithy/util-hex-encoding": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-3.0.0.tgz", + "integrity": "sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ==", + "dependencies": { + "tslib": "^2.6.2" + }, "engines": { - "node": ">=6.0.0" + "node": ">=16.0.0" } }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "dev": true, + "node_modules/@smithy/util-middleware": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-3.0.0.tgz", + "integrity": "sha512-q5ITdOnV2pXHSVDnKWrwgSNTDBAMHLptFE07ua/5Ty5WJ11bvr0vk2a7agu7qRhrCFRQlno5u3CneU5EELK+DQ==", "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" + "@smithy/types": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" } }, - "node_modules/@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", - "dev": true + "node_modules/@smithy/util-retry": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-3.0.0.tgz", + "integrity": "sha512-nK99bvJiziGv/UOKJlDvFF45F00WgPLKVIGUfAK+mDhzVN2hb/S33uW2Tlhg5PVBoqY7tDVqL0zmu4OxAHgo9g==", + "dependencies": { + "@smithy/service-error-classification": "^3.0.0", + "@smithy/types": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } }, - "node_modules/@sinonjs/commons": { + "node_modules/@smithy/util-stream": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", - "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", - "dev": true, + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-3.0.1.tgz", + "integrity": "sha512-7F7VNNhAsfMRA8I986YdOY5fE0/T1/ZjFF6OLsqkvQVNP3vZ/szYDfGCyphb7ioA09r32K/0qbSFfNFU68aSzA==", "dependencies": { - "type-detect": "4.0.8" + "@smithy/fetch-http-handler": "^3.0.1", + "@smithy/node-http-handler": "^3.0.0", + "@smithy/types": "^3.0.0", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-buffer-from": "^3.0.0", + "@smithy/util-hex-encoding": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" } }, - "node_modules/@sinonjs/fake-timers": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", - "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", - "dev": true, + "node_modules/@smithy/util-uri-escape": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-3.0.0.tgz", + "integrity": "sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg==", "dependencies": { - "@sinonjs/commons": "^3.0.0" + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/util-utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", + "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", + "dependencies": { + "@smithy/util-buffer-from": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/util-waiter": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-3.0.0.tgz", + "integrity": "sha512-+fEXJxGDLCoqRKVSmo0auGxaqbiCo+8oph+4auefYjaNxjOLKSY2MxVQfRzo65PaZv4fr+5lWg+au7vSuJJ/zw==", + "dependencies": { + "@smithy/abort-controller": "^3.0.0", + "@smithy/types": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" } }, "node_modules/@types/babel__core": { @@ -1880,6 +3323,11 @@ "integrity": "sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g==", "dev": true }, + "node_modules/bowser": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", + "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==" + }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -2517,6 +3965,27 @@ "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", "dev": true }, + "node_modules/fast-xml-parser": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.2.5.tgz", + "integrity": "sha512-B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g==", + "funding": [ + { + "type": "paypal", + "url": "https://paypal.me/naturalintelligence" + }, + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "dependencies": { + "strnum": "^1.0.5" + }, + "bin": { + "fxparser": "src/cli/cli.js" + } + }, "node_modules/fb-watchman": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", @@ -4606,6 +6075,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/strnum": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", + "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==" + }, "node_modules/superagent": { "version": "8.1.2", "resolved": "https://registry.npmjs.org/superagent/-/superagent-8.1.2.tgz", @@ -4753,8 +6227,7 @@ "node_modules/tslib": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/type-detect": { "version": "4.0.8", @@ -4838,6 +6311,18 @@ "browserslist": ">= 4.21.0" } }, + "node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/v8-to-istanbul": { "version": "9.2.0", "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz", @@ -5421,57 +6906,763 @@ "node": ">=12" } }, - "node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true, - "engines": { - "node": ">=12" + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/youch": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/youch/-/youch-3.3.3.tgz", + "integrity": "sha512-qSFXUk3UZBLfggAW3dJKg0BMblG5biqSF8M34E06o5CSsZtH92u9Hqmj2RzGiHDi64fhe83+4tENFP2DB6t6ZA==", + "dev": true, + "dependencies": { + "cookie": "^0.5.0", + "mustache": "^4.2.0", + "stacktracey": "^2.1.8" + } + }, + "node_modules/zod": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.22.4.tgz", + "integrity": "sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + } + }, + "dependencies": { + "@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "@aws-crypto/crc32": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-3.0.0.tgz", + "integrity": "sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA==", + "requires": { + "@aws-crypto/util": "^3.0.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-crypto/crc32c": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/crc32c/-/crc32c-3.0.0.tgz", + "integrity": "sha512-ENNPPManmnVJ4BTXlOjAgD7URidbAznURqD0KvfREyc4o20DPYdEldU1f5cQ7Jbj0CJJSPaMIk/9ZshdB3210w==", + "requires": { + "@aws-crypto/util": "^3.0.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-crypto/ie11-detection": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/ie11-detection/-/ie11-detection-3.0.0.tgz", + "integrity": "sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q==", + "requires": { + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-crypto/sha1-browser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha1-browser/-/sha1-browser-3.0.0.tgz", + "integrity": "sha512-NJth5c997GLHs6nOYTzFKTbYdMNA6/1XlKVgnZoaZcQ7z7UJlOgj2JdbHE8tiYLS3fzXNCguct77SPGat2raSw==", + "requires": { + "@aws-crypto/ie11-detection": "^3.0.0", + "@aws-crypto/supports-web-crypto": "^3.0.0", + "@aws-crypto/util": "^3.0.0", + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-locate-window": "^3.0.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-crypto/sha256-browser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-3.0.0.tgz", + "integrity": "sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ==", + "requires": { + "@aws-crypto/ie11-detection": "^3.0.0", + "@aws-crypto/sha256-js": "^3.0.0", + "@aws-crypto/supports-web-crypto": "^3.0.0", + "@aws-crypto/util": "^3.0.0", + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-locate-window": "^3.0.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-crypto/sha256-js": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-3.0.0.tgz", + "integrity": "sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ==", + "requires": { + "@aws-crypto/util": "^3.0.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-crypto/supports-web-crypto": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-3.0.0.tgz", + "integrity": "sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg==", + "requires": { + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-crypto/util": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-3.0.0.tgz", + "integrity": "sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w==", + "requires": { + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@aws-sdk/client-s3": { + "version": "3.583.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.583.0.tgz", + "integrity": "sha512-pS7wncugSuIQ8RgtRIE9Dystdmd3mMnjfjiO1iA1UhGXkyAgoJzQ4jH0r+5X+eWmYHYQcfy9fUQXT2gqV3t9GA==", + "requires": { + "@aws-crypto/sha1-browser": "3.0.0", + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/client-sso-oidc": "3.583.0", + "@aws-sdk/client-sts": "3.583.0", + "@aws-sdk/core": "3.582.0", + "@aws-sdk/credential-provider-node": "3.583.0", + "@aws-sdk/middleware-bucket-endpoint": "3.577.0", + "@aws-sdk/middleware-expect-continue": "3.577.0", + "@aws-sdk/middleware-flexible-checksums": "3.577.0", + "@aws-sdk/middleware-host-header": "3.577.0", + "@aws-sdk/middleware-location-constraint": "3.577.0", + "@aws-sdk/middleware-logger": "3.577.0", + "@aws-sdk/middleware-recursion-detection": "3.577.0", + "@aws-sdk/middleware-sdk-s3": "3.582.0", + "@aws-sdk/middleware-signing": "3.577.0", + "@aws-sdk/middleware-ssec": "3.577.0", + "@aws-sdk/middleware-user-agent": "3.583.0", + "@aws-sdk/region-config-resolver": "3.577.0", + "@aws-sdk/signature-v4-multi-region": "3.582.0", + "@aws-sdk/types": "3.577.0", + "@aws-sdk/util-endpoints": "3.583.0", + "@aws-sdk/util-user-agent-browser": "3.577.0", + "@aws-sdk/util-user-agent-node": "3.577.0", + "@aws-sdk/xml-builder": "3.575.0", + "@smithy/config-resolver": "^3.0.0", + "@smithy/core": "^2.0.1", + "@smithy/eventstream-serde-browser": "^3.0.0", + "@smithy/eventstream-serde-config-resolver": "^3.0.0", + "@smithy/eventstream-serde-node": "^3.0.0", + "@smithy/fetch-http-handler": "^3.0.1", + "@smithy/hash-blob-browser": "^3.0.0", + "@smithy/hash-node": "^3.0.0", + "@smithy/hash-stream-node": "^3.0.0", + "@smithy/invalid-dependency": "^3.0.0", + "@smithy/md5-js": "^3.0.0", + "@smithy/middleware-content-length": "^3.0.0", + "@smithy/middleware-endpoint": "^3.0.0", + "@smithy/middleware-retry": "^3.0.1", + "@smithy/middleware-serde": "^3.0.0", + "@smithy/middleware-stack": "^3.0.0", + "@smithy/node-config-provider": "^3.0.0", + "@smithy/node-http-handler": "^3.0.0", + "@smithy/protocol-http": "^4.0.0", + "@smithy/smithy-client": "^3.0.1", + "@smithy/types": "^3.0.0", + "@smithy/url-parser": "^3.0.0", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.1", + "@smithy/util-defaults-mode-node": "^3.0.1", + "@smithy/util-endpoints": "^2.0.0", + "@smithy/util-retry": "^3.0.0", + "@smithy/util-stream": "^3.0.1", + "@smithy/util-utf8": "^3.0.0", + "@smithy/util-waiter": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "@aws-sdk/client-sso": { + "version": "3.583.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.583.0.tgz", + "integrity": "sha512-FNJ2MmiBtZZwgkj4+GLVrzqwmD6D8FBptrFZk7PnGkSf7v1Q8txYNI6gY938RRhYJ4lBW4cNbhPvWoDxAl90Hw==", + "requires": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/core": "3.582.0", + "@aws-sdk/middleware-host-header": "3.577.0", + "@aws-sdk/middleware-logger": "3.577.0", + "@aws-sdk/middleware-recursion-detection": "3.577.0", + "@aws-sdk/middleware-user-agent": "3.583.0", + "@aws-sdk/region-config-resolver": "3.577.0", + "@aws-sdk/types": "3.577.0", + "@aws-sdk/util-endpoints": "3.583.0", + "@aws-sdk/util-user-agent-browser": "3.577.0", + "@aws-sdk/util-user-agent-node": "3.577.0", + "@smithy/config-resolver": "^3.0.0", + "@smithy/core": "^2.0.1", + "@smithy/fetch-http-handler": "^3.0.1", + "@smithy/hash-node": "^3.0.0", + "@smithy/invalid-dependency": "^3.0.0", + "@smithy/middleware-content-length": "^3.0.0", + "@smithy/middleware-endpoint": "^3.0.0", + "@smithy/middleware-retry": "^3.0.1", + "@smithy/middleware-serde": "^3.0.0", + "@smithy/middleware-stack": "^3.0.0", + "@smithy/node-config-provider": "^3.0.0", + "@smithy/node-http-handler": "^3.0.0", + "@smithy/protocol-http": "^4.0.0", + "@smithy/smithy-client": "^3.0.1", + "@smithy/types": "^3.0.0", + "@smithy/url-parser": "^3.0.0", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.1", + "@smithy/util-defaults-mode-node": "^3.0.1", + "@smithy/util-endpoints": "^2.0.0", + "@smithy/util-middleware": "^3.0.0", + "@smithy/util-retry": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "@aws-sdk/client-sso-oidc": { + "version": "3.583.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.583.0.tgz", + "integrity": "sha512-LO3wmrFXPi2kNE46lD1XATfRrvdNxXd4DlTFouoWmr7lvqoUkcbmtkV2r/XChZA2z0HiDauphC1e8b8laJVeSg==", + "requires": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/client-sts": "3.583.0", + "@aws-sdk/core": "3.582.0", + "@aws-sdk/credential-provider-node": "3.583.0", + "@aws-sdk/middleware-host-header": "3.577.0", + "@aws-sdk/middleware-logger": "3.577.0", + "@aws-sdk/middleware-recursion-detection": "3.577.0", + "@aws-sdk/middleware-user-agent": "3.583.0", + "@aws-sdk/region-config-resolver": "3.577.0", + "@aws-sdk/types": "3.577.0", + "@aws-sdk/util-endpoints": "3.583.0", + "@aws-sdk/util-user-agent-browser": "3.577.0", + "@aws-sdk/util-user-agent-node": "3.577.0", + "@smithy/config-resolver": "^3.0.0", + "@smithy/core": "^2.0.1", + "@smithy/fetch-http-handler": "^3.0.1", + "@smithy/hash-node": "^3.0.0", + "@smithy/invalid-dependency": "^3.0.0", + "@smithy/middleware-content-length": "^3.0.0", + "@smithy/middleware-endpoint": "^3.0.0", + "@smithy/middleware-retry": "^3.0.1", + "@smithy/middleware-serde": "^3.0.0", + "@smithy/middleware-stack": "^3.0.0", + "@smithy/node-config-provider": "^3.0.0", + "@smithy/node-http-handler": "^3.0.0", + "@smithy/protocol-http": "^4.0.0", + "@smithy/smithy-client": "^3.0.1", + "@smithy/types": "^3.0.0", + "@smithy/url-parser": "^3.0.0", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.1", + "@smithy/util-defaults-mode-node": "^3.0.1", + "@smithy/util-endpoints": "^2.0.0", + "@smithy/util-middleware": "^3.0.0", + "@smithy/util-retry": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "@aws-sdk/client-sts": { + "version": "3.583.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.583.0.tgz", + "integrity": "sha512-xDMxiemPDWr9dY2Q4AyixkRnk/hvS6fs6OWxuVCz1WO47YhaAfOsEGAgQMgDLLaOfj/oLU5D14uTNBEPGh4rBA==", + "requires": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/client-sso-oidc": "3.583.0", + "@aws-sdk/core": "3.582.0", + "@aws-sdk/credential-provider-node": "3.583.0", + "@aws-sdk/middleware-host-header": "3.577.0", + "@aws-sdk/middleware-logger": "3.577.0", + "@aws-sdk/middleware-recursion-detection": "3.577.0", + "@aws-sdk/middleware-user-agent": "3.583.0", + "@aws-sdk/region-config-resolver": "3.577.0", + "@aws-sdk/types": "3.577.0", + "@aws-sdk/util-endpoints": "3.583.0", + "@aws-sdk/util-user-agent-browser": "3.577.0", + "@aws-sdk/util-user-agent-node": "3.577.0", + "@smithy/config-resolver": "^3.0.0", + "@smithy/core": "^2.0.1", + "@smithy/fetch-http-handler": "^3.0.1", + "@smithy/hash-node": "^3.0.0", + "@smithy/invalid-dependency": "^3.0.0", + "@smithy/middleware-content-length": "^3.0.0", + "@smithy/middleware-endpoint": "^3.0.0", + "@smithy/middleware-retry": "^3.0.1", + "@smithy/middleware-serde": "^3.0.0", + "@smithy/middleware-stack": "^3.0.0", + "@smithy/node-config-provider": "^3.0.0", + "@smithy/node-http-handler": "^3.0.0", + "@smithy/protocol-http": "^4.0.0", + "@smithy/smithy-client": "^3.0.1", + "@smithy/types": "^3.0.0", + "@smithy/url-parser": "^3.0.0", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.1", + "@smithy/util-defaults-mode-node": "^3.0.1", + "@smithy/util-endpoints": "^2.0.0", + "@smithy/util-middleware": "^3.0.0", + "@smithy/util-retry": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "@aws-sdk/core": { + "version": "3.582.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.582.0.tgz", + "integrity": "sha512-ofmD96IQc9g1dbyqlCyxu5fCG7kIl9p1NoN5+vGBUyLdbmPCV3Pdg99nRHYEJuv2MgGx5AUFGDPMHcqbJpnZIw==", + "requires": { + "@smithy/core": "^2.0.1", + "@smithy/protocol-http": "^4.0.0", + "@smithy/signature-v4": "^3.0.0", + "@smithy/smithy-client": "^3.0.1", + "@smithy/types": "^3.0.0", + "fast-xml-parser": "4.2.5", + "tslib": "^2.6.2" + } + }, + "@aws-sdk/credential-provider-env": { + "version": "3.577.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.577.0.tgz", + "integrity": "sha512-Jxu255j0gToMGEiqufP8ZtKI8HW90lOLjwJ3LrdlD/NLsAY0tOQf1fWc53u28hWmmNGMxmCrL2p66IOgMDhDUw==", + "requires": { + "@aws-sdk/types": "3.577.0", + "@smithy/property-provider": "^3.0.0", + "@smithy/types": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "@aws-sdk/credential-provider-http": { + "version": "3.582.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.582.0.tgz", + "integrity": "sha512-kGOUKw5ryPkDIYB69PjK3SicVLTbWB06ouFN2W1EvqUJpkQGPAUGzYcomKtt3mJaCTf/1kfoaHwARAl6KKSP8Q==", + "requires": { + "@aws-sdk/types": "3.577.0", + "@smithy/fetch-http-handler": "^3.0.1", + "@smithy/node-http-handler": "^3.0.0", + "@smithy/property-provider": "^3.0.0", + "@smithy/protocol-http": "^4.0.0", + "@smithy/smithy-client": "^3.0.1", + "@smithy/types": "^3.0.0", + "@smithy/util-stream": "^3.0.1", + "tslib": "^2.6.2" + } + }, + "@aws-sdk/credential-provider-ini": { + "version": "3.583.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.583.0.tgz", + "integrity": "sha512-8I0oWNg/yps6ctjhEeL/qJ9BIa/+xXP7RPDQqFKZ2zBkWbmLLOoMWXRvl8uKUBD6qCe+DGmcu9skfVXeXSesEQ==", + "requires": { + "@aws-sdk/credential-provider-env": "3.577.0", + "@aws-sdk/credential-provider-process": "3.577.0", + "@aws-sdk/credential-provider-sso": "3.583.0", + "@aws-sdk/credential-provider-web-identity": "3.577.0", + "@aws-sdk/types": "3.577.0", + "@smithy/credential-provider-imds": "^3.0.0", + "@smithy/property-provider": "^3.0.0", + "@smithy/shared-ini-file-loader": "^3.0.0", + "@smithy/types": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "@aws-sdk/credential-provider-node": { + "version": "3.583.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.583.0.tgz", + "integrity": "sha512-yBNypBXny7zJH85SzxDj8s1mbLXv9c/Vbq0qR3R3POj2idZ6ywB/qlIRC1XwBuv49Wvg8kA1wKXk3K3jrpcVIw==", + "requires": { + "@aws-sdk/credential-provider-env": "3.577.0", + "@aws-sdk/credential-provider-http": "3.582.0", + "@aws-sdk/credential-provider-ini": "3.583.0", + "@aws-sdk/credential-provider-process": "3.577.0", + "@aws-sdk/credential-provider-sso": "3.583.0", + "@aws-sdk/credential-provider-web-identity": "3.577.0", + "@aws-sdk/types": "3.577.0", + "@smithy/credential-provider-imds": "^3.0.0", + "@smithy/property-provider": "^3.0.0", + "@smithy/shared-ini-file-loader": "^3.0.0", + "@smithy/types": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "@aws-sdk/credential-provider-process": { + "version": "3.577.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.577.0.tgz", + "integrity": "sha512-Gin6BWtOiXxIgITrJ3Nwc+Y2P1uVT6huYR4EcbA/DJUPWyO0n9y5UFLewPvVbLkRn15JeEqErBLUrHclkiOKtw==", + "requires": { + "@aws-sdk/types": "3.577.0", + "@smithy/property-provider": "^3.0.0", + "@smithy/shared-ini-file-loader": "^3.0.0", + "@smithy/types": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "@aws-sdk/credential-provider-sso": { + "version": "3.583.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.583.0.tgz", + "integrity": "sha512-G/1EvL9tBezSiU+06tG4K/kOvFfPjnheT4JSXqjPM7+vjKzgp2jxp1J9MMd69zs4jVWon932zMeGgjrCplzMEg==", + "requires": { + "@aws-sdk/client-sso": "3.583.0", + "@aws-sdk/token-providers": "3.577.0", + "@aws-sdk/types": "3.577.0", + "@smithy/property-provider": "^3.0.0", + "@smithy/shared-ini-file-loader": "^3.0.0", + "@smithy/types": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "@aws-sdk/credential-provider-web-identity": { + "version": "3.577.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.577.0.tgz", + "integrity": "sha512-ZGHGNRaCtJJmszb9UTnC7izNCtRUttdPlLdMkh41KPS32vfdrBDHs1JrpbZijItRj1xKuOXsiYSXLAaHGcLh8Q==", + "requires": { + "@aws-sdk/types": "3.577.0", + "@smithy/property-provider": "^3.0.0", + "@smithy/types": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "@aws-sdk/middleware-bucket-endpoint": { + "version": "3.577.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.577.0.tgz", + "integrity": "sha512-twlkNX2VofM6kHXzDEiJOiYCc9tVABe5cbyxMArRWscIsCWG9mamPhC77ezG4XsN9dFEwVdxEYD5Crpm/5EUiw==", + "requires": { + "@aws-sdk/types": "3.577.0", + "@aws-sdk/util-arn-parser": "3.568.0", + "@smithy/node-config-provider": "^3.0.0", + "@smithy/protocol-http": "^4.0.0", + "@smithy/types": "^3.0.0", + "@smithy/util-config-provider": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "@aws-sdk/middleware-expect-continue": { + "version": "3.577.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.577.0.tgz", + "integrity": "sha512-6dPp8Tv4F0of4un5IAyG6q++GrRrNQQ4P2NAMB1W0VO4JoEu1C8GievbbDLi88TFIFmtKpnHB0ODCzwnoe8JsA==", + "requires": { + "@aws-sdk/types": "3.577.0", + "@smithy/protocol-http": "^4.0.0", + "@smithy/types": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "@aws-sdk/middleware-flexible-checksums": { + "version": "3.577.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.577.0.tgz", + "integrity": "sha512-IHAUEipIfagjw92LV8SOSBiCF7ZnqfHcw14IkcZW2/mfrCy1Fh/k40MoS/t3Tro2tQ91rgQPwUoSgB/QCi2Org==", + "requires": { + "@aws-crypto/crc32": "3.0.0", + "@aws-crypto/crc32c": "3.0.0", + "@aws-sdk/types": "3.577.0", + "@smithy/is-array-buffer": "^3.0.0", + "@smithy/protocol-http": "^4.0.0", + "@smithy/types": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "@aws-sdk/middleware-host-header": { + "version": "3.577.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.577.0.tgz", + "integrity": "sha512-9ca5MJz455CODIVXs0/sWmJm7t3QO4EUa1zf8pE8grLpzf0J94bz/skDWm37Pli13T3WaAQBHCTiH2gUVfCsWg==", + "requires": { + "@aws-sdk/types": "3.577.0", + "@smithy/protocol-http": "^4.0.0", + "@smithy/types": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "@aws-sdk/middleware-location-constraint": { + "version": "3.577.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.577.0.tgz", + "integrity": "sha512-DKPTD2D2s+t2QUo/IXYtVa/6Un8GZ+phSTBkyBNx2kfZz4Kwavhl/JJzSqTV3GfCXkVdFu7CrjoX7BZ6qWeTUA==", + "requires": { + "@aws-sdk/types": "3.577.0", + "@smithy/types": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "@aws-sdk/middleware-logger": { + "version": "3.577.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.577.0.tgz", + "integrity": "sha512-aPFGpGjTZcJYk+24bg7jT4XdIp42mFXSuPt49lw5KygefLyJM/sB0bKKqPYYivW0rcuZ9brQ58eZUNthrzYAvg==", + "requires": { + "@aws-sdk/types": "3.577.0", + "@smithy/types": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "@aws-sdk/middleware-recursion-detection": { + "version": "3.577.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.577.0.tgz", + "integrity": "sha512-pn3ZVEd2iobKJlR3H+bDilHjgRnNrQ6HMmK9ZzZw89Ckn3Dcbv48xOv4RJvu0aU8SDLl/SNCxppKjeLDTPGBNA==", + "requires": { + "@aws-sdk/types": "3.577.0", + "@smithy/protocol-http": "^4.0.0", + "@smithy/types": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "@aws-sdk/middleware-sdk-s3": { + "version": "3.582.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.582.0.tgz", + "integrity": "sha512-PJqQpLoLaZPRI4L/XZUeHkd9UVK8VAr9R38wv0osGeMTvzD9iwzzk0I2TtBqFda/5xEB1YgVYZwyqvmStXmttg==", + "requires": { + "@aws-sdk/types": "3.577.0", + "@aws-sdk/util-arn-parser": "3.568.0", + "@smithy/node-config-provider": "^3.0.0", + "@smithy/protocol-http": "^4.0.0", + "@smithy/signature-v4": "^3.0.0", + "@smithy/smithy-client": "^3.0.1", + "@smithy/types": "^3.0.0", + "@smithy/util-config-provider": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "@aws-sdk/middleware-signing": { + "version": "3.577.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.577.0.tgz", + "integrity": "sha512-QS/dh3+NqZbXtY0j/DZ867ogP413pG5cFGqBy9OeOhDMsolcwLrQbi0S0c621dc1QNq+er9ffaMhZ/aPkyXXIg==", + "requires": { + "@aws-sdk/types": "3.577.0", + "@smithy/property-provider": "^3.0.0", + "@smithy/protocol-http": "^4.0.0", + "@smithy/signature-v4": "^3.0.0", + "@smithy/types": "^3.0.0", + "@smithy/util-middleware": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "@aws-sdk/middleware-ssec": { + "version": "3.577.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.577.0.tgz", + "integrity": "sha512-i2BPJR+rp8xmRVIGc0h1kDRFcM2J9GnClqqpc+NLSjmYadlcg4mPklisz9HzwFVcRPJ5XcGf3U4BYs5G8+iTyg==", + "requires": { + "@aws-sdk/types": "3.577.0", + "@smithy/types": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "@aws-sdk/middleware-user-agent": { + "version": "3.583.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.583.0.tgz", + "integrity": "sha512-xVNXXXDWvBVI/AeVtSdA9SVumqxiZaESk/JpUn9GMkmtTKfter0Cweap+1iQ9j8bRAO0vNhmIkbcvdB1S4WVUw==", + "requires": { + "@aws-sdk/types": "3.577.0", + "@aws-sdk/util-endpoints": "3.583.0", + "@smithy/protocol-http": "^4.0.0", + "@smithy/types": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "@aws-sdk/region-config-resolver": { + "version": "3.577.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.577.0.tgz", + "integrity": "sha512-4ChCFACNwzqx/xjg3zgFcW8Ali6R9C95cFECKWT/7CUM1D0MGvkclSH2cLarmHCmJgU6onKkJroFtWp0kHhgyg==", + "requires": { + "@aws-sdk/types": "3.577.0", + "@smithy/node-config-provider": "^3.0.0", + "@smithy/types": "^3.0.0", + "@smithy/util-config-provider": "^3.0.0", + "@smithy/util-middleware": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "@aws-sdk/signature-v4-multi-region": { + "version": "3.582.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.582.0.tgz", + "integrity": "sha512-aFCOjjNqEX2l+V8QjOWy5F7CtHIC/RlYdBuv3No6yxn+pMvVUUe6zdMk2yHWcudVpHWsyvcZzAUBliAPeFLPsQ==", + "requires": { + "@aws-sdk/middleware-sdk-s3": "3.582.0", + "@aws-sdk/types": "3.577.0", + "@smithy/protocol-http": "^4.0.0", + "@smithy/signature-v4": "^3.0.0", + "@smithy/types": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "@aws-sdk/token-providers": { + "version": "3.577.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.577.0.tgz", + "integrity": "sha512-0CkIZpcC3DNQJQ1hDjm2bdSy/Xjs7Ny5YvSsacasGOkNfk+FdkiQy6N67bZX3Zbc9KIx+Nz4bu3iDeNSNplnnQ==", + "requires": { + "@aws-sdk/types": "3.577.0", + "@smithy/property-provider": "^3.0.0", + "@smithy/shared-ini-file-loader": "^3.0.0", + "@smithy/types": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "@aws-sdk/types": { + "version": "3.577.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.577.0.tgz", + "integrity": "sha512-FT2JZES3wBKN/alfmhlo+3ZOq/XJ0C7QOZcDNrpKjB0kqYoKjhVKZ/Hx6ArR0czkKfHzBBEs6y40ebIHx2nSmA==", + "requires": { + "@smithy/types": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "@aws-sdk/util-arn-parser": { + "version": "3.568.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.568.0.tgz", + "integrity": "sha512-XUKJWWo+KOB7fbnPP0+g/o5Ulku/X53t7i/h+sPHr5xxYTJJ9CYnbToo95mzxe7xWvkLrsNtJ8L+MnNn9INs2w==", + "requires": { + "tslib": "^2.6.2" + } + }, + "@aws-sdk/util-endpoints": { + "version": "3.583.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.583.0.tgz", + "integrity": "sha512-ZC9mb2jq6BFXPYsUsD2tmYcnlmd+9PGNwnFNn8jk4abna5Jjk2wDknN81ybktmBR5ttN9W8ugmktuKtvAMIDCQ==", + "requires": { + "@aws-sdk/types": "3.577.0", + "@smithy/types": "^3.0.0", + "@smithy/util-endpoints": "^2.0.0", + "tslib": "^2.6.2" + } + }, + "@aws-sdk/util-locate-window": { + "version": "3.568.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.568.0.tgz", + "integrity": "sha512-3nh4TINkXYr+H41QaPelCceEB2FXP3fxp93YZXB/kqJvX0U9j0N0Uk45gvsjmEPzG8XxkPEeLIfT2I1M7A6Lig==", + "requires": { + "tslib": "^2.6.2" } }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "@aws-sdk/util-user-agent-browser": { + "version": "3.577.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.577.0.tgz", + "integrity": "sha512-zEAzHgR6HWpZOH7xFgeJLc6/CzMcx4nxeQolZxVZoB5pPaJd3CjyRhZN0xXeZB0XIRCWmb4yJBgyiugXLNMkLA==", + "requires": { + "@aws-sdk/types": "3.577.0", + "@smithy/types": "^3.0.0", + "bowser": "^2.11.0", + "tslib": "^2.6.2" } }, - "node_modules/youch": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/youch/-/youch-3.3.3.tgz", - "integrity": "sha512-qSFXUk3UZBLfggAW3dJKg0BMblG5biqSF8M34E06o5CSsZtH92u9Hqmj2RzGiHDi64fhe83+4tENFP2DB6t6ZA==", - "dev": true, - "dependencies": { - "cookie": "^0.5.0", - "mustache": "^4.2.0", - "stacktracey": "^2.1.8" + "@aws-sdk/util-user-agent-node": { + "version": "3.577.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.577.0.tgz", + "integrity": "sha512-XqvtFjbSMtycZTWVwDe8DRWovuoMbA54nhUoZwVU6rW9OSD6NZWGR512BUGHFaWzW0Wg8++Dj10FrKTG2XtqfA==", + "requires": { + "@aws-sdk/types": "3.577.0", + "@smithy/node-config-provider": "^3.0.0", + "@smithy/types": "^3.0.0", + "tslib": "^2.6.2" } }, - "node_modules/zod": { - "version": "3.22.4", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.22.4.tgz", - "integrity": "sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/colinhacks" + "@aws-sdk/util-utf8-browser": { + "version": "3.259.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz", + "integrity": "sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==", + "requires": { + "tslib": "^2.3.1" } - } - }, - "dependencies": { - "@ampproject/remapping": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", - "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", - "dev": true, + }, + "@aws-sdk/xml-builder": { + "version": "3.575.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.575.0.tgz", + "integrity": "sha512-cWgAwmbFYNCFzPwxL705+lWps0F3ZvOckufd2KKoEZUmtpVw9/txUXNrPySUXSmRTSRhoatIMABNfStWR043bQ==", "requires": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" + "@smithy/types": "^3.0.0", + "tslib": "^2.6.2" } }, "@babel/code-frame": { @@ -6495,6 +8686,520 @@ "@sinonjs/commons": "^3.0.0" } }, + "@smithy/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-p6GlFGBt9K4MYLu72YuJ523NVR4A8oHlC5M2JO6OmQqN8kAc/uh1JqLE+FizTokrSJGg0CSvC+BrsmGzKtsZKA==", + "requires": { + "@smithy/types": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "@smithy/chunked-blob-reader": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader/-/chunked-blob-reader-3.0.0.tgz", + "integrity": "sha512-sbnURCwjF0gSToGlsBiAmd1lRCmSn72nu9axfJu5lIx6RUEgHu6GwTMbqCdhQSi0Pumcm5vFxsi9XWXb2mTaoA==", + "requires": { + "tslib": "^2.6.2" + } + }, + "@smithy/chunked-blob-reader-native": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-3.0.0.tgz", + "integrity": "sha512-VDkpCYW+peSuM4zJip5WDfqvg2Mo/e8yxOv3VF1m11y7B8KKMKVFtmZWDe36Fvk8rGuWrPZHHXZ7rR7uM5yWyg==", + "requires": { + "@smithy/util-base64": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "@smithy/config-resolver": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-3.0.0.tgz", + "integrity": "sha512-2GzOfADwYLQugYkKQhIyZyQlM05K+tMKvRnc6eFfZcpJGRfKoMUMYdPlBKmqHwQFXQKBrGV6cxL9oymWgDzvFw==", + "requires": { + "@smithy/node-config-provider": "^3.0.0", + "@smithy/types": "^3.0.0", + "@smithy/util-config-provider": "^3.0.0", + "@smithy/util-middleware": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "@smithy/core": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-2.0.1.tgz", + "integrity": "sha512-rcMkjvwxH/bER+oZUPR0yTA0ELD6m3A+d92+CFkdF6HJFCBB1bXo7P5pm21L66XwTN01B6bUhSCQ7cymWRD8zg==", + "requires": { + "@smithy/middleware-endpoint": "^3.0.0", + "@smithy/middleware-retry": "^3.0.1", + "@smithy/middleware-serde": "^3.0.0", + "@smithy/protocol-http": "^4.0.0", + "@smithy/smithy-client": "^3.0.1", + "@smithy/types": "^3.0.0", + "@smithy/util-middleware": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "@smithy/credential-provider-imds": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-3.0.0.tgz", + "integrity": "sha512-lfmBiFQcA3FsDAPxNfY0L7CawcWtbyWsBOHo34nF095728JLkBX4Y9q/VPPE2r7fqMVK+drmDigqE2/SSQeVRA==", + "requires": { + "@smithy/node-config-provider": "^3.0.0", + "@smithy/property-provider": "^3.0.0", + "@smithy/types": "^3.0.0", + "@smithy/url-parser": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "@smithy/eventstream-codec": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-3.0.0.tgz", + "integrity": "sha512-PUtyEA0Oik50SaEFCZ0WPVtF9tz/teze2fDptW6WRXl+RrEenH8UbEjudOz8iakiMl3lE3lCVqYf2Y+znL8QFQ==", + "requires": { + "@aws-crypto/crc32": "3.0.0", + "@smithy/types": "^3.0.0", + "@smithy/util-hex-encoding": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "@smithy/eventstream-serde-browser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-3.0.0.tgz", + "integrity": "sha512-NB7AFiPN4NxP/YCAnrvYR18z2/ZsiHiF7VtG30gshO9GbFrIb1rC8ep4NGpJSWrz6P64uhPXeo4M0UsCLnZKqw==", + "requires": { + "@smithy/eventstream-serde-universal": "^3.0.0", + "@smithy/types": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "@smithy/eventstream-serde-config-resolver": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-3.0.0.tgz", + "integrity": "sha512-RUQG3vQ3LX7peqqHAbmayhgrF5aTilPnazinaSGF1P0+tgM3vvIRWPHmlLIz2qFqB9LqFIxditxc8O2Z6psrRw==", + "requires": { + "@smithy/types": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "@smithy/eventstream-serde-node": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-3.0.0.tgz", + "integrity": "sha512-baRPdMBDMBExZXIUAoPGm/hntixjt/VFpU6+VmCyiYJYzRHRxoaI1MN+5XE+hIS8AJ2GCHLMFEIOLzq9xx1EgQ==", + "requires": { + "@smithy/eventstream-serde-universal": "^3.0.0", + "@smithy/types": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "@smithy/eventstream-serde-universal": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-3.0.0.tgz", + "integrity": "sha512-HNFfShmotWGeAoW4ujP8meV9BZavcpmerDbPIjkJbxKbN8RsUcpRQ/2OyIxWNxXNH2GWCAxuSB7ynmIGJlQ3Dw==", + "requires": { + "@smithy/eventstream-codec": "^3.0.0", + "@smithy/types": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "@smithy/fetch-http-handler": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-3.0.1.tgz", + "integrity": "sha512-uaH74i5BDj+rBwoQaXioKpI0SHBJFtOVwzrCpxZxphOW0ki5jhj7dXvDMYM2IJem8TpdFvS2iC08sjOblfFGFg==", + "requires": { + "@smithy/protocol-http": "^4.0.0", + "@smithy/querystring-builder": "^3.0.0", + "@smithy/types": "^3.0.0", + "@smithy/util-base64": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "@smithy/hash-blob-browser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-3.0.0.tgz", + "integrity": "sha512-/Wbpdg+bwJvW7lxR/zpWAc1/x/YkcqguuF2bAzkJrvXriZu1vm8r+PUdE4syiVwQg7PPR2dXpi3CLBb9qRDaVQ==", + "requires": { + "@smithy/chunked-blob-reader": "^3.0.0", + "@smithy/chunked-blob-reader-native": "^3.0.0", + "@smithy/types": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "@smithy/hash-node": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-3.0.0.tgz", + "integrity": "sha512-84qXstNemP3XS5jcof0el6+bDfjzuvhJPQTEfro3lgtbCtKgzPm3MgiS6ehXVPjeQ5+JS0HqmTz8f/RYfzHVxw==", + "requires": { + "@smithy/types": "^3.0.0", + "@smithy/util-buffer-from": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "@smithy/hash-stream-node": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-3.0.0.tgz", + "integrity": "sha512-J0i7de+EgXDEGITD4fxzmMX8CyCNETTIRXlxjMiNUvvu76Xn3GJ31wQR85ynlPk2wI1lqoknAFJaD1fiNDlbIA==", + "requires": { + "@smithy/types": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "@smithy/invalid-dependency": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-3.0.0.tgz", + "integrity": "sha512-F6wBBaEFgJzj0s4KUlliIGPmqXemwP6EavgvDqYwCH40O5Xr2iMHvS8todmGVZtuJCorBkXsYLyTu4PuizVq5g==", + "requires": { + "@smithy/types": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "@smithy/is-array-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", + "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", + "requires": { + "tslib": "^2.6.2" + } + }, + "@smithy/md5-js": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-3.0.0.tgz", + "integrity": "sha512-Tm0vrrVzjlD+6RCQTx7D3Ls58S3FUH1ZCtU1MIh/qQmaOo1H9lMN2as6CikcEwgattnA9SURSdoJJ27xMcEfMA==", + "requires": { + "@smithy/types": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "@smithy/middleware-content-length": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-3.0.0.tgz", + "integrity": "sha512-3C4s4d/iGobgCtk2tnWW6+zSTOBg1PRAm2vtWZLdriwTroFbbWNSr3lcyzHdrQHnEXYCC5K52EbpfodaIUY8sg==", + "requires": { + "@smithy/protocol-http": "^4.0.0", + "@smithy/types": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "@smithy/middleware-endpoint": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-3.0.0.tgz", + "integrity": "sha512-aXOAWztw/5qAfp0NcA2OWpv6ZI/E+Dh9mByif7i91D/0iyYNUcKvskmXiowKESFkuZ7PIMd3VOR4fTibZDs2OQ==", + "requires": { + "@smithy/middleware-serde": "^3.0.0", + "@smithy/node-config-provider": "^3.0.0", + "@smithy/shared-ini-file-loader": "^3.0.0", + "@smithy/types": "^3.0.0", + "@smithy/url-parser": "^3.0.0", + "@smithy/util-middleware": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "@smithy/middleware-retry": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-3.0.1.tgz", + "integrity": "sha512-hBhSEuL841FhJBK/19WpaGk5YWSzFk/P2UaVjANGKRv3eYNO8Y1lANWgqnuPWjOyCEWMPr58vELFDWpxvRKANw==", + "requires": { + "@smithy/node-config-provider": "^3.0.0", + "@smithy/protocol-http": "^4.0.0", + "@smithy/service-error-classification": "^3.0.0", + "@smithy/smithy-client": "^3.0.1", + "@smithy/types": "^3.0.0", + "@smithy/util-middleware": "^3.0.0", + "@smithy/util-retry": "^3.0.0", + "tslib": "^2.6.2", + "uuid": "^9.0.1" + } + }, + "@smithy/middleware-serde": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-3.0.0.tgz", + "integrity": "sha512-I1vKG1foI+oPgG9r7IMY1S+xBnmAn1ISqployvqkwHoSb8VPsngHDTOgYGYBonuOKndaWRUGJZrKYYLB+Ane6w==", + "requires": { + "@smithy/types": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "@smithy/middleware-stack": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-3.0.0.tgz", + "integrity": "sha512-+H0jmyfAyHRFXm6wunskuNAqtj7yfmwFB6Fp37enytp2q047/Od9xetEaUbluyImOlGnGpaVGaVfjwawSr+i6Q==", + "requires": { + "@smithy/types": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "@smithy/node-config-provider": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-3.0.0.tgz", + "integrity": "sha512-buqfaSdDh0zo62EPLf8rGDvcpKwGpO5ho4bXS2cdFhlOta7tBkWJt+O5uiaAeICfIOfPclNOndshDNSanX2X9g==", + "requires": { + "@smithy/property-provider": "^3.0.0", + "@smithy/shared-ini-file-loader": "^3.0.0", + "@smithy/types": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "@smithy/node-http-handler": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.0.0.tgz", + "integrity": "sha512-3trD4r7NOMygwLbUJo4eodyQuypAWr7uvPnebNJ9a70dQhVn+US8j/lCnvoJS6BXfZeF7PkkkI0DemVJw+n+eQ==", + "requires": { + "@smithy/abort-controller": "^3.0.0", + "@smithy/protocol-http": "^4.0.0", + "@smithy/querystring-builder": "^3.0.0", + "@smithy/types": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "@smithy/property-provider": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.0.0.tgz", + "integrity": "sha512-LmbPgHBswdXCrkWWuUwBm9w72S2iLWyC/5jet9/Y9cGHtzqxi+GVjfCfahkvNV4KXEwgnH8EMpcrD9RUYe0eLQ==", + "requires": { + "@smithy/types": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "@smithy/protocol-http": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.0.0.tgz", + "integrity": "sha512-qOQZOEI2XLWRWBO9AgIYuHuqjZ2csyr8/IlgFDHDNuIgLAMRx2Bl8ck5U5D6Vh9DPdoaVpuzwWMa0xcdL4O/AQ==", + "requires": { + "@smithy/types": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "@smithy/querystring-builder": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-3.0.0.tgz", + "integrity": "sha512-bW8Fi0NzyfkE0TmQphDXr1AmBDbK01cA4C1Z7ggwMAU5RDz5AAv/KmoRwzQAS0kxXNf/D2ALTEgwK0U2c4LtRg==", + "requires": { + "@smithy/types": "^3.0.0", + "@smithy/util-uri-escape": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "@smithy/querystring-parser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-3.0.0.tgz", + "integrity": "sha512-UzHwthk0UEccV4dHzPySnBy34AWw3V9lIqUTxmozQ+wPDAO9csCWMfOLe7V9A2agNYy7xE+Pb0S6K/J23JSzfQ==", + "requires": { + "@smithy/types": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "@smithy/service-error-classification": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-3.0.0.tgz", + "integrity": "sha512-3BsBtOUt2Gsnc3X23ew+r2M71WwtpHfEDGhHYHSDg6q1t8FrWh15jT25DLajFV1H+PpxAJ6gqe9yYeRUsmSdFA==", + "requires": { + "@smithy/types": "^3.0.0" + } + }, + "@smithy/shared-ini-file-loader": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.0.0.tgz", + "integrity": "sha512-REVw6XauXk8xE4zo5aGL7Rz4ywA8qNMUn8RtWeTRQsgAlmlvbJ7CEPBcaXU2NDC3AYBgYAXrGyWD8XrN8UGDog==", + "requires": { + "@smithy/types": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "@smithy/signature-v4": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-3.0.0.tgz", + "integrity": "sha512-kXFOkNX+BQHe2qnLxpMEaCRGap9J6tUGLzc3A9jdn+nD4JdMwCKTJ+zFwQ20GkY+mAXGatyTw3HcoUlR39HwmA==", + "requires": { + "@smithy/is-array-buffer": "^3.0.0", + "@smithy/types": "^3.0.0", + "@smithy/util-hex-encoding": "^3.0.0", + "@smithy/util-middleware": "^3.0.0", + "@smithy/util-uri-escape": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "@smithy/smithy-client": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.0.1.tgz", + "integrity": "sha512-KAiFY4Y4jdHxR+4zerH/VBhaFKM8pbaVmJZ/CWJRwtM/CmwzTfXfvYwf6GoUwiHepdv+lwiOXCuOl6UBDUEINw==", + "requires": { + "@smithy/middleware-endpoint": "^3.0.0", + "@smithy/middleware-stack": "^3.0.0", + "@smithy/protocol-http": "^4.0.0", + "@smithy/types": "^3.0.0", + "@smithy/util-stream": "^3.0.1", + "tslib": "^2.6.2" + } + }, + "@smithy/types": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.0.0.tgz", + "integrity": "sha512-VvWuQk2RKFuOr98gFhjca7fkBS+xLLURT8bUjk5XQoV0ZLm7WPwWPPY3/AwzTLuUBDeoKDCthfe1AsTUWaSEhw==", + "requires": { + "tslib": "^2.6.2" + } + }, + "@smithy/url-parser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-3.0.0.tgz", + "integrity": "sha512-2XLazFgUu+YOGHtWihB3FSLAfCUajVfNBXGGYjOaVKjLAuAxx3pSBY3hBgLzIgB17haf59gOG3imKqTy8mcrjw==", + "requires": { + "@smithy/querystring-parser": "^3.0.0", + "@smithy/types": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "@smithy/util-base64": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-3.0.0.tgz", + "integrity": "sha512-Kxvoh5Qtt0CDsfajiZOCpJxgtPHXOKwmM+Zy4waD43UoEMA+qPxxa98aE/7ZhdnBFZFXMOiBR5xbcaMhLtznQQ==", + "requires": { + "@smithy/util-buffer-from": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "@smithy/util-body-length-browser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-3.0.0.tgz", + "integrity": "sha512-cbjJs2A1mLYmqmyVl80uoLTJhAcfzMOyPgjwAYusWKMdLeNtzmMz9YxNl3/jRLoxSS3wkqkf0jwNdtXWtyEBaQ==", + "requires": { + "tslib": "^2.6.2" + } + }, + "@smithy/util-body-length-node": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-3.0.0.tgz", + "integrity": "sha512-Tj7pZ4bUloNUP6PzwhN7K386tmSmEET9QtQg0TgdNOnxhZvCssHji+oZTUIuzxECRfG8rdm2PMw2WCFs6eIYkA==", + "requires": { + "tslib": "^2.6.2" + } + }, + "@smithy/util-buffer-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", + "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", + "requires": { + "@smithy/is-array-buffer": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "@smithy/util-config-provider": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-3.0.0.tgz", + "integrity": "sha512-pbjk4s0fwq3Di/ANL+rCvJMKM5bzAQdE5S/6RL5NXgMExFAi6UgQMPOm5yPaIWPpr+EOXKXRonJ3FoxKf4mCJQ==", + "requires": { + "tslib": "^2.6.2" + } + }, + "@smithy/util-defaults-mode-browser": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.1.tgz", + "integrity": "sha512-nW5kEzdJn1Bn5TF+gOPHh2rcPli8JU9vSSXLbfg7uPnfR1TMRQqs9zlYRhIb87NeSxIbpdXOI94tvXSy+fvDYg==", + "requires": { + "@smithy/property-provider": "^3.0.0", + "@smithy/smithy-client": "^3.0.1", + "@smithy/types": "^3.0.0", + "bowser": "^2.11.0", + "tslib": "^2.6.2" + } + }, + "@smithy/util-defaults-mode-node": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.1.tgz", + "integrity": "sha512-TFk+Qb+elLc/MOhtSp+50fstyfZ6avQbgH2d96xUBpeScu+Al9elxv+UFAjaTHe0HQe5n+wem8ZLpXvU8lwV6Q==", + "requires": { + "@smithy/config-resolver": "^3.0.0", + "@smithy/credential-provider-imds": "^3.0.0", + "@smithy/node-config-provider": "^3.0.0", + "@smithy/property-provider": "^3.0.0", + "@smithy/smithy-client": "^3.0.1", + "@smithy/types": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "@smithy/util-endpoints": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-2.0.0.tgz", + "integrity": "sha512-+exaXzEY3DNt2qtA2OtRNSDlVrE4p32j1JSsQkzA5AdP0YtJNjkYbYhJxkFmPYcjI1abuwopOZCwUmv682QkiQ==", + "requires": { + "@smithy/node-config-provider": "^3.0.0", + "@smithy/types": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "@smithy/util-hex-encoding": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-3.0.0.tgz", + "integrity": "sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ==", + "requires": { + "tslib": "^2.6.2" + } + }, + "@smithy/util-middleware": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-3.0.0.tgz", + "integrity": "sha512-q5ITdOnV2pXHSVDnKWrwgSNTDBAMHLptFE07ua/5Ty5WJ11bvr0vk2a7agu7qRhrCFRQlno5u3CneU5EELK+DQ==", + "requires": { + "@smithy/types": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "@smithy/util-retry": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-3.0.0.tgz", + "integrity": "sha512-nK99bvJiziGv/UOKJlDvFF45F00WgPLKVIGUfAK+mDhzVN2hb/S33uW2Tlhg5PVBoqY7tDVqL0zmu4OxAHgo9g==", + "requires": { + "@smithy/service-error-classification": "^3.0.0", + "@smithy/types": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "@smithy/util-stream": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-3.0.1.tgz", + "integrity": "sha512-7F7VNNhAsfMRA8I986YdOY5fE0/T1/ZjFF6OLsqkvQVNP3vZ/szYDfGCyphb7ioA09r32K/0qbSFfNFU68aSzA==", + "requires": { + "@smithy/fetch-http-handler": "^3.0.1", + "@smithy/node-http-handler": "^3.0.0", + "@smithy/types": "^3.0.0", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-buffer-from": "^3.0.0", + "@smithy/util-hex-encoding": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "@smithy/util-uri-escape": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-3.0.0.tgz", + "integrity": "sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg==", + "requires": { + "tslib": "^2.6.2" + } + }, + "@smithy/util-utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", + "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", + "requires": { + "@smithy/util-buffer-from": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "@smithy/util-waiter": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-3.0.0.tgz", + "integrity": "sha512-+fEXJxGDLCoqRKVSmo0auGxaqbiCo+8oph+4auefYjaNxjOLKSY2MxVQfRzo65PaZv4fr+5lWg+au7vSuJJ/zw==", + "requires": { + "@smithy/abort-controller": "^3.0.0", + "@smithy/types": "^3.0.0", + "tslib": "^2.6.2" + } + }, "@types/babel__core": { "version": "7.20.5", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", @@ -6787,6 +9492,11 @@ "integrity": "sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g==", "dev": true }, + "bowser": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", + "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==" + }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -7238,6 +9948,14 @@ "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", "dev": true }, + "fast-xml-parser": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.2.5.tgz", + "integrity": "sha512-B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g==", + "requires": { + "strnum": "^1.0.5" + } + }, "fb-watchman": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", @@ -8789,6 +11507,11 @@ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true }, + "strnum": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", + "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==" + }, "superagent": { "version": "8.1.2", "resolved": "https://registry.npmjs.org/superagent/-/superagent-8.1.2.tgz", @@ -8899,8 +11622,7 @@ "tslib": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "type-detect": { "version": "4.0.8", @@ -8945,6 +11667,11 @@ "picocolors": "^1.0.0" } }, + "uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==" + }, "v8-to-istanbul": { "version": "9.2.0", "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz", diff --git a/package.json b/package.json index d44895d..0ab9295 100644 --- a/package.json +++ b/package.json @@ -6,10 +6,13 @@ "storage", "database", "db", + "json", + "lowdb", "edge", - "r2", - "cloudflare", - "flat" + "s3", + "aws", + "R2", + "cloudflare" ], "main": "lib/lowstorage.js", "type": "module", @@ -43,5 +46,8 @@ "supertest": "^6.3.4", "typescript": "^5.3.3", "wrangler": "^3.31.0" + }, + "dependencies": { + "@aws-sdk/client-s3": "^3.583.0" } } diff --git a/src/lowstorage.js b/src/lowstorage.js index 37c0db9..ec5706d 100644 --- a/src/lowstorage.js +++ b/src/lowstorage.js @@ -1,41 +1,90 @@ -const _checkArgs = (...args) => { - for (const arg of args) { - if (typeof arg !== 'object' || arg === null) { - throw new Error('lowstorage: missing args or args not an object'); - } - } -}; +'use strict'; + +import { S3Client, ListObjectsV2Command, GetObjectCommand, PutObjectCommand, DeleteObjectCommand } from '@aws-sdk/client-s3'; + +// const _checkArgs = (...args) => { +// for (const arg of args) { +// if (typeof arg !== 'object' || arg === null) { +// throw new Error('lowstorage: missing args or args not an object'); +// } +// } +// }; + +// const isAWS = !!(process.env.LAMBDA_TASK_ROOT || process.env.AWS_EXECUTION_ENV); +// const isNode = typeof process !== 'undefined' && process.versions != null && process.versions.node != null; +const _hasCrypto = typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function'; +const _generateUUID = !!_hasCrypto ? () => crypto.randomUUID() : () => import('node:crypto').then((module) => module.randomUUID()); const _matchesQuery = (document, query) => { return Object.keys(query).every((key) => document[key] === query[key]); }; -const _generateUUID = () => { - // using the crypto implementation by Cloudflare -> https://developers.cloudflare.com/workers/runtime-apis/web-crypto/ - return crypto.randomUUID(); -}; +const streamToString = (stream) => + new Promise((resolve, reject) => { + const chunks = []; + stream.on('data', (chunk) => chunks.push(chunk)); + stream.on('error', reject); + stream.on('end', () => resolve(Buffer.concat(chunks).toString('utf-8'))); + }); + +class S3Store { + constructor({ endPoint, region, useSSL, accessKeyId, secretAccessKey, bucketName }) { + this.client = new S3Client({ + endpoint: endPoint, + region: region, + credentials: { + accessKeyId: accessKeyId, + secretAccessKey: secretAccessKey, + }, + forcePathStyle: true, + }); + this.bucketName = bucketName; + } + + async get(key) { + try { + const command = new GetObjectCommand({ + Bucket: this.bucketName, + Key: key, + }); + const response = await this.client.send(command); + const bodyContents = await streamToString(response.Body); + return JSON.parse(bodyContents); + } catch (error) { + if (error.name === 'NoSuchKey') { + return null; + } + throw error; + } + } -const _hasMethod = (obj, name) => { - return typeof obj !== 'undefined' && obj !== null && typeof obj[name] === 'function'; -}; + async put(key, data) { + const command = new PutObjectCommand({ + Bucket: this.bucketName, + Key: key, + Body: data, + ContentType: 'application/json', + }); + await this.client.send(command); + } -const _isR2Store = (obj) => { - return ( - typeof obj === 'object' && - obj !== null && - _hasMethod(obj, 'get') && - _hasMethod(obj, 'put') && - _hasMethod(obj, 'delete') && - _hasMethod(obj, 'list') - ); -}; + async delete(key) { + const command = new DeleteObjectCommand({ + Bucket: this.bucketName, + Key: key, + }); + await this.client.send(command); + } -const _getStore = (env, storeName) => { - if (storeName && _isR2Store(env[storeName])) { - return env[storeName]; + async list(prefix = '') { + const command = new ListObjectsV2Command({ + Bucket: this.bucketName, + Prefix: prefix, + }); + const response = await this.client.send(command); + return response.Contents || []; } - throw new Error('lowstorage: no valid store found'); -}; +} class Collection { constructor(colName, store) { @@ -44,28 +93,15 @@ class Collection { } async _loadData() { - try { - const doc = await this._store.get(`${this._colName}/${this._colName}.json`); - if (doc) { - return doc.json(); - } - return []; - } catch (error) { - if (error.code === 'ENOENT') { - // File not found, create a new empty object - return []; - } else { - throw error; - } - } + const data = await this._store.get(`${this._colName}/${this._colName}.json`); + return data || []; } async _saveData(data) { const key = `${this._colName}/${this._colName}.json`; - return this._store.put(key, JSON.stringify(data)); + await this._store.put(key, JSON.stringify(data)); } - // Insert a single document or an array of documents async insert(doc) { if (!Array.isArray(doc)) { doc = [doc]; @@ -82,21 +118,18 @@ class Collection { return doc.length === 1 ? doc[0] : doc; } - // Find documents based on a query async find(query = {}, options = {}) { const data = await this._loadData(); const start = parseInt(options.skip, 10) || 0; - const end = parseInt(options.limit, 10) ? start + parseInt(options.limit, 10) : undefined; // If no limit is defined, slice to the end + const end = parseInt(options.limit, 10) ? start + parseInt(options.limit, 10) : undefined; const filteredData = data.filter((doc) => _matchesQuery(doc, query)).slice(start, end); return filteredData; } - // Find documents based on a query async findOne(query = {}) { return (await this.find(query))[0] || null; } - // Update documents based on a query async update(query = {}, update = {}) { const data = await this._loadData(); let updatedCount = 0; @@ -115,7 +148,6 @@ class Collection { return updatedCount; } - // Update a single document based on a query async updateOne(query = {}, update = {}) { const data = await this._loadData(); const docIndex = data.findIndex((doc) => _matchesQuery(doc, query)); @@ -128,7 +160,6 @@ class Collection { return 0; } - // Delete documents based on a query async delete(query = {}) { const data = await this._loadData(); const initialLength = data.length; @@ -150,33 +181,19 @@ class Collection { } class lowstorage { - constructor(env, storeName) { - _checkArgs(env); - this._store = _getStore(env, storeName); + constructor(config) { + // _checkArgs(config); + this._store = new S3Store(config); } + collection(colName) { return new Collection(colName, this._store); } - // this is similar to list all files unfortunatelly - - // it returns a list of "collections" but expect to have a .json file for each collection - // return names of collections async listCollections() { const listed = await this._store.list(); - let truncated = listed.truncated; - let cursor = truncated ? listed.cursor : undefined; - // this is a workaround for the list method not returning all the keys (default limit is 1000) - while (truncated) { - const next = await this._store.list({ - cursor: cursor, - }); - listed.objects.push(...next.objects); - truncated = next.truncated; - cursor = next.cursor; - } - const collections = listed.objects.filter((entry) => entry.key.endsWith('.json')); - // return only the collection name - return collections.map((entry) => entry.key.split('/')[0]); + const collections = listed.filter((entry) => entry.Key.endsWith('.json')); + return collections.map((entry) => entry.Key.split('/')[0]); } } From bb80e5360127cdd6097a00356606d0feb8ce7598 Mon Sep 17 00:00:00 2001 From: Jolly Good <1671375+good-lly@users.noreply.github.com> Date: Tue, 2 Jul 2024 22:09:35 +0200 Subject: [PATCH 02/18] rework, integrated avrojs and ultralight s3 [wip] --- README.md | 6 +- examples/package-lock.json | 432 +- examples/package.json | 12 +- examples/src/index.js | 73 - lib/lowstorage.js | 36 +- lib/lowstorage.js.map | 7 + package-lock.json | 12023 ----------------------------------- package.json | 31 +- src/helpers.js | 62 + src/lowstorage.js | 430 +- src/wip/lowstorage.ts | 275 - 11 files changed, 683 insertions(+), 12704 deletions(-) delete mode 100644 examples/src/index.js create mode 100644 lib/lowstorage.js.map delete mode 100644 package-lock.json create mode 100644 src/helpers.js delete mode 100644 src/wip/lowstorage.ts diff --git a/README.md b/README.md index ceede1c..8154929 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@
-> Simple, single-dependency (@aws-sdk based), object pseudo-database for S3-compatible storages, strongly inspired by lowdb 🤗(https://github.com/typicode/lowdb/).
![AWS S3](https://img.shields.io/badge/AWS%20S3-232F3E?style=for-the-badge&logo=amazon-aws&logoColor=white) ![Cloudflare R2](https://img.shields.io/badge/Cloudflare%20R2-F38020?style=for-the-badge&logo=Cloudflare&logoColor=white) [![GitHub issues](https://img.shields.io/github/issues/good-lly/lowstorage)](https://github.com/good-lly/lowstorage/issues/) [![GitHub license](https://img.shields.io/github/license/Naereen/StrapDown.js.svg)](https://github.com/good-lly/lowstorage/blob/master/LICENSE) Contributions welcome +> Simple, zero-dependency, object pseudo-database for S3-compatible storages, strongly inspired by lowdb 🤗(https://github.com/typicode/lowdb/).
![AWS S3](https://img.shields.io/badge/AWS%20S3-232F3E?style=for-the-badge&logo=amazon-aws&logoColor=white) ![Cloudflare R2](https://img.shields.io/badge/Cloudflare%20R2-F38020?style=for-the-badge&logo=Cloudflare&logoColor=white) [![GitHub issues](https://img.shields.io/github/issues/good-lly/lowstorage)](https://github.com/good-lly/lowstorage/issues/) [![GitHub license](https://img.shields.io/github/license/Naereen/StrapDown.js.svg)](https://github.com/good-lly/lowstorage/blob/master/LICENSE) Contributions welcome [[github](https://github.com/good-lly/lowstorage)] [[npm](https://www.npmjs.com/package/lowstorage)] @@ -22,13 +22,13 @@ Since version 2.0.0, `lowstorage` has undergone significant changes: - **Constructor Changes**: The constructor now accepts S3-compatible configuration instead of being tied to Cloudflare R2. -- **Support for Multiple Storages**: Now supports any S3-compatible storage like AWS S3, Cloudflare R2, Minio, Ceph, etc. +- **Support for Multiple Storages**: Now supports any S3-compatible storage like AWS S3, Cloudflare R2, Minio, Ceph, DigitalOcean Spaces, Google Cloud Storage, etc. (see [S3-compatible storages](#s3-compatible-storages)) If you are migrating from version 1.x.x, please review the new constructor parameters and usage examples below. ### Cloudflare R2 - S3 API Compatibility -R2 implements the S3 API to allow users and their applications to migrate with ease. When comparing to AWS S3, Cloudflare has removed some API operations’ features and added others. The S3 API operations are listed below with their current implementation status. Feature implementation is currently in progress. Refer back to this page for updates. The API is available via the `https://.r2.cloudflarestorage.com` endpoint. Find your account ID in the Cloudflare dashboard. +R2 uses the S3 API to allow users and their applications to migrate with ease. When comparing to AWS S3, Cloudflare has removed some API operations’ features and added others. The S3 API operations are listed below with their current implementation status. Feature implementation is currently in progress. Refer back to this page for updates. The API is available via the `https://.r2.cloudflarestorage.com` endpoint. Find your account ID in the Cloudflare dashboard. #### Bucket region diff --git a/examples/package-lock.json b/examples/package-lock.json index 445c28a..ae4a814 100644 --- a/examples/package-lock.json +++ b/examples/package-lock.json @@ -8,26 +8,29 @@ "name": "lowstorage-examples", "version": "0.0.1", "dependencies": { - "hono": "^4.2.7", - "lowstorage": "^0.0.1" + "hono": "^4.2.7" }, "devDependencies": { - "wrangler": "^3.22.1" + "@hono/node-server": "^1.11.2", + "wrangler": "^3.57.2" } }, "node_modules/@cloudflare/kv-asset-handler": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@cloudflare/kv-asset-handler/-/kv-asset-handler-0.2.0.tgz", - "integrity": "sha512-MVbXLbTcAotOPUj0pAMhVtJ+3/kFkwJqc5qNOleOZTv6QkZZABDMS21dSrSlVswEHwrpWC03e4fWytjqKvuE2A==", + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@cloudflare/kv-asset-handler/-/kv-asset-handler-0.3.2.tgz", + "integrity": "sha512-EeEjMobfuJrwoctj7FA1y1KEbM0+Q1xSjobIEyie9k4haVEBB7vkDvsasw1pM3rO39mL2akxIAzLMUAtrMHZhA==", "dev": true, "dependencies": { "mime": "^3.0.0" + }, + "engines": { + "node": ">=16.13" } }, "node_modules/@cloudflare/workerd-darwin-64": { - "version": "1.20231030.0", - "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-64/-/workerd-darwin-64-1.20231030.0.tgz", - "integrity": "sha512-J4PQ9utPxLya9yHdMMx3AZeC5M/6FxcoYw6jo9jbDDFTy+a4Gslqf4Im9We3aeOEdPXa3tgQHVQOSelJSZLhIw==", + "version": "1.20240524.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-64/-/workerd-darwin-64-1.20240524.0.tgz", + "integrity": "sha512-ATaXjefbTsrv4mpn4Fdua114RRDXcX5Ky+Mv+f4JTUllgalmqC4CYMN4jxRz9IpJU/fNMN8IEfvUyuJBAcl9Iw==", "cpu": [ "x64" ], @@ -41,9 +44,9 @@ } }, "node_modules/@cloudflare/workerd-darwin-arm64": { - "version": "1.20231030.0", - "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-arm64/-/workerd-darwin-arm64-1.20231030.0.tgz", - "integrity": "sha512-WSJJjm11Del4hSneiNB7wTXGtBXI4QMCH9l5qf4iT5PAW8cESGcCmdHtWDWDtGAAGcvmLT04KNvmum92vRKKQQ==", + "version": "1.20240524.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-arm64/-/workerd-darwin-arm64-1.20240524.0.tgz", + "integrity": "sha512-wnbsZI4CS0QPCd+wnBHQ40C28A/2Qo4ESi1YhE2735G3UNcc876MWksZhsubd+XH0XPIra6eNFqyw6wRMpQOXA==", "cpu": [ "arm64" ], @@ -57,9 +60,9 @@ } }, "node_modules/@cloudflare/workerd-linux-64": { - "version": "1.20231030.0", - "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-64/-/workerd-linux-64-1.20231030.0.tgz", - "integrity": "sha512-2HUeRTvoCC17fxE0qdBeR7J9dO8j4A8ZbdcvY8pZxdk+zERU6+N03RTbk/dQMU488PwiDvcC3zZqS4gwLfVT8g==", + "version": "1.20240524.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-64/-/workerd-linux-64-1.20240524.0.tgz", + "integrity": "sha512-E8mj+HPBryKwaJAiNsYzXtVjKCL0KvUBZbtxJxlWM4mLSQhT+uwGT3nydb/hFY59rZnQgZslw0oqEWht5TEYiQ==", "cpu": [ "x64" ], @@ -73,9 +76,9 @@ } }, "node_modules/@cloudflare/workerd-linux-arm64": { - "version": "1.20231030.0", - "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-arm64/-/workerd-linux-arm64-1.20231030.0.tgz", - "integrity": "sha512-4/GK5zHh+9JbUI6Z5xTCM0ZmpKKHk7vu9thmHjUxtz+o8Ne9DoD7DlDvXQWgMF6XGaTubDWyp3ttn+Qv8jDFuQ==", + "version": "1.20240524.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-arm64/-/workerd-linux-arm64-1.20240524.0.tgz", + "integrity": "sha512-/Fr1W671t2triNCDCBWdStxngnbUfZunZ/2e4kaMLzJDJLYDtYdmvOUCBDzUD4ssqmIMbn9RCQQ0U+CLEoqBqw==", "cpu": [ "arm64" ], @@ -89,9 +92,9 @@ } }, "node_modules/@cloudflare/workerd-windows-64": { - "version": "1.20231030.0", - "resolved": "https://registry.npmjs.org/@cloudflare/workerd-windows-64/-/workerd-windows-64-1.20231030.0.tgz", - "integrity": "sha512-fb/Jgj8Yqy3PO1jLhk7mTrHMkR8jklpbQFud6rL/aMAn5d6MQbaSrYOCjzkKGp0Zng8D2LIzSl+Fc0C9Sggxjg==", + "version": "1.20240524.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-windows-64/-/workerd-windows-64-1.20240524.0.tgz", + "integrity": "sha512-G+ThDEx57g9mAEKqhWnHaaJgpeGYtyhkmwM/BDpLqPks/rAY5YEfZbY4YL1pNk1kkcZDXGrwIsY8xe9Apf5JdA==", "cpu": [ "x64" ], @@ -491,18 +494,27 @@ } }, "node_modules/@fastify/busboy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.0.tgz", - "integrity": "sha512-+KpH+QxZU7O4675t3mnkQKcZZg56u+K/Ct2K+N2AZYNVK8kyeo/bI18tI8aPm3tvNNRyTWfj6s5tnGNlcbQRsA==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz", + "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==", "dev": true, "engines": { "node": ">=14" } }, + "node_modules/@hono/node-server": { + "version": "1.11.2", + "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-1.11.2.tgz", + "integrity": "sha512-JhX0nUC66GeDxpIdMKWDRMEwtQBa64CY907iAF1sYqb4m2p2PdSU7zkbnNhAZLg/6IjSlTuj6CF307JlBXVvpg==", + "dev": true, + "engines": { + "node": ">=18.14.1" + } + }, "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", - "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "dev": true, "engines": { "node": ">=6.0.0" @@ -555,9 +567,9 @@ } }, "node_modules/acorn-walk": { - "version": "8.3.1", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.1.tgz", - "integrity": "sha512-TgUZgYvqZprrl7YldZNoa9OciCAyZR+Ejm9eXzKCmjsF5IKp/wgQ7Z/ZpjpGTIUPwrHQIcYeI8qDh4PsEwxMbw==", + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", + "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==", "dev": true, "engines": { "node": ">=0.4.0" @@ -601,23 +613,17 @@ "dev": true }, "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "dependencies": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" } }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, "node_modules/capnp-ts": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/capnp-ts/-/capnp-ts-0.7.0.tgz", @@ -755,9 +761,9 @@ } }, "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "dependencies": { "to-regex-range": "^5.0.1" @@ -780,6 +786,15 @@ "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/get-source": { "version": "2.0.12", "resolved": "https://registry.npmjs.org/get-source/-/get-source-2.0.12.tgz", @@ -808,6 +823,18 @@ "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", "dev": true }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/hono": { "version": "4.2.7", "resolved": "https://registry.npmjs.org/hono/-/hono-4.2.7.tgz", @@ -828,6 +855,18 @@ "node": ">=8" } }, + "node_modules/is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "dev": true, + "dependencies": { + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -858,14 +897,6 @@ "node": ">=0.12.0" } }, - "node_modules/lowstorage": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/lowstorage/-/lowstorage-0.0.1.tgz", - "integrity": "sha512-QWugV6PiYC6xmV8OA4qHxKUzI64a7XD0Z+7Go7oE3vTsYRsC8IT4UMEX5oy1Ns24XU0taWiWh9qRDklqDiAeMg==", - "engines": { - "node": ">=16" - } - }, "node_modules/magic-string": { "version": "0.25.9", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", @@ -888,20 +919,20 @@ } }, "node_modules/miniflare": { - "version": "3.20231030.4", - "resolved": "https://registry.npmjs.org/miniflare/-/miniflare-3.20231030.4.tgz", - "integrity": "sha512-7MBz0ArLuDop1WJGZC6tFgN6c5MRyDOIlxbm3yp0TRBpvDS/KsTuWCQcCjsxN4QQ5zvL3JTkuIZbQzRRw/j6ow==", + "version": "3.20240524.0", + "resolved": "https://registry.npmjs.org/miniflare/-/miniflare-3.20240524.0.tgz", + "integrity": "sha512-RQAfpz7spI6gWlczeUYvJBgGyt0gNR2pYoCydgukCYZ+0bGfJl0yAiNFW62uH7uMZli/4juWPpQOBI5m7URoyA==", "dev": true, "dependencies": { + "@cspotcode/source-map-support": "0.8.1", "acorn": "^8.8.0", "acorn-walk": "^8.2.0", "capnp-ts": "^0.7.0", "exit-hook": "^2.2.1", "glob-to-regexp": "^0.4.1", - "source-map-support": "0.5.21", "stoppable": "^1.1.0", - "undici": "^5.22.1", - "workerd": "1.20231030.0", + "undici": "^5.28.2", + "workerd": "1.20240524.0", "ws": "^8.11.0", "youch": "^3.2.2", "zod": "^3.20.6" @@ -964,6 +995,12 @@ "node": ">=0.10.0" } }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, "node_modules/path-to-regexp": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.1.tgz", @@ -1000,6 +1037,23 @@ "node": ">=8.10.0" } }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/resolve.exports": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", @@ -1061,16 +1115,6 @@ "node": ">=0.10.0" } }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, "node_modules/sourcemap-codec": { "version": "1.4.8", "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", @@ -1098,6 +1142,18 @@ "npm": ">=6" } }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -1135,9 +1191,9 @@ "dev": true }, "node_modules/workerd": { - "version": "1.20231030.0", - "resolved": "https://registry.npmjs.org/workerd/-/workerd-1.20231030.0.tgz", - "integrity": "sha512-+FSW+d31f8RrjHanFf/R9A+Z0csf3OtsvzdPmAKuwuZm/5HrBv83cvG9fFeTxl7/nI6irUUXIRF9xcj/NomQzQ==", + "version": "1.20240524.0", + "resolved": "https://registry.npmjs.org/workerd/-/workerd-1.20240524.0.tgz", + "integrity": "sha512-LWLe5D8PVHBcqturmBbwgI71r7YPpIMYZoVEH6S4G35EqIJ55cb0n3FipoSyraoIfpcCxCFxX1K6WsRHbP3pFA==", "dev": true, "hasInstallScript": true, "bin": { @@ -1147,29 +1203,29 @@ "node": ">=16" }, "optionalDependencies": { - "@cloudflare/workerd-darwin-64": "1.20231030.0", - "@cloudflare/workerd-darwin-arm64": "1.20231030.0", - "@cloudflare/workerd-linux-64": "1.20231030.0", - "@cloudflare/workerd-linux-arm64": "1.20231030.0", - "@cloudflare/workerd-windows-64": "1.20231030.0" + "@cloudflare/workerd-darwin-64": "1.20240524.0", + "@cloudflare/workerd-darwin-arm64": "1.20240524.0", + "@cloudflare/workerd-linux-64": "1.20240524.0", + "@cloudflare/workerd-linux-arm64": "1.20240524.0", + "@cloudflare/workerd-windows-64": "1.20240524.0" } }, "node_modules/wrangler": { - "version": "3.22.1", - "resolved": "https://registry.npmjs.org/wrangler/-/wrangler-3.22.1.tgz", - "integrity": "sha512-fN7WOF6Ono/TV5V90PuJQNf0azS7B+5C/N/KRjqhlAIQBz+c0yLOGkF6kC/akxjr1yIAC9AzcPk9+OuTSq0C+g==", + "version": "3.57.2", + "resolved": "https://registry.npmjs.org/wrangler/-/wrangler-3.57.2.tgz", + "integrity": "sha512-QegYf0FW+4prlFKE9iHr1EGrCo8ejcGL9gaqEXrzQ0vbTdazykYbY0I5UpHFLNq2dIF9I/ifEoLRKr636tyHEw==", "dev": true, "dependencies": { - "@cloudflare/kv-asset-handler": "^0.2.0", - "@cspotcode/source-map-support": "0.8.1", + "@cloudflare/kv-asset-handler": "0.3.2", "@esbuild-plugins/node-globals-polyfill": "^0.2.3", "@esbuild-plugins/node-modules-polyfill": "^0.2.2", "blake3-wasm": "^2.1.5", "chokidar": "^3.5.3", "esbuild": "0.17.19", - "miniflare": "3.20231030.4", + "miniflare": "3.20240524.0", "nanoid": "^3.3.3", "path-to-regexp": "^6.2.0", + "resolve": "^1.22.8", "resolve.exports": "^2.0.2", "selfsigned": "^2.0.1", "source-map": "0.6.1", @@ -1184,12 +1240,20 @@ }, "optionalDependencies": { "fsevents": "~2.3.2" + }, + "peerDependencies": { + "@cloudflare/workers-types": "^4.20240524.0" + }, + "peerDependenciesMeta": { + "@cloudflare/workers-types": { + "optional": true + } } }, "node_modules/ws": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz", - "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==", + "version": "8.17.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.0.tgz", + "integrity": "sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==", "dev": true, "engines": { "node": ">=10.0.0" @@ -1225,9 +1289,9 @@ } }, "node_modules/zod": { - "version": "3.22.4", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.22.4.tgz", - "integrity": "sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==", + "version": "3.23.8", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.23.8.tgz", + "integrity": "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==", "dev": true, "funding": { "url": "https://github.com/sponsors/colinhacks" @@ -1236,46 +1300,46 @@ }, "dependencies": { "@cloudflare/kv-asset-handler": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@cloudflare/kv-asset-handler/-/kv-asset-handler-0.2.0.tgz", - "integrity": "sha512-MVbXLbTcAotOPUj0pAMhVtJ+3/kFkwJqc5qNOleOZTv6QkZZABDMS21dSrSlVswEHwrpWC03e4fWytjqKvuE2A==", + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@cloudflare/kv-asset-handler/-/kv-asset-handler-0.3.2.tgz", + "integrity": "sha512-EeEjMobfuJrwoctj7FA1y1KEbM0+Q1xSjobIEyie9k4haVEBB7vkDvsasw1pM3rO39mL2akxIAzLMUAtrMHZhA==", "dev": true, "requires": { "mime": "^3.0.0" } }, "@cloudflare/workerd-darwin-64": { - "version": "1.20231030.0", - "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-64/-/workerd-darwin-64-1.20231030.0.tgz", - "integrity": "sha512-J4PQ9utPxLya9yHdMMx3AZeC5M/6FxcoYw6jo9jbDDFTy+a4Gslqf4Im9We3aeOEdPXa3tgQHVQOSelJSZLhIw==", + "version": "1.20240524.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-64/-/workerd-darwin-64-1.20240524.0.tgz", + "integrity": "sha512-ATaXjefbTsrv4mpn4Fdua114RRDXcX5Ky+Mv+f4JTUllgalmqC4CYMN4jxRz9IpJU/fNMN8IEfvUyuJBAcl9Iw==", "dev": true, "optional": true }, "@cloudflare/workerd-darwin-arm64": { - "version": "1.20231030.0", - "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-arm64/-/workerd-darwin-arm64-1.20231030.0.tgz", - "integrity": "sha512-WSJJjm11Del4hSneiNB7wTXGtBXI4QMCH9l5qf4iT5PAW8cESGcCmdHtWDWDtGAAGcvmLT04KNvmum92vRKKQQ==", + "version": "1.20240524.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-arm64/-/workerd-darwin-arm64-1.20240524.0.tgz", + "integrity": "sha512-wnbsZI4CS0QPCd+wnBHQ40C28A/2Qo4ESi1YhE2735G3UNcc876MWksZhsubd+XH0XPIra6eNFqyw6wRMpQOXA==", "dev": true, "optional": true }, "@cloudflare/workerd-linux-64": { - "version": "1.20231030.0", - "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-64/-/workerd-linux-64-1.20231030.0.tgz", - "integrity": "sha512-2HUeRTvoCC17fxE0qdBeR7J9dO8j4A8ZbdcvY8pZxdk+zERU6+N03RTbk/dQMU488PwiDvcC3zZqS4gwLfVT8g==", + "version": "1.20240524.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-64/-/workerd-linux-64-1.20240524.0.tgz", + "integrity": "sha512-E8mj+HPBryKwaJAiNsYzXtVjKCL0KvUBZbtxJxlWM4mLSQhT+uwGT3nydb/hFY59rZnQgZslw0oqEWht5TEYiQ==", "dev": true, "optional": true }, "@cloudflare/workerd-linux-arm64": { - "version": "1.20231030.0", - "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-arm64/-/workerd-linux-arm64-1.20231030.0.tgz", - "integrity": "sha512-4/GK5zHh+9JbUI6Z5xTCM0ZmpKKHk7vu9thmHjUxtz+o8Ne9DoD7DlDvXQWgMF6XGaTubDWyp3ttn+Qv8jDFuQ==", + "version": "1.20240524.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-arm64/-/workerd-linux-arm64-1.20240524.0.tgz", + "integrity": "sha512-/Fr1W671t2triNCDCBWdStxngnbUfZunZ/2e4kaMLzJDJLYDtYdmvOUCBDzUD4ssqmIMbn9RCQQ0U+CLEoqBqw==", "dev": true, "optional": true }, "@cloudflare/workerd-windows-64": { - "version": "1.20231030.0", - "resolved": "https://registry.npmjs.org/@cloudflare/workerd-windows-64/-/workerd-windows-64-1.20231030.0.tgz", - "integrity": "sha512-fb/Jgj8Yqy3PO1jLhk7mTrHMkR8jklpbQFud6rL/aMAn5d6MQbaSrYOCjzkKGp0Zng8D2LIzSl+Fc0C9Sggxjg==", + "version": "1.20240524.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-windows-64/-/workerd-windows-64-1.20240524.0.tgz", + "integrity": "sha512-G+ThDEx57g9mAEKqhWnHaaJgpeGYtyhkmwM/BDpLqPks/rAY5YEfZbY4YL1pNk1kkcZDXGrwIsY8xe9Apf5JdA==", "dev": true, "optional": true }, @@ -1460,15 +1524,21 @@ "optional": true }, "@fastify/busboy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.0.tgz", - "integrity": "sha512-+KpH+QxZU7O4675t3mnkQKcZZg56u+K/Ct2K+N2AZYNVK8kyeo/bI18tI8aPm3tvNNRyTWfj6s5tnGNlcbQRsA==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz", + "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==", + "dev": true + }, + "@hono/node-server": { + "version": "1.11.2", + "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-1.11.2.tgz", + "integrity": "sha512-JhX0nUC66GeDxpIdMKWDRMEwtQBa64CY907iAF1sYqb4m2p2PdSU7zkbnNhAZLg/6IjSlTuj6CF307JlBXVvpg==", "dev": true }, "@jridgewell/resolve-uri": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", - "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "dev": true }, "@jridgewell/sourcemap-codec": { @@ -1512,9 +1582,9 @@ "dev": true }, "acorn-walk": { - "version": "8.3.1", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.1.tgz", - "integrity": "sha512-TgUZgYvqZprrl7YldZNoa9OciCAyZR+Ejm9eXzKCmjsF5IKp/wgQ7Z/ZpjpGTIUPwrHQIcYeI8qDh4PsEwxMbw==", + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", + "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==", "dev": true }, "anymatch": { @@ -1549,20 +1619,14 @@ "dev": true }, "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "requires": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" } }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, "capnp-ts": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/capnp-ts/-/capnp-ts-0.7.0.tgz", @@ -1659,9 +1723,9 @@ "dev": true }, "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "requires": { "to-regex-range": "^5.0.1" @@ -1674,6 +1738,12 @@ "dev": true, "optional": true }, + "function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true + }, "get-source": { "version": "2.0.12", "resolved": "https://registry.npmjs.org/get-source/-/get-source-2.0.12.tgz", @@ -1699,6 +1769,15 @@ "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", "dev": true }, + "hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "requires": { + "function-bind": "^1.1.2" + } + }, "hono": { "version": "4.2.7", "resolved": "https://registry.npmjs.org/hono/-/hono-4.2.7.tgz", @@ -1713,6 +1792,15 @@ "binary-extensions": "^2.0.0" } }, + "is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "dev": true, + "requires": { + "hasown": "^2.0.0" + } + }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -1734,11 +1822,6 @@ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true }, - "lowstorage": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/lowstorage/-/lowstorage-0.0.1.tgz", - "integrity": "sha512-QWugV6PiYC6xmV8OA4qHxKUzI64a7XD0Z+7Go7oE3vTsYRsC8IT4UMEX5oy1Ns24XU0taWiWh9qRDklqDiAeMg==" - }, "magic-string": { "version": "0.25.9", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", @@ -1755,20 +1838,20 @@ "dev": true }, "miniflare": { - "version": "3.20231030.4", - "resolved": "https://registry.npmjs.org/miniflare/-/miniflare-3.20231030.4.tgz", - "integrity": "sha512-7MBz0ArLuDop1WJGZC6tFgN6c5MRyDOIlxbm3yp0TRBpvDS/KsTuWCQcCjsxN4QQ5zvL3JTkuIZbQzRRw/j6ow==", + "version": "3.20240524.0", + "resolved": "https://registry.npmjs.org/miniflare/-/miniflare-3.20240524.0.tgz", + "integrity": "sha512-RQAfpz7spI6gWlczeUYvJBgGyt0gNR2pYoCydgukCYZ+0bGfJl0yAiNFW62uH7uMZli/4juWPpQOBI5m7URoyA==", "dev": true, "requires": { + "@cspotcode/source-map-support": "0.8.1", "acorn": "^8.8.0", "acorn-walk": "^8.2.0", "capnp-ts": "^0.7.0", "exit-hook": "^2.2.1", "glob-to-regexp": "^0.4.1", - "source-map-support": "0.5.21", "stoppable": "^1.1.0", - "undici": "^5.22.1", - "workerd": "1.20231030.0", + "undici": "^5.28.2", + "workerd": "1.20240524.0", "ws": "^8.11.0", "youch": "^3.2.2", "zod": "^3.20.6" @@ -1804,6 +1887,12 @@ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, "path-to-regexp": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.1.tgz", @@ -1831,6 +1920,17 @@ "picomatch": "^2.2.1" } }, + "resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "requires": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, "resolve.exports": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", @@ -1882,16 +1982,6 @@ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true }, - "source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, "sourcemap-codec": { "version": "1.4.8", "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", @@ -1914,6 +2004,12 @@ "integrity": "sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==", "dev": true }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true + }, "to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -1945,35 +2041,35 @@ "dev": true }, "workerd": { - "version": "1.20231030.0", - "resolved": "https://registry.npmjs.org/workerd/-/workerd-1.20231030.0.tgz", - "integrity": "sha512-+FSW+d31f8RrjHanFf/R9A+Z0csf3OtsvzdPmAKuwuZm/5HrBv83cvG9fFeTxl7/nI6irUUXIRF9xcj/NomQzQ==", + "version": "1.20240524.0", + "resolved": "https://registry.npmjs.org/workerd/-/workerd-1.20240524.0.tgz", + "integrity": "sha512-LWLe5D8PVHBcqturmBbwgI71r7YPpIMYZoVEH6S4G35EqIJ55cb0n3FipoSyraoIfpcCxCFxX1K6WsRHbP3pFA==", "dev": true, "requires": { - "@cloudflare/workerd-darwin-64": "1.20231030.0", - "@cloudflare/workerd-darwin-arm64": "1.20231030.0", - "@cloudflare/workerd-linux-64": "1.20231030.0", - "@cloudflare/workerd-linux-arm64": "1.20231030.0", - "@cloudflare/workerd-windows-64": "1.20231030.0" + "@cloudflare/workerd-darwin-64": "1.20240524.0", + "@cloudflare/workerd-darwin-arm64": "1.20240524.0", + "@cloudflare/workerd-linux-64": "1.20240524.0", + "@cloudflare/workerd-linux-arm64": "1.20240524.0", + "@cloudflare/workerd-windows-64": "1.20240524.0" } }, "wrangler": { - "version": "3.22.1", - "resolved": "https://registry.npmjs.org/wrangler/-/wrangler-3.22.1.tgz", - "integrity": "sha512-fN7WOF6Ono/TV5V90PuJQNf0azS7B+5C/N/KRjqhlAIQBz+c0yLOGkF6kC/akxjr1yIAC9AzcPk9+OuTSq0C+g==", + "version": "3.57.2", + "resolved": "https://registry.npmjs.org/wrangler/-/wrangler-3.57.2.tgz", + "integrity": "sha512-QegYf0FW+4prlFKE9iHr1EGrCo8ejcGL9gaqEXrzQ0vbTdazykYbY0I5UpHFLNq2dIF9I/ifEoLRKr636tyHEw==", "dev": true, "requires": { - "@cloudflare/kv-asset-handler": "^0.2.0", - "@cspotcode/source-map-support": "0.8.1", + "@cloudflare/kv-asset-handler": "0.3.2", "@esbuild-plugins/node-globals-polyfill": "^0.2.3", "@esbuild-plugins/node-modules-polyfill": "^0.2.2", "blake3-wasm": "^2.1.5", "chokidar": "^3.5.3", "esbuild": "0.17.19", "fsevents": "~2.3.2", - "miniflare": "3.20231030.4", + "miniflare": "3.20240524.0", "nanoid": "^3.3.3", "path-to-regexp": "^6.2.0", + "resolve": "^1.22.8", "resolve.exports": "^2.0.2", "selfsigned": "^2.0.1", "source-map": "0.6.1", @@ -1981,9 +2077,9 @@ } }, "ws": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz", - "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==", + "version": "8.17.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.0.tgz", + "integrity": "sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==", "dev": true, "requires": {} }, @@ -2005,9 +2101,9 @@ } }, "zod": { - "version": "3.22.4", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.22.4.tgz", - "integrity": "sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==", + "version": "3.23.8", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.23.8.tgz", + "integrity": "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==", "dev": true } } diff --git a/examples/package.json b/examples/package.json index 50df5fa..2e9b0cb 100644 --- a/examples/package.json +++ b/examples/package.json @@ -2,16 +2,18 @@ "name": "lowstorage-examples", "version": "0.0.1", "private": true, + "type": "module", "scripts": { "deploy": "wrangler deploy", - "dev": "wrangler dev --remote", - "start": "wrangler dev --remote" + "dev": "wrangler dev ", + "node-dev": "node --env-file=.env ./src/index.js", + "start": "wrangler dev" }, "devDependencies": { - "wrangler": "^3.22.1" + "@hono/node-server": "^1.11.2", + "wrangler": "^3.57.2" }, "dependencies": { - "hono": "^4.2.7", - "lowstorage": "^0.0.1" + "hono": "^4.2.7" } } diff --git a/examples/src/index.js b/examples/src/index.js deleted file mode 100644 index 19866b9..0000000 --- a/examples/src/index.js +++ /dev/null @@ -1,73 +0,0 @@ -'use strict'; - -import lowstorage from '../../lib/lowstorage.js'; -import { Hono } from 'hono'; -const app = new Hono(); - -const BUCKET_NAME = 'MY_TESTING_BUCKET'; -const USER_COL = 'users'; - -app.post('/insertdata', async (c) => { - // poor's man benchmark - const requestStartTime = Date.now(); - const userCol = new lowstorage(c.env, BUCKET_NAME).collection(USER_COL); - const jsonGeneratedData = await c.req.json(); - const insertedData = await userCol.insert(jsonGeneratedData); - const executionTime = Date.now() - requestStartTime; - console.log(`Request took ${executionTime}ms`); - return c.json(insertedData); -}); - -app.post('/update/:id', async (c) => { - const id = c.req.param('id'); - const jsonGeneratedData = await c.req.json(); - const userCol = new lowstorage(c.env, BUCKET_NAME).collection(USER_COL); - const user = await userCol.update({ _id: id }, jsonGeneratedData); - return c.json({ user }); -}); - -// list all "collections" -app.get('/list-collections', async (c) => { - const ls = new lowstorage(c.env, BUCKET_NAME); - const allCols = await ls.listCollections(); - return c.json({ allCols }); -}); - -app.get('/users', async (c) => { - const userCol = new lowstorage(c.env, BUCKET_NAME).collection(USER_COL); - const limit = parseInt(c.req.query('limit'), 10) || undefined; // Get limit, with default - const skip = parseInt(c.req.query('skip'), 10) || undefined; // Get skip, with default - const users = await userCol.find({}, { limit: limit, skip: skip }); - return c.json({ users }); -}); - -app.get('/users-count', async (c) => { - const userCol = new lowstorage(c.env, BUCKET_NAME).collection('users'); - const usersCount = await userCol.count(); - return c.text(usersCount); -}); - -// get user -app.get('/user/:id', async (c) => { - const id = c.req.param('id'); - const userCol = new lowstorage(c.env, BUCKET_NAME).collection(USER_COL); - const user = await userCol.findOne({ _id: id }); - return c.json({ user }); -}); - -// find all with value -app.get('/search/:value', async (c) => { - const value = c.req.param('value'); - const userCol = new lowstorage(c.env, BUCKET_NAME).collection(USER_COL); - const users = await userCol.find({ name: value }); - return c.json({ users }); -}); - -// list all users -app.get('/users-delete-all', async (c) => { - const userCol = new lowstorage(c.env, BUCKET_NAME).collection(USER_COL); - const users = await userCol.remove({}); - return c.json({ users }); -}); - -export default app; diff --git a/lib/lowstorage.js b/lib/lowstorage.js index 3ca7424..945e9c9 100644 --- a/lib/lowstorage.js +++ b/lib/lowstorage.js @@ -1 +1,35 @@ -var d=(...s)=>{for(let t of s)if(typeof t!="object"||t===null)throw new Error("lowstorage: missing args or args not an object")},i=(s,t)=>Object.keys(t).every(a=>s[a]===t[a]),h=()=>crypto.randomUUID(),o=(s,t)=>typeof s<"u"&&s!==null&&typeof s[t]=="function",f=s=>typeof s=="object"&&s!==null&&o(s,"get")&&o(s,"put")&&o(s,"delete")&&o(s,"list"),_=(s,t)=>{if(t&&f(s[t]))return s[t];throw new Error("lowstorage: no valid store found")},c=class{constructor(t,a){this._colName=t,this._store=a}async _loadData(){try{let t=await this._store.get(`${this._colName}/${this._colName}.json`);return t?t.json():[]}catch(t){if(t.code==="ENOENT")return[];throw t}}async _saveData(t){let a=`${this._colName}/${this._colName}.json`;return this._store.put(a,JSON.stringify(t))}async insert(t){Array.isArray(t)||(t=[t]);let a=await this._loadData();for(let e of t){if(typeof e!="object"||e===null)throw new Error("Invalid input: input must be an object or an array of objects");e._id=e._id||h(),a.push(e)}return await this._saveData(a),t.length===1?t[0]:t}async find(t={},a={}){let e=await this._loadData(),r=parseInt(a.skip,10)||0,n=parseInt(a.limit,10)?r+parseInt(a.limit,10):void 0;return e.filter(u=>i(u,t)).slice(r,n)}async findOne(t={}){return(await this.find(t))[0]||null}async update(t={},a={}){let e=await this._loadData(),r=0;for(let n=0;n0&&await this._saveData(e),r}async updateOne(t={},a={}){let e=await this._loadData(),r=e.findIndex(n=>i(n,t));return r!==-1?(Object.assign(e[r],a),await this._saveData(e),1):0}async delete(t={}){let a=await this._loadData(),e=a.length,r=a.filter(n=>!i(n,t));return await this._saveData(r),e-r.length}async count(t={}){return(await this.find(t)).length}async remove(){let a=(await this._loadData()).length;return await this._saveData([]),a}},l=class{constructor(t,a){d(t),this._store=_(t,a)}collection(t){return new c(t,this._store)}async listCollections(){let t=await this._store.list(),a=t.truncated,e=a?t.cursor:void 0;for(;a;){let n=await this._store.list({cursor:e});t.objects.push(...n.objects),a=n.truncated,e=n.cursor}return t.objects.filter(n=>n.key.endsWith(".json")).map(n=>n.key.split("/")[0])}},y=l;export{y as default}; +var Ms=Object.create;var Si=Object.defineProperty;var Ws=Object.getOwnPropertyDescriptor;var Ks=Object.getOwnPropertyNames;var Vs=Object.getPrototypeOf,Gs=Object.prototype.hasOwnProperty;var E=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(a,i)=>(typeof require<"u"?require:a)[i]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var j=(e,a)=>()=>(a||e((a={exports:{}}).exports,a),a.exports);var Js=(e,a,i,n)=>{if(a&&typeof a=="object"||typeof a=="function")for(let s of Ks(a))!Gs.call(e,s)&&s!==i&&Si(e,s,{get:()=>a[s],enumerable:!(n=Ws(a,s))||n.enumerable});return e};var Xs=(e,a,i)=>(i=e!=null?Ms(Vs(e)):{},Js(a||!e||!e.__esModule?Si(i,"default",{value:e,enumerable:!0}):i,e));var Ti=j((Xc,Ci)=>{var Oi=E("stream").Stream,Ys=E("util");Ci.exports=Z;function Z(){this.source=null,this.dataSize=0,this.maxDataSize=1024*1024,this.pauseStream=!0,this._maxDataSizeExceeded=!1,this._released=!1,this._bufferedEvents=[]}Ys.inherits(Z,Oi);Z.create=function(e,a){var i=new this;a=a||{};for(var n in a)i[n]=a[n];i.source=e;var s=e.emit;return e.emit=function(){return i._handleEmit(arguments),s.apply(e,arguments)},e.on("error",function(){}),i.pauseStream&&e.pause(),i};Object.defineProperty(Z.prototype,"readable",{configurable:!0,enumerable:!0,get:function(){return this.source.readable}});Z.prototype.setEncoding=function(){return this.source.setEncoding.apply(this.source,arguments)};Z.prototype.resume=function(){this._released||this.release(),this.source.resume()};Z.prototype.pause=function(){this.source.pause()};Z.prototype.release=function(){this._released=!0,this._bufferedEvents.forEach(function(e){this.emit.apply(this,e)}.bind(this)),this._bufferedEvents=[]};Z.prototype.pipe=function(){var e=Oi.prototype.pipe.apply(this,arguments);return this.resume(),e};Z.prototype._handleEmit=function(e){if(this._released){this.emit.apply(this,e);return}e[0]==="data"&&(this.dataSize+=e[1].length,this._checkIfMaxDataSizeExceeded()),this._bufferedEvents.push(e)};Z.prototype._checkIfMaxDataSizeExceeded=function(){if(!this._maxDataSizeExceeded&&!(this.dataSize<=this.maxDataSize)){this._maxDataSizeExceeded=!0;var e="DelayedStream#maxDataSize of "+this.maxDataSize+" bytes exceeded.";this.emit("error",new Error(e))}}});var Li=j((Yc,zi)=>{var Zs=E("util"),qi=E("stream").Stream,Ai=Ti();zi.exports=O;function O(){this.writable=!1,this.readable=!0,this.dataSize=0,this.maxDataSize=2*1024*1024,this.pauseStreams=!0,this._released=!1,this._streams=[],this._currentStream=null,this._insideLoop=!1,this._pendingNext=!1}Zs.inherits(O,qi);O.create=function(e){var a=new this;e=e||{};for(var i in e)a[i]=e[i];return a};O.isStreamLike=function(e){return typeof e!="function"&&typeof e!="string"&&typeof e!="boolean"&&typeof e!="number"&&!Buffer.isBuffer(e)};O.prototype.append=function(e){var a=O.isStreamLike(e);if(a){if(!(e instanceof Ai)){var i=Ai.create(e,{maxDataSize:1/0,pauseStream:this.pauseStreams});e.on("data",this._checkDataSize.bind(this)),e=i}this._handleErrors(e),this.pauseStreams&&e.pause()}return this._streams.push(e),this};O.prototype.pipe=function(e,a){return qi.prototype.pipe.call(this,e,a),this.resume(),e};O.prototype._getNext=function(){if(this._currentStream=null,this._insideLoop){this._pendingNext=!0;return}this._insideLoop=!0;try{do this._pendingNext=!1,this._realGetNext();while(this._pendingNext)}finally{this._insideLoop=!1}};O.prototype._realGetNext=function(){var e=this._streams.shift();if(typeof e>"u"){this.end();return}if(typeof e!="function"){this._pipeNext(e);return}var a=e;a(function(i){var n=O.isStreamLike(i);n&&(i.on("data",this._checkDataSize.bind(this)),this._handleErrors(i)),this._pipeNext(i)}.bind(this))};O.prototype._pipeNext=function(e){this._currentStream=e;var a=O.isStreamLike(e);if(a){e.on("end",this._getNext.bind(this)),e.pipe(this,{end:!1});return}var i=e;this.write(i),this._getNext()};O.prototype._handleErrors=function(e){var a=this;e.on("error",function(i){a._emitError(i)})};O.prototype.write=function(e){this.emit("data",e)};O.prototype.pause=function(){this.pauseStreams&&(this.pauseStreams&&this._currentStream&&typeof this._currentStream.pause=="function"&&this._currentStream.pause(),this.emit("pause"))};O.prototype.resume=function(){this._released||(this._released=!0,this.writable=!0,this._getNext()),this.pauseStreams&&this._currentStream&&typeof this._currentStream.resume=="function"&&this._currentStream.resume(),this.emit("resume")};O.prototype.end=function(){this._reset(),this.emit("end")};O.prototype.destroy=function(){this._reset(),this.emit("close")};O.prototype._reset=function(){this.writable=!1,this._streams=[],this._currentStream=null};O.prototype._checkDataSize=function(){if(this._updateDataSize(),!(this.dataSize<=this.maxDataSize)){var e="DelayedStream#maxDataSize of "+this.maxDataSize+" bytes exceeded.";this._emitError(new Error(e))}};O.prototype._updateDataSize=function(){this.dataSize=0;var e=this;this._streams.forEach(function(a){a.dataSize&&(e.dataSize+=a.dataSize)}),this._currentStream&&this._currentStream.dataSize&&(this.dataSize+=this._currentStream.dataSize)};O.prototype._emitError=function(e){this._reset(),this.emit("error",e)}});var Fi=j((Zc,Qs)=>{Qs.exports={"application/1d-interleaved-parityfec":{source:"iana"},"application/3gpdash-qoe-report+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/3gpp-ims+xml":{source:"iana",compressible:!0},"application/3gpphal+json":{source:"iana",compressible:!0},"application/3gpphalforms+json":{source:"iana",compressible:!0},"application/a2l":{source:"iana"},"application/ace+cbor":{source:"iana"},"application/activemessage":{source:"iana"},"application/activity+json":{source:"iana",compressible:!0},"application/alto-costmap+json":{source:"iana",compressible:!0},"application/alto-costmapfilter+json":{source:"iana",compressible:!0},"application/alto-directory+json":{source:"iana",compressible:!0},"application/alto-endpointcost+json":{source:"iana",compressible:!0},"application/alto-endpointcostparams+json":{source:"iana",compressible:!0},"application/alto-endpointprop+json":{source:"iana",compressible:!0},"application/alto-endpointpropparams+json":{source:"iana",compressible:!0},"application/alto-error+json":{source:"iana",compressible:!0},"application/alto-networkmap+json":{source:"iana",compressible:!0},"application/alto-networkmapfilter+json":{source:"iana",compressible:!0},"application/alto-updatestreamcontrol+json":{source:"iana",compressible:!0},"application/alto-updatestreamparams+json":{source:"iana",compressible:!0},"application/aml":{source:"iana"},"application/andrew-inset":{source:"iana",extensions:["ez"]},"application/applefile":{source:"iana"},"application/applixware":{source:"apache",extensions:["aw"]},"application/at+jwt":{source:"iana"},"application/atf":{source:"iana"},"application/atfx":{source:"iana"},"application/atom+xml":{source:"iana",compressible:!0,extensions:["atom"]},"application/atomcat+xml":{source:"iana",compressible:!0,extensions:["atomcat"]},"application/atomdeleted+xml":{source:"iana",compressible:!0,extensions:["atomdeleted"]},"application/atomicmail":{source:"iana"},"application/atomsvc+xml":{source:"iana",compressible:!0,extensions:["atomsvc"]},"application/atsc-dwd+xml":{source:"iana",compressible:!0,extensions:["dwd"]},"application/atsc-dynamic-event-message":{source:"iana"},"application/atsc-held+xml":{source:"iana",compressible:!0,extensions:["held"]},"application/atsc-rdt+json":{source:"iana",compressible:!0},"application/atsc-rsat+xml":{source:"iana",compressible:!0,extensions:["rsat"]},"application/atxml":{source:"iana"},"application/auth-policy+xml":{source:"iana",compressible:!0},"application/bacnet-xdd+zip":{source:"iana",compressible:!1},"application/batch-smtp":{source:"iana"},"application/bdoc":{compressible:!1,extensions:["bdoc"]},"application/beep+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/calendar+json":{source:"iana",compressible:!0},"application/calendar+xml":{source:"iana",compressible:!0,extensions:["xcs"]},"application/call-completion":{source:"iana"},"application/cals-1840":{source:"iana"},"application/captive+json":{source:"iana",compressible:!0},"application/cbor":{source:"iana"},"application/cbor-seq":{source:"iana"},"application/cccex":{source:"iana"},"application/ccmp+xml":{source:"iana",compressible:!0},"application/ccxml+xml":{source:"iana",compressible:!0,extensions:["ccxml"]},"application/cdfx+xml":{source:"iana",compressible:!0,extensions:["cdfx"]},"application/cdmi-capability":{source:"iana",extensions:["cdmia"]},"application/cdmi-container":{source:"iana",extensions:["cdmic"]},"application/cdmi-domain":{source:"iana",extensions:["cdmid"]},"application/cdmi-object":{source:"iana",extensions:["cdmio"]},"application/cdmi-queue":{source:"iana",extensions:["cdmiq"]},"application/cdni":{source:"iana"},"application/cea":{source:"iana"},"application/cea-2018+xml":{source:"iana",compressible:!0},"application/cellml+xml":{source:"iana",compressible:!0},"application/cfw":{source:"iana"},"application/city+json":{source:"iana",compressible:!0},"application/clr":{source:"iana"},"application/clue+xml":{source:"iana",compressible:!0},"application/clue_info+xml":{source:"iana",compressible:!0},"application/cms":{source:"iana"},"application/cnrp+xml":{source:"iana",compressible:!0},"application/coap-group+json":{source:"iana",compressible:!0},"application/coap-payload":{source:"iana"},"application/commonground":{source:"iana"},"application/conference-info+xml":{source:"iana",compressible:!0},"application/cose":{source:"iana"},"application/cose-key":{source:"iana"},"application/cose-key-set":{source:"iana"},"application/cpl+xml":{source:"iana",compressible:!0,extensions:["cpl"]},"application/csrattrs":{source:"iana"},"application/csta+xml":{source:"iana",compressible:!0},"application/cstadata+xml":{source:"iana",compressible:!0},"application/csvm+json":{source:"iana",compressible:!0},"application/cu-seeme":{source:"apache",extensions:["cu"]},"application/cwt":{source:"iana"},"application/cybercash":{source:"iana"},"application/dart":{compressible:!0},"application/dash+xml":{source:"iana",compressible:!0,extensions:["mpd"]},"application/dash-patch+xml":{source:"iana",compressible:!0,extensions:["mpp"]},"application/dashdelta":{source:"iana"},"application/davmount+xml":{source:"iana",compressible:!0,extensions:["davmount"]},"application/dca-rft":{source:"iana"},"application/dcd":{source:"iana"},"application/dec-dx":{source:"iana"},"application/dialog-info+xml":{source:"iana",compressible:!0},"application/dicom":{source:"iana"},"application/dicom+json":{source:"iana",compressible:!0},"application/dicom+xml":{source:"iana",compressible:!0},"application/dii":{source:"iana"},"application/dit":{source:"iana"},"application/dns":{source:"iana"},"application/dns+json":{source:"iana",compressible:!0},"application/dns-message":{source:"iana"},"application/docbook+xml":{source:"apache",compressible:!0,extensions:["dbk"]},"application/dots+cbor":{source:"iana"},"application/dskpp+xml":{source:"iana",compressible:!0},"application/dssc+der":{source:"iana",extensions:["dssc"]},"application/dssc+xml":{source:"iana",compressible:!0,extensions:["xdssc"]},"application/dvcs":{source:"iana"},"application/ecmascript":{source:"iana",compressible:!0,extensions:["es","ecma"]},"application/edi-consent":{source:"iana"},"application/edi-x12":{source:"iana",compressible:!1},"application/edifact":{source:"iana",compressible:!1},"application/efi":{source:"iana"},"application/elm+json":{source:"iana",charset:"UTF-8",compressible:!0},"application/elm+xml":{source:"iana",compressible:!0},"application/emergencycalldata.cap+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/emergencycalldata.comment+xml":{source:"iana",compressible:!0},"application/emergencycalldata.control+xml":{source:"iana",compressible:!0},"application/emergencycalldata.deviceinfo+xml":{source:"iana",compressible:!0},"application/emergencycalldata.ecall.msd":{source:"iana"},"application/emergencycalldata.providerinfo+xml":{source:"iana",compressible:!0},"application/emergencycalldata.serviceinfo+xml":{source:"iana",compressible:!0},"application/emergencycalldata.subscriberinfo+xml":{source:"iana",compressible:!0},"application/emergencycalldata.veds+xml":{source:"iana",compressible:!0},"application/emma+xml":{source:"iana",compressible:!0,extensions:["emma"]},"application/emotionml+xml":{source:"iana",compressible:!0,extensions:["emotionml"]},"application/encaprtp":{source:"iana"},"application/epp+xml":{source:"iana",compressible:!0},"application/epub+zip":{source:"iana",compressible:!1,extensions:["epub"]},"application/eshop":{source:"iana"},"application/exi":{source:"iana",extensions:["exi"]},"application/expect-ct-report+json":{source:"iana",compressible:!0},"application/express":{source:"iana",extensions:["exp"]},"application/fastinfoset":{source:"iana"},"application/fastsoap":{source:"iana"},"application/fdt+xml":{source:"iana",compressible:!0,extensions:["fdt"]},"application/fhir+json":{source:"iana",charset:"UTF-8",compressible:!0},"application/fhir+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/fido.trusted-apps+json":{compressible:!0},"application/fits":{source:"iana"},"application/flexfec":{source:"iana"},"application/font-sfnt":{source:"iana"},"application/font-tdpfr":{source:"iana",extensions:["pfr"]},"application/font-woff":{source:"iana",compressible:!1},"application/framework-attributes+xml":{source:"iana",compressible:!0},"application/geo+json":{source:"iana",compressible:!0,extensions:["geojson"]},"application/geo+json-seq":{source:"iana"},"application/geopackage+sqlite3":{source:"iana"},"application/geoxacml+xml":{source:"iana",compressible:!0},"application/gltf-buffer":{source:"iana"},"application/gml+xml":{source:"iana",compressible:!0,extensions:["gml"]},"application/gpx+xml":{source:"apache",compressible:!0,extensions:["gpx"]},"application/gxf":{source:"apache",extensions:["gxf"]},"application/gzip":{source:"iana",compressible:!1,extensions:["gz"]},"application/h224":{source:"iana"},"application/held+xml":{source:"iana",compressible:!0},"application/hjson":{extensions:["hjson"]},"application/http":{source:"iana"},"application/hyperstudio":{source:"iana",extensions:["stk"]},"application/ibe-key-request+xml":{source:"iana",compressible:!0},"application/ibe-pkg-reply+xml":{source:"iana",compressible:!0},"application/ibe-pp-data":{source:"iana"},"application/iges":{source:"iana"},"application/im-iscomposing+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/index":{source:"iana"},"application/index.cmd":{source:"iana"},"application/index.obj":{source:"iana"},"application/index.response":{source:"iana"},"application/index.vnd":{source:"iana"},"application/inkml+xml":{source:"iana",compressible:!0,extensions:["ink","inkml"]},"application/iotp":{source:"iana"},"application/ipfix":{source:"iana",extensions:["ipfix"]},"application/ipp":{source:"iana"},"application/isup":{source:"iana"},"application/its+xml":{source:"iana",compressible:!0,extensions:["its"]},"application/java-archive":{source:"apache",compressible:!1,extensions:["jar","war","ear"]},"application/java-serialized-object":{source:"apache",compressible:!1,extensions:["ser"]},"application/java-vm":{source:"apache",compressible:!1,extensions:["class"]},"application/javascript":{source:"iana",charset:"UTF-8",compressible:!0,extensions:["js","mjs"]},"application/jf2feed+json":{source:"iana",compressible:!0},"application/jose":{source:"iana"},"application/jose+json":{source:"iana",compressible:!0},"application/jrd+json":{source:"iana",compressible:!0},"application/jscalendar+json":{source:"iana",compressible:!0},"application/json":{source:"iana",charset:"UTF-8",compressible:!0,extensions:["json","map"]},"application/json-patch+json":{source:"iana",compressible:!0},"application/json-seq":{source:"iana"},"application/json5":{extensions:["json5"]},"application/jsonml+json":{source:"apache",compressible:!0,extensions:["jsonml"]},"application/jwk+json":{source:"iana",compressible:!0},"application/jwk-set+json":{source:"iana",compressible:!0},"application/jwt":{source:"iana"},"application/kpml-request+xml":{source:"iana",compressible:!0},"application/kpml-response+xml":{source:"iana",compressible:!0},"application/ld+json":{source:"iana",compressible:!0,extensions:["jsonld"]},"application/lgr+xml":{source:"iana",compressible:!0,extensions:["lgr"]},"application/link-format":{source:"iana"},"application/load-control+xml":{source:"iana",compressible:!0},"application/lost+xml":{source:"iana",compressible:!0,extensions:["lostxml"]},"application/lostsync+xml":{source:"iana",compressible:!0},"application/lpf+zip":{source:"iana",compressible:!1},"application/lxf":{source:"iana"},"application/mac-binhex40":{source:"iana",extensions:["hqx"]},"application/mac-compactpro":{source:"apache",extensions:["cpt"]},"application/macwriteii":{source:"iana"},"application/mads+xml":{source:"iana",compressible:!0,extensions:["mads"]},"application/manifest+json":{source:"iana",charset:"UTF-8",compressible:!0,extensions:["webmanifest"]},"application/marc":{source:"iana",extensions:["mrc"]},"application/marcxml+xml":{source:"iana",compressible:!0,extensions:["mrcx"]},"application/mathematica":{source:"iana",extensions:["ma","nb","mb"]},"application/mathml+xml":{source:"iana",compressible:!0,extensions:["mathml"]},"application/mathml-content+xml":{source:"iana",compressible:!0},"application/mathml-presentation+xml":{source:"iana",compressible:!0},"application/mbms-associated-procedure-description+xml":{source:"iana",compressible:!0},"application/mbms-deregister+xml":{source:"iana",compressible:!0},"application/mbms-envelope+xml":{source:"iana",compressible:!0},"application/mbms-msk+xml":{source:"iana",compressible:!0},"application/mbms-msk-response+xml":{source:"iana",compressible:!0},"application/mbms-protection-description+xml":{source:"iana",compressible:!0},"application/mbms-reception-report+xml":{source:"iana",compressible:!0},"application/mbms-register+xml":{source:"iana",compressible:!0},"application/mbms-register-response+xml":{source:"iana",compressible:!0},"application/mbms-schedule+xml":{source:"iana",compressible:!0},"application/mbms-user-service-description+xml":{source:"iana",compressible:!0},"application/mbox":{source:"iana",extensions:["mbox"]},"application/media-policy-dataset+xml":{source:"iana",compressible:!0,extensions:["mpf"]},"application/media_control+xml":{source:"iana",compressible:!0},"application/mediaservercontrol+xml":{source:"iana",compressible:!0,extensions:["mscml"]},"application/merge-patch+json":{source:"iana",compressible:!0},"application/metalink+xml":{source:"apache",compressible:!0,extensions:["metalink"]},"application/metalink4+xml":{source:"iana",compressible:!0,extensions:["meta4"]},"application/mets+xml":{source:"iana",compressible:!0,extensions:["mets"]},"application/mf4":{source:"iana"},"application/mikey":{source:"iana"},"application/mipc":{source:"iana"},"application/missing-blocks+cbor-seq":{source:"iana"},"application/mmt-aei+xml":{source:"iana",compressible:!0,extensions:["maei"]},"application/mmt-usd+xml":{source:"iana",compressible:!0,extensions:["musd"]},"application/mods+xml":{source:"iana",compressible:!0,extensions:["mods"]},"application/moss-keys":{source:"iana"},"application/moss-signature":{source:"iana"},"application/mosskey-data":{source:"iana"},"application/mosskey-request":{source:"iana"},"application/mp21":{source:"iana",extensions:["m21","mp21"]},"application/mp4":{source:"iana",extensions:["mp4s","m4p"]},"application/mpeg4-generic":{source:"iana"},"application/mpeg4-iod":{source:"iana"},"application/mpeg4-iod-xmt":{source:"iana"},"application/mrb-consumer+xml":{source:"iana",compressible:!0},"application/mrb-publish+xml":{source:"iana",compressible:!0},"application/msc-ivr+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/msc-mixer+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/msword":{source:"iana",compressible:!1,extensions:["doc","dot"]},"application/mud+json":{source:"iana",compressible:!0},"application/multipart-core":{source:"iana"},"application/mxf":{source:"iana",extensions:["mxf"]},"application/n-quads":{source:"iana",extensions:["nq"]},"application/n-triples":{source:"iana",extensions:["nt"]},"application/nasdata":{source:"iana"},"application/news-checkgroups":{source:"iana",charset:"US-ASCII"},"application/news-groupinfo":{source:"iana",charset:"US-ASCII"},"application/news-transmission":{source:"iana"},"application/nlsml+xml":{source:"iana",compressible:!0},"application/node":{source:"iana",extensions:["cjs"]},"application/nss":{source:"iana"},"application/oauth-authz-req+jwt":{source:"iana"},"application/oblivious-dns-message":{source:"iana"},"application/ocsp-request":{source:"iana"},"application/ocsp-response":{source:"iana"},"application/octet-stream":{source:"iana",compressible:!1,extensions:["bin","dms","lrf","mar","so","dist","distz","pkg","bpk","dump","elc","deploy","exe","dll","deb","dmg","iso","img","msi","msp","msm","buffer"]},"application/oda":{source:"iana",extensions:["oda"]},"application/odm+xml":{source:"iana",compressible:!0},"application/odx":{source:"iana"},"application/oebps-package+xml":{source:"iana",compressible:!0,extensions:["opf"]},"application/ogg":{source:"iana",compressible:!1,extensions:["ogx"]},"application/omdoc+xml":{source:"apache",compressible:!0,extensions:["omdoc"]},"application/onenote":{source:"apache",extensions:["onetoc","onetoc2","onetmp","onepkg"]},"application/opc-nodeset+xml":{source:"iana",compressible:!0},"application/oscore":{source:"iana"},"application/oxps":{source:"iana",extensions:["oxps"]},"application/p21":{source:"iana"},"application/p21+zip":{source:"iana",compressible:!1},"application/p2p-overlay+xml":{source:"iana",compressible:!0,extensions:["relo"]},"application/parityfec":{source:"iana"},"application/passport":{source:"iana"},"application/patch-ops-error+xml":{source:"iana",compressible:!0,extensions:["xer"]},"application/pdf":{source:"iana",compressible:!1,extensions:["pdf"]},"application/pdx":{source:"iana"},"application/pem-certificate-chain":{source:"iana"},"application/pgp-encrypted":{source:"iana",compressible:!1,extensions:["pgp"]},"application/pgp-keys":{source:"iana",extensions:["asc"]},"application/pgp-signature":{source:"iana",extensions:["asc","sig"]},"application/pics-rules":{source:"apache",extensions:["prf"]},"application/pidf+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/pidf-diff+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/pkcs10":{source:"iana",extensions:["p10"]},"application/pkcs12":{source:"iana"},"application/pkcs7-mime":{source:"iana",extensions:["p7m","p7c"]},"application/pkcs7-signature":{source:"iana",extensions:["p7s"]},"application/pkcs8":{source:"iana",extensions:["p8"]},"application/pkcs8-encrypted":{source:"iana"},"application/pkix-attr-cert":{source:"iana",extensions:["ac"]},"application/pkix-cert":{source:"iana",extensions:["cer"]},"application/pkix-crl":{source:"iana",extensions:["crl"]},"application/pkix-pkipath":{source:"iana",extensions:["pkipath"]},"application/pkixcmp":{source:"iana",extensions:["pki"]},"application/pls+xml":{source:"iana",compressible:!0,extensions:["pls"]},"application/poc-settings+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/postscript":{source:"iana",compressible:!0,extensions:["ai","eps","ps"]},"application/ppsp-tracker+json":{source:"iana",compressible:!0},"application/problem+json":{source:"iana",compressible:!0},"application/problem+xml":{source:"iana",compressible:!0},"application/provenance+xml":{source:"iana",compressible:!0,extensions:["provx"]},"application/prs.alvestrand.titrax-sheet":{source:"iana"},"application/prs.cww":{source:"iana",extensions:["cww"]},"application/prs.cyn":{source:"iana",charset:"7-BIT"},"application/prs.hpub+zip":{source:"iana",compressible:!1},"application/prs.nprend":{source:"iana"},"application/prs.plucker":{source:"iana"},"application/prs.rdf-xml-crypt":{source:"iana"},"application/prs.xsf+xml":{source:"iana",compressible:!0},"application/pskc+xml":{source:"iana",compressible:!0,extensions:["pskcxml"]},"application/pvd+json":{source:"iana",compressible:!0},"application/qsig":{source:"iana"},"application/raml+yaml":{compressible:!0,extensions:["raml"]},"application/raptorfec":{source:"iana"},"application/rdap+json":{source:"iana",compressible:!0},"application/rdf+xml":{source:"iana",compressible:!0,extensions:["rdf","owl"]},"application/reginfo+xml":{source:"iana",compressible:!0,extensions:["rif"]},"application/relax-ng-compact-syntax":{source:"iana",extensions:["rnc"]},"application/remote-printing":{source:"iana"},"application/reputon+json":{source:"iana",compressible:!0},"application/resource-lists+xml":{source:"iana",compressible:!0,extensions:["rl"]},"application/resource-lists-diff+xml":{source:"iana",compressible:!0,extensions:["rld"]},"application/rfc+xml":{source:"iana",compressible:!0},"application/riscos":{source:"iana"},"application/rlmi+xml":{source:"iana",compressible:!0},"application/rls-services+xml":{source:"iana",compressible:!0,extensions:["rs"]},"application/route-apd+xml":{source:"iana",compressible:!0,extensions:["rapd"]},"application/route-s-tsid+xml":{source:"iana",compressible:!0,extensions:["sls"]},"application/route-usd+xml":{source:"iana",compressible:!0,extensions:["rusd"]},"application/rpki-ghostbusters":{source:"iana",extensions:["gbr"]},"application/rpki-manifest":{source:"iana",extensions:["mft"]},"application/rpki-publication":{source:"iana"},"application/rpki-roa":{source:"iana",extensions:["roa"]},"application/rpki-updown":{source:"iana"},"application/rsd+xml":{source:"apache",compressible:!0,extensions:["rsd"]},"application/rss+xml":{source:"apache",compressible:!0,extensions:["rss"]},"application/rtf":{source:"iana",compressible:!0,extensions:["rtf"]},"application/rtploopback":{source:"iana"},"application/rtx":{source:"iana"},"application/samlassertion+xml":{source:"iana",compressible:!0},"application/samlmetadata+xml":{source:"iana",compressible:!0},"application/sarif+json":{source:"iana",compressible:!0},"application/sarif-external-properties+json":{source:"iana",compressible:!0},"application/sbe":{source:"iana"},"application/sbml+xml":{source:"iana",compressible:!0,extensions:["sbml"]},"application/scaip+xml":{source:"iana",compressible:!0},"application/scim+json":{source:"iana",compressible:!0},"application/scvp-cv-request":{source:"iana",extensions:["scq"]},"application/scvp-cv-response":{source:"iana",extensions:["scs"]},"application/scvp-vp-request":{source:"iana",extensions:["spq"]},"application/scvp-vp-response":{source:"iana",extensions:["spp"]},"application/sdp":{source:"iana",extensions:["sdp"]},"application/secevent+jwt":{source:"iana"},"application/senml+cbor":{source:"iana"},"application/senml+json":{source:"iana",compressible:!0},"application/senml+xml":{source:"iana",compressible:!0,extensions:["senmlx"]},"application/senml-etch+cbor":{source:"iana"},"application/senml-etch+json":{source:"iana",compressible:!0},"application/senml-exi":{source:"iana"},"application/sensml+cbor":{source:"iana"},"application/sensml+json":{source:"iana",compressible:!0},"application/sensml+xml":{source:"iana",compressible:!0,extensions:["sensmlx"]},"application/sensml-exi":{source:"iana"},"application/sep+xml":{source:"iana",compressible:!0},"application/sep-exi":{source:"iana"},"application/session-info":{source:"iana"},"application/set-payment":{source:"iana"},"application/set-payment-initiation":{source:"iana",extensions:["setpay"]},"application/set-registration":{source:"iana"},"application/set-registration-initiation":{source:"iana",extensions:["setreg"]},"application/sgml":{source:"iana"},"application/sgml-open-catalog":{source:"iana"},"application/shf+xml":{source:"iana",compressible:!0,extensions:["shf"]},"application/sieve":{source:"iana",extensions:["siv","sieve"]},"application/simple-filter+xml":{source:"iana",compressible:!0},"application/simple-message-summary":{source:"iana"},"application/simplesymbolcontainer":{source:"iana"},"application/sipc":{source:"iana"},"application/slate":{source:"iana"},"application/smil":{source:"iana"},"application/smil+xml":{source:"iana",compressible:!0,extensions:["smi","smil"]},"application/smpte336m":{source:"iana"},"application/soap+fastinfoset":{source:"iana"},"application/soap+xml":{source:"iana",compressible:!0},"application/sparql-query":{source:"iana",extensions:["rq"]},"application/sparql-results+xml":{source:"iana",compressible:!0,extensions:["srx"]},"application/spdx+json":{source:"iana",compressible:!0},"application/spirits-event+xml":{source:"iana",compressible:!0},"application/sql":{source:"iana"},"application/srgs":{source:"iana",extensions:["gram"]},"application/srgs+xml":{source:"iana",compressible:!0,extensions:["grxml"]},"application/sru+xml":{source:"iana",compressible:!0,extensions:["sru"]},"application/ssdl+xml":{source:"apache",compressible:!0,extensions:["ssdl"]},"application/ssml+xml":{source:"iana",compressible:!0,extensions:["ssml"]},"application/stix+json":{source:"iana",compressible:!0},"application/swid+xml":{source:"iana",compressible:!0,extensions:["swidtag"]},"application/tamp-apex-update":{source:"iana"},"application/tamp-apex-update-confirm":{source:"iana"},"application/tamp-community-update":{source:"iana"},"application/tamp-community-update-confirm":{source:"iana"},"application/tamp-error":{source:"iana"},"application/tamp-sequence-adjust":{source:"iana"},"application/tamp-sequence-adjust-confirm":{source:"iana"},"application/tamp-status-query":{source:"iana"},"application/tamp-status-response":{source:"iana"},"application/tamp-update":{source:"iana"},"application/tamp-update-confirm":{source:"iana"},"application/tar":{compressible:!0},"application/taxii+json":{source:"iana",compressible:!0},"application/td+json":{source:"iana",compressible:!0},"application/tei+xml":{source:"iana",compressible:!0,extensions:["tei","teicorpus"]},"application/tetra_isi":{source:"iana"},"application/thraud+xml":{source:"iana",compressible:!0,extensions:["tfi"]},"application/timestamp-query":{source:"iana"},"application/timestamp-reply":{source:"iana"},"application/timestamped-data":{source:"iana",extensions:["tsd"]},"application/tlsrpt+gzip":{source:"iana"},"application/tlsrpt+json":{source:"iana",compressible:!0},"application/tnauthlist":{source:"iana"},"application/token-introspection+jwt":{source:"iana"},"application/toml":{compressible:!0,extensions:["toml"]},"application/trickle-ice-sdpfrag":{source:"iana"},"application/trig":{source:"iana",extensions:["trig"]},"application/ttml+xml":{source:"iana",compressible:!0,extensions:["ttml"]},"application/tve-trigger":{source:"iana"},"application/tzif":{source:"iana"},"application/tzif-leap":{source:"iana"},"application/ubjson":{compressible:!1,extensions:["ubj"]},"application/ulpfec":{source:"iana"},"application/urc-grpsheet+xml":{source:"iana",compressible:!0},"application/urc-ressheet+xml":{source:"iana",compressible:!0,extensions:["rsheet"]},"application/urc-targetdesc+xml":{source:"iana",compressible:!0,extensions:["td"]},"application/urc-uisocketdesc+xml":{source:"iana",compressible:!0},"application/vcard+json":{source:"iana",compressible:!0},"application/vcard+xml":{source:"iana",compressible:!0},"application/vemmi":{source:"iana"},"application/vividence.scriptfile":{source:"apache"},"application/vnd.1000minds.decision-model+xml":{source:"iana",compressible:!0,extensions:["1km"]},"application/vnd.3gpp-prose+xml":{source:"iana",compressible:!0},"application/vnd.3gpp-prose-pc3ch+xml":{source:"iana",compressible:!0},"application/vnd.3gpp-v2x-local-service-information":{source:"iana"},"application/vnd.3gpp.5gnas":{source:"iana"},"application/vnd.3gpp.access-transfer-events+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.bsf+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.gmop+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.gtpc":{source:"iana"},"application/vnd.3gpp.interworking-data":{source:"iana"},"application/vnd.3gpp.lpp":{source:"iana"},"application/vnd.3gpp.mc-signalling-ear":{source:"iana"},"application/vnd.3gpp.mcdata-affiliation-command+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcdata-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcdata-payload":{source:"iana"},"application/vnd.3gpp.mcdata-service-config+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcdata-signalling":{source:"iana"},"application/vnd.3gpp.mcdata-ue-config+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcdata-user-profile+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-affiliation-command+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-floor-request+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-location-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-mbms-usage-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-service-config+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-signed+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-ue-config+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-ue-init-config+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-user-profile+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcvideo-affiliation-command+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcvideo-affiliation-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcvideo-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcvideo-location-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcvideo-mbms-usage-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcvideo-service-config+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcvideo-transmission-request+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcvideo-ue-config+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcvideo-user-profile+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mid-call+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.ngap":{source:"iana"},"application/vnd.3gpp.pfcp":{source:"iana"},"application/vnd.3gpp.pic-bw-large":{source:"iana",extensions:["plb"]},"application/vnd.3gpp.pic-bw-small":{source:"iana",extensions:["psb"]},"application/vnd.3gpp.pic-bw-var":{source:"iana",extensions:["pvb"]},"application/vnd.3gpp.s1ap":{source:"iana"},"application/vnd.3gpp.sms":{source:"iana"},"application/vnd.3gpp.sms+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.srvcc-ext+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.srvcc-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.state-and-event-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.ussd+xml":{source:"iana",compressible:!0},"application/vnd.3gpp2.bcmcsinfo+xml":{source:"iana",compressible:!0},"application/vnd.3gpp2.sms":{source:"iana"},"application/vnd.3gpp2.tcap":{source:"iana",extensions:["tcap"]},"application/vnd.3lightssoftware.imagescal":{source:"iana"},"application/vnd.3m.post-it-notes":{source:"iana",extensions:["pwn"]},"application/vnd.accpac.simply.aso":{source:"iana",extensions:["aso"]},"application/vnd.accpac.simply.imp":{source:"iana",extensions:["imp"]},"application/vnd.acucobol":{source:"iana",extensions:["acu"]},"application/vnd.acucorp":{source:"iana",extensions:["atc","acutc"]},"application/vnd.adobe.air-application-installer-package+zip":{source:"apache",compressible:!1,extensions:["air"]},"application/vnd.adobe.flash.movie":{source:"iana"},"application/vnd.adobe.formscentral.fcdt":{source:"iana",extensions:["fcdt"]},"application/vnd.adobe.fxp":{source:"iana",extensions:["fxp","fxpl"]},"application/vnd.adobe.partial-upload":{source:"iana"},"application/vnd.adobe.xdp+xml":{source:"iana",compressible:!0,extensions:["xdp"]},"application/vnd.adobe.xfdf":{source:"iana",extensions:["xfdf"]},"application/vnd.aether.imp":{source:"iana"},"application/vnd.afpc.afplinedata":{source:"iana"},"application/vnd.afpc.afplinedata-pagedef":{source:"iana"},"application/vnd.afpc.cmoca-cmresource":{source:"iana"},"application/vnd.afpc.foca-charset":{source:"iana"},"application/vnd.afpc.foca-codedfont":{source:"iana"},"application/vnd.afpc.foca-codepage":{source:"iana"},"application/vnd.afpc.modca":{source:"iana"},"application/vnd.afpc.modca-cmtable":{source:"iana"},"application/vnd.afpc.modca-formdef":{source:"iana"},"application/vnd.afpc.modca-mediummap":{source:"iana"},"application/vnd.afpc.modca-objectcontainer":{source:"iana"},"application/vnd.afpc.modca-overlay":{source:"iana"},"application/vnd.afpc.modca-pagesegment":{source:"iana"},"application/vnd.age":{source:"iana",extensions:["age"]},"application/vnd.ah-barcode":{source:"iana"},"application/vnd.ahead.space":{source:"iana",extensions:["ahead"]},"application/vnd.airzip.filesecure.azf":{source:"iana",extensions:["azf"]},"application/vnd.airzip.filesecure.azs":{source:"iana",extensions:["azs"]},"application/vnd.amadeus+json":{source:"iana",compressible:!0},"application/vnd.amazon.ebook":{source:"apache",extensions:["azw"]},"application/vnd.amazon.mobi8-ebook":{source:"iana"},"application/vnd.americandynamics.acc":{source:"iana",extensions:["acc"]},"application/vnd.amiga.ami":{source:"iana",extensions:["ami"]},"application/vnd.amundsen.maze+xml":{source:"iana",compressible:!0},"application/vnd.android.ota":{source:"iana"},"application/vnd.android.package-archive":{source:"apache",compressible:!1,extensions:["apk"]},"application/vnd.anki":{source:"iana"},"application/vnd.anser-web-certificate-issue-initiation":{source:"iana",extensions:["cii"]},"application/vnd.anser-web-funds-transfer-initiation":{source:"apache",extensions:["fti"]},"application/vnd.antix.game-component":{source:"iana",extensions:["atx"]},"application/vnd.apache.arrow.file":{source:"iana"},"application/vnd.apache.arrow.stream":{source:"iana"},"application/vnd.apache.thrift.binary":{source:"iana"},"application/vnd.apache.thrift.compact":{source:"iana"},"application/vnd.apache.thrift.json":{source:"iana"},"application/vnd.api+json":{source:"iana",compressible:!0},"application/vnd.aplextor.warrp+json":{source:"iana",compressible:!0},"application/vnd.apothekende.reservation+json":{source:"iana",compressible:!0},"application/vnd.apple.installer+xml":{source:"iana",compressible:!0,extensions:["mpkg"]},"application/vnd.apple.keynote":{source:"iana",extensions:["key"]},"application/vnd.apple.mpegurl":{source:"iana",extensions:["m3u8"]},"application/vnd.apple.numbers":{source:"iana",extensions:["numbers"]},"application/vnd.apple.pages":{source:"iana",extensions:["pages"]},"application/vnd.apple.pkpass":{compressible:!1,extensions:["pkpass"]},"application/vnd.arastra.swi":{source:"iana"},"application/vnd.aristanetworks.swi":{source:"iana",extensions:["swi"]},"application/vnd.artisan+json":{source:"iana",compressible:!0},"application/vnd.artsquare":{source:"iana"},"application/vnd.astraea-software.iota":{source:"iana",extensions:["iota"]},"application/vnd.audiograph":{source:"iana",extensions:["aep"]},"application/vnd.autopackage":{source:"iana"},"application/vnd.avalon+json":{source:"iana",compressible:!0},"application/vnd.avistar+xml":{source:"iana",compressible:!0},"application/vnd.balsamiq.bmml+xml":{source:"iana",compressible:!0,extensions:["bmml"]},"application/vnd.balsamiq.bmpr":{source:"iana"},"application/vnd.banana-accounting":{source:"iana"},"application/vnd.bbf.usp.error":{source:"iana"},"application/vnd.bbf.usp.msg":{source:"iana"},"application/vnd.bbf.usp.msg+json":{source:"iana",compressible:!0},"application/vnd.bekitzur-stech+json":{source:"iana",compressible:!0},"application/vnd.bint.med-content":{source:"iana"},"application/vnd.biopax.rdf+xml":{source:"iana",compressible:!0},"application/vnd.blink-idb-value-wrapper":{source:"iana"},"application/vnd.blueice.multipass":{source:"iana",extensions:["mpm"]},"application/vnd.bluetooth.ep.oob":{source:"iana"},"application/vnd.bluetooth.le.oob":{source:"iana"},"application/vnd.bmi":{source:"iana",extensions:["bmi"]},"application/vnd.bpf":{source:"iana"},"application/vnd.bpf3":{source:"iana"},"application/vnd.businessobjects":{source:"iana",extensions:["rep"]},"application/vnd.byu.uapi+json":{source:"iana",compressible:!0},"application/vnd.cab-jscript":{source:"iana"},"application/vnd.canon-cpdl":{source:"iana"},"application/vnd.canon-lips":{source:"iana"},"application/vnd.capasystems-pg+json":{source:"iana",compressible:!0},"application/vnd.cendio.thinlinc.clientconf":{source:"iana"},"application/vnd.century-systems.tcp_stream":{source:"iana"},"application/vnd.chemdraw+xml":{source:"iana",compressible:!0,extensions:["cdxml"]},"application/vnd.chess-pgn":{source:"iana"},"application/vnd.chipnuts.karaoke-mmd":{source:"iana",extensions:["mmd"]},"application/vnd.ciedi":{source:"iana"},"application/vnd.cinderella":{source:"iana",extensions:["cdy"]},"application/vnd.cirpack.isdn-ext":{source:"iana"},"application/vnd.citationstyles.style+xml":{source:"iana",compressible:!0,extensions:["csl"]},"application/vnd.claymore":{source:"iana",extensions:["cla"]},"application/vnd.cloanto.rp9":{source:"iana",extensions:["rp9"]},"application/vnd.clonk.c4group":{source:"iana",extensions:["c4g","c4d","c4f","c4p","c4u"]},"application/vnd.cluetrust.cartomobile-config":{source:"iana",extensions:["c11amc"]},"application/vnd.cluetrust.cartomobile-config-pkg":{source:"iana",extensions:["c11amz"]},"application/vnd.coffeescript":{source:"iana"},"application/vnd.collabio.xodocuments.document":{source:"iana"},"application/vnd.collabio.xodocuments.document-template":{source:"iana"},"application/vnd.collabio.xodocuments.presentation":{source:"iana"},"application/vnd.collabio.xodocuments.presentation-template":{source:"iana"},"application/vnd.collabio.xodocuments.spreadsheet":{source:"iana"},"application/vnd.collabio.xodocuments.spreadsheet-template":{source:"iana"},"application/vnd.collection+json":{source:"iana",compressible:!0},"application/vnd.collection.doc+json":{source:"iana",compressible:!0},"application/vnd.collection.next+json":{source:"iana",compressible:!0},"application/vnd.comicbook+zip":{source:"iana",compressible:!1},"application/vnd.comicbook-rar":{source:"iana"},"application/vnd.commerce-battelle":{source:"iana"},"application/vnd.commonspace":{source:"iana",extensions:["csp"]},"application/vnd.contact.cmsg":{source:"iana",extensions:["cdbcmsg"]},"application/vnd.coreos.ignition+json":{source:"iana",compressible:!0},"application/vnd.cosmocaller":{source:"iana",extensions:["cmc"]},"application/vnd.crick.clicker":{source:"iana",extensions:["clkx"]},"application/vnd.crick.clicker.keyboard":{source:"iana",extensions:["clkk"]},"application/vnd.crick.clicker.palette":{source:"iana",extensions:["clkp"]},"application/vnd.crick.clicker.template":{source:"iana",extensions:["clkt"]},"application/vnd.crick.clicker.wordbank":{source:"iana",extensions:["clkw"]},"application/vnd.criticaltools.wbs+xml":{source:"iana",compressible:!0,extensions:["wbs"]},"application/vnd.cryptii.pipe+json":{source:"iana",compressible:!0},"application/vnd.crypto-shade-file":{source:"iana"},"application/vnd.cryptomator.encrypted":{source:"iana"},"application/vnd.cryptomator.vault":{source:"iana"},"application/vnd.ctc-posml":{source:"iana",extensions:["pml"]},"application/vnd.ctct.ws+xml":{source:"iana",compressible:!0},"application/vnd.cups-pdf":{source:"iana"},"application/vnd.cups-postscript":{source:"iana"},"application/vnd.cups-ppd":{source:"iana",extensions:["ppd"]},"application/vnd.cups-raster":{source:"iana"},"application/vnd.cups-raw":{source:"iana"},"application/vnd.curl":{source:"iana"},"application/vnd.curl.car":{source:"apache",extensions:["car"]},"application/vnd.curl.pcurl":{source:"apache",extensions:["pcurl"]},"application/vnd.cyan.dean.root+xml":{source:"iana",compressible:!0},"application/vnd.cybank":{source:"iana"},"application/vnd.cyclonedx+json":{source:"iana",compressible:!0},"application/vnd.cyclonedx+xml":{source:"iana",compressible:!0},"application/vnd.d2l.coursepackage1p0+zip":{source:"iana",compressible:!1},"application/vnd.d3m-dataset":{source:"iana"},"application/vnd.d3m-problem":{source:"iana"},"application/vnd.dart":{source:"iana",compressible:!0,extensions:["dart"]},"application/vnd.data-vision.rdz":{source:"iana",extensions:["rdz"]},"application/vnd.datapackage+json":{source:"iana",compressible:!0},"application/vnd.dataresource+json":{source:"iana",compressible:!0},"application/vnd.dbf":{source:"iana",extensions:["dbf"]},"application/vnd.debian.binary-package":{source:"iana"},"application/vnd.dece.data":{source:"iana",extensions:["uvf","uvvf","uvd","uvvd"]},"application/vnd.dece.ttml+xml":{source:"iana",compressible:!0,extensions:["uvt","uvvt"]},"application/vnd.dece.unspecified":{source:"iana",extensions:["uvx","uvvx"]},"application/vnd.dece.zip":{source:"iana",extensions:["uvz","uvvz"]},"application/vnd.denovo.fcselayout-link":{source:"iana",extensions:["fe_launch"]},"application/vnd.desmume.movie":{source:"iana"},"application/vnd.dir-bi.plate-dl-nosuffix":{source:"iana"},"application/vnd.dm.delegation+xml":{source:"iana",compressible:!0},"application/vnd.dna":{source:"iana",extensions:["dna"]},"application/vnd.document+json":{source:"iana",compressible:!0},"application/vnd.dolby.mlp":{source:"apache",extensions:["mlp"]},"application/vnd.dolby.mobile.1":{source:"iana"},"application/vnd.dolby.mobile.2":{source:"iana"},"application/vnd.doremir.scorecloud-binary-document":{source:"iana"},"application/vnd.dpgraph":{source:"iana",extensions:["dpg"]},"application/vnd.dreamfactory":{source:"iana",extensions:["dfac"]},"application/vnd.drive+json":{source:"iana",compressible:!0},"application/vnd.ds-keypoint":{source:"apache",extensions:["kpxx"]},"application/vnd.dtg.local":{source:"iana"},"application/vnd.dtg.local.flash":{source:"iana"},"application/vnd.dtg.local.html":{source:"iana"},"application/vnd.dvb.ait":{source:"iana",extensions:["ait"]},"application/vnd.dvb.dvbisl+xml":{source:"iana",compressible:!0},"application/vnd.dvb.dvbj":{source:"iana"},"application/vnd.dvb.esgcontainer":{source:"iana"},"application/vnd.dvb.ipdcdftnotifaccess":{source:"iana"},"application/vnd.dvb.ipdcesgaccess":{source:"iana"},"application/vnd.dvb.ipdcesgaccess2":{source:"iana"},"application/vnd.dvb.ipdcesgpdd":{source:"iana"},"application/vnd.dvb.ipdcroaming":{source:"iana"},"application/vnd.dvb.iptv.alfec-base":{source:"iana"},"application/vnd.dvb.iptv.alfec-enhancement":{source:"iana"},"application/vnd.dvb.notif-aggregate-root+xml":{source:"iana",compressible:!0},"application/vnd.dvb.notif-container+xml":{source:"iana",compressible:!0},"application/vnd.dvb.notif-generic+xml":{source:"iana",compressible:!0},"application/vnd.dvb.notif-ia-msglist+xml":{source:"iana",compressible:!0},"application/vnd.dvb.notif-ia-registration-request+xml":{source:"iana",compressible:!0},"application/vnd.dvb.notif-ia-registration-response+xml":{source:"iana",compressible:!0},"application/vnd.dvb.notif-init+xml":{source:"iana",compressible:!0},"application/vnd.dvb.pfr":{source:"iana"},"application/vnd.dvb.service":{source:"iana",extensions:["svc"]},"application/vnd.dxr":{source:"iana"},"application/vnd.dynageo":{source:"iana",extensions:["geo"]},"application/vnd.dzr":{source:"iana"},"application/vnd.easykaraoke.cdgdownload":{source:"iana"},"application/vnd.ecdis-update":{source:"iana"},"application/vnd.ecip.rlp":{source:"iana"},"application/vnd.eclipse.ditto+json":{source:"iana",compressible:!0},"application/vnd.ecowin.chart":{source:"iana",extensions:["mag"]},"application/vnd.ecowin.filerequest":{source:"iana"},"application/vnd.ecowin.fileupdate":{source:"iana"},"application/vnd.ecowin.series":{source:"iana"},"application/vnd.ecowin.seriesrequest":{source:"iana"},"application/vnd.ecowin.seriesupdate":{source:"iana"},"application/vnd.efi.img":{source:"iana"},"application/vnd.efi.iso":{source:"iana"},"application/vnd.emclient.accessrequest+xml":{source:"iana",compressible:!0},"application/vnd.enliven":{source:"iana",extensions:["nml"]},"application/vnd.enphase.envoy":{source:"iana"},"application/vnd.eprints.data+xml":{source:"iana",compressible:!0},"application/vnd.epson.esf":{source:"iana",extensions:["esf"]},"application/vnd.epson.msf":{source:"iana",extensions:["msf"]},"application/vnd.epson.quickanime":{source:"iana",extensions:["qam"]},"application/vnd.epson.salt":{source:"iana",extensions:["slt"]},"application/vnd.epson.ssf":{source:"iana",extensions:["ssf"]},"application/vnd.ericsson.quickcall":{source:"iana"},"application/vnd.espass-espass+zip":{source:"iana",compressible:!1},"application/vnd.eszigno3+xml":{source:"iana",compressible:!0,extensions:["es3","et3"]},"application/vnd.etsi.aoc+xml":{source:"iana",compressible:!0},"application/vnd.etsi.asic-e+zip":{source:"iana",compressible:!1},"application/vnd.etsi.asic-s+zip":{source:"iana",compressible:!1},"application/vnd.etsi.cug+xml":{source:"iana",compressible:!0},"application/vnd.etsi.iptvcommand+xml":{source:"iana",compressible:!0},"application/vnd.etsi.iptvdiscovery+xml":{source:"iana",compressible:!0},"application/vnd.etsi.iptvprofile+xml":{source:"iana",compressible:!0},"application/vnd.etsi.iptvsad-bc+xml":{source:"iana",compressible:!0},"application/vnd.etsi.iptvsad-cod+xml":{source:"iana",compressible:!0},"application/vnd.etsi.iptvsad-npvr+xml":{source:"iana",compressible:!0},"application/vnd.etsi.iptvservice+xml":{source:"iana",compressible:!0},"application/vnd.etsi.iptvsync+xml":{source:"iana",compressible:!0},"application/vnd.etsi.iptvueprofile+xml":{source:"iana",compressible:!0},"application/vnd.etsi.mcid+xml":{source:"iana",compressible:!0},"application/vnd.etsi.mheg5":{source:"iana"},"application/vnd.etsi.overload-control-policy-dataset+xml":{source:"iana",compressible:!0},"application/vnd.etsi.pstn+xml":{source:"iana",compressible:!0},"application/vnd.etsi.sci+xml":{source:"iana",compressible:!0},"application/vnd.etsi.simservs+xml":{source:"iana",compressible:!0},"application/vnd.etsi.timestamp-token":{source:"iana"},"application/vnd.etsi.tsl+xml":{source:"iana",compressible:!0},"application/vnd.etsi.tsl.der":{source:"iana"},"application/vnd.eu.kasparian.car+json":{source:"iana",compressible:!0},"application/vnd.eudora.data":{source:"iana"},"application/vnd.evolv.ecig.profile":{source:"iana"},"application/vnd.evolv.ecig.settings":{source:"iana"},"application/vnd.evolv.ecig.theme":{source:"iana"},"application/vnd.exstream-empower+zip":{source:"iana",compressible:!1},"application/vnd.exstream-package":{source:"iana"},"application/vnd.ezpix-album":{source:"iana",extensions:["ez2"]},"application/vnd.ezpix-package":{source:"iana",extensions:["ez3"]},"application/vnd.f-secure.mobile":{source:"iana"},"application/vnd.familysearch.gedcom+zip":{source:"iana",compressible:!1},"application/vnd.fastcopy-disk-image":{source:"iana"},"application/vnd.fdf":{source:"iana",extensions:["fdf"]},"application/vnd.fdsn.mseed":{source:"iana",extensions:["mseed"]},"application/vnd.fdsn.seed":{source:"iana",extensions:["seed","dataless"]},"application/vnd.ffsns":{source:"iana"},"application/vnd.ficlab.flb+zip":{source:"iana",compressible:!1},"application/vnd.filmit.zfc":{source:"iana"},"application/vnd.fints":{source:"iana"},"application/vnd.firemonkeys.cloudcell":{source:"iana"},"application/vnd.flographit":{source:"iana",extensions:["gph"]},"application/vnd.fluxtime.clip":{source:"iana",extensions:["ftc"]},"application/vnd.font-fontforge-sfd":{source:"iana"},"application/vnd.framemaker":{source:"iana",extensions:["fm","frame","maker","book"]},"application/vnd.frogans.fnc":{source:"iana",extensions:["fnc"]},"application/vnd.frogans.ltf":{source:"iana",extensions:["ltf"]},"application/vnd.fsc.weblaunch":{source:"iana",extensions:["fsc"]},"application/vnd.fujifilm.fb.docuworks":{source:"iana"},"application/vnd.fujifilm.fb.docuworks.binder":{source:"iana"},"application/vnd.fujifilm.fb.docuworks.container":{source:"iana"},"application/vnd.fujifilm.fb.jfi+xml":{source:"iana",compressible:!0},"application/vnd.fujitsu.oasys":{source:"iana",extensions:["oas"]},"application/vnd.fujitsu.oasys2":{source:"iana",extensions:["oa2"]},"application/vnd.fujitsu.oasys3":{source:"iana",extensions:["oa3"]},"application/vnd.fujitsu.oasysgp":{source:"iana",extensions:["fg5"]},"application/vnd.fujitsu.oasysprs":{source:"iana",extensions:["bh2"]},"application/vnd.fujixerox.art-ex":{source:"iana"},"application/vnd.fujixerox.art4":{source:"iana"},"application/vnd.fujixerox.ddd":{source:"iana",extensions:["ddd"]},"application/vnd.fujixerox.docuworks":{source:"iana",extensions:["xdw"]},"application/vnd.fujixerox.docuworks.binder":{source:"iana",extensions:["xbd"]},"application/vnd.fujixerox.docuworks.container":{source:"iana"},"application/vnd.fujixerox.hbpl":{source:"iana"},"application/vnd.fut-misnet":{source:"iana"},"application/vnd.futoin+cbor":{source:"iana"},"application/vnd.futoin+json":{source:"iana",compressible:!0},"application/vnd.fuzzysheet":{source:"iana",extensions:["fzs"]},"application/vnd.genomatix.tuxedo":{source:"iana",extensions:["txd"]},"application/vnd.gentics.grd+json":{source:"iana",compressible:!0},"application/vnd.geo+json":{source:"iana",compressible:!0},"application/vnd.geocube+xml":{source:"iana",compressible:!0},"application/vnd.geogebra.file":{source:"iana",extensions:["ggb"]},"application/vnd.geogebra.slides":{source:"iana"},"application/vnd.geogebra.tool":{source:"iana",extensions:["ggt"]},"application/vnd.geometry-explorer":{source:"iana",extensions:["gex","gre"]},"application/vnd.geonext":{source:"iana",extensions:["gxt"]},"application/vnd.geoplan":{source:"iana",extensions:["g2w"]},"application/vnd.geospace":{source:"iana",extensions:["g3w"]},"application/vnd.gerber":{source:"iana"},"application/vnd.globalplatform.card-content-mgt":{source:"iana"},"application/vnd.globalplatform.card-content-mgt-response":{source:"iana"},"application/vnd.gmx":{source:"iana",extensions:["gmx"]},"application/vnd.google-apps.document":{compressible:!1,extensions:["gdoc"]},"application/vnd.google-apps.presentation":{compressible:!1,extensions:["gslides"]},"application/vnd.google-apps.spreadsheet":{compressible:!1,extensions:["gsheet"]},"application/vnd.google-earth.kml+xml":{source:"iana",compressible:!0,extensions:["kml"]},"application/vnd.google-earth.kmz":{source:"iana",compressible:!1,extensions:["kmz"]},"application/vnd.gov.sk.e-form+xml":{source:"iana",compressible:!0},"application/vnd.gov.sk.e-form+zip":{source:"iana",compressible:!1},"application/vnd.gov.sk.xmldatacontainer+xml":{source:"iana",compressible:!0},"application/vnd.grafeq":{source:"iana",extensions:["gqf","gqs"]},"application/vnd.gridmp":{source:"iana"},"application/vnd.groove-account":{source:"iana",extensions:["gac"]},"application/vnd.groove-help":{source:"iana",extensions:["ghf"]},"application/vnd.groove-identity-message":{source:"iana",extensions:["gim"]},"application/vnd.groove-injector":{source:"iana",extensions:["grv"]},"application/vnd.groove-tool-message":{source:"iana",extensions:["gtm"]},"application/vnd.groove-tool-template":{source:"iana",extensions:["tpl"]},"application/vnd.groove-vcard":{source:"iana",extensions:["vcg"]},"application/vnd.hal+json":{source:"iana",compressible:!0},"application/vnd.hal+xml":{source:"iana",compressible:!0,extensions:["hal"]},"application/vnd.handheld-entertainment+xml":{source:"iana",compressible:!0,extensions:["zmm"]},"application/vnd.hbci":{source:"iana",extensions:["hbci"]},"application/vnd.hc+json":{source:"iana",compressible:!0},"application/vnd.hcl-bireports":{source:"iana"},"application/vnd.hdt":{source:"iana"},"application/vnd.heroku+json":{source:"iana",compressible:!0},"application/vnd.hhe.lesson-player":{source:"iana",extensions:["les"]},"application/vnd.hl7cda+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/vnd.hl7v2+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/vnd.hp-hpgl":{source:"iana",extensions:["hpgl"]},"application/vnd.hp-hpid":{source:"iana",extensions:["hpid"]},"application/vnd.hp-hps":{source:"iana",extensions:["hps"]},"application/vnd.hp-jlyt":{source:"iana",extensions:["jlt"]},"application/vnd.hp-pcl":{source:"iana",extensions:["pcl"]},"application/vnd.hp-pclxl":{source:"iana",extensions:["pclxl"]},"application/vnd.httphone":{source:"iana"},"application/vnd.hydrostatix.sof-data":{source:"iana",extensions:["sfd-hdstx"]},"application/vnd.hyper+json":{source:"iana",compressible:!0},"application/vnd.hyper-item+json":{source:"iana",compressible:!0},"application/vnd.hyperdrive+json":{source:"iana",compressible:!0},"application/vnd.hzn-3d-crossword":{source:"iana"},"application/vnd.ibm.afplinedata":{source:"iana"},"application/vnd.ibm.electronic-media":{source:"iana"},"application/vnd.ibm.minipay":{source:"iana",extensions:["mpy"]},"application/vnd.ibm.modcap":{source:"iana",extensions:["afp","listafp","list3820"]},"application/vnd.ibm.rights-management":{source:"iana",extensions:["irm"]},"application/vnd.ibm.secure-container":{source:"iana",extensions:["sc"]},"application/vnd.iccprofile":{source:"iana",extensions:["icc","icm"]},"application/vnd.ieee.1905":{source:"iana"},"application/vnd.igloader":{source:"iana",extensions:["igl"]},"application/vnd.imagemeter.folder+zip":{source:"iana",compressible:!1},"application/vnd.imagemeter.image+zip":{source:"iana",compressible:!1},"application/vnd.immervision-ivp":{source:"iana",extensions:["ivp"]},"application/vnd.immervision-ivu":{source:"iana",extensions:["ivu"]},"application/vnd.ims.imsccv1p1":{source:"iana"},"application/vnd.ims.imsccv1p2":{source:"iana"},"application/vnd.ims.imsccv1p3":{source:"iana"},"application/vnd.ims.lis.v2.result+json":{source:"iana",compressible:!0},"application/vnd.ims.lti.v2.toolconsumerprofile+json":{source:"iana",compressible:!0},"application/vnd.ims.lti.v2.toolproxy+json":{source:"iana",compressible:!0},"application/vnd.ims.lti.v2.toolproxy.id+json":{source:"iana",compressible:!0},"application/vnd.ims.lti.v2.toolsettings+json":{source:"iana",compressible:!0},"application/vnd.ims.lti.v2.toolsettings.simple+json":{source:"iana",compressible:!0},"application/vnd.informedcontrol.rms+xml":{source:"iana",compressible:!0},"application/vnd.informix-visionary":{source:"iana"},"application/vnd.infotech.project":{source:"iana"},"application/vnd.infotech.project+xml":{source:"iana",compressible:!0},"application/vnd.innopath.wamp.notification":{source:"iana"},"application/vnd.insors.igm":{source:"iana",extensions:["igm"]},"application/vnd.intercon.formnet":{source:"iana",extensions:["xpw","xpx"]},"application/vnd.intergeo":{source:"iana",extensions:["i2g"]},"application/vnd.intertrust.digibox":{source:"iana"},"application/vnd.intertrust.nncp":{source:"iana"},"application/vnd.intu.qbo":{source:"iana",extensions:["qbo"]},"application/vnd.intu.qfx":{source:"iana",extensions:["qfx"]},"application/vnd.iptc.g2.catalogitem+xml":{source:"iana",compressible:!0},"application/vnd.iptc.g2.conceptitem+xml":{source:"iana",compressible:!0},"application/vnd.iptc.g2.knowledgeitem+xml":{source:"iana",compressible:!0},"application/vnd.iptc.g2.newsitem+xml":{source:"iana",compressible:!0},"application/vnd.iptc.g2.newsmessage+xml":{source:"iana",compressible:!0},"application/vnd.iptc.g2.packageitem+xml":{source:"iana",compressible:!0},"application/vnd.iptc.g2.planningitem+xml":{source:"iana",compressible:!0},"application/vnd.ipunplugged.rcprofile":{source:"iana",extensions:["rcprofile"]},"application/vnd.irepository.package+xml":{source:"iana",compressible:!0,extensions:["irp"]},"application/vnd.is-xpr":{source:"iana",extensions:["xpr"]},"application/vnd.isac.fcs":{source:"iana",extensions:["fcs"]},"application/vnd.iso11783-10+zip":{source:"iana",compressible:!1},"application/vnd.jam":{source:"iana",extensions:["jam"]},"application/vnd.japannet-directory-service":{source:"iana"},"application/vnd.japannet-jpnstore-wakeup":{source:"iana"},"application/vnd.japannet-payment-wakeup":{source:"iana"},"application/vnd.japannet-registration":{source:"iana"},"application/vnd.japannet-registration-wakeup":{source:"iana"},"application/vnd.japannet-setstore-wakeup":{source:"iana"},"application/vnd.japannet-verification":{source:"iana"},"application/vnd.japannet-verification-wakeup":{source:"iana"},"application/vnd.jcp.javame.midlet-rms":{source:"iana",extensions:["rms"]},"application/vnd.jisp":{source:"iana",extensions:["jisp"]},"application/vnd.joost.joda-archive":{source:"iana",extensions:["joda"]},"application/vnd.jsk.isdn-ngn":{source:"iana"},"application/vnd.kahootz":{source:"iana",extensions:["ktz","ktr"]},"application/vnd.kde.karbon":{source:"iana",extensions:["karbon"]},"application/vnd.kde.kchart":{source:"iana",extensions:["chrt"]},"application/vnd.kde.kformula":{source:"iana",extensions:["kfo"]},"application/vnd.kde.kivio":{source:"iana",extensions:["flw"]},"application/vnd.kde.kontour":{source:"iana",extensions:["kon"]},"application/vnd.kde.kpresenter":{source:"iana",extensions:["kpr","kpt"]},"application/vnd.kde.kspread":{source:"iana",extensions:["ksp"]},"application/vnd.kde.kword":{source:"iana",extensions:["kwd","kwt"]},"application/vnd.kenameaapp":{source:"iana",extensions:["htke"]},"application/vnd.kidspiration":{source:"iana",extensions:["kia"]},"application/vnd.kinar":{source:"iana",extensions:["kne","knp"]},"application/vnd.koan":{source:"iana",extensions:["skp","skd","skt","skm"]},"application/vnd.kodak-descriptor":{source:"iana",extensions:["sse"]},"application/vnd.las":{source:"iana"},"application/vnd.las.las+json":{source:"iana",compressible:!0},"application/vnd.las.las+xml":{source:"iana",compressible:!0,extensions:["lasxml"]},"application/vnd.laszip":{source:"iana"},"application/vnd.leap+json":{source:"iana",compressible:!0},"application/vnd.liberty-request+xml":{source:"iana",compressible:!0},"application/vnd.llamagraphics.life-balance.desktop":{source:"iana",extensions:["lbd"]},"application/vnd.llamagraphics.life-balance.exchange+xml":{source:"iana",compressible:!0,extensions:["lbe"]},"application/vnd.logipipe.circuit+zip":{source:"iana",compressible:!1},"application/vnd.loom":{source:"iana"},"application/vnd.lotus-1-2-3":{source:"iana",extensions:["123"]},"application/vnd.lotus-approach":{source:"iana",extensions:["apr"]},"application/vnd.lotus-freelance":{source:"iana",extensions:["pre"]},"application/vnd.lotus-notes":{source:"iana",extensions:["nsf"]},"application/vnd.lotus-organizer":{source:"iana",extensions:["org"]},"application/vnd.lotus-screencam":{source:"iana",extensions:["scm"]},"application/vnd.lotus-wordpro":{source:"iana",extensions:["lwp"]},"application/vnd.macports.portpkg":{source:"iana",extensions:["portpkg"]},"application/vnd.mapbox-vector-tile":{source:"iana",extensions:["mvt"]},"application/vnd.marlin.drm.actiontoken+xml":{source:"iana",compressible:!0},"application/vnd.marlin.drm.conftoken+xml":{source:"iana",compressible:!0},"application/vnd.marlin.drm.license+xml":{source:"iana",compressible:!0},"application/vnd.marlin.drm.mdcf":{source:"iana"},"application/vnd.mason+json":{source:"iana",compressible:!0},"application/vnd.maxar.archive.3tz+zip":{source:"iana",compressible:!1},"application/vnd.maxmind.maxmind-db":{source:"iana"},"application/vnd.mcd":{source:"iana",extensions:["mcd"]},"application/vnd.medcalcdata":{source:"iana",extensions:["mc1"]},"application/vnd.mediastation.cdkey":{source:"iana",extensions:["cdkey"]},"application/vnd.meridian-slingshot":{source:"iana"},"application/vnd.mfer":{source:"iana",extensions:["mwf"]},"application/vnd.mfmp":{source:"iana",extensions:["mfm"]},"application/vnd.micro+json":{source:"iana",compressible:!0},"application/vnd.micrografx.flo":{source:"iana",extensions:["flo"]},"application/vnd.micrografx.igx":{source:"iana",extensions:["igx"]},"application/vnd.microsoft.portable-executable":{source:"iana"},"application/vnd.microsoft.windows.thumbnail-cache":{source:"iana"},"application/vnd.miele+json":{source:"iana",compressible:!0},"application/vnd.mif":{source:"iana",extensions:["mif"]},"application/vnd.minisoft-hp3000-save":{source:"iana"},"application/vnd.mitsubishi.misty-guard.trustweb":{source:"iana"},"application/vnd.mobius.daf":{source:"iana",extensions:["daf"]},"application/vnd.mobius.dis":{source:"iana",extensions:["dis"]},"application/vnd.mobius.mbk":{source:"iana",extensions:["mbk"]},"application/vnd.mobius.mqy":{source:"iana",extensions:["mqy"]},"application/vnd.mobius.msl":{source:"iana",extensions:["msl"]},"application/vnd.mobius.plc":{source:"iana",extensions:["plc"]},"application/vnd.mobius.txf":{source:"iana",extensions:["txf"]},"application/vnd.mophun.application":{source:"iana",extensions:["mpn"]},"application/vnd.mophun.certificate":{source:"iana",extensions:["mpc"]},"application/vnd.motorola.flexsuite":{source:"iana"},"application/vnd.motorola.flexsuite.adsi":{source:"iana"},"application/vnd.motorola.flexsuite.fis":{source:"iana"},"application/vnd.motorola.flexsuite.gotap":{source:"iana"},"application/vnd.motorola.flexsuite.kmr":{source:"iana"},"application/vnd.motorola.flexsuite.ttc":{source:"iana"},"application/vnd.motorola.flexsuite.wem":{source:"iana"},"application/vnd.motorola.iprm":{source:"iana"},"application/vnd.mozilla.xul+xml":{source:"iana",compressible:!0,extensions:["xul"]},"application/vnd.ms-3mfdocument":{source:"iana"},"application/vnd.ms-artgalry":{source:"iana",extensions:["cil"]},"application/vnd.ms-asf":{source:"iana"},"application/vnd.ms-cab-compressed":{source:"iana",extensions:["cab"]},"application/vnd.ms-color.iccprofile":{source:"apache"},"application/vnd.ms-excel":{source:"iana",compressible:!1,extensions:["xls","xlm","xla","xlc","xlt","xlw"]},"application/vnd.ms-excel.addin.macroenabled.12":{source:"iana",extensions:["xlam"]},"application/vnd.ms-excel.sheet.binary.macroenabled.12":{source:"iana",extensions:["xlsb"]},"application/vnd.ms-excel.sheet.macroenabled.12":{source:"iana",extensions:["xlsm"]},"application/vnd.ms-excel.template.macroenabled.12":{source:"iana",extensions:["xltm"]},"application/vnd.ms-fontobject":{source:"iana",compressible:!0,extensions:["eot"]},"application/vnd.ms-htmlhelp":{source:"iana",extensions:["chm"]},"application/vnd.ms-ims":{source:"iana",extensions:["ims"]},"application/vnd.ms-lrm":{source:"iana",extensions:["lrm"]},"application/vnd.ms-office.activex+xml":{source:"iana",compressible:!0},"application/vnd.ms-officetheme":{source:"iana",extensions:["thmx"]},"application/vnd.ms-opentype":{source:"apache",compressible:!0},"application/vnd.ms-outlook":{compressible:!1,extensions:["msg"]},"application/vnd.ms-package.obfuscated-opentype":{source:"apache"},"application/vnd.ms-pki.seccat":{source:"apache",extensions:["cat"]},"application/vnd.ms-pki.stl":{source:"apache",extensions:["stl"]},"application/vnd.ms-playready.initiator+xml":{source:"iana",compressible:!0},"application/vnd.ms-powerpoint":{source:"iana",compressible:!1,extensions:["ppt","pps","pot"]},"application/vnd.ms-powerpoint.addin.macroenabled.12":{source:"iana",extensions:["ppam"]},"application/vnd.ms-powerpoint.presentation.macroenabled.12":{source:"iana",extensions:["pptm"]},"application/vnd.ms-powerpoint.slide.macroenabled.12":{source:"iana",extensions:["sldm"]},"application/vnd.ms-powerpoint.slideshow.macroenabled.12":{source:"iana",extensions:["ppsm"]},"application/vnd.ms-powerpoint.template.macroenabled.12":{source:"iana",extensions:["potm"]},"application/vnd.ms-printdevicecapabilities+xml":{source:"iana",compressible:!0},"application/vnd.ms-printing.printticket+xml":{source:"apache",compressible:!0},"application/vnd.ms-printschematicket+xml":{source:"iana",compressible:!0},"application/vnd.ms-project":{source:"iana",extensions:["mpp","mpt"]},"application/vnd.ms-tnef":{source:"iana"},"application/vnd.ms-windows.devicepairing":{source:"iana"},"application/vnd.ms-windows.nwprinting.oob":{source:"iana"},"application/vnd.ms-windows.printerpairing":{source:"iana"},"application/vnd.ms-windows.wsd.oob":{source:"iana"},"application/vnd.ms-wmdrm.lic-chlg-req":{source:"iana"},"application/vnd.ms-wmdrm.lic-resp":{source:"iana"},"application/vnd.ms-wmdrm.meter-chlg-req":{source:"iana"},"application/vnd.ms-wmdrm.meter-resp":{source:"iana"},"application/vnd.ms-word.document.macroenabled.12":{source:"iana",extensions:["docm"]},"application/vnd.ms-word.template.macroenabled.12":{source:"iana",extensions:["dotm"]},"application/vnd.ms-works":{source:"iana",extensions:["wps","wks","wcm","wdb"]},"application/vnd.ms-wpl":{source:"iana",extensions:["wpl"]},"application/vnd.ms-xpsdocument":{source:"iana",compressible:!1,extensions:["xps"]},"application/vnd.msa-disk-image":{source:"iana"},"application/vnd.mseq":{source:"iana",extensions:["mseq"]},"application/vnd.msign":{source:"iana"},"application/vnd.multiad.creator":{source:"iana"},"application/vnd.multiad.creator.cif":{source:"iana"},"application/vnd.music-niff":{source:"iana"},"application/vnd.musician":{source:"iana",extensions:["mus"]},"application/vnd.muvee.style":{source:"iana",extensions:["msty"]},"application/vnd.mynfc":{source:"iana",extensions:["taglet"]},"application/vnd.nacamar.ybrid+json":{source:"iana",compressible:!0},"application/vnd.ncd.control":{source:"iana"},"application/vnd.ncd.reference":{source:"iana"},"application/vnd.nearst.inv+json":{source:"iana",compressible:!0},"application/vnd.nebumind.line":{source:"iana"},"application/vnd.nervana":{source:"iana"},"application/vnd.netfpx":{source:"iana"},"application/vnd.neurolanguage.nlu":{source:"iana",extensions:["nlu"]},"application/vnd.nimn":{source:"iana"},"application/vnd.nintendo.nitro.rom":{source:"iana"},"application/vnd.nintendo.snes.rom":{source:"iana"},"application/vnd.nitf":{source:"iana",extensions:["ntf","nitf"]},"application/vnd.noblenet-directory":{source:"iana",extensions:["nnd"]},"application/vnd.noblenet-sealer":{source:"iana",extensions:["nns"]},"application/vnd.noblenet-web":{source:"iana",extensions:["nnw"]},"application/vnd.nokia.catalogs":{source:"iana"},"application/vnd.nokia.conml+wbxml":{source:"iana"},"application/vnd.nokia.conml+xml":{source:"iana",compressible:!0},"application/vnd.nokia.iptv.config+xml":{source:"iana",compressible:!0},"application/vnd.nokia.isds-radio-presets":{source:"iana"},"application/vnd.nokia.landmark+wbxml":{source:"iana"},"application/vnd.nokia.landmark+xml":{source:"iana",compressible:!0},"application/vnd.nokia.landmarkcollection+xml":{source:"iana",compressible:!0},"application/vnd.nokia.n-gage.ac+xml":{source:"iana",compressible:!0,extensions:["ac"]},"application/vnd.nokia.n-gage.data":{source:"iana",extensions:["ngdat"]},"application/vnd.nokia.n-gage.symbian.install":{source:"iana",extensions:["n-gage"]},"application/vnd.nokia.ncd":{source:"iana"},"application/vnd.nokia.pcd+wbxml":{source:"iana"},"application/vnd.nokia.pcd+xml":{source:"iana",compressible:!0},"application/vnd.nokia.radio-preset":{source:"iana",extensions:["rpst"]},"application/vnd.nokia.radio-presets":{source:"iana",extensions:["rpss"]},"application/vnd.novadigm.edm":{source:"iana",extensions:["edm"]},"application/vnd.novadigm.edx":{source:"iana",extensions:["edx"]},"application/vnd.novadigm.ext":{source:"iana",extensions:["ext"]},"application/vnd.ntt-local.content-share":{source:"iana"},"application/vnd.ntt-local.file-transfer":{source:"iana"},"application/vnd.ntt-local.ogw_remote-access":{source:"iana"},"application/vnd.ntt-local.sip-ta_remote":{source:"iana"},"application/vnd.ntt-local.sip-ta_tcp_stream":{source:"iana"},"application/vnd.oasis.opendocument.chart":{source:"iana",extensions:["odc"]},"application/vnd.oasis.opendocument.chart-template":{source:"iana",extensions:["otc"]},"application/vnd.oasis.opendocument.database":{source:"iana",extensions:["odb"]},"application/vnd.oasis.opendocument.formula":{source:"iana",extensions:["odf"]},"application/vnd.oasis.opendocument.formula-template":{source:"iana",extensions:["odft"]},"application/vnd.oasis.opendocument.graphics":{source:"iana",compressible:!1,extensions:["odg"]},"application/vnd.oasis.opendocument.graphics-template":{source:"iana",extensions:["otg"]},"application/vnd.oasis.opendocument.image":{source:"iana",extensions:["odi"]},"application/vnd.oasis.opendocument.image-template":{source:"iana",extensions:["oti"]},"application/vnd.oasis.opendocument.presentation":{source:"iana",compressible:!1,extensions:["odp"]},"application/vnd.oasis.opendocument.presentation-template":{source:"iana",extensions:["otp"]},"application/vnd.oasis.opendocument.spreadsheet":{source:"iana",compressible:!1,extensions:["ods"]},"application/vnd.oasis.opendocument.spreadsheet-template":{source:"iana",extensions:["ots"]},"application/vnd.oasis.opendocument.text":{source:"iana",compressible:!1,extensions:["odt"]},"application/vnd.oasis.opendocument.text-master":{source:"iana",extensions:["odm"]},"application/vnd.oasis.opendocument.text-template":{source:"iana",extensions:["ott"]},"application/vnd.oasis.opendocument.text-web":{source:"iana",extensions:["oth"]},"application/vnd.obn":{source:"iana"},"application/vnd.ocf+cbor":{source:"iana"},"application/vnd.oci.image.manifest.v1+json":{source:"iana",compressible:!0},"application/vnd.oftn.l10n+json":{source:"iana",compressible:!0},"application/vnd.oipf.contentaccessdownload+xml":{source:"iana",compressible:!0},"application/vnd.oipf.contentaccessstreaming+xml":{source:"iana",compressible:!0},"application/vnd.oipf.cspg-hexbinary":{source:"iana"},"application/vnd.oipf.dae.svg+xml":{source:"iana",compressible:!0},"application/vnd.oipf.dae.xhtml+xml":{source:"iana",compressible:!0},"application/vnd.oipf.mippvcontrolmessage+xml":{source:"iana",compressible:!0},"application/vnd.oipf.pae.gem":{source:"iana"},"application/vnd.oipf.spdiscovery+xml":{source:"iana",compressible:!0},"application/vnd.oipf.spdlist+xml":{source:"iana",compressible:!0},"application/vnd.oipf.ueprofile+xml":{source:"iana",compressible:!0},"application/vnd.oipf.userprofile+xml":{source:"iana",compressible:!0},"application/vnd.olpc-sugar":{source:"iana",extensions:["xo"]},"application/vnd.oma-scws-config":{source:"iana"},"application/vnd.oma-scws-http-request":{source:"iana"},"application/vnd.oma-scws-http-response":{source:"iana"},"application/vnd.oma.bcast.associated-procedure-parameter+xml":{source:"iana",compressible:!0},"application/vnd.oma.bcast.drm-trigger+xml":{source:"iana",compressible:!0},"application/vnd.oma.bcast.imd+xml":{source:"iana",compressible:!0},"application/vnd.oma.bcast.ltkm":{source:"iana"},"application/vnd.oma.bcast.notification+xml":{source:"iana",compressible:!0},"application/vnd.oma.bcast.provisioningtrigger":{source:"iana"},"application/vnd.oma.bcast.sgboot":{source:"iana"},"application/vnd.oma.bcast.sgdd+xml":{source:"iana",compressible:!0},"application/vnd.oma.bcast.sgdu":{source:"iana"},"application/vnd.oma.bcast.simple-symbol-container":{source:"iana"},"application/vnd.oma.bcast.smartcard-trigger+xml":{source:"iana",compressible:!0},"application/vnd.oma.bcast.sprov+xml":{source:"iana",compressible:!0},"application/vnd.oma.bcast.stkm":{source:"iana"},"application/vnd.oma.cab-address-book+xml":{source:"iana",compressible:!0},"application/vnd.oma.cab-feature-handler+xml":{source:"iana",compressible:!0},"application/vnd.oma.cab-pcc+xml":{source:"iana",compressible:!0},"application/vnd.oma.cab-subs-invite+xml":{source:"iana",compressible:!0},"application/vnd.oma.cab-user-prefs+xml":{source:"iana",compressible:!0},"application/vnd.oma.dcd":{source:"iana"},"application/vnd.oma.dcdc":{source:"iana"},"application/vnd.oma.dd2+xml":{source:"iana",compressible:!0,extensions:["dd2"]},"application/vnd.oma.drm.risd+xml":{source:"iana",compressible:!0},"application/vnd.oma.group-usage-list+xml":{source:"iana",compressible:!0},"application/vnd.oma.lwm2m+cbor":{source:"iana"},"application/vnd.oma.lwm2m+json":{source:"iana",compressible:!0},"application/vnd.oma.lwm2m+tlv":{source:"iana"},"application/vnd.oma.pal+xml":{source:"iana",compressible:!0},"application/vnd.oma.poc.detailed-progress-report+xml":{source:"iana",compressible:!0},"application/vnd.oma.poc.final-report+xml":{source:"iana",compressible:!0},"application/vnd.oma.poc.groups+xml":{source:"iana",compressible:!0},"application/vnd.oma.poc.invocation-descriptor+xml":{source:"iana",compressible:!0},"application/vnd.oma.poc.optimized-progress-report+xml":{source:"iana",compressible:!0},"application/vnd.oma.push":{source:"iana"},"application/vnd.oma.scidm.messages+xml":{source:"iana",compressible:!0},"application/vnd.oma.xcap-directory+xml":{source:"iana",compressible:!0},"application/vnd.omads-email+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/vnd.omads-file+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/vnd.omads-folder+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/vnd.omaloc-supl-init":{source:"iana"},"application/vnd.onepager":{source:"iana"},"application/vnd.onepagertamp":{source:"iana"},"application/vnd.onepagertamx":{source:"iana"},"application/vnd.onepagertat":{source:"iana"},"application/vnd.onepagertatp":{source:"iana"},"application/vnd.onepagertatx":{source:"iana"},"application/vnd.openblox.game+xml":{source:"iana",compressible:!0,extensions:["obgx"]},"application/vnd.openblox.game-binary":{source:"iana"},"application/vnd.openeye.oeb":{source:"iana"},"application/vnd.openofficeorg.extension":{source:"apache",extensions:["oxt"]},"application/vnd.openstreetmap.data+xml":{source:"iana",compressible:!0,extensions:["osm"]},"application/vnd.opentimestamps.ots":{source:"iana"},"application/vnd.openxmlformats-officedocument.custom-properties+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.customxmlproperties+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.drawing+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.drawingml.chart+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.extended-properties+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.comments+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.presentation":{source:"iana",compressible:!1,extensions:["pptx"]},"application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.presprops+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.slide":{source:"iana",extensions:["sldx"]},"application/vnd.openxmlformats-officedocument.presentationml.slide+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.slideshow":{source:"iana",extensions:["ppsx"]},"application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.tags+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.template":{source:"iana",extensions:["potx"]},"application/vnd.openxmlformats-officedocument.presentationml.template.main+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":{source:"iana",compressible:!1,extensions:["xlsx"]},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.template":{source:"iana",extensions:["xltx"]},"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.theme+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.themeoverride+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.vmldrawing":{source:"iana"},"application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.document":{source:"iana",compressible:!1,extensions:["docx"]},"application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.template":{source:"iana",extensions:["dotx"]},"application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-package.core-properties+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-package.relationships+xml":{source:"iana",compressible:!0},"application/vnd.oracle.resource+json":{source:"iana",compressible:!0},"application/vnd.orange.indata":{source:"iana"},"application/vnd.osa.netdeploy":{source:"iana"},"application/vnd.osgeo.mapguide.package":{source:"iana",extensions:["mgp"]},"application/vnd.osgi.bundle":{source:"iana"},"application/vnd.osgi.dp":{source:"iana",extensions:["dp"]},"application/vnd.osgi.subsystem":{source:"iana",extensions:["esa"]},"application/vnd.otps.ct-kip+xml":{source:"iana",compressible:!0},"application/vnd.oxli.countgraph":{source:"iana"},"application/vnd.pagerduty+json":{source:"iana",compressible:!0},"application/vnd.palm":{source:"iana",extensions:["pdb","pqa","oprc"]},"application/vnd.panoply":{source:"iana"},"application/vnd.paos.xml":{source:"iana"},"application/vnd.patentdive":{source:"iana"},"application/vnd.patientecommsdoc":{source:"iana"},"application/vnd.pawaafile":{source:"iana",extensions:["paw"]},"application/vnd.pcos":{source:"iana"},"application/vnd.pg.format":{source:"iana",extensions:["str"]},"application/vnd.pg.osasli":{source:"iana",extensions:["ei6"]},"application/vnd.piaccess.application-licence":{source:"iana"},"application/vnd.picsel":{source:"iana",extensions:["efif"]},"application/vnd.pmi.widget":{source:"iana",extensions:["wg"]},"application/vnd.poc.group-advertisement+xml":{source:"iana",compressible:!0},"application/vnd.pocketlearn":{source:"iana",extensions:["plf"]},"application/vnd.powerbuilder6":{source:"iana",extensions:["pbd"]},"application/vnd.powerbuilder6-s":{source:"iana"},"application/vnd.powerbuilder7":{source:"iana"},"application/vnd.powerbuilder7-s":{source:"iana"},"application/vnd.powerbuilder75":{source:"iana"},"application/vnd.powerbuilder75-s":{source:"iana"},"application/vnd.preminet":{source:"iana"},"application/vnd.previewsystems.box":{source:"iana",extensions:["box"]},"application/vnd.proteus.magazine":{source:"iana",extensions:["mgz"]},"application/vnd.psfs":{source:"iana"},"application/vnd.publishare-delta-tree":{source:"iana",extensions:["qps"]},"application/vnd.pvi.ptid1":{source:"iana",extensions:["ptid"]},"application/vnd.pwg-multiplexed":{source:"iana"},"application/vnd.pwg-xhtml-print+xml":{source:"iana",compressible:!0},"application/vnd.qualcomm.brew-app-res":{source:"iana"},"application/vnd.quarantainenet":{source:"iana"},"application/vnd.quark.quarkxpress":{source:"iana",extensions:["qxd","qxt","qwd","qwt","qxl","qxb"]},"application/vnd.quobject-quoxdocument":{source:"iana"},"application/vnd.radisys.moml+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-audit+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-audit-conf+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-audit-conn+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-audit-dialog+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-audit-stream+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-conf+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-dialog+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-dialog-base+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-dialog-fax-detect+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-dialog-fax-sendrecv+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-dialog-group+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-dialog-speech+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-dialog-transform+xml":{source:"iana",compressible:!0},"application/vnd.rainstor.data":{source:"iana"},"application/vnd.rapid":{source:"iana"},"application/vnd.rar":{source:"iana",extensions:["rar"]},"application/vnd.realvnc.bed":{source:"iana",extensions:["bed"]},"application/vnd.recordare.musicxml":{source:"iana",extensions:["mxl"]},"application/vnd.recordare.musicxml+xml":{source:"iana",compressible:!0,extensions:["musicxml"]},"application/vnd.renlearn.rlprint":{source:"iana"},"application/vnd.resilient.logic":{source:"iana"},"application/vnd.restful+json":{source:"iana",compressible:!0},"application/vnd.rig.cryptonote":{source:"iana",extensions:["cryptonote"]},"application/vnd.rim.cod":{source:"apache",extensions:["cod"]},"application/vnd.rn-realmedia":{source:"apache",extensions:["rm"]},"application/vnd.rn-realmedia-vbr":{source:"apache",extensions:["rmvb"]},"application/vnd.route66.link66+xml":{source:"iana",compressible:!0,extensions:["link66"]},"application/vnd.rs-274x":{source:"iana"},"application/vnd.ruckus.download":{source:"iana"},"application/vnd.s3sms":{source:"iana"},"application/vnd.sailingtracker.track":{source:"iana",extensions:["st"]},"application/vnd.sar":{source:"iana"},"application/vnd.sbm.cid":{source:"iana"},"application/vnd.sbm.mid2":{source:"iana"},"application/vnd.scribus":{source:"iana"},"application/vnd.sealed.3df":{source:"iana"},"application/vnd.sealed.csf":{source:"iana"},"application/vnd.sealed.doc":{source:"iana"},"application/vnd.sealed.eml":{source:"iana"},"application/vnd.sealed.mht":{source:"iana"},"application/vnd.sealed.net":{source:"iana"},"application/vnd.sealed.ppt":{source:"iana"},"application/vnd.sealed.tiff":{source:"iana"},"application/vnd.sealed.xls":{source:"iana"},"application/vnd.sealedmedia.softseal.html":{source:"iana"},"application/vnd.sealedmedia.softseal.pdf":{source:"iana"},"application/vnd.seemail":{source:"iana",extensions:["see"]},"application/vnd.seis+json":{source:"iana",compressible:!0},"application/vnd.sema":{source:"iana",extensions:["sema"]},"application/vnd.semd":{source:"iana",extensions:["semd"]},"application/vnd.semf":{source:"iana",extensions:["semf"]},"application/vnd.shade-save-file":{source:"iana"},"application/vnd.shana.informed.formdata":{source:"iana",extensions:["ifm"]},"application/vnd.shana.informed.formtemplate":{source:"iana",extensions:["itp"]},"application/vnd.shana.informed.interchange":{source:"iana",extensions:["iif"]},"application/vnd.shana.informed.package":{source:"iana",extensions:["ipk"]},"application/vnd.shootproof+json":{source:"iana",compressible:!0},"application/vnd.shopkick+json":{source:"iana",compressible:!0},"application/vnd.shp":{source:"iana"},"application/vnd.shx":{source:"iana"},"application/vnd.sigrok.session":{source:"iana"},"application/vnd.simtech-mindmapper":{source:"iana",extensions:["twd","twds"]},"application/vnd.siren+json":{source:"iana",compressible:!0},"application/vnd.smaf":{source:"iana",extensions:["mmf"]},"application/vnd.smart.notebook":{source:"iana"},"application/vnd.smart.teacher":{source:"iana",extensions:["teacher"]},"application/vnd.snesdev-page-table":{source:"iana"},"application/vnd.software602.filler.form+xml":{source:"iana",compressible:!0,extensions:["fo"]},"application/vnd.software602.filler.form-xml-zip":{source:"iana"},"application/vnd.solent.sdkm+xml":{source:"iana",compressible:!0,extensions:["sdkm","sdkd"]},"application/vnd.spotfire.dxp":{source:"iana",extensions:["dxp"]},"application/vnd.spotfire.sfs":{source:"iana",extensions:["sfs"]},"application/vnd.sqlite3":{source:"iana"},"application/vnd.sss-cod":{source:"iana"},"application/vnd.sss-dtf":{source:"iana"},"application/vnd.sss-ntf":{source:"iana"},"application/vnd.stardivision.calc":{source:"apache",extensions:["sdc"]},"application/vnd.stardivision.draw":{source:"apache",extensions:["sda"]},"application/vnd.stardivision.impress":{source:"apache",extensions:["sdd"]},"application/vnd.stardivision.math":{source:"apache",extensions:["smf"]},"application/vnd.stardivision.writer":{source:"apache",extensions:["sdw","vor"]},"application/vnd.stardivision.writer-global":{source:"apache",extensions:["sgl"]},"application/vnd.stepmania.package":{source:"iana",extensions:["smzip"]},"application/vnd.stepmania.stepchart":{source:"iana",extensions:["sm"]},"application/vnd.street-stream":{source:"iana"},"application/vnd.sun.wadl+xml":{source:"iana",compressible:!0,extensions:["wadl"]},"application/vnd.sun.xml.calc":{source:"apache",extensions:["sxc"]},"application/vnd.sun.xml.calc.template":{source:"apache",extensions:["stc"]},"application/vnd.sun.xml.draw":{source:"apache",extensions:["sxd"]},"application/vnd.sun.xml.draw.template":{source:"apache",extensions:["std"]},"application/vnd.sun.xml.impress":{source:"apache",extensions:["sxi"]},"application/vnd.sun.xml.impress.template":{source:"apache",extensions:["sti"]},"application/vnd.sun.xml.math":{source:"apache",extensions:["sxm"]},"application/vnd.sun.xml.writer":{source:"apache",extensions:["sxw"]},"application/vnd.sun.xml.writer.global":{source:"apache",extensions:["sxg"]},"application/vnd.sun.xml.writer.template":{source:"apache",extensions:["stw"]},"application/vnd.sus-calendar":{source:"iana",extensions:["sus","susp"]},"application/vnd.svd":{source:"iana",extensions:["svd"]},"application/vnd.swiftview-ics":{source:"iana"},"application/vnd.sycle+xml":{source:"iana",compressible:!0},"application/vnd.syft+json":{source:"iana",compressible:!0},"application/vnd.symbian.install":{source:"apache",extensions:["sis","sisx"]},"application/vnd.syncml+xml":{source:"iana",charset:"UTF-8",compressible:!0,extensions:["xsm"]},"application/vnd.syncml.dm+wbxml":{source:"iana",charset:"UTF-8",extensions:["bdm"]},"application/vnd.syncml.dm+xml":{source:"iana",charset:"UTF-8",compressible:!0,extensions:["xdm"]},"application/vnd.syncml.dm.notification":{source:"iana"},"application/vnd.syncml.dmddf+wbxml":{source:"iana"},"application/vnd.syncml.dmddf+xml":{source:"iana",charset:"UTF-8",compressible:!0,extensions:["ddf"]},"application/vnd.syncml.dmtnds+wbxml":{source:"iana"},"application/vnd.syncml.dmtnds+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/vnd.syncml.ds.notification":{source:"iana"},"application/vnd.tableschema+json":{source:"iana",compressible:!0},"application/vnd.tao.intent-module-archive":{source:"iana",extensions:["tao"]},"application/vnd.tcpdump.pcap":{source:"iana",extensions:["pcap","cap","dmp"]},"application/vnd.think-cell.ppttc+json":{source:"iana",compressible:!0},"application/vnd.tmd.mediaflex.api+xml":{source:"iana",compressible:!0},"application/vnd.tml":{source:"iana"},"application/vnd.tmobile-livetv":{source:"iana",extensions:["tmo"]},"application/vnd.tri.onesource":{source:"iana"},"application/vnd.trid.tpt":{source:"iana",extensions:["tpt"]},"application/vnd.triscape.mxs":{source:"iana",extensions:["mxs"]},"application/vnd.trueapp":{source:"iana",extensions:["tra"]},"application/vnd.truedoc":{source:"iana"},"application/vnd.ubisoft.webplayer":{source:"iana"},"application/vnd.ufdl":{source:"iana",extensions:["ufd","ufdl"]},"application/vnd.uiq.theme":{source:"iana",extensions:["utz"]},"application/vnd.umajin":{source:"iana",extensions:["umj"]},"application/vnd.unity":{source:"iana",extensions:["unityweb"]},"application/vnd.uoml+xml":{source:"iana",compressible:!0,extensions:["uoml"]},"application/vnd.uplanet.alert":{source:"iana"},"application/vnd.uplanet.alert-wbxml":{source:"iana"},"application/vnd.uplanet.bearer-choice":{source:"iana"},"application/vnd.uplanet.bearer-choice-wbxml":{source:"iana"},"application/vnd.uplanet.cacheop":{source:"iana"},"application/vnd.uplanet.cacheop-wbxml":{source:"iana"},"application/vnd.uplanet.channel":{source:"iana"},"application/vnd.uplanet.channel-wbxml":{source:"iana"},"application/vnd.uplanet.list":{source:"iana"},"application/vnd.uplanet.list-wbxml":{source:"iana"},"application/vnd.uplanet.listcmd":{source:"iana"},"application/vnd.uplanet.listcmd-wbxml":{source:"iana"},"application/vnd.uplanet.signal":{source:"iana"},"application/vnd.uri-map":{source:"iana"},"application/vnd.valve.source.material":{source:"iana"},"application/vnd.vcx":{source:"iana",extensions:["vcx"]},"application/vnd.vd-study":{source:"iana"},"application/vnd.vectorworks":{source:"iana"},"application/vnd.vel+json":{source:"iana",compressible:!0},"application/vnd.verimatrix.vcas":{source:"iana"},"application/vnd.veritone.aion+json":{source:"iana",compressible:!0},"application/vnd.veryant.thin":{source:"iana"},"application/vnd.ves.encrypted":{source:"iana"},"application/vnd.vidsoft.vidconference":{source:"iana"},"application/vnd.visio":{source:"iana",extensions:["vsd","vst","vss","vsw"]},"application/vnd.visionary":{source:"iana",extensions:["vis"]},"application/vnd.vividence.scriptfile":{source:"iana"},"application/vnd.vsf":{source:"iana",extensions:["vsf"]},"application/vnd.wap.sic":{source:"iana"},"application/vnd.wap.slc":{source:"iana"},"application/vnd.wap.wbxml":{source:"iana",charset:"UTF-8",extensions:["wbxml"]},"application/vnd.wap.wmlc":{source:"iana",extensions:["wmlc"]},"application/vnd.wap.wmlscriptc":{source:"iana",extensions:["wmlsc"]},"application/vnd.webturbo":{source:"iana",extensions:["wtb"]},"application/vnd.wfa.dpp":{source:"iana"},"application/vnd.wfa.p2p":{source:"iana"},"application/vnd.wfa.wsc":{source:"iana"},"application/vnd.windows.devicepairing":{source:"iana"},"application/vnd.wmc":{source:"iana"},"application/vnd.wmf.bootstrap":{source:"iana"},"application/vnd.wolfram.mathematica":{source:"iana"},"application/vnd.wolfram.mathematica.package":{source:"iana"},"application/vnd.wolfram.player":{source:"iana",extensions:["nbp"]},"application/vnd.wordperfect":{source:"iana",extensions:["wpd"]},"application/vnd.wqd":{source:"iana",extensions:["wqd"]},"application/vnd.wrq-hp3000-labelled":{source:"iana"},"application/vnd.wt.stf":{source:"iana",extensions:["stf"]},"application/vnd.wv.csp+wbxml":{source:"iana"},"application/vnd.wv.csp+xml":{source:"iana",compressible:!0},"application/vnd.wv.ssp+xml":{source:"iana",compressible:!0},"application/vnd.xacml+json":{source:"iana",compressible:!0},"application/vnd.xara":{source:"iana",extensions:["xar"]},"application/vnd.xfdl":{source:"iana",extensions:["xfdl"]},"application/vnd.xfdl.webform":{source:"iana"},"application/vnd.xmi+xml":{source:"iana",compressible:!0},"application/vnd.xmpie.cpkg":{source:"iana"},"application/vnd.xmpie.dpkg":{source:"iana"},"application/vnd.xmpie.plan":{source:"iana"},"application/vnd.xmpie.ppkg":{source:"iana"},"application/vnd.xmpie.xlim":{source:"iana"},"application/vnd.yamaha.hv-dic":{source:"iana",extensions:["hvd"]},"application/vnd.yamaha.hv-script":{source:"iana",extensions:["hvs"]},"application/vnd.yamaha.hv-voice":{source:"iana",extensions:["hvp"]},"application/vnd.yamaha.openscoreformat":{source:"iana",extensions:["osf"]},"application/vnd.yamaha.openscoreformat.osfpvg+xml":{source:"iana",compressible:!0,extensions:["osfpvg"]},"application/vnd.yamaha.remote-setup":{source:"iana"},"application/vnd.yamaha.smaf-audio":{source:"iana",extensions:["saf"]},"application/vnd.yamaha.smaf-phrase":{source:"iana",extensions:["spf"]},"application/vnd.yamaha.through-ngn":{source:"iana"},"application/vnd.yamaha.tunnel-udpencap":{source:"iana"},"application/vnd.yaoweme":{source:"iana"},"application/vnd.yellowriver-custom-menu":{source:"iana",extensions:["cmp"]},"application/vnd.youtube.yt":{source:"iana"},"application/vnd.zul":{source:"iana",extensions:["zir","zirz"]},"application/vnd.zzazz.deck+xml":{source:"iana",compressible:!0,extensions:["zaz"]},"application/voicexml+xml":{source:"iana",compressible:!0,extensions:["vxml"]},"application/voucher-cms+json":{source:"iana",compressible:!0},"application/vq-rtcpxr":{source:"iana"},"application/wasm":{source:"iana",compressible:!0,extensions:["wasm"]},"application/watcherinfo+xml":{source:"iana",compressible:!0,extensions:["wif"]},"application/webpush-options+json":{source:"iana",compressible:!0},"application/whoispp-query":{source:"iana"},"application/whoispp-response":{source:"iana"},"application/widget":{source:"iana",extensions:["wgt"]},"application/winhlp":{source:"apache",extensions:["hlp"]},"application/wita":{source:"iana"},"application/wordperfect5.1":{source:"iana"},"application/wsdl+xml":{source:"iana",compressible:!0,extensions:["wsdl"]},"application/wspolicy+xml":{source:"iana",compressible:!0,extensions:["wspolicy"]},"application/x-7z-compressed":{source:"apache",compressible:!1,extensions:["7z"]},"application/x-abiword":{source:"apache",extensions:["abw"]},"application/x-ace-compressed":{source:"apache",extensions:["ace"]},"application/x-amf":{source:"apache"},"application/x-apple-diskimage":{source:"apache",extensions:["dmg"]},"application/x-arj":{compressible:!1,extensions:["arj"]},"application/x-authorware-bin":{source:"apache",extensions:["aab","x32","u32","vox"]},"application/x-authorware-map":{source:"apache",extensions:["aam"]},"application/x-authorware-seg":{source:"apache",extensions:["aas"]},"application/x-bcpio":{source:"apache",extensions:["bcpio"]},"application/x-bdoc":{compressible:!1,extensions:["bdoc"]},"application/x-bittorrent":{source:"apache",extensions:["torrent"]},"application/x-blorb":{source:"apache",extensions:["blb","blorb"]},"application/x-bzip":{source:"apache",compressible:!1,extensions:["bz"]},"application/x-bzip2":{source:"apache",compressible:!1,extensions:["bz2","boz"]},"application/x-cbr":{source:"apache",extensions:["cbr","cba","cbt","cbz","cb7"]},"application/x-cdlink":{source:"apache",extensions:["vcd"]},"application/x-cfs-compressed":{source:"apache",extensions:["cfs"]},"application/x-chat":{source:"apache",extensions:["chat"]},"application/x-chess-pgn":{source:"apache",extensions:["pgn"]},"application/x-chrome-extension":{extensions:["crx"]},"application/x-cocoa":{source:"nginx",extensions:["cco"]},"application/x-compress":{source:"apache"},"application/x-conference":{source:"apache",extensions:["nsc"]},"application/x-cpio":{source:"apache",extensions:["cpio"]},"application/x-csh":{source:"apache",extensions:["csh"]},"application/x-deb":{compressible:!1},"application/x-debian-package":{source:"apache",extensions:["deb","udeb"]},"application/x-dgc-compressed":{source:"apache",extensions:["dgc"]},"application/x-director":{source:"apache",extensions:["dir","dcr","dxr","cst","cct","cxt","w3d","fgd","swa"]},"application/x-doom":{source:"apache",extensions:["wad"]},"application/x-dtbncx+xml":{source:"apache",compressible:!0,extensions:["ncx"]},"application/x-dtbook+xml":{source:"apache",compressible:!0,extensions:["dtb"]},"application/x-dtbresource+xml":{source:"apache",compressible:!0,extensions:["res"]},"application/x-dvi":{source:"apache",compressible:!1,extensions:["dvi"]},"application/x-envoy":{source:"apache",extensions:["evy"]},"application/x-eva":{source:"apache",extensions:["eva"]},"application/x-font-bdf":{source:"apache",extensions:["bdf"]},"application/x-font-dos":{source:"apache"},"application/x-font-framemaker":{source:"apache"},"application/x-font-ghostscript":{source:"apache",extensions:["gsf"]},"application/x-font-libgrx":{source:"apache"},"application/x-font-linux-psf":{source:"apache",extensions:["psf"]},"application/x-font-pcf":{source:"apache",extensions:["pcf"]},"application/x-font-snf":{source:"apache",extensions:["snf"]},"application/x-font-speedo":{source:"apache"},"application/x-font-sunos-news":{source:"apache"},"application/x-font-type1":{source:"apache",extensions:["pfa","pfb","pfm","afm"]},"application/x-font-vfont":{source:"apache"},"application/x-freearc":{source:"apache",extensions:["arc"]},"application/x-futuresplash":{source:"apache",extensions:["spl"]},"application/x-gca-compressed":{source:"apache",extensions:["gca"]},"application/x-glulx":{source:"apache",extensions:["ulx"]},"application/x-gnumeric":{source:"apache",extensions:["gnumeric"]},"application/x-gramps-xml":{source:"apache",extensions:["gramps"]},"application/x-gtar":{source:"apache",extensions:["gtar"]},"application/x-gzip":{source:"apache"},"application/x-hdf":{source:"apache",extensions:["hdf"]},"application/x-httpd-php":{compressible:!0,extensions:["php"]},"application/x-install-instructions":{source:"apache",extensions:["install"]},"application/x-iso9660-image":{source:"apache",extensions:["iso"]},"application/x-iwork-keynote-sffkey":{extensions:["key"]},"application/x-iwork-numbers-sffnumbers":{extensions:["numbers"]},"application/x-iwork-pages-sffpages":{extensions:["pages"]},"application/x-java-archive-diff":{source:"nginx",extensions:["jardiff"]},"application/x-java-jnlp-file":{source:"apache",compressible:!1,extensions:["jnlp"]},"application/x-javascript":{compressible:!0},"application/x-keepass2":{extensions:["kdbx"]},"application/x-latex":{source:"apache",compressible:!1,extensions:["latex"]},"application/x-lua-bytecode":{extensions:["luac"]},"application/x-lzh-compressed":{source:"apache",extensions:["lzh","lha"]},"application/x-makeself":{source:"nginx",extensions:["run"]},"application/x-mie":{source:"apache",extensions:["mie"]},"application/x-mobipocket-ebook":{source:"apache",extensions:["prc","mobi"]},"application/x-mpegurl":{compressible:!1},"application/x-ms-application":{source:"apache",extensions:["application"]},"application/x-ms-shortcut":{source:"apache",extensions:["lnk"]},"application/x-ms-wmd":{source:"apache",extensions:["wmd"]},"application/x-ms-wmz":{source:"apache",extensions:["wmz"]},"application/x-ms-xbap":{source:"apache",extensions:["xbap"]},"application/x-msaccess":{source:"apache",extensions:["mdb"]},"application/x-msbinder":{source:"apache",extensions:["obd"]},"application/x-mscardfile":{source:"apache",extensions:["crd"]},"application/x-msclip":{source:"apache",extensions:["clp"]},"application/x-msdos-program":{extensions:["exe"]},"application/x-msdownload":{source:"apache",extensions:["exe","dll","com","bat","msi"]},"application/x-msmediaview":{source:"apache",extensions:["mvb","m13","m14"]},"application/x-msmetafile":{source:"apache",extensions:["wmf","wmz","emf","emz"]},"application/x-msmoney":{source:"apache",extensions:["mny"]},"application/x-mspublisher":{source:"apache",extensions:["pub"]},"application/x-msschedule":{source:"apache",extensions:["scd"]},"application/x-msterminal":{source:"apache",extensions:["trm"]},"application/x-mswrite":{source:"apache",extensions:["wri"]},"application/x-netcdf":{source:"apache",extensions:["nc","cdf"]},"application/x-ns-proxy-autoconfig":{compressible:!0,extensions:["pac"]},"application/x-nzb":{source:"apache",extensions:["nzb"]},"application/x-perl":{source:"nginx",extensions:["pl","pm"]},"application/x-pilot":{source:"nginx",extensions:["prc","pdb"]},"application/x-pkcs12":{source:"apache",compressible:!1,extensions:["p12","pfx"]},"application/x-pkcs7-certificates":{source:"apache",extensions:["p7b","spc"]},"application/x-pkcs7-certreqresp":{source:"apache",extensions:["p7r"]},"application/x-pki-message":{source:"iana"},"application/x-rar-compressed":{source:"apache",compressible:!1,extensions:["rar"]},"application/x-redhat-package-manager":{source:"nginx",extensions:["rpm"]},"application/x-research-info-systems":{source:"apache",extensions:["ris"]},"application/x-sea":{source:"nginx",extensions:["sea"]},"application/x-sh":{source:"apache",compressible:!0,extensions:["sh"]},"application/x-shar":{source:"apache",extensions:["shar"]},"application/x-shockwave-flash":{source:"apache",compressible:!1,extensions:["swf"]},"application/x-silverlight-app":{source:"apache",extensions:["xap"]},"application/x-sql":{source:"apache",extensions:["sql"]},"application/x-stuffit":{source:"apache",compressible:!1,extensions:["sit"]},"application/x-stuffitx":{source:"apache",extensions:["sitx"]},"application/x-subrip":{source:"apache",extensions:["srt"]},"application/x-sv4cpio":{source:"apache",extensions:["sv4cpio"]},"application/x-sv4crc":{source:"apache",extensions:["sv4crc"]},"application/x-t3vm-image":{source:"apache",extensions:["t3"]},"application/x-tads":{source:"apache",extensions:["gam"]},"application/x-tar":{source:"apache",compressible:!0,extensions:["tar"]},"application/x-tcl":{source:"apache",extensions:["tcl","tk"]},"application/x-tex":{source:"apache",extensions:["tex"]},"application/x-tex-tfm":{source:"apache",extensions:["tfm"]},"application/x-texinfo":{source:"apache",extensions:["texinfo","texi"]},"application/x-tgif":{source:"apache",extensions:["obj"]},"application/x-ustar":{source:"apache",extensions:["ustar"]},"application/x-virtualbox-hdd":{compressible:!0,extensions:["hdd"]},"application/x-virtualbox-ova":{compressible:!0,extensions:["ova"]},"application/x-virtualbox-ovf":{compressible:!0,extensions:["ovf"]},"application/x-virtualbox-vbox":{compressible:!0,extensions:["vbox"]},"application/x-virtualbox-vbox-extpack":{compressible:!1,extensions:["vbox-extpack"]},"application/x-virtualbox-vdi":{compressible:!0,extensions:["vdi"]},"application/x-virtualbox-vhd":{compressible:!0,extensions:["vhd"]},"application/x-virtualbox-vmdk":{compressible:!0,extensions:["vmdk"]},"application/x-wais-source":{source:"apache",extensions:["src"]},"application/x-web-app-manifest+json":{compressible:!0,extensions:["webapp"]},"application/x-www-form-urlencoded":{source:"iana",compressible:!0},"application/x-x509-ca-cert":{source:"iana",extensions:["der","crt","pem"]},"application/x-x509-ca-ra-cert":{source:"iana"},"application/x-x509-next-ca-cert":{source:"iana"},"application/x-xfig":{source:"apache",extensions:["fig"]},"application/x-xliff+xml":{source:"apache",compressible:!0,extensions:["xlf"]},"application/x-xpinstall":{source:"apache",compressible:!1,extensions:["xpi"]},"application/x-xz":{source:"apache",extensions:["xz"]},"application/x-zmachine":{source:"apache",extensions:["z1","z2","z3","z4","z5","z6","z7","z8"]},"application/x400-bp":{source:"iana"},"application/xacml+xml":{source:"iana",compressible:!0},"application/xaml+xml":{source:"apache",compressible:!0,extensions:["xaml"]},"application/xcap-att+xml":{source:"iana",compressible:!0,extensions:["xav"]},"application/xcap-caps+xml":{source:"iana",compressible:!0,extensions:["xca"]},"application/xcap-diff+xml":{source:"iana",compressible:!0,extensions:["xdf"]},"application/xcap-el+xml":{source:"iana",compressible:!0,extensions:["xel"]},"application/xcap-error+xml":{source:"iana",compressible:!0},"application/xcap-ns+xml":{source:"iana",compressible:!0,extensions:["xns"]},"application/xcon-conference-info+xml":{source:"iana",compressible:!0},"application/xcon-conference-info-diff+xml":{source:"iana",compressible:!0},"application/xenc+xml":{source:"iana",compressible:!0,extensions:["xenc"]},"application/xhtml+xml":{source:"iana",compressible:!0,extensions:["xhtml","xht"]},"application/xhtml-voice+xml":{source:"apache",compressible:!0},"application/xliff+xml":{source:"iana",compressible:!0,extensions:["xlf"]},"application/xml":{source:"iana",compressible:!0,extensions:["xml","xsl","xsd","rng"]},"application/xml-dtd":{source:"iana",compressible:!0,extensions:["dtd"]},"application/xml-external-parsed-entity":{source:"iana"},"application/xml-patch+xml":{source:"iana",compressible:!0},"application/xmpp+xml":{source:"iana",compressible:!0},"application/xop+xml":{source:"iana",compressible:!0,extensions:["xop"]},"application/xproc+xml":{source:"apache",compressible:!0,extensions:["xpl"]},"application/xslt+xml":{source:"iana",compressible:!0,extensions:["xsl","xslt"]},"application/xspf+xml":{source:"apache",compressible:!0,extensions:["xspf"]},"application/xv+xml":{source:"iana",compressible:!0,extensions:["mxml","xhvml","xvml","xvm"]},"application/yang":{source:"iana",extensions:["yang"]},"application/yang-data+json":{source:"iana",compressible:!0},"application/yang-data+xml":{source:"iana",compressible:!0},"application/yang-patch+json":{source:"iana",compressible:!0},"application/yang-patch+xml":{source:"iana",compressible:!0},"application/yin+xml":{source:"iana",compressible:!0,extensions:["yin"]},"application/zip":{source:"iana",compressible:!1,extensions:["zip"]},"application/zlib":{source:"iana"},"application/zstd":{source:"iana"},"audio/1d-interleaved-parityfec":{source:"iana"},"audio/32kadpcm":{source:"iana"},"audio/3gpp":{source:"iana",compressible:!1,extensions:["3gpp"]},"audio/3gpp2":{source:"iana"},"audio/aac":{source:"iana"},"audio/ac3":{source:"iana"},"audio/adpcm":{source:"apache",extensions:["adp"]},"audio/amr":{source:"iana",extensions:["amr"]},"audio/amr-wb":{source:"iana"},"audio/amr-wb+":{source:"iana"},"audio/aptx":{source:"iana"},"audio/asc":{source:"iana"},"audio/atrac-advanced-lossless":{source:"iana"},"audio/atrac-x":{source:"iana"},"audio/atrac3":{source:"iana"},"audio/basic":{source:"iana",compressible:!1,extensions:["au","snd"]},"audio/bv16":{source:"iana"},"audio/bv32":{source:"iana"},"audio/clearmode":{source:"iana"},"audio/cn":{source:"iana"},"audio/dat12":{source:"iana"},"audio/dls":{source:"iana"},"audio/dsr-es201108":{source:"iana"},"audio/dsr-es202050":{source:"iana"},"audio/dsr-es202211":{source:"iana"},"audio/dsr-es202212":{source:"iana"},"audio/dv":{source:"iana"},"audio/dvi4":{source:"iana"},"audio/eac3":{source:"iana"},"audio/encaprtp":{source:"iana"},"audio/evrc":{source:"iana"},"audio/evrc-qcp":{source:"iana"},"audio/evrc0":{source:"iana"},"audio/evrc1":{source:"iana"},"audio/evrcb":{source:"iana"},"audio/evrcb0":{source:"iana"},"audio/evrcb1":{source:"iana"},"audio/evrcnw":{source:"iana"},"audio/evrcnw0":{source:"iana"},"audio/evrcnw1":{source:"iana"},"audio/evrcwb":{source:"iana"},"audio/evrcwb0":{source:"iana"},"audio/evrcwb1":{source:"iana"},"audio/evs":{source:"iana"},"audio/flexfec":{source:"iana"},"audio/fwdred":{source:"iana"},"audio/g711-0":{source:"iana"},"audio/g719":{source:"iana"},"audio/g722":{source:"iana"},"audio/g7221":{source:"iana"},"audio/g723":{source:"iana"},"audio/g726-16":{source:"iana"},"audio/g726-24":{source:"iana"},"audio/g726-32":{source:"iana"},"audio/g726-40":{source:"iana"},"audio/g728":{source:"iana"},"audio/g729":{source:"iana"},"audio/g7291":{source:"iana"},"audio/g729d":{source:"iana"},"audio/g729e":{source:"iana"},"audio/gsm":{source:"iana"},"audio/gsm-efr":{source:"iana"},"audio/gsm-hr-08":{source:"iana"},"audio/ilbc":{source:"iana"},"audio/ip-mr_v2.5":{source:"iana"},"audio/isac":{source:"apache"},"audio/l16":{source:"iana"},"audio/l20":{source:"iana"},"audio/l24":{source:"iana",compressible:!1},"audio/l8":{source:"iana"},"audio/lpc":{source:"iana"},"audio/melp":{source:"iana"},"audio/melp1200":{source:"iana"},"audio/melp2400":{source:"iana"},"audio/melp600":{source:"iana"},"audio/mhas":{source:"iana"},"audio/midi":{source:"apache",extensions:["mid","midi","kar","rmi"]},"audio/mobile-xmf":{source:"iana",extensions:["mxmf"]},"audio/mp3":{compressible:!1,extensions:["mp3"]},"audio/mp4":{source:"iana",compressible:!1,extensions:["m4a","mp4a"]},"audio/mp4a-latm":{source:"iana"},"audio/mpa":{source:"iana"},"audio/mpa-robust":{source:"iana"},"audio/mpeg":{source:"iana",compressible:!1,extensions:["mpga","mp2","mp2a","mp3","m2a","m3a"]},"audio/mpeg4-generic":{source:"iana"},"audio/musepack":{source:"apache"},"audio/ogg":{source:"iana",compressible:!1,extensions:["oga","ogg","spx","opus"]},"audio/opus":{source:"iana"},"audio/parityfec":{source:"iana"},"audio/pcma":{source:"iana"},"audio/pcma-wb":{source:"iana"},"audio/pcmu":{source:"iana"},"audio/pcmu-wb":{source:"iana"},"audio/prs.sid":{source:"iana"},"audio/qcelp":{source:"iana"},"audio/raptorfec":{source:"iana"},"audio/red":{source:"iana"},"audio/rtp-enc-aescm128":{source:"iana"},"audio/rtp-midi":{source:"iana"},"audio/rtploopback":{source:"iana"},"audio/rtx":{source:"iana"},"audio/s3m":{source:"apache",extensions:["s3m"]},"audio/scip":{source:"iana"},"audio/silk":{source:"apache",extensions:["sil"]},"audio/smv":{source:"iana"},"audio/smv-qcp":{source:"iana"},"audio/smv0":{source:"iana"},"audio/sofa":{source:"iana"},"audio/sp-midi":{source:"iana"},"audio/speex":{source:"iana"},"audio/t140c":{source:"iana"},"audio/t38":{source:"iana"},"audio/telephone-event":{source:"iana"},"audio/tetra_acelp":{source:"iana"},"audio/tetra_acelp_bb":{source:"iana"},"audio/tone":{source:"iana"},"audio/tsvcis":{source:"iana"},"audio/uemclip":{source:"iana"},"audio/ulpfec":{source:"iana"},"audio/usac":{source:"iana"},"audio/vdvi":{source:"iana"},"audio/vmr-wb":{source:"iana"},"audio/vnd.3gpp.iufp":{source:"iana"},"audio/vnd.4sb":{source:"iana"},"audio/vnd.audiokoz":{source:"iana"},"audio/vnd.celp":{source:"iana"},"audio/vnd.cisco.nse":{source:"iana"},"audio/vnd.cmles.radio-events":{source:"iana"},"audio/vnd.cns.anp1":{source:"iana"},"audio/vnd.cns.inf1":{source:"iana"},"audio/vnd.dece.audio":{source:"iana",extensions:["uva","uvva"]},"audio/vnd.digital-winds":{source:"iana",extensions:["eol"]},"audio/vnd.dlna.adts":{source:"iana"},"audio/vnd.dolby.heaac.1":{source:"iana"},"audio/vnd.dolby.heaac.2":{source:"iana"},"audio/vnd.dolby.mlp":{source:"iana"},"audio/vnd.dolby.mps":{source:"iana"},"audio/vnd.dolby.pl2":{source:"iana"},"audio/vnd.dolby.pl2x":{source:"iana"},"audio/vnd.dolby.pl2z":{source:"iana"},"audio/vnd.dolby.pulse.1":{source:"iana"},"audio/vnd.dra":{source:"iana",extensions:["dra"]},"audio/vnd.dts":{source:"iana",extensions:["dts"]},"audio/vnd.dts.hd":{source:"iana",extensions:["dtshd"]},"audio/vnd.dts.uhd":{source:"iana"},"audio/vnd.dvb.file":{source:"iana"},"audio/vnd.everad.plj":{source:"iana"},"audio/vnd.hns.audio":{source:"iana"},"audio/vnd.lucent.voice":{source:"iana",extensions:["lvp"]},"audio/vnd.ms-playready.media.pya":{source:"iana",extensions:["pya"]},"audio/vnd.nokia.mobile-xmf":{source:"iana"},"audio/vnd.nortel.vbk":{source:"iana"},"audio/vnd.nuera.ecelp4800":{source:"iana",extensions:["ecelp4800"]},"audio/vnd.nuera.ecelp7470":{source:"iana",extensions:["ecelp7470"]},"audio/vnd.nuera.ecelp9600":{source:"iana",extensions:["ecelp9600"]},"audio/vnd.octel.sbc":{source:"iana"},"audio/vnd.presonus.multitrack":{source:"iana"},"audio/vnd.qcelp":{source:"iana"},"audio/vnd.rhetorex.32kadpcm":{source:"iana"},"audio/vnd.rip":{source:"iana",extensions:["rip"]},"audio/vnd.rn-realaudio":{compressible:!1},"audio/vnd.sealedmedia.softseal.mpeg":{source:"iana"},"audio/vnd.vmx.cvsd":{source:"iana"},"audio/vnd.wave":{compressible:!1},"audio/vorbis":{source:"iana",compressible:!1},"audio/vorbis-config":{source:"iana"},"audio/wav":{compressible:!1,extensions:["wav"]},"audio/wave":{compressible:!1,extensions:["wav"]},"audio/webm":{source:"apache",compressible:!1,extensions:["weba"]},"audio/x-aac":{source:"apache",compressible:!1,extensions:["aac"]},"audio/x-aiff":{source:"apache",extensions:["aif","aiff","aifc"]},"audio/x-caf":{source:"apache",compressible:!1,extensions:["caf"]},"audio/x-flac":{source:"apache",extensions:["flac"]},"audio/x-m4a":{source:"nginx",extensions:["m4a"]},"audio/x-matroska":{source:"apache",extensions:["mka"]},"audio/x-mpegurl":{source:"apache",extensions:["m3u"]},"audio/x-ms-wax":{source:"apache",extensions:["wax"]},"audio/x-ms-wma":{source:"apache",extensions:["wma"]},"audio/x-pn-realaudio":{source:"apache",extensions:["ram","ra"]},"audio/x-pn-realaudio-plugin":{source:"apache",extensions:["rmp"]},"audio/x-realaudio":{source:"nginx",extensions:["ra"]},"audio/x-tta":{source:"apache"},"audio/x-wav":{source:"apache",extensions:["wav"]},"audio/xm":{source:"apache",extensions:["xm"]},"chemical/x-cdx":{source:"apache",extensions:["cdx"]},"chemical/x-cif":{source:"apache",extensions:["cif"]},"chemical/x-cmdf":{source:"apache",extensions:["cmdf"]},"chemical/x-cml":{source:"apache",extensions:["cml"]},"chemical/x-csml":{source:"apache",extensions:["csml"]},"chemical/x-pdb":{source:"apache"},"chemical/x-xyz":{source:"apache",extensions:["xyz"]},"font/collection":{source:"iana",extensions:["ttc"]},"font/otf":{source:"iana",compressible:!0,extensions:["otf"]},"font/sfnt":{source:"iana"},"font/ttf":{source:"iana",compressible:!0,extensions:["ttf"]},"font/woff":{source:"iana",extensions:["woff"]},"font/woff2":{source:"iana",extensions:["woff2"]},"image/aces":{source:"iana",extensions:["exr"]},"image/apng":{compressible:!1,extensions:["apng"]},"image/avci":{source:"iana",extensions:["avci"]},"image/avcs":{source:"iana",extensions:["avcs"]},"image/avif":{source:"iana",compressible:!1,extensions:["avif"]},"image/bmp":{source:"iana",compressible:!0,extensions:["bmp"]},"image/cgm":{source:"iana",extensions:["cgm"]},"image/dicom-rle":{source:"iana",extensions:["drle"]},"image/emf":{source:"iana",extensions:["emf"]},"image/fits":{source:"iana",extensions:["fits"]},"image/g3fax":{source:"iana",extensions:["g3"]},"image/gif":{source:"iana",compressible:!1,extensions:["gif"]},"image/heic":{source:"iana",extensions:["heic"]},"image/heic-sequence":{source:"iana",extensions:["heics"]},"image/heif":{source:"iana",extensions:["heif"]},"image/heif-sequence":{source:"iana",extensions:["heifs"]},"image/hej2k":{source:"iana",extensions:["hej2"]},"image/hsj2":{source:"iana",extensions:["hsj2"]},"image/ief":{source:"iana",extensions:["ief"]},"image/jls":{source:"iana",extensions:["jls"]},"image/jp2":{source:"iana",compressible:!1,extensions:["jp2","jpg2"]},"image/jpeg":{source:"iana",compressible:!1,extensions:["jpeg","jpg","jpe"]},"image/jph":{source:"iana",extensions:["jph"]},"image/jphc":{source:"iana",extensions:["jhc"]},"image/jpm":{source:"iana",compressible:!1,extensions:["jpm"]},"image/jpx":{source:"iana",compressible:!1,extensions:["jpx","jpf"]},"image/jxr":{source:"iana",extensions:["jxr"]},"image/jxra":{source:"iana",extensions:["jxra"]},"image/jxrs":{source:"iana",extensions:["jxrs"]},"image/jxs":{source:"iana",extensions:["jxs"]},"image/jxsc":{source:"iana",extensions:["jxsc"]},"image/jxsi":{source:"iana",extensions:["jxsi"]},"image/jxss":{source:"iana",extensions:["jxss"]},"image/ktx":{source:"iana",extensions:["ktx"]},"image/ktx2":{source:"iana",extensions:["ktx2"]},"image/naplps":{source:"iana"},"image/pjpeg":{compressible:!1},"image/png":{source:"iana",compressible:!1,extensions:["png"]},"image/prs.btif":{source:"iana",extensions:["btif"]},"image/prs.pti":{source:"iana",extensions:["pti"]},"image/pwg-raster":{source:"iana"},"image/sgi":{source:"apache",extensions:["sgi"]},"image/svg+xml":{source:"iana",compressible:!0,extensions:["svg","svgz"]},"image/t38":{source:"iana",extensions:["t38"]},"image/tiff":{source:"iana",compressible:!1,extensions:["tif","tiff"]},"image/tiff-fx":{source:"iana",extensions:["tfx"]},"image/vnd.adobe.photoshop":{source:"iana",compressible:!0,extensions:["psd"]},"image/vnd.airzip.accelerator.azv":{source:"iana",extensions:["azv"]},"image/vnd.cns.inf2":{source:"iana"},"image/vnd.dece.graphic":{source:"iana",extensions:["uvi","uvvi","uvg","uvvg"]},"image/vnd.djvu":{source:"iana",extensions:["djvu","djv"]},"image/vnd.dvb.subtitle":{source:"iana",extensions:["sub"]},"image/vnd.dwg":{source:"iana",extensions:["dwg"]},"image/vnd.dxf":{source:"iana",extensions:["dxf"]},"image/vnd.fastbidsheet":{source:"iana",extensions:["fbs"]},"image/vnd.fpx":{source:"iana",extensions:["fpx"]},"image/vnd.fst":{source:"iana",extensions:["fst"]},"image/vnd.fujixerox.edmics-mmr":{source:"iana",extensions:["mmr"]},"image/vnd.fujixerox.edmics-rlc":{source:"iana",extensions:["rlc"]},"image/vnd.globalgraphics.pgb":{source:"iana"},"image/vnd.microsoft.icon":{source:"iana",compressible:!0,extensions:["ico"]},"image/vnd.mix":{source:"iana"},"image/vnd.mozilla.apng":{source:"iana"},"image/vnd.ms-dds":{compressible:!0,extensions:["dds"]},"image/vnd.ms-modi":{source:"iana",extensions:["mdi"]},"image/vnd.ms-photo":{source:"apache",extensions:["wdp"]},"image/vnd.net-fpx":{source:"iana",extensions:["npx"]},"image/vnd.pco.b16":{source:"iana",extensions:["b16"]},"image/vnd.radiance":{source:"iana"},"image/vnd.sealed.png":{source:"iana"},"image/vnd.sealedmedia.softseal.gif":{source:"iana"},"image/vnd.sealedmedia.softseal.jpg":{source:"iana"},"image/vnd.svf":{source:"iana"},"image/vnd.tencent.tap":{source:"iana",extensions:["tap"]},"image/vnd.valve.source.texture":{source:"iana",extensions:["vtf"]},"image/vnd.wap.wbmp":{source:"iana",extensions:["wbmp"]},"image/vnd.xiff":{source:"iana",extensions:["xif"]},"image/vnd.zbrush.pcx":{source:"iana",extensions:["pcx"]},"image/webp":{source:"apache",extensions:["webp"]},"image/wmf":{source:"iana",extensions:["wmf"]},"image/x-3ds":{source:"apache",extensions:["3ds"]},"image/x-cmu-raster":{source:"apache",extensions:["ras"]},"image/x-cmx":{source:"apache",extensions:["cmx"]},"image/x-freehand":{source:"apache",extensions:["fh","fhc","fh4","fh5","fh7"]},"image/x-icon":{source:"apache",compressible:!0,extensions:["ico"]},"image/x-jng":{source:"nginx",extensions:["jng"]},"image/x-mrsid-image":{source:"apache",extensions:["sid"]},"image/x-ms-bmp":{source:"nginx",compressible:!0,extensions:["bmp"]},"image/x-pcx":{source:"apache",extensions:["pcx"]},"image/x-pict":{source:"apache",extensions:["pic","pct"]},"image/x-portable-anymap":{source:"apache",extensions:["pnm"]},"image/x-portable-bitmap":{source:"apache",extensions:["pbm"]},"image/x-portable-graymap":{source:"apache",extensions:["pgm"]},"image/x-portable-pixmap":{source:"apache",extensions:["ppm"]},"image/x-rgb":{source:"apache",extensions:["rgb"]},"image/x-tga":{source:"apache",extensions:["tga"]},"image/x-xbitmap":{source:"apache",extensions:["xbm"]},"image/x-xcf":{compressible:!1},"image/x-xpixmap":{source:"apache",extensions:["xpm"]},"image/x-xwindowdump":{source:"apache",extensions:["xwd"]},"message/cpim":{source:"iana"},"message/delivery-status":{source:"iana"},"message/disposition-notification":{source:"iana",extensions:["disposition-notification"]},"message/external-body":{source:"iana"},"message/feedback-report":{source:"iana"},"message/global":{source:"iana",extensions:["u8msg"]},"message/global-delivery-status":{source:"iana",extensions:["u8dsn"]},"message/global-disposition-notification":{source:"iana",extensions:["u8mdn"]},"message/global-headers":{source:"iana",extensions:["u8hdr"]},"message/http":{source:"iana",compressible:!1},"message/imdn+xml":{source:"iana",compressible:!0},"message/news":{source:"iana"},"message/partial":{source:"iana",compressible:!1},"message/rfc822":{source:"iana",compressible:!0,extensions:["eml","mime"]},"message/s-http":{source:"iana"},"message/sip":{source:"iana"},"message/sipfrag":{source:"iana"},"message/tracking-status":{source:"iana"},"message/vnd.si.simp":{source:"iana"},"message/vnd.wfa.wsc":{source:"iana",extensions:["wsc"]},"model/3mf":{source:"iana",extensions:["3mf"]},"model/e57":{source:"iana"},"model/gltf+json":{source:"iana",compressible:!0,extensions:["gltf"]},"model/gltf-binary":{source:"iana",compressible:!0,extensions:["glb"]},"model/iges":{source:"iana",compressible:!1,extensions:["igs","iges"]},"model/mesh":{source:"iana",compressible:!1,extensions:["msh","mesh","silo"]},"model/mtl":{source:"iana",extensions:["mtl"]},"model/obj":{source:"iana",extensions:["obj"]},"model/step":{source:"iana"},"model/step+xml":{source:"iana",compressible:!0,extensions:["stpx"]},"model/step+zip":{source:"iana",compressible:!1,extensions:["stpz"]},"model/step-xml+zip":{source:"iana",compressible:!1,extensions:["stpxz"]},"model/stl":{source:"iana",extensions:["stl"]},"model/vnd.collada+xml":{source:"iana",compressible:!0,extensions:["dae"]},"model/vnd.dwf":{source:"iana",extensions:["dwf"]},"model/vnd.flatland.3dml":{source:"iana"},"model/vnd.gdl":{source:"iana",extensions:["gdl"]},"model/vnd.gs-gdl":{source:"apache"},"model/vnd.gs.gdl":{source:"iana"},"model/vnd.gtw":{source:"iana",extensions:["gtw"]},"model/vnd.moml+xml":{source:"iana",compressible:!0},"model/vnd.mts":{source:"iana",extensions:["mts"]},"model/vnd.opengex":{source:"iana",extensions:["ogex"]},"model/vnd.parasolid.transmit.binary":{source:"iana",extensions:["x_b"]},"model/vnd.parasolid.transmit.text":{source:"iana",extensions:["x_t"]},"model/vnd.pytha.pyox":{source:"iana"},"model/vnd.rosette.annotated-data-model":{source:"iana"},"model/vnd.sap.vds":{source:"iana",extensions:["vds"]},"model/vnd.usdz+zip":{source:"iana",compressible:!1,extensions:["usdz"]},"model/vnd.valve.source.compiled-map":{source:"iana",extensions:["bsp"]},"model/vnd.vtu":{source:"iana",extensions:["vtu"]},"model/vrml":{source:"iana",compressible:!1,extensions:["wrl","vrml"]},"model/x3d+binary":{source:"apache",compressible:!1,extensions:["x3db","x3dbz"]},"model/x3d+fastinfoset":{source:"iana",extensions:["x3db"]},"model/x3d+vrml":{source:"apache",compressible:!1,extensions:["x3dv","x3dvz"]},"model/x3d+xml":{source:"iana",compressible:!0,extensions:["x3d","x3dz"]},"model/x3d-vrml":{source:"iana",extensions:["x3dv"]},"multipart/alternative":{source:"iana",compressible:!1},"multipart/appledouble":{source:"iana"},"multipart/byteranges":{source:"iana"},"multipart/digest":{source:"iana"},"multipart/encrypted":{source:"iana",compressible:!1},"multipart/form-data":{source:"iana",compressible:!1},"multipart/header-set":{source:"iana"},"multipart/mixed":{source:"iana"},"multipart/multilingual":{source:"iana"},"multipart/parallel":{source:"iana"},"multipart/related":{source:"iana",compressible:!1},"multipart/report":{source:"iana"},"multipart/signed":{source:"iana",compressible:!1},"multipart/vnd.bint.med-plus":{source:"iana"},"multipart/voice-message":{source:"iana"},"multipart/x-mixed-replace":{source:"iana"},"text/1d-interleaved-parityfec":{source:"iana"},"text/cache-manifest":{source:"iana",compressible:!0,extensions:["appcache","manifest"]},"text/calendar":{source:"iana",extensions:["ics","ifb"]},"text/calender":{compressible:!0},"text/cmd":{compressible:!0},"text/coffeescript":{extensions:["coffee","litcoffee"]},"text/cql":{source:"iana"},"text/cql-expression":{source:"iana"},"text/cql-identifier":{source:"iana"},"text/css":{source:"iana",charset:"UTF-8",compressible:!0,extensions:["css"]},"text/csv":{source:"iana",compressible:!0,extensions:["csv"]},"text/csv-schema":{source:"iana"},"text/directory":{source:"iana"},"text/dns":{source:"iana"},"text/ecmascript":{source:"iana"},"text/encaprtp":{source:"iana"},"text/enriched":{source:"iana"},"text/fhirpath":{source:"iana"},"text/flexfec":{source:"iana"},"text/fwdred":{source:"iana"},"text/gff3":{source:"iana"},"text/grammar-ref-list":{source:"iana"},"text/html":{source:"iana",compressible:!0,extensions:["html","htm","shtml"]},"text/jade":{extensions:["jade"]},"text/javascript":{source:"iana",compressible:!0},"text/jcr-cnd":{source:"iana"},"text/jsx":{compressible:!0,extensions:["jsx"]},"text/less":{compressible:!0,extensions:["less"]},"text/markdown":{source:"iana",compressible:!0,extensions:["markdown","md"]},"text/mathml":{source:"nginx",extensions:["mml"]},"text/mdx":{compressible:!0,extensions:["mdx"]},"text/mizar":{source:"iana"},"text/n3":{source:"iana",charset:"UTF-8",compressible:!0,extensions:["n3"]},"text/parameters":{source:"iana",charset:"UTF-8"},"text/parityfec":{source:"iana"},"text/plain":{source:"iana",compressible:!0,extensions:["txt","text","conf","def","list","log","in","ini"]},"text/provenance-notation":{source:"iana",charset:"UTF-8"},"text/prs.fallenstein.rst":{source:"iana"},"text/prs.lines.tag":{source:"iana",extensions:["dsc"]},"text/prs.prop.logic":{source:"iana"},"text/raptorfec":{source:"iana"},"text/red":{source:"iana"},"text/rfc822-headers":{source:"iana"},"text/richtext":{source:"iana",compressible:!0,extensions:["rtx"]},"text/rtf":{source:"iana",compressible:!0,extensions:["rtf"]},"text/rtp-enc-aescm128":{source:"iana"},"text/rtploopback":{source:"iana"},"text/rtx":{source:"iana"},"text/sgml":{source:"iana",extensions:["sgml","sgm"]},"text/shaclc":{source:"iana"},"text/shex":{source:"iana",extensions:["shex"]},"text/slim":{extensions:["slim","slm"]},"text/spdx":{source:"iana",extensions:["spdx"]},"text/strings":{source:"iana"},"text/stylus":{extensions:["stylus","styl"]},"text/t140":{source:"iana"},"text/tab-separated-values":{source:"iana",compressible:!0,extensions:["tsv"]},"text/troff":{source:"iana",extensions:["t","tr","roff","man","me","ms"]},"text/turtle":{source:"iana",charset:"UTF-8",extensions:["ttl"]},"text/ulpfec":{source:"iana"},"text/uri-list":{source:"iana",compressible:!0,extensions:["uri","uris","urls"]},"text/vcard":{source:"iana",compressible:!0,extensions:["vcard"]},"text/vnd.a":{source:"iana"},"text/vnd.abc":{source:"iana"},"text/vnd.ascii-art":{source:"iana"},"text/vnd.curl":{source:"iana",extensions:["curl"]},"text/vnd.curl.dcurl":{source:"apache",extensions:["dcurl"]},"text/vnd.curl.mcurl":{source:"apache",extensions:["mcurl"]},"text/vnd.curl.scurl":{source:"apache",extensions:["scurl"]},"text/vnd.debian.copyright":{source:"iana",charset:"UTF-8"},"text/vnd.dmclientscript":{source:"iana"},"text/vnd.dvb.subtitle":{source:"iana",extensions:["sub"]},"text/vnd.esmertec.theme-descriptor":{source:"iana",charset:"UTF-8"},"text/vnd.familysearch.gedcom":{source:"iana",extensions:["ged"]},"text/vnd.ficlab.flt":{source:"iana"},"text/vnd.fly":{source:"iana",extensions:["fly"]},"text/vnd.fmi.flexstor":{source:"iana",extensions:["flx"]},"text/vnd.gml":{source:"iana"},"text/vnd.graphviz":{source:"iana",extensions:["gv"]},"text/vnd.hans":{source:"iana"},"text/vnd.hgl":{source:"iana"},"text/vnd.in3d.3dml":{source:"iana",extensions:["3dml"]},"text/vnd.in3d.spot":{source:"iana",extensions:["spot"]},"text/vnd.iptc.newsml":{source:"iana"},"text/vnd.iptc.nitf":{source:"iana"},"text/vnd.latex-z":{source:"iana"},"text/vnd.motorola.reflex":{source:"iana"},"text/vnd.ms-mediapackage":{source:"iana"},"text/vnd.net2phone.commcenter.command":{source:"iana"},"text/vnd.radisys.msml-basic-layout":{source:"iana"},"text/vnd.senx.warpscript":{source:"iana"},"text/vnd.si.uricatalogue":{source:"iana"},"text/vnd.sosi":{source:"iana"},"text/vnd.sun.j2me.app-descriptor":{source:"iana",charset:"UTF-8",extensions:["jad"]},"text/vnd.trolltech.linguist":{source:"iana",charset:"UTF-8"},"text/vnd.wap.si":{source:"iana"},"text/vnd.wap.sl":{source:"iana"},"text/vnd.wap.wml":{source:"iana",extensions:["wml"]},"text/vnd.wap.wmlscript":{source:"iana",extensions:["wmls"]},"text/vtt":{source:"iana",charset:"UTF-8",compressible:!0,extensions:["vtt"]},"text/x-asm":{source:"apache",extensions:["s","asm"]},"text/x-c":{source:"apache",extensions:["c","cc","cxx","cpp","h","hh","dic"]},"text/x-component":{source:"nginx",extensions:["htc"]},"text/x-fortran":{source:"apache",extensions:["f","for","f77","f90"]},"text/x-gwt-rpc":{compressible:!0},"text/x-handlebars-template":{extensions:["hbs"]},"text/x-java-source":{source:"apache",extensions:["java"]},"text/x-jquery-tmpl":{compressible:!0},"text/x-lua":{extensions:["lua"]},"text/x-markdown":{compressible:!0,extensions:["mkd"]},"text/x-nfo":{source:"apache",extensions:["nfo"]},"text/x-opml":{source:"apache",extensions:["opml"]},"text/x-org":{compressible:!0,extensions:["org"]},"text/x-pascal":{source:"apache",extensions:["p","pas"]},"text/x-processing":{compressible:!0,extensions:["pde"]},"text/x-sass":{extensions:["sass"]},"text/x-scss":{extensions:["scss"]},"text/x-setext":{source:"apache",extensions:["etx"]},"text/x-sfv":{source:"apache",extensions:["sfv"]},"text/x-suse-ymp":{compressible:!0,extensions:["ymp"]},"text/x-uuencode":{source:"apache",extensions:["uu"]},"text/x-vcalendar":{source:"apache",extensions:["vcs"]},"text/x-vcard":{source:"apache",extensions:["vcf"]},"text/xml":{source:"iana",compressible:!0,extensions:["xml"]},"text/xml-external-parsed-entity":{source:"iana"},"text/yaml":{compressible:!0,extensions:["yaml","yml"]},"video/1d-interleaved-parityfec":{source:"iana"},"video/3gpp":{source:"iana",extensions:["3gp","3gpp"]},"video/3gpp-tt":{source:"iana"},"video/3gpp2":{source:"iana",extensions:["3g2"]},"video/av1":{source:"iana"},"video/bmpeg":{source:"iana"},"video/bt656":{source:"iana"},"video/celb":{source:"iana"},"video/dv":{source:"iana"},"video/encaprtp":{source:"iana"},"video/ffv1":{source:"iana"},"video/flexfec":{source:"iana"},"video/h261":{source:"iana",extensions:["h261"]},"video/h263":{source:"iana",extensions:["h263"]},"video/h263-1998":{source:"iana"},"video/h263-2000":{source:"iana"},"video/h264":{source:"iana",extensions:["h264"]},"video/h264-rcdo":{source:"iana"},"video/h264-svc":{source:"iana"},"video/h265":{source:"iana"},"video/iso.segment":{source:"iana",extensions:["m4s"]},"video/jpeg":{source:"iana",extensions:["jpgv"]},"video/jpeg2000":{source:"iana"},"video/jpm":{source:"apache",extensions:["jpm","jpgm"]},"video/jxsv":{source:"iana"},"video/mj2":{source:"iana",extensions:["mj2","mjp2"]},"video/mp1s":{source:"iana"},"video/mp2p":{source:"iana"},"video/mp2t":{source:"iana",extensions:["ts"]},"video/mp4":{source:"iana",compressible:!1,extensions:["mp4","mp4v","mpg4"]},"video/mp4v-es":{source:"iana"},"video/mpeg":{source:"iana",compressible:!1,extensions:["mpeg","mpg","mpe","m1v","m2v"]},"video/mpeg4-generic":{source:"iana"},"video/mpv":{source:"iana"},"video/nv":{source:"iana"},"video/ogg":{source:"iana",compressible:!1,extensions:["ogv"]},"video/parityfec":{source:"iana"},"video/pointer":{source:"iana"},"video/quicktime":{source:"iana",compressible:!1,extensions:["qt","mov"]},"video/raptorfec":{source:"iana"},"video/raw":{source:"iana"},"video/rtp-enc-aescm128":{source:"iana"},"video/rtploopback":{source:"iana"},"video/rtx":{source:"iana"},"video/scip":{source:"iana"},"video/smpte291":{source:"iana"},"video/smpte292m":{source:"iana"},"video/ulpfec":{source:"iana"},"video/vc1":{source:"iana"},"video/vc2":{source:"iana"},"video/vnd.cctv":{source:"iana"},"video/vnd.dece.hd":{source:"iana",extensions:["uvh","uvvh"]},"video/vnd.dece.mobile":{source:"iana",extensions:["uvm","uvvm"]},"video/vnd.dece.mp4":{source:"iana"},"video/vnd.dece.pd":{source:"iana",extensions:["uvp","uvvp"]},"video/vnd.dece.sd":{source:"iana",extensions:["uvs","uvvs"]},"video/vnd.dece.video":{source:"iana",extensions:["uvv","uvvv"]},"video/vnd.directv.mpeg":{source:"iana"},"video/vnd.directv.mpeg-tts":{source:"iana"},"video/vnd.dlna.mpeg-tts":{source:"iana"},"video/vnd.dvb.file":{source:"iana",extensions:["dvb"]},"video/vnd.fvt":{source:"iana",extensions:["fvt"]},"video/vnd.hns.video":{source:"iana"},"video/vnd.iptvforum.1dparityfec-1010":{source:"iana"},"video/vnd.iptvforum.1dparityfec-2005":{source:"iana"},"video/vnd.iptvforum.2dparityfec-1010":{source:"iana"},"video/vnd.iptvforum.2dparityfec-2005":{source:"iana"},"video/vnd.iptvforum.ttsavc":{source:"iana"},"video/vnd.iptvforum.ttsmpeg2":{source:"iana"},"video/vnd.motorola.video":{source:"iana"},"video/vnd.motorola.videop":{source:"iana"},"video/vnd.mpegurl":{source:"iana",extensions:["mxu","m4u"]},"video/vnd.ms-playready.media.pyv":{source:"iana",extensions:["pyv"]},"video/vnd.nokia.interleaved-multimedia":{source:"iana"},"video/vnd.nokia.mp4vr":{source:"iana"},"video/vnd.nokia.videovoip":{source:"iana"},"video/vnd.objectvideo":{source:"iana"},"video/vnd.radgamettools.bink":{source:"iana"},"video/vnd.radgamettools.smacker":{source:"iana"},"video/vnd.sealed.mpeg1":{source:"iana"},"video/vnd.sealed.mpeg4":{source:"iana"},"video/vnd.sealed.swf":{source:"iana"},"video/vnd.sealedmedia.softseal.mov":{source:"iana"},"video/vnd.uvvu.mp4":{source:"iana",extensions:["uvu","uvvu"]},"video/vnd.vivo":{source:"iana",extensions:["viv"]},"video/vnd.youtube.yt":{source:"iana"},"video/vp8":{source:"iana"},"video/vp9":{source:"iana"},"video/webm":{source:"apache",compressible:!1,extensions:["webm"]},"video/x-f4v":{source:"apache",extensions:["f4v"]},"video/x-fli":{source:"apache",extensions:["fli"]},"video/x-flv":{source:"apache",compressible:!1,extensions:["flv"]},"video/x-m4v":{source:"apache",extensions:["m4v"]},"video/x-matroska":{source:"apache",compressible:!1,extensions:["mkv","mk3d","mks"]},"video/x-mng":{source:"apache",extensions:["mng"]},"video/x-ms-asf":{source:"apache",extensions:["asf","asx"]},"video/x-ms-vob":{source:"apache",extensions:["vob"]},"video/x-ms-wm":{source:"apache",extensions:["wm"]},"video/x-ms-wmv":{source:"apache",compressible:!1,extensions:["wmv"]},"video/x-ms-wmx":{source:"apache",extensions:["wmx"]},"video/x-ms-wvx":{source:"apache",extensions:["wvx"]},"video/x-msvideo":{source:"apache",extensions:["avi"]},"video/x-sgi-movie":{source:"apache",extensions:["movie"]},"video/x-smv":{source:"apache",extensions:["smv"]},"x-conference/x-cooltalk":{source:"apache",extensions:["ice"]},"x-shader/x-fragment":{compressible:!0},"x-shader/x-vertex":{compressible:!0}}});var Di=j((Qc,Pi)=>{Pi.exports=Fi()});var Ui=j(I=>{"use strict";var Ve=Di(),et=E("path").extname,Bi=/^\s*([^;\s]*)(?:;|\s|$)/,at=/^text\//i;I.charset=Ni;I.charsets={lookup:Ni};I.contentType=it;I.extension=nt;I.extensions=Object.create(null);I.lookup=st;I.types=Object.create(null);tt(I.extensions,I.types);function Ni(e){if(!e||typeof e!="string")return!1;var a=Bi.exec(e),i=a&&Ve[a[1].toLowerCase()];return i&&i.charset?i.charset:a&&at.test(a[1])?"UTF-8":!1}function it(e){if(!e||typeof e!="string")return!1;var a=e.indexOf("/")===-1?I.lookup(e):e;if(!a)return!1;if(a.indexOf("charset")===-1){var i=I.charset(a);i&&(a+="; charset="+i.toLowerCase())}return a}function nt(e){if(!e||typeof e!="string")return!1;var a=Bi.exec(e),i=a&&I.extensions[a[1].toLowerCase()];return!i||!i.length?!1:i[0]}function st(e){if(!e||typeof e!="string")return!1;var a=et("x."+e).toLowerCase().substr(1);return a&&I.types[a]||!1}function tt(e,a){var i=["nginx","apache",void 0,"iana"];Object.keys(Ve).forEach(function(s){var t=Ve[s],o=t.extensions;if(!(!o||!o.length)){e[s]=o;for(var c=0;cr||l===r&&a[u].substr(0,12)==="application/"))continue}a[u]=s}}})}});var $i=j((ap,Ii)=>{Ii.exports=ot;function ot(e){var a=typeof setImmediate=="function"?setImmediate:typeof process=="object"&&typeof process.nextTick=="function"?process.nextTick:null;a?a(e):setTimeout(e,0)}});var _a=j((ip,Mi)=>{var Hi=$i();Mi.exports=rt;function rt(e){var a=!1;return Hi(function(){a=!0}),function(n,s){a?e(n,s):Hi(function(){e(n,s)})}}});var ja=j((np,Wi)=>{Wi.exports=ct;function ct(e){Object.keys(e.jobs).forEach(pt.bind(e)),e.jobs={}}function pt(e){typeof this.jobs[e]=="function"&&this.jobs[e]()}});var ka=j((sp,Vi)=>{var Ki=_a(),lt=ja();Vi.exports=ut;function ut(e,a,i,n){var s=i.keyedList?i.keyedList[i.index]:i.index;i.jobs[s]=dt(a,s,e[s],function(t,o){s in i.jobs&&(delete i.jobs[s],t?lt(i):i.results[s]=o,n(t,i.results))})}function dt(e,a,i,n){var s;return e.length==2?s=e(i,Ki(n)):s=e(i,a,Ki(n)),s}});var Ea=j((tp,Gi)=>{Gi.exports=mt;function mt(e,a){var i=!Array.isArray(e),n={index:0,keyedList:i||a?Object.keys(e):null,jobs:{},results:i?{}:[],size:i?Object.keys(e).length:e.length};return a&&n.keyedList.sort(i?a:function(s,t){return a(e[s],e[t])}),n}});var Ra=j((op,Ji)=>{var ft=ja(),xt=_a();Ji.exports=ht;function ht(e){Object.keys(this.jobs).length&&(this.index=this.size,ft(this),xt(e)(null,this.results))}});var Yi=j((rp,Xi)=>{var vt=ka(),bt=Ea(),gt=Ra();Xi.exports=yt;function yt(e,a,i){for(var n=bt(e);n.index<(n.keyedList||e).length;)vt(e,a,n,function(s,t){if(s){i(s,t);return}if(Object.keys(n.jobs).length===0){i(null,n.results);return}}),n.index++;return gt.bind(n,i)}});var Sa=j((cp,Ge)=>{var Zi=ka(),wt=Ea(),_t=Ra();Ge.exports=jt;Ge.exports.ascending=Qi;Ge.exports.descending=kt;function jt(e,a,i,n){var s=wt(e,i);return Zi(e,a,s,function t(o,c){if(o){n(o,c);return}if(s.index++,s.index<(s.keyedList||e).length){Zi(e,a,s,t);return}n(null,s.results)}),_t.bind(s,n)}function Qi(e,a){return ea?1:0}function kt(e,a){return-1*Qi(e,a)}});var an=j((pp,en)=>{var Et=Sa();en.exports=Rt;function Rt(e,a,i){return Et(e,a,null,i)}});var sn=j((lp,nn)=>{nn.exports={parallel:Yi(),serial:an(),serialOrdered:Sa()}});var on=j((up,tn)=>{tn.exports=function(e,a){return Object.keys(a).forEach(function(i){e[i]=e[i]||a[i]}),e}});var pn=j((dp,cn)=>{var Aa=Li(),rn=E("util"),Oa=E("path"),St=E("http"),Ot=E("https"),Ct=E("url").parse,Tt=E("fs"),At=E("stream").Stream,Ca=Ui(),qt=sn(),Ta=on();cn.exports=R;rn.inherits(R,Aa);function R(e){if(!(this instanceof R))return new R(e);this._overheadLength=0,this._valueLength=0,this._valuesToMeasure=[],Aa.call(this),e=e||{};for(var a in e)this[a]=e[a]}R.LINE_BREAK=`\r +`;R.DEFAULT_CONTENT_TYPE="application/octet-stream";R.prototype.append=function(e,a,i){i=i||{},typeof i=="string"&&(i={filename:i});var n=Aa.prototype.append.bind(this);if(typeof a=="number"&&(a=""+a),rn.isArray(a)){this._error(new Error("Arrays are not supported."));return}var s=this._multiPartHeader(e,a,i),t=this._multiPartFooter();n(s),n(a),n(t),this._trackLength(s,a,i)};R.prototype._trackLength=function(e,a,i){var n=0;i.knownLength!=null?n+=+i.knownLength:Buffer.isBuffer(a)?n=a.length:typeof a=="string"&&(n=Buffer.byteLength(a)),this._valueLength+=n,this._overheadLength+=Buffer.byteLength(e)+R.LINE_BREAK.length,!(!a||!a.path&&!(a.readable&&a.hasOwnProperty("httpVersion"))&&!(a instanceof At))&&(i.knownLength||this._valuesToMeasure.push(a))};R.prototype._lengthRetriever=function(e,a){e.hasOwnProperty("fd")?e.end!=null&&e.end!=1/0&&e.start!=null?a(null,e.end+1-(e.start?e.start:0)):Tt.stat(e.path,function(i,n){var s;if(i){a(i);return}s=n.size-(e.start?e.start:0),a(null,s)}):e.hasOwnProperty("httpVersion")?a(null,+e.headers["content-length"]):e.hasOwnProperty("httpModule")?(e.on("response",function(i){e.pause(),a(null,+i.headers["content-length"])}),e.resume()):a("Unknown stream")};R.prototype._multiPartHeader=function(e,a,i){if(typeof i.header=="string")return i.header;var n=this._getContentDisposition(a,i),s=this._getContentType(a,i),t="",o={"Content-Disposition":["form-data",'name="'+e+'"'].concat(n||[]),"Content-Type":[].concat(s||[])};typeof i.header=="object"&&Ta(o,i.header);var c;for(var u in o)o.hasOwnProperty(u)&&(c=o[u],c!=null&&(Array.isArray(c)||(c=[c]),c.length&&(t+=u+": "+c.join("; ")+R.LINE_BREAK)));return"--"+this.getBoundary()+R.LINE_BREAK+t+R.LINE_BREAK};R.prototype._getContentDisposition=function(e,a){var i,n;return typeof a.filepath=="string"?i=Oa.normalize(a.filepath).replace(/\\/g,"/"):a.filename||e.name||e.path?i=Oa.basename(a.filename||e.name||e.path):e.readable&&e.hasOwnProperty("httpVersion")&&(i=Oa.basename(e.client._httpMessage.path||"")),i&&(n='filename="'+i+'"'),n};R.prototype._getContentType=function(e,a){var i=a.contentType;return!i&&e.name&&(i=Ca.lookup(e.name)),!i&&e.path&&(i=Ca.lookup(e.path)),!i&&e.readable&&e.hasOwnProperty("httpVersion")&&(i=e.headers["content-type"]),!i&&(a.filepath||a.filename)&&(i=Ca.lookup(a.filepath||a.filename)),!i&&typeof e=="object"&&(i=R.DEFAULT_CONTENT_TYPE),i};R.prototype._multiPartFooter=function(){return function(e){var a=R.LINE_BREAK,i=this._streams.length===0;i&&(a+=this._lastBoundary()),e(a)}.bind(this)};R.prototype._lastBoundary=function(){return"--"+this.getBoundary()+"--"+R.LINE_BREAK};R.prototype.getHeaders=function(e){var a,i={"content-type":"multipart/form-data; boundary="+this.getBoundary()};for(a in e)e.hasOwnProperty(a)&&(i[a.toLowerCase()]=e[a]);return i};R.prototype.setBoundary=function(e){this._boundary=e};R.prototype.getBoundary=function(){return this._boundary||this._generateBoundary(),this._boundary};R.prototype.getBuffer=function(){for(var e=new Buffer.alloc(0),a=this.getBoundary(),i=0,n=this._streams.length;i{"use strict";var zt=E("url").parse,Lt={ftp:21,gopher:70,http:80,https:443,ws:80,wss:443},Ft=String.prototype.endsWith||function(e){return e.length<=this.length&&this.indexOf(e,this.length-e.length)!==-1};function Pt(e){var a=typeof e=="string"?zt(e):e||{},i=a.protocol,n=a.host,s=a.port;if(typeof n!="string"||!n||typeof i!="string"||(i=i.split(":",1)[0],n=n.replace(/:\d*$/,""),s=parseInt(s)||Lt[i]||0,!Dt(n,s)))return"";var t=ye("npm_config_"+i+"_proxy")||ye(i+"_proxy")||ye("npm_config_proxy")||ye("all_proxy");return t&&t.indexOf("://")===-1&&(t=i+"://"+t),t}function Dt(e,a){var i=(ye("npm_config_no_proxy")||ye("no_proxy")).toLowerCase();return i?i==="*"?!1:i.split(/[,\s]/).every(function(n){if(!n)return!0;var s=n.match(/^(.+):(\d+)$/),t=s?s[1]:n,o=s?parseInt(s[2]):0;return o&&o!==a?!0:/^[.*]/.test(t)?(t.charAt(0)==="*"&&(t=t.slice(1)),!Ft.call(e,t)):e!==t}):!0}function ye(e){return process.env[e.toLowerCase()]||process.env[e.toUpperCase()]||""}ln.getProxyForUrl=Pt});var mn=j((fp,dn)=>{var we=1e3,_e=we*60,je=_e*60,xe=je*24,Bt=xe*7,Nt=xe*365.25;dn.exports=function(e,a){a=a||{};var i=typeof e;if(i==="string"&&e.length>0)return Ut(e);if(i==="number"&&isFinite(e))return a.long?$t(e):It(e);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(e))};function Ut(e){if(e=String(e),!(e.length>100)){var a=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(e);if(a){var i=parseFloat(a[1]),n=(a[2]||"ms").toLowerCase();switch(n){case"years":case"year":case"yrs":case"yr":case"y":return i*Nt;case"weeks":case"week":case"w":return i*Bt;case"days":case"day":case"d":return i*xe;case"hours":case"hour":case"hrs":case"hr":case"h":return i*je;case"minutes":case"minute":case"mins":case"min":case"m":return i*_e;case"seconds":case"second":case"secs":case"sec":case"s":return i*we;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return i;default:return}}}}function It(e){var a=Math.abs(e);return a>=xe?Math.round(e/xe)+"d":a>=je?Math.round(e/je)+"h":a>=_e?Math.round(e/_e)+"m":a>=we?Math.round(e/we)+"s":e+"ms"}function $t(e){var a=Math.abs(e);return a>=xe?Je(e,a,xe,"day"):a>=je?Je(e,a,je,"hour"):a>=_e?Je(e,a,_e,"minute"):a>=we?Je(e,a,we,"second"):e+" ms"}function Je(e,a,i,n){var s=a>=i*1.5;return Math.round(e/i)+" "+n+(s?"s":"")}});var qa=j((xp,fn)=>{function Ht(e){i.debug=i,i.default=i,i.coerce=u,i.disable=t,i.enable=s,i.enabled=o,i.humanize=mn(),i.destroy=l,Object.keys(e).forEach(r=>{i[r]=e[r]}),i.names=[],i.skips=[],i.formatters={};function a(r){let d=0;for(let x=0;x{if(P==="%%")return"%";C++;let ie=i.formatters[G];if(typeof ie=="function"){let ge=w[C];P=ie.call(k,ge),w.splice(C,1),C--}return P}),i.formatArgs.call(k,w),(k.log||i.log).apply(k,w)}return h.namespace=r,h.useColors=i.useColors(),h.color=i.selectColor(r),h.extend=n,h.destroy=i.destroy,Object.defineProperty(h,"enabled",{enumerable:!0,configurable:!1,get:()=>x!==null?x:(_!==i.namespaces&&(_=i.namespaces,m=i.enabled(r)),m),set:w=>{x=w}}),typeof i.init=="function"&&i.init(h),h}function n(r,d){let x=i(this.namespace+(typeof d>"u"?":":d)+r);return x.log=this.log,x}function s(r){i.save(r),i.namespaces=r,i.names=[],i.skips=[];let d,x=(typeof r=="string"?r:"").split(/[\s,]+/),_=x.length;for(d=0;d<_;d++)x[d]&&(r=x[d].replace(/\*/g,".*?"),r[0]==="-"?i.skips.push(new RegExp("^"+r.slice(1)+"$")):i.names.push(new RegExp("^"+r+"$")))}function t(){let r=[...i.names.map(c),...i.skips.map(c).map(d=>"-"+d)].join(",");return i.enable(""),r}function o(r){if(r[r.length-1]==="*")return!0;let d,x;for(d=0,x=i.skips.length;d{W.formatArgs=Wt;W.save=Kt;W.load=Vt;W.useColors=Mt;W.storage=Gt();W.destroy=(()=>{let e=!1;return()=>{e||(e=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))}})();W.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"];function Mt(){return typeof window<"u"&&window.process&&(window.process.type==="renderer"||window.process.__nwjs)?!0:typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)?!1:typeof document<"u"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window<"u"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}function Wt(e){if(e[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+e[0]+(this.useColors?"%c ":" ")+"+"+Xe.exports.humanize(this.diff),!this.useColors)return;let a="color: "+this.color;e.splice(1,0,a,"color: inherit");let i=0,n=0;e[0].replace(/%[a-zA-Z%]/g,s=>{s!=="%%"&&(i++,s==="%c"&&(n=i))}),e.splice(n,0,a)}W.log=console.debug||console.log||(()=>{});function Kt(e){try{e?W.storage.setItem("debug",e):W.storage.removeItem("debug")}catch{}}function Vt(){let e;try{e=W.storage.getItem("debug")}catch{}return!e&&typeof process<"u"&&"env"in process&&(e=process.env.DEBUG),e}function Gt(){try{return localStorage}catch{}}Xe.exports=qa()(W);var{formatters:Jt}=Xe.exports;Jt.j=function(e){try{return JSON.stringify(e)}catch(a){return"[UnexpectedJSONParseError]: "+a.message}}});var vn=j((hp,hn)=>{"use strict";hn.exports=(e,a=process.argv)=>{let i=e.startsWith("-")?"":e.length===1?"-":"--",n=a.indexOf(i+e),s=a.indexOf("--");return n!==-1&&(s===-1||n{"use strict";var Xt=E("os"),bn=E("tty"),J=vn(),{env:z}=process,re;J("no-color")||J("no-colors")||J("color=false")||J("color=never")?re=0:(J("color")||J("colors")||J("color=true")||J("color=always"))&&(re=1);"FORCE_COLOR"in z&&(z.FORCE_COLOR==="true"?re=1:z.FORCE_COLOR==="false"?re=0:re=z.FORCE_COLOR.length===0?1:Math.min(parseInt(z.FORCE_COLOR,10),3));function za(e){return e===0?!1:{level:e,hasBasic:!0,has256:e>=2,has16m:e>=3}}function La(e,a){if(re===0)return 0;if(J("color=16m")||J("color=full")||J("color=truecolor"))return 3;if(J("color=256"))return 2;if(e&&!a&&re===void 0)return 0;let i=re||0;if(z.TERM==="dumb")return i;if(process.platform==="win32"){let n=Xt.release().split(".");return Number(n[0])>=10&&Number(n[2])>=10586?Number(n[2])>=14931?3:2:1}if("CI"in z)return["TRAVIS","CIRCLECI","APPVEYOR","GITLAB_CI","GITHUB_ACTIONS","BUILDKITE"].some(n=>n in z)||z.CI_NAME==="codeship"?1:i;if("TEAMCITY_VERSION"in z)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(z.TEAMCITY_VERSION)?1:0;if(z.COLORTERM==="truecolor")return 3;if("TERM_PROGRAM"in z){let n=parseInt((z.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(z.TERM_PROGRAM){case"iTerm.app":return n>=3?3:2;case"Apple_Terminal":return 2}}return/-256(color)?$/i.test(z.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(z.TERM)||"COLORTERM"in z?1:i}function Yt(e){let a=La(e,e&&e.isTTY);return za(a)}gn.exports={supportsColor:Yt,stdout:za(La(!0,bn.isatty(1))),stderr:za(La(!0,bn.isatty(2)))}});var _n=j((F,Ze)=>{var Zt=E("tty"),Ye=E("util");F.init=to;F.log=io;F.formatArgs=eo;F.save=no;F.load=so;F.useColors=Qt;F.destroy=Ye.deprecate(()=>{},"Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.");F.colors=[6,2,3,4,5,1];try{let e=yn();e&&(e.stderr||e).level>=2&&(F.colors=[20,21,26,27,32,33,38,39,40,41,42,43,44,45,56,57,62,63,68,69,74,75,76,77,78,79,80,81,92,93,98,99,112,113,128,129,134,135,148,149,160,161,162,163,164,165,166,167,168,169,170,171,172,173,178,179,184,185,196,197,198,199,200,201,202,203,204,205,206,207,208,209,214,215,220,221])}catch{}F.inspectOpts=Object.keys(process.env).filter(e=>/^debug_/i.test(e)).reduce((e,a)=>{let i=a.substring(6).toLowerCase().replace(/_([a-z])/g,(s,t)=>t.toUpperCase()),n=process.env[a];return/^(yes|on|true|enabled)$/i.test(n)?n=!0:/^(no|off|false|disabled)$/i.test(n)?n=!1:n==="null"?n=null:n=Number(n),e[i]=n,e},{});function Qt(){return"colors"in F.inspectOpts?!!F.inspectOpts.colors:Zt.isatty(process.stderr.fd)}function eo(e){let{namespace:a,useColors:i}=this;if(i){let n=this.color,s="\x1B[3"+(n<8?n:"8;5;"+n),t=` ${s};1m${a} \x1B[0m`;e[0]=t+e[0].split(` +`).join(` +`+t),e.push(s+"m+"+Ze.exports.humanize(this.diff)+"\x1B[0m")}else e[0]=ao()+a+" "+e[0]}function ao(){return F.inspectOpts.hideDate?"":new Date().toISOString()+" "}function io(...e){return process.stderr.write(Ye.format(...e)+` +`)}function no(e){e?process.env.DEBUG=e:delete process.env.DEBUG}function so(){return process.env.DEBUG}function to(e){e.inspectOpts={};let a=Object.keys(F.inspectOpts);for(let i=0;ia.trim()).join(" ")};wn.O=function(e){return this.inspectOpts.colors=this.useColors,Ye.inspect(e,this.inspectOpts)}});var Qe=j((bp,Fa)=>{typeof process>"u"||process.type==="renderer"||process.browser===!0||process.__nwjs?Fa.exports=xn():Fa.exports=_n()});var kn=j((gp,jn)=>{var Ae;jn.exports=function(){if(!Ae){try{Ae=Qe()("follow-redirects")}catch{}typeof Ae!="function"&&(Ae=function(){})}Ae.apply(null,arguments)}});var Cn=j((yp,Va)=>{var Le=E("url"),qe=Le.URL,oo=E("http"),ro=E("https"),Ua=E("stream").Writable,Ia=E("assert"),En=kn(),$a=!1;try{Ia(new qe)}catch(e){$a=e.code==="ERR_INVALID_URL"}var co=["auth","host","hostname","href","path","pathname","port","protocol","query","search","hash"],Ha=["abort","aborted","connect","error","socket","timeout"],Ma=Object.create(null);Ha.forEach(function(e){Ma[e]=function(a,i,n){this._redirectable.emit(e,a,i,n)}});var Da=Fe("ERR_INVALID_URL","Invalid URL",TypeError),Ba=Fe("ERR_FR_REDIRECTION_FAILURE","Redirected request failed"),po=Fe("ERR_FR_TOO_MANY_REDIRECTS","Maximum number of redirects exceeded",Ba),lo=Fe("ERR_FR_MAX_BODY_LENGTH_EXCEEDED","Request body larger than maxBodyLength limit"),uo=Fe("ERR_STREAM_WRITE_AFTER_END","write after end"),mo=Ua.prototype.destroy||Sn;function $(e,a){Ua.call(this),this._sanitizeOptions(e),this._options=e,this._ended=!1,this._ending=!1,this._redirectCount=0,this._redirects=[],this._requestBodyLength=0,this._requestBodyBuffers=[],a&&this.on("response",a);var i=this;this._onNativeResponse=function(n){try{i._processResponse(n)}catch(s){i.emit("error",s instanceof Ba?s:new Ba({cause:s}))}},this._performRequest()}$.prototype=Object.create(Ua.prototype);$.prototype.abort=function(){Ka(this._currentRequest),this._currentRequest.abort(),this.emit("abort")};$.prototype.destroy=function(e){return Ka(this._currentRequest,e),mo.call(this,e),this};$.prototype.write=function(e,a,i){if(this._ending)throw new uo;if(!he(e)&&!ho(e))throw new TypeError("data should be a string, Buffer or Uint8Array");if(ze(a)&&(i=a,a=null),e.length===0){i&&i();return}this._requestBodyLength+e.length<=this._options.maxBodyLength?(this._requestBodyLength+=e.length,this._requestBodyBuffers.push({data:e,encoding:a}),this._currentRequest.write(e,a,i)):(this.emit("error",new lo),this.abort())};$.prototype.end=function(e,a,i){if(ze(e)?(i=e,e=a=null):ze(a)&&(i=a,a=null),!e)this._ended=this._ending=!0,this._currentRequest.end(null,null,i);else{var n=this,s=this._currentRequest;this.write(e,a,function(){n._ended=!0,s.end(null,null,i)}),this._ending=!0}};$.prototype.setHeader=function(e,a){this._options.headers[e]=a,this._currentRequest.setHeader(e,a)};$.prototype.removeHeader=function(e){delete this._options.headers[e],this._currentRequest.removeHeader(e)};$.prototype.setTimeout=function(e,a){var i=this;function n(o){o.setTimeout(e),o.removeListener("timeout",o.destroy),o.addListener("timeout",o.destroy)}function s(o){i._timeout&&clearTimeout(i._timeout),i._timeout=setTimeout(function(){i.emit("timeout"),t()},e),n(o)}function t(){i._timeout&&(clearTimeout(i._timeout),i._timeout=null),i.removeListener("abort",t),i.removeListener("error",t),i.removeListener("response",t),i.removeListener("close",t),a&&i.removeListener("timeout",a),i.socket||i._currentRequest.removeListener("socket",s)}return a&&this.on("timeout",a),this.socket?s(this.socket):this._currentRequest.once("socket",s),this.on("socket",n),this.on("abort",t),this.on("error",t),this.on("response",t),this.on("close",t),this};["flushHeaders","getHeader","setNoDelay","setSocketKeepAlive"].forEach(function(e){$.prototype[e]=function(a,i){return this._currentRequest[e](a,i)}});["aborted","connection","socket"].forEach(function(e){Object.defineProperty($.prototype,e,{get:function(){return this._currentRequest[e]}})});$.prototype._sanitizeOptions=function(e){if(e.headers||(e.headers={}),e.host&&(e.hostname||(e.hostname=e.host),delete e.host),!e.pathname&&e.path){var a=e.path.indexOf("?");a<0?e.pathname=e.path:(e.pathname=e.path.substring(0,a),e.search=e.path.substring(a))}};$.prototype._performRequest=function(){var e=this._options.protocol,a=this._options.nativeProtocols[e];if(!a)throw new TypeError("Unsupported protocol "+e);if(this._options.agents){var i=e.slice(0,-1);this._options.agent=this._options.agents[i]}var n=this._currentRequest=a.request(this._options,this._onNativeResponse);n._redirectable=this;for(var s of Ha)n.on(s,Ma[s]);if(this._currentUrl=/^\//.test(this._options.path)?Le.format(this._options):this._options.path,this._isRedirect){var t=0,o=this,c=this._requestBodyBuffers;(function u(l){if(n===o._currentRequest)if(l)o.emit("error",l);else if(t=400){e.responseUrl=this._currentUrl,e.redirects=this._redirects,this.emit("response",e),this._requestBodyBuffers=[];return}if(Ka(this._currentRequest),e.destroy(),++this._redirectCount>this._options.maxRedirects)throw new po;var n,s=this._options.beforeRedirect;s&&(n=Object.assign({Host:e.req.getHeader("host")},this._options.headers));var t=this._options.method;((a===301||a===302)&&this._options.method==="POST"||a===303&&!/^(?:GET|HEAD)$/.test(this._options.method))&&(this._options.method="GET",this._requestBodyBuffers=[],Pa(/^content-/i,this._options.headers));var o=Pa(/^host$/i,this._options.headers),c=Wa(this._currentUrl),u=o||c.host,l=/^\w+:/.test(i)?this._currentUrl:Le.format(Object.assign(c,{host:u})),r=fo(i,l);if(En("redirecting to",r.href),this._isRedirect=!0,Na(r,this._options),(r.protocol!==c.protocol&&r.protocol!=="https:"||r.host!==u&&!xo(r.host,u))&&Pa(/^(?:(?:proxy-)?authorization|cookie)$/i,this._options.headers),ze(s)){var d={headers:e.headers,statusCode:a},x={url:l,method:t,headers:n};s(this._options,d,x),this._sanitizeOptions(this._options)}this._performRequest()};function Rn(e){var a={maxRedirects:21,maxBodyLength:10485760},i={};return Object.keys(e).forEach(function(n){var s=n+":",t=i[s]=e[n],o=a[n]=Object.create(t);function c(l,r,d){return vo(l)?l=Na(l):he(l)?l=Na(Wa(l)):(d=r,r=On(l),l={protocol:s}),ze(r)&&(d=r,r=null),r=Object.assign({maxRedirects:a.maxRedirects,maxBodyLength:a.maxBodyLength},l,r),r.nativeProtocols=i,!he(r.host)&&!he(r.hostname)&&(r.hostname="::1"),Ia.equal(r.protocol,s,"protocol mismatch"),En("options",r),new $(r,d)}function u(l,r,d){var x=o.request(l,r,d);return x.end(),x}Object.defineProperties(o,{request:{value:c,configurable:!0,enumerable:!0,writable:!0},get:{value:u,configurable:!0,enumerable:!0,writable:!0}})}),a}function Sn(){}function Wa(e){var a;if($a)a=new qe(e);else if(a=On(Le.parse(e)),!he(a.protocol))throw new Da({input:e});return a}function fo(e,a){return $a?new qe(e,a):Wa(Le.resolve(a,e))}function On(e){if(/^\[/.test(e.hostname)&&!/^\[[:0-9a-f]+\]$/i.test(e.hostname))throw new Da({input:e.href||e});if(/^\[/.test(e.host)&&!/^\[[:0-9a-f]+\](:\d+)?$/i.test(e.host))throw new Da({input:e.href||e});return e}function Na(e,a){var i=a||{};for(var n of co)i[n]=e[n];return i.hostname.startsWith("[")&&(i.hostname=i.hostname.slice(1,-1)),i.port!==""&&(i.port=Number(i.port)),i.path=i.search?i.pathname+i.search:i.pathname,i}function Pa(e,a){var i;for(var n in a)e.test(n)&&(i=a[n],delete a[n]);return i===null||typeof i>"u"?void 0:String(i).trim()}function Fe(e,a,i){function n(s){Error.captureStackTrace(this,this.constructor),Object.assign(this,s||{}),this.code=e,this.message=this.cause?a+": "+this.cause.message:a}return n.prototype=new(i||Error),Object.defineProperties(n.prototype,{constructor:{value:n,enumerable:!1},name:{value:"Error ["+e+"]",enumerable:!1}}),n}function Ka(e,a){for(var i of Ha)e.removeListener(i,Ma[i]);e.on("error",Sn),e.destroy(a)}function xo(e,a){Ia(he(e)&&he(a));var i=e.length-a.length-1;return i>0&&e[i]==="."&&e.endsWith(a)}function he(e){return typeof e=="string"||e instanceof String}function ze(e){return typeof e=="function"}function ho(e){return typeof e=="object"&&"length"in e}function vo(e){return qe&&e instanceof qe}Va.exports=Rn({http:oo,https:ro});Va.exports.wrap=Rn});var js=j((wp,_s)=>{"use strict";var bo=pn(),go=E("url"),yo=un(),wo=E("http"),_o=E("https"),Jn=E("util"),jo=Cn(),ko=E("zlib"),Xn=E("stream"),Eo=E("events");function me(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var Yn=me(bo),Ro=me(go),So=me(wo),Oo=me(_o),Co=me(Jn),To=me(jo),ue=me(ko),pe=me(Xn);function Zn(e,a){return function(){return e.apply(a,arguments)}}var{toString:Ao}=Object.prototype,{getPrototypeOf:li}=Object,ra=(e=>a=>{let i=Ao.call(a);return e[i]||(e[i]=i.slice(8,-1).toLowerCase())})(Object.create(null)),Q=e=>(e=e.toLowerCase(),a=>ra(a)===e),ca=e=>a=>typeof a===e,{isArray:Se}=Array,De=ca("undefined");function qo(e){return e!==null&&!De(e)&&e.constructor!==null&&!De(e.constructor)&&X(e.constructor.isBuffer)&&e.constructor.isBuffer(e)}var Qn=Q("ArrayBuffer");function zo(e){let a;return typeof ArrayBuffer<"u"&&ArrayBuffer.isView?a=ArrayBuffer.isView(e):a=e&&e.buffer&&Qn(e.buffer),a}var Lo=ca("string"),X=ca("function"),es=ca("number"),pa=e=>e!==null&&typeof e=="object",Fo=e=>e===!0||e===!1,aa=e=>{if(ra(e)!=="object")return!1;let a=li(e);return(a===null||a===Object.prototype||Object.getPrototypeOf(a)===null)&&!(Symbol.toStringTag in e)&&!(Symbol.iterator in e)},Po=Q("Date"),Do=Q("File"),Bo=Q("Blob"),No=Q("FileList"),Uo=e=>pa(e)&&X(e.pipe),Io=e=>{let a;return e&&(typeof FormData=="function"&&e instanceof FormData||X(e.append)&&((a=ra(e))==="formdata"||a==="object"&&X(e.toString)&&e.toString()==="[object FormData]"))},$o=Q("URLSearchParams"),[Ho,Mo,Wo,Ko]=["ReadableStream","Request","Response","Headers"].map(Q),Vo=e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"");function Ne(e,a,{allOwnKeys:i=!1}={}){if(e===null||typeof e>"u")return;let n,s;if(typeof e!="object"&&(e=[e]),Se(e))for(n=0,s=e.length;n0;)if(s=i[n],a===s.toLowerCase())return s;return null}var is=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:global,ns=e=>!De(e)&&e!==is;function Za(){let{caseless:e}=ns(this)&&this||{},a={},i=(n,s)=>{let t=e&&as(a,s)||s;aa(a[t])&&aa(n)?a[t]=Za(a[t],n):aa(n)?a[t]=Za({},n):Se(n)?a[t]=n.slice():a[t]=n};for(let n=0,s=arguments.length;n(Ne(a,(s,t)=>{i&&X(s)?e[t]=Zn(s,i):e[t]=s},{allOwnKeys:n}),e),Jo=e=>(e.charCodeAt(0)===65279&&(e=e.slice(1)),e),Xo=(e,a,i,n)=>{e.prototype=Object.create(a.prototype,n),e.prototype.constructor=e,Object.defineProperty(e,"super",{value:a.prototype}),i&&Object.assign(e.prototype,i)},Yo=(e,a,i,n)=>{let s,t,o,c={};if(a=a||{},e==null)return a;do{for(s=Object.getOwnPropertyNames(e),t=s.length;t-- >0;)o=s[t],(!n||n(o,e,a))&&!c[o]&&(a[o]=e[o],c[o]=!0);e=i!==!1&&li(e)}while(e&&(!i||i(e,a))&&e!==Object.prototype);return a},Zo=(e,a,i)=>{e=String(e),(i===void 0||i>e.length)&&(i=e.length),i-=a.length;let n=e.indexOf(a,i);return n!==-1&&n===i},Qo=e=>{if(!e)return null;if(Se(e))return e;let a=e.length;if(!es(a))return null;let i=new Array(a);for(;a-- >0;)i[a]=e[a];return i},er=(e=>a=>e&&a instanceof e)(typeof Uint8Array<"u"&&li(Uint8Array)),ar=(e,a)=>{let n=(e&&e[Symbol.iterator]).call(e),s;for(;(s=n.next())&&!s.done;){let t=s.value;a.call(e,t[0],t[1])}},ir=(e,a)=>{let i,n=[];for(;(i=e.exec(a))!==null;)n.push(i);return n},nr=Q("HTMLFormElement"),sr=e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(i,n,s){return n.toUpperCase()+s}),Tn=(({hasOwnProperty:e})=>(a,i)=>e.call(a,i))(Object.prototype),tr=Q("RegExp"),ss=(e,a)=>{let i=Object.getOwnPropertyDescriptors(e),n={};Ne(i,(s,t)=>{let o;(o=a(s,t,e))!==!1&&(n[t]=o||s)}),Object.defineProperties(e,n)},or=e=>{ss(e,(a,i)=>{if(X(e)&&["arguments","caller","callee"].indexOf(i)!==-1)return!1;let n=e[i];if(X(n)){if(a.enumerable=!1,"writable"in a){a.writable=!1;return}a.set||(a.set=()=>{throw Error("Can not rewrite read-only method '"+i+"'")})}})},rr=(e,a)=>{let i={},n=s=>{s.forEach(t=>{i[t]=!0})};return Se(e)?n(e):n(String(e).split(a)),i},cr=()=>{},pr=(e,a)=>e!=null&&Number.isFinite(e=+e)?e:a,Ga="abcdefghijklmnopqrstuvwxyz",An="0123456789",ts={DIGIT:An,ALPHA:Ga,ALPHA_DIGIT:Ga+Ga.toUpperCase()+An},lr=(e=16,a=ts.ALPHA_DIGIT)=>{let i="",{length:n}=a;for(;e--;)i+=a[Math.random()*n|0];return i};function ur(e){return!!(e&&X(e.append)&&e[Symbol.toStringTag]==="FormData"&&e[Symbol.iterator])}var dr=e=>{let a=new Array(10),i=(n,s)=>{if(pa(n)){if(a.indexOf(n)>=0)return;if(!("toJSON"in n)){a[s]=n;let t=Se(n)?[]:{};return Ne(n,(o,c)=>{let u=i(o,s+1);!De(u)&&(t[c]=u)}),a[s]=void 0,t}}return n};return i(e,0)},mr=Q("AsyncFunction"),fr=e=>e&&(pa(e)||X(e))&&X(e.then)&&X(e.catch),p={isArray:Se,isArrayBuffer:Qn,isBuffer:qo,isFormData:Io,isArrayBufferView:zo,isString:Lo,isNumber:es,isBoolean:Fo,isObject:pa,isPlainObject:aa,isReadableStream:Ho,isRequest:Mo,isResponse:Wo,isHeaders:Ko,isUndefined:De,isDate:Po,isFile:Do,isBlob:Bo,isRegExp:tr,isFunction:X,isStream:Uo,isURLSearchParams:$o,isTypedArray:er,isFileList:No,forEach:Ne,merge:Za,extend:Go,trim:Vo,stripBOM:Jo,inherits:Xo,toFlatObject:Yo,kindOf:ra,kindOfTest:Q,endsWith:Zo,toArray:Qo,forEachEntry:ar,matchAll:ir,isHTMLForm:nr,hasOwnProperty:Tn,hasOwnProp:Tn,reduceDescriptors:ss,freezeMethods:or,toObjectSet:rr,toCamelCase:sr,noop:cr,toFiniteNumber:pr,findKey:as,global:is,isContextDefined:ns,ALPHABET:ts,generateString:lr,isSpecCompliantForm:ur,toJSONObject:dr,isAsyncFn:mr,isThenable:fr};function f(e,a,i,n,s){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack,this.message=e,this.name="AxiosError",a&&(this.code=a),i&&(this.config=i),n&&(this.request=n),s&&(this.response=s)}p.inherits(f,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:p.toJSONObject(this.config),code:this.code,status:this.response&&this.response.status?this.response.status:null}}});var os=f.prototype,rs={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach(e=>{rs[e]={value:e}});Object.defineProperties(f,rs);Object.defineProperty(os,"isAxiosError",{value:!0});f.from=(e,a,i,n,s,t)=>{let o=Object.create(os);return p.toFlatObject(e,o,function(u){return u!==Error.prototype},c=>c!=="isAxiosError"),f.call(o,e.message,a,i,n,s),o.cause=e,o.name=e.name,t&&Object.assign(o,t),o};function Qa(e){return p.isPlainObject(e)||p.isArray(e)}function cs(e){return p.endsWith(e,"[]")?e.slice(0,-2):e}function qn(e,a,i){return e?e.concat(a).map(function(s,t){return s=cs(s),!i&&t?"["+s+"]":s}).join(i?".":""):a}function xr(e){return p.isArray(e)&&!e.some(Qa)}var hr=p.toFlatObject(p,{},null,function(a){return/^is[A-Z]/.test(a)});function la(e,a,i){if(!p.isObject(e))throw new TypeError("target must be an object");a=a||new(Yn.default||FormData),i=p.toFlatObject(i,{metaTokens:!0,dots:!1,indexes:!1},!1,function(h,w){return!p.isUndefined(w[h])});let n=i.metaTokens,s=i.visitor||r,t=i.dots,o=i.indexes,u=(i.Blob||typeof Blob<"u"&&Blob)&&p.isSpecCompliantForm(a);if(!p.isFunction(s))throw new TypeError("visitor must be a function");function l(m){if(m===null)return"";if(p.isDate(m))return m.toISOString();if(!u&&p.isBlob(m))throw new f("Blob is not supported. Use a Buffer instead.");return p.isArrayBuffer(m)||p.isTypedArray(m)?u&&typeof Blob=="function"?new Blob([m]):Buffer.from(m):m}function r(m,h,w){let k=m;if(m&&!w&&typeof m=="object"){if(p.endsWith(h,"{}"))h=n?h:h.slice(0,-2),m=JSON.stringify(m);else if(p.isArray(m)&&xr(m)||(p.isFileList(m)||p.endsWith(h,"[]"))&&(k=p.toArray(m)))return h=cs(h),k.forEach(function(b,C){!(p.isUndefined(b)||b===null)&&a.append(o===!0?qn([h],C,t):o===null?h:h+"[]",l(b))}),!1}return Qa(m)?!0:(a.append(qn(w,h,t),l(m)),!1)}let d=[],x=Object.assign(hr,{defaultVisitor:r,convertValue:l,isVisitable:Qa});function _(m,h){if(!p.isUndefined(m)){if(d.indexOf(m)!==-1)throw Error("Circular reference detected in "+h.join("."));d.push(m),p.forEach(m,function(k,S){(!(p.isUndefined(k)||k===null)&&s.call(a,k,p.isString(S)?S.trim():S,h,x))===!0&&_(k,h?h.concat(S):[S])}),d.pop()}}if(!p.isObject(e))throw new TypeError("data must be an object");return _(e),a}function zn(e){let a={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g,function(n){return a[n]})}function ps(e,a){this._pairs=[],e&&la(e,this,a)}var ls=ps.prototype;ls.append=function(a,i){this._pairs.push([a,i])};ls.toString=function(a){let i=a?function(n){return a.call(this,n,zn)}:zn;return this._pairs.map(function(s){return i(s[0])+"="+i(s[1])},"").join("&")};function vr(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function ui(e,a,i){if(!a)return e;let n=i&&i.encode||vr,s=i&&i.serialize,t;if(s?t=s(a,i):t=p.isURLSearchParams(a)?a.toString():new ps(a,i).toString(n),t){let o=e.indexOf("#");o!==-1&&(e=e.slice(0,o)),e+=(e.indexOf("?")===-1?"?":"&")+t}return e}var ei=class{constructor(){this.handlers=[]}use(a,i,n){return this.handlers.push({fulfilled:a,rejected:i,synchronous:n?n.synchronous:!1,runWhen:n?n.runWhen:null}),this.handlers.length-1}eject(a){this.handlers[a]&&(this.handlers[a]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(a){p.forEach(this.handlers,function(n){n!==null&&a(n)})}},Ln=ei,di={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},br=Ro.default.URLSearchParams,gr={isNode:!0,classes:{URLSearchParams:br,FormData:Yn.default,Blob:typeof Blob<"u"&&Blob||null},protocols:["http","https","file","data"]},mi=typeof window<"u"&&typeof document<"u",yr=(e=>mi&&["ReactNative","NativeScript","NS"].indexOf(e)<0)(typeof navigator<"u"&&navigator.product),wr=typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope&&typeof self.importScripts=="function",_r=mi&&window.location.href||"http://localhost",jr=Object.freeze({__proto__:null,hasBrowserEnv:mi,hasStandardBrowserWebWorkerEnv:wr,hasStandardBrowserEnv:yr,origin:_r}),K={...jr,...gr};function kr(e,a){return la(e,new K.classes.URLSearchParams,Object.assign({visitor:function(i,n,s,t){return K.isNode&&p.isBuffer(i)?(this.append(n,i.toString("base64")),!1):t.defaultVisitor.apply(this,arguments)}},a))}function Er(e){return p.matchAll(/\w+|\[(\w*)]/g,e).map(a=>a[0]==="[]"?"":a[1]||a[0])}function Rr(e){let a={},i=Object.keys(e),n,s=i.length,t;for(n=0;n=i.length;return o=!o&&p.isArray(s)?s.length:o,u?(p.hasOwnProp(s,o)?s[o]=[s[o],n]:s[o]=n,!c):((!s[o]||!p.isObject(s[o]))&&(s[o]=[]),a(i,n,s[o],t)&&p.isArray(s[o])&&(s[o]=Rr(s[o])),!c)}if(p.isFormData(e)&&p.isFunction(e.entries)){let i={};return p.forEachEntry(e,(n,s)=>{a(Er(n),s,i,0)}),i}return null}function Sr(e,a,i){if(p.isString(e))try{return(a||JSON.parse)(e),p.trim(e)}catch(n){if(n.name!=="SyntaxError")throw n}return(i||JSON.stringify)(e)}var fi={transitional:di,adapter:["xhr","http","fetch"],transformRequest:[function(a,i){let n=i.getContentType()||"",s=n.indexOf("application/json")>-1,t=p.isObject(a);if(t&&p.isHTMLForm(a)&&(a=new FormData(a)),p.isFormData(a))return s?JSON.stringify(us(a)):a;if(p.isArrayBuffer(a)||p.isBuffer(a)||p.isStream(a)||p.isFile(a)||p.isBlob(a)||p.isReadableStream(a))return a;if(p.isArrayBufferView(a))return a.buffer;if(p.isURLSearchParams(a))return i.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),a.toString();let c;if(t){if(n.indexOf("application/x-www-form-urlencoded")>-1)return kr(a,this.formSerializer).toString();if((c=p.isFileList(a))||n.indexOf("multipart/form-data")>-1){let u=this.env&&this.env.FormData;return la(c?{"files[]":a}:a,u&&new u,this.formSerializer)}}return t||s?(i.setContentType("application/json",!1),Sr(a)):a}],transformResponse:[function(a){let i=this.transitional||fi.transitional,n=i&&i.forcedJSONParsing,s=this.responseType==="json";if(p.isResponse(a)||p.isReadableStream(a))return a;if(a&&p.isString(a)&&(n&&!this.responseType||s)){let o=!(i&&i.silentJSONParsing)&&s;try{return JSON.parse(a)}catch(c){if(o)throw c.name==="SyntaxError"?f.from(c,f.ERR_BAD_RESPONSE,this,null,this.response):c}}return a}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:K.classes.FormData,Blob:K.classes.Blob},validateStatus:function(a){return a>=200&&a<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};p.forEach(["delete","get","head","post","put","patch"],e=>{fi.headers[e]={}});var xi=fi,Or=p.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),Cr=e=>{let a={},i,n,s;return e&&e.split(` +`).forEach(function(o){s=o.indexOf(":"),i=o.substring(0,s).trim().toLowerCase(),n=o.substring(s+1).trim(),!(!i||a[i]&&Or[i])&&(i==="set-cookie"?a[i]?a[i].push(n):a[i]=[n]:a[i]=a[i]?a[i]+", "+n:n)}),a},Fn=Symbol("internals");function Pe(e){return e&&String(e).trim().toLowerCase()}function ia(e){return e===!1||e==null?e:p.isArray(e)?e.map(ia):String(e)}function Tr(e){let a=Object.create(null),i=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g,n;for(;n=i.exec(e);)a[n[1]]=n[2];return a}var Ar=e=>/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim());function Ja(e,a,i,n,s){if(p.isFunction(n))return n.call(this,a,i);if(s&&(a=i),!!p.isString(a)){if(p.isString(n))return a.indexOf(n)!==-1;if(p.isRegExp(n))return n.test(a)}}function qr(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(a,i,n)=>i.toUpperCase()+n)}function zr(e,a){let i=p.toCamelCase(" "+a);["get","set","has"].forEach(n=>{Object.defineProperty(e,n+i,{value:function(s,t,o){return this[n].call(this,a,s,t,o)},configurable:!0})})}var Ee=class{constructor(a){a&&this.set(a)}set(a,i,n){let s=this;function t(c,u,l){let r=Pe(u);if(!r)throw new Error("header name must be a non-empty string");let d=p.findKey(s,r);(!d||s[d]===void 0||l===!0||l===void 0&&s[d]!==!1)&&(s[d||u]=ia(c))}let o=(c,u)=>p.forEach(c,(l,r)=>t(l,r,u));if(p.isPlainObject(a)||a instanceof this.constructor)o(a,i);else if(p.isString(a)&&(a=a.trim())&&!Ar(a))o(Cr(a),i);else if(p.isHeaders(a))for(let[c,u]of a.entries())t(u,c,n);else a!=null&&t(i,a,n);return this}get(a,i){if(a=Pe(a),a){let n=p.findKey(this,a);if(n){let s=this[n];if(!i)return s;if(i===!0)return Tr(s);if(p.isFunction(i))return i.call(this,s,n);if(p.isRegExp(i))return i.exec(s);throw new TypeError("parser must be boolean|regexp|function")}}}has(a,i){if(a=Pe(a),a){let n=p.findKey(this,a);return!!(n&&this[n]!==void 0&&(!i||Ja(this,this[n],n,i)))}return!1}delete(a,i){let n=this,s=!1;function t(o){if(o=Pe(o),o){let c=p.findKey(n,o);c&&(!i||Ja(n,n[c],c,i))&&(delete n[c],s=!0)}}return p.isArray(a)?a.forEach(t):t(a),s}clear(a){let i=Object.keys(this),n=i.length,s=!1;for(;n--;){let t=i[n];(!a||Ja(this,this[t],t,a,!0))&&(delete this[t],s=!0)}return s}normalize(a){let i=this,n={};return p.forEach(this,(s,t)=>{let o=p.findKey(n,t);if(o){i[o]=ia(s),delete i[t];return}let c=a?qr(t):String(t).trim();c!==t&&delete i[t],i[c]=ia(s),n[c]=!0}),this}concat(...a){return this.constructor.concat(this,...a)}toJSON(a){let i=Object.create(null);return p.forEach(this,(n,s)=>{n!=null&&n!==!1&&(i[s]=a&&p.isArray(n)?n.join(", "):n)}),i}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([a,i])=>a+": "+i).join(` +`)}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(a){return a instanceof this?a:new this(a)}static concat(a,...i){let n=new this(a);return i.forEach(s=>n.set(s)),n}static accessor(a){let n=(this[Fn]=this[Fn]={accessors:{}}).accessors,s=this.prototype;function t(o){let c=Pe(o);n[c]||(zr(s,o),n[c]=!0)}return p.isArray(a)?a.forEach(t):t(a),this}};Ee.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]);p.reduceDescriptors(Ee.prototype,({value:e},a)=>{let i=a[0].toUpperCase()+a.slice(1);return{get:()=>e,set(n){this[i]=n}}});p.freezeMethods(Ee);var H=Ee;function Xa(e,a){let i=this||xi,n=a||i,s=H.from(n.headers),t=n.data;return p.forEach(e,function(c){t=c.call(i,t,s.normalize(),a?a.status:void 0)}),s.normalize(),t}function ds(e){return!!(e&&e.__CANCEL__)}function de(e,a,i){f.call(this,e??"canceled",f.ERR_CANCELED,a,i),this.name="CanceledError"}p.inherits(de,f,{__CANCEL__:!0});function ke(e,a,i){let n=i.config.validateStatus;!i.status||!n||n(i.status)?e(i):a(new f("Request failed with status code "+i.status,[f.ERR_BAD_REQUEST,f.ERR_BAD_RESPONSE][Math.floor(i.status/100)-4],i.config,i.request,i))}function Lr(e){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(e)}function Fr(e,a){return a?e.replace(/\/?\/$/,"")+"/"+a.replace(/^\/+/,""):e}function hi(e,a){return e&&!Lr(a)?Fr(e,a):a}var sa="1.7.2";function ms(e){let a=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return a&&a[1]||""}var Pr=/^(?:([^;]+);)?(?:[^;]+;)?(base64|),([\s\S]*)$/;function Dr(e,a,i){let n=i&&i.Blob||K.classes.Blob,s=ms(e);if(a===void 0&&n&&(a=!0),s==="data"){e=s.length?e.slice(s.length+1):e;let t=Pr.exec(e);if(!t)throw new f("Invalid URL",f.ERR_INVALID_URL);let o=t[1],c=t[2],u=t[3],l=Buffer.from(decodeURIComponent(u),c?"base64":"utf8");if(a){if(!n)throw new f("Blob is not supported",f.ERR_NOT_SUPPORT);return new n([l],{type:o})}return l}throw new f("Unsupported protocol "+s,f.ERR_NOT_SUPPORT)}function fs(e,a){let i=0,n=1e3/a,s=null;return function(){let o=this===!0,c=Date.now();if(o||c-i>n)return s&&(clearTimeout(s),s=null),i=c,e.apply(null,arguments);s||(s=setTimeout(()=>(s=null,i=Date.now(),e.apply(null,arguments)),n-(c-i)))}}function xs(e,a){e=e||10;let i=new Array(e),n=new Array(e),s=0,t=0,o;return a=a!==void 0?a:1e3,function(u){let l=Date.now(),r=n[t];o||(o=l),i[s]=u,n[s]=l;let d=t,x=0;for(;d!==s;)x+=i[d++],d=d%e;if(s=(s+1)%e,s===t&&(t=(t+1)%e),l-o!p.isUndefined(u[c])),super({readableHighWaterMark:a.chunkSize});let i=this,n=this[ea]={length:a.length,timeWindow:a.timeWindow,ticksRate:a.ticksRate,chunkSize:a.chunkSize,maxRate:a.maxRate,minChunkSize:a.minChunkSize,bytesSeen:0,isCaptured:!1,notifiedBytesLoaded:0,ts:Date.now(),bytes:0,onReadCallback:null},s=xs(n.ticksRate*a.samplesCount,n.timeWindow);this.on("newListener",c=>{c==="progress"&&(n.isCaptured||(n.isCaptured=!0))});let t=0;n.updateProgress=fs(function(){let u=n.length,l=n.bytesSeen,r=l-t;if(!r||i.destroyed)return;let d=s(r);t=l,process.nextTick(()=>{i.emit("progress",{loaded:l,total:u,progress:u?l/u:void 0,bytes:r,rate:d||void 0,estimated:d&&u&&l<=u?(u-l)/d:void 0,lengthComputable:u!=null})})},n.ticksRate);let o=()=>{n.updateProgress.call(!0)};this.once("end",o),this.once("error",o)}_read(a){let i=this[ea];return i.onReadCallback&&i.onReadCallback(),super._read(a)}_transform(a,i,n){let s=this,t=this[ea],o=t.maxRate,c=this.readableHighWaterMark,u=t.timeWindow,l=1e3/u,r=o/l,d=t.minChunkSize!==!1?Math.max(t.minChunkSize,r*.01):0;function x(m,h){let w=Buffer.byteLength(m);t.bytesSeen+=w,t.bytes+=w,t.isCaptured&&t.updateProgress(),s.push(m)?process.nextTick(h):t.onReadCallback=()=>{t.onReadCallback=null,process.nextTick(h)}}let _=(m,h)=>{let w=Buffer.byteLength(m),k=null,S=c,b,C=0;if(o){let A=Date.now();(!t.ts||(C=A-t.ts)>=u)&&(t.ts=A,b=r-t.bytes,t.bytes=b<0?-b:0,C=0),b=r-t.bytes}if(o){if(b<=0)return setTimeout(()=>{h(null,m)},u-C);bS&&w-S>d&&(k=m.subarray(S),m=m.subarray(0,S)),x(m,k?()=>{process.nextTick(h,null,k)}:h)};_(a,function m(h,w){if(h)return n(h);w?_(w,m):n(null)})}setLength(a){return this[ea].length=+a,this}},Pn=ai,{asyncIterator:Dn}=Symbol,Br=async function*(e){e.stream?yield*e.stream():e.arrayBuffer?yield await e.arrayBuffer():e[Dn]?yield*e[Dn]():yield e},hs=Br,Nr=p.ALPHABET.ALPHA_DIGIT+"-_",Be=new Jn.TextEncoder,le=`\r +`,Ur=Be.encode(le),Ir=2,ii=class{constructor(a,i){let{escapeName:n}=this.constructor,s=p.isString(i),t=`Content-Disposition: form-data; name="${n(a)}"${!s&&i.name?`; filename="${n(i.name)}"`:""}${le}`;s?i=Be.encode(String(i).replace(/\r?\n|\r\n?/g,le)):t+=`Content-Type: ${i.type||"application/octet-stream"}${le}`,this.headers=Be.encode(t+le),this.contentLength=s?i.byteLength:i.size,this.size=this.headers.byteLength+this.contentLength+Ir,this.name=a,this.value=i}async*encode(){yield this.headers;let{value:a}=this;p.isTypedArray(a)?yield a:yield*hs(a),yield Ur}static escapeName(a){return String(a).replace(/[\r\n"]/g,i=>({"\r":"%0D","\n":"%0A",'"':"%22"})[i])}},$r=(e,a,i)=>{let{tag:n="form-data-boundary",size:s=25,boundary:t=n+"-"+p.generateString(s,Nr)}=i||{};if(!p.isFormData(e))throw TypeError("FormData instance required");if(t.length<1||t.length>70)throw Error("boundary must be 10-70 characters long");let o=Be.encode("--"+t+le),c=Be.encode("--"+t+"--"+le+le),u=c.byteLength,l=Array.from(e.entries()).map(([d,x])=>{let _=new ii(d,x);return u+=_.size,_});u+=o.byteLength*l.length,u=p.toFiniteNumber(u);let r={"Content-Type":`multipart/form-data; boundary=${t}`};return Number.isFinite(u)&&(r["Content-Length"]=u),a&&a(r),Xn.Readable.from(async function*(){for(let d of l)yield o,yield*d.encode();yield c}())},Hr=$r,ni=class extends pe.default.Transform{__transform(a,i,n){this.push(a),n()}_transform(a,i,n){if(a.length!==0&&(this._transform=this.__transform,a[0]!==120)){let s=Buffer.alloc(2);s[0]=120,s[1]=156,this.push(s,i)}this.__transform(a,i,n)}},Mr=ni,Wr=(e,a)=>p.isAsyncFn(e)?function(...i){let n=i.pop();e.apply(this,i).then(s=>{try{a?n(null,...a(s)):n(null,s)}catch(t){n(t)}},n)}:e,Kr=Wr,Bn={flush:ue.default.constants.Z_SYNC_FLUSH,finishFlush:ue.default.constants.Z_SYNC_FLUSH},Vr={flush:ue.default.constants.BROTLI_OPERATION_FLUSH,finishFlush:ue.default.constants.BROTLI_OPERATION_FLUSH},Nn=p.isFunction(ue.default.createBrotliDecompress),{http:Gr,https:Jr}=To.default,Xr=/https:?/,Un=K.protocols.map(e=>e+":");function Yr(e,a){e.beforeRedirects.proxy&&e.beforeRedirects.proxy(e),e.beforeRedirects.config&&e.beforeRedirects.config(e,a)}function vs(e,a,i){let n=a;if(!n&&n!==!1){let s=yo.getProxyForUrl(i);s&&(n=new URL(s))}if(n){if(n.username&&(n.auth=(n.username||"")+":"+(n.password||"")),n.auth){(n.auth.username||n.auth.password)&&(n.auth=(n.auth.username||"")+":"+(n.auth.password||""));let t=Buffer.from(n.auth,"utf8").toString("base64");e.headers["Proxy-Authorization"]="Basic "+t}e.headers.host=e.hostname+(e.port?":"+e.port:"");let s=n.hostname||n.host;e.hostname=s,e.host=s,e.port=n.port,e.path=i,n.protocol&&(e.protocol=n.protocol.includes(":")?n.protocol:`${n.protocol}:`)}e.beforeRedirects.proxy=function(t){vs(t,a,t.href)}}var Zr=typeof process<"u"&&p.kindOf(process)==="process",Qr=e=>new Promise((a,i)=>{let n,s,t=(u,l)=>{s||(s=!0,n&&n(u,l))},o=u=>{t(u),a(u)},c=u=>{t(u,!0),i(u)};e(o,c,u=>n=u).catch(c)}),ec=({address:e,family:a})=>{if(!p.isString(e))throw TypeError("address must be a string");return{address:e,family:a||(e.indexOf(".")<0?6:4)}},In=(e,a)=>ec(p.isObject(e)?e:{address:e,family:a}),ac=Zr&&function(a){return Qr(async function(n,s,t){let{data:o,lookup:c,family:u}=a,{responseType:l,responseEncoding:r}=a,d=a.method.toUpperCase(),x,_=!1,m;if(c){let g=Kr(c,y=>p.isArray(y)?y:[y]);c=(y,D,fe)=>{g(y,D,(L,oe,ya)=>{if(L)return fe(L);let ne=p.isArray(oe)?oe.map(Y=>In(Y)):[In(oe,ya)];D.all?fe(L,ne):fe(L,ne[0].address,ne[0].family)})}}let h=new Eo.EventEmitter,w=()=>{a.cancelToken&&a.cancelToken.unsubscribe(k),a.signal&&a.signal.removeEventListener("abort",k),h.removeAllListeners()};t((g,y)=>{x=!0,y&&(_=!0,w())});function k(g){h.emit("abort",!g||g.type?new de(null,a,m):g)}h.once("abort",s),(a.cancelToken||a.signal)&&(a.cancelToken&&a.cancelToken.subscribe(k),a.signal&&(a.signal.aborted?k():a.signal.addEventListener("abort",k)));let S=hi(a.baseURL,a.url),b=new URL(S,"http://localhost"),C=b.protocol||Un[0];if(C==="data:"){let g;if(d!=="GET")return ke(n,s,{status:405,statusText:"method not allowed",headers:{},config:a});try{g=Dr(a.url,l==="blob",{Blob:a.env&&a.env.Blob})}catch(y){throw f.from(y,f.ERR_BAD_REQUEST,a)}return l==="text"?(g=g.toString(r),(!r||r==="utf8")&&(g=p.stripBOM(g))):l==="stream"&&(g=pe.default.Readable.from(g)),ke(n,s,{data:g,status:200,statusText:"OK",headers:new H,config:a})}if(Un.indexOf(C)===-1)return s(new f("Unsupported protocol "+C,f.ERR_BAD_REQUEST,a));let A=H.from(a.headers).normalize();A.set("User-Agent","axios/"+sa,!1);let P=a.onDownloadProgress,G=a.onUploadProgress,ie=a.maxRate,ge,ba;if(p.isSpecCompliantForm(o)){let g=A.getContentType(/boundary=([-_\w\d]{10,70})/i);o=Hr(o,y=>{A.set(y)},{tag:`axios-${sa}-boundary`,boundary:g&&g[1]||void 0})}else if(p.isFormData(o)&&p.isFunction(o.getHeaders)){if(A.set(o.getHeaders()),!A.hasContentLength())try{let g=await Co.default.promisify(o.getLength).call(o);Number.isFinite(g)&&g>=0&&A.setContentLength(g)}catch{}}else if(p.isBlob(o))o.size&&A.setContentType(o.type||"application/octet-stream"),A.setContentLength(o.size||0),o=pe.default.Readable.from(hs(o));else if(o&&!p.isStream(o)){if(!Buffer.isBuffer(o))if(p.isArrayBuffer(o))o=Buffer.from(new Uint8Array(o));else if(p.isString(o))o=Buffer.from(o,"utf-8");else return s(new f("Data after transformation must be a string, an ArrayBuffer, a Buffer, or a Stream",f.ERR_BAD_REQUEST,a));if(A.setContentLength(o.length,!1),a.maxBodyLength>-1&&o.length>a.maxBodyLength)return s(new f("Request body larger than maxBodyLength limit",f.ERR_BAD_REQUEST,a))}let Hs=p.toFiniteNumber(A.getContentLength());p.isArray(ie)?(ge=ie[0],ba=ie[1]):ge=ba=ie,o&&(G||ge)&&(p.isStream(o)||(o=pe.default.Readable.from(o,{objectMode:!1})),o=pe.default.pipeline([o,new Pn({length:Hs,maxRate:p.toFiniteNumber(ge)})],p.noop),G&&o.on("progress",g=>{G(Object.assign(g,{upload:!0}))}));let Te;if(a.auth){let g=a.auth.username||"",y=a.auth.password||"";Te=g+":"+y}if(!Te&&b.username){let g=b.username,y=b.password;Te=g+":"+y}Te&&A.delete("authorization");let Ri;try{Ri=ui(b.pathname+b.search,a.params,a.paramsSerializer).replace(/^\?/,"")}catch(g){let y=new Error(g.message);return y.config=a,y.url=a.url,y.exists=!0,s(y)}A.set("Accept-Encoding","gzip, compress, deflate"+(Nn?", br":""),!1);let U={path:Ri,method:d,headers:A.toJSON(),agents:{http:a.httpAgent,https:a.httpsAgent},auth:Te,protocol:C,family:u,beforeRedirect:Yr,beforeRedirects:{}};!p.isUndefined(c)&&(U.lookup=c),a.socketPath?U.socketPath=a.socketPath:(U.hostname=b.hostname,U.port=b.port,vs(U,a.proxy,C+"//"+b.hostname+(b.port?":"+b.port:"")+U.path));let We,ga=Xr.test(U.protocol);if(U.agent=ga?a.httpsAgent:a.httpAgent,a.transport?We=a.transport:a.maxRedirects===0?We=ga?Oo.default:So.default:(a.maxRedirects&&(U.maxRedirects=a.maxRedirects),a.beforeRedirect&&(U.beforeRedirects.config=a.beforeRedirect),We=ga?Jr:Gr),a.maxBodyLength>-1?U.maxBodyLength=a.maxBodyLength:U.maxBodyLength=1/0,a.insecureHTTPParser&&(U.insecureHTTPParser=a.insecureHTTPParser),m=We.request(U,function(y){if(m.destroyed)return;let D=[y],fe=+y.headers["content-length"];if(P){let Y=new Pn({length:p.toFiniteNumber(fe),maxRate:p.toFiniteNumber(ba)});P&&Y.on("progress",Ke=>{P(Object.assign(Ke,{download:!0}))}),D.push(Y)}let L=y,oe=y.req||m;if(a.decompress!==!1&&y.headers["content-encoding"])switch((d==="HEAD"||y.statusCode===204)&&delete y.headers["content-encoding"],(y.headers["content-encoding"]||"").toLowerCase()){case"gzip":case"x-gzip":case"compress":case"x-compress":D.push(ue.default.createUnzip(Bn)),delete y.headers["content-encoding"];break;case"deflate":D.push(new Mr),D.push(ue.default.createUnzip(Bn)),delete y.headers["content-encoding"];break;case"br":Nn&&(D.push(ue.default.createBrotliDecompress(Vr)),delete y.headers["content-encoding"])}L=D.length>1?pe.default.pipeline(D,p.noop):D[0];let ya=pe.default.finished(L,()=>{ya(),w()}),ne={status:y.statusCode,statusText:y.statusMessage,headers:new H(y.headers),config:a,request:oe};if(l==="stream")ne.data=L,ke(n,s,ne);else{let Y=[],Ke=0;L.on("data",function(N){Y.push(N),Ke+=N.length,a.maxContentLength>-1&&Ke>a.maxContentLength&&(_=!0,L.destroy(),s(new f("maxContentLength size of "+a.maxContentLength+" exceeded",f.ERR_BAD_RESPONSE,a,oe)))}),L.on("aborted",function(){if(_)return;let N=new f("maxContentLength size of "+a.maxContentLength+" exceeded",f.ERR_BAD_RESPONSE,a,oe);L.destroy(N),s(N)}),L.on("error",function(N){m.destroyed||s(f.from(N,null,a,oe))}),L.on("end",function(){try{let N=Y.length===1?Y[0]:Buffer.concat(Y);l!=="arraybuffer"&&(N=N.toString(r),(!r||r==="utf8")&&(N=p.stripBOM(N))),ne.data=N}catch(N){return s(f.from(N,null,a,ne.request,ne))}ke(n,s,ne)})}h.once("abort",Y=>{L.destroyed||(L.emit("error",Y),L.destroy())})}),h.once("abort",g=>{s(g),m.destroy(g)}),m.on("error",function(y){s(f.from(y,null,a,m))}),m.on("socket",function(y){y.setKeepAlive(!0,1e3*60)}),a.timeout){let g=parseInt(a.timeout,10);if(Number.isNaN(g)){s(new f("error trying to parse `config.timeout` to int",f.ERR_BAD_OPTION_VALUE,a,m));return}m.setTimeout(g,function(){if(x)return;let D=a.timeout?"timeout of "+a.timeout+"ms exceeded":"timeout exceeded",fe=a.transitional||di;a.timeoutErrorMessage&&(D=a.timeoutErrorMessage),s(new f(D,fe.clarifyTimeoutError?f.ETIMEDOUT:f.ECONNABORTED,a,m)),k()})}if(p.isStream(o)){let g=!1,y=!1;o.on("end",()=>{g=!0}),o.once("error",D=>{y=!0,m.destroy(D)}),o.on("close",()=>{!g&&!y&&k(new de("Request stream has been aborted",a,m))}),o.pipe(m)}else m.end(o)})},ta=(e,a,i=3)=>{let n=0,s=xs(50,250);return fs(t=>{let o=t.loaded,c=t.lengthComputable?t.total:void 0,u=o-n,l=s(u),r=o<=c;n=o;let d={loaded:o,total:c,progress:c?o/c:void 0,bytes:u,rate:l||void 0,estimated:l&&c&&r?(c-o)/l:void 0,event:t,lengthComputable:c!=null};d[a?"download":"upload"]=!0,e(d)},i)},ic=K.hasStandardBrowserEnv?function(){let a=/(msie|trident)/i.test(navigator.userAgent),i=document.createElement("a"),n;function s(t){let o=t;return a&&(i.setAttribute("href",o),o=i.href),i.setAttribute("href",o),{href:i.href,protocol:i.protocol?i.protocol.replace(/:$/,""):"",host:i.host,search:i.search?i.search.replace(/^\?/,""):"",hash:i.hash?i.hash.replace(/^#/,""):"",hostname:i.hostname,port:i.port,pathname:i.pathname.charAt(0)==="/"?i.pathname:"/"+i.pathname}}return n=s(window.location.href),function(o){let c=p.isString(o)?s(o):o;return c.protocol===n.protocol&&c.host===n.host}}():function(){return function(){return!0}}(),nc=K.hasStandardBrowserEnv?{write(e,a,i,n,s,t){let o=[e+"="+encodeURIComponent(a)];p.isNumber(i)&&o.push("expires="+new Date(i).toGMTString()),p.isString(n)&&o.push("path="+n),p.isString(s)&&o.push("domain="+s),t===!0&&o.push("secure"),document.cookie=o.join("; ")},read(e){let a=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return a?decodeURIComponent(a[3]):null},remove(e){this.write(e,"",Date.now()-864e5)}}:{write(){},read(){return null},remove(){}},$n=e=>e instanceof H?{...e}:e;function ve(e,a){a=a||{};let i={};function n(l,r,d){return p.isPlainObject(l)&&p.isPlainObject(r)?p.merge.call({caseless:d},l,r):p.isPlainObject(r)?p.merge({},r):p.isArray(r)?r.slice():r}function s(l,r,d){if(p.isUndefined(r)){if(!p.isUndefined(l))return n(void 0,l,d)}else return n(l,r,d)}function t(l,r){if(!p.isUndefined(r))return n(void 0,r)}function o(l,r){if(p.isUndefined(r)){if(!p.isUndefined(l))return n(void 0,l)}else return n(void 0,r)}function c(l,r,d){if(d in a)return n(l,r);if(d in e)return n(void 0,l)}let u={url:t,method:t,data:t,baseURL:o,transformRequest:o,transformResponse:o,paramsSerializer:o,timeout:o,timeoutMessage:o,withCredentials:o,withXSRFToken:o,adapter:o,responseType:o,xsrfCookieName:o,xsrfHeaderName:o,onUploadProgress:o,onDownloadProgress:o,decompress:o,maxContentLength:o,maxBodyLength:o,beforeRedirect:o,transport:o,httpAgent:o,httpsAgent:o,cancelToken:o,socketPath:o,responseEncoding:o,validateStatus:c,headers:(l,r)=>s($n(l),$n(r),!0)};return p.forEach(Object.keys(Object.assign({},e,a)),function(r){let d=u[r]||s,x=d(e[r],a[r],r);p.isUndefined(x)&&d!==c||(i[r]=x)}),i}var bs=e=>{let a=ve({},e),{data:i,withXSRFToken:n,xsrfHeaderName:s,xsrfCookieName:t,headers:o,auth:c}=a;a.headers=o=H.from(o),a.url=ui(hi(a.baseURL,a.url),e.params,e.paramsSerializer),c&&o.set("Authorization","Basic "+btoa((c.username||"")+":"+(c.password?unescape(encodeURIComponent(c.password)):"")));let u;if(p.isFormData(i)){if(K.hasStandardBrowserEnv||K.hasStandardBrowserWebWorkerEnv)o.setContentType(void 0);else if((u=o.getContentType())!==!1){let[l,...r]=u?u.split(";").map(d=>d.trim()).filter(Boolean):[];o.setContentType([l||"multipart/form-data",...r].join("; "))}}if(K.hasStandardBrowserEnv&&(n&&p.isFunction(n)&&(n=n(a)),n||n!==!1&&ic(a.url))){let l=s&&t&&nc.read(t);l&&o.set(s,l)}return a},sc=typeof XMLHttpRequest<"u",tc=sc&&function(e){return new Promise(function(i,n){let s=bs(e),t=s.data,o=H.from(s.headers).normalize(),{responseType:c}=s,u;function l(){s.cancelToken&&s.cancelToken.unsubscribe(u),s.signal&&s.signal.removeEventListener("abort",u)}let r=new XMLHttpRequest;r.open(s.method.toUpperCase(),s.url,!0),r.timeout=s.timeout;function d(){if(!r)return;let _=H.from("getAllResponseHeaders"in r&&r.getAllResponseHeaders()),h={data:!c||c==="text"||c==="json"?r.responseText:r.response,status:r.status,statusText:r.statusText,headers:_,config:e,request:r};ke(function(k){i(k),l()},function(k){n(k),l()},h),r=null}"onloadend"in r?r.onloadend=d:r.onreadystatechange=function(){!r||r.readyState!==4||r.status===0&&!(r.responseURL&&r.responseURL.indexOf("file:")===0)||setTimeout(d)},r.onabort=function(){r&&(n(new f("Request aborted",f.ECONNABORTED,s,r)),r=null)},r.onerror=function(){n(new f("Network Error",f.ERR_NETWORK,s,r)),r=null},r.ontimeout=function(){let m=s.timeout?"timeout of "+s.timeout+"ms exceeded":"timeout exceeded",h=s.transitional||di;s.timeoutErrorMessage&&(m=s.timeoutErrorMessage),n(new f(m,h.clarifyTimeoutError?f.ETIMEDOUT:f.ECONNABORTED,s,r)),r=null},t===void 0&&o.setContentType(null),"setRequestHeader"in r&&p.forEach(o.toJSON(),function(m,h){r.setRequestHeader(h,m)}),p.isUndefined(s.withCredentials)||(r.withCredentials=!!s.withCredentials),c&&c!=="json"&&(r.responseType=s.responseType),typeof s.onDownloadProgress=="function"&&r.addEventListener("progress",ta(s.onDownloadProgress,!0)),typeof s.onUploadProgress=="function"&&r.upload&&r.upload.addEventListener("progress",ta(s.onUploadProgress)),(s.cancelToken||s.signal)&&(u=_=>{r&&(n(!_||_.type?new de(null,e,r):_),r.abort(),r=null)},s.cancelToken&&s.cancelToken.subscribe(u),s.signal&&(s.signal.aborted?u():s.signal.addEventListener("abort",u)));let x=ms(s.url);if(x&&K.protocols.indexOf(x)===-1){n(new f("Unsupported protocol "+x+":",f.ERR_BAD_REQUEST,e));return}r.send(t||null)})},oc=(e,a)=>{let i=new AbortController,n,s=function(u){if(!n){n=!0,o();let l=u instanceof Error?u:this.reason;i.abort(l instanceof f?l:new de(l instanceof Error?l.message:l))}},t=a&&setTimeout(()=>{s(new f(`timeout ${a} of ms exceeded`,f.ETIMEDOUT))},a),o=()=>{e&&(t&&clearTimeout(t),t=null,e.forEach(u=>{u&&(u.removeEventListener?u.removeEventListener("abort",s):u.unsubscribe(s))}),e=null)};e.forEach(u=>u&&u.addEventListener&&u.addEventListener("abort",s));let{signal:c}=i;return c.unsubscribe=o,[c,()=>{t&&clearTimeout(t),t=null}]},rc=oc,cc=function*(e,a){let i=e.byteLength;if(!a||i{let t=pc(e,a,s),o=0;return new ReadableStream({type:"bytes",async pull(c){let{done:u,value:l}=await t.next();if(u){c.close(),n();return}let r=l.byteLength;i&&i(o+=r),c.enqueue(new Uint8Array(l))},cancel(c){return n(c),t.return()}},{highWaterMark:2})},Mn=(e,a)=>{let i=e!=null;return n=>setTimeout(()=>a({lengthComputable:i,total:e,loaded:n}))},ua=typeof fetch=="function"&&typeof Request=="function"&&typeof Response=="function",gs=ua&&typeof ReadableStream=="function",si=ua&&(typeof TextEncoder=="function"?(e=>a=>e.encode(a))(new TextEncoder):async e=>new Uint8Array(await new Response(e).arrayBuffer())),lc=gs&&(()=>{let e=!1,a=new Request(K.origin,{body:new ReadableStream,method:"POST",get duplex(){return e=!0,"half"}}).headers.has("Content-Type");return e&&!a})(),Wn=64*1024,ti=gs&&!!(()=>{try{return p.isReadableStream(new Response("").body)}catch{}})(),oa={stream:ti&&(e=>e.body)};ua&&(e=>{["text","arrayBuffer","blob","formData","stream"].forEach(a=>{!oa[a]&&(oa[a]=p.isFunction(e[a])?i=>i[a]():(i,n)=>{throw new f(`Response type '${a}' is not supported`,f.ERR_NOT_SUPPORT,n)})})})(new Response);var uc=async e=>{if(e==null)return 0;if(p.isBlob(e))return e.size;if(p.isSpecCompliantForm(e))return(await new Request(e).arrayBuffer()).byteLength;if(p.isArrayBufferView(e))return e.byteLength;if(p.isURLSearchParams(e)&&(e=e+""),p.isString(e))return(await si(e)).byteLength},dc=async(e,a)=>{let i=p.toFiniteNumber(e.getContentLength());return i??uc(a)},mc=ua&&(async e=>{let{url:a,method:i,data:n,signal:s,cancelToken:t,timeout:o,onDownloadProgress:c,onUploadProgress:u,responseType:l,headers:r,withCredentials:d="same-origin",fetchOptions:x}=bs(e);l=l?(l+"").toLowerCase():"text";let[_,m]=s||t||o?rc([s,t],o):[],h,w,k=()=>{!h&&setTimeout(()=>{_&&_.unsubscribe()}),h=!0},S;try{if(u&&lc&&i!=="get"&&i!=="head"&&(S=await dc(r,n))!==0){let P=new Request(a,{method:"POST",body:n,duplex:"half"}),G;p.isFormData(n)&&(G=P.headers.get("content-type"))&&r.setContentType(G),P.body&&(n=Hn(P.body,Wn,Mn(S,ta(u)),null,si))}p.isString(d)||(d=d?"cors":"omit"),w=new Request(a,{...x,signal:_,method:i.toUpperCase(),headers:r.normalize().toJSON(),body:n,duplex:"half",withCredentials:d});let b=await fetch(w),C=ti&&(l==="stream"||l==="response");if(ti&&(c||C)){let P={};["status","statusText","headers"].forEach(ie=>{P[ie]=b[ie]});let G=p.toFiniteNumber(b.headers.get("content-length"));b=new Response(Hn(b.body,Wn,c&&Mn(G,ta(c,!0)),C&&k,si),P)}l=l||"text";let A=await oa[p.findKey(oa,l)||"text"](b,e);return!C&&k(),m&&m(),await new Promise((P,G)=>{ke(P,G,{data:A,headers:H.from(b.headers),status:b.status,statusText:b.statusText,config:e,request:w})})}catch(b){throw k(),b&&b.name==="TypeError"&&/fetch/i.test(b.message)?Object.assign(new f("Network Error",f.ERR_NETWORK,e,w),{cause:b.cause||b}):f.from(b,b&&b.code,e,w)}}),oi={http:ac,xhr:tc,fetch:mc};p.forEach(oi,(e,a)=>{if(e){try{Object.defineProperty(e,"name",{value:a})}catch{}Object.defineProperty(e,"adapterName",{value:a})}});var Kn=e=>`- ${e}`,fc=e=>p.isFunction(e)||e===null||e===!1,ys={getAdapter:e=>{e=p.isArray(e)?e:[e];let{length:a}=e,i,n,s={};for(let t=0;t`adapter ${c} `+(u===!1?"is not supported by the environment":"is not available in the build")),o=a?t.length>1?`since : +`+t.map(Kn).join(` +`):" "+Kn(t[0]):"as no adapter specified";throw new f("There is no suitable adapter to dispatch the request "+o,"ERR_NOT_SUPPORT")}return n},adapters:oi};function Ya(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new de(null,e)}function Vn(e){return Ya(e),e.headers=H.from(e.headers),e.data=Xa.call(e,e.transformRequest),["post","put","patch"].indexOf(e.method)!==-1&&e.headers.setContentType("application/x-www-form-urlencoded",!1),ys.getAdapter(e.adapter||xi.adapter)(e).then(function(n){return Ya(e),n.data=Xa.call(e,e.transformResponse,n),n.headers=H.from(n.headers),n},function(n){return ds(n)||(Ya(e),n&&n.response&&(n.response.data=Xa.call(e,e.transformResponse,n.response),n.response.headers=H.from(n.response.headers))),Promise.reject(n)})}var vi={};["object","boolean","number","function","string","symbol"].forEach((e,a)=>{vi[e]=function(n){return typeof n===e||"a"+(a<1?"n ":" ")+e}});var Gn={};vi.transitional=function(a,i,n){function s(t,o){return"[Axios v"+sa+"] Transitional option '"+t+"'"+o+(n?". "+n:"")}return(t,o,c)=>{if(a===!1)throw new f(s(o," has been removed"+(i?" in "+i:"")),f.ERR_DEPRECATED);return i&&!Gn[o]&&(Gn[o]=!0,console.warn(s(o," has been deprecated since v"+i+" and will be removed in the near future"))),a?a(t,o,c):!0}};function xc(e,a,i){if(typeof e!="object")throw new f("options must be an object",f.ERR_BAD_OPTION_VALUE);let n=Object.keys(e),s=n.length;for(;s-- >0;){let t=n[s],o=a[t];if(o){let c=e[t],u=c===void 0||o(c,t,e);if(u!==!0)throw new f("option "+t+" must be "+u,f.ERR_BAD_OPTION_VALUE);continue}if(i!==!0)throw new f("Unknown option "+t,f.ERR_BAD_OPTION)}}var ri={assertOptions:xc,validators:vi},ce=ri.validators,Re=class{constructor(a){this.defaults=a,this.interceptors={request:new Ln,response:new Ln}}async request(a,i){try{return await this._request(a,i)}catch(n){if(n instanceof Error){let s;Error.captureStackTrace?Error.captureStackTrace(s={}):s=new Error;let t=s.stack?s.stack.replace(/^.+\n/,""):"";try{n.stack?t&&!String(n.stack).endsWith(t.replace(/^.+\n.+\n/,""))&&(n.stack+=` +`+t):n.stack=t}catch{}}throw n}}_request(a,i){typeof a=="string"?(i=i||{},i.url=a):i=a||{},i=ve(this.defaults,i);let{transitional:n,paramsSerializer:s,headers:t}=i;n!==void 0&&ri.assertOptions(n,{silentJSONParsing:ce.transitional(ce.boolean),forcedJSONParsing:ce.transitional(ce.boolean),clarifyTimeoutError:ce.transitional(ce.boolean)},!1),s!=null&&(p.isFunction(s)?i.paramsSerializer={serialize:s}:ri.assertOptions(s,{encode:ce.function,serialize:ce.function},!0)),i.method=(i.method||this.defaults.method||"get").toLowerCase();let o=t&&p.merge(t.common,t[i.method]);t&&p.forEach(["delete","get","head","post","put","patch","common"],m=>{delete t[m]}),i.headers=H.concat(o,t);let c=[],u=!0;this.interceptors.request.forEach(function(h){typeof h.runWhen=="function"&&h.runWhen(i)===!1||(u=u&&h.synchronous,c.unshift(h.fulfilled,h.rejected))});let l=[];this.interceptors.response.forEach(function(h){l.push(h.fulfilled,h.rejected)});let r,d=0,x;if(!u){let m=[Vn.bind(this),void 0];for(m.unshift.apply(m,c),m.push.apply(m,l),x=m.length,r=Promise.resolve(i);d{if(!n._listeners)return;let t=n._listeners.length;for(;t-- >0;)n._listeners[t](s);n._listeners=null}),this.promise.then=s=>{let t,o=new Promise(c=>{n.subscribe(c),t=c}).then(s);return o.cancel=function(){n.unsubscribe(t)},o},a(function(t,o,c){n.reason||(n.reason=new de(t,o,c),i(n.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(a){if(this.reason){a(this.reason);return}this._listeners?this._listeners.push(a):this._listeners=[a]}unsubscribe(a){if(!this._listeners)return;let i=this._listeners.indexOf(a);i!==-1&&this._listeners.splice(i,1)}static source(){let a;return{token:new e(function(s){a=s}),cancel:a}}},hc=ci;function vc(e){return function(i){return e.apply(null,i)}}function bc(e){return p.isObject(e)&&e.isAxiosError===!0}var pi={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(pi).forEach(([e,a])=>{pi[a]=e});var gc=pi;function ws(e){let a=new na(e),i=Zn(na.prototype.request,a);return p.extend(i,na.prototype,a,{allOwnKeys:!0}),p.extend(i,a,null,{allOwnKeys:!0}),i.create=function(s){return ws(ve(e,s))},i}var T=ws(xi);T.Axios=na;T.CanceledError=de;T.CancelToken=hc;T.isCancel=ds;T.VERSION=sa;T.toFormData=la;T.AxiosError=f;T.Cancel=T.CanceledError;T.all=function(a){return Promise.all(a)};T.spread=vc;T.isAxiosError=bc;T.mergeConfig=ve;T.AxiosHeaders=H;T.formToJSON=e=>us(p.isHTMLForm(e)?new FormData(e):e);T.getAdapter=ys.getAdapter;T.HttpStatusCode=gc;T.default=T;_s.exports=T});var Es=j((_p,ks)=>{ks.exports=function(e){return new Ue(e)};function Ue(e){this.capacity=e|0,this.map=Object.create(null),this.list=new da}Ue.prototype.get=function(e){var a=this.map[e];if(a!=null)return this.used(a),a.val};Ue.prototype.set=function(e,a){var i=this.map[e];if(i!=null)i.val=a;else{if(this.capacity||this.prune(),!this.capacity)return!1;i=new yc(e,a),this.map[e]=i,this.capacity--}return this.used(i),!0};Ue.prototype.used=function(e){this.list.moveToFront(e)};Ue.prototype.prune=function(){var e=this.list.pop();e!=null&&(delete this.map[e.key],this.capacity++)};function da(){this.firstNode=null,this.lastNode=null}da.prototype.moveToFront=function(e){this.firstNode!=e&&(this.remove(e),this.firstNode==null?(this.firstNode=e,this.lastNode=e,e.prev=null,e.next=null):(e.prev=null,e.next=this.firstNode,e.next.prev=e,this.firstNode=e))};da.prototype.pop=function(){var e=this.lastNode;return e!=null&&this.remove(e),e};da.prototype.remove=function(e){this.firstNode==e?this.firstNode=e.next:e.prev!=null&&(e.prev.next=e.next),this.lastNode==e?this.lastNode=e.prev:e.next!=null&&(e.next.prev=e.prev)};function yc(e,a){this.key=e,this.val=a,this.prev=null,this.next=null}});var zs=j(qs=>{var Ss=qs,wc=E("url"),Os=E("querystring"),Cs=E("crypto"),_c=Es(),Rs=_c(1e3);function Ie(e,a,i){return Cs.createHmac("sha256",e).update(a,"utf8").digest(i)}function bi(e,a){return Cs.createHash("sha256").update(e,"utf8").digest(a)}function Ts(e){return e.replace(/[!'()*]/g,function(a){return"%"+a.charCodeAt(0).toString(16).toUpperCase()})}function ma(e){return Ts(encodeURIComponent(e))}var As={authorization:!0,connection:!0,"x-amzn-trace-id":!0,"user-agent":!0,expect:!0,"presigned-expires":!0,range:!0};function q(e,a){typeof e=="string"&&(e=wc.parse(e));var i=e.headers=Object.assign({},e.headers||{}),n=(!this.service||!this.region)&&this.matchHost(e.hostname||e.host||i.Host||i.host);this.request=e,this.credentials=a||this.defaultCredentials(),this.service=e.service||n[0]||"",this.region=e.region||n[1]||"us-east-1",this.service==="email"&&(this.service="ses"),!e.method&&e.body&&(e.method="POST"),!i.Host&&!i.host&&(i.Host=e.hostname||e.host||this.createHost(),e.port&&(i.Host+=":"+e.port)),!e.hostname&&!e.host&&(e.hostname=i.Host||i.host),this.isCodeCommitGit=this.service==="codecommit"&&e.method==="GIT",this.extraHeadersToIgnore=e.extraHeadersToIgnore||Object.create(null),this.extraHeadersToInclude=e.extraHeadersToInclude||Object.create(null)}q.prototype.matchHost=function(e){var a=(e||"").match(/([^\.]+)\.(?:([^\.]*)\.)?amazonaws\.com(\.cn)?$/),i=(a||[]).slice(1,3);if((i[1]==="es"||i[1]==="aoss")&&(i=i.reverse()),i[1]=="s3")i[0]="s3",i[1]="us-east-1";else for(var n=0;n<2;n++)if(/^s3-/.test(i[n])){i[1]=i[n].slice(3),i[0]="s3";break}return i};q.prototype.isSingleRegion=function(){return["s3","sdb"].indexOf(this.service)>=0&&this.region==="us-east-1"?!0:["cloudfront","ls","route53","iam","importexport","sts"].indexOf(this.service)>=0};q.prototype.createHost=function(){var e=this.isSingleRegion()?"":"."+this.region,a=this.service==="ses"?"email":this.service;return a+e+".amazonaws.com"};q.prototype.prepareRequest=function(){this.parsePath();var e=this.request,a=e.headers,i;e.signQuery?(this.parsedPath.query=i=this.parsedPath.query||{},this.credentials.sessionToken&&(i["X-Amz-Security-Token"]=this.credentials.sessionToken),this.service==="s3"&&!i["X-Amz-Expires"]&&(i["X-Amz-Expires"]=86400),i["X-Amz-Date"]?this.datetime=i["X-Amz-Date"]:i["X-Amz-Date"]=this.getDateTime(),i["X-Amz-Algorithm"]="AWS4-HMAC-SHA256",i["X-Amz-Credential"]=this.credentials.accessKeyId+"/"+this.credentialString(),i["X-Amz-SignedHeaders"]=this.signedHeaders()):(!e.doNotModifyHeaders&&!this.isCodeCommitGit&&(e.body&&!a["Content-Type"]&&!a["content-type"]&&(a["Content-Type"]="application/x-www-form-urlencoded; charset=utf-8"),e.body&&!a["Content-Length"]&&!a["content-length"]&&(a["Content-Length"]=Buffer.byteLength(e.body)),this.credentials.sessionToken&&!a["X-Amz-Security-Token"]&&!a["x-amz-security-token"]&&(a["X-Amz-Security-Token"]=this.credentials.sessionToken),this.service==="s3"&&!a["X-Amz-Content-Sha256"]&&!a["x-amz-content-sha256"]&&(a["X-Amz-Content-Sha256"]=bi(this.request.body||"","hex")),a["X-Amz-Date"]||a["x-amz-date"]?this.datetime=a["X-Amz-Date"]||a["x-amz-date"]:a["X-Amz-Date"]=this.getDateTime()),delete a.Authorization,delete a.authorization)};q.prototype.sign=function(){return this.parsedPath||this.prepareRequest(),this.request.signQuery?this.parsedPath.query["X-Amz-Signature"]=this.signature():this.request.headers.Authorization=this.authHeader(),this.request.path=this.formatPath(),this.request};q.prototype.getDateTime=function(){if(!this.datetime){var e=this.request.headers,a=new Date(e.Date||e.date||new Date);this.datetime=a.toISOString().replace(/[:\-]|\.\d{3}/g,""),this.isCodeCommitGit&&(this.datetime=this.datetime.slice(0,-1))}return this.datetime};q.prototype.getDate=function(){return this.getDateTime().substr(0,8)};q.prototype.authHeader=function(){return["AWS4-HMAC-SHA256 Credential="+this.credentials.accessKeyId+"/"+this.credentialString(),"SignedHeaders="+this.signedHeaders(),"Signature="+this.signature()].join(", ")};q.prototype.signature=function(){var e=this.getDate(),a=[this.credentials.secretAccessKey,e,this.region,this.service].join(),i,n,s,t=Rs.get(a);return t||(i=Ie("AWS4"+this.credentials.secretAccessKey,e),n=Ie(i,this.region),s=Ie(n,this.service),t=Ie(s,"aws4_request"),Rs.set(a,t)),Ie(t,this.stringToSign(),"hex")};q.prototype.stringToSign=function(){return["AWS4-HMAC-SHA256",this.getDateTime(),this.credentialString(),bi(this.canonicalString(),"hex")].join(` +`)};q.prototype.canonicalString=function(){this.parsedPath||this.prepareRequest();var e=this.parsedPath.path,a=this.parsedPath.query,i=this.request.headers,n="",s=this.service!=="s3",t=this.service==="s3"||this.request.doNotEncodePath,o=this.service==="s3",c=this.service==="s3",u;if(this.service==="s3"&&this.request.signQuery?u="UNSIGNED-PAYLOAD":this.isCodeCommitGit?u="":u=i["X-Amz-Content-Sha256"]||i["x-amz-content-sha256"]||bi(this.request.body||"","hex"),a){var l=Object.keys(a).reduce(function(d,x){return x&&(d[ma(x)]=Array.isArray(a[x])&&c?a[x][0]:a[x]),d},{}),r=[];Object.keys(l).sort().forEach(function(d){Array.isArray(l[d])?l[d].map(ma).sort().forEach(function(x){r.push(d+"="+x)}):r.push(d+"="+ma(l[d]))}),n=r.join("&")}return e!=="/"&&(s&&(e=e.replace(/\/{2,}/g,"/")),e=e.split("/").reduce(function(d,x){return s&&x===".."?d.pop():(!s||x!==".")&&(t&&(x=decodeURIComponent(x.replace(/\+/g," "))),d.push(ma(x))),d},[]).join("/"),e[0]!=="/"&&(e="/"+e),o&&(e=e.replace(/%2F/g,"/"))),[this.request.method||"GET",e,n,this.canonicalHeaders()+` +`,this.signedHeaders(),u].join(` +`)};q.prototype.canonicalHeaders=function(){var e=this.request.headers;function a(i){return i.toString().trim().replace(/\s+/g," ")}return Object.keys(e).filter(function(i){return As[i.toLowerCase()]==null}).sort(function(i,n){return i.toLowerCase()=0&&(i=Os.parse(e.slice(a+1)),e=e.slice(0,a)),this.parsedPath={path:e,query:i}};q.prototype.formatPath=function(){var e=this.parsedPath.path,a=this.parsedPath.query;return a?(a[""]!=null&&delete a[""],e+"?"+Ts(Os.stringify(a))):e};Ss.RequestSigner=q;Ss.sign=function(e,a){return new q(e,a).sign()}});var Ps=j($e=>{"use strict";Object.defineProperty($e,"__esModule",{value:!0});$e.import_=void 0;$e.default=Fs;function Fs(e){return e=jc(e),import(e)}$e.import_=Fs;var Ls="file://";function jc(e){return process.platform==="win32"&&kc(e)&&!e.startsWith(Ls)?Ls+e:e}function kc(e){return/^[/\\](?![/\\])|^[/\\]{2}(?!\.)|^[A-Za-z]:[/\\]/.test(e)}});var xa=j(fa=>{"use strict";Object.defineProperty(fa,"__esModule",{value:!0});fa.resolvePath=void 0;var Ec=e=>{let a=e.directory?e.directory.replace(/^\/|\/$/g,""):"";return e.directory?`${a}/${e.filename}`:`${e.filename}`};fa.resolvePath=Ec});var gi=j(be=>{"use strict";Object.defineProperty(be,"__esModule",{value:!0});be.PROVIDERS=be.CLOUD_PROVIDERS=void 0;var B=xa(),Rc;(function(e){e.GCP="GCP",e.WASABI="WASABI",e.AWS="AWS",e.CONTABO="CONTABO",e.DO="DO",e.MINIO="MINIO",e.R2="R2"})(Rc=be.CLOUD_PROVIDERS||(be.CLOUD_PROVIDERS={}));be.PROVIDERS={GCP:{host:({bucket:e})=>`${e}.storage.googleapis.com`,url:({bucket:e,filename:a,directory:i})=>`https://${e}.storage.googleapis.com/${(0,B.resolvePath)({filename:a,directory:i})}`,res:({bucket:e,filename:a,directory:i})=>`https://storage.googleapis.com/${e}/${(0,B.resolvePath)({filename:a,directory:i})}`},AWS:{host:({bucket:e})=>`${e}.s3.amazonaws.com`,url:({bucket:e,filename:a,directory:i})=>`https://${e}.s3.amazonaws.com/${(0,B.resolvePath)({filename:a,directory:i})}`,res:({bucket:e,filename:a,directory:i,region:n})=>`https://${e}.s3.${n}.amazonaws.com/${(0,B.resolvePath)({filename:a,directory:i})}`},WASABI:{host:({region:e,bucket:a})=>`${a}.s3.${e}.wasabisys.com`,url:({region:e,filename:a,directory:i,bucket:n})=>`https://${n}.s3.${e}.wasabisys.com/${(0,B.resolvePath)({filename:a,directory:i})}`,res:({bucket:e,filename:a,directory:i,region:n})=>`https://s3.${n}.wasabisys.com/${e}/${(0,B.resolvePath)({filename:a,directory:i})}`},DO:{host:({region:e,bucket:a})=>`${a}.${e}.digitaloceanspaces.com`,url:({bucket:e,filename:a,directory:i,region:n})=>`https://${e}.${n}.digitaloceanspaces.com/${(0,B.resolvePath)({filename:a,directory:`${i}`})}`,res:({bucket:e,filename:a,directory:i,region:n})=>`https://${e}.${n}.digitaloceanspaces.com/${(0,B.resolvePath)({filename:a,directory:`${i}`})}`},CONTABO:{host:({region:e})=>`${e}.contabostorage.com`,url:({bucket:e,filename:a,directory:i,region:n})=>`https://${n}.contabostorage.com/${(0,B.resolvePath)({filename:a,directory:`${e}${i}`})}`,res:({bucket:e,filename:a,directory:i,region:n})=>`https://${n}.contabostorage.com/${(0,B.resolvePath)({filename:a,directory:`${e}${i}`})}`},MINIO:{host:({host:e})=>`${e}`,url:({bucket:e,filename:a,directory:i,host:n})=>`${n}/${e}/${(0,B.resolvePath)({filename:a,directory:`${i}`})}`,res:({bucket:e,filename:a,directory:i,host:n})=>`${n}/${e}/${(0,B.resolvePath)({filename:a,directory:`${i}`})}`},SUPABASE:{host:({host:e})=>`${e}`,url:({bucket:e,filename:a,directory:i,host:n})=>`${n}/storage/v1/s3/${e}/${(0,B.resolvePath)({filename:a,directory:`${i}`})}`,res:({bucket:e,filename:a,directory:i,host:n})=>`${n}/storage/v1/s3/${e}/${(0,B.resolvePath)({filename:a,directory:`${i}`})}`},R2:{host:({host:e,bucket:a})=>`https://${a}.${e.replace("https://","")}`,url:({bucket:e,filename:a,directory:i,host:n})=>`https://${e}.${n.replace("https://","")}/${(0,B.resolvePath)({filename:a,directory:`${i}`})}`,res:({bucket:e,filename:a,directory:i,host:n})=>`https://${e}.${n.replace("https://","")}/${(0,B.resolvePath)({filename:a,directory:`${i}`})}`}}});var _i=j(v=>{"use strict";var M=v&&v.__awaiter||function(e,a,i,n){function s(t){return t instanceof i?t:new i(function(o){o(t)})}return new(i||(i=Promise))(function(t,o){function c(r){try{l(n.next(r))}catch(d){o(d)}}function u(r){try{l(n.throw(r))}catch(d){o(d)}}function l(r){r.done?t(r.value):s(r.value).then(c,u)}l((n=n.apply(e,a||[])).next())})},wi=v&&v.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(v,"__esModule",{value:!0});v.getObjectEtag=v.objectExists=v.getObjectMetadata=v.deleteObject=v.getPresignedUrl=v.getObject=v.getObjectDataUrl=v.getObjectBuffer=v.getTextFile=v.getObjectBinary=v.upload=v.uploadBuffer=v.s3Request=v.getS3RequestObject=v.getProviderConfig=v.getCloudUrl=v.FileNotFoundError=void 0;var Sc=wi(js()),Ds=wi(zs()),te=Qe()("pico-s3"),ha=Qe()("pico-s3:error"),Oc=wi(E("crypto")),Cc=Ps(),se=gi(),He=xa(),yi=null,Tc=()=>M(void 0,void 0,void 0,function*(){return yi||(yi=yield(0,Cc.import_)("file-type")),yi}),Oe=class extends Error{constructor(a){super(a),this.name="FileNotFoundError"}};v.FileNotFoundError=Oe;var Ac=e=>se.PROVIDERS[e.provider].res(e);v.getCloudUrl=Ac;var qc=e=>se.PROVIDERS[e];v.getProviderConfig=qc;var zc=(e,a)=>{let{provider:i,accessKeyId:n,secretAccessKey:s}=e,t=i===se.CLOUD_PROVIDERS.GCP?"region":e.region,o=se.PROVIDERS[i],c=o.host(e),u=c.replace("https://","").replace("http://","");if(!o)throw new Error(`Invalid provider ${i}. Valid providers: ${Object.keys(se.PROVIDERS)}`);let l=Object.assign({},a?.headers||{});c.includes("https://")&&!l["x-amz-content-sha256"]&&(l["x-amz-content-sha256"]="UNSIGNED-PAYLOAD"),a==null||delete a.headers;let r=Object.assign({host:u,url:o.url(e),service:"s3",region:t,headers:l},a);return i===se.CLOUD_PROVIDERS.MINIO&&(r.path=o.url(e).replace(c,"")),Ds.default.sign(r,{accessKeyId:n,secretAccessKey:s})};v.getS3RequestObject=zc;var Lc=(e,a)=>M(void 0,void 0,void 0,function*(){let i=(0,v.getS3RequestObject)(e,a);return(0,Sc.default)(Object.assign({},i))});v.s3Request=Lc;var Fc=e=>M(void 0,void 0,void 0,function*(){let{provider:a,file:i}=e,n=se.PROVIDERS[a];if(!i||i===null)throw new Error("File isnull or undefined");let s=`/${(0,He.resolvePath)(e)}`,t=yield(yield Tc()).fileTypeFromBuffer(i),{mime:o}=t||{},c=i,u=Object.assign(Object.assign({"Content-Type":o||"application/octet-stream","Content-length":c.length,"x-amz-content-sha256":Oc.default.createHash("sha256").update(c).digest("hex")||"UNSIGNED-PAYLOAD"},e.headers||{}),e.public?{"x-amz-acl":"public-read"}:{});try{let l=Date.now();te(`Uploading ${s} to ${a}`),te(`Using Headers: ${JSON.stringify(u)}`);let r=yield(0,v.s3Request)(e,{method:"PUT",path:s,data:c,headers:u}),d=Date.now()-l;return te(`${s} uploaded to ${a} in ${d}ms with code ${r.status}`),n.res(e)||""}catch(l){throw ha("UPLOAD ERROR",s,a,l.message),l}});v.uploadBuffer=Fc;var Pc=e=>M(void 0,void 0,void 0,function*(){return(0,v.uploadBuffer)(Object.assign(Object.assign({},e),{file:Buffer.isBuffer(e.file)?e.file:Buffer.from(e.file.split(",")[1],"base64")}))});v.upload=Pc;var Dc=e=>M(void 0,void 0,void 0,function*(){return(yield(0,v.getObject)(e,{responseType:"arraybuffer"})).data});v.getObjectBinary=Dc;var Bc=e=>M(void 0,void 0,void 0,function*(){return(yield(0,v.getObjectBuffer)(e)).toString()});v.getTextFile=Bc;var Nc=e=>M(void 0,void 0,void 0,function*(){let a=yield(0,v.getObjectBinary)(e);return Buffer.from(a,"binary")});v.getObjectBuffer=Nc;var Uc=e=>M(void 0,void 0,void 0,function*(){let a=yield(0,v.getObject)(e,{responseType:"arraybuffer"}),i=Buffer.from(a.data,"binary");return`data:${a.headers["content-type"]};base64,${i.toString("base64")}`});v.getObjectDataUrl=Uc;var Ic=(e,a)=>M(void 0,void 0,void 0,function*(){let{provider:i}=e,n=`/${(0,He.resolvePath)(e)}`;try{let s=Date.now();te(`Downloading ${n} from ${i}`);let t=yield(0,v.s3Request)(e,Object.assign({method:"GET",path:n},a||{})),o=Date.now()-s;return te(`${n} downloaded from ${i} in ${o}ms`),t}catch(s){throw ha("GET ERROR",n,i,s.message),s?.response.status===404?new Oe(`File ${n} not found in ${i}`):s}});v.getObject=Ic;var $c=(e,a)=>M(void 0,void 0,void 0,function*(){let{provider:i,accessKeyId:n,secretAccessKey:s}=e,t=`/${(0,He.resolvePath)(e)}`,o=i===se.CLOUD_PROVIDERS.GCP?"region":e.region,c=se.PROVIDERS[i],u=c.host(e),l=u.replace("https://","").replace("http://","");if(!c)throw new Error(`Invalid provider ${i}. Valid providers: ${Object.keys(se.PROVIDERS)}`);let r=Ds.default.sign({host:l,path:t,service:"s3",region:o,signQuery:!0},{accessKeyId:n,secretAccessKey:s});return u+r.path});v.getPresignedUrl=$c;var Hc=(e,a)=>M(void 0,void 0,void 0,function*(){let{provider:i}=e,n=`/${(0,He.resolvePath)(e)}`;try{let s=Date.now();te(`Deleting ${n} from ${i}`);let t=yield(0,v.s3Request)(e,Object.assign({method:"DELETE",path:n},a||{})),o=Date.now()-s;return te(`${n} deleted from ${i} in ${o}ms`),t.status===204}catch(s){throw ha("GET ERROR",n,i,s.message),s?.response.status===404?new Oe(`File ${n} not found in ${i}`):s}});v.deleteObject=Hc;var Mc=(e,a)=>M(void 0,void 0,void 0,function*(){let{provider:i}=e,n=`/${(0,He.resolvePath)(e)}`;try{let s=Date.now();te(`Getting Metadata for ${n} from ${i}`);let t=yield(0,v.s3Request)(e,Object.assign({method:"HEAD",path:n},a||{})),o=Date.now()-s;return te(`${n} metadata downloaded from ${i} in ${o}ms`),t.headers}catch(s){throw ha("GET ERROR",n,i,s.message),s?.response.status===404?new Oe(`File ${n} not found in ${i}`):s}});v.getObjectMetadata=Mc;var Wc=(e,a)=>M(void 0,void 0,void 0,function*(){return(0,v.getObjectMetadata)(e,a).then(i=>!!i.etag)});v.objectExists=Wc;var Kc=(e,a)=>M(void 0,void 0,void 0,function*(){return(0,v.getObjectMetadata)(e,a).then(i=>i.etag)});v.getObjectEtag=Kc});var Bs=j(Ce=>{"use strict";var ee=Ce&&Ce.__awaiter||function(e,a,i,n){function s(t){return t instanceof i?t:new i(function(o){o(t)})}return new(i||(i=Promise))(function(t,o){function c(r){try{l(n.next(r))}catch(d){o(d)}}function u(r){try{l(n.throw(r))}catch(d){o(d)}}function l(r){r.done?t(r.value):s(r.value).then(c,u)}l((n=n.apply(e,a||[])).next())})};Object.defineProperty(Ce,"__esModule",{value:!0});Ce.PicoS3=void 0;var V=_i(),ji=class{constructor(a){typeof a=="boolean"&&a===!0?this.options={provider:process.env.PICO_S3_CLOUD_PROVIDER,region:process.env.PICO_S3_REGION,bucket:process.env.PICO_S3_BUCKET,host:process.env.PICO_S3_HOST,accessKeyId:process.env.PICO_S3_ACCESS_KEY_ID,secretAccessKey:process.env.PICO_S3_SECRET_ACCESS_KEY}:this.options=a}upload(a){return ee(this,void 0,void 0,function*(){return Buffer.isBuffer(a.file)?yield(0,V.uploadBuffer)(Object.assign(Object.assign({},this.options),a)):yield(0,V.upload)(Object.assign(Object.assign({},this.options),a))})}getObject(a){return ee(this,void 0,void 0,function*(){return yield(0,V.getObject)(Object.assign(Object.assign({},this.options),a))})}getProviderConfig(){return(0,V.getProviderConfig)(this.options.provider)}getProvider(){return this.options.provider}getObjectBuffer(a){return ee(this,void 0,void 0,function*(){return yield(0,V.getObjectBuffer)(Object.assign(Object.assign({},this.options),a))})}getObjectDataUrl(a){return ee(this,void 0,void 0,function*(){return yield(0,V.getObjectDataUrl)(Object.assign(Object.assign({},this.options),a))})}getObjectBinary(a){return ee(this,void 0,void 0,function*(){return yield(0,V.getObjectBinary)(Object.assign(Object.assign({},this.options),a))})}deleteObject(a){return ee(this,void 0,void 0,function*(){return yield(0,V.deleteObject)(Object.assign(Object.assign({},this.options),a))})}objectExists(a){return ee(this,void 0,void 0,function*(){return yield(0,V.objectExists)(Object.assign(Object.assign({},this.options),a))})}getObjectMetadata(a){return ee(this,void 0,void 0,function*(){return yield(0,V.getObjectMetadata)(Object.assign(Object.assign({},this.options),a))})}getObjectEtag(a){return ee(this,void 0,void 0,function*(){return yield(0,V.getObjectEtag)(Object.assign(Object.assign({},this.options),a))})}getTextFile(a){return ee(this,void 0,void 0,function*(){return yield(0,V.getTextFile)(Object.assign(Object.assign({},this.options),a))})}getPresignedUrl(a){return ee(this,void 0,void 0,function*(){return yield(0,V.getPresignedUrl)(Object.assign(Object.assign({},this.options),a))})}};Ce.PicoS3=ji});var Us=j(Ns=>{"use strict";Object.defineProperty(Ns,"__esModule",{value:!0})});var Is=j(ae=>{"use strict";var Vc=ae&&ae.__createBinding||(Object.create?function(e,a,i,n){n===void 0&&(n=i),Object.defineProperty(e,n,{enumerable:!0,get:function(){return a[i]}})}:function(e,a,i,n){n===void 0&&(n=i),e[n]=a[i]}),Me=ae&&ae.__exportStar||function(e,a){for(var i in e)i!=="default"&&!Object.prototype.hasOwnProperty.call(a,i)&&Vc(a,e,i)};Object.defineProperty(ae,"__esModule",{value:!0});Me(Bs(),ae);Me(_i(),ae);Me(Us(),ae);Me(gi(),ae);Me(xa(),ae)});var $s=Xs(Is(),1),va=(e,a)=>Object.keys(a).every(i=>e[i]===a[i]),Gc=()=>typeof crypto<"u"&&crypto.randomUUID?crypto.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(e){var a=Math.random()*16|0,i=e==="x"?a:a&3|8;return i.toString(16)}),ki=class{constructor(a,i){this._colName=a,this._s3=i}async _loadData(){try{let a=await this._s3.getTextFile({path:`${this._colName}.json`});return JSON.parse(a)}catch(a){if(a instanceof FileNotFoundError)return[];throw a}}async _saveData(a){let i=`${this._colName}.json`;return this._s3.upload({path:i,file:JSON.stringify(a)})}async insert(a){Array.isArray(a)||(a=[a]);let i=await this._loadData();for(let n of a){if(typeof n!="object"||n===null)throw new Error("Invalid input: input must be an object or an array of objects");n._id=n._id||Gc(),i.push(n)}return await this._saveData(i),a.length===1?a[0]:a}async find(a={},i={}){let n=await this._loadData(),s=parseInt(i.skip,10)||0,t=parseInt(i.limit,10)?s+parseInt(i.limit,10):void 0;return n.filter(c=>va(c,a)).slice(s,t)}async findOne(a={}){return(await this.find(a))[0]||null}async update(a={},i={}){let n=await this._loadData(),s=0;for(let t=0;t0&&await this._saveData(n),s}async updateOne(a={},i={}){let n=await this._loadData(),s=n.findIndex(t=>va(t,a));return s!==-1?(Object.assign(n[s],i),await this._saveData(n),1):0}async delete(a={}){let i=await this._loadData(),n=i.length,s=i.filter(t=>!va(t,a));return await this._saveData(s),n-s.length}async count(a={}){return(await this.find(a)).length}async remove(){let i=(await this._loadData()).length;return await this._saveData([]),i}},Ei=class{constructor(a){this._s3=new $s.default(a)}collection(a){return new ki(a,this._s3)}async listCollections(){return(await this._s3.listObjects()).filter(n=>n.key.endsWith(".json")).map(n=>n.key.split("/")[0])}},Ap=Ei;export{Ap as default}; +/*! Bundled license information: + +mime-db/index.js: + (*! + * mime-db + * Copyright(c) 2014 Jonathan Ong + * Copyright(c) 2015-2022 Douglas Christopher Wilson + * MIT Licensed + *) + +mime-types/index.js: + (*! + * mime-types + * Copyright(c) 2014 Jonathan Ong + * Copyright(c) 2015 Douglas Christopher Wilson + * MIT Licensed + *) +*/ +//# sourceMappingURL=lowstorage.js.map diff --git a/lib/lowstorage.js.map b/lib/lowstorage.js.map new file mode 100644 index 0000000..b85bf66 --- /dev/null +++ b/lib/lowstorage.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["../node_modules/delayed-stream/lib/delayed_stream.js", "../node_modules/combined-stream/lib/combined_stream.js", "../node_modules/mime-db/db.json", "../node_modules/mime-db/index.js", "../node_modules/mime-types/index.js", "../node_modules/asynckit/lib/defer.js", "../node_modules/asynckit/lib/async.js", "../node_modules/asynckit/lib/abort.js", "../node_modules/asynckit/lib/iterate.js", "../node_modules/asynckit/lib/state.js", "../node_modules/asynckit/lib/terminator.js", "../node_modules/asynckit/parallel.js", "../node_modules/asynckit/serialOrdered.js", "../node_modules/asynckit/serial.js", "../node_modules/asynckit/index.js", "../node_modules/form-data/lib/populate.js", "../node_modules/form-data/lib/form_data.js", "../node_modules/proxy-from-env/index.js", "../node_modules/ms/index.js", "../node_modules/debug/src/common.js", "../node_modules/debug/src/browser.js", "../node_modules/has-flag/index.js", "../node_modules/supports-color/index.js", "../node_modules/debug/src/node.js", "../node_modules/debug/src/index.js", "../node_modules/follow-redirects/debug.js", "../node_modules/follow-redirects/index.js", "../node_modules/axios/lib/helpers/bind.js", "../node_modules/axios/lib/utils.js", "../node_modules/axios/lib/core/AxiosError.js", "../node_modules/axios/lib/helpers/toFormData.js", "../node_modules/axios/lib/helpers/AxiosURLSearchParams.js", "../node_modules/axios/lib/helpers/buildURL.js", "../node_modules/axios/lib/core/InterceptorManager.js", "../node_modules/axios/lib/defaults/transitional.js", "../node_modules/axios/lib/platform/node/classes/URLSearchParams.js", "../node_modules/axios/lib/platform/node/index.js", "../node_modules/axios/lib/platform/common/utils.js", "../node_modules/axios/lib/platform/index.js", "../node_modules/axios/lib/helpers/toURLEncodedForm.js", "../node_modules/axios/lib/helpers/formDataToJSON.js", "../node_modules/axios/lib/defaults/index.js", "../node_modules/axios/lib/helpers/parseHeaders.js", "../node_modules/axios/lib/core/AxiosHeaders.js", "../node_modules/axios/lib/core/transformData.js", "../node_modules/axios/lib/cancel/isCancel.js", "../node_modules/axios/lib/cancel/CanceledError.js", "../node_modules/axios/lib/core/settle.js", "../node_modules/axios/lib/helpers/isAbsoluteURL.js", "../node_modules/axios/lib/helpers/combineURLs.js", "../node_modules/axios/lib/core/buildFullPath.js", "../node_modules/axios/lib/env/data.js", "../node_modules/axios/lib/helpers/parseProtocol.js", "../node_modules/axios/lib/helpers/fromDataURI.js", "../node_modules/axios/lib/helpers/throttle.js", "../node_modules/axios/lib/helpers/speedometer.js", "../node_modules/axios/lib/helpers/AxiosTransformStream.js", "../node_modules/axios/lib/helpers/readBlob.js", "../node_modules/axios/lib/helpers/formDataToStream.js", "../node_modules/axios/lib/helpers/ZlibHeaderTransformStream.js", "../node_modules/axios/lib/helpers/callbackify.js", "../node_modules/axios/lib/adapters/http.js", "../node_modules/axios/lib/helpers/progressEventReducer.js", "../node_modules/axios/lib/helpers/isURLSameOrigin.js", "../node_modules/axios/lib/helpers/cookies.js", "../node_modules/axios/lib/core/mergeConfig.js", "../node_modules/axios/lib/helpers/resolveConfig.js", "../node_modules/axios/lib/adapters/xhr.js", "../node_modules/axios/lib/helpers/composeSignals.js", "../node_modules/axios/lib/helpers/trackStream.js", "../node_modules/axios/lib/adapters/fetch.js", "../node_modules/axios/lib/adapters/adapters.js", "../node_modules/axios/lib/core/dispatchRequest.js", "../node_modules/axios/lib/helpers/validator.js", "../node_modules/axios/lib/core/Axios.js", "../node_modules/axios/lib/cancel/CancelToken.js", "../node_modules/axios/lib/helpers/spread.js", "../node_modules/axios/lib/helpers/isAxiosError.js", "../node_modules/axios/lib/helpers/HttpStatusCode.js", "../node_modules/axios/lib/axios.js", "../node_modules/aws4/lru.js", "../node_modules/aws4/aws4.js", "../node_modules/@brillout/import/dist/index.js", "../node_modules/pico-s3/dist/utils.js", "../node_modules/pico-s3/dist/providers.js", "../node_modules/pico-s3/dist/api.js", "../node_modules/pico-s3/dist/client.js", "../node_modules/pico-s3/dist/types.js", "../node_modules/pico-s3/dist/index.js", "../src/lowstorage.js"], + "sourcesContent": ["var Stream = require('stream').Stream;\nvar util = require('util');\n\nmodule.exports = DelayedStream;\nfunction DelayedStream() {\n this.source = null;\n this.dataSize = 0;\n this.maxDataSize = 1024 * 1024;\n this.pauseStream = true;\n\n this._maxDataSizeExceeded = false;\n this._released = false;\n this._bufferedEvents = [];\n}\nutil.inherits(DelayedStream, Stream);\n\nDelayedStream.create = function(source, options) {\n var delayedStream = new this();\n\n options = options || {};\n for (var option in options) {\n delayedStream[option] = options[option];\n }\n\n delayedStream.source = source;\n\n var realEmit = source.emit;\n source.emit = function() {\n delayedStream._handleEmit(arguments);\n return realEmit.apply(source, arguments);\n };\n\n source.on('error', function() {});\n if (delayedStream.pauseStream) {\n source.pause();\n }\n\n return delayedStream;\n};\n\nObject.defineProperty(DelayedStream.prototype, 'readable', {\n configurable: true,\n enumerable: true,\n get: function() {\n return this.source.readable;\n }\n});\n\nDelayedStream.prototype.setEncoding = function() {\n return this.source.setEncoding.apply(this.source, arguments);\n};\n\nDelayedStream.prototype.resume = function() {\n if (!this._released) {\n this.release();\n }\n\n this.source.resume();\n};\n\nDelayedStream.prototype.pause = function() {\n this.source.pause();\n};\n\nDelayedStream.prototype.release = function() {\n this._released = true;\n\n this._bufferedEvents.forEach(function(args) {\n this.emit.apply(this, args);\n }.bind(this));\n this._bufferedEvents = [];\n};\n\nDelayedStream.prototype.pipe = function() {\n var r = Stream.prototype.pipe.apply(this, arguments);\n this.resume();\n return r;\n};\n\nDelayedStream.prototype._handleEmit = function(args) {\n if (this._released) {\n this.emit.apply(this, args);\n return;\n }\n\n if (args[0] === 'data') {\n this.dataSize += args[1].length;\n this._checkIfMaxDataSizeExceeded();\n }\n\n this._bufferedEvents.push(args);\n};\n\nDelayedStream.prototype._checkIfMaxDataSizeExceeded = function() {\n if (this._maxDataSizeExceeded) {\n return;\n }\n\n if (this.dataSize <= this.maxDataSize) {\n return;\n }\n\n this._maxDataSizeExceeded = true;\n var message =\n 'DelayedStream#maxDataSize of ' + this.maxDataSize + ' bytes exceeded.'\n this.emit('error', new Error(message));\n};\n", "var util = require('util');\nvar Stream = require('stream').Stream;\nvar DelayedStream = require('delayed-stream');\n\nmodule.exports = CombinedStream;\nfunction CombinedStream() {\n this.writable = false;\n this.readable = true;\n this.dataSize = 0;\n this.maxDataSize = 2 * 1024 * 1024;\n this.pauseStreams = true;\n\n this._released = false;\n this._streams = [];\n this._currentStream = null;\n this._insideLoop = false;\n this._pendingNext = false;\n}\nutil.inherits(CombinedStream, Stream);\n\nCombinedStream.create = function(options) {\n var combinedStream = new this();\n\n options = options || {};\n for (var option in options) {\n combinedStream[option] = options[option];\n }\n\n return combinedStream;\n};\n\nCombinedStream.isStreamLike = function(stream) {\n return (typeof stream !== 'function')\n && (typeof stream !== 'string')\n && (typeof stream !== 'boolean')\n && (typeof stream !== 'number')\n && (!Buffer.isBuffer(stream));\n};\n\nCombinedStream.prototype.append = function(stream) {\n var isStreamLike = CombinedStream.isStreamLike(stream);\n\n if (isStreamLike) {\n if (!(stream instanceof DelayedStream)) {\n var newStream = DelayedStream.create(stream, {\n maxDataSize: Infinity,\n pauseStream: this.pauseStreams,\n });\n stream.on('data', this._checkDataSize.bind(this));\n stream = newStream;\n }\n\n this._handleErrors(stream);\n\n if (this.pauseStreams) {\n stream.pause();\n }\n }\n\n this._streams.push(stream);\n return this;\n};\n\nCombinedStream.prototype.pipe = function(dest, options) {\n Stream.prototype.pipe.call(this, dest, options);\n this.resume();\n return dest;\n};\n\nCombinedStream.prototype._getNext = function() {\n this._currentStream = null;\n\n if (this._insideLoop) {\n this._pendingNext = true;\n return; // defer call\n }\n\n this._insideLoop = true;\n try {\n do {\n this._pendingNext = false;\n this._realGetNext();\n } while (this._pendingNext);\n } finally {\n this._insideLoop = false;\n }\n};\n\nCombinedStream.prototype._realGetNext = function() {\n var stream = this._streams.shift();\n\n\n if (typeof stream == 'undefined') {\n this.end();\n return;\n }\n\n if (typeof stream !== 'function') {\n this._pipeNext(stream);\n return;\n }\n\n var getStream = stream;\n getStream(function(stream) {\n var isStreamLike = CombinedStream.isStreamLike(stream);\n if (isStreamLike) {\n stream.on('data', this._checkDataSize.bind(this));\n this._handleErrors(stream);\n }\n\n this._pipeNext(stream);\n }.bind(this));\n};\n\nCombinedStream.prototype._pipeNext = function(stream) {\n this._currentStream = stream;\n\n var isStreamLike = CombinedStream.isStreamLike(stream);\n if (isStreamLike) {\n stream.on('end', this._getNext.bind(this));\n stream.pipe(this, {end: false});\n return;\n }\n\n var value = stream;\n this.write(value);\n this._getNext();\n};\n\nCombinedStream.prototype._handleErrors = function(stream) {\n var self = this;\n stream.on('error', function(err) {\n self._emitError(err);\n });\n};\n\nCombinedStream.prototype.write = function(data) {\n this.emit('data', data);\n};\n\nCombinedStream.prototype.pause = function() {\n if (!this.pauseStreams) {\n return;\n }\n\n if(this.pauseStreams && this._currentStream && typeof(this._currentStream.pause) == 'function') this._currentStream.pause();\n this.emit('pause');\n};\n\nCombinedStream.prototype.resume = function() {\n if (!this._released) {\n this._released = true;\n this.writable = true;\n this._getNext();\n }\n\n if(this.pauseStreams && this._currentStream && typeof(this._currentStream.resume) == 'function') this._currentStream.resume();\n this.emit('resume');\n};\n\nCombinedStream.prototype.end = function() {\n this._reset();\n this.emit('end');\n};\n\nCombinedStream.prototype.destroy = function() {\n this._reset();\n this.emit('close');\n};\n\nCombinedStream.prototype._reset = function() {\n this.writable = false;\n this._streams = [];\n this._currentStream = null;\n};\n\nCombinedStream.prototype._checkDataSize = function() {\n this._updateDataSize();\n if (this.dataSize <= this.maxDataSize) {\n return;\n }\n\n var message =\n 'DelayedStream#maxDataSize of ' + this.maxDataSize + ' bytes exceeded.';\n this._emitError(new Error(message));\n};\n\nCombinedStream.prototype._updateDataSize = function() {\n this.dataSize = 0;\n\n var self = this;\n this._streams.forEach(function(stream) {\n if (!stream.dataSize) {\n return;\n }\n\n self.dataSize += stream.dataSize;\n });\n\n if (this._currentStream && this._currentStream.dataSize) {\n this.dataSize += this._currentStream.dataSize;\n }\n};\n\nCombinedStream.prototype._emitError = function(err) {\n this._reset();\n this.emit('error', err);\n};\n", "{\n \"application/1d-interleaved-parityfec\": {\n \"source\": \"iana\"\n },\n \"application/3gpdash-qoe-report+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/3gpp-ims+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/3gpphal+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/3gpphalforms+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/a2l\": {\n \"source\": \"iana\"\n },\n \"application/ace+cbor\": {\n \"source\": \"iana\"\n },\n \"application/activemessage\": {\n \"source\": \"iana\"\n },\n \"application/activity+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-costmap+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-costmapfilter+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-directory+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-endpointcost+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-endpointcostparams+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-endpointprop+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-endpointpropparams+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-error+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-networkmap+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-networkmapfilter+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-updatestreamcontrol+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-updatestreamparams+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/aml\": {\n \"source\": \"iana\"\n },\n \"application/andrew-inset\": {\n \"source\": \"iana\",\n \"extensions\": [\"ez\"]\n },\n \"application/applefile\": {\n \"source\": \"iana\"\n },\n \"application/applixware\": {\n \"source\": \"apache\",\n \"extensions\": [\"aw\"]\n },\n \"application/at+jwt\": {\n \"source\": \"iana\"\n },\n \"application/atf\": {\n \"source\": \"iana\"\n },\n \"application/atfx\": {\n \"source\": \"iana\"\n },\n \"application/atom+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"atom\"]\n },\n \"application/atomcat+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"atomcat\"]\n },\n \"application/atomdeleted+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"atomdeleted\"]\n },\n \"application/atomicmail\": {\n \"source\": \"iana\"\n },\n \"application/atomsvc+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"atomsvc\"]\n },\n \"application/atsc-dwd+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"dwd\"]\n },\n \"application/atsc-dynamic-event-message\": {\n \"source\": \"iana\"\n },\n \"application/atsc-held+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"held\"]\n },\n \"application/atsc-rdt+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/atsc-rsat+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rsat\"]\n },\n \"application/atxml\": {\n \"source\": \"iana\"\n },\n \"application/auth-policy+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/bacnet-xdd+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/batch-smtp\": {\n \"source\": \"iana\"\n },\n \"application/bdoc\": {\n \"compressible\": false,\n \"extensions\": [\"bdoc\"]\n },\n \"application/beep+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/calendar+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/calendar+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xcs\"]\n },\n \"application/call-completion\": {\n \"source\": \"iana\"\n },\n \"application/cals-1840\": {\n \"source\": \"iana\"\n },\n \"application/captive+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/cbor\": {\n \"source\": \"iana\"\n },\n \"application/cbor-seq\": {\n \"source\": \"iana\"\n },\n \"application/cccex\": {\n \"source\": \"iana\"\n },\n \"application/ccmp+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/ccxml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"ccxml\"]\n },\n \"application/cdfx+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"cdfx\"]\n },\n \"application/cdmi-capability\": {\n \"source\": \"iana\",\n \"extensions\": [\"cdmia\"]\n },\n \"application/cdmi-container\": {\n \"source\": \"iana\",\n \"extensions\": [\"cdmic\"]\n },\n \"application/cdmi-domain\": {\n \"source\": \"iana\",\n \"extensions\": [\"cdmid\"]\n },\n \"application/cdmi-object\": {\n \"source\": \"iana\",\n \"extensions\": [\"cdmio\"]\n },\n \"application/cdmi-queue\": {\n \"source\": \"iana\",\n \"extensions\": [\"cdmiq\"]\n },\n \"application/cdni\": {\n \"source\": \"iana\"\n },\n \"application/cea\": {\n \"source\": \"iana\"\n },\n \"application/cea-2018+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/cellml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/cfw\": {\n \"source\": \"iana\"\n },\n \"application/city+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/clr\": {\n \"source\": \"iana\"\n },\n \"application/clue+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/clue_info+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/cms\": {\n \"source\": \"iana\"\n },\n \"application/cnrp+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/coap-group+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/coap-payload\": {\n \"source\": \"iana\"\n },\n \"application/commonground\": {\n \"source\": \"iana\"\n },\n \"application/conference-info+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/cose\": {\n \"source\": \"iana\"\n },\n \"application/cose-key\": {\n \"source\": \"iana\"\n },\n \"application/cose-key-set\": {\n \"source\": \"iana\"\n },\n \"application/cpl+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"cpl\"]\n },\n \"application/csrattrs\": {\n \"source\": \"iana\"\n },\n \"application/csta+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/cstadata+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/csvm+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/cu-seeme\": {\n \"source\": \"apache\",\n \"extensions\": [\"cu\"]\n },\n \"application/cwt\": {\n \"source\": \"iana\"\n },\n \"application/cybercash\": {\n \"source\": \"iana\"\n },\n \"application/dart\": {\n \"compressible\": true\n },\n \"application/dash+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"mpd\"]\n },\n \"application/dash-patch+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"mpp\"]\n },\n \"application/dashdelta\": {\n \"source\": \"iana\"\n },\n \"application/davmount+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"davmount\"]\n },\n \"application/dca-rft\": {\n \"source\": \"iana\"\n },\n \"application/dcd\": {\n \"source\": \"iana\"\n },\n \"application/dec-dx\": {\n \"source\": \"iana\"\n },\n \"application/dialog-info+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/dicom\": {\n \"source\": \"iana\"\n },\n \"application/dicom+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/dicom+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/dii\": {\n \"source\": \"iana\"\n },\n \"application/dit\": {\n \"source\": \"iana\"\n },\n \"application/dns\": {\n \"source\": \"iana\"\n },\n \"application/dns+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/dns-message\": {\n \"source\": \"iana\"\n },\n \"application/docbook+xml\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"dbk\"]\n },\n \"application/dots+cbor\": {\n \"source\": \"iana\"\n },\n \"application/dskpp+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/dssc+der\": {\n \"source\": \"iana\",\n \"extensions\": [\"dssc\"]\n },\n \"application/dssc+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xdssc\"]\n },\n \"application/dvcs\": {\n \"source\": \"iana\"\n },\n \"application/ecmascript\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"es\",\"ecma\"]\n },\n \"application/edi-consent\": {\n \"source\": \"iana\"\n },\n \"application/edi-x12\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/edifact\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/efi\": {\n \"source\": \"iana\"\n },\n \"application/elm+json\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/elm+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/emergencycalldata.cap+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/emergencycalldata.comment+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/emergencycalldata.control+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/emergencycalldata.deviceinfo+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/emergencycalldata.ecall.msd\": {\n \"source\": \"iana\"\n },\n \"application/emergencycalldata.providerinfo+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/emergencycalldata.serviceinfo+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/emergencycalldata.subscriberinfo+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/emergencycalldata.veds+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/emma+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"emma\"]\n },\n \"application/emotionml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"emotionml\"]\n },\n \"application/encaprtp\": {\n \"source\": \"iana\"\n },\n \"application/epp+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/epub+zip\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"epub\"]\n },\n \"application/eshop\": {\n \"source\": \"iana\"\n },\n \"application/exi\": {\n \"source\": \"iana\",\n \"extensions\": [\"exi\"]\n },\n \"application/expect-ct-report+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/express\": {\n \"source\": \"iana\",\n \"extensions\": [\"exp\"]\n },\n \"application/fastinfoset\": {\n \"source\": \"iana\"\n },\n \"application/fastsoap\": {\n \"source\": \"iana\"\n },\n \"application/fdt+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"fdt\"]\n },\n \"application/fhir+json\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/fhir+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/fido.trusted-apps+json\": {\n \"compressible\": true\n },\n \"application/fits\": {\n \"source\": \"iana\"\n },\n \"application/flexfec\": {\n \"source\": \"iana\"\n },\n \"application/font-sfnt\": {\n \"source\": \"iana\"\n },\n \"application/font-tdpfr\": {\n \"source\": \"iana\",\n \"extensions\": [\"pfr\"]\n },\n \"application/font-woff\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/framework-attributes+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/geo+json\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"geojson\"]\n },\n \"application/geo+json-seq\": {\n \"source\": \"iana\"\n },\n \"application/geopackage+sqlite3\": {\n \"source\": \"iana\"\n },\n \"application/geoxacml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/gltf-buffer\": {\n \"source\": \"iana\"\n },\n \"application/gml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"gml\"]\n },\n \"application/gpx+xml\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"gpx\"]\n },\n \"application/gxf\": {\n \"source\": \"apache\",\n \"extensions\": [\"gxf\"]\n },\n \"application/gzip\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"gz\"]\n },\n \"application/h224\": {\n \"source\": \"iana\"\n },\n \"application/held+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/hjson\": {\n \"extensions\": [\"hjson\"]\n },\n \"application/http\": {\n \"source\": \"iana\"\n },\n \"application/hyperstudio\": {\n \"source\": \"iana\",\n \"extensions\": [\"stk\"]\n },\n \"application/ibe-key-request+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/ibe-pkg-reply+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/ibe-pp-data\": {\n \"source\": \"iana\"\n },\n \"application/iges\": {\n \"source\": \"iana\"\n },\n \"application/im-iscomposing+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/index\": {\n \"source\": \"iana\"\n },\n \"application/index.cmd\": {\n \"source\": \"iana\"\n },\n \"application/index.obj\": {\n \"source\": \"iana\"\n },\n \"application/index.response\": {\n \"source\": \"iana\"\n },\n \"application/index.vnd\": {\n \"source\": \"iana\"\n },\n \"application/inkml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"ink\",\"inkml\"]\n },\n \"application/iotp\": {\n \"source\": \"iana\"\n },\n \"application/ipfix\": {\n \"source\": \"iana\",\n \"extensions\": [\"ipfix\"]\n },\n \"application/ipp\": {\n \"source\": \"iana\"\n },\n \"application/isup\": {\n \"source\": \"iana\"\n },\n \"application/its+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"its\"]\n },\n \"application/java-archive\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"jar\",\"war\",\"ear\"]\n },\n \"application/java-serialized-object\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"ser\"]\n },\n \"application/java-vm\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"class\"]\n },\n \"application/javascript\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true,\n \"extensions\": [\"js\",\"mjs\"]\n },\n \"application/jf2feed+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/jose\": {\n \"source\": \"iana\"\n },\n \"application/jose+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/jrd+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/jscalendar+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/json\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true,\n \"extensions\": [\"json\",\"map\"]\n },\n \"application/json-patch+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/json-seq\": {\n \"source\": \"iana\"\n },\n \"application/json5\": {\n \"extensions\": [\"json5\"]\n },\n \"application/jsonml+json\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"jsonml\"]\n },\n \"application/jwk+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/jwk-set+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/jwt\": {\n \"source\": \"iana\"\n },\n \"application/kpml-request+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/kpml-response+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/ld+json\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"jsonld\"]\n },\n \"application/lgr+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"lgr\"]\n },\n \"application/link-format\": {\n \"source\": \"iana\"\n },\n \"application/load-control+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/lost+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"lostxml\"]\n },\n \"application/lostsync+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/lpf+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/lxf\": {\n \"source\": \"iana\"\n },\n \"application/mac-binhex40\": {\n \"source\": \"iana\",\n \"extensions\": [\"hqx\"]\n },\n \"application/mac-compactpro\": {\n \"source\": \"apache\",\n \"extensions\": [\"cpt\"]\n },\n \"application/macwriteii\": {\n \"source\": \"iana\"\n },\n \"application/mads+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"mads\"]\n },\n \"application/manifest+json\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true,\n \"extensions\": [\"webmanifest\"]\n },\n \"application/marc\": {\n \"source\": \"iana\",\n \"extensions\": [\"mrc\"]\n },\n \"application/marcxml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"mrcx\"]\n },\n \"application/mathematica\": {\n \"source\": \"iana\",\n \"extensions\": [\"ma\",\"nb\",\"mb\"]\n },\n \"application/mathml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"mathml\"]\n },\n \"application/mathml-content+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mathml-presentation+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mbms-associated-procedure-description+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mbms-deregister+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mbms-envelope+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mbms-msk+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mbms-msk-response+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mbms-protection-description+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mbms-reception-report+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mbms-register+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mbms-register-response+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mbms-schedule+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mbms-user-service-description+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mbox\": {\n \"source\": \"iana\",\n \"extensions\": [\"mbox\"]\n },\n \"application/media-policy-dataset+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"mpf\"]\n },\n \"application/media_control+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mediaservercontrol+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"mscml\"]\n },\n \"application/merge-patch+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/metalink+xml\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"metalink\"]\n },\n \"application/metalink4+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"meta4\"]\n },\n \"application/mets+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"mets\"]\n },\n \"application/mf4\": {\n \"source\": \"iana\"\n },\n \"application/mikey\": {\n \"source\": \"iana\"\n },\n \"application/mipc\": {\n \"source\": \"iana\"\n },\n \"application/missing-blocks+cbor-seq\": {\n \"source\": \"iana\"\n },\n \"application/mmt-aei+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"maei\"]\n },\n \"application/mmt-usd+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"musd\"]\n },\n \"application/mods+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"mods\"]\n },\n \"application/moss-keys\": {\n \"source\": \"iana\"\n },\n \"application/moss-signature\": {\n \"source\": \"iana\"\n },\n \"application/mosskey-data\": {\n \"source\": \"iana\"\n },\n \"application/mosskey-request\": {\n \"source\": \"iana\"\n },\n \"application/mp21\": {\n \"source\": \"iana\",\n \"extensions\": [\"m21\",\"mp21\"]\n },\n \"application/mp4\": {\n \"source\": \"iana\",\n \"extensions\": [\"mp4s\",\"m4p\"]\n },\n \"application/mpeg4-generic\": {\n \"source\": \"iana\"\n },\n \"application/mpeg4-iod\": {\n \"source\": \"iana\"\n },\n \"application/mpeg4-iod-xmt\": {\n \"source\": \"iana\"\n },\n \"application/mrb-consumer+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mrb-publish+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/msc-ivr+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/msc-mixer+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/msword\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"doc\",\"dot\"]\n },\n \"application/mud+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/multipart-core\": {\n \"source\": \"iana\"\n },\n \"application/mxf\": {\n \"source\": \"iana\",\n \"extensions\": [\"mxf\"]\n },\n \"application/n-quads\": {\n \"source\": \"iana\",\n \"extensions\": [\"nq\"]\n },\n \"application/n-triples\": {\n \"source\": \"iana\",\n \"extensions\": [\"nt\"]\n },\n \"application/nasdata\": {\n \"source\": \"iana\"\n },\n \"application/news-checkgroups\": {\n \"source\": \"iana\",\n \"charset\": \"US-ASCII\"\n },\n \"application/news-groupinfo\": {\n \"source\": \"iana\",\n \"charset\": \"US-ASCII\"\n },\n \"application/news-transmission\": {\n \"source\": \"iana\"\n },\n \"application/nlsml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/node\": {\n \"source\": \"iana\",\n \"extensions\": [\"cjs\"]\n },\n \"application/nss\": {\n \"source\": \"iana\"\n },\n \"application/oauth-authz-req+jwt\": {\n \"source\": \"iana\"\n },\n \"application/oblivious-dns-message\": {\n \"source\": \"iana\"\n },\n \"application/ocsp-request\": {\n \"source\": \"iana\"\n },\n \"application/ocsp-response\": {\n \"source\": \"iana\"\n },\n \"application/octet-stream\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"bin\",\"dms\",\"lrf\",\"mar\",\"so\",\"dist\",\"distz\",\"pkg\",\"bpk\",\"dump\",\"elc\",\"deploy\",\"exe\",\"dll\",\"deb\",\"dmg\",\"iso\",\"img\",\"msi\",\"msp\",\"msm\",\"buffer\"]\n },\n \"application/oda\": {\n \"source\": \"iana\",\n \"extensions\": [\"oda\"]\n },\n \"application/odm+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/odx\": {\n \"source\": \"iana\"\n },\n \"application/oebps-package+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"opf\"]\n },\n \"application/ogg\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"ogx\"]\n },\n \"application/omdoc+xml\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"omdoc\"]\n },\n \"application/onenote\": {\n \"source\": \"apache\",\n \"extensions\": [\"onetoc\",\"onetoc2\",\"onetmp\",\"onepkg\"]\n },\n \"application/opc-nodeset+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/oscore\": {\n \"source\": \"iana\"\n },\n \"application/oxps\": {\n \"source\": \"iana\",\n \"extensions\": [\"oxps\"]\n },\n \"application/p21\": {\n \"source\": \"iana\"\n },\n \"application/p21+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/p2p-overlay+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"relo\"]\n },\n \"application/parityfec\": {\n \"source\": \"iana\"\n },\n \"application/passport\": {\n \"source\": \"iana\"\n },\n \"application/patch-ops-error+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xer\"]\n },\n \"application/pdf\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"pdf\"]\n },\n \"application/pdx\": {\n \"source\": \"iana\"\n },\n \"application/pem-certificate-chain\": {\n \"source\": \"iana\"\n },\n \"application/pgp-encrypted\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"pgp\"]\n },\n \"application/pgp-keys\": {\n \"source\": \"iana\",\n \"extensions\": [\"asc\"]\n },\n \"application/pgp-signature\": {\n \"source\": \"iana\",\n \"extensions\": [\"asc\",\"sig\"]\n },\n \"application/pics-rules\": {\n \"source\": \"apache\",\n \"extensions\": [\"prf\"]\n },\n \"application/pidf+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/pidf-diff+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/pkcs10\": {\n \"source\": \"iana\",\n \"extensions\": [\"p10\"]\n },\n \"application/pkcs12\": {\n \"source\": \"iana\"\n },\n \"application/pkcs7-mime\": {\n \"source\": \"iana\",\n \"extensions\": [\"p7m\",\"p7c\"]\n },\n \"application/pkcs7-signature\": {\n \"source\": \"iana\",\n \"extensions\": [\"p7s\"]\n },\n \"application/pkcs8\": {\n \"source\": \"iana\",\n \"extensions\": [\"p8\"]\n },\n \"application/pkcs8-encrypted\": {\n \"source\": \"iana\"\n },\n \"application/pkix-attr-cert\": {\n \"source\": \"iana\",\n \"extensions\": [\"ac\"]\n },\n \"application/pkix-cert\": {\n \"source\": \"iana\",\n \"extensions\": [\"cer\"]\n },\n \"application/pkix-crl\": {\n \"source\": \"iana\",\n \"extensions\": [\"crl\"]\n },\n \"application/pkix-pkipath\": {\n \"source\": \"iana\",\n \"extensions\": [\"pkipath\"]\n },\n \"application/pkixcmp\": {\n \"source\": \"iana\",\n \"extensions\": [\"pki\"]\n },\n \"application/pls+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"pls\"]\n },\n \"application/poc-settings+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/postscript\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"ai\",\"eps\",\"ps\"]\n },\n \"application/ppsp-tracker+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/problem+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/problem+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/provenance+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"provx\"]\n },\n \"application/prs.alvestrand.titrax-sheet\": {\n \"source\": \"iana\"\n },\n \"application/prs.cww\": {\n \"source\": \"iana\",\n \"extensions\": [\"cww\"]\n },\n \"application/prs.cyn\": {\n \"source\": \"iana\",\n \"charset\": \"7-BIT\"\n },\n \"application/prs.hpub+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/prs.nprend\": {\n \"source\": \"iana\"\n },\n \"application/prs.plucker\": {\n \"source\": \"iana\"\n },\n \"application/prs.rdf-xml-crypt\": {\n \"source\": \"iana\"\n },\n \"application/prs.xsf+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/pskc+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"pskcxml\"]\n },\n \"application/pvd+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/qsig\": {\n \"source\": \"iana\"\n },\n \"application/raml+yaml\": {\n \"compressible\": true,\n \"extensions\": [\"raml\"]\n },\n \"application/raptorfec\": {\n \"source\": \"iana\"\n },\n \"application/rdap+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/rdf+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rdf\",\"owl\"]\n },\n \"application/reginfo+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rif\"]\n },\n \"application/relax-ng-compact-syntax\": {\n \"source\": \"iana\",\n \"extensions\": [\"rnc\"]\n },\n \"application/remote-printing\": {\n \"source\": \"iana\"\n },\n \"application/reputon+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/resource-lists+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rl\"]\n },\n \"application/resource-lists-diff+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rld\"]\n },\n \"application/rfc+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/riscos\": {\n \"source\": \"iana\"\n },\n \"application/rlmi+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/rls-services+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rs\"]\n },\n \"application/route-apd+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rapd\"]\n },\n \"application/route-s-tsid+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"sls\"]\n },\n \"application/route-usd+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rusd\"]\n },\n \"application/rpki-ghostbusters\": {\n \"source\": \"iana\",\n \"extensions\": [\"gbr\"]\n },\n \"application/rpki-manifest\": {\n \"source\": \"iana\",\n \"extensions\": [\"mft\"]\n },\n \"application/rpki-publication\": {\n \"source\": \"iana\"\n },\n \"application/rpki-roa\": {\n \"source\": \"iana\",\n \"extensions\": [\"roa\"]\n },\n \"application/rpki-updown\": {\n \"source\": \"iana\"\n },\n \"application/rsd+xml\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"rsd\"]\n },\n \"application/rss+xml\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"rss\"]\n },\n \"application/rtf\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rtf\"]\n },\n \"application/rtploopback\": {\n \"source\": \"iana\"\n },\n \"application/rtx\": {\n \"source\": \"iana\"\n },\n \"application/samlassertion+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/samlmetadata+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/sarif+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/sarif-external-properties+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/sbe\": {\n \"source\": \"iana\"\n },\n \"application/sbml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"sbml\"]\n },\n \"application/scaip+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/scim+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/scvp-cv-request\": {\n \"source\": \"iana\",\n \"extensions\": [\"scq\"]\n },\n \"application/scvp-cv-response\": {\n \"source\": \"iana\",\n \"extensions\": [\"scs\"]\n },\n \"application/scvp-vp-request\": {\n \"source\": \"iana\",\n \"extensions\": [\"spq\"]\n },\n \"application/scvp-vp-response\": {\n \"source\": \"iana\",\n \"extensions\": [\"spp\"]\n },\n \"application/sdp\": {\n \"source\": \"iana\",\n \"extensions\": [\"sdp\"]\n },\n \"application/secevent+jwt\": {\n \"source\": \"iana\"\n },\n \"application/senml+cbor\": {\n \"source\": \"iana\"\n },\n \"application/senml+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/senml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"senmlx\"]\n },\n \"application/senml-etch+cbor\": {\n \"source\": \"iana\"\n },\n \"application/senml-etch+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/senml-exi\": {\n \"source\": \"iana\"\n },\n \"application/sensml+cbor\": {\n \"source\": \"iana\"\n },\n \"application/sensml+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/sensml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"sensmlx\"]\n },\n \"application/sensml-exi\": {\n \"source\": \"iana\"\n },\n \"application/sep+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/sep-exi\": {\n \"source\": \"iana\"\n },\n \"application/session-info\": {\n \"source\": \"iana\"\n },\n \"application/set-payment\": {\n \"source\": \"iana\"\n },\n \"application/set-payment-initiation\": {\n \"source\": \"iana\",\n \"extensions\": [\"setpay\"]\n },\n \"application/set-registration\": {\n \"source\": \"iana\"\n },\n \"application/set-registration-initiation\": {\n \"source\": \"iana\",\n \"extensions\": [\"setreg\"]\n },\n \"application/sgml\": {\n \"source\": \"iana\"\n },\n \"application/sgml-open-catalog\": {\n \"source\": \"iana\"\n },\n \"application/shf+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"shf\"]\n },\n \"application/sieve\": {\n \"source\": \"iana\",\n \"extensions\": [\"siv\",\"sieve\"]\n },\n \"application/simple-filter+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/simple-message-summary\": {\n \"source\": \"iana\"\n },\n \"application/simplesymbolcontainer\": {\n \"source\": \"iana\"\n },\n \"application/sipc\": {\n \"source\": \"iana\"\n },\n \"application/slate\": {\n \"source\": \"iana\"\n },\n \"application/smil\": {\n \"source\": \"iana\"\n },\n \"application/smil+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"smi\",\"smil\"]\n },\n \"application/smpte336m\": {\n \"source\": \"iana\"\n },\n \"application/soap+fastinfoset\": {\n \"source\": \"iana\"\n },\n \"application/soap+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/sparql-query\": {\n \"source\": \"iana\",\n \"extensions\": [\"rq\"]\n },\n \"application/sparql-results+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"srx\"]\n },\n \"application/spdx+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/spirits-event+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/sql\": {\n \"source\": \"iana\"\n },\n \"application/srgs\": {\n \"source\": \"iana\",\n \"extensions\": [\"gram\"]\n },\n \"application/srgs+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"grxml\"]\n },\n \"application/sru+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"sru\"]\n },\n \"application/ssdl+xml\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"ssdl\"]\n },\n \"application/ssml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"ssml\"]\n },\n \"application/stix+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/swid+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"swidtag\"]\n },\n \"application/tamp-apex-update\": {\n \"source\": \"iana\"\n },\n \"application/tamp-apex-update-confirm\": {\n \"source\": \"iana\"\n },\n \"application/tamp-community-update\": {\n \"source\": \"iana\"\n },\n \"application/tamp-community-update-confirm\": {\n \"source\": \"iana\"\n },\n \"application/tamp-error\": {\n \"source\": \"iana\"\n },\n \"application/tamp-sequence-adjust\": {\n \"source\": \"iana\"\n },\n \"application/tamp-sequence-adjust-confirm\": {\n \"source\": \"iana\"\n },\n \"application/tamp-status-query\": {\n \"source\": \"iana\"\n },\n \"application/tamp-status-response\": {\n \"source\": \"iana\"\n },\n \"application/tamp-update\": {\n \"source\": \"iana\"\n },\n \"application/tamp-update-confirm\": {\n \"source\": \"iana\"\n },\n \"application/tar\": {\n \"compressible\": true\n },\n \"application/taxii+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/td+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/tei+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"tei\",\"teicorpus\"]\n },\n \"application/tetra_isi\": {\n \"source\": \"iana\"\n },\n \"application/thraud+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"tfi\"]\n },\n \"application/timestamp-query\": {\n \"source\": \"iana\"\n },\n \"application/timestamp-reply\": {\n \"source\": \"iana\"\n },\n \"application/timestamped-data\": {\n \"source\": \"iana\",\n \"extensions\": [\"tsd\"]\n },\n \"application/tlsrpt+gzip\": {\n \"source\": \"iana\"\n },\n \"application/tlsrpt+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/tnauthlist\": {\n \"source\": \"iana\"\n },\n \"application/token-introspection+jwt\": {\n \"source\": \"iana\"\n },\n \"application/toml\": {\n \"compressible\": true,\n \"extensions\": [\"toml\"]\n },\n \"application/trickle-ice-sdpfrag\": {\n \"source\": \"iana\"\n },\n \"application/trig\": {\n \"source\": \"iana\",\n \"extensions\": [\"trig\"]\n },\n \"application/ttml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"ttml\"]\n },\n \"application/tve-trigger\": {\n \"source\": \"iana\"\n },\n \"application/tzif\": {\n \"source\": \"iana\"\n },\n \"application/tzif-leap\": {\n \"source\": \"iana\"\n },\n \"application/ubjson\": {\n \"compressible\": false,\n \"extensions\": [\"ubj\"]\n },\n \"application/ulpfec\": {\n \"source\": \"iana\"\n },\n \"application/urc-grpsheet+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/urc-ressheet+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rsheet\"]\n },\n \"application/urc-targetdesc+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"td\"]\n },\n \"application/urc-uisocketdesc+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vcard+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vcard+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vemmi\": {\n \"source\": \"iana\"\n },\n \"application/vividence.scriptfile\": {\n \"source\": \"apache\"\n },\n \"application/vnd.1000minds.decision-model+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"1km\"]\n },\n \"application/vnd.3gpp-prose+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp-prose-pc3ch+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp-v2x-local-service-information\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.5gnas\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.access-transfer-events+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.bsf+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.gmop+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.gtpc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.interworking-data\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.lpp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.mc-signalling-ear\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.mcdata-affiliation-command+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcdata-info+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcdata-payload\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.mcdata-service-config+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcdata-signalling\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.mcdata-ue-config+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcdata-user-profile+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcptt-affiliation-command+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcptt-floor-request+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcptt-info+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcptt-location-info+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcptt-mbms-usage-info+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcptt-service-config+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcptt-signed+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcptt-ue-config+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcptt-ue-init-config+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcptt-user-profile+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcvideo-affiliation-command+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcvideo-affiliation-info+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcvideo-info+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcvideo-location-info+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcvideo-mbms-usage-info+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcvideo-service-config+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcvideo-transmission-request+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcvideo-ue-config+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcvideo-user-profile+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mid-call+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.ngap\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.pfcp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.pic-bw-large\": {\n \"source\": \"iana\",\n \"extensions\": [\"plb\"]\n },\n \"application/vnd.3gpp.pic-bw-small\": {\n \"source\": \"iana\",\n \"extensions\": [\"psb\"]\n },\n \"application/vnd.3gpp.pic-bw-var\": {\n \"source\": \"iana\",\n \"extensions\": [\"pvb\"]\n },\n \"application/vnd.3gpp.s1ap\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.sms\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.sms+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.srvcc-ext+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.srvcc-info+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.state-and-event-info+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.ussd+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp2.bcmcsinfo+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp2.sms\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp2.tcap\": {\n \"source\": \"iana\",\n \"extensions\": [\"tcap\"]\n },\n \"application/vnd.3lightssoftware.imagescal\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3m.post-it-notes\": {\n \"source\": \"iana\",\n \"extensions\": [\"pwn\"]\n },\n \"application/vnd.accpac.simply.aso\": {\n \"source\": \"iana\",\n \"extensions\": [\"aso\"]\n },\n \"application/vnd.accpac.simply.imp\": {\n \"source\": \"iana\",\n \"extensions\": [\"imp\"]\n },\n \"application/vnd.acucobol\": {\n \"source\": \"iana\",\n \"extensions\": [\"acu\"]\n },\n \"application/vnd.acucorp\": {\n \"source\": \"iana\",\n \"extensions\": [\"atc\",\"acutc\"]\n },\n \"application/vnd.adobe.air-application-installer-package+zip\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"air\"]\n },\n \"application/vnd.adobe.flash.movie\": {\n \"source\": \"iana\"\n },\n \"application/vnd.adobe.formscentral.fcdt\": {\n \"source\": \"iana\",\n \"extensions\": [\"fcdt\"]\n },\n \"application/vnd.adobe.fxp\": {\n \"source\": \"iana\",\n \"extensions\": [\"fxp\",\"fxpl\"]\n },\n \"application/vnd.adobe.partial-upload\": {\n \"source\": \"iana\"\n },\n \"application/vnd.adobe.xdp+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xdp\"]\n },\n \"application/vnd.adobe.xfdf\": {\n \"source\": \"iana\",\n \"extensions\": [\"xfdf\"]\n },\n \"application/vnd.aether.imp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.afpc.afplinedata\": {\n \"source\": \"iana\"\n },\n \"application/vnd.afpc.afplinedata-pagedef\": {\n \"source\": \"iana\"\n },\n \"application/vnd.afpc.cmoca-cmresource\": {\n \"source\": \"iana\"\n },\n \"application/vnd.afpc.foca-charset\": {\n \"source\": \"iana\"\n },\n \"application/vnd.afpc.foca-codedfont\": {\n \"source\": \"iana\"\n },\n \"application/vnd.afpc.foca-codepage\": {\n \"source\": \"iana\"\n },\n \"application/vnd.afpc.modca\": {\n \"source\": \"iana\"\n },\n \"application/vnd.afpc.modca-cmtable\": {\n \"source\": \"iana\"\n },\n \"application/vnd.afpc.modca-formdef\": {\n \"source\": \"iana\"\n },\n \"application/vnd.afpc.modca-mediummap\": {\n \"source\": \"iana\"\n },\n \"application/vnd.afpc.modca-objectcontainer\": {\n \"source\": \"iana\"\n },\n \"application/vnd.afpc.modca-overlay\": {\n \"source\": \"iana\"\n },\n \"application/vnd.afpc.modca-pagesegment\": {\n \"source\": \"iana\"\n },\n \"application/vnd.age\": {\n \"source\": \"iana\",\n \"extensions\": [\"age\"]\n },\n \"application/vnd.ah-barcode\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ahead.space\": {\n \"source\": \"iana\",\n \"extensions\": [\"ahead\"]\n },\n \"application/vnd.airzip.filesecure.azf\": {\n \"source\": \"iana\",\n \"extensions\": [\"azf\"]\n },\n \"application/vnd.airzip.filesecure.azs\": {\n \"source\": \"iana\",\n \"extensions\": [\"azs\"]\n },\n \"application/vnd.amadeus+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.amazon.ebook\": {\n \"source\": \"apache\",\n \"extensions\": [\"azw\"]\n },\n \"application/vnd.amazon.mobi8-ebook\": {\n \"source\": \"iana\"\n },\n \"application/vnd.americandynamics.acc\": {\n \"source\": \"iana\",\n \"extensions\": [\"acc\"]\n },\n \"application/vnd.amiga.ami\": {\n \"source\": \"iana\",\n \"extensions\": [\"ami\"]\n },\n \"application/vnd.amundsen.maze+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.android.ota\": {\n \"source\": \"iana\"\n },\n \"application/vnd.android.package-archive\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"apk\"]\n },\n \"application/vnd.anki\": {\n \"source\": \"iana\"\n },\n \"application/vnd.anser-web-certificate-issue-initiation\": {\n \"source\": \"iana\",\n \"extensions\": [\"cii\"]\n },\n \"application/vnd.anser-web-funds-transfer-initiation\": {\n \"source\": \"apache\",\n \"extensions\": [\"fti\"]\n },\n \"application/vnd.antix.game-component\": {\n \"source\": \"iana\",\n \"extensions\": [\"atx\"]\n },\n \"application/vnd.apache.arrow.file\": {\n \"source\": \"iana\"\n },\n \"application/vnd.apache.arrow.stream\": {\n \"source\": \"iana\"\n },\n \"application/vnd.apache.thrift.binary\": {\n \"source\": \"iana\"\n },\n \"application/vnd.apache.thrift.compact\": {\n \"source\": \"iana\"\n },\n \"application/vnd.apache.thrift.json\": {\n \"source\": \"iana\"\n },\n \"application/vnd.api+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.aplextor.warrp+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.apothekende.reservation+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.apple.installer+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"mpkg\"]\n },\n \"application/vnd.apple.keynote\": {\n \"source\": \"iana\",\n \"extensions\": [\"key\"]\n },\n \"application/vnd.apple.mpegurl\": {\n \"source\": \"iana\",\n \"extensions\": [\"m3u8\"]\n },\n \"application/vnd.apple.numbers\": {\n \"source\": \"iana\",\n \"extensions\": [\"numbers\"]\n },\n \"application/vnd.apple.pages\": {\n \"source\": \"iana\",\n \"extensions\": [\"pages\"]\n },\n \"application/vnd.apple.pkpass\": {\n \"compressible\": false,\n \"extensions\": [\"pkpass\"]\n },\n \"application/vnd.arastra.swi\": {\n \"source\": \"iana\"\n },\n \"application/vnd.aristanetworks.swi\": {\n \"source\": \"iana\",\n \"extensions\": [\"swi\"]\n },\n \"application/vnd.artisan+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.artsquare\": {\n \"source\": \"iana\"\n },\n \"application/vnd.astraea-software.iota\": {\n \"source\": \"iana\",\n \"extensions\": [\"iota\"]\n },\n \"application/vnd.audiograph\": {\n \"source\": \"iana\",\n \"extensions\": [\"aep\"]\n },\n \"application/vnd.autopackage\": {\n \"source\": \"iana\"\n },\n \"application/vnd.avalon+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.avistar+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.balsamiq.bmml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"bmml\"]\n },\n \"application/vnd.balsamiq.bmpr\": {\n \"source\": \"iana\"\n },\n \"application/vnd.banana-accounting\": {\n \"source\": \"iana\"\n },\n \"application/vnd.bbf.usp.error\": {\n \"source\": \"iana\"\n },\n \"application/vnd.bbf.usp.msg\": {\n \"source\": \"iana\"\n },\n \"application/vnd.bbf.usp.msg+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.bekitzur-stech+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.bint.med-content\": {\n \"source\": \"iana\"\n },\n \"application/vnd.biopax.rdf+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.blink-idb-value-wrapper\": {\n \"source\": \"iana\"\n },\n \"application/vnd.blueice.multipass\": {\n \"source\": \"iana\",\n \"extensions\": [\"mpm\"]\n },\n \"application/vnd.bluetooth.ep.oob\": {\n \"source\": \"iana\"\n },\n \"application/vnd.bluetooth.le.oob\": {\n \"source\": \"iana\"\n },\n \"application/vnd.bmi\": {\n \"source\": \"iana\",\n \"extensions\": [\"bmi\"]\n },\n \"application/vnd.bpf\": {\n \"source\": \"iana\"\n },\n \"application/vnd.bpf3\": {\n \"source\": \"iana\"\n },\n \"application/vnd.businessobjects\": {\n \"source\": \"iana\",\n \"extensions\": [\"rep\"]\n },\n \"application/vnd.byu.uapi+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.cab-jscript\": {\n \"source\": \"iana\"\n },\n \"application/vnd.canon-cpdl\": {\n \"source\": \"iana\"\n },\n \"application/vnd.canon-lips\": {\n \"source\": \"iana\"\n },\n \"application/vnd.capasystems-pg+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.cendio.thinlinc.clientconf\": {\n \"source\": \"iana\"\n },\n \"application/vnd.century-systems.tcp_stream\": {\n \"source\": \"iana\"\n },\n \"application/vnd.chemdraw+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"cdxml\"]\n },\n \"application/vnd.chess-pgn\": {\n \"source\": \"iana\"\n },\n \"application/vnd.chipnuts.karaoke-mmd\": {\n \"source\": \"iana\",\n \"extensions\": [\"mmd\"]\n },\n \"application/vnd.ciedi\": {\n \"source\": \"iana\"\n },\n \"application/vnd.cinderella\": {\n \"source\": \"iana\",\n \"extensions\": [\"cdy\"]\n },\n \"application/vnd.cirpack.isdn-ext\": {\n \"source\": \"iana\"\n },\n \"application/vnd.citationstyles.style+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"csl\"]\n },\n \"application/vnd.claymore\": {\n \"source\": \"iana\",\n \"extensions\": [\"cla\"]\n },\n \"application/vnd.cloanto.rp9\": {\n \"source\": \"iana\",\n \"extensions\": [\"rp9\"]\n },\n \"application/vnd.clonk.c4group\": {\n \"source\": \"iana\",\n \"extensions\": [\"c4g\",\"c4d\",\"c4f\",\"c4p\",\"c4u\"]\n },\n \"application/vnd.cluetrust.cartomobile-config\": {\n \"source\": \"iana\",\n \"extensions\": [\"c11amc\"]\n },\n \"application/vnd.cluetrust.cartomobile-config-pkg\": {\n \"source\": \"iana\",\n \"extensions\": [\"c11amz\"]\n },\n \"application/vnd.coffeescript\": {\n \"source\": \"iana\"\n },\n \"application/vnd.collabio.xodocuments.document\": {\n \"source\": \"iana\"\n },\n \"application/vnd.collabio.xodocuments.document-template\": {\n \"source\": \"iana\"\n },\n \"application/vnd.collabio.xodocuments.presentation\": {\n \"source\": \"iana\"\n },\n \"application/vnd.collabio.xodocuments.presentation-template\": {\n \"source\": \"iana\"\n },\n \"application/vnd.collabio.xodocuments.spreadsheet\": {\n \"source\": \"iana\"\n },\n \"application/vnd.collabio.xodocuments.spreadsheet-template\": {\n \"source\": \"iana\"\n },\n \"application/vnd.collection+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.collection.doc+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.collection.next+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.comicbook+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/vnd.comicbook-rar\": {\n \"source\": \"iana\"\n },\n \"application/vnd.commerce-battelle\": {\n \"source\": \"iana\"\n },\n \"application/vnd.commonspace\": {\n \"source\": \"iana\",\n \"extensions\": [\"csp\"]\n },\n \"application/vnd.contact.cmsg\": {\n \"source\": \"iana\",\n \"extensions\": [\"cdbcmsg\"]\n },\n \"application/vnd.coreos.ignition+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.cosmocaller\": {\n \"source\": \"iana\",\n \"extensions\": [\"cmc\"]\n },\n \"application/vnd.crick.clicker\": {\n \"source\": \"iana\",\n \"extensions\": [\"clkx\"]\n },\n \"application/vnd.crick.clicker.keyboard\": {\n \"source\": \"iana\",\n \"extensions\": [\"clkk\"]\n },\n \"application/vnd.crick.clicker.palette\": {\n \"source\": \"iana\",\n \"extensions\": [\"clkp\"]\n },\n \"application/vnd.crick.clicker.template\": {\n \"source\": \"iana\",\n \"extensions\": [\"clkt\"]\n },\n \"application/vnd.crick.clicker.wordbank\": {\n \"source\": \"iana\",\n \"extensions\": [\"clkw\"]\n },\n \"application/vnd.criticaltools.wbs+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"wbs\"]\n },\n \"application/vnd.cryptii.pipe+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.crypto-shade-file\": {\n \"source\": \"iana\"\n },\n \"application/vnd.cryptomator.encrypted\": {\n \"source\": \"iana\"\n },\n \"application/vnd.cryptomator.vault\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ctc-posml\": {\n \"source\": \"iana\",\n \"extensions\": [\"pml\"]\n },\n \"application/vnd.ctct.ws+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.cups-pdf\": {\n \"source\": \"iana\"\n },\n \"application/vnd.cups-postscript\": {\n \"source\": \"iana\"\n },\n \"application/vnd.cups-ppd\": {\n \"source\": \"iana\",\n \"extensions\": [\"ppd\"]\n },\n \"application/vnd.cups-raster\": {\n \"source\": \"iana\"\n },\n \"application/vnd.cups-raw\": {\n \"source\": \"iana\"\n },\n \"application/vnd.curl\": {\n \"source\": \"iana\"\n },\n \"application/vnd.curl.car\": {\n \"source\": \"apache\",\n \"extensions\": [\"car\"]\n },\n \"application/vnd.curl.pcurl\": {\n \"source\": \"apache\",\n \"extensions\": [\"pcurl\"]\n },\n \"application/vnd.cyan.dean.root+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.cybank\": {\n \"source\": \"iana\"\n },\n \"application/vnd.cyclonedx+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.cyclonedx+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.d2l.coursepackage1p0+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/vnd.d3m-dataset\": {\n \"source\": \"iana\"\n },\n \"application/vnd.d3m-problem\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dart\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"dart\"]\n },\n \"application/vnd.data-vision.rdz\": {\n \"source\": \"iana\",\n \"extensions\": [\"rdz\"]\n },\n \"application/vnd.datapackage+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.dataresource+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.dbf\": {\n \"source\": \"iana\",\n \"extensions\": [\"dbf\"]\n },\n \"application/vnd.debian.binary-package\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dece.data\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvf\",\"uvvf\",\"uvd\",\"uvvd\"]\n },\n \"application/vnd.dece.ttml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"uvt\",\"uvvt\"]\n },\n \"application/vnd.dece.unspecified\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvx\",\"uvvx\"]\n },\n \"application/vnd.dece.zip\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvz\",\"uvvz\"]\n },\n \"application/vnd.denovo.fcselayout-link\": {\n \"source\": \"iana\",\n \"extensions\": [\"fe_launch\"]\n },\n \"application/vnd.desmume.movie\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dir-bi.plate-dl-nosuffix\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dm.delegation+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.dna\": {\n \"source\": \"iana\",\n \"extensions\": [\"dna\"]\n },\n \"application/vnd.document+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.dolby.mlp\": {\n \"source\": \"apache\",\n \"extensions\": [\"mlp\"]\n },\n \"application/vnd.dolby.mobile.1\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dolby.mobile.2\": {\n \"source\": \"iana\"\n },\n \"application/vnd.doremir.scorecloud-binary-document\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dpgraph\": {\n \"source\": \"iana\",\n \"extensions\": [\"dpg\"]\n },\n \"application/vnd.dreamfactory\": {\n \"source\": \"iana\",\n \"extensions\": [\"dfac\"]\n },\n \"application/vnd.drive+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ds-keypoint\": {\n \"source\": \"apache\",\n \"extensions\": [\"kpxx\"]\n },\n \"application/vnd.dtg.local\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dtg.local.flash\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dtg.local.html\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.ait\": {\n \"source\": \"iana\",\n \"extensions\": [\"ait\"]\n },\n \"application/vnd.dvb.dvbisl+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.dvb.dvbj\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.esgcontainer\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.ipdcdftnotifaccess\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.ipdcesgaccess\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.ipdcesgaccess2\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.ipdcesgpdd\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.ipdcroaming\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.iptv.alfec-base\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.iptv.alfec-enhancement\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.notif-aggregate-root+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.dvb.notif-container+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.dvb.notif-generic+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.dvb.notif-ia-msglist+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.dvb.notif-ia-registration-request+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.dvb.notif-ia-registration-response+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.dvb.notif-init+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.dvb.pfr\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.service\": {\n \"source\": \"iana\",\n \"extensions\": [\"svc\"]\n },\n \"application/vnd.dxr\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dynageo\": {\n \"source\": \"iana\",\n \"extensions\": [\"geo\"]\n },\n \"application/vnd.dzr\": {\n \"source\": \"iana\"\n },\n \"application/vnd.easykaraoke.cdgdownload\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ecdis-update\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ecip.rlp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.eclipse.ditto+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ecowin.chart\": {\n \"source\": \"iana\",\n \"extensions\": [\"mag\"]\n },\n \"application/vnd.ecowin.filerequest\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ecowin.fileupdate\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ecowin.series\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ecowin.seriesrequest\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ecowin.seriesupdate\": {\n \"source\": \"iana\"\n },\n \"application/vnd.efi.img\": {\n \"source\": \"iana\"\n },\n \"application/vnd.efi.iso\": {\n \"source\": \"iana\"\n },\n \"application/vnd.emclient.accessrequest+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.enliven\": {\n \"source\": \"iana\",\n \"extensions\": [\"nml\"]\n },\n \"application/vnd.enphase.envoy\": {\n \"source\": \"iana\"\n },\n \"application/vnd.eprints.data+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.epson.esf\": {\n \"source\": \"iana\",\n \"extensions\": [\"esf\"]\n },\n \"application/vnd.epson.msf\": {\n \"source\": \"iana\",\n \"extensions\": [\"msf\"]\n },\n \"application/vnd.epson.quickanime\": {\n \"source\": \"iana\",\n \"extensions\": [\"qam\"]\n },\n \"application/vnd.epson.salt\": {\n \"source\": \"iana\",\n \"extensions\": [\"slt\"]\n },\n \"application/vnd.epson.ssf\": {\n \"source\": \"iana\",\n \"extensions\": [\"ssf\"]\n },\n \"application/vnd.ericsson.quickcall\": {\n \"source\": \"iana\"\n },\n \"application/vnd.espass-espass+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/vnd.eszigno3+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"es3\",\"et3\"]\n },\n \"application/vnd.etsi.aoc+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.asic-e+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/vnd.etsi.asic-s+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/vnd.etsi.cug+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.iptvcommand+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.iptvdiscovery+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.iptvprofile+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.iptvsad-bc+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.iptvsad-cod+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.iptvsad-npvr+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.iptvservice+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.iptvsync+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.iptvueprofile+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.mcid+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.mheg5\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.overload-control-policy-dataset+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.pstn+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.sci+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.simservs+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.timestamp-token\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.tsl+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.tsl.der\": {\n \"source\": \"iana\"\n },\n \"application/vnd.eu.kasparian.car+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.eudora.data\": {\n \"source\": \"iana\"\n },\n \"application/vnd.evolv.ecig.profile\": {\n \"source\": \"iana\"\n },\n \"application/vnd.evolv.ecig.settings\": {\n \"source\": \"iana\"\n },\n \"application/vnd.evolv.ecig.theme\": {\n \"source\": \"iana\"\n },\n \"application/vnd.exstream-empower+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/vnd.exstream-package\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ezpix-album\": {\n \"source\": \"iana\",\n \"extensions\": [\"ez2\"]\n },\n \"application/vnd.ezpix-package\": {\n \"source\": \"iana\",\n \"extensions\": [\"ez3\"]\n },\n \"application/vnd.f-secure.mobile\": {\n \"source\": \"iana\"\n },\n \"application/vnd.familysearch.gedcom+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/vnd.fastcopy-disk-image\": {\n \"source\": \"iana\"\n },\n \"application/vnd.fdf\": {\n \"source\": \"iana\",\n \"extensions\": [\"fdf\"]\n },\n \"application/vnd.fdsn.mseed\": {\n \"source\": \"iana\",\n \"extensions\": [\"mseed\"]\n },\n \"application/vnd.fdsn.seed\": {\n \"source\": \"iana\",\n \"extensions\": [\"seed\",\"dataless\"]\n },\n \"application/vnd.ffsns\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ficlab.flb+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/vnd.filmit.zfc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.fints\": {\n \"source\": \"iana\"\n },\n \"application/vnd.firemonkeys.cloudcell\": {\n \"source\": \"iana\"\n },\n \"application/vnd.flographit\": {\n \"source\": \"iana\",\n \"extensions\": [\"gph\"]\n },\n \"application/vnd.fluxtime.clip\": {\n \"source\": \"iana\",\n \"extensions\": [\"ftc\"]\n },\n \"application/vnd.font-fontforge-sfd\": {\n \"source\": \"iana\"\n },\n \"application/vnd.framemaker\": {\n \"source\": \"iana\",\n \"extensions\": [\"fm\",\"frame\",\"maker\",\"book\"]\n },\n \"application/vnd.frogans.fnc\": {\n \"source\": \"iana\",\n \"extensions\": [\"fnc\"]\n },\n \"application/vnd.frogans.ltf\": {\n \"source\": \"iana\",\n \"extensions\": [\"ltf\"]\n },\n \"application/vnd.fsc.weblaunch\": {\n \"source\": \"iana\",\n \"extensions\": [\"fsc\"]\n },\n \"application/vnd.fujifilm.fb.docuworks\": {\n \"source\": \"iana\"\n },\n \"application/vnd.fujifilm.fb.docuworks.binder\": {\n \"source\": \"iana\"\n },\n \"application/vnd.fujifilm.fb.docuworks.container\": {\n \"source\": \"iana\"\n },\n \"application/vnd.fujifilm.fb.jfi+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.fujitsu.oasys\": {\n \"source\": \"iana\",\n \"extensions\": [\"oas\"]\n },\n \"application/vnd.fujitsu.oasys2\": {\n \"source\": \"iana\",\n \"extensions\": [\"oa2\"]\n },\n \"application/vnd.fujitsu.oasys3\": {\n \"source\": \"iana\",\n \"extensions\": [\"oa3\"]\n },\n \"application/vnd.fujitsu.oasysgp\": {\n \"source\": \"iana\",\n \"extensions\": [\"fg5\"]\n },\n \"application/vnd.fujitsu.oasysprs\": {\n \"source\": \"iana\",\n \"extensions\": [\"bh2\"]\n },\n \"application/vnd.fujixerox.art-ex\": {\n \"source\": \"iana\"\n },\n \"application/vnd.fujixerox.art4\": {\n \"source\": \"iana\"\n },\n \"application/vnd.fujixerox.ddd\": {\n \"source\": \"iana\",\n \"extensions\": [\"ddd\"]\n },\n \"application/vnd.fujixerox.docuworks\": {\n \"source\": \"iana\",\n \"extensions\": [\"xdw\"]\n },\n \"application/vnd.fujixerox.docuworks.binder\": {\n \"source\": \"iana\",\n \"extensions\": [\"xbd\"]\n },\n \"application/vnd.fujixerox.docuworks.container\": {\n \"source\": \"iana\"\n },\n \"application/vnd.fujixerox.hbpl\": {\n \"source\": \"iana\"\n },\n \"application/vnd.fut-misnet\": {\n \"source\": \"iana\"\n },\n \"application/vnd.futoin+cbor\": {\n \"source\": \"iana\"\n },\n \"application/vnd.futoin+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.fuzzysheet\": {\n \"source\": \"iana\",\n \"extensions\": [\"fzs\"]\n },\n \"application/vnd.genomatix.tuxedo\": {\n \"source\": \"iana\",\n \"extensions\": [\"txd\"]\n },\n \"application/vnd.gentics.grd+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.geo+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.geocube+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.geogebra.file\": {\n \"source\": \"iana\",\n \"extensions\": [\"ggb\"]\n },\n \"application/vnd.geogebra.slides\": {\n \"source\": \"iana\"\n },\n \"application/vnd.geogebra.tool\": {\n \"source\": \"iana\",\n \"extensions\": [\"ggt\"]\n },\n \"application/vnd.geometry-explorer\": {\n \"source\": \"iana\",\n \"extensions\": [\"gex\",\"gre\"]\n },\n \"application/vnd.geonext\": {\n \"source\": \"iana\",\n \"extensions\": [\"gxt\"]\n },\n \"application/vnd.geoplan\": {\n \"source\": \"iana\",\n \"extensions\": [\"g2w\"]\n },\n \"application/vnd.geospace\": {\n \"source\": \"iana\",\n \"extensions\": [\"g3w\"]\n },\n \"application/vnd.gerber\": {\n \"source\": \"iana\"\n },\n \"application/vnd.globalplatform.card-content-mgt\": {\n \"source\": \"iana\"\n },\n \"application/vnd.globalplatform.card-content-mgt-response\": {\n \"source\": \"iana\"\n },\n \"application/vnd.gmx\": {\n \"source\": \"iana\",\n \"extensions\": [\"gmx\"]\n },\n \"application/vnd.google-apps.document\": {\n \"compressible\": false,\n \"extensions\": [\"gdoc\"]\n },\n \"application/vnd.google-apps.presentation\": {\n \"compressible\": false,\n \"extensions\": [\"gslides\"]\n },\n \"application/vnd.google-apps.spreadsheet\": {\n \"compressible\": false,\n \"extensions\": [\"gsheet\"]\n },\n \"application/vnd.google-earth.kml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"kml\"]\n },\n \"application/vnd.google-earth.kmz\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"kmz\"]\n },\n \"application/vnd.gov.sk.e-form+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.gov.sk.e-form+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/vnd.gov.sk.xmldatacontainer+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.grafeq\": {\n \"source\": \"iana\",\n \"extensions\": [\"gqf\",\"gqs\"]\n },\n \"application/vnd.gridmp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.groove-account\": {\n \"source\": \"iana\",\n \"extensions\": [\"gac\"]\n },\n \"application/vnd.groove-help\": {\n \"source\": \"iana\",\n \"extensions\": [\"ghf\"]\n },\n \"application/vnd.groove-identity-message\": {\n \"source\": \"iana\",\n \"extensions\": [\"gim\"]\n },\n \"application/vnd.groove-injector\": {\n \"source\": \"iana\",\n \"extensions\": [\"grv\"]\n },\n \"application/vnd.groove-tool-message\": {\n \"source\": \"iana\",\n \"extensions\": [\"gtm\"]\n },\n \"application/vnd.groove-tool-template\": {\n \"source\": \"iana\",\n \"extensions\": [\"tpl\"]\n },\n \"application/vnd.groove-vcard\": {\n \"source\": \"iana\",\n \"extensions\": [\"vcg\"]\n },\n \"application/vnd.hal+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.hal+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"hal\"]\n },\n \"application/vnd.handheld-entertainment+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"zmm\"]\n },\n \"application/vnd.hbci\": {\n \"source\": \"iana\",\n \"extensions\": [\"hbci\"]\n },\n \"application/vnd.hc+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.hcl-bireports\": {\n \"source\": \"iana\"\n },\n \"application/vnd.hdt\": {\n \"source\": \"iana\"\n },\n \"application/vnd.heroku+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.hhe.lesson-player\": {\n \"source\": \"iana\",\n \"extensions\": [\"les\"]\n },\n \"application/vnd.hl7cda+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/vnd.hl7v2+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/vnd.hp-hpgl\": {\n \"source\": \"iana\",\n \"extensions\": [\"hpgl\"]\n },\n \"application/vnd.hp-hpid\": {\n \"source\": \"iana\",\n \"extensions\": [\"hpid\"]\n },\n \"application/vnd.hp-hps\": {\n \"source\": \"iana\",\n \"extensions\": [\"hps\"]\n },\n \"application/vnd.hp-jlyt\": {\n \"source\": \"iana\",\n \"extensions\": [\"jlt\"]\n },\n \"application/vnd.hp-pcl\": {\n \"source\": \"iana\",\n \"extensions\": [\"pcl\"]\n },\n \"application/vnd.hp-pclxl\": {\n \"source\": \"iana\",\n \"extensions\": [\"pclxl\"]\n },\n \"application/vnd.httphone\": {\n \"source\": \"iana\"\n },\n \"application/vnd.hydrostatix.sof-data\": {\n \"source\": \"iana\",\n \"extensions\": [\"sfd-hdstx\"]\n },\n \"application/vnd.hyper+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.hyper-item+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.hyperdrive+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.hzn-3d-crossword\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ibm.afplinedata\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ibm.electronic-media\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ibm.minipay\": {\n \"source\": \"iana\",\n \"extensions\": [\"mpy\"]\n },\n \"application/vnd.ibm.modcap\": {\n \"source\": \"iana\",\n \"extensions\": [\"afp\",\"listafp\",\"list3820\"]\n },\n \"application/vnd.ibm.rights-management\": {\n \"source\": \"iana\",\n \"extensions\": [\"irm\"]\n },\n \"application/vnd.ibm.secure-container\": {\n \"source\": \"iana\",\n \"extensions\": [\"sc\"]\n },\n \"application/vnd.iccprofile\": {\n \"source\": \"iana\",\n \"extensions\": [\"icc\",\"icm\"]\n },\n \"application/vnd.ieee.1905\": {\n \"source\": \"iana\"\n },\n \"application/vnd.igloader\": {\n \"source\": \"iana\",\n \"extensions\": [\"igl\"]\n },\n \"application/vnd.imagemeter.folder+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/vnd.imagemeter.image+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/vnd.immervision-ivp\": {\n \"source\": \"iana\",\n \"extensions\": [\"ivp\"]\n },\n \"application/vnd.immervision-ivu\": {\n \"source\": \"iana\",\n \"extensions\": [\"ivu\"]\n },\n \"application/vnd.ims.imsccv1p1\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ims.imsccv1p2\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ims.imsccv1p3\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ims.lis.v2.result+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ims.lti.v2.toolconsumerprofile+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ims.lti.v2.toolproxy+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ims.lti.v2.toolproxy.id+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ims.lti.v2.toolsettings+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ims.lti.v2.toolsettings.simple+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.informedcontrol.rms+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.informix-visionary\": {\n \"source\": \"iana\"\n },\n \"application/vnd.infotech.project\": {\n \"source\": \"iana\"\n },\n \"application/vnd.infotech.project+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.innopath.wamp.notification\": {\n \"source\": \"iana\"\n },\n \"application/vnd.insors.igm\": {\n \"source\": \"iana\",\n \"extensions\": [\"igm\"]\n },\n \"application/vnd.intercon.formnet\": {\n \"source\": \"iana\",\n \"extensions\": [\"xpw\",\"xpx\"]\n },\n \"application/vnd.intergeo\": {\n \"source\": \"iana\",\n \"extensions\": [\"i2g\"]\n },\n \"application/vnd.intertrust.digibox\": {\n \"source\": \"iana\"\n },\n \"application/vnd.intertrust.nncp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.intu.qbo\": {\n \"source\": \"iana\",\n \"extensions\": [\"qbo\"]\n },\n \"application/vnd.intu.qfx\": {\n \"source\": \"iana\",\n \"extensions\": [\"qfx\"]\n },\n \"application/vnd.iptc.g2.catalogitem+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.iptc.g2.conceptitem+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.iptc.g2.knowledgeitem+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.iptc.g2.newsitem+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.iptc.g2.newsmessage+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.iptc.g2.packageitem+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.iptc.g2.planningitem+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ipunplugged.rcprofile\": {\n \"source\": \"iana\",\n \"extensions\": [\"rcprofile\"]\n },\n \"application/vnd.irepository.package+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"irp\"]\n },\n \"application/vnd.is-xpr\": {\n \"source\": \"iana\",\n \"extensions\": [\"xpr\"]\n },\n \"application/vnd.isac.fcs\": {\n \"source\": \"iana\",\n \"extensions\": [\"fcs\"]\n },\n \"application/vnd.iso11783-10+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/vnd.jam\": {\n \"source\": \"iana\",\n \"extensions\": [\"jam\"]\n },\n \"application/vnd.japannet-directory-service\": {\n \"source\": \"iana\"\n },\n \"application/vnd.japannet-jpnstore-wakeup\": {\n \"source\": \"iana\"\n },\n \"application/vnd.japannet-payment-wakeup\": {\n \"source\": \"iana\"\n },\n \"application/vnd.japannet-registration\": {\n \"source\": \"iana\"\n },\n \"application/vnd.japannet-registration-wakeup\": {\n \"source\": \"iana\"\n },\n \"application/vnd.japannet-setstore-wakeup\": {\n \"source\": \"iana\"\n },\n \"application/vnd.japannet-verification\": {\n \"source\": \"iana\"\n },\n \"application/vnd.japannet-verification-wakeup\": {\n \"source\": \"iana\"\n },\n \"application/vnd.jcp.javame.midlet-rms\": {\n \"source\": \"iana\",\n \"extensions\": [\"rms\"]\n },\n \"application/vnd.jisp\": {\n \"source\": \"iana\",\n \"extensions\": [\"jisp\"]\n },\n \"application/vnd.joost.joda-archive\": {\n \"source\": \"iana\",\n \"extensions\": [\"joda\"]\n },\n \"application/vnd.jsk.isdn-ngn\": {\n \"source\": \"iana\"\n },\n \"application/vnd.kahootz\": {\n \"source\": \"iana\",\n \"extensions\": [\"ktz\",\"ktr\"]\n },\n \"application/vnd.kde.karbon\": {\n \"source\": \"iana\",\n \"extensions\": [\"karbon\"]\n },\n \"application/vnd.kde.kchart\": {\n \"source\": \"iana\",\n \"extensions\": [\"chrt\"]\n },\n \"application/vnd.kde.kformula\": {\n \"source\": \"iana\",\n \"extensions\": [\"kfo\"]\n },\n \"application/vnd.kde.kivio\": {\n \"source\": \"iana\",\n \"extensions\": [\"flw\"]\n },\n \"application/vnd.kde.kontour\": {\n \"source\": \"iana\",\n \"extensions\": [\"kon\"]\n },\n \"application/vnd.kde.kpresenter\": {\n \"source\": \"iana\",\n \"extensions\": [\"kpr\",\"kpt\"]\n },\n \"application/vnd.kde.kspread\": {\n \"source\": \"iana\",\n \"extensions\": [\"ksp\"]\n },\n \"application/vnd.kde.kword\": {\n \"source\": \"iana\",\n \"extensions\": [\"kwd\",\"kwt\"]\n },\n \"application/vnd.kenameaapp\": {\n \"source\": \"iana\",\n \"extensions\": [\"htke\"]\n },\n \"application/vnd.kidspiration\": {\n \"source\": \"iana\",\n \"extensions\": [\"kia\"]\n },\n \"application/vnd.kinar\": {\n \"source\": \"iana\",\n \"extensions\": [\"kne\",\"knp\"]\n },\n \"application/vnd.koan\": {\n \"source\": \"iana\",\n \"extensions\": [\"skp\",\"skd\",\"skt\",\"skm\"]\n },\n \"application/vnd.kodak-descriptor\": {\n \"source\": \"iana\",\n \"extensions\": [\"sse\"]\n },\n \"application/vnd.las\": {\n \"source\": \"iana\"\n },\n \"application/vnd.las.las+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.las.las+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"lasxml\"]\n },\n \"application/vnd.laszip\": {\n \"source\": \"iana\"\n },\n \"application/vnd.leap+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.liberty-request+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.llamagraphics.life-balance.desktop\": {\n \"source\": \"iana\",\n \"extensions\": [\"lbd\"]\n },\n \"application/vnd.llamagraphics.life-balance.exchange+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"lbe\"]\n },\n \"application/vnd.logipipe.circuit+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/vnd.loom\": {\n \"source\": \"iana\"\n },\n \"application/vnd.lotus-1-2-3\": {\n \"source\": \"iana\",\n \"extensions\": [\"123\"]\n },\n \"application/vnd.lotus-approach\": {\n \"source\": \"iana\",\n \"extensions\": [\"apr\"]\n },\n \"application/vnd.lotus-freelance\": {\n \"source\": \"iana\",\n \"extensions\": [\"pre\"]\n },\n \"application/vnd.lotus-notes\": {\n \"source\": \"iana\",\n \"extensions\": [\"nsf\"]\n },\n \"application/vnd.lotus-organizer\": {\n \"source\": \"iana\",\n \"extensions\": [\"org\"]\n },\n \"application/vnd.lotus-screencam\": {\n \"source\": \"iana\",\n \"extensions\": [\"scm\"]\n },\n \"application/vnd.lotus-wordpro\": {\n \"source\": \"iana\",\n \"extensions\": [\"lwp\"]\n },\n \"application/vnd.macports.portpkg\": {\n \"source\": \"iana\",\n \"extensions\": [\"portpkg\"]\n },\n \"application/vnd.mapbox-vector-tile\": {\n \"source\": \"iana\",\n \"extensions\": [\"mvt\"]\n },\n \"application/vnd.marlin.drm.actiontoken+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.marlin.drm.conftoken+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.marlin.drm.license+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.marlin.drm.mdcf\": {\n \"source\": \"iana\"\n },\n \"application/vnd.mason+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.maxar.archive.3tz+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/vnd.maxmind.maxmind-db\": {\n \"source\": \"iana\"\n },\n \"application/vnd.mcd\": {\n \"source\": \"iana\",\n \"extensions\": [\"mcd\"]\n },\n \"application/vnd.medcalcdata\": {\n \"source\": \"iana\",\n \"extensions\": [\"mc1\"]\n },\n \"application/vnd.mediastation.cdkey\": {\n \"source\": \"iana\",\n \"extensions\": [\"cdkey\"]\n },\n \"application/vnd.meridian-slingshot\": {\n \"source\": \"iana\"\n },\n \"application/vnd.mfer\": {\n \"source\": \"iana\",\n \"extensions\": [\"mwf\"]\n },\n \"application/vnd.mfmp\": {\n \"source\": \"iana\",\n \"extensions\": [\"mfm\"]\n },\n \"application/vnd.micro+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.micrografx.flo\": {\n \"source\": \"iana\",\n \"extensions\": [\"flo\"]\n },\n \"application/vnd.micrografx.igx\": {\n \"source\": \"iana\",\n \"extensions\": [\"igx\"]\n },\n \"application/vnd.microsoft.portable-executable\": {\n \"source\": \"iana\"\n },\n \"application/vnd.microsoft.windows.thumbnail-cache\": {\n \"source\": \"iana\"\n },\n \"application/vnd.miele+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.mif\": {\n \"source\": \"iana\",\n \"extensions\": [\"mif\"]\n },\n \"application/vnd.minisoft-hp3000-save\": {\n \"source\": \"iana\"\n },\n \"application/vnd.mitsubishi.misty-guard.trustweb\": {\n \"source\": \"iana\"\n },\n \"application/vnd.mobius.daf\": {\n \"source\": \"iana\",\n \"extensions\": [\"daf\"]\n },\n \"application/vnd.mobius.dis\": {\n \"source\": \"iana\",\n \"extensions\": [\"dis\"]\n },\n \"application/vnd.mobius.mbk\": {\n \"source\": \"iana\",\n \"extensions\": [\"mbk\"]\n },\n \"application/vnd.mobius.mqy\": {\n \"source\": \"iana\",\n \"extensions\": [\"mqy\"]\n },\n \"application/vnd.mobius.msl\": {\n \"source\": \"iana\",\n \"extensions\": [\"msl\"]\n },\n \"application/vnd.mobius.plc\": {\n \"source\": \"iana\",\n \"extensions\": [\"plc\"]\n },\n \"application/vnd.mobius.txf\": {\n \"source\": \"iana\",\n \"extensions\": [\"txf\"]\n },\n \"application/vnd.mophun.application\": {\n \"source\": \"iana\",\n \"extensions\": [\"mpn\"]\n },\n \"application/vnd.mophun.certificate\": {\n \"source\": \"iana\",\n \"extensions\": [\"mpc\"]\n },\n \"application/vnd.motorola.flexsuite\": {\n \"source\": \"iana\"\n },\n \"application/vnd.motorola.flexsuite.adsi\": {\n \"source\": \"iana\"\n },\n \"application/vnd.motorola.flexsuite.fis\": {\n \"source\": \"iana\"\n },\n \"application/vnd.motorola.flexsuite.gotap\": {\n \"source\": \"iana\"\n },\n \"application/vnd.motorola.flexsuite.kmr\": {\n \"source\": \"iana\"\n },\n \"application/vnd.motorola.flexsuite.ttc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.motorola.flexsuite.wem\": {\n \"source\": \"iana\"\n },\n \"application/vnd.motorola.iprm\": {\n \"source\": \"iana\"\n },\n \"application/vnd.mozilla.xul+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xul\"]\n },\n \"application/vnd.ms-3mfdocument\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-artgalry\": {\n \"source\": \"iana\",\n \"extensions\": [\"cil\"]\n },\n \"application/vnd.ms-asf\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-cab-compressed\": {\n \"source\": \"iana\",\n \"extensions\": [\"cab\"]\n },\n \"application/vnd.ms-color.iccprofile\": {\n \"source\": \"apache\"\n },\n \"application/vnd.ms-excel\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"xls\",\"xlm\",\"xla\",\"xlc\",\"xlt\",\"xlw\"]\n },\n \"application/vnd.ms-excel.addin.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"xlam\"]\n },\n \"application/vnd.ms-excel.sheet.binary.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"xlsb\"]\n },\n \"application/vnd.ms-excel.sheet.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"xlsm\"]\n },\n \"application/vnd.ms-excel.template.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"xltm\"]\n },\n \"application/vnd.ms-fontobject\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"eot\"]\n },\n \"application/vnd.ms-htmlhelp\": {\n \"source\": \"iana\",\n \"extensions\": [\"chm\"]\n },\n \"application/vnd.ms-ims\": {\n \"source\": \"iana\",\n \"extensions\": [\"ims\"]\n },\n \"application/vnd.ms-lrm\": {\n \"source\": \"iana\",\n \"extensions\": [\"lrm\"]\n },\n \"application/vnd.ms-office.activex+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ms-officetheme\": {\n \"source\": \"iana\",\n \"extensions\": [\"thmx\"]\n },\n \"application/vnd.ms-opentype\": {\n \"source\": \"apache\",\n \"compressible\": true\n },\n \"application/vnd.ms-outlook\": {\n \"compressible\": false,\n \"extensions\": [\"msg\"]\n },\n \"application/vnd.ms-package.obfuscated-opentype\": {\n \"source\": \"apache\"\n },\n \"application/vnd.ms-pki.seccat\": {\n \"source\": \"apache\",\n \"extensions\": [\"cat\"]\n },\n \"application/vnd.ms-pki.stl\": {\n \"source\": \"apache\",\n \"extensions\": [\"stl\"]\n },\n \"application/vnd.ms-playready.initiator+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ms-powerpoint\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"ppt\",\"pps\",\"pot\"]\n },\n \"application/vnd.ms-powerpoint.addin.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"ppam\"]\n },\n \"application/vnd.ms-powerpoint.presentation.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"pptm\"]\n },\n \"application/vnd.ms-powerpoint.slide.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"sldm\"]\n },\n \"application/vnd.ms-powerpoint.slideshow.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"ppsm\"]\n },\n \"application/vnd.ms-powerpoint.template.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"potm\"]\n },\n \"application/vnd.ms-printdevicecapabilities+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ms-printing.printticket+xml\": {\n \"source\": \"apache\",\n \"compressible\": true\n },\n \"application/vnd.ms-printschematicket+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ms-project\": {\n \"source\": \"iana\",\n \"extensions\": [\"mpp\",\"mpt\"]\n },\n \"application/vnd.ms-tnef\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-windows.devicepairing\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-windows.nwprinting.oob\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-windows.printerpairing\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-windows.wsd.oob\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-wmdrm.lic-chlg-req\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-wmdrm.lic-resp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-wmdrm.meter-chlg-req\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-wmdrm.meter-resp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-word.document.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"docm\"]\n },\n \"application/vnd.ms-word.template.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"dotm\"]\n },\n \"application/vnd.ms-works\": {\n \"source\": \"iana\",\n \"extensions\": [\"wps\",\"wks\",\"wcm\",\"wdb\"]\n },\n \"application/vnd.ms-wpl\": {\n \"source\": \"iana\",\n \"extensions\": [\"wpl\"]\n },\n \"application/vnd.ms-xpsdocument\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"xps\"]\n },\n \"application/vnd.msa-disk-image\": {\n \"source\": \"iana\"\n },\n \"application/vnd.mseq\": {\n \"source\": \"iana\",\n \"extensions\": [\"mseq\"]\n },\n \"application/vnd.msign\": {\n \"source\": \"iana\"\n },\n \"application/vnd.multiad.creator\": {\n \"source\": \"iana\"\n },\n \"application/vnd.multiad.creator.cif\": {\n \"source\": \"iana\"\n },\n \"application/vnd.music-niff\": {\n \"source\": \"iana\"\n },\n \"application/vnd.musician\": {\n \"source\": \"iana\",\n \"extensions\": [\"mus\"]\n },\n \"application/vnd.muvee.style\": {\n \"source\": \"iana\",\n \"extensions\": [\"msty\"]\n },\n \"application/vnd.mynfc\": {\n \"source\": \"iana\",\n \"extensions\": [\"taglet\"]\n },\n \"application/vnd.nacamar.ybrid+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ncd.control\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ncd.reference\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nearst.inv+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.nebumind.line\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nervana\": {\n \"source\": \"iana\"\n },\n \"application/vnd.netfpx\": {\n \"source\": \"iana\"\n },\n \"application/vnd.neurolanguage.nlu\": {\n \"source\": \"iana\",\n \"extensions\": [\"nlu\"]\n },\n \"application/vnd.nimn\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nintendo.nitro.rom\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nintendo.snes.rom\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nitf\": {\n \"source\": \"iana\",\n \"extensions\": [\"ntf\",\"nitf\"]\n },\n \"application/vnd.noblenet-directory\": {\n \"source\": \"iana\",\n \"extensions\": [\"nnd\"]\n },\n \"application/vnd.noblenet-sealer\": {\n \"source\": \"iana\",\n \"extensions\": [\"nns\"]\n },\n \"application/vnd.noblenet-web\": {\n \"source\": \"iana\",\n \"extensions\": [\"nnw\"]\n },\n \"application/vnd.nokia.catalogs\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nokia.conml+wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nokia.conml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.nokia.iptv.config+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.nokia.isds-radio-presets\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nokia.landmark+wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nokia.landmark+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.nokia.landmarkcollection+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.nokia.n-gage.ac+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"ac\"]\n },\n \"application/vnd.nokia.n-gage.data\": {\n \"source\": \"iana\",\n \"extensions\": [\"ngdat\"]\n },\n \"application/vnd.nokia.n-gage.symbian.install\": {\n \"source\": \"iana\",\n \"extensions\": [\"n-gage\"]\n },\n \"application/vnd.nokia.ncd\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nokia.pcd+wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nokia.pcd+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.nokia.radio-preset\": {\n \"source\": \"iana\",\n \"extensions\": [\"rpst\"]\n },\n \"application/vnd.nokia.radio-presets\": {\n \"source\": \"iana\",\n \"extensions\": [\"rpss\"]\n },\n \"application/vnd.novadigm.edm\": {\n \"source\": \"iana\",\n \"extensions\": [\"edm\"]\n },\n \"application/vnd.novadigm.edx\": {\n \"source\": \"iana\",\n \"extensions\": [\"edx\"]\n },\n \"application/vnd.novadigm.ext\": {\n \"source\": \"iana\",\n \"extensions\": [\"ext\"]\n },\n \"application/vnd.ntt-local.content-share\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ntt-local.file-transfer\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ntt-local.ogw_remote-access\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ntt-local.sip-ta_remote\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ntt-local.sip-ta_tcp_stream\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oasis.opendocument.chart\": {\n \"source\": \"iana\",\n \"extensions\": [\"odc\"]\n },\n \"application/vnd.oasis.opendocument.chart-template\": {\n \"source\": \"iana\",\n \"extensions\": [\"otc\"]\n },\n \"application/vnd.oasis.opendocument.database\": {\n \"source\": \"iana\",\n \"extensions\": [\"odb\"]\n },\n \"application/vnd.oasis.opendocument.formula\": {\n \"source\": \"iana\",\n \"extensions\": [\"odf\"]\n },\n \"application/vnd.oasis.opendocument.formula-template\": {\n \"source\": \"iana\",\n \"extensions\": [\"odft\"]\n },\n \"application/vnd.oasis.opendocument.graphics\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"odg\"]\n },\n \"application/vnd.oasis.opendocument.graphics-template\": {\n \"source\": \"iana\",\n \"extensions\": [\"otg\"]\n },\n \"application/vnd.oasis.opendocument.image\": {\n \"source\": \"iana\",\n \"extensions\": [\"odi\"]\n },\n \"application/vnd.oasis.opendocument.image-template\": {\n \"source\": \"iana\",\n \"extensions\": [\"oti\"]\n },\n \"application/vnd.oasis.opendocument.presentation\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"odp\"]\n },\n \"application/vnd.oasis.opendocument.presentation-template\": {\n \"source\": \"iana\",\n \"extensions\": [\"otp\"]\n },\n \"application/vnd.oasis.opendocument.spreadsheet\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"ods\"]\n },\n \"application/vnd.oasis.opendocument.spreadsheet-template\": {\n \"source\": \"iana\",\n \"extensions\": [\"ots\"]\n },\n \"application/vnd.oasis.opendocument.text\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"odt\"]\n },\n \"application/vnd.oasis.opendocument.text-master\": {\n \"source\": \"iana\",\n \"extensions\": [\"odm\"]\n },\n \"application/vnd.oasis.opendocument.text-template\": {\n \"source\": \"iana\",\n \"extensions\": [\"ott\"]\n },\n \"application/vnd.oasis.opendocument.text-web\": {\n \"source\": \"iana\",\n \"extensions\": [\"oth\"]\n },\n \"application/vnd.obn\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ocf+cbor\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oci.image.manifest.v1+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oftn.l10n+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oipf.contentaccessdownload+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oipf.contentaccessstreaming+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oipf.cspg-hexbinary\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oipf.dae.svg+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oipf.dae.xhtml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oipf.mippvcontrolmessage+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oipf.pae.gem\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oipf.spdiscovery+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oipf.spdlist+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oipf.ueprofile+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oipf.userprofile+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.olpc-sugar\": {\n \"source\": \"iana\",\n \"extensions\": [\"xo\"]\n },\n \"application/vnd.oma-scws-config\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma-scws-http-request\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma-scws-http-response\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.associated-procedure-parameter+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.bcast.drm-trigger+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.bcast.imd+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.bcast.ltkm\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.notification+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.bcast.provisioningtrigger\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.sgboot\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.sgdd+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.bcast.sgdu\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.simple-symbol-container\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.smartcard-trigger+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.bcast.sprov+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.bcast.stkm\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.cab-address-book+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.cab-feature-handler+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.cab-pcc+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.cab-subs-invite+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.cab-user-prefs+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.dcd\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.dcdc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.dd2+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"dd2\"]\n },\n \"application/vnd.oma.drm.risd+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.group-usage-list+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.lwm2m+cbor\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.lwm2m+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.lwm2m+tlv\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.pal+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.poc.detailed-progress-report+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.poc.final-report+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.poc.groups+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.poc.invocation-descriptor+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.poc.optimized-progress-report+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.push\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.scidm.messages+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.xcap-directory+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.omads-email+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/vnd.omads-file+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/vnd.omads-folder+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/vnd.omaloc-supl-init\": {\n \"source\": \"iana\"\n },\n \"application/vnd.onepager\": {\n \"source\": \"iana\"\n },\n \"application/vnd.onepagertamp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.onepagertamx\": {\n \"source\": \"iana\"\n },\n \"application/vnd.onepagertat\": {\n \"source\": \"iana\"\n },\n \"application/vnd.onepagertatp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.onepagertatx\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openblox.game+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"obgx\"]\n },\n \"application/vnd.openblox.game-binary\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openeye.oeb\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openofficeorg.extension\": {\n \"source\": \"apache\",\n \"extensions\": [\"oxt\"]\n },\n \"application/vnd.openstreetmap.data+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"osm\"]\n },\n \"application/vnd.opentimestamps.ots\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.custom-properties+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.customxmlproperties+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.drawing+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.drawingml.chart+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.extended-properties+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.comments+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.presentation\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"pptx\"]\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.presprops+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.slide\": {\n \"source\": \"iana\",\n \"extensions\": [\"sldx\"]\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.slide+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.slideshow\": {\n \"source\": \"iana\",\n \"extensions\": [\"ppsx\"]\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.tags+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.template\": {\n \"source\": \"iana\",\n \"extensions\": [\"potx\"]\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.template.main+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"xlsx\"]\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.template\": {\n \"source\": \"iana\",\n \"extensions\": [\"xltx\"]\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.theme+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.themeoverride+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.vmldrawing\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"docx\"]\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.template\": {\n \"source\": \"iana\",\n \"extensions\": [\"dotx\"]\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-package.core-properties+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-package.relationships+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oracle.resource+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.orange.indata\": {\n \"source\": \"iana\"\n },\n \"application/vnd.osa.netdeploy\": {\n \"source\": \"iana\"\n },\n \"application/vnd.osgeo.mapguide.package\": {\n \"source\": \"iana\",\n \"extensions\": [\"mgp\"]\n },\n \"application/vnd.osgi.bundle\": {\n \"source\": \"iana\"\n },\n \"application/vnd.osgi.dp\": {\n \"source\": \"iana\",\n \"extensions\": [\"dp\"]\n },\n \"application/vnd.osgi.subsystem\": {\n \"source\": \"iana\",\n \"extensions\": [\"esa\"]\n },\n \"application/vnd.otps.ct-kip+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oxli.countgraph\": {\n \"source\": \"iana\"\n },\n \"application/vnd.pagerduty+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.palm\": {\n \"source\": \"iana\",\n \"extensions\": [\"pdb\",\"pqa\",\"oprc\"]\n },\n \"application/vnd.panoply\": {\n \"source\": \"iana\"\n },\n \"application/vnd.paos.xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.patentdive\": {\n \"source\": \"iana\"\n },\n \"application/vnd.patientecommsdoc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.pawaafile\": {\n \"source\": \"iana\",\n \"extensions\": [\"paw\"]\n },\n \"application/vnd.pcos\": {\n \"source\": \"iana\"\n },\n \"application/vnd.pg.format\": {\n \"source\": \"iana\",\n \"extensions\": [\"str\"]\n },\n \"application/vnd.pg.osasli\": {\n \"source\": \"iana\",\n \"extensions\": [\"ei6\"]\n },\n \"application/vnd.piaccess.application-licence\": {\n \"source\": \"iana\"\n },\n \"application/vnd.picsel\": {\n \"source\": \"iana\",\n \"extensions\": [\"efif\"]\n },\n \"application/vnd.pmi.widget\": {\n \"source\": \"iana\",\n \"extensions\": [\"wg\"]\n },\n \"application/vnd.poc.group-advertisement+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.pocketlearn\": {\n \"source\": \"iana\",\n \"extensions\": [\"plf\"]\n },\n \"application/vnd.powerbuilder6\": {\n \"source\": \"iana\",\n \"extensions\": [\"pbd\"]\n },\n \"application/vnd.powerbuilder6-s\": {\n \"source\": \"iana\"\n },\n \"application/vnd.powerbuilder7\": {\n \"source\": \"iana\"\n },\n \"application/vnd.powerbuilder7-s\": {\n \"source\": \"iana\"\n },\n \"application/vnd.powerbuilder75\": {\n \"source\": \"iana\"\n },\n \"application/vnd.powerbuilder75-s\": {\n \"source\": \"iana\"\n },\n \"application/vnd.preminet\": {\n \"source\": \"iana\"\n },\n \"application/vnd.previewsystems.box\": {\n \"source\": \"iana\",\n \"extensions\": [\"box\"]\n },\n \"application/vnd.proteus.magazine\": {\n \"source\": \"iana\",\n \"extensions\": [\"mgz\"]\n },\n \"application/vnd.psfs\": {\n \"source\": \"iana\"\n },\n \"application/vnd.publishare-delta-tree\": {\n \"source\": \"iana\",\n \"extensions\": [\"qps\"]\n },\n \"application/vnd.pvi.ptid1\": {\n \"source\": \"iana\",\n \"extensions\": [\"ptid\"]\n },\n \"application/vnd.pwg-multiplexed\": {\n \"source\": \"iana\"\n },\n \"application/vnd.pwg-xhtml-print+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.qualcomm.brew-app-res\": {\n \"source\": \"iana\"\n },\n \"application/vnd.quarantainenet\": {\n \"source\": \"iana\"\n },\n \"application/vnd.quark.quarkxpress\": {\n \"source\": \"iana\",\n \"extensions\": [\"qxd\",\"qxt\",\"qwd\",\"qwt\",\"qxl\",\"qxb\"]\n },\n \"application/vnd.quobject-quoxdocument\": {\n \"source\": \"iana\"\n },\n \"application/vnd.radisys.moml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.radisys.msml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.radisys.msml-audit+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.radisys.msml-audit-conf+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.radisys.msml-audit-conn+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.radisys.msml-audit-dialog+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.radisys.msml-audit-stream+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.radisys.msml-conf+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.radisys.msml-dialog+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.radisys.msml-dialog-base+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.radisys.msml-dialog-fax-detect+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.radisys.msml-dialog-fax-sendrecv+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.radisys.msml-dialog-group+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.radisys.msml-dialog-speech+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.radisys.msml-dialog-transform+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.rainstor.data\": {\n \"source\": \"iana\"\n },\n \"application/vnd.rapid\": {\n \"source\": \"iana\"\n },\n \"application/vnd.rar\": {\n \"source\": \"iana\",\n \"extensions\": [\"rar\"]\n },\n \"application/vnd.realvnc.bed\": {\n \"source\": \"iana\",\n \"extensions\": [\"bed\"]\n },\n \"application/vnd.recordare.musicxml\": {\n \"source\": \"iana\",\n \"extensions\": [\"mxl\"]\n },\n \"application/vnd.recordare.musicxml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"musicxml\"]\n },\n \"application/vnd.renlearn.rlprint\": {\n \"source\": \"iana\"\n },\n \"application/vnd.resilient.logic\": {\n \"source\": \"iana\"\n },\n \"application/vnd.restful+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.rig.cryptonote\": {\n \"source\": \"iana\",\n \"extensions\": [\"cryptonote\"]\n },\n \"application/vnd.rim.cod\": {\n \"source\": \"apache\",\n \"extensions\": [\"cod\"]\n },\n \"application/vnd.rn-realmedia\": {\n \"source\": \"apache\",\n \"extensions\": [\"rm\"]\n },\n \"application/vnd.rn-realmedia-vbr\": {\n \"source\": \"apache\",\n \"extensions\": [\"rmvb\"]\n },\n \"application/vnd.route66.link66+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"link66\"]\n },\n \"application/vnd.rs-274x\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ruckus.download\": {\n \"source\": \"iana\"\n },\n \"application/vnd.s3sms\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sailingtracker.track\": {\n \"source\": \"iana\",\n \"extensions\": [\"st\"]\n },\n \"application/vnd.sar\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sbm.cid\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sbm.mid2\": {\n \"source\": \"iana\"\n },\n \"application/vnd.scribus\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.3df\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.csf\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.doc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.eml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.mht\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.net\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.ppt\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.tiff\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.xls\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealedmedia.softseal.html\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealedmedia.softseal.pdf\": {\n \"source\": \"iana\"\n },\n \"application/vnd.seemail\": {\n \"source\": \"iana\",\n \"extensions\": [\"see\"]\n },\n \"application/vnd.seis+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.sema\": {\n \"source\": \"iana\",\n \"extensions\": [\"sema\"]\n },\n \"application/vnd.semd\": {\n \"source\": \"iana\",\n \"extensions\": [\"semd\"]\n },\n \"application/vnd.semf\": {\n \"source\": \"iana\",\n \"extensions\": [\"semf\"]\n },\n \"application/vnd.shade-save-file\": {\n \"source\": \"iana\"\n },\n \"application/vnd.shana.informed.formdata\": {\n \"source\": \"iana\",\n \"extensions\": [\"ifm\"]\n },\n \"application/vnd.shana.informed.formtemplate\": {\n \"source\": \"iana\",\n \"extensions\": [\"itp\"]\n },\n \"application/vnd.shana.informed.interchange\": {\n \"source\": \"iana\",\n \"extensions\": [\"iif\"]\n },\n \"application/vnd.shana.informed.package\": {\n \"source\": \"iana\",\n \"extensions\": [\"ipk\"]\n },\n \"application/vnd.shootproof+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.shopkick+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.shp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.shx\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sigrok.session\": {\n \"source\": \"iana\"\n },\n \"application/vnd.simtech-mindmapper\": {\n \"source\": \"iana\",\n \"extensions\": [\"twd\",\"twds\"]\n },\n \"application/vnd.siren+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.smaf\": {\n \"source\": \"iana\",\n \"extensions\": [\"mmf\"]\n },\n \"application/vnd.smart.notebook\": {\n \"source\": \"iana\"\n },\n \"application/vnd.smart.teacher\": {\n \"source\": \"iana\",\n \"extensions\": [\"teacher\"]\n },\n \"application/vnd.snesdev-page-table\": {\n \"source\": \"iana\"\n },\n \"application/vnd.software602.filler.form+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"fo\"]\n },\n \"application/vnd.software602.filler.form-xml-zip\": {\n \"source\": \"iana\"\n },\n \"application/vnd.solent.sdkm+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"sdkm\",\"sdkd\"]\n },\n \"application/vnd.spotfire.dxp\": {\n \"source\": \"iana\",\n \"extensions\": [\"dxp\"]\n },\n \"application/vnd.spotfire.sfs\": {\n \"source\": \"iana\",\n \"extensions\": [\"sfs\"]\n },\n \"application/vnd.sqlite3\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sss-cod\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sss-dtf\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sss-ntf\": {\n \"source\": \"iana\"\n },\n \"application/vnd.stardivision.calc\": {\n \"source\": \"apache\",\n \"extensions\": [\"sdc\"]\n },\n \"application/vnd.stardivision.draw\": {\n \"source\": \"apache\",\n \"extensions\": [\"sda\"]\n },\n \"application/vnd.stardivision.impress\": {\n \"source\": \"apache\",\n \"extensions\": [\"sdd\"]\n },\n \"application/vnd.stardivision.math\": {\n \"source\": \"apache\",\n \"extensions\": [\"smf\"]\n },\n \"application/vnd.stardivision.writer\": {\n \"source\": \"apache\",\n \"extensions\": [\"sdw\",\"vor\"]\n },\n \"application/vnd.stardivision.writer-global\": {\n \"source\": \"apache\",\n \"extensions\": [\"sgl\"]\n },\n \"application/vnd.stepmania.package\": {\n \"source\": \"iana\",\n \"extensions\": [\"smzip\"]\n },\n \"application/vnd.stepmania.stepchart\": {\n \"source\": \"iana\",\n \"extensions\": [\"sm\"]\n },\n \"application/vnd.street-stream\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sun.wadl+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"wadl\"]\n },\n \"application/vnd.sun.xml.calc\": {\n \"source\": \"apache\",\n \"extensions\": [\"sxc\"]\n },\n \"application/vnd.sun.xml.calc.template\": {\n \"source\": \"apache\",\n \"extensions\": [\"stc\"]\n },\n \"application/vnd.sun.xml.draw\": {\n \"source\": \"apache\",\n \"extensions\": [\"sxd\"]\n },\n \"application/vnd.sun.xml.draw.template\": {\n \"source\": \"apache\",\n \"extensions\": [\"std\"]\n },\n \"application/vnd.sun.xml.impress\": {\n \"source\": \"apache\",\n \"extensions\": [\"sxi\"]\n },\n \"application/vnd.sun.xml.impress.template\": {\n \"source\": \"apache\",\n \"extensions\": [\"sti\"]\n },\n \"application/vnd.sun.xml.math\": {\n \"source\": \"apache\",\n \"extensions\": [\"sxm\"]\n },\n \"application/vnd.sun.xml.writer\": {\n \"source\": \"apache\",\n \"extensions\": [\"sxw\"]\n },\n \"application/vnd.sun.xml.writer.global\": {\n \"source\": \"apache\",\n \"extensions\": [\"sxg\"]\n },\n \"application/vnd.sun.xml.writer.template\": {\n \"source\": \"apache\",\n \"extensions\": [\"stw\"]\n },\n \"application/vnd.sus-calendar\": {\n \"source\": \"iana\",\n \"extensions\": [\"sus\",\"susp\"]\n },\n \"application/vnd.svd\": {\n \"source\": \"iana\",\n \"extensions\": [\"svd\"]\n },\n \"application/vnd.swiftview-ics\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sycle+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.syft+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.symbian.install\": {\n \"source\": \"apache\",\n \"extensions\": [\"sis\",\"sisx\"]\n },\n \"application/vnd.syncml+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true,\n \"extensions\": [\"xsm\"]\n },\n \"application/vnd.syncml.dm+wbxml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"extensions\": [\"bdm\"]\n },\n \"application/vnd.syncml.dm+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true,\n \"extensions\": [\"xdm\"]\n },\n \"application/vnd.syncml.dm.notification\": {\n \"source\": \"iana\"\n },\n \"application/vnd.syncml.dmddf+wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.syncml.dmddf+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true,\n \"extensions\": [\"ddf\"]\n },\n \"application/vnd.syncml.dmtnds+wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.syncml.dmtnds+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/vnd.syncml.ds.notification\": {\n \"source\": \"iana\"\n },\n \"application/vnd.tableschema+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.tao.intent-module-archive\": {\n \"source\": \"iana\",\n \"extensions\": [\"tao\"]\n },\n \"application/vnd.tcpdump.pcap\": {\n \"source\": \"iana\",\n \"extensions\": [\"pcap\",\"cap\",\"dmp\"]\n },\n \"application/vnd.think-cell.ppttc+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.tmd.mediaflex.api+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.tml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.tmobile-livetv\": {\n \"source\": \"iana\",\n \"extensions\": [\"tmo\"]\n },\n \"application/vnd.tri.onesource\": {\n \"source\": \"iana\"\n },\n \"application/vnd.trid.tpt\": {\n \"source\": \"iana\",\n \"extensions\": [\"tpt\"]\n },\n \"application/vnd.triscape.mxs\": {\n \"source\": \"iana\",\n \"extensions\": [\"mxs\"]\n },\n \"application/vnd.trueapp\": {\n \"source\": \"iana\",\n \"extensions\": [\"tra\"]\n },\n \"application/vnd.truedoc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ubisoft.webplayer\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ufdl\": {\n \"source\": \"iana\",\n \"extensions\": [\"ufd\",\"ufdl\"]\n },\n \"application/vnd.uiq.theme\": {\n \"source\": \"iana\",\n \"extensions\": [\"utz\"]\n },\n \"application/vnd.umajin\": {\n \"source\": \"iana\",\n \"extensions\": [\"umj\"]\n },\n \"application/vnd.unity\": {\n \"source\": \"iana\",\n \"extensions\": [\"unityweb\"]\n },\n \"application/vnd.uoml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"uoml\"]\n },\n \"application/vnd.uplanet.alert\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.alert-wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.bearer-choice\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.bearer-choice-wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.cacheop\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.cacheop-wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.channel\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.channel-wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.list\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.list-wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.listcmd\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.listcmd-wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.signal\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uri-map\": {\n \"source\": \"iana\"\n },\n \"application/vnd.valve.source.material\": {\n \"source\": \"iana\"\n },\n \"application/vnd.vcx\": {\n \"source\": \"iana\",\n \"extensions\": [\"vcx\"]\n },\n \"application/vnd.vd-study\": {\n \"source\": \"iana\"\n },\n \"application/vnd.vectorworks\": {\n \"source\": \"iana\"\n },\n \"application/vnd.vel+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.verimatrix.vcas\": {\n \"source\": \"iana\"\n },\n \"application/vnd.veritone.aion+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.veryant.thin\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ves.encrypted\": {\n \"source\": \"iana\"\n },\n \"application/vnd.vidsoft.vidconference\": {\n \"source\": \"iana\"\n },\n \"application/vnd.visio\": {\n \"source\": \"iana\",\n \"extensions\": [\"vsd\",\"vst\",\"vss\",\"vsw\"]\n },\n \"application/vnd.visionary\": {\n \"source\": \"iana\",\n \"extensions\": [\"vis\"]\n },\n \"application/vnd.vividence.scriptfile\": {\n \"source\": \"iana\"\n },\n \"application/vnd.vsf\": {\n \"source\": \"iana\",\n \"extensions\": [\"vsf\"]\n },\n \"application/vnd.wap.sic\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wap.slc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wap.wbxml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"extensions\": [\"wbxml\"]\n },\n \"application/vnd.wap.wmlc\": {\n \"source\": \"iana\",\n \"extensions\": [\"wmlc\"]\n },\n \"application/vnd.wap.wmlscriptc\": {\n \"source\": \"iana\",\n \"extensions\": [\"wmlsc\"]\n },\n \"application/vnd.webturbo\": {\n \"source\": \"iana\",\n \"extensions\": [\"wtb\"]\n },\n \"application/vnd.wfa.dpp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wfa.p2p\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wfa.wsc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.windows.devicepairing\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wmc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wmf.bootstrap\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wolfram.mathematica\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wolfram.mathematica.package\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wolfram.player\": {\n \"source\": \"iana\",\n \"extensions\": [\"nbp\"]\n },\n \"application/vnd.wordperfect\": {\n \"source\": \"iana\",\n \"extensions\": [\"wpd\"]\n },\n \"application/vnd.wqd\": {\n \"source\": \"iana\",\n \"extensions\": [\"wqd\"]\n },\n \"application/vnd.wrq-hp3000-labelled\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wt.stf\": {\n \"source\": \"iana\",\n \"extensions\": [\"stf\"]\n },\n \"application/vnd.wv.csp+wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wv.csp+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.wv.ssp+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.xacml+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.xara\": {\n \"source\": \"iana\",\n \"extensions\": [\"xar\"]\n },\n \"application/vnd.xfdl\": {\n \"source\": \"iana\",\n \"extensions\": [\"xfdl\"]\n },\n \"application/vnd.xfdl.webform\": {\n \"source\": \"iana\"\n },\n \"application/vnd.xmi+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.xmpie.cpkg\": {\n \"source\": \"iana\"\n },\n \"application/vnd.xmpie.dpkg\": {\n \"source\": \"iana\"\n },\n \"application/vnd.xmpie.plan\": {\n \"source\": \"iana\"\n },\n \"application/vnd.xmpie.ppkg\": {\n \"source\": \"iana\"\n },\n \"application/vnd.xmpie.xlim\": {\n \"source\": \"iana\"\n },\n \"application/vnd.yamaha.hv-dic\": {\n \"source\": \"iana\",\n \"extensions\": [\"hvd\"]\n },\n \"application/vnd.yamaha.hv-script\": {\n \"source\": \"iana\",\n \"extensions\": [\"hvs\"]\n },\n \"application/vnd.yamaha.hv-voice\": {\n \"source\": \"iana\",\n \"extensions\": [\"hvp\"]\n },\n \"application/vnd.yamaha.openscoreformat\": {\n \"source\": \"iana\",\n \"extensions\": [\"osf\"]\n },\n \"application/vnd.yamaha.openscoreformat.osfpvg+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"osfpvg\"]\n },\n \"application/vnd.yamaha.remote-setup\": {\n \"source\": \"iana\"\n },\n \"application/vnd.yamaha.smaf-audio\": {\n \"source\": \"iana\",\n \"extensions\": [\"saf\"]\n },\n \"application/vnd.yamaha.smaf-phrase\": {\n \"source\": \"iana\",\n \"extensions\": [\"spf\"]\n },\n \"application/vnd.yamaha.through-ngn\": {\n \"source\": \"iana\"\n },\n \"application/vnd.yamaha.tunnel-udpencap\": {\n \"source\": \"iana\"\n },\n \"application/vnd.yaoweme\": {\n \"source\": \"iana\"\n },\n \"application/vnd.yellowriver-custom-menu\": {\n \"source\": \"iana\",\n \"extensions\": [\"cmp\"]\n },\n \"application/vnd.youtube.yt\": {\n \"source\": \"iana\"\n },\n \"application/vnd.zul\": {\n \"source\": \"iana\",\n \"extensions\": [\"zir\",\"zirz\"]\n },\n \"application/vnd.zzazz.deck+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"zaz\"]\n },\n \"application/voicexml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"vxml\"]\n },\n \"application/voucher-cms+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vq-rtcpxr\": {\n \"source\": \"iana\"\n },\n \"application/wasm\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"wasm\"]\n },\n \"application/watcherinfo+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"wif\"]\n },\n \"application/webpush-options+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/whoispp-query\": {\n \"source\": \"iana\"\n },\n \"application/whoispp-response\": {\n \"source\": \"iana\"\n },\n \"application/widget\": {\n \"source\": \"iana\",\n \"extensions\": [\"wgt\"]\n },\n \"application/winhlp\": {\n \"source\": \"apache\",\n \"extensions\": [\"hlp\"]\n },\n \"application/wita\": {\n \"source\": \"iana\"\n },\n \"application/wordperfect5.1\": {\n \"source\": \"iana\"\n },\n \"application/wsdl+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"wsdl\"]\n },\n \"application/wspolicy+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"wspolicy\"]\n },\n \"application/x-7z-compressed\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"7z\"]\n },\n \"application/x-abiword\": {\n \"source\": \"apache\",\n \"extensions\": [\"abw\"]\n },\n \"application/x-ace-compressed\": {\n \"source\": \"apache\",\n \"extensions\": [\"ace\"]\n },\n \"application/x-amf\": {\n \"source\": \"apache\"\n },\n \"application/x-apple-diskimage\": {\n \"source\": \"apache\",\n \"extensions\": [\"dmg\"]\n },\n \"application/x-arj\": {\n \"compressible\": false,\n \"extensions\": [\"arj\"]\n },\n \"application/x-authorware-bin\": {\n \"source\": \"apache\",\n \"extensions\": [\"aab\",\"x32\",\"u32\",\"vox\"]\n },\n \"application/x-authorware-map\": {\n \"source\": \"apache\",\n \"extensions\": [\"aam\"]\n },\n \"application/x-authorware-seg\": {\n \"source\": \"apache\",\n \"extensions\": [\"aas\"]\n },\n \"application/x-bcpio\": {\n \"source\": \"apache\",\n \"extensions\": [\"bcpio\"]\n },\n \"application/x-bdoc\": {\n \"compressible\": false,\n \"extensions\": [\"bdoc\"]\n },\n \"application/x-bittorrent\": {\n \"source\": \"apache\",\n \"extensions\": [\"torrent\"]\n },\n \"application/x-blorb\": {\n \"source\": \"apache\",\n \"extensions\": [\"blb\",\"blorb\"]\n },\n \"application/x-bzip\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"bz\"]\n },\n \"application/x-bzip2\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"bz2\",\"boz\"]\n },\n \"application/x-cbr\": {\n \"source\": \"apache\",\n \"extensions\": [\"cbr\",\"cba\",\"cbt\",\"cbz\",\"cb7\"]\n },\n \"application/x-cdlink\": {\n \"source\": \"apache\",\n \"extensions\": [\"vcd\"]\n },\n \"application/x-cfs-compressed\": {\n \"source\": \"apache\",\n \"extensions\": [\"cfs\"]\n },\n \"application/x-chat\": {\n \"source\": \"apache\",\n \"extensions\": [\"chat\"]\n },\n \"application/x-chess-pgn\": {\n \"source\": \"apache\",\n \"extensions\": [\"pgn\"]\n },\n \"application/x-chrome-extension\": {\n \"extensions\": [\"crx\"]\n },\n \"application/x-cocoa\": {\n \"source\": \"nginx\",\n \"extensions\": [\"cco\"]\n },\n \"application/x-compress\": {\n \"source\": \"apache\"\n },\n \"application/x-conference\": {\n \"source\": \"apache\",\n \"extensions\": [\"nsc\"]\n },\n \"application/x-cpio\": {\n \"source\": \"apache\",\n \"extensions\": [\"cpio\"]\n },\n \"application/x-csh\": {\n \"source\": \"apache\",\n \"extensions\": [\"csh\"]\n },\n \"application/x-deb\": {\n \"compressible\": false\n },\n \"application/x-debian-package\": {\n \"source\": \"apache\",\n \"extensions\": [\"deb\",\"udeb\"]\n },\n \"application/x-dgc-compressed\": {\n \"source\": \"apache\",\n \"extensions\": [\"dgc\"]\n },\n \"application/x-director\": {\n \"source\": \"apache\",\n \"extensions\": [\"dir\",\"dcr\",\"dxr\",\"cst\",\"cct\",\"cxt\",\"w3d\",\"fgd\",\"swa\"]\n },\n \"application/x-doom\": {\n \"source\": \"apache\",\n \"extensions\": [\"wad\"]\n },\n \"application/x-dtbncx+xml\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"ncx\"]\n },\n \"application/x-dtbook+xml\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"dtb\"]\n },\n \"application/x-dtbresource+xml\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"res\"]\n },\n \"application/x-dvi\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"dvi\"]\n },\n \"application/x-envoy\": {\n \"source\": \"apache\",\n \"extensions\": [\"evy\"]\n },\n \"application/x-eva\": {\n \"source\": \"apache\",\n \"extensions\": [\"eva\"]\n },\n \"application/x-font-bdf\": {\n \"source\": \"apache\",\n \"extensions\": [\"bdf\"]\n },\n \"application/x-font-dos\": {\n \"source\": \"apache\"\n },\n \"application/x-font-framemaker\": {\n \"source\": \"apache\"\n },\n \"application/x-font-ghostscript\": {\n \"source\": \"apache\",\n \"extensions\": [\"gsf\"]\n },\n \"application/x-font-libgrx\": {\n \"source\": \"apache\"\n },\n \"application/x-font-linux-psf\": {\n \"source\": \"apache\",\n \"extensions\": [\"psf\"]\n },\n \"application/x-font-pcf\": {\n \"source\": \"apache\",\n \"extensions\": [\"pcf\"]\n },\n \"application/x-font-snf\": {\n \"source\": \"apache\",\n \"extensions\": [\"snf\"]\n },\n \"application/x-font-speedo\": {\n \"source\": \"apache\"\n },\n \"application/x-font-sunos-news\": {\n \"source\": \"apache\"\n },\n \"application/x-font-type1\": {\n \"source\": \"apache\",\n \"extensions\": [\"pfa\",\"pfb\",\"pfm\",\"afm\"]\n },\n \"application/x-font-vfont\": {\n \"source\": \"apache\"\n },\n \"application/x-freearc\": {\n \"source\": \"apache\",\n \"extensions\": [\"arc\"]\n },\n \"application/x-futuresplash\": {\n \"source\": \"apache\",\n \"extensions\": [\"spl\"]\n },\n \"application/x-gca-compressed\": {\n \"source\": \"apache\",\n \"extensions\": [\"gca\"]\n },\n \"application/x-glulx\": {\n \"source\": \"apache\",\n \"extensions\": [\"ulx\"]\n },\n \"application/x-gnumeric\": {\n \"source\": \"apache\",\n \"extensions\": [\"gnumeric\"]\n },\n \"application/x-gramps-xml\": {\n \"source\": \"apache\",\n \"extensions\": [\"gramps\"]\n },\n \"application/x-gtar\": {\n \"source\": \"apache\",\n \"extensions\": [\"gtar\"]\n },\n \"application/x-gzip\": {\n \"source\": \"apache\"\n },\n \"application/x-hdf\": {\n \"source\": \"apache\",\n \"extensions\": [\"hdf\"]\n },\n \"application/x-httpd-php\": {\n \"compressible\": true,\n \"extensions\": [\"php\"]\n },\n \"application/x-install-instructions\": {\n \"source\": \"apache\",\n \"extensions\": [\"install\"]\n },\n \"application/x-iso9660-image\": {\n \"source\": \"apache\",\n \"extensions\": [\"iso\"]\n },\n \"application/x-iwork-keynote-sffkey\": {\n \"extensions\": [\"key\"]\n },\n \"application/x-iwork-numbers-sffnumbers\": {\n \"extensions\": [\"numbers\"]\n },\n \"application/x-iwork-pages-sffpages\": {\n \"extensions\": [\"pages\"]\n },\n \"application/x-java-archive-diff\": {\n \"source\": \"nginx\",\n \"extensions\": [\"jardiff\"]\n },\n \"application/x-java-jnlp-file\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"jnlp\"]\n },\n \"application/x-javascript\": {\n \"compressible\": true\n },\n \"application/x-keepass2\": {\n \"extensions\": [\"kdbx\"]\n },\n \"application/x-latex\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"latex\"]\n },\n \"application/x-lua-bytecode\": {\n \"extensions\": [\"luac\"]\n },\n \"application/x-lzh-compressed\": {\n \"source\": \"apache\",\n \"extensions\": [\"lzh\",\"lha\"]\n },\n \"application/x-makeself\": {\n \"source\": \"nginx\",\n \"extensions\": [\"run\"]\n },\n \"application/x-mie\": {\n \"source\": \"apache\",\n \"extensions\": [\"mie\"]\n },\n \"application/x-mobipocket-ebook\": {\n \"source\": \"apache\",\n \"extensions\": [\"prc\",\"mobi\"]\n },\n \"application/x-mpegurl\": {\n \"compressible\": false\n },\n \"application/x-ms-application\": {\n \"source\": \"apache\",\n \"extensions\": [\"application\"]\n },\n \"application/x-ms-shortcut\": {\n \"source\": \"apache\",\n \"extensions\": [\"lnk\"]\n },\n \"application/x-ms-wmd\": {\n \"source\": \"apache\",\n \"extensions\": [\"wmd\"]\n },\n \"application/x-ms-wmz\": {\n \"source\": \"apache\",\n \"extensions\": [\"wmz\"]\n },\n \"application/x-ms-xbap\": {\n \"source\": \"apache\",\n \"extensions\": [\"xbap\"]\n },\n \"application/x-msaccess\": {\n \"source\": \"apache\",\n \"extensions\": [\"mdb\"]\n },\n \"application/x-msbinder\": {\n \"source\": \"apache\",\n \"extensions\": [\"obd\"]\n },\n \"application/x-mscardfile\": {\n \"source\": \"apache\",\n \"extensions\": [\"crd\"]\n },\n \"application/x-msclip\": {\n \"source\": \"apache\",\n \"extensions\": [\"clp\"]\n },\n \"application/x-msdos-program\": {\n \"extensions\": [\"exe\"]\n },\n \"application/x-msdownload\": {\n \"source\": \"apache\",\n \"extensions\": [\"exe\",\"dll\",\"com\",\"bat\",\"msi\"]\n },\n \"application/x-msmediaview\": {\n \"source\": \"apache\",\n \"extensions\": [\"mvb\",\"m13\",\"m14\"]\n },\n \"application/x-msmetafile\": {\n \"source\": \"apache\",\n \"extensions\": [\"wmf\",\"wmz\",\"emf\",\"emz\"]\n },\n \"application/x-msmoney\": {\n \"source\": \"apache\",\n \"extensions\": [\"mny\"]\n },\n \"application/x-mspublisher\": {\n \"source\": \"apache\",\n \"extensions\": [\"pub\"]\n },\n \"application/x-msschedule\": {\n \"source\": \"apache\",\n \"extensions\": [\"scd\"]\n },\n \"application/x-msterminal\": {\n \"source\": \"apache\",\n \"extensions\": [\"trm\"]\n },\n \"application/x-mswrite\": {\n \"source\": \"apache\",\n \"extensions\": [\"wri\"]\n },\n \"application/x-netcdf\": {\n \"source\": \"apache\",\n \"extensions\": [\"nc\",\"cdf\"]\n },\n \"application/x-ns-proxy-autoconfig\": {\n \"compressible\": true,\n \"extensions\": [\"pac\"]\n },\n \"application/x-nzb\": {\n \"source\": \"apache\",\n \"extensions\": [\"nzb\"]\n },\n \"application/x-perl\": {\n \"source\": \"nginx\",\n \"extensions\": [\"pl\",\"pm\"]\n },\n \"application/x-pilot\": {\n \"source\": \"nginx\",\n \"extensions\": [\"prc\",\"pdb\"]\n },\n \"application/x-pkcs12\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"p12\",\"pfx\"]\n },\n \"application/x-pkcs7-certificates\": {\n \"source\": \"apache\",\n \"extensions\": [\"p7b\",\"spc\"]\n },\n \"application/x-pkcs7-certreqresp\": {\n \"source\": \"apache\",\n \"extensions\": [\"p7r\"]\n },\n \"application/x-pki-message\": {\n \"source\": \"iana\"\n },\n \"application/x-rar-compressed\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"rar\"]\n },\n \"application/x-redhat-package-manager\": {\n \"source\": \"nginx\",\n \"extensions\": [\"rpm\"]\n },\n \"application/x-research-info-systems\": {\n \"source\": \"apache\",\n \"extensions\": [\"ris\"]\n },\n \"application/x-sea\": {\n \"source\": \"nginx\",\n \"extensions\": [\"sea\"]\n },\n \"application/x-sh\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"sh\"]\n },\n \"application/x-shar\": {\n \"source\": \"apache\",\n \"extensions\": [\"shar\"]\n },\n \"application/x-shockwave-flash\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"swf\"]\n },\n \"application/x-silverlight-app\": {\n \"source\": \"apache\",\n \"extensions\": [\"xap\"]\n },\n \"application/x-sql\": {\n \"source\": \"apache\",\n \"extensions\": [\"sql\"]\n },\n \"application/x-stuffit\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"sit\"]\n },\n \"application/x-stuffitx\": {\n \"source\": \"apache\",\n \"extensions\": [\"sitx\"]\n },\n \"application/x-subrip\": {\n \"source\": \"apache\",\n \"extensions\": [\"srt\"]\n },\n \"application/x-sv4cpio\": {\n \"source\": \"apache\",\n \"extensions\": [\"sv4cpio\"]\n },\n \"application/x-sv4crc\": {\n \"source\": \"apache\",\n \"extensions\": [\"sv4crc\"]\n },\n \"application/x-t3vm-image\": {\n \"source\": \"apache\",\n \"extensions\": [\"t3\"]\n },\n \"application/x-tads\": {\n \"source\": \"apache\",\n \"extensions\": [\"gam\"]\n },\n \"application/x-tar\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"tar\"]\n },\n \"application/x-tcl\": {\n \"source\": \"apache\",\n \"extensions\": [\"tcl\",\"tk\"]\n },\n \"application/x-tex\": {\n \"source\": \"apache\",\n \"extensions\": [\"tex\"]\n },\n \"application/x-tex-tfm\": {\n \"source\": \"apache\",\n \"extensions\": [\"tfm\"]\n },\n \"application/x-texinfo\": {\n \"source\": \"apache\",\n \"extensions\": [\"texinfo\",\"texi\"]\n },\n \"application/x-tgif\": {\n \"source\": \"apache\",\n \"extensions\": [\"obj\"]\n },\n \"application/x-ustar\": {\n \"source\": \"apache\",\n \"extensions\": [\"ustar\"]\n },\n \"application/x-virtualbox-hdd\": {\n \"compressible\": true,\n \"extensions\": [\"hdd\"]\n },\n \"application/x-virtualbox-ova\": {\n \"compressible\": true,\n \"extensions\": [\"ova\"]\n },\n \"application/x-virtualbox-ovf\": {\n \"compressible\": true,\n \"extensions\": [\"ovf\"]\n },\n \"application/x-virtualbox-vbox\": {\n \"compressible\": true,\n \"extensions\": [\"vbox\"]\n },\n \"application/x-virtualbox-vbox-extpack\": {\n \"compressible\": false,\n \"extensions\": [\"vbox-extpack\"]\n },\n \"application/x-virtualbox-vdi\": {\n \"compressible\": true,\n \"extensions\": [\"vdi\"]\n },\n \"application/x-virtualbox-vhd\": {\n \"compressible\": true,\n \"extensions\": [\"vhd\"]\n },\n \"application/x-virtualbox-vmdk\": {\n \"compressible\": true,\n \"extensions\": [\"vmdk\"]\n },\n \"application/x-wais-source\": {\n \"source\": \"apache\",\n \"extensions\": [\"src\"]\n },\n \"application/x-web-app-manifest+json\": {\n \"compressible\": true,\n \"extensions\": [\"webapp\"]\n },\n \"application/x-www-form-urlencoded\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/x-x509-ca-cert\": {\n \"source\": \"iana\",\n \"extensions\": [\"der\",\"crt\",\"pem\"]\n },\n \"application/x-x509-ca-ra-cert\": {\n \"source\": \"iana\"\n },\n \"application/x-x509-next-ca-cert\": {\n \"source\": \"iana\"\n },\n \"application/x-xfig\": {\n \"source\": \"apache\",\n \"extensions\": [\"fig\"]\n },\n \"application/x-xliff+xml\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"xlf\"]\n },\n \"application/x-xpinstall\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"xpi\"]\n },\n \"application/x-xz\": {\n \"source\": \"apache\",\n \"extensions\": [\"xz\"]\n },\n \"application/x-zmachine\": {\n \"source\": \"apache\",\n \"extensions\": [\"z1\",\"z2\",\"z3\",\"z4\",\"z5\",\"z6\",\"z7\",\"z8\"]\n },\n \"application/x400-bp\": {\n \"source\": \"iana\"\n },\n \"application/xacml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/xaml+xml\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"xaml\"]\n },\n \"application/xcap-att+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xav\"]\n },\n \"application/xcap-caps+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xca\"]\n },\n \"application/xcap-diff+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xdf\"]\n },\n \"application/xcap-el+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xel\"]\n },\n \"application/xcap-error+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/xcap-ns+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xns\"]\n },\n \"application/xcon-conference-info+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/xcon-conference-info-diff+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/xenc+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xenc\"]\n },\n \"application/xhtml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xhtml\",\"xht\"]\n },\n \"application/xhtml-voice+xml\": {\n \"source\": \"apache\",\n \"compressible\": true\n },\n \"application/xliff+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xlf\"]\n },\n \"application/xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xml\",\"xsl\",\"xsd\",\"rng\"]\n },\n \"application/xml-dtd\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"dtd\"]\n },\n \"application/xml-external-parsed-entity\": {\n \"source\": \"iana\"\n },\n \"application/xml-patch+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/xmpp+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/xop+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xop\"]\n },\n \"application/xproc+xml\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"xpl\"]\n },\n \"application/xslt+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xsl\",\"xslt\"]\n },\n \"application/xspf+xml\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"xspf\"]\n },\n \"application/xv+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"mxml\",\"xhvml\",\"xvml\",\"xvm\"]\n },\n \"application/yang\": {\n \"source\": \"iana\",\n \"extensions\": [\"yang\"]\n },\n \"application/yang-data+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/yang-data+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/yang-patch+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/yang-patch+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/yin+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"yin\"]\n },\n \"application/zip\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"zip\"]\n },\n \"application/zlib\": {\n \"source\": \"iana\"\n },\n \"application/zstd\": {\n \"source\": \"iana\"\n },\n \"audio/1d-interleaved-parityfec\": {\n \"source\": \"iana\"\n },\n \"audio/32kadpcm\": {\n \"source\": \"iana\"\n },\n \"audio/3gpp\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"3gpp\"]\n },\n \"audio/3gpp2\": {\n \"source\": \"iana\"\n },\n \"audio/aac\": {\n \"source\": \"iana\"\n },\n \"audio/ac3\": {\n \"source\": \"iana\"\n },\n \"audio/adpcm\": {\n \"source\": \"apache\",\n \"extensions\": [\"adp\"]\n },\n \"audio/amr\": {\n \"source\": \"iana\",\n \"extensions\": [\"amr\"]\n },\n \"audio/amr-wb\": {\n \"source\": \"iana\"\n },\n \"audio/amr-wb+\": {\n \"source\": \"iana\"\n },\n \"audio/aptx\": {\n \"source\": \"iana\"\n },\n \"audio/asc\": {\n \"source\": \"iana\"\n },\n \"audio/atrac-advanced-lossless\": {\n \"source\": \"iana\"\n },\n \"audio/atrac-x\": {\n \"source\": \"iana\"\n },\n \"audio/atrac3\": {\n \"source\": \"iana\"\n },\n \"audio/basic\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"au\",\"snd\"]\n },\n \"audio/bv16\": {\n \"source\": \"iana\"\n },\n \"audio/bv32\": {\n \"source\": \"iana\"\n },\n \"audio/clearmode\": {\n \"source\": \"iana\"\n },\n \"audio/cn\": {\n \"source\": \"iana\"\n },\n \"audio/dat12\": {\n \"source\": \"iana\"\n },\n \"audio/dls\": {\n \"source\": \"iana\"\n },\n \"audio/dsr-es201108\": {\n \"source\": \"iana\"\n },\n \"audio/dsr-es202050\": {\n \"source\": \"iana\"\n },\n \"audio/dsr-es202211\": {\n \"source\": \"iana\"\n },\n \"audio/dsr-es202212\": {\n \"source\": \"iana\"\n },\n \"audio/dv\": {\n \"source\": \"iana\"\n },\n \"audio/dvi4\": {\n \"source\": \"iana\"\n },\n \"audio/eac3\": {\n \"source\": \"iana\"\n },\n \"audio/encaprtp\": {\n \"source\": \"iana\"\n },\n \"audio/evrc\": {\n \"source\": \"iana\"\n },\n \"audio/evrc-qcp\": {\n \"source\": \"iana\"\n },\n \"audio/evrc0\": {\n \"source\": \"iana\"\n },\n \"audio/evrc1\": {\n \"source\": \"iana\"\n },\n \"audio/evrcb\": {\n \"source\": \"iana\"\n },\n \"audio/evrcb0\": {\n \"source\": \"iana\"\n },\n \"audio/evrcb1\": {\n \"source\": \"iana\"\n },\n \"audio/evrcnw\": {\n \"source\": \"iana\"\n },\n \"audio/evrcnw0\": {\n \"source\": \"iana\"\n },\n \"audio/evrcnw1\": {\n \"source\": \"iana\"\n },\n \"audio/evrcwb\": {\n \"source\": \"iana\"\n },\n \"audio/evrcwb0\": {\n \"source\": \"iana\"\n },\n \"audio/evrcwb1\": {\n \"source\": \"iana\"\n },\n \"audio/evs\": {\n \"source\": \"iana\"\n },\n \"audio/flexfec\": {\n \"source\": \"iana\"\n },\n \"audio/fwdred\": {\n \"source\": \"iana\"\n },\n \"audio/g711-0\": {\n \"source\": \"iana\"\n },\n \"audio/g719\": {\n \"source\": \"iana\"\n },\n \"audio/g722\": {\n \"source\": \"iana\"\n },\n \"audio/g7221\": {\n \"source\": \"iana\"\n },\n \"audio/g723\": {\n \"source\": \"iana\"\n },\n \"audio/g726-16\": {\n \"source\": \"iana\"\n },\n \"audio/g726-24\": {\n \"source\": \"iana\"\n },\n \"audio/g726-32\": {\n \"source\": \"iana\"\n },\n \"audio/g726-40\": {\n \"source\": \"iana\"\n },\n \"audio/g728\": {\n \"source\": \"iana\"\n },\n \"audio/g729\": {\n \"source\": \"iana\"\n },\n \"audio/g7291\": {\n \"source\": \"iana\"\n },\n \"audio/g729d\": {\n \"source\": \"iana\"\n },\n \"audio/g729e\": {\n \"source\": \"iana\"\n },\n \"audio/gsm\": {\n \"source\": \"iana\"\n },\n \"audio/gsm-efr\": {\n \"source\": \"iana\"\n },\n \"audio/gsm-hr-08\": {\n \"source\": \"iana\"\n },\n \"audio/ilbc\": {\n \"source\": \"iana\"\n },\n \"audio/ip-mr_v2.5\": {\n \"source\": \"iana\"\n },\n \"audio/isac\": {\n \"source\": \"apache\"\n },\n \"audio/l16\": {\n \"source\": \"iana\"\n },\n \"audio/l20\": {\n \"source\": \"iana\"\n },\n \"audio/l24\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"audio/l8\": {\n \"source\": \"iana\"\n },\n \"audio/lpc\": {\n \"source\": \"iana\"\n },\n \"audio/melp\": {\n \"source\": \"iana\"\n },\n \"audio/melp1200\": {\n \"source\": \"iana\"\n },\n \"audio/melp2400\": {\n \"source\": \"iana\"\n },\n \"audio/melp600\": {\n \"source\": \"iana\"\n },\n \"audio/mhas\": {\n \"source\": \"iana\"\n },\n \"audio/midi\": {\n \"source\": \"apache\",\n \"extensions\": [\"mid\",\"midi\",\"kar\",\"rmi\"]\n },\n \"audio/mobile-xmf\": {\n \"source\": \"iana\",\n \"extensions\": [\"mxmf\"]\n },\n \"audio/mp3\": {\n \"compressible\": false,\n \"extensions\": [\"mp3\"]\n },\n \"audio/mp4\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"m4a\",\"mp4a\"]\n },\n \"audio/mp4a-latm\": {\n \"source\": \"iana\"\n },\n \"audio/mpa\": {\n \"source\": \"iana\"\n },\n \"audio/mpa-robust\": {\n \"source\": \"iana\"\n },\n \"audio/mpeg\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"mpga\",\"mp2\",\"mp2a\",\"mp3\",\"m2a\",\"m3a\"]\n },\n \"audio/mpeg4-generic\": {\n \"source\": \"iana\"\n },\n \"audio/musepack\": {\n \"source\": \"apache\"\n },\n \"audio/ogg\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"oga\",\"ogg\",\"spx\",\"opus\"]\n },\n \"audio/opus\": {\n \"source\": \"iana\"\n },\n \"audio/parityfec\": {\n \"source\": \"iana\"\n },\n \"audio/pcma\": {\n \"source\": \"iana\"\n },\n \"audio/pcma-wb\": {\n \"source\": \"iana\"\n },\n \"audio/pcmu\": {\n \"source\": \"iana\"\n },\n \"audio/pcmu-wb\": {\n \"source\": \"iana\"\n },\n \"audio/prs.sid\": {\n \"source\": \"iana\"\n },\n \"audio/qcelp\": {\n \"source\": \"iana\"\n },\n \"audio/raptorfec\": {\n \"source\": \"iana\"\n },\n \"audio/red\": {\n \"source\": \"iana\"\n },\n \"audio/rtp-enc-aescm128\": {\n \"source\": \"iana\"\n },\n \"audio/rtp-midi\": {\n \"source\": \"iana\"\n },\n \"audio/rtploopback\": {\n \"source\": \"iana\"\n },\n \"audio/rtx\": {\n \"source\": \"iana\"\n },\n \"audio/s3m\": {\n \"source\": \"apache\",\n \"extensions\": [\"s3m\"]\n },\n \"audio/scip\": {\n \"source\": \"iana\"\n },\n \"audio/silk\": {\n \"source\": \"apache\",\n \"extensions\": [\"sil\"]\n },\n \"audio/smv\": {\n \"source\": \"iana\"\n },\n \"audio/smv-qcp\": {\n \"source\": \"iana\"\n },\n \"audio/smv0\": {\n \"source\": \"iana\"\n },\n \"audio/sofa\": {\n \"source\": \"iana\"\n },\n \"audio/sp-midi\": {\n \"source\": \"iana\"\n },\n \"audio/speex\": {\n \"source\": \"iana\"\n },\n \"audio/t140c\": {\n \"source\": \"iana\"\n },\n \"audio/t38\": {\n \"source\": \"iana\"\n },\n \"audio/telephone-event\": {\n \"source\": \"iana\"\n },\n \"audio/tetra_acelp\": {\n \"source\": \"iana\"\n },\n \"audio/tetra_acelp_bb\": {\n \"source\": \"iana\"\n },\n \"audio/tone\": {\n \"source\": \"iana\"\n },\n \"audio/tsvcis\": {\n \"source\": \"iana\"\n },\n \"audio/uemclip\": {\n \"source\": \"iana\"\n },\n \"audio/ulpfec\": {\n \"source\": \"iana\"\n },\n \"audio/usac\": {\n \"source\": \"iana\"\n },\n \"audio/vdvi\": {\n \"source\": \"iana\"\n },\n \"audio/vmr-wb\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.3gpp.iufp\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.4sb\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.audiokoz\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.celp\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.cisco.nse\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.cmles.radio-events\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.cns.anp1\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.cns.inf1\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dece.audio\": {\n \"source\": \"iana\",\n \"extensions\": [\"uva\",\"uvva\"]\n },\n \"audio/vnd.digital-winds\": {\n \"source\": \"iana\",\n \"extensions\": [\"eol\"]\n },\n \"audio/vnd.dlna.adts\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dolby.heaac.1\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dolby.heaac.2\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dolby.mlp\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dolby.mps\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dolby.pl2\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dolby.pl2x\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dolby.pl2z\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dolby.pulse.1\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dra\": {\n \"source\": \"iana\",\n \"extensions\": [\"dra\"]\n },\n \"audio/vnd.dts\": {\n \"source\": \"iana\",\n \"extensions\": [\"dts\"]\n },\n \"audio/vnd.dts.hd\": {\n \"source\": \"iana\",\n \"extensions\": [\"dtshd\"]\n },\n \"audio/vnd.dts.uhd\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dvb.file\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.everad.plj\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.hns.audio\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.lucent.voice\": {\n \"source\": \"iana\",\n \"extensions\": [\"lvp\"]\n },\n \"audio/vnd.ms-playready.media.pya\": {\n \"source\": \"iana\",\n \"extensions\": [\"pya\"]\n },\n \"audio/vnd.nokia.mobile-xmf\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.nortel.vbk\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.nuera.ecelp4800\": {\n \"source\": \"iana\",\n \"extensions\": [\"ecelp4800\"]\n },\n \"audio/vnd.nuera.ecelp7470\": {\n \"source\": \"iana\",\n \"extensions\": [\"ecelp7470\"]\n },\n \"audio/vnd.nuera.ecelp9600\": {\n \"source\": \"iana\",\n \"extensions\": [\"ecelp9600\"]\n },\n \"audio/vnd.octel.sbc\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.presonus.multitrack\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.qcelp\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.rhetorex.32kadpcm\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.rip\": {\n \"source\": \"iana\",\n \"extensions\": [\"rip\"]\n },\n \"audio/vnd.rn-realaudio\": {\n \"compressible\": false\n },\n \"audio/vnd.sealedmedia.softseal.mpeg\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.vmx.cvsd\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.wave\": {\n \"compressible\": false\n },\n \"audio/vorbis\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"audio/vorbis-config\": {\n \"source\": \"iana\"\n },\n \"audio/wav\": {\n \"compressible\": false,\n \"extensions\": [\"wav\"]\n },\n \"audio/wave\": {\n \"compressible\": false,\n \"extensions\": [\"wav\"]\n },\n \"audio/webm\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"weba\"]\n },\n \"audio/x-aac\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"aac\"]\n },\n \"audio/x-aiff\": {\n \"source\": \"apache\",\n \"extensions\": [\"aif\",\"aiff\",\"aifc\"]\n },\n \"audio/x-caf\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"caf\"]\n },\n \"audio/x-flac\": {\n \"source\": \"apache\",\n \"extensions\": [\"flac\"]\n },\n \"audio/x-m4a\": {\n \"source\": \"nginx\",\n \"extensions\": [\"m4a\"]\n },\n \"audio/x-matroska\": {\n \"source\": \"apache\",\n \"extensions\": [\"mka\"]\n },\n \"audio/x-mpegurl\": {\n \"source\": \"apache\",\n \"extensions\": [\"m3u\"]\n },\n \"audio/x-ms-wax\": {\n \"source\": \"apache\",\n \"extensions\": [\"wax\"]\n },\n \"audio/x-ms-wma\": {\n \"source\": \"apache\",\n \"extensions\": [\"wma\"]\n },\n \"audio/x-pn-realaudio\": {\n \"source\": \"apache\",\n \"extensions\": [\"ram\",\"ra\"]\n },\n \"audio/x-pn-realaudio-plugin\": {\n \"source\": \"apache\",\n \"extensions\": [\"rmp\"]\n },\n \"audio/x-realaudio\": {\n \"source\": \"nginx\",\n \"extensions\": [\"ra\"]\n },\n \"audio/x-tta\": {\n \"source\": \"apache\"\n },\n \"audio/x-wav\": {\n \"source\": \"apache\",\n \"extensions\": [\"wav\"]\n },\n \"audio/xm\": {\n \"source\": \"apache\",\n \"extensions\": [\"xm\"]\n },\n \"chemical/x-cdx\": {\n \"source\": \"apache\",\n \"extensions\": [\"cdx\"]\n },\n \"chemical/x-cif\": {\n \"source\": \"apache\",\n \"extensions\": [\"cif\"]\n },\n \"chemical/x-cmdf\": {\n \"source\": \"apache\",\n \"extensions\": [\"cmdf\"]\n },\n \"chemical/x-cml\": {\n \"source\": \"apache\",\n \"extensions\": [\"cml\"]\n },\n \"chemical/x-csml\": {\n \"source\": \"apache\",\n \"extensions\": [\"csml\"]\n },\n \"chemical/x-pdb\": {\n \"source\": \"apache\"\n },\n \"chemical/x-xyz\": {\n \"source\": \"apache\",\n \"extensions\": [\"xyz\"]\n },\n \"font/collection\": {\n \"source\": \"iana\",\n \"extensions\": [\"ttc\"]\n },\n \"font/otf\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"otf\"]\n },\n \"font/sfnt\": {\n \"source\": \"iana\"\n },\n \"font/ttf\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"ttf\"]\n },\n \"font/woff\": {\n \"source\": \"iana\",\n \"extensions\": [\"woff\"]\n },\n \"font/woff2\": {\n \"source\": \"iana\",\n \"extensions\": [\"woff2\"]\n },\n \"image/aces\": {\n \"source\": \"iana\",\n \"extensions\": [\"exr\"]\n },\n \"image/apng\": {\n \"compressible\": false,\n \"extensions\": [\"apng\"]\n },\n \"image/avci\": {\n \"source\": \"iana\",\n \"extensions\": [\"avci\"]\n },\n \"image/avcs\": {\n \"source\": \"iana\",\n \"extensions\": [\"avcs\"]\n },\n \"image/avif\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"avif\"]\n },\n \"image/bmp\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"bmp\"]\n },\n \"image/cgm\": {\n \"source\": \"iana\",\n \"extensions\": [\"cgm\"]\n },\n \"image/dicom-rle\": {\n \"source\": \"iana\",\n \"extensions\": [\"drle\"]\n },\n \"image/emf\": {\n \"source\": \"iana\",\n \"extensions\": [\"emf\"]\n },\n \"image/fits\": {\n \"source\": \"iana\",\n \"extensions\": [\"fits\"]\n },\n \"image/g3fax\": {\n \"source\": \"iana\",\n \"extensions\": [\"g3\"]\n },\n \"image/gif\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"gif\"]\n },\n \"image/heic\": {\n \"source\": \"iana\",\n \"extensions\": [\"heic\"]\n },\n \"image/heic-sequence\": {\n \"source\": \"iana\",\n \"extensions\": [\"heics\"]\n },\n \"image/heif\": {\n \"source\": \"iana\",\n \"extensions\": [\"heif\"]\n },\n \"image/heif-sequence\": {\n \"source\": \"iana\",\n \"extensions\": [\"heifs\"]\n },\n \"image/hej2k\": {\n \"source\": \"iana\",\n \"extensions\": [\"hej2\"]\n },\n \"image/hsj2\": {\n \"source\": \"iana\",\n \"extensions\": [\"hsj2\"]\n },\n \"image/ief\": {\n \"source\": \"iana\",\n \"extensions\": [\"ief\"]\n },\n \"image/jls\": {\n \"source\": \"iana\",\n \"extensions\": [\"jls\"]\n },\n \"image/jp2\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"jp2\",\"jpg2\"]\n },\n \"image/jpeg\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"jpeg\",\"jpg\",\"jpe\"]\n },\n \"image/jph\": {\n \"source\": \"iana\",\n \"extensions\": [\"jph\"]\n },\n \"image/jphc\": {\n \"source\": \"iana\",\n \"extensions\": [\"jhc\"]\n },\n \"image/jpm\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"jpm\"]\n },\n \"image/jpx\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"jpx\",\"jpf\"]\n },\n \"image/jxr\": {\n \"source\": \"iana\",\n \"extensions\": [\"jxr\"]\n },\n \"image/jxra\": {\n \"source\": \"iana\",\n \"extensions\": [\"jxra\"]\n },\n \"image/jxrs\": {\n \"source\": \"iana\",\n \"extensions\": [\"jxrs\"]\n },\n \"image/jxs\": {\n \"source\": \"iana\",\n \"extensions\": [\"jxs\"]\n },\n \"image/jxsc\": {\n \"source\": \"iana\",\n \"extensions\": [\"jxsc\"]\n },\n \"image/jxsi\": {\n \"source\": \"iana\",\n \"extensions\": [\"jxsi\"]\n },\n \"image/jxss\": {\n \"source\": \"iana\",\n \"extensions\": [\"jxss\"]\n },\n \"image/ktx\": {\n \"source\": \"iana\",\n \"extensions\": [\"ktx\"]\n },\n \"image/ktx2\": {\n \"source\": \"iana\",\n \"extensions\": [\"ktx2\"]\n },\n \"image/naplps\": {\n \"source\": \"iana\"\n },\n \"image/pjpeg\": {\n \"compressible\": false\n },\n \"image/png\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"png\"]\n },\n \"image/prs.btif\": {\n \"source\": \"iana\",\n \"extensions\": [\"btif\"]\n },\n \"image/prs.pti\": {\n \"source\": \"iana\",\n \"extensions\": [\"pti\"]\n },\n \"image/pwg-raster\": {\n \"source\": \"iana\"\n },\n \"image/sgi\": {\n \"source\": \"apache\",\n \"extensions\": [\"sgi\"]\n },\n \"image/svg+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"svg\",\"svgz\"]\n },\n \"image/t38\": {\n \"source\": \"iana\",\n \"extensions\": [\"t38\"]\n },\n \"image/tiff\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"tif\",\"tiff\"]\n },\n \"image/tiff-fx\": {\n \"source\": \"iana\",\n \"extensions\": [\"tfx\"]\n },\n \"image/vnd.adobe.photoshop\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"psd\"]\n },\n \"image/vnd.airzip.accelerator.azv\": {\n \"source\": \"iana\",\n \"extensions\": [\"azv\"]\n },\n \"image/vnd.cns.inf2\": {\n \"source\": \"iana\"\n },\n \"image/vnd.dece.graphic\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvi\",\"uvvi\",\"uvg\",\"uvvg\"]\n },\n \"image/vnd.djvu\": {\n \"source\": \"iana\",\n \"extensions\": [\"djvu\",\"djv\"]\n },\n \"image/vnd.dvb.subtitle\": {\n \"source\": \"iana\",\n \"extensions\": [\"sub\"]\n },\n \"image/vnd.dwg\": {\n \"source\": \"iana\",\n \"extensions\": [\"dwg\"]\n },\n \"image/vnd.dxf\": {\n \"source\": \"iana\",\n \"extensions\": [\"dxf\"]\n },\n \"image/vnd.fastbidsheet\": {\n \"source\": \"iana\",\n \"extensions\": [\"fbs\"]\n },\n \"image/vnd.fpx\": {\n \"source\": \"iana\",\n \"extensions\": [\"fpx\"]\n },\n \"image/vnd.fst\": {\n \"source\": \"iana\",\n \"extensions\": [\"fst\"]\n },\n \"image/vnd.fujixerox.edmics-mmr\": {\n \"source\": \"iana\",\n \"extensions\": [\"mmr\"]\n },\n \"image/vnd.fujixerox.edmics-rlc\": {\n \"source\": \"iana\",\n \"extensions\": [\"rlc\"]\n },\n \"image/vnd.globalgraphics.pgb\": {\n \"source\": \"iana\"\n },\n \"image/vnd.microsoft.icon\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"ico\"]\n },\n \"image/vnd.mix\": {\n \"source\": \"iana\"\n },\n \"image/vnd.mozilla.apng\": {\n \"source\": \"iana\"\n },\n \"image/vnd.ms-dds\": {\n \"compressible\": true,\n \"extensions\": [\"dds\"]\n },\n \"image/vnd.ms-modi\": {\n \"source\": \"iana\",\n \"extensions\": [\"mdi\"]\n },\n \"image/vnd.ms-photo\": {\n \"source\": \"apache\",\n \"extensions\": [\"wdp\"]\n },\n \"image/vnd.net-fpx\": {\n \"source\": \"iana\",\n \"extensions\": [\"npx\"]\n },\n \"image/vnd.pco.b16\": {\n \"source\": \"iana\",\n \"extensions\": [\"b16\"]\n },\n \"image/vnd.radiance\": {\n \"source\": \"iana\"\n },\n \"image/vnd.sealed.png\": {\n \"source\": \"iana\"\n },\n \"image/vnd.sealedmedia.softseal.gif\": {\n \"source\": \"iana\"\n },\n \"image/vnd.sealedmedia.softseal.jpg\": {\n \"source\": \"iana\"\n },\n \"image/vnd.svf\": {\n \"source\": \"iana\"\n },\n \"image/vnd.tencent.tap\": {\n \"source\": \"iana\",\n \"extensions\": [\"tap\"]\n },\n \"image/vnd.valve.source.texture\": {\n \"source\": \"iana\",\n \"extensions\": [\"vtf\"]\n },\n \"image/vnd.wap.wbmp\": {\n \"source\": \"iana\",\n \"extensions\": [\"wbmp\"]\n },\n \"image/vnd.xiff\": {\n \"source\": \"iana\",\n \"extensions\": [\"xif\"]\n },\n \"image/vnd.zbrush.pcx\": {\n \"source\": \"iana\",\n \"extensions\": [\"pcx\"]\n },\n \"image/webp\": {\n \"source\": \"apache\",\n \"extensions\": [\"webp\"]\n },\n \"image/wmf\": {\n \"source\": \"iana\",\n \"extensions\": [\"wmf\"]\n },\n \"image/x-3ds\": {\n \"source\": \"apache\",\n \"extensions\": [\"3ds\"]\n },\n \"image/x-cmu-raster\": {\n \"source\": \"apache\",\n \"extensions\": [\"ras\"]\n },\n \"image/x-cmx\": {\n \"source\": \"apache\",\n \"extensions\": [\"cmx\"]\n },\n \"image/x-freehand\": {\n \"source\": \"apache\",\n \"extensions\": [\"fh\",\"fhc\",\"fh4\",\"fh5\",\"fh7\"]\n },\n \"image/x-icon\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"ico\"]\n },\n \"image/x-jng\": {\n \"source\": \"nginx\",\n \"extensions\": [\"jng\"]\n },\n \"image/x-mrsid-image\": {\n \"source\": \"apache\",\n \"extensions\": [\"sid\"]\n },\n \"image/x-ms-bmp\": {\n \"source\": \"nginx\",\n \"compressible\": true,\n \"extensions\": [\"bmp\"]\n },\n \"image/x-pcx\": {\n \"source\": \"apache\",\n \"extensions\": [\"pcx\"]\n },\n \"image/x-pict\": {\n \"source\": \"apache\",\n \"extensions\": [\"pic\",\"pct\"]\n },\n \"image/x-portable-anymap\": {\n \"source\": \"apache\",\n \"extensions\": [\"pnm\"]\n },\n \"image/x-portable-bitmap\": {\n \"source\": \"apache\",\n \"extensions\": [\"pbm\"]\n },\n \"image/x-portable-graymap\": {\n \"source\": \"apache\",\n \"extensions\": [\"pgm\"]\n },\n \"image/x-portable-pixmap\": {\n \"source\": \"apache\",\n \"extensions\": [\"ppm\"]\n },\n \"image/x-rgb\": {\n \"source\": \"apache\",\n \"extensions\": [\"rgb\"]\n },\n \"image/x-tga\": {\n \"source\": \"apache\",\n \"extensions\": [\"tga\"]\n },\n \"image/x-xbitmap\": {\n \"source\": \"apache\",\n \"extensions\": [\"xbm\"]\n },\n \"image/x-xcf\": {\n \"compressible\": false\n },\n \"image/x-xpixmap\": {\n \"source\": \"apache\",\n \"extensions\": [\"xpm\"]\n },\n \"image/x-xwindowdump\": {\n \"source\": \"apache\",\n \"extensions\": [\"xwd\"]\n },\n \"message/cpim\": {\n \"source\": \"iana\"\n },\n \"message/delivery-status\": {\n \"source\": \"iana\"\n },\n \"message/disposition-notification\": {\n \"source\": \"iana\",\n \"extensions\": [\n \"disposition-notification\"\n ]\n },\n \"message/external-body\": {\n \"source\": \"iana\"\n },\n \"message/feedback-report\": {\n \"source\": \"iana\"\n },\n \"message/global\": {\n \"source\": \"iana\",\n \"extensions\": [\"u8msg\"]\n },\n \"message/global-delivery-status\": {\n \"source\": \"iana\",\n \"extensions\": [\"u8dsn\"]\n },\n \"message/global-disposition-notification\": {\n \"source\": \"iana\",\n \"extensions\": [\"u8mdn\"]\n },\n \"message/global-headers\": {\n \"source\": \"iana\",\n \"extensions\": [\"u8hdr\"]\n },\n \"message/http\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"message/imdn+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"message/news\": {\n \"source\": \"iana\"\n },\n \"message/partial\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"message/rfc822\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"eml\",\"mime\"]\n },\n \"message/s-http\": {\n \"source\": \"iana\"\n },\n \"message/sip\": {\n \"source\": \"iana\"\n },\n \"message/sipfrag\": {\n \"source\": \"iana\"\n },\n \"message/tracking-status\": {\n \"source\": \"iana\"\n },\n \"message/vnd.si.simp\": {\n \"source\": \"iana\"\n },\n \"message/vnd.wfa.wsc\": {\n \"source\": \"iana\",\n \"extensions\": [\"wsc\"]\n },\n \"model/3mf\": {\n \"source\": \"iana\",\n \"extensions\": [\"3mf\"]\n },\n \"model/e57\": {\n \"source\": \"iana\"\n },\n \"model/gltf+json\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"gltf\"]\n },\n \"model/gltf-binary\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"glb\"]\n },\n \"model/iges\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"igs\",\"iges\"]\n },\n \"model/mesh\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"msh\",\"mesh\",\"silo\"]\n },\n \"model/mtl\": {\n \"source\": \"iana\",\n \"extensions\": [\"mtl\"]\n },\n \"model/obj\": {\n \"source\": \"iana\",\n \"extensions\": [\"obj\"]\n },\n \"model/step\": {\n \"source\": \"iana\"\n },\n \"model/step+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"stpx\"]\n },\n \"model/step+zip\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"stpz\"]\n },\n \"model/step-xml+zip\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"stpxz\"]\n },\n \"model/stl\": {\n \"source\": \"iana\",\n \"extensions\": [\"stl\"]\n },\n \"model/vnd.collada+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"dae\"]\n },\n \"model/vnd.dwf\": {\n \"source\": \"iana\",\n \"extensions\": [\"dwf\"]\n },\n \"model/vnd.flatland.3dml\": {\n \"source\": \"iana\"\n },\n \"model/vnd.gdl\": {\n \"source\": \"iana\",\n \"extensions\": [\"gdl\"]\n },\n \"model/vnd.gs-gdl\": {\n \"source\": \"apache\"\n },\n \"model/vnd.gs.gdl\": {\n \"source\": \"iana\"\n },\n \"model/vnd.gtw\": {\n \"source\": \"iana\",\n \"extensions\": [\"gtw\"]\n },\n \"model/vnd.moml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"model/vnd.mts\": {\n \"source\": \"iana\",\n \"extensions\": [\"mts\"]\n },\n \"model/vnd.opengex\": {\n \"source\": \"iana\",\n \"extensions\": [\"ogex\"]\n },\n \"model/vnd.parasolid.transmit.binary\": {\n \"source\": \"iana\",\n \"extensions\": [\"x_b\"]\n },\n \"model/vnd.parasolid.transmit.text\": {\n \"source\": \"iana\",\n \"extensions\": [\"x_t\"]\n },\n \"model/vnd.pytha.pyox\": {\n \"source\": \"iana\"\n },\n \"model/vnd.rosette.annotated-data-model\": {\n \"source\": \"iana\"\n },\n \"model/vnd.sap.vds\": {\n \"source\": \"iana\",\n \"extensions\": [\"vds\"]\n },\n \"model/vnd.usdz+zip\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"usdz\"]\n },\n \"model/vnd.valve.source.compiled-map\": {\n \"source\": \"iana\",\n \"extensions\": [\"bsp\"]\n },\n \"model/vnd.vtu\": {\n \"source\": \"iana\",\n \"extensions\": [\"vtu\"]\n },\n \"model/vrml\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"wrl\",\"vrml\"]\n },\n \"model/x3d+binary\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"x3db\",\"x3dbz\"]\n },\n \"model/x3d+fastinfoset\": {\n \"source\": \"iana\",\n \"extensions\": [\"x3db\"]\n },\n \"model/x3d+vrml\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"x3dv\",\"x3dvz\"]\n },\n \"model/x3d+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"x3d\",\"x3dz\"]\n },\n \"model/x3d-vrml\": {\n \"source\": \"iana\",\n \"extensions\": [\"x3dv\"]\n },\n \"multipart/alternative\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"multipart/appledouble\": {\n \"source\": \"iana\"\n },\n \"multipart/byteranges\": {\n \"source\": \"iana\"\n },\n \"multipart/digest\": {\n \"source\": \"iana\"\n },\n \"multipart/encrypted\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"multipart/form-data\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"multipart/header-set\": {\n \"source\": \"iana\"\n },\n \"multipart/mixed\": {\n \"source\": \"iana\"\n },\n \"multipart/multilingual\": {\n \"source\": \"iana\"\n },\n \"multipart/parallel\": {\n \"source\": \"iana\"\n },\n \"multipart/related\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"multipart/report\": {\n \"source\": \"iana\"\n },\n \"multipart/signed\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"multipart/vnd.bint.med-plus\": {\n \"source\": \"iana\"\n },\n \"multipart/voice-message\": {\n \"source\": \"iana\"\n },\n \"multipart/x-mixed-replace\": {\n \"source\": \"iana\"\n },\n \"text/1d-interleaved-parityfec\": {\n \"source\": \"iana\"\n },\n \"text/cache-manifest\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"appcache\",\"manifest\"]\n },\n \"text/calendar\": {\n \"source\": \"iana\",\n \"extensions\": [\"ics\",\"ifb\"]\n },\n \"text/calender\": {\n \"compressible\": true\n },\n \"text/cmd\": {\n \"compressible\": true\n },\n \"text/coffeescript\": {\n \"extensions\": [\"coffee\",\"litcoffee\"]\n },\n \"text/cql\": {\n \"source\": \"iana\"\n },\n \"text/cql-expression\": {\n \"source\": \"iana\"\n },\n \"text/cql-identifier\": {\n \"source\": \"iana\"\n },\n \"text/css\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true,\n \"extensions\": [\"css\"]\n },\n \"text/csv\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"csv\"]\n },\n \"text/csv-schema\": {\n \"source\": \"iana\"\n },\n \"text/directory\": {\n \"source\": \"iana\"\n },\n \"text/dns\": {\n \"source\": \"iana\"\n },\n \"text/ecmascript\": {\n \"source\": \"iana\"\n },\n \"text/encaprtp\": {\n \"source\": \"iana\"\n },\n \"text/enriched\": {\n \"source\": \"iana\"\n },\n \"text/fhirpath\": {\n \"source\": \"iana\"\n },\n \"text/flexfec\": {\n \"source\": \"iana\"\n },\n \"text/fwdred\": {\n \"source\": \"iana\"\n },\n \"text/gff3\": {\n \"source\": \"iana\"\n },\n \"text/grammar-ref-list\": {\n \"source\": \"iana\"\n },\n \"text/html\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"html\",\"htm\",\"shtml\"]\n },\n \"text/jade\": {\n \"extensions\": [\"jade\"]\n },\n \"text/javascript\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"text/jcr-cnd\": {\n \"source\": \"iana\"\n },\n \"text/jsx\": {\n \"compressible\": true,\n \"extensions\": [\"jsx\"]\n },\n \"text/less\": {\n \"compressible\": true,\n \"extensions\": [\"less\"]\n },\n \"text/markdown\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"markdown\",\"md\"]\n },\n \"text/mathml\": {\n \"source\": \"nginx\",\n \"extensions\": [\"mml\"]\n },\n \"text/mdx\": {\n \"compressible\": true,\n \"extensions\": [\"mdx\"]\n },\n \"text/mizar\": {\n \"source\": \"iana\"\n },\n \"text/n3\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true,\n \"extensions\": [\"n3\"]\n },\n \"text/parameters\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\"\n },\n \"text/parityfec\": {\n \"source\": \"iana\"\n },\n \"text/plain\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"txt\",\"text\",\"conf\",\"def\",\"list\",\"log\",\"in\",\"ini\"]\n },\n \"text/provenance-notation\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\"\n },\n \"text/prs.fallenstein.rst\": {\n \"source\": \"iana\"\n },\n \"text/prs.lines.tag\": {\n \"source\": \"iana\",\n \"extensions\": [\"dsc\"]\n },\n \"text/prs.prop.logic\": {\n \"source\": \"iana\"\n },\n \"text/raptorfec\": {\n \"source\": \"iana\"\n },\n \"text/red\": {\n \"source\": \"iana\"\n },\n \"text/rfc822-headers\": {\n \"source\": \"iana\"\n },\n \"text/richtext\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rtx\"]\n },\n \"text/rtf\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rtf\"]\n },\n \"text/rtp-enc-aescm128\": {\n \"source\": \"iana\"\n },\n \"text/rtploopback\": {\n \"source\": \"iana\"\n },\n \"text/rtx\": {\n \"source\": \"iana\"\n },\n \"text/sgml\": {\n \"source\": \"iana\",\n \"extensions\": [\"sgml\",\"sgm\"]\n },\n \"text/shaclc\": {\n \"source\": \"iana\"\n },\n \"text/shex\": {\n \"source\": \"iana\",\n \"extensions\": [\"shex\"]\n },\n \"text/slim\": {\n \"extensions\": [\"slim\",\"slm\"]\n },\n \"text/spdx\": {\n \"source\": \"iana\",\n \"extensions\": [\"spdx\"]\n },\n \"text/strings\": {\n \"source\": \"iana\"\n },\n \"text/stylus\": {\n \"extensions\": [\"stylus\",\"styl\"]\n },\n \"text/t140\": {\n \"source\": \"iana\"\n },\n \"text/tab-separated-values\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"tsv\"]\n },\n \"text/troff\": {\n \"source\": \"iana\",\n \"extensions\": [\"t\",\"tr\",\"roff\",\"man\",\"me\",\"ms\"]\n },\n \"text/turtle\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"extensions\": [\"ttl\"]\n },\n \"text/ulpfec\": {\n \"source\": \"iana\"\n },\n \"text/uri-list\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"uri\",\"uris\",\"urls\"]\n },\n \"text/vcard\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"vcard\"]\n },\n \"text/vnd.a\": {\n \"source\": \"iana\"\n },\n \"text/vnd.abc\": {\n \"source\": \"iana\"\n },\n \"text/vnd.ascii-art\": {\n \"source\": \"iana\"\n },\n \"text/vnd.curl\": {\n \"source\": \"iana\",\n \"extensions\": [\"curl\"]\n },\n \"text/vnd.curl.dcurl\": {\n \"source\": \"apache\",\n \"extensions\": [\"dcurl\"]\n },\n \"text/vnd.curl.mcurl\": {\n \"source\": \"apache\",\n \"extensions\": [\"mcurl\"]\n },\n \"text/vnd.curl.scurl\": {\n \"source\": \"apache\",\n \"extensions\": [\"scurl\"]\n },\n \"text/vnd.debian.copyright\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\"\n },\n \"text/vnd.dmclientscript\": {\n \"source\": \"iana\"\n },\n \"text/vnd.dvb.subtitle\": {\n \"source\": \"iana\",\n \"extensions\": [\"sub\"]\n },\n \"text/vnd.esmertec.theme-descriptor\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\"\n },\n \"text/vnd.familysearch.gedcom\": {\n \"source\": \"iana\",\n \"extensions\": [\"ged\"]\n },\n \"text/vnd.ficlab.flt\": {\n \"source\": \"iana\"\n },\n \"text/vnd.fly\": {\n \"source\": \"iana\",\n \"extensions\": [\"fly\"]\n },\n \"text/vnd.fmi.flexstor\": {\n \"source\": \"iana\",\n \"extensions\": [\"flx\"]\n },\n \"text/vnd.gml\": {\n \"source\": \"iana\"\n },\n \"text/vnd.graphviz\": {\n \"source\": \"iana\",\n \"extensions\": [\"gv\"]\n },\n \"text/vnd.hans\": {\n \"source\": \"iana\"\n },\n \"text/vnd.hgl\": {\n \"source\": \"iana\"\n },\n \"text/vnd.in3d.3dml\": {\n \"source\": \"iana\",\n \"extensions\": [\"3dml\"]\n },\n \"text/vnd.in3d.spot\": {\n \"source\": \"iana\",\n \"extensions\": [\"spot\"]\n },\n \"text/vnd.iptc.newsml\": {\n \"source\": \"iana\"\n },\n \"text/vnd.iptc.nitf\": {\n \"source\": \"iana\"\n },\n \"text/vnd.latex-z\": {\n \"source\": \"iana\"\n },\n \"text/vnd.motorola.reflex\": {\n \"source\": \"iana\"\n },\n \"text/vnd.ms-mediapackage\": {\n \"source\": \"iana\"\n },\n \"text/vnd.net2phone.commcenter.command\": {\n \"source\": \"iana\"\n },\n \"text/vnd.radisys.msml-basic-layout\": {\n \"source\": \"iana\"\n },\n \"text/vnd.senx.warpscript\": {\n \"source\": \"iana\"\n },\n \"text/vnd.si.uricatalogue\": {\n \"source\": \"iana\"\n },\n \"text/vnd.sosi\": {\n \"source\": \"iana\"\n },\n \"text/vnd.sun.j2me.app-descriptor\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"extensions\": [\"jad\"]\n },\n \"text/vnd.trolltech.linguist\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\"\n },\n \"text/vnd.wap.si\": {\n \"source\": \"iana\"\n },\n \"text/vnd.wap.sl\": {\n \"source\": \"iana\"\n },\n \"text/vnd.wap.wml\": {\n \"source\": \"iana\",\n \"extensions\": [\"wml\"]\n },\n \"text/vnd.wap.wmlscript\": {\n \"source\": \"iana\",\n \"extensions\": [\"wmls\"]\n },\n \"text/vtt\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true,\n \"extensions\": [\"vtt\"]\n },\n \"text/x-asm\": {\n \"source\": \"apache\",\n \"extensions\": [\"s\",\"asm\"]\n },\n \"text/x-c\": {\n \"source\": \"apache\",\n \"extensions\": [\"c\",\"cc\",\"cxx\",\"cpp\",\"h\",\"hh\",\"dic\"]\n },\n \"text/x-component\": {\n \"source\": \"nginx\",\n \"extensions\": [\"htc\"]\n },\n \"text/x-fortran\": {\n \"source\": \"apache\",\n \"extensions\": [\"f\",\"for\",\"f77\",\"f90\"]\n },\n \"text/x-gwt-rpc\": {\n \"compressible\": true\n },\n \"text/x-handlebars-template\": {\n \"extensions\": [\"hbs\"]\n },\n \"text/x-java-source\": {\n \"source\": \"apache\",\n \"extensions\": [\"java\"]\n },\n \"text/x-jquery-tmpl\": {\n \"compressible\": true\n },\n \"text/x-lua\": {\n \"extensions\": [\"lua\"]\n },\n \"text/x-markdown\": {\n \"compressible\": true,\n \"extensions\": [\"mkd\"]\n },\n \"text/x-nfo\": {\n \"source\": \"apache\",\n \"extensions\": [\"nfo\"]\n },\n \"text/x-opml\": {\n \"source\": \"apache\",\n \"extensions\": [\"opml\"]\n },\n \"text/x-org\": {\n \"compressible\": true,\n \"extensions\": [\"org\"]\n },\n \"text/x-pascal\": {\n \"source\": \"apache\",\n \"extensions\": [\"p\",\"pas\"]\n },\n \"text/x-processing\": {\n \"compressible\": true,\n \"extensions\": [\"pde\"]\n },\n \"text/x-sass\": {\n \"extensions\": [\"sass\"]\n },\n \"text/x-scss\": {\n \"extensions\": [\"scss\"]\n },\n \"text/x-setext\": {\n \"source\": \"apache\",\n \"extensions\": [\"etx\"]\n },\n \"text/x-sfv\": {\n \"source\": \"apache\",\n \"extensions\": [\"sfv\"]\n },\n \"text/x-suse-ymp\": {\n \"compressible\": true,\n \"extensions\": [\"ymp\"]\n },\n \"text/x-uuencode\": {\n \"source\": \"apache\",\n \"extensions\": [\"uu\"]\n },\n \"text/x-vcalendar\": {\n \"source\": \"apache\",\n \"extensions\": [\"vcs\"]\n },\n \"text/x-vcard\": {\n \"source\": \"apache\",\n \"extensions\": [\"vcf\"]\n },\n \"text/xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xml\"]\n },\n \"text/xml-external-parsed-entity\": {\n \"source\": \"iana\"\n },\n \"text/yaml\": {\n \"compressible\": true,\n \"extensions\": [\"yaml\",\"yml\"]\n },\n \"video/1d-interleaved-parityfec\": {\n \"source\": \"iana\"\n },\n \"video/3gpp\": {\n \"source\": \"iana\",\n \"extensions\": [\"3gp\",\"3gpp\"]\n },\n \"video/3gpp-tt\": {\n \"source\": \"iana\"\n },\n \"video/3gpp2\": {\n \"source\": \"iana\",\n \"extensions\": [\"3g2\"]\n },\n \"video/av1\": {\n \"source\": \"iana\"\n },\n \"video/bmpeg\": {\n \"source\": \"iana\"\n },\n \"video/bt656\": {\n \"source\": \"iana\"\n },\n \"video/celb\": {\n \"source\": \"iana\"\n },\n \"video/dv\": {\n \"source\": \"iana\"\n },\n \"video/encaprtp\": {\n \"source\": \"iana\"\n },\n \"video/ffv1\": {\n \"source\": \"iana\"\n },\n \"video/flexfec\": {\n \"source\": \"iana\"\n },\n \"video/h261\": {\n \"source\": \"iana\",\n \"extensions\": [\"h261\"]\n },\n \"video/h263\": {\n \"source\": \"iana\",\n \"extensions\": [\"h263\"]\n },\n \"video/h263-1998\": {\n \"source\": \"iana\"\n },\n \"video/h263-2000\": {\n \"source\": \"iana\"\n },\n \"video/h264\": {\n \"source\": \"iana\",\n \"extensions\": [\"h264\"]\n },\n \"video/h264-rcdo\": {\n \"source\": \"iana\"\n },\n \"video/h264-svc\": {\n \"source\": \"iana\"\n },\n \"video/h265\": {\n \"source\": \"iana\"\n },\n \"video/iso.segment\": {\n \"source\": \"iana\",\n \"extensions\": [\"m4s\"]\n },\n \"video/jpeg\": {\n \"source\": \"iana\",\n \"extensions\": [\"jpgv\"]\n },\n \"video/jpeg2000\": {\n \"source\": \"iana\"\n },\n \"video/jpm\": {\n \"source\": \"apache\",\n \"extensions\": [\"jpm\",\"jpgm\"]\n },\n \"video/jxsv\": {\n \"source\": \"iana\"\n },\n \"video/mj2\": {\n \"source\": \"iana\",\n \"extensions\": [\"mj2\",\"mjp2\"]\n },\n \"video/mp1s\": {\n \"source\": \"iana\"\n },\n \"video/mp2p\": {\n \"source\": \"iana\"\n },\n \"video/mp2t\": {\n \"source\": \"iana\",\n \"extensions\": [\"ts\"]\n },\n \"video/mp4\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"mp4\",\"mp4v\",\"mpg4\"]\n },\n \"video/mp4v-es\": {\n \"source\": \"iana\"\n },\n \"video/mpeg\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"mpeg\",\"mpg\",\"mpe\",\"m1v\",\"m2v\"]\n },\n \"video/mpeg4-generic\": {\n \"source\": \"iana\"\n },\n \"video/mpv\": {\n \"source\": \"iana\"\n },\n \"video/nv\": {\n \"source\": \"iana\"\n },\n \"video/ogg\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"ogv\"]\n },\n \"video/parityfec\": {\n \"source\": \"iana\"\n },\n \"video/pointer\": {\n \"source\": \"iana\"\n },\n \"video/quicktime\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"qt\",\"mov\"]\n },\n \"video/raptorfec\": {\n \"source\": \"iana\"\n },\n \"video/raw\": {\n \"source\": \"iana\"\n },\n \"video/rtp-enc-aescm128\": {\n \"source\": \"iana\"\n },\n \"video/rtploopback\": {\n \"source\": \"iana\"\n },\n \"video/rtx\": {\n \"source\": \"iana\"\n },\n \"video/scip\": {\n \"source\": \"iana\"\n },\n \"video/smpte291\": {\n \"source\": \"iana\"\n },\n \"video/smpte292m\": {\n \"source\": \"iana\"\n },\n \"video/ulpfec\": {\n \"source\": \"iana\"\n },\n \"video/vc1\": {\n \"source\": \"iana\"\n },\n \"video/vc2\": {\n \"source\": \"iana\"\n },\n \"video/vnd.cctv\": {\n \"source\": \"iana\"\n },\n \"video/vnd.dece.hd\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvh\",\"uvvh\"]\n },\n \"video/vnd.dece.mobile\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvm\",\"uvvm\"]\n },\n \"video/vnd.dece.mp4\": {\n \"source\": \"iana\"\n },\n \"video/vnd.dece.pd\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvp\",\"uvvp\"]\n },\n \"video/vnd.dece.sd\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvs\",\"uvvs\"]\n },\n \"video/vnd.dece.video\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvv\",\"uvvv\"]\n },\n \"video/vnd.directv.mpeg\": {\n \"source\": \"iana\"\n },\n \"video/vnd.directv.mpeg-tts\": {\n \"source\": \"iana\"\n },\n \"video/vnd.dlna.mpeg-tts\": {\n \"source\": \"iana\"\n },\n \"video/vnd.dvb.file\": {\n \"source\": \"iana\",\n \"extensions\": [\"dvb\"]\n },\n \"video/vnd.fvt\": {\n \"source\": \"iana\",\n \"extensions\": [\"fvt\"]\n },\n \"video/vnd.hns.video\": {\n \"source\": \"iana\"\n },\n \"video/vnd.iptvforum.1dparityfec-1010\": {\n \"source\": \"iana\"\n },\n \"video/vnd.iptvforum.1dparityfec-2005\": {\n \"source\": \"iana\"\n },\n \"video/vnd.iptvforum.2dparityfec-1010\": {\n \"source\": \"iana\"\n },\n \"video/vnd.iptvforum.2dparityfec-2005\": {\n \"source\": \"iana\"\n },\n \"video/vnd.iptvforum.ttsavc\": {\n \"source\": \"iana\"\n },\n \"video/vnd.iptvforum.ttsmpeg2\": {\n \"source\": \"iana\"\n },\n \"video/vnd.motorola.video\": {\n \"source\": \"iana\"\n },\n \"video/vnd.motorola.videop\": {\n \"source\": \"iana\"\n },\n \"video/vnd.mpegurl\": {\n \"source\": \"iana\",\n \"extensions\": [\"mxu\",\"m4u\"]\n },\n \"video/vnd.ms-playready.media.pyv\": {\n \"source\": \"iana\",\n \"extensions\": [\"pyv\"]\n },\n \"video/vnd.nokia.interleaved-multimedia\": {\n \"source\": \"iana\"\n },\n \"video/vnd.nokia.mp4vr\": {\n \"source\": \"iana\"\n },\n \"video/vnd.nokia.videovoip\": {\n \"source\": \"iana\"\n },\n \"video/vnd.objectvideo\": {\n \"source\": \"iana\"\n },\n \"video/vnd.radgamettools.bink\": {\n \"source\": \"iana\"\n },\n \"video/vnd.radgamettools.smacker\": {\n \"source\": \"iana\"\n },\n \"video/vnd.sealed.mpeg1\": {\n \"source\": \"iana\"\n },\n \"video/vnd.sealed.mpeg4\": {\n \"source\": \"iana\"\n },\n \"video/vnd.sealed.swf\": {\n \"source\": \"iana\"\n },\n \"video/vnd.sealedmedia.softseal.mov\": {\n \"source\": \"iana\"\n },\n \"video/vnd.uvvu.mp4\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvu\",\"uvvu\"]\n },\n \"video/vnd.vivo\": {\n \"source\": \"iana\",\n \"extensions\": [\"viv\"]\n },\n \"video/vnd.youtube.yt\": {\n \"source\": \"iana\"\n },\n \"video/vp8\": {\n \"source\": \"iana\"\n },\n \"video/vp9\": {\n \"source\": \"iana\"\n },\n \"video/webm\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"webm\"]\n },\n \"video/x-f4v\": {\n \"source\": \"apache\",\n \"extensions\": [\"f4v\"]\n },\n \"video/x-fli\": {\n \"source\": \"apache\",\n \"extensions\": [\"fli\"]\n },\n \"video/x-flv\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"flv\"]\n },\n \"video/x-m4v\": {\n \"source\": \"apache\",\n \"extensions\": [\"m4v\"]\n },\n \"video/x-matroska\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"mkv\",\"mk3d\",\"mks\"]\n },\n \"video/x-mng\": {\n \"source\": \"apache\",\n \"extensions\": [\"mng\"]\n },\n \"video/x-ms-asf\": {\n \"source\": \"apache\",\n \"extensions\": [\"asf\",\"asx\"]\n },\n \"video/x-ms-vob\": {\n \"source\": \"apache\",\n \"extensions\": [\"vob\"]\n },\n \"video/x-ms-wm\": {\n \"source\": \"apache\",\n \"extensions\": [\"wm\"]\n },\n \"video/x-ms-wmv\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"wmv\"]\n },\n \"video/x-ms-wmx\": {\n \"source\": \"apache\",\n \"extensions\": [\"wmx\"]\n },\n \"video/x-ms-wvx\": {\n \"source\": \"apache\",\n \"extensions\": [\"wvx\"]\n },\n \"video/x-msvideo\": {\n \"source\": \"apache\",\n \"extensions\": [\"avi\"]\n },\n \"video/x-sgi-movie\": {\n \"source\": \"apache\",\n \"extensions\": [\"movie\"]\n },\n \"video/x-smv\": {\n \"source\": \"apache\",\n \"extensions\": [\"smv\"]\n },\n \"x-conference/x-cooltalk\": {\n \"source\": \"apache\",\n \"extensions\": [\"ice\"]\n },\n \"x-shader/x-fragment\": {\n \"compressible\": true\n },\n \"x-shader/x-vertex\": {\n \"compressible\": true\n }\n}\n", "/*!\n * mime-db\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2015-2022 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n/**\n * Module exports.\n */\n\nmodule.exports = require('./db.json')\n", "/*!\n * mime-types\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar db = require('mime-db')\nvar extname = require('path').extname\n\n/**\n * Module variables.\n * @private\n */\n\nvar EXTRACT_TYPE_REGEXP = /^\\s*([^;\\s]*)(?:;|\\s|$)/\nvar TEXT_TYPE_REGEXP = /^text\\//i\n\n/**\n * Module exports.\n * @public\n */\n\nexports.charset = charset\nexports.charsets = { lookup: charset }\nexports.contentType = contentType\nexports.extension = extension\nexports.extensions = Object.create(null)\nexports.lookup = lookup\nexports.types = Object.create(null)\n\n// Populate the extensions/types maps\npopulateMaps(exports.extensions, exports.types)\n\n/**\n * Get the default charset for a MIME type.\n *\n * @param {string} type\n * @return {boolean|string}\n */\n\nfunction charset (type) {\n if (!type || typeof type !== 'string') {\n return false\n }\n\n // TODO: use media-typer\n var match = EXTRACT_TYPE_REGEXP.exec(type)\n var mime = match && db[match[1].toLowerCase()]\n\n if (mime && mime.charset) {\n return mime.charset\n }\n\n // default text/* to utf-8\n if (match && TEXT_TYPE_REGEXP.test(match[1])) {\n return 'UTF-8'\n }\n\n return false\n}\n\n/**\n * Create a full Content-Type header given a MIME type or extension.\n *\n * @param {string} str\n * @return {boolean|string}\n */\n\nfunction contentType (str) {\n // TODO: should this even be in this module?\n if (!str || typeof str !== 'string') {\n return false\n }\n\n var mime = str.indexOf('/') === -1\n ? exports.lookup(str)\n : str\n\n if (!mime) {\n return false\n }\n\n // TODO: use content-type or other module\n if (mime.indexOf('charset') === -1) {\n var charset = exports.charset(mime)\n if (charset) mime += '; charset=' + charset.toLowerCase()\n }\n\n return mime\n}\n\n/**\n * Get the default extension for a MIME type.\n *\n * @param {string} type\n * @return {boolean|string}\n */\n\nfunction extension (type) {\n if (!type || typeof type !== 'string') {\n return false\n }\n\n // TODO: use media-typer\n var match = EXTRACT_TYPE_REGEXP.exec(type)\n\n // get extensions\n var exts = match && exports.extensions[match[1].toLowerCase()]\n\n if (!exts || !exts.length) {\n return false\n }\n\n return exts[0]\n}\n\n/**\n * Lookup the MIME type for a file path/extension.\n *\n * @param {string} path\n * @return {boolean|string}\n */\n\nfunction lookup (path) {\n if (!path || typeof path !== 'string') {\n return false\n }\n\n // get the extension (\"ext\" or \".ext\" or full path)\n var extension = extname('x.' + path)\n .toLowerCase()\n .substr(1)\n\n if (!extension) {\n return false\n }\n\n return exports.types[extension] || false\n}\n\n/**\n * Populate the extensions and types maps.\n * @private\n */\n\nfunction populateMaps (extensions, types) {\n // source preference (least -> most)\n var preference = ['nginx', 'apache', undefined, 'iana']\n\n Object.keys(db).forEach(function forEachMimeType (type) {\n var mime = db[type]\n var exts = mime.extensions\n\n if (!exts || !exts.length) {\n return\n }\n\n // mime -> extensions\n extensions[type] = exts\n\n // extension -> mime\n for (var i = 0; i < exts.length; i++) {\n var extension = exts[i]\n\n if (types[extension]) {\n var from = preference.indexOf(db[types[extension]].source)\n var to = preference.indexOf(mime.source)\n\n if (types[extension] !== 'application/octet-stream' &&\n (from > to || (from === to && types[extension].substr(0, 12) === 'application/'))) {\n // skip the remapping\n continue\n }\n }\n\n // set the extension -> mime\n types[extension] = type\n }\n })\n}\n", "module.exports = defer;\n\n/**\n * Runs provided function on next iteration of the event loop\n *\n * @param {function} fn - function to run\n */\nfunction defer(fn)\n{\n var nextTick = typeof setImmediate == 'function'\n ? setImmediate\n : (\n typeof process == 'object' && typeof process.nextTick == 'function'\n ? process.nextTick\n : null\n );\n\n if (nextTick)\n {\n nextTick(fn);\n }\n else\n {\n setTimeout(fn, 0);\n }\n}\n", "var defer = require('./defer.js');\n\n// API\nmodule.exports = async;\n\n/**\n * Runs provided callback asynchronously\n * even if callback itself is not\n *\n * @param {function} callback - callback to invoke\n * @returns {function} - augmented callback\n */\nfunction async(callback)\n{\n var isAsync = false;\n\n // check if async happened\n defer(function() { isAsync = true; });\n\n return function async_callback(err, result)\n {\n if (isAsync)\n {\n callback(err, result);\n }\n else\n {\n defer(function nextTick_callback()\n {\n callback(err, result);\n });\n }\n };\n}\n", "// API\nmodule.exports = abort;\n\n/**\n * Aborts leftover active jobs\n *\n * @param {object} state - current state object\n */\nfunction abort(state)\n{\n Object.keys(state.jobs).forEach(clean.bind(state));\n\n // reset leftover jobs\n state.jobs = {};\n}\n\n/**\n * Cleans up leftover job by invoking abort function for the provided job id\n *\n * @this state\n * @param {string|number} key - job id to abort\n */\nfunction clean(key)\n{\n if (typeof this.jobs[key] == 'function')\n {\n this.jobs[key]();\n }\n}\n", "var async = require('./async.js')\n , abort = require('./abort.js')\n ;\n\n// API\nmodule.exports = iterate;\n\n/**\n * Iterates over each job object\n *\n * @param {array|object} list - array or object (named list) to iterate over\n * @param {function} iterator - iterator to run\n * @param {object} state - current job status\n * @param {function} callback - invoked when all elements processed\n */\nfunction iterate(list, iterator, state, callback)\n{\n // store current index\n var key = state['keyedList'] ? state['keyedList'][state.index] : state.index;\n\n state.jobs[key] = runJob(iterator, key, list[key], function(error, output)\n {\n // don't repeat yourself\n // skip secondary callbacks\n if (!(key in state.jobs))\n {\n return;\n }\n\n // clean up jobs\n delete state.jobs[key];\n\n if (error)\n {\n // don't process rest of the results\n // stop still active jobs\n // and reset the list\n abort(state);\n }\n else\n {\n state.results[key] = output;\n }\n\n // return salvaged results\n callback(error, state.results);\n });\n}\n\n/**\n * Runs iterator over provided job element\n *\n * @param {function} iterator - iterator to invoke\n * @param {string|number} key - key/index of the element in the list of jobs\n * @param {mixed} item - job description\n * @param {function} callback - invoked after iterator is done with the job\n * @returns {function|mixed} - job abort function or something else\n */\nfunction runJob(iterator, key, item, callback)\n{\n var aborter;\n\n // allow shortcut if iterator expects only two arguments\n if (iterator.length == 2)\n {\n aborter = iterator(item, async(callback));\n }\n // otherwise go with full three arguments\n else\n {\n aborter = iterator(item, key, async(callback));\n }\n\n return aborter;\n}\n", "// API\nmodule.exports = state;\n\n/**\n * Creates initial state object\n * for iteration over list\n *\n * @param {array|object} list - list to iterate over\n * @param {function|null} sortMethod - function to use for keys sort,\n * or `null` to keep them as is\n * @returns {object} - initial state object\n */\nfunction state(list, sortMethod)\n{\n var isNamedList = !Array.isArray(list)\n , initState =\n {\n index : 0,\n keyedList: isNamedList || sortMethod ? Object.keys(list) : null,\n jobs : {},\n results : isNamedList ? {} : [],\n size : isNamedList ? Object.keys(list).length : list.length\n }\n ;\n\n if (sortMethod)\n {\n // sort array keys based on it's values\n // sort object's keys just on own merit\n initState.keyedList.sort(isNamedList ? sortMethod : function(a, b)\n {\n return sortMethod(list[a], list[b]);\n });\n }\n\n return initState;\n}\n", "var abort = require('./abort.js')\n , async = require('./async.js')\n ;\n\n// API\nmodule.exports = terminator;\n\n/**\n * Terminates jobs in the attached state context\n *\n * @this AsyncKitState#\n * @param {function} callback - final callback to invoke after termination\n */\nfunction terminator(callback)\n{\n if (!Object.keys(this.jobs).length)\n {\n return;\n }\n\n // fast forward iteration index\n this.index = this.size;\n\n // abort jobs\n abort(this);\n\n // send back results we have so far\n async(callback)(null, this.results);\n}\n", "var iterate = require('./lib/iterate.js')\n , initState = require('./lib/state.js')\n , terminator = require('./lib/terminator.js')\n ;\n\n// Public API\nmodule.exports = parallel;\n\n/**\n * Runs iterator over provided array elements in parallel\n *\n * @param {array|object} list - array or object (named list) to iterate over\n * @param {function} iterator - iterator to run\n * @param {function} callback - invoked when all elements processed\n * @returns {function} - jobs terminator\n */\nfunction parallel(list, iterator, callback)\n{\n var state = initState(list);\n\n while (state.index < (state['keyedList'] || list).length)\n {\n iterate(list, iterator, state, function(error, result)\n {\n if (error)\n {\n callback(error, result);\n return;\n }\n\n // looks like it's the last one\n if (Object.keys(state.jobs).length === 0)\n {\n callback(null, state.results);\n return;\n }\n });\n\n state.index++;\n }\n\n return terminator.bind(state, callback);\n}\n", "var iterate = require('./lib/iterate.js')\n , initState = require('./lib/state.js')\n , terminator = require('./lib/terminator.js')\n ;\n\n// Public API\nmodule.exports = serialOrdered;\n// sorting helpers\nmodule.exports.ascending = ascending;\nmodule.exports.descending = descending;\n\n/**\n * Runs iterator over provided sorted array elements in series\n *\n * @param {array|object} list - array or object (named list) to iterate over\n * @param {function} iterator - iterator to run\n * @param {function} sortMethod - custom sort function\n * @param {function} callback - invoked when all elements processed\n * @returns {function} - jobs terminator\n */\nfunction serialOrdered(list, iterator, sortMethod, callback)\n{\n var state = initState(list, sortMethod);\n\n iterate(list, iterator, state, function iteratorHandler(error, result)\n {\n if (error)\n {\n callback(error, result);\n return;\n }\n\n state.index++;\n\n // are we there yet?\n if (state.index < (state['keyedList'] || list).length)\n {\n iterate(list, iterator, state, iteratorHandler);\n return;\n }\n\n // done here\n callback(null, state.results);\n });\n\n return terminator.bind(state, callback);\n}\n\n/*\n * -- Sort methods\n */\n\n/**\n * sort helper to sort array elements in ascending order\n *\n * @param {mixed} a - an item to compare\n * @param {mixed} b - an item to compare\n * @returns {number} - comparison result\n */\nfunction ascending(a, b)\n{\n return a < b ? -1 : a > b ? 1 : 0;\n}\n\n/**\n * sort helper to sort array elements in descending order\n *\n * @param {mixed} a - an item to compare\n * @param {mixed} b - an item to compare\n * @returns {number} - comparison result\n */\nfunction descending(a, b)\n{\n return -1 * ascending(a, b);\n}\n", "var serialOrdered = require('./serialOrdered.js');\n\n// Public API\nmodule.exports = serial;\n\n/**\n * Runs iterator over provided array elements in series\n *\n * @param {array|object} list - array or object (named list) to iterate over\n * @param {function} iterator - iterator to run\n * @param {function} callback - invoked when all elements processed\n * @returns {function} - jobs terminator\n */\nfunction serial(list, iterator, callback)\n{\n return serialOrdered(list, iterator, null, callback);\n}\n", "module.exports =\n{\n parallel : require('./parallel.js'),\n serial : require('./serial.js'),\n serialOrdered : require('./serialOrdered.js')\n};\n", "// populates missing values\nmodule.exports = function(dst, src) {\n\n Object.keys(src).forEach(function(prop)\n {\n dst[prop] = dst[prop] || src[prop];\n });\n\n return dst;\n};\n", "var CombinedStream = require('combined-stream');\nvar util = require('util');\nvar path = require('path');\nvar http = require('http');\nvar https = require('https');\nvar parseUrl = require('url').parse;\nvar fs = require('fs');\nvar Stream = require('stream').Stream;\nvar mime = require('mime-types');\nvar asynckit = require('asynckit');\nvar populate = require('./populate.js');\n\n// Public API\nmodule.exports = FormData;\n\n// make it a Stream\nutil.inherits(FormData, CombinedStream);\n\n/**\n * Create readable \"multipart/form-data\" streams.\n * Can be used to submit forms\n * and file uploads to other web applications.\n *\n * @constructor\n * @param {Object} options - Properties to be added/overriden for FormData and CombinedStream\n */\nfunction FormData(options) {\n if (!(this instanceof FormData)) {\n return new FormData(options);\n }\n\n this._overheadLength = 0;\n this._valueLength = 0;\n this._valuesToMeasure = [];\n\n CombinedStream.call(this);\n\n options = options || {};\n for (var option in options) {\n this[option] = options[option];\n }\n}\n\nFormData.LINE_BREAK = '\\r\\n';\nFormData.DEFAULT_CONTENT_TYPE = 'application/octet-stream';\n\nFormData.prototype.append = function(field, value, options) {\n\n options = options || {};\n\n // allow filename as single option\n if (typeof options == 'string') {\n options = {filename: options};\n }\n\n var append = CombinedStream.prototype.append.bind(this);\n\n // all that streamy business can't handle numbers\n if (typeof value == 'number') {\n value = '' + value;\n }\n\n // https://github.com/felixge/node-form-data/issues/38\n if (util.isArray(value)) {\n // Please convert your array into string\n // the way web server expects it\n this._error(new Error('Arrays are not supported.'));\n return;\n }\n\n var header = this._multiPartHeader(field, value, options);\n var footer = this._multiPartFooter();\n\n append(header);\n append(value);\n append(footer);\n\n // pass along options.knownLength\n this._trackLength(header, value, options);\n};\n\nFormData.prototype._trackLength = function(header, value, options) {\n var valueLength = 0;\n\n // used w/ getLengthSync(), when length is known.\n // e.g. for streaming directly from a remote server,\n // w/ a known file a size, and not wanting to wait for\n // incoming file to finish to get its size.\n if (options.knownLength != null) {\n valueLength += +options.knownLength;\n } else if (Buffer.isBuffer(value)) {\n valueLength = value.length;\n } else if (typeof value === 'string') {\n valueLength = Buffer.byteLength(value);\n }\n\n this._valueLength += valueLength;\n\n // @check why add CRLF? does this account for custom/multiple CRLFs?\n this._overheadLength +=\n Buffer.byteLength(header) +\n FormData.LINE_BREAK.length;\n\n // empty or either doesn't have path or not an http response or not a stream\n if (!value || ( !value.path && !(value.readable && value.hasOwnProperty('httpVersion')) && !(value instanceof Stream))) {\n return;\n }\n\n // no need to bother with the length\n if (!options.knownLength) {\n this._valuesToMeasure.push(value);\n }\n};\n\nFormData.prototype._lengthRetriever = function(value, callback) {\n\n if (value.hasOwnProperty('fd')) {\n\n // take read range into a account\n // `end` = Infinity \u2013> read file till the end\n //\n // TODO: Looks like there is bug in Node fs.createReadStream\n // it doesn't respect `end` options without `start` options\n // Fix it when node fixes it.\n // https://github.com/joyent/node/issues/7819\n if (value.end != undefined && value.end != Infinity && value.start != undefined) {\n\n // when end specified\n // no need to calculate range\n // inclusive, starts with 0\n callback(null, value.end + 1 - (value.start ? value.start : 0));\n\n // not that fast snoopy\n } else {\n // still need to fetch file size from fs\n fs.stat(value.path, function(err, stat) {\n\n var fileSize;\n\n if (err) {\n callback(err);\n return;\n }\n\n // update final size based on the range options\n fileSize = stat.size - (value.start ? value.start : 0);\n callback(null, fileSize);\n });\n }\n\n // or http response\n } else if (value.hasOwnProperty('httpVersion')) {\n callback(null, +value.headers['content-length']);\n\n // or request stream http://github.com/mikeal/request\n } else if (value.hasOwnProperty('httpModule')) {\n // wait till response come back\n value.on('response', function(response) {\n value.pause();\n callback(null, +response.headers['content-length']);\n });\n value.resume();\n\n // something else\n } else {\n callback('Unknown stream');\n }\n};\n\nFormData.prototype._multiPartHeader = function(field, value, options) {\n // custom header specified (as string)?\n // it becomes responsible for boundary\n // (e.g. to handle extra CRLFs on .NET servers)\n if (typeof options.header == 'string') {\n return options.header;\n }\n\n var contentDisposition = this._getContentDisposition(value, options);\n var contentType = this._getContentType(value, options);\n\n var contents = '';\n var headers = {\n // add custom disposition as third element or keep it two elements if not\n 'Content-Disposition': ['form-data', 'name=\"' + field + '\"'].concat(contentDisposition || []),\n // if no content type. allow it to be empty array\n 'Content-Type': [].concat(contentType || [])\n };\n\n // allow custom headers.\n if (typeof options.header == 'object') {\n populate(headers, options.header);\n }\n\n var header;\n for (var prop in headers) {\n if (!headers.hasOwnProperty(prop)) continue;\n header = headers[prop];\n\n // skip nullish headers.\n if (header == null) {\n continue;\n }\n\n // convert all headers to arrays.\n if (!Array.isArray(header)) {\n header = [header];\n }\n\n // add non-empty headers.\n if (header.length) {\n contents += prop + ': ' + header.join('; ') + FormData.LINE_BREAK;\n }\n }\n\n return '--' + this.getBoundary() + FormData.LINE_BREAK + contents + FormData.LINE_BREAK;\n};\n\nFormData.prototype._getContentDisposition = function(value, options) {\n\n var filename\n , contentDisposition\n ;\n\n if (typeof options.filepath === 'string') {\n // custom filepath for relative paths\n filename = path.normalize(options.filepath).replace(/\\\\/g, '/');\n } else if (options.filename || value.name || value.path) {\n // custom filename take precedence\n // formidable and the browser add a name property\n // fs- and request- streams have path property\n filename = path.basename(options.filename || value.name || value.path);\n } else if (value.readable && value.hasOwnProperty('httpVersion')) {\n // or try http response\n filename = path.basename(value.client._httpMessage.path || '');\n }\n\n if (filename) {\n contentDisposition = 'filename=\"' + filename + '\"';\n }\n\n return contentDisposition;\n};\n\nFormData.prototype._getContentType = function(value, options) {\n\n // use custom content-type above all\n var contentType = options.contentType;\n\n // or try `name` from formidable, browser\n if (!contentType && value.name) {\n contentType = mime.lookup(value.name);\n }\n\n // or try `path` from fs-, request- streams\n if (!contentType && value.path) {\n contentType = mime.lookup(value.path);\n }\n\n // or if it's http-reponse\n if (!contentType && value.readable && value.hasOwnProperty('httpVersion')) {\n contentType = value.headers['content-type'];\n }\n\n // or guess it from the filepath or filename\n if (!contentType && (options.filepath || options.filename)) {\n contentType = mime.lookup(options.filepath || options.filename);\n }\n\n // fallback to the default content type if `value` is not simple value\n if (!contentType && typeof value == 'object') {\n contentType = FormData.DEFAULT_CONTENT_TYPE;\n }\n\n return contentType;\n};\n\nFormData.prototype._multiPartFooter = function() {\n return function(next) {\n var footer = FormData.LINE_BREAK;\n\n var lastPart = (this._streams.length === 0);\n if (lastPart) {\n footer += this._lastBoundary();\n }\n\n next(footer);\n }.bind(this);\n};\n\nFormData.prototype._lastBoundary = function() {\n return '--' + this.getBoundary() + '--' + FormData.LINE_BREAK;\n};\n\nFormData.prototype.getHeaders = function(userHeaders) {\n var header;\n var formHeaders = {\n 'content-type': 'multipart/form-data; boundary=' + this.getBoundary()\n };\n\n for (header in userHeaders) {\n if (userHeaders.hasOwnProperty(header)) {\n formHeaders[header.toLowerCase()] = userHeaders[header];\n }\n }\n\n return formHeaders;\n};\n\nFormData.prototype.setBoundary = function(boundary) {\n this._boundary = boundary;\n};\n\nFormData.prototype.getBoundary = function() {\n if (!this._boundary) {\n this._generateBoundary();\n }\n\n return this._boundary;\n};\n\nFormData.prototype.getBuffer = function() {\n var dataBuffer = new Buffer.alloc( 0 );\n var boundary = this.getBoundary();\n\n // Create the form content. Add Line breaks to the end of data.\n for (var i = 0, len = this._streams.length; i < len; i++) {\n if (typeof this._streams[i] !== 'function') {\n\n // Add content to the buffer.\n if(Buffer.isBuffer(this._streams[i])) {\n dataBuffer = Buffer.concat( [dataBuffer, this._streams[i]]);\n }else {\n dataBuffer = Buffer.concat( [dataBuffer, Buffer.from(this._streams[i])]);\n }\n\n // Add break after content.\n if (typeof this._streams[i] !== 'string' || this._streams[i].substring( 2, boundary.length + 2 ) !== boundary) {\n dataBuffer = Buffer.concat( [dataBuffer, Buffer.from(FormData.LINE_BREAK)] );\n }\n }\n }\n\n // Add the footer and return the Buffer object.\n return Buffer.concat( [dataBuffer, Buffer.from(this._lastBoundary())] );\n};\n\nFormData.prototype._generateBoundary = function() {\n // This generates a 50 character boundary similar to those used by Firefox.\n // They are optimized for boyer-moore parsing.\n var boundary = '--------------------------';\n for (var i = 0; i < 24; i++) {\n boundary += Math.floor(Math.random() * 10).toString(16);\n }\n\n this._boundary = boundary;\n};\n\n// Note: getLengthSync DOESN'T calculate streams length\n// As workaround one can calculate file size manually\n// and add it as knownLength option\nFormData.prototype.getLengthSync = function() {\n var knownLength = this._overheadLength + this._valueLength;\n\n // Don't get confused, there are 3 \"internal\" streams for each keyval pair\n // so it basically checks if there is any value added to the form\n if (this._streams.length) {\n knownLength += this._lastBoundary().length;\n }\n\n // https://github.com/form-data/form-data/issues/40\n if (!this.hasKnownLength()) {\n // Some async length retrievers are present\n // therefore synchronous length calculation is false.\n // Please use getLength(callback) to get proper length\n this._error(new Error('Cannot calculate proper length in synchronous way.'));\n }\n\n return knownLength;\n};\n\n// Public API to check if length of added values is known\n// https://github.com/form-data/form-data/issues/196\n// https://github.com/form-data/form-data/issues/262\nFormData.prototype.hasKnownLength = function() {\n var hasKnownLength = true;\n\n if (this._valuesToMeasure.length) {\n hasKnownLength = false;\n }\n\n return hasKnownLength;\n};\n\nFormData.prototype.getLength = function(cb) {\n var knownLength = this._overheadLength + this._valueLength;\n\n if (this._streams.length) {\n knownLength += this._lastBoundary().length;\n }\n\n if (!this._valuesToMeasure.length) {\n process.nextTick(cb.bind(this, null, knownLength));\n return;\n }\n\n asynckit.parallel(this._valuesToMeasure, this._lengthRetriever, function(err, values) {\n if (err) {\n cb(err);\n return;\n }\n\n values.forEach(function(length) {\n knownLength += length;\n });\n\n cb(null, knownLength);\n });\n};\n\nFormData.prototype.submit = function(params, cb) {\n var request\n , options\n , defaults = {method: 'post'}\n ;\n\n // parse provided url if it's string\n // or treat it as options object\n if (typeof params == 'string') {\n\n params = parseUrl(params);\n options = populate({\n port: params.port,\n path: params.pathname,\n host: params.hostname,\n protocol: params.protocol\n }, defaults);\n\n // use custom params\n } else {\n\n options = populate(params, defaults);\n // if no port provided use default one\n if (!options.port) {\n options.port = options.protocol == 'https:' ? 443 : 80;\n }\n }\n\n // put that good code in getHeaders to some use\n options.headers = this.getHeaders(params.headers);\n\n // https if specified, fallback to http in any other case\n if (options.protocol == 'https:') {\n request = https.request(options);\n } else {\n request = http.request(options);\n }\n\n // get content length and fire away\n this.getLength(function(err, length) {\n if (err && err !== 'Unknown stream') {\n this._error(err);\n return;\n }\n\n // add content length\n if (length) {\n request.setHeader('Content-Length', length);\n }\n\n this.pipe(request);\n if (cb) {\n var onResponse;\n\n var callback = function (error, responce) {\n request.removeListener('error', callback);\n request.removeListener('response', onResponse);\n\n return cb.call(this, error, responce);\n };\n\n onResponse = callback.bind(this, null);\n\n request.on('error', callback);\n request.on('response', onResponse);\n }\n }.bind(this));\n\n return request;\n};\n\nFormData.prototype._error = function(err) {\n if (!this.error) {\n this.error = err;\n this.pause();\n this.emit('error', err);\n }\n};\n\nFormData.prototype.toString = function () {\n return '[object FormData]';\n};\n", "'use strict';\n\nvar parseUrl = require('url').parse;\n\nvar DEFAULT_PORTS = {\n ftp: 21,\n gopher: 70,\n http: 80,\n https: 443,\n ws: 80,\n wss: 443,\n};\n\nvar stringEndsWith = String.prototype.endsWith || function(s) {\n return s.length <= this.length &&\n this.indexOf(s, this.length - s.length) !== -1;\n};\n\n/**\n * @param {string|object} url - The URL, or the result from url.parse.\n * @return {string} The URL of the proxy that should handle the request to the\n * given URL. If no proxy is set, this will be an empty string.\n */\nfunction getProxyForUrl(url) {\n var parsedUrl = typeof url === 'string' ? parseUrl(url) : url || {};\n var proto = parsedUrl.protocol;\n var hostname = parsedUrl.host;\n var port = parsedUrl.port;\n if (typeof hostname !== 'string' || !hostname || typeof proto !== 'string') {\n return ''; // Don't proxy URLs without a valid scheme or host.\n }\n\n proto = proto.split(':', 1)[0];\n // Stripping ports in this way instead of using parsedUrl.hostname to make\n // sure that the brackets around IPv6 addresses are kept.\n hostname = hostname.replace(/:\\d*$/, '');\n port = parseInt(port) || DEFAULT_PORTS[proto] || 0;\n if (!shouldProxy(hostname, port)) {\n return ''; // Don't proxy URLs that match NO_PROXY.\n }\n\n var proxy =\n getEnv('npm_config_' + proto + '_proxy') ||\n getEnv(proto + '_proxy') ||\n getEnv('npm_config_proxy') ||\n getEnv('all_proxy');\n if (proxy && proxy.indexOf('://') === -1) {\n // Missing scheme in proxy, default to the requested URL's scheme.\n proxy = proto + '://' + proxy;\n }\n return proxy;\n}\n\n/**\n * Determines whether a given URL should be proxied.\n *\n * @param {string} hostname - The host name of the URL.\n * @param {number} port - The effective port of the URL.\n * @returns {boolean} Whether the given URL should be proxied.\n * @private\n */\nfunction shouldProxy(hostname, port) {\n var NO_PROXY =\n (getEnv('npm_config_no_proxy') || getEnv('no_proxy')).toLowerCase();\n if (!NO_PROXY) {\n return true; // Always proxy if NO_PROXY is not set.\n }\n if (NO_PROXY === '*') {\n return false; // Never proxy if wildcard is set.\n }\n\n return NO_PROXY.split(/[,\\s]/).every(function(proxy) {\n if (!proxy) {\n return true; // Skip zero-length hosts.\n }\n var parsedProxy = proxy.match(/^(.+):(\\d+)$/);\n var parsedProxyHostname = parsedProxy ? parsedProxy[1] : proxy;\n var parsedProxyPort = parsedProxy ? parseInt(parsedProxy[2]) : 0;\n if (parsedProxyPort && parsedProxyPort !== port) {\n return true; // Skip if ports don't match.\n }\n\n if (!/^[.*]/.test(parsedProxyHostname)) {\n // No wildcards, so stop proxying if there is an exact match.\n return hostname !== parsedProxyHostname;\n }\n\n if (parsedProxyHostname.charAt(0) === '*') {\n // Remove leading wildcard.\n parsedProxyHostname = parsedProxyHostname.slice(1);\n }\n // Stop proxying if the hostname ends with the no_proxy host.\n return !stringEndsWith.call(hostname, parsedProxyHostname);\n });\n}\n\n/**\n * Get the value for an environment variable.\n *\n * @param {string} key - The name of the environment variable.\n * @return {string} The value of the environment variable.\n * @private\n */\nfunction getEnv(key) {\n return process.env[key.toLowerCase()] || process.env[key.toUpperCase()] || '';\n}\n\nexports.getProxyForUrl = getProxyForUrl;\n", "/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n * - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function(val, options) {\n options = options || {};\n var type = typeof val;\n if (type === 'string' && val.length > 0) {\n return parse(val);\n } else if (type === 'number' && isFinite(val)) {\n return options.long ? fmtLong(val) : fmtShort(val);\n }\n throw new Error(\n 'val is not a non-empty string or a valid number. val=' +\n JSON.stringify(val)\n );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n str = String(str);\n if (str.length > 100) {\n return;\n }\n var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n str\n );\n if (!match) {\n return;\n }\n var n = parseFloat(match[1]);\n var type = (match[2] || 'ms').toLowerCase();\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'weeks':\n case 'week':\n case 'w':\n return n * w;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n default:\n return undefined;\n }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return Math.round(ms / d) + 'd';\n }\n if (msAbs >= h) {\n return Math.round(ms / h) + 'h';\n }\n if (msAbs >= m) {\n return Math.round(ms / m) + 'm';\n }\n if (msAbs >= s) {\n return Math.round(ms / s) + 's';\n }\n return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return plural(ms, msAbs, d, 'day');\n }\n if (msAbs >= h) {\n return plural(ms, msAbs, h, 'hour');\n }\n if (msAbs >= m) {\n return plural(ms, msAbs, m, 'minute');\n }\n if (msAbs >= s) {\n return plural(ms, msAbs, s, 'second');\n }\n return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n var isPlural = msAbs >= n * 1.5;\n return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}\n", "\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n */\n\nfunction setup(env) {\n\tcreateDebug.debug = createDebug;\n\tcreateDebug.default = createDebug;\n\tcreateDebug.coerce = coerce;\n\tcreateDebug.disable = disable;\n\tcreateDebug.enable = enable;\n\tcreateDebug.enabled = enabled;\n\tcreateDebug.humanize = require('ms');\n\tcreateDebug.destroy = destroy;\n\n\tObject.keys(env).forEach(key => {\n\t\tcreateDebug[key] = env[key];\n\t});\n\n\t/**\n\t* The currently active debug mode names, and names to skip.\n\t*/\n\n\tcreateDebug.names = [];\n\tcreateDebug.skips = [];\n\n\t/**\n\t* Map of special \"%n\" handling functions, for the debug \"format\" argument.\n\t*\n\t* Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n\t*/\n\tcreateDebug.formatters = {};\n\n\t/**\n\t* Selects a color for a debug namespace\n\t* @param {String} namespace The namespace string for the debug instance to be colored\n\t* @return {Number|String} An ANSI color code for the given namespace\n\t* @api private\n\t*/\n\tfunction selectColor(namespace) {\n\t\tlet hash = 0;\n\n\t\tfor (let i = 0; i < namespace.length; i++) {\n\t\t\thash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n\t\t\thash |= 0; // Convert to 32bit integer\n\t\t}\n\n\t\treturn createDebug.colors[Math.abs(hash) % createDebug.colors.length];\n\t}\n\tcreateDebug.selectColor = selectColor;\n\n\t/**\n\t* Create a debugger with the given `namespace`.\n\t*\n\t* @param {String} namespace\n\t* @return {Function}\n\t* @api public\n\t*/\n\tfunction createDebug(namespace) {\n\t\tlet prevTime;\n\t\tlet enableOverride = null;\n\t\tlet namespacesCache;\n\t\tlet enabledCache;\n\n\t\tfunction debug(...args) {\n\t\t\t// Disabled?\n\t\t\tif (!debug.enabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst self = debug;\n\n\t\t\t// Set `diff` timestamp\n\t\t\tconst curr = Number(new Date());\n\t\t\tconst ms = curr - (prevTime || curr);\n\t\t\tself.diff = ms;\n\t\t\tself.prev = prevTime;\n\t\t\tself.curr = curr;\n\t\t\tprevTime = curr;\n\n\t\t\targs[0] = createDebug.coerce(args[0]);\n\n\t\t\tif (typeof args[0] !== 'string') {\n\t\t\t\t// Anything else let's inspect with %O\n\t\t\t\targs.unshift('%O');\n\t\t\t}\n\n\t\t\t// Apply any `formatters` transformations\n\t\t\tlet index = 0;\n\t\t\targs[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {\n\t\t\t\t// If we encounter an escaped % then don't increase the array index\n\t\t\t\tif (match === '%%') {\n\t\t\t\t\treturn '%';\n\t\t\t\t}\n\t\t\t\tindex++;\n\t\t\t\tconst formatter = createDebug.formatters[format];\n\t\t\t\tif (typeof formatter === 'function') {\n\t\t\t\t\tconst val = args[index];\n\t\t\t\t\tmatch = formatter.call(self, val);\n\n\t\t\t\t\t// Now we need to remove `args[index]` since it's inlined in the `format`\n\t\t\t\t\targs.splice(index, 1);\n\t\t\t\t\tindex--;\n\t\t\t\t}\n\t\t\t\treturn match;\n\t\t\t});\n\n\t\t\t// Apply env-specific formatting (colors, etc.)\n\t\t\tcreateDebug.formatArgs.call(self, args);\n\n\t\t\tconst logFn = self.log || createDebug.log;\n\t\t\tlogFn.apply(self, args);\n\t\t}\n\n\t\tdebug.namespace = namespace;\n\t\tdebug.useColors = createDebug.useColors();\n\t\tdebug.color = createDebug.selectColor(namespace);\n\t\tdebug.extend = extend;\n\t\tdebug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release.\n\n\t\tObject.defineProperty(debug, 'enabled', {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: false,\n\t\t\tget: () => {\n\t\t\t\tif (enableOverride !== null) {\n\t\t\t\t\treturn enableOverride;\n\t\t\t\t}\n\t\t\t\tif (namespacesCache !== createDebug.namespaces) {\n\t\t\t\t\tnamespacesCache = createDebug.namespaces;\n\t\t\t\t\tenabledCache = createDebug.enabled(namespace);\n\t\t\t\t}\n\n\t\t\t\treturn enabledCache;\n\t\t\t},\n\t\t\tset: v => {\n\t\t\t\tenableOverride = v;\n\t\t\t}\n\t\t});\n\n\t\t// Env-specific initialization logic for debug instances\n\t\tif (typeof createDebug.init === 'function') {\n\t\t\tcreateDebug.init(debug);\n\t\t}\n\n\t\treturn debug;\n\t}\n\n\tfunction extend(namespace, delimiter) {\n\t\tconst newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);\n\t\tnewDebug.log = this.log;\n\t\treturn newDebug;\n\t}\n\n\t/**\n\t* Enables a debug mode by namespaces. This can include modes\n\t* separated by a colon and wildcards.\n\t*\n\t* @param {String} namespaces\n\t* @api public\n\t*/\n\tfunction enable(namespaces) {\n\t\tcreateDebug.save(namespaces);\n\t\tcreateDebug.namespaces = namespaces;\n\n\t\tcreateDebug.names = [];\n\t\tcreateDebug.skips = [];\n\n\t\tlet i;\n\t\tconst split = (typeof namespaces === 'string' ? namespaces : '').split(/[\\s,]+/);\n\t\tconst len = split.length;\n\n\t\tfor (i = 0; i < len; i++) {\n\t\t\tif (!split[i]) {\n\t\t\t\t// ignore empty strings\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tnamespaces = split[i].replace(/\\*/g, '.*?');\n\n\t\t\tif (namespaces[0] === '-') {\n\t\t\t\tcreateDebug.skips.push(new RegExp('^' + namespaces.slice(1) + '$'));\n\t\t\t} else {\n\t\t\t\tcreateDebug.names.push(new RegExp('^' + namespaces + '$'));\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t* Disable debug output.\n\t*\n\t* @return {String} namespaces\n\t* @api public\n\t*/\n\tfunction disable() {\n\t\tconst namespaces = [\n\t\t\t...createDebug.names.map(toNamespace),\n\t\t\t...createDebug.skips.map(toNamespace).map(namespace => '-' + namespace)\n\t\t].join(',');\n\t\tcreateDebug.enable('');\n\t\treturn namespaces;\n\t}\n\n\t/**\n\t* Returns true if the given mode name is enabled, false otherwise.\n\t*\n\t* @param {String} name\n\t* @return {Boolean}\n\t* @api public\n\t*/\n\tfunction enabled(name) {\n\t\tif (name[name.length - 1] === '*') {\n\t\t\treturn true;\n\t\t}\n\n\t\tlet i;\n\t\tlet len;\n\n\t\tfor (i = 0, len = createDebug.skips.length; i < len; i++) {\n\t\t\tif (createDebug.skips[i].test(name)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tfor (i = 0, len = createDebug.names.length; i < len; i++) {\n\t\t\tif (createDebug.names[i].test(name)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t* Convert regexp to namespace\n\t*\n\t* @param {RegExp} regxep\n\t* @return {String} namespace\n\t* @api private\n\t*/\n\tfunction toNamespace(regexp) {\n\t\treturn regexp.toString()\n\t\t\t.substring(2, regexp.toString().length - 2)\n\t\t\t.replace(/\\.\\*\\?$/, '*');\n\t}\n\n\t/**\n\t* Coerce `val`.\n\t*\n\t* @param {Mixed} val\n\t* @return {Mixed}\n\t* @api private\n\t*/\n\tfunction coerce(val) {\n\t\tif (val instanceof Error) {\n\t\t\treturn val.stack || val.message;\n\t\t}\n\t\treturn val;\n\t}\n\n\t/**\n\t* XXX DO NOT USE. This is a temporary stub function.\n\t* XXX It WILL be removed in the next major release.\n\t*/\n\tfunction destroy() {\n\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t}\n\n\tcreateDebug.enable(createDebug.load());\n\n\treturn createDebug;\n}\n\nmodule.exports = setup;\n", "/* eslint-env browser */\n\n/**\n * This is the web browser implementation of `debug()`.\n */\n\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = localstorage();\nexports.destroy = (() => {\n\tlet warned = false;\n\n\treturn () => {\n\t\tif (!warned) {\n\t\t\twarned = true;\n\t\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t\t}\n\t};\n})();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n\t'#0000CC',\n\t'#0000FF',\n\t'#0033CC',\n\t'#0033FF',\n\t'#0066CC',\n\t'#0066FF',\n\t'#0099CC',\n\t'#0099FF',\n\t'#00CC00',\n\t'#00CC33',\n\t'#00CC66',\n\t'#00CC99',\n\t'#00CCCC',\n\t'#00CCFF',\n\t'#3300CC',\n\t'#3300FF',\n\t'#3333CC',\n\t'#3333FF',\n\t'#3366CC',\n\t'#3366FF',\n\t'#3399CC',\n\t'#3399FF',\n\t'#33CC00',\n\t'#33CC33',\n\t'#33CC66',\n\t'#33CC99',\n\t'#33CCCC',\n\t'#33CCFF',\n\t'#6600CC',\n\t'#6600FF',\n\t'#6633CC',\n\t'#6633FF',\n\t'#66CC00',\n\t'#66CC33',\n\t'#9900CC',\n\t'#9900FF',\n\t'#9933CC',\n\t'#9933FF',\n\t'#99CC00',\n\t'#99CC33',\n\t'#CC0000',\n\t'#CC0033',\n\t'#CC0066',\n\t'#CC0099',\n\t'#CC00CC',\n\t'#CC00FF',\n\t'#CC3300',\n\t'#CC3333',\n\t'#CC3366',\n\t'#CC3399',\n\t'#CC33CC',\n\t'#CC33FF',\n\t'#CC6600',\n\t'#CC6633',\n\t'#CC9900',\n\t'#CC9933',\n\t'#CCCC00',\n\t'#CCCC33',\n\t'#FF0000',\n\t'#FF0033',\n\t'#FF0066',\n\t'#FF0099',\n\t'#FF00CC',\n\t'#FF00FF',\n\t'#FF3300',\n\t'#FF3333',\n\t'#FF3366',\n\t'#FF3399',\n\t'#FF33CC',\n\t'#FF33FF',\n\t'#FF6600',\n\t'#FF6633',\n\t'#FF9900',\n\t'#FF9933',\n\t'#FFCC00',\n\t'#FFCC33'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\n// eslint-disable-next-line complexity\nfunction useColors() {\n\t// NB: In an Electron preload script, document will be defined but not fully\n\t// initialized. Since we know we're in Chrome, we'll just detect this case\n\t// explicitly\n\tif (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {\n\t\treturn true;\n\t}\n\n\t// Internet Explorer and Edge do not support colors.\n\tif (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n\t\treturn false;\n\t}\n\n\t// Is webkit? http://stackoverflow.com/a/16459606/376773\n\t// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n\treturn (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n\t\t// Is firebug? http://stackoverflow.com/a/398120/376773\n\t\t(typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n\t\t// Is firefox >= v31?\n\t\t// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||\n\t\t// Double check webkit in userAgent just in case we are in a worker\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\targs[0] = (this.useColors ? '%c' : '') +\n\t\tthis.namespace +\n\t\t(this.useColors ? ' %c' : ' ') +\n\t\targs[0] +\n\t\t(this.useColors ? '%c ' : ' ') +\n\t\t'+' + module.exports.humanize(this.diff);\n\n\tif (!this.useColors) {\n\t\treturn;\n\t}\n\n\tconst c = 'color: ' + this.color;\n\targs.splice(1, 0, c, 'color: inherit');\n\n\t// The final \"%c\" is somewhat tricky, because there could be other\n\t// arguments passed either before or after the %c, so we need to\n\t// figure out the correct index to insert the CSS into\n\tlet index = 0;\n\tlet lastC = 0;\n\targs[0].replace(/%[a-zA-Z%]/g, match => {\n\t\tif (match === '%%') {\n\t\t\treturn;\n\t\t}\n\t\tindex++;\n\t\tif (match === '%c') {\n\t\t\t// We only are interested in the *last* %c\n\t\t\t// (the user may have provided their own)\n\t\t\tlastC = index;\n\t\t}\n\t});\n\n\targs.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.debug()` when available.\n * No-op when `console.debug` is not a \"function\".\n * If `console.debug` is not available, falls back\n * to `console.log`.\n *\n * @api public\n */\nexports.log = console.debug || console.log || (() => {});\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\ttry {\n\t\tif (namespaces) {\n\t\t\texports.storage.setItem('debug', namespaces);\n\t\t} else {\n\t\t\texports.storage.removeItem('debug');\n\t\t}\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\nfunction load() {\n\tlet r;\n\ttry {\n\t\tr = exports.storage.getItem('debug');\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n\n\t// If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n\tif (!r && typeof process !== 'undefined' && 'env' in process) {\n\t\tr = process.env.DEBUG;\n\t}\n\n\treturn r;\n}\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n\ttry {\n\t\t// TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context\n\t\t// The Browser also has localStorage in the global context.\n\t\treturn localStorage;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nformatters.j = function (v) {\n\ttry {\n\t\treturn JSON.stringify(v);\n\t} catch (error) {\n\t\treturn '[UnexpectedJSONParseError]: ' + error.message;\n\t}\n};\n", "'use strict';\n\nmodule.exports = (flag, argv = process.argv) => {\n\tconst prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--');\n\tconst position = argv.indexOf(prefix + flag);\n\tconst terminatorPosition = argv.indexOf('--');\n\treturn position !== -1 && (terminatorPosition === -1 || position < terminatorPosition);\n};\n", "'use strict';\nconst os = require('os');\nconst tty = require('tty');\nconst hasFlag = require('has-flag');\n\nconst {env} = process;\n\nlet forceColor;\nif (hasFlag('no-color') ||\n\thasFlag('no-colors') ||\n\thasFlag('color=false') ||\n\thasFlag('color=never')) {\n\tforceColor = 0;\n} else if (hasFlag('color') ||\n\thasFlag('colors') ||\n\thasFlag('color=true') ||\n\thasFlag('color=always')) {\n\tforceColor = 1;\n}\n\nif ('FORCE_COLOR' in env) {\n\tif (env.FORCE_COLOR === 'true') {\n\t\tforceColor = 1;\n\t} else if (env.FORCE_COLOR === 'false') {\n\t\tforceColor = 0;\n\t} else {\n\t\tforceColor = env.FORCE_COLOR.length === 0 ? 1 : Math.min(parseInt(env.FORCE_COLOR, 10), 3);\n\t}\n}\n\nfunction translateLevel(level) {\n\tif (level === 0) {\n\t\treturn false;\n\t}\n\n\treturn {\n\t\tlevel,\n\t\thasBasic: true,\n\t\thas256: level >= 2,\n\t\thas16m: level >= 3\n\t};\n}\n\nfunction supportsColor(haveStream, streamIsTTY) {\n\tif (forceColor === 0) {\n\t\treturn 0;\n\t}\n\n\tif (hasFlag('color=16m') ||\n\t\thasFlag('color=full') ||\n\t\thasFlag('color=truecolor')) {\n\t\treturn 3;\n\t}\n\n\tif (hasFlag('color=256')) {\n\t\treturn 2;\n\t}\n\n\tif (haveStream && !streamIsTTY && forceColor === undefined) {\n\t\treturn 0;\n\t}\n\n\tconst min = forceColor || 0;\n\n\tif (env.TERM === 'dumb') {\n\t\treturn min;\n\t}\n\n\tif (process.platform === 'win32') {\n\t\t// Windows 10 build 10586 is the first Windows release that supports 256 colors.\n\t\t// Windows 10 build 14931 is the first release that supports 16m/TrueColor.\n\t\tconst osRelease = os.release().split('.');\n\t\tif (\n\t\t\tNumber(osRelease[0]) >= 10 &&\n\t\t\tNumber(osRelease[2]) >= 10586\n\t\t) {\n\t\t\treturn Number(osRelease[2]) >= 14931 ? 3 : 2;\n\t\t}\n\n\t\treturn 1;\n\t}\n\n\tif ('CI' in env) {\n\t\tif (['TRAVIS', 'CIRCLECI', 'APPVEYOR', 'GITLAB_CI', 'GITHUB_ACTIONS', 'BUILDKITE'].some(sign => sign in env) || env.CI_NAME === 'codeship') {\n\t\t\treturn 1;\n\t\t}\n\n\t\treturn min;\n\t}\n\n\tif ('TEAMCITY_VERSION' in env) {\n\t\treturn /^(9\\.(0*[1-9]\\d*)\\.|\\d{2,}\\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0;\n\t}\n\n\tif (env.COLORTERM === 'truecolor') {\n\t\treturn 3;\n\t}\n\n\tif ('TERM_PROGRAM' in env) {\n\t\tconst version = parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10);\n\n\t\tswitch (env.TERM_PROGRAM) {\n\t\t\tcase 'iTerm.app':\n\t\t\t\treturn version >= 3 ? 3 : 2;\n\t\t\tcase 'Apple_Terminal':\n\t\t\t\treturn 2;\n\t\t\t// No default\n\t\t}\n\t}\n\n\tif (/-256(color)?$/i.test(env.TERM)) {\n\t\treturn 2;\n\t}\n\n\tif (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {\n\t\treturn 1;\n\t}\n\n\tif ('COLORTERM' in env) {\n\t\treturn 1;\n\t}\n\n\treturn min;\n}\n\nfunction getSupportLevel(stream) {\n\tconst level = supportsColor(stream, stream && stream.isTTY);\n\treturn translateLevel(level);\n}\n\nmodule.exports = {\n\tsupportsColor: getSupportLevel,\n\tstdout: translateLevel(supportsColor(true, tty.isatty(1))),\n\tstderr: translateLevel(supportsColor(true, tty.isatty(2)))\n};\n", "/**\n * Module dependencies.\n */\n\nconst tty = require('tty');\nconst util = require('util');\n\n/**\n * This is the Node.js implementation of `debug()`.\n */\n\nexports.init = init;\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.destroy = util.deprecate(\n\t() => {},\n\t'Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.'\n);\n\n/**\n * Colors.\n */\n\nexports.colors = [6, 2, 3, 4, 5, 1];\n\ntry {\n\t// Optional dependency (as in, doesn't need to be installed, NOT like optionalDependencies in package.json)\n\t// eslint-disable-next-line import/no-extraneous-dependencies\n\tconst supportsColor = require('supports-color');\n\n\tif (supportsColor && (supportsColor.stderr || supportsColor).level >= 2) {\n\t\texports.colors = [\n\t\t\t20,\n\t\t\t21,\n\t\t\t26,\n\t\t\t27,\n\t\t\t32,\n\t\t\t33,\n\t\t\t38,\n\t\t\t39,\n\t\t\t40,\n\t\t\t41,\n\t\t\t42,\n\t\t\t43,\n\t\t\t44,\n\t\t\t45,\n\t\t\t56,\n\t\t\t57,\n\t\t\t62,\n\t\t\t63,\n\t\t\t68,\n\t\t\t69,\n\t\t\t74,\n\t\t\t75,\n\t\t\t76,\n\t\t\t77,\n\t\t\t78,\n\t\t\t79,\n\t\t\t80,\n\t\t\t81,\n\t\t\t92,\n\t\t\t93,\n\t\t\t98,\n\t\t\t99,\n\t\t\t112,\n\t\t\t113,\n\t\t\t128,\n\t\t\t129,\n\t\t\t134,\n\t\t\t135,\n\t\t\t148,\n\t\t\t149,\n\t\t\t160,\n\t\t\t161,\n\t\t\t162,\n\t\t\t163,\n\t\t\t164,\n\t\t\t165,\n\t\t\t166,\n\t\t\t167,\n\t\t\t168,\n\t\t\t169,\n\t\t\t170,\n\t\t\t171,\n\t\t\t172,\n\t\t\t173,\n\t\t\t178,\n\t\t\t179,\n\t\t\t184,\n\t\t\t185,\n\t\t\t196,\n\t\t\t197,\n\t\t\t198,\n\t\t\t199,\n\t\t\t200,\n\t\t\t201,\n\t\t\t202,\n\t\t\t203,\n\t\t\t204,\n\t\t\t205,\n\t\t\t206,\n\t\t\t207,\n\t\t\t208,\n\t\t\t209,\n\t\t\t214,\n\t\t\t215,\n\t\t\t220,\n\t\t\t221\n\t\t];\n\t}\n} catch (error) {\n\t// Swallow - we only care if `supports-color` is available; it doesn't have to be.\n}\n\n/**\n * Build up the default `inspectOpts` object from the environment variables.\n *\n * $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js\n */\n\nexports.inspectOpts = Object.keys(process.env).filter(key => {\n\treturn /^debug_/i.test(key);\n}).reduce((obj, key) => {\n\t// Camel-case\n\tconst prop = key\n\t\t.substring(6)\n\t\t.toLowerCase()\n\t\t.replace(/_([a-z])/g, (_, k) => {\n\t\t\treturn k.toUpperCase();\n\t\t});\n\n\t// Coerce string value into JS value\n\tlet val = process.env[key];\n\tif (/^(yes|on|true|enabled)$/i.test(val)) {\n\t\tval = true;\n\t} else if (/^(no|off|false|disabled)$/i.test(val)) {\n\t\tval = false;\n\t} else if (val === 'null') {\n\t\tval = null;\n\t} else {\n\t\tval = Number(val);\n\t}\n\n\tobj[prop] = val;\n\treturn obj;\n}, {});\n\n/**\n * Is stdout a TTY? Colored output is enabled when `true`.\n */\n\nfunction useColors() {\n\treturn 'colors' in exports.inspectOpts ?\n\t\tBoolean(exports.inspectOpts.colors) :\n\t\ttty.isatty(process.stderr.fd);\n}\n\n/**\n * Adds ANSI color escape codes if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\tconst {namespace: name, useColors} = this;\n\n\tif (useColors) {\n\t\tconst c = this.color;\n\t\tconst colorCode = '\\u001B[3' + (c < 8 ? c : '8;5;' + c);\n\t\tconst prefix = ` ${colorCode};1m${name} \\u001B[0m`;\n\n\t\targs[0] = prefix + args[0].split('\\n').join('\\n' + prefix);\n\t\targs.push(colorCode + 'm+' + module.exports.humanize(this.diff) + '\\u001B[0m');\n\t} else {\n\t\targs[0] = getDate() + name + ' ' + args[0];\n\t}\n}\n\nfunction getDate() {\n\tif (exports.inspectOpts.hideDate) {\n\t\treturn '';\n\t}\n\treturn new Date().toISOString() + ' ';\n}\n\n/**\n * Invokes `util.format()` with the specified arguments and writes to stderr.\n */\n\nfunction log(...args) {\n\treturn process.stderr.write(util.format(...args) + '\\n');\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\tif (namespaces) {\n\t\tprocess.env.DEBUG = namespaces;\n\t} else {\n\t\t// If you set a process.env field to null or undefined, it gets cast to the\n\t\t// string 'null' or 'undefined'. Just delete instead.\n\t\tdelete process.env.DEBUG;\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n\treturn process.env.DEBUG;\n}\n\n/**\n * Init logic for `debug` instances.\n *\n * Create a new `inspectOpts` object in case `useColors` is set\n * differently for a particular `debug` instance.\n */\n\nfunction init(debug) {\n\tdebug.inspectOpts = {};\n\n\tconst keys = Object.keys(exports.inspectOpts);\n\tfor (let i = 0; i < keys.length; i++) {\n\t\tdebug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]];\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %o to `util.inspect()`, all on a single line.\n */\n\nformatters.o = function (v) {\n\tthis.inspectOpts.colors = this.useColors;\n\treturn util.inspect(v, this.inspectOpts)\n\t\t.split('\\n')\n\t\t.map(str => str.trim())\n\t\t.join(' ');\n};\n\n/**\n * Map %O to `util.inspect()`, allowing multiple lines if needed.\n */\n\nformatters.O = function (v) {\n\tthis.inspectOpts.colors = this.useColors;\n\treturn util.inspect(v, this.inspectOpts);\n};\n", "/**\n * Detect Electron renderer / nwjs process, which is node, but we should\n * treat as a browser.\n */\n\nif (typeof process === 'undefined' || process.type === 'renderer' || process.browser === true || process.__nwjs) {\n\tmodule.exports = require('./browser.js');\n} else {\n\tmodule.exports = require('./node.js');\n}\n", "var debug;\n\nmodule.exports = function () {\n if (!debug) {\n try {\n /* eslint global-require: off */\n debug = require(\"debug\")(\"follow-redirects\");\n }\n catch (error) { /* */ }\n if (typeof debug !== \"function\") {\n debug = function () { /* */ };\n }\n }\n debug.apply(null, arguments);\n};\n", "var url = require(\"url\");\nvar URL = url.URL;\nvar http = require(\"http\");\nvar https = require(\"https\");\nvar Writable = require(\"stream\").Writable;\nvar assert = require(\"assert\");\nvar debug = require(\"./debug\");\n\n// Whether to use the native URL object or the legacy url module\nvar useNativeURL = false;\ntry {\n assert(new URL());\n}\ncatch (error) {\n useNativeURL = error.code === \"ERR_INVALID_URL\";\n}\n\n// URL fields to preserve in copy operations\nvar preservedUrlFields = [\n \"auth\",\n \"host\",\n \"hostname\",\n \"href\",\n \"path\",\n \"pathname\",\n \"port\",\n \"protocol\",\n \"query\",\n \"search\",\n \"hash\",\n];\n\n// Create handlers that pass events from native requests\nvar events = [\"abort\", \"aborted\", \"connect\", \"error\", \"socket\", \"timeout\"];\nvar eventHandlers = Object.create(null);\nevents.forEach(function (event) {\n eventHandlers[event] = function (arg1, arg2, arg3) {\n this._redirectable.emit(event, arg1, arg2, arg3);\n };\n});\n\n// Error types with codes\nvar InvalidUrlError = createErrorType(\n \"ERR_INVALID_URL\",\n \"Invalid URL\",\n TypeError\n);\nvar RedirectionError = createErrorType(\n \"ERR_FR_REDIRECTION_FAILURE\",\n \"Redirected request failed\"\n);\nvar TooManyRedirectsError = createErrorType(\n \"ERR_FR_TOO_MANY_REDIRECTS\",\n \"Maximum number of redirects exceeded\",\n RedirectionError\n);\nvar MaxBodyLengthExceededError = createErrorType(\n \"ERR_FR_MAX_BODY_LENGTH_EXCEEDED\",\n \"Request body larger than maxBodyLength limit\"\n);\nvar WriteAfterEndError = createErrorType(\n \"ERR_STREAM_WRITE_AFTER_END\",\n \"write after end\"\n);\n\n// istanbul ignore next\nvar destroy = Writable.prototype.destroy || noop;\n\n// An HTTP(S) request that can be redirected\nfunction RedirectableRequest(options, responseCallback) {\n // Initialize the request\n Writable.call(this);\n this._sanitizeOptions(options);\n this._options = options;\n this._ended = false;\n this._ending = false;\n this._redirectCount = 0;\n this._redirects = [];\n this._requestBodyLength = 0;\n this._requestBodyBuffers = [];\n\n // Attach a callback if passed\n if (responseCallback) {\n this.on(\"response\", responseCallback);\n }\n\n // React to responses of native requests\n var self = this;\n this._onNativeResponse = function (response) {\n try {\n self._processResponse(response);\n }\n catch (cause) {\n self.emit(\"error\", cause instanceof RedirectionError ?\n cause : new RedirectionError({ cause: cause }));\n }\n };\n\n // Perform the first request\n this._performRequest();\n}\nRedirectableRequest.prototype = Object.create(Writable.prototype);\n\nRedirectableRequest.prototype.abort = function () {\n destroyRequest(this._currentRequest);\n this._currentRequest.abort();\n this.emit(\"abort\");\n};\n\nRedirectableRequest.prototype.destroy = function (error) {\n destroyRequest(this._currentRequest, error);\n destroy.call(this, error);\n return this;\n};\n\n// Writes buffered data to the current native request\nRedirectableRequest.prototype.write = function (data, encoding, callback) {\n // Writing is not allowed if end has been called\n if (this._ending) {\n throw new WriteAfterEndError();\n }\n\n // Validate input and shift parameters if necessary\n if (!isString(data) && !isBuffer(data)) {\n throw new TypeError(\"data should be a string, Buffer or Uint8Array\");\n }\n if (isFunction(encoding)) {\n callback = encoding;\n encoding = null;\n }\n\n // Ignore empty buffers, since writing them doesn't invoke the callback\n // https://github.com/nodejs/node/issues/22066\n if (data.length === 0) {\n if (callback) {\n callback();\n }\n return;\n }\n // Only write when we don't exceed the maximum body length\n if (this._requestBodyLength + data.length <= this._options.maxBodyLength) {\n this._requestBodyLength += data.length;\n this._requestBodyBuffers.push({ data: data, encoding: encoding });\n this._currentRequest.write(data, encoding, callback);\n }\n // Error when we exceed the maximum body length\n else {\n this.emit(\"error\", new MaxBodyLengthExceededError());\n this.abort();\n }\n};\n\n// Ends the current native request\nRedirectableRequest.prototype.end = function (data, encoding, callback) {\n // Shift parameters if necessary\n if (isFunction(data)) {\n callback = data;\n data = encoding = null;\n }\n else if (isFunction(encoding)) {\n callback = encoding;\n encoding = null;\n }\n\n // Write data if needed and end\n if (!data) {\n this._ended = this._ending = true;\n this._currentRequest.end(null, null, callback);\n }\n else {\n var self = this;\n var currentRequest = this._currentRequest;\n this.write(data, encoding, function () {\n self._ended = true;\n currentRequest.end(null, null, callback);\n });\n this._ending = true;\n }\n};\n\n// Sets a header value on the current native request\nRedirectableRequest.prototype.setHeader = function (name, value) {\n this._options.headers[name] = value;\n this._currentRequest.setHeader(name, value);\n};\n\n// Clears a header value on the current native request\nRedirectableRequest.prototype.removeHeader = function (name) {\n delete this._options.headers[name];\n this._currentRequest.removeHeader(name);\n};\n\n// Global timeout for all underlying requests\nRedirectableRequest.prototype.setTimeout = function (msecs, callback) {\n var self = this;\n\n // Destroys the socket on timeout\n function destroyOnTimeout(socket) {\n socket.setTimeout(msecs);\n socket.removeListener(\"timeout\", socket.destroy);\n socket.addListener(\"timeout\", socket.destroy);\n }\n\n // Sets up a timer to trigger a timeout event\n function startTimer(socket) {\n if (self._timeout) {\n clearTimeout(self._timeout);\n }\n self._timeout = setTimeout(function () {\n self.emit(\"timeout\");\n clearTimer();\n }, msecs);\n destroyOnTimeout(socket);\n }\n\n // Stops a timeout from triggering\n function clearTimer() {\n // Clear the timeout\n if (self._timeout) {\n clearTimeout(self._timeout);\n self._timeout = null;\n }\n\n // Clean up all attached listeners\n self.removeListener(\"abort\", clearTimer);\n self.removeListener(\"error\", clearTimer);\n self.removeListener(\"response\", clearTimer);\n self.removeListener(\"close\", clearTimer);\n if (callback) {\n self.removeListener(\"timeout\", callback);\n }\n if (!self.socket) {\n self._currentRequest.removeListener(\"socket\", startTimer);\n }\n }\n\n // Attach callback if passed\n if (callback) {\n this.on(\"timeout\", callback);\n }\n\n // Start the timer if or when the socket is opened\n if (this.socket) {\n startTimer(this.socket);\n }\n else {\n this._currentRequest.once(\"socket\", startTimer);\n }\n\n // Clean up on events\n this.on(\"socket\", destroyOnTimeout);\n this.on(\"abort\", clearTimer);\n this.on(\"error\", clearTimer);\n this.on(\"response\", clearTimer);\n this.on(\"close\", clearTimer);\n\n return this;\n};\n\n// Proxy all other public ClientRequest methods\n[\n \"flushHeaders\", \"getHeader\",\n \"setNoDelay\", \"setSocketKeepAlive\",\n].forEach(function (method) {\n RedirectableRequest.prototype[method] = function (a, b) {\n return this._currentRequest[method](a, b);\n };\n});\n\n// Proxy all public ClientRequest properties\n[\"aborted\", \"connection\", \"socket\"].forEach(function (property) {\n Object.defineProperty(RedirectableRequest.prototype, property, {\n get: function () { return this._currentRequest[property]; },\n });\n});\n\nRedirectableRequest.prototype._sanitizeOptions = function (options) {\n // Ensure headers are always present\n if (!options.headers) {\n options.headers = {};\n }\n\n // Since http.request treats host as an alias of hostname,\n // but the url module interprets host as hostname plus port,\n // eliminate the host property to avoid confusion.\n if (options.host) {\n // Use hostname if set, because it has precedence\n if (!options.hostname) {\n options.hostname = options.host;\n }\n delete options.host;\n }\n\n // Complete the URL object when necessary\n if (!options.pathname && options.path) {\n var searchPos = options.path.indexOf(\"?\");\n if (searchPos < 0) {\n options.pathname = options.path;\n }\n else {\n options.pathname = options.path.substring(0, searchPos);\n options.search = options.path.substring(searchPos);\n }\n }\n};\n\n\n// Executes the next native request (initial or redirect)\nRedirectableRequest.prototype._performRequest = function () {\n // Load the native protocol\n var protocol = this._options.protocol;\n var nativeProtocol = this._options.nativeProtocols[protocol];\n if (!nativeProtocol) {\n throw new TypeError(\"Unsupported protocol \" + protocol);\n }\n\n // If specified, use the agent corresponding to the protocol\n // (HTTP and HTTPS use different types of agents)\n if (this._options.agents) {\n var scheme = protocol.slice(0, -1);\n this._options.agent = this._options.agents[scheme];\n }\n\n // Create the native request and set up its event handlers\n var request = this._currentRequest =\n nativeProtocol.request(this._options, this._onNativeResponse);\n request._redirectable = this;\n for (var event of events) {\n request.on(event, eventHandlers[event]);\n }\n\n // RFC7230\u00A75.3.1: When making a request directly to an origin server, [\u2026]\n // a client MUST send only the absolute path [\u2026] as the request-target.\n this._currentUrl = /^\\//.test(this._options.path) ?\n url.format(this._options) :\n // When making a request to a proxy, [\u2026]\n // a client MUST send the target URI in absolute-form [\u2026].\n this._options.path;\n\n // End a redirected request\n // (The first request must be ended explicitly with RedirectableRequest#end)\n if (this._isRedirect) {\n // Write the request entity and end\n var i = 0;\n var self = this;\n var buffers = this._requestBodyBuffers;\n (function writeNext(error) {\n // Only write if this request has not been redirected yet\n /* istanbul ignore else */\n if (request === self._currentRequest) {\n // Report any write errors\n /* istanbul ignore if */\n if (error) {\n self.emit(\"error\", error);\n }\n // Write the next buffer if there are still left\n else if (i < buffers.length) {\n var buffer = buffers[i++];\n /* istanbul ignore else */\n if (!request.finished) {\n request.write(buffer.data, buffer.encoding, writeNext);\n }\n }\n // End the request if `end` has been called on us\n else if (self._ended) {\n request.end();\n }\n }\n }());\n }\n};\n\n// Processes a response from the current native request\nRedirectableRequest.prototype._processResponse = function (response) {\n // Store the redirected response\n var statusCode = response.statusCode;\n if (this._options.trackRedirects) {\n this._redirects.push({\n url: this._currentUrl,\n headers: response.headers,\n statusCode: statusCode,\n });\n }\n\n // RFC7231\u00A76.4: The 3xx (Redirection) class of status code indicates\n // that further action needs to be taken by the user agent in order to\n // fulfill the request. If a Location header field is provided,\n // the user agent MAY automatically redirect its request to the URI\n // referenced by the Location field value,\n // even if the specific status code is not understood.\n\n // If the response is not a redirect; return it as-is\n var location = response.headers.location;\n if (!location || this._options.followRedirects === false ||\n statusCode < 300 || statusCode >= 400) {\n response.responseUrl = this._currentUrl;\n response.redirects = this._redirects;\n this.emit(\"response\", response);\n\n // Clean up\n this._requestBodyBuffers = [];\n return;\n }\n\n // The response is a redirect, so abort the current request\n destroyRequest(this._currentRequest);\n // Discard the remainder of the response to avoid waiting for data\n response.destroy();\n\n // RFC7231\u00A76.4: A client SHOULD detect and intervene\n // in cyclical redirections (i.e., \"infinite\" redirection loops).\n if (++this._redirectCount > this._options.maxRedirects) {\n throw new TooManyRedirectsError();\n }\n\n // Store the request headers if applicable\n var requestHeaders;\n var beforeRedirect = this._options.beforeRedirect;\n if (beforeRedirect) {\n requestHeaders = Object.assign({\n // The Host header was set by nativeProtocol.request\n Host: response.req.getHeader(\"host\"),\n }, this._options.headers);\n }\n\n // RFC7231\u00A76.4: Automatic redirection needs to done with\n // care for methods not known to be safe, [\u2026]\n // RFC7231\u00A76.4.2\u20133: For historical reasons, a user agent MAY change\n // the request method from POST to GET for the subsequent request.\n var method = this._options.method;\n if ((statusCode === 301 || statusCode === 302) && this._options.method === \"POST\" ||\n // RFC7231\u00A76.4.4: The 303 (See Other) status code indicates that\n // the server is redirecting the user agent to a different resource [\u2026]\n // A user agent can perform a retrieval request targeting that URI\n // (a GET or HEAD request if using HTTP) [\u2026]\n (statusCode === 303) && !/^(?:GET|HEAD)$/.test(this._options.method)) {\n this._options.method = \"GET\";\n // Drop a possible entity and headers related to it\n this._requestBodyBuffers = [];\n removeMatchingHeaders(/^content-/i, this._options.headers);\n }\n\n // Drop the Host header, as the redirect might lead to a different host\n var currentHostHeader = removeMatchingHeaders(/^host$/i, this._options.headers);\n\n // If the redirect is relative, carry over the host of the last request\n var currentUrlParts = parseUrl(this._currentUrl);\n var currentHost = currentHostHeader || currentUrlParts.host;\n var currentUrl = /^\\w+:/.test(location) ? this._currentUrl :\n url.format(Object.assign(currentUrlParts, { host: currentHost }));\n\n // Create the redirected request\n var redirectUrl = resolveUrl(location, currentUrl);\n debug(\"redirecting to\", redirectUrl.href);\n this._isRedirect = true;\n spreadUrlObject(redirectUrl, this._options);\n\n // Drop confidential headers when redirecting to a less secure protocol\n // or to a different domain that is not a superdomain\n if (redirectUrl.protocol !== currentUrlParts.protocol &&\n redirectUrl.protocol !== \"https:\" ||\n redirectUrl.host !== currentHost &&\n !isSubdomain(redirectUrl.host, currentHost)) {\n removeMatchingHeaders(/^(?:(?:proxy-)?authorization|cookie)$/i, this._options.headers);\n }\n\n // Evaluate the beforeRedirect callback\n if (isFunction(beforeRedirect)) {\n var responseDetails = {\n headers: response.headers,\n statusCode: statusCode,\n };\n var requestDetails = {\n url: currentUrl,\n method: method,\n headers: requestHeaders,\n };\n beforeRedirect(this._options, responseDetails, requestDetails);\n this._sanitizeOptions(this._options);\n }\n\n // Perform the redirected request\n this._performRequest();\n};\n\n// Wraps the key/value object of protocols with redirect functionality\nfunction wrap(protocols) {\n // Default settings\n var exports = {\n maxRedirects: 21,\n maxBodyLength: 10 * 1024 * 1024,\n };\n\n // Wrap each protocol\n var nativeProtocols = {};\n Object.keys(protocols).forEach(function (scheme) {\n var protocol = scheme + \":\";\n var nativeProtocol = nativeProtocols[protocol] = protocols[scheme];\n var wrappedProtocol = exports[scheme] = Object.create(nativeProtocol);\n\n // Executes a request, following redirects\n function request(input, options, callback) {\n // Parse parameters, ensuring that input is an object\n if (isURL(input)) {\n input = spreadUrlObject(input);\n }\n else if (isString(input)) {\n input = spreadUrlObject(parseUrl(input));\n }\n else {\n callback = options;\n options = validateUrl(input);\n input = { protocol: protocol };\n }\n if (isFunction(options)) {\n callback = options;\n options = null;\n }\n\n // Set defaults\n options = Object.assign({\n maxRedirects: exports.maxRedirects,\n maxBodyLength: exports.maxBodyLength,\n }, input, options);\n options.nativeProtocols = nativeProtocols;\n if (!isString(options.host) && !isString(options.hostname)) {\n options.hostname = \"::1\";\n }\n\n assert.equal(options.protocol, protocol, \"protocol mismatch\");\n debug(\"options\", options);\n return new RedirectableRequest(options, callback);\n }\n\n // Executes a GET request, following redirects\n function get(input, options, callback) {\n var wrappedRequest = wrappedProtocol.request(input, options, callback);\n wrappedRequest.end();\n return wrappedRequest;\n }\n\n // Expose the properties on the wrapped protocol\n Object.defineProperties(wrappedProtocol, {\n request: { value: request, configurable: true, enumerable: true, writable: true },\n get: { value: get, configurable: true, enumerable: true, writable: true },\n });\n });\n return exports;\n}\n\nfunction noop() { /* empty */ }\n\nfunction parseUrl(input) {\n var parsed;\n /* istanbul ignore else */\n if (useNativeURL) {\n parsed = new URL(input);\n }\n else {\n // Ensure the URL is valid and absolute\n parsed = validateUrl(url.parse(input));\n if (!isString(parsed.protocol)) {\n throw new InvalidUrlError({ input });\n }\n }\n return parsed;\n}\n\nfunction resolveUrl(relative, base) {\n /* istanbul ignore next */\n return useNativeURL ? new URL(relative, base) : parseUrl(url.resolve(base, relative));\n}\n\nfunction validateUrl(input) {\n if (/^\\[/.test(input.hostname) && !/^\\[[:0-9a-f]+\\]$/i.test(input.hostname)) {\n throw new InvalidUrlError({ input: input.href || input });\n }\n if (/^\\[/.test(input.host) && !/^\\[[:0-9a-f]+\\](:\\d+)?$/i.test(input.host)) {\n throw new InvalidUrlError({ input: input.href || input });\n }\n return input;\n}\n\nfunction spreadUrlObject(urlObject, target) {\n var spread = target || {};\n for (var key of preservedUrlFields) {\n spread[key] = urlObject[key];\n }\n\n // Fix IPv6 hostname\n if (spread.hostname.startsWith(\"[\")) {\n spread.hostname = spread.hostname.slice(1, -1);\n }\n // Ensure port is a number\n if (spread.port !== \"\") {\n spread.port = Number(spread.port);\n }\n // Concatenate path\n spread.path = spread.search ? spread.pathname + spread.search : spread.pathname;\n\n return spread;\n}\n\nfunction removeMatchingHeaders(regex, headers) {\n var lastValue;\n for (var header in headers) {\n if (regex.test(header)) {\n lastValue = headers[header];\n delete headers[header];\n }\n }\n return (lastValue === null || typeof lastValue === \"undefined\") ?\n undefined : String(lastValue).trim();\n}\n\nfunction createErrorType(code, message, baseClass) {\n // Create constructor\n function CustomError(properties) {\n Error.captureStackTrace(this, this.constructor);\n Object.assign(this, properties || {});\n this.code = code;\n this.message = this.cause ? message + \": \" + this.cause.message : message;\n }\n\n // Attach constructor and set default properties\n CustomError.prototype = new (baseClass || Error)();\n Object.defineProperties(CustomError.prototype, {\n constructor: {\n value: CustomError,\n enumerable: false,\n },\n name: {\n value: \"Error [\" + code + \"]\",\n enumerable: false,\n },\n });\n return CustomError;\n}\n\nfunction destroyRequest(request, error) {\n for (var event of events) {\n request.removeListener(event, eventHandlers[event]);\n }\n request.on(\"error\", noop);\n request.destroy(error);\n}\n\nfunction isSubdomain(subdomain, domain) {\n assert(isString(subdomain) && isString(domain));\n var dot = subdomain.length - domain.length - 1;\n return dot > 0 && subdomain[dot] === \".\" && subdomain.endsWith(domain);\n}\n\nfunction isString(value) {\n return typeof value === \"string\" || value instanceof String;\n}\n\nfunction isFunction(value) {\n return typeof value === \"function\";\n}\n\nfunction isBuffer(value) {\n return typeof value === \"object\" && (\"length\" in value);\n}\n\nfunction isURL(value) {\n return URL && value instanceof URL;\n}\n\n// Exports\nmodule.exports = wrap({ http: http, https: https });\nmodule.exports.wrap = wrap;\n", "'use strict';\n\nexport default function bind(fn, thisArg) {\n return function wrap() {\n return fn.apply(thisArg, arguments);\n };\n}\n", "'use strict';\n\nimport bind from './helpers/bind.js';\n\n// utils is a library of generic helper functions non-specific to axios\n\nconst {toString} = Object.prototype;\nconst {getPrototypeOf} = Object;\n\nconst kindOf = (cache => thing => {\n const str = toString.call(thing);\n return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());\n})(Object.create(null));\n\nconst kindOfTest = (type) => {\n type = type.toLowerCase();\n return (thing) => kindOf(thing) === type\n}\n\nconst typeOfTest = type => thing => typeof thing === type;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n *\n * @returns {boolean} True if value is an Array, otherwise false\n */\nconst {isArray} = Array;\n\n/**\n * Determine if a value is undefined\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nconst isUndefined = typeOfTest('undefined');\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)\n && isFunction(val.constructor.isBuffer) && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nconst isArrayBuffer = kindOfTest('ArrayBuffer');\n\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n let result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (isArrayBuffer(val.buffer));\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a String, otherwise false\n */\nconst isString = typeOfTest('string');\n\n/**\n * Determine if a value is a Function\n *\n * @param {*} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nconst isFunction = typeOfTest('function');\n\n/**\n * Determine if a value is a Number\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Number, otherwise false\n */\nconst isNumber = typeOfTest('number');\n\n/**\n * Determine if a value is an Object\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an Object, otherwise false\n */\nconst isObject = (thing) => thing !== null && typeof thing === 'object';\n\n/**\n * Determine if a value is a Boolean\n *\n * @param {*} thing The value to test\n * @returns {boolean} True if value is a Boolean, otherwise false\n */\nconst isBoolean = thing => thing === true || thing === false;\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a plain Object, otherwise false\n */\nconst isPlainObject = (val) => {\n if (kindOf(val) !== 'object') {\n return false;\n }\n\n const prototype = getPrototypeOf(val);\n return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in val) && !(Symbol.iterator in val);\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Date, otherwise false\n */\nconst isDate = kindOfTest('Date');\n\n/**\n * Determine if a value is a File\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFile = kindOfTest('File');\n\n/**\n * Determine if a value is a Blob\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nconst isBlob = kindOfTest('Blob');\n\n/**\n * Determine if a value is a FileList\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFileList = kindOfTest('FileList');\n\n/**\n * Determine if a value is a Stream\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nconst isStream = (val) => isObject(val) && isFunction(val.pipe);\n\n/**\n * Determine if a value is a FormData\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nconst isFormData = (thing) => {\n let kind;\n return thing && (\n (typeof FormData === 'function' && thing instanceof FormData) || (\n isFunction(thing.append) && (\n (kind = kindOf(thing)) === 'formdata' ||\n // detect form-data instance\n (kind === 'object' && isFunction(thing.toString) && thing.toString() === '[object FormData]')\n )\n )\n )\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nconst isURLSearchParams = kindOfTest('URLSearchParams');\n\nconst [isReadableStream, isRequest, isResponse, isHeaders] = ['ReadableStream', 'Request', 'Response', 'Headers'].map(kindOfTest);\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n *\n * @returns {String} The String freed of excess whitespace\n */\nconst trim = (str) => str.trim ?\n str.trim() : str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n *\n * @param {Boolean} [allOwnKeys = false]\n * @returns {any}\n */\nfunction forEach(obj, fn, {allOwnKeys = false} = {}) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n let i;\n let l;\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Iterate over object keys\n const keys = allOwnKeys ? Object.getOwnPropertyNames(obj) : Object.keys(obj);\n const len = keys.length;\n let key;\n\n for (i = 0; i < len; i++) {\n key = keys[i];\n fn.call(null, obj[key], key, obj);\n }\n }\n}\n\nfunction findKey(obj, key) {\n key = key.toLowerCase();\n const keys = Object.keys(obj);\n let i = keys.length;\n let _key;\n while (i-- > 0) {\n _key = keys[i];\n if (key === _key.toLowerCase()) {\n return _key;\n }\n }\n return null;\n}\n\nconst _global = (() => {\n /*eslint no-undef:0*/\n if (typeof globalThis !== \"undefined\") return globalThis;\n return typeof self !== \"undefined\" ? self : (typeof window !== 'undefined' ? window : global)\n})();\n\nconst isContextDefined = (context) => !isUndefined(context) && context !== _global;\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n *\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n const {caseless} = isContextDefined(this) && this || {};\n const result = {};\n const assignValue = (val, key) => {\n const targetKey = caseless && findKey(result, key) || key;\n if (isPlainObject(result[targetKey]) && isPlainObject(val)) {\n result[targetKey] = merge(result[targetKey], val);\n } else if (isPlainObject(val)) {\n result[targetKey] = merge({}, val);\n } else if (isArray(val)) {\n result[targetKey] = val.slice();\n } else {\n result[targetKey] = val;\n }\n }\n\n for (let i = 0, l = arguments.length; i < l; i++) {\n arguments[i] && forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n *\n * @param {Boolean} [allOwnKeys]\n * @returns {Object} The resulting value of object a\n */\nconst extend = (a, b, thisArg, {allOwnKeys}= {}) => {\n forEach(b, (val, key) => {\n if (thisArg && isFunction(val)) {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n }, {allOwnKeys});\n return a;\n}\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n *\n * @returns {string} content value without BOM\n */\nconst stripBOM = (content) => {\n if (content.charCodeAt(0) === 0xFEFF) {\n content = content.slice(1);\n }\n return content;\n}\n\n/**\n * Inherit the prototype methods from one constructor into another\n * @param {function} constructor\n * @param {function} superConstructor\n * @param {object} [props]\n * @param {object} [descriptors]\n *\n * @returns {void}\n */\nconst inherits = (constructor, superConstructor, props, descriptors) => {\n constructor.prototype = Object.create(superConstructor.prototype, descriptors);\n constructor.prototype.constructor = constructor;\n Object.defineProperty(constructor, 'super', {\n value: superConstructor.prototype\n });\n props && Object.assign(constructor.prototype, props);\n}\n\n/**\n * Resolve object with deep prototype chain to a flat object\n * @param {Object} sourceObj source object\n * @param {Object} [destObj]\n * @param {Function|Boolean} [filter]\n * @param {Function} [propFilter]\n *\n * @returns {Object}\n */\nconst toFlatObject = (sourceObj, destObj, filter, propFilter) => {\n let props;\n let i;\n let prop;\n const merged = {};\n\n destObj = destObj || {};\n // eslint-disable-next-line no-eq-null,eqeqeq\n if (sourceObj == null) return destObj;\n\n do {\n props = Object.getOwnPropertyNames(sourceObj);\n i = props.length;\n while (i-- > 0) {\n prop = props[i];\n if ((!propFilter || propFilter(prop, sourceObj, destObj)) && !merged[prop]) {\n destObj[prop] = sourceObj[prop];\n merged[prop] = true;\n }\n }\n sourceObj = filter !== false && getPrototypeOf(sourceObj);\n } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype);\n\n return destObj;\n}\n\n/**\n * Determines whether a string ends with the characters of a specified string\n *\n * @param {String} str\n * @param {String} searchString\n * @param {Number} [position= 0]\n *\n * @returns {boolean}\n */\nconst endsWith = (str, searchString, position) => {\n str = String(str);\n if (position === undefined || position > str.length) {\n position = str.length;\n }\n position -= searchString.length;\n const lastIndex = str.indexOf(searchString, position);\n return lastIndex !== -1 && lastIndex === position;\n}\n\n\n/**\n * Returns new array from array like object or null if failed\n *\n * @param {*} [thing]\n *\n * @returns {?Array}\n */\nconst toArray = (thing) => {\n if (!thing) return null;\n if (isArray(thing)) return thing;\n let i = thing.length;\n if (!isNumber(i)) return null;\n const arr = new Array(i);\n while (i-- > 0) {\n arr[i] = thing[i];\n }\n return arr;\n}\n\n/**\n * Checking if the Uint8Array exists and if it does, it returns a function that checks if the\n * thing passed in is an instance of Uint8Array\n *\n * @param {TypedArray}\n *\n * @returns {Array}\n */\n// eslint-disable-next-line func-names\nconst isTypedArray = (TypedArray => {\n // eslint-disable-next-line func-names\n return thing => {\n return TypedArray && thing instanceof TypedArray;\n };\n})(typeof Uint8Array !== 'undefined' && getPrototypeOf(Uint8Array));\n\n/**\n * For each entry in the object, call the function with the key and value.\n *\n * @param {Object} obj - The object to iterate over.\n * @param {Function} fn - The function to call for each entry.\n *\n * @returns {void}\n */\nconst forEachEntry = (obj, fn) => {\n const generator = obj && obj[Symbol.iterator];\n\n const iterator = generator.call(obj);\n\n let result;\n\n while ((result = iterator.next()) && !result.done) {\n const pair = result.value;\n fn.call(obj, pair[0], pair[1]);\n }\n}\n\n/**\n * It takes a regular expression and a string, and returns an array of all the matches\n *\n * @param {string} regExp - The regular expression to match against.\n * @param {string} str - The string to search.\n *\n * @returns {Array}\n */\nconst matchAll = (regExp, str) => {\n let matches;\n const arr = [];\n\n while ((matches = regExp.exec(str)) !== null) {\n arr.push(matches);\n }\n\n return arr;\n}\n\n/* Checking if the kindOfTest function returns true when passed an HTMLFormElement. */\nconst isHTMLForm = kindOfTest('HTMLFormElement');\n\nconst toCamelCase = str => {\n return str.toLowerCase().replace(/[-_\\s]([a-z\\d])(\\w*)/g,\n function replacer(m, p1, p2) {\n return p1.toUpperCase() + p2;\n }\n );\n};\n\n/* Creating a function that will check if an object has a property. */\nconst hasOwnProperty = (({hasOwnProperty}) => (obj, prop) => hasOwnProperty.call(obj, prop))(Object.prototype);\n\n/**\n * Determine if a value is a RegExp object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a RegExp object, otherwise false\n */\nconst isRegExp = kindOfTest('RegExp');\n\nconst reduceDescriptors = (obj, reducer) => {\n const descriptors = Object.getOwnPropertyDescriptors(obj);\n const reducedDescriptors = {};\n\n forEach(descriptors, (descriptor, name) => {\n let ret;\n if ((ret = reducer(descriptor, name, obj)) !== false) {\n reducedDescriptors[name] = ret || descriptor;\n }\n });\n\n Object.defineProperties(obj, reducedDescriptors);\n}\n\n/**\n * Makes all methods read-only\n * @param {Object} obj\n */\n\nconst freezeMethods = (obj) => {\n reduceDescriptors(obj, (descriptor, name) => {\n // skip restricted props in strict mode\n if (isFunction(obj) && ['arguments', 'caller', 'callee'].indexOf(name) !== -1) {\n return false;\n }\n\n const value = obj[name];\n\n if (!isFunction(value)) return;\n\n descriptor.enumerable = false;\n\n if ('writable' in descriptor) {\n descriptor.writable = false;\n return;\n }\n\n if (!descriptor.set) {\n descriptor.set = () => {\n throw Error('Can not rewrite read-only method \\'' + name + '\\'');\n };\n }\n });\n}\n\nconst toObjectSet = (arrayOrString, delimiter) => {\n const obj = {};\n\n const define = (arr) => {\n arr.forEach(value => {\n obj[value] = true;\n });\n }\n\n isArray(arrayOrString) ? define(arrayOrString) : define(String(arrayOrString).split(delimiter));\n\n return obj;\n}\n\nconst noop = () => {}\n\nconst toFiniteNumber = (value, defaultValue) => {\n return value != null && Number.isFinite(value = +value) ? value : defaultValue;\n}\n\nconst ALPHA = 'abcdefghijklmnopqrstuvwxyz'\n\nconst DIGIT = '0123456789';\n\nconst ALPHABET = {\n DIGIT,\n ALPHA,\n ALPHA_DIGIT: ALPHA + ALPHA.toUpperCase() + DIGIT\n}\n\nconst generateString = (size = 16, alphabet = ALPHABET.ALPHA_DIGIT) => {\n let str = '';\n const {length} = alphabet;\n while (size--) {\n str += alphabet[Math.random() * length|0]\n }\n\n return str;\n}\n\n/**\n * If the thing is a FormData object, return true, otherwise return false.\n *\n * @param {unknown} thing - The thing to check.\n *\n * @returns {boolean}\n */\nfunction isSpecCompliantForm(thing) {\n return !!(thing && isFunction(thing.append) && thing[Symbol.toStringTag] === 'FormData' && thing[Symbol.iterator]);\n}\n\nconst toJSONObject = (obj) => {\n const stack = new Array(10);\n\n const visit = (source, i) => {\n\n if (isObject(source)) {\n if (stack.indexOf(source) >= 0) {\n return;\n }\n\n if(!('toJSON' in source)) {\n stack[i] = source;\n const target = isArray(source) ? [] : {};\n\n forEach(source, (value, key) => {\n const reducedValue = visit(value, i + 1);\n !isUndefined(reducedValue) && (target[key] = reducedValue);\n });\n\n stack[i] = undefined;\n\n return target;\n }\n }\n\n return source;\n }\n\n return visit(obj, 0);\n}\n\nconst isAsyncFn = kindOfTest('AsyncFunction');\n\nconst isThenable = (thing) =>\n thing && (isObject(thing) || isFunction(thing)) && isFunction(thing.then) && isFunction(thing.catch);\n\nexport default {\n isArray,\n isArrayBuffer,\n isBuffer,\n isFormData,\n isArrayBufferView,\n isString,\n isNumber,\n isBoolean,\n isObject,\n isPlainObject,\n isReadableStream,\n isRequest,\n isResponse,\n isHeaders,\n isUndefined,\n isDate,\n isFile,\n isBlob,\n isRegExp,\n isFunction,\n isStream,\n isURLSearchParams,\n isTypedArray,\n isFileList,\n forEach,\n merge,\n extend,\n trim,\n stripBOM,\n inherits,\n toFlatObject,\n kindOf,\n kindOfTest,\n endsWith,\n toArray,\n forEachEntry,\n matchAll,\n isHTMLForm,\n hasOwnProperty,\n hasOwnProp: hasOwnProperty, // an alias to avoid ESLint no-prototype-builtins detection\n reduceDescriptors,\n freezeMethods,\n toObjectSet,\n toCamelCase,\n noop,\n toFiniteNumber,\n findKey,\n global: _global,\n isContextDefined,\n ALPHABET,\n generateString,\n isSpecCompliantForm,\n toJSONObject,\n isAsyncFn,\n isThenable\n};\n", "'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [config] The config.\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n *\n * @returns {Error} The created error.\n */\nfunction AxiosError(message, code, config, request, response) {\n Error.call(this);\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n } else {\n this.stack = (new Error()).stack;\n }\n\n this.message = message;\n this.name = 'AxiosError';\n code && (this.code = code);\n config && (this.config = config);\n request && (this.request = request);\n response && (this.response = response);\n}\n\nutils.inherits(AxiosError, Error, {\n toJSON: function toJSON() {\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: utils.toJSONObject(this.config),\n code: this.code,\n status: this.response && this.response.status ? this.response.status : null\n };\n }\n});\n\nconst prototype = AxiosError.prototype;\nconst descriptors = {};\n\n[\n 'ERR_BAD_OPTION_VALUE',\n 'ERR_BAD_OPTION',\n 'ECONNABORTED',\n 'ETIMEDOUT',\n 'ERR_NETWORK',\n 'ERR_FR_TOO_MANY_REDIRECTS',\n 'ERR_DEPRECATED',\n 'ERR_BAD_RESPONSE',\n 'ERR_BAD_REQUEST',\n 'ERR_CANCELED',\n 'ERR_NOT_SUPPORT',\n 'ERR_INVALID_URL'\n// eslint-disable-next-line func-names\n].forEach(code => {\n descriptors[code] = {value: code};\n});\n\nObject.defineProperties(AxiosError, descriptors);\nObject.defineProperty(prototype, 'isAxiosError', {value: true});\n\n// eslint-disable-next-line func-names\nAxiosError.from = (error, code, config, request, response, customProps) => {\n const axiosError = Object.create(prototype);\n\n utils.toFlatObject(error, axiosError, function filter(obj) {\n return obj !== Error.prototype;\n }, prop => {\n return prop !== 'isAxiosError';\n });\n\n AxiosError.call(axiosError, error.message, code, config, request, response);\n\n axiosError.cause = error;\n\n axiosError.name = error.name;\n\n customProps && Object.assign(axiosError, customProps);\n\n return axiosError;\n};\n\nexport default AxiosError;\n", "'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\n// temporary hotfix to avoid circular references until AxiosURLSearchParams is refactored\nimport PlatformFormData from '../platform/node/classes/FormData.js';\n\n/**\n * Determines if the given thing is a array or js object.\n *\n * @param {string} thing - The object or array to be visited.\n *\n * @returns {boolean}\n */\nfunction isVisitable(thing) {\n return utils.isPlainObject(thing) || utils.isArray(thing);\n}\n\n/**\n * It removes the brackets from the end of a string\n *\n * @param {string} key - The key of the parameter.\n *\n * @returns {string} the key without the brackets.\n */\nfunction removeBrackets(key) {\n return utils.endsWith(key, '[]') ? key.slice(0, -2) : key;\n}\n\n/**\n * It takes a path, a key, and a boolean, and returns a string\n *\n * @param {string} path - The path to the current key.\n * @param {string} key - The key of the current object being iterated over.\n * @param {string} dots - If true, the key will be rendered with dots instead of brackets.\n *\n * @returns {string} The path to the current key.\n */\nfunction renderKey(path, key, dots) {\n if (!path) return key;\n return path.concat(key).map(function each(token, i) {\n // eslint-disable-next-line no-param-reassign\n token = removeBrackets(token);\n return !dots && i ? '[' + token + ']' : token;\n }).join(dots ? '.' : '');\n}\n\n/**\n * If the array is an array and none of its elements are visitable, then it's a flat array.\n *\n * @param {Array} arr - The array to check\n *\n * @returns {boolean}\n */\nfunction isFlatArray(arr) {\n return utils.isArray(arr) && !arr.some(isVisitable);\n}\n\nconst predicates = utils.toFlatObject(utils, {}, null, function filter(prop) {\n return /^is[A-Z]/.test(prop);\n});\n\n/**\n * Convert a data object to FormData\n *\n * @param {Object} obj\n * @param {?Object} [formData]\n * @param {?Object} [options]\n * @param {Function} [options.visitor]\n * @param {Boolean} [options.metaTokens = true]\n * @param {Boolean} [options.dots = false]\n * @param {?Boolean} [options.indexes = false]\n *\n * @returns {Object}\n **/\n\n/**\n * It converts an object into a FormData object\n *\n * @param {Object} obj - The object to convert to form data.\n * @param {string} formData - The FormData object to append to.\n * @param {Object} options\n *\n * @returns\n */\nfunction toFormData(obj, formData, options) {\n if (!utils.isObject(obj)) {\n throw new TypeError('target must be an object');\n }\n\n // eslint-disable-next-line no-param-reassign\n formData = formData || new (PlatformFormData || FormData)();\n\n // eslint-disable-next-line no-param-reassign\n options = utils.toFlatObject(options, {\n metaTokens: true,\n dots: false,\n indexes: false\n }, false, function defined(option, source) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n return !utils.isUndefined(source[option]);\n });\n\n const metaTokens = options.metaTokens;\n // eslint-disable-next-line no-use-before-define\n const visitor = options.visitor || defaultVisitor;\n const dots = options.dots;\n const indexes = options.indexes;\n const _Blob = options.Blob || typeof Blob !== 'undefined' && Blob;\n const useBlob = _Blob && utils.isSpecCompliantForm(formData);\n\n if (!utils.isFunction(visitor)) {\n throw new TypeError('visitor must be a function');\n }\n\n function convertValue(value) {\n if (value === null) return '';\n\n if (utils.isDate(value)) {\n return value.toISOString();\n }\n\n if (!useBlob && utils.isBlob(value)) {\n throw new AxiosError('Blob is not supported. Use a Buffer instead.');\n }\n\n if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) {\n return useBlob && typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value);\n }\n\n return value;\n }\n\n /**\n * Default visitor.\n *\n * @param {*} value\n * @param {String|Number} key\n * @param {Array} path\n * @this {FormData}\n *\n * @returns {boolean} return true to visit the each prop of the value recursively\n */\n function defaultVisitor(value, key, path) {\n let arr = value;\n\n if (value && !path && typeof value === 'object') {\n if (utils.endsWith(key, '{}')) {\n // eslint-disable-next-line no-param-reassign\n key = metaTokens ? key : key.slice(0, -2);\n // eslint-disable-next-line no-param-reassign\n value = JSON.stringify(value);\n } else if (\n (utils.isArray(value) && isFlatArray(value)) ||\n ((utils.isFileList(value) || utils.endsWith(key, '[]')) && (arr = utils.toArray(value))\n )) {\n // eslint-disable-next-line no-param-reassign\n key = removeBrackets(key);\n\n arr.forEach(function each(el, index) {\n !(utils.isUndefined(el) || el === null) && formData.append(\n // eslint-disable-next-line no-nested-ternary\n indexes === true ? renderKey([key], index, dots) : (indexes === null ? key : key + '[]'),\n convertValue(el)\n );\n });\n return false;\n }\n }\n\n if (isVisitable(value)) {\n return true;\n }\n\n formData.append(renderKey(path, key, dots), convertValue(value));\n\n return false;\n }\n\n const stack = [];\n\n const exposedHelpers = Object.assign(predicates, {\n defaultVisitor,\n convertValue,\n isVisitable\n });\n\n function build(value, path) {\n if (utils.isUndefined(value)) return;\n\n if (stack.indexOf(value) !== -1) {\n throw Error('Circular reference detected in ' + path.join('.'));\n }\n\n stack.push(value);\n\n utils.forEach(value, function each(el, key) {\n const result = !(utils.isUndefined(el) || el === null) && visitor.call(\n formData, el, utils.isString(key) ? key.trim() : key, path, exposedHelpers\n );\n\n if (result === true) {\n build(el, path ? path.concat(key) : [key]);\n }\n });\n\n stack.pop();\n }\n\n if (!utils.isObject(obj)) {\n throw new TypeError('data must be an object');\n }\n\n build(obj);\n\n return formData;\n}\n\nexport default toFormData;\n", "'use strict';\n\nimport toFormData from './toFormData.js';\n\n/**\n * It encodes a string by replacing all characters that are not in the unreserved set with\n * their percent-encoded equivalents\n *\n * @param {string} str - The string to encode.\n *\n * @returns {string} The encoded string.\n */\nfunction encode(str) {\n const charMap = {\n '!': '%21',\n \"'\": '%27',\n '(': '%28',\n ')': '%29',\n '~': '%7E',\n '%20': '+',\n '%00': '\\x00'\n };\n return encodeURIComponent(str).replace(/[!'()~]|%20|%00/g, function replacer(match) {\n return charMap[match];\n });\n}\n\n/**\n * It takes a params object and converts it to a FormData object\n *\n * @param {Object} params - The parameters to be converted to a FormData object.\n * @param {Object} options - The options object passed to the Axios constructor.\n *\n * @returns {void}\n */\nfunction AxiosURLSearchParams(params, options) {\n this._pairs = [];\n\n params && toFormData(params, this, options);\n}\n\nconst prototype = AxiosURLSearchParams.prototype;\n\nprototype.append = function append(name, value) {\n this._pairs.push([name, value]);\n};\n\nprototype.toString = function toString(encoder) {\n const _encode = encoder ? function(value) {\n return encoder.call(this, value, encode);\n } : encode;\n\n return this._pairs.map(function each(pair) {\n return _encode(pair[0]) + '=' + _encode(pair[1]);\n }, '').join('&');\n};\n\nexport default AxiosURLSearchParams;\n", "'use strict';\n\nimport utils from '../utils.js';\nimport AxiosURLSearchParams from '../helpers/AxiosURLSearchParams.js';\n\n/**\n * It replaces all instances of the characters `:`, `$`, `,`, `+`, `[`, and `]` with their\n * URI encoded counterparts\n *\n * @param {string} val The value to be encoded.\n *\n * @returns {string} The encoded value.\n */\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+').\n replace(/%5B/gi, '[').\n replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @param {?object} options\n *\n * @returns {string} The formatted url\n */\nexport default function buildURL(url, params, options) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n \n const _encode = options && options.encode || encode;\n\n const serializeFn = options && options.serialize;\n\n let serializedParams;\n\n if (serializeFn) {\n serializedParams = serializeFn(params, options);\n } else {\n serializedParams = utils.isURLSearchParams(params) ?\n params.toString() :\n new AxiosURLSearchParams(params, options).toString(_encode);\n }\n\n if (serializedParams) {\n const hashmarkIndex = url.indexOf(\"#\");\n\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n}\n", "'use strict';\n\nimport utils from './../utils.js';\n\nclass InterceptorManager {\n constructor() {\n this.handlers = [];\n }\n\n /**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\n use(fulfilled, rejected, options) {\n this.handlers.push({\n fulfilled,\n rejected,\n synchronous: options ? options.synchronous : false,\n runWhen: options ? options.runWhen : null\n });\n return this.handlers.length - 1;\n }\n\n /**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n *\n * @returns {Boolean} `true` if the interceptor was removed, `false` otherwise\n */\n eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n }\n\n /**\n * Clear all interceptors from the stack\n *\n * @returns {void}\n */\n clear() {\n if (this.handlers) {\n this.handlers = [];\n }\n }\n\n /**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n *\n * @returns {void}\n */\n forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n }\n}\n\nexport default InterceptorManager;\n", "'use strict';\n\nexport default {\n silentJSONParsing: true,\n forcedJSONParsing: true,\n clarifyTimeoutError: false\n};\n", "'use strict';\n\nimport url from 'url';\nexport default url.URLSearchParams;\n", "import URLSearchParams from './classes/URLSearchParams.js'\nimport FormData from './classes/FormData.js'\n\nexport default {\n isNode: true,\n classes: {\n URLSearchParams,\n FormData,\n Blob: typeof Blob !== 'undefined' && Blob || null\n },\n protocols: [ 'http', 'https', 'file', 'data' ]\n};\n", "const hasBrowserEnv = typeof window !== 'undefined' && typeof document !== 'undefined';\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n *\n * @returns {boolean}\n */\nconst hasStandardBrowserEnv = (\n (product) => {\n return hasBrowserEnv && ['ReactNative', 'NativeScript', 'NS'].indexOf(product) < 0\n })(typeof navigator !== 'undefined' && navigator.product);\n\n/**\n * Determine if we're running in a standard browser webWorker environment\n *\n * Although the `isStandardBrowserEnv` method indicates that\n * `allows axios to run in a web worker`, the WebWorker will still be\n * filtered out due to its judgment standard\n * `typeof window !== 'undefined' && typeof document !== 'undefined'`.\n * This leads to a problem when axios post `FormData` in webWorker\n */\nconst hasStandardBrowserWebWorkerEnv = (() => {\n return (\n typeof WorkerGlobalScope !== 'undefined' &&\n // eslint-disable-next-line no-undef\n self instanceof WorkerGlobalScope &&\n typeof self.importScripts === 'function'\n );\n})();\n\nconst origin = hasBrowserEnv && window.location.href || 'http://localhost';\n\nexport {\n hasBrowserEnv,\n hasStandardBrowserWebWorkerEnv,\n hasStandardBrowserEnv,\n origin\n}\n", "import platform from './node/index.js';\nimport * as utils from './common/utils.js';\n\nexport default {\n ...utils,\n ...platform\n}\n", "'use strict';\n\nimport utils from '../utils.js';\nimport toFormData from './toFormData.js';\nimport platform from '../platform/index.js';\n\nexport default function toURLEncodedForm(data, options) {\n return toFormData(data, new platform.classes.URLSearchParams(), Object.assign({\n visitor: function(value, key, path, helpers) {\n if (platform.isNode && utils.isBuffer(value)) {\n this.append(key, value.toString('base64'));\n return false;\n }\n\n return helpers.defaultVisitor.apply(this, arguments);\n }\n }, options));\n}\n", "'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * It takes a string like `foo[x][y][z]` and returns an array like `['foo', 'x', 'y', 'z']\n *\n * @param {string} name - The name of the property to get.\n *\n * @returns An array of strings.\n */\nfunction parsePropPath(name) {\n // foo[x][y][z]\n // foo.x.y.z\n // foo-x-y-z\n // foo x y z\n return utils.matchAll(/\\w+|\\[(\\w*)]/g, name).map(match => {\n return match[0] === '[]' ? '' : match[1] || match[0];\n });\n}\n\n/**\n * Convert an array to an object.\n *\n * @param {Array} arr - The array to convert to an object.\n *\n * @returns An object with the same keys and values as the array.\n */\nfunction arrayToObject(arr) {\n const obj = {};\n const keys = Object.keys(arr);\n let i;\n const len = keys.length;\n let key;\n for (i = 0; i < len; i++) {\n key = keys[i];\n obj[key] = arr[key];\n }\n return obj;\n}\n\n/**\n * It takes a FormData object and returns a JavaScript object\n *\n * @param {string} formData The FormData object to convert to JSON.\n *\n * @returns {Object | null} The converted object.\n */\nfunction formDataToJSON(formData) {\n function buildPath(path, value, target, index) {\n let name = path[index++];\n\n if (name === '__proto__') return true;\n\n const isNumericKey = Number.isFinite(+name);\n const isLast = index >= path.length;\n name = !name && utils.isArray(target) ? target.length : name;\n\n if (isLast) {\n if (utils.hasOwnProp(target, name)) {\n target[name] = [target[name], value];\n } else {\n target[name] = value;\n }\n\n return !isNumericKey;\n }\n\n if (!target[name] || !utils.isObject(target[name])) {\n target[name] = [];\n }\n\n const result = buildPath(path, value, target[name], index);\n\n if (result && utils.isArray(target[name])) {\n target[name] = arrayToObject(target[name]);\n }\n\n return !isNumericKey;\n }\n\n if (utils.isFormData(formData) && utils.isFunction(formData.entries)) {\n const obj = {};\n\n utils.forEachEntry(formData, (name, value) => {\n buildPath(parsePropPath(name), value, obj, 0);\n });\n\n return obj;\n }\n\n return null;\n}\n\nexport default formDataToJSON;\n", "'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\nimport transitionalDefaults from './transitional.js';\nimport toFormData from '../helpers/toFormData.js';\nimport toURLEncodedForm from '../helpers/toURLEncodedForm.js';\nimport platform from '../platform/index.js';\nimport formDataToJSON from '../helpers/formDataToJSON.js';\n\n/**\n * It takes a string, tries to parse it, and if it fails, it returns the stringified version\n * of the input\n *\n * @param {any} rawValue - The value to be stringified.\n * @param {Function} parser - A function that parses a string into a JavaScript object.\n * @param {Function} encoder - A function that takes a value and returns a string.\n *\n * @returns {string} A stringified version of the rawValue.\n */\nfunction stringifySafely(rawValue, parser, encoder) {\n if (utils.isString(rawValue)) {\n try {\n (parser || JSON.parse)(rawValue);\n return utils.trim(rawValue);\n } catch (e) {\n if (e.name !== 'SyntaxError') {\n throw e;\n }\n }\n }\n\n return (encoder || JSON.stringify)(rawValue);\n}\n\nconst defaults = {\n\n transitional: transitionalDefaults,\n\n adapter: ['xhr', 'http', 'fetch'],\n\n transformRequest: [function transformRequest(data, headers) {\n const contentType = headers.getContentType() || '';\n const hasJSONContentType = contentType.indexOf('application/json') > -1;\n const isObjectPayload = utils.isObject(data);\n\n if (isObjectPayload && utils.isHTMLForm(data)) {\n data = new FormData(data);\n }\n\n const isFormData = utils.isFormData(data);\n\n if (isFormData) {\n return hasJSONContentType ? JSON.stringify(formDataToJSON(data)) : data;\n }\n\n if (utils.isArrayBuffer(data) ||\n utils.isBuffer(data) ||\n utils.isStream(data) ||\n utils.isFile(data) ||\n utils.isBlob(data) ||\n utils.isReadableStream(data)\n ) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n headers.setContentType('application/x-www-form-urlencoded;charset=utf-8', false);\n return data.toString();\n }\n\n let isFileList;\n\n if (isObjectPayload) {\n if (contentType.indexOf('application/x-www-form-urlencoded') > -1) {\n return toURLEncodedForm(data, this.formSerializer).toString();\n }\n\n if ((isFileList = utils.isFileList(data)) || contentType.indexOf('multipart/form-data') > -1) {\n const _FormData = this.env && this.env.FormData;\n\n return toFormData(\n isFileList ? {'files[]': data} : data,\n _FormData && new _FormData(),\n this.formSerializer\n );\n }\n }\n\n if (isObjectPayload || hasJSONContentType ) {\n headers.setContentType('application/json', false);\n return stringifySafely(data);\n }\n\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n const transitional = this.transitional || defaults.transitional;\n const forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n const JSONRequested = this.responseType === 'json';\n\n if (utils.isResponse(data) || utils.isReadableStream(data)) {\n return data;\n }\n\n if (data && utils.isString(data) && ((forcedJSONParsing && !this.responseType) || JSONRequested)) {\n const silentJSONParsing = transitional && transitional.silentJSONParsing;\n const strictJSONParsing = !silentJSONParsing && JSONRequested;\n\n try {\n return JSON.parse(data);\n } catch (e) {\n if (strictJSONParsing) {\n if (e.name === 'SyntaxError') {\n throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, this.response);\n }\n throw e;\n }\n }\n }\n\n return data;\n }],\n\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n maxBodyLength: -1,\n\n env: {\n FormData: platform.classes.FormData,\n Blob: platform.classes.Blob\n },\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n },\n\n headers: {\n common: {\n 'Accept': 'application/json, text/plain, */*',\n 'Content-Type': undefined\n }\n }\n};\n\nutils.forEach(['delete', 'get', 'head', 'post', 'put', 'patch'], (method) => {\n defaults.headers[method] = {};\n});\n\nexport default defaults;\n", "'use strict';\n\nimport utils from './../utils.js';\n\n// RawAxiosHeaders whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nconst ignoreDuplicateOf = utils.toObjectSet([\n 'age', 'authorization', 'content-length', 'content-type', 'etag',\n 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n 'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n 'referer', 'retry-after', 'user-agent'\n]);\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} rawHeaders Headers needing to be parsed\n *\n * @returns {Object} Headers parsed into an object\n */\nexport default rawHeaders => {\n const parsed = {};\n let key;\n let val;\n let i;\n\n rawHeaders && rawHeaders.split('\\n').forEach(function parser(line) {\n i = line.indexOf(':');\n key = line.substring(0, i).trim().toLowerCase();\n val = line.substring(i + 1).trim();\n\n if (!key || (parsed[key] && ignoreDuplicateOf[key])) {\n return;\n }\n\n if (key === 'set-cookie') {\n if (parsed[key]) {\n parsed[key].push(val);\n } else {\n parsed[key] = [val];\n }\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n });\n\n return parsed;\n};\n", "'use strict';\n\nimport utils from '../utils.js';\nimport parseHeaders from '../helpers/parseHeaders.js';\n\nconst $internals = Symbol('internals');\n\nfunction normalizeHeader(header) {\n return header && String(header).trim().toLowerCase();\n}\n\nfunction normalizeValue(value) {\n if (value === false || value == null) {\n return value;\n }\n\n return utils.isArray(value) ? value.map(normalizeValue) : String(value);\n}\n\nfunction parseTokens(str) {\n const tokens = Object.create(null);\n const tokensRE = /([^\\s,;=]+)\\s*(?:=\\s*([^,;]+))?/g;\n let match;\n\n while ((match = tokensRE.exec(str))) {\n tokens[match[1]] = match[2];\n }\n\n return tokens;\n}\n\nconst isValidHeaderName = (str) => /^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(str.trim());\n\nfunction matchHeaderValue(context, value, header, filter, isHeaderNameFilter) {\n if (utils.isFunction(filter)) {\n return filter.call(this, value, header);\n }\n\n if (isHeaderNameFilter) {\n value = header;\n }\n\n if (!utils.isString(value)) return;\n\n if (utils.isString(filter)) {\n return value.indexOf(filter) !== -1;\n }\n\n if (utils.isRegExp(filter)) {\n return filter.test(value);\n }\n}\n\nfunction formatHeader(header) {\n return header.trim()\n .toLowerCase().replace(/([a-z\\d])(\\w*)/g, (w, char, str) => {\n return char.toUpperCase() + str;\n });\n}\n\nfunction buildAccessors(obj, header) {\n const accessorName = utils.toCamelCase(' ' + header);\n\n ['get', 'set', 'has'].forEach(methodName => {\n Object.defineProperty(obj, methodName + accessorName, {\n value: function(arg1, arg2, arg3) {\n return this[methodName].call(this, header, arg1, arg2, arg3);\n },\n configurable: true\n });\n });\n}\n\nclass AxiosHeaders {\n constructor(headers) {\n headers && this.set(headers);\n }\n\n set(header, valueOrRewrite, rewrite) {\n const self = this;\n\n function setHeader(_value, _header, _rewrite) {\n const lHeader = normalizeHeader(_header);\n\n if (!lHeader) {\n throw new Error('header name must be a non-empty string');\n }\n\n const key = utils.findKey(self, lHeader);\n\n if(!key || self[key] === undefined || _rewrite === true || (_rewrite === undefined && self[key] !== false)) {\n self[key || _header] = normalizeValue(_value);\n }\n }\n\n const setHeaders = (headers, _rewrite) =>\n utils.forEach(headers, (_value, _header) => setHeader(_value, _header, _rewrite));\n\n if (utils.isPlainObject(header) || header instanceof this.constructor) {\n setHeaders(header, valueOrRewrite)\n } else if(utils.isString(header) && (header = header.trim()) && !isValidHeaderName(header)) {\n setHeaders(parseHeaders(header), valueOrRewrite);\n } else if (utils.isHeaders(header)) {\n for (const [key, value] of header.entries()) {\n setHeader(value, key, rewrite);\n }\n } else {\n header != null && setHeader(valueOrRewrite, header, rewrite);\n }\n\n return this;\n }\n\n get(header, parser) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils.findKey(this, header);\n\n if (key) {\n const value = this[key];\n\n if (!parser) {\n return value;\n }\n\n if (parser === true) {\n return parseTokens(value);\n }\n\n if (utils.isFunction(parser)) {\n return parser.call(this, value, key);\n }\n\n if (utils.isRegExp(parser)) {\n return parser.exec(value);\n }\n\n throw new TypeError('parser must be boolean|regexp|function');\n }\n }\n }\n\n has(header, matcher) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils.findKey(this, header);\n\n return !!(key && this[key] !== undefined && (!matcher || matchHeaderValue(this, this[key], key, matcher)));\n }\n\n return false;\n }\n\n delete(header, matcher) {\n const self = this;\n let deleted = false;\n\n function deleteHeader(_header) {\n _header = normalizeHeader(_header);\n\n if (_header) {\n const key = utils.findKey(self, _header);\n\n if (key && (!matcher || matchHeaderValue(self, self[key], key, matcher))) {\n delete self[key];\n\n deleted = true;\n }\n }\n }\n\n if (utils.isArray(header)) {\n header.forEach(deleteHeader);\n } else {\n deleteHeader(header);\n }\n\n return deleted;\n }\n\n clear(matcher) {\n const keys = Object.keys(this);\n let i = keys.length;\n let deleted = false;\n\n while (i--) {\n const key = keys[i];\n if(!matcher || matchHeaderValue(this, this[key], key, matcher, true)) {\n delete this[key];\n deleted = true;\n }\n }\n\n return deleted;\n }\n\n normalize(format) {\n const self = this;\n const headers = {};\n\n utils.forEach(this, (value, header) => {\n const key = utils.findKey(headers, header);\n\n if (key) {\n self[key] = normalizeValue(value);\n delete self[header];\n return;\n }\n\n const normalized = format ? formatHeader(header) : String(header).trim();\n\n if (normalized !== header) {\n delete self[header];\n }\n\n self[normalized] = normalizeValue(value);\n\n headers[normalized] = true;\n });\n\n return this;\n }\n\n concat(...targets) {\n return this.constructor.concat(this, ...targets);\n }\n\n toJSON(asStrings) {\n const obj = Object.create(null);\n\n utils.forEach(this, (value, header) => {\n value != null && value !== false && (obj[header] = asStrings && utils.isArray(value) ? value.join(', ') : value);\n });\n\n return obj;\n }\n\n [Symbol.iterator]() {\n return Object.entries(this.toJSON())[Symbol.iterator]();\n }\n\n toString() {\n return Object.entries(this.toJSON()).map(([header, value]) => header + ': ' + value).join('\\n');\n }\n\n get [Symbol.toStringTag]() {\n return 'AxiosHeaders';\n }\n\n static from(thing) {\n return thing instanceof this ? thing : new this(thing);\n }\n\n static concat(first, ...targets) {\n const computed = new this(first);\n\n targets.forEach((target) => computed.set(target));\n\n return computed;\n }\n\n static accessor(header) {\n const internals = this[$internals] = (this[$internals] = {\n accessors: {}\n });\n\n const accessors = internals.accessors;\n const prototype = this.prototype;\n\n function defineAccessor(_header) {\n const lHeader = normalizeHeader(_header);\n\n if (!accessors[lHeader]) {\n buildAccessors(prototype, _header);\n accessors[lHeader] = true;\n }\n }\n\n utils.isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header);\n\n return this;\n }\n}\n\nAxiosHeaders.accessor(['Content-Type', 'Content-Length', 'Accept', 'Accept-Encoding', 'User-Agent', 'Authorization']);\n\n// reserved names hotfix\nutils.reduceDescriptors(AxiosHeaders.prototype, ({value}, key) => {\n let mapped = key[0].toUpperCase() + key.slice(1); // map `set` => `Set`\n return {\n get: () => value,\n set(headerValue) {\n this[mapped] = headerValue;\n }\n }\n});\n\nutils.freezeMethods(AxiosHeaders);\n\nexport default AxiosHeaders;\n", "'use strict';\n\nimport utils from './../utils.js';\nimport defaults from '../defaults/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Array|Function} fns A single function or Array of functions\n * @param {?Object} response The response object\n *\n * @returns {*} The resulting transformed data\n */\nexport default function transformData(fns, response) {\n const config = this || defaults;\n const context = response || config;\n const headers = AxiosHeaders.from(context.headers);\n let data = context.data;\n\n utils.forEach(fns, function transform(fn) {\n data = fn.call(config, data, headers.normalize(), response ? response.status : undefined);\n });\n\n headers.normalize();\n\n return data;\n}\n", "'use strict';\n\nexport default function isCancel(value) {\n return !!(value && value.__CANCEL__);\n}\n", "'use strict';\n\nimport AxiosError from '../core/AxiosError.js';\nimport utils from '../utils.js';\n\n/**\n * A `CanceledError` is an object that is thrown when an operation is canceled.\n *\n * @param {string=} message The message.\n * @param {Object=} config The config.\n * @param {Object=} request The request.\n *\n * @returns {CanceledError} The created error.\n */\nfunction CanceledError(message, config, request) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n AxiosError.call(this, message == null ? 'canceled' : message, AxiosError.ERR_CANCELED, config, request);\n this.name = 'CanceledError';\n}\n\nutils.inherits(CanceledError, AxiosError, {\n __CANCEL__: true\n});\n\nexport default CanceledError;\n", "'use strict';\n\nimport AxiosError from './AxiosError.js';\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n *\n * @returns {object} The response.\n */\nexport default function settle(resolve, reject, response) {\n const validateStatus = response.config.validateStatus;\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(new AxiosError(\n 'Request failed with status code ' + response.status,\n [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4],\n response.config,\n response.request,\n response\n ));\n }\n}\n", "'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n *\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nexport default function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\n}\n", "'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n *\n * @returns {string} The combined URL\n */\nexport default function combineURLs(baseURL, relativeURL) {\n return relativeURL\n ? baseURL.replace(/\\/?\\/$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n : baseURL;\n}\n", "'use strict';\n\nimport isAbsoluteURL from '../helpers/isAbsoluteURL.js';\nimport combineURLs from '../helpers/combineURLs.js';\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n *\n * @returns {string} The combined full path\n */\nexport default function buildFullPath(baseURL, requestedURL) {\n if (baseURL && !isAbsoluteURL(requestedURL)) {\n return combineURLs(baseURL, requestedURL);\n }\n return requestedURL;\n}\n", "export const VERSION = \"1.7.2\";", "'use strict';\n\nexport default function parseProtocol(url) {\n const match = /^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(url);\n return match && match[1] || '';\n}\n", "'use strict';\n\nimport AxiosError from '../core/AxiosError.js';\nimport parseProtocol from './parseProtocol.js';\nimport platform from '../platform/index.js';\n\nconst DATA_URL_PATTERN = /^(?:([^;]+);)?(?:[^;]+;)?(base64|),([\\s\\S]*)$/;\n\n/**\n * Parse data uri to a Buffer or Blob\n *\n * @param {String} uri\n * @param {?Boolean} asBlob\n * @param {?Object} options\n * @param {?Function} options.Blob\n *\n * @returns {Buffer|Blob}\n */\nexport default function fromDataURI(uri, asBlob, options) {\n const _Blob = options && options.Blob || platform.classes.Blob;\n const protocol = parseProtocol(uri);\n\n if (asBlob === undefined && _Blob) {\n asBlob = true;\n }\n\n if (protocol === 'data') {\n uri = protocol.length ? uri.slice(protocol.length + 1) : uri;\n\n const match = DATA_URL_PATTERN.exec(uri);\n\n if (!match) {\n throw new AxiosError('Invalid URL', AxiosError.ERR_INVALID_URL);\n }\n\n const mime = match[1];\n const isBase64 = match[2];\n const body = match[3];\n const buffer = Buffer.from(decodeURIComponent(body), isBase64 ? 'base64' : 'utf8');\n\n if (asBlob) {\n if (!_Blob) {\n throw new AxiosError('Blob is not supported', AxiosError.ERR_NOT_SUPPORT);\n }\n\n return new _Blob([buffer], {type: mime});\n }\n\n return buffer;\n }\n\n throw new AxiosError('Unsupported protocol ' + protocol, AxiosError.ERR_NOT_SUPPORT);\n}\n", "'use strict';\n\n/**\n * Throttle decorator\n * @param {Function} fn\n * @param {Number} freq\n * @return {Function}\n */\nfunction throttle(fn, freq) {\n let timestamp = 0;\n const threshold = 1000 / freq;\n let timer = null;\n return function throttled() {\n const force = this === true;\n\n const now = Date.now();\n if (force || now - timestamp > threshold) {\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n timestamp = now;\n return fn.apply(null, arguments);\n }\n if (!timer) {\n timer = setTimeout(() => {\n timer = null;\n timestamp = Date.now();\n return fn.apply(null, arguments);\n }, threshold - (now - timestamp));\n }\n };\n}\n\nexport default throttle;\n", "'use strict';\n\n/**\n * Calculate data maxRate\n * @param {Number} [samplesCount= 10]\n * @param {Number} [min= 1000]\n * @returns {Function}\n */\nfunction speedometer(samplesCount, min) {\n samplesCount = samplesCount || 10;\n const bytes = new Array(samplesCount);\n const timestamps = new Array(samplesCount);\n let head = 0;\n let tail = 0;\n let firstSampleTS;\n\n min = min !== undefined ? min : 1000;\n\n return function push(chunkLength) {\n const now = Date.now();\n\n const startedAt = timestamps[tail];\n\n if (!firstSampleTS) {\n firstSampleTS = now;\n }\n\n bytes[head] = chunkLength;\n timestamps[head] = now;\n\n let i = tail;\n let bytesCount = 0;\n\n while (i !== head) {\n bytesCount += bytes[i++];\n i = i % samplesCount;\n }\n\n head = (head + 1) % samplesCount;\n\n if (head === tail) {\n tail = (tail + 1) % samplesCount;\n }\n\n if (now - firstSampleTS < min) {\n return;\n }\n\n const passed = startedAt && now - startedAt;\n\n return passed ? Math.round(bytesCount * 1000 / passed) : undefined;\n };\n}\n\nexport default speedometer;\n", "'use strict';\n\nimport stream from 'stream';\nimport utils from '../utils.js';\nimport throttle from './throttle.js';\nimport speedometer from './speedometer.js';\n\nconst kInternals = Symbol('internals');\n\nclass AxiosTransformStream extends stream.Transform{\n constructor(options) {\n options = utils.toFlatObject(options, {\n maxRate: 0,\n chunkSize: 64 * 1024,\n minChunkSize: 100,\n timeWindow: 500,\n ticksRate: 2,\n samplesCount: 15\n }, null, (prop, source) => {\n return !utils.isUndefined(source[prop]);\n });\n\n super({\n readableHighWaterMark: options.chunkSize\n });\n\n const self = this;\n\n const internals = this[kInternals] = {\n length: options.length,\n timeWindow: options.timeWindow,\n ticksRate: options.ticksRate,\n chunkSize: options.chunkSize,\n maxRate: options.maxRate,\n minChunkSize: options.minChunkSize,\n bytesSeen: 0,\n isCaptured: false,\n notifiedBytesLoaded: 0,\n ts: Date.now(),\n bytes: 0,\n onReadCallback: null\n };\n\n const _speedometer = speedometer(internals.ticksRate * options.samplesCount, internals.timeWindow);\n\n this.on('newListener', event => {\n if (event === 'progress') {\n if (!internals.isCaptured) {\n internals.isCaptured = true;\n }\n }\n });\n\n let bytesNotified = 0;\n\n internals.updateProgress = throttle(function throttledHandler() {\n const totalBytes = internals.length;\n const bytesTransferred = internals.bytesSeen;\n const progressBytes = bytesTransferred - bytesNotified;\n if (!progressBytes || self.destroyed) return;\n\n const rate = _speedometer(progressBytes);\n\n bytesNotified = bytesTransferred;\n\n process.nextTick(() => {\n self.emit('progress', {\n loaded: bytesTransferred,\n total: totalBytes,\n progress: totalBytes ? (bytesTransferred / totalBytes) : undefined,\n bytes: progressBytes,\n rate: rate ? rate : undefined,\n estimated: rate && totalBytes && bytesTransferred <= totalBytes ?\n (totalBytes - bytesTransferred) / rate : undefined,\n lengthComputable: totalBytes != null\n });\n });\n }, internals.ticksRate);\n\n const onFinish = () => {\n internals.updateProgress.call(true);\n };\n\n this.once('end', onFinish);\n this.once('error', onFinish);\n }\n\n _read(size) {\n const internals = this[kInternals];\n\n if (internals.onReadCallback) {\n internals.onReadCallback();\n }\n\n return super._read(size);\n }\n\n _transform(chunk, encoding, callback) {\n const self = this;\n const internals = this[kInternals];\n const maxRate = internals.maxRate;\n\n const readableHighWaterMark = this.readableHighWaterMark;\n\n const timeWindow = internals.timeWindow;\n\n const divider = 1000 / timeWindow;\n const bytesThreshold = (maxRate / divider);\n const minChunkSize = internals.minChunkSize !== false ? Math.max(internals.minChunkSize, bytesThreshold * 0.01) : 0;\n\n function pushChunk(_chunk, _callback) {\n const bytes = Buffer.byteLength(_chunk);\n internals.bytesSeen += bytes;\n internals.bytes += bytes;\n\n if (internals.isCaptured) {\n internals.updateProgress();\n }\n\n if (self.push(_chunk)) {\n process.nextTick(_callback);\n } else {\n internals.onReadCallback = () => {\n internals.onReadCallback = null;\n process.nextTick(_callback);\n };\n }\n }\n\n const transformChunk = (_chunk, _callback) => {\n const chunkSize = Buffer.byteLength(_chunk);\n let chunkRemainder = null;\n let maxChunkSize = readableHighWaterMark;\n let bytesLeft;\n let passed = 0;\n\n if (maxRate) {\n const now = Date.now();\n\n if (!internals.ts || (passed = (now - internals.ts)) >= timeWindow) {\n internals.ts = now;\n bytesLeft = bytesThreshold - internals.bytes;\n internals.bytes = bytesLeft < 0 ? -bytesLeft : 0;\n passed = 0;\n }\n\n bytesLeft = bytesThreshold - internals.bytes;\n }\n\n if (maxRate) {\n if (bytesLeft <= 0) {\n // next time window\n return setTimeout(() => {\n _callback(null, _chunk);\n }, timeWindow - passed);\n }\n\n if (bytesLeft < maxChunkSize) {\n maxChunkSize = bytesLeft;\n }\n }\n\n if (maxChunkSize && chunkSize > maxChunkSize && (chunkSize - maxChunkSize) > minChunkSize) {\n chunkRemainder = _chunk.subarray(maxChunkSize);\n _chunk = _chunk.subarray(0, maxChunkSize);\n }\n\n pushChunk(_chunk, chunkRemainder ? () => {\n process.nextTick(_callback, null, chunkRemainder);\n } : _callback);\n };\n\n transformChunk(chunk, function transformNextChunk(err, _chunk) {\n if (err) {\n return callback(err);\n }\n\n if (_chunk) {\n transformChunk(_chunk, transformNextChunk);\n } else {\n callback(null);\n }\n });\n }\n\n setLength(length) {\n this[kInternals].length = +length;\n return this;\n }\n}\n\nexport default AxiosTransformStream;\n", "const {asyncIterator} = Symbol;\n\nconst readBlob = async function* (blob) {\n if (blob.stream) {\n yield* blob.stream()\n } else if (blob.arrayBuffer) {\n yield await blob.arrayBuffer()\n } else if (blob[asyncIterator]) {\n yield* blob[asyncIterator]();\n } else {\n yield blob;\n }\n}\n\nexport default readBlob;\n", "import {TextEncoder} from 'util';\nimport {Readable} from 'stream';\nimport utils from \"../utils.js\";\nimport readBlob from \"./readBlob.js\";\n\nconst BOUNDARY_ALPHABET = utils.ALPHABET.ALPHA_DIGIT + '-_';\n\nconst textEncoder = new TextEncoder();\n\nconst CRLF = '\\r\\n';\nconst CRLF_BYTES = textEncoder.encode(CRLF);\nconst CRLF_BYTES_COUNT = 2;\n\nclass FormDataPart {\n constructor(name, value) {\n const {escapeName} = this.constructor;\n const isStringValue = utils.isString(value);\n\n let headers = `Content-Disposition: form-data; name=\"${escapeName(name)}\"${\n !isStringValue && value.name ? `; filename=\"${escapeName(value.name)}\"` : ''\n }${CRLF}`;\n\n if (isStringValue) {\n value = textEncoder.encode(String(value).replace(/\\r?\\n|\\r\\n?/g, CRLF));\n } else {\n headers += `Content-Type: ${value.type || \"application/octet-stream\"}${CRLF}`\n }\n\n this.headers = textEncoder.encode(headers + CRLF);\n\n this.contentLength = isStringValue ? value.byteLength : value.size;\n\n this.size = this.headers.byteLength + this.contentLength + CRLF_BYTES_COUNT;\n\n this.name = name;\n this.value = value;\n }\n\n async *encode(){\n yield this.headers;\n\n const {value} = this;\n\n if(utils.isTypedArray(value)) {\n yield value;\n } else {\n yield* readBlob(value);\n }\n\n yield CRLF_BYTES;\n }\n\n static escapeName(name) {\n return String(name).replace(/[\\r\\n\"]/g, (match) => ({\n '\\r' : '%0D',\n '\\n' : '%0A',\n '\"' : '%22',\n }[match]));\n }\n}\n\nconst formDataToStream = (form, headersHandler, options) => {\n const {\n tag = 'form-data-boundary',\n size = 25,\n boundary = tag + '-' + utils.generateString(size, BOUNDARY_ALPHABET)\n } = options || {};\n\n if(!utils.isFormData(form)) {\n throw TypeError('FormData instance required');\n }\n\n if (boundary.length < 1 || boundary.length > 70) {\n throw Error('boundary must be 10-70 characters long')\n }\n\n const boundaryBytes = textEncoder.encode('--' + boundary + CRLF);\n const footerBytes = textEncoder.encode('--' + boundary + '--' + CRLF + CRLF);\n let contentLength = footerBytes.byteLength;\n\n const parts = Array.from(form.entries()).map(([name, value]) => {\n const part = new FormDataPart(name, value);\n contentLength += part.size;\n return part;\n });\n\n contentLength += boundaryBytes.byteLength * parts.length;\n\n contentLength = utils.toFiniteNumber(contentLength);\n\n const computedHeaders = {\n 'Content-Type': `multipart/form-data; boundary=${boundary}`\n }\n\n if (Number.isFinite(contentLength)) {\n computedHeaders['Content-Length'] = contentLength;\n }\n\n headersHandler && headersHandler(computedHeaders);\n\n return Readable.from((async function *() {\n for(const part of parts) {\n yield boundaryBytes;\n yield* part.encode();\n }\n\n yield footerBytes;\n })());\n};\n\nexport default formDataToStream;\n", "\"use strict\";\n\nimport stream from \"stream\";\n\nclass ZlibHeaderTransformStream extends stream.Transform {\n __transform(chunk, encoding, callback) {\n this.push(chunk);\n callback();\n }\n\n _transform(chunk, encoding, callback) {\n if (chunk.length !== 0) {\n this._transform = this.__transform;\n\n // Add Default Compression headers if no zlib headers are present\n if (chunk[0] !== 120) { // Hex: 78\n const header = Buffer.alloc(2);\n header[0] = 120; // Hex: 78\n header[1] = 156; // Hex: 9C \n this.push(header, encoding);\n }\n }\n\n this.__transform(chunk, encoding, callback);\n }\n}\n\nexport default ZlibHeaderTransformStream;\n", "import utils from \"../utils.js\";\n\nconst callbackify = (fn, reducer) => {\n return utils.isAsyncFn(fn) ? function (...args) {\n const cb = args.pop();\n fn.apply(this, args).then((value) => {\n try {\n reducer ? cb(null, ...reducer(value)) : cb(null, value);\n } catch (err) {\n cb(err);\n }\n }, cb);\n } : fn;\n}\n\nexport default callbackify;\n", "'use strict';\n\nimport utils from './../utils.js';\nimport settle from './../core/settle.js';\nimport buildFullPath from '../core/buildFullPath.js';\nimport buildURL from './../helpers/buildURL.js';\nimport {getProxyForUrl} from 'proxy-from-env';\nimport http from 'http';\nimport https from 'https';\nimport util from 'util';\nimport followRedirects from 'follow-redirects';\nimport zlib from 'zlib';\nimport {VERSION} from '../env/data.js';\nimport transitionalDefaults from '../defaults/transitional.js';\nimport AxiosError from '../core/AxiosError.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport platform from '../platform/index.js';\nimport fromDataURI from '../helpers/fromDataURI.js';\nimport stream from 'stream';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport AxiosTransformStream from '../helpers/AxiosTransformStream.js';\nimport {EventEmitter} from 'events';\nimport formDataToStream from \"../helpers/formDataToStream.js\";\nimport readBlob from \"../helpers/readBlob.js\";\nimport ZlibHeaderTransformStream from '../helpers/ZlibHeaderTransformStream.js';\nimport callbackify from \"../helpers/callbackify.js\";\n\nconst zlibOptions = {\n flush: zlib.constants.Z_SYNC_FLUSH,\n finishFlush: zlib.constants.Z_SYNC_FLUSH\n};\n\nconst brotliOptions = {\n flush: zlib.constants.BROTLI_OPERATION_FLUSH,\n finishFlush: zlib.constants.BROTLI_OPERATION_FLUSH\n}\n\nconst isBrotliSupported = utils.isFunction(zlib.createBrotliDecompress);\n\nconst {http: httpFollow, https: httpsFollow} = followRedirects;\n\nconst isHttps = /https:?/;\n\nconst supportedProtocols = platform.protocols.map(protocol => {\n return protocol + ':';\n});\n\n/**\n * If the proxy or config beforeRedirects functions are defined, call them with the options\n * object.\n *\n * @param {Object} options - The options object that was passed to the request.\n *\n * @returns {Object}\n */\nfunction dispatchBeforeRedirect(options, responseDetails) {\n if (options.beforeRedirects.proxy) {\n options.beforeRedirects.proxy(options);\n }\n if (options.beforeRedirects.config) {\n options.beforeRedirects.config(options, responseDetails);\n }\n}\n\n/**\n * If the proxy or config afterRedirects functions are defined, call them with the options\n *\n * @param {http.ClientRequestArgs} options\n * @param {AxiosProxyConfig} configProxy configuration from Axios options object\n * @param {string} location\n *\n * @returns {http.ClientRequestArgs}\n */\nfunction setProxy(options, configProxy, location) {\n let proxy = configProxy;\n if (!proxy && proxy !== false) {\n const proxyUrl = getProxyForUrl(location);\n if (proxyUrl) {\n proxy = new URL(proxyUrl);\n }\n }\n if (proxy) {\n // Basic proxy authorization\n if (proxy.username) {\n proxy.auth = (proxy.username || '') + ':' + (proxy.password || '');\n }\n\n if (proxy.auth) {\n // Support proxy auth object form\n if (proxy.auth.username || proxy.auth.password) {\n proxy.auth = (proxy.auth.username || '') + ':' + (proxy.auth.password || '');\n }\n const base64 = Buffer\n .from(proxy.auth, 'utf8')\n .toString('base64');\n options.headers['Proxy-Authorization'] = 'Basic ' + base64;\n }\n\n options.headers.host = options.hostname + (options.port ? ':' + options.port : '');\n const proxyHost = proxy.hostname || proxy.host;\n options.hostname = proxyHost;\n // Replace 'host' since options is not a URL object\n options.host = proxyHost;\n options.port = proxy.port;\n options.path = location;\n if (proxy.protocol) {\n options.protocol = proxy.protocol.includes(':') ? proxy.protocol : `${proxy.protocol}:`;\n }\n }\n\n options.beforeRedirects.proxy = function beforeRedirect(redirectOptions) {\n // Configure proxy for redirected request, passing the original config proxy to apply\n // the exact same logic as if the redirected request was performed by axios directly.\n setProxy(redirectOptions, configProxy, redirectOptions.href);\n };\n}\n\nconst isHttpAdapterSupported = typeof process !== 'undefined' && utils.kindOf(process) === 'process';\n\n// temporary hotfix\n\nconst wrapAsync = (asyncExecutor) => {\n return new Promise((resolve, reject) => {\n let onDone;\n let isDone;\n\n const done = (value, isRejected) => {\n if (isDone) return;\n isDone = true;\n onDone && onDone(value, isRejected);\n }\n\n const _resolve = (value) => {\n done(value);\n resolve(value);\n };\n\n const _reject = (reason) => {\n done(reason, true);\n reject(reason);\n }\n\n asyncExecutor(_resolve, _reject, (onDoneHandler) => (onDone = onDoneHandler)).catch(_reject);\n })\n};\n\nconst resolveFamily = ({address, family}) => {\n if (!utils.isString(address)) {\n throw TypeError('address must be a string');\n }\n return ({\n address,\n family: family || (address.indexOf('.') < 0 ? 6 : 4)\n });\n}\n\nconst buildAddressEntry = (address, family) => resolveFamily(utils.isObject(address) ? address : {address, family});\n\n/*eslint consistent-return:0*/\nexport default isHttpAdapterSupported && function httpAdapter(config) {\n return wrapAsync(async function dispatchHttpRequest(resolve, reject, onDone) {\n let {data, lookup, family} = config;\n const {responseType, responseEncoding} = config;\n const method = config.method.toUpperCase();\n let isDone;\n let rejected = false;\n let req;\n\n if (lookup) {\n const _lookup = callbackify(lookup, (value) => utils.isArray(value) ? value : [value]);\n // hotfix to support opt.all option which is required for node 20.x\n lookup = (hostname, opt, cb) => {\n _lookup(hostname, opt, (err, arg0, arg1) => {\n if (err) {\n return cb(err);\n }\n\n const addresses = utils.isArray(arg0) ? arg0.map(addr => buildAddressEntry(addr)) : [buildAddressEntry(arg0, arg1)];\n\n opt.all ? cb(err, addresses) : cb(err, addresses[0].address, addresses[0].family);\n });\n }\n }\n\n // temporary internal emitter until the AxiosRequest class will be implemented\n const emitter = new EventEmitter();\n\n const onFinished = () => {\n if (config.cancelToken) {\n config.cancelToken.unsubscribe(abort);\n }\n\n if (config.signal) {\n config.signal.removeEventListener('abort', abort);\n }\n\n emitter.removeAllListeners();\n }\n\n onDone((value, isRejected) => {\n isDone = true;\n if (isRejected) {\n rejected = true;\n onFinished();\n }\n });\n\n function abort(reason) {\n emitter.emit('abort', !reason || reason.type ? new CanceledError(null, config, req) : reason);\n }\n\n emitter.once('abort', reject);\n\n if (config.cancelToken || config.signal) {\n config.cancelToken && config.cancelToken.subscribe(abort);\n if (config.signal) {\n config.signal.aborted ? abort() : config.signal.addEventListener('abort', abort);\n }\n }\n\n // Parse url\n const fullPath = buildFullPath(config.baseURL, config.url);\n const parsed = new URL(fullPath, 'http://localhost');\n const protocol = parsed.protocol || supportedProtocols[0];\n\n if (protocol === 'data:') {\n let convertedData;\n\n if (method !== 'GET') {\n return settle(resolve, reject, {\n status: 405,\n statusText: 'method not allowed',\n headers: {},\n config\n });\n }\n\n try {\n convertedData = fromDataURI(config.url, responseType === 'blob', {\n Blob: config.env && config.env.Blob\n });\n } catch (err) {\n throw AxiosError.from(err, AxiosError.ERR_BAD_REQUEST, config);\n }\n\n if (responseType === 'text') {\n convertedData = convertedData.toString(responseEncoding);\n\n if (!responseEncoding || responseEncoding === 'utf8') {\n convertedData = utils.stripBOM(convertedData);\n }\n } else if (responseType === 'stream') {\n convertedData = stream.Readable.from(convertedData);\n }\n\n return settle(resolve, reject, {\n data: convertedData,\n status: 200,\n statusText: 'OK',\n headers: new AxiosHeaders(),\n config\n });\n }\n\n if (supportedProtocols.indexOf(protocol) === -1) {\n return reject(new AxiosError(\n 'Unsupported protocol ' + protocol,\n AxiosError.ERR_BAD_REQUEST,\n config\n ));\n }\n\n const headers = AxiosHeaders.from(config.headers).normalize();\n\n // Set User-Agent (required by some servers)\n // See https://github.com/axios/axios/issues/69\n // User-Agent is specified; handle case where no UA header is desired\n // Only set header if it hasn't been set in config\n headers.set('User-Agent', 'axios/' + VERSION, false);\n\n const onDownloadProgress = config.onDownloadProgress;\n const onUploadProgress = config.onUploadProgress;\n const maxRate = config.maxRate;\n let maxUploadRate = undefined;\n let maxDownloadRate = undefined;\n\n // support for spec compliant FormData objects\n if (utils.isSpecCompliantForm(data)) {\n const userBoundary = headers.getContentType(/boundary=([-_\\w\\d]{10,70})/i);\n\n data = formDataToStream(data, (formHeaders) => {\n headers.set(formHeaders);\n }, {\n tag: `axios-${VERSION}-boundary`,\n boundary: userBoundary && userBoundary[1] || undefined\n });\n // support for https://www.npmjs.com/package/form-data api\n } else if (utils.isFormData(data) && utils.isFunction(data.getHeaders)) {\n headers.set(data.getHeaders());\n\n if (!headers.hasContentLength()) {\n try {\n const knownLength = await util.promisify(data.getLength).call(data);\n Number.isFinite(knownLength) && knownLength >= 0 && headers.setContentLength(knownLength);\n /*eslint no-empty:0*/\n } catch (e) {\n }\n }\n } else if (utils.isBlob(data)) {\n data.size && headers.setContentType(data.type || 'application/octet-stream');\n headers.setContentLength(data.size || 0);\n data = stream.Readable.from(readBlob(data));\n } else if (data && !utils.isStream(data)) {\n if (Buffer.isBuffer(data)) {\n // Nothing to do...\n } else if (utils.isArrayBuffer(data)) {\n data = Buffer.from(new Uint8Array(data));\n } else if (utils.isString(data)) {\n data = Buffer.from(data, 'utf-8');\n } else {\n return reject(new AxiosError(\n 'Data after transformation must be a string, an ArrayBuffer, a Buffer, or a Stream',\n AxiosError.ERR_BAD_REQUEST,\n config\n ));\n }\n\n // Add Content-Length header if data exists\n headers.setContentLength(data.length, false);\n\n if (config.maxBodyLength > -1 && data.length > config.maxBodyLength) {\n return reject(new AxiosError(\n 'Request body larger than maxBodyLength limit',\n AxiosError.ERR_BAD_REQUEST,\n config\n ));\n }\n }\n\n const contentLength = utils.toFiniteNumber(headers.getContentLength());\n\n if (utils.isArray(maxRate)) {\n maxUploadRate = maxRate[0];\n maxDownloadRate = maxRate[1];\n } else {\n maxUploadRate = maxDownloadRate = maxRate;\n }\n\n if (data && (onUploadProgress || maxUploadRate)) {\n if (!utils.isStream(data)) {\n data = stream.Readable.from(data, {objectMode: false});\n }\n\n data = stream.pipeline([data, new AxiosTransformStream({\n length: contentLength,\n maxRate: utils.toFiniteNumber(maxUploadRate)\n })], utils.noop);\n\n onUploadProgress && data.on('progress', progress => {\n onUploadProgress(Object.assign(progress, {\n upload: true\n }));\n });\n }\n\n // HTTP basic authentication\n let auth = undefined;\n if (config.auth) {\n const username = config.auth.username || '';\n const password = config.auth.password || '';\n auth = username + ':' + password;\n }\n\n if (!auth && parsed.username) {\n const urlUsername = parsed.username;\n const urlPassword = parsed.password;\n auth = urlUsername + ':' + urlPassword;\n }\n\n auth && headers.delete('authorization');\n\n let path;\n\n try {\n path = buildURL(\n parsed.pathname + parsed.search,\n config.params,\n config.paramsSerializer\n ).replace(/^\\?/, '');\n } catch (err) {\n const customErr = new Error(err.message);\n customErr.config = config;\n customErr.url = config.url;\n customErr.exists = true;\n return reject(customErr);\n }\n\n headers.set(\n 'Accept-Encoding',\n 'gzip, compress, deflate' + (isBrotliSupported ? ', br' : ''), false\n );\n\n const options = {\n path,\n method: method,\n headers: headers.toJSON(),\n agents: { http: config.httpAgent, https: config.httpsAgent },\n auth,\n protocol,\n family,\n beforeRedirect: dispatchBeforeRedirect,\n beforeRedirects: {}\n };\n\n // cacheable-lookup integration hotfix\n !utils.isUndefined(lookup) && (options.lookup = lookup);\n\n if (config.socketPath) {\n options.socketPath = config.socketPath;\n } else {\n options.hostname = parsed.hostname;\n options.port = parsed.port;\n setProxy(options, config.proxy, protocol + '//' + parsed.hostname + (parsed.port ? ':' + parsed.port : '') + options.path);\n }\n\n let transport;\n const isHttpsRequest = isHttps.test(options.protocol);\n options.agent = isHttpsRequest ? config.httpsAgent : config.httpAgent;\n if (config.transport) {\n transport = config.transport;\n } else if (config.maxRedirects === 0) {\n transport = isHttpsRequest ? https : http;\n } else {\n if (config.maxRedirects) {\n options.maxRedirects = config.maxRedirects;\n }\n if (config.beforeRedirect) {\n options.beforeRedirects.config = config.beforeRedirect;\n }\n transport = isHttpsRequest ? httpsFollow : httpFollow;\n }\n\n if (config.maxBodyLength > -1) {\n options.maxBodyLength = config.maxBodyLength;\n } else {\n // follow-redirects does not skip comparison, so it should always succeed for axios -1 unlimited\n options.maxBodyLength = Infinity;\n }\n\n if (config.insecureHTTPParser) {\n options.insecureHTTPParser = config.insecureHTTPParser;\n }\n\n // Create the request\n req = transport.request(options, function handleResponse(res) {\n if (req.destroyed) return;\n\n const streams = [res];\n\n const responseLength = +res.headers['content-length'];\n\n if (onDownloadProgress) {\n const transformStream = new AxiosTransformStream({\n length: utils.toFiniteNumber(responseLength),\n maxRate: utils.toFiniteNumber(maxDownloadRate)\n });\n\n onDownloadProgress && transformStream.on('progress', progress => {\n onDownloadProgress(Object.assign(progress, {\n download: true\n }));\n });\n\n streams.push(transformStream);\n }\n\n // decompress the response body transparently if required\n let responseStream = res;\n\n // return the last request in case of redirects\n const lastRequest = res.req || req;\n\n // if decompress disabled we should not decompress\n if (config.decompress !== false && res.headers['content-encoding']) {\n // if no content, but headers still say that it is encoded,\n // remove the header not confuse downstream operations\n if (method === 'HEAD' || res.statusCode === 204) {\n delete res.headers['content-encoding'];\n }\n\n switch ((res.headers['content-encoding'] || '').toLowerCase()) {\n /*eslint default-case:0*/\n case 'gzip':\n case 'x-gzip':\n case 'compress':\n case 'x-compress':\n // add the unzipper to the body stream processing pipeline\n streams.push(zlib.createUnzip(zlibOptions));\n\n // remove the content-encoding in order to not confuse downstream operations\n delete res.headers['content-encoding'];\n break;\n case 'deflate':\n streams.push(new ZlibHeaderTransformStream());\n\n // add the unzipper to the body stream processing pipeline\n streams.push(zlib.createUnzip(zlibOptions));\n\n // remove the content-encoding in order to not confuse downstream operations\n delete res.headers['content-encoding'];\n break;\n case 'br':\n if (isBrotliSupported) {\n streams.push(zlib.createBrotliDecompress(brotliOptions));\n delete res.headers['content-encoding'];\n }\n }\n }\n\n responseStream = streams.length > 1 ? stream.pipeline(streams, utils.noop) : streams[0];\n\n const offListeners = stream.finished(responseStream, () => {\n offListeners();\n onFinished();\n });\n\n const response = {\n status: res.statusCode,\n statusText: res.statusMessage,\n headers: new AxiosHeaders(res.headers),\n config,\n request: lastRequest\n };\n\n if (responseType === 'stream') {\n response.data = responseStream;\n settle(resolve, reject, response);\n } else {\n const responseBuffer = [];\n let totalResponseBytes = 0;\n\n responseStream.on('data', function handleStreamData(chunk) {\n responseBuffer.push(chunk);\n totalResponseBytes += chunk.length;\n\n // make sure the content length is not over the maxContentLength if specified\n if (config.maxContentLength > -1 && totalResponseBytes > config.maxContentLength) {\n // stream.destroy() emit aborted event before calling reject() on Node.js v16\n rejected = true;\n responseStream.destroy();\n reject(new AxiosError('maxContentLength size of ' + config.maxContentLength + ' exceeded',\n AxiosError.ERR_BAD_RESPONSE, config, lastRequest));\n }\n });\n\n responseStream.on('aborted', function handlerStreamAborted() {\n if (rejected) {\n return;\n }\n\n const err = new AxiosError(\n 'maxContentLength size of ' + config.maxContentLength + ' exceeded',\n AxiosError.ERR_BAD_RESPONSE,\n config,\n lastRequest\n );\n responseStream.destroy(err);\n reject(err);\n });\n\n responseStream.on('error', function handleStreamError(err) {\n if (req.destroyed) return;\n reject(AxiosError.from(err, null, config, lastRequest));\n });\n\n responseStream.on('end', function handleStreamEnd() {\n try {\n let responseData = responseBuffer.length === 1 ? responseBuffer[0] : Buffer.concat(responseBuffer);\n if (responseType !== 'arraybuffer') {\n responseData = responseData.toString(responseEncoding);\n if (!responseEncoding || responseEncoding === 'utf8') {\n responseData = utils.stripBOM(responseData);\n }\n }\n response.data = responseData;\n } catch (err) {\n return reject(AxiosError.from(err, null, config, response.request, response));\n }\n settle(resolve, reject, response);\n });\n }\n\n emitter.once('abort', err => {\n if (!responseStream.destroyed) {\n responseStream.emit('error', err);\n responseStream.destroy();\n }\n });\n });\n\n emitter.once('abort', err => {\n reject(err);\n req.destroy(err);\n });\n\n // Handle errors\n req.on('error', function handleRequestError(err) {\n // @todo remove\n // if (req.aborted && err.code !== AxiosError.ERR_FR_TOO_MANY_REDIRECTS) return;\n reject(AxiosError.from(err, null, config, req));\n });\n\n // set tcp keep alive to prevent drop connection by peer\n req.on('socket', function handleRequestSocket(socket) {\n // default interval of sending ack packet is 1 minute\n socket.setKeepAlive(true, 1000 * 60);\n });\n\n // Handle request timeout\n if (config.timeout) {\n // This is forcing a int timeout to avoid problems if the `req` interface doesn't handle other types.\n const timeout = parseInt(config.timeout, 10);\n\n if (Number.isNaN(timeout)) {\n reject(new AxiosError(\n 'error trying to parse `config.timeout` to int',\n AxiosError.ERR_BAD_OPTION_VALUE,\n config,\n req\n ));\n\n return;\n }\n\n // Sometime, the response will be very slow, and does not respond, the connect event will be block by event loop system.\n // And timer callback will be fired, and abort() will be invoked before connection, then get \"socket hang up\" and code ECONNRESET.\n // At this time, if we have a large number of request, nodejs will hang up some socket on background. and the number will up and up.\n // And then these socket which be hang up will devouring CPU little by little.\n // ClientRequest.setTimeout will be fired on the specify milliseconds, and can make sure that abort() will be fired after connect.\n req.setTimeout(timeout, function handleRequestTimeout() {\n if (isDone) return;\n let timeoutErrorMessage = config.timeout ? 'timeout of ' + config.timeout + 'ms exceeded' : 'timeout exceeded';\n const transitional = config.transitional || transitionalDefaults;\n if (config.timeoutErrorMessage) {\n timeoutErrorMessage = config.timeoutErrorMessage;\n }\n reject(new AxiosError(\n timeoutErrorMessage,\n transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,\n config,\n req\n ));\n abort();\n });\n }\n\n\n // Send the request\n if (utils.isStream(data)) {\n let ended = false;\n let errored = false;\n\n data.on('end', () => {\n ended = true;\n });\n\n data.once('error', err => {\n errored = true;\n req.destroy(err);\n });\n\n data.on('close', () => {\n if (!ended && !errored) {\n abort(new CanceledError('Request stream has been aborted', config, req));\n }\n });\n\n data.pipe(req);\n } else {\n req.end(data);\n }\n });\n}\n\nexport const __setProxy = setProxy;\n", "import speedometer from \"./speedometer.js\";\nimport throttle from \"./throttle.js\";\n\nexport default (listener, isDownloadStream, freq = 3) => {\n let bytesNotified = 0;\n const _speedometer = speedometer(50, 250);\n\n return throttle(e => {\n const loaded = e.loaded;\n const total = e.lengthComputable ? e.total : undefined;\n const progressBytes = loaded - bytesNotified;\n const rate = _speedometer(progressBytes);\n const inRange = loaded <= total;\n\n bytesNotified = loaded;\n\n const data = {\n loaded,\n total,\n progress: total ? (loaded / total) : undefined,\n bytes: progressBytes,\n rate: rate ? rate : undefined,\n estimated: rate && total && inRange ? (total - loaded) / rate : undefined,\n event: e,\n lengthComputable: total != null\n };\n\n data[isDownloadStream ? 'download' : 'upload'] = true;\n\n listener(data);\n }, freq);\n}\n", "'use strict';\n\nimport utils from './../utils.js';\nimport platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ?\n\n// Standard browser envs have full support of the APIs needed to test\n// whether the request URL is of the same origin as current location.\n (function standardBrowserEnv() {\n const msie = /(msie|trident)/i.test(navigator.userAgent);\n const urlParsingNode = document.createElement('a');\n let originURL;\n\n /**\n * Parse a URL to discover its components\n *\n * @param {String} url The URL to be parsed\n * @returns {Object}\n */\n function resolveURL(url) {\n let href = url;\n\n if (msie) {\n // IE needs attribute set twice to normalize properties\n urlParsingNode.setAttribute('href', href);\n href = urlParsingNode.href;\n }\n\n urlParsingNode.setAttribute('href', href);\n\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n return {\n href: urlParsingNode.href,\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n host: urlParsingNode.host,\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n hostname: urlParsingNode.hostname,\n port: urlParsingNode.port,\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n urlParsingNode.pathname :\n '/' + urlParsingNode.pathname\n };\n }\n\n originURL = resolveURL(window.location.href);\n\n /**\n * Determine if a URL shares the same origin as the current location\n *\n * @param {String} requestURL The URL to test\n * @returns {boolean} True if URL shares the same origin, otherwise false\n */\n return function isURLSameOrigin(requestURL) {\n const parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n return (parsed.protocol === originURL.protocol &&\n parsed.host === originURL.host);\n };\n })() :\n\n // Non standard browser envs (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return function isURLSameOrigin() {\n return true;\n };\n })();\n", "import utils from './../utils.js';\nimport platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ?\n\n // Standard browser envs support document.cookie\n {\n write(name, value, expires, path, domain, secure) {\n const cookie = [name + '=' + encodeURIComponent(value)];\n\n utils.isNumber(expires) && cookie.push('expires=' + new Date(expires).toGMTString());\n\n utils.isString(path) && cookie.push('path=' + path);\n\n utils.isString(domain) && cookie.push('domain=' + domain);\n\n secure === true && cookie.push('secure');\n\n document.cookie = cookie.join('; ');\n },\n\n read(name) {\n const match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return (match ? decodeURIComponent(match[3]) : null);\n },\n\n remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n }\n\n :\n\n // Non-standard browser env (web workers, react-native) lack needed support.\n {\n write() {},\n read() {\n return null;\n },\n remove() {}\n };\n\n", "'use strict';\n\nimport utils from '../utils.js';\nimport AxiosHeaders from \"./AxiosHeaders.js\";\n\nconst headersToObject = (thing) => thing instanceof AxiosHeaders ? { ...thing } : thing;\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n *\n * @returns {Object} New object resulting from merging config2 to config1\n */\nexport default function mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n const config = {};\n\n function getMergedValue(target, source, caseless) {\n if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n return utils.merge.call({caseless}, target, source);\n } else if (utils.isPlainObject(source)) {\n return utils.merge({}, source);\n } else if (utils.isArray(source)) {\n return source.slice();\n }\n return source;\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDeepProperties(a, b, caseless) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(a, b, caseless);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a, caseless);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function valueFromConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function defaultToConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDirectKeys(a, b, prop) {\n if (prop in config2) {\n return getMergedValue(a, b);\n } else if (prop in config1) {\n return getMergedValue(undefined, a);\n }\n }\n\n const mergeMap = {\n url: valueFromConfig2,\n method: valueFromConfig2,\n data: valueFromConfig2,\n baseURL: defaultToConfig2,\n transformRequest: defaultToConfig2,\n transformResponse: defaultToConfig2,\n paramsSerializer: defaultToConfig2,\n timeout: defaultToConfig2,\n timeoutMessage: defaultToConfig2,\n withCredentials: defaultToConfig2,\n withXSRFToken: defaultToConfig2,\n adapter: defaultToConfig2,\n responseType: defaultToConfig2,\n xsrfCookieName: defaultToConfig2,\n xsrfHeaderName: defaultToConfig2,\n onUploadProgress: defaultToConfig2,\n onDownloadProgress: defaultToConfig2,\n decompress: defaultToConfig2,\n maxContentLength: defaultToConfig2,\n maxBodyLength: defaultToConfig2,\n beforeRedirect: defaultToConfig2,\n transport: defaultToConfig2,\n httpAgent: defaultToConfig2,\n httpsAgent: defaultToConfig2,\n cancelToken: defaultToConfig2,\n socketPath: defaultToConfig2,\n responseEncoding: defaultToConfig2,\n validateStatus: mergeDirectKeys,\n headers: (a, b) => mergeDeepProperties(headersToObject(a), headersToObject(b), true)\n };\n\n utils.forEach(Object.keys(Object.assign({}, config1, config2)), function computeConfigValue(prop) {\n const merge = mergeMap[prop] || mergeDeepProperties;\n const configValue = merge(config1[prop], config2[prop], prop);\n (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);\n });\n\n return config;\n}\n", "import platform from \"../platform/index.js\";\nimport utils from \"../utils.js\";\nimport isURLSameOrigin from \"./isURLSameOrigin.js\";\nimport cookies from \"./cookies.js\";\nimport buildFullPath from \"../core/buildFullPath.js\";\nimport mergeConfig from \"../core/mergeConfig.js\";\nimport AxiosHeaders from \"../core/AxiosHeaders.js\";\nimport buildURL from \"./buildURL.js\";\n\nexport default (config) => {\n const newConfig = mergeConfig({}, config);\n\n let {data, withXSRFToken, xsrfHeaderName, xsrfCookieName, headers, auth} = newConfig;\n\n newConfig.headers = headers = AxiosHeaders.from(headers);\n\n newConfig.url = buildURL(buildFullPath(newConfig.baseURL, newConfig.url), config.params, config.paramsSerializer);\n\n // HTTP basic authentication\n if (auth) {\n headers.set('Authorization', 'Basic ' +\n btoa((auth.username || '') + ':' + (auth.password ? unescape(encodeURIComponent(auth.password)) : ''))\n );\n }\n\n let contentType;\n\n if (utils.isFormData(data)) {\n if (platform.hasStandardBrowserEnv || platform.hasStandardBrowserWebWorkerEnv) {\n headers.setContentType(undefined); // Let the browser set it\n } else if ((contentType = headers.getContentType()) !== false) {\n // fix semicolon duplication issue for ReactNative FormData implementation\n const [type, ...tokens] = contentType ? contentType.split(';').map(token => token.trim()).filter(Boolean) : [];\n headers.setContentType([type || 'multipart/form-data', ...tokens].join('; '));\n }\n }\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n\n if (platform.hasStandardBrowserEnv) {\n withXSRFToken && utils.isFunction(withXSRFToken) && (withXSRFToken = withXSRFToken(newConfig));\n\n if (withXSRFToken || (withXSRFToken !== false && isURLSameOrigin(newConfig.url))) {\n // Add xsrf header\n const xsrfValue = xsrfHeaderName && xsrfCookieName && cookies.read(xsrfCookieName);\n\n if (xsrfValue) {\n headers.set(xsrfHeaderName, xsrfValue);\n }\n }\n }\n\n return newConfig;\n}\n\n", "import utils from './../utils.js';\nimport settle from './../core/settle.js';\nimport transitionalDefaults from '../defaults/transitional.js';\nimport AxiosError from '../core/AxiosError.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport parseProtocol from '../helpers/parseProtocol.js';\nimport platform from '../platform/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport progressEventReducer from '../helpers/progressEventReducer.js';\nimport resolveConfig from \"../helpers/resolveConfig.js\";\n\nconst isXHRAdapterSupported = typeof XMLHttpRequest !== 'undefined';\n\nexport default isXHRAdapterSupported && function (config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n const _config = resolveConfig(config);\n let requestData = _config.data;\n const requestHeaders = AxiosHeaders.from(_config.headers).normalize();\n let {responseType} = _config;\n let onCanceled;\n function done() {\n if (_config.cancelToken) {\n _config.cancelToken.unsubscribe(onCanceled);\n }\n\n if (_config.signal) {\n _config.signal.removeEventListener('abort', onCanceled);\n }\n }\n\n let request = new XMLHttpRequest();\n\n request.open(_config.method.toUpperCase(), _config.url, true);\n\n // Set the request timeout in MS\n request.timeout = _config.timeout;\n\n function onloadend() {\n if (!request) {\n return;\n }\n // Prepare the response\n const responseHeaders = AxiosHeaders.from(\n 'getAllResponseHeaders' in request && request.getAllResponseHeaders()\n );\n const responseData = !responseType || responseType === 'text' || responseType === 'json' ?\n request.responseText : request.response;\n const response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config,\n request\n };\n\n settle(function _resolve(value) {\n resolve(value);\n done();\n }, function _reject(err) {\n reject(err);\n done();\n }, response);\n\n // Clean up request\n request = null;\n }\n\n if ('onloadend' in request) {\n // Use onloadend if available\n request.onloadend = onloadend;\n } else {\n // Listen for ready state to emulate onloadend\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n // readystate handler is calling before onerror or ontimeout handlers,\n // so we should call onloadend on the next 'tick'\n setTimeout(onloadend);\n };\n }\n\n // Handle browser request cancellation (as opposed to a manual cancellation)\n request.onabort = function handleAbort() {\n if (!request) {\n return;\n }\n\n reject(new AxiosError('Request aborted', AxiosError.ECONNABORTED, _config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError() {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(new AxiosError('Network Error', AxiosError.ERR_NETWORK, _config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle timeout\n request.ontimeout = function handleTimeout() {\n let timeoutErrorMessage = _config.timeout ? 'timeout of ' + _config.timeout + 'ms exceeded' : 'timeout exceeded';\n const transitional = _config.transitional || transitionalDefaults;\n if (_config.timeoutErrorMessage) {\n timeoutErrorMessage = _config.timeoutErrorMessage;\n }\n reject(new AxiosError(\n timeoutErrorMessage,\n transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,\n _config,\n request));\n\n // Clean up request\n request = null;\n };\n\n // Remove Content-Type if data is undefined\n requestData === undefined && requestHeaders.setContentType(null);\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders.toJSON(), function setRequestHeader(val, key) {\n request.setRequestHeader(key, val);\n });\n }\n\n // Add withCredentials to request if needed\n if (!utils.isUndefined(_config.withCredentials)) {\n request.withCredentials = !!_config.withCredentials;\n }\n\n // Add responseType to request if needed\n if (responseType && responseType !== 'json') {\n request.responseType = _config.responseType;\n }\n\n // Handle progress if needed\n if (typeof _config.onDownloadProgress === 'function') {\n request.addEventListener('progress', progressEventReducer(_config.onDownloadProgress, true));\n }\n\n // Not all browsers support upload events\n if (typeof _config.onUploadProgress === 'function' && request.upload) {\n request.upload.addEventListener('progress', progressEventReducer(_config.onUploadProgress));\n }\n\n if (_config.cancelToken || _config.signal) {\n // Handle cancellation\n // eslint-disable-next-line func-names\n onCanceled = cancel => {\n if (!request) {\n return;\n }\n reject(!cancel || cancel.type ? new CanceledError(null, config, request) : cancel);\n request.abort();\n request = null;\n };\n\n _config.cancelToken && _config.cancelToken.subscribe(onCanceled);\n if (_config.signal) {\n _config.signal.aborted ? onCanceled() : _config.signal.addEventListener('abort', onCanceled);\n }\n }\n\n const protocol = parseProtocol(_config.url);\n\n if (protocol && platform.protocols.indexOf(protocol) === -1) {\n reject(new AxiosError('Unsupported protocol ' + protocol + ':', AxiosError.ERR_BAD_REQUEST, config));\n return;\n }\n\n\n // Send the request\n request.send(requestData || null);\n });\n}\n", "import CanceledError from \"../cancel/CanceledError.js\";\nimport AxiosError from \"../core/AxiosError.js\";\n\nconst composeSignals = (signals, timeout) => {\n let controller = new AbortController();\n\n let aborted;\n\n const onabort = function (cancel) {\n if (!aborted) {\n aborted = true;\n unsubscribe();\n const err = cancel instanceof Error ? cancel : this.reason;\n controller.abort(err instanceof AxiosError ? err : new CanceledError(err instanceof Error ? err.message : err));\n }\n }\n\n let timer = timeout && setTimeout(() => {\n onabort(new AxiosError(`timeout ${timeout} of ms exceeded`, AxiosError.ETIMEDOUT))\n }, timeout)\n\n const unsubscribe = () => {\n if (signals) {\n timer && clearTimeout(timer);\n timer = null;\n signals.forEach(signal => {\n signal &&\n (signal.removeEventListener ? signal.removeEventListener('abort', onabort) : signal.unsubscribe(onabort));\n });\n signals = null;\n }\n }\n\n signals.forEach((signal) => signal && signal.addEventListener && signal.addEventListener('abort', onabort));\n\n const {signal} = controller;\n\n signal.unsubscribe = unsubscribe;\n\n return [signal, () => {\n timer && clearTimeout(timer);\n timer = null;\n }];\n}\n\nexport default composeSignals;\n", "\n\nexport const streamChunk = function* (chunk, chunkSize) {\n let len = chunk.byteLength;\n\n if (!chunkSize || len < chunkSize) {\n yield chunk;\n return;\n }\n\n let pos = 0;\n let end;\n\n while (pos < len) {\n end = pos + chunkSize;\n yield chunk.slice(pos, end);\n pos = end;\n }\n}\n\nexport const readBytes = async function* (iterable, chunkSize, encode) {\n for await (const chunk of iterable) {\n yield* streamChunk(ArrayBuffer.isView(chunk) ? chunk : (await encode(String(chunk))), chunkSize);\n }\n}\n\nexport const trackStream = (stream, chunkSize, onProgress, onFinish, encode) => {\n const iterator = readBytes(stream, chunkSize, encode);\n\n let bytes = 0;\n\n return new ReadableStream({\n type: 'bytes',\n\n async pull(controller) {\n const {done, value} = await iterator.next();\n\n if (done) {\n controller.close();\n onFinish();\n return;\n }\n\n let len = value.byteLength;\n onProgress && onProgress(bytes += len);\n controller.enqueue(new Uint8Array(value));\n },\n cancel(reason) {\n onFinish(reason);\n return iterator.return();\n }\n }, {\n highWaterMark: 2\n })\n}\n", "import platform from \"../platform/index.js\";\nimport utils from \"../utils.js\";\nimport AxiosError from \"../core/AxiosError.js\";\nimport composeSignals from \"../helpers/composeSignals.js\";\nimport {trackStream} from \"../helpers/trackStream.js\";\nimport AxiosHeaders from \"../core/AxiosHeaders.js\";\nimport progressEventReducer from \"../helpers/progressEventReducer.js\";\nimport resolveConfig from \"../helpers/resolveConfig.js\";\nimport settle from \"../core/settle.js\";\n\nconst fetchProgressDecorator = (total, fn) => {\n const lengthComputable = total != null;\n return (loaded) => setTimeout(() => fn({\n lengthComputable,\n total,\n loaded\n }));\n}\n\nconst isFetchSupported = typeof fetch === 'function' && typeof Request === 'function' && typeof Response === 'function';\nconst isReadableStreamSupported = isFetchSupported && typeof ReadableStream === 'function';\n\n// used only inside the fetch adapter\nconst encodeText = isFetchSupported && (typeof TextEncoder === 'function' ?\n ((encoder) => (str) => encoder.encode(str))(new TextEncoder()) :\n async (str) => new Uint8Array(await new Response(str).arrayBuffer())\n);\n\nconst supportsRequestStream = isReadableStreamSupported && (() => {\n let duplexAccessed = false;\n\n const hasContentType = new Request(platform.origin, {\n body: new ReadableStream(),\n method: 'POST',\n get duplex() {\n duplexAccessed = true;\n return 'half';\n },\n }).headers.has('Content-Type');\n\n return duplexAccessed && !hasContentType;\n})();\n\nconst DEFAULT_CHUNK_SIZE = 64 * 1024;\n\nconst supportsResponseStream = isReadableStreamSupported && !!(()=> {\n try {\n return utils.isReadableStream(new Response('').body);\n } catch(err) {\n // return undefined\n }\n})();\n\nconst resolvers = {\n stream: supportsResponseStream && ((res) => res.body)\n};\n\nisFetchSupported && (((res) => {\n ['text', 'arrayBuffer', 'blob', 'formData', 'stream'].forEach(type => {\n !resolvers[type] && (resolvers[type] = utils.isFunction(res[type]) ? (res) => res[type]() :\n (_, config) => {\n throw new AxiosError(`Response type '${type}' is not supported`, AxiosError.ERR_NOT_SUPPORT, config);\n })\n });\n})(new Response));\n\nconst getBodyLength = async (body) => {\n if (body == null) {\n return 0;\n }\n\n if(utils.isBlob(body)) {\n return body.size;\n }\n\n if(utils.isSpecCompliantForm(body)) {\n return (await new Request(body).arrayBuffer()).byteLength;\n }\n\n if(utils.isArrayBufferView(body)) {\n return body.byteLength;\n }\n\n if(utils.isURLSearchParams(body)) {\n body = body + '';\n }\n\n if(utils.isString(body)) {\n return (await encodeText(body)).byteLength;\n }\n}\n\nconst resolveBodyLength = async (headers, body) => {\n const length = utils.toFiniteNumber(headers.getContentLength());\n\n return length == null ? getBodyLength(body) : length;\n}\n\nexport default isFetchSupported && (async (config) => {\n let {\n url,\n method,\n data,\n signal,\n cancelToken,\n timeout,\n onDownloadProgress,\n onUploadProgress,\n responseType,\n headers,\n withCredentials = 'same-origin',\n fetchOptions\n } = resolveConfig(config);\n\n responseType = responseType ? (responseType + '').toLowerCase() : 'text';\n\n let [composedSignal, stopTimeout] = (signal || cancelToken || timeout) ?\n composeSignals([signal, cancelToken], timeout) : [];\n\n let finished, request;\n\n const onFinish = () => {\n !finished && setTimeout(() => {\n composedSignal && composedSignal.unsubscribe();\n });\n\n finished = true;\n }\n\n let requestContentLength;\n\n try {\n if (\n onUploadProgress && supportsRequestStream && method !== 'get' && method !== 'head' &&\n (requestContentLength = await resolveBodyLength(headers, data)) !== 0\n ) {\n let _request = new Request(url, {\n method: 'POST',\n body: data,\n duplex: \"half\"\n });\n\n let contentTypeHeader;\n\n if (utils.isFormData(data) && (contentTypeHeader = _request.headers.get('content-type'))) {\n headers.setContentType(contentTypeHeader)\n }\n\n if (_request.body) {\n data = trackStream(_request.body, DEFAULT_CHUNK_SIZE, fetchProgressDecorator(\n requestContentLength,\n progressEventReducer(onUploadProgress)\n ), null, encodeText);\n }\n }\n\n if (!utils.isString(withCredentials)) {\n withCredentials = withCredentials ? 'cors' : 'omit';\n }\n\n request = new Request(url, {\n ...fetchOptions,\n signal: composedSignal,\n method: method.toUpperCase(),\n headers: headers.normalize().toJSON(),\n body: data,\n duplex: \"half\",\n withCredentials\n });\n\n let response = await fetch(request);\n\n const isStreamResponse = supportsResponseStream && (responseType === 'stream' || responseType === 'response');\n\n if (supportsResponseStream && (onDownloadProgress || isStreamResponse)) {\n const options = {};\n\n ['status', 'statusText', 'headers'].forEach(prop => {\n options[prop] = response[prop];\n });\n\n const responseContentLength = utils.toFiniteNumber(response.headers.get('content-length'));\n\n response = new Response(\n trackStream(response.body, DEFAULT_CHUNK_SIZE, onDownloadProgress && fetchProgressDecorator(\n responseContentLength,\n progressEventReducer(onDownloadProgress, true)\n ), isStreamResponse && onFinish, encodeText),\n options\n );\n }\n\n responseType = responseType || 'text';\n\n let responseData = await resolvers[utils.findKey(resolvers, responseType) || 'text'](response, config);\n\n !isStreamResponse && onFinish();\n\n stopTimeout && stopTimeout();\n\n return await new Promise((resolve, reject) => {\n settle(resolve, reject, {\n data: responseData,\n headers: AxiosHeaders.from(response.headers),\n status: response.status,\n statusText: response.statusText,\n config,\n request\n })\n })\n } catch (err) {\n onFinish();\n\n if (err && err.name === 'TypeError' && /fetch/i.test(err.message)) {\n throw Object.assign(\n new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request),\n {\n cause: err.cause || err\n }\n )\n }\n\n throw AxiosError.from(err, err && err.code, config, request);\n }\n});\n\n\n", "import utils from '../utils.js';\nimport httpAdapter from './http.js';\nimport xhrAdapter from './xhr.js';\nimport fetchAdapter from './fetch.js';\nimport AxiosError from \"../core/AxiosError.js\";\n\nconst knownAdapters = {\n http: httpAdapter,\n xhr: xhrAdapter,\n fetch: fetchAdapter\n}\n\nutils.forEach(knownAdapters, (fn, value) => {\n if (fn) {\n try {\n Object.defineProperty(fn, 'name', {value});\n } catch (e) {\n // eslint-disable-next-line no-empty\n }\n Object.defineProperty(fn, 'adapterName', {value});\n }\n});\n\nconst renderReason = (reason) => `- ${reason}`;\n\nconst isResolvedHandle = (adapter) => utils.isFunction(adapter) || adapter === null || adapter === false;\n\nexport default {\n getAdapter: (adapters) => {\n adapters = utils.isArray(adapters) ? adapters : [adapters];\n\n const {length} = adapters;\n let nameOrAdapter;\n let adapter;\n\n const rejectedReasons = {};\n\n for (let i = 0; i < length; i++) {\n nameOrAdapter = adapters[i];\n let id;\n\n adapter = nameOrAdapter;\n\n if (!isResolvedHandle(nameOrAdapter)) {\n adapter = knownAdapters[(id = String(nameOrAdapter)).toLowerCase()];\n\n if (adapter === undefined) {\n throw new AxiosError(`Unknown adapter '${id}'`);\n }\n }\n\n if (adapter) {\n break;\n }\n\n rejectedReasons[id || '#' + i] = adapter;\n }\n\n if (!adapter) {\n\n const reasons = Object.entries(rejectedReasons)\n .map(([id, state]) => `adapter ${id} ` +\n (state === false ? 'is not supported by the environment' : 'is not available in the build')\n );\n\n let s = length ?\n (reasons.length > 1 ? 'since :\\n' + reasons.map(renderReason).join('\\n') : ' ' + renderReason(reasons[0])) :\n 'as no adapter specified';\n\n throw new AxiosError(\n `There is no suitable adapter to dispatch the request ` + s,\n 'ERR_NOT_SUPPORT'\n );\n }\n\n return adapter;\n },\n adapters: knownAdapters\n}\n", "'use strict';\n\nimport transformData from './transformData.js';\nimport isCancel from '../cancel/isCancel.js';\nimport defaults from '../defaults/index.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport adapters from \"../adapters/adapters.js\";\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n *\n * @param {Object} config The config that is to be used for the request\n *\n * @returns {void}\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n\n if (config.signal && config.signal.aborted) {\n throw new CanceledError(null, config);\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n *\n * @returns {Promise} The Promise to be fulfilled\n */\nexport default function dispatchRequest(config) {\n throwIfCancellationRequested(config);\n\n config.headers = AxiosHeaders.from(config.headers);\n\n // Transform request data\n config.data = transformData.call(\n config,\n config.transformRequest\n );\n\n if (['post', 'put', 'patch'].indexOf(config.method) !== -1) {\n config.headers.setContentType('application/x-www-form-urlencoded', false);\n }\n\n const adapter = adapters.getAdapter(config.adapter || defaults.adapter);\n\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n response.data = transformData.call(\n config,\n config.transformResponse,\n response\n );\n\n response.headers = AxiosHeaders.from(response.headers);\n\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = transformData.call(\n config,\n config.transformResponse,\n reason.response\n );\n reason.response.headers = AxiosHeaders.from(reason.response.headers);\n }\n }\n\n return Promise.reject(reason);\n });\n}\n", "'use strict';\n\nimport {VERSION} from '../env/data.js';\nimport AxiosError from '../core/AxiosError.js';\n\nconst validators = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach((type, i) => {\n validators[type] = function validator(thing) {\n return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n };\n});\n\nconst deprecatedWarnings = {};\n\n/**\n * Transitional option validator\n *\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\n * @param {string?} version - deprecated version / removed since version\n * @param {string?} message - some message with additional info\n *\n * @returns {function}\n */\nvalidators.transitional = function transitional(validator, version, message) {\n function formatMessage(opt, desc) {\n return '[Axios v' + VERSION + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\n }\n\n // eslint-disable-next-line func-names\n return (value, opt, opts) => {\n if (validator === false) {\n throw new AxiosError(\n formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')),\n AxiosError.ERR_DEPRECATED\n );\n }\n\n if (version && !deprecatedWarnings[opt]) {\n deprecatedWarnings[opt] = true;\n // eslint-disable-next-line no-console\n console.warn(\n formatMessage(\n opt,\n ' has been deprecated since v' + version + ' and will be removed in the near future'\n )\n );\n }\n\n return validator ? validator(value, opt, opts) : true;\n };\n};\n\n/**\n * Assert object's properties type\n *\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n *\n * @returns {object}\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n if (typeof options !== 'object') {\n throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE);\n }\n const keys = Object.keys(options);\n let i = keys.length;\n while (i-- > 0) {\n const opt = keys[i];\n const validator = schema[opt];\n if (validator) {\n const value = options[opt];\n const result = value === undefined || validator(value, opt, options);\n if (result !== true) {\n throw new AxiosError('option ' + opt + ' must be ' + result, AxiosError.ERR_BAD_OPTION_VALUE);\n }\n continue;\n }\n if (allowUnknown !== true) {\n throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION);\n }\n }\n}\n\nexport default {\n assertOptions,\n validators\n};\n", "'use strict';\n\nimport utils from './../utils.js';\nimport buildURL from '../helpers/buildURL.js';\nimport InterceptorManager from './InterceptorManager.js';\nimport dispatchRequest from './dispatchRequest.js';\nimport mergeConfig from './mergeConfig.js';\nimport buildFullPath from './buildFullPath.js';\nimport validator from '../helpers/validator.js';\nimport AxiosHeaders from './AxiosHeaders.js';\n\nconst validators = validator.validators;\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n *\n * @return {Axios} A new instance of Axios\n */\nclass Axios {\n constructor(instanceConfig) {\n this.defaults = instanceConfig;\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n }\n\n /**\n * Dispatch a request\n *\n * @param {String|Object} configOrUrl The config specific for this request (merged with this.defaults)\n * @param {?Object} config\n *\n * @returns {Promise} The Promise to be fulfilled\n */\n async request(configOrUrl, config) {\n try {\n return await this._request(configOrUrl, config);\n } catch (err) {\n if (err instanceof Error) {\n let dummy;\n\n Error.captureStackTrace ? Error.captureStackTrace(dummy = {}) : (dummy = new Error());\n\n // slice off the Error: ... line\n const stack = dummy.stack ? dummy.stack.replace(/^.+\\n/, '') : '';\n try {\n if (!err.stack) {\n err.stack = stack;\n // match without the 2 top stack lines\n } else if (stack && !String(err.stack).endsWith(stack.replace(/^.+\\n.+\\n/, ''))) {\n err.stack += '\\n' + stack\n }\n } catch (e) {\n // ignore the case where \"stack\" is an un-writable property\n }\n }\n\n throw err;\n }\n }\n\n _request(configOrUrl, config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof configOrUrl === 'string') {\n config = config || {};\n config.url = configOrUrl;\n } else {\n config = configOrUrl || {};\n }\n\n config = mergeConfig(this.defaults, config);\n\n const {transitional, paramsSerializer, headers} = config;\n\n if (transitional !== undefined) {\n validator.assertOptions(transitional, {\n silentJSONParsing: validators.transitional(validators.boolean),\n forcedJSONParsing: validators.transitional(validators.boolean),\n clarifyTimeoutError: validators.transitional(validators.boolean)\n }, false);\n }\n\n if (paramsSerializer != null) {\n if (utils.isFunction(paramsSerializer)) {\n config.paramsSerializer = {\n serialize: paramsSerializer\n }\n } else {\n validator.assertOptions(paramsSerializer, {\n encode: validators.function,\n serialize: validators.function\n }, true);\n }\n }\n\n // Set config.method\n config.method = (config.method || this.defaults.method || 'get').toLowerCase();\n\n // Flatten headers\n let contextHeaders = headers && utils.merge(\n headers.common,\n headers[config.method]\n );\n\n headers && utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n (method) => {\n delete headers[method];\n }\n );\n\n config.headers = AxiosHeaders.concat(contextHeaders, headers);\n\n // filter out skipped interceptors\n const requestInterceptorChain = [];\n let synchronousRequestInterceptors = true;\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n return;\n }\n\n synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n\n requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n const responseInterceptorChain = [];\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n let promise;\n let i = 0;\n let len;\n\n if (!synchronousRequestInterceptors) {\n const chain = [dispatchRequest.bind(this), undefined];\n chain.unshift.apply(chain, requestInterceptorChain);\n chain.push.apply(chain, responseInterceptorChain);\n len = chain.length;\n\n promise = Promise.resolve(config);\n\n while (i < len) {\n promise = promise.then(chain[i++], chain[i++]);\n }\n\n return promise;\n }\n\n len = requestInterceptorChain.length;\n\n let newConfig = config;\n\n i = 0;\n\n while (i < len) {\n const onFulfilled = requestInterceptorChain[i++];\n const onRejected = requestInterceptorChain[i++];\n try {\n newConfig = onFulfilled(newConfig);\n } catch (error) {\n onRejected.call(this, error);\n break;\n }\n }\n\n try {\n promise = dispatchRequest.call(this, newConfig);\n } catch (error) {\n return Promise.reject(error);\n }\n\n i = 0;\n len = responseInterceptorChain.length;\n\n while (i < len) {\n promise = promise.then(responseInterceptorChain[i++], responseInterceptorChain[i++]);\n }\n\n return promise;\n }\n\n getUri(config) {\n config = mergeConfig(this.defaults, config);\n const fullPath = buildFullPath(config.baseURL, config.url);\n return buildURL(fullPath, config.params, config.paramsSerializer);\n }\n}\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n url,\n data: (config || {}).data\n }));\n };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n\n function generateHTTPMethod(isForm) {\n return function httpMethod(url, data, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n headers: isForm ? {\n 'Content-Type': 'multipart/form-data'\n } : {},\n url,\n data\n }));\n };\n }\n\n Axios.prototype[method] = generateHTTPMethod();\n\n Axios.prototype[method + 'Form'] = generateHTTPMethod(true);\n});\n\nexport default Axios;\n", "'use strict';\n\nimport CanceledError from './CanceledError.js';\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @param {Function} executor The executor function.\n *\n * @returns {CancelToken}\n */\nclass CancelToken {\n constructor(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n let resolvePromise;\n\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n\n const token = this;\n\n // eslint-disable-next-line func-names\n this.promise.then(cancel => {\n if (!token._listeners) return;\n\n let i = token._listeners.length;\n\n while (i-- > 0) {\n token._listeners[i](cancel);\n }\n token._listeners = null;\n });\n\n // eslint-disable-next-line func-names\n this.promise.then = onfulfilled => {\n let _resolve;\n // eslint-disable-next-line func-names\n const promise = new Promise(resolve => {\n token.subscribe(resolve);\n _resolve = resolve;\n }).then(onfulfilled);\n\n promise.cancel = function reject() {\n token.unsubscribe(_resolve);\n };\n\n return promise;\n };\n\n executor(function cancel(message, config, request) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new CanceledError(message, config, request);\n resolvePromise(token.reason);\n });\n }\n\n /**\n * Throws a `CanceledError` if cancellation has been requested.\n */\n throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n }\n\n /**\n * Subscribe to the cancel signal\n */\n\n subscribe(listener) {\n if (this.reason) {\n listener(this.reason);\n return;\n }\n\n if (this._listeners) {\n this._listeners.push(listener);\n } else {\n this._listeners = [listener];\n }\n }\n\n /**\n * Unsubscribe from the cancel signal\n */\n\n unsubscribe(listener) {\n if (!this._listeners) {\n return;\n }\n const index = this._listeners.indexOf(listener);\n if (index !== -1) {\n this._listeners.splice(index, 1);\n }\n }\n\n /**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\n static source() {\n let cancel;\n const token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token,\n cancel\n };\n }\n}\n\nexport default CancelToken;\n", "'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n *\n * @returns {Function}\n */\nexport default function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n}\n", "'use strict';\n\nimport utils from './../utils.js';\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n *\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nexport default function isAxiosError(payload) {\n return utils.isObject(payload) && (payload.isAxiosError === true);\n}\n", "const HttpStatusCode = {\n Continue: 100,\n SwitchingProtocols: 101,\n Processing: 102,\n EarlyHints: 103,\n Ok: 200,\n Created: 201,\n Accepted: 202,\n NonAuthoritativeInformation: 203,\n NoContent: 204,\n ResetContent: 205,\n PartialContent: 206,\n MultiStatus: 207,\n AlreadyReported: 208,\n ImUsed: 226,\n MultipleChoices: 300,\n MovedPermanently: 301,\n Found: 302,\n SeeOther: 303,\n NotModified: 304,\n UseProxy: 305,\n Unused: 306,\n TemporaryRedirect: 307,\n PermanentRedirect: 308,\n BadRequest: 400,\n Unauthorized: 401,\n PaymentRequired: 402,\n Forbidden: 403,\n NotFound: 404,\n MethodNotAllowed: 405,\n NotAcceptable: 406,\n ProxyAuthenticationRequired: 407,\n RequestTimeout: 408,\n Conflict: 409,\n Gone: 410,\n LengthRequired: 411,\n PreconditionFailed: 412,\n PayloadTooLarge: 413,\n UriTooLong: 414,\n UnsupportedMediaType: 415,\n RangeNotSatisfiable: 416,\n ExpectationFailed: 417,\n ImATeapot: 418,\n MisdirectedRequest: 421,\n UnprocessableEntity: 422,\n Locked: 423,\n FailedDependency: 424,\n TooEarly: 425,\n UpgradeRequired: 426,\n PreconditionRequired: 428,\n TooManyRequests: 429,\n RequestHeaderFieldsTooLarge: 431,\n UnavailableForLegalReasons: 451,\n InternalServerError: 500,\n NotImplemented: 501,\n BadGateway: 502,\n ServiceUnavailable: 503,\n GatewayTimeout: 504,\n HttpVersionNotSupported: 505,\n VariantAlsoNegotiates: 506,\n InsufficientStorage: 507,\n LoopDetected: 508,\n NotExtended: 510,\n NetworkAuthenticationRequired: 511,\n};\n\nObject.entries(HttpStatusCode).forEach(([key, value]) => {\n HttpStatusCode[value] = key;\n});\n\nexport default HttpStatusCode;\n", "'use strict';\n\nimport utils from './utils.js';\nimport bind from './helpers/bind.js';\nimport Axios from './core/Axios.js';\nimport mergeConfig from './core/mergeConfig.js';\nimport defaults from './defaults/index.js';\nimport formDataToJSON from './helpers/formDataToJSON.js';\nimport CanceledError from './cancel/CanceledError.js';\nimport CancelToken from './cancel/CancelToken.js';\nimport isCancel from './cancel/isCancel.js';\nimport {VERSION} from './env/data.js';\nimport toFormData from './helpers/toFormData.js';\nimport AxiosError from './core/AxiosError.js';\nimport spread from './helpers/spread.js';\nimport isAxiosError from './helpers/isAxiosError.js';\nimport AxiosHeaders from \"./core/AxiosHeaders.js\";\nimport adapters from './adapters/adapters.js';\nimport HttpStatusCode from './helpers/HttpStatusCode.js';\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n *\n * @returns {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n const context = new Axios(defaultConfig);\n const instance = bind(Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, Axios.prototype, context, {allOwnKeys: true});\n\n // Copy context to instance\n utils.extend(instance, context, null, {allOwnKeys: true});\n\n // Factory for creating new instances\n instance.create = function create(instanceConfig) {\n return createInstance(mergeConfig(defaultConfig, instanceConfig));\n };\n\n return instance;\n}\n\n// Create the default instance to be exported\nconst axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Expose Cancel & CancelToken\naxios.CanceledError = CanceledError;\naxios.CancelToken = CancelToken;\naxios.isCancel = isCancel;\naxios.VERSION = VERSION;\naxios.toFormData = toFormData;\n\n// Expose AxiosError class\naxios.AxiosError = AxiosError;\n\n// alias for CanceledError for backward compatibility\naxios.Cancel = axios.CanceledError;\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\n\naxios.spread = spread;\n\n// Expose isAxiosError\naxios.isAxiosError = isAxiosError;\n\n// Expose mergeConfig\naxios.mergeConfig = mergeConfig;\n\naxios.AxiosHeaders = AxiosHeaders;\n\naxios.formToJSON = thing => formDataToJSON(utils.isHTMLForm(thing) ? new FormData(thing) : thing);\n\naxios.getAdapter = adapters.getAdapter;\n\naxios.HttpStatusCode = HttpStatusCode;\n\naxios.default = axios;\n\n// this module should only have a default export\nexport default axios\n", "module.exports = function(size) {\n return new LruCache(size)\n}\n\nfunction LruCache(size) {\n this.capacity = size | 0\n this.map = Object.create(null)\n this.list = new DoublyLinkedList()\n}\n\nLruCache.prototype.get = function(key) {\n var node = this.map[key]\n if (node == null) return undefined\n this.used(node)\n return node.val\n}\n\nLruCache.prototype.set = function(key, val) {\n var node = this.map[key]\n if (node != null) {\n node.val = val\n } else {\n if (!this.capacity) this.prune()\n if (!this.capacity) return false\n node = new DoublyLinkedNode(key, val)\n this.map[key] = node\n this.capacity--\n }\n this.used(node)\n return true\n}\n\nLruCache.prototype.used = function(node) {\n this.list.moveToFront(node)\n}\n\nLruCache.prototype.prune = function() {\n var node = this.list.pop()\n if (node != null) {\n delete this.map[node.key]\n this.capacity++\n }\n}\n\n\nfunction DoublyLinkedList() {\n this.firstNode = null\n this.lastNode = null\n}\n\nDoublyLinkedList.prototype.moveToFront = function(node) {\n if (this.firstNode == node) return\n\n this.remove(node)\n\n if (this.firstNode == null) {\n this.firstNode = node\n this.lastNode = node\n node.prev = null\n node.next = null\n } else {\n node.prev = null\n node.next = this.firstNode\n node.next.prev = node\n this.firstNode = node\n }\n}\n\nDoublyLinkedList.prototype.pop = function() {\n var lastNode = this.lastNode\n if (lastNode != null) {\n this.remove(lastNode)\n }\n return lastNode\n}\n\nDoublyLinkedList.prototype.remove = function(node) {\n if (this.firstNode == node) {\n this.firstNode = node.next\n } else if (node.prev != null) {\n node.prev.next = node.next\n }\n if (this.lastNode == node) {\n this.lastNode = node.prev\n } else if (node.next != null) {\n node.next.prev = node.prev\n }\n}\n\n\nfunction DoublyLinkedNode(key, val) {\n this.key = key\n this.val = val\n this.prev = null\n this.next = null\n}\n", "var aws4 = exports,\n url = require('url'),\n querystring = require('querystring'),\n crypto = require('crypto'),\n lru = require('./lru'),\n credentialsCache = lru(1000)\n\n// http://docs.amazonwebservices.com/general/latest/gr/signature-version-4.html\n\nfunction hmac(key, string, encoding) {\n return crypto.createHmac('sha256', key).update(string, 'utf8').digest(encoding)\n}\n\nfunction hash(string, encoding) {\n return crypto.createHash('sha256').update(string, 'utf8').digest(encoding)\n}\n\n// This function assumes the string has already been percent encoded\nfunction encodeRfc3986(urlEncodedString) {\n return urlEncodedString.replace(/[!'()*]/g, function(c) {\n return '%' + c.charCodeAt(0).toString(16).toUpperCase()\n })\n}\n\nfunction encodeRfc3986Full(str) {\n return encodeRfc3986(encodeURIComponent(str))\n}\n\n// A bit of a combination of:\n// https://github.com/aws/aws-sdk-java-v2/blob/dc695de6ab49ad03934e1b02e7263abbd2354be0/core/auth/src/main/java/software/amazon/awssdk/auth/signer/internal/AbstractAws4Signer.java#L59\n// https://github.com/aws/aws-sdk-js/blob/18cb7e5b463b46239f9fdd4a65e2ff8c81831e8f/lib/signers/v4.js#L191-L199\n// https://github.com/mhart/aws4fetch/blob/b3aed16b6f17384cf36ea33bcba3c1e9f3bdfefd/src/main.js#L25-L34\nvar HEADERS_TO_IGNORE = {\n 'authorization': true,\n 'connection': true,\n 'x-amzn-trace-id': true,\n 'user-agent': true,\n 'expect': true,\n 'presigned-expires': true,\n 'range': true,\n}\n\n// request: { path | body, [host], [method], [headers], [service], [region] }\n// credentials: { accessKeyId, secretAccessKey, [sessionToken] }\nfunction RequestSigner(request, credentials) {\n\n if (typeof request === 'string') request = url.parse(request)\n\n var headers = request.headers = Object.assign({}, (request.headers || {})),\n hostParts = (!this.service || !this.region) && this.matchHost(request.hostname || request.host || headers.Host || headers.host)\n\n this.request = request\n this.credentials = credentials || this.defaultCredentials()\n\n this.service = request.service || hostParts[0] || ''\n this.region = request.region || hostParts[1] || 'us-east-1'\n\n // SES uses a different domain from the service name\n if (this.service === 'email') this.service = 'ses'\n\n if (!request.method && request.body)\n request.method = 'POST'\n\n if (!headers.Host && !headers.host) {\n headers.Host = request.hostname || request.host || this.createHost()\n\n // If a port is specified explicitly, use it as is\n if (request.port)\n headers.Host += ':' + request.port\n }\n if (!request.hostname && !request.host)\n request.hostname = headers.Host || headers.host\n\n this.isCodeCommitGit = this.service === 'codecommit' && request.method === 'GIT'\n\n this.extraHeadersToIgnore = request.extraHeadersToIgnore || Object.create(null)\n this.extraHeadersToInclude = request.extraHeadersToInclude || Object.create(null)\n}\n\nRequestSigner.prototype.matchHost = function(host) {\n var match = (host || '').match(/([^\\.]+)\\.(?:([^\\.]*)\\.)?amazonaws\\.com(\\.cn)?$/)\n var hostParts = (match || []).slice(1, 3)\n\n // ES's hostParts are sometimes the other way round, if the value that is expected\n // to be region equals \u2018es\u2019 switch them back\n // e.g. search-cluster-name-aaaa00aaaa0aaa0aaaaaaa0aaa.us-east-1.es.amazonaws.com\n if (hostParts[1] === 'es' || hostParts[1] === 'aoss')\n hostParts = hostParts.reverse()\n\n if (hostParts[1] == 's3') {\n hostParts[0] = 's3'\n hostParts[1] = 'us-east-1'\n } else {\n for (var i = 0; i < 2; i++) {\n if (/^s3-/.test(hostParts[i])) {\n hostParts[1] = hostParts[i].slice(3)\n hostParts[0] = 's3'\n break\n }\n }\n }\n\n return hostParts\n}\n\n// http://docs.aws.amazon.com/general/latest/gr/rande.html\nRequestSigner.prototype.isSingleRegion = function() {\n // Special case for S3 and SimpleDB in us-east-1\n if (['s3', 'sdb'].indexOf(this.service) >= 0 && this.region === 'us-east-1') return true\n\n return ['cloudfront', 'ls', 'route53', 'iam', 'importexport', 'sts']\n .indexOf(this.service) >= 0\n}\n\nRequestSigner.prototype.createHost = function() {\n var region = this.isSingleRegion() ? '' : '.' + this.region,\n subdomain = this.service === 'ses' ? 'email' : this.service\n return subdomain + region + '.amazonaws.com'\n}\n\nRequestSigner.prototype.prepareRequest = function() {\n this.parsePath()\n\n var request = this.request, headers = request.headers, query\n\n if (request.signQuery) {\n\n this.parsedPath.query = query = this.parsedPath.query || {}\n\n if (this.credentials.sessionToken)\n query['X-Amz-Security-Token'] = this.credentials.sessionToken\n\n if (this.service === 's3' && !query['X-Amz-Expires'])\n query['X-Amz-Expires'] = 86400\n\n if (query['X-Amz-Date'])\n this.datetime = query['X-Amz-Date']\n else\n query['X-Amz-Date'] = this.getDateTime()\n\n query['X-Amz-Algorithm'] = 'AWS4-HMAC-SHA256'\n query['X-Amz-Credential'] = this.credentials.accessKeyId + '/' + this.credentialString()\n query['X-Amz-SignedHeaders'] = this.signedHeaders()\n\n } else {\n\n if (!request.doNotModifyHeaders && !this.isCodeCommitGit) {\n if (request.body && !headers['Content-Type'] && !headers['content-type'])\n headers['Content-Type'] = 'application/x-www-form-urlencoded; charset=utf-8'\n\n if (request.body && !headers['Content-Length'] && !headers['content-length'])\n headers['Content-Length'] = Buffer.byteLength(request.body)\n\n if (this.credentials.sessionToken && !headers['X-Amz-Security-Token'] && !headers['x-amz-security-token'])\n headers['X-Amz-Security-Token'] = this.credentials.sessionToken\n\n if (this.service === 's3' && !headers['X-Amz-Content-Sha256'] && !headers['x-amz-content-sha256'])\n headers['X-Amz-Content-Sha256'] = hash(this.request.body || '', 'hex')\n\n if (headers['X-Amz-Date'] || headers['x-amz-date'])\n this.datetime = headers['X-Amz-Date'] || headers['x-amz-date']\n else\n headers['X-Amz-Date'] = this.getDateTime()\n }\n\n delete headers.Authorization\n delete headers.authorization\n }\n}\n\nRequestSigner.prototype.sign = function() {\n if (!this.parsedPath) this.prepareRequest()\n\n if (this.request.signQuery) {\n this.parsedPath.query['X-Amz-Signature'] = this.signature()\n } else {\n this.request.headers.Authorization = this.authHeader()\n }\n\n this.request.path = this.formatPath()\n\n return this.request\n}\n\nRequestSigner.prototype.getDateTime = function() {\n if (!this.datetime) {\n var headers = this.request.headers,\n date = new Date(headers.Date || headers.date || new Date)\n\n this.datetime = date.toISOString().replace(/[:\\-]|\\.\\d{3}/g, '')\n\n // Remove the trailing 'Z' on the timestamp string for CodeCommit git access\n if (this.isCodeCommitGit) this.datetime = this.datetime.slice(0, -1)\n }\n return this.datetime\n}\n\nRequestSigner.prototype.getDate = function() {\n return this.getDateTime().substr(0, 8)\n}\n\nRequestSigner.prototype.authHeader = function() {\n return [\n 'AWS4-HMAC-SHA256 Credential=' + this.credentials.accessKeyId + '/' + this.credentialString(),\n 'SignedHeaders=' + this.signedHeaders(),\n 'Signature=' + this.signature(),\n ].join(', ')\n}\n\nRequestSigner.prototype.signature = function() {\n var date = this.getDate(),\n cacheKey = [this.credentials.secretAccessKey, date, this.region, this.service].join(),\n kDate, kRegion, kService, kCredentials = credentialsCache.get(cacheKey)\n if (!kCredentials) {\n kDate = hmac('AWS4' + this.credentials.secretAccessKey, date)\n kRegion = hmac(kDate, this.region)\n kService = hmac(kRegion, this.service)\n kCredentials = hmac(kService, 'aws4_request')\n credentialsCache.set(cacheKey, kCredentials)\n }\n return hmac(kCredentials, this.stringToSign(), 'hex')\n}\n\nRequestSigner.prototype.stringToSign = function() {\n return [\n 'AWS4-HMAC-SHA256',\n this.getDateTime(),\n this.credentialString(),\n hash(this.canonicalString(), 'hex'),\n ].join('\\n')\n}\n\nRequestSigner.prototype.canonicalString = function() {\n if (!this.parsedPath) this.prepareRequest()\n\n var pathStr = this.parsedPath.path,\n query = this.parsedPath.query,\n headers = this.request.headers,\n queryStr = '',\n normalizePath = this.service !== 's3',\n decodePath = this.service === 's3' || this.request.doNotEncodePath,\n decodeSlashesInPath = this.service === 's3',\n firstValOnly = this.service === 's3',\n bodyHash\n\n if (this.service === 's3' && this.request.signQuery) {\n bodyHash = 'UNSIGNED-PAYLOAD'\n } else if (this.isCodeCommitGit) {\n bodyHash = ''\n } else {\n bodyHash = headers['X-Amz-Content-Sha256'] || headers['x-amz-content-sha256'] ||\n hash(this.request.body || '', 'hex')\n }\n\n if (query) {\n var reducedQuery = Object.keys(query).reduce(function(obj, key) {\n if (!key) return obj\n obj[encodeRfc3986Full(key)] = !Array.isArray(query[key]) ? query[key] :\n (firstValOnly ? query[key][0] : query[key])\n return obj\n }, {})\n var encodedQueryPieces = []\n Object.keys(reducedQuery).sort().forEach(function(key) {\n if (!Array.isArray(reducedQuery[key])) {\n encodedQueryPieces.push(key + '=' + encodeRfc3986Full(reducedQuery[key]))\n } else {\n reducedQuery[key].map(encodeRfc3986Full).sort()\n .forEach(function(val) { encodedQueryPieces.push(key + '=' + val) })\n }\n })\n queryStr = encodedQueryPieces.join('&')\n }\n if (pathStr !== '/') {\n if (normalizePath) pathStr = pathStr.replace(/\\/{2,}/g, '/')\n pathStr = pathStr.split('/').reduce(function(path, piece) {\n if (normalizePath && piece === '..') {\n path.pop()\n } else if (!normalizePath || piece !== '.') {\n if (decodePath) piece = decodeURIComponent(piece.replace(/\\+/g, ' '))\n path.push(encodeRfc3986Full(piece))\n }\n return path\n }, []).join('/')\n if (pathStr[0] !== '/') pathStr = '/' + pathStr\n if (decodeSlashesInPath) pathStr = pathStr.replace(/%2F/g, '/')\n }\n\n return [\n this.request.method || 'GET',\n pathStr,\n queryStr,\n this.canonicalHeaders() + '\\n',\n this.signedHeaders(),\n bodyHash,\n ].join('\\n')\n}\n\nRequestSigner.prototype.canonicalHeaders = function() {\n var headers = this.request.headers\n function trimAll(header) {\n return header.toString().trim().replace(/\\s+/g, ' ')\n }\n return Object.keys(headers)\n .filter(function(key) { return HEADERS_TO_IGNORE[key.toLowerCase()] == null })\n .sort(function(a, b) { return a.toLowerCase() < b.toLowerCase() ? -1 : 1 })\n .map(function(key) { return key.toLowerCase() + ':' + trimAll(headers[key]) })\n .join('\\n')\n}\n\nRequestSigner.prototype.signedHeaders = function() {\n var extraHeadersToInclude = this.extraHeadersToInclude,\n extraHeadersToIgnore = this.extraHeadersToIgnore\n return Object.keys(this.request.headers)\n .map(function(key) { return key.toLowerCase() })\n .filter(function(key) {\n return extraHeadersToInclude[key] ||\n (HEADERS_TO_IGNORE[key] == null && !extraHeadersToIgnore[key])\n })\n .sort()\n .join(';')\n}\n\nRequestSigner.prototype.credentialString = function() {\n return [\n this.getDate(),\n this.region,\n this.service,\n 'aws4_request',\n ].join('/')\n}\n\nRequestSigner.prototype.defaultCredentials = function() {\n var env = process.env\n return {\n accessKeyId: env.AWS_ACCESS_KEY_ID || env.AWS_ACCESS_KEY,\n secretAccessKey: env.AWS_SECRET_ACCESS_KEY || env.AWS_SECRET_KEY,\n sessionToken: env.AWS_SESSION_TOKEN,\n }\n}\n\nRequestSigner.prototype.parsePath = function() {\n var path = this.request.path || '/'\n\n // S3 doesn't always encode characters > 127 correctly and\n // all services don't encode characters > 255 correctly\n // So if there are non-reserved chars (and it's not already all % encoded), just encode them all\n if (/[^0-9A-Za-z;,/?:@&=+$\\-_.!~*'()#%]/.test(path)) {\n path = encodeURI(decodeURI(path))\n }\n\n var queryIx = path.indexOf('?'),\n query = null\n\n if (queryIx >= 0) {\n query = querystring.parse(path.slice(queryIx + 1))\n path = path.slice(0, queryIx)\n }\n\n this.parsedPath = {\n path: path,\n query: query,\n }\n}\n\nRequestSigner.prototype.formatPath = function() {\n var path = this.parsedPath.path,\n query = this.parsedPath.query\n\n if (!query) return path\n\n // Services don't support empty query string keys\n if (query[''] != null) delete query['']\n\n return path + '?' + encodeRfc3986(querystring.stringify(query))\n}\n\naws4.RequestSigner = RequestSigner\n\naws4.sign = function(request, credentials) {\n return new RequestSigner(request, credentials).sign()\n}\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.import_ = void 0;\nexports.default = import_;\nfunction import_(id) {\n id = fixWindowsBug(id);\n return import(/*webpackIgnore: true*/ id);\n}\nexports.import_ = import_;\n// Avoid:\n// ```\n// Error [ERR_UNSUPPORTED_ESM_URL_SCHEME]: Only file and data URLs are supported by the default ESM loader. On Windows, absolute paths must be valid file:// URLs. Received protocol 'd:'\n// ```\n// https://stackoverflow.com/questions/69665780/error-err-unsupported-esm-url-scheme-only-file-and-data-urls-are-supported-by/70057245#70057245\nconst prefix = 'file://';\nfunction fixWindowsBug(id) {\n if (process.platform === 'win32' && isAbsolute(id) && !id.startsWith(prefix)) {\n return prefix + id;\n }\n else {\n return id;\n }\n}\n// Copied from https://github.com/unjs/pathe/blob/ae583c899ed9ebf44c94ab451da5fd7c3094dea9/src/path.ts#L14\n// Alternative: https://github.com/nodejs/node/blob/49a77a5a996a49e8cb728eed42e55a7c1a9eef6e/lib/path.js#L402\n// - Extracted version: https://github.com/brillout/import/commit/40bd11ce1e11e3b455c87a8cbca653fd10986021\nfunction isAbsolute(path) {\n return /^[/\\\\](?![/\\\\])|^[/\\\\]{2}(?!\\.)|^[A-Za-z]:[/\\\\]/.test(path);\n}\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.resolvePath = void 0;\nconst resolvePath = (options) => {\n //remove leading and trailing slash from options.directory\n const directory = options.directory ? options.directory.replace(/^\\/|\\/$/g, \"\") : \"\";\n return options.directory ? `${directory}/${options.filename}` : `${options.filename}`;\n};\nexports.resolvePath = resolvePath;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.PROVIDERS = exports.CLOUD_PROVIDERS = void 0;\nconst utils_1 = require(\"./utils\");\nvar CLOUD_PROVIDERS;\n(function (CLOUD_PROVIDERS) {\n CLOUD_PROVIDERS[\"GCP\"] = \"GCP\";\n CLOUD_PROVIDERS[\"WASABI\"] = \"WASABI\";\n CLOUD_PROVIDERS[\"AWS\"] = \"AWS\";\n CLOUD_PROVIDERS[\"CONTABO\"] = \"CONTABO\";\n CLOUD_PROVIDERS[\"DO\"] = \"DO\";\n CLOUD_PROVIDERS[\"MINIO\"] = \"MINIO\";\n CLOUD_PROVIDERS[\"R2\"] = \"R2\";\n})(CLOUD_PROVIDERS = exports.CLOUD_PROVIDERS || (exports.CLOUD_PROVIDERS = {}));\n/**\n * Please submit a new issue if you need another s3 compatible provider.\n */\nexports.PROVIDERS = {\n \"GCP\": {\n host: ({ bucket }) => `${bucket}.storage.googleapis.com`,\n url: ({ bucket, filename, directory }) => `https://${bucket}.storage.googleapis.com/${(0, utils_1.resolvePath)({ filename, directory })}`,\n res: ({ bucket, filename, directory }) => `https://storage.googleapis.com/${bucket}/${(0, utils_1.resolvePath)({ filename, directory })}`\n },\n \"AWS\": {\n host: ({ bucket }) => `${bucket}.s3.amazonaws.com`,\n url: ({ bucket, filename, directory }) => `https://${bucket}.s3.amazonaws.com/${(0, utils_1.resolvePath)({ filename, directory })}`,\n res: ({ bucket, filename, directory, region }) => `https://${bucket}.s3.${region}.amazonaws.com/${(0, utils_1.resolvePath)({ filename, directory })}`\n },\n \"WASABI\": {\n host: ({ region, bucket }) => `${bucket}.s3.${region}.wasabisys.com`,\n url: ({ region, filename, directory, bucket }) => `https://${bucket}.s3.${region}.wasabisys.com/${(0, utils_1.resolvePath)({ filename, directory })}`,\n res: ({ bucket, filename, directory, region }) => `https://s3.${region}.wasabisys.com/${bucket}/${(0, utils_1.resolvePath)({ filename, directory })}`\n },\n \"DO\": {\n host: ({ region, bucket }) => `${bucket}.${region}.digitaloceanspaces.com`,\n url: ({ bucket, filename, directory, region }) => `https://${bucket}.${region}.digitaloceanspaces.com/${(0, utils_1.resolvePath)({ filename, directory: `${directory}` })}`,\n res: ({ bucket, filename, directory, region }) => `https://${bucket}.${region}.digitaloceanspaces.com/${(0, utils_1.resolvePath)({ filename, directory: `${directory}` })}`\n },\n \"CONTABO\": {\n host: ({ region }) => `${region}.contabostorage.com`,\n url: ({ bucket, filename, directory, region }) => `https://${region}.contabostorage.com/${(0, utils_1.resolvePath)({ filename, directory: `${bucket}${directory}` })}`,\n res: ({ bucket, filename, directory, region }) => `https://${region}.contabostorage.com/${(0, utils_1.resolvePath)({ filename, directory: `${bucket}${directory}` })}`\n },\n \"MINIO\": {\n host: ({ host }) => `${host}`,\n url: ({ bucket, filename, directory, host }) => `${host}/${bucket}/${(0, utils_1.resolvePath)({ filename, directory: `${directory}` })}`,\n res: ({ bucket, filename, directory, host }) => `${host}/${bucket}/${(0, utils_1.resolvePath)({ filename, directory: `${directory}` })}`\n },\n \"SUPABASE\": {\n host: ({ host }) => `${host}`,\n url: ({ bucket, filename, directory, host }) => `${host}/storage/v1/s3/${bucket}/${(0, utils_1.resolvePath)({ filename, directory: `${directory}` })}`,\n res: ({ bucket, filename, directory, host }) => `${host}/storage/v1/s3/${bucket}/${(0, utils_1.resolvePath)({ filename, directory: `${directory}` })}`\n },\n \"R2\": {\n host: ({ host, bucket }) => `https://${bucket}.${host.replace('https://', \"\")}`,\n url: ({ bucket, filename, directory, host }) => `https://${bucket}.${host.replace('https://', \"\")}/${(0, utils_1.resolvePath)({ filename, directory: `${directory}` })}`,\n res: ({ bucket, filename, directory, host }) => `https://${bucket}.${host.replace('https://', \"\")}/${(0, utils_1.resolvePath)({ filename, directory: `${directory}` })}`\n }\n};\n", "\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getObjectEtag = exports.objectExists = exports.getObjectMetadata = exports.deleteObject = exports.getPresignedUrl = exports.getObject = exports.getObjectDataUrl = exports.getObjectBuffer = exports.getTextFile = exports.getObjectBinary = exports.upload = exports.uploadBuffer = exports.s3Request = exports.getS3RequestObject = exports.getProviderConfig = exports.getCloudUrl = exports.FileNotFoundError = void 0;\nconst axios_1 = __importDefault(require(\"axios\"));\nconst aws4_1 = __importDefault(require(\"aws4\"));\nconst db = require('debug')('pico-s3');\nconst err = require('debug')('pico-s3:error');\nconst crypto_1 = __importDefault(require(\"crypto\"));\nconst import_1 = require(\"@brillout/import\");\nconst providers_1 = require(\"./providers\");\nconst utils_1 = require(\"./utils\");\nlet _ft = null;\nconst ft = () => __awaiter(void 0, void 0, void 0, function* () {\n if (!_ft) {\n const x = yield (0, import_1.import_)('file-type');\n _ft = x;\n }\n return _ft;\n});\nclass FileNotFoundError extends Error {\n constructor(message) {\n super(message);\n this.name = \"FileNotFoundError\";\n }\n}\nexports.FileNotFoundError = FileNotFoundError;\nconst getCloudUrl = (options) => providers_1.PROVIDERS[options.provider].res(options);\nexports.getCloudUrl = getCloudUrl;\nconst getProviderConfig = (provider) => providers_1.PROVIDERS[provider];\nexports.getProviderConfig = getProviderConfig;\nconst getS3RequestObject = (options, extendedRequestOptions) => {\n const { provider, accessKeyId, secretAccessKey } = options;\n const region = provider === providers_1.CLOUD_PROVIDERS.GCP ? 'region' : options.region;\n const _ = providers_1.PROVIDERS[provider];\n const _host = _.host(options);\n const host = _host.replace(\"https://\", \"\").replace(\"http://\", \"\");\n if (!_)\n throw new Error(`Invalid provider ${provider}. Valid providers: ${Object.keys(providers_1.PROVIDERS)}`);\n const headers = Object.assign({}, (extendedRequestOptions === null || extendedRequestOptions === void 0 ? void 0 : extendedRequestOptions.headers) || {});\n if (_host.includes(\"https://\") && !headers['x-amz-content-sha256']) {\n headers['x-amz-content-sha256'] = 'UNSIGNED-PAYLOAD';\n }\n extendedRequestOptions === null || extendedRequestOptions === void 0 ? true : delete extendedRequestOptions.headers;\n const toSign = Object.assign({ host, url: _.url(options), service: 's3', region,\n headers }, extendedRequestOptions);\n if (provider === providers_1.CLOUD_PROVIDERS.MINIO)\n toSign['path'] = _.url(options).replace(_host, \"\");\n const signedReq = aws4_1.default.sign(toSign, {\n accessKeyId,\n secretAccessKey\n });\n return signedReq;\n};\nexports.getS3RequestObject = getS3RequestObject;\nconst s3Request = (options, extendedRequestOptions) => __awaiter(void 0, void 0, void 0, function* () {\n const signedReq = (0, exports.getS3RequestObject)(options, extendedRequestOptions);\n //@ts-ignore\n return (0, axios_1.default)(Object.assign({}, signedReq));\n});\nexports.s3Request = s3Request;\nconst uploadBuffer = (options) => __awaiter(void 0, void 0, void 0, function* () {\n const { provider, file } = options;\n const _ = providers_1.PROVIDERS[provider];\n if (!file || file === null)\n throw new Error(\"File isnull or undefined\");\n const path = `/${(0, utils_1.resolvePath)(options)}`;\n const _ftResult = yield (yield ft()).fileTypeFromBuffer(file);\n const { mime } = _ftResult || {};\n const filebuf = file;\n /**\n * Infer data type from filename\n */\n const headers = Object.assign(Object.assign({ 'Content-Type': mime || \"application/octet-stream\", 'Content-length': filebuf.length, 'x-amz-content-sha256': crypto_1.default.createHash('sha256').update(filebuf).digest('hex') || 'UNSIGNED-PAYLOAD' }, (options.headers || {})), (options.public ? {\n 'x-amz-acl': 'public-read'\n } : {}));\n try {\n const START = Date.now();\n db(`Uploading ${path} to ${provider}`);\n db(`Using Headers: ${JSON.stringify(headers)}`);\n const res = yield (0, exports.s3Request)(options, {\n method: 'PUT',\n path,\n data: filebuf,\n headers\n });\n const END = Date.now() - START;\n db(`${path} uploaded to ${provider} in ${END}ms with code ${res.status}`);\n return _.res(options) || \"\";\n }\n catch (error) {\n err(\"UPLOAD ERROR\", path, provider, error.message);\n throw error;\n }\n});\nexports.uploadBuffer = uploadBuffer;\nconst upload = (options) => __awaiter(void 0, void 0, void 0, function* () {\n return (0, exports.uploadBuffer)(Object.assign(Object.assign({}, options), { file: Buffer.isBuffer(options.file) ? options.file : Buffer.from(options.file.split(',')[1], 'base64') }));\n});\nexports.upload = upload;\nconst getObjectBinary = (options) => __awaiter(void 0, void 0, void 0, function* () {\n const res = yield (0, exports.getObject)(options, {\n responseType: 'arraybuffer'\n });\n return res.data;\n});\nexports.getObjectBinary = getObjectBinary;\nconst getTextFile = (options) => __awaiter(void 0, void 0, void 0, function* () {\n const buff = yield (0, exports.getObjectBuffer)(options);\n return buff.toString();\n});\nexports.getTextFile = getTextFile;\nconst getObjectBuffer = (options) => __awaiter(void 0, void 0, void 0, function* () {\n const bin = yield (0, exports.getObjectBinary)(options);\n return Buffer.from(bin, 'binary');\n});\nexports.getObjectBuffer = getObjectBuffer;\nconst getObjectDataUrl = (options) => __awaiter(void 0, void 0, void 0, function* () {\n const res = yield (0, exports.getObject)(options, {\n responseType: 'arraybuffer'\n });\n const buff = Buffer.from(res.data, 'binary');\n const dUrl = `data:${res.headers['content-type']};base64,${buff.toString('base64')}`;\n return dUrl;\n});\nexports.getObjectDataUrl = getObjectDataUrl;\nconst getObject = (options, axiosOverride) => __awaiter(void 0, void 0, void 0, function* () {\n const { provider } = options;\n const path = `/${(0, utils_1.resolvePath)(options)}`;\n try {\n const START = Date.now();\n db(`Downloading ${path} from ${provider}`);\n const res = yield (0, exports.s3Request)(options, Object.assign({ method: 'GET', path }, (axiosOverride || {})));\n const END = Date.now() - START;\n db(`${path} downloaded from ${provider} in ${END}ms`);\n return res;\n }\n catch (error) {\n err(\"GET ERROR\", path, provider, error.message);\n if ((error === null || error === void 0 ? void 0 : error.response.status) === 404)\n throw new FileNotFoundError(`File ${path} not found in ${provider}`);\n else\n throw error;\n }\n});\nexports.getObject = getObject;\nconst getPresignedUrl = (options, axiosOverride) => __awaiter(void 0, void 0, void 0, function* () {\n const { provider, accessKeyId, secretAccessKey } = options;\n const path = `/${(0, utils_1.resolvePath)(options)}`;\n const region = provider === providers_1.CLOUD_PROVIDERS.GCP ? 'region' : options.region;\n const _ = providers_1.PROVIDERS[provider];\n const _host = _.host(options);\n const host = _host.replace(\"https://\", \"\").replace(\"http://\", \"\");\n if (!_)\n throw new Error(`Invalid provider ${provider}. Valid providers: ${Object.keys(providers_1.PROVIDERS)}`);\n const res = aws4_1.default.sign({\n host,\n path,\n service: 's3',\n region,\n signQuery: true,\n }, {\n accessKeyId,\n secretAccessKey\n });\n const signedUrl = _host + res.path;\n return signedUrl;\n});\nexports.getPresignedUrl = getPresignedUrl;\nconst deleteObject = (options, axiosOverride) => __awaiter(void 0, void 0, void 0, function* () {\n const { provider } = options;\n const path = `/${(0, utils_1.resolvePath)(options)}`;\n try {\n const START = Date.now();\n db(`Deleting ${path} from ${provider}`);\n const res = yield (0, exports.s3Request)(options, Object.assign({ method: 'DELETE', path }, (axiosOverride || {})));\n const END = Date.now() - START;\n db(`${path} deleted from ${provider} in ${END}ms`);\n return res.status === 204;\n }\n catch (error) {\n err(\"GET ERROR\", path, provider, error.message);\n if ((error === null || error === void 0 ? void 0 : error.response.status) === 404)\n throw new FileNotFoundError(`File ${path} not found in ${provider}`);\n else\n throw error;\n }\n});\nexports.deleteObject = deleteObject;\n//@ts-ignore\nconst getObjectMetadata = (options, axiosOverride) => __awaiter(void 0, void 0, void 0, function* () {\n const { provider } = options;\n const path = `/${(0, utils_1.resolvePath)(options)}`;\n try {\n const START = Date.now();\n db(`Getting Metadata for ${path} from ${provider}`);\n const res = yield (0, exports.s3Request)(options, Object.assign({ method: 'HEAD', path }, (axiosOverride || {})));\n const END = Date.now() - START;\n db(`${path} metadata downloaded from ${provider} in ${END}ms`);\n return res.headers;\n }\n catch (error) {\n err(\"GET ERROR\", path, provider, error.message);\n if ((error === null || error === void 0 ? void 0 : error.response.status) === 404)\n throw new FileNotFoundError(`File ${path} not found in ${provider}`);\n else\n throw error;\n }\n});\nexports.getObjectMetadata = getObjectMetadata;\nconst objectExists = (options, axiosOverride) => __awaiter(void 0, void 0, void 0, function* () { return (0, exports.getObjectMetadata)(options, axiosOverride).then(res => !!res.etag); });\nexports.objectExists = objectExists;\nconst getObjectEtag = (options, axiosOverride) => __awaiter(void 0, void 0, void 0, function* () { return (0, exports.getObjectMetadata)(options, axiosOverride).then(res => res.etag); });\nexports.getObjectEtag = getObjectEtag;\n", "\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.PicoS3 = void 0;\nconst api_1 = require(\"./api\");\n/**\n * A simple class wrapping of the pico s3 functions.\n */\nclass PicoS3 {\n /**\n * @param {S3RequestOptions} options The authentication details of the S3 bucket.\n *\n * You can simple set this to `true` to get the library to infer the authentication deails of the bucket from the environment variables.\n *\n * Here are the environment variables that need to be set:\n * ```\n * provider = process.env.PICO_S3_CLOUD_PROVIDER\n * region = process.env.PICO_S3_REGION\n * bucket = process.env.PICO_S3_BUCKET\n * accessKeyId = process.env.PICO_S3_ACCESS_KEY_ID\n * secretAccessKey = process.env.PICO_S3_SECRET_ACCESS_KEY\n * ```\n */\n constructor(options) {\n if (typeof options === \"boolean\" && options === true) {\n this.options = {\n provider: process.env.PICO_S3_CLOUD_PROVIDER,\n region: process.env.PICO_S3_REGION,\n bucket: process.env.PICO_S3_BUCKET,\n host: process.env.PICO_S3_HOST,\n accessKeyId: process.env.PICO_S3_ACCESS_KEY_ID,\n secretAccessKey: process.env.PICO_S3_SECRET_ACCESS_KEY,\n };\n }\n else\n this.options = options;\n }\n upload(options) {\n return __awaiter(this, void 0, void 0, function* () {\n if (Buffer.isBuffer(options.file))\n return yield (0, api_1.uploadBuffer)(Object.assign(Object.assign({}, this.options), options));\n else\n return yield (0, api_1.upload)(Object.assign(Object.assign({}, this.options), options));\n });\n }\n getObject(options) {\n return __awaiter(this, void 0, void 0, function* () {\n return yield (0, api_1.getObject)(Object.assign(Object.assign({}, this.options), options));\n });\n }\n getProviderConfig() {\n return (0, api_1.getProviderConfig)(this.options.provider);\n }\n getProvider() {\n return this.options.provider;\n }\n getObjectBuffer(options) {\n return __awaiter(this, void 0, void 0, function* () {\n return yield (0, api_1.getObjectBuffer)(Object.assign(Object.assign({}, this.options), options));\n });\n }\n getObjectDataUrl(options) {\n return __awaiter(this, void 0, void 0, function* () {\n return yield (0, api_1.getObjectDataUrl)(Object.assign(Object.assign({}, this.options), options));\n });\n }\n getObjectBinary(options) {\n return __awaiter(this, void 0, void 0, function* () {\n return yield (0, api_1.getObjectBinary)(Object.assign(Object.assign({}, this.options), options));\n });\n }\n deleteObject(options) {\n return __awaiter(this, void 0, void 0, function* () {\n return yield (0, api_1.deleteObject)(Object.assign(Object.assign({}, this.options), options));\n });\n }\n objectExists(options) {\n return __awaiter(this, void 0, void 0, function* () {\n return yield (0, api_1.objectExists)(Object.assign(Object.assign({}, this.options), options));\n });\n }\n getObjectMetadata(options) {\n return __awaiter(this, void 0, void 0, function* () {\n return yield (0, api_1.getObjectMetadata)(Object.assign(Object.assign({}, this.options), options));\n });\n }\n getObjectEtag(options) {\n return __awaiter(this, void 0, void 0, function* () {\n return yield (0, api_1.getObjectEtag)(Object.assign(Object.assign({}, this.options), options));\n });\n }\n getTextFile(options) {\n return __awaiter(this, void 0, void 0, function* () {\n return yield (0, api_1.getTextFile)(Object.assign(Object.assign({}, this.options), options));\n });\n }\n getPresignedUrl(options) {\n return __awaiter(this, void 0, void 0, function* () {\n return yield (0, api_1.getPresignedUrl)(Object.assign(Object.assign({}, this.options), options));\n });\n }\n}\nexports.PicoS3 = PicoS3;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n", "\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./client\"), exports);\n__exportStar(require(\"./api\"), exports);\n__exportStar(require(\"./types\"), exports);\n__exportStar(require(\"./providers\"), exports);\n__exportStar(require(\"./utils\"), exports);\n", "'use strict';\n\nimport PicoS3 from 'pico-s3';\n\n// const _checkArgs = (...args) => {\n// \tfor (const arg of args) {\n// \t\tif (typeof arg !== 'object' || arg === null) {\n// \t\t\tthrow new Error('lowstorage: missing args or args not an object');\n// \t\t}\n// \t}\n// };\n\nconst _matchesQuery = (document, query) => {\n\treturn Object.keys(query).every((key) => document[key] === query[key]);\n};\n\nconst _generateUUID = () => {\n\tif (typeof crypto !== 'undefined' && crypto.randomUUID) {\n\t\treturn crypto.randomUUID();\n\t} else {\n\t\t// Fallback for environments without crypto.randomUUID\n\t\treturn 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n\t\t\tvar r = (Math.random() * 16) | 0,\n\t\t\t\tv = c === 'x' ? r : (r & 0x3) | 0x8;\n\t\t\treturn v.toString(16);\n\t\t});\n\t}\n};\n\nclass Collection {\n\tconstructor(colName, s3) {\n\t\tthis._colName = colName;\n\t\tthis._s3 = s3;\n\t}\n\n\tasync _loadData() {\n\t\ttry {\n\t\t\tconst data = await this._s3.getTextFile({\n\t\t\t\tpath: `${this._colName}.json`,\n\t\t\t});\n\t\t\treturn JSON.parse(data);\n\t\t} catch (error) {\n\t\t\tif (error instanceof FileNotFoundError) {\n\t\t\t\treturn [];\n\t\t\t} else {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\t}\n\n\tasync _saveData(data) {\n\t\tconst key = `${this._colName}.json`;\n\t\treturn this._s3.upload({\n\t\t\tpath: key,\n\t\t\tfile: JSON.stringify(data),\n\t\t});\n\t}\n\n\tasync insert(doc) {\n\t\tif (!Array.isArray(doc)) {\n\t\t\tdoc = [doc];\n\t\t}\n\t\tconst data = await this._loadData();\n\t\tfor (let item of doc) {\n\t\t\tif (typeof item !== 'object' || item === null) {\n\t\t\t\tthrow new Error('Invalid input: input must be an object or an array of objects');\n\t\t\t}\n\t\t\titem._id = item._id || _generateUUID();\n\t\t\tdata.push(item);\n\t\t}\n\t\tawait this._saveData(data);\n\t\treturn doc.length === 1 ? doc[0] : doc;\n\t}\n\n\tasync find(query = {}, options = {}) {\n\t\tconst data = await this._loadData();\n\t\tconst start = parseInt(options.skip, 10) || 0;\n\t\tconst end = parseInt(options.limit, 10) ? start + parseInt(options.limit, 10) : undefined;\n\t\tconst filteredData = data.filter((doc) => _matchesQuery(doc, query)).slice(start, end);\n\t\treturn filteredData;\n\t}\n\n\tasync findOne(query = {}) {\n\t\treturn (await this.find(query))[0] || null;\n\t}\n\n\tasync update(query = {}, update = {}) {\n\t\tconst data = await this._loadData();\n\t\tlet updatedCount = 0;\n\n\t\tfor (let i = 0; i < data.length; i++) {\n\t\t\tif (_matchesQuery(data[i], query)) {\n\t\t\t\tObject.assign(data[i], update);\n\t\t\t\tupdatedCount++;\n\t\t\t}\n\t\t}\n\n\t\tif (updatedCount > 0) {\n\t\t\tawait this._saveData(data);\n\t\t}\n\n\t\treturn updatedCount;\n\t}\n\n\tasync updateOne(query = {}, update = {}) {\n\t\tconst data = await this._loadData();\n\t\tconst docIndex = data.findIndex((doc) => _matchesQuery(doc, query));\n\n\t\tif (docIndex !== -1) {\n\t\t\tObject.assign(data[docIndex], update);\n\t\t\tawait this._saveData(data);\n\t\t\treturn 1;\n\t\t}\n\t\treturn 0;\n\t}\n\n\tasync delete(query = {}) {\n\t\tconst data = await this._loadData();\n\t\tconst initialLength = data.length;\n\t\tconst newData = data.filter((doc) => !_matchesQuery(doc, query));\n\t\tawait this._saveData(newData);\n\t\treturn initialLength - newData.length;\n\t}\n\n\tasync count(query = {}) {\n\t\treturn (await this.find(query)).length;\n\t}\n\n\tasync remove() {\n\t\tconst data = await this._loadData();\n\t\tconst deletedCount = data.length;\n\t\tawait this._saveData([]);\n\t\treturn deletedCount;\n\t}\n}\n\nclass lowstorage {\n\tconstructor(options) {\n\t\t// _checkArgs(options);\n\t\tthis._s3 = new PicoS3(options);\n\t}\n\n\tcollection(colName) {\n\t\treturn new Collection(colName, this._s3);\n\t}\n\n\tasync listCollections() {\n\t\tconst listed = await this._s3.listObjects();\n\t\tconst collections = listed.filter((entry) => entry.key.endsWith('.json'));\n\t\treturn collections.map((entry) => entry.key.split('/')[0]);\n\t}\n}\n\n// // Conditionally export lowstorage based on the runtime environment\n// if (typeof module !== 'undefined' && module.exports) {\n// \t// Node.js (CommonJS)\n// \tmodule.exports = lowstorage;\n// } else if (typeof define === 'function' && define.amd) {\n// \t// AMD\n// \tdefine(function () {\n// \t\treturn lowstorage;\n// \t});\n// } else if (typeof exports !== 'undefined') {\n// \t// ES module\n// \texports.default = lowstorage;\n// }\n\nexport default lowstorage;\n"], + "mappings": "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", + "names": ["require_delayed_stream", "__commonJSMin", "exports", "module", "Stream", "util", "DelayedStream", "source", "options", "delayedStream", "option", "realEmit", "args", "r", "message", "require_combined_stream", "__commonJSMin", "exports", "module", "util", "Stream", "DelayedStream", "CombinedStream", "options", "combinedStream", "option", "stream", "isStreamLike", "newStream", "dest", "getStream", "value", "self", "err", "data", "message", "require_db", "__commonJSMin", "exports", "module", "require_mime_db", "__commonJSMin", "exports", "module", "require_mime_types", "__commonJSMin", "exports", "db", "extname", "EXTRACT_TYPE_REGEXP", "TEXT_TYPE_REGEXP", "charset", "contentType", "extension", "lookup", "populateMaps", "type", "match", "mime", "str", "exts", "path", "extensions", "types", "preference", "i", "from", "to", "require_defer", "__commonJSMin", "exports", "module", "defer", "fn", "nextTick", "require_async", "__commonJSMin", "exports", "module", "defer", "async", "callback", "isAsync", "err", "result", "require_abort", "__commonJSMin", "exports", "module", "abort", "state", "clean", "key", "require_iterate", "__commonJSMin", "exports", "module", "async", "abort", "iterate", "list", "iterator", "state", "callback", "key", "runJob", "error", "output", "item", "aborter", "require_state", "__commonJSMin", "exports", "module", "state", "list", "sortMethod", "isNamedList", "initState", "a", "b", "require_terminator", "__commonJSMin", "exports", "module", "abort", "async", "terminator", "callback", "require_parallel", "__commonJSMin", "exports", "module", "iterate", "initState", "terminator", "parallel", "list", "iterator", "callback", "state", "error", "result", "require_serialOrdered", "__commonJSMin", "exports", "module", "iterate", "initState", "terminator", "serialOrdered", "ascending", "descending", "list", "iterator", "sortMethod", "callback", "state", "iteratorHandler", "error", "result", "a", "b", "require_serial", "__commonJSMin", "exports", "module", "serialOrdered", "serial", "list", "iterator", "callback", "require_asynckit", "__commonJSMin", "exports", "module", "require_populate", "__commonJSMin", "exports", "module", "dst", "src", "prop", "require_form_data", "__commonJSMin", "exports", "module", "CombinedStream", "util", "path", "http", "https", "parseUrl", "fs", "Stream", "mime", "asynckit", "populate", "FormData", "options", "option", "field", "value", "append", "header", "footer", "valueLength", "callback", "err", "stat", "fileSize", "response", "contentDisposition", "contentType", "contents", "headers", "prop", "filename", "next", "lastPart", "userHeaders", "formHeaders", "boundary", "dataBuffer", "len", "i", "knownLength", "hasKnownLength", "cb", "values", "length", "params", "request", "defaults", "onResponse", "error", "responce", "require_proxy_from_env", "__commonJSMin", "exports", "parseUrl", "DEFAULT_PORTS", "stringEndsWith", "s", "getProxyForUrl", "url", "parsedUrl", "proto", "hostname", "port", "shouldProxy", "proxy", "getEnv", "NO_PROXY", "parsedProxy", "parsedProxyHostname", "parsedProxyPort", "key", "require_ms", "__commonJSMin", "exports", "module", "s", "m", "h", "d", "w", "y", "val", "options", "type", "parse", "fmtLong", "fmtShort", "str", "match", "n", "ms", "msAbs", "plural", "name", "isPlural", "require_common", "__commonJSMin", "exports", "module", "setup", "env", "createDebug", "coerce", "disable", "enable", "enabled", "destroy", "key", "selectColor", "namespace", "hash", "i", "prevTime", "enableOverride", "namespacesCache", "enabledCache", "debug", "args", "self", "curr", "ms", "index", "match", "format", "formatter", "val", "extend", "v", "delimiter", "newDebug", "namespaces", "split", "len", "toNamespace", "name", "regexp", "require_browser", "__commonJSMin", "exports", "module", "formatArgs", "save", "load", "useColors", "localstorage", "warned", "args", "c", "index", "lastC", "match", "namespaces", "r", "formatters", "v", "error", "require_has_flag", "__commonJSMin", "exports", "module", "flag", "argv", "prefix", "position", "terminatorPosition", "require_supports_color", "__commonJSMin", "exports", "module", "os", "tty", "hasFlag", "env", "forceColor", "translateLevel", "level", "supportsColor", "haveStream", "streamIsTTY", "min", "osRelease", "sign", "version", "getSupportLevel", "stream", "require_node", "__commonJSMin", "exports", "module", "tty", "util", "init", "log", "formatArgs", "save", "load", "useColors", "supportsColor", "key", "obj", "prop", "_", "k", "val", "args", "name", "c", "colorCode", "prefix", "getDate", "namespaces", "debug", "keys", "formatters", "v", "str", "require_src", "__commonJSMin", "exports", "module", "require_debug", "__commonJSMin", "exports", "module", "debug", "require_follow_redirects", "__commonJSMin", "exports", "module", "url", "URL", "http", "https", "Writable", "assert", "debug", "useNativeURL", "error", "preservedUrlFields", "events", "eventHandlers", "event", "arg1", "arg2", "arg3", "InvalidUrlError", "createErrorType", "RedirectionError", "TooManyRedirectsError", "MaxBodyLengthExceededError", "WriteAfterEndError", "destroy", "noop", "RedirectableRequest", "options", "responseCallback", "self", "response", "cause", "destroyRequest", "data", "encoding", "callback", "isString", "isBuffer", "isFunction", "currentRequest", "name", "value", "msecs", "destroyOnTimeout", "socket", "startTimer", "clearTimer", "method", "b", "property", "searchPos", "protocol", "nativeProtocol", "scheme", "request", "i", "buffers", "writeNext", "buffer", "statusCode", "location", "requestHeaders", "beforeRedirect", "removeMatchingHeaders", "currentHostHeader", "currentUrlParts", "parseUrl", "currentHost", "currentUrl", "redirectUrl", "resolveUrl", "spreadUrlObject", "isSubdomain", "responseDetails", "requestDetails", "wrap", "protocols", "nativeProtocols", "wrappedProtocol", "input", "isURL", "validateUrl", "get", "wrappedRequest", "parsed", "relative", "base", "urlObject", "target", "spread", "key", "regex", "headers", "lastValue", "header", "code", "message", "baseClass", "CustomError", "properties", "subdomain", "domain", "dot", "bind", "fn", "thisArg", "toString", "getPrototypeOf", "kindOf", "cache", "thing", "str", "kindOfTest", "type", "typeOfTest", "isArray", "isUndefined", "isBuffer", "val", "isFunction", "isArrayBuffer", "isArrayBufferView", "result", "isString", "isNumber", "isObject", "isBoolean", "isPlainObject", "prototype", "isDate", "isFile", "isBlob", "isFileList", "isStream", "isFormData", "kind", "isURLSearchParams", "isReadableStream", "isRequest", "isResponse", "isHeaders", "trim", "forEach", "obj", "allOwnKeys", "i", "l", "keys", "len", "key", "findKey", "_key", "_global", "isContextDefined", "context", "merge", "caseless", "assignValue", "targetKey", "extend", "a", "b", "stripBOM", "content", "inherits", "constructor", "superConstructor", "props", "descriptors", "toFlatObject", "sourceObj", "destObj", "filter", "propFilter", "prop", "merged", "endsWith", "searchString", "position", "lastIndex", "toArray", "arr", "isTypedArray", "TypedArray", "forEachEntry", "iterator", "pair", "matchAll", "regExp", "matches", "isHTMLForm", "toCamelCase", "m", "p1", "p2", "hasOwnProperty", "isRegExp", "reduceDescriptors", "reducer", "reducedDescriptors", "descriptor", "name", "ret", "freezeMethods", "value", "toObjectSet", "arrayOrString", "delimiter", "define", "noop", "toFiniteNumber", "defaultValue", "ALPHA", "DIGIT", "ALPHABET", "generateString", "size", "alphabet", "length", "isSpecCompliantForm", "toJSONObject", "stack", "visit", "source", "target", "reducedValue", "isAsyncFn", "isThenable", "utils$1", "AxiosError", "message", "code", "config", "request", "response", "utils", "error", "customProps", "axiosError", "isVisitable", "removeBrackets", "renderKey", "path", "dots", "token", "isFlatArray", "predicates", "toFormData", "formData", "options", "PlatformFormData", "option", "metaTokens", "visitor", "defaultVisitor", "indexes", "useBlob", "convertValue", "el", "index", "exposedHelpers", "build", "encode", "charMap", "match", "AxiosURLSearchParams", "params", "encoder", "_encode", "buildURL", "url", "serializeFn", "serializedParams", "hashmarkIndex", "InterceptorManager", "fulfilled", "rejected", "id", "h", "InterceptorManager$1", "transitionalDefaults", "URLSearchParams", "platform$1", "FormData", "hasBrowserEnv", "hasStandardBrowserEnv", "product", "hasStandardBrowserWebWorkerEnv", "origin", "platform", "toURLEncodedForm", "data", "helpers", "parsePropPath", "arrayToObject", "formDataToJSON", "buildPath", "isNumericKey", "isLast", "stringifySafely", "rawValue", "parser", "e", "defaults", "headers", "contentType", "hasJSONContentType", "isObjectPayload", "_FormData", "transitional", "forcedJSONParsing", "JSONRequested", "strictJSONParsing", "status", "method", "defaults$1", "ignoreDuplicateOf", "parseHeaders", "rawHeaders", "parsed", "line", "$internals", "normalizeHeader", "header", "normalizeValue", "parseTokens", "tokens", "tokensRE", "isValidHeaderName", "matchHeaderValue", "isHeaderNameFilter", "formatHeader", "w", "char", "buildAccessors", "accessorName", "methodName", "arg1", "arg2", "arg3", "AxiosHeaders", "valueOrRewrite", "rewrite", "self", "setHeader", "_value", "_header", "_rewrite", "lHeader", "setHeaders", "matcher", "deleted", "deleteHeader", "format", "normalized", "targets", "asStrings", "first", "computed", "accessors", "defineAccessor", "mapped", "headerValue", "AxiosHeaders$1", "transformData", "fns", "isCancel", "CanceledError", "settle", "resolve", "reject", "validateStatus", "isAbsoluteURL", "combineURLs", "baseURL", "relativeURL", "buildFullPath", "requestedURL", "VERSION", "parseProtocol", "DATA_URL_PATTERN", "fromDataURI", "uri", "asBlob", "_Blob", "protocol", "mime", "isBase64", "body", "buffer", "throttle", "freq", "timestamp", "threshold", "timer", "force", "now", "speedometer", "samplesCount", "min", "bytes", "timestamps", "head", "tail", "firstSampleTS", "chunkLength", "startedAt", "bytesCount", "passed", "kInternals", "AxiosTransformStream", "stream", "internals", "_speedometer", "event", "bytesNotified", "totalBytes", "bytesTransferred", "progressBytes", "rate", "onFinish", "chunk", "encoding", "callback", "maxRate", "readableHighWaterMark", "timeWindow", "divider", "bytesThreshold", "minChunkSize", "pushChunk", "_chunk", "_callback", "transformChunk", "chunkSize", "chunkRemainder", "maxChunkSize", "bytesLeft", "transformNextChunk", "err", "AxiosTransformStream$1", "asyncIterator", "readBlob", "blob", "readBlob$1", "BOUNDARY_ALPHABET", "textEncoder", "TextEncoder", "CRLF", "CRLF_BYTES", "CRLF_BYTES_COUNT", "FormDataPart", "escapeName", "isStringValue", "formDataToStream", "form", "headersHandler", "tag", "boundary", "boundaryBytes", "footerBytes", "contentLength", "parts", "part", "computedHeaders", "Readable", "formDataToStream$1", "ZlibHeaderTransformStream", "ZlibHeaderTransformStream$1", "callbackify", "args", "cb", "callbackify$1", "zlibOptions", "zlib", "brotliOptions", "isBrotliSupported", "httpFollow", "httpsFollow", "followRedirects", "isHttps", "supportedProtocols", "dispatchBeforeRedirect", "responseDetails", "setProxy", "configProxy", "location", "proxy", "proxyUrl", "getProxyForUrl", "base64", "proxyHost", "redirectOptions", "isHttpAdapterSupported", "wrapAsync", "asyncExecutor", "onDone", "isDone", "done", "isRejected", "_resolve", "_reject", "reason", "onDoneHandler", "resolveFamily", "address", "family", "buildAddressEntry", "httpAdapter", "lookup", "responseType", "responseEncoding", "req", "_lookup", "hostname", "opt", "arg0", "addresses", "addr", "emitter", "EventEmitter", "onFinished", "abort", "fullPath", "convertedData", "onDownloadProgress", "onUploadProgress", "maxUploadRate", "maxDownloadRate", "userBoundary", "formHeaders", "knownLength", "util", "progress", "auth", "username", "password", "urlUsername", "urlPassword", "customErr", "transport", "isHttpsRequest", "https", "http", "res", "streams", "responseLength", "transformStream", "responseStream", "lastRequest", "offListeners", "responseBuffer", "totalResponseBytes", "responseData", "socket", "timeout", "timeoutErrorMessage", "ended", "errored", "progressEventReducer", "listener", "isDownloadStream", "loaded", "total", "inRange", "isURLSameOrigin", "msie", "urlParsingNode", "originURL", "resolveURL", "href", "requestURL", "cookies", "expires", "domain", "secure", "cookie", "headersToObject", "mergeConfig", "config1", "config2", "getMergedValue", "mergeDeepProperties", "valueFromConfig2", "defaultToConfig2", "mergeDirectKeys", "mergeMap", "configValue", "resolveConfig", "newConfig", "withXSRFToken", "xsrfHeaderName", "xsrfCookieName", "xsrfValue", "isXHRAdapterSupported", "xhrAdapter", "_config", "requestData", "requestHeaders", "onCanceled", "onloadend", "responseHeaders", "cancel", "composeSignals", "signals", "controller", "aborted", "onabort", "unsubscribe", "signal", "composeSignals$1", "streamChunk", "pos", "end", "readBytes", "iterable", "trackStream", "onProgress", "fetchProgressDecorator", "lengthComputable", "isFetchSupported", "isReadableStreamSupported", "encodeText", "supportsRequestStream", "duplexAccessed", "hasContentType", "DEFAULT_CHUNK_SIZE", "supportsResponseStream", "resolvers", "_", "getBodyLength", "resolveBodyLength", "fetchAdapter", "cancelToken", "withCredentials", "fetchOptions", "composedSignal", "stopTimeout", "finished", "requestContentLength", "_request", "contentTypeHeader", "isStreamResponse", "responseContentLength", "knownAdapters", "renderReason", "isResolvedHandle", "adapter", "adapters", "nameOrAdapter", "rejectedReasons", "reasons", "state", "s", "throwIfCancellationRequested", "dispatchRequest", "validators", "deprecatedWarnings", "validator", "version", "formatMessage", "desc", "opts", "assertOptions", "schema", "allowUnknown", "Axios", "instanceConfig", "configOrUrl", "dummy", "paramsSerializer", "contextHeaders", "requestInterceptorChain", "synchronousRequestInterceptors", "interceptor", "responseInterceptorChain", "promise", "chain", "onFulfilled", "onRejected", "generateHTTPMethod", "isForm", "Axios$1", "CancelToken", "_CancelToken", "executor", "resolvePromise", "onfulfilled", "c", "CancelToken$1", "spread", "isAxiosError", "payload", "HttpStatusCode", "HttpStatusCode$1", "createInstance", "defaultConfig", "instance", "axios", "promises", "require_lru", "__commonJSMin", "exports", "module", "size", "LruCache", "DoublyLinkedList", "key", "node", "val", "DoublyLinkedNode", "lastNode", "require_aws4", "__commonJSMin", "exports", "aws4", "url", "querystring", "crypto", "lru", "credentialsCache", "hmac", "key", "string", "encoding", "hash", "encodeRfc3986", "urlEncodedString", "c", "encodeRfc3986Full", "str", "HEADERS_TO_IGNORE", "RequestSigner", "request", "credentials", "headers", "hostParts", "host", "match", "i", "region", "subdomain", "query", "date", "cacheKey", "kDate", "kRegion", "kService", "kCredentials", "pathStr", "queryStr", "normalizePath", "decodePath", "decodeSlashesInPath", "firstValOnly", "bodyHash", "reducedQuery", "obj", "encodedQueryPieces", "val", "path", "piece", "trimAll", "header", "a", "b", "extraHeadersToInclude", "extraHeadersToIgnore", "env", "queryIx", "require_dist", "__commonJSMin", "exports", "import_", "id", "fixWindowsBug", "prefix", "isAbsolute", "path", "require_utils", "__commonJSMin", "exports", "resolvePath", "options", "directory", "require_providers", "__commonJSMin", "exports", "utils_1", "CLOUD_PROVIDERS", "bucket", "filename", "directory", "region", "host", "require_api", "__commonJSMin", "exports", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "__importDefault", "mod", "axios_1", "aws4_1", "db", "err", "crypto_1", "import_1", "providers_1", "utils_1", "_ft", "ft", "FileNotFoundError", "message", "getCloudUrl", "options", "getProviderConfig", "provider", "getS3RequestObject", "extendedRequestOptions", "accessKeyId", "secretAccessKey", "region", "_", "_host", "host", "headers", "toSign", "s3Request", "signedReq", "uploadBuffer", "file", "path", "_ftResult", "mime", "filebuf", "START", "res", "END", "error", "upload", "getObjectBinary", "getTextFile", "getObjectBuffer", "bin", "getObjectDataUrl", "buff", "getObject", "axiosOverride", "getPresignedUrl", "deleteObject", "getObjectMetadata", "objectExists", "getObjectEtag", "require_client", "__commonJSMin", "exports", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "api_1", "PicoS3", "options", "require_types", "__commonJSMin", "exports", "require_dist", "__commonJSMin", "exports", "__createBinding", "o", "m", "k", "k2", "__exportStar", "p", "import_pico_s3", "_matchesQuery", "document", "query", "key", "_generateUUID", "c", "r", "v", "Collection", "colName", "s3", "data", "error", "doc", "item", "options", "start", "end", "update", "updatedCount", "i", "docIndex", "initialLength", "newData", "deletedCount", "lowstorage", "PicoS3", "entry", "lowstorage_default"] +} diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index af6c633..0000000 --- a/package-lock.json +++ /dev/null @@ -1,12023 +0,0 @@ -{ - "name": "lowstorage", - "version": "0.0.5", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "lowstorage", - "version": "0.0.5", - "license": "MIT", - "dependencies": { - "@aws-sdk/client-s3": "^3.583.0" - }, - "devDependencies": { - "esbuild": "^0.19.6", - "jest": "^29.7.0", - "prettier": "^3.1.0", - "supertest": "^6.3.4", - "typescript": "^5.3.3", - "wrangler": "^3.31.0" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", - "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@aws-crypto/crc32": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-3.0.0.tgz", - "integrity": "sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA==", - "dependencies": { - "@aws-crypto/util": "^3.0.0", - "@aws-sdk/types": "^3.222.0", - "tslib": "^1.11.1" - } - }, - "node_modules/@aws-crypto/crc32/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/@aws-crypto/crc32c": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/crc32c/-/crc32c-3.0.0.tgz", - "integrity": "sha512-ENNPPManmnVJ4BTXlOjAgD7URidbAznURqD0KvfREyc4o20DPYdEldU1f5cQ7Jbj0CJJSPaMIk/9ZshdB3210w==", - "dependencies": { - "@aws-crypto/util": "^3.0.0", - "@aws-sdk/types": "^3.222.0", - "tslib": "^1.11.1" - } - }, - "node_modules/@aws-crypto/crc32c/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/@aws-crypto/ie11-detection": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/ie11-detection/-/ie11-detection-3.0.0.tgz", - "integrity": "sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q==", - "dependencies": { - "tslib": "^1.11.1" - } - }, - "node_modules/@aws-crypto/ie11-detection/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/@aws-crypto/sha1-browser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha1-browser/-/sha1-browser-3.0.0.tgz", - "integrity": "sha512-NJth5c997GLHs6nOYTzFKTbYdMNA6/1XlKVgnZoaZcQ7z7UJlOgj2JdbHE8tiYLS3fzXNCguct77SPGat2raSw==", - "dependencies": { - "@aws-crypto/ie11-detection": "^3.0.0", - "@aws-crypto/supports-web-crypto": "^3.0.0", - "@aws-crypto/util": "^3.0.0", - "@aws-sdk/types": "^3.222.0", - "@aws-sdk/util-locate-window": "^3.0.0", - "@aws-sdk/util-utf8-browser": "^3.0.0", - "tslib": "^1.11.1" - } - }, - "node_modules/@aws-crypto/sha1-browser/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/@aws-crypto/sha256-browser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-3.0.0.tgz", - "integrity": "sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ==", - "dependencies": { - "@aws-crypto/ie11-detection": "^3.0.0", - "@aws-crypto/sha256-js": "^3.0.0", - "@aws-crypto/supports-web-crypto": "^3.0.0", - "@aws-crypto/util": "^3.0.0", - "@aws-sdk/types": "^3.222.0", - "@aws-sdk/util-locate-window": "^3.0.0", - "@aws-sdk/util-utf8-browser": "^3.0.0", - "tslib": "^1.11.1" - } - }, - "node_modules/@aws-crypto/sha256-browser/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/@aws-crypto/sha256-js": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-3.0.0.tgz", - "integrity": "sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ==", - "dependencies": { - "@aws-crypto/util": "^3.0.0", - "@aws-sdk/types": "^3.222.0", - "tslib": "^1.11.1" - } - }, - "node_modules/@aws-crypto/sha256-js/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/@aws-crypto/supports-web-crypto": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-3.0.0.tgz", - "integrity": "sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg==", - "dependencies": { - "tslib": "^1.11.1" - } - }, - "node_modules/@aws-crypto/supports-web-crypto/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/@aws-crypto/util": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-3.0.0.tgz", - "integrity": "sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w==", - "dependencies": { - "@aws-sdk/types": "^3.222.0", - "@aws-sdk/util-utf8-browser": "^3.0.0", - "tslib": "^1.11.1" - } - }, - "node_modules/@aws-crypto/util/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/@aws-sdk/client-s3": { - "version": "3.583.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.583.0.tgz", - "integrity": "sha512-pS7wncugSuIQ8RgtRIE9Dystdmd3mMnjfjiO1iA1UhGXkyAgoJzQ4jH0r+5X+eWmYHYQcfy9fUQXT2gqV3t9GA==", - "dependencies": { - "@aws-crypto/sha1-browser": "3.0.0", - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sso-oidc": "3.583.0", - "@aws-sdk/client-sts": "3.583.0", - "@aws-sdk/core": "3.582.0", - "@aws-sdk/credential-provider-node": "3.583.0", - "@aws-sdk/middleware-bucket-endpoint": "3.577.0", - "@aws-sdk/middleware-expect-continue": "3.577.0", - "@aws-sdk/middleware-flexible-checksums": "3.577.0", - "@aws-sdk/middleware-host-header": "3.577.0", - "@aws-sdk/middleware-location-constraint": "3.577.0", - "@aws-sdk/middleware-logger": "3.577.0", - "@aws-sdk/middleware-recursion-detection": "3.577.0", - "@aws-sdk/middleware-sdk-s3": "3.582.0", - "@aws-sdk/middleware-signing": "3.577.0", - "@aws-sdk/middleware-ssec": "3.577.0", - "@aws-sdk/middleware-user-agent": "3.583.0", - "@aws-sdk/region-config-resolver": "3.577.0", - "@aws-sdk/signature-v4-multi-region": "3.582.0", - "@aws-sdk/types": "3.577.0", - "@aws-sdk/util-endpoints": "3.583.0", - "@aws-sdk/util-user-agent-browser": "3.577.0", - "@aws-sdk/util-user-agent-node": "3.577.0", - "@aws-sdk/xml-builder": "3.575.0", - "@smithy/config-resolver": "^3.0.0", - "@smithy/core": "^2.0.1", - "@smithy/eventstream-serde-browser": "^3.0.0", - "@smithy/eventstream-serde-config-resolver": "^3.0.0", - "@smithy/eventstream-serde-node": "^3.0.0", - "@smithy/fetch-http-handler": "^3.0.1", - "@smithy/hash-blob-browser": "^3.0.0", - "@smithy/hash-node": "^3.0.0", - "@smithy/hash-stream-node": "^3.0.0", - "@smithy/invalid-dependency": "^3.0.0", - "@smithy/md5-js": "^3.0.0", - "@smithy/middleware-content-length": "^3.0.0", - "@smithy/middleware-endpoint": "^3.0.0", - "@smithy/middleware-retry": "^3.0.1", - "@smithy/middleware-serde": "^3.0.0", - "@smithy/middleware-stack": "^3.0.0", - "@smithy/node-config-provider": "^3.0.0", - "@smithy/node-http-handler": "^3.0.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/smithy-client": "^3.0.1", - "@smithy/types": "^3.0.0", - "@smithy/url-parser": "^3.0.0", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.1", - "@smithy/util-defaults-mode-node": "^3.0.1", - "@smithy/util-endpoints": "^2.0.0", - "@smithy/util-retry": "^3.0.0", - "@smithy/util-stream": "^3.0.1", - "@smithy/util-utf8": "^3.0.0", - "@smithy/util-waiter": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-sso": { - "version": "3.583.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.583.0.tgz", - "integrity": "sha512-FNJ2MmiBtZZwgkj4+GLVrzqwmD6D8FBptrFZk7PnGkSf7v1Q8txYNI6gY938RRhYJ4lBW4cNbhPvWoDxAl90Hw==", - "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/core": "3.582.0", - "@aws-sdk/middleware-host-header": "3.577.0", - "@aws-sdk/middleware-logger": "3.577.0", - "@aws-sdk/middleware-recursion-detection": "3.577.0", - "@aws-sdk/middleware-user-agent": "3.583.0", - "@aws-sdk/region-config-resolver": "3.577.0", - "@aws-sdk/types": "3.577.0", - "@aws-sdk/util-endpoints": "3.583.0", - "@aws-sdk/util-user-agent-browser": "3.577.0", - "@aws-sdk/util-user-agent-node": "3.577.0", - "@smithy/config-resolver": "^3.0.0", - "@smithy/core": "^2.0.1", - "@smithy/fetch-http-handler": "^3.0.1", - "@smithy/hash-node": "^3.0.0", - "@smithy/invalid-dependency": "^3.0.0", - "@smithy/middleware-content-length": "^3.0.0", - "@smithy/middleware-endpoint": "^3.0.0", - "@smithy/middleware-retry": "^3.0.1", - "@smithy/middleware-serde": "^3.0.0", - "@smithy/middleware-stack": "^3.0.0", - "@smithy/node-config-provider": "^3.0.0", - "@smithy/node-http-handler": "^3.0.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/smithy-client": "^3.0.1", - "@smithy/types": "^3.0.0", - "@smithy/url-parser": "^3.0.0", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.1", - "@smithy/util-defaults-mode-node": "^3.0.1", - "@smithy/util-endpoints": "^2.0.0", - "@smithy/util-middleware": "^3.0.0", - "@smithy/util-retry": "^3.0.0", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-sso-oidc": { - "version": "3.583.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.583.0.tgz", - "integrity": "sha512-LO3wmrFXPi2kNE46lD1XATfRrvdNxXd4DlTFouoWmr7lvqoUkcbmtkV2r/XChZA2z0HiDauphC1e8b8laJVeSg==", - "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.583.0", - "@aws-sdk/core": "3.582.0", - "@aws-sdk/credential-provider-node": "3.583.0", - "@aws-sdk/middleware-host-header": "3.577.0", - "@aws-sdk/middleware-logger": "3.577.0", - "@aws-sdk/middleware-recursion-detection": "3.577.0", - "@aws-sdk/middleware-user-agent": "3.583.0", - "@aws-sdk/region-config-resolver": "3.577.0", - "@aws-sdk/types": "3.577.0", - "@aws-sdk/util-endpoints": "3.583.0", - "@aws-sdk/util-user-agent-browser": "3.577.0", - "@aws-sdk/util-user-agent-node": "3.577.0", - "@smithy/config-resolver": "^3.0.0", - "@smithy/core": "^2.0.1", - "@smithy/fetch-http-handler": "^3.0.1", - "@smithy/hash-node": "^3.0.0", - "@smithy/invalid-dependency": "^3.0.0", - "@smithy/middleware-content-length": "^3.0.0", - "@smithy/middleware-endpoint": "^3.0.0", - "@smithy/middleware-retry": "^3.0.1", - "@smithy/middleware-serde": "^3.0.0", - "@smithy/middleware-stack": "^3.0.0", - "@smithy/node-config-provider": "^3.0.0", - "@smithy/node-http-handler": "^3.0.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/smithy-client": "^3.0.1", - "@smithy/types": "^3.0.0", - "@smithy/url-parser": "^3.0.0", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.1", - "@smithy/util-defaults-mode-node": "^3.0.1", - "@smithy/util-endpoints": "^2.0.0", - "@smithy/util-middleware": "^3.0.0", - "@smithy/util-retry": "^3.0.0", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-sts": { - "version": "3.583.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.583.0.tgz", - "integrity": "sha512-xDMxiemPDWr9dY2Q4AyixkRnk/hvS6fs6OWxuVCz1WO47YhaAfOsEGAgQMgDLLaOfj/oLU5D14uTNBEPGh4rBA==", - "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sso-oidc": "3.583.0", - "@aws-sdk/core": "3.582.0", - "@aws-sdk/credential-provider-node": "3.583.0", - "@aws-sdk/middleware-host-header": "3.577.0", - "@aws-sdk/middleware-logger": "3.577.0", - "@aws-sdk/middleware-recursion-detection": "3.577.0", - "@aws-sdk/middleware-user-agent": "3.583.0", - "@aws-sdk/region-config-resolver": "3.577.0", - "@aws-sdk/types": "3.577.0", - "@aws-sdk/util-endpoints": "3.583.0", - "@aws-sdk/util-user-agent-browser": "3.577.0", - "@aws-sdk/util-user-agent-node": "3.577.0", - "@smithy/config-resolver": "^3.0.0", - "@smithy/core": "^2.0.1", - "@smithy/fetch-http-handler": "^3.0.1", - "@smithy/hash-node": "^3.0.0", - "@smithy/invalid-dependency": "^3.0.0", - "@smithy/middleware-content-length": "^3.0.0", - "@smithy/middleware-endpoint": "^3.0.0", - "@smithy/middleware-retry": "^3.0.1", - "@smithy/middleware-serde": "^3.0.0", - "@smithy/middleware-stack": "^3.0.0", - "@smithy/node-config-provider": "^3.0.0", - "@smithy/node-http-handler": "^3.0.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/smithy-client": "^3.0.1", - "@smithy/types": "^3.0.0", - "@smithy/url-parser": "^3.0.0", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.1", - "@smithy/util-defaults-mode-node": "^3.0.1", - "@smithy/util-endpoints": "^2.0.0", - "@smithy/util-middleware": "^3.0.0", - "@smithy/util-retry": "^3.0.0", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/core": { - "version": "3.582.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.582.0.tgz", - "integrity": "sha512-ofmD96IQc9g1dbyqlCyxu5fCG7kIl9p1NoN5+vGBUyLdbmPCV3Pdg99nRHYEJuv2MgGx5AUFGDPMHcqbJpnZIw==", - "dependencies": { - "@smithy/core": "^2.0.1", - "@smithy/protocol-http": "^4.0.0", - "@smithy/signature-v4": "^3.0.0", - "@smithy/smithy-client": "^3.0.1", - "@smithy/types": "^3.0.0", - "fast-xml-parser": "4.2.5", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-env": { - "version": "3.577.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.577.0.tgz", - "integrity": "sha512-Jxu255j0gToMGEiqufP8ZtKI8HW90lOLjwJ3LrdlD/NLsAY0tOQf1fWc53u28hWmmNGMxmCrL2p66IOgMDhDUw==", - "dependencies": { - "@aws-sdk/types": "3.577.0", - "@smithy/property-provider": "^3.0.0", - "@smithy/types": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-http": { - "version": "3.582.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.582.0.tgz", - "integrity": "sha512-kGOUKw5ryPkDIYB69PjK3SicVLTbWB06ouFN2W1EvqUJpkQGPAUGzYcomKtt3mJaCTf/1kfoaHwARAl6KKSP8Q==", - "dependencies": { - "@aws-sdk/types": "3.577.0", - "@smithy/fetch-http-handler": "^3.0.1", - "@smithy/node-http-handler": "^3.0.0", - "@smithy/property-provider": "^3.0.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/smithy-client": "^3.0.1", - "@smithy/types": "^3.0.0", - "@smithy/util-stream": "^3.0.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.583.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.583.0.tgz", - "integrity": "sha512-8I0oWNg/yps6ctjhEeL/qJ9BIa/+xXP7RPDQqFKZ2zBkWbmLLOoMWXRvl8uKUBD6qCe+DGmcu9skfVXeXSesEQ==", - "dependencies": { - "@aws-sdk/credential-provider-env": "3.577.0", - "@aws-sdk/credential-provider-process": "3.577.0", - "@aws-sdk/credential-provider-sso": "3.583.0", - "@aws-sdk/credential-provider-web-identity": "3.577.0", - "@aws-sdk/types": "3.577.0", - "@smithy/credential-provider-imds": "^3.0.0", - "@smithy/property-provider": "^3.0.0", - "@smithy/shared-ini-file-loader": "^3.0.0", - "@smithy/types": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "@aws-sdk/client-sts": "^3.583.0" - } - }, - "node_modules/@aws-sdk/credential-provider-node": { - "version": "3.583.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.583.0.tgz", - "integrity": "sha512-yBNypBXny7zJH85SzxDj8s1mbLXv9c/Vbq0qR3R3POj2idZ6ywB/qlIRC1XwBuv49Wvg8kA1wKXk3K3jrpcVIw==", - "dependencies": { - "@aws-sdk/credential-provider-env": "3.577.0", - "@aws-sdk/credential-provider-http": "3.582.0", - "@aws-sdk/credential-provider-ini": "3.583.0", - "@aws-sdk/credential-provider-process": "3.577.0", - "@aws-sdk/credential-provider-sso": "3.583.0", - "@aws-sdk/credential-provider-web-identity": "3.577.0", - "@aws-sdk/types": "3.577.0", - "@smithy/credential-provider-imds": "^3.0.0", - "@smithy/property-provider": "^3.0.0", - "@smithy/shared-ini-file-loader": "^3.0.0", - "@smithy/types": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-process": { - "version": "3.577.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.577.0.tgz", - "integrity": "sha512-Gin6BWtOiXxIgITrJ3Nwc+Y2P1uVT6huYR4EcbA/DJUPWyO0n9y5UFLewPvVbLkRn15JeEqErBLUrHclkiOKtw==", - "dependencies": { - "@aws-sdk/types": "3.577.0", - "@smithy/property-provider": "^3.0.0", - "@smithy/shared-ini-file-loader": "^3.0.0", - "@smithy/types": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.583.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.583.0.tgz", - "integrity": "sha512-G/1EvL9tBezSiU+06tG4K/kOvFfPjnheT4JSXqjPM7+vjKzgp2jxp1J9MMd69zs4jVWon932zMeGgjrCplzMEg==", - "dependencies": { - "@aws-sdk/client-sso": "3.583.0", - "@aws-sdk/token-providers": "3.577.0", - "@aws-sdk/types": "3.577.0", - "@smithy/property-provider": "^3.0.0", - "@smithy/shared-ini-file-loader": "^3.0.0", - "@smithy/types": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.577.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.577.0.tgz", - "integrity": "sha512-ZGHGNRaCtJJmszb9UTnC7izNCtRUttdPlLdMkh41KPS32vfdrBDHs1JrpbZijItRj1xKuOXsiYSXLAaHGcLh8Q==", - "dependencies": { - "@aws-sdk/types": "3.577.0", - "@smithy/property-provider": "^3.0.0", - "@smithy/types": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "@aws-sdk/client-sts": "^3.577.0" - } - }, - "node_modules/@aws-sdk/middleware-bucket-endpoint": { - "version": "3.577.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.577.0.tgz", - "integrity": "sha512-twlkNX2VofM6kHXzDEiJOiYCc9tVABe5cbyxMArRWscIsCWG9mamPhC77ezG4XsN9dFEwVdxEYD5Crpm/5EUiw==", - "dependencies": { - "@aws-sdk/types": "3.577.0", - "@aws-sdk/util-arn-parser": "3.568.0", - "@smithy/node-config-provider": "^3.0.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/types": "^3.0.0", - "@smithy/util-config-provider": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/middleware-expect-continue": { - "version": "3.577.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.577.0.tgz", - "integrity": "sha512-6dPp8Tv4F0of4un5IAyG6q++GrRrNQQ4P2NAMB1W0VO4JoEu1C8GievbbDLi88TFIFmtKpnHB0ODCzwnoe8JsA==", - "dependencies": { - "@aws-sdk/types": "3.577.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/types": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/middleware-flexible-checksums": { - "version": "3.577.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.577.0.tgz", - "integrity": "sha512-IHAUEipIfagjw92LV8SOSBiCF7ZnqfHcw14IkcZW2/mfrCy1Fh/k40MoS/t3Tro2tQ91rgQPwUoSgB/QCi2Org==", - "dependencies": { - "@aws-crypto/crc32": "3.0.0", - "@aws-crypto/crc32c": "3.0.0", - "@aws-sdk/types": "3.577.0", - "@smithy/is-array-buffer": "^3.0.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/types": "^3.0.0", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/middleware-host-header": { - "version": "3.577.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.577.0.tgz", - "integrity": "sha512-9ca5MJz455CODIVXs0/sWmJm7t3QO4EUa1zf8pE8grLpzf0J94bz/skDWm37Pli13T3WaAQBHCTiH2gUVfCsWg==", - "dependencies": { - "@aws-sdk/types": "3.577.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/types": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/middleware-location-constraint": { - "version": "3.577.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.577.0.tgz", - "integrity": "sha512-DKPTD2D2s+t2QUo/IXYtVa/6Un8GZ+phSTBkyBNx2kfZz4Kwavhl/JJzSqTV3GfCXkVdFu7CrjoX7BZ6qWeTUA==", - "dependencies": { - "@aws-sdk/types": "3.577.0", - "@smithy/types": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/middleware-logger": { - "version": "3.577.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.577.0.tgz", - "integrity": "sha512-aPFGpGjTZcJYk+24bg7jT4XdIp42mFXSuPt49lw5KygefLyJM/sB0bKKqPYYivW0rcuZ9brQ58eZUNthrzYAvg==", - "dependencies": { - "@aws-sdk/types": "3.577.0", - "@smithy/types": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.577.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.577.0.tgz", - "integrity": "sha512-pn3ZVEd2iobKJlR3H+bDilHjgRnNrQ6HMmK9ZzZw89Ckn3Dcbv48xOv4RJvu0aU8SDLl/SNCxppKjeLDTPGBNA==", - "dependencies": { - "@aws-sdk/types": "3.577.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/types": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/middleware-sdk-s3": { - "version": "3.582.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.582.0.tgz", - "integrity": "sha512-PJqQpLoLaZPRI4L/XZUeHkd9UVK8VAr9R38wv0osGeMTvzD9iwzzk0I2TtBqFda/5xEB1YgVYZwyqvmStXmttg==", - "dependencies": { - "@aws-sdk/types": "3.577.0", - "@aws-sdk/util-arn-parser": "3.568.0", - "@smithy/node-config-provider": "^3.0.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/signature-v4": "^3.0.0", - "@smithy/smithy-client": "^3.0.1", - "@smithy/types": "^3.0.0", - "@smithy/util-config-provider": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/middleware-signing": { - "version": "3.577.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.577.0.tgz", - "integrity": "sha512-QS/dh3+NqZbXtY0j/DZ867ogP413pG5cFGqBy9OeOhDMsolcwLrQbi0S0c621dc1QNq+er9ffaMhZ/aPkyXXIg==", - "dependencies": { - "@aws-sdk/types": "3.577.0", - "@smithy/property-provider": "^3.0.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/signature-v4": "^3.0.0", - "@smithy/types": "^3.0.0", - "@smithy/util-middleware": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/middleware-ssec": { - "version": "3.577.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.577.0.tgz", - "integrity": "sha512-i2BPJR+rp8xmRVIGc0h1kDRFcM2J9GnClqqpc+NLSjmYadlcg4mPklisz9HzwFVcRPJ5XcGf3U4BYs5G8+iTyg==", - "dependencies": { - "@aws-sdk/types": "3.577.0", - "@smithy/types": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.583.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.583.0.tgz", - "integrity": "sha512-xVNXXXDWvBVI/AeVtSdA9SVumqxiZaESk/JpUn9GMkmtTKfter0Cweap+1iQ9j8bRAO0vNhmIkbcvdB1S4WVUw==", - "dependencies": { - "@aws-sdk/types": "3.577.0", - "@aws-sdk/util-endpoints": "3.583.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/types": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/region-config-resolver": { - "version": "3.577.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.577.0.tgz", - "integrity": "sha512-4ChCFACNwzqx/xjg3zgFcW8Ali6R9C95cFECKWT/7CUM1D0MGvkclSH2cLarmHCmJgU6onKkJroFtWp0kHhgyg==", - "dependencies": { - "@aws-sdk/types": "3.577.0", - "@smithy/node-config-provider": "^3.0.0", - "@smithy/types": "^3.0.0", - "@smithy/util-config-provider": "^3.0.0", - "@smithy/util-middleware": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/signature-v4-multi-region": { - "version": "3.582.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.582.0.tgz", - "integrity": "sha512-aFCOjjNqEX2l+V8QjOWy5F7CtHIC/RlYdBuv3No6yxn+pMvVUUe6zdMk2yHWcudVpHWsyvcZzAUBliAPeFLPsQ==", - "dependencies": { - "@aws-sdk/middleware-sdk-s3": "3.582.0", - "@aws-sdk/types": "3.577.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/signature-v4": "^3.0.0", - "@smithy/types": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/token-providers": { - "version": "3.577.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.577.0.tgz", - "integrity": "sha512-0CkIZpcC3DNQJQ1hDjm2bdSy/Xjs7Ny5YvSsacasGOkNfk+FdkiQy6N67bZX3Zbc9KIx+Nz4bu3iDeNSNplnnQ==", - "dependencies": { - "@aws-sdk/types": "3.577.0", - "@smithy/property-provider": "^3.0.0", - "@smithy/shared-ini-file-loader": "^3.0.0", - "@smithy/types": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "@aws-sdk/client-sso-oidc": "^3.577.0" - } - }, - "node_modules/@aws-sdk/types": { - "version": "3.577.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.577.0.tgz", - "integrity": "sha512-FT2JZES3wBKN/alfmhlo+3ZOq/XJ0C7QOZcDNrpKjB0kqYoKjhVKZ/Hx6ArR0czkKfHzBBEs6y40ebIHx2nSmA==", - "dependencies": { - "@smithy/types": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/util-arn-parser": { - "version": "3.568.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.568.0.tgz", - "integrity": "sha512-XUKJWWo+KOB7fbnPP0+g/o5Ulku/X53t7i/h+sPHr5xxYTJJ9CYnbToo95mzxe7xWvkLrsNtJ8L+MnNn9INs2w==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/util-endpoints": { - "version": "3.583.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.583.0.tgz", - "integrity": "sha512-ZC9mb2jq6BFXPYsUsD2tmYcnlmd+9PGNwnFNn8jk4abna5Jjk2wDknN81ybktmBR5ttN9W8ugmktuKtvAMIDCQ==", - "dependencies": { - "@aws-sdk/types": "3.577.0", - "@smithy/types": "^3.0.0", - "@smithy/util-endpoints": "^2.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/util-locate-window": { - "version": "3.568.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.568.0.tgz", - "integrity": "sha512-3nh4TINkXYr+H41QaPelCceEB2FXP3fxp93YZXB/kqJvX0U9j0N0Uk45gvsjmEPzG8XxkPEeLIfT2I1M7A6Lig==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.577.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.577.0.tgz", - "integrity": "sha512-zEAzHgR6HWpZOH7xFgeJLc6/CzMcx4nxeQolZxVZoB5pPaJd3CjyRhZN0xXeZB0XIRCWmb4yJBgyiugXLNMkLA==", - "dependencies": { - "@aws-sdk/types": "3.577.0", - "@smithy/types": "^3.0.0", - "bowser": "^2.11.0", - "tslib": "^2.6.2" - } - }, - "node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.577.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.577.0.tgz", - "integrity": "sha512-XqvtFjbSMtycZTWVwDe8DRWovuoMbA54nhUoZwVU6rW9OSD6NZWGR512BUGHFaWzW0Wg8++Dj10FrKTG2XtqfA==", - "dependencies": { - "@aws-sdk/types": "3.577.0", - "@smithy/node-config-provider": "^3.0.0", - "@smithy/types": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "aws-crt": ">=1.0.0" - }, - "peerDependenciesMeta": { - "aws-crt": { - "optional": true - } - } - }, - "node_modules/@aws-sdk/util-utf8-browser": { - "version": "3.259.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz", - "integrity": "sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==", - "dependencies": { - "tslib": "^2.3.1" - } - }, - "node_modules/@aws-sdk/xml-builder": { - "version": "3.575.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.575.0.tgz", - "integrity": "sha512-cWgAwmbFYNCFzPwxL705+lWps0F3ZvOckufd2KKoEZUmtpVw9/txUXNrPySUXSmRTSRhoatIMABNfStWR043bQ==", - "dependencies": { - "@smithy/types": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", - "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.23.4", - "chalk": "^2.4.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/code-frame/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/code-frame/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/@babel/code-frame/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/code-frame/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz", - "integrity": "sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.0.tgz", - "integrity": "sha512-fQfkg0Gjkza3nf0c7/w6Xf34BW4YvzNfACRLmmb7XRLa6XHdR+K9AlJlxneFfWYf6uhOzuzZVTjF/8KfndZANw==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.23.5", - "@babel/generator": "^7.23.6", - "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helpers": "^7.24.0", - "@babel/parser": "^7.24.0", - "@babel/template": "^7.24.0", - "@babel/traverse": "^7.24.0", - "@babel/types": "^7.24.0", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/generator": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", - "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.23.6", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", - "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.23.5", - "@babel/helper-validator-option": "^7.23.5", - "browserslist": "^4.22.2", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", - "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", - "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", - "dev": true, - "dependencies": { - "@babel/template": "^7.22.15", - "@babel/types": "^7.23.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", - "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.15" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", - "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/helper-validator-identifier": "^7.22.20" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz", - "integrity": "sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", - "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", - "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", - "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", - "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.0.tgz", - "integrity": "sha512-ulDZdc0Aj5uLc5nETsa7EPx2L7rM0YJM8r7ck7U73AXi7qOV44IHHRAYZHY6iU1rr3C5N4NtTmMRUJP6kwCWeA==", - "dev": true, - "dependencies": { - "@babel/template": "^7.24.0", - "@babel/traverse": "^7.24.0", - "@babel/types": "^7.24.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", - "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.22.20", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/@babel/highlight/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/parser": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.0.tgz", - "integrity": "sha512-QuP/FxEAzMSjXygs8v4N9dvdXzEHN4W1oF3PxuWAtPo08UdM17u89RDMgjLn/mlc56iM0HlLmVkO/wgR+rDgHg==", - "dev": true, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz", - "integrity": "sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz", - "integrity": "sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/template": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.0.tgz", - "integrity": "sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.23.5", - "@babel/parser": "^7.24.0", - "@babel/types": "^7.24.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.0.tgz", - "integrity": "sha512-HfuJlI8qq3dEDmNU5ChzzpZRWq+oxCZQyMzIMEqLho+AQnhMnKQUzH6ydo3RBl/YjPCuk68Y6s0Gx0AeyULiWw==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.23.5", - "@babel/generator": "^7.23.6", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.24.0", - "@babel/types": "^7.24.0", - "debug": "^4.3.1", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.0.tgz", - "integrity": "sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==", - "dev": true, - "dependencies": { - "@babel/helper-string-parser": "^7.23.4", - "@babel/helper-validator-identifier": "^7.22.20", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true - }, - "node_modules/@cloudflare/kv-asset-handler": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@cloudflare/kv-asset-handler/-/kv-asset-handler-0.3.1.tgz", - "integrity": "sha512-lKN2XCfKCmpKb86a1tl4GIwsJYDy9TGuwjhDELLmpKygQhw8X2xR4dusgpC5Tg7q1pB96Eb0rBo81kxSILQMwA==", - "dev": true, - "dependencies": { - "mime": "^3.0.0" - } - }, - "node_modules/@cloudflare/workerd-darwin-64": { - "version": "1.20240223.1", - "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-64/-/workerd-darwin-64-1.20240223.1.tgz", - "integrity": "sha512-GgHnvkazLFZ7bmR96+dTX0+WS13a+5CHOOP3qNUSR9oEnR4hHzpNIO75MuZsm9RPAXrvtT7nSJmYwiGCZXh6og==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=16" - } - }, - "node_modules/@cloudflare/workerd-darwin-arm64": { - "version": "1.20240223.1", - "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-arm64/-/workerd-darwin-arm64-1.20240223.1.tgz", - "integrity": "sha512-ZF98vUmVlC0EVEd3RRuhMq4HYWFcqmPtMIMPUN2+ivEHR92TE+6E/AvdeE6wcE7fKHQ+fk3dH+ZgB0GcfptfnA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=16" - } - }, - "node_modules/@cloudflare/workerd-linux-64": { - "version": "1.20240223.1", - "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-64/-/workerd-linux-64-1.20240223.1.tgz", - "integrity": "sha512-1kH41ewNTGMmAk2zUX0Xj9VSfidl26GQ0ZrWMdi5kwf6gAHd3oVWNigJN078Jx56SgQxNcqVGX1LunqF949asw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=16" - } - }, - "node_modules/@cloudflare/workerd-linux-arm64": { - "version": "1.20240223.1", - "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-arm64/-/workerd-linux-arm64-1.20240223.1.tgz", - "integrity": "sha512-Ro8Og5C4evh890JrRm0B8sHyumRtgL+mUqPeNcEsyG45jAQy5xHpapHnmJAMJV6ah+zDc1cZtQq+en39SojXvQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=16" - } - }, - "node_modules/@cloudflare/workerd-windows-64": { - "version": "1.20240223.1", - "resolved": "https://registry.npmjs.org/@cloudflare/workerd-windows-64/-/workerd-windows-64-1.20240223.1.tgz", - "integrity": "sha512-eNP5sfaP6WL07DaoigYou5ASPF7jHsFiNzzD2vGOI7yFd5sPlb7sJ4SpIy+BCX0LdqFnjmlUo5Xr+/I6qJ2Nww==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=16" - } - }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "node_modules/@esbuild-plugins/node-globals-polyfill": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@esbuild-plugins/node-globals-polyfill/-/node-globals-polyfill-0.2.3.tgz", - "integrity": "sha512-r3MIryXDeXDOZh7ih1l/yE9ZLORCd5e8vWg02azWRGj5SPTuoh69A2AIyn0Z31V/kHBfZ4HgWJ+OK3GTTwLmnw==", - "dev": true, - "peerDependencies": { - "esbuild": "*" - } - }, - "node_modules/@esbuild-plugins/node-modules-polyfill": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@esbuild-plugins/node-modules-polyfill/-/node-modules-polyfill-0.2.2.tgz", - "integrity": "sha512-LXV7QsWJxRuMYvKbiznh+U1ilIop3g2TeKRzUxOG5X3YITc8JyyTa90BmLwqqv0YnX4v32CSlG+vsziZp9dMvA==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^4.0.0", - "rollup-plugin-node-polyfills": "^0.2.1" - }, - "peerDependencies": { - "esbuild": "*" - } - }, - "node_modules/@esbuild-plugins/node-modules-polyfill/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.6.tgz", - "integrity": "sha512-muPzBqXJKCbMYoNbb1JpZh/ynl0xS6/+pLjrofcR3Nad82SbsCogYzUE6Aq9QT3cLP0jR/IVK/NHC9b90mSHtg==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.6.tgz", - "integrity": "sha512-KQ/hbe9SJvIJ4sR+2PcZ41IBV+LPJyYp6V1K1P1xcMRup9iYsBoQn4MzE3mhMLOld27Au2eDcLlIREeKGUXpHQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.6.tgz", - "integrity": "sha512-VVJVZQ7p5BBOKoNxd0Ly3xUM78Y4DyOoFKdkdAe2m11jbh0LEU4bPles4e/72EMl4tapko8o915UalN/5zhspg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.6.tgz", - "integrity": "sha512-91LoRp/uZAKx6ESNspL3I46ypwzdqyDLXZH7x2QYCLgtnaU08+AXEbabY2yExIz03/am0DivsTtbdxzGejfXpA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.6.tgz", - "integrity": "sha512-QCGHw770ubjBU1J3ZkFJh671MFajGTYMZumPs9E/rqU52md6lIil97BR0CbPq6U+vTh3xnTNDHKRdR8ggHnmxQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.6.tgz", - "integrity": "sha512-J53d0jGsDcLzWk9d9SPmlyF+wzVxjXpOH7jVW5ae7PvrDst4kiAz6sX+E8btz0GB6oH12zC+aHRD945jdjF2Vg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.6.tgz", - "integrity": "sha512-hn9qvkjHSIB5Z9JgCCjED6YYVGCNpqB7dEGavBdG6EjBD8S/UcNUIlGcB35NCkMETkdYwfZSvD9VoDJX6VeUVA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.6.tgz", - "integrity": "sha512-G8IR5zFgpXad/Zp7gr7ZyTKyqZuThU6z1JjmRyN1vSF8j0bOlGzUwFSMTbctLAdd7QHpeyu0cRiuKrqK1ZTwvQ==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.6.tgz", - "integrity": "sha512-HQCOrk9XlH3KngASLaBfHpcoYEGUt829A9MyxaI8RMkfRA8SakG6YQEITAuwmtzFdEu5GU4eyhKcpv27dFaOBg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.6.tgz", - "integrity": "sha512-22eOR08zL/OXkmEhxOfshfOGo8P69k8oKHkwkDrUlcB12S/sw/+COM4PhAPT0cAYW/gpqY2uXp3TpjQVJitz7w==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.6.tgz", - "integrity": "sha512-82RvaYAh/SUJyjWA8jDpyZCHQjmEggL//sC7F3VKYcBMumQjUL3C5WDl/tJpEiKtt7XrWmgjaLkrk205zfvwTA==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.6.tgz", - "integrity": "sha512-8tvnwyYJpR618vboIv2l8tK2SuK/RqUIGMfMENkeDGo3hsEIrpGldMGYFcWxWeEILe5Fi72zoXLmhZ7PR23oQA==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.6.tgz", - "integrity": "sha512-Qt+D7xiPajxVNk5tQiEJwhmarNnLPdjXAoA5uWMpbfStZB0+YU6a3CtbWYSy+sgAsnyx4IGZjWsTzBzrvg/fMA==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.6.tgz", - "integrity": "sha512-lxRdk0iJ9CWYDH1Wpnnnc640ajF4RmQ+w6oHFZmAIYu577meE9Ka/DCtpOrwr9McMY11ocbp4jirgGgCi7Ls/g==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.6.tgz", - "integrity": "sha512-MopyYV39vnfuykHanRWHGRcRC3AwU7b0QY4TI8ISLfAGfK+tMkXyFuyT1epw/lM0pflQlS53JoD22yN83DHZgA==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.6.tgz", - "integrity": "sha512-UWcieaBzsN8WYbzFF5Jq7QULETPcQvlX7KL4xWGIB54OknXJjBO37sPqk7N82WU13JGWvmDzFBi1weVBajPovg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.6.tgz", - "integrity": "sha512-EpWiLX0fzvZn1wxtLxZrEW+oQED9Pwpnh+w4Ffv8ZLuMhUoqR9q9rL4+qHW8F4Mg5oQEKxAoT0G+8JYNqCiR6g==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.6.tgz", - "integrity": "sha512-fFqTVEktM1PGs2sLKH4M5mhAVEzGpeZJuasAMRnvDZNCV0Cjvm1Hu35moL2vC0DOrAQjNTvj4zWrol/lwQ8Deg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.6.tgz", - "integrity": "sha512-M+XIAnBpaNvaVAhbe3uBXtgWyWynSdlww/JNZws0FlMPSBy+EpatPXNIlKAdtbFVII9OpX91ZfMb17TU3JKTBA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.6.tgz", - "integrity": "sha512-2DchFXn7vp/B6Tc2eKdTsLzE0ygqKkNUhUBCNtMx2Llk4POIVMUq5rUYjdcedFlGLeRe1uLCpVvCmE+G8XYybA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.6.tgz", - "integrity": "sha512-PBo/HPDQllyWdjwAVX+Gl2hH0dfBydL97BAH/grHKC8fubqp02aL4S63otZ25q3sBdINtOBbz1qTZQfXbP4VBg==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.6.tgz", - "integrity": "sha512-OE7yIdbDif2kKfrGa+V0vx/B3FJv2L4KnIiLlvtibPyO9UkgO3rzYE0HhpREo2vmJ1Ixq1zwm9/0er+3VOSZJA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@fastify/busboy": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz", - "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==", - "dev": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dev": true, - "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/console": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", - "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/core": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", - "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", - "dev": true, - "dependencies": { - "@jest/console": "^29.7.0", - "@jest/reporters": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-changed-files": "^29.7.0", - "jest-config": "^29.7.0", - "jest-haste-map": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-resolve-dependencies": "^29.7.0", - "jest-runner": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "jest-watcher": "^29.7.0", - "micromatch": "^4.0.4", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@jest/environment": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", - "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", - "dev": true, - "dependencies": { - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/expect": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", - "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", - "dev": true, - "dependencies": { - "expect": "^29.7.0", - "jest-snapshot": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/expect-utils": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", - "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", - "dev": true, - "dependencies": { - "jest-get-type": "^29.6.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/fake-timers": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", - "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.3", - "@sinonjs/fake-timers": "^10.0.2", - "@types/node": "*", - "jest-message-util": "^29.7.0", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/globals": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", - "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", - "dev": true, - "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/expect": "^29.7.0", - "@jest/types": "^29.6.3", - "jest-mock": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/reporters": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", - "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", - "dev": true, - "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@jridgewell/trace-mapping": "^0.3.18", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^6.0.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "jest-worker": "^29.7.0", - "slash": "^3.0.0", - "string-length": "^4.0.1", - "strip-ansi": "^6.0.0", - "v8-to-istanbul": "^9.0.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@jest/schemas": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", - "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", - "dev": true, - "dependencies": { - "@sinclair/typebox": "^0.27.8" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/source-map": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", - "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.18", - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/test-result": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", - "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", - "dev": true, - "dependencies": { - "@jest/console": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/test-sequencer": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", - "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", - "dev": true, - "dependencies": { - "@jest/test-result": "^29.7.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/transform": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", - "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", - "dev": true, - "dependencies": { - "@babel/core": "^7.11.6", - "@jest/types": "^29.6.3", - "@jridgewell/trace-mapping": "^0.3.18", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^2.0.0", - "fast-json-stable-stringify": "^2.1.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-util": "^29.7.0", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "write-file-atomic": "^4.0.2" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/types": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", - "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", - "dev": true, - "dependencies": { - "@jest/schemas": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", - "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", - "dev": true - }, - "node_modules/@sinonjs/commons": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", - "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", - "dev": true, - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/@sinonjs/fake-timers": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", - "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", - "dev": true, - "dependencies": { - "@sinonjs/commons": "^3.0.0" - } - }, - "node_modules/@smithy/abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-p6GlFGBt9K4MYLu72YuJ523NVR4A8oHlC5M2JO6OmQqN8kAc/uh1JqLE+FizTokrSJGg0CSvC+BrsmGzKtsZKA==", - "dependencies": { - "@smithy/types": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/chunked-blob-reader": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader/-/chunked-blob-reader-3.0.0.tgz", - "integrity": "sha512-sbnURCwjF0gSToGlsBiAmd1lRCmSn72nu9axfJu5lIx6RUEgHu6GwTMbqCdhQSi0Pumcm5vFxsi9XWXb2mTaoA==", - "dependencies": { - "tslib": "^2.6.2" - } - }, - "node_modules/@smithy/chunked-blob-reader-native": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-3.0.0.tgz", - "integrity": "sha512-VDkpCYW+peSuM4zJip5WDfqvg2Mo/e8yxOv3VF1m11y7B8KKMKVFtmZWDe36Fvk8rGuWrPZHHXZ7rR7uM5yWyg==", - "dependencies": { - "@smithy/util-base64": "^3.0.0", - "tslib": "^2.6.2" - } - }, - "node_modules/@smithy/config-resolver": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-3.0.0.tgz", - "integrity": "sha512-2GzOfADwYLQugYkKQhIyZyQlM05K+tMKvRnc6eFfZcpJGRfKoMUMYdPlBKmqHwQFXQKBrGV6cxL9oymWgDzvFw==", - "dependencies": { - "@smithy/node-config-provider": "^3.0.0", - "@smithy/types": "^3.0.0", - "@smithy/util-config-provider": "^3.0.0", - "@smithy/util-middleware": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/core": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@smithy/core/-/core-2.0.1.tgz", - "integrity": "sha512-rcMkjvwxH/bER+oZUPR0yTA0ELD6m3A+d92+CFkdF6HJFCBB1bXo7P5pm21L66XwTN01B6bUhSCQ7cymWRD8zg==", - "dependencies": { - "@smithy/middleware-endpoint": "^3.0.0", - "@smithy/middleware-retry": "^3.0.1", - "@smithy/middleware-serde": "^3.0.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/smithy-client": "^3.0.1", - "@smithy/types": "^3.0.0", - "@smithy/util-middleware": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/credential-provider-imds": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-3.0.0.tgz", - "integrity": "sha512-lfmBiFQcA3FsDAPxNfY0L7CawcWtbyWsBOHo34nF095728JLkBX4Y9q/VPPE2r7fqMVK+drmDigqE2/SSQeVRA==", - "dependencies": { - "@smithy/node-config-provider": "^3.0.0", - "@smithy/property-provider": "^3.0.0", - "@smithy/types": "^3.0.0", - "@smithy/url-parser": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/eventstream-codec": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-3.0.0.tgz", - "integrity": "sha512-PUtyEA0Oik50SaEFCZ0WPVtF9tz/teze2fDptW6WRXl+RrEenH8UbEjudOz8iakiMl3lE3lCVqYf2Y+znL8QFQ==", - "dependencies": { - "@aws-crypto/crc32": "3.0.0", - "@smithy/types": "^3.0.0", - "@smithy/util-hex-encoding": "^3.0.0", - "tslib": "^2.6.2" - } - }, - "node_modules/@smithy/eventstream-serde-browser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-3.0.0.tgz", - "integrity": "sha512-NB7AFiPN4NxP/YCAnrvYR18z2/ZsiHiF7VtG30gshO9GbFrIb1rC8ep4NGpJSWrz6P64uhPXeo4M0UsCLnZKqw==", - "dependencies": { - "@smithy/eventstream-serde-universal": "^3.0.0", - "@smithy/types": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/eventstream-serde-config-resolver": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-3.0.0.tgz", - "integrity": "sha512-RUQG3vQ3LX7peqqHAbmayhgrF5aTilPnazinaSGF1P0+tgM3vvIRWPHmlLIz2qFqB9LqFIxditxc8O2Z6psrRw==", - "dependencies": { - "@smithy/types": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/eventstream-serde-node": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-3.0.0.tgz", - "integrity": "sha512-baRPdMBDMBExZXIUAoPGm/hntixjt/VFpU6+VmCyiYJYzRHRxoaI1MN+5XE+hIS8AJ2GCHLMFEIOLzq9xx1EgQ==", - "dependencies": { - "@smithy/eventstream-serde-universal": "^3.0.0", - "@smithy/types": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/eventstream-serde-universal": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-3.0.0.tgz", - "integrity": "sha512-HNFfShmotWGeAoW4ujP8meV9BZavcpmerDbPIjkJbxKbN8RsUcpRQ/2OyIxWNxXNH2GWCAxuSB7ynmIGJlQ3Dw==", - "dependencies": { - "@smithy/eventstream-codec": "^3.0.0", - "@smithy/types": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/fetch-http-handler": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-3.0.1.tgz", - "integrity": "sha512-uaH74i5BDj+rBwoQaXioKpI0SHBJFtOVwzrCpxZxphOW0ki5jhj7dXvDMYM2IJem8TpdFvS2iC08sjOblfFGFg==", - "dependencies": { - "@smithy/protocol-http": "^4.0.0", - "@smithy/querystring-builder": "^3.0.0", - "@smithy/types": "^3.0.0", - "@smithy/util-base64": "^3.0.0", - "tslib": "^2.6.2" - } - }, - "node_modules/@smithy/hash-blob-browser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-3.0.0.tgz", - "integrity": "sha512-/Wbpdg+bwJvW7lxR/zpWAc1/x/YkcqguuF2bAzkJrvXriZu1vm8r+PUdE4syiVwQg7PPR2dXpi3CLBb9qRDaVQ==", - "dependencies": { - "@smithy/chunked-blob-reader": "^3.0.0", - "@smithy/chunked-blob-reader-native": "^3.0.0", - "@smithy/types": "^3.0.0", - "tslib": "^2.6.2" - } - }, - "node_modules/@smithy/hash-node": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-3.0.0.tgz", - "integrity": "sha512-84qXstNemP3XS5jcof0el6+bDfjzuvhJPQTEfro3lgtbCtKgzPm3MgiS6ehXVPjeQ5+JS0HqmTz8f/RYfzHVxw==", - "dependencies": { - "@smithy/types": "^3.0.0", - "@smithy/util-buffer-from": "^3.0.0", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/hash-stream-node": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-3.0.0.tgz", - "integrity": "sha512-J0i7de+EgXDEGITD4fxzmMX8CyCNETTIRXlxjMiNUvvu76Xn3GJ31wQR85ynlPk2wI1lqoknAFJaD1fiNDlbIA==", - "dependencies": { - "@smithy/types": "^3.0.0", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/invalid-dependency": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-3.0.0.tgz", - "integrity": "sha512-F6wBBaEFgJzj0s4KUlliIGPmqXemwP6EavgvDqYwCH40O5Xr2iMHvS8todmGVZtuJCorBkXsYLyTu4PuizVq5g==", - "dependencies": { - "@smithy/types": "^3.0.0", - "tslib": "^2.6.2" - } - }, - "node_modules/@smithy/is-array-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", - "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/md5-js": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-3.0.0.tgz", - "integrity": "sha512-Tm0vrrVzjlD+6RCQTx7D3Ls58S3FUH1ZCtU1MIh/qQmaOo1H9lMN2as6CikcEwgattnA9SURSdoJJ27xMcEfMA==", - "dependencies": { - "@smithy/types": "^3.0.0", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" - } - }, - "node_modules/@smithy/middleware-content-length": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-3.0.0.tgz", - "integrity": "sha512-3C4s4d/iGobgCtk2tnWW6+zSTOBg1PRAm2vtWZLdriwTroFbbWNSr3lcyzHdrQHnEXYCC5K52EbpfodaIUY8sg==", - "dependencies": { - "@smithy/protocol-http": "^4.0.0", - "@smithy/types": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/middleware-endpoint": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-3.0.0.tgz", - "integrity": "sha512-aXOAWztw/5qAfp0NcA2OWpv6ZI/E+Dh9mByif7i91D/0iyYNUcKvskmXiowKESFkuZ7PIMd3VOR4fTibZDs2OQ==", - "dependencies": { - "@smithy/middleware-serde": "^3.0.0", - "@smithy/node-config-provider": "^3.0.0", - "@smithy/shared-ini-file-loader": "^3.0.0", - "@smithy/types": "^3.0.0", - "@smithy/url-parser": "^3.0.0", - "@smithy/util-middleware": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/middleware-retry": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-3.0.1.tgz", - "integrity": "sha512-hBhSEuL841FhJBK/19WpaGk5YWSzFk/P2UaVjANGKRv3eYNO8Y1lANWgqnuPWjOyCEWMPr58vELFDWpxvRKANw==", - "dependencies": { - "@smithy/node-config-provider": "^3.0.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/service-error-classification": "^3.0.0", - "@smithy/smithy-client": "^3.0.1", - "@smithy/types": "^3.0.0", - "@smithy/util-middleware": "^3.0.0", - "@smithy/util-retry": "^3.0.0", - "tslib": "^2.6.2", - "uuid": "^9.0.1" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/middleware-serde": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-3.0.0.tgz", - "integrity": "sha512-I1vKG1foI+oPgG9r7IMY1S+xBnmAn1ISqployvqkwHoSb8VPsngHDTOgYGYBonuOKndaWRUGJZrKYYLB+Ane6w==", - "dependencies": { - "@smithy/types": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/middleware-stack": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-3.0.0.tgz", - "integrity": "sha512-+H0jmyfAyHRFXm6wunskuNAqtj7yfmwFB6Fp37enytp2q047/Od9xetEaUbluyImOlGnGpaVGaVfjwawSr+i6Q==", - "dependencies": { - "@smithy/types": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/node-config-provider": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-3.0.0.tgz", - "integrity": "sha512-buqfaSdDh0zo62EPLf8rGDvcpKwGpO5ho4bXS2cdFhlOta7tBkWJt+O5uiaAeICfIOfPclNOndshDNSanX2X9g==", - "dependencies": { - "@smithy/property-provider": "^3.0.0", - "@smithy/shared-ini-file-loader": "^3.0.0", - "@smithy/types": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/node-http-handler": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.0.0.tgz", - "integrity": "sha512-3trD4r7NOMygwLbUJo4eodyQuypAWr7uvPnebNJ9a70dQhVn+US8j/lCnvoJS6BXfZeF7PkkkI0DemVJw+n+eQ==", - "dependencies": { - "@smithy/abort-controller": "^3.0.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/querystring-builder": "^3.0.0", - "@smithy/types": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/property-provider": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.0.0.tgz", - "integrity": "sha512-LmbPgHBswdXCrkWWuUwBm9w72S2iLWyC/5jet9/Y9cGHtzqxi+GVjfCfahkvNV4KXEwgnH8EMpcrD9RUYe0eLQ==", - "dependencies": { - "@smithy/types": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/protocol-http": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.0.0.tgz", - "integrity": "sha512-qOQZOEI2XLWRWBO9AgIYuHuqjZ2csyr8/IlgFDHDNuIgLAMRx2Bl8ck5U5D6Vh9DPdoaVpuzwWMa0xcdL4O/AQ==", - "dependencies": { - "@smithy/types": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/querystring-builder": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-3.0.0.tgz", - "integrity": "sha512-bW8Fi0NzyfkE0TmQphDXr1AmBDbK01cA4C1Z7ggwMAU5RDz5AAv/KmoRwzQAS0kxXNf/D2ALTEgwK0U2c4LtRg==", - "dependencies": { - "@smithy/types": "^3.0.0", - "@smithy/util-uri-escape": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/querystring-parser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-3.0.0.tgz", - "integrity": "sha512-UzHwthk0UEccV4dHzPySnBy34AWw3V9lIqUTxmozQ+wPDAO9csCWMfOLe7V9A2agNYy7xE+Pb0S6K/J23JSzfQ==", - "dependencies": { - "@smithy/types": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/service-error-classification": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-3.0.0.tgz", - "integrity": "sha512-3BsBtOUt2Gsnc3X23ew+r2M71WwtpHfEDGhHYHSDg6q1t8FrWh15jT25DLajFV1H+PpxAJ6gqe9yYeRUsmSdFA==", - "dependencies": { - "@smithy/types": "^3.0.0" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/shared-ini-file-loader": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.0.0.tgz", - "integrity": "sha512-REVw6XauXk8xE4zo5aGL7Rz4ywA8qNMUn8RtWeTRQsgAlmlvbJ7CEPBcaXU2NDC3AYBgYAXrGyWD8XrN8UGDog==", - "dependencies": { - "@smithy/types": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/signature-v4": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-3.0.0.tgz", - "integrity": "sha512-kXFOkNX+BQHe2qnLxpMEaCRGap9J6tUGLzc3A9jdn+nD4JdMwCKTJ+zFwQ20GkY+mAXGatyTw3HcoUlR39HwmA==", - "dependencies": { - "@smithy/is-array-buffer": "^3.0.0", - "@smithy/types": "^3.0.0", - "@smithy/util-hex-encoding": "^3.0.0", - "@smithy/util-middleware": "^3.0.0", - "@smithy/util-uri-escape": "^3.0.0", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/smithy-client": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.0.1.tgz", - "integrity": "sha512-KAiFY4Y4jdHxR+4zerH/VBhaFKM8pbaVmJZ/CWJRwtM/CmwzTfXfvYwf6GoUwiHepdv+lwiOXCuOl6UBDUEINw==", - "dependencies": { - "@smithy/middleware-endpoint": "^3.0.0", - "@smithy/middleware-stack": "^3.0.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/types": "^3.0.0", - "@smithy/util-stream": "^3.0.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/types": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.0.0.tgz", - "integrity": "sha512-VvWuQk2RKFuOr98gFhjca7fkBS+xLLURT8bUjk5XQoV0ZLm7WPwWPPY3/AwzTLuUBDeoKDCthfe1AsTUWaSEhw==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/url-parser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-3.0.0.tgz", - "integrity": "sha512-2XLazFgUu+YOGHtWihB3FSLAfCUajVfNBXGGYjOaVKjLAuAxx3pSBY3hBgLzIgB17haf59gOG3imKqTy8mcrjw==", - "dependencies": { - "@smithy/querystring-parser": "^3.0.0", - "@smithy/types": "^3.0.0", - "tslib": "^2.6.2" - } - }, - "node_modules/@smithy/util-base64": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-3.0.0.tgz", - "integrity": "sha512-Kxvoh5Qtt0CDsfajiZOCpJxgtPHXOKwmM+Zy4waD43UoEMA+qPxxa98aE/7ZhdnBFZFXMOiBR5xbcaMhLtznQQ==", - "dependencies": { - "@smithy/util-buffer-from": "^3.0.0", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/util-body-length-browser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-3.0.0.tgz", - "integrity": "sha512-cbjJs2A1mLYmqmyVl80uoLTJhAcfzMOyPgjwAYusWKMdLeNtzmMz9YxNl3/jRLoxSS3wkqkf0jwNdtXWtyEBaQ==", - "dependencies": { - "tslib": "^2.6.2" - } - }, - "node_modules/@smithy/util-body-length-node": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-3.0.0.tgz", - "integrity": "sha512-Tj7pZ4bUloNUP6PzwhN7K386tmSmEET9QtQg0TgdNOnxhZvCssHji+oZTUIuzxECRfG8rdm2PMw2WCFs6eIYkA==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/util-buffer-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", - "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", - "dependencies": { - "@smithy/is-array-buffer": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/util-config-provider": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-3.0.0.tgz", - "integrity": "sha512-pbjk4s0fwq3Di/ANL+rCvJMKM5bzAQdE5S/6RL5NXgMExFAi6UgQMPOm5yPaIWPpr+EOXKXRonJ3FoxKf4mCJQ==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/util-defaults-mode-browser": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.1.tgz", - "integrity": "sha512-nW5kEzdJn1Bn5TF+gOPHh2rcPli8JU9vSSXLbfg7uPnfR1TMRQqs9zlYRhIb87NeSxIbpdXOI94tvXSy+fvDYg==", - "dependencies": { - "@smithy/property-provider": "^3.0.0", - "@smithy/smithy-client": "^3.0.1", - "@smithy/types": "^3.0.0", - "bowser": "^2.11.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/@smithy/util-defaults-mode-node": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.1.tgz", - "integrity": "sha512-TFk+Qb+elLc/MOhtSp+50fstyfZ6avQbgH2d96xUBpeScu+Al9elxv+UFAjaTHe0HQe5n+wem8ZLpXvU8lwV6Q==", - "dependencies": { - "@smithy/config-resolver": "^3.0.0", - "@smithy/credential-provider-imds": "^3.0.0", - "@smithy/node-config-provider": "^3.0.0", - "@smithy/property-provider": "^3.0.0", - "@smithy/smithy-client": "^3.0.1", - "@smithy/types": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/@smithy/util-endpoints": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-2.0.0.tgz", - "integrity": "sha512-+exaXzEY3DNt2qtA2OtRNSDlVrE4p32j1JSsQkzA5AdP0YtJNjkYbYhJxkFmPYcjI1abuwopOZCwUmv682QkiQ==", - "dependencies": { - "@smithy/node-config-provider": "^3.0.0", - "@smithy/types": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/util-hex-encoding": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-3.0.0.tgz", - "integrity": "sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/util-middleware": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-3.0.0.tgz", - "integrity": "sha512-q5ITdOnV2pXHSVDnKWrwgSNTDBAMHLptFE07ua/5Ty5WJ11bvr0vk2a7agu7qRhrCFRQlno5u3CneU5EELK+DQ==", - "dependencies": { - "@smithy/types": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/util-retry": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-3.0.0.tgz", - "integrity": "sha512-nK99bvJiziGv/UOKJlDvFF45F00WgPLKVIGUfAK+mDhzVN2hb/S33uW2Tlhg5PVBoqY7tDVqL0zmu4OxAHgo9g==", - "dependencies": { - "@smithy/service-error-classification": "^3.0.0", - "@smithy/types": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/util-stream": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-3.0.1.tgz", - "integrity": "sha512-7F7VNNhAsfMRA8I986YdOY5fE0/T1/ZjFF6OLsqkvQVNP3vZ/szYDfGCyphb7ioA09r32K/0qbSFfNFU68aSzA==", - "dependencies": { - "@smithy/fetch-http-handler": "^3.0.1", - "@smithy/node-http-handler": "^3.0.0", - "@smithy/types": "^3.0.0", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-buffer-from": "^3.0.0", - "@smithy/util-hex-encoding": "^3.0.0", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/util-uri-escape": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-3.0.0.tgz", - "integrity": "sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/util-utf8": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", - "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", - "dependencies": { - "@smithy/util-buffer-from": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/util-waiter": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-3.0.0.tgz", - "integrity": "sha512-+fEXJxGDLCoqRKVSmo0auGxaqbiCo+8oph+4auefYjaNxjOLKSY2MxVQfRzo65PaZv4fr+5lWg+au7vSuJJ/zw==", - "dependencies": { - "@smithy/abort-controller": "^3.0.0", - "@smithy/types": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@types/babel__core": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", - "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "node_modules/@types/babel__generator": { - "version": "7.6.8", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", - "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__template": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", - "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__traverse": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.5.tgz", - "integrity": "sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==", - "dev": true, - "dependencies": { - "@babel/types": "^7.20.7" - } - }, - "node_modules/@types/graceful-fs": { - "version": "4.1.9", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", - "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", - "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", - "dev": true - }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", - "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "*" - } - }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/@types/node": { - "version": "20.11.24", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.24.tgz", - "integrity": "sha512-Kza43ewS3xoLgCEpQrsT+xRo/EJej1y0kVYGiLFE1NEODXGzTfwiC6tXTLMQskn1X4/Rjlh0MQUvx9W+L9long==", - "dev": true, - "dependencies": { - "undici-types": "~5.26.4" - } - }, - "node_modules/@types/node-forge": { - "version": "1.3.11", - "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz", - "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/stack-utils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", - "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", - "dev": true - }, - "node_modules/@types/yargs": { - "version": "17.0.32", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", - "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/yargs-parser": { - "version": "21.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", - "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", - "dev": true - }, - "node_modules/acorn": { - "version": "8.11.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", - "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", - "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/as-table": { - "version": "1.0.55", - "resolved": "https://registry.npmjs.org/as-table/-/as-table-1.0.55.tgz", - "integrity": "sha512-xvsWESUJn0JN421Xb9MQw6AsMHRCUknCe0Wjlxvjud80mU4E6hQf1A6NzQKcYNmYw62MfzEtXc+badstZP3JpQ==", - "dev": true, - "dependencies": { - "printable-characters": "^1.0.42" - } - }, - "node_modules/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", - "dev": true - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true - }, - "node_modules/babel-jest": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", - "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", - "dev": true, - "dependencies": { - "@jest/transform": "^29.7.0", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^29.6.3", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.8.0" - } - }, - "node_modules/babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", - "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", - "dev": true, - "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-jest-hoist": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", - "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", - "dev": true, - "dependencies": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.1.14", - "@types/babel__traverse": "^7.0.6" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/babel-preset-current-node-syntax": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", - "dev": true, - "dependencies": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/babel-preset-jest": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", - "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", - "dev": true, - "dependencies": { - "babel-plugin-jest-hoist": "^29.6.3", - "babel-preset-current-node-syntax": "^1.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/blake3-wasm": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/blake3-wasm/-/blake3-wasm-2.1.5.tgz", - "integrity": "sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g==", - "dev": true - }, - "node_modules/bowser": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", - "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==" - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.23.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", - "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001587", - "electron-to-chromium": "^1.4.668", - "node-releases": "^2.0.14", - "update-browserslist-db": "^1.0.13" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dev": true, - "dependencies": { - "node-int64": "^0.4.0" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "node_modules/call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", - "dev": true, - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001594", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001594.tgz", - "integrity": "sha512-VblSX6nYqyJVs8DKFMldE2IVCJjZ225LW00ydtUWwh5hk9IfkTOffO6r8gJNsH0qqqeAF8KrbMYA2VEwTlGW5g==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ] - }, - "node_modules/capnp-ts": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/capnp-ts/-/capnp-ts-0.7.0.tgz", - "integrity": "sha512-XKxXAC3HVPv7r674zP0VC3RTXz+/JKhfyw94ljvF80yynK6VkTnqE3jMuN8b3dUVmmc43TjyxjW4KTsmB3c86g==", - "dev": true, - "dependencies": { - "debug": "^4.3.1", - "tslib": "^2.2.0" - } - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "dev": true, - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/ci-info": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", - "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "engines": { - "node": ">=8" - } - }, - "node_modules/cjs-module-lexer": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", - "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==", - "dev": true - }, - "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", - "dev": true, - "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" - } - }, - "node_modules/collect-v8-coverage": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", - "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", - "dev": true - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/component-emitter": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz", - "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true - }, - "node_modules/cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookiejar": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz", - "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==", - "dev": true - }, - "node_modules/create-jest": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", - "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-config": "^29.7.0", - "jest-util": "^29.7.0", - "prompts": "^2.0.1" - }, - "bin": { - "create-jest": "bin/create-jest.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/data-uri-to-buffer": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-2.0.2.tgz", - "integrity": "sha512-ND9qDTLc6diwj+Xe5cdAgVTbLVdXbtxTJRXRhli8Mowuaan+0EJOtdqJ0QCHNSSPyoXGx9HX2/VMnKeC34AChA==", - "dev": true - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/dedent": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz", - "integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==", - "dev": true, - "peerDependencies": { - "babel-plugin-macros": "^3.1.0" - }, - "peerDependenciesMeta": { - "babel-plugin-macros": { - "optional": true - } - } - }, - "node_modules/deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "dev": true, - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/dezalgo": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", - "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", - "dev": true, - "dependencies": { - "asap": "^2.0.0", - "wrappy": "1" - } - }, - "node_modules/diff-sequences": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", - "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", - "dev": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/electron-to-chromium": { - "version": "1.4.693", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.693.tgz", - "integrity": "sha512-/if4Ueg0GUQlhCrW2ZlXwDAm40ipuKo+OgeHInlL8sbjt+hzISxZK949fZeJaVsheamrzANXvw1zQTvbxTvSHw==", - "dev": true - }, - "node_modules/emittery": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", - "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" - } - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.2.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/esbuild": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.6.tgz", - "integrity": "sha512-Xl7dntjA2OEIvpr9j0DVxxnog2fyTGnyVoQXAMQI6eR3mf9zCQds7VIKUDCotDgE/p4ncTgeRqgX8t5d6oP4Gw==", - "dev": true, - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/android-arm": "0.19.6", - "@esbuild/android-arm64": "0.19.6", - "@esbuild/android-x64": "0.19.6", - "@esbuild/darwin-arm64": "0.19.6", - "@esbuild/darwin-x64": "0.19.6", - "@esbuild/freebsd-arm64": "0.19.6", - "@esbuild/freebsd-x64": "0.19.6", - "@esbuild/linux-arm": "0.19.6", - "@esbuild/linux-arm64": "0.19.6", - "@esbuild/linux-ia32": "0.19.6", - "@esbuild/linux-loong64": "0.19.6", - "@esbuild/linux-mips64el": "0.19.6", - "@esbuild/linux-ppc64": "0.19.6", - "@esbuild/linux-riscv64": "0.19.6", - "@esbuild/linux-s390x": "0.19.6", - "@esbuild/linux-x64": "0.19.6", - "@esbuild/netbsd-x64": "0.19.6", - "@esbuild/openbsd-x64": "0.19.6", - "@esbuild/sunos-x64": "0.19.6", - "@esbuild/win32-arm64": "0.19.6", - "@esbuild/win32-ia32": "0.19.6", - "@esbuild/win32-x64": "0.19.6" - } - }, - "node_modules/escalade": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", - "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/estree-walker": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", - "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", - "dev": true - }, - "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/exit-hook": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-2.2.1.tgz", - "integrity": "sha512-eNTPlAD67BmP31LDINZ3U7HSF8l57TxOY2PmBJ1shpCvpnxBF93mWCE8YHBnXs8qiUZJc9WDcWIeC3a2HIAMfw==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/expect": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", - "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", - "dev": true, - "dependencies": { - "@jest/expect-utils": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "node_modules/fast-safe-stringify": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", - "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", - "dev": true - }, - "node_modules/fast-xml-parser": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.2.5.tgz", - "integrity": "sha512-B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g==", - "funding": [ - { - "type": "paypal", - "url": "https://paypal.me/naturalintelligence" - }, - { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" - } - ], - "dependencies": { - "strnum": "^1.0.5" - }, - "bin": { - "fxparser": "src/cli/cli.js" - } - }, - "node_modules/fb-watchman": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", - "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", - "dev": true, - "dependencies": { - "bser": "2.1.1" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dev": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/formidable": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/formidable/-/formidable-2.1.2.tgz", - "integrity": "sha512-CM3GuJ57US06mlpQ47YcunuUZ9jpm8Vx+P2CGt2j7HpgkKZO/DJYQ0Bobim8G6PFQmK5lOqOOdUXboU+h73A4g==", - "dev": true, - "dependencies": { - "dezalgo": "^1.0.4", - "hexoid": "^1.0.0", - "once": "^1.4.0", - "qs": "^6.11.0" - }, - "funding": { - "url": "https://ko-fi.com/tunnckoCore/commissions" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", - "dev": true, - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/get-source": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/get-source/-/get-source-2.0.12.tgz", - "integrity": "sha512-X5+4+iD+HoSeEED+uwrQ07BOQr0kEDFMVqqpBuI+RaZBpBpHCuXxo70bjar6f0b0u/DQJsJ7ssurpP0V60Az+w==", - "dev": true, - "dependencies": { - "data-uri-to-buffer": "^2.0.0", - "source-map": "^0.6.1" - } - }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true - }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "dev": true, - "dependencies": { - "es-define-property": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasown": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.1.tgz", - "integrity": "sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/hexoid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz", - "integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true, - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", - "dev": true, - "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-core-module": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", - "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", - "dev": true, - "dependencies": { - "hasown": "^2.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", - "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.2.tgz", - "integrity": "sha512-1WUsZ9R1lA0HtBSohTkm39WTPlNKSJ5iFk7UwqXkBLoHQT+hfqPsfsTDVuZdKGaBwn7din9bS7SsnoAr943hvw==", - "dev": true, - "dependencies": { - "@babel/core": "^7.23.9", - "@babel/parser": "^7.23.9", - "@istanbuljs/schema": "^0.1.3", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^7.5.4" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-instrument/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-instrument/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/istanbul-lib-report": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", - "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", - "dev": true, - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^4.0.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dev": true, - "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-reports": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", - "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", - "dev": true, - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", - "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", - "dev": true, - "dependencies": { - "@jest/core": "^29.7.0", - "@jest/types": "^29.6.3", - "import-local": "^3.0.2", - "jest-cli": "^29.7.0" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/jest-changed-files": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", - "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", - "dev": true, - "dependencies": { - "execa": "^5.0.0", - "jest-util": "^29.7.0", - "p-limit": "^3.1.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-circus": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", - "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", - "dev": true, - "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/expect": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^1.0.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^29.7.0", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", - "p-limit": "^3.1.0", - "pretty-format": "^29.7.0", - "pure-rand": "^6.0.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-cli": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", - "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", - "dev": true, - "dependencies": { - "@jest/core": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "create-jest": "^29.7.0", - "exit": "^0.1.2", - "import-local": "^3.0.2", - "jest-config": "^29.7.0", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "yargs": "^17.3.1" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/jest-config": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", - "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", - "dev": true, - "dependencies": { - "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^29.7.0", - "@jest/types": "^29.6.3", - "babel-jest": "^29.7.0", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-circus": "^29.7.0", - "jest-environment-node": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-runner": "^29.7.0", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "micromatch": "^4.0.4", - "parse-json": "^5.2.0", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@types/node": "*", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "ts-node": { - "optional": true - } - } - }, - "node_modules/jest-diff": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", - "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^29.6.3", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-docblock": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", - "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", - "dev": true, - "dependencies": { - "detect-newline": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-each": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", - "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "jest-get-type": "^29.6.3", - "jest-util": "^29.7.0", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-environment-node": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", - "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", - "dev": true, - "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-get-type": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", - "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", - "dev": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-haste-map": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", - "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.3", - "@types/graceful-fs": "^4.1.3", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^29.6.3", - "jest-util": "^29.7.0", - "jest-worker": "^29.7.0", - "micromatch": "^4.0.4", - "walker": "^1.0.8" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "optionalDependencies": { - "fsevents": "^2.3.2" - } - }, - "node_modules/jest-leak-detector": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", - "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", - "dev": true, - "dependencies": { - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-matcher-utils": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", - "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^29.7.0", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-message-util": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", - "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.6.3", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-mock": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", - "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-pnp-resolver": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", - "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", - "dev": true, - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "jest-resolve": "*" - }, - "peerDependenciesMeta": { - "jest-resolve": { - "optional": true - } - } - }, - "node_modules/jest-regex-util": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", - "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", - "dev": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-resolve": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", - "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "resolve": "^1.20.0", - "resolve.exports": "^2.0.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-resolve-dependencies": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", - "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", - "dev": true, - "dependencies": { - "jest-regex-util": "^29.6.3", - "jest-snapshot": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-runner": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", - "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", - "dev": true, - "dependencies": { - "@jest/console": "^29.7.0", - "@jest/environment": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "graceful-fs": "^4.2.9", - "jest-docblock": "^29.7.0", - "jest-environment-node": "^29.7.0", - "jest-haste-map": "^29.7.0", - "jest-leak-detector": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-resolve": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-util": "^29.7.0", - "jest-watcher": "^29.7.0", - "jest-worker": "^29.7.0", - "p-limit": "^3.1.0", - "source-map-support": "0.5.13" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-runtime": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", - "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", - "dev": true, - "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/fake-timers": "^29.7.0", - "@jest/globals": "^29.7.0", - "@jest/source-map": "^29.6.3", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-mock": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-snapshot": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", - "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", - "dev": true, - "dependencies": { - "@babel/core": "^7.11.6", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-jsx": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/types": "^7.3.3", - "@jest/expect-utils": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^29.7.0", - "graceful-fs": "^4.2.9", - "jest-diff": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "natural-compare": "^1.4.0", - "pretty-format": "^29.7.0", - "semver": "^7.5.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jest-snapshot/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jest-snapshot/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/jest-util": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", - "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-validate": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", - "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.3", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^29.6.3", - "leven": "^3.1.0", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-validate/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-watcher": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", - "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", - "dev": true, - "dependencies": { - "@jest/test-result": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "jest-util": "^29.7.0", - "string-length": "^4.0.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-worker": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", - "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", - "dev": true, - "dependencies": { - "@types/node": "*", - "jest-util": "^29.7.0", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true - }, - "node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/magic-string": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", - "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", - "dev": true, - "dependencies": { - "sourcemap-codec": "^1.4.8" - } - }, - "node_modules/make-dir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", - "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", - "dev": true, - "dependencies": { - "semver": "^7.5.3" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-dir/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/make-dir/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/make-dir/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "dev": true, - "dependencies": { - "tmpl": "1.0.5" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", - "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", - "dev": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/miniflare": { - "version": "3.20240223.1", - "resolved": "https://registry.npmjs.org/miniflare/-/miniflare-3.20240223.1.tgz", - "integrity": "sha512-5pP4Kml9JtPpCMhfVkTyzNen08bKl2swxZ6i+gYzQTo/Rcjk6neLqgVGG64JFeJFKzdGEczk5Hnwl9U04OGRiw==", - "dev": true, - "dependencies": { - "@cspotcode/source-map-support": "0.8.1", - "acorn": "^8.8.0", - "acorn-walk": "^8.2.0", - "capnp-ts": "^0.7.0", - "exit-hook": "^2.2.1", - "glob-to-regexp": "^0.4.1", - "stoppable": "^1.1.0", - "undici": "^5.28.2", - "workerd": "1.20240223.1", - "ws": "^8.11.0", - "youch": "^3.2.2", - "zod": "^3.20.6" - }, - "bin": { - "miniflare": "bootstrap.js" - }, - "engines": { - "node": ">=16.13" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/mustache": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz", - "integrity": "sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==", - "dev": true, - "bin": { - "mustache": "bin/mustache" - } - }, - "node_modules/nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "node_modules/node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", - "dev": true, - "engines": { - "node": ">= 6.13.0" - } - }, - "node_modules/node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", - "dev": true - }, - "node_modules/node-releases": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", - "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", - "dev": true - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/object-inspect": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", - "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-locate/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/path-to-regexp": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.1.tgz", - "integrity": "sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==", - "dev": true - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pirates": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", - "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/prettier": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.1.0.tgz", - "integrity": "sha512-TQLvXjq5IAibjh8EpBIkNKxO749UEWABoiIZehEPiY4GNpVdhaFKqSTu+QrlU6D2dPAfubRmtJTi4K4YkQ5eXw==", - "dev": true, - "bin": { - "prettier": "bin/prettier.cjs" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", - "dev": true, - "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/printable-characters": { - "version": "1.0.42", - "resolved": "https://registry.npmjs.org/printable-characters/-/printable-characters-1.0.42.tgz", - "integrity": "sha512-dKp+C4iXWK4vVYZmYSd0KBH5F/h1HoZRsbJ82AVKRO3PEo8L4lBS/vLwhVtpwwuYcoIsVY+1JYKR268yn480uQ==", - "dev": true - }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dev": true, - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/pure-rand": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.4.tgz", - "integrity": "sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/dubzzz" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fast-check" - } - ] - }, - "node_modules/qs": { - "version": "6.11.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz", - "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==", - "dev": true, - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", - "dev": true, - "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve.exports": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", - "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/rollup-plugin-inject": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rollup-plugin-inject/-/rollup-plugin-inject-3.0.2.tgz", - "integrity": "sha512-ptg9PQwzs3orn4jkgXJ74bfs5vYz1NCZlSQMBUA0wKcGp5i5pA1AO3fOUEte8enhGUC+iapTCzEWw2jEFFUO/w==", - "deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-inject.", - "dev": true, - "dependencies": { - "estree-walker": "^0.6.1", - "magic-string": "^0.25.3", - "rollup-pluginutils": "^2.8.1" - } - }, - "node_modules/rollup-plugin-node-polyfills": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/rollup-plugin-node-polyfills/-/rollup-plugin-node-polyfills-0.2.1.tgz", - "integrity": "sha512-4kCrKPTJ6sK4/gLL/U5QzVT8cxJcofO0OU74tnB19F40cmuAKSzH5/siithxlofFEjwvw1YAhPmbvGNA6jEroA==", - "dev": true, - "dependencies": { - "rollup-plugin-inject": "^3.0.0" - } - }, - "node_modules/rollup-pluginutils": { - "version": "2.8.2", - "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", - "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", - "dev": true, - "dependencies": { - "estree-walker": "^0.6.1" - } - }, - "node_modules/selfsigned": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", - "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", - "dev": true, - "dependencies": { - "@types/node-forge": "^1.3.0", - "node-forge": "^1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/set-function-length": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.1.tgz", - "integrity": "sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==", - "dev": true, - "dependencies": { - "define-data-property": "^1.1.2", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.3", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/side-channel": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", - "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "object-inspect": "^1.13.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.13", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", - "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", - "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/sourcemap-codec": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", - "deprecated": "Please use @jridgewell/sourcemap-codec instead", - "dev": true - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true - }, - "node_modules/stack-utils": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", - "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/stacktracey": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/stacktracey/-/stacktracey-2.1.8.tgz", - "integrity": "sha512-Kpij9riA+UNg7TnphqjH7/CzctQ/owJGNbFkfEeve4Z4uxT5+JapVLFXcsurIfN34gnTWZNJ/f7NMG0E8JDzTw==", - "dev": true, - "dependencies": { - "as-table": "^1.0.36", - "get-source": "^2.0.12" - } - }, - "node_modules/stoppable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/stoppable/-/stoppable-1.1.0.tgz", - "integrity": "sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==", - "dev": true, - "engines": { - "node": ">=4", - "npm": ">=6" - } - }, - "node_modules/string-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "dev": true, - "dependencies": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/strnum": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", - "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==" - }, - "node_modules/superagent": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/superagent/-/superagent-8.1.2.tgz", - "integrity": "sha512-6WTxW1EB6yCxV5VFOIPQruWGHqc3yI7hEmZK6h+pyk69Lk/Ut7rLUY6W/ONF2MjBuGjvmMiIpsrVJ2vjrHlslA==", - "dev": true, - "dependencies": { - "component-emitter": "^1.3.0", - "cookiejar": "^2.1.4", - "debug": "^4.3.4", - "fast-safe-stringify": "^2.1.1", - "form-data": "^4.0.0", - "formidable": "^2.1.2", - "methods": "^1.1.2", - "mime": "2.6.0", - "qs": "^6.11.0", - "semver": "^7.3.8" - }, - "engines": { - "node": ">=6.4.0 <13 || >=14" - } - }, - "node_modules/superagent/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/superagent/node_modules/mime": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", - "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", - "dev": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/superagent/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/superagent/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/supertest": { - "version": "6.3.4", - "resolved": "https://registry.npmjs.org/supertest/-/supertest-6.3.4.tgz", - "integrity": "sha512-erY3HFDG0dPnhw4U+udPfrzXa4xhSG+n4rxfRuZWCUvjFWwKl+OxWf/7zk50s84/fAAs7vf5QAb9uRa0cCykxw==", - "dev": true, - "dependencies": { - "methods": "^1.1.2", - "superagent": "^8.1.2" - }, - "engines": { - "node": ">=6.4.0" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/typescript": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", - "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/undici": { - "version": "5.28.4", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.28.4.tgz", - "integrity": "sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==", - "dev": true, - "dependencies": { - "@fastify/busboy": "^2.0.0" - }, - "engines": { - "node": ">=14.0" - } - }, - "node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", - "dev": true - }, - "node_modules/update-browserslist-db": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", - "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/v8-to-istanbul": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz", - "integrity": "sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^2.0.0" - }, - "engines": { - "node": ">=10.12.0" - } - }, - "node_modules/walker": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", - "dev": true, - "dependencies": { - "makeerror": "1.0.12" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/workerd": { - "version": "1.20240223.1", - "resolved": "https://registry.npmjs.org/workerd/-/workerd-1.20240223.1.tgz", - "integrity": "sha512-Mo1fwdp6DLva4/fWdL09ZdYllkO45I4YpWG5PbF/YUGFlu2aMk24fmU6Pd6fo5/cWek4F+n3LmYEKKHfqjiJIA==", - "dev": true, - "hasInstallScript": true, - "bin": { - "workerd": "bin/workerd" - }, - "engines": { - "node": ">=16" - }, - "optionalDependencies": { - "@cloudflare/workerd-darwin-64": "1.20240223.1", - "@cloudflare/workerd-darwin-arm64": "1.20240223.1", - "@cloudflare/workerd-linux-64": "1.20240223.1", - "@cloudflare/workerd-linux-arm64": "1.20240223.1", - "@cloudflare/workerd-windows-64": "1.20240223.1" - } - }, - "node_modules/wrangler": { - "version": "3.31.0", - "resolved": "https://registry.npmjs.org/wrangler/-/wrangler-3.31.0.tgz", - "integrity": "sha512-tanV8E8iD/REmWYkpmyDd/5lUFWBox85KCKRsPU/8biiHZH9VD3/RXJs6837TeSHAStfxV6EpF42U2OdU+trNg==", - "dev": true, - "dependencies": { - "@cloudflare/kv-asset-handler": "0.3.1", - "@esbuild-plugins/node-globals-polyfill": "^0.2.3", - "@esbuild-plugins/node-modules-polyfill": "^0.2.2", - "blake3-wasm": "^2.1.5", - "chokidar": "^3.5.3", - "esbuild": "0.17.19", - "miniflare": "3.20240223.1", - "nanoid": "^3.3.3", - "path-to-regexp": "^6.2.0", - "resolve": "^1.22.8", - "resolve.exports": "^2.0.2", - "selfsigned": "^2.0.1", - "source-map": "0.6.1", - "xxhash-wasm": "^1.0.1" - }, - "bin": { - "wrangler": "bin/wrangler.js", - "wrangler2": "bin/wrangler.js" - }, - "engines": { - "node": ">=16.17.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - }, - "peerDependencies": { - "@cloudflare/workers-types": "^4.20230914.0" - }, - "peerDependenciesMeta": { - "@cloudflare/workers-types": { - "optional": true - } - } - }, - "node_modules/wrangler/node_modules/@esbuild/android-arm": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz", - "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/wrangler/node_modules/@esbuild/android-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz", - "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/wrangler/node_modules/@esbuild/android-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.19.tgz", - "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/wrangler/node_modules/@esbuild/darwin-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz", - "integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/wrangler/node_modules/@esbuild/darwin-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz", - "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/wrangler/node_modules/@esbuild/freebsd-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz", - "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/wrangler/node_modules/@esbuild/freebsd-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz", - "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/wrangler/node_modules/@esbuild/linux-arm": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz", - "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/wrangler/node_modules/@esbuild/linux-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz", - "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/wrangler/node_modules/@esbuild/linux-ia32": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz", - "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/wrangler/node_modules/@esbuild/linux-loong64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz", - "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/wrangler/node_modules/@esbuild/linux-mips64el": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz", - "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/wrangler/node_modules/@esbuild/linux-ppc64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz", - "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/wrangler/node_modules/@esbuild/linux-riscv64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz", - "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/wrangler/node_modules/@esbuild/linux-s390x": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz", - "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/wrangler/node_modules/@esbuild/linux-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz", - "integrity": "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/wrangler/node_modules/@esbuild/netbsd-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz", - "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/wrangler/node_modules/@esbuild/openbsd-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz", - "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/wrangler/node_modules/@esbuild/sunos-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz", - "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/wrangler/node_modules/@esbuild/win32-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz", - "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/wrangler/node_modules/@esbuild/win32-ia32": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz", - "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/wrangler/node_modules/@esbuild/win32-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz", - "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/wrangler/node_modules/esbuild": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.19.tgz", - "integrity": "sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==", - "dev": true, - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/android-arm": "0.17.19", - "@esbuild/android-arm64": "0.17.19", - "@esbuild/android-x64": "0.17.19", - "@esbuild/darwin-arm64": "0.17.19", - "@esbuild/darwin-x64": "0.17.19", - "@esbuild/freebsd-arm64": "0.17.19", - "@esbuild/freebsd-x64": "0.17.19", - "@esbuild/linux-arm": "0.17.19", - "@esbuild/linux-arm64": "0.17.19", - "@esbuild/linux-ia32": "0.17.19", - "@esbuild/linux-loong64": "0.17.19", - "@esbuild/linux-mips64el": "0.17.19", - "@esbuild/linux-ppc64": "0.17.19", - "@esbuild/linux-riscv64": "0.17.19", - "@esbuild/linux-s390x": "0.17.19", - "@esbuild/linux-x64": "0.17.19", - "@esbuild/netbsd-x64": "0.17.19", - "@esbuild/openbsd-x64": "0.17.19", - "@esbuild/sunos-x64": "0.17.19", - "@esbuild/win32-arm64": "0.17.19", - "@esbuild/win32-ia32": "0.17.19", - "@esbuild/win32-x64": "0.17.19" - } - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "node_modules/write-file-atomic": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", - "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/ws": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz", - "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==", - "dev": true, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/xxhash-wasm": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/xxhash-wasm/-/xxhash-wasm-1.0.2.tgz", - "integrity": "sha512-ibF0Or+FivM9lNrg+HGJfVX8WJqgo+kCLDc4vx6xMeTce7Aj+DLttKbxxRR/gNLSAelRc1omAPlJ77N/Jem07A==", - "dev": true - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - }, - "node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dev": true, - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/youch": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/youch/-/youch-3.3.3.tgz", - "integrity": "sha512-qSFXUk3UZBLfggAW3dJKg0BMblG5biqSF8M34E06o5CSsZtH92u9Hqmj2RzGiHDi64fhe83+4tENFP2DB6t6ZA==", - "dev": true, - "dependencies": { - "cookie": "^0.5.0", - "mustache": "^4.2.0", - "stacktracey": "^2.1.8" - } - }, - "node_modules/zod": { - "version": "3.22.4", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.22.4.tgz", - "integrity": "sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/colinhacks" - } - } - }, - "dependencies": { - "@ampproject/remapping": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", - "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", - "dev": true, - "requires": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" - } - }, - "@aws-crypto/crc32": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-3.0.0.tgz", - "integrity": "sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA==", - "requires": { - "@aws-crypto/util": "^3.0.0", - "@aws-sdk/types": "^3.222.0", - "tslib": "^1.11.1" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } - } - }, - "@aws-crypto/crc32c": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/crc32c/-/crc32c-3.0.0.tgz", - "integrity": "sha512-ENNPPManmnVJ4BTXlOjAgD7URidbAznURqD0KvfREyc4o20DPYdEldU1f5cQ7Jbj0CJJSPaMIk/9ZshdB3210w==", - "requires": { - "@aws-crypto/util": "^3.0.0", - "@aws-sdk/types": "^3.222.0", - "tslib": "^1.11.1" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } - } - }, - "@aws-crypto/ie11-detection": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/ie11-detection/-/ie11-detection-3.0.0.tgz", - "integrity": "sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q==", - "requires": { - "tslib": "^1.11.1" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } - } - }, - "@aws-crypto/sha1-browser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha1-browser/-/sha1-browser-3.0.0.tgz", - "integrity": "sha512-NJth5c997GLHs6nOYTzFKTbYdMNA6/1XlKVgnZoaZcQ7z7UJlOgj2JdbHE8tiYLS3fzXNCguct77SPGat2raSw==", - "requires": { - "@aws-crypto/ie11-detection": "^3.0.0", - "@aws-crypto/supports-web-crypto": "^3.0.0", - "@aws-crypto/util": "^3.0.0", - "@aws-sdk/types": "^3.222.0", - "@aws-sdk/util-locate-window": "^3.0.0", - "@aws-sdk/util-utf8-browser": "^3.0.0", - "tslib": "^1.11.1" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } - } - }, - "@aws-crypto/sha256-browser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-3.0.0.tgz", - "integrity": "sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ==", - "requires": { - "@aws-crypto/ie11-detection": "^3.0.0", - "@aws-crypto/sha256-js": "^3.0.0", - "@aws-crypto/supports-web-crypto": "^3.0.0", - "@aws-crypto/util": "^3.0.0", - "@aws-sdk/types": "^3.222.0", - "@aws-sdk/util-locate-window": "^3.0.0", - "@aws-sdk/util-utf8-browser": "^3.0.0", - "tslib": "^1.11.1" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } - } - }, - "@aws-crypto/sha256-js": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-3.0.0.tgz", - "integrity": "sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ==", - "requires": { - "@aws-crypto/util": "^3.0.0", - "@aws-sdk/types": "^3.222.0", - "tslib": "^1.11.1" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } - } - }, - "@aws-crypto/supports-web-crypto": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-3.0.0.tgz", - "integrity": "sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg==", - "requires": { - "tslib": "^1.11.1" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } - } - }, - "@aws-crypto/util": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-3.0.0.tgz", - "integrity": "sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w==", - "requires": { - "@aws-sdk/types": "^3.222.0", - "@aws-sdk/util-utf8-browser": "^3.0.0", - "tslib": "^1.11.1" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } - } - }, - "@aws-sdk/client-s3": { - "version": "3.583.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.583.0.tgz", - "integrity": "sha512-pS7wncugSuIQ8RgtRIE9Dystdmd3mMnjfjiO1iA1UhGXkyAgoJzQ4jH0r+5X+eWmYHYQcfy9fUQXT2gqV3t9GA==", - "requires": { - "@aws-crypto/sha1-browser": "3.0.0", - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sso-oidc": "3.583.0", - "@aws-sdk/client-sts": "3.583.0", - "@aws-sdk/core": "3.582.0", - "@aws-sdk/credential-provider-node": "3.583.0", - "@aws-sdk/middleware-bucket-endpoint": "3.577.0", - "@aws-sdk/middleware-expect-continue": "3.577.0", - "@aws-sdk/middleware-flexible-checksums": "3.577.0", - "@aws-sdk/middleware-host-header": "3.577.0", - "@aws-sdk/middleware-location-constraint": "3.577.0", - "@aws-sdk/middleware-logger": "3.577.0", - "@aws-sdk/middleware-recursion-detection": "3.577.0", - "@aws-sdk/middleware-sdk-s3": "3.582.0", - "@aws-sdk/middleware-signing": "3.577.0", - "@aws-sdk/middleware-ssec": "3.577.0", - "@aws-sdk/middleware-user-agent": "3.583.0", - "@aws-sdk/region-config-resolver": "3.577.0", - "@aws-sdk/signature-v4-multi-region": "3.582.0", - "@aws-sdk/types": "3.577.0", - "@aws-sdk/util-endpoints": "3.583.0", - "@aws-sdk/util-user-agent-browser": "3.577.0", - "@aws-sdk/util-user-agent-node": "3.577.0", - "@aws-sdk/xml-builder": "3.575.0", - "@smithy/config-resolver": "^3.0.0", - "@smithy/core": "^2.0.1", - "@smithy/eventstream-serde-browser": "^3.0.0", - "@smithy/eventstream-serde-config-resolver": "^3.0.0", - "@smithy/eventstream-serde-node": "^3.0.0", - "@smithy/fetch-http-handler": "^3.0.1", - "@smithy/hash-blob-browser": "^3.0.0", - "@smithy/hash-node": "^3.0.0", - "@smithy/hash-stream-node": "^3.0.0", - "@smithy/invalid-dependency": "^3.0.0", - "@smithy/md5-js": "^3.0.0", - "@smithy/middleware-content-length": "^3.0.0", - "@smithy/middleware-endpoint": "^3.0.0", - "@smithy/middleware-retry": "^3.0.1", - "@smithy/middleware-serde": "^3.0.0", - "@smithy/middleware-stack": "^3.0.0", - "@smithy/node-config-provider": "^3.0.0", - "@smithy/node-http-handler": "^3.0.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/smithy-client": "^3.0.1", - "@smithy/types": "^3.0.0", - "@smithy/url-parser": "^3.0.0", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.1", - "@smithy/util-defaults-mode-node": "^3.0.1", - "@smithy/util-endpoints": "^2.0.0", - "@smithy/util-retry": "^3.0.0", - "@smithy/util-stream": "^3.0.1", - "@smithy/util-utf8": "^3.0.0", - "@smithy/util-waiter": "^3.0.0", - "tslib": "^2.6.2" - } - }, - "@aws-sdk/client-sso": { - "version": "3.583.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.583.0.tgz", - "integrity": "sha512-FNJ2MmiBtZZwgkj4+GLVrzqwmD6D8FBptrFZk7PnGkSf7v1Q8txYNI6gY938RRhYJ4lBW4cNbhPvWoDxAl90Hw==", - "requires": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/core": "3.582.0", - "@aws-sdk/middleware-host-header": "3.577.0", - "@aws-sdk/middleware-logger": "3.577.0", - "@aws-sdk/middleware-recursion-detection": "3.577.0", - "@aws-sdk/middleware-user-agent": "3.583.0", - "@aws-sdk/region-config-resolver": "3.577.0", - "@aws-sdk/types": "3.577.0", - "@aws-sdk/util-endpoints": "3.583.0", - "@aws-sdk/util-user-agent-browser": "3.577.0", - "@aws-sdk/util-user-agent-node": "3.577.0", - "@smithy/config-resolver": "^3.0.0", - "@smithy/core": "^2.0.1", - "@smithy/fetch-http-handler": "^3.0.1", - "@smithy/hash-node": "^3.0.0", - "@smithy/invalid-dependency": "^3.0.0", - "@smithy/middleware-content-length": "^3.0.0", - "@smithy/middleware-endpoint": "^3.0.0", - "@smithy/middleware-retry": "^3.0.1", - "@smithy/middleware-serde": "^3.0.0", - "@smithy/middleware-stack": "^3.0.0", - "@smithy/node-config-provider": "^3.0.0", - "@smithy/node-http-handler": "^3.0.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/smithy-client": "^3.0.1", - "@smithy/types": "^3.0.0", - "@smithy/url-parser": "^3.0.0", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.1", - "@smithy/util-defaults-mode-node": "^3.0.1", - "@smithy/util-endpoints": "^2.0.0", - "@smithy/util-middleware": "^3.0.0", - "@smithy/util-retry": "^3.0.0", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" - } - }, - "@aws-sdk/client-sso-oidc": { - "version": "3.583.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.583.0.tgz", - "integrity": "sha512-LO3wmrFXPi2kNE46lD1XATfRrvdNxXd4DlTFouoWmr7lvqoUkcbmtkV2r/XChZA2z0HiDauphC1e8b8laJVeSg==", - "requires": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.583.0", - "@aws-sdk/core": "3.582.0", - "@aws-sdk/credential-provider-node": "3.583.0", - "@aws-sdk/middleware-host-header": "3.577.0", - "@aws-sdk/middleware-logger": "3.577.0", - "@aws-sdk/middleware-recursion-detection": "3.577.0", - "@aws-sdk/middleware-user-agent": "3.583.0", - "@aws-sdk/region-config-resolver": "3.577.0", - "@aws-sdk/types": "3.577.0", - "@aws-sdk/util-endpoints": "3.583.0", - "@aws-sdk/util-user-agent-browser": "3.577.0", - "@aws-sdk/util-user-agent-node": "3.577.0", - "@smithy/config-resolver": "^3.0.0", - "@smithy/core": "^2.0.1", - "@smithy/fetch-http-handler": "^3.0.1", - "@smithy/hash-node": "^3.0.0", - "@smithy/invalid-dependency": "^3.0.0", - "@smithy/middleware-content-length": "^3.0.0", - "@smithy/middleware-endpoint": "^3.0.0", - "@smithy/middleware-retry": "^3.0.1", - "@smithy/middleware-serde": "^3.0.0", - "@smithy/middleware-stack": "^3.0.0", - "@smithy/node-config-provider": "^3.0.0", - "@smithy/node-http-handler": "^3.0.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/smithy-client": "^3.0.1", - "@smithy/types": "^3.0.0", - "@smithy/url-parser": "^3.0.0", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.1", - "@smithy/util-defaults-mode-node": "^3.0.1", - "@smithy/util-endpoints": "^2.0.0", - "@smithy/util-middleware": "^3.0.0", - "@smithy/util-retry": "^3.0.0", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" - } - }, - "@aws-sdk/client-sts": { - "version": "3.583.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.583.0.tgz", - "integrity": "sha512-xDMxiemPDWr9dY2Q4AyixkRnk/hvS6fs6OWxuVCz1WO47YhaAfOsEGAgQMgDLLaOfj/oLU5D14uTNBEPGh4rBA==", - "requires": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sso-oidc": "3.583.0", - "@aws-sdk/core": "3.582.0", - "@aws-sdk/credential-provider-node": "3.583.0", - "@aws-sdk/middleware-host-header": "3.577.0", - "@aws-sdk/middleware-logger": "3.577.0", - "@aws-sdk/middleware-recursion-detection": "3.577.0", - "@aws-sdk/middleware-user-agent": "3.583.0", - "@aws-sdk/region-config-resolver": "3.577.0", - "@aws-sdk/types": "3.577.0", - "@aws-sdk/util-endpoints": "3.583.0", - "@aws-sdk/util-user-agent-browser": "3.577.0", - "@aws-sdk/util-user-agent-node": "3.577.0", - "@smithy/config-resolver": "^3.0.0", - "@smithy/core": "^2.0.1", - "@smithy/fetch-http-handler": "^3.0.1", - "@smithy/hash-node": "^3.0.0", - "@smithy/invalid-dependency": "^3.0.0", - "@smithy/middleware-content-length": "^3.0.0", - "@smithy/middleware-endpoint": "^3.0.0", - "@smithy/middleware-retry": "^3.0.1", - "@smithy/middleware-serde": "^3.0.0", - "@smithy/middleware-stack": "^3.0.0", - "@smithy/node-config-provider": "^3.0.0", - "@smithy/node-http-handler": "^3.0.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/smithy-client": "^3.0.1", - "@smithy/types": "^3.0.0", - "@smithy/url-parser": "^3.0.0", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.1", - "@smithy/util-defaults-mode-node": "^3.0.1", - "@smithy/util-endpoints": "^2.0.0", - "@smithy/util-middleware": "^3.0.0", - "@smithy/util-retry": "^3.0.0", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" - } - }, - "@aws-sdk/core": { - "version": "3.582.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.582.0.tgz", - "integrity": "sha512-ofmD96IQc9g1dbyqlCyxu5fCG7kIl9p1NoN5+vGBUyLdbmPCV3Pdg99nRHYEJuv2MgGx5AUFGDPMHcqbJpnZIw==", - "requires": { - "@smithy/core": "^2.0.1", - "@smithy/protocol-http": "^4.0.0", - "@smithy/signature-v4": "^3.0.0", - "@smithy/smithy-client": "^3.0.1", - "@smithy/types": "^3.0.0", - "fast-xml-parser": "4.2.5", - "tslib": "^2.6.2" - } - }, - "@aws-sdk/credential-provider-env": { - "version": "3.577.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.577.0.tgz", - "integrity": "sha512-Jxu255j0gToMGEiqufP8ZtKI8HW90lOLjwJ3LrdlD/NLsAY0tOQf1fWc53u28hWmmNGMxmCrL2p66IOgMDhDUw==", - "requires": { - "@aws-sdk/types": "3.577.0", - "@smithy/property-provider": "^3.0.0", - "@smithy/types": "^3.0.0", - "tslib": "^2.6.2" - } - }, - "@aws-sdk/credential-provider-http": { - "version": "3.582.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.582.0.tgz", - "integrity": "sha512-kGOUKw5ryPkDIYB69PjK3SicVLTbWB06ouFN2W1EvqUJpkQGPAUGzYcomKtt3mJaCTf/1kfoaHwARAl6KKSP8Q==", - "requires": { - "@aws-sdk/types": "3.577.0", - "@smithy/fetch-http-handler": "^3.0.1", - "@smithy/node-http-handler": "^3.0.0", - "@smithy/property-provider": "^3.0.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/smithy-client": "^3.0.1", - "@smithy/types": "^3.0.0", - "@smithy/util-stream": "^3.0.1", - "tslib": "^2.6.2" - } - }, - "@aws-sdk/credential-provider-ini": { - "version": "3.583.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.583.0.tgz", - "integrity": "sha512-8I0oWNg/yps6ctjhEeL/qJ9BIa/+xXP7RPDQqFKZ2zBkWbmLLOoMWXRvl8uKUBD6qCe+DGmcu9skfVXeXSesEQ==", - "requires": { - "@aws-sdk/credential-provider-env": "3.577.0", - "@aws-sdk/credential-provider-process": "3.577.0", - "@aws-sdk/credential-provider-sso": "3.583.0", - "@aws-sdk/credential-provider-web-identity": "3.577.0", - "@aws-sdk/types": "3.577.0", - "@smithy/credential-provider-imds": "^3.0.0", - "@smithy/property-provider": "^3.0.0", - "@smithy/shared-ini-file-loader": "^3.0.0", - "@smithy/types": "^3.0.0", - "tslib": "^2.6.2" - } - }, - "@aws-sdk/credential-provider-node": { - "version": "3.583.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.583.0.tgz", - "integrity": "sha512-yBNypBXny7zJH85SzxDj8s1mbLXv9c/Vbq0qR3R3POj2idZ6ywB/qlIRC1XwBuv49Wvg8kA1wKXk3K3jrpcVIw==", - "requires": { - "@aws-sdk/credential-provider-env": "3.577.0", - "@aws-sdk/credential-provider-http": "3.582.0", - "@aws-sdk/credential-provider-ini": "3.583.0", - "@aws-sdk/credential-provider-process": "3.577.0", - "@aws-sdk/credential-provider-sso": "3.583.0", - "@aws-sdk/credential-provider-web-identity": "3.577.0", - "@aws-sdk/types": "3.577.0", - "@smithy/credential-provider-imds": "^3.0.0", - "@smithy/property-provider": "^3.0.0", - "@smithy/shared-ini-file-loader": "^3.0.0", - "@smithy/types": "^3.0.0", - "tslib": "^2.6.2" - } - }, - "@aws-sdk/credential-provider-process": { - "version": "3.577.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.577.0.tgz", - "integrity": "sha512-Gin6BWtOiXxIgITrJ3Nwc+Y2P1uVT6huYR4EcbA/DJUPWyO0n9y5UFLewPvVbLkRn15JeEqErBLUrHclkiOKtw==", - "requires": { - "@aws-sdk/types": "3.577.0", - "@smithy/property-provider": "^3.0.0", - "@smithy/shared-ini-file-loader": "^3.0.0", - "@smithy/types": "^3.0.0", - "tslib": "^2.6.2" - } - }, - "@aws-sdk/credential-provider-sso": { - "version": "3.583.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.583.0.tgz", - "integrity": "sha512-G/1EvL9tBezSiU+06tG4K/kOvFfPjnheT4JSXqjPM7+vjKzgp2jxp1J9MMd69zs4jVWon932zMeGgjrCplzMEg==", - "requires": { - "@aws-sdk/client-sso": "3.583.0", - "@aws-sdk/token-providers": "3.577.0", - "@aws-sdk/types": "3.577.0", - "@smithy/property-provider": "^3.0.0", - "@smithy/shared-ini-file-loader": "^3.0.0", - "@smithy/types": "^3.0.0", - "tslib": "^2.6.2" - } - }, - "@aws-sdk/credential-provider-web-identity": { - "version": "3.577.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.577.0.tgz", - "integrity": "sha512-ZGHGNRaCtJJmszb9UTnC7izNCtRUttdPlLdMkh41KPS32vfdrBDHs1JrpbZijItRj1xKuOXsiYSXLAaHGcLh8Q==", - "requires": { - "@aws-sdk/types": "3.577.0", - "@smithy/property-provider": "^3.0.0", - "@smithy/types": "^3.0.0", - "tslib": "^2.6.2" - } - }, - "@aws-sdk/middleware-bucket-endpoint": { - "version": "3.577.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.577.0.tgz", - "integrity": "sha512-twlkNX2VofM6kHXzDEiJOiYCc9tVABe5cbyxMArRWscIsCWG9mamPhC77ezG4XsN9dFEwVdxEYD5Crpm/5EUiw==", - "requires": { - "@aws-sdk/types": "3.577.0", - "@aws-sdk/util-arn-parser": "3.568.0", - "@smithy/node-config-provider": "^3.0.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/types": "^3.0.0", - "@smithy/util-config-provider": "^3.0.0", - "tslib": "^2.6.2" - } - }, - "@aws-sdk/middleware-expect-continue": { - "version": "3.577.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.577.0.tgz", - "integrity": "sha512-6dPp8Tv4F0of4un5IAyG6q++GrRrNQQ4P2NAMB1W0VO4JoEu1C8GievbbDLi88TFIFmtKpnHB0ODCzwnoe8JsA==", - "requires": { - "@aws-sdk/types": "3.577.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/types": "^3.0.0", - "tslib": "^2.6.2" - } - }, - "@aws-sdk/middleware-flexible-checksums": { - "version": "3.577.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.577.0.tgz", - "integrity": "sha512-IHAUEipIfagjw92LV8SOSBiCF7ZnqfHcw14IkcZW2/mfrCy1Fh/k40MoS/t3Tro2tQ91rgQPwUoSgB/QCi2Org==", - "requires": { - "@aws-crypto/crc32": "3.0.0", - "@aws-crypto/crc32c": "3.0.0", - "@aws-sdk/types": "3.577.0", - "@smithy/is-array-buffer": "^3.0.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/types": "^3.0.0", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" - } - }, - "@aws-sdk/middleware-host-header": { - "version": "3.577.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.577.0.tgz", - "integrity": "sha512-9ca5MJz455CODIVXs0/sWmJm7t3QO4EUa1zf8pE8grLpzf0J94bz/skDWm37Pli13T3WaAQBHCTiH2gUVfCsWg==", - "requires": { - "@aws-sdk/types": "3.577.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/types": "^3.0.0", - "tslib": "^2.6.2" - } - }, - "@aws-sdk/middleware-location-constraint": { - "version": "3.577.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.577.0.tgz", - "integrity": "sha512-DKPTD2D2s+t2QUo/IXYtVa/6Un8GZ+phSTBkyBNx2kfZz4Kwavhl/JJzSqTV3GfCXkVdFu7CrjoX7BZ6qWeTUA==", - "requires": { - "@aws-sdk/types": "3.577.0", - "@smithy/types": "^3.0.0", - "tslib": "^2.6.2" - } - }, - "@aws-sdk/middleware-logger": { - "version": "3.577.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.577.0.tgz", - "integrity": "sha512-aPFGpGjTZcJYk+24bg7jT4XdIp42mFXSuPt49lw5KygefLyJM/sB0bKKqPYYivW0rcuZ9brQ58eZUNthrzYAvg==", - "requires": { - "@aws-sdk/types": "3.577.0", - "@smithy/types": "^3.0.0", - "tslib": "^2.6.2" - } - }, - "@aws-sdk/middleware-recursion-detection": { - "version": "3.577.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.577.0.tgz", - "integrity": "sha512-pn3ZVEd2iobKJlR3H+bDilHjgRnNrQ6HMmK9ZzZw89Ckn3Dcbv48xOv4RJvu0aU8SDLl/SNCxppKjeLDTPGBNA==", - "requires": { - "@aws-sdk/types": "3.577.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/types": "^3.0.0", - "tslib": "^2.6.2" - } - }, - "@aws-sdk/middleware-sdk-s3": { - "version": "3.582.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.582.0.tgz", - "integrity": "sha512-PJqQpLoLaZPRI4L/XZUeHkd9UVK8VAr9R38wv0osGeMTvzD9iwzzk0I2TtBqFda/5xEB1YgVYZwyqvmStXmttg==", - "requires": { - "@aws-sdk/types": "3.577.0", - "@aws-sdk/util-arn-parser": "3.568.0", - "@smithy/node-config-provider": "^3.0.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/signature-v4": "^3.0.0", - "@smithy/smithy-client": "^3.0.1", - "@smithy/types": "^3.0.0", - "@smithy/util-config-provider": "^3.0.0", - "tslib": "^2.6.2" - } - }, - "@aws-sdk/middleware-signing": { - "version": "3.577.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.577.0.tgz", - "integrity": "sha512-QS/dh3+NqZbXtY0j/DZ867ogP413pG5cFGqBy9OeOhDMsolcwLrQbi0S0c621dc1QNq+er9ffaMhZ/aPkyXXIg==", - "requires": { - "@aws-sdk/types": "3.577.0", - "@smithy/property-provider": "^3.0.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/signature-v4": "^3.0.0", - "@smithy/types": "^3.0.0", - "@smithy/util-middleware": "^3.0.0", - "tslib": "^2.6.2" - } - }, - "@aws-sdk/middleware-ssec": { - "version": "3.577.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.577.0.tgz", - "integrity": "sha512-i2BPJR+rp8xmRVIGc0h1kDRFcM2J9GnClqqpc+NLSjmYadlcg4mPklisz9HzwFVcRPJ5XcGf3U4BYs5G8+iTyg==", - "requires": { - "@aws-sdk/types": "3.577.0", - "@smithy/types": "^3.0.0", - "tslib": "^2.6.2" - } - }, - "@aws-sdk/middleware-user-agent": { - "version": "3.583.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.583.0.tgz", - "integrity": "sha512-xVNXXXDWvBVI/AeVtSdA9SVumqxiZaESk/JpUn9GMkmtTKfter0Cweap+1iQ9j8bRAO0vNhmIkbcvdB1S4WVUw==", - "requires": { - "@aws-sdk/types": "3.577.0", - "@aws-sdk/util-endpoints": "3.583.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/types": "^3.0.0", - "tslib": "^2.6.2" - } - }, - "@aws-sdk/region-config-resolver": { - "version": "3.577.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.577.0.tgz", - "integrity": "sha512-4ChCFACNwzqx/xjg3zgFcW8Ali6R9C95cFECKWT/7CUM1D0MGvkclSH2cLarmHCmJgU6onKkJroFtWp0kHhgyg==", - "requires": { - "@aws-sdk/types": "3.577.0", - "@smithy/node-config-provider": "^3.0.0", - "@smithy/types": "^3.0.0", - "@smithy/util-config-provider": "^3.0.0", - "@smithy/util-middleware": "^3.0.0", - "tslib": "^2.6.2" - } - }, - "@aws-sdk/signature-v4-multi-region": { - "version": "3.582.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.582.0.tgz", - "integrity": "sha512-aFCOjjNqEX2l+V8QjOWy5F7CtHIC/RlYdBuv3No6yxn+pMvVUUe6zdMk2yHWcudVpHWsyvcZzAUBliAPeFLPsQ==", - "requires": { - "@aws-sdk/middleware-sdk-s3": "3.582.0", - "@aws-sdk/types": "3.577.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/signature-v4": "^3.0.0", - "@smithy/types": "^3.0.0", - "tslib": "^2.6.2" - } - }, - "@aws-sdk/token-providers": { - "version": "3.577.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.577.0.tgz", - "integrity": "sha512-0CkIZpcC3DNQJQ1hDjm2bdSy/Xjs7Ny5YvSsacasGOkNfk+FdkiQy6N67bZX3Zbc9KIx+Nz4bu3iDeNSNplnnQ==", - "requires": { - "@aws-sdk/types": "3.577.0", - "@smithy/property-provider": "^3.0.0", - "@smithy/shared-ini-file-loader": "^3.0.0", - "@smithy/types": "^3.0.0", - "tslib": "^2.6.2" - } - }, - "@aws-sdk/types": { - "version": "3.577.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.577.0.tgz", - "integrity": "sha512-FT2JZES3wBKN/alfmhlo+3ZOq/XJ0C7QOZcDNrpKjB0kqYoKjhVKZ/Hx6ArR0czkKfHzBBEs6y40ebIHx2nSmA==", - "requires": { - "@smithy/types": "^3.0.0", - "tslib": "^2.6.2" - } - }, - "@aws-sdk/util-arn-parser": { - "version": "3.568.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.568.0.tgz", - "integrity": "sha512-XUKJWWo+KOB7fbnPP0+g/o5Ulku/X53t7i/h+sPHr5xxYTJJ9CYnbToo95mzxe7xWvkLrsNtJ8L+MnNn9INs2w==", - "requires": { - "tslib": "^2.6.2" - } - }, - "@aws-sdk/util-endpoints": { - "version": "3.583.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.583.0.tgz", - "integrity": "sha512-ZC9mb2jq6BFXPYsUsD2tmYcnlmd+9PGNwnFNn8jk4abna5Jjk2wDknN81ybktmBR5ttN9W8ugmktuKtvAMIDCQ==", - "requires": { - "@aws-sdk/types": "3.577.0", - "@smithy/types": "^3.0.0", - "@smithy/util-endpoints": "^2.0.0", - "tslib": "^2.6.2" - } - }, - "@aws-sdk/util-locate-window": { - "version": "3.568.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.568.0.tgz", - "integrity": "sha512-3nh4TINkXYr+H41QaPelCceEB2FXP3fxp93YZXB/kqJvX0U9j0N0Uk45gvsjmEPzG8XxkPEeLIfT2I1M7A6Lig==", - "requires": { - "tslib": "^2.6.2" - } - }, - "@aws-sdk/util-user-agent-browser": { - "version": "3.577.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.577.0.tgz", - "integrity": "sha512-zEAzHgR6HWpZOH7xFgeJLc6/CzMcx4nxeQolZxVZoB5pPaJd3CjyRhZN0xXeZB0XIRCWmb4yJBgyiugXLNMkLA==", - "requires": { - "@aws-sdk/types": "3.577.0", - "@smithy/types": "^3.0.0", - "bowser": "^2.11.0", - "tslib": "^2.6.2" - } - }, - "@aws-sdk/util-user-agent-node": { - "version": "3.577.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.577.0.tgz", - "integrity": "sha512-XqvtFjbSMtycZTWVwDe8DRWovuoMbA54nhUoZwVU6rW9OSD6NZWGR512BUGHFaWzW0Wg8++Dj10FrKTG2XtqfA==", - "requires": { - "@aws-sdk/types": "3.577.0", - "@smithy/node-config-provider": "^3.0.0", - "@smithy/types": "^3.0.0", - "tslib": "^2.6.2" - } - }, - "@aws-sdk/util-utf8-browser": { - "version": "3.259.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz", - "integrity": "sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==", - "requires": { - "tslib": "^2.3.1" - } - }, - "@aws-sdk/xml-builder": { - "version": "3.575.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.575.0.tgz", - "integrity": "sha512-cWgAwmbFYNCFzPwxL705+lWps0F3ZvOckufd2KKoEZUmtpVw9/txUXNrPySUXSmRTSRhoatIMABNfStWR043bQ==", - "requires": { - "@smithy/types": "^3.0.0", - "tslib": "^2.6.2" - } - }, - "@babel/code-frame": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", - "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", - "dev": true, - "requires": { - "@babel/highlight": "^7.23.4", - "chalk": "^2.4.2" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "@babel/compat-data": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz", - "integrity": "sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==", - "dev": true - }, - "@babel/core": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.0.tgz", - "integrity": "sha512-fQfkg0Gjkza3nf0c7/w6Xf34BW4YvzNfACRLmmb7XRLa6XHdR+K9AlJlxneFfWYf6uhOzuzZVTjF/8KfndZANw==", - "dev": true, - "requires": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.23.5", - "@babel/generator": "^7.23.6", - "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helpers": "^7.24.0", - "@babel/parser": "^7.24.0", - "@babel/template": "^7.24.0", - "@babel/traverse": "^7.24.0", - "@babel/types": "^7.24.0", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" - } - }, - "@babel/generator": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", - "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==", - "dev": true, - "requires": { - "@babel/types": "^7.23.6", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" - } - }, - "@babel/helper-compilation-targets": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", - "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.23.5", - "@babel/helper-validator-option": "^7.23.5", - "browserslist": "^4.22.2", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - } - }, - "@babel/helper-environment-visitor": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", - "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", - "dev": true - }, - "@babel/helper-function-name": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", - "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", - "dev": true, - "requires": { - "@babel/template": "^7.22.15", - "@babel/types": "^7.23.0" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-module-imports": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", - "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", - "dev": true, - "requires": { - "@babel/types": "^7.22.15" - } - }, - "@babel/helper-module-transforms": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", - "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", - "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/helper-validator-identifier": "^7.22.20" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz", - "integrity": "sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==", - "dev": true - }, - "@babel/helper-simple-access": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", - "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-string-parser": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", - "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", - "dev": true - }, - "@babel/helper-validator-identifier": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", - "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", - "dev": true - }, - "@babel/helper-validator-option": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", - "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", - "dev": true - }, - "@babel/helpers": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.0.tgz", - "integrity": "sha512-ulDZdc0Aj5uLc5nETsa7EPx2L7rM0YJM8r7ck7U73AXi7qOV44IHHRAYZHY6iU1rr3C5N4NtTmMRUJP6kwCWeA==", - "dev": true, - "requires": { - "@babel/template": "^7.24.0", - "@babel/traverse": "^7.24.0", - "@babel/types": "^7.24.0" - } - }, - "@babel/highlight": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", - "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.22.20", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "@babel/parser": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.0.tgz", - "integrity": "sha512-QuP/FxEAzMSjXygs8v4N9dvdXzEHN4W1oF3PxuWAtPo08UdM17u89RDMgjLn/mlc56iM0HlLmVkO/wgR+rDgHg==", - "dev": true - }, - "@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-jsx": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz", - "integrity": "sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-typescript": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz", - "integrity": "sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/template": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.0.tgz", - "integrity": "sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.23.5", - "@babel/parser": "^7.24.0", - "@babel/types": "^7.24.0" - } - }, - "@babel/traverse": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.0.tgz", - "integrity": "sha512-HfuJlI8qq3dEDmNU5ChzzpZRWq+oxCZQyMzIMEqLho+AQnhMnKQUzH6ydo3RBl/YjPCuk68Y6s0Gx0AeyULiWw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.23.5", - "@babel/generator": "^7.23.6", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.24.0", - "@babel/types": "^7.24.0", - "debug": "^4.3.1", - "globals": "^11.1.0" - } - }, - "@babel/types": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.0.tgz", - "integrity": "sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==", - "dev": true, - "requires": { - "@babel/helper-string-parser": "^7.23.4", - "@babel/helper-validator-identifier": "^7.22.20", - "to-fast-properties": "^2.0.0" - } - }, - "@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true - }, - "@cloudflare/kv-asset-handler": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@cloudflare/kv-asset-handler/-/kv-asset-handler-0.3.1.tgz", - "integrity": "sha512-lKN2XCfKCmpKb86a1tl4GIwsJYDy9TGuwjhDELLmpKygQhw8X2xR4dusgpC5Tg7q1pB96Eb0rBo81kxSILQMwA==", - "dev": true, - "requires": { - "mime": "^3.0.0" - } - }, - "@cloudflare/workerd-darwin-64": { - "version": "1.20240223.1", - "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-64/-/workerd-darwin-64-1.20240223.1.tgz", - "integrity": "sha512-GgHnvkazLFZ7bmR96+dTX0+WS13a+5CHOOP3qNUSR9oEnR4hHzpNIO75MuZsm9RPAXrvtT7nSJmYwiGCZXh6og==", - "dev": true, - "optional": true - }, - "@cloudflare/workerd-darwin-arm64": { - "version": "1.20240223.1", - "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-arm64/-/workerd-darwin-arm64-1.20240223.1.tgz", - "integrity": "sha512-ZF98vUmVlC0EVEd3RRuhMq4HYWFcqmPtMIMPUN2+ivEHR92TE+6E/AvdeE6wcE7fKHQ+fk3dH+ZgB0GcfptfnA==", - "dev": true, - "optional": true - }, - "@cloudflare/workerd-linux-64": { - "version": "1.20240223.1", - "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-64/-/workerd-linux-64-1.20240223.1.tgz", - "integrity": "sha512-1kH41ewNTGMmAk2zUX0Xj9VSfidl26GQ0ZrWMdi5kwf6gAHd3oVWNigJN078Jx56SgQxNcqVGX1LunqF949asw==", - "dev": true, - "optional": true - }, - "@cloudflare/workerd-linux-arm64": { - "version": "1.20240223.1", - "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-arm64/-/workerd-linux-arm64-1.20240223.1.tgz", - "integrity": "sha512-Ro8Og5C4evh890JrRm0B8sHyumRtgL+mUqPeNcEsyG45jAQy5xHpapHnmJAMJV6ah+zDc1cZtQq+en39SojXvQ==", - "dev": true, - "optional": true - }, - "@cloudflare/workerd-windows-64": { - "version": "1.20240223.1", - "resolved": "https://registry.npmjs.org/@cloudflare/workerd-windows-64/-/workerd-windows-64-1.20240223.1.tgz", - "integrity": "sha512-eNP5sfaP6WL07DaoigYou5ASPF7jHsFiNzzD2vGOI7yFd5sPlb7sJ4SpIy+BCX0LdqFnjmlUo5Xr+/I6qJ2Nww==", - "dev": true, - "optional": true - }, - "@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dev": true, - "requires": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "dependencies": { - "@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dev": true, - "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - } - } - }, - "@esbuild-plugins/node-globals-polyfill": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@esbuild-plugins/node-globals-polyfill/-/node-globals-polyfill-0.2.3.tgz", - "integrity": "sha512-r3MIryXDeXDOZh7ih1l/yE9ZLORCd5e8vWg02azWRGj5SPTuoh69A2AIyn0Z31V/kHBfZ4HgWJ+OK3GTTwLmnw==", - "dev": true, - "requires": {} - }, - "@esbuild-plugins/node-modules-polyfill": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@esbuild-plugins/node-modules-polyfill/-/node-modules-polyfill-0.2.2.tgz", - "integrity": "sha512-LXV7QsWJxRuMYvKbiznh+U1ilIop3g2TeKRzUxOG5X3YITc8JyyTa90BmLwqqv0YnX4v32CSlG+vsziZp9dMvA==", - "dev": true, - "requires": { - "escape-string-regexp": "^4.0.0", - "rollup-plugin-node-polyfills": "^0.2.1" - }, - "dependencies": { - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - } - } - }, - "@esbuild/android-arm": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.6.tgz", - "integrity": "sha512-muPzBqXJKCbMYoNbb1JpZh/ynl0xS6/+pLjrofcR3Nad82SbsCogYzUE6Aq9QT3cLP0jR/IVK/NHC9b90mSHtg==", - "dev": true, - "optional": true - }, - "@esbuild/android-arm64": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.6.tgz", - "integrity": "sha512-KQ/hbe9SJvIJ4sR+2PcZ41IBV+LPJyYp6V1K1P1xcMRup9iYsBoQn4MzE3mhMLOld27Au2eDcLlIREeKGUXpHQ==", - "dev": true, - "optional": true - }, - "@esbuild/android-x64": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.6.tgz", - "integrity": "sha512-VVJVZQ7p5BBOKoNxd0Ly3xUM78Y4DyOoFKdkdAe2m11jbh0LEU4bPles4e/72EMl4tapko8o915UalN/5zhspg==", - "dev": true, - "optional": true - }, - "@esbuild/darwin-arm64": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.6.tgz", - "integrity": "sha512-91LoRp/uZAKx6ESNspL3I46ypwzdqyDLXZH7x2QYCLgtnaU08+AXEbabY2yExIz03/am0DivsTtbdxzGejfXpA==", - "dev": true, - "optional": true - }, - "@esbuild/darwin-x64": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.6.tgz", - "integrity": "sha512-QCGHw770ubjBU1J3ZkFJh671MFajGTYMZumPs9E/rqU52md6lIil97BR0CbPq6U+vTh3xnTNDHKRdR8ggHnmxQ==", - "dev": true, - "optional": true - }, - "@esbuild/freebsd-arm64": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.6.tgz", - "integrity": "sha512-J53d0jGsDcLzWk9d9SPmlyF+wzVxjXpOH7jVW5ae7PvrDst4kiAz6sX+E8btz0GB6oH12zC+aHRD945jdjF2Vg==", - "dev": true, - "optional": true - }, - "@esbuild/freebsd-x64": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.6.tgz", - "integrity": "sha512-hn9qvkjHSIB5Z9JgCCjED6YYVGCNpqB7dEGavBdG6EjBD8S/UcNUIlGcB35NCkMETkdYwfZSvD9VoDJX6VeUVA==", - "dev": true, - "optional": true - }, - "@esbuild/linux-arm": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.6.tgz", - "integrity": "sha512-G8IR5zFgpXad/Zp7gr7ZyTKyqZuThU6z1JjmRyN1vSF8j0bOlGzUwFSMTbctLAdd7QHpeyu0cRiuKrqK1ZTwvQ==", - "dev": true, - "optional": true - }, - "@esbuild/linux-arm64": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.6.tgz", - "integrity": "sha512-HQCOrk9XlH3KngASLaBfHpcoYEGUt829A9MyxaI8RMkfRA8SakG6YQEITAuwmtzFdEu5GU4eyhKcpv27dFaOBg==", - "dev": true, - "optional": true - }, - "@esbuild/linux-ia32": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.6.tgz", - "integrity": "sha512-22eOR08zL/OXkmEhxOfshfOGo8P69k8oKHkwkDrUlcB12S/sw/+COM4PhAPT0cAYW/gpqY2uXp3TpjQVJitz7w==", - "dev": true, - "optional": true - }, - "@esbuild/linux-loong64": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.6.tgz", - "integrity": "sha512-82RvaYAh/SUJyjWA8jDpyZCHQjmEggL//sC7F3VKYcBMumQjUL3C5WDl/tJpEiKtt7XrWmgjaLkrk205zfvwTA==", - "dev": true, - "optional": true - }, - "@esbuild/linux-mips64el": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.6.tgz", - "integrity": "sha512-8tvnwyYJpR618vboIv2l8tK2SuK/RqUIGMfMENkeDGo3hsEIrpGldMGYFcWxWeEILe5Fi72zoXLmhZ7PR23oQA==", - "dev": true, - "optional": true - }, - "@esbuild/linux-ppc64": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.6.tgz", - "integrity": "sha512-Qt+D7xiPajxVNk5tQiEJwhmarNnLPdjXAoA5uWMpbfStZB0+YU6a3CtbWYSy+sgAsnyx4IGZjWsTzBzrvg/fMA==", - "dev": true, - "optional": true - }, - "@esbuild/linux-riscv64": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.6.tgz", - "integrity": "sha512-lxRdk0iJ9CWYDH1Wpnnnc640ajF4RmQ+w6oHFZmAIYu577meE9Ka/DCtpOrwr9McMY11ocbp4jirgGgCi7Ls/g==", - "dev": true, - "optional": true - }, - "@esbuild/linux-s390x": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.6.tgz", - "integrity": "sha512-MopyYV39vnfuykHanRWHGRcRC3AwU7b0QY4TI8ISLfAGfK+tMkXyFuyT1epw/lM0pflQlS53JoD22yN83DHZgA==", - "dev": true, - "optional": true - }, - "@esbuild/linux-x64": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.6.tgz", - "integrity": "sha512-UWcieaBzsN8WYbzFF5Jq7QULETPcQvlX7KL4xWGIB54OknXJjBO37sPqk7N82WU13JGWvmDzFBi1weVBajPovg==", - "dev": true, - "optional": true - }, - "@esbuild/netbsd-x64": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.6.tgz", - "integrity": "sha512-EpWiLX0fzvZn1wxtLxZrEW+oQED9Pwpnh+w4Ffv8ZLuMhUoqR9q9rL4+qHW8F4Mg5oQEKxAoT0G+8JYNqCiR6g==", - "dev": true, - "optional": true - }, - "@esbuild/openbsd-x64": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.6.tgz", - "integrity": "sha512-fFqTVEktM1PGs2sLKH4M5mhAVEzGpeZJuasAMRnvDZNCV0Cjvm1Hu35moL2vC0DOrAQjNTvj4zWrol/lwQ8Deg==", - "dev": true, - "optional": true - }, - "@esbuild/sunos-x64": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.6.tgz", - "integrity": "sha512-M+XIAnBpaNvaVAhbe3uBXtgWyWynSdlww/JNZws0FlMPSBy+EpatPXNIlKAdtbFVII9OpX91ZfMb17TU3JKTBA==", - "dev": true, - "optional": true - }, - "@esbuild/win32-arm64": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.6.tgz", - "integrity": "sha512-2DchFXn7vp/B6Tc2eKdTsLzE0ygqKkNUhUBCNtMx2Llk4POIVMUq5rUYjdcedFlGLeRe1uLCpVvCmE+G8XYybA==", - "dev": true, - "optional": true - }, - "@esbuild/win32-ia32": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.6.tgz", - "integrity": "sha512-PBo/HPDQllyWdjwAVX+Gl2hH0dfBydL97BAH/grHKC8fubqp02aL4S63otZ25q3sBdINtOBbz1qTZQfXbP4VBg==", - "dev": true, - "optional": true - }, - "@esbuild/win32-x64": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.6.tgz", - "integrity": "sha512-OE7yIdbDif2kKfrGa+V0vx/B3FJv2L4KnIiLlvtibPyO9UkgO3rzYE0HhpREo2vmJ1Ixq1zwm9/0er+3VOSZJA==", - "dev": true, - "optional": true - }, - "@fastify/busboy": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz", - "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==", - "dev": true - }, - "@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dev": true, - "requires": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - } - }, - "@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true - }, - "@jest/console": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", - "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", - "dev": true, - "requires": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "slash": "^3.0.0" - } - }, - "@jest/core": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", - "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", - "dev": true, - "requires": { - "@jest/console": "^29.7.0", - "@jest/reporters": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-changed-files": "^29.7.0", - "jest-config": "^29.7.0", - "jest-haste-map": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-resolve-dependencies": "^29.7.0", - "jest-runner": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "jest-watcher": "^29.7.0", - "micromatch": "^4.0.4", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "@jest/environment": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", - "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", - "dev": true, - "requires": { - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.7.0" - } - }, - "@jest/expect": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", - "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", - "dev": true, - "requires": { - "expect": "^29.7.0", - "jest-snapshot": "^29.7.0" - } - }, - "@jest/expect-utils": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", - "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", - "dev": true, - "requires": { - "jest-get-type": "^29.6.3" - } - }, - "@jest/fake-timers": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", - "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", - "dev": true, - "requires": { - "@jest/types": "^29.6.3", - "@sinonjs/fake-timers": "^10.0.2", - "@types/node": "*", - "jest-message-util": "^29.7.0", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0" - } - }, - "@jest/globals": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", - "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", - "dev": true, - "requires": { - "@jest/environment": "^29.7.0", - "@jest/expect": "^29.7.0", - "@jest/types": "^29.6.3", - "jest-mock": "^29.7.0" - } - }, - "@jest/reporters": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", - "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", - "dev": true, - "requires": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@jridgewell/trace-mapping": "^0.3.18", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^6.0.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "jest-worker": "^29.7.0", - "slash": "^3.0.0", - "string-length": "^4.0.1", - "strip-ansi": "^6.0.0", - "v8-to-istanbul": "^9.0.1" - } - }, - "@jest/schemas": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", - "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", - "dev": true, - "requires": { - "@sinclair/typebox": "^0.27.8" - } - }, - "@jest/source-map": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", - "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", - "dev": true, - "requires": { - "@jridgewell/trace-mapping": "^0.3.18", - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9" - } - }, - "@jest/test-result": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", - "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", - "dev": true, - "requires": { - "@jest/console": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - } - }, - "@jest/test-sequencer": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", - "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", - "dev": true, - "requires": { - "@jest/test-result": "^29.7.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "slash": "^3.0.0" - } - }, - "@jest/transform": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", - "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", - "dev": true, - "requires": { - "@babel/core": "^7.11.6", - "@jest/types": "^29.6.3", - "@jridgewell/trace-mapping": "^0.3.18", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^2.0.0", - "fast-json-stable-stringify": "^2.1.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-util": "^29.7.0", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "write-file-atomic": "^4.0.2" - } - }, - "@jest/types": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", - "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", - "dev": true, - "requires": { - "@jest/schemas": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - } - }, - "@jridgewell/gen-mapping": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", - "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", - "dev": true, - "requires": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.24" - } - }, - "@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "dev": true - }, - "@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "dev": true - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true - }, - "@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "dev": true, - "requires": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", - "dev": true - }, - "@sinonjs/commons": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", - "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", - "dev": true, - "requires": { - "type-detect": "4.0.8" - } - }, - "@sinonjs/fake-timers": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", - "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", - "dev": true, - "requires": { - "@sinonjs/commons": "^3.0.0" - } - }, - "@smithy/abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-p6GlFGBt9K4MYLu72YuJ523NVR4A8oHlC5M2JO6OmQqN8kAc/uh1JqLE+FizTokrSJGg0CSvC+BrsmGzKtsZKA==", - "requires": { - "@smithy/types": "^3.0.0", - "tslib": "^2.6.2" - } - }, - "@smithy/chunked-blob-reader": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader/-/chunked-blob-reader-3.0.0.tgz", - "integrity": "sha512-sbnURCwjF0gSToGlsBiAmd1lRCmSn72nu9axfJu5lIx6RUEgHu6GwTMbqCdhQSi0Pumcm5vFxsi9XWXb2mTaoA==", - "requires": { - "tslib": "^2.6.2" - } - }, - "@smithy/chunked-blob-reader-native": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-3.0.0.tgz", - "integrity": "sha512-VDkpCYW+peSuM4zJip5WDfqvg2Mo/e8yxOv3VF1m11y7B8KKMKVFtmZWDe36Fvk8rGuWrPZHHXZ7rR7uM5yWyg==", - "requires": { - "@smithy/util-base64": "^3.0.0", - "tslib": "^2.6.2" - } - }, - "@smithy/config-resolver": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-3.0.0.tgz", - "integrity": "sha512-2GzOfADwYLQugYkKQhIyZyQlM05K+tMKvRnc6eFfZcpJGRfKoMUMYdPlBKmqHwQFXQKBrGV6cxL9oymWgDzvFw==", - "requires": { - "@smithy/node-config-provider": "^3.0.0", - "@smithy/types": "^3.0.0", - "@smithy/util-config-provider": "^3.0.0", - "@smithy/util-middleware": "^3.0.0", - "tslib": "^2.6.2" - } - }, - "@smithy/core": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@smithy/core/-/core-2.0.1.tgz", - "integrity": "sha512-rcMkjvwxH/bER+oZUPR0yTA0ELD6m3A+d92+CFkdF6HJFCBB1bXo7P5pm21L66XwTN01B6bUhSCQ7cymWRD8zg==", - "requires": { - "@smithy/middleware-endpoint": "^3.0.0", - "@smithy/middleware-retry": "^3.0.1", - "@smithy/middleware-serde": "^3.0.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/smithy-client": "^3.0.1", - "@smithy/types": "^3.0.0", - "@smithy/util-middleware": "^3.0.0", - "tslib": "^2.6.2" - } - }, - "@smithy/credential-provider-imds": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-3.0.0.tgz", - "integrity": "sha512-lfmBiFQcA3FsDAPxNfY0L7CawcWtbyWsBOHo34nF095728JLkBX4Y9q/VPPE2r7fqMVK+drmDigqE2/SSQeVRA==", - "requires": { - "@smithy/node-config-provider": "^3.0.0", - "@smithy/property-provider": "^3.0.0", - "@smithy/types": "^3.0.0", - "@smithy/url-parser": "^3.0.0", - "tslib": "^2.6.2" - } - }, - "@smithy/eventstream-codec": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-3.0.0.tgz", - "integrity": "sha512-PUtyEA0Oik50SaEFCZ0WPVtF9tz/teze2fDptW6WRXl+RrEenH8UbEjudOz8iakiMl3lE3lCVqYf2Y+znL8QFQ==", - "requires": { - "@aws-crypto/crc32": "3.0.0", - "@smithy/types": "^3.0.0", - "@smithy/util-hex-encoding": "^3.0.0", - "tslib": "^2.6.2" - } - }, - "@smithy/eventstream-serde-browser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-3.0.0.tgz", - "integrity": "sha512-NB7AFiPN4NxP/YCAnrvYR18z2/ZsiHiF7VtG30gshO9GbFrIb1rC8ep4NGpJSWrz6P64uhPXeo4M0UsCLnZKqw==", - "requires": { - "@smithy/eventstream-serde-universal": "^3.0.0", - "@smithy/types": "^3.0.0", - "tslib": "^2.6.2" - } - }, - "@smithy/eventstream-serde-config-resolver": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-3.0.0.tgz", - "integrity": "sha512-RUQG3vQ3LX7peqqHAbmayhgrF5aTilPnazinaSGF1P0+tgM3vvIRWPHmlLIz2qFqB9LqFIxditxc8O2Z6psrRw==", - "requires": { - "@smithy/types": "^3.0.0", - "tslib": "^2.6.2" - } - }, - "@smithy/eventstream-serde-node": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-3.0.0.tgz", - "integrity": "sha512-baRPdMBDMBExZXIUAoPGm/hntixjt/VFpU6+VmCyiYJYzRHRxoaI1MN+5XE+hIS8AJ2GCHLMFEIOLzq9xx1EgQ==", - "requires": { - "@smithy/eventstream-serde-universal": "^3.0.0", - "@smithy/types": "^3.0.0", - "tslib": "^2.6.2" - } - }, - "@smithy/eventstream-serde-universal": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-3.0.0.tgz", - "integrity": "sha512-HNFfShmotWGeAoW4ujP8meV9BZavcpmerDbPIjkJbxKbN8RsUcpRQ/2OyIxWNxXNH2GWCAxuSB7ynmIGJlQ3Dw==", - "requires": { - "@smithy/eventstream-codec": "^3.0.0", - "@smithy/types": "^3.0.0", - "tslib": "^2.6.2" - } - }, - "@smithy/fetch-http-handler": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-3.0.1.tgz", - "integrity": "sha512-uaH74i5BDj+rBwoQaXioKpI0SHBJFtOVwzrCpxZxphOW0ki5jhj7dXvDMYM2IJem8TpdFvS2iC08sjOblfFGFg==", - "requires": { - "@smithy/protocol-http": "^4.0.0", - "@smithy/querystring-builder": "^3.0.0", - "@smithy/types": "^3.0.0", - "@smithy/util-base64": "^3.0.0", - "tslib": "^2.6.2" - } - }, - "@smithy/hash-blob-browser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-3.0.0.tgz", - "integrity": "sha512-/Wbpdg+bwJvW7lxR/zpWAc1/x/YkcqguuF2bAzkJrvXriZu1vm8r+PUdE4syiVwQg7PPR2dXpi3CLBb9qRDaVQ==", - "requires": { - "@smithy/chunked-blob-reader": "^3.0.0", - "@smithy/chunked-blob-reader-native": "^3.0.0", - "@smithy/types": "^3.0.0", - "tslib": "^2.6.2" - } - }, - "@smithy/hash-node": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-3.0.0.tgz", - "integrity": "sha512-84qXstNemP3XS5jcof0el6+bDfjzuvhJPQTEfro3lgtbCtKgzPm3MgiS6ehXVPjeQ5+JS0HqmTz8f/RYfzHVxw==", - "requires": { - "@smithy/types": "^3.0.0", - "@smithy/util-buffer-from": "^3.0.0", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" - } - }, - "@smithy/hash-stream-node": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-3.0.0.tgz", - "integrity": "sha512-J0i7de+EgXDEGITD4fxzmMX8CyCNETTIRXlxjMiNUvvu76Xn3GJ31wQR85ynlPk2wI1lqoknAFJaD1fiNDlbIA==", - "requires": { - "@smithy/types": "^3.0.0", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" - } - }, - "@smithy/invalid-dependency": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-3.0.0.tgz", - "integrity": "sha512-F6wBBaEFgJzj0s4KUlliIGPmqXemwP6EavgvDqYwCH40O5Xr2iMHvS8todmGVZtuJCorBkXsYLyTu4PuizVq5g==", - "requires": { - "@smithy/types": "^3.0.0", - "tslib": "^2.6.2" - } - }, - "@smithy/is-array-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", - "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", - "requires": { - "tslib": "^2.6.2" - } - }, - "@smithy/md5-js": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-3.0.0.tgz", - "integrity": "sha512-Tm0vrrVzjlD+6RCQTx7D3Ls58S3FUH1ZCtU1MIh/qQmaOo1H9lMN2as6CikcEwgattnA9SURSdoJJ27xMcEfMA==", - "requires": { - "@smithy/types": "^3.0.0", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" - } - }, - "@smithy/middleware-content-length": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-3.0.0.tgz", - "integrity": "sha512-3C4s4d/iGobgCtk2tnWW6+zSTOBg1PRAm2vtWZLdriwTroFbbWNSr3lcyzHdrQHnEXYCC5K52EbpfodaIUY8sg==", - "requires": { - "@smithy/protocol-http": "^4.0.0", - "@smithy/types": "^3.0.0", - "tslib": "^2.6.2" - } - }, - "@smithy/middleware-endpoint": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-3.0.0.tgz", - "integrity": "sha512-aXOAWztw/5qAfp0NcA2OWpv6ZI/E+Dh9mByif7i91D/0iyYNUcKvskmXiowKESFkuZ7PIMd3VOR4fTibZDs2OQ==", - "requires": { - "@smithy/middleware-serde": "^3.0.0", - "@smithy/node-config-provider": "^3.0.0", - "@smithy/shared-ini-file-loader": "^3.0.0", - "@smithy/types": "^3.0.0", - "@smithy/url-parser": "^3.0.0", - "@smithy/util-middleware": "^3.0.0", - "tslib": "^2.6.2" - } - }, - "@smithy/middleware-retry": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-3.0.1.tgz", - "integrity": "sha512-hBhSEuL841FhJBK/19WpaGk5YWSzFk/P2UaVjANGKRv3eYNO8Y1lANWgqnuPWjOyCEWMPr58vELFDWpxvRKANw==", - "requires": { - "@smithy/node-config-provider": "^3.0.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/service-error-classification": "^3.0.0", - "@smithy/smithy-client": "^3.0.1", - "@smithy/types": "^3.0.0", - "@smithy/util-middleware": "^3.0.0", - "@smithy/util-retry": "^3.0.0", - "tslib": "^2.6.2", - "uuid": "^9.0.1" - } - }, - "@smithy/middleware-serde": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-3.0.0.tgz", - "integrity": "sha512-I1vKG1foI+oPgG9r7IMY1S+xBnmAn1ISqployvqkwHoSb8VPsngHDTOgYGYBonuOKndaWRUGJZrKYYLB+Ane6w==", - "requires": { - "@smithy/types": "^3.0.0", - "tslib": "^2.6.2" - } - }, - "@smithy/middleware-stack": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-3.0.0.tgz", - "integrity": "sha512-+H0jmyfAyHRFXm6wunskuNAqtj7yfmwFB6Fp37enytp2q047/Od9xetEaUbluyImOlGnGpaVGaVfjwawSr+i6Q==", - "requires": { - "@smithy/types": "^3.0.0", - "tslib": "^2.6.2" - } - }, - "@smithy/node-config-provider": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-3.0.0.tgz", - "integrity": "sha512-buqfaSdDh0zo62EPLf8rGDvcpKwGpO5ho4bXS2cdFhlOta7tBkWJt+O5uiaAeICfIOfPclNOndshDNSanX2X9g==", - "requires": { - "@smithy/property-provider": "^3.0.0", - "@smithy/shared-ini-file-loader": "^3.0.0", - "@smithy/types": "^3.0.0", - "tslib": "^2.6.2" - } - }, - "@smithy/node-http-handler": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.0.0.tgz", - "integrity": "sha512-3trD4r7NOMygwLbUJo4eodyQuypAWr7uvPnebNJ9a70dQhVn+US8j/lCnvoJS6BXfZeF7PkkkI0DemVJw+n+eQ==", - "requires": { - "@smithy/abort-controller": "^3.0.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/querystring-builder": "^3.0.0", - "@smithy/types": "^3.0.0", - "tslib": "^2.6.2" - } - }, - "@smithy/property-provider": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.0.0.tgz", - "integrity": "sha512-LmbPgHBswdXCrkWWuUwBm9w72S2iLWyC/5jet9/Y9cGHtzqxi+GVjfCfahkvNV4KXEwgnH8EMpcrD9RUYe0eLQ==", - "requires": { - "@smithy/types": "^3.0.0", - "tslib": "^2.6.2" - } - }, - "@smithy/protocol-http": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.0.0.tgz", - "integrity": "sha512-qOQZOEI2XLWRWBO9AgIYuHuqjZ2csyr8/IlgFDHDNuIgLAMRx2Bl8ck5U5D6Vh9DPdoaVpuzwWMa0xcdL4O/AQ==", - "requires": { - "@smithy/types": "^3.0.0", - "tslib": "^2.6.2" - } - }, - "@smithy/querystring-builder": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-3.0.0.tgz", - "integrity": "sha512-bW8Fi0NzyfkE0TmQphDXr1AmBDbK01cA4C1Z7ggwMAU5RDz5AAv/KmoRwzQAS0kxXNf/D2ALTEgwK0U2c4LtRg==", - "requires": { - "@smithy/types": "^3.0.0", - "@smithy/util-uri-escape": "^3.0.0", - "tslib": "^2.6.2" - } - }, - "@smithy/querystring-parser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-3.0.0.tgz", - "integrity": "sha512-UzHwthk0UEccV4dHzPySnBy34AWw3V9lIqUTxmozQ+wPDAO9csCWMfOLe7V9A2agNYy7xE+Pb0S6K/J23JSzfQ==", - "requires": { - "@smithy/types": "^3.0.0", - "tslib": "^2.6.2" - } - }, - "@smithy/service-error-classification": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-3.0.0.tgz", - "integrity": "sha512-3BsBtOUt2Gsnc3X23ew+r2M71WwtpHfEDGhHYHSDg6q1t8FrWh15jT25DLajFV1H+PpxAJ6gqe9yYeRUsmSdFA==", - "requires": { - "@smithy/types": "^3.0.0" - } - }, - "@smithy/shared-ini-file-loader": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.0.0.tgz", - "integrity": "sha512-REVw6XauXk8xE4zo5aGL7Rz4ywA8qNMUn8RtWeTRQsgAlmlvbJ7CEPBcaXU2NDC3AYBgYAXrGyWD8XrN8UGDog==", - "requires": { - "@smithy/types": "^3.0.0", - "tslib": "^2.6.2" - } - }, - "@smithy/signature-v4": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-3.0.0.tgz", - "integrity": "sha512-kXFOkNX+BQHe2qnLxpMEaCRGap9J6tUGLzc3A9jdn+nD4JdMwCKTJ+zFwQ20GkY+mAXGatyTw3HcoUlR39HwmA==", - "requires": { - "@smithy/is-array-buffer": "^3.0.0", - "@smithy/types": "^3.0.0", - "@smithy/util-hex-encoding": "^3.0.0", - "@smithy/util-middleware": "^3.0.0", - "@smithy/util-uri-escape": "^3.0.0", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" - } - }, - "@smithy/smithy-client": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.0.1.tgz", - "integrity": "sha512-KAiFY4Y4jdHxR+4zerH/VBhaFKM8pbaVmJZ/CWJRwtM/CmwzTfXfvYwf6GoUwiHepdv+lwiOXCuOl6UBDUEINw==", - "requires": { - "@smithy/middleware-endpoint": "^3.0.0", - "@smithy/middleware-stack": "^3.0.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/types": "^3.0.0", - "@smithy/util-stream": "^3.0.1", - "tslib": "^2.6.2" - } - }, - "@smithy/types": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.0.0.tgz", - "integrity": "sha512-VvWuQk2RKFuOr98gFhjca7fkBS+xLLURT8bUjk5XQoV0ZLm7WPwWPPY3/AwzTLuUBDeoKDCthfe1AsTUWaSEhw==", - "requires": { - "tslib": "^2.6.2" - } - }, - "@smithy/url-parser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-3.0.0.tgz", - "integrity": "sha512-2XLazFgUu+YOGHtWihB3FSLAfCUajVfNBXGGYjOaVKjLAuAxx3pSBY3hBgLzIgB17haf59gOG3imKqTy8mcrjw==", - "requires": { - "@smithy/querystring-parser": "^3.0.0", - "@smithy/types": "^3.0.0", - "tslib": "^2.6.2" - } - }, - "@smithy/util-base64": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-3.0.0.tgz", - "integrity": "sha512-Kxvoh5Qtt0CDsfajiZOCpJxgtPHXOKwmM+Zy4waD43UoEMA+qPxxa98aE/7ZhdnBFZFXMOiBR5xbcaMhLtznQQ==", - "requires": { - "@smithy/util-buffer-from": "^3.0.0", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" - } - }, - "@smithy/util-body-length-browser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-3.0.0.tgz", - "integrity": "sha512-cbjJs2A1mLYmqmyVl80uoLTJhAcfzMOyPgjwAYusWKMdLeNtzmMz9YxNl3/jRLoxSS3wkqkf0jwNdtXWtyEBaQ==", - "requires": { - "tslib": "^2.6.2" - } - }, - "@smithy/util-body-length-node": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-3.0.0.tgz", - "integrity": "sha512-Tj7pZ4bUloNUP6PzwhN7K386tmSmEET9QtQg0TgdNOnxhZvCssHji+oZTUIuzxECRfG8rdm2PMw2WCFs6eIYkA==", - "requires": { - "tslib": "^2.6.2" - } - }, - "@smithy/util-buffer-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", - "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", - "requires": { - "@smithy/is-array-buffer": "^3.0.0", - "tslib": "^2.6.2" - } - }, - "@smithy/util-config-provider": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-3.0.0.tgz", - "integrity": "sha512-pbjk4s0fwq3Di/ANL+rCvJMKM5bzAQdE5S/6RL5NXgMExFAi6UgQMPOm5yPaIWPpr+EOXKXRonJ3FoxKf4mCJQ==", - "requires": { - "tslib": "^2.6.2" - } - }, - "@smithy/util-defaults-mode-browser": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.1.tgz", - "integrity": "sha512-nW5kEzdJn1Bn5TF+gOPHh2rcPli8JU9vSSXLbfg7uPnfR1TMRQqs9zlYRhIb87NeSxIbpdXOI94tvXSy+fvDYg==", - "requires": { - "@smithy/property-provider": "^3.0.0", - "@smithy/smithy-client": "^3.0.1", - "@smithy/types": "^3.0.0", - "bowser": "^2.11.0", - "tslib": "^2.6.2" - } - }, - "@smithy/util-defaults-mode-node": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.1.tgz", - "integrity": "sha512-TFk+Qb+elLc/MOhtSp+50fstyfZ6avQbgH2d96xUBpeScu+Al9elxv+UFAjaTHe0HQe5n+wem8ZLpXvU8lwV6Q==", - "requires": { - "@smithy/config-resolver": "^3.0.0", - "@smithy/credential-provider-imds": "^3.0.0", - "@smithy/node-config-provider": "^3.0.0", - "@smithy/property-provider": "^3.0.0", - "@smithy/smithy-client": "^3.0.1", - "@smithy/types": "^3.0.0", - "tslib": "^2.6.2" - } - }, - "@smithy/util-endpoints": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-2.0.0.tgz", - "integrity": "sha512-+exaXzEY3DNt2qtA2OtRNSDlVrE4p32j1JSsQkzA5AdP0YtJNjkYbYhJxkFmPYcjI1abuwopOZCwUmv682QkiQ==", - "requires": { - "@smithy/node-config-provider": "^3.0.0", - "@smithy/types": "^3.0.0", - "tslib": "^2.6.2" - } - }, - "@smithy/util-hex-encoding": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-3.0.0.tgz", - "integrity": "sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ==", - "requires": { - "tslib": "^2.6.2" - } - }, - "@smithy/util-middleware": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-3.0.0.tgz", - "integrity": "sha512-q5ITdOnV2pXHSVDnKWrwgSNTDBAMHLptFE07ua/5Ty5WJ11bvr0vk2a7agu7qRhrCFRQlno5u3CneU5EELK+DQ==", - "requires": { - "@smithy/types": "^3.0.0", - "tslib": "^2.6.2" - } - }, - "@smithy/util-retry": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-3.0.0.tgz", - "integrity": "sha512-nK99bvJiziGv/UOKJlDvFF45F00WgPLKVIGUfAK+mDhzVN2hb/S33uW2Tlhg5PVBoqY7tDVqL0zmu4OxAHgo9g==", - "requires": { - "@smithy/service-error-classification": "^3.0.0", - "@smithy/types": "^3.0.0", - "tslib": "^2.6.2" - } - }, - "@smithy/util-stream": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-3.0.1.tgz", - "integrity": "sha512-7F7VNNhAsfMRA8I986YdOY5fE0/T1/ZjFF6OLsqkvQVNP3vZ/szYDfGCyphb7ioA09r32K/0qbSFfNFU68aSzA==", - "requires": { - "@smithy/fetch-http-handler": "^3.0.1", - "@smithy/node-http-handler": "^3.0.0", - "@smithy/types": "^3.0.0", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-buffer-from": "^3.0.0", - "@smithy/util-hex-encoding": "^3.0.0", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" - } - }, - "@smithy/util-uri-escape": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-3.0.0.tgz", - "integrity": "sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg==", - "requires": { - "tslib": "^2.6.2" - } - }, - "@smithy/util-utf8": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", - "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", - "requires": { - "@smithy/util-buffer-from": "^3.0.0", - "tslib": "^2.6.2" - } - }, - "@smithy/util-waiter": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-3.0.0.tgz", - "integrity": "sha512-+fEXJxGDLCoqRKVSmo0auGxaqbiCo+8oph+4auefYjaNxjOLKSY2MxVQfRzo65PaZv4fr+5lWg+au7vSuJJ/zw==", - "requires": { - "@smithy/abort-controller": "^3.0.0", - "@smithy/types": "^3.0.0", - "tslib": "^2.6.2" - } - }, - "@types/babel__core": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", - "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", - "dev": true, - "requires": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "@types/babel__generator": { - "version": "7.6.8", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", - "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@types/babel__template": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", - "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", - "dev": true, - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@types/babel__traverse": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.5.tgz", - "integrity": "sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==", - "dev": true, - "requires": { - "@babel/types": "^7.20.7" - } - }, - "@types/graceful-fs": { - "version": "4.1.9", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", - "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/istanbul-lib-coverage": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", - "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", - "dev": true - }, - "@types/istanbul-lib-report": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", - "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*" - } - }, - "@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "dev": true, - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "@types/node": { - "version": "20.11.24", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.24.tgz", - "integrity": "sha512-Kza43ewS3xoLgCEpQrsT+xRo/EJej1y0kVYGiLFE1NEODXGzTfwiC6tXTLMQskn1X4/Rjlh0MQUvx9W+L9long==", - "dev": true, - "requires": { - "undici-types": "~5.26.4" - } - }, - "@types/node-forge": { - "version": "1.3.11", - "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz", - "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/stack-utils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", - "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", - "dev": true - }, - "@types/yargs": { - "version": "17.0.32", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", - "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "@types/yargs-parser": { - "version": "21.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", - "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", - "dev": true - }, - "acorn": { - "version": "8.11.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", - "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", - "dev": true - }, - "acorn-walk": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", - "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==", - "dev": true - }, - "ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "requires": { - "type-fest": "^0.21.3" - } - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "as-table": { - "version": "1.0.55", - "resolved": "https://registry.npmjs.org/as-table/-/as-table-1.0.55.tgz", - "integrity": "sha512-xvsWESUJn0JN421Xb9MQw6AsMHRCUknCe0Wjlxvjud80mU4E6hQf1A6NzQKcYNmYw62MfzEtXc+badstZP3JpQ==", - "dev": true, - "requires": { - "printable-characters": "^1.0.42" - } - }, - "asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", - "dev": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true - }, - "babel-jest": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", - "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", - "dev": true, - "requires": { - "@jest/transform": "^29.7.0", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^29.6.3", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "slash": "^3.0.0" - } - }, - "babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - }, - "dependencies": { - "istanbul-lib-instrument": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", - "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", - "dev": true, - "requires": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - } - } - } - }, - "babel-plugin-jest-hoist": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", - "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", - "dev": true, - "requires": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.1.14", - "@types/babel__traverse": "^7.0.6" - } - }, - "babel-preset-current-node-syntax": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", - "dev": true, - "requires": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" - } - }, - "babel-preset-jest": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", - "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", - "dev": true, - "requires": { - "babel-plugin-jest-hoist": "^29.6.3", - "babel-preset-current-node-syntax": "^1.0.0" - } - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true - }, - "blake3-wasm": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/blake3-wasm/-/blake3-wasm-2.1.5.tgz", - "integrity": "sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g==", - "dev": true - }, - "bowser": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", - "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==" - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "browserslist": { - "version": "4.23.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", - "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001587", - "electron-to-chromium": "^1.4.668", - "node-releases": "^2.0.14", - "update-browserslist-db": "^1.0.13" - } - }, - "bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dev": true, - "requires": { - "node-int64": "^0.4.0" - } - }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", - "dev": true, - "requires": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "caniuse-lite": { - "version": "1.0.30001594", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001594.tgz", - "integrity": "sha512-VblSX6nYqyJVs8DKFMldE2IVCJjZ225LW00ydtUWwh5hk9IfkTOffO6r8gJNsH0qqqeAF8KrbMYA2VEwTlGW5g==", - "dev": true - }, - "capnp-ts": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/capnp-ts/-/capnp-ts-0.7.0.tgz", - "integrity": "sha512-XKxXAC3HVPv7r674zP0VC3RTXz+/JKhfyw94ljvF80yynK6VkTnqE3jMuN8b3dUVmmc43TjyxjW4KTsmB3c86g==", - "dev": true, - "requires": { - "debug": "^4.3.1", - "tslib": "^2.2.0" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", - "dev": true - }, - "chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "dev": true, - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - } - }, - "ci-info": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", - "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", - "dev": true - }, - "cjs-module-lexer": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", - "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==", - "dev": true - }, - "cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - } - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", - "dev": true - }, - "collect-v8-coverage": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", - "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", - "dev": true - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "component-emitter": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz", - "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true - }, - "cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", - "dev": true - }, - "cookiejar": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz", - "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==", - "dev": true - }, - "create-jest": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", - "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", - "dev": true, - "requires": { - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-config": "^29.7.0", - "jest-util": "^29.7.0", - "prompts": "^2.0.1" - } - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "data-uri-to-buffer": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-2.0.2.tgz", - "integrity": "sha512-ND9qDTLc6diwj+Xe5cdAgVTbLVdXbtxTJRXRhli8Mowuaan+0EJOtdqJ0QCHNSSPyoXGx9HX2/VMnKeC34AChA==", - "dev": true - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "dedent": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz", - "integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==", - "dev": true, - "requires": {} - }, - "deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "dev": true - }, - "define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "dev": true, - "requires": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true - }, - "detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", - "dev": true - }, - "dezalgo": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", - "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", - "dev": true, - "requires": { - "asap": "^2.0.0", - "wrappy": "1" - } - }, - "diff-sequences": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", - "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", - "dev": true - }, - "electron-to-chromium": { - "version": "1.4.693", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.693.tgz", - "integrity": "sha512-/if4Ueg0GUQlhCrW2ZlXwDAm40ipuKo+OgeHInlL8sbjt+hzISxZK949fZeJaVsheamrzANXvw1zQTvbxTvSHw==", - "dev": true - }, - "emittery": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", - "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", - "dev": true, - "requires": { - "get-intrinsic": "^1.2.4" - } - }, - "es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "dev": true - }, - "esbuild": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.6.tgz", - "integrity": "sha512-Xl7dntjA2OEIvpr9j0DVxxnog2fyTGnyVoQXAMQI6eR3mf9zCQds7VIKUDCotDgE/p4ncTgeRqgX8t5d6oP4Gw==", - "dev": true, - "requires": { - "@esbuild/android-arm": "0.19.6", - "@esbuild/android-arm64": "0.19.6", - "@esbuild/android-x64": "0.19.6", - "@esbuild/darwin-arm64": "0.19.6", - "@esbuild/darwin-x64": "0.19.6", - "@esbuild/freebsd-arm64": "0.19.6", - "@esbuild/freebsd-x64": "0.19.6", - "@esbuild/linux-arm": "0.19.6", - "@esbuild/linux-arm64": "0.19.6", - "@esbuild/linux-ia32": "0.19.6", - "@esbuild/linux-loong64": "0.19.6", - "@esbuild/linux-mips64el": "0.19.6", - "@esbuild/linux-ppc64": "0.19.6", - "@esbuild/linux-riscv64": "0.19.6", - "@esbuild/linux-s390x": "0.19.6", - "@esbuild/linux-x64": "0.19.6", - "@esbuild/netbsd-x64": "0.19.6", - "@esbuild/openbsd-x64": "0.19.6", - "@esbuild/sunos-x64": "0.19.6", - "@esbuild/win32-arm64": "0.19.6", - "@esbuild/win32-ia32": "0.19.6", - "@esbuild/win32-x64": "0.19.6" - } - }, - "escalade": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", - "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", - "dev": true - }, - "escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "estree-walker": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", - "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", - "dev": true - }, - "execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - } - }, - "exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", - "dev": true - }, - "exit-hook": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-2.2.1.tgz", - "integrity": "sha512-eNTPlAD67BmP31LDINZ3U7HSF8l57TxOY2PmBJ1shpCvpnxBF93mWCE8YHBnXs8qiUZJc9WDcWIeC3a2HIAMfw==", - "dev": true - }, - "expect": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", - "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", - "dev": true, - "requires": { - "@jest/expect-utils": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0" - } - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "fast-safe-stringify": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", - "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", - "dev": true - }, - "fast-xml-parser": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.2.5.tgz", - "integrity": "sha512-B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g==", - "requires": { - "strnum": "^1.0.5" - } - }, - "fb-watchman": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", - "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", - "dev": true, - "requires": { - "bser": "2.1.1" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - }, - "formidable": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/formidable/-/formidable-2.1.2.tgz", - "integrity": "sha512-CM3GuJ57US06mlpQ47YcunuUZ9jpm8Vx+P2CGt2j7HpgkKZO/DJYQ0Bobim8G6PFQmK5lOqOOdUXboU+h73A4g==", - "dev": true, - "requires": { - "dezalgo": "^1.0.4", - "hexoid": "^1.0.0", - "once": "^1.4.0", - "qs": "^6.11.0" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "optional": true - }, - "function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "dev": true - }, - "gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", - "dev": true, - "requires": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" - } - }, - "get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true - }, - "get-source": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/get-source/-/get-source-2.0.12.tgz", - "integrity": "sha512-X5+4+iD+HoSeEED+uwrQ07BOQr0kEDFMVqqpBuI+RaZBpBpHCuXxo70bjar6f0b0u/DQJsJ7ssurpP0V60Az+w==", - "dev": true, - "requires": { - "data-uri-to-buffer": "^2.0.0", - "source-map": "^0.6.1" - } - }, - "get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true - }, - "gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.3" - } - }, - "graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "dev": true, - "requires": { - "es-define-property": "^1.0.0" - } - }, - "has-proto": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", - "dev": true - }, - "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true - }, - "hasown": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.1.tgz", - "integrity": "sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==", - "dev": true, - "requires": { - "function-bind": "^1.1.2" - } - }, - "hexoid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz", - "integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==", - "dev": true - }, - "html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, - "human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true - }, - "import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", - "dev": true, - "requires": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-core-module": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", - "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", - "dev": true, - "requires": { - "hasown": "^2.0.0" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "dev": true - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "istanbul-lib-coverage": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", - "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", - "dev": true - }, - "istanbul-lib-instrument": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.2.tgz", - "integrity": "sha512-1WUsZ9R1lA0HtBSohTkm39WTPlNKSJ5iFk7UwqXkBLoHQT+hfqPsfsTDVuZdKGaBwn7din9bS7SsnoAr943hvw==", - "dev": true, - "requires": { - "@babel/core": "^7.23.9", - "@babel/parser": "^7.23.9", - "@istanbuljs/schema": "^0.1.3", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^7.5.4" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } - }, - "istanbul-lib-report": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", - "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", - "dev": true, - "requires": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^4.0.0", - "supports-color": "^7.1.0" - } - }, - "istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dev": true, - "requires": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - } - }, - "istanbul-reports": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", - "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", - "dev": true, - "requires": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - } - }, - "jest": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", - "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", - "dev": true, - "requires": { - "@jest/core": "^29.7.0", - "@jest/types": "^29.6.3", - "import-local": "^3.0.2", - "jest-cli": "^29.7.0" - } - }, - "jest-changed-files": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", - "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", - "dev": true, - "requires": { - "execa": "^5.0.0", - "jest-util": "^29.7.0", - "p-limit": "^3.1.0" - } - }, - "jest-circus": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", - "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", - "dev": true, - "requires": { - "@jest/environment": "^29.7.0", - "@jest/expect": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^1.0.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^29.7.0", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", - "p-limit": "^3.1.0", - "pretty-format": "^29.7.0", - "pure-rand": "^6.0.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - } - }, - "jest-cli": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", - "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", - "dev": true, - "requires": { - "@jest/core": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "create-jest": "^29.7.0", - "exit": "^0.1.2", - "import-local": "^3.0.2", - "jest-config": "^29.7.0", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "yargs": "^17.3.1" - } - }, - "jest-config": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", - "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", - "dev": true, - "requires": { - "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^29.7.0", - "@jest/types": "^29.6.3", - "babel-jest": "^29.7.0", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-circus": "^29.7.0", - "jest-environment-node": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-runner": "^29.7.0", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "micromatch": "^4.0.4", - "parse-json": "^5.2.0", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" - } - }, - "jest-diff": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", - "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "diff-sequences": "^29.6.3", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" - } - }, - "jest-docblock": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", - "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", - "dev": true, - "requires": { - "detect-newline": "^3.0.0" - } - }, - "jest-each": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", - "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", - "dev": true, - "requires": { - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "jest-get-type": "^29.6.3", - "jest-util": "^29.7.0", - "pretty-format": "^29.7.0" - } - }, - "jest-environment-node": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", - "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", - "dev": true, - "requires": { - "@jest/environment": "^29.7.0", - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0" - } - }, - "jest-get-type": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", - "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", - "dev": true - }, - "jest-haste-map": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", - "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", - "dev": true, - "requires": { - "@jest/types": "^29.6.3", - "@types/graceful-fs": "^4.1.3", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "fsevents": "^2.3.2", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^29.6.3", - "jest-util": "^29.7.0", - "jest-worker": "^29.7.0", - "micromatch": "^4.0.4", - "walker": "^1.0.8" - } - }, - "jest-leak-detector": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", - "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", - "dev": true, - "requires": { - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" - } - }, - "jest-matcher-utils": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", - "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "jest-diff": "^29.7.0", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" - } - }, - "jest-message-util": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", - "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.6.3", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - } - }, - "jest-mock": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", - "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", - "dev": true, - "requires": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-util": "^29.7.0" - } - }, - "jest-pnp-resolver": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", - "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", - "dev": true, - "requires": {} - }, - "jest-regex-util": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", - "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", - "dev": true - }, - "jest-resolve": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", - "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "resolve": "^1.20.0", - "resolve.exports": "^2.0.0", - "slash": "^3.0.0" - } - }, - "jest-resolve-dependencies": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", - "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", - "dev": true, - "requires": { - "jest-regex-util": "^29.6.3", - "jest-snapshot": "^29.7.0" - } - }, - "jest-runner": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", - "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", - "dev": true, - "requires": { - "@jest/console": "^29.7.0", - "@jest/environment": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "graceful-fs": "^4.2.9", - "jest-docblock": "^29.7.0", - "jest-environment-node": "^29.7.0", - "jest-haste-map": "^29.7.0", - "jest-leak-detector": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-resolve": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-util": "^29.7.0", - "jest-watcher": "^29.7.0", - "jest-worker": "^29.7.0", - "p-limit": "^3.1.0", - "source-map-support": "0.5.13" - } - }, - "jest-runtime": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", - "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", - "dev": true, - "requires": { - "@jest/environment": "^29.7.0", - "@jest/fake-timers": "^29.7.0", - "@jest/globals": "^29.7.0", - "@jest/source-map": "^29.6.3", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-mock": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" - } - }, - "jest-snapshot": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", - "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", - "dev": true, - "requires": { - "@babel/core": "^7.11.6", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-jsx": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/types": "^7.3.3", - "@jest/expect-utils": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^29.7.0", - "graceful-fs": "^4.2.9", - "jest-diff": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "natural-compare": "^1.4.0", - "pretty-format": "^29.7.0", - "semver": "^7.5.3" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } - }, - "jest-util": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", - "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", - "dev": true, - "requires": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - } - }, - "jest-validate": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", - "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", - "dev": true, - "requires": { - "@jest/types": "^29.6.3", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^29.6.3", - "leven": "^3.1.0", - "pretty-format": "^29.7.0" - }, - "dependencies": { - "camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true - } - } - }, - "jest-watcher": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", - "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", - "dev": true, - "requires": { - "@jest/test-result": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "jest-util": "^29.7.0", - "string-length": "^4.0.1" - } - }, - "jest-worker": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", - "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", - "dev": true, - "requires": { - "@types/node": "*", - "jest-util": "^29.7.0", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "dependencies": { - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, - "json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true - }, - "kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true - }, - "leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true - }, - "lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "requires": { - "yallist": "^3.0.2" - } - }, - "magic-string": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", - "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", - "dev": true, - "requires": { - "sourcemap-codec": "^1.4.8" - } - }, - "make-dir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", - "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", - "dev": true, - "requires": { - "semver": "^7.5.3" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } - }, - "makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "dev": true, - "requires": { - "tmpl": "1.0.5" - } - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "dev": true - }, - "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - } - }, - "mime": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", - "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", - "dev": true - }, - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true - }, - "mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, - "requires": { - "mime-db": "1.52.0" - } - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - }, - "miniflare": { - "version": "3.20240223.1", - "resolved": "https://registry.npmjs.org/miniflare/-/miniflare-3.20240223.1.tgz", - "integrity": "sha512-5pP4Kml9JtPpCMhfVkTyzNen08bKl2swxZ6i+gYzQTo/Rcjk6neLqgVGG64JFeJFKzdGEczk5Hnwl9U04OGRiw==", - "dev": true, - "requires": { - "@cspotcode/source-map-support": "0.8.1", - "acorn": "^8.8.0", - "acorn-walk": "^8.2.0", - "capnp-ts": "^0.7.0", - "exit-hook": "^2.2.1", - "glob-to-regexp": "^0.4.1", - "stoppable": "^1.1.0", - "undici": "^5.28.2", - "workerd": "1.20240223.1", - "ws": "^8.11.0", - "youch": "^3.2.2", - "zod": "^3.20.6" - } - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "mustache": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz", - "integrity": "sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==", - "dev": true - }, - "nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", - "dev": true - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", - "dev": true - }, - "node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", - "dev": true - }, - "node-releases": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", - "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", - "dev": true - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "requires": { - "path-key": "^3.0.0" - } - }, - "object-inspect": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", - "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", - "dev": true - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - }, - "dependencies": { - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - } - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "path-to-regexp": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.1.tgz", - "integrity": "sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==", - "dev": true - }, - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true - }, - "pirates": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", - "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", - "dev": true - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } - }, - "prettier": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.1.0.tgz", - "integrity": "sha512-TQLvXjq5IAibjh8EpBIkNKxO749UEWABoiIZehEPiY4GNpVdhaFKqSTu+QrlU6D2dPAfubRmtJTi4K4YkQ5eXw==", - "dev": true - }, - "pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", - "dev": true, - "requires": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true - } - } - }, - "printable-characters": { - "version": "1.0.42", - "resolved": "https://registry.npmjs.org/printable-characters/-/printable-characters-1.0.42.tgz", - "integrity": "sha512-dKp+C4iXWK4vVYZmYSd0KBH5F/h1HoZRsbJ82AVKRO3PEo8L4lBS/vLwhVtpwwuYcoIsVY+1JYKR268yn480uQ==", - "dev": true - }, - "prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dev": true, - "requires": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - } - }, - "pure-rand": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.4.tgz", - "integrity": "sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==", - "dev": true - }, - "qs": { - "version": "6.11.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz", - "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==", - "dev": true, - "requires": { - "side-channel": "^1.0.4" - } - }, - "react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true - }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "requires": { - "picomatch": "^2.2.1" - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true - }, - "resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", - "dev": true, - "requires": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "requires": { - "resolve-from": "^5.0.0" - } - }, - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true - }, - "resolve.exports": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", - "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", - "dev": true - }, - "rollup-plugin-inject": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rollup-plugin-inject/-/rollup-plugin-inject-3.0.2.tgz", - "integrity": "sha512-ptg9PQwzs3orn4jkgXJ74bfs5vYz1NCZlSQMBUA0wKcGp5i5pA1AO3fOUEte8enhGUC+iapTCzEWw2jEFFUO/w==", - "dev": true, - "requires": { - "estree-walker": "^0.6.1", - "magic-string": "^0.25.3", - "rollup-pluginutils": "^2.8.1" - } - }, - "rollup-plugin-node-polyfills": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/rollup-plugin-node-polyfills/-/rollup-plugin-node-polyfills-0.2.1.tgz", - "integrity": "sha512-4kCrKPTJ6sK4/gLL/U5QzVT8cxJcofO0OU74tnB19F40cmuAKSzH5/siithxlofFEjwvw1YAhPmbvGNA6jEroA==", - "dev": true, - "requires": { - "rollup-plugin-inject": "^3.0.0" - } - }, - "rollup-pluginutils": { - "version": "2.8.2", - "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", - "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", - "dev": true, - "requires": { - "estree-walker": "^0.6.1" - } - }, - "selfsigned": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", - "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", - "dev": true, - "requires": { - "@types/node-forge": "^1.3.0", - "node-forge": "^1" - } - }, - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true - }, - "set-function-length": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.1.tgz", - "integrity": "sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==", - "dev": true, - "requires": { - "define-data-property": "^1.1.2", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.3", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.1" - } - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "side-channel": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", - "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", - "dev": true, - "requires": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "object-inspect": "^1.13.1" - } - }, - "signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "source-map-support": { - "version": "0.5.13", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", - "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "sourcemap-codec": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", - "dev": true - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true - }, - "stack-utils": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", - "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", - "dev": true, - "requires": { - "escape-string-regexp": "^2.0.0" - } - }, - "stacktracey": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/stacktracey/-/stacktracey-2.1.8.tgz", - "integrity": "sha512-Kpij9riA+UNg7TnphqjH7/CzctQ/owJGNbFkfEeve4Z4uxT5+JapVLFXcsurIfN34gnTWZNJ/f7NMG0E8JDzTw==", - "dev": true, - "requires": { - "as-table": "^1.0.36", - "get-source": "^2.0.12" - } - }, - "stoppable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/stoppable/-/stoppable-1.1.0.tgz", - "integrity": "sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==", - "dev": true - }, - "string-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "dev": true, - "requires": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - } - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true - }, - "strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true - }, - "strnum": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", - "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==" - }, - "superagent": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/superagent/-/superagent-8.1.2.tgz", - "integrity": "sha512-6WTxW1EB6yCxV5VFOIPQruWGHqc3yI7hEmZK6h+pyk69Lk/Ut7rLUY6W/ONF2MjBuGjvmMiIpsrVJ2vjrHlslA==", - "dev": true, - "requires": { - "component-emitter": "^1.3.0", - "cookiejar": "^2.1.4", - "debug": "^4.3.4", - "fast-safe-stringify": "^2.1.1", - "form-data": "^4.0.0", - "formidable": "^2.1.2", - "methods": "^1.1.2", - "mime": "2.6.0", - "qs": "^6.11.0", - "semver": "^7.3.8" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "mime": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", - "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", - "dev": true - }, - "semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } - }, - "supertest": { - "version": "6.3.4", - "resolved": "https://registry.npmjs.org/supertest/-/supertest-6.3.4.tgz", - "integrity": "sha512-erY3HFDG0dPnhw4U+udPfrzXa4xhSG+n4rxfRuZWCUvjFWwKl+OxWf/7zk50s84/fAAs7vf5QAb9uRa0cCykxw==", - "dev": true, - "requires": { - "methods": "^1.1.2", - "superagent": "^8.1.2" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true - }, - "test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "requires": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - } - }, - "tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - }, - "type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true - }, - "type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true - }, - "typescript": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", - "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", - "dev": true - }, - "undici": { - "version": "5.28.4", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.28.4.tgz", - "integrity": "sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==", - "dev": true, - "requires": { - "@fastify/busboy": "^2.0.0" - } - }, - "undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", - "dev": true - }, - "update-browserslist-db": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", - "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", - "dev": true, - "requires": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - } - }, - "uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==" - }, - "v8-to-istanbul": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz", - "integrity": "sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==", - "dev": true, - "requires": { - "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^2.0.0" - } - }, - "walker": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", - "dev": true, - "requires": { - "makeerror": "1.0.12" - } - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "workerd": { - "version": "1.20240223.1", - "resolved": "https://registry.npmjs.org/workerd/-/workerd-1.20240223.1.tgz", - "integrity": "sha512-Mo1fwdp6DLva4/fWdL09ZdYllkO45I4YpWG5PbF/YUGFlu2aMk24fmU6Pd6fo5/cWek4F+n3LmYEKKHfqjiJIA==", - "dev": true, - "requires": { - "@cloudflare/workerd-darwin-64": "1.20240223.1", - "@cloudflare/workerd-darwin-arm64": "1.20240223.1", - "@cloudflare/workerd-linux-64": "1.20240223.1", - "@cloudflare/workerd-linux-arm64": "1.20240223.1", - "@cloudflare/workerd-windows-64": "1.20240223.1" - } - }, - "wrangler": { - "version": "3.31.0", - "resolved": "https://registry.npmjs.org/wrangler/-/wrangler-3.31.0.tgz", - "integrity": "sha512-tanV8E8iD/REmWYkpmyDd/5lUFWBox85KCKRsPU/8biiHZH9VD3/RXJs6837TeSHAStfxV6EpF42U2OdU+trNg==", - "dev": true, - "requires": { - "@cloudflare/kv-asset-handler": "0.3.1", - "@esbuild-plugins/node-globals-polyfill": "^0.2.3", - "@esbuild-plugins/node-modules-polyfill": "^0.2.2", - "blake3-wasm": "^2.1.5", - "chokidar": "^3.5.3", - "esbuild": "0.17.19", - "fsevents": "~2.3.2", - "miniflare": "3.20240223.1", - "nanoid": "^3.3.3", - "path-to-regexp": "^6.2.0", - "resolve": "^1.22.8", - "resolve.exports": "^2.0.2", - "selfsigned": "^2.0.1", - "source-map": "0.6.1", - "xxhash-wasm": "^1.0.1" - }, - "dependencies": { - "@esbuild/android-arm": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz", - "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==", - "dev": true, - "optional": true - }, - "@esbuild/android-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz", - "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==", - "dev": true, - "optional": true - }, - "@esbuild/android-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.19.tgz", - "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==", - "dev": true, - "optional": true - }, - "@esbuild/darwin-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz", - "integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==", - "dev": true, - "optional": true - }, - "@esbuild/darwin-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz", - "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==", - "dev": true, - "optional": true - }, - "@esbuild/freebsd-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz", - "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==", - "dev": true, - "optional": true - }, - "@esbuild/freebsd-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz", - "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==", - "dev": true, - "optional": true - }, - "@esbuild/linux-arm": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz", - "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==", - "dev": true, - "optional": true - }, - "@esbuild/linux-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz", - "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==", - "dev": true, - "optional": true - }, - "@esbuild/linux-ia32": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz", - "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==", - "dev": true, - "optional": true - }, - "@esbuild/linux-loong64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz", - "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==", - "dev": true, - "optional": true - }, - "@esbuild/linux-mips64el": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz", - "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==", - "dev": true, - "optional": true - }, - "@esbuild/linux-ppc64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz", - "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==", - "dev": true, - "optional": true - }, - "@esbuild/linux-riscv64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz", - "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==", - "dev": true, - "optional": true - }, - "@esbuild/linux-s390x": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz", - "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==", - "dev": true, - "optional": true - }, - "@esbuild/linux-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz", - "integrity": "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==", - "dev": true, - "optional": true - }, - "@esbuild/netbsd-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz", - "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==", - "dev": true, - "optional": true - }, - "@esbuild/openbsd-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz", - "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==", - "dev": true, - "optional": true - }, - "@esbuild/sunos-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz", - "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==", - "dev": true, - "optional": true - }, - "@esbuild/win32-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz", - "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==", - "dev": true, - "optional": true - }, - "@esbuild/win32-ia32": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz", - "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==", - "dev": true, - "optional": true - }, - "@esbuild/win32-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz", - "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==", - "dev": true, - "optional": true - }, - "esbuild": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.19.tgz", - "integrity": "sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==", - "dev": true, - "requires": { - "@esbuild/android-arm": "0.17.19", - "@esbuild/android-arm64": "0.17.19", - "@esbuild/android-x64": "0.17.19", - "@esbuild/darwin-arm64": "0.17.19", - "@esbuild/darwin-x64": "0.17.19", - "@esbuild/freebsd-arm64": "0.17.19", - "@esbuild/freebsd-x64": "0.17.19", - "@esbuild/linux-arm": "0.17.19", - "@esbuild/linux-arm64": "0.17.19", - "@esbuild/linux-ia32": "0.17.19", - "@esbuild/linux-loong64": "0.17.19", - "@esbuild/linux-mips64el": "0.17.19", - "@esbuild/linux-ppc64": "0.17.19", - "@esbuild/linux-riscv64": "0.17.19", - "@esbuild/linux-s390x": "0.17.19", - "@esbuild/linux-x64": "0.17.19", - "@esbuild/netbsd-x64": "0.17.19", - "@esbuild/openbsd-x64": "0.17.19", - "@esbuild/sunos-x64": "0.17.19", - "@esbuild/win32-arm64": "0.17.19", - "@esbuild/win32-ia32": "0.17.19", - "@esbuild/win32-x64": "0.17.19" - } - } - } - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "write-file-atomic": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", - "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" - } - }, - "ws": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz", - "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==", - "dev": true, - "requires": {} - }, - "xxhash-wasm": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/xxhash-wasm/-/xxhash-wasm-1.0.2.tgz", - "integrity": "sha512-ibF0Or+FivM9lNrg+HGJfVX8WJqgo+kCLDc4vx6xMeTce7Aj+DLttKbxxRR/gNLSAelRc1omAPlJ77N/Jem07A==", - "dev": true - }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - }, - "yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dev": true, - "requires": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - } - }, - "yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true - }, - "yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true - }, - "youch": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/youch/-/youch-3.3.3.tgz", - "integrity": "sha512-qSFXUk3UZBLfggAW3dJKg0BMblG5biqSF8M34E06o5CSsZtH92u9Hqmj2RzGiHDi64fhe83+4tENFP2DB6t6ZA==", - "dev": true, - "requires": { - "cookie": "^0.5.0", - "mustache": "^4.2.0", - "stacktracey": "^2.1.8" - } - }, - "zod": { - "version": "3.22.4", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.22.4.tgz", - "integrity": "sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==", - "dev": true - } - } -} diff --git a/package.json b/package.json index 0ab9295..181d135 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "lowstorage", - "version": "0.0.5", + "version": "2.0.0", "description": "Zero-dependency, simple pseudo-database on Cloudflare R2, inspired by lowdb.", "keywords": [ "storage", @@ -9,10 +9,18 @@ "json", "lowdb", "edge", - "s3", + "S3", "aws", "R2", - "cloudflare" + "cloudflare", + "lambda", + "worker", + "wasabi", + "r2-s3", + "r2-worker", + "digitalocean", + "minio", + "minio-s3" ], "main": "lib/lowstorage.js", "type": "module", @@ -26,13 +34,13 @@ }, "scripts": { "test": "npm run build && jest --config=jest.config.json", - "build": "esbuild --bundle --minify --platform=node --target=node16 --format=esm --outfile=lib/lowstorage.js src/lowstorage.js", + "build": "esbuild --bundle --minify --sourcemap --platform=node --target=node19 --format=esm --outfile=lib/lowstorage.js src/lowstorage.js", "dev": "node src/lowstorage.js" }, "license": "MIT", "author": "Peter Jensen ", "engines": { - "node": ">=16" + "node": ">=18.12.0" }, "jest": { "collectCoverageFrom": [ @@ -40,14 +48,17 @@ ] }, "devDependencies": { - "esbuild": "^0.19.6", + "avro-js": "^1.11.3", + "esbuild": "^0.19.12", "jest": "^29.7.0", - "prettier": "^3.1.0", + "prettier": "^3.3.2", "supertest": "^6.3.4", - "typescript": "^5.3.3", - "wrangler": "^3.31.0" + "typescript": "^5.5.2", + "ultralight-s3": "^0.0.3", + "wrangler": "^3.62.0" }, "dependencies": { - "@aws-sdk/client-s3": "^3.583.0" + "avro-js": "^1.11.3", + "ultralight-s3": "^0.0.2" } } diff --git a/src/helpers.js b/src/helpers.js new file mode 100644 index 0000000..1fbe99c --- /dev/null +++ b/src/helpers.js @@ -0,0 +1,62 @@ +'use strict'; + +export const matchesQuery = (document, query) => { + return Object.keys(query).every((key) => document[key] === query[key]); +}; + +export const generateUUID = () => { + if (typeof crypto !== 'undefined' && crypto.randomUUID) { + return crypto.randomUUID(); + } else { + // Fallback for environments without crypto.randomUUID + return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) { + var r = (Math.random() * 16) | 0, + v = c === 'x' ? r : (r & 0x3) | 0x8; + return v.toString(16); + }); + } +}; + +const _getAvroType = (value, name = 'SubAutoGenerated') => { + switch (typeof value) { + case 'string': + if (_isUUID(value)) { + return { + type: 'fixed', + name: 'UUID', + size: 16, + logicalType: 'uuid', + }; + } + return 'string'; + case 'number': + return Number.isInteger(value) ? 'int' : 'float'; + case 'boolean': + return 'boolean'; + case 'object': + if (value === null) return 'null'; + if (Array.isArray(value)) return { type: 'array', items: _getAvroType(value[0]) }; + return inferAvroType(value, name); + default: + return 'string'; // Default to string for unknown types + } +}; + +export const inferAvroType = (data, typeName = 'AutoGenerated') => { + if (Array.isArray(data)) { + data = data[0]; + } + const fields = Object.entries(data).map(([name, value]) => { + return { name, type: _getAvroType(value, `${typeName}.${name}`) }; + }); + return { + type: 'record', + name: typeName, + fields: fields, + }; +}; + +const _isUUID = (str) => { + const uuidV4Regex = /^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i; + return uuidV4Regex.test(str); +}; diff --git a/src/lowstorage.js b/src/lowstorage.js index ec5706d..37ee81d 100644 --- a/src/lowstorage.js +++ b/src/lowstorage.js @@ -1,129 +1,256 @@ 'use strict'; -import { S3Client, ListObjectsV2Command, GetObjectCommand, PutObjectCommand, DeleteObjectCommand } from '@aws-sdk/client-s3'; - -// const _checkArgs = (...args) => { -// for (const arg of args) { -// if (typeof arg !== 'object' || arg === null) { -// throw new Error('lowstorage: missing args or args not an object'); -// } -// } -// }; - -// const isAWS = !!(process.env.LAMBDA_TASK_ROOT || process.env.AWS_EXECUTION_ENV); -// const isNode = typeof process !== 'undefined' && process.versions != null && process.versions.node != null; -const _hasCrypto = typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function'; -const _generateUUID = !!_hasCrypto ? () => crypto.randomUUID() : () => import('node:crypto').then((module) => module.randomUUID()); - -const _matchesQuery = (document, query) => { - return Object.keys(query).every((key) => document[key] === query[key]); -}; - -const streamToString = (stream) => - new Promise((resolve, reject) => { - const chunks = []; - stream.on('data', (chunk) => chunks.push(chunk)); - stream.on('error', reject); - stream.on('end', () => resolve(Buffer.concat(chunks).toString('utf-8'))); - }); - -class S3Store { - constructor({ endPoint, region, useSSL, accessKeyId, secretAccessKey, bucketName }) { - this.client = new S3Client({ - endpoint: endPoint, - region: region, - credentials: { - accessKeyId: accessKeyId, - secretAccessKey: secretAccessKey, - }, - forcePathStyle: true, - }); - this.bucketName = bucketName; - } - - async get(key) { +import { S3 } from 'ultralight-s3'; +import avro from 'avro-js'; +import { matchesQuery, generateUUID, inferAvroType } from './helpers.js'; +import { Buffer } from 'safe-buffer'; + +const MODULE_NAME = 'lowstorage'; +const PROJECT_DIR_PREFIX = 'lowstorage/'; +const SCHEMA_SUFFIX = '.avro'; +const CHUNG_1MB = 1024 * 1024; +const CHUNG_5MB = 5 * CHUNG_1MB; + +class lowstorage { + constructor( + options = { + accessKeyId: undefined, + secretAccessKey: undefined, + endpoint: undefined, + bucketName: undefined, + region: 'auto', + logger: null, + }, + ) { + _checkArgs(options); + this._schemas = new Map(); + this._s3 = new S3(options); + } + + _checkArgs = (args) => { + const requiredFields = ['accessKeyId', 'secretAccessKey', 'endpoint', 'bucketName']; + for (const field of requiredFields) { + if (!args[field]) { + throw new Error(`${MODULE_NAME}: ${field} is required`); + } + } + }; + + async listCollections() { + const listed = await this._s3.list(PROJECT_DIR_PREFIX, '', 1000); + // fill the this._schemas map + for (const entry of listed) { + if (entry.key.endsWith(SCHEMA_SUFFIX)) { + const colName = entry.key.slice(PROJECT_DIR_PREFIX.length, -SCHEMA_SUFFIX.length); + const schema = await this._s3.get(entry.key); + this._schemas.set(colName, JSON.parse(schema)); + } + } + return this._schemas.keys(); + } + + async createCollection(colName, schema = undefined) { try { - const command = new GetObjectCommand({ - Bucket: this.bucketName, - Key: key, - }); - const response = await this.client.send(command); - const bodyContents = await streamToString(response.Body); - return JSON.parse(bodyContents); + if (colName === undefined || colName.trim() === '' || colName === null) { + throw new Error(`${MODULE_NAME}: Collection name is required`); + } + if (await this.collectionExists(colName)) { + throw new Error(`${MODULE_NAME}: Collection ${colName} already exists`); + } + if (schema) { + const avroType = avro.parse(schema); + this._schemas.set(colName, avroType); + } + return this.collection(colName, schema); } catch (error) { - if (error.name === 'NoSuchKey') { - return null; + throw new Error(`${MODULE_NAME}: ${error.message}`); + } + } + + async removeCollection(colName) { + try { + const exists = await this._s3.fileExists(`${PROJECT_DIR_PREFIX}${colName}${SCHEMA_SUFFIX}`); + if (exists) { + const resp = await this._s3.delete(`${PROJECT_DIR_PREFIX}${colName}${SCHEMA_SUFFIX}`); + if (resp.statusCode === 200) { + return true; + } + return false; } - throw error; + return true; + } catch (error) { + throw new Error(`${MODULE_NAME}: ${error.message}`); } } - async put(key, data) { - const command = new PutObjectCommand({ - Bucket: this.bucketName, - Key: key, - Body: data, - ContentType: 'application/json', - }); - await this.client.send(command); + async collectionExists(colName) { + try { + const exists = await this._s3.fileExists(`${PROJECT_DIR_PREFIX}${colName}${SCHEMA_SUFFIX}`); + return exists; + } catch (error) { + if (error.message.includes('Not Found')) { + return false; + } + throw new Error(`${MODULE_NAME}: ${error.message}`); + } } - async delete(key) { - const command = new DeleteObjectCommand({ - Bucket: this.bucketName, - Key: key, - }); - await this.client.send(command); + async updateCollectionSchema(colName, schema) { + try { + if (colName === undefined || colName.trim() === '' || colName === null) { + throw new Error(`${MODULE_NAME}: Collection name is required`); + } + // Check if collection exists + const exists = await this.collectionExists(colName); + if (!exists) { + throw new Error(`${MODULE_NAME}: Collection ${colName} does not exist`); + } + if (schema === undefined || schema === null) { + throw new Error(`${MODULE_NAME}: Schema is required`); + } + + const avroType = avro.parse(schema); + this._schemas.set(colName, avroType); + const resp = await this._s3.put(`${PROJECT_DIR_PREFIX}${colName}${SCHEMA_SUFFIX}`, JSON.stringify(schema)); + if (resp.statusCode === 200) { + return true; + } else { + throw new Error(`${MODULE_NAME}: Failed to update schema for collection ${colName}`); + } + } catch (error) { + throw new Error(`${MODULE_NAME}: ${error.message}`); + } } - async list(prefix = '') { - const command = new ListObjectsV2Command({ - Bucket: this.bucketName, - Prefix: prefix, - }); - const response = await this.client.send(command); - return response.Contents || []; + async collection(colName, schema = undefined) { + try { + if (colName === undefined || colName.trim() === '' || colName === null) { + throw new Error(`${MODULE_NAME}: Collection name is required`); + } + if (typeof schema === 'undefined') { + // Load schema if not in memory + if (this._schemas.has(colName)) { + return new Collection(colName, this._s3, this._schemas.get(colName)); + } + // check if schema file exists + const exists = await this._s3.fileExists(`${PROJECT_DIR_PREFIX}${colName}${SCHEMA_SUFFIX}`); + if (exists) { + const schemaContent = await this._s3.get(`${PROJECT_DIR_PREFIX}${colName}${SCHEMA_SUFFIX}`); + const avroType = avro.parse(schemaContent); + this._schemas.set(colName, avroType); + return new Collection(colName, this._s3, avroType); + } + return new Collection(colName, this._s3, undefined); + } + return new Collection(colName, this._s3, schema); + } catch (error) { + throw new Error(`${MODULE_NAME}: ${error.message}`); + } } } class Collection { - constructor(colName, store) { + constructor(colName, s3, avroType = undefined) { this._colName = colName; - this._store = store; + this._s3 = s3; + this._avroType = avroType; } - async _loadData() { - const data = await this._store.get(`${this._colName}/${this._colName}.json`); - return data || []; + async insert(doc, schema = undefined) { + try { + if (doc === undefined || doc === null) { + throw new Error(`${MODULE_NAME}: Document is required for insert`); + } + if (typeof doc !== 'object' && !Array.isArray(doc)) { + throw new Error(`${MODULE_NAME}: Document must be an object or an array`); + } + if (!Array.isArray(doc)) { + doc = [doc]; + } + const avroType = avro.parse(schema) || this._avroType || avro.parse(inferAvroType(doc)); + if (avroType === undefined) { + throw new Error(`${MODULE_NAME}: Schema is required - Pass a schema to the insert method`); + } + this._avroType = avroType; + const bufferData = await this._loadDataBuffer(); // load data from s3 + const data = bufferData.length > 0 ? this._avroType.fromBuffer(bufferData) : []; + for (let item of doc) { + if (typeof item !== 'object' || item === null) { + throw new Error('Invalid input: input must be an object or an array of objects'); + } + const valid = this._avroType.isValid(item); + if (!valid) { + throw new Error(`${MODULE_NAME}: Invalid document or schema`); + } + item._id = item._id || generateUUID(); + data.push(item); + } + const resp = await this._saveDataBuffer(this._avroType.toBuffer(data)); + if (resp) { + return doc; + } else { + throw new Error(`${MODULE_NAME}: Failed to insert document`); + } + } catch (error) { + throw new Error(`${MODULE_NAME}: ${error.message}`); + } } - async _saveData(data) { - const key = `${this._colName}/${this._colName}.json`; - await this._store.put(key, JSON.stringify(data)); + async _loadDataBuffer() { + try { + const KEY = `${PROJECT_DIR_PREFIX}${this._colName}${DATA_SUFFIX}`; + const CHUNK_SIZE = this._s3.getMaxRequestSizeInBytes() || CHUNG_5MB; + let firstData = await this._s3.get(KEY); + if (firstData.length < CHUNK_SIZE) { + return Buffer.from(firstData, 'utf8'); + } + let offset = CHUNK_SIZE; + let bufferArr = [Buffer.from(firstData, 'utf8')]; + let repeat = true; + while (repeat) { + const nextDataResponse = await this._s3.getResponse(KEY, false, offset, offset + CHUNK_SIZE); + const nextDataBody = await nextDataResponse.text(); + bufferArr.push(Buffer.from(nextDataBody, 'utf8')); + offset += CHUNG; + const contentLength = nextDataResponse.headers.get('content-length') || nextDataBody.length; + if (contentLength < CHUNK_SIZE) { + repeat = false; + } + } + return Buffer.concat(bufferArr); + } catch (error) { + if (error.toString().indexOf('status 404: Unknown - Not Found') > -1) { + return Buffer.from(''); + } + throw new Error(`${MODULE_NAME}: ${error.message}`); + } } - async insert(doc) { - if (!Array.isArray(doc)) { - doc = [doc]; - } - const data = await this._loadData(); - for (let item of doc) { - if (typeof item !== 'object' || item === null) { - throw new Error('Invalid input: input must be an object or an array of objects'); + async _saveDataBuffer(data) { + try { + const key = `${PROJECT_DIR_PREFIX}${this._colName}${DATA_SUFFIX}`; + const resp = await this._s3.put(key, data); + if (resp.statusCode === 200) { + return true; + } else { + throw new Error(`${MODULE_NAME}: Failed to save data`); } - item._id = item._id || _generateUUID(); - data.push(item); + } catch (error) { + throw new Error(`${MODULE_NAME}: ${error.message}`); } - await this._saveData(data); - return doc.length === 1 ? doc[0] : doc; } async find(query = {}, options = {}) { - const data = await this._loadData(); - const start = parseInt(options.skip, 10) || 0; - const end = parseInt(options.limit, 10) ? start + parseInt(options.limit, 10) : undefined; - const filteredData = data.filter((doc) => _matchesQuery(doc, query)).slice(start, end); - return filteredData; + try { + const bufferData = await this._loadDataBuffer(); // load data from s3 + const data = bufferData.length > 0 ? this._avroType.fromBuffer(bufferData) : []; + const start = parseInt(options.skip, 10) || 0; + const end = parseInt(options.limit, 10) ? start + parseInt(options.limit, 10) : undefined; + const filteredData = data.filter((doc) => matchesQuery(doc, query)).slice(start, end); + return filteredData; + } catch (error) { + throw new Error(`${MODULE_NAME}: ${error.message}`); + } } async findOne(query = {}) { @@ -131,70 +258,81 @@ class Collection { } async update(query = {}, update = {}) { - const data = await this._loadData(); - let updatedCount = 0; + try { + const bufferData = await this._loadDataBuffer(); // load data from s3 + const data = bufferData.length > 0 ? this._avroType.fromBuffer(bufferData) : []; + let updatedCount = 0; - for (let i = 0; i < data.length; i++) { - if (_matchesQuery(data[i], query)) { - Object.assign(data[i], update); - updatedCount++; + for (let i = 0; i < data.length; i++) { + if (matchesQuery(data[i], query)) { + Object.assign(data[i], update); + updatedCount++; + } } - } - if (updatedCount > 0) { - await this._saveData(data); + if (updatedCount > 0) { + const resp = await this._saveDataBuffer(this._avroType.toBuffer(data)); + if (resp) { + return updatedCount; + } + } + return 0; + } catch (error) { + throw new Error(`${MODULE_NAME}: ${error.message}`); } - - return updatedCount; } async updateOne(query = {}, update = {}) { - const data = await this._loadData(); - const docIndex = data.findIndex((doc) => _matchesQuery(doc, query)); + try { + const bufferData = await this._loadDataBuffer(); // load data from s3 + const data = bufferData.length > 0 ? this._avroType.fromBuffer(bufferData) : []; + const docIndex = data.findIndex((doc) => matchesQuery(doc, query)); - if (docIndex !== -1) { - Object.assign(data[docIndex], update); - await this._saveData(data); - return 1; + if (docIndex !== -1) { + Object.assign(data[docIndex], update); + const resp = await this._saveDataBuffer(this._avroType.toBuffer(data)); + if (resp) { + return 1; + } + } + return 0; + } catch (error) { + throw new Error(`${MODULE_NAME}: ${error.message}`); } - return 0; } async delete(query = {}) { - const data = await this._loadData(); - const initialLength = data.length; - const newData = data.filter((doc) => !_matchesQuery(doc, query)); - await this._saveData(newData); - return initialLength - newData.length; + try { + const bufferData = await this._loadDataBuffer(); // load data from s3 + const data = bufferData.length > 0 ? this._avroType.fromBuffer(bufferData) : []; + const initialLength = data.length; + const newData = data.filter((doc) => !matchesQuery(doc, query)); + const resp = await this._saveDataBuffer(this._avroType.toBuffer(newData)); + if (resp) { + return initialLength - newData.length; + } + return 0; + } catch (error) { + throw new Error(`${MODULE_NAME}: ${error.message}`); + } } async count(query = {}) { - return (await this.find(query)).length; - } - - async remove() { - const data = await this._loadData(); - const deletedCount = data.length; - await this._saveData([]); - return deletedCount; - } -} - -class lowstorage { - constructor(config) { - // _checkArgs(config); - this._store = new S3Store(config); - } - - collection(colName) { - return new Collection(colName, this._store); - } - - async listCollections() { - const listed = await this._store.list(); - const collections = listed.filter((entry) => entry.Key.endsWith('.json')); - return collections.map((entry) => entry.Key.split('/')[0]); + try { + if (query === undefined || query === null) { + throw new Error(`${MODULE_NAME}: Query is required`); + } + if (Object.keys(obj).length === 0) { + const bufferData = await this._loadDataBuffer(); // load data from s3 + const data = bufferData.length > 0 ? this._avroType.fromBuffer(bufferData) : []; + return data.length || null; + } + return (await this.find(query)).length; + } catch (error) { + throw new Error(`${MODULE_NAME}: ${error.message}`); + } } } export default lowstorage; +export { lowstorage }; diff --git a/src/wip/lowstorage.ts b/src/wip/lowstorage.ts deleted file mode 100644 index d44fd71..0000000 --- a/src/wip/lowstorage.ts +++ /dev/null @@ -1,275 +0,0 @@ -// **Interfaces & Types** - -interface R2Store { - get(key: string): Promise; - put(key: string, value: any): Promise; - delete(key: string): Promise; - list(): Promise; - list(options: R2ListOptions): Promise; -} - -interface R2ListOptions { - cursor?: string; -} - -interface R2ListResult { - objects: R2Object[]; - truncated: boolean; - cursor?: string; -} - -interface R2Object { - key: string; - version: string; - size: number; - etag: string; - httpEtag: string; - // checksums: R2Checksums; - uploaded: Date; - // httpMetadata?: R2HTTPMetadata; - customMetadata?: Record; - // range?: R2Range; - writeHttpMetadata: (headers: Headers) => void; -} - -interface Document { - _id: string; - [key: string]: any; // Allow additional properties for flexibility -} - -// **Helper Functions** - -// Ensures required arguments are objects -const _checkArgs = (...args: object[]): void => { - for (const arg of args) { - if (typeof arg !== 'object' || arg === null) { - throw new Error('lowstorage: missing args or args not an object'); - } - } -}; - -// Checks if a document matches a query object -const _matchesQuery = (document: Document, query: object): boolean => { - return Object.keys(query).every((key) => document[key] === query[key]); -}; - -// Generates a unique ID for new documents -const _generateUUID = (): string => { - return crypto.randomUUID(); -}; - -const _isR2Store = (obj: unknown): obj is R2Store => { - let hasMethod = (obj: unknown, name: any) => { - return typeof obj !== 'undefined' && obj !== null && typeof obj[name] === 'function'; - }; - - return ( - typeof obj === 'object' && - obj !== null && - hasMethod(obj, 'get') && - hasMethod(obj, 'put') && - hasMethod(obj, 'delete') && - hasMethod(obj, 'list') - ); -}; - -// Retrieves the appropriate R2 store from the environment -const _getStore = (env: any, storeName?: string): R2Store => { - let store = storeName ? env[storeName] ?? null : null; // Use ?? if storeName is provided - if (!store) { - // Check for null directly - for (const obj of Object.values(env)) { - if (_isR2Store(obj)) { - return obj; - } - } - } else { - if (store.get && store.put && store.delete && store.list) { - return store; - } - } - throw new Error('lowstorage: no valid store found'); -}; - -// **Collection Class** - -class Collection { - private _colName: string; - private _store: R2Store; - private _skip?: number; - private _limit?: number; - - constructor(colName: string, store: R2Store) { - this._colName = colName; - this._store = store; - } - - // Adds a skip function for chaining - skip(numToSkip: number): Collection { - this._skip = numToSkip; - return this; - } - - // Adds a limit function for chaining - limit(numToLimit: number): Collection { - this._limit = numToLimit; - return this; - } - - // Loads all documents from the collection - private async _loadData(): Promise { - try { - const doc = await this._store.get(`${this._colName}/${this._colName}.json`); - if (doc) { - return doc.json(); - } - return []; - } catch (error) { - if (error.code === 'ENOENT') { - // File not found, create a new empty object - return []; - } else { - throw error; - } - } - } - - // Saves data back to the collection file - private async _saveData(data: Document[]): Promise { - const key = `${this._colName}/${this._colName}.json`; - return this._store.put(key, JSON.stringify(data)); - } - - // Inserts new documents - async insert(doc: Document | Document[]): Promise { - if (!Array.isArray(doc)) { - doc = [doc]; - } - const data = await this._loadData(); - for (let item of doc) { - if (typeof item !== 'object' || item === null) { - throw new Error('Invalid input: input must be an object or an array of objects'); - } - item._id = item._id || _generateUUID(); - data.push(item); - } - await this._saveData(data); - } - - // Finds documents based on a query, applies skip & limit - async find(query: object = {}): Promise { - const data = await this._loadData(); - const filteredData = data.filter((doc) => _matchesQuery(doc, query)); - - // Apply skip and limit if they have been set - let resultData = filteredData; - if (this._skip) { - resultData = resultData.slice(this._skip); - } - if (this._limit) { - resultData = resultData.slice(0, this._limit); - } - - // Reset skip and limit - this._skip = undefined; - this._limit = undefined; - - return resultData; - } - - // Similar to find, but returns the first result or null - async findOne(query: object = {}): Promise { - return (await this.find(query))[0] || null; - } - - // Updates documents matching a query - async update(query: object = {}, update: object = {}): Promise { - const data = await this._loadData(); - let updatedCount = 0; - - data.forEach((doc) => { - if (_matchesQuery(doc, query)) { - Object.assign(doc, update); - updatedCount++; - } - }); - - if (updatedCount > 0) { - await this._saveData(data); - } - - return updatedCount; - } - - // Updates a single matching document - async updateOne(query: object = {}, update: object = {}): Promise { - const data = await this._loadData(); - const docIndex = data.findIndex((doc) => _matchesQuery(doc, query)); - - if (docIndex !== -1) { - Object.assign(data[docIndex], update); - await this._saveData(data); - return 1; - } - return 0; - } - - // Deletes documents matching a query - async delete(query: object = {}): Promise { - const data = await this._loadData(); - const initialLength = data.length; - const newData = data.filter((doc) => !_matchesQuery(doc, query)); - await this._saveData(newData); - return initialLength - newData.length; - } - - // Counts documents matching a query - async count(query: object = {}): Promise { - return (await this.find(query)).length; - } - - // Deletes all documents in the collection - async remove(): Promise { - const data = await this._loadData(); - const deletedCount = data.length; - await this._saveData([]); - return deletedCount; - } -} - -// **lowstorage Class** - -class lowstorage { - private _store: R2Store; - - constructor(env: any, storeName?: string) { - _checkArgs(env); - this._store = _getStore(env, storeName); - } - - // Creates a Collection instance - collection(colName: string): Collection { - return new Collection(colName, this._store); - } - - // Lists available collections - async listCollections(): Promise { - const listed = await this._store.list(); - let truncated = listed.truncated; - let cursor = truncated ? listed.cursor : undefined; - // this is a workaround for the list method not returning all the keys (default limit is 1000) - while (truncated) { - const next = await this._store.list({ - cursor: cursor, - }); - listed.objects.push(...next.objects); - truncated = next.truncated; - cursor = next.cursor; - } - const collections = listed.objects.filter((entry) => entry.key.endsWith('.json')); - // return only the collection name - return collections.map((entry) => entry.key.split('/')[0]); - } -} - -export default lowstorage; From 467af35cf9aac148007983724a71866bb50a27e7 Mon Sep 17 00:00:00 2001 From: Jolly Good <1671375+good-lly@users.noreply.github.com> Date: Wed, 3 Jul 2024 14:36:33 +0200 Subject: [PATCH 03/18] #13 replace R2 by S3, add Avro serialization schema --- .gitignore | 3 +- dev/dev-index.js | 193 + examples/src/index.js | 73 + lib/lowstorage.js | 667 +++- lib/lowstorage.js.map | 8 +- package-lock.json | 8607 ++++++++++++++++++++++++++++++++++++++++ package.json | 53 +- src/helpers.js | 20 +- src/lowstorage.js | 84 +- src/lowstorage.test.js | 37 +- 10 files changed, 9620 insertions(+), 125 deletions(-) create mode 100644 dev/dev-index.js create mode 100644 examples/src/index.js create mode 100644 package-lock.json diff --git a/.gitignore b/.gitignore index f25034b..ed06b0c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ node_modules -.wrangler \ No newline at end of file +.wrangler +.env diff --git a/dev/dev-index.js b/dev/dev-index.js new file mode 100644 index 0000000..bfff8ed --- /dev/null +++ b/dev/dev-index.js @@ -0,0 +1,193 @@ +import { lowstorage } from '../lib/lowstorage.js'; +import { env } from 'node:process'; +// import { MongoClient, ServerApiVersion } from 'mongodb'; + +const configCF = { + endpoint: env.CF_ENDPOINT, + region: env.CF_REGION, + accessKeyId: env.CF_ACCESS_KEY_ID, + secretAccessKey: env.CF_SECRET_ACCESS_KEY, + bucketName: env.CF_BUCKET_NAME, +}; + +const configMinio = { + endPoint: env.MINIO_ENDPOINT, + port: env.MINIO_PORT, + region: env.MINIO_REGION, + useSSL: env.MINIO_USE_SSL, + accessKey: env.MINIO_ACCESS_KEY, + secretKey: env.MINIO_SECRET_KEY, + bucketName: env.MINIO_BUCKET_NAME, +}; + +const usersToInsert = [ + { name: 'Alice', age: 30 }, + { name: 'Bob', age: 25 }, + { name: 'Charlie', age: 25 }, +]; + +const userAvroSchema = { + type: 'record', + name: 'User', + fields: [ + { name: '_id', type: 'string', size: 16, logicalType: 'UUID' }, + { name: 'name', type: 'string' }, + { name: 'age', type: 'int' }, + ], +}; + +// async function mongoRun() { +// try { +// console.time('mongodb'); +// const uri = ''; +// // Create a MongoClient with a MongoClientOptions object to set the Stable API version +// const client = new MongoClient(uri, { +// serverApi: { +// version: ServerApiVersion.v1, +// strict: true, +// deprecationErrors: true, +// }, +// }); +// const userMongoSchema = { +// $jsonSchema: { +// bsonType: 'object', +// required: ['_id', 'name', 'age'], +// properties: { +// _id: { +// bsonType: 'string', +// pattern: '^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$', +// }, +// name: { +// bsonType: 'string', +// }, +// age: { +// bsonType: 'int', +// }, +// }, +// }, +// }; +// // Connect the client to the server (optional starting in v4.7) +// await client.connect(); +// const dbname = 'testing'; +// const colName = 'users'; +// // Create a database +// await client.db(dbname).createCollection(colName, { +// validator: userMongoSchema, +// }); +// //console.log('Database created'); +// const collection = client.db(dbname).collection(colName); +// // Insert a document +// await collection.insertMany(usersToInsert); +// //console.log('Document inserted'); +// // Find documents +// const findResult = await collection.find({}).toArray(); +// console.log('Find result', findResult); + +// // // find two users +// // const twoUsers = await collection.find({}, { skip: 0, limit: 2 }).toArray(); +// // //console.log('twoUsers', twoUsers); + +// // // find user by ID and update name +// // const id = twoUsers[1]._id; +// // const secondUser = await collection.findOne({ _id: id }); +// // //console.log('secondUser', secondUser, secondUser._id); + +// // // update user +// // const updateUser = await collection.updateOne({ _id: id }, { $set: { name: 'Carlos' } }); +// // //console.log('updateUser', updateUser); + +// // // check if user name updated +// // const updatedUser = await collection.findOne({ _id: id }); +// // //console.log('updatedUser', updatedUser); + +// // // find all users with name 'Carlos' +// // const findUser = await collection.find({ name: 'Carlos' }).toArray(); +// // //console.log('findUser', findUser); + +// // // delete user +// // const deleteUser = await collection.deleteOne({ _id: id }); +// // //console.log('deleteUser', deleteUser); + +// // // find all users +// // const allUsersAfterDelete = await collection.find({}).toArray(); +// // //console.log('allUsersAfterDelete', allUsersAfterDelete); + +// // // update all with name Charlie +// // const updateAll = await collection.updateMany({ name: 'Charlie' }, { $set: { name: 'Carlos' } }); +// // //console.log('updateAll charlie to carlos', updateAll); + +// // // find all users with name Carlos +// // const findAll = await collection.find({ name: 'Carlos' }).toArray(); +// // //console.log('findAll carlos', findAll); + +// // // delete collection +// // const deleteCollection = await collection.drop(); +// await client.close(); +// //console.log('deleteCollection', deleteCollection); +// } finally { +// // Ensures that the client will close when you finish/error +// console.timeEnd('mongodb'); +// } +// } +// mongoRun().catch(console.dir); + +async function lowstorageRun() { + try { + console.time('lowstorage'); + const ls_cf = new lowstorage(configCF); + + const userCol = await ls_cf.collection('users', userAvroSchema); + + // Add new users + const newUsers = await userCol.insert(usersToInsert); + //console.log('newUsers', newUsers); + + // list all users + const allUsers = await userCol.find({}); + console.log('allUsers', allUsers); + + // find users with pagination (e.g., page 2, 10 users per page) + const twoUsers = await userCol.find({}, { skip: 0, limit: 2 }); + //console.log('twoUsers', twoUsers); + + // find user by ID and update name + const id = twoUsers[1]._id; + const secondUser = await userCol.findOne({ _id: id }); + //console.log('secondUser', secondUser, secondUser._id); + + // update user + const updateUser = await userCol.updateOne({ _id: id }, { name: 'Carlos' }); + //console.log('updateUser', updateUser); + + // check if user name updated + const updatedUser = await userCol.findOne({ _id: id }); + //console.log('updatedUser', updatedUser); + + // find all users with name 'Carlos' + const findUser = await userCol.find({ name: 'Carlos' }); + //console.log('findUser', findUser); + + // delete user + const deleteUser = await userCol.delete({ _id: id }); + //console.log('deleteUser', deleteUser); + + // find all users + const allUsersAfterDelete = await userCol.find({}); + //console.log('allUsersAfterDelete', allUsersAfterDelete); + + // update all with name Charlie + const updateAll = await userCol.update({ name: 'Charlie' }, { name: 'Carlos' }); + //console.log('updateAll charlie to carlos', updateAll); + + // find all users with name Carlos + const findAll = await userCol.find({ name: 'Carlos' }); + //console.log('findAll carlos', findAll); + + // delete collection + const deleteCollection = await ls_cf.removeCollection('users'); + //console.log('deleteCollection', deleteCollection); + } finally { + console.timeEnd('lowstorage'); + } +} +lowstorageRun().catch(console.dir); diff --git a/examples/src/index.js b/examples/src/index.js new file mode 100644 index 0000000..19866b9 --- /dev/null +++ b/examples/src/index.js @@ -0,0 +1,73 @@ +'use strict'; + +import lowstorage from '../../lib/lowstorage.js'; +import { Hono } from 'hono'; +const app = new Hono(); + +const BUCKET_NAME = 'MY_TESTING_BUCKET'; +const USER_COL = 'users'; + +app.post('/insertdata', async (c) => { + // poor's man benchmark + const requestStartTime = Date.now(); + const userCol = new lowstorage(c.env, BUCKET_NAME).collection(USER_COL); + const jsonGeneratedData = await c.req.json(); + const insertedData = await userCol.insert(jsonGeneratedData); + const executionTime = Date.now() - requestStartTime; + console.log(`Request took ${executionTime}ms`); + return c.json(insertedData); +}); + +app.post('/update/:id', async (c) => { + const id = c.req.param('id'); + const jsonGeneratedData = await c.req.json(); + const userCol = new lowstorage(c.env, BUCKET_NAME).collection(USER_COL); + const user = await userCol.update({ _id: id }, jsonGeneratedData); + return c.json({ user }); +}); + +// list all "collections" +app.get('/list-collections', async (c) => { + const ls = new lowstorage(c.env, BUCKET_NAME); + const allCols = await ls.listCollections(); + return c.json({ allCols }); +}); + +app.get('/users', async (c) => { + const userCol = new lowstorage(c.env, BUCKET_NAME).collection(USER_COL); + const limit = parseInt(c.req.query('limit'), 10) || undefined; // Get limit, with default + const skip = parseInt(c.req.query('skip'), 10) || undefined; // Get skip, with default + const users = await userCol.find({}, { limit: limit, skip: skip }); + return c.json({ users }); +}); + +app.get('/users-count', async (c) => { + const userCol = new lowstorage(c.env, BUCKET_NAME).collection('users'); + const usersCount = await userCol.count(); + return c.text(usersCount); +}); + +// get user +app.get('/user/:id', async (c) => { + const id = c.req.param('id'); + const userCol = new lowstorage(c.env, BUCKET_NAME).collection(USER_COL); + const user = await userCol.findOne({ _id: id }); + return c.json({ user }); +}); + +// find all with value +app.get('/search/:value', async (c) => { + const value = c.req.param('value'); + const userCol = new lowstorage(c.env, BUCKET_NAME).collection(USER_COL); + const users = await userCol.find({ name: value }); + return c.json({ users }); +}); + +// list all users +app.get('/users-delete-all', async (c) => { + const userCol = new lowstorage(c.env, BUCKET_NAME).collection(USER_COL); + const users = await userCol.remove({}); + return c.json({ users }); +}); + +export default app; diff --git a/lib/lowstorage.js b/lib/lowstorage.js index 945e9c9..5a1a1e1 100644 --- a/lib/lowstorage.js +++ b/lib/lowstorage.js @@ -1,35 +1,638 @@ -var Ms=Object.create;var Si=Object.defineProperty;var Ws=Object.getOwnPropertyDescriptor;var Ks=Object.getOwnPropertyNames;var Vs=Object.getPrototypeOf,Gs=Object.prototype.hasOwnProperty;var E=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(a,i)=>(typeof require<"u"?require:a)[i]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var j=(e,a)=>()=>(a||e((a={exports:{}}).exports,a),a.exports);var Js=(e,a,i,n)=>{if(a&&typeof a=="object"||typeof a=="function")for(let s of Ks(a))!Gs.call(e,s)&&s!==i&&Si(e,s,{get:()=>a[s],enumerable:!(n=Ws(a,s))||n.enumerable});return e};var Xs=(e,a,i)=>(i=e!=null?Ms(Vs(e)):{},Js(a||!e||!e.__esModule?Si(i,"default",{value:e,enumerable:!0}):i,e));var Ti=j((Xc,Ci)=>{var Oi=E("stream").Stream,Ys=E("util");Ci.exports=Z;function Z(){this.source=null,this.dataSize=0,this.maxDataSize=1024*1024,this.pauseStream=!0,this._maxDataSizeExceeded=!1,this._released=!1,this._bufferedEvents=[]}Ys.inherits(Z,Oi);Z.create=function(e,a){var i=new this;a=a||{};for(var n in a)i[n]=a[n];i.source=e;var s=e.emit;return e.emit=function(){return i._handleEmit(arguments),s.apply(e,arguments)},e.on("error",function(){}),i.pauseStream&&e.pause(),i};Object.defineProperty(Z.prototype,"readable",{configurable:!0,enumerable:!0,get:function(){return this.source.readable}});Z.prototype.setEncoding=function(){return this.source.setEncoding.apply(this.source,arguments)};Z.prototype.resume=function(){this._released||this.release(),this.source.resume()};Z.prototype.pause=function(){this.source.pause()};Z.prototype.release=function(){this._released=!0,this._bufferedEvents.forEach(function(e){this.emit.apply(this,e)}.bind(this)),this._bufferedEvents=[]};Z.prototype.pipe=function(){var e=Oi.prototype.pipe.apply(this,arguments);return this.resume(),e};Z.prototype._handleEmit=function(e){if(this._released){this.emit.apply(this,e);return}e[0]==="data"&&(this.dataSize+=e[1].length,this._checkIfMaxDataSizeExceeded()),this._bufferedEvents.push(e)};Z.prototype._checkIfMaxDataSizeExceeded=function(){if(!this._maxDataSizeExceeded&&!(this.dataSize<=this.maxDataSize)){this._maxDataSizeExceeded=!0;var e="DelayedStream#maxDataSize of "+this.maxDataSize+" bytes exceeded.";this.emit("error",new Error(e))}}});var Li=j((Yc,zi)=>{var Zs=E("util"),qi=E("stream").Stream,Ai=Ti();zi.exports=O;function O(){this.writable=!1,this.readable=!0,this.dataSize=0,this.maxDataSize=2*1024*1024,this.pauseStreams=!0,this._released=!1,this._streams=[],this._currentStream=null,this._insideLoop=!1,this._pendingNext=!1}Zs.inherits(O,qi);O.create=function(e){var a=new this;e=e||{};for(var i in e)a[i]=e[i];return a};O.isStreamLike=function(e){return typeof e!="function"&&typeof e!="string"&&typeof e!="boolean"&&typeof e!="number"&&!Buffer.isBuffer(e)};O.prototype.append=function(e){var a=O.isStreamLike(e);if(a){if(!(e instanceof Ai)){var i=Ai.create(e,{maxDataSize:1/0,pauseStream:this.pauseStreams});e.on("data",this._checkDataSize.bind(this)),e=i}this._handleErrors(e),this.pauseStreams&&e.pause()}return this._streams.push(e),this};O.prototype.pipe=function(e,a){return qi.prototype.pipe.call(this,e,a),this.resume(),e};O.prototype._getNext=function(){if(this._currentStream=null,this._insideLoop){this._pendingNext=!0;return}this._insideLoop=!0;try{do this._pendingNext=!1,this._realGetNext();while(this._pendingNext)}finally{this._insideLoop=!1}};O.prototype._realGetNext=function(){var e=this._streams.shift();if(typeof e>"u"){this.end();return}if(typeof e!="function"){this._pipeNext(e);return}var a=e;a(function(i){var n=O.isStreamLike(i);n&&(i.on("data",this._checkDataSize.bind(this)),this._handleErrors(i)),this._pipeNext(i)}.bind(this))};O.prototype._pipeNext=function(e){this._currentStream=e;var a=O.isStreamLike(e);if(a){e.on("end",this._getNext.bind(this)),e.pipe(this,{end:!1});return}var i=e;this.write(i),this._getNext()};O.prototype._handleErrors=function(e){var a=this;e.on("error",function(i){a._emitError(i)})};O.prototype.write=function(e){this.emit("data",e)};O.prototype.pause=function(){this.pauseStreams&&(this.pauseStreams&&this._currentStream&&typeof this._currentStream.pause=="function"&&this._currentStream.pause(),this.emit("pause"))};O.prototype.resume=function(){this._released||(this._released=!0,this.writable=!0,this._getNext()),this.pauseStreams&&this._currentStream&&typeof this._currentStream.resume=="function"&&this._currentStream.resume(),this.emit("resume")};O.prototype.end=function(){this._reset(),this.emit("end")};O.prototype.destroy=function(){this._reset(),this.emit("close")};O.prototype._reset=function(){this.writable=!1,this._streams=[],this._currentStream=null};O.prototype._checkDataSize=function(){if(this._updateDataSize(),!(this.dataSize<=this.maxDataSize)){var e="DelayedStream#maxDataSize of "+this.maxDataSize+" bytes exceeded.";this._emitError(new Error(e))}};O.prototype._updateDataSize=function(){this.dataSize=0;var e=this;this._streams.forEach(function(a){a.dataSize&&(e.dataSize+=a.dataSize)}),this._currentStream&&this._currentStream.dataSize&&(this.dataSize+=this._currentStream.dataSize)};O.prototype._emitError=function(e){this._reset(),this.emit("error",e)}});var Fi=j((Zc,Qs)=>{Qs.exports={"application/1d-interleaved-parityfec":{source:"iana"},"application/3gpdash-qoe-report+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/3gpp-ims+xml":{source:"iana",compressible:!0},"application/3gpphal+json":{source:"iana",compressible:!0},"application/3gpphalforms+json":{source:"iana",compressible:!0},"application/a2l":{source:"iana"},"application/ace+cbor":{source:"iana"},"application/activemessage":{source:"iana"},"application/activity+json":{source:"iana",compressible:!0},"application/alto-costmap+json":{source:"iana",compressible:!0},"application/alto-costmapfilter+json":{source:"iana",compressible:!0},"application/alto-directory+json":{source:"iana",compressible:!0},"application/alto-endpointcost+json":{source:"iana",compressible:!0},"application/alto-endpointcostparams+json":{source:"iana",compressible:!0},"application/alto-endpointprop+json":{source:"iana",compressible:!0},"application/alto-endpointpropparams+json":{source:"iana",compressible:!0},"application/alto-error+json":{source:"iana",compressible:!0},"application/alto-networkmap+json":{source:"iana",compressible:!0},"application/alto-networkmapfilter+json":{source:"iana",compressible:!0},"application/alto-updatestreamcontrol+json":{source:"iana",compressible:!0},"application/alto-updatestreamparams+json":{source:"iana",compressible:!0},"application/aml":{source:"iana"},"application/andrew-inset":{source:"iana",extensions:["ez"]},"application/applefile":{source:"iana"},"application/applixware":{source:"apache",extensions:["aw"]},"application/at+jwt":{source:"iana"},"application/atf":{source:"iana"},"application/atfx":{source:"iana"},"application/atom+xml":{source:"iana",compressible:!0,extensions:["atom"]},"application/atomcat+xml":{source:"iana",compressible:!0,extensions:["atomcat"]},"application/atomdeleted+xml":{source:"iana",compressible:!0,extensions:["atomdeleted"]},"application/atomicmail":{source:"iana"},"application/atomsvc+xml":{source:"iana",compressible:!0,extensions:["atomsvc"]},"application/atsc-dwd+xml":{source:"iana",compressible:!0,extensions:["dwd"]},"application/atsc-dynamic-event-message":{source:"iana"},"application/atsc-held+xml":{source:"iana",compressible:!0,extensions:["held"]},"application/atsc-rdt+json":{source:"iana",compressible:!0},"application/atsc-rsat+xml":{source:"iana",compressible:!0,extensions:["rsat"]},"application/atxml":{source:"iana"},"application/auth-policy+xml":{source:"iana",compressible:!0},"application/bacnet-xdd+zip":{source:"iana",compressible:!1},"application/batch-smtp":{source:"iana"},"application/bdoc":{compressible:!1,extensions:["bdoc"]},"application/beep+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/calendar+json":{source:"iana",compressible:!0},"application/calendar+xml":{source:"iana",compressible:!0,extensions:["xcs"]},"application/call-completion":{source:"iana"},"application/cals-1840":{source:"iana"},"application/captive+json":{source:"iana",compressible:!0},"application/cbor":{source:"iana"},"application/cbor-seq":{source:"iana"},"application/cccex":{source:"iana"},"application/ccmp+xml":{source:"iana",compressible:!0},"application/ccxml+xml":{source:"iana",compressible:!0,extensions:["ccxml"]},"application/cdfx+xml":{source:"iana",compressible:!0,extensions:["cdfx"]},"application/cdmi-capability":{source:"iana",extensions:["cdmia"]},"application/cdmi-container":{source:"iana",extensions:["cdmic"]},"application/cdmi-domain":{source:"iana",extensions:["cdmid"]},"application/cdmi-object":{source:"iana",extensions:["cdmio"]},"application/cdmi-queue":{source:"iana",extensions:["cdmiq"]},"application/cdni":{source:"iana"},"application/cea":{source:"iana"},"application/cea-2018+xml":{source:"iana",compressible:!0},"application/cellml+xml":{source:"iana",compressible:!0},"application/cfw":{source:"iana"},"application/city+json":{source:"iana",compressible:!0},"application/clr":{source:"iana"},"application/clue+xml":{source:"iana",compressible:!0},"application/clue_info+xml":{source:"iana",compressible:!0},"application/cms":{source:"iana"},"application/cnrp+xml":{source:"iana",compressible:!0},"application/coap-group+json":{source:"iana",compressible:!0},"application/coap-payload":{source:"iana"},"application/commonground":{source:"iana"},"application/conference-info+xml":{source:"iana",compressible:!0},"application/cose":{source:"iana"},"application/cose-key":{source:"iana"},"application/cose-key-set":{source:"iana"},"application/cpl+xml":{source:"iana",compressible:!0,extensions:["cpl"]},"application/csrattrs":{source:"iana"},"application/csta+xml":{source:"iana",compressible:!0},"application/cstadata+xml":{source:"iana",compressible:!0},"application/csvm+json":{source:"iana",compressible:!0},"application/cu-seeme":{source:"apache",extensions:["cu"]},"application/cwt":{source:"iana"},"application/cybercash":{source:"iana"},"application/dart":{compressible:!0},"application/dash+xml":{source:"iana",compressible:!0,extensions:["mpd"]},"application/dash-patch+xml":{source:"iana",compressible:!0,extensions:["mpp"]},"application/dashdelta":{source:"iana"},"application/davmount+xml":{source:"iana",compressible:!0,extensions:["davmount"]},"application/dca-rft":{source:"iana"},"application/dcd":{source:"iana"},"application/dec-dx":{source:"iana"},"application/dialog-info+xml":{source:"iana",compressible:!0},"application/dicom":{source:"iana"},"application/dicom+json":{source:"iana",compressible:!0},"application/dicom+xml":{source:"iana",compressible:!0},"application/dii":{source:"iana"},"application/dit":{source:"iana"},"application/dns":{source:"iana"},"application/dns+json":{source:"iana",compressible:!0},"application/dns-message":{source:"iana"},"application/docbook+xml":{source:"apache",compressible:!0,extensions:["dbk"]},"application/dots+cbor":{source:"iana"},"application/dskpp+xml":{source:"iana",compressible:!0},"application/dssc+der":{source:"iana",extensions:["dssc"]},"application/dssc+xml":{source:"iana",compressible:!0,extensions:["xdssc"]},"application/dvcs":{source:"iana"},"application/ecmascript":{source:"iana",compressible:!0,extensions:["es","ecma"]},"application/edi-consent":{source:"iana"},"application/edi-x12":{source:"iana",compressible:!1},"application/edifact":{source:"iana",compressible:!1},"application/efi":{source:"iana"},"application/elm+json":{source:"iana",charset:"UTF-8",compressible:!0},"application/elm+xml":{source:"iana",compressible:!0},"application/emergencycalldata.cap+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/emergencycalldata.comment+xml":{source:"iana",compressible:!0},"application/emergencycalldata.control+xml":{source:"iana",compressible:!0},"application/emergencycalldata.deviceinfo+xml":{source:"iana",compressible:!0},"application/emergencycalldata.ecall.msd":{source:"iana"},"application/emergencycalldata.providerinfo+xml":{source:"iana",compressible:!0},"application/emergencycalldata.serviceinfo+xml":{source:"iana",compressible:!0},"application/emergencycalldata.subscriberinfo+xml":{source:"iana",compressible:!0},"application/emergencycalldata.veds+xml":{source:"iana",compressible:!0},"application/emma+xml":{source:"iana",compressible:!0,extensions:["emma"]},"application/emotionml+xml":{source:"iana",compressible:!0,extensions:["emotionml"]},"application/encaprtp":{source:"iana"},"application/epp+xml":{source:"iana",compressible:!0},"application/epub+zip":{source:"iana",compressible:!1,extensions:["epub"]},"application/eshop":{source:"iana"},"application/exi":{source:"iana",extensions:["exi"]},"application/expect-ct-report+json":{source:"iana",compressible:!0},"application/express":{source:"iana",extensions:["exp"]},"application/fastinfoset":{source:"iana"},"application/fastsoap":{source:"iana"},"application/fdt+xml":{source:"iana",compressible:!0,extensions:["fdt"]},"application/fhir+json":{source:"iana",charset:"UTF-8",compressible:!0},"application/fhir+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/fido.trusted-apps+json":{compressible:!0},"application/fits":{source:"iana"},"application/flexfec":{source:"iana"},"application/font-sfnt":{source:"iana"},"application/font-tdpfr":{source:"iana",extensions:["pfr"]},"application/font-woff":{source:"iana",compressible:!1},"application/framework-attributes+xml":{source:"iana",compressible:!0},"application/geo+json":{source:"iana",compressible:!0,extensions:["geojson"]},"application/geo+json-seq":{source:"iana"},"application/geopackage+sqlite3":{source:"iana"},"application/geoxacml+xml":{source:"iana",compressible:!0},"application/gltf-buffer":{source:"iana"},"application/gml+xml":{source:"iana",compressible:!0,extensions:["gml"]},"application/gpx+xml":{source:"apache",compressible:!0,extensions:["gpx"]},"application/gxf":{source:"apache",extensions:["gxf"]},"application/gzip":{source:"iana",compressible:!1,extensions:["gz"]},"application/h224":{source:"iana"},"application/held+xml":{source:"iana",compressible:!0},"application/hjson":{extensions:["hjson"]},"application/http":{source:"iana"},"application/hyperstudio":{source:"iana",extensions:["stk"]},"application/ibe-key-request+xml":{source:"iana",compressible:!0},"application/ibe-pkg-reply+xml":{source:"iana",compressible:!0},"application/ibe-pp-data":{source:"iana"},"application/iges":{source:"iana"},"application/im-iscomposing+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/index":{source:"iana"},"application/index.cmd":{source:"iana"},"application/index.obj":{source:"iana"},"application/index.response":{source:"iana"},"application/index.vnd":{source:"iana"},"application/inkml+xml":{source:"iana",compressible:!0,extensions:["ink","inkml"]},"application/iotp":{source:"iana"},"application/ipfix":{source:"iana",extensions:["ipfix"]},"application/ipp":{source:"iana"},"application/isup":{source:"iana"},"application/its+xml":{source:"iana",compressible:!0,extensions:["its"]},"application/java-archive":{source:"apache",compressible:!1,extensions:["jar","war","ear"]},"application/java-serialized-object":{source:"apache",compressible:!1,extensions:["ser"]},"application/java-vm":{source:"apache",compressible:!1,extensions:["class"]},"application/javascript":{source:"iana",charset:"UTF-8",compressible:!0,extensions:["js","mjs"]},"application/jf2feed+json":{source:"iana",compressible:!0},"application/jose":{source:"iana"},"application/jose+json":{source:"iana",compressible:!0},"application/jrd+json":{source:"iana",compressible:!0},"application/jscalendar+json":{source:"iana",compressible:!0},"application/json":{source:"iana",charset:"UTF-8",compressible:!0,extensions:["json","map"]},"application/json-patch+json":{source:"iana",compressible:!0},"application/json-seq":{source:"iana"},"application/json5":{extensions:["json5"]},"application/jsonml+json":{source:"apache",compressible:!0,extensions:["jsonml"]},"application/jwk+json":{source:"iana",compressible:!0},"application/jwk-set+json":{source:"iana",compressible:!0},"application/jwt":{source:"iana"},"application/kpml-request+xml":{source:"iana",compressible:!0},"application/kpml-response+xml":{source:"iana",compressible:!0},"application/ld+json":{source:"iana",compressible:!0,extensions:["jsonld"]},"application/lgr+xml":{source:"iana",compressible:!0,extensions:["lgr"]},"application/link-format":{source:"iana"},"application/load-control+xml":{source:"iana",compressible:!0},"application/lost+xml":{source:"iana",compressible:!0,extensions:["lostxml"]},"application/lostsync+xml":{source:"iana",compressible:!0},"application/lpf+zip":{source:"iana",compressible:!1},"application/lxf":{source:"iana"},"application/mac-binhex40":{source:"iana",extensions:["hqx"]},"application/mac-compactpro":{source:"apache",extensions:["cpt"]},"application/macwriteii":{source:"iana"},"application/mads+xml":{source:"iana",compressible:!0,extensions:["mads"]},"application/manifest+json":{source:"iana",charset:"UTF-8",compressible:!0,extensions:["webmanifest"]},"application/marc":{source:"iana",extensions:["mrc"]},"application/marcxml+xml":{source:"iana",compressible:!0,extensions:["mrcx"]},"application/mathematica":{source:"iana",extensions:["ma","nb","mb"]},"application/mathml+xml":{source:"iana",compressible:!0,extensions:["mathml"]},"application/mathml-content+xml":{source:"iana",compressible:!0},"application/mathml-presentation+xml":{source:"iana",compressible:!0},"application/mbms-associated-procedure-description+xml":{source:"iana",compressible:!0},"application/mbms-deregister+xml":{source:"iana",compressible:!0},"application/mbms-envelope+xml":{source:"iana",compressible:!0},"application/mbms-msk+xml":{source:"iana",compressible:!0},"application/mbms-msk-response+xml":{source:"iana",compressible:!0},"application/mbms-protection-description+xml":{source:"iana",compressible:!0},"application/mbms-reception-report+xml":{source:"iana",compressible:!0},"application/mbms-register+xml":{source:"iana",compressible:!0},"application/mbms-register-response+xml":{source:"iana",compressible:!0},"application/mbms-schedule+xml":{source:"iana",compressible:!0},"application/mbms-user-service-description+xml":{source:"iana",compressible:!0},"application/mbox":{source:"iana",extensions:["mbox"]},"application/media-policy-dataset+xml":{source:"iana",compressible:!0,extensions:["mpf"]},"application/media_control+xml":{source:"iana",compressible:!0},"application/mediaservercontrol+xml":{source:"iana",compressible:!0,extensions:["mscml"]},"application/merge-patch+json":{source:"iana",compressible:!0},"application/metalink+xml":{source:"apache",compressible:!0,extensions:["metalink"]},"application/metalink4+xml":{source:"iana",compressible:!0,extensions:["meta4"]},"application/mets+xml":{source:"iana",compressible:!0,extensions:["mets"]},"application/mf4":{source:"iana"},"application/mikey":{source:"iana"},"application/mipc":{source:"iana"},"application/missing-blocks+cbor-seq":{source:"iana"},"application/mmt-aei+xml":{source:"iana",compressible:!0,extensions:["maei"]},"application/mmt-usd+xml":{source:"iana",compressible:!0,extensions:["musd"]},"application/mods+xml":{source:"iana",compressible:!0,extensions:["mods"]},"application/moss-keys":{source:"iana"},"application/moss-signature":{source:"iana"},"application/mosskey-data":{source:"iana"},"application/mosskey-request":{source:"iana"},"application/mp21":{source:"iana",extensions:["m21","mp21"]},"application/mp4":{source:"iana",extensions:["mp4s","m4p"]},"application/mpeg4-generic":{source:"iana"},"application/mpeg4-iod":{source:"iana"},"application/mpeg4-iod-xmt":{source:"iana"},"application/mrb-consumer+xml":{source:"iana",compressible:!0},"application/mrb-publish+xml":{source:"iana",compressible:!0},"application/msc-ivr+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/msc-mixer+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/msword":{source:"iana",compressible:!1,extensions:["doc","dot"]},"application/mud+json":{source:"iana",compressible:!0},"application/multipart-core":{source:"iana"},"application/mxf":{source:"iana",extensions:["mxf"]},"application/n-quads":{source:"iana",extensions:["nq"]},"application/n-triples":{source:"iana",extensions:["nt"]},"application/nasdata":{source:"iana"},"application/news-checkgroups":{source:"iana",charset:"US-ASCII"},"application/news-groupinfo":{source:"iana",charset:"US-ASCII"},"application/news-transmission":{source:"iana"},"application/nlsml+xml":{source:"iana",compressible:!0},"application/node":{source:"iana",extensions:["cjs"]},"application/nss":{source:"iana"},"application/oauth-authz-req+jwt":{source:"iana"},"application/oblivious-dns-message":{source:"iana"},"application/ocsp-request":{source:"iana"},"application/ocsp-response":{source:"iana"},"application/octet-stream":{source:"iana",compressible:!1,extensions:["bin","dms","lrf","mar","so","dist","distz","pkg","bpk","dump","elc","deploy","exe","dll","deb","dmg","iso","img","msi","msp","msm","buffer"]},"application/oda":{source:"iana",extensions:["oda"]},"application/odm+xml":{source:"iana",compressible:!0},"application/odx":{source:"iana"},"application/oebps-package+xml":{source:"iana",compressible:!0,extensions:["opf"]},"application/ogg":{source:"iana",compressible:!1,extensions:["ogx"]},"application/omdoc+xml":{source:"apache",compressible:!0,extensions:["omdoc"]},"application/onenote":{source:"apache",extensions:["onetoc","onetoc2","onetmp","onepkg"]},"application/opc-nodeset+xml":{source:"iana",compressible:!0},"application/oscore":{source:"iana"},"application/oxps":{source:"iana",extensions:["oxps"]},"application/p21":{source:"iana"},"application/p21+zip":{source:"iana",compressible:!1},"application/p2p-overlay+xml":{source:"iana",compressible:!0,extensions:["relo"]},"application/parityfec":{source:"iana"},"application/passport":{source:"iana"},"application/patch-ops-error+xml":{source:"iana",compressible:!0,extensions:["xer"]},"application/pdf":{source:"iana",compressible:!1,extensions:["pdf"]},"application/pdx":{source:"iana"},"application/pem-certificate-chain":{source:"iana"},"application/pgp-encrypted":{source:"iana",compressible:!1,extensions:["pgp"]},"application/pgp-keys":{source:"iana",extensions:["asc"]},"application/pgp-signature":{source:"iana",extensions:["asc","sig"]},"application/pics-rules":{source:"apache",extensions:["prf"]},"application/pidf+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/pidf-diff+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/pkcs10":{source:"iana",extensions:["p10"]},"application/pkcs12":{source:"iana"},"application/pkcs7-mime":{source:"iana",extensions:["p7m","p7c"]},"application/pkcs7-signature":{source:"iana",extensions:["p7s"]},"application/pkcs8":{source:"iana",extensions:["p8"]},"application/pkcs8-encrypted":{source:"iana"},"application/pkix-attr-cert":{source:"iana",extensions:["ac"]},"application/pkix-cert":{source:"iana",extensions:["cer"]},"application/pkix-crl":{source:"iana",extensions:["crl"]},"application/pkix-pkipath":{source:"iana",extensions:["pkipath"]},"application/pkixcmp":{source:"iana",extensions:["pki"]},"application/pls+xml":{source:"iana",compressible:!0,extensions:["pls"]},"application/poc-settings+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/postscript":{source:"iana",compressible:!0,extensions:["ai","eps","ps"]},"application/ppsp-tracker+json":{source:"iana",compressible:!0},"application/problem+json":{source:"iana",compressible:!0},"application/problem+xml":{source:"iana",compressible:!0},"application/provenance+xml":{source:"iana",compressible:!0,extensions:["provx"]},"application/prs.alvestrand.titrax-sheet":{source:"iana"},"application/prs.cww":{source:"iana",extensions:["cww"]},"application/prs.cyn":{source:"iana",charset:"7-BIT"},"application/prs.hpub+zip":{source:"iana",compressible:!1},"application/prs.nprend":{source:"iana"},"application/prs.plucker":{source:"iana"},"application/prs.rdf-xml-crypt":{source:"iana"},"application/prs.xsf+xml":{source:"iana",compressible:!0},"application/pskc+xml":{source:"iana",compressible:!0,extensions:["pskcxml"]},"application/pvd+json":{source:"iana",compressible:!0},"application/qsig":{source:"iana"},"application/raml+yaml":{compressible:!0,extensions:["raml"]},"application/raptorfec":{source:"iana"},"application/rdap+json":{source:"iana",compressible:!0},"application/rdf+xml":{source:"iana",compressible:!0,extensions:["rdf","owl"]},"application/reginfo+xml":{source:"iana",compressible:!0,extensions:["rif"]},"application/relax-ng-compact-syntax":{source:"iana",extensions:["rnc"]},"application/remote-printing":{source:"iana"},"application/reputon+json":{source:"iana",compressible:!0},"application/resource-lists+xml":{source:"iana",compressible:!0,extensions:["rl"]},"application/resource-lists-diff+xml":{source:"iana",compressible:!0,extensions:["rld"]},"application/rfc+xml":{source:"iana",compressible:!0},"application/riscos":{source:"iana"},"application/rlmi+xml":{source:"iana",compressible:!0},"application/rls-services+xml":{source:"iana",compressible:!0,extensions:["rs"]},"application/route-apd+xml":{source:"iana",compressible:!0,extensions:["rapd"]},"application/route-s-tsid+xml":{source:"iana",compressible:!0,extensions:["sls"]},"application/route-usd+xml":{source:"iana",compressible:!0,extensions:["rusd"]},"application/rpki-ghostbusters":{source:"iana",extensions:["gbr"]},"application/rpki-manifest":{source:"iana",extensions:["mft"]},"application/rpki-publication":{source:"iana"},"application/rpki-roa":{source:"iana",extensions:["roa"]},"application/rpki-updown":{source:"iana"},"application/rsd+xml":{source:"apache",compressible:!0,extensions:["rsd"]},"application/rss+xml":{source:"apache",compressible:!0,extensions:["rss"]},"application/rtf":{source:"iana",compressible:!0,extensions:["rtf"]},"application/rtploopback":{source:"iana"},"application/rtx":{source:"iana"},"application/samlassertion+xml":{source:"iana",compressible:!0},"application/samlmetadata+xml":{source:"iana",compressible:!0},"application/sarif+json":{source:"iana",compressible:!0},"application/sarif-external-properties+json":{source:"iana",compressible:!0},"application/sbe":{source:"iana"},"application/sbml+xml":{source:"iana",compressible:!0,extensions:["sbml"]},"application/scaip+xml":{source:"iana",compressible:!0},"application/scim+json":{source:"iana",compressible:!0},"application/scvp-cv-request":{source:"iana",extensions:["scq"]},"application/scvp-cv-response":{source:"iana",extensions:["scs"]},"application/scvp-vp-request":{source:"iana",extensions:["spq"]},"application/scvp-vp-response":{source:"iana",extensions:["spp"]},"application/sdp":{source:"iana",extensions:["sdp"]},"application/secevent+jwt":{source:"iana"},"application/senml+cbor":{source:"iana"},"application/senml+json":{source:"iana",compressible:!0},"application/senml+xml":{source:"iana",compressible:!0,extensions:["senmlx"]},"application/senml-etch+cbor":{source:"iana"},"application/senml-etch+json":{source:"iana",compressible:!0},"application/senml-exi":{source:"iana"},"application/sensml+cbor":{source:"iana"},"application/sensml+json":{source:"iana",compressible:!0},"application/sensml+xml":{source:"iana",compressible:!0,extensions:["sensmlx"]},"application/sensml-exi":{source:"iana"},"application/sep+xml":{source:"iana",compressible:!0},"application/sep-exi":{source:"iana"},"application/session-info":{source:"iana"},"application/set-payment":{source:"iana"},"application/set-payment-initiation":{source:"iana",extensions:["setpay"]},"application/set-registration":{source:"iana"},"application/set-registration-initiation":{source:"iana",extensions:["setreg"]},"application/sgml":{source:"iana"},"application/sgml-open-catalog":{source:"iana"},"application/shf+xml":{source:"iana",compressible:!0,extensions:["shf"]},"application/sieve":{source:"iana",extensions:["siv","sieve"]},"application/simple-filter+xml":{source:"iana",compressible:!0},"application/simple-message-summary":{source:"iana"},"application/simplesymbolcontainer":{source:"iana"},"application/sipc":{source:"iana"},"application/slate":{source:"iana"},"application/smil":{source:"iana"},"application/smil+xml":{source:"iana",compressible:!0,extensions:["smi","smil"]},"application/smpte336m":{source:"iana"},"application/soap+fastinfoset":{source:"iana"},"application/soap+xml":{source:"iana",compressible:!0},"application/sparql-query":{source:"iana",extensions:["rq"]},"application/sparql-results+xml":{source:"iana",compressible:!0,extensions:["srx"]},"application/spdx+json":{source:"iana",compressible:!0},"application/spirits-event+xml":{source:"iana",compressible:!0},"application/sql":{source:"iana"},"application/srgs":{source:"iana",extensions:["gram"]},"application/srgs+xml":{source:"iana",compressible:!0,extensions:["grxml"]},"application/sru+xml":{source:"iana",compressible:!0,extensions:["sru"]},"application/ssdl+xml":{source:"apache",compressible:!0,extensions:["ssdl"]},"application/ssml+xml":{source:"iana",compressible:!0,extensions:["ssml"]},"application/stix+json":{source:"iana",compressible:!0},"application/swid+xml":{source:"iana",compressible:!0,extensions:["swidtag"]},"application/tamp-apex-update":{source:"iana"},"application/tamp-apex-update-confirm":{source:"iana"},"application/tamp-community-update":{source:"iana"},"application/tamp-community-update-confirm":{source:"iana"},"application/tamp-error":{source:"iana"},"application/tamp-sequence-adjust":{source:"iana"},"application/tamp-sequence-adjust-confirm":{source:"iana"},"application/tamp-status-query":{source:"iana"},"application/tamp-status-response":{source:"iana"},"application/tamp-update":{source:"iana"},"application/tamp-update-confirm":{source:"iana"},"application/tar":{compressible:!0},"application/taxii+json":{source:"iana",compressible:!0},"application/td+json":{source:"iana",compressible:!0},"application/tei+xml":{source:"iana",compressible:!0,extensions:["tei","teicorpus"]},"application/tetra_isi":{source:"iana"},"application/thraud+xml":{source:"iana",compressible:!0,extensions:["tfi"]},"application/timestamp-query":{source:"iana"},"application/timestamp-reply":{source:"iana"},"application/timestamped-data":{source:"iana",extensions:["tsd"]},"application/tlsrpt+gzip":{source:"iana"},"application/tlsrpt+json":{source:"iana",compressible:!0},"application/tnauthlist":{source:"iana"},"application/token-introspection+jwt":{source:"iana"},"application/toml":{compressible:!0,extensions:["toml"]},"application/trickle-ice-sdpfrag":{source:"iana"},"application/trig":{source:"iana",extensions:["trig"]},"application/ttml+xml":{source:"iana",compressible:!0,extensions:["ttml"]},"application/tve-trigger":{source:"iana"},"application/tzif":{source:"iana"},"application/tzif-leap":{source:"iana"},"application/ubjson":{compressible:!1,extensions:["ubj"]},"application/ulpfec":{source:"iana"},"application/urc-grpsheet+xml":{source:"iana",compressible:!0},"application/urc-ressheet+xml":{source:"iana",compressible:!0,extensions:["rsheet"]},"application/urc-targetdesc+xml":{source:"iana",compressible:!0,extensions:["td"]},"application/urc-uisocketdesc+xml":{source:"iana",compressible:!0},"application/vcard+json":{source:"iana",compressible:!0},"application/vcard+xml":{source:"iana",compressible:!0},"application/vemmi":{source:"iana"},"application/vividence.scriptfile":{source:"apache"},"application/vnd.1000minds.decision-model+xml":{source:"iana",compressible:!0,extensions:["1km"]},"application/vnd.3gpp-prose+xml":{source:"iana",compressible:!0},"application/vnd.3gpp-prose-pc3ch+xml":{source:"iana",compressible:!0},"application/vnd.3gpp-v2x-local-service-information":{source:"iana"},"application/vnd.3gpp.5gnas":{source:"iana"},"application/vnd.3gpp.access-transfer-events+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.bsf+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.gmop+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.gtpc":{source:"iana"},"application/vnd.3gpp.interworking-data":{source:"iana"},"application/vnd.3gpp.lpp":{source:"iana"},"application/vnd.3gpp.mc-signalling-ear":{source:"iana"},"application/vnd.3gpp.mcdata-affiliation-command+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcdata-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcdata-payload":{source:"iana"},"application/vnd.3gpp.mcdata-service-config+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcdata-signalling":{source:"iana"},"application/vnd.3gpp.mcdata-ue-config+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcdata-user-profile+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-affiliation-command+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-floor-request+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-location-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-mbms-usage-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-service-config+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-signed+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-ue-config+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-ue-init-config+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-user-profile+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcvideo-affiliation-command+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcvideo-affiliation-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcvideo-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcvideo-location-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcvideo-mbms-usage-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcvideo-service-config+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcvideo-transmission-request+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcvideo-ue-config+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcvideo-user-profile+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mid-call+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.ngap":{source:"iana"},"application/vnd.3gpp.pfcp":{source:"iana"},"application/vnd.3gpp.pic-bw-large":{source:"iana",extensions:["plb"]},"application/vnd.3gpp.pic-bw-small":{source:"iana",extensions:["psb"]},"application/vnd.3gpp.pic-bw-var":{source:"iana",extensions:["pvb"]},"application/vnd.3gpp.s1ap":{source:"iana"},"application/vnd.3gpp.sms":{source:"iana"},"application/vnd.3gpp.sms+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.srvcc-ext+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.srvcc-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.state-and-event-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.ussd+xml":{source:"iana",compressible:!0},"application/vnd.3gpp2.bcmcsinfo+xml":{source:"iana",compressible:!0},"application/vnd.3gpp2.sms":{source:"iana"},"application/vnd.3gpp2.tcap":{source:"iana",extensions:["tcap"]},"application/vnd.3lightssoftware.imagescal":{source:"iana"},"application/vnd.3m.post-it-notes":{source:"iana",extensions:["pwn"]},"application/vnd.accpac.simply.aso":{source:"iana",extensions:["aso"]},"application/vnd.accpac.simply.imp":{source:"iana",extensions:["imp"]},"application/vnd.acucobol":{source:"iana",extensions:["acu"]},"application/vnd.acucorp":{source:"iana",extensions:["atc","acutc"]},"application/vnd.adobe.air-application-installer-package+zip":{source:"apache",compressible:!1,extensions:["air"]},"application/vnd.adobe.flash.movie":{source:"iana"},"application/vnd.adobe.formscentral.fcdt":{source:"iana",extensions:["fcdt"]},"application/vnd.adobe.fxp":{source:"iana",extensions:["fxp","fxpl"]},"application/vnd.adobe.partial-upload":{source:"iana"},"application/vnd.adobe.xdp+xml":{source:"iana",compressible:!0,extensions:["xdp"]},"application/vnd.adobe.xfdf":{source:"iana",extensions:["xfdf"]},"application/vnd.aether.imp":{source:"iana"},"application/vnd.afpc.afplinedata":{source:"iana"},"application/vnd.afpc.afplinedata-pagedef":{source:"iana"},"application/vnd.afpc.cmoca-cmresource":{source:"iana"},"application/vnd.afpc.foca-charset":{source:"iana"},"application/vnd.afpc.foca-codedfont":{source:"iana"},"application/vnd.afpc.foca-codepage":{source:"iana"},"application/vnd.afpc.modca":{source:"iana"},"application/vnd.afpc.modca-cmtable":{source:"iana"},"application/vnd.afpc.modca-formdef":{source:"iana"},"application/vnd.afpc.modca-mediummap":{source:"iana"},"application/vnd.afpc.modca-objectcontainer":{source:"iana"},"application/vnd.afpc.modca-overlay":{source:"iana"},"application/vnd.afpc.modca-pagesegment":{source:"iana"},"application/vnd.age":{source:"iana",extensions:["age"]},"application/vnd.ah-barcode":{source:"iana"},"application/vnd.ahead.space":{source:"iana",extensions:["ahead"]},"application/vnd.airzip.filesecure.azf":{source:"iana",extensions:["azf"]},"application/vnd.airzip.filesecure.azs":{source:"iana",extensions:["azs"]},"application/vnd.amadeus+json":{source:"iana",compressible:!0},"application/vnd.amazon.ebook":{source:"apache",extensions:["azw"]},"application/vnd.amazon.mobi8-ebook":{source:"iana"},"application/vnd.americandynamics.acc":{source:"iana",extensions:["acc"]},"application/vnd.amiga.ami":{source:"iana",extensions:["ami"]},"application/vnd.amundsen.maze+xml":{source:"iana",compressible:!0},"application/vnd.android.ota":{source:"iana"},"application/vnd.android.package-archive":{source:"apache",compressible:!1,extensions:["apk"]},"application/vnd.anki":{source:"iana"},"application/vnd.anser-web-certificate-issue-initiation":{source:"iana",extensions:["cii"]},"application/vnd.anser-web-funds-transfer-initiation":{source:"apache",extensions:["fti"]},"application/vnd.antix.game-component":{source:"iana",extensions:["atx"]},"application/vnd.apache.arrow.file":{source:"iana"},"application/vnd.apache.arrow.stream":{source:"iana"},"application/vnd.apache.thrift.binary":{source:"iana"},"application/vnd.apache.thrift.compact":{source:"iana"},"application/vnd.apache.thrift.json":{source:"iana"},"application/vnd.api+json":{source:"iana",compressible:!0},"application/vnd.aplextor.warrp+json":{source:"iana",compressible:!0},"application/vnd.apothekende.reservation+json":{source:"iana",compressible:!0},"application/vnd.apple.installer+xml":{source:"iana",compressible:!0,extensions:["mpkg"]},"application/vnd.apple.keynote":{source:"iana",extensions:["key"]},"application/vnd.apple.mpegurl":{source:"iana",extensions:["m3u8"]},"application/vnd.apple.numbers":{source:"iana",extensions:["numbers"]},"application/vnd.apple.pages":{source:"iana",extensions:["pages"]},"application/vnd.apple.pkpass":{compressible:!1,extensions:["pkpass"]},"application/vnd.arastra.swi":{source:"iana"},"application/vnd.aristanetworks.swi":{source:"iana",extensions:["swi"]},"application/vnd.artisan+json":{source:"iana",compressible:!0},"application/vnd.artsquare":{source:"iana"},"application/vnd.astraea-software.iota":{source:"iana",extensions:["iota"]},"application/vnd.audiograph":{source:"iana",extensions:["aep"]},"application/vnd.autopackage":{source:"iana"},"application/vnd.avalon+json":{source:"iana",compressible:!0},"application/vnd.avistar+xml":{source:"iana",compressible:!0},"application/vnd.balsamiq.bmml+xml":{source:"iana",compressible:!0,extensions:["bmml"]},"application/vnd.balsamiq.bmpr":{source:"iana"},"application/vnd.banana-accounting":{source:"iana"},"application/vnd.bbf.usp.error":{source:"iana"},"application/vnd.bbf.usp.msg":{source:"iana"},"application/vnd.bbf.usp.msg+json":{source:"iana",compressible:!0},"application/vnd.bekitzur-stech+json":{source:"iana",compressible:!0},"application/vnd.bint.med-content":{source:"iana"},"application/vnd.biopax.rdf+xml":{source:"iana",compressible:!0},"application/vnd.blink-idb-value-wrapper":{source:"iana"},"application/vnd.blueice.multipass":{source:"iana",extensions:["mpm"]},"application/vnd.bluetooth.ep.oob":{source:"iana"},"application/vnd.bluetooth.le.oob":{source:"iana"},"application/vnd.bmi":{source:"iana",extensions:["bmi"]},"application/vnd.bpf":{source:"iana"},"application/vnd.bpf3":{source:"iana"},"application/vnd.businessobjects":{source:"iana",extensions:["rep"]},"application/vnd.byu.uapi+json":{source:"iana",compressible:!0},"application/vnd.cab-jscript":{source:"iana"},"application/vnd.canon-cpdl":{source:"iana"},"application/vnd.canon-lips":{source:"iana"},"application/vnd.capasystems-pg+json":{source:"iana",compressible:!0},"application/vnd.cendio.thinlinc.clientconf":{source:"iana"},"application/vnd.century-systems.tcp_stream":{source:"iana"},"application/vnd.chemdraw+xml":{source:"iana",compressible:!0,extensions:["cdxml"]},"application/vnd.chess-pgn":{source:"iana"},"application/vnd.chipnuts.karaoke-mmd":{source:"iana",extensions:["mmd"]},"application/vnd.ciedi":{source:"iana"},"application/vnd.cinderella":{source:"iana",extensions:["cdy"]},"application/vnd.cirpack.isdn-ext":{source:"iana"},"application/vnd.citationstyles.style+xml":{source:"iana",compressible:!0,extensions:["csl"]},"application/vnd.claymore":{source:"iana",extensions:["cla"]},"application/vnd.cloanto.rp9":{source:"iana",extensions:["rp9"]},"application/vnd.clonk.c4group":{source:"iana",extensions:["c4g","c4d","c4f","c4p","c4u"]},"application/vnd.cluetrust.cartomobile-config":{source:"iana",extensions:["c11amc"]},"application/vnd.cluetrust.cartomobile-config-pkg":{source:"iana",extensions:["c11amz"]},"application/vnd.coffeescript":{source:"iana"},"application/vnd.collabio.xodocuments.document":{source:"iana"},"application/vnd.collabio.xodocuments.document-template":{source:"iana"},"application/vnd.collabio.xodocuments.presentation":{source:"iana"},"application/vnd.collabio.xodocuments.presentation-template":{source:"iana"},"application/vnd.collabio.xodocuments.spreadsheet":{source:"iana"},"application/vnd.collabio.xodocuments.spreadsheet-template":{source:"iana"},"application/vnd.collection+json":{source:"iana",compressible:!0},"application/vnd.collection.doc+json":{source:"iana",compressible:!0},"application/vnd.collection.next+json":{source:"iana",compressible:!0},"application/vnd.comicbook+zip":{source:"iana",compressible:!1},"application/vnd.comicbook-rar":{source:"iana"},"application/vnd.commerce-battelle":{source:"iana"},"application/vnd.commonspace":{source:"iana",extensions:["csp"]},"application/vnd.contact.cmsg":{source:"iana",extensions:["cdbcmsg"]},"application/vnd.coreos.ignition+json":{source:"iana",compressible:!0},"application/vnd.cosmocaller":{source:"iana",extensions:["cmc"]},"application/vnd.crick.clicker":{source:"iana",extensions:["clkx"]},"application/vnd.crick.clicker.keyboard":{source:"iana",extensions:["clkk"]},"application/vnd.crick.clicker.palette":{source:"iana",extensions:["clkp"]},"application/vnd.crick.clicker.template":{source:"iana",extensions:["clkt"]},"application/vnd.crick.clicker.wordbank":{source:"iana",extensions:["clkw"]},"application/vnd.criticaltools.wbs+xml":{source:"iana",compressible:!0,extensions:["wbs"]},"application/vnd.cryptii.pipe+json":{source:"iana",compressible:!0},"application/vnd.crypto-shade-file":{source:"iana"},"application/vnd.cryptomator.encrypted":{source:"iana"},"application/vnd.cryptomator.vault":{source:"iana"},"application/vnd.ctc-posml":{source:"iana",extensions:["pml"]},"application/vnd.ctct.ws+xml":{source:"iana",compressible:!0},"application/vnd.cups-pdf":{source:"iana"},"application/vnd.cups-postscript":{source:"iana"},"application/vnd.cups-ppd":{source:"iana",extensions:["ppd"]},"application/vnd.cups-raster":{source:"iana"},"application/vnd.cups-raw":{source:"iana"},"application/vnd.curl":{source:"iana"},"application/vnd.curl.car":{source:"apache",extensions:["car"]},"application/vnd.curl.pcurl":{source:"apache",extensions:["pcurl"]},"application/vnd.cyan.dean.root+xml":{source:"iana",compressible:!0},"application/vnd.cybank":{source:"iana"},"application/vnd.cyclonedx+json":{source:"iana",compressible:!0},"application/vnd.cyclonedx+xml":{source:"iana",compressible:!0},"application/vnd.d2l.coursepackage1p0+zip":{source:"iana",compressible:!1},"application/vnd.d3m-dataset":{source:"iana"},"application/vnd.d3m-problem":{source:"iana"},"application/vnd.dart":{source:"iana",compressible:!0,extensions:["dart"]},"application/vnd.data-vision.rdz":{source:"iana",extensions:["rdz"]},"application/vnd.datapackage+json":{source:"iana",compressible:!0},"application/vnd.dataresource+json":{source:"iana",compressible:!0},"application/vnd.dbf":{source:"iana",extensions:["dbf"]},"application/vnd.debian.binary-package":{source:"iana"},"application/vnd.dece.data":{source:"iana",extensions:["uvf","uvvf","uvd","uvvd"]},"application/vnd.dece.ttml+xml":{source:"iana",compressible:!0,extensions:["uvt","uvvt"]},"application/vnd.dece.unspecified":{source:"iana",extensions:["uvx","uvvx"]},"application/vnd.dece.zip":{source:"iana",extensions:["uvz","uvvz"]},"application/vnd.denovo.fcselayout-link":{source:"iana",extensions:["fe_launch"]},"application/vnd.desmume.movie":{source:"iana"},"application/vnd.dir-bi.plate-dl-nosuffix":{source:"iana"},"application/vnd.dm.delegation+xml":{source:"iana",compressible:!0},"application/vnd.dna":{source:"iana",extensions:["dna"]},"application/vnd.document+json":{source:"iana",compressible:!0},"application/vnd.dolby.mlp":{source:"apache",extensions:["mlp"]},"application/vnd.dolby.mobile.1":{source:"iana"},"application/vnd.dolby.mobile.2":{source:"iana"},"application/vnd.doremir.scorecloud-binary-document":{source:"iana"},"application/vnd.dpgraph":{source:"iana",extensions:["dpg"]},"application/vnd.dreamfactory":{source:"iana",extensions:["dfac"]},"application/vnd.drive+json":{source:"iana",compressible:!0},"application/vnd.ds-keypoint":{source:"apache",extensions:["kpxx"]},"application/vnd.dtg.local":{source:"iana"},"application/vnd.dtg.local.flash":{source:"iana"},"application/vnd.dtg.local.html":{source:"iana"},"application/vnd.dvb.ait":{source:"iana",extensions:["ait"]},"application/vnd.dvb.dvbisl+xml":{source:"iana",compressible:!0},"application/vnd.dvb.dvbj":{source:"iana"},"application/vnd.dvb.esgcontainer":{source:"iana"},"application/vnd.dvb.ipdcdftnotifaccess":{source:"iana"},"application/vnd.dvb.ipdcesgaccess":{source:"iana"},"application/vnd.dvb.ipdcesgaccess2":{source:"iana"},"application/vnd.dvb.ipdcesgpdd":{source:"iana"},"application/vnd.dvb.ipdcroaming":{source:"iana"},"application/vnd.dvb.iptv.alfec-base":{source:"iana"},"application/vnd.dvb.iptv.alfec-enhancement":{source:"iana"},"application/vnd.dvb.notif-aggregate-root+xml":{source:"iana",compressible:!0},"application/vnd.dvb.notif-container+xml":{source:"iana",compressible:!0},"application/vnd.dvb.notif-generic+xml":{source:"iana",compressible:!0},"application/vnd.dvb.notif-ia-msglist+xml":{source:"iana",compressible:!0},"application/vnd.dvb.notif-ia-registration-request+xml":{source:"iana",compressible:!0},"application/vnd.dvb.notif-ia-registration-response+xml":{source:"iana",compressible:!0},"application/vnd.dvb.notif-init+xml":{source:"iana",compressible:!0},"application/vnd.dvb.pfr":{source:"iana"},"application/vnd.dvb.service":{source:"iana",extensions:["svc"]},"application/vnd.dxr":{source:"iana"},"application/vnd.dynageo":{source:"iana",extensions:["geo"]},"application/vnd.dzr":{source:"iana"},"application/vnd.easykaraoke.cdgdownload":{source:"iana"},"application/vnd.ecdis-update":{source:"iana"},"application/vnd.ecip.rlp":{source:"iana"},"application/vnd.eclipse.ditto+json":{source:"iana",compressible:!0},"application/vnd.ecowin.chart":{source:"iana",extensions:["mag"]},"application/vnd.ecowin.filerequest":{source:"iana"},"application/vnd.ecowin.fileupdate":{source:"iana"},"application/vnd.ecowin.series":{source:"iana"},"application/vnd.ecowin.seriesrequest":{source:"iana"},"application/vnd.ecowin.seriesupdate":{source:"iana"},"application/vnd.efi.img":{source:"iana"},"application/vnd.efi.iso":{source:"iana"},"application/vnd.emclient.accessrequest+xml":{source:"iana",compressible:!0},"application/vnd.enliven":{source:"iana",extensions:["nml"]},"application/vnd.enphase.envoy":{source:"iana"},"application/vnd.eprints.data+xml":{source:"iana",compressible:!0},"application/vnd.epson.esf":{source:"iana",extensions:["esf"]},"application/vnd.epson.msf":{source:"iana",extensions:["msf"]},"application/vnd.epson.quickanime":{source:"iana",extensions:["qam"]},"application/vnd.epson.salt":{source:"iana",extensions:["slt"]},"application/vnd.epson.ssf":{source:"iana",extensions:["ssf"]},"application/vnd.ericsson.quickcall":{source:"iana"},"application/vnd.espass-espass+zip":{source:"iana",compressible:!1},"application/vnd.eszigno3+xml":{source:"iana",compressible:!0,extensions:["es3","et3"]},"application/vnd.etsi.aoc+xml":{source:"iana",compressible:!0},"application/vnd.etsi.asic-e+zip":{source:"iana",compressible:!1},"application/vnd.etsi.asic-s+zip":{source:"iana",compressible:!1},"application/vnd.etsi.cug+xml":{source:"iana",compressible:!0},"application/vnd.etsi.iptvcommand+xml":{source:"iana",compressible:!0},"application/vnd.etsi.iptvdiscovery+xml":{source:"iana",compressible:!0},"application/vnd.etsi.iptvprofile+xml":{source:"iana",compressible:!0},"application/vnd.etsi.iptvsad-bc+xml":{source:"iana",compressible:!0},"application/vnd.etsi.iptvsad-cod+xml":{source:"iana",compressible:!0},"application/vnd.etsi.iptvsad-npvr+xml":{source:"iana",compressible:!0},"application/vnd.etsi.iptvservice+xml":{source:"iana",compressible:!0},"application/vnd.etsi.iptvsync+xml":{source:"iana",compressible:!0},"application/vnd.etsi.iptvueprofile+xml":{source:"iana",compressible:!0},"application/vnd.etsi.mcid+xml":{source:"iana",compressible:!0},"application/vnd.etsi.mheg5":{source:"iana"},"application/vnd.etsi.overload-control-policy-dataset+xml":{source:"iana",compressible:!0},"application/vnd.etsi.pstn+xml":{source:"iana",compressible:!0},"application/vnd.etsi.sci+xml":{source:"iana",compressible:!0},"application/vnd.etsi.simservs+xml":{source:"iana",compressible:!0},"application/vnd.etsi.timestamp-token":{source:"iana"},"application/vnd.etsi.tsl+xml":{source:"iana",compressible:!0},"application/vnd.etsi.tsl.der":{source:"iana"},"application/vnd.eu.kasparian.car+json":{source:"iana",compressible:!0},"application/vnd.eudora.data":{source:"iana"},"application/vnd.evolv.ecig.profile":{source:"iana"},"application/vnd.evolv.ecig.settings":{source:"iana"},"application/vnd.evolv.ecig.theme":{source:"iana"},"application/vnd.exstream-empower+zip":{source:"iana",compressible:!1},"application/vnd.exstream-package":{source:"iana"},"application/vnd.ezpix-album":{source:"iana",extensions:["ez2"]},"application/vnd.ezpix-package":{source:"iana",extensions:["ez3"]},"application/vnd.f-secure.mobile":{source:"iana"},"application/vnd.familysearch.gedcom+zip":{source:"iana",compressible:!1},"application/vnd.fastcopy-disk-image":{source:"iana"},"application/vnd.fdf":{source:"iana",extensions:["fdf"]},"application/vnd.fdsn.mseed":{source:"iana",extensions:["mseed"]},"application/vnd.fdsn.seed":{source:"iana",extensions:["seed","dataless"]},"application/vnd.ffsns":{source:"iana"},"application/vnd.ficlab.flb+zip":{source:"iana",compressible:!1},"application/vnd.filmit.zfc":{source:"iana"},"application/vnd.fints":{source:"iana"},"application/vnd.firemonkeys.cloudcell":{source:"iana"},"application/vnd.flographit":{source:"iana",extensions:["gph"]},"application/vnd.fluxtime.clip":{source:"iana",extensions:["ftc"]},"application/vnd.font-fontforge-sfd":{source:"iana"},"application/vnd.framemaker":{source:"iana",extensions:["fm","frame","maker","book"]},"application/vnd.frogans.fnc":{source:"iana",extensions:["fnc"]},"application/vnd.frogans.ltf":{source:"iana",extensions:["ltf"]},"application/vnd.fsc.weblaunch":{source:"iana",extensions:["fsc"]},"application/vnd.fujifilm.fb.docuworks":{source:"iana"},"application/vnd.fujifilm.fb.docuworks.binder":{source:"iana"},"application/vnd.fujifilm.fb.docuworks.container":{source:"iana"},"application/vnd.fujifilm.fb.jfi+xml":{source:"iana",compressible:!0},"application/vnd.fujitsu.oasys":{source:"iana",extensions:["oas"]},"application/vnd.fujitsu.oasys2":{source:"iana",extensions:["oa2"]},"application/vnd.fujitsu.oasys3":{source:"iana",extensions:["oa3"]},"application/vnd.fujitsu.oasysgp":{source:"iana",extensions:["fg5"]},"application/vnd.fujitsu.oasysprs":{source:"iana",extensions:["bh2"]},"application/vnd.fujixerox.art-ex":{source:"iana"},"application/vnd.fujixerox.art4":{source:"iana"},"application/vnd.fujixerox.ddd":{source:"iana",extensions:["ddd"]},"application/vnd.fujixerox.docuworks":{source:"iana",extensions:["xdw"]},"application/vnd.fujixerox.docuworks.binder":{source:"iana",extensions:["xbd"]},"application/vnd.fujixerox.docuworks.container":{source:"iana"},"application/vnd.fujixerox.hbpl":{source:"iana"},"application/vnd.fut-misnet":{source:"iana"},"application/vnd.futoin+cbor":{source:"iana"},"application/vnd.futoin+json":{source:"iana",compressible:!0},"application/vnd.fuzzysheet":{source:"iana",extensions:["fzs"]},"application/vnd.genomatix.tuxedo":{source:"iana",extensions:["txd"]},"application/vnd.gentics.grd+json":{source:"iana",compressible:!0},"application/vnd.geo+json":{source:"iana",compressible:!0},"application/vnd.geocube+xml":{source:"iana",compressible:!0},"application/vnd.geogebra.file":{source:"iana",extensions:["ggb"]},"application/vnd.geogebra.slides":{source:"iana"},"application/vnd.geogebra.tool":{source:"iana",extensions:["ggt"]},"application/vnd.geometry-explorer":{source:"iana",extensions:["gex","gre"]},"application/vnd.geonext":{source:"iana",extensions:["gxt"]},"application/vnd.geoplan":{source:"iana",extensions:["g2w"]},"application/vnd.geospace":{source:"iana",extensions:["g3w"]},"application/vnd.gerber":{source:"iana"},"application/vnd.globalplatform.card-content-mgt":{source:"iana"},"application/vnd.globalplatform.card-content-mgt-response":{source:"iana"},"application/vnd.gmx":{source:"iana",extensions:["gmx"]},"application/vnd.google-apps.document":{compressible:!1,extensions:["gdoc"]},"application/vnd.google-apps.presentation":{compressible:!1,extensions:["gslides"]},"application/vnd.google-apps.spreadsheet":{compressible:!1,extensions:["gsheet"]},"application/vnd.google-earth.kml+xml":{source:"iana",compressible:!0,extensions:["kml"]},"application/vnd.google-earth.kmz":{source:"iana",compressible:!1,extensions:["kmz"]},"application/vnd.gov.sk.e-form+xml":{source:"iana",compressible:!0},"application/vnd.gov.sk.e-form+zip":{source:"iana",compressible:!1},"application/vnd.gov.sk.xmldatacontainer+xml":{source:"iana",compressible:!0},"application/vnd.grafeq":{source:"iana",extensions:["gqf","gqs"]},"application/vnd.gridmp":{source:"iana"},"application/vnd.groove-account":{source:"iana",extensions:["gac"]},"application/vnd.groove-help":{source:"iana",extensions:["ghf"]},"application/vnd.groove-identity-message":{source:"iana",extensions:["gim"]},"application/vnd.groove-injector":{source:"iana",extensions:["grv"]},"application/vnd.groove-tool-message":{source:"iana",extensions:["gtm"]},"application/vnd.groove-tool-template":{source:"iana",extensions:["tpl"]},"application/vnd.groove-vcard":{source:"iana",extensions:["vcg"]},"application/vnd.hal+json":{source:"iana",compressible:!0},"application/vnd.hal+xml":{source:"iana",compressible:!0,extensions:["hal"]},"application/vnd.handheld-entertainment+xml":{source:"iana",compressible:!0,extensions:["zmm"]},"application/vnd.hbci":{source:"iana",extensions:["hbci"]},"application/vnd.hc+json":{source:"iana",compressible:!0},"application/vnd.hcl-bireports":{source:"iana"},"application/vnd.hdt":{source:"iana"},"application/vnd.heroku+json":{source:"iana",compressible:!0},"application/vnd.hhe.lesson-player":{source:"iana",extensions:["les"]},"application/vnd.hl7cda+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/vnd.hl7v2+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/vnd.hp-hpgl":{source:"iana",extensions:["hpgl"]},"application/vnd.hp-hpid":{source:"iana",extensions:["hpid"]},"application/vnd.hp-hps":{source:"iana",extensions:["hps"]},"application/vnd.hp-jlyt":{source:"iana",extensions:["jlt"]},"application/vnd.hp-pcl":{source:"iana",extensions:["pcl"]},"application/vnd.hp-pclxl":{source:"iana",extensions:["pclxl"]},"application/vnd.httphone":{source:"iana"},"application/vnd.hydrostatix.sof-data":{source:"iana",extensions:["sfd-hdstx"]},"application/vnd.hyper+json":{source:"iana",compressible:!0},"application/vnd.hyper-item+json":{source:"iana",compressible:!0},"application/vnd.hyperdrive+json":{source:"iana",compressible:!0},"application/vnd.hzn-3d-crossword":{source:"iana"},"application/vnd.ibm.afplinedata":{source:"iana"},"application/vnd.ibm.electronic-media":{source:"iana"},"application/vnd.ibm.minipay":{source:"iana",extensions:["mpy"]},"application/vnd.ibm.modcap":{source:"iana",extensions:["afp","listafp","list3820"]},"application/vnd.ibm.rights-management":{source:"iana",extensions:["irm"]},"application/vnd.ibm.secure-container":{source:"iana",extensions:["sc"]},"application/vnd.iccprofile":{source:"iana",extensions:["icc","icm"]},"application/vnd.ieee.1905":{source:"iana"},"application/vnd.igloader":{source:"iana",extensions:["igl"]},"application/vnd.imagemeter.folder+zip":{source:"iana",compressible:!1},"application/vnd.imagemeter.image+zip":{source:"iana",compressible:!1},"application/vnd.immervision-ivp":{source:"iana",extensions:["ivp"]},"application/vnd.immervision-ivu":{source:"iana",extensions:["ivu"]},"application/vnd.ims.imsccv1p1":{source:"iana"},"application/vnd.ims.imsccv1p2":{source:"iana"},"application/vnd.ims.imsccv1p3":{source:"iana"},"application/vnd.ims.lis.v2.result+json":{source:"iana",compressible:!0},"application/vnd.ims.lti.v2.toolconsumerprofile+json":{source:"iana",compressible:!0},"application/vnd.ims.lti.v2.toolproxy+json":{source:"iana",compressible:!0},"application/vnd.ims.lti.v2.toolproxy.id+json":{source:"iana",compressible:!0},"application/vnd.ims.lti.v2.toolsettings+json":{source:"iana",compressible:!0},"application/vnd.ims.lti.v2.toolsettings.simple+json":{source:"iana",compressible:!0},"application/vnd.informedcontrol.rms+xml":{source:"iana",compressible:!0},"application/vnd.informix-visionary":{source:"iana"},"application/vnd.infotech.project":{source:"iana"},"application/vnd.infotech.project+xml":{source:"iana",compressible:!0},"application/vnd.innopath.wamp.notification":{source:"iana"},"application/vnd.insors.igm":{source:"iana",extensions:["igm"]},"application/vnd.intercon.formnet":{source:"iana",extensions:["xpw","xpx"]},"application/vnd.intergeo":{source:"iana",extensions:["i2g"]},"application/vnd.intertrust.digibox":{source:"iana"},"application/vnd.intertrust.nncp":{source:"iana"},"application/vnd.intu.qbo":{source:"iana",extensions:["qbo"]},"application/vnd.intu.qfx":{source:"iana",extensions:["qfx"]},"application/vnd.iptc.g2.catalogitem+xml":{source:"iana",compressible:!0},"application/vnd.iptc.g2.conceptitem+xml":{source:"iana",compressible:!0},"application/vnd.iptc.g2.knowledgeitem+xml":{source:"iana",compressible:!0},"application/vnd.iptc.g2.newsitem+xml":{source:"iana",compressible:!0},"application/vnd.iptc.g2.newsmessage+xml":{source:"iana",compressible:!0},"application/vnd.iptc.g2.packageitem+xml":{source:"iana",compressible:!0},"application/vnd.iptc.g2.planningitem+xml":{source:"iana",compressible:!0},"application/vnd.ipunplugged.rcprofile":{source:"iana",extensions:["rcprofile"]},"application/vnd.irepository.package+xml":{source:"iana",compressible:!0,extensions:["irp"]},"application/vnd.is-xpr":{source:"iana",extensions:["xpr"]},"application/vnd.isac.fcs":{source:"iana",extensions:["fcs"]},"application/vnd.iso11783-10+zip":{source:"iana",compressible:!1},"application/vnd.jam":{source:"iana",extensions:["jam"]},"application/vnd.japannet-directory-service":{source:"iana"},"application/vnd.japannet-jpnstore-wakeup":{source:"iana"},"application/vnd.japannet-payment-wakeup":{source:"iana"},"application/vnd.japannet-registration":{source:"iana"},"application/vnd.japannet-registration-wakeup":{source:"iana"},"application/vnd.japannet-setstore-wakeup":{source:"iana"},"application/vnd.japannet-verification":{source:"iana"},"application/vnd.japannet-verification-wakeup":{source:"iana"},"application/vnd.jcp.javame.midlet-rms":{source:"iana",extensions:["rms"]},"application/vnd.jisp":{source:"iana",extensions:["jisp"]},"application/vnd.joost.joda-archive":{source:"iana",extensions:["joda"]},"application/vnd.jsk.isdn-ngn":{source:"iana"},"application/vnd.kahootz":{source:"iana",extensions:["ktz","ktr"]},"application/vnd.kde.karbon":{source:"iana",extensions:["karbon"]},"application/vnd.kde.kchart":{source:"iana",extensions:["chrt"]},"application/vnd.kde.kformula":{source:"iana",extensions:["kfo"]},"application/vnd.kde.kivio":{source:"iana",extensions:["flw"]},"application/vnd.kde.kontour":{source:"iana",extensions:["kon"]},"application/vnd.kde.kpresenter":{source:"iana",extensions:["kpr","kpt"]},"application/vnd.kde.kspread":{source:"iana",extensions:["ksp"]},"application/vnd.kde.kword":{source:"iana",extensions:["kwd","kwt"]},"application/vnd.kenameaapp":{source:"iana",extensions:["htke"]},"application/vnd.kidspiration":{source:"iana",extensions:["kia"]},"application/vnd.kinar":{source:"iana",extensions:["kne","knp"]},"application/vnd.koan":{source:"iana",extensions:["skp","skd","skt","skm"]},"application/vnd.kodak-descriptor":{source:"iana",extensions:["sse"]},"application/vnd.las":{source:"iana"},"application/vnd.las.las+json":{source:"iana",compressible:!0},"application/vnd.las.las+xml":{source:"iana",compressible:!0,extensions:["lasxml"]},"application/vnd.laszip":{source:"iana"},"application/vnd.leap+json":{source:"iana",compressible:!0},"application/vnd.liberty-request+xml":{source:"iana",compressible:!0},"application/vnd.llamagraphics.life-balance.desktop":{source:"iana",extensions:["lbd"]},"application/vnd.llamagraphics.life-balance.exchange+xml":{source:"iana",compressible:!0,extensions:["lbe"]},"application/vnd.logipipe.circuit+zip":{source:"iana",compressible:!1},"application/vnd.loom":{source:"iana"},"application/vnd.lotus-1-2-3":{source:"iana",extensions:["123"]},"application/vnd.lotus-approach":{source:"iana",extensions:["apr"]},"application/vnd.lotus-freelance":{source:"iana",extensions:["pre"]},"application/vnd.lotus-notes":{source:"iana",extensions:["nsf"]},"application/vnd.lotus-organizer":{source:"iana",extensions:["org"]},"application/vnd.lotus-screencam":{source:"iana",extensions:["scm"]},"application/vnd.lotus-wordpro":{source:"iana",extensions:["lwp"]},"application/vnd.macports.portpkg":{source:"iana",extensions:["portpkg"]},"application/vnd.mapbox-vector-tile":{source:"iana",extensions:["mvt"]},"application/vnd.marlin.drm.actiontoken+xml":{source:"iana",compressible:!0},"application/vnd.marlin.drm.conftoken+xml":{source:"iana",compressible:!0},"application/vnd.marlin.drm.license+xml":{source:"iana",compressible:!0},"application/vnd.marlin.drm.mdcf":{source:"iana"},"application/vnd.mason+json":{source:"iana",compressible:!0},"application/vnd.maxar.archive.3tz+zip":{source:"iana",compressible:!1},"application/vnd.maxmind.maxmind-db":{source:"iana"},"application/vnd.mcd":{source:"iana",extensions:["mcd"]},"application/vnd.medcalcdata":{source:"iana",extensions:["mc1"]},"application/vnd.mediastation.cdkey":{source:"iana",extensions:["cdkey"]},"application/vnd.meridian-slingshot":{source:"iana"},"application/vnd.mfer":{source:"iana",extensions:["mwf"]},"application/vnd.mfmp":{source:"iana",extensions:["mfm"]},"application/vnd.micro+json":{source:"iana",compressible:!0},"application/vnd.micrografx.flo":{source:"iana",extensions:["flo"]},"application/vnd.micrografx.igx":{source:"iana",extensions:["igx"]},"application/vnd.microsoft.portable-executable":{source:"iana"},"application/vnd.microsoft.windows.thumbnail-cache":{source:"iana"},"application/vnd.miele+json":{source:"iana",compressible:!0},"application/vnd.mif":{source:"iana",extensions:["mif"]},"application/vnd.minisoft-hp3000-save":{source:"iana"},"application/vnd.mitsubishi.misty-guard.trustweb":{source:"iana"},"application/vnd.mobius.daf":{source:"iana",extensions:["daf"]},"application/vnd.mobius.dis":{source:"iana",extensions:["dis"]},"application/vnd.mobius.mbk":{source:"iana",extensions:["mbk"]},"application/vnd.mobius.mqy":{source:"iana",extensions:["mqy"]},"application/vnd.mobius.msl":{source:"iana",extensions:["msl"]},"application/vnd.mobius.plc":{source:"iana",extensions:["plc"]},"application/vnd.mobius.txf":{source:"iana",extensions:["txf"]},"application/vnd.mophun.application":{source:"iana",extensions:["mpn"]},"application/vnd.mophun.certificate":{source:"iana",extensions:["mpc"]},"application/vnd.motorola.flexsuite":{source:"iana"},"application/vnd.motorola.flexsuite.adsi":{source:"iana"},"application/vnd.motorola.flexsuite.fis":{source:"iana"},"application/vnd.motorola.flexsuite.gotap":{source:"iana"},"application/vnd.motorola.flexsuite.kmr":{source:"iana"},"application/vnd.motorola.flexsuite.ttc":{source:"iana"},"application/vnd.motorola.flexsuite.wem":{source:"iana"},"application/vnd.motorola.iprm":{source:"iana"},"application/vnd.mozilla.xul+xml":{source:"iana",compressible:!0,extensions:["xul"]},"application/vnd.ms-3mfdocument":{source:"iana"},"application/vnd.ms-artgalry":{source:"iana",extensions:["cil"]},"application/vnd.ms-asf":{source:"iana"},"application/vnd.ms-cab-compressed":{source:"iana",extensions:["cab"]},"application/vnd.ms-color.iccprofile":{source:"apache"},"application/vnd.ms-excel":{source:"iana",compressible:!1,extensions:["xls","xlm","xla","xlc","xlt","xlw"]},"application/vnd.ms-excel.addin.macroenabled.12":{source:"iana",extensions:["xlam"]},"application/vnd.ms-excel.sheet.binary.macroenabled.12":{source:"iana",extensions:["xlsb"]},"application/vnd.ms-excel.sheet.macroenabled.12":{source:"iana",extensions:["xlsm"]},"application/vnd.ms-excel.template.macroenabled.12":{source:"iana",extensions:["xltm"]},"application/vnd.ms-fontobject":{source:"iana",compressible:!0,extensions:["eot"]},"application/vnd.ms-htmlhelp":{source:"iana",extensions:["chm"]},"application/vnd.ms-ims":{source:"iana",extensions:["ims"]},"application/vnd.ms-lrm":{source:"iana",extensions:["lrm"]},"application/vnd.ms-office.activex+xml":{source:"iana",compressible:!0},"application/vnd.ms-officetheme":{source:"iana",extensions:["thmx"]},"application/vnd.ms-opentype":{source:"apache",compressible:!0},"application/vnd.ms-outlook":{compressible:!1,extensions:["msg"]},"application/vnd.ms-package.obfuscated-opentype":{source:"apache"},"application/vnd.ms-pki.seccat":{source:"apache",extensions:["cat"]},"application/vnd.ms-pki.stl":{source:"apache",extensions:["stl"]},"application/vnd.ms-playready.initiator+xml":{source:"iana",compressible:!0},"application/vnd.ms-powerpoint":{source:"iana",compressible:!1,extensions:["ppt","pps","pot"]},"application/vnd.ms-powerpoint.addin.macroenabled.12":{source:"iana",extensions:["ppam"]},"application/vnd.ms-powerpoint.presentation.macroenabled.12":{source:"iana",extensions:["pptm"]},"application/vnd.ms-powerpoint.slide.macroenabled.12":{source:"iana",extensions:["sldm"]},"application/vnd.ms-powerpoint.slideshow.macroenabled.12":{source:"iana",extensions:["ppsm"]},"application/vnd.ms-powerpoint.template.macroenabled.12":{source:"iana",extensions:["potm"]},"application/vnd.ms-printdevicecapabilities+xml":{source:"iana",compressible:!0},"application/vnd.ms-printing.printticket+xml":{source:"apache",compressible:!0},"application/vnd.ms-printschematicket+xml":{source:"iana",compressible:!0},"application/vnd.ms-project":{source:"iana",extensions:["mpp","mpt"]},"application/vnd.ms-tnef":{source:"iana"},"application/vnd.ms-windows.devicepairing":{source:"iana"},"application/vnd.ms-windows.nwprinting.oob":{source:"iana"},"application/vnd.ms-windows.printerpairing":{source:"iana"},"application/vnd.ms-windows.wsd.oob":{source:"iana"},"application/vnd.ms-wmdrm.lic-chlg-req":{source:"iana"},"application/vnd.ms-wmdrm.lic-resp":{source:"iana"},"application/vnd.ms-wmdrm.meter-chlg-req":{source:"iana"},"application/vnd.ms-wmdrm.meter-resp":{source:"iana"},"application/vnd.ms-word.document.macroenabled.12":{source:"iana",extensions:["docm"]},"application/vnd.ms-word.template.macroenabled.12":{source:"iana",extensions:["dotm"]},"application/vnd.ms-works":{source:"iana",extensions:["wps","wks","wcm","wdb"]},"application/vnd.ms-wpl":{source:"iana",extensions:["wpl"]},"application/vnd.ms-xpsdocument":{source:"iana",compressible:!1,extensions:["xps"]},"application/vnd.msa-disk-image":{source:"iana"},"application/vnd.mseq":{source:"iana",extensions:["mseq"]},"application/vnd.msign":{source:"iana"},"application/vnd.multiad.creator":{source:"iana"},"application/vnd.multiad.creator.cif":{source:"iana"},"application/vnd.music-niff":{source:"iana"},"application/vnd.musician":{source:"iana",extensions:["mus"]},"application/vnd.muvee.style":{source:"iana",extensions:["msty"]},"application/vnd.mynfc":{source:"iana",extensions:["taglet"]},"application/vnd.nacamar.ybrid+json":{source:"iana",compressible:!0},"application/vnd.ncd.control":{source:"iana"},"application/vnd.ncd.reference":{source:"iana"},"application/vnd.nearst.inv+json":{source:"iana",compressible:!0},"application/vnd.nebumind.line":{source:"iana"},"application/vnd.nervana":{source:"iana"},"application/vnd.netfpx":{source:"iana"},"application/vnd.neurolanguage.nlu":{source:"iana",extensions:["nlu"]},"application/vnd.nimn":{source:"iana"},"application/vnd.nintendo.nitro.rom":{source:"iana"},"application/vnd.nintendo.snes.rom":{source:"iana"},"application/vnd.nitf":{source:"iana",extensions:["ntf","nitf"]},"application/vnd.noblenet-directory":{source:"iana",extensions:["nnd"]},"application/vnd.noblenet-sealer":{source:"iana",extensions:["nns"]},"application/vnd.noblenet-web":{source:"iana",extensions:["nnw"]},"application/vnd.nokia.catalogs":{source:"iana"},"application/vnd.nokia.conml+wbxml":{source:"iana"},"application/vnd.nokia.conml+xml":{source:"iana",compressible:!0},"application/vnd.nokia.iptv.config+xml":{source:"iana",compressible:!0},"application/vnd.nokia.isds-radio-presets":{source:"iana"},"application/vnd.nokia.landmark+wbxml":{source:"iana"},"application/vnd.nokia.landmark+xml":{source:"iana",compressible:!0},"application/vnd.nokia.landmarkcollection+xml":{source:"iana",compressible:!0},"application/vnd.nokia.n-gage.ac+xml":{source:"iana",compressible:!0,extensions:["ac"]},"application/vnd.nokia.n-gage.data":{source:"iana",extensions:["ngdat"]},"application/vnd.nokia.n-gage.symbian.install":{source:"iana",extensions:["n-gage"]},"application/vnd.nokia.ncd":{source:"iana"},"application/vnd.nokia.pcd+wbxml":{source:"iana"},"application/vnd.nokia.pcd+xml":{source:"iana",compressible:!0},"application/vnd.nokia.radio-preset":{source:"iana",extensions:["rpst"]},"application/vnd.nokia.radio-presets":{source:"iana",extensions:["rpss"]},"application/vnd.novadigm.edm":{source:"iana",extensions:["edm"]},"application/vnd.novadigm.edx":{source:"iana",extensions:["edx"]},"application/vnd.novadigm.ext":{source:"iana",extensions:["ext"]},"application/vnd.ntt-local.content-share":{source:"iana"},"application/vnd.ntt-local.file-transfer":{source:"iana"},"application/vnd.ntt-local.ogw_remote-access":{source:"iana"},"application/vnd.ntt-local.sip-ta_remote":{source:"iana"},"application/vnd.ntt-local.sip-ta_tcp_stream":{source:"iana"},"application/vnd.oasis.opendocument.chart":{source:"iana",extensions:["odc"]},"application/vnd.oasis.opendocument.chart-template":{source:"iana",extensions:["otc"]},"application/vnd.oasis.opendocument.database":{source:"iana",extensions:["odb"]},"application/vnd.oasis.opendocument.formula":{source:"iana",extensions:["odf"]},"application/vnd.oasis.opendocument.formula-template":{source:"iana",extensions:["odft"]},"application/vnd.oasis.opendocument.graphics":{source:"iana",compressible:!1,extensions:["odg"]},"application/vnd.oasis.opendocument.graphics-template":{source:"iana",extensions:["otg"]},"application/vnd.oasis.opendocument.image":{source:"iana",extensions:["odi"]},"application/vnd.oasis.opendocument.image-template":{source:"iana",extensions:["oti"]},"application/vnd.oasis.opendocument.presentation":{source:"iana",compressible:!1,extensions:["odp"]},"application/vnd.oasis.opendocument.presentation-template":{source:"iana",extensions:["otp"]},"application/vnd.oasis.opendocument.spreadsheet":{source:"iana",compressible:!1,extensions:["ods"]},"application/vnd.oasis.opendocument.spreadsheet-template":{source:"iana",extensions:["ots"]},"application/vnd.oasis.opendocument.text":{source:"iana",compressible:!1,extensions:["odt"]},"application/vnd.oasis.opendocument.text-master":{source:"iana",extensions:["odm"]},"application/vnd.oasis.opendocument.text-template":{source:"iana",extensions:["ott"]},"application/vnd.oasis.opendocument.text-web":{source:"iana",extensions:["oth"]},"application/vnd.obn":{source:"iana"},"application/vnd.ocf+cbor":{source:"iana"},"application/vnd.oci.image.manifest.v1+json":{source:"iana",compressible:!0},"application/vnd.oftn.l10n+json":{source:"iana",compressible:!0},"application/vnd.oipf.contentaccessdownload+xml":{source:"iana",compressible:!0},"application/vnd.oipf.contentaccessstreaming+xml":{source:"iana",compressible:!0},"application/vnd.oipf.cspg-hexbinary":{source:"iana"},"application/vnd.oipf.dae.svg+xml":{source:"iana",compressible:!0},"application/vnd.oipf.dae.xhtml+xml":{source:"iana",compressible:!0},"application/vnd.oipf.mippvcontrolmessage+xml":{source:"iana",compressible:!0},"application/vnd.oipf.pae.gem":{source:"iana"},"application/vnd.oipf.spdiscovery+xml":{source:"iana",compressible:!0},"application/vnd.oipf.spdlist+xml":{source:"iana",compressible:!0},"application/vnd.oipf.ueprofile+xml":{source:"iana",compressible:!0},"application/vnd.oipf.userprofile+xml":{source:"iana",compressible:!0},"application/vnd.olpc-sugar":{source:"iana",extensions:["xo"]},"application/vnd.oma-scws-config":{source:"iana"},"application/vnd.oma-scws-http-request":{source:"iana"},"application/vnd.oma-scws-http-response":{source:"iana"},"application/vnd.oma.bcast.associated-procedure-parameter+xml":{source:"iana",compressible:!0},"application/vnd.oma.bcast.drm-trigger+xml":{source:"iana",compressible:!0},"application/vnd.oma.bcast.imd+xml":{source:"iana",compressible:!0},"application/vnd.oma.bcast.ltkm":{source:"iana"},"application/vnd.oma.bcast.notification+xml":{source:"iana",compressible:!0},"application/vnd.oma.bcast.provisioningtrigger":{source:"iana"},"application/vnd.oma.bcast.sgboot":{source:"iana"},"application/vnd.oma.bcast.sgdd+xml":{source:"iana",compressible:!0},"application/vnd.oma.bcast.sgdu":{source:"iana"},"application/vnd.oma.bcast.simple-symbol-container":{source:"iana"},"application/vnd.oma.bcast.smartcard-trigger+xml":{source:"iana",compressible:!0},"application/vnd.oma.bcast.sprov+xml":{source:"iana",compressible:!0},"application/vnd.oma.bcast.stkm":{source:"iana"},"application/vnd.oma.cab-address-book+xml":{source:"iana",compressible:!0},"application/vnd.oma.cab-feature-handler+xml":{source:"iana",compressible:!0},"application/vnd.oma.cab-pcc+xml":{source:"iana",compressible:!0},"application/vnd.oma.cab-subs-invite+xml":{source:"iana",compressible:!0},"application/vnd.oma.cab-user-prefs+xml":{source:"iana",compressible:!0},"application/vnd.oma.dcd":{source:"iana"},"application/vnd.oma.dcdc":{source:"iana"},"application/vnd.oma.dd2+xml":{source:"iana",compressible:!0,extensions:["dd2"]},"application/vnd.oma.drm.risd+xml":{source:"iana",compressible:!0},"application/vnd.oma.group-usage-list+xml":{source:"iana",compressible:!0},"application/vnd.oma.lwm2m+cbor":{source:"iana"},"application/vnd.oma.lwm2m+json":{source:"iana",compressible:!0},"application/vnd.oma.lwm2m+tlv":{source:"iana"},"application/vnd.oma.pal+xml":{source:"iana",compressible:!0},"application/vnd.oma.poc.detailed-progress-report+xml":{source:"iana",compressible:!0},"application/vnd.oma.poc.final-report+xml":{source:"iana",compressible:!0},"application/vnd.oma.poc.groups+xml":{source:"iana",compressible:!0},"application/vnd.oma.poc.invocation-descriptor+xml":{source:"iana",compressible:!0},"application/vnd.oma.poc.optimized-progress-report+xml":{source:"iana",compressible:!0},"application/vnd.oma.push":{source:"iana"},"application/vnd.oma.scidm.messages+xml":{source:"iana",compressible:!0},"application/vnd.oma.xcap-directory+xml":{source:"iana",compressible:!0},"application/vnd.omads-email+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/vnd.omads-file+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/vnd.omads-folder+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/vnd.omaloc-supl-init":{source:"iana"},"application/vnd.onepager":{source:"iana"},"application/vnd.onepagertamp":{source:"iana"},"application/vnd.onepagertamx":{source:"iana"},"application/vnd.onepagertat":{source:"iana"},"application/vnd.onepagertatp":{source:"iana"},"application/vnd.onepagertatx":{source:"iana"},"application/vnd.openblox.game+xml":{source:"iana",compressible:!0,extensions:["obgx"]},"application/vnd.openblox.game-binary":{source:"iana"},"application/vnd.openeye.oeb":{source:"iana"},"application/vnd.openofficeorg.extension":{source:"apache",extensions:["oxt"]},"application/vnd.openstreetmap.data+xml":{source:"iana",compressible:!0,extensions:["osm"]},"application/vnd.opentimestamps.ots":{source:"iana"},"application/vnd.openxmlformats-officedocument.custom-properties+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.customxmlproperties+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.drawing+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.drawingml.chart+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.extended-properties+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.comments+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.presentation":{source:"iana",compressible:!1,extensions:["pptx"]},"application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.presprops+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.slide":{source:"iana",extensions:["sldx"]},"application/vnd.openxmlformats-officedocument.presentationml.slide+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.slideshow":{source:"iana",extensions:["ppsx"]},"application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.tags+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.template":{source:"iana",extensions:["potx"]},"application/vnd.openxmlformats-officedocument.presentationml.template.main+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":{source:"iana",compressible:!1,extensions:["xlsx"]},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.template":{source:"iana",extensions:["xltx"]},"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.theme+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.themeoverride+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.vmldrawing":{source:"iana"},"application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.document":{source:"iana",compressible:!1,extensions:["docx"]},"application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.template":{source:"iana",extensions:["dotx"]},"application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-package.core-properties+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-package.relationships+xml":{source:"iana",compressible:!0},"application/vnd.oracle.resource+json":{source:"iana",compressible:!0},"application/vnd.orange.indata":{source:"iana"},"application/vnd.osa.netdeploy":{source:"iana"},"application/vnd.osgeo.mapguide.package":{source:"iana",extensions:["mgp"]},"application/vnd.osgi.bundle":{source:"iana"},"application/vnd.osgi.dp":{source:"iana",extensions:["dp"]},"application/vnd.osgi.subsystem":{source:"iana",extensions:["esa"]},"application/vnd.otps.ct-kip+xml":{source:"iana",compressible:!0},"application/vnd.oxli.countgraph":{source:"iana"},"application/vnd.pagerduty+json":{source:"iana",compressible:!0},"application/vnd.palm":{source:"iana",extensions:["pdb","pqa","oprc"]},"application/vnd.panoply":{source:"iana"},"application/vnd.paos.xml":{source:"iana"},"application/vnd.patentdive":{source:"iana"},"application/vnd.patientecommsdoc":{source:"iana"},"application/vnd.pawaafile":{source:"iana",extensions:["paw"]},"application/vnd.pcos":{source:"iana"},"application/vnd.pg.format":{source:"iana",extensions:["str"]},"application/vnd.pg.osasli":{source:"iana",extensions:["ei6"]},"application/vnd.piaccess.application-licence":{source:"iana"},"application/vnd.picsel":{source:"iana",extensions:["efif"]},"application/vnd.pmi.widget":{source:"iana",extensions:["wg"]},"application/vnd.poc.group-advertisement+xml":{source:"iana",compressible:!0},"application/vnd.pocketlearn":{source:"iana",extensions:["plf"]},"application/vnd.powerbuilder6":{source:"iana",extensions:["pbd"]},"application/vnd.powerbuilder6-s":{source:"iana"},"application/vnd.powerbuilder7":{source:"iana"},"application/vnd.powerbuilder7-s":{source:"iana"},"application/vnd.powerbuilder75":{source:"iana"},"application/vnd.powerbuilder75-s":{source:"iana"},"application/vnd.preminet":{source:"iana"},"application/vnd.previewsystems.box":{source:"iana",extensions:["box"]},"application/vnd.proteus.magazine":{source:"iana",extensions:["mgz"]},"application/vnd.psfs":{source:"iana"},"application/vnd.publishare-delta-tree":{source:"iana",extensions:["qps"]},"application/vnd.pvi.ptid1":{source:"iana",extensions:["ptid"]},"application/vnd.pwg-multiplexed":{source:"iana"},"application/vnd.pwg-xhtml-print+xml":{source:"iana",compressible:!0},"application/vnd.qualcomm.brew-app-res":{source:"iana"},"application/vnd.quarantainenet":{source:"iana"},"application/vnd.quark.quarkxpress":{source:"iana",extensions:["qxd","qxt","qwd","qwt","qxl","qxb"]},"application/vnd.quobject-quoxdocument":{source:"iana"},"application/vnd.radisys.moml+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-audit+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-audit-conf+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-audit-conn+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-audit-dialog+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-audit-stream+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-conf+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-dialog+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-dialog-base+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-dialog-fax-detect+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-dialog-fax-sendrecv+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-dialog-group+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-dialog-speech+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-dialog-transform+xml":{source:"iana",compressible:!0},"application/vnd.rainstor.data":{source:"iana"},"application/vnd.rapid":{source:"iana"},"application/vnd.rar":{source:"iana",extensions:["rar"]},"application/vnd.realvnc.bed":{source:"iana",extensions:["bed"]},"application/vnd.recordare.musicxml":{source:"iana",extensions:["mxl"]},"application/vnd.recordare.musicxml+xml":{source:"iana",compressible:!0,extensions:["musicxml"]},"application/vnd.renlearn.rlprint":{source:"iana"},"application/vnd.resilient.logic":{source:"iana"},"application/vnd.restful+json":{source:"iana",compressible:!0},"application/vnd.rig.cryptonote":{source:"iana",extensions:["cryptonote"]},"application/vnd.rim.cod":{source:"apache",extensions:["cod"]},"application/vnd.rn-realmedia":{source:"apache",extensions:["rm"]},"application/vnd.rn-realmedia-vbr":{source:"apache",extensions:["rmvb"]},"application/vnd.route66.link66+xml":{source:"iana",compressible:!0,extensions:["link66"]},"application/vnd.rs-274x":{source:"iana"},"application/vnd.ruckus.download":{source:"iana"},"application/vnd.s3sms":{source:"iana"},"application/vnd.sailingtracker.track":{source:"iana",extensions:["st"]},"application/vnd.sar":{source:"iana"},"application/vnd.sbm.cid":{source:"iana"},"application/vnd.sbm.mid2":{source:"iana"},"application/vnd.scribus":{source:"iana"},"application/vnd.sealed.3df":{source:"iana"},"application/vnd.sealed.csf":{source:"iana"},"application/vnd.sealed.doc":{source:"iana"},"application/vnd.sealed.eml":{source:"iana"},"application/vnd.sealed.mht":{source:"iana"},"application/vnd.sealed.net":{source:"iana"},"application/vnd.sealed.ppt":{source:"iana"},"application/vnd.sealed.tiff":{source:"iana"},"application/vnd.sealed.xls":{source:"iana"},"application/vnd.sealedmedia.softseal.html":{source:"iana"},"application/vnd.sealedmedia.softseal.pdf":{source:"iana"},"application/vnd.seemail":{source:"iana",extensions:["see"]},"application/vnd.seis+json":{source:"iana",compressible:!0},"application/vnd.sema":{source:"iana",extensions:["sema"]},"application/vnd.semd":{source:"iana",extensions:["semd"]},"application/vnd.semf":{source:"iana",extensions:["semf"]},"application/vnd.shade-save-file":{source:"iana"},"application/vnd.shana.informed.formdata":{source:"iana",extensions:["ifm"]},"application/vnd.shana.informed.formtemplate":{source:"iana",extensions:["itp"]},"application/vnd.shana.informed.interchange":{source:"iana",extensions:["iif"]},"application/vnd.shana.informed.package":{source:"iana",extensions:["ipk"]},"application/vnd.shootproof+json":{source:"iana",compressible:!0},"application/vnd.shopkick+json":{source:"iana",compressible:!0},"application/vnd.shp":{source:"iana"},"application/vnd.shx":{source:"iana"},"application/vnd.sigrok.session":{source:"iana"},"application/vnd.simtech-mindmapper":{source:"iana",extensions:["twd","twds"]},"application/vnd.siren+json":{source:"iana",compressible:!0},"application/vnd.smaf":{source:"iana",extensions:["mmf"]},"application/vnd.smart.notebook":{source:"iana"},"application/vnd.smart.teacher":{source:"iana",extensions:["teacher"]},"application/vnd.snesdev-page-table":{source:"iana"},"application/vnd.software602.filler.form+xml":{source:"iana",compressible:!0,extensions:["fo"]},"application/vnd.software602.filler.form-xml-zip":{source:"iana"},"application/vnd.solent.sdkm+xml":{source:"iana",compressible:!0,extensions:["sdkm","sdkd"]},"application/vnd.spotfire.dxp":{source:"iana",extensions:["dxp"]},"application/vnd.spotfire.sfs":{source:"iana",extensions:["sfs"]},"application/vnd.sqlite3":{source:"iana"},"application/vnd.sss-cod":{source:"iana"},"application/vnd.sss-dtf":{source:"iana"},"application/vnd.sss-ntf":{source:"iana"},"application/vnd.stardivision.calc":{source:"apache",extensions:["sdc"]},"application/vnd.stardivision.draw":{source:"apache",extensions:["sda"]},"application/vnd.stardivision.impress":{source:"apache",extensions:["sdd"]},"application/vnd.stardivision.math":{source:"apache",extensions:["smf"]},"application/vnd.stardivision.writer":{source:"apache",extensions:["sdw","vor"]},"application/vnd.stardivision.writer-global":{source:"apache",extensions:["sgl"]},"application/vnd.stepmania.package":{source:"iana",extensions:["smzip"]},"application/vnd.stepmania.stepchart":{source:"iana",extensions:["sm"]},"application/vnd.street-stream":{source:"iana"},"application/vnd.sun.wadl+xml":{source:"iana",compressible:!0,extensions:["wadl"]},"application/vnd.sun.xml.calc":{source:"apache",extensions:["sxc"]},"application/vnd.sun.xml.calc.template":{source:"apache",extensions:["stc"]},"application/vnd.sun.xml.draw":{source:"apache",extensions:["sxd"]},"application/vnd.sun.xml.draw.template":{source:"apache",extensions:["std"]},"application/vnd.sun.xml.impress":{source:"apache",extensions:["sxi"]},"application/vnd.sun.xml.impress.template":{source:"apache",extensions:["sti"]},"application/vnd.sun.xml.math":{source:"apache",extensions:["sxm"]},"application/vnd.sun.xml.writer":{source:"apache",extensions:["sxw"]},"application/vnd.sun.xml.writer.global":{source:"apache",extensions:["sxg"]},"application/vnd.sun.xml.writer.template":{source:"apache",extensions:["stw"]},"application/vnd.sus-calendar":{source:"iana",extensions:["sus","susp"]},"application/vnd.svd":{source:"iana",extensions:["svd"]},"application/vnd.swiftview-ics":{source:"iana"},"application/vnd.sycle+xml":{source:"iana",compressible:!0},"application/vnd.syft+json":{source:"iana",compressible:!0},"application/vnd.symbian.install":{source:"apache",extensions:["sis","sisx"]},"application/vnd.syncml+xml":{source:"iana",charset:"UTF-8",compressible:!0,extensions:["xsm"]},"application/vnd.syncml.dm+wbxml":{source:"iana",charset:"UTF-8",extensions:["bdm"]},"application/vnd.syncml.dm+xml":{source:"iana",charset:"UTF-8",compressible:!0,extensions:["xdm"]},"application/vnd.syncml.dm.notification":{source:"iana"},"application/vnd.syncml.dmddf+wbxml":{source:"iana"},"application/vnd.syncml.dmddf+xml":{source:"iana",charset:"UTF-8",compressible:!0,extensions:["ddf"]},"application/vnd.syncml.dmtnds+wbxml":{source:"iana"},"application/vnd.syncml.dmtnds+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/vnd.syncml.ds.notification":{source:"iana"},"application/vnd.tableschema+json":{source:"iana",compressible:!0},"application/vnd.tao.intent-module-archive":{source:"iana",extensions:["tao"]},"application/vnd.tcpdump.pcap":{source:"iana",extensions:["pcap","cap","dmp"]},"application/vnd.think-cell.ppttc+json":{source:"iana",compressible:!0},"application/vnd.tmd.mediaflex.api+xml":{source:"iana",compressible:!0},"application/vnd.tml":{source:"iana"},"application/vnd.tmobile-livetv":{source:"iana",extensions:["tmo"]},"application/vnd.tri.onesource":{source:"iana"},"application/vnd.trid.tpt":{source:"iana",extensions:["tpt"]},"application/vnd.triscape.mxs":{source:"iana",extensions:["mxs"]},"application/vnd.trueapp":{source:"iana",extensions:["tra"]},"application/vnd.truedoc":{source:"iana"},"application/vnd.ubisoft.webplayer":{source:"iana"},"application/vnd.ufdl":{source:"iana",extensions:["ufd","ufdl"]},"application/vnd.uiq.theme":{source:"iana",extensions:["utz"]},"application/vnd.umajin":{source:"iana",extensions:["umj"]},"application/vnd.unity":{source:"iana",extensions:["unityweb"]},"application/vnd.uoml+xml":{source:"iana",compressible:!0,extensions:["uoml"]},"application/vnd.uplanet.alert":{source:"iana"},"application/vnd.uplanet.alert-wbxml":{source:"iana"},"application/vnd.uplanet.bearer-choice":{source:"iana"},"application/vnd.uplanet.bearer-choice-wbxml":{source:"iana"},"application/vnd.uplanet.cacheop":{source:"iana"},"application/vnd.uplanet.cacheop-wbxml":{source:"iana"},"application/vnd.uplanet.channel":{source:"iana"},"application/vnd.uplanet.channel-wbxml":{source:"iana"},"application/vnd.uplanet.list":{source:"iana"},"application/vnd.uplanet.list-wbxml":{source:"iana"},"application/vnd.uplanet.listcmd":{source:"iana"},"application/vnd.uplanet.listcmd-wbxml":{source:"iana"},"application/vnd.uplanet.signal":{source:"iana"},"application/vnd.uri-map":{source:"iana"},"application/vnd.valve.source.material":{source:"iana"},"application/vnd.vcx":{source:"iana",extensions:["vcx"]},"application/vnd.vd-study":{source:"iana"},"application/vnd.vectorworks":{source:"iana"},"application/vnd.vel+json":{source:"iana",compressible:!0},"application/vnd.verimatrix.vcas":{source:"iana"},"application/vnd.veritone.aion+json":{source:"iana",compressible:!0},"application/vnd.veryant.thin":{source:"iana"},"application/vnd.ves.encrypted":{source:"iana"},"application/vnd.vidsoft.vidconference":{source:"iana"},"application/vnd.visio":{source:"iana",extensions:["vsd","vst","vss","vsw"]},"application/vnd.visionary":{source:"iana",extensions:["vis"]},"application/vnd.vividence.scriptfile":{source:"iana"},"application/vnd.vsf":{source:"iana",extensions:["vsf"]},"application/vnd.wap.sic":{source:"iana"},"application/vnd.wap.slc":{source:"iana"},"application/vnd.wap.wbxml":{source:"iana",charset:"UTF-8",extensions:["wbxml"]},"application/vnd.wap.wmlc":{source:"iana",extensions:["wmlc"]},"application/vnd.wap.wmlscriptc":{source:"iana",extensions:["wmlsc"]},"application/vnd.webturbo":{source:"iana",extensions:["wtb"]},"application/vnd.wfa.dpp":{source:"iana"},"application/vnd.wfa.p2p":{source:"iana"},"application/vnd.wfa.wsc":{source:"iana"},"application/vnd.windows.devicepairing":{source:"iana"},"application/vnd.wmc":{source:"iana"},"application/vnd.wmf.bootstrap":{source:"iana"},"application/vnd.wolfram.mathematica":{source:"iana"},"application/vnd.wolfram.mathematica.package":{source:"iana"},"application/vnd.wolfram.player":{source:"iana",extensions:["nbp"]},"application/vnd.wordperfect":{source:"iana",extensions:["wpd"]},"application/vnd.wqd":{source:"iana",extensions:["wqd"]},"application/vnd.wrq-hp3000-labelled":{source:"iana"},"application/vnd.wt.stf":{source:"iana",extensions:["stf"]},"application/vnd.wv.csp+wbxml":{source:"iana"},"application/vnd.wv.csp+xml":{source:"iana",compressible:!0},"application/vnd.wv.ssp+xml":{source:"iana",compressible:!0},"application/vnd.xacml+json":{source:"iana",compressible:!0},"application/vnd.xara":{source:"iana",extensions:["xar"]},"application/vnd.xfdl":{source:"iana",extensions:["xfdl"]},"application/vnd.xfdl.webform":{source:"iana"},"application/vnd.xmi+xml":{source:"iana",compressible:!0},"application/vnd.xmpie.cpkg":{source:"iana"},"application/vnd.xmpie.dpkg":{source:"iana"},"application/vnd.xmpie.plan":{source:"iana"},"application/vnd.xmpie.ppkg":{source:"iana"},"application/vnd.xmpie.xlim":{source:"iana"},"application/vnd.yamaha.hv-dic":{source:"iana",extensions:["hvd"]},"application/vnd.yamaha.hv-script":{source:"iana",extensions:["hvs"]},"application/vnd.yamaha.hv-voice":{source:"iana",extensions:["hvp"]},"application/vnd.yamaha.openscoreformat":{source:"iana",extensions:["osf"]},"application/vnd.yamaha.openscoreformat.osfpvg+xml":{source:"iana",compressible:!0,extensions:["osfpvg"]},"application/vnd.yamaha.remote-setup":{source:"iana"},"application/vnd.yamaha.smaf-audio":{source:"iana",extensions:["saf"]},"application/vnd.yamaha.smaf-phrase":{source:"iana",extensions:["spf"]},"application/vnd.yamaha.through-ngn":{source:"iana"},"application/vnd.yamaha.tunnel-udpencap":{source:"iana"},"application/vnd.yaoweme":{source:"iana"},"application/vnd.yellowriver-custom-menu":{source:"iana",extensions:["cmp"]},"application/vnd.youtube.yt":{source:"iana"},"application/vnd.zul":{source:"iana",extensions:["zir","zirz"]},"application/vnd.zzazz.deck+xml":{source:"iana",compressible:!0,extensions:["zaz"]},"application/voicexml+xml":{source:"iana",compressible:!0,extensions:["vxml"]},"application/voucher-cms+json":{source:"iana",compressible:!0},"application/vq-rtcpxr":{source:"iana"},"application/wasm":{source:"iana",compressible:!0,extensions:["wasm"]},"application/watcherinfo+xml":{source:"iana",compressible:!0,extensions:["wif"]},"application/webpush-options+json":{source:"iana",compressible:!0},"application/whoispp-query":{source:"iana"},"application/whoispp-response":{source:"iana"},"application/widget":{source:"iana",extensions:["wgt"]},"application/winhlp":{source:"apache",extensions:["hlp"]},"application/wita":{source:"iana"},"application/wordperfect5.1":{source:"iana"},"application/wsdl+xml":{source:"iana",compressible:!0,extensions:["wsdl"]},"application/wspolicy+xml":{source:"iana",compressible:!0,extensions:["wspolicy"]},"application/x-7z-compressed":{source:"apache",compressible:!1,extensions:["7z"]},"application/x-abiword":{source:"apache",extensions:["abw"]},"application/x-ace-compressed":{source:"apache",extensions:["ace"]},"application/x-amf":{source:"apache"},"application/x-apple-diskimage":{source:"apache",extensions:["dmg"]},"application/x-arj":{compressible:!1,extensions:["arj"]},"application/x-authorware-bin":{source:"apache",extensions:["aab","x32","u32","vox"]},"application/x-authorware-map":{source:"apache",extensions:["aam"]},"application/x-authorware-seg":{source:"apache",extensions:["aas"]},"application/x-bcpio":{source:"apache",extensions:["bcpio"]},"application/x-bdoc":{compressible:!1,extensions:["bdoc"]},"application/x-bittorrent":{source:"apache",extensions:["torrent"]},"application/x-blorb":{source:"apache",extensions:["blb","blorb"]},"application/x-bzip":{source:"apache",compressible:!1,extensions:["bz"]},"application/x-bzip2":{source:"apache",compressible:!1,extensions:["bz2","boz"]},"application/x-cbr":{source:"apache",extensions:["cbr","cba","cbt","cbz","cb7"]},"application/x-cdlink":{source:"apache",extensions:["vcd"]},"application/x-cfs-compressed":{source:"apache",extensions:["cfs"]},"application/x-chat":{source:"apache",extensions:["chat"]},"application/x-chess-pgn":{source:"apache",extensions:["pgn"]},"application/x-chrome-extension":{extensions:["crx"]},"application/x-cocoa":{source:"nginx",extensions:["cco"]},"application/x-compress":{source:"apache"},"application/x-conference":{source:"apache",extensions:["nsc"]},"application/x-cpio":{source:"apache",extensions:["cpio"]},"application/x-csh":{source:"apache",extensions:["csh"]},"application/x-deb":{compressible:!1},"application/x-debian-package":{source:"apache",extensions:["deb","udeb"]},"application/x-dgc-compressed":{source:"apache",extensions:["dgc"]},"application/x-director":{source:"apache",extensions:["dir","dcr","dxr","cst","cct","cxt","w3d","fgd","swa"]},"application/x-doom":{source:"apache",extensions:["wad"]},"application/x-dtbncx+xml":{source:"apache",compressible:!0,extensions:["ncx"]},"application/x-dtbook+xml":{source:"apache",compressible:!0,extensions:["dtb"]},"application/x-dtbresource+xml":{source:"apache",compressible:!0,extensions:["res"]},"application/x-dvi":{source:"apache",compressible:!1,extensions:["dvi"]},"application/x-envoy":{source:"apache",extensions:["evy"]},"application/x-eva":{source:"apache",extensions:["eva"]},"application/x-font-bdf":{source:"apache",extensions:["bdf"]},"application/x-font-dos":{source:"apache"},"application/x-font-framemaker":{source:"apache"},"application/x-font-ghostscript":{source:"apache",extensions:["gsf"]},"application/x-font-libgrx":{source:"apache"},"application/x-font-linux-psf":{source:"apache",extensions:["psf"]},"application/x-font-pcf":{source:"apache",extensions:["pcf"]},"application/x-font-snf":{source:"apache",extensions:["snf"]},"application/x-font-speedo":{source:"apache"},"application/x-font-sunos-news":{source:"apache"},"application/x-font-type1":{source:"apache",extensions:["pfa","pfb","pfm","afm"]},"application/x-font-vfont":{source:"apache"},"application/x-freearc":{source:"apache",extensions:["arc"]},"application/x-futuresplash":{source:"apache",extensions:["spl"]},"application/x-gca-compressed":{source:"apache",extensions:["gca"]},"application/x-glulx":{source:"apache",extensions:["ulx"]},"application/x-gnumeric":{source:"apache",extensions:["gnumeric"]},"application/x-gramps-xml":{source:"apache",extensions:["gramps"]},"application/x-gtar":{source:"apache",extensions:["gtar"]},"application/x-gzip":{source:"apache"},"application/x-hdf":{source:"apache",extensions:["hdf"]},"application/x-httpd-php":{compressible:!0,extensions:["php"]},"application/x-install-instructions":{source:"apache",extensions:["install"]},"application/x-iso9660-image":{source:"apache",extensions:["iso"]},"application/x-iwork-keynote-sffkey":{extensions:["key"]},"application/x-iwork-numbers-sffnumbers":{extensions:["numbers"]},"application/x-iwork-pages-sffpages":{extensions:["pages"]},"application/x-java-archive-diff":{source:"nginx",extensions:["jardiff"]},"application/x-java-jnlp-file":{source:"apache",compressible:!1,extensions:["jnlp"]},"application/x-javascript":{compressible:!0},"application/x-keepass2":{extensions:["kdbx"]},"application/x-latex":{source:"apache",compressible:!1,extensions:["latex"]},"application/x-lua-bytecode":{extensions:["luac"]},"application/x-lzh-compressed":{source:"apache",extensions:["lzh","lha"]},"application/x-makeself":{source:"nginx",extensions:["run"]},"application/x-mie":{source:"apache",extensions:["mie"]},"application/x-mobipocket-ebook":{source:"apache",extensions:["prc","mobi"]},"application/x-mpegurl":{compressible:!1},"application/x-ms-application":{source:"apache",extensions:["application"]},"application/x-ms-shortcut":{source:"apache",extensions:["lnk"]},"application/x-ms-wmd":{source:"apache",extensions:["wmd"]},"application/x-ms-wmz":{source:"apache",extensions:["wmz"]},"application/x-ms-xbap":{source:"apache",extensions:["xbap"]},"application/x-msaccess":{source:"apache",extensions:["mdb"]},"application/x-msbinder":{source:"apache",extensions:["obd"]},"application/x-mscardfile":{source:"apache",extensions:["crd"]},"application/x-msclip":{source:"apache",extensions:["clp"]},"application/x-msdos-program":{extensions:["exe"]},"application/x-msdownload":{source:"apache",extensions:["exe","dll","com","bat","msi"]},"application/x-msmediaview":{source:"apache",extensions:["mvb","m13","m14"]},"application/x-msmetafile":{source:"apache",extensions:["wmf","wmz","emf","emz"]},"application/x-msmoney":{source:"apache",extensions:["mny"]},"application/x-mspublisher":{source:"apache",extensions:["pub"]},"application/x-msschedule":{source:"apache",extensions:["scd"]},"application/x-msterminal":{source:"apache",extensions:["trm"]},"application/x-mswrite":{source:"apache",extensions:["wri"]},"application/x-netcdf":{source:"apache",extensions:["nc","cdf"]},"application/x-ns-proxy-autoconfig":{compressible:!0,extensions:["pac"]},"application/x-nzb":{source:"apache",extensions:["nzb"]},"application/x-perl":{source:"nginx",extensions:["pl","pm"]},"application/x-pilot":{source:"nginx",extensions:["prc","pdb"]},"application/x-pkcs12":{source:"apache",compressible:!1,extensions:["p12","pfx"]},"application/x-pkcs7-certificates":{source:"apache",extensions:["p7b","spc"]},"application/x-pkcs7-certreqresp":{source:"apache",extensions:["p7r"]},"application/x-pki-message":{source:"iana"},"application/x-rar-compressed":{source:"apache",compressible:!1,extensions:["rar"]},"application/x-redhat-package-manager":{source:"nginx",extensions:["rpm"]},"application/x-research-info-systems":{source:"apache",extensions:["ris"]},"application/x-sea":{source:"nginx",extensions:["sea"]},"application/x-sh":{source:"apache",compressible:!0,extensions:["sh"]},"application/x-shar":{source:"apache",extensions:["shar"]},"application/x-shockwave-flash":{source:"apache",compressible:!1,extensions:["swf"]},"application/x-silverlight-app":{source:"apache",extensions:["xap"]},"application/x-sql":{source:"apache",extensions:["sql"]},"application/x-stuffit":{source:"apache",compressible:!1,extensions:["sit"]},"application/x-stuffitx":{source:"apache",extensions:["sitx"]},"application/x-subrip":{source:"apache",extensions:["srt"]},"application/x-sv4cpio":{source:"apache",extensions:["sv4cpio"]},"application/x-sv4crc":{source:"apache",extensions:["sv4crc"]},"application/x-t3vm-image":{source:"apache",extensions:["t3"]},"application/x-tads":{source:"apache",extensions:["gam"]},"application/x-tar":{source:"apache",compressible:!0,extensions:["tar"]},"application/x-tcl":{source:"apache",extensions:["tcl","tk"]},"application/x-tex":{source:"apache",extensions:["tex"]},"application/x-tex-tfm":{source:"apache",extensions:["tfm"]},"application/x-texinfo":{source:"apache",extensions:["texinfo","texi"]},"application/x-tgif":{source:"apache",extensions:["obj"]},"application/x-ustar":{source:"apache",extensions:["ustar"]},"application/x-virtualbox-hdd":{compressible:!0,extensions:["hdd"]},"application/x-virtualbox-ova":{compressible:!0,extensions:["ova"]},"application/x-virtualbox-ovf":{compressible:!0,extensions:["ovf"]},"application/x-virtualbox-vbox":{compressible:!0,extensions:["vbox"]},"application/x-virtualbox-vbox-extpack":{compressible:!1,extensions:["vbox-extpack"]},"application/x-virtualbox-vdi":{compressible:!0,extensions:["vdi"]},"application/x-virtualbox-vhd":{compressible:!0,extensions:["vhd"]},"application/x-virtualbox-vmdk":{compressible:!0,extensions:["vmdk"]},"application/x-wais-source":{source:"apache",extensions:["src"]},"application/x-web-app-manifest+json":{compressible:!0,extensions:["webapp"]},"application/x-www-form-urlencoded":{source:"iana",compressible:!0},"application/x-x509-ca-cert":{source:"iana",extensions:["der","crt","pem"]},"application/x-x509-ca-ra-cert":{source:"iana"},"application/x-x509-next-ca-cert":{source:"iana"},"application/x-xfig":{source:"apache",extensions:["fig"]},"application/x-xliff+xml":{source:"apache",compressible:!0,extensions:["xlf"]},"application/x-xpinstall":{source:"apache",compressible:!1,extensions:["xpi"]},"application/x-xz":{source:"apache",extensions:["xz"]},"application/x-zmachine":{source:"apache",extensions:["z1","z2","z3","z4","z5","z6","z7","z8"]},"application/x400-bp":{source:"iana"},"application/xacml+xml":{source:"iana",compressible:!0},"application/xaml+xml":{source:"apache",compressible:!0,extensions:["xaml"]},"application/xcap-att+xml":{source:"iana",compressible:!0,extensions:["xav"]},"application/xcap-caps+xml":{source:"iana",compressible:!0,extensions:["xca"]},"application/xcap-diff+xml":{source:"iana",compressible:!0,extensions:["xdf"]},"application/xcap-el+xml":{source:"iana",compressible:!0,extensions:["xel"]},"application/xcap-error+xml":{source:"iana",compressible:!0},"application/xcap-ns+xml":{source:"iana",compressible:!0,extensions:["xns"]},"application/xcon-conference-info+xml":{source:"iana",compressible:!0},"application/xcon-conference-info-diff+xml":{source:"iana",compressible:!0},"application/xenc+xml":{source:"iana",compressible:!0,extensions:["xenc"]},"application/xhtml+xml":{source:"iana",compressible:!0,extensions:["xhtml","xht"]},"application/xhtml-voice+xml":{source:"apache",compressible:!0},"application/xliff+xml":{source:"iana",compressible:!0,extensions:["xlf"]},"application/xml":{source:"iana",compressible:!0,extensions:["xml","xsl","xsd","rng"]},"application/xml-dtd":{source:"iana",compressible:!0,extensions:["dtd"]},"application/xml-external-parsed-entity":{source:"iana"},"application/xml-patch+xml":{source:"iana",compressible:!0},"application/xmpp+xml":{source:"iana",compressible:!0},"application/xop+xml":{source:"iana",compressible:!0,extensions:["xop"]},"application/xproc+xml":{source:"apache",compressible:!0,extensions:["xpl"]},"application/xslt+xml":{source:"iana",compressible:!0,extensions:["xsl","xslt"]},"application/xspf+xml":{source:"apache",compressible:!0,extensions:["xspf"]},"application/xv+xml":{source:"iana",compressible:!0,extensions:["mxml","xhvml","xvml","xvm"]},"application/yang":{source:"iana",extensions:["yang"]},"application/yang-data+json":{source:"iana",compressible:!0},"application/yang-data+xml":{source:"iana",compressible:!0},"application/yang-patch+json":{source:"iana",compressible:!0},"application/yang-patch+xml":{source:"iana",compressible:!0},"application/yin+xml":{source:"iana",compressible:!0,extensions:["yin"]},"application/zip":{source:"iana",compressible:!1,extensions:["zip"]},"application/zlib":{source:"iana"},"application/zstd":{source:"iana"},"audio/1d-interleaved-parityfec":{source:"iana"},"audio/32kadpcm":{source:"iana"},"audio/3gpp":{source:"iana",compressible:!1,extensions:["3gpp"]},"audio/3gpp2":{source:"iana"},"audio/aac":{source:"iana"},"audio/ac3":{source:"iana"},"audio/adpcm":{source:"apache",extensions:["adp"]},"audio/amr":{source:"iana",extensions:["amr"]},"audio/amr-wb":{source:"iana"},"audio/amr-wb+":{source:"iana"},"audio/aptx":{source:"iana"},"audio/asc":{source:"iana"},"audio/atrac-advanced-lossless":{source:"iana"},"audio/atrac-x":{source:"iana"},"audio/atrac3":{source:"iana"},"audio/basic":{source:"iana",compressible:!1,extensions:["au","snd"]},"audio/bv16":{source:"iana"},"audio/bv32":{source:"iana"},"audio/clearmode":{source:"iana"},"audio/cn":{source:"iana"},"audio/dat12":{source:"iana"},"audio/dls":{source:"iana"},"audio/dsr-es201108":{source:"iana"},"audio/dsr-es202050":{source:"iana"},"audio/dsr-es202211":{source:"iana"},"audio/dsr-es202212":{source:"iana"},"audio/dv":{source:"iana"},"audio/dvi4":{source:"iana"},"audio/eac3":{source:"iana"},"audio/encaprtp":{source:"iana"},"audio/evrc":{source:"iana"},"audio/evrc-qcp":{source:"iana"},"audio/evrc0":{source:"iana"},"audio/evrc1":{source:"iana"},"audio/evrcb":{source:"iana"},"audio/evrcb0":{source:"iana"},"audio/evrcb1":{source:"iana"},"audio/evrcnw":{source:"iana"},"audio/evrcnw0":{source:"iana"},"audio/evrcnw1":{source:"iana"},"audio/evrcwb":{source:"iana"},"audio/evrcwb0":{source:"iana"},"audio/evrcwb1":{source:"iana"},"audio/evs":{source:"iana"},"audio/flexfec":{source:"iana"},"audio/fwdred":{source:"iana"},"audio/g711-0":{source:"iana"},"audio/g719":{source:"iana"},"audio/g722":{source:"iana"},"audio/g7221":{source:"iana"},"audio/g723":{source:"iana"},"audio/g726-16":{source:"iana"},"audio/g726-24":{source:"iana"},"audio/g726-32":{source:"iana"},"audio/g726-40":{source:"iana"},"audio/g728":{source:"iana"},"audio/g729":{source:"iana"},"audio/g7291":{source:"iana"},"audio/g729d":{source:"iana"},"audio/g729e":{source:"iana"},"audio/gsm":{source:"iana"},"audio/gsm-efr":{source:"iana"},"audio/gsm-hr-08":{source:"iana"},"audio/ilbc":{source:"iana"},"audio/ip-mr_v2.5":{source:"iana"},"audio/isac":{source:"apache"},"audio/l16":{source:"iana"},"audio/l20":{source:"iana"},"audio/l24":{source:"iana",compressible:!1},"audio/l8":{source:"iana"},"audio/lpc":{source:"iana"},"audio/melp":{source:"iana"},"audio/melp1200":{source:"iana"},"audio/melp2400":{source:"iana"},"audio/melp600":{source:"iana"},"audio/mhas":{source:"iana"},"audio/midi":{source:"apache",extensions:["mid","midi","kar","rmi"]},"audio/mobile-xmf":{source:"iana",extensions:["mxmf"]},"audio/mp3":{compressible:!1,extensions:["mp3"]},"audio/mp4":{source:"iana",compressible:!1,extensions:["m4a","mp4a"]},"audio/mp4a-latm":{source:"iana"},"audio/mpa":{source:"iana"},"audio/mpa-robust":{source:"iana"},"audio/mpeg":{source:"iana",compressible:!1,extensions:["mpga","mp2","mp2a","mp3","m2a","m3a"]},"audio/mpeg4-generic":{source:"iana"},"audio/musepack":{source:"apache"},"audio/ogg":{source:"iana",compressible:!1,extensions:["oga","ogg","spx","opus"]},"audio/opus":{source:"iana"},"audio/parityfec":{source:"iana"},"audio/pcma":{source:"iana"},"audio/pcma-wb":{source:"iana"},"audio/pcmu":{source:"iana"},"audio/pcmu-wb":{source:"iana"},"audio/prs.sid":{source:"iana"},"audio/qcelp":{source:"iana"},"audio/raptorfec":{source:"iana"},"audio/red":{source:"iana"},"audio/rtp-enc-aescm128":{source:"iana"},"audio/rtp-midi":{source:"iana"},"audio/rtploopback":{source:"iana"},"audio/rtx":{source:"iana"},"audio/s3m":{source:"apache",extensions:["s3m"]},"audio/scip":{source:"iana"},"audio/silk":{source:"apache",extensions:["sil"]},"audio/smv":{source:"iana"},"audio/smv-qcp":{source:"iana"},"audio/smv0":{source:"iana"},"audio/sofa":{source:"iana"},"audio/sp-midi":{source:"iana"},"audio/speex":{source:"iana"},"audio/t140c":{source:"iana"},"audio/t38":{source:"iana"},"audio/telephone-event":{source:"iana"},"audio/tetra_acelp":{source:"iana"},"audio/tetra_acelp_bb":{source:"iana"},"audio/tone":{source:"iana"},"audio/tsvcis":{source:"iana"},"audio/uemclip":{source:"iana"},"audio/ulpfec":{source:"iana"},"audio/usac":{source:"iana"},"audio/vdvi":{source:"iana"},"audio/vmr-wb":{source:"iana"},"audio/vnd.3gpp.iufp":{source:"iana"},"audio/vnd.4sb":{source:"iana"},"audio/vnd.audiokoz":{source:"iana"},"audio/vnd.celp":{source:"iana"},"audio/vnd.cisco.nse":{source:"iana"},"audio/vnd.cmles.radio-events":{source:"iana"},"audio/vnd.cns.anp1":{source:"iana"},"audio/vnd.cns.inf1":{source:"iana"},"audio/vnd.dece.audio":{source:"iana",extensions:["uva","uvva"]},"audio/vnd.digital-winds":{source:"iana",extensions:["eol"]},"audio/vnd.dlna.adts":{source:"iana"},"audio/vnd.dolby.heaac.1":{source:"iana"},"audio/vnd.dolby.heaac.2":{source:"iana"},"audio/vnd.dolby.mlp":{source:"iana"},"audio/vnd.dolby.mps":{source:"iana"},"audio/vnd.dolby.pl2":{source:"iana"},"audio/vnd.dolby.pl2x":{source:"iana"},"audio/vnd.dolby.pl2z":{source:"iana"},"audio/vnd.dolby.pulse.1":{source:"iana"},"audio/vnd.dra":{source:"iana",extensions:["dra"]},"audio/vnd.dts":{source:"iana",extensions:["dts"]},"audio/vnd.dts.hd":{source:"iana",extensions:["dtshd"]},"audio/vnd.dts.uhd":{source:"iana"},"audio/vnd.dvb.file":{source:"iana"},"audio/vnd.everad.plj":{source:"iana"},"audio/vnd.hns.audio":{source:"iana"},"audio/vnd.lucent.voice":{source:"iana",extensions:["lvp"]},"audio/vnd.ms-playready.media.pya":{source:"iana",extensions:["pya"]},"audio/vnd.nokia.mobile-xmf":{source:"iana"},"audio/vnd.nortel.vbk":{source:"iana"},"audio/vnd.nuera.ecelp4800":{source:"iana",extensions:["ecelp4800"]},"audio/vnd.nuera.ecelp7470":{source:"iana",extensions:["ecelp7470"]},"audio/vnd.nuera.ecelp9600":{source:"iana",extensions:["ecelp9600"]},"audio/vnd.octel.sbc":{source:"iana"},"audio/vnd.presonus.multitrack":{source:"iana"},"audio/vnd.qcelp":{source:"iana"},"audio/vnd.rhetorex.32kadpcm":{source:"iana"},"audio/vnd.rip":{source:"iana",extensions:["rip"]},"audio/vnd.rn-realaudio":{compressible:!1},"audio/vnd.sealedmedia.softseal.mpeg":{source:"iana"},"audio/vnd.vmx.cvsd":{source:"iana"},"audio/vnd.wave":{compressible:!1},"audio/vorbis":{source:"iana",compressible:!1},"audio/vorbis-config":{source:"iana"},"audio/wav":{compressible:!1,extensions:["wav"]},"audio/wave":{compressible:!1,extensions:["wav"]},"audio/webm":{source:"apache",compressible:!1,extensions:["weba"]},"audio/x-aac":{source:"apache",compressible:!1,extensions:["aac"]},"audio/x-aiff":{source:"apache",extensions:["aif","aiff","aifc"]},"audio/x-caf":{source:"apache",compressible:!1,extensions:["caf"]},"audio/x-flac":{source:"apache",extensions:["flac"]},"audio/x-m4a":{source:"nginx",extensions:["m4a"]},"audio/x-matroska":{source:"apache",extensions:["mka"]},"audio/x-mpegurl":{source:"apache",extensions:["m3u"]},"audio/x-ms-wax":{source:"apache",extensions:["wax"]},"audio/x-ms-wma":{source:"apache",extensions:["wma"]},"audio/x-pn-realaudio":{source:"apache",extensions:["ram","ra"]},"audio/x-pn-realaudio-plugin":{source:"apache",extensions:["rmp"]},"audio/x-realaudio":{source:"nginx",extensions:["ra"]},"audio/x-tta":{source:"apache"},"audio/x-wav":{source:"apache",extensions:["wav"]},"audio/xm":{source:"apache",extensions:["xm"]},"chemical/x-cdx":{source:"apache",extensions:["cdx"]},"chemical/x-cif":{source:"apache",extensions:["cif"]},"chemical/x-cmdf":{source:"apache",extensions:["cmdf"]},"chemical/x-cml":{source:"apache",extensions:["cml"]},"chemical/x-csml":{source:"apache",extensions:["csml"]},"chemical/x-pdb":{source:"apache"},"chemical/x-xyz":{source:"apache",extensions:["xyz"]},"font/collection":{source:"iana",extensions:["ttc"]},"font/otf":{source:"iana",compressible:!0,extensions:["otf"]},"font/sfnt":{source:"iana"},"font/ttf":{source:"iana",compressible:!0,extensions:["ttf"]},"font/woff":{source:"iana",extensions:["woff"]},"font/woff2":{source:"iana",extensions:["woff2"]},"image/aces":{source:"iana",extensions:["exr"]},"image/apng":{compressible:!1,extensions:["apng"]},"image/avci":{source:"iana",extensions:["avci"]},"image/avcs":{source:"iana",extensions:["avcs"]},"image/avif":{source:"iana",compressible:!1,extensions:["avif"]},"image/bmp":{source:"iana",compressible:!0,extensions:["bmp"]},"image/cgm":{source:"iana",extensions:["cgm"]},"image/dicom-rle":{source:"iana",extensions:["drle"]},"image/emf":{source:"iana",extensions:["emf"]},"image/fits":{source:"iana",extensions:["fits"]},"image/g3fax":{source:"iana",extensions:["g3"]},"image/gif":{source:"iana",compressible:!1,extensions:["gif"]},"image/heic":{source:"iana",extensions:["heic"]},"image/heic-sequence":{source:"iana",extensions:["heics"]},"image/heif":{source:"iana",extensions:["heif"]},"image/heif-sequence":{source:"iana",extensions:["heifs"]},"image/hej2k":{source:"iana",extensions:["hej2"]},"image/hsj2":{source:"iana",extensions:["hsj2"]},"image/ief":{source:"iana",extensions:["ief"]},"image/jls":{source:"iana",extensions:["jls"]},"image/jp2":{source:"iana",compressible:!1,extensions:["jp2","jpg2"]},"image/jpeg":{source:"iana",compressible:!1,extensions:["jpeg","jpg","jpe"]},"image/jph":{source:"iana",extensions:["jph"]},"image/jphc":{source:"iana",extensions:["jhc"]},"image/jpm":{source:"iana",compressible:!1,extensions:["jpm"]},"image/jpx":{source:"iana",compressible:!1,extensions:["jpx","jpf"]},"image/jxr":{source:"iana",extensions:["jxr"]},"image/jxra":{source:"iana",extensions:["jxra"]},"image/jxrs":{source:"iana",extensions:["jxrs"]},"image/jxs":{source:"iana",extensions:["jxs"]},"image/jxsc":{source:"iana",extensions:["jxsc"]},"image/jxsi":{source:"iana",extensions:["jxsi"]},"image/jxss":{source:"iana",extensions:["jxss"]},"image/ktx":{source:"iana",extensions:["ktx"]},"image/ktx2":{source:"iana",extensions:["ktx2"]},"image/naplps":{source:"iana"},"image/pjpeg":{compressible:!1},"image/png":{source:"iana",compressible:!1,extensions:["png"]},"image/prs.btif":{source:"iana",extensions:["btif"]},"image/prs.pti":{source:"iana",extensions:["pti"]},"image/pwg-raster":{source:"iana"},"image/sgi":{source:"apache",extensions:["sgi"]},"image/svg+xml":{source:"iana",compressible:!0,extensions:["svg","svgz"]},"image/t38":{source:"iana",extensions:["t38"]},"image/tiff":{source:"iana",compressible:!1,extensions:["tif","tiff"]},"image/tiff-fx":{source:"iana",extensions:["tfx"]},"image/vnd.adobe.photoshop":{source:"iana",compressible:!0,extensions:["psd"]},"image/vnd.airzip.accelerator.azv":{source:"iana",extensions:["azv"]},"image/vnd.cns.inf2":{source:"iana"},"image/vnd.dece.graphic":{source:"iana",extensions:["uvi","uvvi","uvg","uvvg"]},"image/vnd.djvu":{source:"iana",extensions:["djvu","djv"]},"image/vnd.dvb.subtitle":{source:"iana",extensions:["sub"]},"image/vnd.dwg":{source:"iana",extensions:["dwg"]},"image/vnd.dxf":{source:"iana",extensions:["dxf"]},"image/vnd.fastbidsheet":{source:"iana",extensions:["fbs"]},"image/vnd.fpx":{source:"iana",extensions:["fpx"]},"image/vnd.fst":{source:"iana",extensions:["fst"]},"image/vnd.fujixerox.edmics-mmr":{source:"iana",extensions:["mmr"]},"image/vnd.fujixerox.edmics-rlc":{source:"iana",extensions:["rlc"]},"image/vnd.globalgraphics.pgb":{source:"iana"},"image/vnd.microsoft.icon":{source:"iana",compressible:!0,extensions:["ico"]},"image/vnd.mix":{source:"iana"},"image/vnd.mozilla.apng":{source:"iana"},"image/vnd.ms-dds":{compressible:!0,extensions:["dds"]},"image/vnd.ms-modi":{source:"iana",extensions:["mdi"]},"image/vnd.ms-photo":{source:"apache",extensions:["wdp"]},"image/vnd.net-fpx":{source:"iana",extensions:["npx"]},"image/vnd.pco.b16":{source:"iana",extensions:["b16"]},"image/vnd.radiance":{source:"iana"},"image/vnd.sealed.png":{source:"iana"},"image/vnd.sealedmedia.softseal.gif":{source:"iana"},"image/vnd.sealedmedia.softseal.jpg":{source:"iana"},"image/vnd.svf":{source:"iana"},"image/vnd.tencent.tap":{source:"iana",extensions:["tap"]},"image/vnd.valve.source.texture":{source:"iana",extensions:["vtf"]},"image/vnd.wap.wbmp":{source:"iana",extensions:["wbmp"]},"image/vnd.xiff":{source:"iana",extensions:["xif"]},"image/vnd.zbrush.pcx":{source:"iana",extensions:["pcx"]},"image/webp":{source:"apache",extensions:["webp"]},"image/wmf":{source:"iana",extensions:["wmf"]},"image/x-3ds":{source:"apache",extensions:["3ds"]},"image/x-cmu-raster":{source:"apache",extensions:["ras"]},"image/x-cmx":{source:"apache",extensions:["cmx"]},"image/x-freehand":{source:"apache",extensions:["fh","fhc","fh4","fh5","fh7"]},"image/x-icon":{source:"apache",compressible:!0,extensions:["ico"]},"image/x-jng":{source:"nginx",extensions:["jng"]},"image/x-mrsid-image":{source:"apache",extensions:["sid"]},"image/x-ms-bmp":{source:"nginx",compressible:!0,extensions:["bmp"]},"image/x-pcx":{source:"apache",extensions:["pcx"]},"image/x-pict":{source:"apache",extensions:["pic","pct"]},"image/x-portable-anymap":{source:"apache",extensions:["pnm"]},"image/x-portable-bitmap":{source:"apache",extensions:["pbm"]},"image/x-portable-graymap":{source:"apache",extensions:["pgm"]},"image/x-portable-pixmap":{source:"apache",extensions:["ppm"]},"image/x-rgb":{source:"apache",extensions:["rgb"]},"image/x-tga":{source:"apache",extensions:["tga"]},"image/x-xbitmap":{source:"apache",extensions:["xbm"]},"image/x-xcf":{compressible:!1},"image/x-xpixmap":{source:"apache",extensions:["xpm"]},"image/x-xwindowdump":{source:"apache",extensions:["xwd"]},"message/cpim":{source:"iana"},"message/delivery-status":{source:"iana"},"message/disposition-notification":{source:"iana",extensions:["disposition-notification"]},"message/external-body":{source:"iana"},"message/feedback-report":{source:"iana"},"message/global":{source:"iana",extensions:["u8msg"]},"message/global-delivery-status":{source:"iana",extensions:["u8dsn"]},"message/global-disposition-notification":{source:"iana",extensions:["u8mdn"]},"message/global-headers":{source:"iana",extensions:["u8hdr"]},"message/http":{source:"iana",compressible:!1},"message/imdn+xml":{source:"iana",compressible:!0},"message/news":{source:"iana"},"message/partial":{source:"iana",compressible:!1},"message/rfc822":{source:"iana",compressible:!0,extensions:["eml","mime"]},"message/s-http":{source:"iana"},"message/sip":{source:"iana"},"message/sipfrag":{source:"iana"},"message/tracking-status":{source:"iana"},"message/vnd.si.simp":{source:"iana"},"message/vnd.wfa.wsc":{source:"iana",extensions:["wsc"]},"model/3mf":{source:"iana",extensions:["3mf"]},"model/e57":{source:"iana"},"model/gltf+json":{source:"iana",compressible:!0,extensions:["gltf"]},"model/gltf-binary":{source:"iana",compressible:!0,extensions:["glb"]},"model/iges":{source:"iana",compressible:!1,extensions:["igs","iges"]},"model/mesh":{source:"iana",compressible:!1,extensions:["msh","mesh","silo"]},"model/mtl":{source:"iana",extensions:["mtl"]},"model/obj":{source:"iana",extensions:["obj"]},"model/step":{source:"iana"},"model/step+xml":{source:"iana",compressible:!0,extensions:["stpx"]},"model/step+zip":{source:"iana",compressible:!1,extensions:["stpz"]},"model/step-xml+zip":{source:"iana",compressible:!1,extensions:["stpxz"]},"model/stl":{source:"iana",extensions:["stl"]},"model/vnd.collada+xml":{source:"iana",compressible:!0,extensions:["dae"]},"model/vnd.dwf":{source:"iana",extensions:["dwf"]},"model/vnd.flatland.3dml":{source:"iana"},"model/vnd.gdl":{source:"iana",extensions:["gdl"]},"model/vnd.gs-gdl":{source:"apache"},"model/vnd.gs.gdl":{source:"iana"},"model/vnd.gtw":{source:"iana",extensions:["gtw"]},"model/vnd.moml+xml":{source:"iana",compressible:!0},"model/vnd.mts":{source:"iana",extensions:["mts"]},"model/vnd.opengex":{source:"iana",extensions:["ogex"]},"model/vnd.parasolid.transmit.binary":{source:"iana",extensions:["x_b"]},"model/vnd.parasolid.transmit.text":{source:"iana",extensions:["x_t"]},"model/vnd.pytha.pyox":{source:"iana"},"model/vnd.rosette.annotated-data-model":{source:"iana"},"model/vnd.sap.vds":{source:"iana",extensions:["vds"]},"model/vnd.usdz+zip":{source:"iana",compressible:!1,extensions:["usdz"]},"model/vnd.valve.source.compiled-map":{source:"iana",extensions:["bsp"]},"model/vnd.vtu":{source:"iana",extensions:["vtu"]},"model/vrml":{source:"iana",compressible:!1,extensions:["wrl","vrml"]},"model/x3d+binary":{source:"apache",compressible:!1,extensions:["x3db","x3dbz"]},"model/x3d+fastinfoset":{source:"iana",extensions:["x3db"]},"model/x3d+vrml":{source:"apache",compressible:!1,extensions:["x3dv","x3dvz"]},"model/x3d+xml":{source:"iana",compressible:!0,extensions:["x3d","x3dz"]},"model/x3d-vrml":{source:"iana",extensions:["x3dv"]},"multipart/alternative":{source:"iana",compressible:!1},"multipart/appledouble":{source:"iana"},"multipart/byteranges":{source:"iana"},"multipart/digest":{source:"iana"},"multipart/encrypted":{source:"iana",compressible:!1},"multipart/form-data":{source:"iana",compressible:!1},"multipart/header-set":{source:"iana"},"multipart/mixed":{source:"iana"},"multipart/multilingual":{source:"iana"},"multipart/parallel":{source:"iana"},"multipart/related":{source:"iana",compressible:!1},"multipart/report":{source:"iana"},"multipart/signed":{source:"iana",compressible:!1},"multipart/vnd.bint.med-plus":{source:"iana"},"multipart/voice-message":{source:"iana"},"multipart/x-mixed-replace":{source:"iana"},"text/1d-interleaved-parityfec":{source:"iana"},"text/cache-manifest":{source:"iana",compressible:!0,extensions:["appcache","manifest"]},"text/calendar":{source:"iana",extensions:["ics","ifb"]},"text/calender":{compressible:!0},"text/cmd":{compressible:!0},"text/coffeescript":{extensions:["coffee","litcoffee"]},"text/cql":{source:"iana"},"text/cql-expression":{source:"iana"},"text/cql-identifier":{source:"iana"},"text/css":{source:"iana",charset:"UTF-8",compressible:!0,extensions:["css"]},"text/csv":{source:"iana",compressible:!0,extensions:["csv"]},"text/csv-schema":{source:"iana"},"text/directory":{source:"iana"},"text/dns":{source:"iana"},"text/ecmascript":{source:"iana"},"text/encaprtp":{source:"iana"},"text/enriched":{source:"iana"},"text/fhirpath":{source:"iana"},"text/flexfec":{source:"iana"},"text/fwdred":{source:"iana"},"text/gff3":{source:"iana"},"text/grammar-ref-list":{source:"iana"},"text/html":{source:"iana",compressible:!0,extensions:["html","htm","shtml"]},"text/jade":{extensions:["jade"]},"text/javascript":{source:"iana",compressible:!0},"text/jcr-cnd":{source:"iana"},"text/jsx":{compressible:!0,extensions:["jsx"]},"text/less":{compressible:!0,extensions:["less"]},"text/markdown":{source:"iana",compressible:!0,extensions:["markdown","md"]},"text/mathml":{source:"nginx",extensions:["mml"]},"text/mdx":{compressible:!0,extensions:["mdx"]},"text/mizar":{source:"iana"},"text/n3":{source:"iana",charset:"UTF-8",compressible:!0,extensions:["n3"]},"text/parameters":{source:"iana",charset:"UTF-8"},"text/parityfec":{source:"iana"},"text/plain":{source:"iana",compressible:!0,extensions:["txt","text","conf","def","list","log","in","ini"]},"text/provenance-notation":{source:"iana",charset:"UTF-8"},"text/prs.fallenstein.rst":{source:"iana"},"text/prs.lines.tag":{source:"iana",extensions:["dsc"]},"text/prs.prop.logic":{source:"iana"},"text/raptorfec":{source:"iana"},"text/red":{source:"iana"},"text/rfc822-headers":{source:"iana"},"text/richtext":{source:"iana",compressible:!0,extensions:["rtx"]},"text/rtf":{source:"iana",compressible:!0,extensions:["rtf"]},"text/rtp-enc-aescm128":{source:"iana"},"text/rtploopback":{source:"iana"},"text/rtx":{source:"iana"},"text/sgml":{source:"iana",extensions:["sgml","sgm"]},"text/shaclc":{source:"iana"},"text/shex":{source:"iana",extensions:["shex"]},"text/slim":{extensions:["slim","slm"]},"text/spdx":{source:"iana",extensions:["spdx"]},"text/strings":{source:"iana"},"text/stylus":{extensions:["stylus","styl"]},"text/t140":{source:"iana"},"text/tab-separated-values":{source:"iana",compressible:!0,extensions:["tsv"]},"text/troff":{source:"iana",extensions:["t","tr","roff","man","me","ms"]},"text/turtle":{source:"iana",charset:"UTF-8",extensions:["ttl"]},"text/ulpfec":{source:"iana"},"text/uri-list":{source:"iana",compressible:!0,extensions:["uri","uris","urls"]},"text/vcard":{source:"iana",compressible:!0,extensions:["vcard"]},"text/vnd.a":{source:"iana"},"text/vnd.abc":{source:"iana"},"text/vnd.ascii-art":{source:"iana"},"text/vnd.curl":{source:"iana",extensions:["curl"]},"text/vnd.curl.dcurl":{source:"apache",extensions:["dcurl"]},"text/vnd.curl.mcurl":{source:"apache",extensions:["mcurl"]},"text/vnd.curl.scurl":{source:"apache",extensions:["scurl"]},"text/vnd.debian.copyright":{source:"iana",charset:"UTF-8"},"text/vnd.dmclientscript":{source:"iana"},"text/vnd.dvb.subtitle":{source:"iana",extensions:["sub"]},"text/vnd.esmertec.theme-descriptor":{source:"iana",charset:"UTF-8"},"text/vnd.familysearch.gedcom":{source:"iana",extensions:["ged"]},"text/vnd.ficlab.flt":{source:"iana"},"text/vnd.fly":{source:"iana",extensions:["fly"]},"text/vnd.fmi.flexstor":{source:"iana",extensions:["flx"]},"text/vnd.gml":{source:"iana"},"text/vnd.graphviz":{source:"iana",extensions:["gv"]},"text/vnd.hans":{source:"iana"},"text/vnd.hgl":{source:"iana"},"text/vnd.in3d.3dml":{source:"iana",extensions:["3dml"]},"text/vnd.in3d.spot":{source:"iana",extensions:["spot"]},"text/vnd.iptc.newsml":{source:"iana"},"text/vnd.iptc.nitf":{source:"iana"},"text/vnd.latex-z":{source:"iana"},"text/vnd.motorola.reflex":{source:"iana"},"text/vnd.ms-mediapackage":{source:"iana"},"text/vnd.net2phone.commcenter.command":{source:"iana"},"text/vnd.radisys.msml-basic-layout":{source:"iana"},"text/vnd.senx.warpscript":{source:"iana"},"text/vnd.si.uricatalogue":{source:"iana"},"text/vnd.sosi":{source:"iana"},"text/vnd.sun.j2me.app-descriptor":{source:"iana",charset:"UTF-8",extensions:["jad"]},"text/vnd.trolltech.linguist":{source:"iana",charset:"UTF-8"},"text/vnd.wap.si":{source:"iana"},"text/vnd.wap.sl":{source:"iana"},"text/vnd.wap.wml":{source:"iana",extensions:["wml"]},"text/vnd.wap.wmlscript":{source:"iana",extensions:["wmls"]},"text/vtt":{source:"iana",charset:"UTF-8",compressible:!0,extensions:["vtt"]},"text/x-asm":{source:"apache",extensions:["s","asm"]},"text/x-c":{source:"apache",extensions:["c","cc","cxx","cpp","h","hh","dic"]},"text/x-component":{source:"nginx",extensions:["htc"]},"text/x-fortran":{source:"apache",extensions:["f","for","f77","f90"]},"text/x-gwt-rpc":{compressible:!0},"text/x-handlebars-template":{extensions:["hbs"]},"text/x-java-source":{source:"apache",extensions:["java"]},"text/x-jquery-tmpl":{compressible:!0},"text/x-lua":{extensions:["lua"]},"text/x-markdown":{compressible:!0,extensions:["mkd"]},"text/x-nfo":{source:"apache",extensions:["nfo"]},"text/x-opml":{source:"apache",extensions:["opml"]},"text/x-org":{compressible:!0,extensions:["org"]},"text/x-pascal":{source:"apache",extensions:["p","pas"]},"text/x-processing":{compressible:!0,extensions:["pde"]},"text/x-sass":{extensions:["sass"]},"text/x-scss":{extensions:["scss"]},"text/x-setext":{source:"apache",extensions:["etx"]},"text/x-sfv":{source:"apache",extensions:["sfv"]},"text/x-suse-ymp":{compressible:!0,extensions:["ymp"]},"text/x-uuencode":{source:"apache",extensions:["uu"]},"text/x-vcalendar":{source:"apache",extensions:["vcs"]},"text/x-vcard":{source:"apache",extensions:["vcf"]},"text/xml":{source:"iana",compressible:!0,extensions:["xml"]},"text/xml-external-parsed-entity":{source:"iana"},"text/yaml":{compressible:!0,extensions:["yaml","yml"]},"video/1d-interleaved-parityfec":{source:"iana"},"video/3gpp":{source:"iana",extensions:["3gp","3gpp"]},"video/3gpp-tt":{source:"iana"},"video/3gpp2":{source:"iana",extensions:["3g2"]},"video/av1":{source:"iana"},"video/bmpeg":{source:"iana"},"video/bt656":{source:"iana"},"video/celb":{source:"iana"},"video/dv":{source:"iana"},"video/encaprtp":{source:"iana"},"video/ffv1":{source:"iana"},"video/flexfec":{source:"iana"},"video/h261":{source:"iana",extensions:["h261"]},"video/h263":{source:"iana",extensions:["h263"]},"video/h263-1998":{source:"iana"},"video/h263-2000":{source:"iana"},"video/h264":{source:"iana",extensions:["h264"]},"video/h264-rcdo":{source:"iana"},"video/h264-svc":{source:"iana"},"video/h265":{source:"iana"},"video/iso.segment":{source:"iana",extensions:["m4s"]},"video/jpeg":{source:"iana",extensions:["jpgv"]},"video/jpeg2000":{source:"iana"},"video/jpm":{source:"apache",extensions:["jpm","jpgm"]},"video/jxsv":{source:"iana"},"video/mj2":{source:"iana",extensions:["mj2","mjp2"]},"video/mp1s":{source:"iana"},"video/mp2p":{source:"iana"},"video/mp2t":{source:"iana",extensions:["ts"]},"video/mp4":{source:"iana",compressible:!1,extensions:["mp4","mp4v","mpg4"]},"video/mp4v-es":{source:"iana"},"video/mpeg":{source:"iana",compressible:!1,extensions:["mpeg","mpg","mpe","m1v","m2v"]},"video/mpeg4-generic":{source:"iana"},"video/mpv":{source:"iana"},"video/nv":{source:"iana"},"video/ogg":{source:"iana",compressible:!1,extensions:["ogv"]},"video/parityfec":{source:"iana"},"video/pointer":{source:"iana"},"video/quicktime":{source:"iana",compressible:!1,extensions:["qt","mov"]},"video/raptorfec":{source:"iana"},"video/raw":{source:"iana"},"video/rtp-enc-aescm128":{source:"iana"},"video/rtploopback":{source:"iana"},"video/rtx":{source:"iana"},"video/scip":{source:"iana"},"video/smpte291":{source:"iana"},"video/smpte292m":{source:"iana"},"video/ulpfec":{source:"iana"},"video/vc1":{source:"iana"},"video/vc2":{source:"iana"},"video/vnd.cctv":{source:"iana"},"video/vnd.dece.hd":{source:"iana",extensions:["uvh","uvvh"]},"video/vnd.dece.mobile":{source:"iana",extensions:["uvm","uvvm"]},"video/vnd.dece.mp4":{source:"iana"},"video/vnd.dece.pd":{source:"iana",extensions:["uvp","uvvp"]},"video/vnd.dece.sd":{source:"iana",extensions:["uvs","uvvs"]},"video/vnd.dece.video":{source:"iana",extensions:["uvv","uvvv"]},"video/vnd.directv.mpeg":{source:"iana"},"video/vnd.directv.mpeg-tts":{source:"iana"},"video/vnd.dlna.mpeg-tts":{source:"iana"},"video/vnd.dvb.file":{source:"iana",extensions:["dvb"]},"video/vnd.fvt":{source:"iana",extensions:["fvt"]},"video/vnd.hns.video":{source:"iana"},"video/vnd.iptvforum.1dparityfec-1010":{source:"iana"},"video/vnd.iptvforum.1dparityfec-2005":{source:"iana"},"video/vnd.iptvforum.2dparityfec-1010":{source:"iana"},"video/vnd.iptvforum.2dparityfec-2005":{source:"iana"},"video/vnd.iptvforum.ttsavc":{source:"iana"},"video/vnd.iptvforum.ttsmpeg2":{source:"iana"},"video/vnd.motorola.video":{source:"iana"},"video/vnd.motorola.videop":{source:"iana"},"video/vnd.mpegurl":{source:"iana",extensions:["mxu","m4u"]},"video/vnd.ms-playready.media.pyv":{source:"iana",extensions:["pyv"]},"video/vnd.nokia.interleaved-multimedia":{source:"iana"},"video/vnd.nokia.mp4vr":{source:"iana"},"video/vnd.nokia.videovoip":{source:"iana"},"video/vnd.objectvideo":{source:"iana"},"video/vnd.radgamettools.bink":{source:"iana"},"video/vnd.radgamettools.smacker":{source:"iana"},"video/vnd.sealed.mpeg1":{source:"iana"},"video/vnd.sealed.mpeg4":{source:"iana"},"video/vnd.sealed.swf":{source:"iana"},"video/vnd.sealedmedia.softseal.mov":{source:"iana"},"video/vnd.uvvu.mp4":{source:"iana",extensions:["uvu","uvvu"]},"video/vnd.vivo":{source:"iana",extensions:["viv"]},"video/vnd.youtube.yt":{source:"iana"},"video/vp8":{source:"iana"},"video/vp9":{source:"iana"},"video/webm":{source:"apache",compressible:!1,extensions:["webm"]},"video/x-f4v":{source:"apache",extensions:["f4v"]},"video/x-fli":{source:"apache",extensions:["fli"]},"video/x-flv":{source:"apache",compressible:!1,extensions:["flv"]},"video/x-m4v":{source:"apache",extensions:["m4v"]},"video/x-matroska":{source:"apache",compressible:!1,extensions:["mkv","mk3d","mks"]},"video/x-mng":{source:"apache",extensions:["mng"]},"video/x-ms-asf":{source:"apache",extensions:["asf","asx"]},"video/x-ms-vob":{source:"apache",extensions:["vob"]},"video/x-ms-wm":{source:"apache",extensions:["wm"]},"video/x-ms-wmv":{source:"apache",compressible:!1,extensions:["wmv"]},"video/x-ms-wmx":{source:"apache",extensions:["wmx"]},"video/x-ms-wvx":{source:"apache",extensions:["wvx"]},"video/x-msvideo":{source:"apache",extensions:["avi"]},"video/x-sgi-movie":{source:"apache",extensions:["movie"]},"video/x-smv":{source:"apache",extensions:["smv"]},"x-conference/x-cooltalk":{source:"apache",extensions:["ice"]},"x-shader/x-fragment":{compressible:!0},"x-shader/x-vertex":{compressible:!0}}});var Di=j((Qc,Pi)=>{Pi.exports=Fi()});var Ui=j(I=>{"use strict";var Ve=Di(),et=E("path").extname,Bi=/^\s*([^;\s]*)(?:;|\s|$)/,at=/^text\//i;I.charset=Ni;I.charsets={lookup:Ni};I.contentType=it;I.extension=nt;I.extensions=Object.create(null);I.lookup=st;I.types=Object.create(null);tt(I.extensions,I.types);function Ni(e){if(!e||typeof e!="string")return!1;var a=Bi.exec(e),i=a&&Ve[a[1].toLowerCase()];return i&&i.charset?i.charset:a&&at.test(a[1])?"UTF-8":!1}function it(e){if(!e||typeof e!="string")return!1;var a=e.indexOf("/")===-1?I.lookup(e):e;if(!a)return!1;if(a.indexOf("charset")===-1){var i=I.charset(a);i&&(a+="; charset="+i.toLowerCase())}return a}function nt(e){if(!e||typeof e!="string")return!1;var a=Bi.exec(e),i=a&&I.extensions[a[1].toLowerCase()];return!i||!i.length?!1:i[0]}function st(e){if(!e||typeof e!="string")return!1;var a=et("x."+e).toLowerCase().substr(1);return a&&I.types[a]||!1}function tt(e,a){var i=["nginx","apache",void 0,"iana"];Object.keys(Ve).forEach(function(s){var t=Ve[s],o=t.extensions;if(!(!o||!o.length)){e[s]=o;for(var c=0;cr||l===r&&a[u].substr(0,12)==="application/"))continue}a[u]=s}}})}});var $i=j((ap,Ii)=>{Ii.exports=ot;function ot(e){var a=typeof setImmediate=="function"?setImmediate:typeof process=="object"&&typeof process.nextTick=="function"?process.nextTick:null;a?a(e):setTimeout(e,0)}});var _a=j((ip,Mi)=>{var Hi=$i();Mi.exports=rt;function rt(e){var a=!1;return Hi(function(){a=!0}),function(n,s){a?e(n,s):Hi(function(){e(n,s)})}}});var ja=j((np,Wi)=>{Wi.exports=ct;function ct(e){Object.keys(e.jobs).forEach(pt.bind(e)),e.jobs={}}function pt(e){typeof this.jobs[e]=="function"&&this.jobs[e]()}});var ka=j((sp,Vi)=>{var Ki=_a(),lt=ja();Vi.exports=ut;function ut(e,a,i,n){var s=i.keyedList?i.keyedList[i.index]:i.index;i.jobs[s]=dt(a,s,e[s],function(t,o){s in i.jobs&&(delete i.jobs[s],t?lt(i):i.results[s]=o,n(t,i.results))})}function dt(e,a,i,n){var s;return e.length==2?s=e(i,Ki(n)):s=e(i,a,Ki(n)),s}});var Ea=j((tp,Gi)=>{Gi.exports=mt;function mt(e,a){var i=!Array.isArray(e),n={index:0,keyedList:i||a?Object.keys(e):null,jobs:{},results:i?{}:[],size:i?Object.keys(e).length:e.length};return a&&n.keyedList.sort(i?a:function(s,t){return a(e[s],e[t])}),n}});var Ra=j((op,Ji)=>{var ft=ja(),xt=_a();Ji.exports=ht;function ht(e){Object.keys(this.jobs).length&&(this.index=this.size,ft(this),xt(e)(null,this.results))}});var Yi=j((rp,Xi)=>{var vt=ka(),bt=Ea(),gt=Ra();Xi.exports=yt;function yt(e,a,i){for(var n=bt(e);n.index<(n.keyedList||e).length;)vt(e,a,n,function(s,t){if(s){i(s,t);return}if(Object.keys(n.jobs).length===0){i(null,n.results);return}}),n.index++;return gt.bind(n,i)}});var Sa=j((cp,Ge)=>{var Zi=ka(),wt=Ea(),_t=Ra();Ge.exports=jt;Ge.exports.ascending=Qi;Ge.exports.descending=kt;function jt(e,a,i,n){var s=wt(e,i);return Zi(e,a,s,function t(o,c){if(o){n(o,c);return}if(s.index++,s.index<(s.keyedList||e).length){Zi(e,a,s,t);return}n(null,s.results)}),_t.bind(s,n)}function Qi(e,a){return ea?1:0}function kt(e,a){return-1*Qi(e,a)}});var an=j((pp,en)=>{var Et=Sa();en.exports=Rt;function Rt(e,a,i){return Et(e,a,null,i)}});var sn=j((lp,nn)=>{nn.exports={parallel:Yi(),serial:an(),serialOrdered:Sa()}});var on=j((up,tn)=>{tn.exports=function(e,a){return Object.keys(a).forEach(function(i){e[i]=e[i]||a[i]}),e}});var pn=j((dp,cn)=>{var Aa=Li(),rn=E("util"),Oa=E("path"),St=E("http"),Ot=E("https"),Ct=E("url").parse,Tt=E("fs"),At=E("stream").Stream,Ca=Ui(),qt=sn(),Ta=on();cn.exports=R;rn.inherits(R,Aa);function R(e){if(!(this instanceof R))return new R(e);this._overheadLength=0,this._valueLength=0,this._valuesToMeasure=[],Aa.call(this),e=e||{};for(var a in e)this[a]=e[a]}R.LINE_BREAK=`\r -`;R.DEFAULT_CONTENT_TYPE="application/octet-stream";R.prototype.append=function(e,a,i){i=i||{},typeof i=="string"&&(i={filename:i});var n=Aa.prototype.append.bind(this);if(typeof a=="number"&&(a=""+a),rn.isArray(a)){this._error(new Error("Arrays are not supported."));return}var s=this._multiPartHeader(e,a,i),t=this._multiPartFooter();n(s),n(a),n(t),this._trackLength(s,a,i)};R.prototype._trackLength=function(e,a,i){var n=0;i.knownLength!=null?n+=+i.knownLength:Buffer.isBuffer(a)?n=a.length:typeof a=="string"&&(n=Buffer.byteLength(a)),this._valueLength+=n,this._overheadLength+=Buffer.byteLength(e)+R.LINE_BREAK.length,!(!a||!a.path&&!(a.readable&&a.hasOwnProperty("httpVersion"))&&!(a instanceof At))&&(i.knownLength||this._valuesToMeasure.push(a))};R.prototype._lengthRetriever=function(e,a){e.hasOwnProperty("fd")?e.end!=null&&e.end!=1/0&&e.start!=null?a(null,e.end+1-(e.start?e.start:0)):Tt.stat(e.path,function(i,n){var s;if(i){a(i);return}s=n.size-(e.start?e.start:0),a(null,s)}):e.hasOwnProperty("httpVersion")?a(null,+e.headers["content-length"]):e.hasOwnProperty("httpModule")?(e.on("response",function(i){e.pause(),a(null,+i.headers["content-length"])}),e.resume()):a("Unknown stream")};R.prototype._multiPartHeader=function(e,a,i){if(typeof i.header=="string")return i.header;var n=this._getContentDisposition(a,i),s=this._getContentType(a,i),t="",o={"Content-Disposition":["form-data",'name="'+e+'"'].concat(n||[]),"Content-Type":[].concat(s||[])};typeof i.header=="object"&&Ta(o,i.header);var c;for(var u in o)o.hasOwnProperty(u)&&(c=o[u],c!=null&&(Array.isArray(c)||(c=[c]),c.length&&(t+=u+": "+c.join("; ")+R.LINE_BREAK)));return"--"+this.getBoundary()+R.LINE_BREAK+t+R.LINE_BREAK};R.prototype._getContentDisposition=function(e,a){var i,n;return typeof a.filepath=="string"?i=Oa.normalize(a.filepath).replace(/\\/g,"/"):a.filename||e.name||e.path?i=Oa.basename(a.filename||e.name||e.path):e.readable&&e.hasOwnProperty("httpVersion")&&(i=Oa.basename(e.client._httpMessage.path||"")),i&&(n='filename="'+i+'"'),n};R.prototype._getContentType=function(e,a){var i=a.contentType;return!i&&e.name&&(i=Ca.lookup(e.name)),!i&&e.path&&(i=Ca.lookup(e.path)),!i&&e.readable&&e.hasOwnProperty("httpVersion")&&(i=e.headers["content-type"]),!i&&(a.filepath||a.filename)&&(i=Ca.lookup(a.filepath||a.filename)),!i&&typeof e=="object"&&(i=R.DEFAULT_CONTENT_TYPE),i};R.prototype._multiPartFooter=function(){return function(e){var a=R.LINE_BREAK,i=this._streams.length===0;i&&(a+=this._lastBoundary()),e(a)}.bind(this)};R.prototype._lastBoundary=function(){return"--"+this.getBoundary()+"--"+R.LINE_BREAK};R.prototype.getHeaders=function(e){var a,i={"content-type":"multipart/form-data; boundary="+this.getBoundary()};for(a in e)e.hasOwnProperty(a)&&(i[a.toLowerCase()]=e[a]);return i};R.prototype.setBoundary=function(e){this._boundary=e};R.prototype.getBoundary=function(){return this._boundary||this._generateBoundary(),this._boundary};R.prototype.getBuffer=function(){for(var e=new Buffer.alloc(0),a=this.getBoundary(),i=0,n=this._streams.length;i{"use strict";var zt=E("url").parse,Lt={ftp:21,gopher:70,http:80,https:443,ws:80,wss:443},Ft=String.prototype.endsWith||function(e){return e.length<=this.length&&this.indexOf(e,this.length-e.length)!==-1};function Pt(e){var a=typeof e=="string"?zt(e):e||{},i=a.protocol,n=a.host,s=a.port;if(typeof n!="string"||!n||typeof i!="string"||(i=i.split(":",1)[0],n=n.replace(/:\d*$/,""),s=parseInt(s)||Lt[i]||0,!Dt(n,s)))return"";var t=ye("npm_config_"+i+"_proxy")||ye(i+"_proxy")||ye("npm_config_proxy")||ye("all_proxy");return t&&t.indexOf("://")===-1&&(t=i+"://"+t),t}function Dt(e,a){var i=(ye("npm_config_no_proxy")||ye("no_proxy")).toLowerCase();return i?i==="*"?!1:i.split(/[,\s]/).every(function(n){if(!n)return!0;var s=n.match(/^(.+):(\d+)$/),t=s?s[1]:n,o=s?parseInt(s[2]):0;return o&&o!==a?!0:/^[.*]/.test(t)?(t.charAt(0)==="*"&&(t=t.slice(1)),!Ft.call(e,t)):e!==t}):!0}function ye(e){return process.env[e.toLowerCase()]||process.env[e.toUpperCase()]||""}ln.getProxyForUrl=Pt});var mn=j((fp,dn)=>{var we=1e3,_e=we*60,je=_e*60,xe=je*24,Bt=xe*7,Nt=xe*365.25;dn.exports=function(e,a){a=a||{};var i=typeof e;if(i==="string"&&e.length>0)return Ut(e);if(i==="number"&&isFinite(e))return a.long?$t(e):It(e);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(e))};function Ut(e){if(e=String(e),!(e.length>100)){var a=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(e);if(a){var i=parseFloat(a[1]),n=(a[2]||"ms").toLowerCase();switch(n){case"years":case"year":case"yrs":case"yr":case"y":return i*Nt;case"weeks":case"week":case"w":return i*Bt;case"days":case"day":case"d":return i*xe;case"hours":case"hour":case"hrs":case"hr":case"h":return i*je;case"minutes":case"minute":case"mins":case"min":case"m":return i*_e;case"seconds":case"second":case"secs":case"sec":case"s":return i*we;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return i;default:return}}}}function It(e){var a=Math.abs(e);return a>=xe?Math.round(e/xe)+"d":a>=je?Math.round(e/je)+"h":a>=_e?Math.round(e/_e)+"m":a>=we?Math.round(e/we)+"s":e+"ms"}function $t(e){var a=Math.abs(e);return a>=xe?Je(e,a,xe,"day"):a>=je?Je(e,a,je,"hour"):a>=_e?Je(e,a,_e,"minute"):a>=we?Je(e,a,we,"second"):e+" ms"}function Je(e,a,i,n){var s=a>=i*1.5;return Math.round(e/i)+" "+n+(s?"s":"")}});var qa=j((xp,fn)=>{function Ht(e){i.debug=i,i.default=i,i.coerce=u,i.disable=t,i.enable=s,i.enabled=o,i.humanize=mn(),i.destroy=l,Object.keys(e).forEach(r=>{i[r]=e[r]}),i.names=[],i.skips=[],i.formatters={};function a(r){let d=0;for(let x=0;x{if(P==="%%")return"%";C++;let ie=i.formatters[G];if(typeof ie=="function"){let ge=w[C];P=ie.call(k,ge),w.splice(C,1),C--}return P}),i.formatArgs.call(k,w),(k.log||i.log).apply(k,w)}return h.namespace=r,h.useColors=i.useColors(),h.color=i.selectColor(r),h.extend=n,h.destroy=i.destroy,Object.defineProperty(h,"enabled",{enumerable:!0,configurable:!1,get:()=>x!==null?x:(_!==i.namespaces&&(_=i.namespaces,m=i.enabled(r)),m),set:w=>{x=w}}),typeof i.init=="function"&&i.init(h),h}function n(r,d){let x=i(this.namespace+(typeof d>"u"?":":d)+r);return x.log=this.log,x}function s(r){i.save(r),i.namespaces=r,i.names=[],i.skips=[];let d,x=(typeof r=="string"?r:"").split(/[\s,]+/),_=x.length;for(d=0;d<_;d++)x[d]&&(r=x[d].replace(/\*/g,".*?"),r[0]==="-"?i.skips.push(new RegExp("^"+r.slice(1)+"$")):i.names.push(new RegExp("^"+r+"$")))}function t(){let r=[...i.names.map(c),...i.skips.map(c).map(d=>"-"+d)].join(",");return i.enable(""),r}function o(r){if(r[r.length-1]==="*")return!0;let d,x;for(d=0,x=i.skips.length;d{W.formatArgs=Wt;W.save=Kt;W.load=Vt;W.useColors=Mt;W.storage=Gt();W.destroy=(()=>{let e=!1;return()=>{e||(e=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))}})();W.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"];function Mt(){return typeof window<"u"&&window.process&&(window.process.type==="renderer"||window.process.__nwjs)?!0:typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)?!1:typeof document<"u"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window<"u"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}function Wt(e){if(e[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+e[0]+(this.useColors?"%c ":" ")+"+"+Xe.exports.humanize(this.diff),!this.useColors)return;let a="color: "+this.color;e.splice(1,0,a,"color: inherit");let i=0,n=0;e[0].replace(/%[a-zA-Z%]/g,s=>{s!=="%%"&&(i++,s==="%c"&&(n=i))}),e.splice(n,0,a)}W.log=console.debug||console.log||(()=>{});function Kt(e){try{e?W.storage.setItem("debug",e):W.storage.removeItem("debug")}catch{}}function Vt(){let e;try{e=W.storage.getItem("debug")}catch{}return!e&&typeof process<"u"&&"env"in process&&(e=process.env.DEBUG),e}function Gt(){try{return localStorage}catch{}}Xe.exports=qa()(W);var{formatters:Jt}=Xe.exports;Jt.j=function(e){try{return JSON.stringify(e)}catch(a){return"[UnexpectedJSONParseError]: "+a.message}}});var vn=j((hp,hn)=>{"use strict";hn.exports=(e,a=process.argv)=>{let i=e.startsWith("-")?"":e.length===1?"-":"--",n=a.indexOf(i+e),s=a.indexOf("--");return n!==-1&&(s===-1||n{"use strict";var Xt=E("os"),bn=E("tty"),J=vn(),{env:z}=process,re;J("no-color")||J("no-colors")||J("color=false")||J("color=never")?re=0:(J("color")||J("colors")||J("color=true")||J("color=always"))&&(re=1);"FORCE_COLOR"in z&&(z.FORCE_COLOR==="true"?re=1:z.FORCE_COLOR==="false"?re=0:re=z.FORCE_COLOR.length===0?1:Math.min(parseInt(z.FORCE_COLOR,10),3));function za(e){return e===0?!1:{level:e,hasBasic:!0,has256:e>=2,has16m:e>=3}}function La(e,a){if(re===0)return 0;if(J("color=16m")||J("color=full")||J("color=truecolor"))return 3;if(J("color=256"))return 2;if(e&&!a&&re===void 0)return 0;let i=re||0;if(z.TERM==="dumb")return i;if(process.platform==="win32"){let n=Xt.release().split(".");return Number(n[0])>=10&&Number(n[2])>=10586?Number(n[2])>=14931?3:2:1}if("CI"in z)return["TRAVIS","CIRCLECI","APPVEYOR","GITLAB_CI","GITHUB_ACTIONS","BUILDKITE"].some(n=>n in z)||z.CI_NAME==="codeship"?1:i;if("TEAMCITY_VERSION"in z)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(z.TEAMCITY_VERSION)?1:0;if(z.COLORTERM==="truecolor")return 3;if("TERM_PROGRAM"in z){let n=parseInt((z.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(z.TERM_PROGRAM){case"iTerm.app":return n>=3?3:2;case"Apple_Terminal":return 2}}return/-256(color)?$/i.test(z.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(z.TERM)||"COLORTERM"in z?1:i}function Yt(e){let a=La(e,e&&e.isTTY);return za(a)}gn.exports={supportsColor:Yt,stdout:za(La(!0,bn.isatty(1))),stderr:za(La(!0,bn.isatty(2)))}});var _n=j((F,Ze)=>{var Zt=E("tty"),Ye=E("util");F.init=to;F.log=io;F.formatArgs=eo;F.save=no;F.load=so;F.useColors=Qt;F.destroy=Ye.deprecate(()=>{},"Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.");F.colors=[6,2,3,4,5,1];try{let e=yn();e&&(e.stderr||e).level>=2&&(F.colors=[20,21,26,27,32,33,38,39,40,41,42,43,44,45,56,57,62,63,68,69,74,75,76,77,78,79,80,81,92,93,98,99,112,113,128,129,134,135,148,149,160,161,162,163,164,165,166,167,168,169,170,171,172,173,178,179,184,185,196,197,198,199,200,201,202,203,204,205,206,207,208,209,214,215,220,221])}catch{}F.inspectOpts=Object.keys(process.env).filter(e=>/^debug_/i.test(e)).reduce((e,a)=>{let i=a.substring(6).toLowerCase().replace(/_([a-z])/g,(s,t)=>t.toUpperCase()),n=process.env[a];return/^(yes|on|true|enabled)$/i.test(n)?n=!0:/^(no|off|false|disabled)$/i.test(n)?n=!1:n==="null"?n=null:n=Number(n),e[i]=n,e},{});function Qt(){return"colors"in F.inspectOpts?!!F.inspectOpts.colors:Zt.isatty(process.stderr.fd)}function eo(e){let{namespace:a,useColors:i}=this;if(i){let n=this.color,s="\x1B[3"+(n<8?n:"8;5;"+n),t=` ${s};1m${a} \x1B[0m`;e[0]=t+e[0].split(` -`).join(` -`+t),e.push(s+"m+"+Ze.exports.humanize(this.diff)+"\x1B[0m")}else e[0]=ao()+a+" "+e[0]}function ao(){return F.inspectOpts.hideDate?"":new Date().toISOString()+" "}function io(...e){return process.stderr.write(Ye.format(...e)+` -`)}function no(e){e?process.env.DEBUG=e:delete process.env.DEBUG}function so(){return process.env.DEBUG}function to(e){e.inspectOpts={};let a=Object.keys(F.inspectOpts);for(let i=0;ia.trim()).join(" ")};wn.O=function(e){return this.inspectOpts.colors=this.useColors,Ye.inspect(e,this.inspectOpts)}});var Qe=j((bp,Fa)=>{typeof process>"u"||process.type==="renderer"||process.browser===!0||process.__nwjs?Fa.exports=xn():Fa.exports=_n()});var kn=j((gp,jn)=>{var Ae;jn.exports=function(){if(!Ae){try{Ae=Qe()("follow-redirects")}catch{}typeof Ae!="function"&&(Ae=function(){})}Ae.apply(null,arguments)}});var Cn=j((yp,Va)=>{var Le=E("url"),qe=Le.URL,oo=E("http"),ro=E("https"),Ua=E("stream").Writable,Ia=E("assert"),En=kn(),$a=!1;try{Ia(new qe)}catch(e){$a=e.code==="ERR_INVALID_URL"}var co=["auth","host","hostname","href","path","pathname","port","protocol","query","search","hash"],Ha=["abort","aborted","connect","error","socket","timeout"],Ma=Object.create(null);Ha.forEach(function(e){Ma[e]=function(a,i,n){this._redirectable.emit(e,a,i,n)}});var Da=Fe("ERR_INVALID_URL","Invalid URL",TypeError),Ba=Fe("ERR_FR_REDIRECTION_FAILURE","Redirected request failed"),po=Fe("ERR_FR_TOO_MANY_REDIRECTS","Maximum number of redirects exceeded",Ba),lo=Fe("ERR_FR_MAX_BODY_LENGTH_EXCEEDED","Request body larger than maxBodyLength limit"),uo=Fe("ERR_STREAM_WRITE_AFTER_END","write after end"),mo=Ua.prototype.destroy||Sn;function $(e,a){Ua.call(this),this._sanitizeOptions(e),this._options=e,this._ended=!1,this._ending=!1,this._redirectCount=0,this._redirects=[],this._requestBodyLength=0,this._requestBodyBuffers=[],a&&this.on("response",a);var i=this;this._onNativeResponse=function(n){try{i._processResponse(n)}catch(s){i.emit("error",s instanceof Ba?s:new Ba({cause:s}))}},this._performRequest()}$.prototype=Object.create(Ua.prototype);$.prototype.abort=function(){Ka(this._currentRequest),this._currentRequest.abort(),this.emit("abort")};$.prototype.destroy=function(e){return Ka(this._currentRequest,e),mo.call(this,e),this};$.prototype.write=function(e,a,i){if(this._ending)throw new uo;if(!he(e)&&!ho(e))throw new TypeError("data should be a string, Buffer or Uint8Array");if(ze(a)&&(i=a,a=null),e.length===0){i&&i();return}this._requestBodyLength+e.length<=this._options.maxBodyLength?(this._requestBodyLength+=e.length,this._requestBodyBuffers.push({data:e,encoding:a}),this._currentRequest.write(e,a,i)):(this.emit("error",new lo),this.abort())};$.prototype.end=function(e,a,i){if(ze(e)?(i=e,e=a=null):ze(a)&&(i=a,a=null),!e)this._ended=this._ending=!0,this._currentRequest.end(null,null,i);else{var n=this,s=this._currentRequest;this.write(e,a,function(){n._ended=!0,s.end(null,null,i)}),this._ending=!0}};$.prototype.setHeader=function(e,a){this._options.headers[e]=a,this._currentRequest.setHeader(e,a)};$.prototype.removeHeader=function(e){delete this._options.headers[e],this._currentRequest.removeHeader(e)};$.prototype.setTimeout=function(e,a){var i=this;function n(o){o.setTimeout(e),o.removeListener("timeout",o.destroy),o.addListener("timeout",o.destroy)}function s(o){i._timeout&&clearTimeout(i._timeout),i._timeout=setTimeout(function(){i.emit("timeout"),t()},e),n(o)}function t(){i._timeout&&(clearTimeout(i._timeout),i._timeout=null),i.removeListener("abort",t),i.removeListener("error",t),i.removeListener("response",t),i.removeListener("close",t),a&&i.removeListener("timeout",a),i.socket||i._currentRequest.removeListener("socket",s)}return a&&this.on("timeout",a),this.socket?s(this.socket):this._currentRequest.once("socket",s),this.on("socket",n),this.on("abort",t),this.on("error",t),this.on("response",t),this.on("close",t),this};["flushHeaders","getHeader","setNoDelay","setSocketKeepAlive"].forEach(function(e){$.prototype[e]=function(a,i){return this._currentRequest[e](a,i)}});["aborted","connection","socket"].forEach(function(e){Object.defineProperty($.prototype,e,{get:function(){return this._currentRequest[e]}})});$.prototype._sanitizeOptions=function(e){if(e.headers||(e.headers={}),e.host&&(e.hostname||(e.hostname=e.host),delete e.host),!e.pathname&&e.path){var a=e.path.indexOf("?");a<0?e.pathname=e.path:(e.pathname=e.path.substring(0,a),e.search=e.path.substring(a))}};$.prototype._performRequest=function(){var e=this._options.protocol,a=this._options.nativeProtocols[e];if(!a)throw new TypeError("Unsupported protocol "+e);if(this._options.agents){var i=e.slice(0,-1);this._options.agent=this._options.agents[i]}var n=this._currentRequest=a.request(this._options,this._onNativeResponse);n._redirectable=this;for(var s of Ha)n.on(s,Ma[s]);if(this._currentUrl=/^\//.test(this._options.path)?Le.format(this._options):this._options.path,this._isRedirect){var t=0,o=this,c=this._requestBodyBuffers;(function u(l){if(n===o._currentRequest)if(l)o.emit("error",l);else if(t=400){e.responseUrl=this._currentUrl,e.redirects=this._redirects,this.emit("response",e),this._requestBodyBuffers=[];return}if(Ka(this._currentRequest),e.destroy(),++this._redirectCount>this._options.maxRedirects)throw new po;var n,s=this._options.beforeRedirect;s&&(n=Object.assign({Host:e.req.getHeader("host")},this._options.headers));var t=this._options.method;((a===301||a===302)&&this._options.method==="POST"||a===303&&!/^(?:GET|HEAD)$/.test(this._options.method))&&(this._options.method="GET",this._requestBodyBuffers=[],Pa(/^content-/i,this._options.headers));var o=Pa(/^host$/i,this._options.headers),c=Wa(this._currentUrl),u=o||c.host,l=/^\w+:/.test(i)?this._currentUrl:Le.format(Object.assign(c,{host:u})),r=fo(i,l);if(En("redirecting to",r.href),this._isRedirect=!0,Na(r,this._options),(r.protocol!==c.protocol&&r.protocol!=="https:"||r.host!==u&&!xo(r.host,u))&&Pa(/^(?:(?:proxy-)?authorization|cookie)$/i,this._options.headers),ze(s)){var d={headers:e.headers,statusCode:a},x={url:l,method:t,headers:n};s(this._options,d,x),this._sanitizeOptions(this._options)}this._performRequest()};function Rn(e){var a={maxRedirects:21,maxBodyLength:10485760},i={};return Object.keys(e).forEach(function(n){var s=n+":",t=i[s]=e[n],o=a[n]=Object.create(t);function c(l,r,d){return vo(l)?l=Na(l):he(l)?l=Na(Wa(l)):(d=r,r=On(l),l={protocol:s}),ze(r)&&(d=r,r=null),r=Object.assign({maxRedirects:a.maxRedirects,maxBodyLength:a.maxBodyLength},l,r),r.nativeProtocols=i,!he(r.host)&&!he(r.hostname)&&(r.hostname="::1"),Ia.equal(r.protocol,s,"protocol mismatch"),En("options",r),new $(r,d)}function u(l,r,d){var x=o.request(l,r,d);return x.end(),x}Object.defineProperties(o,{request:{value:c,configurable:!0,enumerable:!0,writable:!0},get:{value:u,configurable:!0,enumerable:!0,writable:!0}})}),a}function Sn(){}function Wa(e){var a;if($a)a=new qe(e);else if(a=On(Le.parse(e)),!he(a.protocol))throw new Da({input:e});return a}function fo(e,a){return $a?new qe(e,a):Wa(Le.resolve(a,e))}function On(e){if(/^\[/.test(e.hostname)&&!/^\[[:0-9a-f]+\]$/i.test(e.hostname))throw new Da({input:e.href||e});if(/^\[/.test(e.host)&&!/^\[[:0-9a-f]+\](:\d+)?$/i.test(e.host))throw new Da({input:e.href||e});return e}function Na(e,a){var i=a||{};for(var n of co)i[n]=e[n];return i.hostname.startsWith("[")&&(i.hostname=i.hostname.slice(1,-1)),i.port!==""&&(i.port=Number(i.port)),i.path=i.search?i.pathname+i.search:i.pathname,i}function Pa(e,a){var i;for(var n in a)e.test(n)&&(i=a[n],delete a[n]);return i===null||typeof i>"u"?void 0:String(i).trim()}function Fe(e,a,i){function n(s){Error.captureStackTrace(this,this.constructor),Object.assign(this,s||{}),this.code=e,this.message=this.cause?a+": "+this.cause.message:a}return n.prototype=new(i||Error),Object.defineProperties(n.prototype,{constructor:{value:n,enumerable:!1},name:{value:"Error ["+e+"]",enumerable:!1}}),n}function Ka(e,a){for(var i of Ha)e.removeListener(i,Ma[i]);e.on("error",Sn),e.destroy(a)}function xo(e,a){Ia(he(e)&&he(a));var i=e.length-a.length-1;return i>0&&e[i]==="."&&e.endsWith(a)}function he(e){return typeof e=="string"||e instanceof String}function ze(e){return typeof e=="function"}function ho(e){return typeof e=="object"&&"length"in e}function vo(e){return qe&&e instanceof qe}Va.exports=Rn({http:oo,https:ro});Va.exports.wrap=Rn});var js=j((wp,_s)=>{"use strict";var bo=pn(),go=E("url"),yo=un(),wo=E("http"),_o=E("https"),Jn=E("util"),jo=Cn(),ko=E("zlib"),Xn=E("stream"),Eo=E("events");function me(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var Yn=me(bo),Ro=me(go),So=me(wo),Oo=me(_o),Co=me(Jn),To=me(jo),ue=me(ko),pe=me(Xn);function Zn(e,a){return function(){return e.apply(a,arguments)}}var{toString:Ao}=Object.prototype,{getPrototypeOf:li}=Object,ra=(e=>a=>{let i=Ao.call(a);return e[i]||(e[i]=i.slice(8,-1).toLowerCase())})(Object.create(null)),Q=e=>(e=e.toLowerCase(),a=>ra(a)===e),ca=e=>a=>typeof a===e,{isArray:Se}=Array,De=ca("undefined");function qo(e){return e!==null&&!De(e)&&e.constructor!==null&&!De(e.constructor)&&X(e.constructor.isBuffer)&&e.constructor.isBuffer(e)}var Qn=Q("ArrayBuffer");function zo(e){let a;return typeof ArrayBuffer<"u"&&ArrayBuffer.isView?a=ArrayBuffer.isView(e):a=e&&e.buffer&&Qn(e.buffer),a}var Lo=ca("string"),X=ca("function"),es=ca("number"),pa=e=>e!==null&&typeof e=="object",Fo=e=>e===!0||e===!1,aa=e=>{if(ra(e)!=="object")return!1;let a=li(e);return(a===null||a===Object.prototype||Object.getPrototypeOf(a)===null)&&!(Symbol.toStringTag in e)&&!(Symbol.iterator in e)},Po=Q("Date"),Do=Q("File"),Bo=Q("Blob"),No=Q("FileList"),Uo=e=>pa(e)&&X(e.pipe),Io=e=>{let a;return e&&(typeof FormData=="function"&&e instanceof FormData||X(e.append)&&((a=ra(e))==="formdata"||a==="object"&&X(e.toString)&&e.toString()==="[object FormData]"))},$o=Q("URLSearchParams"),[Ho,Mo,Wo,Ko]=["ReadableStream","Request","Response","Headers"].map(Q),Vo=e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"");function Ne(e,a,{allOwnKeys:i=!1}={}){if(e===null||typeof e>"u")return;let n,s;if(typeof e!="object"&&(e=[e]),Se(e))for(n=0,s=e.length;n0;)if(s=i[n],a===s.toLowerCase())return s;return null}var is=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:global,ns=e=>!De(e)&&e!==is;function Za(){let{caseless:e}=ns(this)&&this||{},a={},i=(n,s)=>{let t=e&&as(a,s)||s;aa(a[t])&&aa(n)?a[t]=Za(a[t],n):aa(n)?a[t]=Za({},n):Se(n)?a[t]=n.slice():a[t]=n};for(let n=0,s=arguments.length;n(Ne(a,(s,t)=>{i&&X(s)?e[t]=Zn(s,i):e[t]=s},{allOwnKeys:n}),e),Jo=e=>(e.charCodeAt(0)===65279&&(e=e.slice(1)),e),Xo=(e,a,i,n)=>{e.prototype=Object.create(a.prototype,n),e.prototype.constructor=e,Object.defineProperty(e,"super",{value:a.prototype}),i&&Object.assign(e.prototype,i)},Yo=(e,a,i,n)=>{let s,t,o,c={};if(a=a||{},e==null)return a;do{for(s=Object.getOwnPropertyNames(e),t=s.length;t-- >0;)o=s[t],(!n||n(o,e,a))&&!c[o]&&(a[o]=e[o],c[o]=!0);e=i!==!1&&li(e)}while(e&&(!i||i(e,a))&&e!==Object.prototype);return a},Zo=(e,a,i)=>{e=String(e),(i===void 0||i>e.length)&&(i=e.length),i-=a.length;let n=e.indexOf(a,i);return n!==-1&&n===i},Qo=e=>{if(!e)return null;if(Se(e))return e;let a=e.length;if(!es(a))return null;let i=new Array(a);for(;a-- >0;)i[a]=e[a];return i},er=(e=>a=>e&&a instanceof e)(typeof Uint8Array<"u"&&li(Uint8Array)),ar=(e,a)=>{let n=(e&&e[Symbol.iterator]).call(e),s;for(;(s=n.next())&&!s.done;){let t=s.value;a.call(e,t[0],t[1])}},ir=(e,a)=>{let i,n=[];for(;(i=e.exec(a))!==null;)n.push(i);return n},nr=Q("HTMLFormElement"),sr=e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(i,n,s){return n.toUpperCase()+s}),Tn=(({hasOwnProperty:e})=>(a,i)=>e.call(a,i))(Object.prototype),tr=Q("RegExp"),ss=(e,a)=>{let i=Object.getOwnPropertyDescriptors(e),n={};Ne(i,(s,t)=>{let o;(o=a(s,t,e))!==!1&&(n[t]=o||s)}),Object.defineProperties(e,n)},or=e=>{ss(e,(a,i)=>{if(X(e)&&["arguments","caller","callee"].indexOf(i)!==-1)return!1;let n=e[i];if(X(n)){if(a.enumerable=!1,"writable"in a){a.writable=!1;return}a.set||(a.set=()=>{throw Error("Can not rewrite read-only method '"+i+"'")})}})},rr=(e,a)=>{let i={},n=s=>{s.forEach(t=>{i[t]=!0})};return Se(e)?n(e):n(String(e).split(a)),i},cr=()=>{},pr=(e,a)=>e!=null&&Number.isFinite(e=+e)?e:a,Ga="abcdefghijklmnopqrstuvwxyz",An="0123456789",ts={DIGIT:An,ALPHA:Ga,ALPHA_DIGIT:Ga+Ga.toUpperCase()+An},lr=(e=16,a=ts.ALPHA_DIGIT)=>{let i="",{length:n}=a;for(;e--;)i+=a[Math.random()*n|0];return i};function ur(e){return!!(e&&X(e.append)&&e[Symbol.toStringTag]==="FormData"&&e[Symbol.iterator])}var dr=e=>{let a=new Array(10),i=(n,s)=>{if(pa(n)){if(a.indexOf(n)>=0)return;if(!("toJSON"in n)){a[s]=n;let t=Se(n)?[]:{};return Ne(n,(o,c)=>{let u=i(o,s+1);!De(u)&&(t[c]=u)}),a[s]=void 0,t}}return n};return i(e,0)},mr=Q("AsyncFunction"),fr=e=>e&&(pa(e)||X(e))&&X(e.then)&&X(e.catch),p={isArray:Se,isArrayBuffer:Qn,isBuffer:qo,isFormData:Io,isArrayBufferView:zo,isString:Lo,isNumber:es,isBoolean:Fo,isObject:pa,isPlainObject:aa,isReadableStream:Ho,isRequest:Mo,isResponse:Wo,isHeaders:Ko,isUndefined:De,isDate:Po,isFile:Do,isBlob:Bo,isRegExp:tr,isFunction:X,isStream:Uo,isURLSearchParams:$o,isTypedArray:er,isFileList:No,forEach:Ne,merge:Za,extend:Go,trim:Vo,stripBOM:Jo,inherits:Xo,toFlatObject:Yo,kindOf:ra,kindOfTest:Q,endsWith:Zo,toArray:Qo,forEachEntry:ar,matchAll:ir,isHTMLForm:nr,hasOwnProperty:Tn,hasOwnProp:Tn,reduceDescriptors:ss,freezeMethods:or,toObjectSet:rr,toCamelCase:sr,noop:cr,toFiniteNumber:pr,findKey:as,global:is,isContextDefined:ns,ALPHABET:ts,generateString:lr,isSpecCompliantForm:ur,toJSONObject:dr,isAsyncFn:mr,isThenable:fr};function f(e,a,i,n,s){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack,this.message=e,this.name="AxiosError",a&&(this.code=a),i&&(this.config=i),n&&(this.request=n),s&&(this.response=s)}p.inherits(f,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:p.toJSONObject(this.config),code:this.code,status:this.response&&this.response.status?this.response.status:null}}});var os=f.prototype,rs={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach(e=>{rs[e]={value:e}});Object.defineProperties(f,rs);Object.defineProperty(os,"isAxiosError",{value:!0});f.from=(e,a,i,n,s,t)=>{let o=Object.create(os);return p.toFlatObject(e,o,function(u){return u!==Error.prototype},c=>c!=="isAxiosError"),f.call(o,e.message,a,i,n,s),o.cause=e,o.name=e.name,t&&Object.assign(o,t),o};function Qa(e){return p.isPlainObject(e)||p.isArray(e)}function cs(e){return p.endsWith(e,"[]")?e.slice(0,-2):e}function qn(e,a,i){return e?e.concat(a).map(function(s,t){return s=cs(s),!i&&t?"["+s+"]":s}).join(i?".":""):a}function xr(e){return p.isArray(e)&&!e.some(Qa)}var hr=p.toFlatObject(p,{},null,function(a){return/^is[A-Z]/.test(a)});function la(e,a,i){if(!p.isObject(e))throw new TypeError("target must be an object");a=a||new(Yn.default||FormData),i=p.toFlatObject(i,{metaTokens:!0,dots:!1,indexes:!1},!1,function(h,w){return!p.isUndefined(w[h])});let n=i.metaTokens,s=i.visitor||r,t=i.dots,o=i.indexes,u=(i.Blob||typeof Blob<"u"&&Blob)&&p.isSpecCompliantForm(a);if(!p.isFunction(s))throw new TypeError("visitor must be a function");function l(m){if(m===null)return"";if(p.isDate(m))return m.toISOString();if(!u&&p.isBlob(m))throw new f("Blob is not supported. Use a Buffer instead.");return p.isArrayBuffer(m)||p.isTypedArray(m)?u&&typeof Blob=="function"?new Blob([m]):Buffer.from(m):m}function r(m,h,w){let k=m;if(m&&!w&&typeof m=="object"){if(p.endsWith(h,"{}"))h=n?h:h.slice(0,-2),m=JSON.stringify(m);else if(p.isArray(m)&&xr(m)||(p.isFileList(m)||p.endsWith(h,"[]"))&&(k=p.toArray(m)))return h=cs(h),k.forEach(function(b,C){!(p.isUndefined(b)||b===null)&&a.append(o===!0?qn([h],C,t):o===null?h:h+"[]",l(b))}),!1}return Qa(m)?!0:(a.append(qn(w,h,t),l(m)),!1)}let d=[],x=Object.assign(hr,{defaultVisitor:r,convertValue:l,isVisitable:Qa});function _(m,h){if(!p.isUndefined(m)){if(d.indexOf(m)!==-1)throw Error("Circular reference detected in "+h.join("."));d.push(m),p.forEach(m,function(k,S){(!(p.isUndefined(k)||k===null)&&s.call(a,k,p.isString(S)?S.trim():S,h,x))===!0&&_(k,h?h.concat(S):[S])}),d.pop()}}if(!p.isObject(e))throw new TypeError("data must be an object");return _(e),a}function zn(e){let a={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g,function(n){return a[n]})}function ps(e,a){this._pairs=[],e&&la(e,this,a)}var ls=ps.prototype;ls.append=function(a,i){this._pairs.push([a,i])};ls.toString=function(a){let i=a?function(n){return a.call(this,n,zn)}:zn;return this._pairs.map(function(s){return i(s[0])+"="+i(s[1])},"").join("&")};function vr(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function ui(e,a,i){if(!a)return e;let n=i&&i.encode||vr,s=i&&i.serialize,t;if(s?t=s(a,i):t=p.isURLSearchParams(a)?a.toString():new ps(a,i).toString(n),t){let o=e.indexOf("#");o!==-1&&(e=e.slice(0,o)),e+=(e.indexOf("?")===-1?"?":"&")+t}return e}var ei=class{constructor(){this.handlers=[]}use(a,i,n){return this.handlers.push({fulfilled:a,rejected:i,synchronous:n?n.synchronous:!1,runWhen:n?n.runWhen:null}),this.handlers.length-1}eject(a){this.handlers[a]&&(this.handlers[a]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(a){p.forEach(this.handlers,function(n){n!==null&&a(n)})}},Ln=ei,di={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},br=Ro.default.URLSearchParams,gr={isNode:!0,classes:{URLSearchParams:br,FormData:Yn.default,Blob:typeof Blob<"u"&&Blob||null},protocols:["http","https","file","data"]},mi=typeof window<"u"&&typeof document<"u",yr=(e=>mi&&["ReactNative","NativeScript","NS"].indexOf(e)<0)(typeof navigator<"u"&&navigator.product),wr=typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope&&typeof self.importScripts=="function",_r=mi&&window.location.href||"http://localhost",jr=Object.freeze({__proto__:null,hasBrowserEnv:mi,hasStandardBrowserWebWorkerEnv:wr,hasStandardBrowserEnv:yr,origin:_r}),K={...jr,...gr};function kr(e,a){return la(e,new K.classes.URLSearchParams,Object.assign({visitor:function(i,n,s,t){return K.isNode&&p.isBuffer(i)?(this.append(n,i.toString("base64")),!1):t.defaultVisitor.apply(this,arguments)}},a))}function Er(e){return p.matchAll(/\w+|\[(\w*)]/g,e).map(a=>a[0]==="[]"?"":a[1]||a[0])}function Rr(e){let a={},i=Object.keys(e),n,s=i.length,t;for(n=0;n=i.length;return o=!o&&p.isArray(s)?s.length:o,u?(p.hasOwnProp(s,o)?s[o]=[s[o],n]:s[o]=n,!c):((!s[o]||!p.isObject(s[o]))&&(s[o]=[]),a(i,n,s[o],t)&&p.isArray(s[o])&&(s[o]=Rr(s[o])),!c)}if(p.isFormData(e)&&p.isFunction(e.entries)){let i={};return p.forEachEntry(e,(n,s)=>{a(Er(n),s,i,0)}),i}return null}function Sr(e,a,i){if(p.isString(e))try{return(a||JSON.parse)(e),p.trim(e)}catch(n){if(n.name!=="SyntaxError")throw n}return(i||JSON.stringify)(e)}var fi={transitional:di,adapter:["xhr","http","fetch"],transformRequest:[function(a,i){let n=i.getContentType()||"",s=n.indexOf("application/json")>-1,t=p.isObject(a);if(t&&p.isHTMLForm(a)&&(a=new FormData(a)),p.isFormData(a))return s?JSON.stringify(us(a)):a;if(p.isArrayBuffer(a)||p.isBuffer(a)||p.isStream(a)||p.isFile(a)||p.isBlob(a)||p.isReadableStream(a))return a;if(p.isArrayBufferView(a))return a.buffer;if(p.isURLSearchParams(a))return i.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),a.toString();let c;if(t){if(n.indexOf("application/x-www-form-urlencoded")>-1)return kr(a,this.formSerializer).toString();if((c=p.isFileList(a))||n.indexOf("multipart/form-data")>-1){let u=this.env&&this.env.FormData;return la(c?{"files[]":a}:a,u&&new u,this.formSerializer)}}return t||s?(i.setContentType("application/json",!1),Sr(a)):a}],transformResponse:[function(a){let i=this.transitional||fi.transitional,n=i&&i.forcedJSONParsing,s=this.responseType==="json";if(p.isResponse(a)||p.isReadableStream(a))return a;if(a&&p.isString(a)&&(n&&!this.responseType||s)){let o=!(i&&i.silentJSONParsing)&&s;try{return JSON.parse(a)}catch(c){if(o)throw c.name==="SyntaxError"?f.from(c,f.ERR_BAD_RESPONSE,this,null,this.response):c}}return a}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:K.classes.FormData,Blob:K.classes.Blob},validateStatus:function(a){return a>=200&&a<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};p.forEach(["delete","get","head","post","put","patch"],e=>{fi.headers[e]={}});var xi=fi,Or=p.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),Cr=e=>{let a={},i,n,s;return e&&e.split(` -`).forEach(function(o){s=o.indexOf(":"),i=o.substring(0,s).trim().toLowerCase(),n=o.substring(s+1).trim(),!(!i||a[i]&&Or[i])&&(i==="set-cookie"?a[i]?a[i].push(n):a[i]=[n]:a[i]=a[i]?a[i]+", "+n:n)}),a},Fn=Symbol("internals");function Pe(e){return e&&String(e).trim().toLowerCase()}function ia(e){return e===!1||e==null?e:p.isArray(e)?e.map(ia):String(e)}function Tr(e){let a=Object.create(null),i=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g,n;for(;n=i.exec(e);)a[n[1]]=n[2];return a}var Ar=e=>/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim());function Ja(e,a,i,n,s){if(p.isFunction(n))return n.call(this,a,i);if(s&&(a=i),!!p.isString(a)){if(p.isString(n))return a.indexOf(n)!==-1;if(p.isRegExp(n))return n.test(a)}}function qr(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(a,i,n)=>i.toUpperCase()+n)}function zr(e,a){let i=p.toCamelCase(" "+a);["get","set","has"].forEach(n=>{Object.defineProperty(e,n+i,{value:function(s,t,o){return this[n].call(this,a,s,t,o)},configurable:!0})})}var Ee=class{constructor(a){a&&this.set(a)}set(a,i,n){let s=this;function t(c,u,l){let r=Pe(u);if(!r)throw new Error("header name must be a non-empty string");let d=p.findKey(s,r);(!d||s[d]===void 0||l===!0||l===void 0&&s[d]!==!1)&&(s[d||u]=ia(c))}let o=(c,u)=>p.forEach(c,(l,r)=>t(l,r,u));if(p.isPlainObject(a)||a instanceof this.constructor)o(a,i);else if(p.isString(a)&&(a=a.trim())&&!Ar(a))o(Cr(a),i);else if(p.isHeaders(a))for(let[c,u]of a.entries())t(u,c,n);else a!=null&&t(i,a,n);return this}get(a,i){if(a=Pe(a),a){let n=p.findKey(this,a);if(n){let s=this[n];if(!i)return s;if(i===!0)return Tr(s);if(p.isFunction(i))return i.call(this,s,n);if(p.isRegExp(i))return i.exec(s);throw new TypeError("parser must be boolean|regexp|function")}}}has(a,i){if(a=Pe(a),a){let n=p.findKey(this,a);return!!(n&&this[n]!==void 0&&(!i||Ja(this,this[n],n,i)))}return!1}delete(a,i){let n=this,s=!1;function t(o){if(o=Pe(o),o){let c=p.findKey(n,o);c&&(!i||Ja(n,n[c],c,i))&&(delete n[c],s=!0)}}return p.isArray(a)?a.forEach(t):t(a),s}clear(a){let i=Object.keys(this),n=i.length,s=!1;for(;n--;){let t=i[n];(!a||Ja(this,this[t],t,a,!0))&&(delete this[t],s=!0)}return s}normalize(a){let i=this,n={};return p.forEach(this,(s,t)=>{let o=p.findKey(n,t);if(o){i[o]=ia(s),delete i[t];return}let c=a?qr(t):String(t).trim();c!==t&&delete i[t],i[c]=ia(s),n[c]=!0}),this}concat(...a){return this.constructor.concat(this,...a)}toJSON(a){let i=Object.create(null);return p.forEach(this,(n,s)=>{n!=null&&n!==!1&&(i[s]=a&&p.isArray(n)?n.join(", "):n)}),i}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([a,i])=>a+": "+i).join(` -`)}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(a){return a instanceof this?a:new this(a)}static concat(a,...i){let n=new this(a);return i.forEach(s=>n.set(s)),n}static accessor(a){let n=(this[Fn]=this[Fn]={accessors:{}}).accessors,s=this.prototype;function t(o){let c=Pe(o);n[c]||(zr(s,o),n[c]=!0)}return p.isArray(a)?a.forEach(t):t(a),this}};Ee.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]);p.reduceDescriptors(Ee.prototype,({value:e},a)=>{let i=a[0].toUpperCase()+a.slice(1);return{get:()=>e,set(n){this[i]=n}}});p.freezeMethods(Ee);var H=Ee;function Xa(e,a){let i=this||xi,n=a||i,s=H.from(n.headers),t=n.data;return p.forEach(e,function(c){t=c.call(i,t,s.normalize(),a?a.status:void 0)}),s.normalize(),t}function ds(e){return!!(e&&e.__CANCEL__)}function de(e,a,i){f.call(this,e??"canceled",f.ERR_CANCELED,a,i),this.name="CanceledError"}p.inherits(de,f,{__CANCEL__:!0});function ke(e,a,i){let n=i.config.validateStatus;!i.status||!n||n(i.status)?e(i):a(new f("Request failed with status code "+i.status,[f.ERR_BAD_REQUEST,f.ERR_BAD_RESPONSE][Math.floor(i.status/100)-4],i.config,i.request,i))}function Lr(e){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(e)}function Fr(e,a){return a?e.replace(/\/?\/$/,"")+"/"+a.replace(/^\/+/,""):e}function hi(e,a){return e&&!Lr(a)?Fr(e,a):a}var sa="1.7.2";function ms(e){let a=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return a&&a[1]||""}var Pr=/^(?:([^;]+);)?(?:[^;]+;)?(base64|),([\s\S]*)$/;function Dr(e,a,i){let n=i&&i.Blob||K.classes.Blob,s=ms(e);if(a===void 0&&n&&(a=!0),s==="data"){e=s.length?e.slice(s.length+1):e;let t=Pr.exec(e);if(!t)throw new f("Invalid URL",f.ERR_INVALID_URL);let o=t[1],c=t[2],u=t[3],l=Buffer.from(decodeURIComponent(u),c?"base64":"utf8");if(a){if(!n)throw new f("Blob is not supported",f.ERR_NOT_SUPPORT);return new n([l],{type:o})}return l}throw new f("Unsupported protocol "+s,f.ERR_NOT_SUPPORT)}function fs(e,a){let i=0,n=1e3/a,s=null;return function(){let o=this===!0,c=Date.now();if(o||c-i>n)return s&&(clearTimeout(s),s=null),i=c,e.apply(null,arguments);s||(s=setTimeout(()=>(s=null,i=Date.now(),e.apply(null,arguments)),n-(c-i)))}}function xs(e,a){e=e||10;let i=new Array(e),n=new Array(e),s=0,t=0,o;return a=a!==void 0?a:1e3,function(u){let l=Date.now(),r=n[t];o||(o=l),i[s]=u,n[s]=l;let d=t,x=0;for(;d!==s;)x+=i[d++],d=d%e;if(s=(s+1)%e,s===t&&(t=(t+1)%e),l-o!p.isUndefined(u[c])),super({readableHighWaterMark:a.chunkSize});let i=this,n=this[ea]={length:a.length,timeWindow:a.timeWindow,ticksRate:a.ticksRate,chunkSize:a.chunkSize,maxRate:a.maxRate,minChunkSize:a.minChunkSize,bytesSeen:0,isCaptured:!1,notifiedBytesLoaded:0,ts:Date.now(),bytes:0,onReadCallback:null},s=xs(n.ticksRate*a.samplesCount,n.timeWindow);this.on("newListener",c=>{c==="progress"&&(n.isCaptured||(n.isCaptured=!0))});let t=0;n.updateProgress=fs(function(){let u=n.length,l=n.bytesSeen,r=l-t;if(!r||i.destroyed)return;let d=s(r);t=l,process.nextTick(()=>{i.emit("progress",{loaded:l,total:u,progress:u?l/u:void 0,bytes:r,rate:d||void 0,estimated:d&&u&&l<=u?(u-l)/d:void 0,lengthComputable:u!=null})})},n.ticksRate);let o=()=>{n.updateProgress.call(!0)};this.once("end",o),this.once("error",o)}_read(a){let i=this[ea];return i.onReadCallback&&i.onReadCallback(),super._read(a)}_transform(a,i,n){let s=this,t=this[ea],o=t.maxRate,c=this.readableHighWaterMark,u=t.timeWindow,l=1e3/u,r=o/l,d=t.minChunkSize!==!1?Math.max(t.minChunkSize,r*.01):0;function x(m,h){let w=Buffer.byteLength(m);t.bytesSeen+=w,t.bytes+=w,t.isCaptured&&t.updateProgress(),s.push(m)?process.nextTick(h):t.onReadCallback=()=>{t.onReadCallback=null,process.nextTick(h)}}let _=(m,h)=>{let w=Buffer.byteLength(m),k=null,S=c,b,C=0;if(o){let A=Date.now();(!t.ts||(C=A-t.ts)>=u)&&(t.ts=A,b=r-t.bytes,t.bytes=b<0?-b:0,C=0),b=r-t.bytes}if(o){if(b<=0)return setTimeout(()=>{h(null,m)},u-C);bS&&w-S>d&&(k=m.subarray(S),m=m.subarray(0,S)),x(m,k?()=>{process.nextTick(h,null,k)}:h)};_(a,function m(h,w){if(h)return n(h);w?_(w,m):n(null)})}setLength(a){return this[ea].length=+a,this}},Pn=ai,{asyncIterator:Dn}=Symbol,Br=async function*(e){e.stream?yield*e.stream():e.arrayBuffer?yield await e.arrayBuffer():e[Dn]?yield*e[Dn]():yield e},hs=Br,Nr=p.ALPHABET.ALPHA_DIGIT+"-_",Be=new Jn.TextEncoder,le=`\r -`,Ur=Be.encode(le),Ir=2,ii=class{constructor(a,i){let{escapeName:n}=this.constructor,s=p.isString(i),t=`Content-Disposition: form-data; name="${n(a)}"${!s&&i.name?`; filename="${n(i.name)}"`:""}${le}`;s?i=Be.encode(String(i).replace(/\r?\n|\r\n?/g,le)):t+=`Content-Type: ${i.type||"application/octet-stream"}${le}`,this.headers=Be.encode(t+le),this.contentLength=s?i.byteLength:i.size,this.size=this.headers.byteLength+this.contentLength+Ir,this.name=a,this.value=i}async*encode(){yield this.headers;let{value:a}=this;p.isTypedArray(a)?yield a:yield*hs(a),yield Ur}static escapeName(a){return String(a).replace(/[\r\n"]/g,i=>({"\r":"%0D","\n":"%0A",'"':"%22"})[i])}},$r=(e,a,i)=>{let{tag:n="form-data-boundary",size:s=25,boundary:t=n+"-"+p.generateString(s,Nr)}=i||{};if(!p.isFormData(e))throw TypeError("FormData instance required");if(t.length<1||t.length>70)throw Error("boundary must be 10-70 characters long");let o=Be.encode("--"+t+le),c=Be.encode("--"+t+"--"+le+le),u=c.byteLength,l=Array.from(e.entries()).map(([d,x])=>{let _=new ii(d,x);return u+=_.size,_});u+=o.byteLength*l.length,u=p.toFiniteNumber(u);let r={"Content-Type":`multipart/form-data; boundary=${t}`};return Number.isFinite(u)&&(r["Content-Length"]=u),a&&a(r),Xn.Readable.from(async function*(){for(let d of l)yield o,yield*d.encode();yield c}())},Hr=$r,ni=class extends pe.default.Transform{__transform(a,i,n){this.push(a),n()}_transform(a,i,n){if(a.length!==0&&(this._transform=this.__transform,a[0]!==120)){let s=Buffer.alloc(2);s[0]=120,s[1]=156,this.push(s,i)}this.__transform(a,i,n)}},Mr=ni,Wr=(e,a)=>p.isAsyncFn(e)?function(...i){let n=i.pop();e.apply(this,i).then(s=>{try{a?n(null,...a(s)):n(null,s)}catch(t){n(t)}},n)}:e,Kr=Wr,Bn={flush:ue.default.constants.Z_SYNC_FLUSH,finishFlush:ue.default.constants.Z_SYNC_FLUSH},Vr={flush:ue.default.constants.BROTLI_OPERATION_FLUSH,finishFlush:ue.default.constants.BROTLI_OPERATION_FLUSH},Nn=p.isFunction(ue.default.createBrotliDecompress),{http:Gr,https:Jr}=To.default,Xr=/https:?/,Un=K.protocols.map(e=>e+":");function Yr(e,a){e.beforeRedirects.proxy&&e.beforeRedirects.proxy(e),e.beforeRedirects.config&&e.beforeRedirects.config(e,a)}function vs(e,a,i){let n=a;if(!n&&n!==!1){let s=yo.getProxyForUrl(i);s&&(n=new URL(s))}if(n){if(n.username&&(n.auth=(n.username||"")+":"+(n.password||"")),n.auth){(n.auth.username||n.auth.password)&&(n.auth=(n.auth.username||"")+":"+(n.auth.password||""));let t=Buffer.from(n.auth,"utf8").toString("base64");e.headers["Proxy-Authorization"]="Basic "+t}e.headers.host=e.hostname+(e.port?":"+e.port:"");let s=n.hostname||n.host;e.hostname=s,e.host=s,e.port=n.port,e.path=i,n.protocol&&(e.protocol=n.protocol.includes(":")?n.protocol:`${n.protocol}:`)}e.beforeRedirects.proxy=function(t){vs(t,a,t.href)}}var Zr=typeof process<"u"&&p.kindOf(process)==="process",Qr=e=>new Promise((a,i)=>{let n,s,t=(u,l)=>{s||(s=!0,n&&n(u,l))},o=u=>{t(u),a(u)},c=u=>{t(u,!0),i(u)};e(o,c,u=>n=u).catch(c)}),ec=({address:e,family:a})=>{if(!p.isString(e))throw TypeError("address must be a string");return{address:e,family:a||(e.indexOf(".")<0?6:4)}},In=(e,a)=>ec(p.isObject(e)?e:{address:e,family:a}),ac=Zr&&function(a){return Qr(async function(n,s,t){let{data:o,lookup:c,family:u}=a,{responseType:l,responseEncoding:r}=a,d=a.method.toUpperCase(),x,_=!1,m;if(c){let g=Kr(c,y=>p.isArray(y)?y:[y]);c=(y,D,fe)=>{g(y,D,(L,oe,ya)=>{if(L)return fe(L);let ne=p.isArray(oe)?oe.map(Y=>In(Y)):[In(oe,ya)];D.all?fe(L,ne):fe(L,ne[0].address,ne[0].family)})}}let h=new Eo.EventEmitter,w=()=>{a.cancelToken&&a.cancelToken.unsubscribe(k),a.signal&&a.signal.removeEventListener("abort",k),h.removeAllListeners()};t((g,y)=>{x=!0,y&&(_=!0,w())});function k(g){h.emit("abort",!g||g.type?new de(null,a,m):g)}h.once("abort",s),(a.cancelToken||a.signal)&&(a.cancelToken&&a.cancelToken.subscribe(k),a.signal&&(a.signal.aborted?k():a.signal.addEventListener("abort",k)));let S=hi(a.baseURL,a.url),b=new URL(S,"http://localhost"),C=b.protocol||Un[0];if(C==="data:"){let g;if(d!=="GET")return ke(n,s,{status:405,statusText:"method not allowed",headers:{},config:a});try{g=Dr(a.url,l==="blob",{Blob:a.env&&a.env.Blob})}catch(y){throw f.from(y,f.ERR_BAD_REQUEST,a)}return l==="text"?(g=g.toString(r),(!r||r==="utf8")&&(g=p.stripBOM(g))):l==="stream"&&(g=pe.default.Readable.from(g)),ke(n,s,{data:g,status:200,statusText:"OK",headers:new H,config:a})}if(Un.indexOf(C)===-1)return s(new f("Unsupported protocol "+C,f.ERR_BAD_REQUEST,a));let A=H.from(a.headers).normalize();A.set("User-Agent","axios/"+sa,!1);let P=a.onDownloadProgress,G=a.onUploadProgress,ie=a.maxRate,ge,ba;if(p.isSpecCompliantForm(o)){let g=A.getContentType(/boundary=([-_\w\d]{10,70})/i);o=Hr(o,y=>{A.set(y)},{tag:`axios-${sa}-boundary`,boundary:g&&g[1]||void 0})}else if(p.isFormData(o)&&p.isFunction(o.getHeaders)){if(A.set(o.getHeaders()),!A.hasContentLength())try{let g=await Co.default.promisify(o.getLength).call(o);Number.isFinite(g)&&g>=0&&A.setContentLength(g)}catch{}}else if(p.isBlob(o))o.size&&A.setContentType(o.type||"application/octet-stream"),A.setContentLength(o.size||0),o=pe.default.Readable.from(hs(o));else if(o&&!p.isStream(o)){if(!Buffer.isBuffer(o))if(p.isArrayBuffer(o))o=Buffer.from(new Uint8Array(o));else if(p.isString(o))o=Buffer.from(o,"utf-8");else return s(new f("Data after transformation must be a string, an ArrayBuffer, a Buffer, or a Stream",f.ERR_BAD_REQUEST,a));if(A.setContentLength(o.length,!1),a.maxBodyLength>-1&&o.length>a.maxBodyLength)return s(new f("Request body larger than maxBodyLength limit",f.ERR_BAD_REQUEST,a))}let Hs=p.toFiniteNumber(A.getContentLength());p.isArray(ie)?(ge=ie[0],ba=ie[1]):ge=ba=ie,o&&(G||ge)&&(p.isStream(o)||(o=pe.default.Readable.from(o,{objectMode:!1})),o=pe.default.pipeline([o,new Pn({length:Hs,maxRate:p.toFiniteNumber(ge)})],p.noop),G&&o.on("progress",g=>{G(Object.assign(g,{upload:!0}))}));let Te;if(a.auth){let g=a.auth.username||"",y=a.auth.password||"";Te=g+":"+y}if(!Te&&b.username){let g=b.username,y=b.password;Te=g+":"+y}Te&&A.delete("authorization");let Ri;try{Ri=ui(b.pathname+b.search,a.params,a.paramsSerializer).replace(/^\?/,"")}catch(g){let y=new Error(g.message);return y.config=a,y.url=a.url,y.exists=!0,s(y)}A.set("Accept-Encoding","gzip, compress, deflate"+(Nn?", br":""),!1);let U={path:Ri,method:d,headers:A.toJSON(),agents:{http:a.httpAgent,https:a.httpsAgent},auth:Te,protocol:C,family:u,beforeRedirect:Yr,beforeRedirects:{}};!p.isUndefined(c)&&(U.lookup=c),a.socketPath?U.socketPath=a.socketPath:(U.hostname=b.hostname,U.port=b.port,vs(U,a.proxy,C+"//"+b.hostname+(b.port?":"+b.port:"")+U.path));let We,ga=Xr.test(U.protocol);if(U.agent=ga?a.httpsAgent:a.httpAgent,a.transport?We=a.transport:a.maxRedirects===0?We=ga?Oo.default:So.default:(a.maxRedirects&&(U.maxRedirects=a.maxRedirects),a.beforeRedirect&&(U.beforeRedirects.config=a.beforeRedirect),We=ga?Jr:Gr),a.maxBodyLength>-1?U.maxBodyLength=a.maxBodyLength:U.maxBodyLength=1/0,a.insecureHTTPParser&&(U.insecureHTTPParser=a.insecureHTTPParser),m=We.request(U,function(y){if(m.destroyed)return;let D=[y],fe=+y.headers["content-length"];if(P){let Y=new Pn({length:p.toFiniteNumber(fe),maxRate:p.toFiniteNumber(ba)});P&&Y.on("progress",Ke=>{P(Object.assign(Ke,{download:!0}))}),D.push(Y)}let L=y,oe=y.req||m;if(a.decompress!==!1&&y.headers["content-encoding"])switch((d==="HEAD"||y.statusCode===204)&&delete y.headers["content-encoding"],(y.headers["content-encoding"]||"").toLowerCase()){case"gzip":case"x-gzip":case"compress":case"x-compress":D.push(ue.default.createUnzip(Bn)),delete y.headers["content-encoding"];break;case"deflate":D.push(new Mr),D.push(ue.default.createUnzip(Bn)),delete y.headers["content-encoding"];break;case"br":Nn&&(D.push(ue.default.createBrotliDecompress(Vr)),delete y.headers["content-encoding"])}L=D.length>1?pe.default.pipeline(D,p.noop):D[0];let ya=pe.default.finished(L,()=>{ya(),w()}),ne={status:y.statusCode,statusText:y.statusMessage,headers:new H(y.headers),config:a,request:oe};if(l==="stream")ne.data=L,ke(n,s,ne);else{let Y=[],Ke=0;L.on("data",function(N){Y.push(N),Ke+=N.length,a.maxContentLength>-1&&Ke>a.maxContentLength&&(_=!0,L.destroy(),s(new f("maxContentLength size of "+a.maxContentLength+" exceeded",f.ERR_BAD_RESPONSE,a,oe)))}),L.on("aborted",function(){if(_)return;let N=new f("maxContentLength size of "+a.maxContentLength+" exceeded",f.ERR_BAD_RESPONSE,a,oe);L.destroy(N),s(N)}),L.on("error",function(N){m.destroyed||s(f.from(N,null,a,oe))}),L.on("end",function(){try{let N=Y.length===1?Y[0]:Buffer.concat(Y);l!=="arraybuffer"&&(N=N.toString(r),(!r||r==="utf8")&&(N=p.stripBOM(N))),ne.data=N}catch(N){return s(f.from(N,null,a,ne.request,ne))}ke(n,s,ne)})}h.once("abort",Y=>{L.destroyed||(L.emit("error",Y),L.destroy())})}),h.once("abort",g=>{s(g),m.destroy(g)}),m.on("error",function(y){s(f.from(y,null,a,m))}),m.on("socket",function(y){y.setKeepAlive(!0,1e3*60)}),a.timeout){let g=parseInt(a.timeout,10);if(Number.isNaN(g)){s(new f("error trying to parse `config.timeout` to int",f.ERR_BAD_OPTION_VALUE,a,m));return}m.setTimeout(g,function(){if(x)return;let D=a.timeout?"timeout of "+a.timeout+"ms exceeded":"timeout exceeded",fe=a.transitional||di;a.timeoutErrorMessage&&(D=a.timeoutErrorMessage),s(new f(D,fe.clarifyTimeoutError?f.ETIMEDOUT:f.ECONNABORTED,a,m)),k()})}if(p.isStream(o)){let g=!1,y=!1;o.on("end",()=>{g=!0}),o.once("error",D=>{y=!0,m.destroy(D)}),o.on("close",()=>{!g&&!y&&k(new de("Request stream has been aborted",a,m))}),o.pipe(m)}else m.end(o)})},ta=(e,a,i=3)=>{let n=0,s=xs(50,250);return fs(t=>{let o=t.loaded,c=t.lengthComputable?t.total:void 0,u=o-n,l=s(u),r=o<=c;n=o;let d={loaded:o,total:c,progress:c?o/c:void 0,bytes:u,rate:l||void 0,estimated:l&&c&&r?(c-o)/l:void 0,event:t,lengthComputable:c!=null};d[a?"download":"upload"]=!0,e(d)},i)},ic=K.hasStandardBrowserEnv?function(){let a=/(msie|trident)/i.test(navigator.userAgent),i=document.createElement("a"),n;function s(t){let o=t;return a&&(i.setAttribute("href",o),o=i.href),i.setAttribute("href",o),{href:i.href,protocol:i.protocol?i.protocol.replace(/:$/,""):"",host:i.host,search:i.search?i.search.replace(/^\?/,""):"",hash:i.hash?i.hash.replace(/^#/,""):"",hostname:i.hostname,port:i.port,pathname:i.pathname.charAt(0)==="/"?i.pathname:"/"+i.pathname}}return n=s(window.location.href),function(o){let c=p.isString(o)?s(o):o;return c.protocol===n.protocol&&c.host===n.host}}():function(){return function(){return!0}}(),nc=K.hasStandardBrowserEnv?{write(e,a,i,n,s,t){let o=[e+"="+encodeURIComponent(a)];p.isNumber(i)&&o.push("expires="+new Date(i).toGMTString()),p.isString(n)&&o.push("path="+n),p.isString(s)&&o.push("domain="+s),t===!0&&o.push("secure"),document.cookie=o.join("; ")},read(e){let a=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return a?decodeURIComponent(a[3]):null},remove(e){this.write(e,"",Date.now()-864e5)}}:{write(){},read(){return null},remove(){}},$n=e=>e instanceof H?{...e}:e;function ve(e,a){a=a||{};let i={};function n(l,r,d){return p.isPlainObject(l)&&p.isPlainObject(r)?p.merge.call({caseless:d},l,r):p.isPlainObject(r)?p.merge({},r):p.isArray(r)?r.slice():r}function s(l,r,d){if(p.isUndefined(r)){if(!p.isUndefined(l))return n(void 0,l,d)}else return n(l,r,d)}function t(l,r){if(!p.isUndefined(r))return n(void 0,r)}function o(l,r){if(p.isUndefined(r)){if(!p.isUndefined(l))return n(void 0,l)}else return n(void 0,r)}function c(l,r,d){if(d in a)return n(l,r);if(d in e)return n(void 0,l)}let u={url:t,method:t,data:t,baseURL:o,transformRequest:o,transformResponse:o,paramsSerializer:o,timeout:o,timeoutMessage:o,withCredentials:o,withXSRFToken:o,adapter:o,responseType:o,xsrfCookieName:o,xsrfHeaderName:o,onUploadProgress:o,onDownloadProgress:o,decompress:o,maxContentLength:o,maxBodyLength:o,beforeRedirect:o,transport:o,httpAgent:o,httpsAgent:o,cancelToken:o,socketPath:o,responseEncoding:o,validateStatus:c,headers:(l,r)=>s($n(l),$n(r),!0)};return p.forEach(Object.keys(Object.assign({},e,a)),function(r){let d=u[r]||s,x=d(e[r],a[r],r);p.isUndefined(x)&&d!==c||(i[r]=x)}),i}var bs=e=>{let a=ve({},e),{data:i,withXSRFToken:n,xsrfHeaderName:s,xsrfCookieName:t,headers:o,auth:c}=a;a.headers=o=H.from(o),a.url=ui(hi(a.baseURL,a.url),e.params,e.paramsSerializer),c&&o.set("Authorization","Basic "+btoa((c.username||"")+":"+(c.password?unescape(encodeURIComponent(c.password)):"")));let u;if(p.isFormData(i)){if(K.hasStandardBrowserEnv||K.hasStandardBrowserWebWorkerEnv)o.setContentType(void 0);else if((u=o.getContentType())!==!1){let[l,...r]=u?u.split(";").map(d=>d.trim()).filter(Boolean):[];o.setContentType([l||"multipart/form-data",...r].join("; "))}}if(K.hasStandardBrowserEnv&&(n&&p.isFunction(n)&&(n=n(a)),n||n!==!1&&ic(a.url))){let l=s&&t&&nc.read(t);l&&o.set(s,l)}return a},sc=typeof XMLHttpRequest<"u",tc=sc&&function(e){return new Promise(function(i,n){let s=bs(e),t=s.data,o=H.from(s.headers).normalize(),{responseType:c}=s,u;function l(){s.cancelToken&&s.cancelToken.unsubscribe(u),s.signal&&s.signal.removeEventListener("abort",u)}let r=new XMLHttpRequest;r.open(s.method.toUpperCase(),s.url,!0),r.timeout=s.timeout;function d(){if(!r)return;let _=H.from("getAllResponseHeaders"in r&&r.getAllResponseHeaders()),h={data:!c||c==="text"||c==="json"?r.responseText:r.response,status:r.status,statusText:r.statusText,headers:_,config:e,request:r};ke(function(k){i(k),l()},function(k){n(k),l()},h),r=null}"onloadend"in r?r.onloadend=d:r.onreadystatechange=function(){!r||r.readyState!==4||r.status===0&&!(r.responseURL&&r.responseURL.indexOf("file:")===0)||setTimeout(d)},r.onabort=function(){r&&(n(new f("Request aborted",f.ECONNABORTED,s,r)),r=null)},r.onerror=function(){n(new f("Network Error",f.ERR_NETWORK,s,r)),r=null},r.ontimeout=function(){let m=s.timeout?"timeout of "+s.timeout+"ms exceeded":"timeout exceeded",h=s.transitional||di;s.timeoutErrorMessage&&(m=s.timeoutErrorMessage),n(new f(m,h.clarifyTimeoutError?f.ETIMEDOUT:f.ECONNABORTED,s,r)),r=null},t===void 0&&o.setContentType(null),"setRequestHeader"in r&&p.forEach(o.toJSON(),function(m,h){r.setRequestHeader(h,m)}),p.isUndefined(s.withCredentials)||(r.withCredentials=!!s.withCredentials),c&&c!=="json"&&(r.responseType=s.responseType),typeof s.onDownloadProgress=="function"&&r.addEventListener("progress",ta(s.onDownloadProgress,!0)),typeof s.onUploadProgress=="function"&&r.upload&&r.upload.addEventListener("progress",ta(s.onUploadProgress)),(s.cancelToken||s.signal)&&(u=_=>{r&&(n(!_||_.type?new de(null,e,r):_),r.abort(),r=null)},s.cancelToken&&s.cancelToken.subscribe(u),s.signal&&(s.signal.aborted?u():s.signal.addEventListener("abort",u)));let x=ms(s.url);if(x&&K.protocols.indexOf(x)===-1){n(new f("Unsupported protocol "+x+":",f.ERR_BAD_REQUEST,e));return}r.send(t||null)})},oc=(e,a)=>{let i=new AbortController,n,s=function(u){if(!n){n=!0,o();let l=u instanceof Error?u:this.reason;i.abort(l instanceof f?l:new de(l instanceof Error?l.message:l))}},t=a&&setTimeout(()=>{s(new f(`timeout ${a} of ms exceeded`,f.ETIMEDOUT))},a),o=()=>{e&&(t&&clearTimeout(t),t=null,e.forEach(u=>{u&&(u.removeEventListener?u.removeEventListener("abort",s):u.unsubscribe(s))}),e=null)};e.forEach(u=>u&&u.addEventListener&&u.addEventListener("abort",s));let{signal:c}=i;return c.unsubscribe=o,[c,()=>{t&&clearTimeout(t),t=null}]},rc=oc,cc=function*(e,a){let i=e.byteLength;if(!a||i{let t=pc(e,a,s),o=0;return new ReadableStream({type:"bytes",async pull(c){let{done:u,value:l}=await t.next();if(u){c.close(),n();return}let r=l.byteLength;i&&i(o+=r),c.enqueue(new Uint8Array(l))},cancel(c){return n(c),t.return()}},{highWaterMark:2})},Mn=(e,a)=>{let i=e!=null;return n=>setTimeout(()=>a({lengthComputable:i,total:e,loaded:n}))},ua=typeof fetch=="function"&&typeof Request=="function"&&typeof Response=="function",gs=ua&&typeof ReadableStream=="function",si=ua&&(typeof TextEncoder=="function"?(e=>a=>e.encode(a))(new TextEncoder):async e=>new Uint8Array(await new Response(e).arrayBuffer())),lc=gs&&(()=>{let e=!1,a=new Request(K.origin,{body:new ReadableStream,method:"POST",get duplex(){return e=!0,"half"}}).headers.has("Content-Type");return e&&!a})(),Wn=64*1024,ti=gs&&!!(()=>{try{return p.isReadableStream(new Response("").body)}catch{}})(),oa={stream:ti&&(e=>e.body)};ua&&(e=>{["text","arrayBuffer","blob","formData","stream"].forEach(a=>{!oa[a]&&(oa[a]=p.isFunction(e[a])?i=>i[a]():(i,n)=>{throw new f(`Response type '${a}' is not supported`,f.ERR_NOT_SUPPORT,n)})})})(new Response);var uc=async e=>{if(e==null)return 0;if(p.isBlob(e))return e.size;if(p.isSpecCompliantForm(e))return(await new Request(e).arrayBuffer()).byteLength;if(p.isArrayBufferView(e))return e.byteLength;if(p.isURLSearchParams(e)&&(e=e+""),p.isString(e))return(await si(e)).byteLength},dc=async(e,a)=>{let i=p.toFiniteNumber(e.getContentLength());return i??uc(a)},mc=ua&&(async e=>{let{url:a,method:i,data:n,signal:s,cancelToken:t,timeout:o,onDownloadProgress:c,onUploadProgress:u,responseType:l,headers:r,withCredentials:d="same-origin",fetchOptions:x}=bs(e);l=l?(l+"").toLowerCase():"text";let[_,m]=s||t||o?rc([s,t],o):[],h,w,k=()=>{!h&&setTimeout(()=>{_&&_.unsubscribe()}),h=!0},S;try{if(u&&lc&&i!=="get"&&i!=="head"&&(S=await dc(r,n))!==0){let P=new Request(a,{method:"POST",body:n,duplex:"half"}),G;p.isFormData(n)&&(G=P.headers.get("content-type"))&&r.setContentType(G),P.body&&(n=Hn(P.body,Wn,Mn(S,ta(u)),null,si))}p.isString(d)||(d=d?"cors":"omit"),w=new Request(a,{...x,signal:_,method:i.toUpperCase(),headers:r.normalize().toJSON(),body:n,duplex:"half",withCredentials:d});let b=await fetch(w),C=ti&&(l==="stream"||l==="response");if(ti&&(c||C)){let P={};["status","statusText","headers"].forEach(ie=>{P[ie]=b[ie]});let G=p.toFiniteNumber(b.headers.get("content-length"));b=new Response(Hn(b.body,Wn,c&&Mn(G,ta(c,!0)),C&&k,si),P)}l=l||"text";let A=await oa[p.findKey(oa,l)||"text"](b,e);return!C&&k(),m&&m(),await new Promise((P,G)=>{ke(P,G,{data:A,headers:H.from(b.headers),status:b.status,statusText:b.statusText,config:e,request:w})})}catch(b){throw k(),b&&b.name==="TypeError"&&/fetch/i.test(b.message)?Object.assign(new f("Network Error",f.ERR_NETWORK,e,w),{cause:b.cause||b}):f.from(b,b&&b.code,e,w)}}),oi={http:ac,xhr:tc,fetch:mc};p.forEach(oi,(e,a)=>{if(e){try{Object.defineProperty(e,"name",{value:a})}catch{}Object.defineProperty(e,"adapterName",{value:a})}});var Kn=e=>`- ${e}`,fc=e=>p.isFunction(e)||e===null||e===!1,ys={getAdapter:e=>{e=p.isArray(e)?e:[e];let{length:a}=e,i,n,s={};for(let t=0;t`adapter ${c} `+(u===!1?"is not supported by the environment":"is not available in the build")),o=a?t.length>1?`since : -`+t.map(Kn).join(` -`):" "+Kn(t[0]):"as no adapter specified";throw new f("There is no suitable adapter to dispatch the request "+o,"ERR_NOT_SUPPORT")}return n},adapters:oi};function Ya(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new de(null,e)}function Vn(e){return Ya(e),e.headers=H.from(e.headers),e.data=Xa.call(e,e.transformRequest),["post","put","patch"].indexOf(e.method)!==-1&&e.headers.setContentType("application/x-www-form-urlencoded",!1),ys.getAdapter(e.adapter||xi.adapter)(e).then(function(n){return Ya(e),n.data=Xa.call(e,e.transformResponse,n),n.headers=H.from(n.headers),n},function(n){return ds(n)||(Ya(e),n&&n.response&&(n.response.data=Xa.call(e,e.transformResponse,n.response),n.response.headers=H.from(n.response.headers))),Promise.reject(n)})}var vi={};["object","boolean","number","function","string","symbol"].forEach((e,a)=>{vi[e]=function(n){return typeof n===e||"a"+(a<1?"n ":" ")+e}});var Gn={};vi.transitional=function(a,i,n){function s(t,o){return"[Axios v"+sa+"] Transitional option '"+t+"'"+o+(n?". "+n:"")}return(t,o,c)=>{if(a===!1)throw new f(s(o," has been removed"+(i?" in "+i:"")),f.ERR_DEPRECATED);return i&&!Gn[o]&&(Gn[o]=!0,console.warn(s(o," has been deprecated since v"+i+" and will be removed in the near future"))),a?a(t,o,c):!0}};function xc(e,a,i){if(typeof e!="object")throw new f("options must be an object",f.ERR_BAD_OPTION_VALUE);let n=Object.keys(e),s=n.length;for(;s-- >0;){let t=n[s],o=a[t];if(o){let c=e[t],u=c===void 0||o(c,t,e);if(u!==!0)throw new f("option "+t+" must be "+u,f.ERR_BAD_OPTION_VALUE);continue}if(i!==!0)throw new f("Unknown option "+t,f.ERR_BAD_OPTION)}}var ri={assertOptions:xc,validators:vi},ce=ri.validators,Re=class{constructor(a){this.defaults=a,this.interceptors={request:new Ln,response:new Ln}}async request(a,i){try{return await this._request(a,i)}catch(n){if(n instanceof Error){let s;Error.captureStackTrace?Error.captureStackTrace(s={}):s=new Error;let t=s.stack?s.stack.replace(/^.+\n/,""):"";try{n.stack?t&&!String(n.stack).endsWith(t.replace(/^.+\n.+\n/,""))&&(n.stack+=` -`+t):n.stack=t}catch{}}throw n}}_request(a,i){typeof a=="string"?(i=i||{},i.url=a):i=a||{},i=ve(this.defaults,i);let{transitional:n,paramsSerializer:s,headers:t}=i;n!==void 0&&ri.assertOptions(n,{silentJSONParsing:ce.transitional(ce.boolean),forcedJSONParsing:ce.transitional(ce.boolean),clarifyTimeoutError:ce.transitional(ce.boolean)},!1),s!=null&&(p.isFunction(s)?i.paramsSerializer={serialize:s}:ri.assertOptions(s,{encode:ce.function,serialize:ce.function},!0)),i.method=(i.method||this.defaults.method||"get").toLowerCase();let o=t&&p.merge(t.common,t[i.method]);t&&p.forEach(["delete","get","head","post","put","patch","common"],m=>{delete t[m]}),i.headers=H.concat(o,t);let c=[],u=!0;this.interceptors.request.forEach(function(h){typeof h.runWhen=="function"&&h.runWhen(i)===!1||(u=u&&h.synchronous,c.unshift(h.fulfilled,h.rejected))});let l=[];this.interceptors.response.forEach(function(h){l.push(h.fulfilled,h.rejected)});let r,d=0,x;if(!u){let m=[Vn.bind(this),void 0];for(m.unshift.apply(m,c),m.push.apply(m,l),x=m.length,r=Promise.resolve(i);d{if(!n._listeners)return;let t=n._listeners.length;for(;t-- >0;)n._listeners[t](s);n._listeners=null}),this.promise.then=s=>{let t,o=new Promise(c=>{n.subscribe(c),t=c}).then(s);return o.cancel=function(){n.unsubscribe(t)},o},a(function(t,o,c){n.reason||(n.reason=new de(t,o,c),i(n.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(a){if(this.reason){a(this.reason);return}this._listeners?this._listeners.push(a):this._listeners=[a]}unsubscribe(a){if(!this._listeners)return;let i=this._listeners.indexOf(a);i!==-1&&this._listeners.splice(i,1)}static source(){let a;return{token:new e(function(s){a=s}),cancel:a}}},hc=ci;function vc(e){return function(i){return e.apply(null,i)}}function bc(e){return p.isObject(e)&&e.isAxiosError===!0}var pi={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(pi).forEach(([e,a])=>{pi[a]=e});var gc=pi;function ws(e){let a=new na(e),i=Zn(na.prototype.request,a);return p.extend(i,na.prototype,a,{allOwnKeys:!0}),p.extend(i,a,null,{allOwnKeys:!0}),i.create=function(s){return ws(ve(e,s))},i}var T=ws(xi);T.Axios=na;T.CanceledError=de;T.CancelToken=hc;T.isCancel=ds;T.VERSION=sa;T.toFormData=la;T.AxiosError=f;T.Cancel=T.CanceledError;T.all=function(a){return Promise.all(a)};T.spread=vc;T.isAxiosError=bc;T.mergeConfig=ve;T.AxiosHeaders=H;T.formToJSON=e=>us(p.isHTMLForm(e)?new FormData(e):e);T.getAdapter=ys.getAdapter;T.HttpStatusCode=gc;T.default=T;_s.exports=T});var Es=j((_p,ks)=>{ks.exports=function(e){return new Ue(e)};function Ue(e){this.capacity=e|0,this.map=Object.create(null),this.list=new da}Ue.prototype.get=function(e){var a=this.map[e];if(a!=null)return this.used(a),a.val};Ue.prototype.set=function(e,a){var i=this.map[e];if(i!=null)i.val=a;else{if(this.capacity||this.prune(),!this.capacity)return!1;i=new yc(e,a),this.map[e]=i,this.capacity--}return this.used(i),!0};Ue.prototype.used=function(e){this.list.moveToFront(e)};Ue.prototype.prune=function(){var e=this.list.pop();e!=null&&(delete this.map[e.key],this.capacity++)};function da(){this.firstNode=null,this.lastNode=null}da.prototype.moveToFront=function(e){this.firstNode!=e&&(this.remove(e),this.firstNode==null?(this.firstNode=e,this.lastNode=e,e.prev=null,e.next=null):(e.prev=null,e.next=this.firstNode,e.next.prev=e,this.firstNode=e))};da.prototype.pop=function(){var e=this.lastNode;return e!=null&&this.remove(e),e};da.prototype.remove=function(e){this.firstNode==e?this.firstNode=e.next:e.prev!=null&&(e.prev.next=e.next),this.lastNode==e?this.lastNode=e.prev:e.next!=null&&(e.next.prev=e.prev)};function yc(e,a){this.key=e,this.val=a,this.prev=null,this.next=null}});var zs=j(qs=>{var Ss=qs,wc=E("url"),Os=E("querystring"),Cs=E("crypto"),_c=Es(),Rs=_c(1e3);function Ie(e,a,i){return Cs.createHmac("sha256",e).update(a,"utf8").digest(i)}function bi(e,a){return Cs.createHash("sha256").update(e,"utf8").digest(a)}function Ts(e){return e.replace(/[!'()*]/g,function(a){return"%"+a.charCodeAt(0).toString(16).toUpperCase()})}function ma(e){return Ts(encodeURIComponent(e))}var As={authorization:!0,connection:!0,"x-amzn-trace-id":!0,"user-agent":!0,expect:!0,"presigned-expires":!0,range:!0};function q(e,a){typeof e=="string"&&(e=wc.parse(e));var i=e.headers=Object.assign({},e.headers||{}),n=(!this.service||!this.region)&&this.matchHost(e.hostname||e.host||i.Host||i.host);this.request=e,this.credentials=a||this.defaultCredentials(),this.service=e.service||n[0]||"",this.region=e.region||n[1]||"us-east-1",this.service==="email"&&(this.service="ses"),!e.method&&e.body&&(e.method="POST"),!i.Host&&!i.host&&(i.Host=e.hostname||e.host||this.createHost(),e.port&&(i.Host+=":"+e.port)),!e.hostname&&!e.host&&(e.hostname=i.Host||i.host),this.isCodeCommitGit=this.service==="codecommit"&&e.method==="GIT",this.extraHeadersToIgnore=e.extraHeadersToIgnore||Object.create(null),this.extraHeadersToInclude=e.extraHeadersToInclude||Object.create(null)}q.prototype.matchHost=function(e){var a=(e||"").match(/([^\.]+)\.(?:([^\.]*)\.)?amazonaws\.com(\.cn)?$/),i=(a||[]).slice(1,3);if((i[1]==="es"||i[1]==="aoss")&&(i=i.reverse()),i[1]=="s3")i[0]="s3",i[1]="us-east-1";else for(var n=0;n<2;n++)if(/^s3-/.test(i[n])){i[1]=i[n].slice(3),i[0]="s3";break}return i};q.prototype.isSingleRegion=function(){return["s3","sdb"].indexOf(this.service)>=0&&this.region==="us-east-1"?!0:["cloudfront","ls","route53","iam","importexport","sts"].indexOf(this.service)>=0};q.prototype.createHost=function(){var e=this.isSingleRegion()?"":"."+this.region,a=this.service==="ses"?"email":this.service;return a+e+".amazonaws.com"};q.prototype.prepareRequest=function(){this.parsePath();var e=this.request,a=e.headers,i;e.signQuery?(this.parsedPath.query=i=this.parsedPath.query||{},this.credentials.sessionToken&&(i["X-Amz-Security-Token"]=this.credentials.sessionToken),this.service==="s3"&&!i["X-Amz-Expires"]&&(i["X-Amz-Expires"]=86400),i["X-Amz-Date"]?this.datetime=i["X-Amz-Date"]:i["X-Amz-Date"]=this.getDateTime(),i["X-Amz-Algorithm"]="AWS4-HMAC-SHA256",i["X-Amz-Credential"]=this.credentials.accessKeyId+"/"+this.credentialString(),i["X-Amz-SignedHeaders"]=this.signedHeaders()):(!e.doNotModifyHeaders&&!this.isCodeCommitGit&&(e.body&&!a["Content-Type"]&&!a["content-type"]&&(a["Content-Type"]="application/x-www-form-urlencoded; charset=utf-8"),e.body&&!a["Content-Length"]&&!a["content-length"]&&(a["Content-Length"]=Buffer.byteLength(e.body)),this.credentials.sessionToken&&!a["X-Amz-Security-Token"]&&!a["x-amz-security-token"]&&(a["X-Amz-Security-Token"]=this.credentials.sessionToken),this.service==="s3"&&!a["X-Amz-Content-Sha256"]&&!a["x-amz-content-sha256"]&&(a["X-Amz-Content-Sha256"]=bi(this.request.body||"","hex")),a["X-Amz-Date"]||a["x-amz-date"]?this.datetime=a["X-Amz-Date"]||a["x-amz-date"]:a["X-Amz-Date"]=this.getDateTime()),delete a.Authorization,delete a.authorization)};q.prototype.sign=function(){return this.parsedPath||this.prepareRequest(),this.request.signQuery?this.parsedPath.query["X-Amz-Signature"]=this.signature():this.request.headers.Authorization=this.authHeader(),this.request.path=this.formatPath(),this.request};q.prototype.getDateTime=function(){if(!this.datetime){var e=this.request.headers,a=new Date(e.Date||e.date||new Date);this.datetime=a.toISOString().replace(/[:\-]|\.\d{3}/g,""),this.isCodeCommitGit&&(this.datetime=this.datetime.slice(0,-1))}return this.datetime};q.prototype.getDate=function(){return this.getDateTime().substr(0,8)};q.prototype.authHeader=function(){return["AWS4-HMAC-SHA256 Credential="+this.credentials.accessKeyId+"/"+this.credentialString(),"SignedHeaders="+this.signedHeaders(),"Signature="+this.signature()].join(", ")};q.prototype.signature=function(){var e=this.getDate(),a=[this.credentials.secretAccessKey,e,this.region,this.service].join(),i,n,s,t=Rs.get(a);return t||(i=Ie("AWS4"+this.credentials.secretAccessKey,e),n=Ie(i,this.region),s=Ie(n,this.service),t=Ie(s,"aws4_request"),Rs.set(a,t)),Ie(t,this.stringToSign(),"hex")};q.prototype.stringToSign=function(){return["AWS4-HMAC-SHA256",this.getDateTime(),this.credentialString(),bi(this.canonicalString(),"hex")].join(` -`)};q.prototype.canonicalString=function(){this.parsedPath||this.prepareRequest();var e=this.parsedPath.path,a=this.parsedPath.query,i=this.request.headers,n="",s=this.service!=="s3",t=this.service==="s3"||this.request.doNotEncodePath,o=this.service==="s3",c=this.service==="s3",u;if(this.service==="s3"&&this.request.signQuery?u="UNSIGNED-PAYLOAD":this.isCodeCommitGit?u="":u=i["X-Amz-Content-Sha256"]||i["x-amz-content-sha256"]||bi(this.request.body||"","hex"),a){var l=Object.keys(a).reduce(function(d,x){return x&&(d[ma(x)]=Array.isArray(a[x])&&c?a[x][0]:a[x]),d},{}),r=[];Object.keys(l).sort().forEach(function(d){Array.isArray(l[d])?l[d].map(ma).sort().forEach(function(x){r.push(d+"="+x)}):r.push(d+"="+ma(l[d]))}),n=r.join("&")}return e!=="/"&&(s&&(e=e.replace(/\/{2,}/g,"/")),e=e.split("/").reduce(function(d,x){return s&&x===".."?d.pop():(!s||x!==".")&&(t&&(x=decodeURIComponent(x.replace(/\+/g," "))),d.push(ma(x))),d},[]).join("/"),e[0]!=="/"&&(e="/"+e),o&&(e=e.replace(/%2F/g,"/"))),[this.request.method||"GET",e,n,this.canonicalHeaders()+` -`,this.signedHeaders(),u].join(` -`)};q.prototype.canonicalHeaders=function(){var e=this.request.headers;function a(i){return i.toString().trim().replace(/\s+/g," ")}return Object.keys(e).filter(function(i){return As[i.toLowerCase()]==null}).sort(function(i,n){return i.toLowerCase()=0&&(i=Os.parse(e.slice(a+1)),e=e.slice(0,a)),this.parsedPath={path:e,query:i}};q.prototype.formatPath=function(){var e=this.parsedPath.path,a=this.parsedPath.query;return a?(a[""]!=null&&delete a[""],e+"?"+Ts(Os.stringify(a))):e};Ss.RequestSigner=q;Ss.sign=function(e,a){return new q(e,a).sign()}});var Ps=j($e=>{"use strict";Object.defineProperty($e,"__esModule",{value:!0});$e.import_=void 0;$e.default=Fs;function Fs(e){return e=jc(e),import(e)}$e.import_=Fs;var Ls="file://";function jc(e){return process.platform==="win32"&&kc(e)&&!e.startsWith(Ls)?Ls+e:e}function kc(e){return/^[/\\](?![/\\])|^[/\\]{2}(?!\.)|^[A-Za-z]:[/\\]/.test(e)}});var xa=j(fa=>{"use strict";Object.defineProperty(fa,"__esModule",{value:!0});fa.resolvePath=void 0;var Ec=e=>{let a=e.directory?e.directory.replace(/^\/|\/$/g,""):"";return e.directory?`${a}/${e.filename}`:`${e.filename}`};fa.resolvePath=Ec});var gi=j(be=>{"use strict";Object.defineProperty(be,"__esModule",{value:!0});be.PROVIDERS=be.CLOUD_PROVIDERS=void 0;var B=xa(),Rc;(function(e){e.GCP="GCP",e.WASABI="WASABI",e.AWS="AWS",e.CONTABO="CONTABO",e.DO="DO",e.MINIO="MINIO",e.R2="R2"})(Rc=be.CLOUD_PROVIDERS||(be.CLOUD_PROVIDERS={}));be.PROVIDERS={GCP:{host:({bucket:e})=>`${e}.storage.googleapis.com`,url:({bucket:e,filename:a,directory:i})=>`https://${e}.storage.googleapis.com/${(0,B.resolvePath)({filename:a,directory:i})}`,res:({bucket:e,filename:a,directory:i})=>`https://storage.googleapis.com/${e}/${(0,B.resolvePath)({filename:a,directory:i})}`},AWS:{host:({bucket:e})=>`${e}.s3.amazonaws.com`,url:({bucket:e,filename:a,directory:i})=>`https://${e}.s3.amazonaws.com/${(0,B.resolvePath)({filename:a,directory:i})}`,res:({bucket:e,filename:a,directory:i,region:n})=>`https://${e}.s3.${n}.amazonaws.com/${(0,B.resolvePath)({filename:a,directory:i})}`},WASABI:{host:({region:e,bucket:a})=>`${a}.s3.${e}.wasabisys.com`,url:({region:e,filename:a,directory:i,bucket:n})=>`https://${n}.s3.${e}.wasabisys.com/${(0,B.resolvePath)({filename:a,directory:i})}`,res:({bucket:e,filename:a,directory:i,region:n})=>`https://s3.${n}.wasabisys.com/${e}/${(0,B.resolvePath)({filename:a,directory:i})}`},DO:{host:({region:e,bucket:a})=>`${a}.${e}.digitaloceanspaces.com`,url:({bucket:e,filename:a,directory:i,region:n})=>`https://${e}.${n}.digitaloceanspaces.com/${(0,B.resolvePath)({filename:a,directory:`${i}`})}`,res:({bucket:e,filename:a,directory:i,region:n})=>`https://${e}.${n}.digitaloceanspaces.com/${(0,B.resolvePath)({filename:a,directory:`${i}`})}`},CONTABO:{host:({region:e})=>`${e}.contabostorage.com`,url:({bucket:e,filename:a,directory:i,region:n})=>`https://${n}.contabostorage.com/${(0,B.resolvePath)({filename:a,directory:`${e}${i}`})}`,res:({bucket:e,filename:a,directory:i,region:n})=>`https://${n}.contabostorage.com/${(0,B.resolvePath)({filename:a,directory:`${e}${i}`})}`},MINIO:{host:({host:e})=>`${e}`,url:({bucket:e,filename:a,directory:i,host:n})=>`${n}/${e}/${(0,B.resolvePath)({filename:a,directory:`${i}`})}`,res:({bucket:e,filename:a,directory:i,host:n})=>`${n}/${e}/${(0,B.resolvePath)({filename:a,directory:`${i}`})}`},SUPABASE:{host:({host:e})=>`${e}`,url:({bucket:e,filename:a,directory:i,host:n})=>`${n}/storage/v1/s3/${e}/${(0,B.resolvePath)({filename:a,directory:`${i}`})}`,res:({bucket:e,filename:a,directory:i,host:n})=>`${n}/storage/v1/s3/${e}/${(0,B.resolvePath)({filename:a,directory:`${i}`})}`},R2:{host:({host:e,bucket:a})=>`https://${a}.${e.replace("https://","")}`,url:({bucket:e,filename:a,directory:i,host:n})=>`https://${e}.${n.replace("https://","")}/${(0,B.resolvePath)({filename:a,directory:`${i}`})}`,res:({bucket:e,filename:a,directory:i,host:n})=>`https://${e}.${n.replace("https://","")}/${(0,B.resolvePath)({filename:a,directory:`${i}`})}`}}});var _i=j(v=>{"use strict";var M=v&&v.__awaiter||function(e,a,i,n){function s(t){return t instanceof i?t:new i(function(o){o(t)})}return new(i||(i=Promise))(function(t,o){function c(r){try{l(n.next(r))}catch(d){o(d)}}function u(r){try{l(n.throw(r))}catch(d){o(d)}}function l(r){r.done?t(r.value):s(r.value).then(c,u)}l((n=n.apply(e,a||[])).next())})},wi=v&&v.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(v,"__esModule",{value:!0});v.getObjectEtag=v.objectExists=v.getObjectMetadata=v.deleteObject=v.getPresignedUrl=v.getObject=v.getObjectDataUrl=v.getObjectBuffer=v.getTextFile=v.getObjectBinary=v.upload=v.uploadBuffer=v.s3Request=v.getS3RequestObject=v.getProviderConfig=v.getCloudUrl=v.FileNotFoundError=void 0;var Sc=wi(js()),Ds=wi(zs()),te=Qe()("pico-s3"),ha=Qe()("pico-s3:error"),Oc=wi(E("crypto")),Cc=Ps(),se=gi(),He=xa(),yi=null,Tc=()=>M(void 0,void 0,void 0,function*(){return yi||(yi=yield(0,Cc.import_)("file-type")),yi}),Oe=class extends Error{constructor(a){super(a),this.name="FileNotFoundError"}};v.FileNotFoundError=Oe;var Ac=e=>se.PROVIDERS[e.provider].res(e);v.getCloudUrl=Ac;var qc=e=>se.PROVIDERS[e];v.getProviderConfig=qc;var zc=(e,a)=>{let{provider:i,accessKeyId:n,secretAccessKey:s}=e,t=i===se.CLOUD_PROVIDERS.GCP?"region":e.region,o=se.PROVIDERS[i],c=o.host(e),u=c.replace("https://","").replace("http://","");if(!o)throw new Error(`Invalid provider ${i}. Valid providers: ${Object.keys(se.PROVIDERS)}`);let l=Object.assign({},a?.headers||{});c.includes("https://")&&!l["x-amz-content-sha256"]&&(l["x-amz-content-sha256"]="UNSIGNED-PAYLOAD"),a==null||delete a.headers;let r=Object.assign({host:u,url:o.url(e),service:"s3",region:t,headers:l},a);return i===se.CLOUD_PROVIDERS.MINIO&&(r.path=o.url(e).replace(c,"")),Ds.default.sign(r,{accessKeyId:n,secretAccessKey:s})};v.getS3RequestObject=zc;var Lc=(e,a)=>M(void 0,void 0,void 0,function*(){let i=(0,v.getS3RequestObject)(e,a);return(0,Sc.default)(Object.assign({},i))});v.s3Request=Lc;var Fc=e=>M(void 0,void 0,void 0,function*(){let{provider:a,file:i}=e,n=se.PROVIDERS[a];if(!i||i===null)throw new Error("File isnull or undefined");let s=`/${(0,He.resolvePath)(e)}`,t=yield(yield Tc()).fileTypeFromBuffer(i),{mime:o}=t||{},c=i,u=Object.assign(Object.assign({"Content-Type":o||"application/octet-stream","Content-length":c.length,"x-amz-content-sha256":Oc.default.createHash("sha256").update(c).digest("hex")||"UNSIGNED-PAYLOAD"},e.headers||{}),e.public?{"x-amz-acl":"public-read"}:{});try{let l=Date.now();te(`Uploading ${s} to ${a}`),te(`Using Headers: ${JSON.stringify(u)}`);let r=yield(0,v.s3Request)(e,{method:"PUT",path:s,data:c,headers:u}),d=Date.now()-l;return te(`${s} uploaded to ${a} in ${d}ms with code ${r.status}`),n.res(e)||""}catch(l){throw ha("UPLOAD ERROR",s,a,l.message),l}});v.uploadBuffer=Fc;var Pc=e=>M(void 0,void 0,void 0,function*(){return(0,v.uploadBuffer)(Object.assign(Object.assign({},e),{file:Buffer.isBuffer(e.file)?e.file:Buffer.from(e.file.split(",")[1],"base64")}))});v.upload=Pc;var Dc=e=>M(void 0,void 0,void 0,function*(){return(yield(0,v.getObject)(e,{responseType:"arraybuffer"})).data});v.getObjectBinary=Dc;var Bc=e=>M(void 0,void 0,void 0,function*(){return(yield(0,v.getObjectBuffer)(e)).toString()});v.getTextFile=Bc;var Nc=e=>M(void 0,void 0,void 0,function*(){let a=yield(0,v.getObjectBinary)(e);return Buffer.from(a,"binary")});v.getObjectBuffer=Nc;var Uc=e=>M(void 0,void 0,void 0,function*(){let a=yield(0,v.getObject)(e,{responseType:"arraybuffer"}),i=Buffer.from(a.data,"binary");return`data:${a.headers["content-type"]};base64,${i.toString("base64")}`});v.getObjectDataUrl=Uc;var Ic=(e,a)=>M(void 0,void 0,void 0,function*(){let{provider:i}=e,n=`/${(0,He.resolvePath)(e)}`;try{let s=Date.now();te(`Downloading ${n} from ${i}`);let t=yield(0,v.s3Request)(e,Object.assign({method:"GET",path:n},a||{})),o=Date.now()-s;return te(`${n} downloaded from ${i} in ${o}ms`),t}catch(s){throw ha("GET ERROR",n,i,s.message),s?.response.status===404?new Oe(`File ${n} not found in ${i}`):s}});v.getObject=Ic;var $c=(e,a)=>M(void 0,void 0,void 0,function*(){let{provider:i,accessKeyId:n,secretAccessKey:s}=e,t=`/${(0,He.resolvePath)(e)}`,o=i===se.CLOUD_PROVIDERS.GCP?"region":e.region,c=se.PROVIDERS[i],u=c.host(e),l=u.replace("https://","").replace("http://","");if(!c)throw new Error(`Invalid provider ${i}. Valid providers: ${Object.keys(se.PROVIDERS)}`);let r=Ds.default.sign({host:l,path:t,service:"s3",region:o,signQuery:!0},{accessKeyId:n,secretAccessKey:s});return u+r.path});v.getPresignedUrl=$c;var Hc=(e,a)=>M(void 0,void 0,void 0,function*(){let{provider:i}=e,n=`/${(0,He.resolvePath)(e)}`;try{let s=Date.now();te(`Deleting ${n} from ${i}`);let t=yield(0,v.s3Request)(e,Object.assign({method:"DELETE",path:n},a||{})),o=Date.now()-s;return te(`${n} deleted from ${i} in ${o}ms`),t.status===204}catch(s){throw ha("GET ERROR",n,i,s.message),s?.response.status===404?new Oe(`File ${n} not found in ${i}`):s}});v.deleteObject=Hc;var Mc=(e,a)=>M(void 0,void 0,void 0,function*(){let{provider:i}=e,n=`/${(0,He.resolvePath)(e)}`;try{let s=Date.now();te(`Getting Metadata for ${n} from ${i}`);let t=yield(0,v.s3Request)(e,Object.assign({method:"HEAD",path:n},a||{})),o=Date.now()-s;return te(`${n} metadata downloaded from ${i} in ${o}ms`),t.headers}catch(s){throw ha("GET ERROR",n,i,s.message),s?.response.status===404?new Oe(`File ${n} not found in ${i}`):s}});v.getObjectMetadata=Mc;var Wc=(e,a)=>M(void 0,void 0,void 0,function*(){return(0,v.getObjectMetadata)(e,a).then(i=>!!i.etag)});v.objectExists=Wc;var Kc=(e,a)=>M(void 0,void 0,void 0,function*(){return(0,v.getObjectMetadata)(e,a).then(i=>i.etag)});v.getObjectEtag=Kc});var Bs=j(Ce=>{"use strict";var ee=Ce&&Ce.__awaiter||function(e,a,i,n){function s(t){return t instanceof i?t:new i(function(o){o(t)})}return new(i||(i=Promise))(function(t,o){function c(r){try{l(n.next(r))}catch(d){o(d)}}function u(r){try{l(n.throw(r))}catch(d){o(d)}}function l(r){r.done?t(r.value):s(r.value).then(c,u)}l((n=n.apply(e,a||[])).next())})};Object.defineProperty(Ce,"__esModule",{value:!0});Ce.PicoS3=void 0;var V=_i(),ji=class{constructor(a){typeof a=="boolean"&&a===!0?this.options={provider:process.env.PICO_S3_CLOUD_PROVIDER,region:process.env.PICO_S3_REGION,bucket:process.env.PICO_S3_BUCKET,host:process.env.PICO_S3_HOST,accessKeyId:process.env.PICO_S3_ACCESS_KEY_ID,secretAccessKey:process.env.PICO_S3_SECRET_ACCESS_KEY}:this.options=a}upload(a){return ee(this,void 0,void 0,function*(){return Buffer.isBuffer(a.file)?yield(0,V.uploadBuffer)(Object.assign(Object.assign({},this.options),a)):yield(0,V.upload)(Object.assign(Object.assign({},this.options),a))})}getObject(a){return ee(this,void 0,void 0,function*(){return yield(0,V.getObject)(Object.assign(Object.assign({},this.options),a))})}getProviderConfig(){return(0,V.getProviderConfig)(this.options.provider)}getProvider(){return this.options.provider}getObjectBuffer(a){return ee(this,void 0,void 0,function*(){return yield(0,V.getObjectBuffer)(Object.assign(Object.assign({},this.options),a))})}getObjectDataUrl(a){return ee(this,void 0,void 0,function*(){return yield(0,V.getObjectDataUrl)(Object.assign(Object.assign({},this.options),a))})}getObjectBinary(a){return ee(this,void 0,void 0,function*(){return yield(0,V.getObjectBinary)(Object.assign(Object.assign({},this.options),a))})}deleteObject(a){return ee(this,void 0,void 0,function*(){return yield(0,V.deleteObject)(Object.assign(Object.assign({},this.options),a))})}objectExists(a){return ee(this,void 0,void 0,function*(){return yield(0,V.objectExists)(Object.assign(Object.assign({},this.options),a))})}getObjectMetadata(a){return ee(this,void 0,void 0,function*(){return yield(0,V.getObjectMetadata)(Object.assign(Object.assign({},this.options),a))})}getObjectEtag(a){return ee(this,void 0,void 0,function*(){return yield(0,V.getObjectEtag)(Object.assign(Object.assign({},this.options),a))})}getTextFile(a){return ee(this,void 0,void 0,function*(){return yield(0,V.getTextFile)(Object.assign(Object.assign({},this.options),a))})}getPresignedUrl(a){return ee(this,void 0,void 0,function*(){return yield(0,V.getPresignedUrl)(Object.assign(Object.assign({},this.options),a))})}};Ce.PicoS3=ji});var Us=j(Ns=>{"use strict";Object.defineProperty(Ns,"__esModule",{value:!0})});var Is=j(ae=>{"use strict";var Vc=ae&&ae.__createBinding||(Object.create?function(e,a,i,n){n===void 0&&(n=i),Object.defineProperty(e,n,{enumerable:!0,get:function(){return a[i]}})}:function(e,a,i,n){n===void 0&&(n=i),e[n]=a[i]}),Me=ae&&ae.__exportStar||function(e,a){for(var i in e)i!=="default"&&!Object.prototype.hasOwnProperty.call(a,i)&&Vc(a,e,i)};Object.defineProperty(ae,"__esModule",{value:!0});Me(Bs(),ae);Me(_i(),ae);Me(Us(),ae);Me(gi(),ae);Me(xa(),ae)});var $s=Xs(Is(),1),va=(e,a)=>Object.keys(a).every(i=>e[i]===a[i]),Gc=()=>typeof crypto<"u"&&crypto.randomUUID?crypto.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(e){var a=Math.random()*16|0,i=e==="x"?a:a&3|8;return i.toString(16)}),ki=class{constructor(a,i){this._colName=a,this._s3=i}async _loadData(){try{let a=await this._s3.getTextFile({path:`${this._colName}.json`});return JSON.parse(a)}catch(a){if(a instanceof FileNotFoundError)return[];throw a}}async _saveData(a){let i=`${this._colName}.json`;return this._s3.upload({path:i,file:JSON.stringify(a)})}async insert(a){Array.isArray(a)||(a=[a]);let i=await this._loadData();for(let n of a){if(typeof n!="object"||n===null)throw new Error("Invalid input: input must be an object or an array of objects");n._id=n._id||Gc(),i.push(n)}return await this._saveData(i),a.length===1?a[0]:a}async find(a={},i={}){let n=await this._loadData(),s=parseInt(i.skip,10)||0,t=parseInt(i.limit,10)?s+parseInt(i.limit,10):void 0;return n.filter(c=>va(c,a)).slice(s,t)}async findOne(a={}){return(await this.find(a))[0]||null}async update(a={},i={}){let n=await this._loadData(),s=0;for(let t=0;t0&&await this._saveData(n),s}async updateOne(a={},i={}){let n=await this._loadData(),s=n.findIndex(t=>va(t,a));return s!==-1?(Object.assign(n[s],i),await this._saveData(n),1):0}async delete(a={}){let i=await this._loadData(),n=i.length,s=i.filter(t=>!va(t,a));return await this._saveData(s),n-s.length}async count(a={}){return(await this.find(a)).length}async remove(){let i=(await this._loadData()).length;return await this._saveData([]),i}},Ei=class{constructor(a){this._s3=new $s.default(a)}collection(a){return new ki(a,this._s3)}async listCollections(){return(await this._s3.listObjects()).filter(n=>n.key.endsWith(".json")).map(n=>n.key.split("/")[0])}},Ap=Ei;export{Ap as default}; -/*! Bundled license information: +// node_modules/ultralight-s3/lib/index.min.js +var Q = crypto.createHmac || (await import("node:crypto")).createHmac; +var Y = crypto.createHash || (await import("node:crypto")).createHash; +typeof Q > "u" && typeof Y > "u" && console.error("ultralight-S3 Module: Crypto functions are not available, please report the issue with necessary description: https://github.com/sentienhq/ultralight-s3/issues"); +var K = "AWS4-HMAC-SHA256"; +var C = "aws4_request"; +var P = "s3"; +var W = "2"; +var _ = "UNSIGNED-PAYLOAD"; +var X = "application/octet-stream"; +var L = "application/xml"; +var S = "application/json"; +var V = ["accessKeyId", "secretAccessKey", "sessionToken", "password"]; +var M = 5 * 1024 * 1024; +var y = "x-amz-content-sha256"; +var Z = "x-amz-date"; +var J = "host"; +var k = "Authorization"; +var w = "Content-Type"; +var T = "Content-Length"; +var j = "etag"; +var B = "last-modified"; +var c = "ultralight-s3 Module: "; +var ee = `${c}accessKeyId must be a non-empty string`; +var te = `${c}secretAccessKey must be a non-empty string`; +var re = `${c}endpoint must be a non-empty string`; +var se = `${c}bucketName must be a non-empty string`; +var h = `${c}key must be a non-empty string`; +var $ = `${c}uploadId must be a non-empty string`; +var z = `${c}parts must be a non-empty array`; +var G = `${c}Each part must have a partNumber (number) and ETag (string)`; +var I = `${c}data must be a Buffer or string`; +var U = `${c}path must be a string`; +var q = `${c}prefix must be a string`; +var F = `${c}maxKeys must be a positive integer`; +var oe = { contents: true }; +var ne = (m) => `%${m.charCodeAt(0).toString(16).toUpperCase()}`; +var O = (m) => encodeURIComponent(m).replace(/[!'()*]/g, ne); +var f = (m) => O(m).replace(/%2F/g, "/"); +var x = class { + constructor({ accessKeyId: e, secretAccessKey: t, endpoint: r, bucketName: s, region: n = "auto", maxRequestSizeInBytes: i = M, requestAbortTimeout: a = void 0, logger: u = void 0 }) { + this.getBucketName = () => this.bucketName, this.setBucketName = (o) => { + this.bucketName = o; + }, this.getRegion = () => this.region, this.setRegion = (o) => { + this.region = o; + }, this.getEndpoint = () => this.endpoint, this.setEndpoint = (o) => { + this.endpoint = o; + }, this.getMaxRequestSizeInBytes = () => this.maxRequestSizeInBytes, this.setMaxRequestSizeInBytes = (o) => { + this.maxRequestSizeInBytes = o; + }, this.getProps = () => ({ accessKeyId: this.accessKeyId, secretAccessKey: this.secretAccessKey, region: this.region, bucket: this.bucketName, endpoint: this.endpoint, maxRequestSizeInBytes: this.maxRequestSizeInBytes, requestAbortTimeout: this.requestAbortTimeout, logger: this.logger }), this.setProps = (o) => { + this._validateConstructorParams(o.accessKeyId, o.secretAccessKey, o.bucketName, o.endpoint), this.accessKeyId = o.accessKeyId, this.secretAccessKey = o.secretAccessKey, this.region = o.region || "auto", this.bucketName = o.bucketName, this.endpoint = o.endpoint, this.maxRequestSizeInBytes = o.maxRequestSizeInBytes || M, this.requestAbortTimeout = o.requestAbortTimeout, this.logger = o.logger; + }, this._validateConstructorParams(e, t, r, s), this.accessKeyId = e, this.secretAccessKey = t, this.endpoint = r, this.bucketName = s, this.region = n, this.maxRequestSizeInBytes = i, this.requestAbortTimeout = a, this.logger = u; + } + _validateConstructorParams(e, t, r, s) { + if (typeof e != "string" || e.trim().length === 0) throw new TypeError(ee); + if (typeof t != "string" || t.trim().length === 0) throw new TypeError(te); + if (typeof r != "string" || r.trim().length === 0) throw new TypeError(re); + if (typeof s != "string" || s.trim().length === 0) throw new TypeError(se); + } + _log(e, t, r = {}) { + if (this.logger && typeof this.logger[e] == "function") { + let s = (a) => typeof a != "object" || a === null ? a : Object.keys(a).reduce((u, o) => (V.includes(o.toLowerCase()) ? u[o] = "[REDACTED]" : typeof a[o] == "object" && a[o] !== null ? u[o] = s(a[o]) : u[o] = a[o], u), Array.isArray(a) ? [] : {}), n = s(r), i = { timestamp: (/* @__PURE__ */ new Date()).toISOString(), level: e, message: t, ...n, context: s({ bucketName: this.bucketName, region: this.region, endpoint: this.endpoint, accessKeyId: this.accessKeyId ? `${this.accessKeyId.substring(0, 4)}...` : void 0 }) }; + this.logger[e](i); + } + } + async getContentLength(e) { + if (typeof e != "string" || e.trim().length === 0) throw this._log("error", h), new TypeError(h); + let t = { [y]: _ }, r = f(e), { url: s, headers: n } = await this._sign("HEAD", r, {}, t, ""), a = (await this._sendRequest(s, "HEAD", n)).headers.get(T); + return a ? parseInt(a, 10) : 0; + } + async bucketExists() { + let e = { [y]: _ }, { url: t, headers: r } = await this._sign("HEAD", "", {}, e, ""), s = await this._sendRequest(t, "HEAD", r); + return !!(s.ok && s.status === 200); + } + async fileExists(e) { + if (typeof e != "string" || e.trim().length === 0) throw this._log("error", h), new TypeError(h); + let t = { [y]: _ }, r = f(e), { url: s, headers: n } = await this._sign("HEAD", r, {}, t, ""); + try { + let i = await fetch(s, { method: "HEAD", headers: n }); + return i.ok && i.status === 200 ? true : (i.status === 404 || this._handleErrorResponse(i), false); + } catch (i) { + let a = i instanceof Error ? i.message : String(i); + throw this._log("error", `${c}Failed to check if file exists: ${a}`), new Error(`${c}Failed to check if file exists: ${a}`); + } + } + async _sign(e, t, r, s, n) { + let i = (/* @__PURE__ */ new Date()).toISOString().replace(/[:-]|\.\d{3}/g, ""), a = typeof t == "string" && t.length > 0 ? new URL(t, this.endpoint) : new URL(this.endpoint); + a.pathname = `/${encodeURI(this.bucketName)}${a.pathname}`, s[y] = n ? await N(n) : _, s[Z] = i, s[J] = a.host; + let u = this._buildCanonicalHeaders(s), o = Object.keys(s).map((p) => p.toLowerCase()).sort().join(";"), E = await this._buildCanonicalRequest(e, a, r, u, o, n), l = await this._buildStringToSign(i, E), g = await this._calculateSignature(i, l), d = this._buildAuthorizationHeader(i, o, g); + return s[k] = d, { url: a.toString(), headers: s }; + } + _buildCanonicalHeaders(e) { + return Object.entries(e).map(([t, r]) => `${t.toLowerCase()}:${String(r).trim()}`).sort().join(` +`); + } + async _buildCanonicalRequest(e, t, r, s, n, i) { + return [e, t.pathname, this._buildCanonicalQueryString(r), `${s} +`, n, i ? await N(i) : _].join(` +`); + } + async _buildStringToSign(e, t) { + let r = [e.slice(0, 8), this.region, P, C].join("/"); + return [K, e, r, await N(t)].join(` +`); + } + async _calculateSignature(e, t) { + let r = await this._getSignatureKey(e.slice(0, 8)); + return D(r, t, "hex"); + } + _buildAuthorizationHeader(e, t, r) { + let s = [e.slice(0, 8), this.region, P, C].join("/"); + return [`${K} Credential=${this.accessKeyId}/${s}`, `SignedHeaders=${t}`, `Signature=${r}`].join(", "); + } + async list(e = "/", t = "", r = 1e3, s = "GET", n = {}) { + if (typeof e != "string" || e.trim().length === 0) throw this._log("error", U), new TypeError(U); + if (typeof t != "string") throw this._log("error", q), new TypeError(q); + if (!Number.isInteger(r) || r <= 0) throw this._log("error", F), new TypeError(F); + if (s !== "GET" && s !== "HEAD") throw this._log("error", `${c}method must be either GET or HEAD`), new TypeError(`${c}method must be either GET or HEAD`); + if (typeof n != "object") throw this._log("error", `${c}opts must be an object`), new TypeError(`${c}opts must be an object`); + this._log("info", `Listing objects in ${e}`); + let i = { "list-type": W, "max-keys": String(r), ...n }; + t.length > 0 && (i.prefix = t); + let a = { [w]: S, [y]: _ }, u = e === "/" ? e : O(e), { url: o, headers: E } = await this._sign("GET", u, i, a, ""), l = `${o}?${new URLSearchParams(i)}`, g = await this._sendRequest(l, "GET", E), d = await g.text(); + if (s === "HEAD") { + let R = g.headers.get(T), A = g.headers.get(B), v = g.headers.get(j); + return { size: R ? +R : void 0, mtime: A ? new Date(A) : void 0, ETag: v || void 0 }; + } + let p = b(d), H = p.listBucketResult || p.error || p; + return H.contents || H; + } + async listMultiPartUploads(e = "/", t = "", r = "GET", s = {}) { + var n, i, a; + if (typeof e != "string" || e.trim().length === 0) throw this._log("error", U), new TypeError(U); + if (typeof t != "string") throw this._log("error", q), new TypeError(q); + if (r !== "GET" && r !== "HEAD") throw this._log("error", `${c}method must be either GET or HEAD`), new TypeError(`${c}method must be either GET or HEAD`); + if (typeof s != "object") throw this._log("error", `${c}opts must be an object`), new TypeError(`${c}opts must be an object`); + this._log("info", `Listing multipart uploads in ${e}`); + let u = { uploads: "", ...s }, o = { [w]: S, [y]: _ }, E = e === "/" ? e : O(e), { url: l, headers: g } = await this._sign("GET", E, u, o, ""), d = `${l}?${new URLSearchParams(u)}`, p = await this._sendRequest(d, "GET", g), H = await p.text(); + if (r === "HEAD") return { size: +((n = p.headers.get(T)) !== null && n !== void 0 ? n : "0"), mtime: new Date((i = p.headers.get(B)) !== null && i !== void 0 ? i : ""), ETag: (a = p.headers.get(j)) !== null && a !== void 0 ? a : "" }; + let R = b(H), A = R.listMultipartUploadsResult || R.error || R; + return A.uploads || A; + } + async get(e, t = {}) { + if (typeof e != "string" || e.trim().length === 0) throw this._log("error", h), new TypeError(h); + let r = { [w]: S, [y]: _ }; + this._log("info", `Getting object ${e}`); + let s = f(e), { url: n, headers: i } = await this._sign("GET", s, t, r, ""); + return (await this._sendRequest(n, "GET", i)).text(); + } + async getResponse(e, t = true, r = 0, s = this.maxRequestSizeInBytes, n = {}) { + let i = n, a = { [w]: S, [y]: _, ...t ? {} : { range: `bytes=${r}-${s - 1}` } }, u = f(e), { url: o, headers: E } = await this._sign("GET", u, i, a, ""), l = `${o}?${new URLSearchParams(i)}`; + return this._sendRequest(l, "GET", E); + } + async put(e, t) { + if (typeof e != "string" || e.trim().length === 0) throw this._log("error", h), new TypeError(h); + if (!(t instanceof Buffer || typeof t == "string")) throw this._log("error", I), new TypeError(I); + this._log("info", `Uploading object ${e}`); + let r = typeof t == "string" ? Buffer.byteLength(t) : t.length, s = { [T]: r }, n = f(e), { url: i, headers: a } = await this._sign("PUT", n, {}, s, t); + return await this._sendRequest(i, "PUT", a, t); + } + async getMultipartUploadId(e, t = X) { + if (typeof e != "string" || e.trim().length === 0) throw this._log("error", h), new TypeError(h); + if (typeof t != "string") throw this._log("error", `${c}fileType must be a string`), new TypeError(`${c}fileType must be a string`); + this._log("info", `Initiating multipart upload for object ${e}`); + let r = { uploads: "" }, s = { [w]: t, [y]: _ }, n = f(e), { url: i, headers: a } = await this._sign("POST", n, r, s, ""), u = `${i}?${new URLSearchParams(r)}`, E = await (await this._sendRequest(u, "POST", a)).text(), l = b(E); + if (typeof l == "object" && l !== null && "error" in l && typeof l.error == "object" && l.error !== null && "message" in l.error) { + let g = String(l.error.message); + throw this._log("error", `${c}Failed to abort multipart upload: ${g}`), new Error(`${c}Failed to abort multipart upload: ${g}`); + } + if (typeof l == "object" && l !== null) { + if (!l.initiateMultipartUploadResult || !l.initiateMultipartUploadResult.uploadId) throw this._log("error", `${c}Failed to create multipart upload: no uploadId in response`), new Error(`${c}Failed to create multipart upload: Missing upload ID in response`); + return l.initiateMultipartUploadResult.uploadId; + } else throw this._log("error", `${c}Failed to create multipart upload: unexpected response format`), new Error(`${c}Failed to create multipart upload: Unexpected response format`); + } + async uploadPart(e, t, r, s, n = {}) { + this._validateUploadPartParams(e, t, r, s, n); + let i = { uploadId: r, partNumber: s, ...n }, a = { [T]: t.length }, u = f(e), { url: o, headers: E } = await this._sign("PUT", u, i, a, t), l = `${o}?${new URLSearchParams(i)}`, d = (await this._sendRequest(l, "PUT", E, t)).headers.get("etag") || ""; + return { partNumber: s, ETag: d }; + } + _validateUploadPartParams(e, t, r, s, n) { + if (typeof e != "string" || e.trim().length === 0) throw this._log("error", h), new TypeError(h); + if (!(t instanceof Buffer || typeof t == "string")) throw this._log("error", I), new TypeError(I); + if (typeof r != "string" || r.trim().length === 0) throw this._log("error", $), new TypeError($); + if (!Number.isInteger(s) || s <= 0) throw this._log("error", `${c}partNumber must be a positive integer`), new TypeError(`${c}partNumber must be a positive integer`); + if (typeof n != "object") throw this._log("error", `${c}opts must be an object`), new TypeError(`${c}opts must be an object`); + } + async completeMultipartUpload(e, t, r) { + if (typeof e != "string" || e.trim().length === 0) throw this._log("error", h), new TypeError(h); + if (typeof t != "string" || t.trim().length === 0) throw this._log("error", $), new TypeError($); + if (!Array.isArray(r) || r.length === 0) throw this._log("error", z), new TypeError(z); + if (!r.every((p) => typeof p.partNumber == "number" && typeof p.ETag == "string")) throw this._log("error", G), new TypeError(G); + this._log("info", `Complete multipart upload ${t} for object ${e}`); + let s = { uploadId: t }, n = this._buildCompleteMultipartUploadXml(r), i = { [w]: L, [T]: Buffer.byteLength(n).toString(), [y]: await N(n) }, a = f(e), { url: u, headers: o } = await this._sign("POST", a, s, i, n), E = `${u}?${new URLSearchParams(s)}`, g = await (await this._sendRequest(E, "POST", o, n)).text(), d = b(g); + if (typeof d == "object" && d !== null && "error" in d && typeof d.error == "object" && d.error !== null && "message" in d.error) { + let p = String(d.error.message); + throw this._log("error", `${c}Failed to abort multipart upload: ${p}`), new Error(`${c}Failed to abort multipart upload: ${p}`); + } + return d.completeMultipartUploadResult; + } + async abortMultipartUpload(e, t) { + if (typeof e != "string" || e.trim().length === 0) throw this._log("error", h), new TypeError(h); + if (typeof t != "string" || t.trim().length === 0) throw this._log("error", $), new TypeError($); + this._log("info", `Aborting multipart upload ${t} for object ${e}`); + let r = { uploadId: t }, s = { [w]: L, [y]: _ }; + try { + let n = f(e), { url: i, headers: a } = await this._sign("DELETE", n, r, s, ""), u = `${i}?${new URLSearchParams(r)}`, o = await this._sendRequest(u, "DELETE", a); + if (o.ok) { + let E = await o.text(), l = b(E); + if (typeof l == "object" && l !== null && "error" in l && typeof l.error == "object" && l.error !== null && "message" in l.error) { + let g = String(l.error.message); + throw this._log("error", `${c}Failed to abort multipart upload: ${g}`), new Error(`${c}Failed to abort multipart upload: ${g}`); + } + return { status: "Aborted", key: e, uploadId: t, response: l }; + } else throw this._log("error", `${c}Abort request failed with status ${o.status}`), new Error(`${c}Abort request failed with status ${o.status}`); + } catch (n) { + let i = n instanceof Error ? n.message : String(n); + throw this._log("error", `${c}Failed to abort multipart upload for key ${e}: ${i}`), new Error(`${c}Failed to abort multipart upload for key ${e}: ${i}`); + } + } + _buildCompleteMultipartUploadXml(e) { + return ` + + ${e.map((t) => ` + + ${t.partNumber} + ${t.ETag} + + `).join("")} + + `; + } + async delete(e) { + if (typeof e != "string" || e.trim().length === 0) throw this._log("error", h), new TypeError(h); + this._log("info", `Deleting object ${e}`); + let t = { [w]: S, [y]: _ }, r = f(e), { url: s, headers: n } = await this._sign("DELETE", r, {}, t, ""); + return (await this._sendRequest(s, "DELETE", n)).text(); + } + async _sendRequest(e, t, r, s) { + this._log("info", `Sending ${t} request to ${e}, headers: ${JSON.stringify(r)}`); + let n = await fetch(e, { method: t, headers: r, body: s, signal: this.requestAbortTimeout !== void 0 ? AbortSignal.timeout(this.requestAbortTimeout) : void 0 }); + return n.ok || await this._handleErrorResponse(n), n; + } + async _handleErrorResponse(e) { + let t = await e.text(), r = e.headers.get("x-amz-error-code") || "Unknown", s = e.headers.get("x-amz-error-message") || e.statusText; + throw this._log("error", `${c}Request failed with status ${e.status}: ${r} - ${s},err body: ${t}`), new Error(`${c}Request failed with status ${e.status}: ${r} - ${s}, err body: ${t}`); + } + _buildCanonicalQueryString(e) { + return Object.keys(e).length < 1 ? "" : Object.keys(e).sort().map((t) => `${encodeURIComponent(t)}=${encodeURIComponent(e[t])}`).join("&"); + } + async _getSignatureKey(e) { + let t = await D(`AWS4${this.secretAccessKey}`, e), r = await D(t, this.region), s = await D(r, P); + return D(s, C); + } +}; +var N = async (m) => { + let e = Y("sha256"); + return e.update(m), e.digest("hex"); +}; +var D = async (m, e, t) => { + let r = Q("sha256", m); + return r.update(e), r.digest(t); +}; +var b = (m) => { + let e = (n) => n.replace(/"/g, '"').replace(/'/g, "'").replace(/</g, "<").replace(/>/g, ">").replace(/&/g, "&"), t = {}, r = /<(\w)([-\w]+)(?:\/|[^>]*>((?:(?!<\1)[\s\S])*)<\/\1\2)>/gm, s; + for (; s = r.exec(m); ) { + let [, n, i, a] = s, u = n.toLowerCase() + i, o = a != null ? b(a) : true; + typeof o == "string" ? t[u] = e(o) : Array.isArray(t[u]) ? t[u].push(o) : t[u] = t[u] != null ? [t[u], o] : oe[u] ? [o] : o; + } + return Object.keys(t).length ? t : e(m); +}; -mime-db/index.js: - (*! - * mime-db - * Copyright(c) 2014 Jonathan Ong - * Copyright(c) 2015-2022 Douglas Christopher Wilson - * MIT Licensed - *) +// src/lowstorage.js +import avro from "avro-js"; -mime-types/index.js: - (*! - * mime-types - * Copyright(c) 2014 Jonathan Ong - * Copyright(c) 2015 Douglas Christopher Wilson - * MIT Licensed - *) -*/ +// src/helpers.js +import { randomUUID } from "node:crypto"; +var matchesQuery = (document, query) => { + return Object.keys(query).every((key) => document[key] === query[key]); +}; +var generateUUID = async () => { + let _randomUUID = randomUUID || (await import("node:crypto")).randomUUID; + if (typeof _randomUUID !== "undefined" && typeof _randomUUID === "function") { + return _randomUUID(); + } else { + return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function(c2) { + var r = Math.random() * 16 | 0, v = c2 === "x" ? r : r & 3 | 8; + return v.toString(16); + }); + } +}; +var _getAvroType = (value, name = "SubAutoGenerated") => { + switch (typeof value) { + case "string": + if (_isUUID(value)) { + return { + type: "string", + name: "_id", + size: 16, + logicalType: "UUID" + }; + } + return "string"; + case "number": + return Number.isInteger(value) ? "int" : "float"; + case "boolean": + return "boolean"; + case "object": + if (value === null) return "null"; + if (Array.isArray(value)) return { type: "array", items: _getAvroType(value[0]) }; + return inferAvroType(value, name); + default: + return "string"; + } +}; +var inferAvroType = (data, typeName = "AutoGenerated") => { + if (Array.isArray(data)) { + data = data[0]; + } + const fields = Object.entries(data).map(([name, value]) => { + return { name, type: _getAvroType(value, `${typeName}.${name}`) }; + }); + return { + type: "record", + name: typeName, + fields + }; +}; +var _isUUID = (str) => { + const uuidV4Regex = /^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i; + return uuidV4Regex.test(str); +}; + +// src/lowstorage.js +var MODULE_NAME = "lowstorage"; +var PROJECT_DIR_PREFIX = "lowstorage/"; +var SCHEMA_SUFFIX = ".avro"; +var CHUNG_1MB = 1024 * 1024; +var CHUNG_5MB = 5 * CHUNG_1MB; +var lowstorage = class { + constructor(options = { + accessKeyId: void 0, + secretAccessKey: void 0, + endpoint: void 0, + bucketName: void 0, + region: "auto", + logger: null + }) { + this._checkArgs(options); + this._schemas = /* @__PURE__ */ new Map(); + this._s3 = new x(options); + this._avro = avro; + } + _checkArgs = (args) => { + const requiredFields = ["accessKeyId", "secretAccessKey", "endpoint", "bucketName"]; + for (const field of requiredFields) { + if (!args[field]) { + throw new Error(`${MODULE_NAME}: ${field} is required`); + } + } + }; + async listCollections() { + const listed = await this._s3.list(PROJECT_DIR_PREFIX, "", 1e3); + return listed.map((entry) => entry.key.slice(PROJECT_DIR_PREFIX.length, -SCHEMA_SUFFIX.length)); + } + async createCollection(colName, schema = void 0) { + try { + if (colName === void 0 || colName.trim() === "" || colName === null) { + throw new Error(`${MODULE_NAME}: Collection name is required`); + } + if (await this.collectionExists(colName)) { + throw new Error(`${MODULE_NAME}: Collection ${colName} already exists`); + } + if (schema) { + const avroType = this._avro.parse(schema); + this._schemas.set(colName, avroType); + } + return this.collection(colName, schema); + } catch (error) { + throw new Error(`${MODULE_NAME}: ${error.message}`); + } + } + async removeCollection(colName) { + try { + const exists = await this._s3.fileExists(`${PROJECT_DIR_PREFIX}${colName}${SCHEMA_SUFFIX}`); + if (exists) { + const resp = await this._s3.delete(`${PROJECT_DIR_PREFIX}${colName}${SCHEMA_SUFFIX}`); + if (resp.status === 200) { + return true; + } + return false; + } + return true; + } catch (error) { + throw new Error(`${MODULE_NAME}: ${error.message}`); + } + } + async collectionExists(colName) { + try { + const exists = await this._s3.fileExists(`${PROJECT_DIR_PREFIX}${colName}${SCHEMA_SUFFIX}`); + return exists; + } catch (error) { + if (error.message.includes("Not Found")) { + return false; + } + throw new Error(`${MODULE_NAME}: ${error.message}`); + } + } + async updateCollectionSchema(colName, schema) { + try { + if (colName === void 0 || colName.trim() === "" || colName === null) { + throw new Error(`${MODULE_NAME}: Collection name is required`); + } + const exists = await this.collectionExists(colName); + if (!exists) { + throw new Error(`${MODULE_NAME}: Collection ${colName} does not exist`); + } + if (schema === void 0 || schema === null) { + throw new Error(`${MODULE_NAME}: Schema is required`); + } + const avroType = this._avro.parse(schema); + this._schemas.set(colName, avroType); + const resp = await this._s3.put(`${PROJECT_DIR_PREFIX}${colName}${SCHEMA_SUFFIX}`, JSON.stringify(schema)); + if (resp.status === 200) { + return true; + } else { + throw new Error(`${MODULE_NAME}: Failed to update schema for collection ${colName}`); + } + } catch (error) { + throw new Error(`${MODULE_NAME}: ${error.message}`); + } + } + async collection(colName, schema = void 0) { + try { + if (colName === void 0 || colName.trim() === "" || colName === null) { + throw new Error(`${MODULE_NAME}: Collection name is required`); + } + if (typeof schema === "undefined") { + if (this._schemas.has(colName)) { + return new Collection(colName, this._s3, this._schemas.get(colName)); + } + const exists = await this._s3.fileExists(`${PROJECT_DIR_PREFIX}${colName}${SCHEMA_SUFFIX}`); + if (exists) { + const schemaContent = await this._s3.get(`${PROJECT_DIR_PREFIX}${colName}${SCHEMA_SUFFIX}`); + const avroType = this._avro.parse(schemaContent); + this._schemas.set(colName, avroType); + return new Collection(colName, this._s3, avroType); + } + return new Collection(colName, this._s3, void 0); + } + return new Collection(colName, this._s3, this._avro.parse(schema)); + } catch (error) { + throw new Error(`${MODULE_NAME}: ${error.message}`); + } + } +}; +var Collection = class { + constructor(colName, s3, avroType = void 0) { + this._colName = colName; + this._s3 = s3; + this._avro = avro; + this._avroType = avroType; + } + async insert(doc, schema = void 0) { + try { + if (doc === void 0 || doc === null) { + throw new Error(`${MODULE_NAME}: Document is required for insert`); + } + if (typeof doc !== "object" && !Array.isArray(doc)) { + throw new Error(`${MODULE_NAME}: Document must be an object or an array`); + } + const items = !Array.isArray(doc) ? [doc] : doc; + const avroType = !!schema ? this._avro.parse(schema) : this._avroType || this._avro.parse(inferAvroType(doc)); + if (avroType === void 0) { + throw new Error(`${MODULE_NAME}: Schema is required - Pass a schema to the insert method`); + } + this._avroType = avroType; + const wrapperType = this._avro.parse({ type: "array", items: this._avroType }); + const bufferData = await this._loadDataBuffer(); + const data = bufferData.length > 0 ? wrapperType.fromBuffer(bufferData) : []; + for (let item of items) { + if (typeof item !== "object" || item === null) { + throw new Error("Invalid input: input must be an object or an array of objects"); + } + item._id = item._id || await generateUUID(); + const valid = this._avroType.isValid(item); + if (!valid) { + throw new Error(`${MODULE_NAME}: Invalid document or schema`); + } + data.push(item); + } + const resp = await this._saveDataBuffer(wrapperType.toBuffer(data)); + if (resp) { + return items; + } else { + throw new Error(`${MODULE_NAME}: Failed to insert document`); + } + } catch (error) { + throw new Error(`${MODULE_NAME}: ${error.message}`); + } + } + async _loadDataBuffer() { + try { + const KEY = `${PROJECT_DIR_PREFIX}${this._colName}${SCHEMA_SUFFIX}`; + const CHUNK_SIZE = this._s3.getMaxRequestSizeInBytes() || CHUNG_5MB; + let firstData = await this._s3.get(KEY); + if (firstData.length < CHUNK_SIZE) { + return Buffer.from(firstData, "utf8"); + } + let offset = CHUNK_SIZE; + let bufferArr = [Buffer.from(firstData, "utf8")]; + let repeat = true; + while (repeat) { + const nextDataResponse = await this._s3.getResponse(KEY, false, offset, offset + CHUNK_SIZE); + const nextDataBody = await nextDataResponse.text(); + bufferArr.push(Buffer.from(nextDataBody, "utf8")); + offset += CHUNG; + const contentLength = nextDataResponse.headers.get("content-length") || nextDataBody.length; + if (contentLength < CHUNK_SIZE) { + repeat = false; + } + } + return Buffer.concat(bufferArr); + } catch (error) { + if (error.toString().indexOf("status 404: Unknown - Not Found") > -1) { + return Buffer.from(""); + } + throw new Error(`${MODULE_NAME}: ${error.message}`); + } + } + async _saveDataBuffer(data) { + try { + const KEY = `${PROJECT_DIR_PREFIX}${this._colName}${SCHEMA_SUFFIX}`; + const resp = await this._s3.put(KEY, data); + if (resp.status === 200) { + return true; + } else { + throw new Error(`${MODULE_NAME}: Failed to save data`); + } + } catch (error) { + throw new Error(`${MODULE_NAME}: ${error.message}`); + } + } + async find(query = {}, options = {}) { + try { + const bufferData = await this._loadDataBuffer(); + const wrapperType = this._avro.parse({ type: "array", items: this._avroType }); + const data = bufferData.length > 0 ? wrapperType.fromBuffer(bufferData) : []; + const start = parseInt(options.skip, 10) || 0; + const end = parseInt(options.limit, 10) ? start + parseInt(options.limit, 10) : void 0; + const filteredData = data.filter((doc) => matchesQuery(doc, query)).slice(start, end); + return filteredData; + } catch (error) { + throw new Error(`${MODULE_NAME}: ${error.message}`); + } + } + async findOne(query = {}) { + return (await this.find(query))[0] || null; + } + async update(query = {}, update = {}) { + try { + const bufferData = await this._loadDataBuffer(); + const wrapperType = this._avro.parse({ type: "array", items: this._avroType }); + const data = bufferData.length > 0 ? wrapperType.fromBuffer(bufferData) : []; + let updatedCount = 0; + for (let i = 0; i < data.length; i++) { + if (matchesQuery(data[i], query)) { + Object.assign(data[i], update); + updatedCount++; + } + } + if (updatedCount > 0) { + const resp = await this._saveDataBuffer(wrapperType.toBuffer(data)); + if (resp) { + return updatedCount; + } + } + return 0; + } catch (error) { + throw new Error(`${MODULE_NAME}: ${error.message}`); + } + } + async updateOne(query = {}, update = {}) { + try { + const bufferData = await this._loadDataBuffer(); + const wrapperType = this._avro.parse({ type: "array", items: this._avroType }); + const data = bufferData.length > 0 ? wrapperType.fromBuffer(bufferData) : []; + const docIndex = data.findIndex((doc) => matchesQuery(doc, query)); + if (docIndex !== -1) { + Object.assign(data[docIndex], update); + const resp = await this._saveDataBuffer(wrapperType.toBuffer(data)); + if (resp) { + return 1; + } + } + return 0; + } catch (error) { + throw new Error(`${MODULE_NAME}: ${error.message}`); + } + } + async delete(query = {}) { + try { + const bufferData = await this._loadDataBuffer(); + const wrapperType = this._avro.parse({ type: "array", items: this._avroType }); + const data = bufferData.length > 0 ? wrapperType.fromBuffer(bufferData) : []; + const initialLength = data.length; + const newData = data.filter((doc) => !matchesQuery(doc, query)); + const resp = await this._saveDataBuffer(wrapperType.toBuffer(newData)); + if (resp) { + return initialLength - newData.length; + } + return 0; + } catch (error) { + throw new Error(`${MODULE_NAME}: ${error.message}`); + } + } + async count(query = {}) { + try { + if (query === void 0 || query === null) { + throw new Error(`${MODULE_NAME}: Query is required`); + } + if (Object.keys(query).length === 0) { + const bufferData = await this._loadDataBuffer(); + const wrapperType = this._avro.parse({ type: "array", items: this._avroType }); + const data = bufferData.length > 0 ? wrapperType.fromBuffer(bufferData) : []; + return data.length || null; + } + return (await this.find(query)).length; + } catch (error) { + throw new Error(`${MODULE_NAME}: ${error.message}`); + } + } +}; +var lowstorage_default = lowstorage; +export { + lowstorage_default as default, + lowstorage +}; //# sourceMappingURL=lowstorage.js.map diff --git a/lib/lowstorage.js.map b/lib/lowstorage.js.map index b85bf66..4bc7682 100644 --- a/lib/lowstorage.js.map +++ b/lib/lowstorage.js.map @@ -1,7 +1,7 @@ { "version": 3, - "sources": ["../node_modules/delayed-stream/lib/delayed_stream.js", "../node_modules/combined-stream/lib/combined_stream.js", "../node_modules/mime-db/db.json", "../node_modules/mime-db/index.js", "../node_modules/mime-types/index.js", "../node_modules/asynckit/lib/defer.js", "../node_modules/asynckit/lib/async.js", "../node_modules/asynckit/lib/abort.js", "../node_modules/asynckit/lib/iterate.js", "../node_modules/asynckit/lib/state.js", "../node_modules/asynckit/lib/terminator.js", "../node_modules/asynckit/parallel.js", "../node_modules/asynckit/serialOrdered.js", "../node_modules/asynckit/serial.js", "../node_modules/asynckit/index.js", "../node_modules/form-data/lib/populate.js", "../node_modules/form-data/lib/form_data.js", "../node_modules/proxy-from-env/index.js", "../node_modules/ms/index.js", "../node_modules/debug/src/common.js", "../node_modules/debug/src/browser.js", "../node_modules/has-flag/index.js", "../node_modules/supports-color/index.js", "../node_modules/debug/src/node.js", "../node_modules/debug/src/index.js", "../node_modules/follow-redirects/debug.js", "../node_modules/follow-redirects/index.js", "../node_modules/axios/lib/helpers/bind.js", "../node_modules/axios/lib/utils.js", "../node_modules/axios/lib/core/AxiosError.js", "../node_modules/axios/lib/helpers/toFormData.js", "../node_modules/axios/lib/helpers/AxiosURLSearchParams.js", "../node_modules/axios/lib/helpers/buildURL.js", "../node_modules/axios/lib/core/InterceptorManager.js", "../node_modules/axios/lib/defaults/transitional.js", "../node_modules/axios/lib/platform/node/classes/URLSearchParams.js", "../node_modules/axios/lib/platform/node/index.js", "../node_modules/axios/lib/platform/common/utils.js", "../node_modules/axios/lib/platform/index.js", "../node_modules/axios/lib/helpers/toURLEncodedForm.js", "../node_modules/axios/lib/helpers/formDataToJSON.js", "../node_modules/axios/lib/defaults/index.js", "../node_modules/axios/lib/helpers/parseHeaders.js", "../node_modules/axios/lib/core/AxiosHeaders.js", "../node_modules/axios/lib/core/transformData.js", "../node_modules/axios/lib/cancel/isCancel.js", "../node_modules/axios/lib/cancel/CanceledError.js", "../node_modules/axios/lib/core/settle.js", "../node_modules/axios/lib/helpers/isAbsoluteURL.js", "../node_modules/axios/lib/helpers/combineURLs.js", "../node_modules/axios/lib/core/buildFullPath.js", "../node_modules/axios/lib/env/data.js", "../node_modules/axios/lib/helpers/parseProtocol.js", "../node_modules/axios/lib/helpers/fromDataURI.js", "../node_modules/axios/lib/helpers/throttle.js", "../node_modules/axios/lib/helpers/speedometer.js", "../node_modules/axios/lib/helpers/AxiosTransformStream.js", "../node_modules/axios/lib/helpers/readBlob.js", "../node_modules/axios/lib/helpers/formDataToStream.js", "../node_modules/axios/lib/helpers/ZlibHeaderTransformStream.js", "../node_modules/axios/lib/helpers/callbackify.js", "../node_modules/axios/lib/adapters/http.js", "../node_modules/axios/lib/helpers/progressEventReducer.js", "../node_modules/axios/lib/helpers/isURLSameOrigin.js", "../node_modules/axios/lib/helpers/cookies.js", "../node_modules/axios/lib/core/mergeConfig.js", "../node_modules/axios/lib/helpers/resolveConfig.js", "../node_modules/axios/lib/adapters/xhr.js", "../node_modules/axios/lib/helpers/composeSignals.js", "../node_modules/axios/lib/helpers/trackStream.js", "../node_modules/axios/lib/adapters/fetch.js", "../node_modules/axios/lib/adapters/adapters.js", "../node_modules/axios/lib/core/dispatchRequest.js", "../node_modules/axios/lib/helpers/validator.js", "../node_modules/axios/lib/core/Axios.js", "../node_modules/axios/lib/cancel/CancelToken.js", "../node_modules/axios/lib/helpers/spread.js", "../node_modules/axios/lib/helpers/isAxiosError.js", "../node_modules/axios/lib/helpers/HttpStatusCode.js", "../node_modules/axios/lib/axios.js", "../node_modules/aws4/lru.js", "../node_modules/aws4/aws4.js", "../node_modules/@brillout/import/dist/index.js", "../node_modules/pico-s3/dist/utils.js", "../node_modules/pico-s3/dist/providers.js", "../node_modules/pico-s3/dist/api.js", "../node_modules/pico-s3/dist/client.js", "../node_modules/pico-s3/dist/types.js", "../node_modules/pico-s3/dist/index.js", "../src/lowstorage.js"], - "sourcesContent": ["var Stream = require('stream').Stream;\nvar util = require('util');\n\nmodule.exports = DelayedStream;\nfunction DelayedStream() {\n this.source = null;\n this.dataSize = 0;\n this.maxDataSize = 1024 * 1024;\n this.pauseStream = true;\n\n this._maxDataSizeExceeded = false;\n this._released = false;\n this._bufferedEvents = [];\n}\nutil.inherits(DelayedStream, Stream);\n\nDelayedStream.create = function(source, options) {\n var delayedStream = new this();\n\n options = options || {};\n for (var option in options) {\n delayedStream[option] = options[option];\n }\n\n delayedStream.source = source;\n\n var realEmit = source.emit;\n source.emit = function() {\n delayedStream._handleEmit(arguments);\n return realEmit.apply(source, arguments);\n };\n\n source.on('error', function() {});\n if (delayedStream.pauseStream) {\n source.pause();\n }\n\n return delayedStream;\n};\n\nObject.defineProperty(DelayedStream.prototype, 'readable', {\n configurable: true,\n enumerable: true,\n get: function() {\n return this.source.readable;\n }\n});\n\nDelayedStream.prototype.setEncoding = function() {\n return this.source.setEncoding.apply(this.source, arguments);\n};\n\nDelayedStream.prototype.resume = function() {\n if (!this._released) {\n this.release();\n }\n\n this.source.resume();\n};\n\nDelayedStream.prototype.pause = function() {\n this.source.pause();\n};\n\nDelayedStream.prototype.release = function() {\n this._released = true;\n\n this._bufferedEvents.forEach(function(args) {\n this.emit.apply(this, args);\n }.bind(this));\n this._bufferedEvents = [];\n};\n\nDelayedStream.prototype.pipe = function() {\n var r = Stream.prototype.pipe.apply(this, arguments);\n this.resume();\n return r;\n};\n\nDelayedStream.prototype._handleEmit = function(args) {\n if (this._released) {\n this.emit.apply(this, args);\n return;\n }\n\n if (args[0] === 'data') {\n this.dataSize += args[1].length;\n this._checkIfMaxDataSizeExceeded();\n }\n\n this._bufferedEvents.push(args);\n};\n\nDelayedStream.prototype._checkIfMaxDataSizeExceeded = function() {\n if (this._maxDataSizeExceeded) {\n return;\n }\n\n if (this.dataSize <= this.maxDataSize) {\n return;\n }\n\n this._maxDataSizeExceeded = true;\n var message =\n 'DelayedStream#maxDataSize of ' + this.maxDataSize + ' bytes exceeded.'\n this.emit('error', new Error(message));\n};\n", "var util = require('util');\nvar Stream = require('stream').Stream;\nvar DelayedStream = require('delayed-stream');\n\nmodule.exports = CombinedStream;\nfunction CombinedStream() {\n this.writable = false;\n this.readable = true;\n this.dataSize = 0;\n this.maxDataSize = 2 * 1024 * 1024;\n this.pauseStreams = true;\n\n this._released = false;\n this._streams = [];\n this._currentStream = null;\n this._insideLoop = false;\n this._pendingNext = false;\n}\nutil.inherits(CombinedStream, Stream);\n\nCombinedStream.create = function(options) {\n var combinedStream = new this();\n\n options = options || {};\n for (var option in options) {\n combinedStream[option] = options[option];\n }\n\n return combinedStream;\n};\n\nCombinedStream.isStreamLike = function(stream) {\n return (typeof stream !== 'function')\n && (typeof stream !== 'string')\n && (typeof stream !== 'boolean')\n && (typeof stream !== 'number')\n && (!Buffer.isBuffer(stream));\n};\n\nCombinedStream.prototype.append = function(stream) {\n var isStreamLike = CombinedStream.isStreamLike(stream);\n\n if (isStreamLike) {\n if (!(stream instanceof DelayedStream)) {\n var newStream = DelayedStream.create(stream, {\n maxDataSize: Infinity,\n pauseStream: this.pauseStreams,\n });\n stream.on('data', this._checkDataSize.bind(this));\n stream = newStream;\n }\n\n this._handleErrors(stream);\n\n if (this.pauseStreams) {\n stream.pause();\n }\n }\n\n this._streams.push(stream);\n return this;\n};\n\nCombinedStream.prototype.pipe = function(dest, options) {\n Stream.prototype.pipe.call(this, dest, options);\n this.resume();\n return dest;\n};\n\nCombinedStream.prototype._getNext = function() {\n this._currentStream = null;\n\n if (this._insideLoop) {\n this._pendingNext = true;\n return; // defer call\n }\n\n this._insideLoop = true;\n try {\n do {\n this._pendingNext = false;\n this._realGetNext();\n } while (this._pendingNext);\n } finally {\n this._insideLoop = false;\n }\n};\n\nCombinedStream.prototype._realGetNext = function() {\n var stream = this._streams.shift();\n\n\n if (typeof stream == 'undefined') {\n this.end();\n return;\n }\n\n if (typeof stream !== 'function') {\n this._pipeNext(stream);\n return;\n }\n\n var getStream = stream;\n getStream(function(stream) {\n var isStreamLike = CombinedStream.isStreamLike(stream);\n if (isStreamLike) {\n stream.on('data', this._checkDataSize.bind(this));\n this._handleErrors(stream);\n }\n\n this._pipeNext(stream);\n }.bind(this));\n};\n\nCombinedStream.prototype._pipeNext = function(stream) {\n this._currentStream = stream;\n\n var isStreamLike = CombinedStream.isStreamLike(stream);\n if (isStreamLike) {\n stream.on('end', this._getNext.bind(this));\n stream.pipe(this, {end: false});\n return;\n }\n\n var value = stream;\n this.write(value);\n this._getNext();\n};\n\nCombinedStream.prototype._handleErrors = function(stream) {\n var self = this;\n stream.on('error', function(err) {\n self._emitError(err);\n });\n};\n\nCombinedStream.prototype.write = function(data) {\n this.emit('data', data);\n};\n\nCombinedStream.prototype.pause = function() {\n if (!this.pauseStreams) {\n return;\n }\n\n if(this.pauseStreams && this._currentStream && typeof(this._currentStream.pause) == 'function') this._currentStream.pause();\n this.emit('pause');\n};\n\nCombinedStream.prototype.resume = function() {\n if (!this._released) {\n this._released = true;\n this.writable = true;\n this._getNext();\n }\n\n if(this.pauseStreams && this._currentStream && typeof(this._currentStream.resume) == 'function') this._currentStream.resume();\n this.emit('resume');\n};\n\nCombinedStream.prototype.end = function() {\n this._reset();\n this.emit('end');\n};\n\nCombinedStream.prototype.destroy = function() {\n this._reset();\n this.emit('close');\n};\n\nCombinedStream.prototype._reset = function() {\n this.writable = false;\n this._streams = [];\n this._currentStream = null;\n};\n\nCombinedStream.prototype._checkDataSize = function() {\n this._updateDataSize();\n if (this.dataSize <= this.maxDataSize) {\n return;\n }\n\n var message =\n 'DelayedStream#maxDataSize of ' + this.maxDataSize + ' bytes exceeded.';\n this._emitError(new Error(message));\n};\n\nCombinedStream.prototype._updateDataSize = function() {\n this.dataSize = 0;\n\n var self = this;\n this._streams.forEach(function(stream) {\n if (!stream.dataSize) {\n return;\n }\n\n self.dataSize += stream.dataSize;\n });\n\n if (this._currentStream && this._currentStream.dataSize) {\n this.dataSize += this._currentStream.dataSize;\n }\n};\n\nCombinedStream.prototype._emitError = function(err) {\n this._reset();\n this.emit('error', err);\n};\n", "{\n \"application/1d-interleaved-parityfec\": {\n \"source\": \"iana\"\n },\n \"application/3gpdash-qoe-report+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/3gpp-ims+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/3gpphal+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/3gpphalforms+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/a2l\": {\n \"source\": \"iana\"\n },\n \"application/ace+cbor\": {\n \"source\": \"iana\"\n },\n \"application/activemessage\": {\n \"source\": \"iana\"\n },\n \"application/activity+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-costmap+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-costmapfilter+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-directory+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-endpointcost+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-endpointcostparams+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-endpointprop+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-endpointpropparams+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-error+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-networkmap+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-networkmapfilter+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-updatestreamcontrol+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-updatestreamparams+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/aml\": {\n \"source\": \"iana\"\n },\n \"application/andrew-inset\": {\n \"source\": \"iana\",\n \"extensions\": [\"ez\"]\n },\n \"application/applefile\": {\n \"source\": \"iana\"\n },\n \"application/applixware\": {\n \"source\": \"apache\",\n \"extensions\": [\"aw\"]\n },\n \"application/at+jwt\": {\n \"source\": \"iana\"\n },\n \"application/atf\": {\n \"source\": \"iana\"\n },\n \"application/atfx\": {\n \"source\": \"iana\"\n },\n \"application/atom+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"atom\"]\n },\n \"application/atomcat+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"atomcat\"]\n },\n \"application/atomdeleted+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"atomdeleted\"]\n },\n \"application/atomicmail\": {\n \"source\": \"iana\"\n },\n \"application/atomsvc+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"atomsvc\"]\n },\n \"application/atsc-dwd+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"dwd\"]\n },\n \"application/atsc-dynamic-event-message\": {\n \"source\": \"iana\"\n },\n \"application/atsc-held+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"held\"]\n },\n \"application/atsc-rdt+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/atsc-rsat+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rsat\"]\n },\n \"application/atxml\": {\n \"source\": \"iana\"\n },\n \"application/auth-policy+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/bacnet-xdd+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/batch-smtp\": {\n \"source\": \"iana\"\n },\n \"application/bdoc\": {\n \"compressible\": false,\n \"extensions\": [\"bdoc\"]\n },\n \"application/beep+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/calendar+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/calendar+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xcs\"]\n },\n \"application/call-completion\": {\n \"source\": \"iana\"\n },\n \"application/cals-1840\": {\n \"source\": \"iana\"\n },\n \"application/captive+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/cbor\": {\n \"source\": \"iana\"\n },\n \"application/cbor-seq\": {\n \"source\": \"iana\"\n },\n \"application/cccex\": {\n \"source\": \"iana\"\n },\n \"application/ccmp+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/ccxml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"ccxml\"]\n },\n \"application/cdfx+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"cdfx\"]\n },\n \"application/cdmi-capability\": {\n \"source\": \"iana\",\n \"extensions\": [\"cdmia\"]\n },\n \"application/cdmi-container\": {\n \"source\": \"iana\",\n \"extensions\": [\"cdmic\"]\n },\n \"application/cdmi-domain\": {\n \"source\": \"iana\",\n \"extensions\": [\"cdmid\"]\n },\n \"application/cdmi-object\": {\n \"source\": \"iana\",\n \"extensions\": [\"cdmio\"]\n },\n \"application/cdmi-queue\": {\n \"source\": \"iana\",\n \"extensions\": [\"cdmiq\"]\n },\n \"application/cdni\": {\n \"source\": \"iana\"\n },\n \"application/cea\": {\n \"source\": \"iana\"\n },\n \"application/cea-2018+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/cellml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/cfw\": {\n \"source\": \"iana\"\n },\n \"application/city+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/clr\": {\n \"source\": \"iana\"\n },\n \"application/clue+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/clue_info+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/cms\": {\n \"source\": \"iana\"\n },\n \"application/cnrp+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/coap-group+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/coap-payload\": {\n \"source\": \"iana\"\n },\n \"application/commonground\": {\n \"source\": \"iana\"\n },\n \"application/conference-info+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/cose\": {\n \"source\": \"iana\"\n },\n \"application/cose-key\": {\n \"source\": \"iana\"\n },\n \"application/cose-key-set\": {\n \"source\": \"iana\"\n },\n \"application/cpl+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"cpl\"]\n },\n \"application/csrattrs\": {\n \"source\": \"iana\"\n },\n \"application/csta+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/cstadata+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/csvm+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/cu-seeme\": {\n \"source\": \"apache\",\n \"extensions\": [\"cu\"]\n },\n \"application/cwt\": {\n \"source\": \"iana\"\n },\n \"application/cybercash\": {\n \"source\": \"iana\"\n },\n \"application/dart\": {\n \"compressible\": true\n },\n \"application/dash+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"mpd\"]\n },\n \"application/dash-patch+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"mpp\"]\n },\n \"application/dashdelta\": {\n \"source\": \"iana\"\n },\n \"application/davmount+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"davmount\"]\n },\n \"application/dca-rft\": {\n \"source\": \"iana\"\n },\n \"application/dcd\": {\n \"source\": \"iana\"\n },\n \"application/dec-dx\": {\n \"source\": \"iana\"\n },\n \"application/dialog-info+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/dicom\": {\n \"source\": \"iana\"\n },\n \"application/dicom+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/dicom+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/dii\": {\n \"source\": \"iana\"\n },\n \"application/dit\": {\n \"source\": \"iana\"\n },\n \"application/dns\": {\n \"source\": \"iana\"\n },\n \"application/dns+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/dns-message\": {\n \"source\": \"iana\"\n },\n \"application/docbook+xml\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"dbk\"]\n },\n \"application/dots+cbor\": {\n \"source\": \"iana\"\n },\n \"application/dskpp+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/dssc+der\": {\n \"source\": \"iana\",\n \"extensions\": [\"dssc\"]\n },\n \"application/dssc+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xdssc\"]\n },\n \"application/dvcs\": {\n \"source\": \"iana\"\n },\n \"application/ecmascript\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"es\",\"ecma\"]\n },\n \"application/edi-consent\": {\n \"source\": \"iana\"\n },\n \"application/edi-x12\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/edifact\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/efi\": {\n \"source\": \"iana\"\n },\n \"application/elm+json\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/elm+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/emergencycalldata.cap+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/emergencycalldata.comment+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/emergencycalldata.control+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/emergencycalldata.deviceinfo+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/emergencycalldata.ecall.msd\": {\n \"source\": \"iana\"\n },\n \"application/emergencycalldata.providerinfo+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/emergencycalldata.serviceinfo+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/emergencycalldata.subscriberinfo+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/emergencycalldata.veds+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/emma+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"emma\"]\n },\n \"application/emotionml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"emotionml\"]\n },\n \"application/encaprtp\": {\n \"source\": \"iana\"\n },\n \"application/epp+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/epub+zip\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"epub\"]\n },\n \"application/eshop\": {\n \"source\": \"iana\"\n },\n \"application/exi\": {\n \"source\": \"iana\",\n \"extensions\": [\"exi\"]\n },\n \"application/expect-ct-report+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/express\": {\n \"source\": \"iana\",\n \"extensions\": [\"exp\"]\n },\n \"application/fastinfoset\": {\n \"source\": \"iana\"\n },\n \"application/fastsoap\": {\n \"source\": \"iana\"\n },\n \"application/fdt+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"fdt\"]\n },\n \"application/fhir+json\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/fhir+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/fido.trusted-apps+json\": {\n \"compressible\": true\n },\n \"application/fits\": {\n \"source\": \"iana\"\n },\n \"application/flexfec\": {\n \"source\": \"iana\"\n },\n \"application/font-sfnt\": {\n \"source\": \"iana\"\n },\n \"application/font-tdpfr\": {\n \"source\": \"iana\",\n \"extensions\": [\"pfr\"]\n },\n \"application/font-woff\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/framework-attributes+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/geo+json\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"geojson\"]\n },\n \"application/geo+json-seq\": {\n \"source\": \"iana\"\n },\n \"application/geopackage+sqlite3\": {\n \"source\": \"iana\"\n },\n \"application/geoxacml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/gltf-buffer\": {\n \"source\": \"iana\"\n },\n \"application/gml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"gml\"]\n },\n \"application/gpx+xml\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"gpx\"]\n },\n \"application/gxf\": {\n \"source\": \"apache\",\n \"extensions\": [\"gxf\"]\n },\n \"application/gzip\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"gz\"]\n },\n \"application/h224\": {\n \"source\": \"iana\"\n },\n \"application/held+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/hjson\": {\n \"extensions\": [\"hjson\"]\n },\n \"application/http\": {\n \"source\": \"iana\"\n },\n \"application/hyperstudio\": {\n \"source\": \"iana\",\n \"extensions\": [\"stk\"]\n },\n \"application/ibe-key-request+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/ibe-pkg-reply+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/ibe-pp-data\": {\n \"source\": \"iana\"\n },\n \"application/iges\": {\n \"source\": \"iana\"\n },\n \"application/im-iscomposing+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/index\": {\n \"source\": \"iana\"\n },\n \"application/index.cmd\": {\n \"source\": \"iana\"\n },\n \"application/index.obj\": {\n \"source\": \"iana\"\n },\n \"application/index.response\": {\n \"source\": \"iana\"\n },\n \"application/index.vnd\": {\n \"source\": \"iana\"\n },\n \"application/inkml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"ink\",\"inkml\"]\n },\n \"application/iotp\": {\n \"source\": \"iana\"\n },\n \"application/ipfix\": {\n \"source\": \"iana\",\n \"extensions\": [\"ipfix\"]\n },\n \"application/ipp\": {\n \"source\": \"iana\"\n },\n \"application/isup\": {\n \"source\": \"iana\"\n },\n \"application/its+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"its\"]\n },\n \"application/java-archive\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"jar\",\"war\",\"ear\"]\n },\n \"application/java-serialized-object\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"ser\"]\n },\n \"application/java-vm\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"class\"]\n },\n \"application/javascript\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true,\n \"extensions\": [\"js\",\"mjs\"]\n },\n \"application/jf2feed+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/jose\": {\n \"source\": \"iana\"\n },\n \"application/jose+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/jrd+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/jscalendar+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/json\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true,\n \"extensions\": [\"json\",\"map\"]\n },\n \"application/json-patch+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/json-seq\": {\n \"source\": \"iana\"\n },\n \"application/json5\": {\n \"extensions\": [\"json5\"]\n },\n \"application/jsonml+json\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"jsonml\"]\n },\n \"application/jwk+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/jwk-set+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/jwt\": {\n \"source\": \"iana\"\n },\n \"application/kpml-request+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/kpml-response+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/ld+json\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"jsonld\"]\n },\n \"application/lgr+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"lgr\"]\n },\n \"application/link-format\": {\n \"source\": \"iana\"\n },\n \"application/load-control+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/lost+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"lostxml\"]\n },\n \"application/lostsync+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/lpf+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/lxf\": {\n \"source\": \"iana\"\n },\n \"application/mac-binhex40\": {\n \"source\": \"iana\",\n \"extensions\": [\"hqx\"]\n },\n \"application/mac-compactpro\": {\n \"source\": \"apache\",\n \"extensions\": [\"cpt\"]\n },\n \"application/macwriteii\": {\n \"source\": \"iana\"\n },\n \"application/mads+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"mads\"]\n },\n \"application/manifest+json\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true,\n \"extensions\": [\"webmanifest\"]\n },\n \"application/marc\": {\n \"source\": \"iana\",\n \"extensions\": [\"mrc\"]\n },\n \"application/marcxml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"mrcx\"]\n },\n \"application/mathematica\": {\n \"source\": \"iana\",\n \"extensions\": [\"ma\",\"nb\",\"mb\"]\n },\n \"application/mathml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"mathml\"]\n },\n \"application/mathml-content+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mathml-presentation+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mbms-associated-procedure-description+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mbms-deregister+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mbms-envelope+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mbms-msk+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mbms-msk-response+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mbms-protection-description+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mbms-reception-report+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mbms-register+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mbms-register-response+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mbms-schedule+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mbms-user-service-description+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mbox\": {\n \"source\": \"iana\",\n \"extensions\": [\"mbox\"]\n },\n \"application/media-policy-dataset+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"mpf\"]\n },\n \"application/media_control+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mediaservercontrol+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"mscml\"]\n },\n \"application/merge-patch+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/metalink+xml\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"metalink\"]\n },\n \"application/metalink4+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"meta4\"]\n },\n \"application/mets+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"mets\"]\n },\n \"application/mf4\": {\n \"source\": \"iana\"\n },\n \"application/mikey\": {\n \"source\": \"iana\"\n },\n \"application/mipc\": {\n \"source\": \"iana\"\n },\n \"application/missing-blocks+cbor-seq\": {\n \"source\": \"iana\"\n },\n \"application/mmt-aei+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"maei\"]\n },\n \"application/mmt-usd+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"musd\"]\n },\n \"application/mods+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"mods\"]\n },\n \"application/moss-keys\": {\n \"source\": \"iana\"\n },\n \"application/moss-signature\": {\n \"source\": \"iana\"\n },\n \"application/mosskey-data\": {\n \"source\": \"iana\"\n },\n \"application/mosskey-request\": {\n \"source\": \"iana\"\n },\n \"application/mp21\": {\n \"source\": \"iana\",\n \"extensions\": [\"m21\",\"mp21\"]\n },\n \"application/mp4\": {\n \"source\": \"iana\",\n \"extensions\": [\"mp4s\",\"m4p\"]\n },\n \"application/mpeg4-generic\": {\n \"source\": \"iana\"\n },\n \"application/mpeg4-iod\": {\n \"source\": \"iana\"\n },\n \"application/mpeg4-iod-xmt\": {\n \"source\": \"iana\"\n },\n \"application/mrb-consumer+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mrb-publish+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/msc-ivr+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/msc-mixer+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/msword\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"doc\",\"dot\"]\n },\n \"application/mud+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/multipart-core\": {\n \"source\": \"iana\"\n },\n \"application/mxf\": {\n \"source\": \"iana\",\n \"extensions\": [\"mxf\"]\n },\n \"application/n-quads\": {\n \"source\": \"iana\",\n \"extensions\": [\"nq\"]\n },\n \"application/n-triples\": {\n \"source\": \"iana\",\n \"extensions\": [\"nt\"]\n },\n \"application/nasdata\": {\n \"source\": \"iana\"\n },\n \"application/news-checkgroups\": {\n \"source\": \"iana\",\n \"charset\": \"US-ASCII\"\n },\n \"application/news-groupinfo\": {\n \"source\": \"iana\",\n \"charset\": \"US-ASCII\"\n },\n \"application/news-transmission\": {\n \"source\": \"iana\"\n },\n \"application/nlsml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/node\": {\n \"source\": \"iana\",\n \"extensions\": [\"cjs\"]\n },\n \"application/nss\": {\n \"source\": \"iana\"\n },\n \"application/oauth-authz-req+jwt\": {\n \"source\": \"iana\"\n },\n \"application/oblivious-dns-message\": {\n \"source\": \"iana\"\n },\n \"application/ocsp-request\": {\n \"source\": \"iana\"\n },\n \"application/ocsp-response\": {\n \"source\": \"iana\"\n },\n \"application/octet-stream\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"bin\",\"dms\",\"lrf\",\"mar\",\"so\",\"dist\",\"distz\",\"pkg\",\"bpk\",\"dump\",\"elc\",\"deploy\",\"exe\",\"dll\",\"deb\",\"dmg\",\"iso\",\"img\",\"msi\",\"msp\",\"msm\",\"buffer\"]\n },\n \"application/oda\": {\n \"source\": \"iana\",\n \"extensions\": [\"oda\"]\n },\n \"application/odm+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/odx\": {\n \"source\": \"iana\"\n },\n \"application/oebps-package+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"opf\"]\n },\n \"application/ogg\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"ogx\"]\n },\n \"application/omdoc+xml\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"omdoc\"]\n },\n \"application/onenote\": {\n \"source\": \"apache\",\n \"extensions\": [\"onetoc\",\"onetoc2\",\"onetmp\",\"onepkg\"]\n },\n \"application/opc-nodeset+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/oscore\": {\n \"source\": \"iana\"\n },\n \"application/oxps\": {\n \"source\": \"iana\",\n \"extensions\": [\"oxps\"]\n },\n \"application/p21\": {\n \"source\": \"iana\"\n },\n \"application/p21+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/p2p-overlay+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"relo\"]\n },\n \"application/parityfec\": {\n \"source\": \"iana\"\n },\n \"application/passport\": {\n \"source\": \"iana\"\n },\n \"application/patch-ops-error+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xer\"]\n },\n \"application/pdf\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"pdf\"]\n },\n \"application/pdx\": {\n \"source\": \"iana\"\n },\n \"application/pem-certificate-chain\": {\n \"source\": \"iana\"\n },\n \"application/pgp-encrypted\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"pgp\"]\n },\n \"application/pgp-keys\": {\n \"source\": \"iana\",\n \"extensions\": [\"asc\"]\n },\n \"application/pgp-signature\": {\n \"source\": \"iana\",\n \"extensions\": [\"asc\",\"sig\"]\n },\n \"application/pics-rules\": {\n \"source\": \"apache\",\n \"extensions\": [\"prf\"]\n },\n \"application/pidf+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/pidf-diff+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/pkcs10\": {\n \"source\": \"iana\",\n \"extensions\": [\"p10\"]\n },\n \"application/pkcs12\": {\n \"source\": \"iana\"\n },\n \"application/pkcs7-mime\": {\n \"source\": \"iana\",\n \"extensions\": [\"p7m\",\"p7c\"]\n },\n \"application/pkcs7-signature\": {\n \"source\": \"iana\",\n \"extensions\": [\"p7s\"]\n },\n \"application/pkcs8\": {\n \"source\": \"iana\",\n \"extensions\": [\"p8\"]\n },\n \"application/pkcs8-encrypted\": {\n \"source\": \"iana\"\n },\n \"application/pkix-attr-cert\": {\n \"source\": \"iana\",\n \"extensions\": [\"ac\"]\n },\n \"application/pkix-cert\": {\n \"source\": \"iana\",\n \"extensions\": [\"cer\"]\n },\n \"application/pkix-crl\": {\n \"source\": \"iana\",\n \"extensions\": [\"crl\"]\n },\n \"application/pkix-pkipath\": {\n \"source\": \"iana\",\n \"extensions\": [\"pkipath\"]\n },\n \"application/pkixcmp\": {\n \"source\": \"iana\",\n \"extensions\": [\"pki\"]\n },\n \"application/pls+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"pls\"]\n },\n \"application/poc-settings+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/postscript\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"ai\",\"eps\",\"ps\"]\n },\n \"application/ppsp-tracker+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/problem+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/problem+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/provenance+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"provx\"]\n },\n \"application/prs.alvestrand.titrax-sheet\": {\n \"source\": \"iana\"\n },\n \"application/prs.cww\": {\n \"source\": \"iana\",\n \"extensions\": [\"cww\"]\n },\n \"application/prs.cyn\": {\n \"source\": \"iana\",\n \"charset\": \"7-BIT\"\n },\n \"application/prs.hpub+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/prs.nprend\": {\n \"source\": \"iana\"\n },\n \"application/prs.plucker\": {\n \"source\": \"iana\"\n },\n \"application/prs.rdf-xml-crypt\": {\n \"source\": \"iana\"\n },\n \"application/prs.xsf+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/pskc+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"pskcxml\"]\n },\n \"application/pvd+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/qsig\": {\n \"source\": \"iana\"\n },\n \"application/raml+yaml\": {\n \"compressible\": true,\n \"extensions\": [\"raml\"]\n },\n \"application/raptorfec\": {\n \"source\": \"iana\"\n },\n \"application/rdap+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/rdf+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rdf\",\"owl\"]\n },\n \"application/reginfo+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rif\"]\n },\n \"application/relax-ng-compact-syntax\": {\n \"source\": \"iana\",\n \"extensions\": [\"rnc\"]\n },\n \"application/remote-printing\": {\n \"source\": \"iana\"\n },\n \"application/reputon+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/resource-lists+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rl\"]\n },\n \"application/resource-lists-diff+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rld\"]\n },\n \"application/rfc+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/riscos\": {\n \"source\": \"iana\"\n },\n \"application/rlmi+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/rls-services+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rs\"]\n },\n \"application/route-apd+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rapd\"]\n },\n \"application/route-s-tsid+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"sls\"]\n },\n \"application/route-usd+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rusd\"]\n },\n \"application/rpki-ghostbusters\": {\n \"source\": \"iana\",\n \"extensions\": [\"gbr\"]\n },\n \"application/rpki-manifest\": {\n \"source\": \"iana\",\n \"extensions\": [\"mft\"]\n },\n \"application/rpki-publication\": {\n \"source\": \"iana\"\n },\n \"application/rpki-roa\": {\n \"source\": \"iana\",\n \"extensions\": [\"roa\"]\n },\n \"application/rpki-updown\": {\n \"source\": \"iana\"\n },\n \"application/rsd+xml\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"rsd\"]\n },\n \"application/rss+xml\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"rss\"]\n },\n \"application/rtf\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rtf\"]\n },\n \"application/rtploopback\": {\n \"source\": \"iana\"\n },\n \"application/rtx\": {\n \"source\": \"iana\"\n },\n \"application/samlassertion+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/samlmetadata+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/sarif+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/sarif-external-properties+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/sbe\": {\n \"source\": \"iana\"\n },\n \"application/sbml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"sbml\"]\n },\n \"application/scaip+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/scim+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/scvp-cv-request\": {\n \"source\": \"iana\",\n \"extensions\": [\"scq\"]\n },\n \"application/scvp-cv-response\": {\n \"source\": \"iana\",\n \"extensions\": [\"scs\"]\n },\n \"application/scvp-vp-request\": {\n \"source\": \"iana\",\n \"extensions\": [\"spq\"]\n },\n \"application/scvp-vp-response\": {\n \"source\": \"iana\",\n \"extensions\": [\"spp\"]\n },\n \"application/sdp\": {\n \"source\": \"iana\",\n \"extensions\": [\"sdp\"]\n },\n \"application/secevent+jwt\": {\n \"source\": \"iana\"\n },\n \"application/senml+cbor\": {\n \"source\": \"iana\"\n },\n \"application/senml+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/senml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"senmlx\"]\n },\n \"application/senml-etch+cbor\": {\n \"source\": \"iana\"\n },\n \"application/senml-etch+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/senml-exi\": {\n \"source\": \"iana\"\n },\n \"application/sensml+cbor\": {\n \"source\": \"iana\"\n },\n \"application/sensml+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/sensml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"sensmlx\"]\n },\n \"application/sensml-exi\": {\n \"source\": \"iana\"\n },\n \"application/sep+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/sep-exi\": {\n \"source\": \"iana\"\n },\n \"application/session-info\": {\n \"source\": \"iana\"\n },\n \"application/set-payment\": {\n \"source\": \"iana\"\n },\n \"application/set-payment-initiation\": {\n \"source\": \"iana\",\n \"extensions\": [\"setpay\"]\n },\n \"application/set-registration\": {\n \"source\": \"iana\"\n },\n \"application/set-registration-initiation\": {\n \"source\": \"iana\",\n \"extensions\": [\"setreg\"]\n },\n \"application/sgml\": {\n \"source\": \"iana\"\n },\n \"application/sgml-open-catalog\": {\n \"source\": \"iana\"\n },\n \"application/shf+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"shf\"]\n },\n \"application/sieve\": {\n \"source\": \"iana\",\n \"extensions\": [\"siv\",\"sieve\"]\n },\n \"application/simple-filter+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/simple-message-summary\": {\n \"source\": \"iana\"\n },\n \"application/simplesymbolcontainer\": {\n \"source\": \"iana\"\n },\n \"application/sipc\": {\n \"source\": \"iana\"\n },\n \"application/slate\": {\n \"source\": \"iana\"\n },\n \"application/smil\": {\n \"source\": \"iana\"\n },\n \"application/smil+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"smi\",\"smil\"]\n },\n \"application/smpte336m\": {\n \"source\": \"iana\"\n },\n \"application/soap+fastinfoset\": {\n \"source\": \"iana\"\n },\n \"application/soap+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/sparql-query\": {\n \"source\": \"iana\",\n \"extensions\": [\"rq\"]\n },\n \"application/sparql-results+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"srx\"]\n },\n \"application/spdx+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/spirits-event+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/sql\": {\n \"source\": \"iana\"\n },\n \"application/srgs\": {\n \"source\": \"iana\",\n \"extensions\": [\"gram\"]\n },\n \"application/srgs+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"grxml\"]\n },\n \"application/sru+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"sru\"]\n },\n \"application/ssdl+xml\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"ssdl\"]\n },\n \"application/ssml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"ssml\"]\n },\n \"application/stix+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/swid+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"swidtag\"]\n },\n \"application/tamp-apex-update\": {\n \"source\": \"iana\"\n },\n \"application/tamp-apex-update-confirm\": {\n \"source\": \"iana\"\n },\n \"application/tamp-community-update\": {\n \"source\": \"iana\"\n },\n \"application/tamp-community-update-confirm\": {\n \"source\": \"iana\"\n },\n \"application/tamp-error\": {\n \"source\": \"iana\"\n },\n \"application/tamp-sequence-adjust\": {\n \"source\": \"iana\"\n },\n \"application/tamp-sequence-adjust-confirm\": {\n \"source\": \"iana\"\n },\n \"application/tamp-status-query\": {\n \"source\": \"iana\"\n },\n \"application/tamp-status-response\": {\n \"source\": \"iana\"\n },\n \"application/tamp-update\": {\n \"source\": \"iana\"\n },\n \"application/tamp-update-confirm\": {\n \"source\": \"iana\"\n },\n \"application/tar\": {\n \"compressible\": true\n },\n \"application/taxii+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/td+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/tei+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"tei\",\"teicorpus\"]\n },\n \"application/tetra_isi\": {\n \"source\": \"iana\"\n },\n \"application/thraud+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"tfi\"]\n },\n \"application/timestamp-query\": {\n \"source\": \"iana\"\n },\n \"application/timestamp-reply\": {\n \"source\": \"iana\"\n },\n \"application/timestamped-data\": {\n \"source\": \"iana\",\n \"extensions\": [\"tsd\"]\n },\n \"application/tlsrpt+gzip\": {\n \"source\": \"iana\"\n },\n \"application/tlsrpt+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/tnauthlist\": {\n \"source\": \"iana\"\n },\n \"application/token-introspection+jwt\": {\n \"source\": \"iana\"\n },\n \"application/toml\": {\n \"compressible\": true,\n \"extensions\": [\"toml\"]\n },\n \"application/trickle-ice-sdpfrag\": {\n \"source\": \"iana\"\n },\n \"application/trig\": {\n \"source\": \"iana\",\n \"extensions\": [\"trig\"]\n },\n \"application/ttml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"ttml\"]\n },\n \"application/tve-trigger\": {\n \"source\": \"iana\"\n },\n \"application/tzif\": {\n \"source\": \"iana\"\n },\n \"application/tzif-leap\": {\n \"source\": \"iana\"\n },\n \"application/ubjson\": {\n \"compressible\": false,\n \"extensions\": [\"ubj\"]\n },\n \"application/ulpfec\": {\n \"source\": \"iana\"\n },\n \"application/urc-grpsheet+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/urc-ressheet+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rsheet\"]\n },\n \"application/urc-targetdesc+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"td\"]\n },\n \"application/urc-uisocketdesc+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vcard+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vcard+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vemmi\": {\n \"source\": \"iana\"\n },\n \"application/vividence.scriptfile\": {\n \"source\": \"apache\"\n },\n \"application/vnd.1000minds.decision-model+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"1km\"]\n },\n \"application/vnd.3gpp-prose+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp-prose-pc3ch+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp-v2x-local-service-information\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.5gnas\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.access-transfer-events+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.bsf+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.gmop+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.gtpc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.interworking-data\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.lpp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.mc-signalling-ear\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.mcdata-affiliation-command+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcdata-info+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcdata-payload\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.mcdata-service-config+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcdata-signalling\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.mcdata-ue-config+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcdata-user-profile+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcptt-affiliation-command+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcptt-floor-request+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcptt-info+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcptt-location-info+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcptt-mbms-usage-info+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcptt-service-config+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcptt-signed+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcptt-ue-config+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcptt-ue-init-config+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcptt-user-profile+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcvideo-affiliation-command+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcvideo-affiliation-info+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcvideo-info+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcvideo-location-info+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcvideo-mbms-usage-info+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcvideo-service-config+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcvideo-transmission-request+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcvideo-ue-config+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcvideo-user-profile+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mid-call+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.ngap\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.pfcp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.pic-bw-large\": {\n \"source\": \"iana\",\n \"extensions\": [\"plb\"]\n },\n \"application/vnd.3gpp.pic-bw-small\": {\n \"source\": \"iana\",\n \"extensions\": [\"psb\"]\n },\n \"application/vnd.3gpp.pic-bw-var\": {\n \"source\": \"iana\",\n \"extensions\": [\"pvb\"]\n },\n \"application/vnd.3gpp.s1ap\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.sms\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.sms+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.srvcc-ext+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.srvcc-info+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.state-and-event-info+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.ussd+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp2.bcmcsinfo+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp2.sms\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp2.tcap\": {\n \"source\": \"iana\",\n \"extensions\": [\"tcap\"]\n },\n \"application/vnd.3lightssoftware.imagescal\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3m.post-it-notes\": {\n \"source\": \"iana\",\n \"extensions\": [\"pwn\"]\n },\n \"application/vnd.accpac.simply.aso\": {\n \"source\": \"iana\",\n \"extensions\": [\"aso\"]\n },\n \"application/vnd.accpac.simply.imp\": {\n \"source\": \"iana\",\n \"extensions\": [\"imp\"]\n },\n \"application/vnd.acucobol\": {\n \"source\": \"iana\",\n \"extensions\": [\"acu\"]\n },\n \"application/vnd.acucorp\": {\n \"source\": \"iana\",\n \"extensions\": [\"atc\",\"acutc\"]\n },\n \"application/vnd.adobe.air-application-installer-package+zip\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"air\"]\n },\n \"application/vnd.adobe.flash.movie\": {\n \"source\": \"iana\"\n },\n \"application/vnd.adobe.formscentral.fcdt\": {\n \"source\": \"iana\",\n \"extensions\": [\"fcdt\"]\n },\n \"application/vnd.adobe.fxp\": {\n \"source\": \"iana\",\n \"extensions\": [\"fxp\",\"fxpl\"]\n },\n \"application/vnd.adobe.partial-upload\": {\n \"source\": \"iana\"\n },\n \"application/vnd.adobe.xdp+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xdp\"]\n },\n \"application/vnd.adobe.xfdf\": {\n \"source\": \"iana\",\n \"extensions\": [\"xfdf\"]\n },\n \"application/vnd.aether.imp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.afpc.afplinedata\": {\n \"source\": \"iana\"\n },\n \"application/vnd.afpc.afplinedata-pagedef\": {\n \"source\": \"iana\"\n },\n \"application/vnd.afpc.cmoca-cmresource\": {\n \"source\": \"iana\"\n },\n \"application/vnd.afpc.foca-charset\": {\n \"source\": \"iana\"\n },\n \"application/vnd.afpc.foca-codedfont\": {\n \"source\": \"iana\"\n },\n \"application/vnd.afpc.foca-codepage\": {\n \"source\": \"iana\"\n },\n \"application/vnd.afpc.modca\": {\n \"source\": \"iana\"\n },\n \"application/vnd.afpc.modca-cmtable\": {\n \"source\": \"iana\"\n },\n \"application/vnd.afpc.modca-formdef\": {\n \"source\": \"iana\"\n },\n \"application/vnd.afpc.modca-mediummap\": {\n \"source\": \"iana\"\n },\n \"application/vnd.afpc.modca-objectcontainer\": {\n \"source\": \"iana\"\n },\n \"application/vnd.afpc.modca-overlay\": {\n \"source\": \"iana\"\n },\n \"application/vnd.afpc.modca-pagesegment\": {\n \"source\": \"iana\"\n },\n \"application/vnd.age\": {\n \"source\": \"iana\",\n \"extensions\": [\"age\"]\n },\n \"application/vnd.ah-barcode\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ahead.space\": {\n \"source\": \"iana\",\n \"extensions\": [\"ahead\"]\n },\n \"application/vnd.airzip.filesecure.azf\": {\n \"source\": \"iana\",\n \"extensions\": [\"azf\"]\n },\n \"application/vnd.airzip.filesecure.azs\": {\n \"source\": \"iana\",\n \"extensions\": [\"azs\"]\n },\n \"application/vnd.amadeus+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.amazon.ebook\": {\n \"source\": \"apache\",\n \"extensions\": [\"azw\"]\n },\n \"application/vnd.amazon.mobi8-ebook\": {\n \"source\": \"iana\"\n },\n \"application/vnd.americandynamics.acc\": {\n \"source\": \"iana\",\n \"extensions\": [\"acc\"]\n },\n \"application/vnd.amiga.ami\": {\n \"source\": \"iana\",\n \"extensions\": [\"ami\"]\n },\n \"application/vnd.amundsen.maze+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.android.ota\": {\n \"source\": \"iana\"\n },\n \"application/vnd.android.package-archive\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"apk\"]\n },\n \"application/vnd.anki\": {\n \"source\": \"iana\"\n },\n \"application/vnd.anser-web-certificate-issue-initiation\": {\n \"source\": \"iana\",\n \"extensions\": [\"cii\"]\n },\n \"application/vnd.anser-web-funds-transfer-initiation\": {\n \"source\": \"apache\",\n \"extensions\": [\"fti\"]\n },\n \"application/vnd.antix.game-component\": {\n \"source\": \"iana\",\n \"extensions\": [\"atx\"]\n },\n \"application/vnd.apache.arrow.file\": {\n \"source\": \"iana\"\n },\n \"application/vnd.apache.arrow.stream\": {\n \"source\": \"iana\"\n },\n \"application/vnd.apache.thrift.binary\": {\n \"source\": \"iana\"\n },\n \"application/vnd.apache.thrift.compact\": {\n \"source\": \"iana\"\n },\n \"application/vnd.apache.thrift.json\": {\n \"source\": \"iana\"\n },\n \"application/vnd.api+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.aplextor.warrp+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.apothekende.reservation+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.apple.installer+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"mpkg\"]\n },\n \"application/vnd.apple.keynote\": {\n \"source\": \"iana\",\n \"extensions\": [\"key\"]\n },\n \"application/vnd.apple.mpegurl\": {\n \"source\": \"iana\",\n \"extensions\": [\"m3u8\"]\n },\n \"application/vnd.apple.numbers\": {\n \"source\": \"iana\",\n \"extensions\": [\"numbers\"]\n },\n \"application/vnd.apple.pages\": {\n \"source\": \"iana\",\n \"extensions\": [\"pages\"]\n },\n \"application/vnd.apple.pkpass\": {\n \"compressible\": false,\n \"extensions\": [\"pkpass\"]\n },\n \"application/vnd.arastra.swi\": {\n \"source\": \"iana\"\n },\n \"application/vnd.aristanetworks.swi\": {\n \"source\": \"iana\",\n \"extensions\": [\"swi\"]\n },\n \"application/vnd.artisan+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.artsquare\": {\n \"source\": \"iana\"\n },\n \"application/vnd.astraea-software.iota\": {\n \"source\": \"iana\",\n \"extensions\": [\"iota\"]\n },\n \"application/vnd.audiograph\": {\n \"source\": \"iana\",\n \"extensions\": [\"aep\"]\n },\n \"application/vnd.autopackage\": {\n \"source\": \"iana\"\n },\n \"application/vnd.avalon+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.avistar+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.balsamiq.bmml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"bmml\"]\n },\n \"application/vnd.balsamiq.bmpr\": {\n \"source\": \"iana\"\n },\n \"application/vnd.banana-accounting\": {\n \"source\": \"iana\"\n },\n \"application/vnd.bbf.usp.error\": {\n \"source\": \"iana\"\n },\n \"application/vnd.bbf.usp.msg\": {\n \"source\": \"iana\"\n },\n \"application/vnd.bbf.usp.msg+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.bekitzur-stech+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.bint.med-content\": {\n \"source\": \"iana\"\n },\n \"application/vnd.biopax.rdf+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.blink-idb-value-wrapper\": {\n \"source\": \"iana\"\n },\n \"application/vnd.blueice.multipass\": {\n \"source\": \"iana\",\n \"extensions\": [\"mpm\"]\n },\n \"application/vnd.bluetooth.ep.oob\": {\n \"source\": \"iana\"\n },\n \"application/vnd.bluetooth.le.oob\": {\n \"source\": \"iana\"\n },\n \"application/vnd.bmi\": {\n \"source\": \"iana\",\n \"extensions\": [\"bmi\"]\n },\n \"application/vnd.bpf\": {\n \"source\": \"iana\"\n },\n \"application/vnd.bpf3\": {\n \"source\": \"iana\"\n },\n \"application/vnd.businessobjects\": {\n \"source\": \"iana\",\n \"extensions\": [\"rep\"]\n },\n \"application/vnd.byu.uapi+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.cab-jscript\": {\n \"source\": \"iana\"\n },\n \"application/vnd.canon-cpdl\": {\n \"source\": \"iana\"\n },\n \"application/vnd.canon-lips\": {\n \"source\": \"iana\"\n },\n \"application/vnd.capasystems-pg+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.cendio.thinlinc.clientconf\": {\n \"source\": \"iana\"\n },\n \"application/vnd.century-systems.tcp_stream\": {\n \"source\": \"iana\"\n },\n \"application/vnd.chemdraw+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"cdxml\"]\n },\n \"application/vnd.chess-pgn\": {\n \"source\": \"iana\"\n },\n \"application/vnd.chipnuts.karaoke-mmd\": {\n \"source\": \"iana\",\n \"extensions\": [\"mmd\"]\n },\n \"application/vnd.ciedi\": {\n \"source\": \"iana\"\n },\n \"application/vnd.cinderella\": {\n \"source\": \"iana\",\n \"extensions\": [\"cdy\"]\n },\n \"application/vnd.cirpack.isdn-ext\": {\n \"source\": \"iana\"\n },\n \"application/vnd.citationstyles.style+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"csl\"]\n },\n \"application/vnd.claymore\": {\n \"source\": \"iana\",\n \"extensions\": [\"cla\"]\n },\n \"application/vnd.cloanto.rp9\": {\n \"source\": \"iana\",\n \"extensions\": [\"rp9\"]\n },\n \"application/vnd.clonk.c4group\": {\n \"source\": \"iana\",\n \"extensions\": [\"c4g\",\"c4d\",\"c4f\",\"c4p\",\"c4u\"]\n },\n \"application/vnd.cluetrust.cartomobile-config\": {\n \"source\": \"iana\",\n \"extensions\": [\"c11amc\"]\n },\n \"application/vnd.cluetrust.cartomobile-config-pkg\": {\n \"source\": \"iana\",\n \"extensions\": [\"c11amz\"]\n },\n \"application/vnd.coffeescript\": {\n \"source\": \"iana\"\n },\n \"application/vnd.collabio.xodocuments.document\": {\n \"source\": \"iana\"\n },\n \"application/vnd.collabio.xodocuments.document-template\": {\n \"source\": \"iana\"\n },\n \"application/vnd.collabio.xodocuments.presentation\": {\n \"source\": \"iana\"\n },\n \"application/vnd.collabio.xodocuments.presentation-template\": {\n \"source\": \"iana\"\n },\n \"application/vnd.collabio.xodocuments.spreadsheet\": {\n \"source\": \"iana\"\n },\n \"application/vnd.collabio.xodocuments.spreadsheet-template\": {\n \"source\": \"iana\"\n },\n \"application/vnd.collection+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.collection.doc+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.collection.next+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.comicbook+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/vnd.comicbook-rar\": {\n \"source\": \"iana\"\n },\n \"application/vnd.commerce-battelle\": {\n \"source\": \"iana\"\n },\n \"application/vnd.commonspace\": {\n \"source\": \"iana\",\n \"extensions\": [\"csp\"]\n },\n \"application/vnd.contact.cmsg\": {\n \"source\": \"iana\",\n \"extensions\": [\"cdbcmsg\"]\n },\n \"application/vnd.coreos.ignition+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.cosmocaller\": {\n \"source\": \"iana\",\n \"extensions\": [\"cmc\"]\n },\n \"application/vnd.crick.clicker\": {\n \"source\": \"iana\",\n \"extensions\": [\"clkx\"]\n },\n \"application/vnd.crick.clicker.keyboard\": {\n \"source\": \"iana\",\n \"extensions\": [\"clkk\"]\n },\n \"application/vnd.crick.clicker.palette\": {\n \"source\": \"iana\",\n \"extensions\": [\"clkp\"]\n },\n \"application/vnd.crick.clicker.template\": {\n \"source\": \"iana\",\n \"extensions\": [\"clkt\"]\n },\n \"application/vnd.crick.clicker.wordbank\": {\n \"source\": \"iana\",\n \"extensions\": [\"clkw\"]\n },\n \"application/vnd.criticaltools.wbs+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"wbs\"]\n },\n \"application/vnd.cryptii.pipe+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.crypto-shade-file\": {\n \"source\": \"iana\"\n },\n \"application/vnd.cryptomator.encrypted\": {\n \"source\": \"iana\"\n },\n \"application/vnd.cryptomator.vault\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ctc-posml\": {\n \"source\": \"iana\",\n \"extensions\": [\"pml\"]\n },\n \"application/vnd.ctct.ws+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.cups-pdf\": {\n \"source\": \"iana\"\n },\n \"application/vnd.cups-postscript\": {\n \"source\": \"iana\"\n },\n \"application/vnd.cups-ppd\": {\n \"source\": \"iana\",\n \"extensions\": [\"ppd\"]\n },\n \"application/vnd.cups-raster\": {\n \"source\": \"iana\"\n },\n \"application/vnd.cups-raw\": {\n \"source\": \"iana\"\n },\n \"application/vnd.curl\": {\n \"source\": \"iana\"\n },\n \"application/vnd.curl.car\": {\n \"source\": \"apache\",\n \"extensions\": [\"car\"]\n },\n \"application/vnd.curl.pcurl\": {\n \"source\": \"apache\",\n \"extensions\": [\"pcurl\"]\n },\n \"application/vnd.cyan.dean.root+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.cybank\": {\n \"source\": \"iana\"\n },\n \"application/vnd.cyclonedx+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.cyclonedx+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.d2l.coursepackage1p0+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/vnd.d3m-dataset\": {\n \"source\": \"iana\"\n },\n \"application/vnd.d3m-problem\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dart\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"dart\"]\n },\n \"application/vnd.data-vision.rdz\": {\n \"source\": \"iana\",\n \"extensions\": [\"rdz\"]\n },\n \"application/vnd.datapackage+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.dataresource+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.dbf\": {\n \"source\": \"iana\",\n \"extensions\": [\"dbf\"]\n },\n \"application/vnd.debian.binary-package\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dece.data\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvf\",\"uvvf\",\"uvd\",\"uvvd\"]\n },\n \"application/vnd.dece.ttml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"uvt\",\"uvvt\"]\n },\n \"application/vnd.dece.unspecified\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvx\",\"uvvx\"]\n },\n \"application/vnd.dece.zip\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvz\",\"uvvz\"]\n },\n \"application/vnd.denovo.fcselayout-link\": {\n \"source\": \"iana\",\n \"extensions\": [\"fe_launch\"]\n },\n \"application/vnd.desmume.movie\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dir-bi.plate-dl-nosuffix\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dm.delegation+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.dna\": {\n \"source\": \"iana\",\n \"extensions\": [\"dna\"]\n },\n \"application/vnd.document+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.dolby.mlp\": {\n \"source\": \"apache\",\n \"extensions\": [\"mlp\"]\n },\n \"application/vnd.dolby.mobile.1\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dolby.mobile.2\": {\n \"source\": \"iana\"\n },\n \"application/vnd.doremir.scorecloud-binary-document\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dpgraph\": {\n \"source\": \"iana\",\n \"extensions\": [\"dpg\"]\n },\n \"application/vnd.dreamfactory\": {\n \"source\": \"iana\",\n \"extensions\": [\"dfac\"]\n },\n \"application/vnd.drive+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ds-keypoint\": {\n \"source\": \"apache\",\n \"extensions\": [\"kpxx\"]\n },\n \"application/vnd.dtg.local\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dtg.local.flash\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dtg.local.html\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.ait\": {\n \"source\": \"iana\",\n \"extensions\": [\"ait\"]\n },\n \"application/vnd.dvb.dvbisl+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.dvb.dvbj\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.esgcontainer\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.ipdcdftnotifaccess\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.ipdcesgaccess\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.ipdcesgaccess2\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.ipdcesgpdd\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.ipdcroaming\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.iptv.alfec-base\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.iptv.alfec-enhancement\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.notif-aggregate-root+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.dvb.notif-container+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.dvb.notif-generic+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.dvb.notif-ia-msglist+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.dvb.notif-ia-registration-request+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.dvb.notif-ia-registration-response+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.dvb.notif-init+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.dvb.pfr\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.service\": {\n \"source\": \"iana\",\n \"extensions\": [\"svc\"]\n },\n \"application/vnd.dxr\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dynageo\": {\n \"source\": \"iana\",\n \"extensions\": [\"geo\"]\n },\n \"application/vnd.dzr\": {\n \"source\": \"iana\"\n },\n \"application/vnd.easykaraoke.cdgdownload\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ecdis-update\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ecip.rlp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.eclipse.ditto+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ecowin.chart\": {\n \"source\": \"iana\",\n \"extensions\": [\"mag\"]\n },\n \"application/vnd.ecowin.filerequest\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ecowin.fileupdate\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ecowin.series\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ecowin.seriesrequest\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ecowin.seriesupdate\": {\n \"source\": \"iana\"\n },\n \"application/vnd.efi.img\": {\n \"source\": \"iana\"\n },\n \"application/vnd.efi.iso\": {\n \"source\": \"iana\"\n },\n \"application/vnd.emclient.accessrequest+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.enliven\": {\n \"source\": \"iana\",\n \"extensions\": [\"nml\"]\n },\n \"application/vnd.enphase.envoy\": {\n \"source\": \"iana\"\n },\n \"application/vnd.eprints.data+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.epson.esf\": {\n \"source\": \"iana\",\n \"extensions\": [\"esf\"]\n },\n \"application/vnd.epson.msf\": {\n \"source\": \"iana\",\n \"extensions\": [\"msf\"]\n },\n \"application/vnd.epson.quickanime\": {\n \"source\": \"iana\",\n \"extensions\": [\"qam\"]\n },\n \"application/vnd.epson.salt\": {\n \"source\": \"iana\",\n \"extensions\": [\"slt\"]\n },\n \"application/vnd.epson.ssf\": {\n \"source\": \"iana\",\n \"extensions\": [\"ssf\"]\n },\n \"application/vnd.ericsson.quickcall\": {\n \"source\": \"iana\"\n },\n \"application/vnd.espass-espass+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/vnd.eszigno3+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"es3\",\"et3\"]\n },\n \"application/vnd.etsi.aoc+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.asic-e+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/vnd.etsi.asic-s+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/vnd.etsi.cug+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.iptvcommand+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.iptvdiscovery+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.iptvprofile+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.iptvsad-bc+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.iptvsad-cod+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.iptvsad-npvr+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.iptvservice+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.iptvsync+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.iptvueprofile+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.mcid+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.mheg5\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.overload-control-policy-dataset+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.pstn+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.sci+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.simservs+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.timestamp-token\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.tsl+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.tsl.der\": {\n \"source\": \"iana\"\n },\n \"application/vnd.eu.kasparian.car+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.eudora.data\": {\n \"source\": \"iana\"\n },\n \"application/vnd.evolv.ecig.profile\": {\n \"source\": \"iana\"\n },\n \"application/vnd.evolv.ecig.settings\": {\n \"source\": \"iana\"\n },\n \"application/vnd.evolv.ecig.theme\": {\n \"source\": \"iana\"\n },\n \"application/vnd.exstream-empower+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/vnd.exstream-package\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ezpix-album\": {\n \"source\": \"iana\",\n \"extensions\": [\"ez2\"]\n },\n \"application/vnd.ezpix-package\": {\n \"source\": \"iana\",\n \"extensions\": [\"ez3\"]\n },\n \"application/vnd.f-secure.mobile\": {\n \"source\": \"iana\"\n },\n \"application/vnd.familysearch.gedcom+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/vnd.fastcopy-disk-image\": {\n \"source\": \"iana\"\n },\n \"application/vnd.fdf\": {\n \"source\": \"iana\",\n \"extensions\": [\"fdf\"]\n },\n \"application/vnd.fdsn.mseed\": {\n \"source\": \"iana\",\n \"extensions\": [\"mseed\"]\n },\n \"application/vnd.fdsn.seed\": {\n \"source\": \"iana\",\n \"extensions\": [\"seed\",\"dataless\"]\n },\n \"application/vnd.ffsns\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ficlab.flb+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/vnd.filmit.zfc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.fints\": {\n \"source\": \"iana\"\n },\n \"application/vnd.firemonkeys.cloudcell\": {\n \"source\": \"iana\"\n },\n \"application/vnd.flographit\": {\n \"source\": \"iana\",\n \"extensions\": [\"gph\"]\n },\n \"application/vnd.fluxtime.clip\": {\n \"source\": \"iana\",\n \"extensions\": [\"ftc\"]\n },\n \"application/vnd.font-fontforge-sfd\": {\n \"source\": \"iana\"\n },\n \"application/vnd.framemaker\": {\n \"source\": \"iana\",\n \"extensions\": [\"fm\",\"frame\",\"maker\",\"book\"]\n },\n \"application/vnd.frogans.fnc\": {\n \"source\": \"iana\",\n \"extensions\": [\"fnc\"]\n },\n \"application/vnd.frogans.ltf\": {\n \"source\": \"iana\",\n \"extensions\": [\"ltf\"]\n },\n \"application/vnd.fsc.weblaunch\": {\n \"source\": \"iana\",\n \"extensions\": [\"fsc\"]\n },\n \"application/vnd.fujifilm.fb.docuworks\": {\n \"source\": \"iana\"\n },\n \"application/vnd.fujifilm.fb.docuworks.binder\": {\n \"source\": \"iana\"\n },\n \"application/vnd.fujifilm.fb.docuworks.container\": {\n \"source\": \"iana\"\n },\n \"application/vnd.fujifilm.fb.jfi+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.fujitsu.oasys\": {\n \"source\": \"iana\",\n \"extensions\": [\"oas\"]\n },\n \"application/vnd.fujitsu.oasys2\": {\n \"source\": \"iana\",\n \"extensions\": [\"oa2\"]\n },\n \"application/vnd.fujitsu.oasys3\": {\n \"source\": \"iana\",\n \"extensions\": [\"oa3\"]\n },\n \"application/vnd.fujitsu.oasysgp\": {\n \"source\": \"iana\",\n \"extensions\": [\"fg5\"]\n },\n \"application/vnd.fujitsu.oasysprs\": {\n \"source\": \"iana\",\n \"extensions\": [\"bh2\"]\n },\n \"application/vnd.fujixerox.art-ex\": {\n \"source\": \"iana\"\n },\n \"application/vnd.fujixerox.art4\": {\n \"source\": \"iana\"\n },\n \"application/vnd.fujixerox.ddd\": {\n \"source\": \"iana\",\n \"extensions\": [\"ddd\"]\n },\n \"application/vnd.fujixerox.docuworks\": {\n \"source\": \"iana\",\n \"extensions\": [\"xdw\"]\n },\n \"application/vnd.fujixerox.docuworks.binder\": {\n \"source\": \"iana\",\n \"extensions\": [\"xbd\"]\n },\n \"application/vnd.fujixerox.docuworks.container\": {\n \"source\": \"iana\"\n },\n \"application/vnd.fujixerox.hbpl\": {\n \"source\": \"iana\"\n },\n \"application/vnd.fut-misnet\": {\n \"source\": \"iana\"\n },\n \"application/vnd.futoin+cbor\": {\n \"source\": \"iana\"\n },\n \"application/vnd.futoin+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.fuzzysheet\": {\n \"source\": \"iana\",\n \"extensions\": [\"fzs\"]\n },\n \"application/vnd.genomatix.tuxedo\": {\n \"source\": \"iana\",\n \"extensions\": [\"txd\"]\n },\n \"application/vnd.gentics.grd+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.geo+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.geocube+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.geogebra.file\": {\n \"source\": \"iana\",\n \"extensions\": [\"ggb\"]\n },\n \"application/vnd.geogebra.slides\": {\n \"source\": \"iana\"\n },\n \"application/vnd.geogebra.tool\": {\n \"source\": \"iana\",\n \"extensions\": [\"ggt\"]\n },\n \"application/vnd.geometry-explorer\": {\n \"source\": \"iana\",\n \"extensions\": [\"gex\",\"gre\"]\n },\n \"application/vnd.geonext\": {\n \"source\": \"iana\",\n \"extensions\": [\"gxt\"]\n },\n \"application/vnd.geoplan\": {\n \"source\": \"iana\",\n \"extensions\": [\"g2w\"]\n },\n \"application/vnd.geospace\": {\n \"source\": \"iana\",\n \"extensions\": [\"g3w\"]\n },\n \"application/vnd.gerber\": {\n \"source\": \"iana\"\n },\n \"application/vnd.globalplatform.card-content-mgt\": {\n \"source\": \"iana\"\n },\n \"application/vnd.globalplatform.card-content-mgt-response\": {\n \"source\": \"iana\"\n },\n \"application/vnd.gmx\": {\n \"source\": \"iana\",\n \"extensions\": [\"gmx\"]\n },\n \"application/vnd.google-apps.document\": {\n \"compressible\": false,\n \"extensions\": [\"gdoc\"]\n },\n \"application/vnd.google-apps.presentation\": {\n \"compressible\": false,\n \"extensions\": [\"gslides\"]\n },\n \"application/vnd.google-apps.spreadsheet\": {\n \"compressible\": false,\n \"extensions\": [\"gsheet\"]\n },\n \"application/vnd.google-earth.kml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"kml\"]\n },\n \"application/vnd.google-earth.kmz\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"kmz\"]\n },\n \"application/vnd.gov.sk.e-form+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.gov.sk.e-form+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/vnd.gov.sk.xmldatacontainer+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.grafeq\": {\n \"source\": \"iana\",\n \"extensions\": [\"gqf\",\"gqs\"]\n },\n \"application/vnd.gridmp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.groove-account\": {\n \"source\": \"iana\",\n \"extensions\": [\"gac\"]\n },\n \"application/vnd.groove-help\": {\n \"source\": \"iana\",\n \"extensions\": [\"ghf\"]\n },\n \"application/vnd.groove-identity-message\": {\n \"source\": \"iana\",\n \"extensions\": [\"gim\"]\n },\n \"application/vnd.groove-injector\": {\n \"source\": \"iana\",\n \"extensions\": [\"grv\"]\n },\n \"application/vnd.groove-tool-message\": {\n \"source\": \"iana\",\n \"extensions\": [\"gtm\"]\n },\n \"application/vnd.groove-tool-template\": {\n \"source\": \"iana\",\n \"extensions\": [\"tpl\"]\n },\n \"application/vnd.groove-vcard\": {\n \"source\": \"iana\",\n \"extensions\": [\"vcg\"]\n },\n \"application/vnd.hal+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.hal+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"hal\"]\n },\n \"application/vnd.handheld-entertainment+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"zmm\"]\n },\n \"application/vnd.hbci\": {\n \"source\": \"iana\",\n \"extensions\": [\"hbci\"]\n },\n \"application/vnd.hc+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.hcl-bireports\": {\n \"source\": \"iana\"\n },\n \"application/vnd.hdt\": {\n \"source\": \"iana\"\n },\n \"application/vnd.heroku+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.hhe.lesson-player\": {\n \"source\": \"iana\",\n \"extensions\": [\"les\"]\n },\n \"application/vnd.hl7cda+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/vnd.hl7v2+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/vnd.hp-hpgl\": {\n \"source\": \"iana\",\n \"extensions\": [\"hpgl\"]\n },\n \"application/vnd.hp-hpid\": {\n \"source\": \"iana\",\n \"extensions\": [\"hpid\"]\n },\n \"application/vnd.hp-hps\": {\n \"source\": \"iana\",\n \"extensions\": [\"hps\"]\n },\n \"application/vnd.hp-jlyt\": {\n \"source\": \"iana\",\n \"extensions\": [\"jlt\"]\n },\n \"application/vnd.hp-pcl\": {\n \"source\": \"iana\",\n \"extensions\": [\"pcl\"]\n },\n \"application/vnd.hp-pclxl\": {\n \"source\": \"iana\",\n \"extensions\": [\"pclxl\"]\n },\n \"application/vnd.httphone\": {\n \"source\": \"iana\"\n },\n \"application/vnd.hydrostatix.sof-data\": {\n \"source\": \"iana\",\n \"extensions\": [\"sfd-hdstx\"]\n },\n \"application/vnd.hyper+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.hyper-item+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.hyperdrive+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.hzn-3d-crossword\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ibm.afplinedata\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ibm.electronic-media\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ibm.minipay\": {\n \"source\": \"iana\",\n \"extensions\": [\"mpy\"]\n },\n \"application/vnd.ibm.modcap\": {\n \"source\": \"iana\",\n \"extensions\": [\"afp\",\"listafp\",\"list3820\"]\n },\n \"application/vnd.ibm.rights-management\": {\n \"source\": \"iana\",\n \"extensions\": [\"irm\"]\n },\n \"application/vnd.ibm.secure-container\": {\n \"source\": \"iana\",\n \"extensions\": [\"sc\"]\n },\n \"application/vnd.iccprofile\": {\n \"source\": \"iana\",\n \"extensions\": [\"icc\",\"icm\"]\n },\n \"application/vnd.ieee.1905\": {\n \"source\": \"iana\"\n },\n \"application/vnd.igloader\": {\n \"source\": \"iana\",\n \"extensions\": [\"igl\"]\n },\n \"application/vnd.imagemeter.folder+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/vnd.imagemeter.image+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/vnd.immervision-ivp\": {\n \"source\": \"iana\",\n \"extensions\": [\"ivp\"]\n },\n \"application/vnd.immervision-ivu\": {\n \"source\": \"iana\",\n \"extensions\": [\"ivu\"]\n },\n \"application/vnd.ims.imsccv1p1\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ims.imsccv1p2\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ims.imsccv1p3\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ims.lis.v2.result+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ims.lti.v2.toolconsumerprofile+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ims.lti.v2.toolproxy+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ims.lti.v2.toolproxy.id+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ims.lti.v2.toolsettings+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ims.lti.v2.toolsettings.simple+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.informedcontrol.rms+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.informix-visionary\": {\n \"source\": \"iana\"\n },\n \"application/vnd.infotech.project\": {\n \"source\": \"iana\"\n },\n \"application/vnd.infotech.project+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.innopath.wamp.notification\": {\n \"source\": \"iana\"\n },\n \"application/vnd.insors.igm\": {\n \"source\": \"iana\",\n \"extensions\": [\"igm\"]\n },\n \"application/vnd.intercon.formnet\": {\n \"source\": \"iana\",\n \"extensions\": [\"xpw\",\"xpx\"]\n },\n \"application/vnd.intergeo\": {\n \"source\": \"iana\",\n \"extensions\": [\"i2g\"]\n },\n \"application/vnd.intertrust.digibox\": {\n \"source\": \"iana\"\n },\n \"application/vnd.intertrust.nncp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.intu.qbo\": {\n \"source\": \"iana\",\n \"extensions\": [\"qbo\"]\n },\n \"application/vnd.intu.qfx\": {\n \"source\": \"iana\",\n \"extensions\": [\"qfx\"]\n },\n \"application/vnd.iptc.g2.catalogitem+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.iptc.g2.conceptitem+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.iptc.g2.knowledgeitem+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.iptc.g2.newsitem+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.iptc.g2.newsmessage+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.iptc.g2.packageitem+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.iptc.g2.planningitem+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ipunplugged.rcprofile\": {\n \"source\": \"iana\",\n \"extensions\": [\"rcprofile\"]\n },\n \"application/vnd.irepository.package+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"irp\"]\n },\n \"application/vnd.is-xpr\": {\n \"source\": \"iana\",\n \"extensions\": [\"xpr\"]\n },\n \"application/vnd.isac.fcs\": {\n \"source\": \"iana\",\n \"extensions\": [\"fcs\"]\n },\n \"application/vnd.iso11783-10+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/vnd.jam\": {\n \"source\": \"iana\",\n \"extensions\": [\"jam\"]\n },\n \"application/vnd.japannet-directory-service\": {\n \"source\": \"iana\"\n },\n \"application/vnd.japannet-jpnstore-wakeup\": {\n \"source\": \"iana\"\n },\n \"application/vnd.japannet-payment-wakeup\": {\n \"source\": \"iana\"\n },\n \"application/vnd.japannet-registration\": {\n \"source\": \"iana\"\n },\n \"application/vnd.japannet-registration-wakeup\": {\n \"source\": \"iana\"\n },\n \"application/vnd.japannet-setstore-wakeup\": {\n \"source\": \"iana\"\n },\n \"application/vnd.japannet-verification\": {\n \"source\": \"iana\"\n },\n \"application/vnd.japannet-verification-wakeup\": {\n \"source\": \"iana\"\n },\n \"application/vnd.jcp.javame.midlet-rms\": {\n \"source\": \"iana\",\n \"extensions\": [\"rms\"]\n },\n \"application/vnd.jisp\": {\n \"source\": \"iana\",\n \"extensions\": [\"jisp\"]\n },\n \"application/vnd.joost.joda-archive\": {\n \"source\": \"iana\",\n \"extensions\": [\"joda\"]\n },\n \"application/vnd.jsk.isdn-ngn\": {\n \"source\": \"iana\"\n },\n \"application/vnd.kahootz\": {\n \"source\": \"iana\",\n \"extensions\": [\"ktz\",\"ktr\"]\n },\n \"application/vnd.kde.karbon\": {\n \"source\": \"iana\",\n \"extensions\": [\"karbon\"]\n },\n \"application/vnd.kde.kchart\": {\n \"source\": \"iana\",\n \"extensions\": [\"chrt\"]\n },\n \"application/vnd.kde.kformula\": {\n \"source\": \"iana\",\n \"extensions\": [\"kfo\"]\n },\n \"application/vnd.kde.kivio\": {\n \"source\": \"iana\",\n \"extensions\": [\"flw\"]\n },\n \"application/vnd.kde.kontour\": {\n \"source\": \"iana\",\n \"extensions\": [\"kon\"]\n },\n \"application/vnd.kde.kpresenter\": {\n \"source\": \"iana\",\n \"extensions\": [\"kpr\",\"kpt\"]\n },\n \"application/vnd.kde.kspread\": {\n \"source\": \"iana\",\n \"extensions\": [\"ksp\"]\n },\n \"application/vnd.kde.kword\": {\n \"source\": \"iana\",\n \"extensions\": [\"kwd\",\"kwt\"]\n },\n \"application/vnd.kenameaapp\": {\n \"source\": \"iana\",\n \"extensions\": [\"htke\"]\n },\n \"application/vnd.kidspiration\": {\n \"source\": \"iana\",\n \"extensions\": [\"kia\"]\n },\n \"application/vnd.kinar\": {\n \"source\": \"iana\",\n \"extensions\": [\"kne\",\"knp\"]\n },\n \"application/vnd.koan\": {\n \"source\": \"iana\",\n \"extensions\": [\"skp\",\"skd\",\"skt\",\"skm\"]\n },\n \"application/vnd.kodak-descriptor\": {\n \"source\": \"iana\",\n \"extensions\": [\"sse\"]\n },\n \"application/vnd.las\": {\n \"source\": \"iana\"\n },\n \"application/vnd.las.las+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.las.las+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"lasxml\"]\n },\n \"application/vnd.laszip\": {\n \"source\": \"iana\"\n },\n \"application/vnd.leap+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.liberty-request+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.llamagraphics.life-balance.desktop\": {\n \"source\": \"iana\",\n \"extensions\": [\"lbd\"]\n },\n \"application/vnd.llamagraphics.life-balance.exchange+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"lbe\"]\n },\n \"application/vnd.logipipe.circuit+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/vnd.loom\": {\n \"source\": \"iana\"\n },\n \"application/vnd.lotus-1-2-3\": {\n \"source\": \"iana\",\n \"extensions\": [\"123\"]\n },\n \"application/vnd.lotus-approach\": {\n \"source\": \"iana\",\n \"extensions\": [\"apr\"]\n },\n \"application/vnd.lotus-freelance\": {\n \"source\": \"iana\",\n \"extensions\": [\"pre\"]\n },\n \"application/vnd.lotus-notes\": {\n \"source\": \"iana\",\n \"extensions\": [\"nsf\"]\n },\n \"application/vnd.lotus-organizer\": {\n \"source\": \"iana\",\n \"extensions\": [\"org\"]\n },\n \"application/vnd.lotus-screencam\": {\n \"source\": \"iana\",\n \"extensions\": [\"scm\"]\n },\n \"application/vnd.lotus-wordpro\": {\n \"source\": \"iana\",\n \"extensions\": [\"lwp\"]\n },\n \"application/vnd.macports.portpkg\": {\n \"source\": \"iana\",\n \"extensions\": [\"portpkg\"]\n },\n \"application/vnd.mapbox-vector-tile\": {\n \"source\": \"iana\",\n \"extensions\": [\"mvt\"]\n },\n \"application/vnd.marlin.drm.actiontoken+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.marlin.drm.conftoken+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.marlin.drm.license+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.marlin.drm.mdcf\": {\n \"source\": \"iana\"\n },\n \"application/vnd.mason+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.maxar.archive.3tz+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/vnd.maxmind.maxmind-db\": {\n \"source\": \"iana\"\n },\n \"application/vnd.mcd\": {\n \"source\": \"iana\",\n \"extensions\": [\"mcd\"]\n },\n \"application/vnd.medcalcdata\": {\n \"source\": \"iana\",\n \"extensions\": [\"mc1\"]\n },\n \"application/vnd.mediastation.cdkey\": {\n \"source\": \"iana\",\n \"extensions\": [\"cdkey\"]\n },\n \"application/vnd.meridian-slingshot\": {\n \"source\": \"iana\"\n },\n \"application/vnd.mfer\": {\n \"source\": \"iana\",\n \"extensions\": [\"mwf\"]\n },\n \"application/vnd.mfmp\": {\n \"source\": \"iana\",\n \"extensions\": [\"mfm\"]\n },\n \"application/vnd.micro+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.micrografx.flo\": {\n \"source\": \"iana\",\n \"extensions\": [\"flo\"]\n },\n \"application/vnd.micrografx.igx\": {\n \"source\": \"iana\",\n \"extensions\": [\"igx\"]\n },\n \"application/vnd.microsoft.portable-executable\": {\n \"source\": \"iana\"\n },\n \"application/vnd.microsoft.windows.thumbnail-cache\": {\n \"source\": \"iana\"\n },\n \"application/vnd.miele+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.mif\": {\n \"source\": \"iana\",\n \"extensions\": [\"mif\"]\n },\n \"application/vnd.minisoft-hp3000-save\": {\n \"source\": \"iana\"\n },\n \"application/vnd.mitsubishi.misty-guard.trustweb\": {\n \"source\": \"iana\"\n },\n \"application/vnd.mobius.daf\": {\n \"source\": \"iana\",\n \"extensions\": [\"daf\"]\n },\n \"application/vnd.mobius.dis\": {\n \"source\": \"iana\",\n \"extensions\": [\"dis\"]\n },\n \"application/vnd.mobius.mbk\": {\n \"source\": \"iana\",\n \"extensions\": [\"mbk\"]\n },\n \"application/vnd.mobius.mqy\": {\n \"source\": \"iana\",\n \"extensions\": [\"mqy\"]\n },\n \"application/vnd.mobius.msl\": {\n \"source\": \"iana\",\n \"extensions\": [\"msl\"]\n },\n \"application/vnd.mobius.plc\": {\n \"source\": \"iana\",\n \"extensions\": [\"plc\"]\n },\n \"application/vnd.mobius.txf\": {\n \"source\": \"iana\",\n \"extensions\": [\"txf\"]\n },\n \"application/vnd.mophun.application\": {\n \"source\": \"iana\",\n \"extensions\": [\"mpn\"]\n },\n \"application/vnd.mophun.certificate\": {\n \"source\": \"iana\",\n \"extensions\": [\"mpc\"]\n },\n \"application/vnd.motorola.flexsuite\": {\n \"source\": \"iana\"\n },\n \"application/vnd.motorola.flexsuite.adsi\": {\n \"source\": \"iana\"\n },\n \"application/vnd.motorola.flexsuite.fis\": {\n \"source\": \"iana\"\n },\n \"application/vnd.motorola.flexsuite.gotap\": {\n \"source\": \"iana\"\n },\n \"application/vnd.motorola.flexsuite.kmr\": {\n \"source\": \"iana\"\n },\n \"application/vnd.motorola.flexsuite.ttc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.motorola.flexsuite.wem\": {\n \"source\": \"iana\"\n },\n \"application/vnd.motorola.iprm\": {\n \"source\": \"iana\"\n },\n \"application/vnd.mozilla.xul+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xul\"]\n },\n \"application/vnd.ms-3mfdocument\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-artgalry\": {\n \"source\": \"iana\",\n \"extensions\": [\"cil\"]\n },\n \"application/vnd.ms-asf\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-cab-compressed\": {\n \"source\": \"iana\",\n \"extensions\": [\"cab\"]\n },\n \"application/vnd.ms-color.iccprofile\": {\n \"source\": \"apache\"\n },\n \"application/vnd.ms-excel\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"xls\",\"xlm\",\"xla\",\"xlc\",\"xlt\",\"xlw\"]\n },\n \"application/vnd.ms-excel.addin.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"xlam\"]\n },\n \"application/vnd.ms-excel.sheet.binary.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"xlsb\"]\n },\n \"application/vnd.ms-excel.sheet.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"xlsm\"]\n },\n \"application/vnd.ms-excel.template.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"xltm\"]\n },\n \"application/vnd.ms-fontobject\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"eot\"]\n },\n \"application/vnd.ms-htmlhelp\": {\n \"source\": \"iana\",\n \"extensions\": [\"chm\"]\n },\n \"application/vnd.ms-ims\": {\n \"source\": \"iana\",\n \"extensions\": [\"ims\"]\n },\n \"application/vnd.ms-lrm\": {\n \"source\": \"iana\",\n \"extensions\": [\"lrm\"]\n },\n \"application/vnd.ms-office.activex+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ms-officetheme\": {\n \"source\": \"iana\",\n \"extensions\": [\"thmx\"]\n },\n \"application/vnd.ms-opentype\": {\n \"source\": \"apache\",\n \"compressible\": true\n },\n \"application/vnd.ms-outlook\": {\n \"compressible\": false,\n \"extensions\": [\"msg\"]\n },\n \"application/vnd.ms-package.obfuscated-opentype\": {\n \"source\": \"apache\"\n },\n \"application/vnd.ms-pki.seccat\": {\n \"source\": \"apache\",\n \"extensions\": [\"cat\"]\n },\n \"application/vnd.ms-pki.stl\": {\n \"source\": \"apache\",\n \"extensions\": [\"stl\"]\n },\n \"application/vnd.ms-playready.initiator+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ms-powerpoint\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"ppt\",\"pps\",\"pot\"]\n },\n \"application/vnd.ms-powerpoint.addin.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"ppam\"]\n },\n \"application/vnd.ms-powerpoint.presentation.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"pptm\"]\n },\n \"application/vnd.ms-powerpoint.slide.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"sldm\"]\n },\n \"application/vnd.ms-powerpoint.slideshow.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"ppsm\"]\n },\n \"application/vnd.ms-powerpoint.template.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"potm\"]\n },\n \"application/vnd.ms-printdevicecapabilities+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ms-printing.printticket+xml\": {\n \"source\": \"apache\",\n \"compressible\": true\n },\n \"application/vnd.ms-printschematicket+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ms-project\": {\n \"source\": \"iana\",\n \"extensions\": [\"mpp\",\"mpt\"]\n },\n \"application/vnd.ms-tnef\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-windows.devicepairing\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-windows.nwprinting.oob\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-windows.printerpairing\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-windows.wsd.oob\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-wmdrm.lic-chlg-req\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-wmdrm.lic-resp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-wmdrm.meter-chlg-req\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-wmdrm.meter-resp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-word.document.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"docm\"]\n },\n \"application/vnd.ms-word.template.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"dotm\"]\n },\n \"application/vnd.ms-works\": {\n \"source\": \"iana\",\n \"extensions\": [\"wps\",\"wks\",\"wcm\",\"wdb\"]\n },\n \"application/vnd.ms-wpl\": {\n \"source\": \"iana\",\n \"extensions\": [\"wpl\"]\n },\n \"application/vnd.ms-xpsdocument\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"xps\"]\n },\n \"application/vnd.msa-disk-image\": {\n \"source\": \"iana\"\n },\n \"application/vnd.mseq\": {\n \"source\": \"iana\",\n \"extensions\": [\"mseq\"]\n },\n \"application/vnd.msign\": {\n \"source\": \"iana\"\n },\n \"application/vnd.multiad.creator\": {\n \"source\": \"iana\"\n },\n \"application/vnd.multiad.creator.cif\": {\n \"source\": \"iana\"\n },\n \"application/vnd.music-niff\": {\n \"source\": \"iana\"\n },\n \"application/vnd.musician\": {\n \"source\": \"iana\",\n \"extensions\": [\"mus\"]\n },\n \"application/vnd.muvee.style\": {\n \"source\": \"iana\",\n \"extensions\": [\"msty\"]\n },\n \"application/vnd.mynfc\": {\n \"source\": \"iana\",\n \"extensions\": [\"taglet\"]\n },\n \"application/vnd.nacamar.ybrid+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ncd.control\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ncd.reference\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nearst.inv+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.nebumind.line\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nervana\": {\n \"source\": \"iana\"\n },\n \"application/vnd.netfpx\": {\n \"source\": \"iana\"\n },\n \"application/vnd.neurolanguage.nlu\": {\n \"source\": \"iana\",\n \"extensions\": [\"nlu\"]\n },\n \"application/vnd.nimn\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nintendo.nitro.rom\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nintendo.snes.rom\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nitf\": {\n \"source\": \"iana\",\n \"extensions\": [\"ntf\",\"nitf\"]\n },\n \"application/vnd.noblenet-directory\": {\n \"source\": \"iana\",\n \"extensions\": [\"nnd\"]\n },\n \"application/vnd.noblenet-sealer\": {\n \"source\": \"iana\",\n \"extensions\": [\"nns\"]\n },\n \"application/vnd.noblenet-web\": {\n \"source\": \"iana\",\n \"extensions\": [\"nnw\"]\n },\n \"application/vnd.nokia.catalogs\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nokia.conml+wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nokia.conml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.nokia.iptv.config+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.nokia.isds-radio-presets\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nokia.landmark+wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nokia.landmark+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.nokia.landmarkcollection+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.nokia.n-gage.ac+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"ac\"]\n },\n \"application/vnd.nokia.n-gage.data\": {\n \"source\": \"iana\",\n \"extensions\": [\"ngdat\"]\n },\n \"application/vnd.nokia.n-gage.symbian.install\": {\n \"source\": \"iana\",\n \"extensions\": [\"n-gage\"]\n },\n \"application/vnd.nokia.ncd\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nokia.pcd+wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nokia.pcd+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.nokia.radio-preset\": {\n \"source\": \"iana\",\n \"extensions\": [\"rpst\"]\n },\n \"application/vnd.nokia.radio-presets\": {\n \"source\": \"iana\",\n \"extensions\": [\"rpss\"]\n },\n \"application/vnd.novadigm.edm\": {\n \"source\": \"iana\",\n \"extensions\": [\"edm\"]\n },\n \"application/vnd.novadigm.edx\": {\n \"source\": \"iana\",\n \"extensions\": [\"edx\"]\n },\n \"application/vnd.novadigm.ext\": {\n \"source\": \"iana\",\n \"extensions\": [\"ext\"]\n },\n \"application/vnd.ntt-local.content-share\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ntt-local.file-transfer\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ntt-local.ogw_remote-access\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ntt-local.sip-ta_remote\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ntt-local.sip-ta_tcp_stream\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oasis.opendocument.chart\": {\n \"source\": \"iana\",\n \"extensions\": [\"odc\"]\n },\n \"application/vnd.oasis.opendocument.chart-template\": {\n \"source\": \"iana\",\n \"extensions\": [\"otc\"]\n },\n \"application/vnd.oasis.opendocument.database\": {\n \"source\": \"iana\",\n \"extensions\": [\"odb\"]\n },\n \"application/vnd.oasis.opendocument.formula\": {\n \"source\": \"iana\",\n \"extensions\": [\"odf\"]\n },\n \"application/vnd.oasis.opendocument.formula-template\": {\n \"source\": \"iana\",\n \"extensions\": [\"odft\"]\n },\n \"application/vnd.oasis.opendocument.graphics\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"odg\"]\n },\n \"application/vnd.oasis.opendocument.graphics-template\": {\n \"source\": \"iana\",\n \"extensions\": [\"otg\"]\n },\n \"application/vnd.oasis.opendocument.image\": {\n \"source\": \"iana\",\n \"extensions\": [\"odi\"]\n },\n \"application/vnd.oasis.opendocument.image-template\": {\n \"source\": \"iana\",\n \"extensions\": [\"oti\"]\n },\n \"application/vnd.oasis.opendocument.presentation\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"odp\"]\n },\n \"application/vnd.oasis.opendocument.presentation-template\": {\n \"source\": \"iana\",\n \"extensions\": [\"otp\"]\n },\n \"application/vnd.oasis.opendocument.spreadsheet\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"ods\"]\n },\n \"application/vnd.oasis.opendocument.spreadsheet-template\": {\n \"source\": \"iana\",\n \"extensions\": [\"ots\"]\n },\n \"application/vnd.oasis.opendocument.text\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"odt\"]\n },\n \"application/vnd.oasis.opendocument.text-master\": {\n \"source\": \"iana\",\n \"extensions\": [\"odm\"]\n },\n \"application/vnd.oasis.opendocument.text-template\": {\n \"source\": \"iana\",\n \"extensions\": [\"ott\"]\n },\n \"application/vnd.oasis.opendocument.text-web\": {\n \"source\": \"iana\",\n \"extensions\": [\"oth\"]\n },\n \"application/vnd.obn\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ocf+cbor\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oci.image.manifest.v1+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oftn.l10n+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oipf.contentaccessdownload+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oipf.contentaccessstreaming+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oipf.cspg-hexbinary\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oipf.dae.svg+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oipf.dae.xhtml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oipf.mippvcontrolmessage+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oipf.pae.gem\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oipf.spdiscovery+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oipf.spdlist+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oipf.ueprofile+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oipf.userprofile+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.olpc-sugar\": {\n \"source\": \"iana\",\n \"extensions\": [\"xo\"]\n },\n \"application/vnd.oma-scws-config\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma-scws-http-request\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma-scws-http-response\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.associated-procedure-parameter+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.bcast.drm-trigger+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.bcast.imd+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.bcast.ltkm\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.notification+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.bcast.provisioningtrigger\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.sgboot\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.sgdd+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.bcast.sgdu\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.simple-symbol-container\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.smartcard-trigger+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.bcast.sprov+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.bcast.stkm\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.cab-address-book+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.cab-feature-handler+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.cab-pcc+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.cab-subs-invite+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.cab-user-prefs+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.dcd\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.dcdc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.dd2+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"dd2\"]\n },\n \"application/vnd.oma.drm.risd+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.group-usage-list+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.lwm2m+cbor\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.lwm2m+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.lwm2m+tlv\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.pal+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.poc.detailed-progress-report+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.poc.final-report+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.poc.groups+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.poc.invocation-descriptor+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.poc.optimized-progress-report+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.push\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.scidm.messages+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.xcap-directory+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.omads-email+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/vnd.omads-file+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/vnd.omads-folder+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/vnd.omaloc-supl-init\": {\n \"source\": \"iana\"\n },\n \"application/vnd.onepager\": {\n \"source\": \"iana\"\n },\n \"application/vnd.onepagertamp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.onepagertamx\": {\n \"source\": \"iana\"\n },\n \"application/vnd.onepagertat\": {\n \"source\": \"iana\"\n },\n \"application/vnd.onepagertatp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.onepagertatx\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openblox.game+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"obgx\"]\n },\n \"application/vnd.openblox.game-binary\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openeye.oeb\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openofficeorg.extension\": {\n \"source\": \"apache\",\n \"extensions\": [\"oxt\"]\n },\n \"application/vnd.openstreetmap.data+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"osm\"]\n },\n \"application/vnd.opentimestamps.ots\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.custom-properties+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.customxmlproperties+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.drawing+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.drawingml.chart+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.extended-properties+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.comments+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.presentation\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"pptx\"]\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.presprops+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.slide\": {\n \"source\": \"iana\",\n \"extensions\": [\"sldx\"]\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.slide+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.slideshow\": {\n \"source\": \"iana\",\n \"extensions\": [\"ppsx\"]\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.tags+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.template\": {\n \"source\": \"iana\",\n \"extensions\": [\"potx\"]\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.template.main+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"xlsx\"]\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.template\": {\n \"source\": \"iana\",\n \"extensions\": [\"xltx\"]\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.theme+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.themeoverride+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.vmldrawing\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"docx\"]\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.template\": {\n \"source\": \"iana\",\n \"extensions\": [\"dotx\"]\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-package.core-properties+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-package.relationships+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oracle.resource+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.orange.indata\": {\n \"source\": \"iana\"\n },\n \"application/vnd.osa.netdeploy\": {\n \"source\": \"iana\"\n },\n \"application/vnd.osgeo.mapguide.package\": {\n \"source\": \"iana\",\n \"extensions\": [\"mgp\"]\n },\n \"application/vnd.osgi.bundle\": {\n \"source\": \"iana\"\n },\n \"application/vnd.osgi.dp\": {\n \"source\": \"iana\",\n \"extensions\": [\"dp\"]\n },\n \"application/vnd.osgi.subsystem\": {\n \"source\": \"iana\",\n \"extensions\": [\"esa\"]\n },\n \"application/vnd.otps.ct-kip+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oxli.countgraph\": {\n \"source\": \"iana\"\n },\n \"application/vnd.pagerduty+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.palm\": {\n \"source\": \"iana\",\n \"extensions\": [\"pdb\",\"pqa\",\"oprc\"]\n },\n \"application/vnd.panoply\": {\n \"source\": \"iana\"\n },\n \"application/vnd.paos.xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.patentdive\": {\n \"source\": \"iana\"\n },\n \"application/vnd.patientecommsdoc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.pawaafile\": {\n \"source\": \"iana\",\n \"extensions\": [\"paw\"]\n },\n \"application/vnd.pcos\": {\n \"source\": \"iana\"\n },\n \"application/vnd.pg.format\": {\n \"source\": \"iana\",\n \"extensions\": [\"str\"]\n },\n \"application/vnd.pg.osasli\": {\n \"source\": \"iana\",\n \"extensions\": [\"ei6\"]\n },\n \"application/vnd.piaccess.application-licence\": {\n \"source\": \"iana\"\n },\n \"application/vnd.picsel\": {\n \"source\": \"iana\",\n \"extensions\": [\"efif\"]\n },\n \"application/vnd.pmi.widget\": {\n \"source\": \"iana\",\n \"extensions\": [\"wg\"]\n },\n \"application/vnd.poc.group-advertisement+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.pocketlearn\": {\n \"source\": \"iana\",\n \"extensions\": [\"plf\"]\n },\n \"application/vnd.powerbuilder6\": {\n \"source\": \"iana\",\n \"extensions\": [\"pbd\"]\n },\n \"application/vnd.powerbuilder6-s\": {\n \"source\": \"iana\"\n },\n \"application/vnd.powerbuilder7\": {\n \"source\": \"iana\"\n },\n \"application/vnd.powerbuilder7-s\": {\n \"source\": \"iana\"\n },\n \"application/vnd.powerbuilder75\": {\n \"source\": \"iana\"\n },\n \"application/vnd.powerbuilder75-s\": {\n \"source\": \"iana\"\n },\n \"application/vnd.preminet\": {\n \"source\": \"iana\"\n },\n \"application/vnd.previewsystems.box\": {\n \"source\": \"iana\",\n \"extensions\": [\"box\"]\n },\n \"application/vnd.proteus.magazine\": {\n \"source\": \"iana\",\n \"extensions\": [\"mgz\"]\n },\n \"application/vnd.psfs\": {\n \"source\": \"iana\"\n },\n \"application/vnd.publishare-delta-tree\": {\n \"source\": \"iana\",\n \"extensions\": [\"qps\"]\n },\n \"application/vnd.pvi.ptid1\": {\n \"source\": \"iana\",\n \"extensions\": [\"ptid\"]\n },\n \"application/vnd.pwg-multiplexed\": {\n \"source\": \"iana\"\n },\n \"application/vnd.pwg-xhtml-print+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.qualcomm.brew-app-res\": {\n \"source\": \"iana\"\n },\n \"application/vnd.quarantainenet\": {\n \"source\": \"iana\"\n },\n \"application/vnd.quark.quarkxpress\": {\n \"source\": \"iana\",\n \"extensions\": [\"qxd\",\"qxt\",\"qwd\",\"qwt\",\"qxl\",\"qxb\"]\n },\n \"application/vnd.quobject-quoxdocument\": {\n \"source\": \"iana\"\n },\n \"application/vnd.radisys.moml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.radisys.msml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.radisys.msml-audit+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.radisys.msml-audit-conf+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.radisys.msml-audit-conn+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.radisys.msml-audit-dialog+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.radisys.msml-audit-stream+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.radisys.msml-conf+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.radisys.msml-dialog+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.radisys.msml-dialog-base+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.radisys.msml-dialog-fax-detect+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.radisys.msml-dialog-fax-sendrecv+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.radisys.msml-dialog-group+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.radisys.msml-dialog-speech+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.radisys.msml-dialog-transform+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.rainstor.data\": {\n \"source\": \"iana\"\n },\n \"application/vnd.rapid\": {\n \"source\": \"iana\"\n },\n \"application/vnd.rar\": {\n \"source\": \"iana\",\n \"extensions\": [\"rar\"]\n },\n \"application/vnd.realvnc.bed\": {\n \"source\": \"iana\",\n \"extensions\": [\"bed\"]\n },\n \"application/vnd.recordare.musicxml\": {\n \"source\": \"iana\",\n \"extensions\": [\"mxl\"]\n },\n \"application/vnd.recordare.musicxml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"musicxml\"]\n },\n \"application/vnd.renlearn.rlprint\": {\n \"source\": \"iana\"\n },\n \"application/vnd.resilient.logic\": {\n \"source\": \"iana\"\n },\n \"application/vnd.restful+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.rig.cryptonote\": {\n \"source\": \"iana\",\n \"extensions\": [\"cryptonote\"]\n },\n \"application/vnd.rim.cod\": {\n \"source\": \"apache\",\n \"extensions\": [\"cod\"]\n },\n \"application/vnd.rn-realmedia\": {\n \"source\": \"apache\",\n \"extensions\": [\"rm\"]\n },\n \"application/vnd.rn-realmedia-vbr\": {\n \"source\": \"apache\",\n \"extensions\": [\"rmvb\"]\n },\n \"application/vnd.route66.link66+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"link66\"]\n },\n \"application/vnd.rs-274x\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ruckus.download\": {\n \"source\": \"iana\"\n },\n \"application/vnd.s3sms\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sailingtracker.track\": {\n \"source\": \"iana\",\n \"extensions\": [\"st\"]\n },\n \"application/vnd.sar\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sbm.cid\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sbm.mid2\": {\n \"source\": \"iana\"\n },\n \"application/vnd.scribus\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.3df\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.csf\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.doc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.eml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.mht\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.net\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.ppt\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.tiff\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.xls\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealedmedia.softseal.html\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealedmedia.softseal.pdf\": {\n \"source\": \"iana\"\n },\n \"application/vnd.seemail\": {\n \"source\": \"iana\",\n \"extensions\": [\"see\"]\n },\n \"application/vnd.seis+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.sema\": {\n \"source\": \"iana\",\n \"extensions\": [\"sema\"]\n },\n \"application/vnd.semd\": {\n \"source\": \"iana\",\n \"extensions\": [\"semd\"]\n },\n \"application/vnd.semf\": {\n \"source\": \"iana\",\n \"extensions\": [\"semf\"]\n },\n \"application/vnd.shade-save-file\": {\n \"source\": \"iana\"\n },\n \"application/vnd.shana.informed.formdata\": {\n \"source\": \"iana\",\n \"extensions\": [\"ifm\"]\n },\n \"application/vnd.shana.informed.formtemplate\": {\n \"source\": \"iana\",\n \"extensions\": [\"itp\"]\n },\n \"application/vnd.shana.informed.interchange\": {\n \"source\": \"iana\",\n \"extensions\": [\"iif\"]\n },\n \"application/vnd.shana.informed.package\": {\n \"source\": \"iana\",\n \"extensions\": [\"ipk\"]\n },\n \"application/vnd.shootproof+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.shopkick+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.shp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.shx\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sigrok.session\": {\n \"source\": \"iana\"\n },\n \"application/vnd.simtech-mindmapper\": {\n \"source\": \"iana\",\n \"extensions\": [\"twd\",\"twds\"]\n },\n \"application/vnd.siren+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.smaf\": {\n \"source\": \"iana\",\n \"extensions\": [\"mmf\"]\n },\n \"application/vnd.smart.notebook\": {\n \"source\": \"iana\"\n },\n \"application/vnd.smart.teacher\": {\n \"source\": \"iana\",\n \"extensions\": [\"teacher\"]\n },\n \"application/vnd.snesdev-page-table\": {\n \"source\": \"iana\"\n },\n \"application/vnd.software602.filler.form+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"fo\"]\n },\n \"application/vnd.software602.filler.form-xml-zip\": {\n \"source\": \"iana\"\n },\n \"application/vnd.solent.sdkm+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"sdkm\",\"sdkd\"]\n },\n \"application/vnd.spotfire.dxp\": {\n \"source\": \"iana\",\n \"extensions\": [\"dxp\"]\n },\n \"application/vnd.spotfire.sfs\": {\n \"source\": \"iana\",\n \"extensions\": [\"sfs\"]\n },\n \"application/vnd.sqlite3\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sss-cod\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sss-dtf\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sss-ntf\": {\n \"source\": \"iana\"\n },\n \"application/vnd.stardivision.calc\": {\n \"source\": \"apache\",\n \"extensions\": [\"sdc\"]\n },\n \"application/vnd.stardivision.draw\": {\n \"source\": \"apache\",\n \"extensions\": [\"sda\"]\n },\n \"application/vnd.stardivision.impress\": {\n \"source\": \"apache\",\n \"extensions\": [\"sdd\"]\n },\n \"application/vnd.stardivision.math\": {\n \"source\": \"apache\",\n \"extensions\": [\"smf\"]\n },\n \"application/vnd.stardivision.writer\": {\n \"source\": \"apache\",\n \"extensions\": [\"sdw\",\"vor\"]\n },\n \"application/vnd.stardivision.writer-global\": {\n \"source\": \"apache\",\n \"extensions\": [\"sgl\"]\n },\n \"application/vnd.stepmania.package\": {\n \"source\": \"iana\",\n \"extensions\": [\"smzip\"]\n },\n \"application/vnd.stepmania.stepchart\": {\n \"source\": \"iana\",\n \"extensions\": [\"sm\"]\n },\n \"application/vnd.street-stream\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sun.wadl+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"wadl\"]\n },\n \"application/vnd.sun.xml.calc\": {\n \"source\": \"apache\",\n \"extensions\": [\"sxc\"]\n },\n \"application/vnd.sun.xml.calc.template\": {\n \"source\": \"apache\",\n \"extensions\": [\"stc\"]\n },\n \"application/vnd.sun.xml.draw\": {\n \"source\": \"apache\",\n \"extensions\": [\"sxd\"]\n },\n \"application/vnd.sun.xml.draw.template\": {\n \"source\": \"apache\",\n \"extensions\": [\"std\"]\n },\n \"application/vnd.sun.xml.impress\": {\n \"source\": \"apache\",\n \"extensions\": [\"sxi\"]\n },\n \"application/vnd.sun.xml.impress.template\": {\n \"source\": \"apache\",\n \"extensions\": [\"sti\"]\n },\n \"application/vnd.sun.xml.math\": {\n \"source\": \"apache\",\n \"extensions\": [\"sxm\"]\n },\n \"application/vnd.sun.xml.writer\": {\n \"source\": \"apache\",\n \"extensions\": [\"sxw\"]\n },\n \"application/vnd.sun.xml.writer.global\": {\n \"source\": \"apache\",\n \"extensions\": [\"sxg\"]\n },\n \"application/vnd.sun.xml.writer.template\": {\n \"source\": \"apache\",\n \"extensions\": [\"stw\"]\n },\n \"application/vnd.sus-calendar\": {\n \"source\": \"iana\",\n \"extensions\": [\"sus\",\"susp\"]\n },\n \"application/vnd.svd\": {\n \"source\": \"iana\",\n \"extensions\": [\"svd\"]\n },\n \"application/vnd.swiftview-ics\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sycle+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.syft+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.symbian.install\": {\n \"source\": \"apache\",\n \"extensions\": [\"sis\",\"sisx\"]\n },\n \"application/vnd.syncml+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true,\n \"extensions\": [\"xsm\"]\n },\n \"application/vnd.syncml.dm+wbxml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"extensions\": [\"bdm\"]\n },\n \"application/vnd.syncml.dm+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true,\n \"extensions\": [\"xdm\"]\n },\n \"application/vnd.syncml.dm.notification\": {\n \"source\": \"iana\"\n },\n \"application/vnd.syncml.dmddf+wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.syncml.dmddf+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true,\n \"extensions\": [\"ddf\"]\n },\n \"application/vnd.syncml.dmtnds+wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.syncml.dmtnds+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/vnd.syncml.ds.notification\": {\n \"source\": \"iana\"\n },\n \"application/vnd.tableschema+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.tao.intent-module-archive\": {\n \"source\": \"iana\",\n \"extensions\": [\"tao\"]\n },\n \"application/vnd.tcpdump.pcap\": {\n \"source\": \"iana\",\n \"extensions\": [\"pcap\",\"cap\",\"dmp\"]\n },\n \"application/vnd.think-cell.ppttc+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.tmd.mediaflex.api+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.tml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.tmobile-livetv\": {\n \"source\": \"iana\",\n \"extensions\": [\"tmo\"]\n },\n \"application/vnd.tri.onesource\": {\n \"source\": \"iana\"\n },\n \"application/vnd.trid.tpt\": {\n \"source\": \"iana\",\n \"extensions\": [\"tpt\"]\n },\n \"application/vnd.triscape.mxs\": {\n \"source\": \"iana\",\n \"extensions\": [\"mxs\"]\n },\n \"application/vnd.trueapp\": {\n \"source\": \"iana\",\n \"extensions\": [\"tra\"]\n },\n \"application/vnd.truedoc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ubisoft.webplayer\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ufdl\": {\n \"source\": \"iana\",\n \"extensions\": [\"ufd\",\"ufdl\"]\n },\n \"application/vnd.uiq.theme\": {\n \"source\": \"iana\",\n \"extensions\": [\"utz\"]\n },\n \"application/vnd.umajin\": {\n \"source\": \"iana\",\n \"extensions\": [\"umj\"]\n },\n \"application/vnd.unity\": {\n \"source\": \"iana\",\n \"extensions\": [\"unityweb\"]\n },\n \"application/vnd.uoml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"uoml\"]\n },\n \"application/vnd.uplanet.alert\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.alert-wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.bearer-choice\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.bearer-choice-wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.cacheop\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.cacheop-wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.channel\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.channel-wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.list\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.list-wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.listcmd\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.listcmd-wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.signal\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uri-map\": {\n \"source\": \"iana\"\n },\n \"application/vnd.valve.source.material\": {\n \"source\": \"iana\"\n },\n \"application/vnd.vcx\": {\n \"source\": \"iana\",\n \"extensions\": [\"vcx\"]\n },\n \"application/vnd.vd-study\": {\n \"source\": \"iana\"\n },\n \"application/vnd.vectorworks\": {\n \"source\": \"iana\"\n },\n \"application/vnd.vel+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.verimatrix.vcas\": {\n \"source\": \"iana\"\n },\n \"application/vnd.veritone.aion+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.veryant.thin\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ves.encrypted\": {\n \"source\": \"iana\"\n },\n \"application/vnd.vidsoft.vidconference\": {\n \"source\": \"iana\"\n },\n \"application/vnd.visio\": {\n \"source\": \"iana\",\n \"extensions\": [\"vsd\",\"vst\",\"vss\",\"vsw\"]\n },\n \"application/vnd.visionary\": {\n \"source\": \"iana\",\n \"extensions\": [\"vis\"]\n },\n \"application/vnd.vividence.scriptfile\": {\n \"source\": \"iana\"\n },\n \"application/vnd.vsf\": {\n \"source\": \"iana\",\n \"extensions\": [\"vsf\"]\n },\n \"application/vnd.wap.sic\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wap.slc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wap.wbxml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"extensions\": [\"wbxml\"]\n },\n \"application/vnd.wap.wmlc\": {\n \"source\": \"iana\",\n \"extensions\": [\"wmlc\"]\n },\n \"application/vnd.wap.wmlscriptc\": {\n \"source\": \"iana\",\n \"extensions\": [\"wmlsc\"]\n },\n \"application/vnd.webturbo\": {\n \"source\": \"iana\",\n \"extensions\": [\"wtb\"]\n },\n \"application/vnd.wfa.dpp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wfa.p2p\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wfa.wsc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.windows.devicepairing\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wmc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wmf.bootstrap\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wolfram.mathematica\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wolfram.mathematica.package\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wolfram.player\": {\n \"source\": \"iana\",\n \"extensions\": [\"nbp\"]\n },\n \"application/vnd.wordperfect\": {\n \"source\": \"iana\",\n \"extensions\": [\"wpd\"]\n },\n \"application/vnd.wqd\": {\n \"source\": \"iana\",\n \"extensions\": [\"wqd\"]\n },\n \"application/vnd.wrq-hp3000-labelled\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wt.stf\": {\n \"source\": \"iana\",\n \"extensions\": [\"stf\"]\n },\n \"application/vnd.wv.csp+wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wv.csp+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.wv.ssp+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.xacml+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.xara\": {\n \"source\": \"iana\",\n \"extensions\": [\"xar\"]\n },\n \"application/vnd.xfdl\": {\n \"source\": \"iana\",\n \"extensions\": [\"xfdl\"]\n },\n \"application/vnd.xfdl.webform\": {\n \"source\": \"iana\"\n },\n \"application/vnd.xmi+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.xmpie.cpkg\": {\n \"source\": \"iana\"\n },\n \"application/vnd.xmpie.dpkg\": {\n \"source\": \"iana\"\n },\n \"application/vnd.xmpie.plan\": {\n \"source\": \"iana\"\n },\n \"application/vnd.xmpie.ppkg\": {\n \"source\": \"iana\"\n },\n \"application/vnd.xmpie.xlim\": {\n \"source\": \"iana\"\n },\n \"application/vnd.yamaha.hv-dic\": {\n \"source\": \"iana\",\n \"extensions\": [\"hvd\"]\n },\n \"application/vnd.yamaha.hv-script\": {\n \"source\": \"iana\",\n \"extensions\": [\"hvs\"]\n },\n \"application/vnd.yamaha.hv-voice\": {\n \"source\": \"iana\",\n \"extensions\": [\"hvp\"]\n },\n \"application/vnd.yamaha.openscoreformat\": {\n \"source\": \"iana\",\n \"extensions\": [\"osf\"]\n },\n \"application/vnd.yamaha.openscoreformat.osfpvg+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"osfpvg\"]\n },\n \"application/vnd.yamaha.remote-setup\": {\n \"source\": \"iana\"\n },\n \"application/vnd.yamaha.smaf-audio\": {\n \"source\": \"iana\",\n \"extensions\": [\"saf\"]\n },\n \"application/vnd.yamaha.smaf-phrase\": {\n \"source\": \"iana\",\n \"extensions\": [\"spf\"]\n },\n \"application/vnd.yamaha.through-ngn\": {\n \"source\": \"iana\"\n },\n \"application/vnd.yamaha.tunnel-udpencap\": {\n \"source\": \"iana\"\n },\n \"application/vnd.yaoweme\": {\n \"source\": \"iana\"\n },\n \"application/vnd.yellowriver-custom-menu\": {\n \"source\": \"iana\",\n \"extensions\": [\"cmp\"]\n },\n \"application/vnd.youtube.yt\": {\n \"source\": \"iana\"\n },\n \"application/vnd.zul\": {\n \"source\": \"iana\",\n \"extensions\": [\"zir\",\"zirz\"]\n },\n \"application/vnd.zzazz.deck+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"zaz\"]\n },\n \"application/voicexml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"vxml\"]\n },\n \"application/voucher-cms+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vq-rtcpxr\": {\n \"source\": \"iana\"\n },\n \"application/wasm\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"wasm\"]\n },\n \"application/watcherinfo+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"wif\"]\n },\n \"application/webpush-options+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/whoispp-query\": {\n \"source\": \"iana\"\n },\n \"application/whoispp-response\": {\n \"source\": \"iana\"\n },\n \"application/widget\": {\n \"source\": \"iana\",\n \"extensions\": [\"wgt\"]\n },\n \"application/winhlp\": {\n \"source\": \"apache\",\n \"extensions\": [\"hlp\"]\n },\n \"application/wita\": {\n \"source\": \"iana\"\n },\n \"application/wordperfect5.1\": {\n \"source\": \"iana\"\n },\n \"application/wsdl+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"wsdl\"]\n },\n \"application/wspolicy+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"wspolicy\"]\n },\n \"application/x-7z-compressed\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"7z\"]\n },\n \"application/x-abiword\": {\n \"source\": \"apache\",\n \"extensions\": [\"abw\"]\n },\n \"application/x-ace-compressed\": {\n \"source\": \"apache\",\n \"extensions\": [\"ace\"]\n },\n \"application/x-amf\": {\n \"source\": \"apache\"\n },\n \"application/x-apple-diskimage\": {\n \"source\": \"apache\",\n \"extensions\": [\"dmg\"]\n },\n \"application/x-arj\": {\n \"compressible\": false,\n \"extensions\": [\"arj\"]\n },\n \"application/x-authorware-bin\": {\n \"source\": \"apache\",\n \"extensions\": [\"aab\",\"x32\",\"u32\",\"vox\"]\n },\n \"application/x-authorware-map\": {\n \"source\": \"apache\",\n \"extensions\": [\"aam\"]\n },\n \"application/x-authorware-seg\": {\n \"source\": \"apache\",\n \"extensions\": [\"aas\"]\n },\n \"application/x-bcpio\": {\n \"source\": \"apache\",\n \"extensions\": [\"bcpio\"]\n },\n \"application/x-bdoc\": {\n \"compressible\": false,\n \"extensions\": [\"bdoc\"]\n },\n \"application/x-bittorrent\": {\n \"source\": \"apache\",\n \"extensions\": [\"torrent\"]\n },\n \"application/x-blorb\": {\n \"source\": \"apache\",\n \"extensions\": [\"blb\",\"blorb\"]\n },\n \"application/x-bzip\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"bz\"]\n },\n \"application/x-bzip2\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"bz2\",\"boz\"]\n },\n \"application/x-cbr\": {\n \"source\": \"apache\",\n \"extensions\": [\"cbr\",\"cba\",\"cbt\",\"cbz\",\"cb7\"]\n },\n \"application/x-cdlink\": {\n \"source\": \"apache\",\n \"extensions\": [\"vcd\"]\n },\n \"application/x-cfs-compressed\": {\n \"source\": \"apache\",\n \"extensions\": [\"cfs\"]\n },\n \"application/x-chat\": {\n \"source\": \"apache\",\n \"extensions\": [\"chat\"]\n },\n \"application/x-chess-pgn\": {\n \"source\": \"apache\",\n \"extensions\": [\"pgn\"]\n },\n \"application/x-chrome-extension\": {\n \"extensions\": [\"crx\"]\n },\n \"application/x-cocoa\": {\n \"source\": \"nginx\",\n \"extensions\": [\"cco\"]\n },\n \"application/x-compress\": {\n \"source\": \"apache\"\n },\n \"application/x-conference\": {\n \"source\": \"apache\",\n \"extensions\": [\"nsc\"]\n },\n \"application/x-cpio\": {\n \"source\": \"apache\",\n \"extensions\": [\"cpio\"]\n },\n \"application/x-csh\": {\n \"source\": \"apache\",\n \"extensions\": [\"csh\"]\n },\n \"application/x-deb\": {\n \"compressible\": false\n },\n \"application/x-debian-package\": {\n \"source\": \"apache\",\n \"extensions\": [\"deb\",\"udeb\"]\n },\n \"application/x-dgc-compressed\": {\n \"source\": \"apache\",\n \"extensions\": [\"dgc\"]\n },\n \"application/x-director\": {\n \"source\": \"apache\",\n \"extensions\": [\"dir\",\"dcr\",\"dxr\",\"cst\",\"cct\",\"cxt\",\"w3d\",\"fgd\",\"swa\"]\n },\n \"application/x-doom\": {\n \"source\": \"apache\",\n \"extensions\": [\"wad\"]\n },\n \"application/x-dtbncx+xml\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"ncx\"]\n },\n \"application/x-dtbook+xml\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"dtb\"]\n },\n \"application/x-dtbresource+xml\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"res\"]\n },\n \"application/x-dvi\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"dvi\"]\n },\n \"application/x-envoy\": {\n \"source\": \"apache\",\n \"extensions\": [\"evy\"]\n },\n \"application/x-eva\": {\n \"source\": \"apache\",\n \"extensions\": [\"eva\"]\n },\n \"application/x-font-bdf\": {\n \"source\": \"apache\",\n \"extensions\": [\"bdf\"]\n },\n \"application/x-font-dos\": {\n \"source\": \"apache\"\n },\n \"application/x-font-framemaker\": {\n \"source\": \"apache\"\n },\n \"application/x-font-ghostscript\": {\n \"source\": \"apache\",\n \"extensions\": [\"gsf\"]\n },\n \"application/x-font-libgrx\": {\n \"source\": \"apache\"\n },\n \"application/x-font-linux-psf\": {\n \"source\": \"apache\",\n \"extensions\": [\"psf\"]\n },\n \"application/x-font-pcf\": {\n \"source\": \"apache\",\n \"extensions\": [\"pcf\"]\n },\n \"application/x-font-snf\": {\n \"source\": \"apache\",\n \"extensions\": [\"snf\"]\n },\n \"application/x-font-speedo\": {\n \"source\": \"apache\"\n },\n \"application/x-font-sunos-news\": {\n \"source\": \"apache\"\n },\n \"application/x-font-type1\": {\n \"source\": \"apache\",\n \"extensions\": [\"pfa\",\"pfb\",\"pfm\",\"afm\"]\n },\n \"application/x-font-vfont\": {\n \"source\": \"apache\"\n },\n \"application/x-freearc\": {\n \"source\": \"apache\",\n \"extensions\": [\"arc\"]\n },\n \"application/x-futuresplash\": {\n \"source\": \"apache\",\n \"extensions\": [\"spl\"]\n },\n \"application/x-gca-compressed\": {\n \"source\": \"apache\",\n \"extensions\": [\"gca\"]\n },\n \"application/x-glulx\": {\n \"source\": \"apache\",\n \"extensions\": [\"ulx\"]\n },\n \"application/x-gnumeric\": {\n \"source\": \"apache\",\n \"extensions\": [\"gnumeric\"]\n },\n \"application/x-gramps-xml\": {\n \"source\": \"apache\",\n \"extensions\": [\"gramps\"]\n },\n \"application/x-gtar\": {\n \"source\": \"apache\",\n \"extensions\": [\"gtar\"]\n },\n \"application/x-gzip\": {\n \"source\": \"apache\"\n },\n \"application/x-hdf\": {\n \"source\": \"apache\",\n \"extensions\": [\"hdf\"]\n },\n \"application/x-httpd-php\": {\n \"compressible\": true,\n \"extensions\": [\"php\"]\n },\n \"application/x-install-instructions\": {\n \"source\": \"apache\",\n \"extensions\": [\"install\"]\n },\n \"application/x-iso9660-image\": {\n \"source\": \"apache\",\n \"extensions\": [\"iso\"]\n },\n \"application/x-iwork-keynote-sffkey\": {\n \"extensions\": [\"key\"]\n },\n \"application/x-iwork-numbers-sffnumbers\": {\n \"extensions\": [\"numbers\"]\n },\n \"application/x-iwork-pages-sffpages\": {\n \"extensions\": [\"pages\"]\n },\n \"application/x-java-archive-diff\": {\n \"source\": \"nginx\",\n \"extensions\": [\"jardiff\"]\n },\n \"application/x-java-jnlp-file\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"jnlp\"]\n },\n \"application/x-javascript\": {\n \"compressible\": true\n },\n \"application/x-keepass2\": {\n \"extensions\": [\"kdbx\"]\n },\n \"application/x-latex\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"latex\"]\n },\n \"application/x-lua-bytecode\": {\n \"extensions\": [\"luac\"]\n },\n \"application/x-lzh-compressed\": {\n \"source\": \"apache\",\n \"extensions\": [\"lzh\",\"lha\"]\n },\n \"application/x-makeself\": {\n \"source\": \"nginx\",\n \"extensions\": [\"run\"]\n },\n \"application/x-mie\": {\n \"source\": \"apache\",\n \"extensions\": [\"mie\"]\n },\n \"application/x-mobipocket-ebook\": {\n \"source\": \"apache\",\n \"extensions\": [\"prc\",\"mobi\"]\n },\n \"application/x-mpegurl\": {\n \"compressible\": false\n },\n \"application/x-ms-application\": {\n \"source\": \"apache\",\n \"extensions\": [\"application\"]\n },\n \"application/x-ms-shortcut\": {\n \"source\": \"apache\",\n \"extensions\": [\"lnk\"]\n },\n \"application/x-ms-wmd\": {\n \"source\": \"apache\",\n \"extensions\": [\"wmd\"]\n },\n \"application/x-ms-wmz\": {\n \"source\": \"apache\",\n \"extensions\": [\"wmz\"]\n },\n \"application/x-ms-xbap\": {\n \"source\": \"apache\",\n \"extensions\": [\"xbap\"]\n },\n \"application/x-msaccess\": {\n \"source\": \"apache\",\n \"extensions\": [\"mdb\"]\n },\n \"application/x-msbinder\": {\n \"source\": \"apache\",\n \"extensions\": [\"obd\"]\n },\n \"application/x-mscardfile\": {\n \"source\": \"apache\",\n \"extensions\": [\"crd\"]\n },\n \"application/x-msclip\": {\n \"source\": \"apache\",\n \"extensions\": [\"clp\"]\n },\n \"application/x-msdos-program\": {\n \"extensions\": [\"exe\"]\n },\n \"application/x-msdownload\": {\n \"source\": \"apache\",\n \"extensions\": [\"exe\",\"dll\",\"com\",\"bat\",\"msi\"]\n },\n \"application/x-msmediaview\": {\n \"source\": \"apache\",\n \"extensions\": [\"mvb\",\"m13\",\"m14\"]\n },\n \"application/x-msmetafile\": {\n \"source\": \"apache\",\n \"extensions\": [\"wmf\",\"wmz\",\"emf\",\"emz\"]\n },\n \"application/x-msmoney\": {\n \"source\": \"apache\",\n \"extensions\": [\"mny\"]\n },\n \"application/x-mspublisher\": {\n \"source\": \"apache\",\n \"extensions\": [\"pub\"]\n },\n \"application/x-msschedule\": {\n \"source\": \"apache\",\n \"extensions\": [\"scd\"]\n },\n \"application/x-msterminal\": {\n \"source\": \"apache\",\n \"extensions\": [\"trm\"]\n },\n \"application/x-mswrite\": {\n \"source\": \"apache\",\n \"extensions\": [\"wri\"]\n },\n \"application/x-netcdf\": {\n \"source\": \"apache\",\n \"extensions\": [\"nc\",\"cdf\"]\n },\n \"application/x-ns-proxy-autoconfig\": {\n \"compressible\": true,\n \"extensions\": [\"pac\"]\n },\n \"application/x-nzb\": {\n \"source\": \"apache\",\n \"extensions\": [\"nzb\"]\n },\n \"application/x-perl\": {\n \"source\": \"nginx\",\n \"extensions\": [\"pl\",\"pm\"]\n },\n \"application/x-pilot\": {\n \"source\": \"nginx\",\n \"extensions\": [\"prc\",\"pdb\"]\n },\n \"application/x-pkcs12\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"p12\",\"pfx\"]\n },\n \"application/x-pkcs7-certificates\": {\n \"source\": \"apache\",\n \"extensions\": [\"p7b\",\"spc\"]\n },\n \"application/x-pkcs7-certreqresp\": {\n \"source\": \"apache\",\n \"extensions\": [\"p7r\"]\n },\n \"application/x-pki-message\": {\n \"source\": \"iana\"\n },\n \"application/x-rar-compressed\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"rar\"]\n },\n \"application/x-redhat-package-manager\": {\n \"source\": \"nginx\",\n \"extensions\": [\"rpm\"]\n },\n \"application/x-research-info-systems\": {\n \"source\": \"apache\",\n \"extensions\": [\"ris\"]\n },\n \"application/x-sea\": {\n \"source\": \"nginx\",\n \"extensions\": [\"sea\"]\n },\n \"application/x-sh\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"sh\"]\n },\n \"application/x-shar\": {\n \"source\": \"apache\",\n \"extensions\": [\"shar\"]\n },\n \"application/x-shockwave-flash\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"swf\"]\n },\n \"application/x-silverlight-app\": {\n \"source\": \"apache\",\n \"extensions\": [\"xap\"]\n },\n \"application/x-sql\": {\n \"source\": \"apache\",\n \"extensions\": [\"sql\"]\n },\n \"application/x-stuffit\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"sit\"]\n },\n \"application/x-stuffitx\": {\n \"source\": \"apache\",\n \"extensions\": [\"sitx\"]\n },\n \"application/x-subrip\": {\n \"source\": \"apache\",\n \"extensions\": [\"srt\"]\n },\n \"application/x-sv4cpio\": {\n \"source\": \"apache\",\n \"extensions\": [\"sv4cpio\"]\n },\n \"application/x-sv4crc\": {\n \"source\": \"apache\",\n \"extensions\": [\"sv4crc\"]\n },\n \"application/x-t3vm-image\": {\n \"source\": \"apache\",\n \"extensions\": [\"t3\"]\n },\n \"application/x-tads\": {\n \"source\": \"apache\",\n \"extensions\": [\"gam\"]\n },\n \"application/x-tar\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"tar\"]\n },\n \"application/x-tcl\": {\n \"source\": \"apache\",\n \"extensions\": [\"tcl\",\"tk\"]\n },\n \"application/x-tex\": {\n \"source\": \"apache\",\n \"extensions\": [\"tex\"]\n },\n \"application/x-tex-tfm\": {\n \"source\": \"apache\",\n \"extensions\": [\"tfm\"]\n },\n \"application/x-texinfo\": {\n \"source\": \"apache\",\n \"extensions\": [\"texinfo\",\"texi\"]\n },\n \"application/x-tgif\": {\n \"source\": \"apache\",\n \"extensions\": [\"obj\"]\n },\n \"application/x-ustar\": {\n \"source\": \"apache\",\n \"extensions\": [\"ustar\"]\n },\n \"application/x-virtualbox-hdd\": {\n \"compressible\": true,\n \"extensions\": [\"hdd\"]\n },\n \"application/x-virtualbox-ova\": {\n \"compressible\": true,\n \"extensions\": [\"ova\"]\n },\n \"application/x-virtualbox-ovf\": {\n \"compressible\": true,\n \"extensions\": [\"ovf\"]\n },\n \"application/x-virtualbox-vbox\": {\n \"compressible\": true,\n \"extensions\": [\"vbox\"]\n },\n \"application/x-virtualbox-vbox-extpack\": {\n \"compressible\": false,\n \"extensions\": [\"vbox-extpack\"]\n },\n \"application/x-virtualbox-vdi\": {\n \"compressible\": true,\n \"extensions\": [\"vdi\"]\n },\n \"application/x-virtualbox-vhd\": {\n \"compressible\": true,\n \"extensions\": [\"vhd\"]\n },\n \"application/x-virtualbox-vmdk\": {\n \"compressible\": true,\n \"extensions\": [\"vmdk\"]\n },\n \"application/x-wais-source\": {\n \"source\": \"apache\",\n \"extensions\": [\"src\"]\n },\n \"application/x-web-app-manifest+json\": {\n \"compressible\": true,\n \"extensions\": [\"webapp\"]\n },\n \"application/x-www-form-urlencoded\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/x-x509-ca-cert\": {\n \"source\": \"iana\",\n \"extensions\": [\"der\",\"crt\",\"pem\"]\n },\n \"application/x-x509-ca-ra-cert\": {\n \"source\": \"iana\"\n },\n \"application/x-x509-next-ca-cert\": {\n \"source\": \"iana\"\n },\n \"application/x-xfig\": {\n \"source\": \"apache\",\n \"extensions\": [\"fig\"]\n },\n \"application/x-xliff+xml\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"xlf\"]\n },\n \"application/x-xpinstall\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"xpi\"]\n },\n \"application/x-xz\": {\n \"source\": \"apache\",\n \"extensions\": [\"xz\"]\n },\n \"application/x-zmachine\": {\n \"source\": \"apache\",\n \"extensions\": [\"z1\",\"z2\",\"z3\",\"z4\",\"z5\",\"z6\",\"z7\",\"z8\"]\n },\n \"application/x400-bp\": {\n \"source\": \"iana\"\n },\n \"application/xacml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/xaml+xml\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"xaml\"]\n },\n \"application/xcap-att+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xav\"]\n },\n \"application/xcap-caps+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xca\"]\n },\n \"application/xcap-diff+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xdf\"]\n },\n \"application/xcap-el+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xel\"]\n },\n \"application/xcap-error+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/xcap-ns+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xns\"]\n },\n \"application/xcon-conference-info+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/xcon-conference-info-diff+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/xenc+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xenc\"]\n },\n \"application/xhtml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xhtml\",\"xht\"]\n },\n \"application/xhtml-voice+xml\": {\n \"source\": \"apache\",\n \"compressible\": true\n },\n \"application/xliff+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xlf\"]\n },\n \"application/xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xml\",\"xsl\",\"xsd\",\"rng\"]\n },\n \"application/xml-dtd\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"dtd\"]\n },\n \"application/xml-external-parsed-entity\": {\n \"source\": \"iana\"\n },\n \"application/xml-patch+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/xmpp+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/xop+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xop\"]\n },\n \"application/xproc+xml\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"xpl\"]\n },\n \"application/xslt+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xsl\",\"xslt\"]\n },\n \"application/xspf+xml\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"xspf\"]\n },\n \"application/xv+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"mxml\",\"xhvml\",\"xvml\",\"xvm\"]\n },\n \"application/yang\": {\n \"source\": \"iana\",\n \"extensions\": [\"yang\"]\n },\n \"application/yang-data+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/yang-data+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/yang-patch+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/yang-patch+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/yin+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"yin\"]\n },\n \"application/zip\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"zip\"]\n },\n \"application/zlib\": {\n \"source\": \"iana\"\n },\n \"application/zstd\": {\n \"source\": \"iana\"\n },\n \"audio/1d-interleaved-parityfec\": {\n \"source\": \"iana\"\n },\n \"audio/32kadpcm\": {\n \"source\": \"iana\"\n },\n \"audio/3gpp\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"3gpp\"]\n },\n \"audio/3gpp2\": {\n \"source\": \"iana\"\n },\n \"audio/aac\": {\n \"source\": \"iana\"\n },\n \"audio/ac3\": {\n \"source\": \"iana\"\n },\n \"audio/adpcm\": {\n \"source\": \"apache\",\n \"extensions\": [\"adp\"]\n },\n \"audio/amr\": {\n \"source\": \"iana\",\n \"extensions\": [\"amr\"]\n },\n \"audio/amr-wb\": {\n \"source\": \"iana\"\n },\n \"audio/amr-wb+\": {\n \"source\": \"iana\"\n },\n \"audio/aptx\": {\n \"source\": \"iana\"\n },\n \"audio/asc\": {\n \"source\": \"iana\"\n },\n \"audio/atrac-advanced-lossless\": {\n \"source\": \"iana\"\n },\n \"audio/atrac-x\": {\n \"source\": \"iana\"\n },\n \"audio/atrac3\": {\n \"source\": \"iana\"\n },\n \"audio/basic\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"au\",\"snd\"]\n },\n \"audio/bv16\": {\n \"source\": \"iana\"\n },\n \"audio/bv32\": {\n \"source\": \"iana\"\n },\n \"audio/clearmode\": {\n \"source\": \"iana\"\n },\n \"audio/cn\": {\n \"source\": \"iana\"\n },\n \"audio/dat12\": {\n \"source\": \"iana\"\n },\n \"audio/dls\": {\n \"source\": \"iana\"\n },\n \"audio/dsr-es201108\": {\n \"source\": \"iana\"\n },\n \"audio/dsr-es202050\": {\n \"source\": \"iana\"\n },\n \"audio/dsr-es202211\": {\n \"source\": \"iana\"\n },\n \"audio/dsr-es202212\": {\n \"source\": \"iana\"\n },\n \"audio/dv\": {\n \"source\": \"iana\"\n },\n \"audio/dvi4\": {\n \"source\": \"iana\"\n },\n \"audio/eac3\": {\n \"source\": \"iana\"\n },\n \"audio/encaprtp\": {\n \"source\": \"iana\"\n },\n \"audio/evrc\": {\n \"source\": \"iana\"\n },\n \"audio/evrc-qcp\": {\n \"source\": \"iana\"\n },\n \"audio/evrc0\": {\n \"source\": \"iana\"\n },\n \"audio/evrc1\": {\n \"source\": \"iana\"\n },\n \"audio/evrcb\": {\n \"source\": \"iana\"\n },\n \"audio/evrcb0\": {\n \"source\": \"iana\"\n },\n \"audio/evrcb1\": {\n \"source\": \"iana\"\n },\n \"audio/evrcnw\": {\n \"source\": \"iana\"\n },\n \"audio/evrcnw0\": {\n \"source\": \"iana\"\n },\n \"audio/evrcnw1\": {\n \"source\": \"iana\"\n },\n \"audio/evrcwb\": {\n \"source\": \"iana\"\n },\n \"audio/evrcwb0\": {\n \"source\": \"iana\"\n },\n \"audio/evrcwb1\": {\n \"source\": \"iana\"\n },\n \"audio/evs\": {\n \"source\": \"iana\"\n },\n \"audio/flexfec\": {\n \"source\": \"iana\"\n },\n \"audio/fwdred\": {\n \"source\": \"iana\"\n },\n \"audio/g711-0\": {\n \"source\": \"iana\"\n },\n \"audio/g719\": {\n \"source\": \"iana\"\n },\n \"audio/g722\": {\n \"source\": \"iana\"\n },\n \"audio/g7221\": {\n \"source\": \"iana\"\n },\n \"audio/g723\": {\n \"source\": \"iana\"\n },\n \"audio/g726-16\": {\n \"source\": \"iana\"\n },\n \"audio/g726-24\": {\n \"source\": \"iana\"\n },\n \"audio/g726-32\": {\n \"source\": \"iana\"\n },\n \"audio/g726-40\": {\n \"source\": \"iana\"\n },\n \"audio/g728\": {\n \"source\": \"iana\"\n },\n \"audio/g729\": {\n \"source\": \"iana\"\n },\n \"audio/g7291\": {\n \"source\": \"iana\"\n },\n \"audio/g729d\": {\n \"source\": \"iana\"\n },\n \"audio/g729e\": {\n \"source\": \"iana\"\n },\n \"audio/gsm\": {\n \"source\": \"iana\"\n },\n \"audio/gsm-efr\": {\n \"source\": \"iana\"\n },\n \"audio/gsm-hr-08\": {\n \"source\": \"iana\"\n },\n \"audio/ilbc\": {\n \"source\": \"iana\"\n },\n \"audio/ip-mr_v2.5\": {\n \"source\": \"iana\"\n },\n \"audio/isac\": {\n \"source\": \"apache\"\n },\n \"audio/l16\": {\n \"source\": \"iana\"\n },\n \"audio/l20\": {\n \"source\": \"iana\"\n },\n \"audio/l24\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"audio/l8\": {\n \"source\": \"iana\"\n },\n \"audio/lpc\": {\n \"source\": \"iana\"\n },\n \"audio/melp\": {\n \"source\": \"iana\"\n },\n \"audio/melp1200\": {\n \"source\": \"iana\"\n },\n \"audio/melp2400\": {\n \"source\": \"iana\"\n },\n \"audio/melp600\": {\n \"source\": \"iana\"\n },\n \"audio/mhas\": {\n \"source\": \"iana\"\n },\n \"audio/midi\": {\n \"source\": \"apache\",\n \"extensions\": [\"mid\",\"midi\",\"kar\",\"rmi\"]\n },\n \"audio/mobile-xmf\": {\n \"source\": \"iana\",\n \"extensions\": [\"mxmf\"]\n },\n \"audio/mp3\": {\n \"compressible\": false,\n \"extensions\": [\"mp3\"]\n },\n \"audio/mp4\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"m4a\",\"mp4a\"]\n },\n \"audio/mp4a-latm\": {\n \"source\": \"iana\"\n },\n \"audio/mpa\": {\n \"source\": \"iana\"\n },\n \"audio/mpa-robust\": {\n \"source\": \"iana\"\n },\n \"audio/mpeg\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"mpga\",\"mp2\",\"mp2a\",\"mp3\",\"m2a\",\"m3a\"]\n },\n \"audio/mpeg4-generic\": {\n \"source\": \"iana\"\n },\n \"audio/musepack\": {\n \"source\": \"apache\"\n },\n \"audio/ogg\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"oga\",\"ogg\",\"spx\",\"opus\"]\n },\n \"audio/opus\": {\n \"source\": \"iana\"\n },\n \"audio/parityfec\": {\n \"source\": \"iana\"\n },\n \"audio/pcma\": {\n \"source\": \"iana\"\n },\n \"audio/pcma-wb\": {\n \"source\": \"iana\"\n },\n \"audio/pcmu\": {\n \"source\": \"iana\"\n },\n \"audio/pcmu-wb\": {\n \"source\": \"iana\"\n },\n \"audio/prs.sid\": {\n \"source\": \"iana\"\n },\n \"audio/qcelp\": {\n \"source\": \"iana\"\n },\n \"audio/raptorfec\": {\n \"source\": \"iana\"\n },\n \"audio/red\": {\n \"source\": \"iana\"\n },\n \"audio/rtp-enc-aescm128\": {\n \"source\": \"iana\"\n },\n \"audio/rtp-midi\": {\n \"source\": \"iana\"\n },\n \"audio/rtploopback\": {\n \"source\": \"iana\"\n },\n \"audio/rtx\": {\n \"source\": \"iana\"\n },\n \"audio/s3m\": {\n \"source\": \"apache\",\n \"extensions\": [\"s3m\"]\n },\n \"audio/scip\": {\n \"source\": \"iana\"\n },\n \"audio/silk\": {\n \"source\": \"apache\",\n \"extensions\": [\"sil\"]\n },\n \"audio/smv\": {\n \"source\": \"iana\"\n },\n \"audio/smv-qcp\": {\n \"source\": \"iana\"\n },\n \"audio/smv0\": {\n \"source\": \"iana\"\n },\n \"audio/sofa\": {\n \"source\": \"iana\"\n },\n \"audio/sp-midi\": {\n \"source\": \"iana\"\n },\n \"audio/speex\": {\n \"source\": \"iana\"\n },\n \"audio/t140c\": {\n \"source\": \"iana\"\n },\n \"audio/t38\": {\n \"source\": \"iana\"\n },\n \"audio/telephone-event\": {\n \"source\": \"iana\"\n },\n \"audio/tetra_acelp\": {\n \"source\": \"iana\"\n },\n \"audio/tetra_acelp_bb\": {\n \"source\": \"iana\"\n },\n \"audio/tone\": {\n \"source\": \"iana\"\n },\n \"audio/tsvcis\": {\n \"source\": \"iana\"\n },\n \"audio/uemclip\": {\n \"source\": \"iana\"\n },\n \"audio/ulpfec\": {\n \"source\": \"iana\"\n },\n \"audio/usac\": {\n \"source\": \"iana\"\n },\n \"audio/vdvi\": {\n \"source\": \"iana\"\n },\n \"audio/vmr-wb\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.3gpp.iufp\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.4sb\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.audiokoz\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.celp\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.cisco.nse\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.cmles.radio-events\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.cns.anp1\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.cns.inf1\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dece.audio\": {\n \"source\": \"iana\",\n \"extensions\": [\"uva\",\"uvva\"]\n },\n \"audio/vnd.digital-winds\": {\n \"source\": \"iana\",\n \"extensions\": [\"eol\"]\n },\n \"audio/vnd.dlna.adts\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dolby.heaac.1\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dolby.heaac.2\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dolby.mlp\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dolby.mps\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dolby.pl2\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dolby.pl2x\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dolby.pl2z\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dolby.pulse.1\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dra\": {\n \"source\": \"iana\",\n \"extensions\": [\"dra\"]\n },\n \"audio/vnd.dts\": {\n \"source\": \"iana\",\n \"extensions\": [\"dts\"]\n },\n \"audio/vnd.dts.hd\": {\n \"source\": \"iana\",\n \"extensions\": [\"dtshd\"]\n },\n \"audio/vnd.dts.uhd\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dvb.file\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.everad.plj\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.hns.audio\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.lucent.voice\": {\n \"source\": \"iana\",\n \"extensions\": [\"lvp\"]\n },\n \"audio/vnd.ms-playready.media.pya\": {\n \"source\": \"iana\",\n \"extensions\": [\"pya\"]\n },\n \"audio/vnd.nokia.mobile-xmf\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.nortel.vbk\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.nuera.ecelp4800\": {\n \"source\": \"iana\",\n \"extensions\": [\"ecelp4800\"]\n },\n \"audio/vnd.nuera.ecelp7470\": {\n \"source\": \"iana\",\n \"extensions\": [\"ecelp7470\"]\n },\n \"audio/vnd.nuera.ecelp9600\": {\n \"source\": \"iana\",\n \"extensions\": [\"ecelp9600\"]\n },\n \"audio/vnd.octel.sbc\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.presonus.multitrack\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.qcelp\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.rhetorex.32kadpcm\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.rip\": {\n \"source\": \"iana\",\n \"extensions\": [\"rip\"]\n },\n \"audio/vnd.rn-realaudio\": {\n \"compressible\": false\n },\n \"audio/vnd.sealedmedia.softseal.mpeg\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.vmx.cvsd\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.wave\": {\n \"compressible\": false\n },\n \"audio/vorbis\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"audio/vorbis-config\": {\n \"source\": \"iana\"\n },\n \"audio/wav\": {\n \"compressible\": false,\n \"extensions\": [\"wav\"]\n },\n \"audio/wave\": {\n \"compressible\": false,\n \"extensions\": [\"wav\"]\n },\n \"audio/webm\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"weba\"]\n },\n \"audio/x-aac\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"aac\"]\n },\n \"audio/x-aiff\": {\n \"source\": \"apache\",\n \"extensions\": [\"aif\",\"aiff\",\"aifc\"]\n },\n \"audio/x-caf\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"caf\"]\n },\n \"audio/x-flac\": {\n \"source\": \"apache\",\n \"extensions\": [\"flac\"]\n },\n \"audio/x-m4a\": {\n \"source\": \"nginx\",\n \"extensions\": [\"m4a\"]\n },\n \"audio/x-matroska\": {\n \"source\": \"apache\",\n \"extensions\": [\"mka\"]\n },\n \"audio/x-mpegurl\": {\n \"source\": \"apache\",\n \"extensions\": [\"m3u\"]\n },\n \"audio/x-ms-wax\": {\n \"source\": \"apache\",\n \"extensions\": [\"wax\"]\n },\n \"audio/x-ms-wma\": {\n \"source\": \"apache\",\n \"extensions\": [\"wma\"]\n },\n \"audio/x-pn-realaudio\": {\n \"source\": \"apache\",\n \"extensions\": [\"ram\",\"ra\"]\n },\n \"audio/x-pn-realaudio-plugin\": {\n \"source\": \"apache\",\n \"extensions\": [\"rmp\"]\n },\n \"audio/x-realaudio\": {\n \"source\": \"nginx\",\n \"extensions\": [\"ra\"]\n },\n \"audio/x-tta\": {\n \"source\": \"apache\"\n },\n \"audio/x-wav\": {\n \"source\": \"apache\",\n \"extensions\": [\"wav\"]\n },\n \"audio/xm\": {\n \"source\": \"apache\",\n \"extensions\": [\"xm\"]\n },\n \"chemical/x-cdx\": {\n \"source\": \"apache\",\n \"extensions\": [\"cdx\"]\n },\n \"chemical/x-cif\": {\n \"source\": \"apache\",\n \"extensions\": [\"cif\"]\n },\n \"chemical/x-cmdf\": {\n \"source\": \"apache\",\n \"extensions\": [\"cmdf\"]\n },\n \"chemical/x-cml\": {\n \"source\": \"apache\",\n \"extensions\": [\"cml\"]\n },\n \"chemical/x-csml\": {\n \"source\": \"apache\",\n \"extensions\": [\"csml\"]\n },\n \"chemical/x-pdb\": {\n \"source\": \"apache\"\n },\n \"chemical/x-xyz\": {\n \"source\": \"apache\",\n \"extensions\": [\"xyz\"]\n },\n \"font/collection\": {\n \"source\": \"iana\",\n \"extensions\": [\"ttc\"]\n },\n \"font/otf\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"otf\"]\n },\n \"font/sfnt\": {\n \"source\": \"iana\"\n },\n \"font/ttf\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"ttf\"]\n },\n \"font/woff\": {\n \"source\": \"iana\",\n \"extensions\": [\"woff\"]\n },\n \"font/woff2\": {\n \"source\": \"iana\",\n \"extensions\": [\"woff2\"]\n },\n \"image/aces\": {\n \"source\": \"iana\",\n \"extensions\": [\"exr\"]\n },\n \"image/apng\": {\n \"compressible\": false,\n \"extensions\": [\"apng\"]\n },\n \"image/avci\": {\n \"source\": \"iana\",\n \"extensions\": [\"avci\"]\n },\n \"image/avcs\": {\n \"source\": \"iana\",\n \"extensions\": [\"avcs\"]\n },\n \"image/avif\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"avif\"]\n },\n \"image/bmp\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"bmp\"]\n },\n \"image/cgm\": {\n \"source\": \"iana\",\n \"extensions\": [\"cgm\"]\n },\n \"image/dicom-rle\": {\n \"source\": \"iana\",\n \"extensions\": [\"drle\"]\n },\n \"image/emf\": {\n \"source\": \"iana\",\n \"extensions\": [\"emf\"]\n },\n \"image/fits\": {\n \"source\": \"iana\",\n \"extensions\": [\"fits\"]\n },\n \"image/g3fax\": {\n \"source\": \"iana\",\n \"extensions\": [\"g3\"]\n },\n \"image/gif\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"gif\"]\n },\n \"image/heic\": {\n \"source\": \"iana\",\n \"extensions\": [\"heic\"]\n },\n \"image/heic-sequence\": {\n \"source\": \"iana\",\n \"extensions\": [\"heics\"]\n },\n \"image/heif\": {\n \"source\": \"iana\",\n \"extensions\": [\"heif\"]\n },\n \"image/heif-sequence\": {\n \"source\": \"iana\",\n \"extensions\": [\"heifs\"]\n },\n \"image/hej2k\": {\n \"source\": \"iana\",\n \"extensions\": [\"hej2\"]\n },\n \"image/hsj2\": {\n \"source\": \"iana\",\n \"extensions\": [\"hsj2\"]\n },\n \"image/ief\": {\n \"source\": \"iana\",\n \"extensions\": [\"ief\"]\n },\n \"image/jls\": {\n \"source\": \"iana\",\n \"extensions\": [\"jls\"]\n },\n \"image/jp2\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"jp2\",\"jpg2\"]\n },\n \"image/jpeg\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"jpeg\",\"jpg\",\"jpe\"]\n },\n \"image/jph\": {\n \"source\": \"iana\",\n \"extensions\": [\"jph\"]\n },\n \"image/jphc\": {\n \"source\": \"iana\",\n \"extensions\": [\"jhc\"]\n },\n \"image/jpm\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"jpm\"]\n },\n \"image/jpx\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"jpx\",\"jpf\"]\n },\n \"image/jxr\": {\n \"source\": \"iana\",\n \"extensions\": [\"jxr\"]\n },\n \"image/jxra\": {\n \"source\": \"iana\",\n \"extensions\": [\"jxra\"]\n },\n \"image/jxrs\": {\n \"source\": \"iana\",\n \"extensions\": [\"jxrs\"]\n },\n \"image/jxs\": {\n \"source\": \"iana\",\n \"extensions\": [\"jxs\"]\n },\n \"image/jxsc\": {\n \"source\": \"iana\",\n \"extensions\": [\"jxsc\"]\n },\n \"image/jxsi\": {\n \"source\": \"iana\",\n \"extensions\": [\"jxsi\"]\n },\n \"image/jxss\": {\n \"source\": \"iana\",\n \"extensions\": [\"jxss\"]\n },\n \"image/ktx\": {\n \"source\": \"iana\",\n \"extensions\": [\"ktx\"]\n },\n \"image/ktx2\": {\n \"source\": \"iana\",\n \"extensions\": [\"ktx2\"]\n },\n \"image/naplps\": {\n \"source\": \"iana\"\n },\n \"image/pjpeg\": {\n \"compressible\": false\n },\n \"image/png\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"png\"]\n },\n \"image/prs.btif\": {\n \"source\": \"iana\",\n \"extensions\": [\"btif\"]\n },\n \"image/prs.pti\": {\n \"source\": \"iana\",\n \"extensions\": [\"pti\"]\n },\n \"image/pwg-raster\": {\n \"source\": \"iana\"\n },\n \"image/sgi\": {\n \"source\": \"apache\",\n \"extensions\": [\"sgi\"]\n },\n \"image/svg+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"svg\",\"svgz\"]\n },\n \"image/t38\": {\n \"source\": \"iana\",\n \"extensions\": [\"t38\"]\n },\n \"image/tiff\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"tif\",\"tiff\"]\n },\n \"image/tiff-fx\": {\n \"source\": \"iana\",\n \"extensions\": [\"tfx\"]\n },\n \"image/vnd.adobe.photoshop\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"psd\"]\n },\n \"image/vnd.airzip.accelerator.azv\": {\n \"source\": \"iana\",\n \"extensions\": [\"azv\"]\n },\n \"image/vnd.cns.inf2\": {\n \"source\": \"iana\"\n },\n \"image/vnd.dece.graphic\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvi\",\"uvvi\",\"uvg\",\"uvvg\"]\n },\n \"image/vnd.djvu\": {\n \"source\": \"iana\",\n \"extensions\": [\"djvu\",\"djv\"]\n },\n \"image/vnd.dvb.subtitle\": {\n \"source\": \"iana\",\n \"extensions\": [\"sub\"]\n },\n \"image/vnd.dwg\": {\n \"source\": \"iana\",\n \"extensions\": [\"dwg\"]\n },\n \"image/vnd.dxf\": {\n \"source\": \"iana\",\n \"extensions\": [\"dxf\"]\n },\n \"image/vnd.fastbidsheet\": {\n \"source\": \"iana\",\n \"extensions\": [\"fbs\"]\n },\n \"image/vnd.fpx\": {\n \"source\": \"iana\",\n \"extensions\": [\"fpx\"]\n },\n \"image/vnd.fst\": {\n \"source\": \"iana\",\n \"extensions\": [\"fst\"]\n },\n \"image/vnd.fujixerox.edmics-mmr\": {\n \"source\": \"iana\",\n \"extensions\": [\"mmr\"]\n },\n \"image/vnd.fujixerox.edmics-rlc\": {\n \"source\": \"iana\",\n \"extensions\": [\"rlc\"]\n },\n \"image/vnd.globalgraphics.pgb\": {\n \"source\": \"iana\"\n },\n \"image/vnd.microsoft.icon\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"ico\"]\n },\n \"image/vnd.mix\": {\n \"source\": \"iana\"\n },\n \"image/vnd.mozilla.apng\": {\n \"source\": \"iana\"\n },\n \"image/vnd.ms-dds\": {\n \"compressible\": true,\n \"extensions\": [\"dds\"]\n },\n \"image/vnd.ms-modi\": {\n \"source\": \"iana\",\n \"extensions\": [\"mdi\"]\n },\n \"image/vnd.ms-photo\": {\n \"source\": \"apache\",\n \"extensions\": [\"wdp\"]\n },\n \"image/vnd.net-fpx\": {\n \"source\": \"iana\",\n \"extensions\": [\"npx\"]\n },\n \"image/vnd.pco.b16\": {\n \"source\": \"iana\",\n \"extensions\": [\"b16\"]\n },\n \"image/vnd.radiance\": {\n \"source\": \"iana\"\n },\n \"image/vnd.sealed.png\": {\n \"source\": \"iana\"\n },\n \"image/vnd.sealedmedia.softseal.gif\": {\n \"source\": \"iana\"\n },\n \"image/vnd.sealedmedia.softseal.jpg\": {\n \"source\": \"iana\"\n },\n \"image/vnd.svf\": {\n \"source\": \"iana\"\n },\n \"image/vnd.tencent.tap\": {\n \"source\": \"iana\",\n \"extensions\": [\"tap\"]\n },\n \"image/vnd.valve.source.texture\": {\n \"source\": \"iana\",\n \"extensions\": [\"vtf\"]\n },\n \"image/vnd.wap.wbmp\": {\n \"source\": \"iana\",\n \"extensions\": [\"wbmp\"]\n },\n \"image/vnd.xiff\": {\n \"source\": \"iana\",\n \"extensions\": [\"xif\"]\n },\n \"image/vnd.zbrush.pcx\": {\n \"source\": \"iana\",\n \"extensions\": [\"pcx\"]\n },\n \"image/webp\": {\n \"source\": \"apache\",\n \"extensions\": [\"webp\"]\n },\n \"image/wmf\": {\n \"source\": \"iana\",\n \"extensions\": [\"wmf\"]\n },\n \"image/x-3ds\": {\n \"source\": \"apache\",\n \"extensions\": [\"3ds\"]\n },\n \"image/x-cmu-raster\": {\n \"source\": \"apache\",\n \"extensions\": [\"ras\"]\n },\n \"image/x-cmx\": {\n \"source\": \"apache\",\n \"extensions\": [\"cmx\"]\n },\n \"image/x-freehand\": {\n \"source\": \"apache\",\n \"extensions\": [\"fh\",\"fhc\",\"fh4\",\"fh5\",\"fh7\"]\n },\n \"image/x-icon\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"ico\"]\n },\n \"image/x-jng\": {\n \"source\": \"nginx\",\n \"extensions\": [\"jng\"]\n },\n \"image/x-mrsid-image\": {\n \"source\": \"apache\",\n \"extensions\": [\"sid\"]\n },\n \"image/x-ms-bmp\": {\n \"source\": \"nginx\",\n \"compressible\": true,\n \"extensions\": [\"bmp\"]\n },\n \"image/x-pcx\": {\n \"source\": \"apache\",\n \"extensions\": [\"pcx\"]\n },\n \"image/x-pict\": {\n \"source\": \"apache\",\n \"extensions\": [\"pic\",\"pct\"]\n },\n \"image/x-portable-anymap\": {\n \"source\": \"apache\",\n \"extensions\": [\"pnm\"]\n },\n \"image/x-portable-bitmap\": {\n \"source\": \"apache\",\n \"extensions\": [\"pbm\"]\n },\n \"image/x-portable-graymap\": {\n \"source\": \"apache\",\n \"extensions\": [\"pgm\"]\n },\n \"image/x-portable-pixmap\": {\n \"source\": \"apache\",\n \"extensions\": [\"ppm\"]\n },\n \"image/x-rgb\": {\n \"source\": \"apache\",\n \"extensions\": [\"rgb\"]\n },\n \"image/x-tga\": {\n \"source\": \"apache\",\n \"extensions\": [\"tga\"]\n },\n \"image/x-xbitmap\": {\n \"source\": \"apache\",\n \"extensions\": [\"xbm\"]\n },\n \"image/x-xcf\": {\n \"compressible\": false\n },\n \"image/x-xpixmap\": {\n \"source\": \"apache\",\n \"extensions\": [\"xpm\"]\n },\n \"image/x-xwindowdump\": {\n \"source\": \"apache\",\n \"extensions\": [\"xwd\"]\n },\n \"message/cpim\": {\n \"source\": \"iana\"\n },\n \"message/delivery-status\": {\n \"source\": \"iana\"\n },\n \"message/disposition-notification\": {\n \"source\": \"iana\",\n \"extensions\": [\n \"disposition-notification\"\n ]\n },\n \"message/external-body\": {\n \"source\": \"iana\"\n },\n \"message/feedback-report\": {\n \"source\": \"iana\"\n },\n \"message/global\": {\n \"source\": \"iana\",\n \"extensions\": [\"u8msg\"]\n },\n \"message/global-delivery-status\": {\n \"source\": \"iana\",\n \"extensions\": [\"u8dsn\"]\n },\n \"message/global-disposition-notification\": {\n \"source\": \"iana\",\n \"extensions\": [\"u8mdn\"]\n },\n \"message/global-headers\": {\n \"source\": \"iana\",\n \"extensions\": [\"u8hdr\"]\n },\n \"message/http\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"message/imdn+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"message/news\": {\n \"source\": \"iana\"\n },\n \"message/partial\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"message/rfc822\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"eml\",\"mime\"]\n },\n \"message/s-http\": {\n \"source\": \"iana\"\n },\n \"message/sip\": {\n \"source\": \"iana\"\n },\n \"message/sipfrag\": {\n \"source\": \"iana\"\n },\n \"message/tracking-status\": {\n \"source\": \"iana\"\n },\n \"message/vnd.si.simp\": {\n \"source\": \"iana\"\n },\n \"message/vnd.wfa.wsc\": {\n \"source\": \"iana\",\n \"extensions\": [\"wsc\"]\n },\n \"model/3mf\": {\n \"source\": \"iana\",\n \"extensions\": [\"3mf\"]\n },\n \"model/e57\": {\n \"source\": \"iana\"\n },\n \"model/gltf+json\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"gltf\"]\n },\n \"model/gltf-binary\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"glb\"]\n },\n \"model/iges\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"igs\",\"iges\"]\n },\n \"model/mesh\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"msh\",\"mesh\",\"silo\"]\n },\n \"model/mtl\": {\n \"source\": \"iana\",\n \"extensions\": [\"mtl\"]\n },\n \"model/obj\": {\n \"source\": \"iana\",\n \"extensions\": [\"obj\"]\n },\n \"model/step\": {\n \"source\": \"iana\"\n },\n \"model/step+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"stpx\"]\n },\n \"model/step+zip\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"stpz\"]\n },\n \"model/step-xml+zip\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"stpxz\"]\n },\n \"model/stl\": {\n \"source\": \"iana\",\n \"extensions\": [\"stl\"]\n },\n \"model/vnd.collada+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"dae\"]\n },\n \"model/vnd.dwf\": {\n \"source\": \"iana\",\n \"extensions\": [\"dwf\"]\n },\n \"model/vnd.flatland.3dml\": {\n \"source\": \"iana\"\n },\n \"model/vnd.gdl\": {\n \"source\": \"iana\",\n \"extensions\": [\"gdl\"]\n },\n \"model/vnd.gs-gdl\": {\n \"source\": \"apache\"\n },\n \"model/vnd.gs.gdl\": {\n \"source\": \"iana\"\n },\n \"model/vnd.gtw\": {\n \"source\": \"iana\",\n \"extensions\": [\"gtw\"]\n },\n \"model/vnd.moml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"model/vnd.mts\": {\n \"source\": \"iana\",\n \"extensions\": [\"mts\"]\n },\n \"model/vnd.opengex\": {\n \"source\": \"iana\",\n \"extensions\": [\"ogex\"]\n },\n \"model/vnd.parasolid.transmit.binary\": {\n \"source\": \"iana\",\n \"extensions\": [\"x_b\"]\n },\n \"model/vnd.parasolid.transmit.text\": {\n \"source\": \"iana\",\n \"extensions\": [\"x_t\"]\n },\n \"model/vnd.pytha.pyox\": {\n \"source\": \"iana\"\n },\n \"model/vnd.rosette.annotated-data-model\": {\n \"source\": \"iana\"\n },\n \"model/vnd.sap.vds\": {\n \"source\": \"iana\",\n \"extensions\": [\"vds\"]\n },\n \"model/vnd.usdz+zip\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"usdz\"]\n },\n \"model/vnd.valve.source.compiled-map\": {\n \"source\": \"iana\",\n \"extensions\": [\"bsp\"]\n },\n \"model/vnd.vtu\": {\n \"source\": \"iana\",\n \"extensions\": [\"vtu\"]\n },\n \"model/vrml\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"wrl\",\"vrml\"]\n },\n \"model/x3d+binary\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"x3db\",\"x3dbz\"]\n },\n \"model/x3d+fastinfoset\": {\n \"source\": \"iana\",\n \"extensions\": [\"x3db\"]\n },\n \"model/x3d+vrml\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"x3dv\",\"x3dvz\"]\n },\n \"model/x3d+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"x3d\",\"x3dz\"]\n },\n \"model/x3d-vrml\": {\n \"source\": \"iana\",\n \"extensions\": [\"x3dv\"]\n },\n \"multipart/alternative\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"multipart/appledouble\": {\n \"source\": \"iana\"\n },\n \"multipart/byteranges\": {\n \"source\": \"iana\"\n },\n \"multipart/digest\": {\n \"source\": \"iana\"\n },\n \"multipart/encrypted\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"multipart/form-data\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"multipart/header-set\": {\n \"source\": \"iana\"\n },\n \"multipart/mixed\": {\n \"source\": \"iana\"\n },\n \"multipart/multilingual\": {\n \"source\": \"iana\"\n },\n \"multipart/parallel\": {\n \"source\": \"iana\"\n },\n \"multipart/related\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"multipart/report\": {\n \"source\": \"iana\"\n },\n \"multipart/signed\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"multipart/vnd.bint.med-plus\": {\n \"source\": \"iana\"\n },\n \"multipart/voice-message\": {\n \"source\": \"iana\"\n },\n \"multipart/x-mixed-replace\": {\n \"source\": \"iana\"\n },\n \"text/1d-interleaved-parityfec\": {\n \"source\": \"iana\"\n },\n \"text/cache-manifest\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"appcache\",\"manifest\"]\n },\n \"text/calendar\": {\n \"source\": \"iana\",\n \"extensions\": [\"ics\",\"ifb\"]\n },\n \"text/calender\": {\n \"compressible\": true\n },\n \"text/cmd\": {\n \"compressible\": true\n },\n \"text/coffeescript\": {\n \"extensions\": [\"coffee\",\"litcoffee\"]\n },\n \"text/cql\": {\n \"source\": \"iana\"\n },\n \"text/cql-expression\": {\n \"source\": \"iana\"\n },\n \"text/cql-identifier\": {\n \"source\": \"iana\"\n },\n \"text/css\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true,\n \"extensions\": [\"css\"]\n },\n \"text/csv\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"csv\"]\n },\n \"text/csv-schema\": {\n \"source\": \"iana\"\n },\n \"text/directory\": {\n \"source\": \"iana\"\n },\n \"text/dns\": {\n \"source\": \"iana\"\n },\n \"text/ecmascript\": {\n \"source\": \"iana\"\n },\n \"text/encaprtp\": {\n \"source\": \"iana\"\n },\n \"text/enriched\": {\n \"source\": \"iana\"\n },\n \"text/fhirpath\": {\n \"source\": \"iana\"\n },\n \"text/flexfec\": {\n \"source\": \"iana\"\n },\n \"text/fwdred\": {\n \"source\": \"iana\"\n },\n \"text/gff3\": {\n \"source\": \"iana\"\n },\n \"text/grammar-ref-list\": {\n \"source\": \"iana\"\n },\n \"text/html\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"html\",\"htm\",\"shtml\"]\n },\n \"text/jade\": {\n \"extensions\": [\"jade\"]\n },\n \"text/javascript\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"text/jcr-cnd\": {\n \"source\": \"iana\"\n },\n \"text/jsx\": {\n \"compressible\": true,\n \"extensions\": [\"jsx\"]\n },\n \"text/less\": {\n \"compressible\": true,\n \"extensions\": [\"less\"]\n },\n \"text/markdown\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"markdown\",\"md\"]\n },\n \"text/mathml\": {\n \"source\": \"nginx\",\n \"extensions\": [\"mml\"]\n },\n \"text/mdx\": {\n \"compressible\": true,\n \"extensions\": [\"mdx\"]\n },\n \"text/mizar\": {\n \"source\": \"iana\"\n },\n \"text/n3\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true,\n \"extensions\": [\"n3\"]\n },\n \"text/parameters\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\"\n },\n \"text/parityfec\": {\n \"source\": \"iana\"\n },\n \"text/plain\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"txt\",\"text\",\"conf\",\"def\",\"list\",\"log\",\"in\",\"ini\"]\n },\n \"text/provenance-notation\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\"\n },\n \"text/prs.fallenstein.rst\": {\n \"source\": \"iana\"\n },\n \"text/prs.lines.tag\": {\n \"source\": \"iana\",\n \"extensions\": [\"dsc\"]\n },\n \"text/prs.prop.logic\": {\n \"source\": \"iana\"\n },\n \"text/raptorfec\": {\n \"source\": \"iana\"\n },\n \"text/red\": {\n \"source\": \"iana\"\n },\n \"text/rfc822-headers\": {\n \"source\": \"iana\"\n },\n \"text/richtext\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rtx\"]\n },\n \"text/rtf\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rtf\"]\n },\n \"text/rtp-enc-aescm128\": {\n \"source\": \"iana\"\n },\n \"text/rtploopback\": {\n \"source\": \"iana\"\n },\n \"text/rtx\": {\n \"source\": \"iana\"\n },\n \"text/sgml\": {\n \"source\": \"iana\",\n \"extensions\": [\"sgml\",\"sgm\"]\n },\n \"text/shaclc\": {\n \"source\": \"iana\"\n },\n \"text/shex\": {\n \"source\": \"iana\",\n \"extensions\": [\"shex\"]\n },\n \"text/slim\": {\n \"extensions\": [\"slim\",\"slm\"]\n },\n \"text/spdx\": {\n \"source\": \"iana\",\n \"extensions\": [\"spdx\"]\n },\n \"text/strings\": {\n \"source\": \"iana\"\n },\n \"text/stylus\": {\n \"extensions\": [\"stylus\",\"styl\"]\n },\n \"text/t140\": {\n \"source\": \"iana\"\n },\n \"text/tab-separated-values\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"tsv\"]\n },\n \"text/troff\": {\n \"source\": \"iana\",\n \"extensions\": [\"t\",\"tr\",\"roff\",\"man\",\"me\",\"ms\"]\n },\n \"text/turtle\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"extensions\": [\"ttl\"]\n },\n \"text/ulpfec\": {\n \"source\": \"iana\"\n },\n \"text/uri-list\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"uri\",\"uris\",\"urls\"]\n },\n \"text/vcard\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"vcard\"]\n },\n \"text/vnd.a\": {\n \"source\": \"iana\"\n },\n \"text/vnd.abc\": {\n \"source\": \"iana\"\n },\n \"text/vnd.ascii-art\": {\n \"source\": \"iana\"\n },\n \"text/vnd.curl\": {\n \"source\": \"iana\",\n \"extensions\": [\"curl\"]\n },\n \"text/vnd.curl.dcurl\": {\n \"source\": \"apache\",\n \"extensions\": [\"dcurl\"]\n },\n \"text/vnd.curl.mcurl\": {\n \"source\": \"apache\",\n \"extensions\": [\"mcurl\"]\n },\n \"text/vnd.curl.scurl\": {\n \"source\": \"apache\",\n \"extensions\": [\"scurl\"]\n },\n \"text/vnd.debian.copyright\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\"\n },\n \"text/vnd.dmclientscript\": {\n \"source\": \"iana\"\n },\n \"text/vnd.dvb.subtitle\": {\n \"source\": \"iana\",\n \"extensions\": [\"sub\"]\n },\n \"text/vnd.esmertec.theme-descriptor\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\"\n },\n \"text/vnd.familysearch.gedcom\": {\n \"source\": \"iana\",\n \"extensions\": [\"ged\"]\n },\n \"text/vnd.ficlab.flt\": {\n \"source\": \"iana\"\n },\n \"text/vnd.fly\": {\n \"source\": \"iana\",\n \"extensions\": [\"fly\"]\n },\n \"text/vnd.fmi.flexstor\": {\n \"source\": \"iana\",\n \"extensions\": [\"flx\"]\n },\n \"text/vnd.gml\": {\n \"source\": \"iana\"\n },\n \"text/vnd.graphviz\": {\n \"source\": \"iana\",\n \"extensions\": [\"gv\"]\n },\n \"text/vnd.hans\": {\n \"source\": \"iana\"\n },\n \"text/vnd.hgl\": {\n \"source\": \"iana\"\n },\n \"text/vnd.in3d.3dml\": {\n \"source\": \"iana\",\n \"extensions\": [\"3dml\"]\n },\n \"text/vnd.in3d.spot\": {\n \"source\": \"iana\",\n \"extensions\": [\"spot\"]\n },\n \"text/vnd.iptc.newsml\": {\n \"source\": \"iana\"\n },\n \"text/vnd.iptc.nitf\": {\n \"source\": \"iana\"\n },\n \"text/vnd.latex-z\": {\n \"source\": \"iana\"\n },\n \"text/vnd.motorola.reflex\": {\n \"source\": \"iana\"\n },\n \"text/vnd.ms-mediapackage\": {\n \"source\": \"iana\"\n },\n \"text/vnd.net2phone.commcenter.command\": {\n \"source\": \"iana\"\n },\n \"text/vnd.radisys.msml-basic-layout\": {\n \"source\": \"iana\"\n },\n \"text/vnd.senx.warpscript\": {\n \"source\": \"iana\"\n },\n \"text/vnd.si.uricatalogue\": {\n \"source\": \"iana\"\n },\n \"text/vnd.sosi\": {\n \"source\": \"iana\"\n },\n \"text/vnd.sun.j2me.app-descriptor\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"extensions\": [\"jad\"]\n },\n \"text/vnd.trolltech.linguist\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\"\n },\n \"text/vnd.wap.si\": {\n \"source\": \"iana\"\n },\n \"text/vnd.wap.sl\": {\n \"source\": \"iana\"\n },\n \"text/vnd.wap.wml\": {\n \"source\": \"iana\",\n \"extensions\": [\"wml\"]\n },\n \"text/vnd.wap.wmlscript\": {\n \"source\": \"iana\",\n \"extensions\": [\"wmls\"]\n },\n \"text/vtt\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true,\n \"extensions\": [\"vtt\"]\n },\n \"text/x-asm\": {\n \"source\": \"apache\",\n \"extensions\": [\"s\",\"asm\"]\n },\n \"text/x-c\": {\n \"source\": \"apache\",\n \"extensions\": [\"c\",\"cc\",\"cxx\",\"cpp\",\"h\",\"hh\",\"dic\"]\n },\n \"text/x-component\": {\n \"source\": \"nginx\",\n \"extensions\": [\"htc\"]\n },\n \"text/x-fortran\": {\n \"source\": \"apache\",\n \"extensions\": [\"f\",\"for\",\"f77\",\"f90\"]\n },\n \"text/x-gwt-rpc\": {\n \"compressible\": true\n },\n \"text/x-handlebars-template\": {\n \"extensions\": [\"hbs\"]\n },\n \"text/x-java-source\": {\n \"source\": \"apache\",\n \"extensions\": [\"java\"]\n },\n \"text/x-jquery-tmpl\": {\n \"compressible\": true\n },\n \"text/x-lua\": {\n \"extensions\": [\"lua\"]\n },\n \"text/x-markdown\": {\n \"compressible\": true,\n \"extensions\": [\"mkd\"]\n },\n \"text/x-nfo\": {\n \"source\": \"apache\",\n \"extensions\": [\"nfo\"]\n },\n \"text/x-opml\": {\n \"source\": \"apache\",\n \"extensions\": [\"opml\"]\n },\n \"text/x-org\": {\n \"compressible\": true,\n \"extensions\": [\"org\"]\n },\n \"text/x-pascal\": {\n \"source\": \"apache\",\n \"extensions\": [\"p\",\"pas\"]\n },\n \"text/x-processing\": {\n \"compressible\": true,\n \"extensions\": [\"pde\"]\n },\n \"text/x-sass\": {\n \"extensions\": [\"sass\"]\n },\n \"text/x-scss\": {\n \"extensions\": [\"scss\"]\n },\n \"text/x-setext\": {\n \"source\": \"apache\",\n \"extensions\": [\"etx\"]\n },\n \"text/x-sfv\": {\n \"source\": \"apache\",\n \"extensions\": [\"sfv\"]\n },\n \"text/x-suse-ymp\": {\n \"compressible\": true,\n \"extensions\": [\"ymp\"]\n },\n \"text/x-uuencode\": {\n \"source\": \"apache\",\n \"extensions\": [\"uu\"]\n },\n \"text/x-vcalendar\": {\n \"source\": \"apache\",\n \"extensions\": [\"vcs\"]\n },\n \"text/x-vcard\": {\n \"source\": \"apache\",\n \"extensions\": [\"vcf\"]\n },\n \"text/xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xml\"]\n },\n \"text/xml-external-parsed-entity\": {\n \"source\": \"iana\"\n },\n \"text/yaml\": {\n \"compressible\": true,\n \"extensions\": [\"yaml\",\"yml\"]\n },\n \"video/1d-interleaved-parityfec\": {\n \"source\": \"iana\"\n },\n \"video/3gpp\": {\n \"source\": \"iana\",\n \"extensions\": [\"3gp\",\"3gpp\"]\n },\n \"video/3gpp-tt\": {\n \"source\": \"iana\"\n },\n \"video/3gpp2\": {\n \"source\": \"iana\",\n \"extensions\": [\"3g2\"]\n },\n \"video/av1\": {\n \"source\": \"iana\"\n },\n \"video/bmpeg\": {\n \"source\": \"iana\"\n },\n \"video/bt656\": {\n \"source\": \"iana\"\n },\n \"video/celb\": {\n \"source\": \"iana\"\n },\n \"video/dv\": {\n \"source\": \"iana\"\n },\n \"video/encaprtp\": {\n \"source\": \"iana\"\n },\n \"video/ffv1\": {\n \"source\": \"iana\"\n },\n \"video/flexfec\": {\n \"source\": \"iana\"\n },\n \"video/h261\": {\n \"source\": \"iana\",\n \"extensions\": [\"h261\"]\n },\n \"video/h263\": {\n \"source\": \"iana\",\n \"extensions\": [\"h263\"]\n },\n \"video/h263-1998\": {\n \"source\": \"iana\"\n },\n \"video/h263-2000\": {\n \"source\": \"iana\"\n },\n \"video/h264\": {\n \"source\": \"iana\",\n \"extensions\": [\"h264\"]\n },\n \"video/h264-rcdo\": {\n \"source\": \"iana\"\n },\n \"video/h264-svc\": {\n \"source\": \"iana\"\n },\n \"video/h265\": {\n \"source\": \"iana\"\n },\n \"video/iso.segment\": {\n \"source\": \"iana\",\n \"extensions\": [\"m4s\"]\n },\n \"video/jpeg\": {\n \"source\": \"iana\",\n \"extensions\": [\"jpgv\"]\n },\n \"video/jpeg2000\": {\n \"source\": \"iana\"\n },\n \"video/jpm\": {\n \"source\": \"apache\",\n \"extensions\": [\"jpm\",\"jpgm\"]\n },\n \"video/jxsv\": {\n \"source\": \"iana\"\n },\n \"video/mj2\": {\n \"source\": \"iana\",\n \"extensions\": [\"mj2\",\"mjp2\"]\n },\n \"video/mp1s\": {\n \"source\": \"iana\"\n },\n \"video/mp2p\": {\n \"source\": \"iana\"\n },\n \"video/mp2t\": {\n \"source\": \"iana\",\n \"extensions\": [\"ts\"]\n },\n \"video/mp4\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"mp4\",\"mp4v\",\"mpg4\"]\n },\n \"video/mp4v-es\": {\n \"source\": \"iana\"\n },\n \"video/mpeg\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"mpeg\",\"mpg\",\"mpe\",\"m1v\",\"m2v\"]\n },\n \"video/mpeg4-generic\": {\n \"source\": \"iana\"\n },\n \"video/mpv\": {\n \"source\": \"iana\"\n },\n \"video/nv\": {\n \"source\": \"iana\"\n },\n \"video/ogg\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"ogv\"]\n },\n \"video/parityfec\": {\n \"source\": \"iana\"\n },\n \"video/pointer\": {\n \"source\": \"iana\"\n },\n \"video/quicktime\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"qt\",\"mov\"]\n },\n \"video/raptorfec\": {\n \"source\": \"iana\"\n },\n \"video/raw\": {\n \"source\": \"iana\"\n },\n \"video/rtp-enc-aescm128\": {\n \"source\": \"iana\"\n },\n \"video/rtploopback\": {\n \"source\": \"iana\"\n },\n \"video/rtx\": {\n \"source\": \"iana\"\n },\n \"video/scip\": {\n \"source\": \"iana\"\n },\n \"video/smpte291\": {\n \"source\": \"iana\"\n },\n \"video/smpte292m\": {\n \"source\": \"iana\"\n },\n \"video/ulpfec\": {\n \"source\": \"iana\"\n },\n \"video/vc1\": {\n \"source\": \"iana\"\n },\n \"video/vc2\": {\n \"source\": \"iana\"\n },\n \"video/vnd.cctv\": {\n \"source\": \"iana\"\n },\n \"video/vnd.dece.hd\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvh\",\"uvvh\"]\n },\n \"video/vnd.dece.mobile\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvm\",\"uvvm\"]\n },\n \"video/vnd.dece.mp4\": {\n \"source\": \"iana\"\n },\n \"video/vnd.dece.pd\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvp\",\"uvvp\"]\n },\n \"video/vnd.dece.sd\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvs\",\"uvvs\"]\n },\n \"video/vnd.dece.video\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvv\",\"uvvv\"]\n },\n \"video/vnd.directv.mpeg\": {\n \"source\": \"iana\"\n },\n \"video/vnd.directv.mpeg-tts\": {\n \"source\": \"iana\"\n },\n \"video/vnd.dlna.mpeg-tts\": {\n \"source\": \"iana\"\n },\n \"video/vnd.dvb.file\": {\n \"source\": \"iana\",\n \"extensions\": [\"dvb\"]\n },\n \"video/vnd.fvt\": {\n \"source\": \"iana\",\n \"extensions\": [\"fvt\"]\n },\n \"video/vnd.hns.video\": {\n \"source\": \"iana\"\n },\n \"video/vnd.iptvforum.1dparityfec-1010\": {\n \"source\": \"iana\"\n },\n \"video/vnd.iptvforum.1dparityfec-2005\": {\n \"source\": \"iana\"\n },\n \"video/vnd.iptvforum.2dparityfec-1010\": {\n \"source\": \"iana\"\n },\n \"video/vnd.iptvforum.2dparityfec-2005\": {\n \"source\": \"iana\"\n },\n \"video/vnd.iptvforum.ttsavc\": {\n \"source\": \"iana\"\n },\n \"video/vnd.iptvforum.ttsmpeg2\": {\n \"source\": \"iana\"\n },\n \"video/vnd.motorola.video\": {\n \"source\": \"iana\"\n },\n \"video/vnd.motorola.videop\": {\n \"source\": \"iana\"\n },\n \"video/vnd.mpegurl\": {\n \"source\": \"iana\",\n \"extensions\": [\"mxu\",\"m4u\"]\n },\n \"video/vnd.ms-playready.media.pyv\": {\n \"source\": \"iana\",\n \"extensions\": [\"pyv\"]\n },\n \"video/vnd.nokia.interleaved-multimedia\": {\n \"source\": \"iana\"\n },\n \"video/vnd.nokia.mp4vr\": {\n \"source\": \"iana\"\n },\n \"video/vnd.nokia.videovoip\": {\n \"source\": \"iana\"\n },\n \"video/vnd.objectvideo\": {\n \"source\": \"iana\"\n },\n \"video/vnd.radgamettools.bink\": {\n \"source\": \"iana\"\n },\n \"video/vnd.radgamettools.smacker\": {\n \"source\": \"iana\"\n },\n \"video/vnd.sealed.mpeg1\": {\n \"source\": \"iana\"\n },\n \"video/vnd.sealed.mpeg4\": {\n \"source\": \"iana\"\n },\n \"video/vnd.sealed.swf\": {\n \"source\": \"iana\"\n },\n \"video/vnd.sealedmedia.softseal.mov\": {\n \"source\": \"iana\"\n },\n \"video/vnd.uvvu.mp4\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvu\",\"uvvu\"]\n },\n \"video/vnd.vivo\": {\n \"source\": \"iana\",\n \"extensions\": [\"viv\"]\n },\n \"video/vnd.youtube.yt\": {\n \"source\": \"iana\"\n },\n \"video/vp8\": {\n \"source\": \"iana\"\n },\n \"video/vp9\": {\n \"source\": \"iana\"\n },\n \"video/webm\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"webm\"]\n },\n \"video/x-f4v\": {\n \"source\": \"apache\",\n \"extensions\": [\"f4v\"]\n },\n \"video/x-fli\": {\n \"source\": \"apache\",\n \"extensions\": [\"fli\"]\n },\n \"video/x-flv\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"flv\"]\n },\n \"video/x-m4v\": {\n \"source\": \"apache\",\n \"extensions\": [\"m4v\"]\n },\n \"video/x-matroska\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"mkv\",\"mk3d\",\"mks\"]\n },\n \"video/x-mng\": {\n \"source\": \"apache\",\n \"extensions\": [\"mng\"]\n },\n \"video/x-ms-asf\": {\n \"source\": \"apache\",\n \"extensions\": [\"asf\",\"asx\"]\n },\n \"video/x-ms-vob\": {\n \"source\": \"apache\",\n \"extensions\": [\"vob\"]\n },\n \"video/x-ms-wm\": {\n \"source\": \"apache\",\n \"extensions\": [\"wm\"]\n },\n \"video/x-ms-wmv\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"wmv\"]\n },\n \"video/x-ms-wmx\": {\n \"source\": \"apache\",\n \"extensions\": [\"wmx\"]\n },\n \"video/x-ms-wvx\": {\n \"source\": \"apache\",\n \"extensions\": [\"wvx\"]\n },\n \"video/x-msvideo\": {\n \"source\": \"apache\",\n \"extensions\": [\"avi\"]\n },\n \"video/x-sgi-movie\": {\n \"source\": \"apache\",\n \"extensions\": [\"movie\"]\n },\n \"video/x-smv\": {\n \"source\": \"apache\",\n \"extensions\": [\"smv\"]\n },\n \"x-conference/x-cooltalk\": {\n \"source\": \"apache\",\n \"extensions\": [\"ice\"]\n },\n \"x-shader/x-fragment\": {\n \"compressible\": true\n },\n \"x-shader/x-vertex\": {\n \"compressible\": true\n }\n}\n", "/*!\n * mime-db\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2015-2022 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n/**\n * Module exports.\n */\n\nmodule.exports = require('./db.json')\n", "/*!\n * mime-types\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar db = require('mime-db')\nvar extname = require('path').extname\n\n/**\n * Module variables.\n * @private\n */\n\nvar EXTRACT_TYPE_REGEXP = /^\\s*([^;\\s]*)(?:;|\\s|$)/\nvar TEXT_TYPE_REGEXP = /^text\\//i\n\n/**\n * Module exports.\n * @public\n */\n\nexports.charset = charset\nexports.charsets = { lookup: charset }\nexports.contentType = contentType\nexports.extension = extension\nexports.extensions = Object.create(null)\nexports.lookup = lookup\nexports.types = Object.create(null)\n\n// Populate the extensions/types maps\npopulateMaps(exports.extensions, exports.types)\n\n/**\n * Get the default charset for a MIME type.\n *\n * @param {string} type\n * @return {boolean|string}\n */\n\nfunction charset (type) {\n if (!type || typeof type !== 'string') {\n return false\n }\n\n // TODO: use media-typer\n var match = EXTRACT_TYPE_REGEXP.exec(type)\n var mime = match && db[match[1].toLowerCase()]\n\n if (mime && mime.charset) {\n return mime.charset\n }\n\n // default text/* to utf-8\n if (match && TEXT_TYPE_REGEXP.test(match[1])) {\n return 'UTF-8'\n }\n\n return false\n}\n\n/**\n * Create a full Content-Type header given a MIME type or extension.\n *\n * @param {string} str\n * @return {boolean|string}\n */\n\nfunction contentType (str) {\n // TODO: should this even be in this module?\n if (!str || typeof str !== 'string') {\n return false\n }\n\n var mime = str.indexOf('/') === -1\n ? exports.lookup(str)\n : str\n\n if (!mime) {\n return false\n }\n\n // TODO: use content-type or other module\n if (mime.indexOf('charset') === -1) {\n var charset = exports.charset(mime)\n if (charset) mime += '; charset=' + charset.toLowerCase()\n }\n\n return mime\n}\n\n/**\n * Get the default extension for a MIME type.\n *\n * @param {string} type\n * @return {boolean|string}\n */\n\nfunction extension (type) {\n if (!type || typeof type !== 'string') {\n return false\n }\n\n // TODO: use media-typer\n var match = EXTRACT_TYPE_REGEXP.exec(type)\n\n // get extensions\n var exts = match && exports.extensions[match[1].toLowerCase()]\n\n if (!exts || !exts.length) {\n return false\n }\n\n return exts[0]\n}\n\n/**\n * Lookup the MIME type for a file path/extension.\n *\n * @param {string} path\n * @return {boolean|string}\n */\n\nfunction lookup (path) {\n if (!path || typeof path !== 'string') {\n return false\n }\n\n // get the extension (\"ext\" or \".ext\" or full path)\n var extension = extname('x.' + path)\n .toLowerCase()\n .substr(1)\n\n if (!extension) {\n return false\n }\n\n return exports.types[extension] || false\n}\n\n/**\n * Populate the extensions and types maps.\n * @private\n */\n\nfunction populateMaps (extensions, types) {\n // source preference (least -> most)\n var preference = ['nginx', 'apache', undefined, 'iana']\n\n Object.keys(db).forEach(function forEachMimeType (type) {\n var mime = db[type]\n var exts = mime.extensions\n\n if (!exts || !exts.length) {\n return\n }\n\n // mime -> extensions\n extensions[type] = exts\n\n // extension -> mime\n for (var i = 0; i < exts.length; i++) {\n var extension = exts[i]\n\n if (types[extension]) {\n var from = preference.indexOf(db[types[extension]].source)\n var to = preference.indexOf(mime.source)\n\n if (types[extension] !== 'application/octet-stream' &&\n (from > to || (from === to && types[extension].substr(0, 12) === 'application/'))) {\n // skip the remapping\n continue\n }\n }\n\n // set the extension -> mime\n types[extension] = type\n }\n })\n}\n", "module.exports = defer;\n\n/**\n * Runs provided function on next iteration of the event loop\n *\n * @param {function} fn - function to run\n */\nfunction defer(fn)\n{\n var nextTick = typeof setImmediate == 'function'\n ? setImmediate\n : (\n typeof process == 'object' && typeof process.nextTick == 'function'\n ? process.nextTick\n : null\n );\n\n if (nextTick)\n {\n nextTick(fn);\n }\n else\n {\n setTimeout(fn, 0);\n }\n}\n", "var defer = require('./defer.js');\n\n// API\nmodule.exports = async;\n\n/**\n * Runs provided callback asynchronously\n * even if callback itself is not\n *\n * @param {function} callback - callback to invoke\n * @returns {function} - augmented callback\n */\nfunction async(callback)\n{\n var isAsync = false;\n\n // check if async happened\n defer(function() { isAsync = true; });\n\n return function async_callback(err, result)\n {\n if (isAsync)\n {\n callback(err, result);\n }\n else\n {\n defer(function nextTick_callback()\n {\n callback(err, result);\n });\n }\n };\n}\n", "// API\nmodule.exports = abort;\n\n/**\n * Aborts leftover active jobs\n *\n * @param {object} state - current state object\n */\nfunction abort(state)\n{\n Object.keys(state.jobs).forEach(clean.bind(state));\n\n // reset leftover jobs\n state.jobs = {};\n}\n\n/**\n * Cleans up leftover job by invoking abort function for the provided job id\n *\n * @this state\n * @param {string|number} key - job id to abort\n */\nfunction clean(key)\n{\n if (typeof this.jobs[key] == 'function')\n {\n this.jobs[key]();\n }\n}\n", "var async = require('./async.js')\n , abort = require('./abort.js')\n ;\n\n// API\nmodule.exports = iterate;\n\n/**\n * Iterates over each job object\n *\n * @param {array|object} list - array or object (named list) to iterate over\n * @param {function} iterator - iterator to run\n * @param {object} state - current job status\n * @param {function} callback - invoked when all elements processed\n */\nfunction iterate(list, iterator, state, callback)\n{\n // store current index\n var key = state['keyedList'] ? state['keyedList'][state.index] : state.index;\n\n state.jobs[key] = runJob(iterator, key, list[key], function(error, output)\n {\n // don't repeat yourself\n // skip secondary callbacks\n if (!(key in state.jobs))\n {\n return;\n }\n\n // clean up jobs\n delete state.jobs[key];\n\n if (error)\n {\n // don't process rest of the results\n // stop still active jobs\n // and reset the list\n abort(state);\n }\n else\n {\n state.results[key] = output;\n }\n\n // return salvaged results\n callback(error, state.results);\n });\n}\n\n/**\n * Runs iterator over provided job element\n *\n * @param {function} iterator - iterator to invoke\n * @param {string|number} key - key/index of the element in the list of jobs\n * @param {mixed} item - job description\n * @param {function} callback - invoked after iterator is done with the job\n * @returns {function|mixed} - job abort function or something else\n */\nfunction runJob(iterator, key, item, callback)\n{\n var aborter;\n\n // allow shortcut if iterator expects only two arguments\n if (iterator.length == 2)\n {\n aborter = iterator(item, async(callback));\n }\n // otherwise go with full three arguments\n else\n {\n aborter = iterator(item, key, async(callback));\n }\n\n return aborter;\n}\n", "// API\nmodule.exports = state;\n\n/**\n * Creates initial state object\n * for iteration over list\n *\n * @param {array|object} list - list to iterate over\n * @param {function|null} sortMethod - function to use for keys sort,\n * or `null` to keep them as is\n * @returns {object} - initial state object\n */\nfunction state(list, sortMethod)\n{\n var isNamedList = !Array.isArray(list)\n , initState =\n {\n index : 0,\n keyedList: isNamedList || sortMethod ? Object.keys(list) : null,\n jobs : {},\n results : isNamedList ? {} : [],\n size : isNamedList ? Object.keys(list).length : list.length\n }\n ;\n\n if (sortMethod)\n {\n // sort array keys based on it's values\n // sort object's keys just on own merit\n initState.keyedList.sort(isNamedList ? sortMethod : function(a, b)\n {\n return sortMethod(list[a], list[b]);\n });\n }\n\n return initState;\n}\n", "var abort = require('./abort.js')\n , async = require('./async.js')\n ;\n\n// API\nmodule.exports = terminator;\n\n/**\n * Terminates jobs in the attached state context\n *\n * @this AsyncKitState#\n * @param {function} callback - final callback to invoke after termination\n */\nfunction terminator(callback)\n{\n if (!Object.keys(this.jobs).length)\n {\n return;\n }\n\n // fast forward iteration index\n this.index = this.size;\n\n // abort jobs\n abort(this);\n\n // send back results we have so far\n async(callback)(null, this.results);\n}\n", "var iterate = require('./lib/iterate.js')\n , initState = require('./lib/state.js')\n , terminator = require('./lib/terminator.js')\n ;\n\n// Public API\nmodule.exports = parallel;\n\n/**\n * Runs iterator over provided array elements in parallel\n *\n * @param {array|object} list - array or object (named list) to iterate over\n * @param {function} iterator - iterator to run\n * @param {function} callback - invoked when all elements processed\n * @returns {function} - jobs terminator\n */\nfunction parallel(list, iterator, callback)\n{\n var state = initState(list);\n\n while (state.index < (state['keyedList'] || list).length)\n {\n iterate(list, iterator, state, function(error, result)\n {\n if (error)\n {\n callback(error, result);\n return;\n }\n\n // looks like it's the last one\n if (Object.keys(state.jobs).length === 0)\n {\n callback(null, state.results);\n return;\n }\n });\n\n state.index++;\n }\n\n return terminator.bind(state, callback);\n}\n", "var iterate = require('./lib/iterate.js')\n , initState = require('./lib/state.js')\n , terminator = require('./lib/terminator.js')\n ;\n\n// Public API\nmodule.exports = serialOrdered;\n// sorting helpers\nmodule.exports.ascending = ascending;\nmodule.exports.descending = descending;\n\n/**\n * Runs iterator over provided sorted array elements in series\n *\n * @param {array|object} list - array or object (named list) to iterate over\n * @param {function} iterator - iterator to run\n * @param {function} sortMethod - custom sort function\n * @param {function} callback - invoked when all elements processed\n * @returns {function} - jobs terminator\n */\nfunction serialOrdered(list, iterator, sortMethod, callback)\n{\n var state = initState(list, sortMethod);\n\n iterate(list, iterator, state, function iteratorHandler(error, result)\n {\n if (error)\n {\n callback(error, result);\n return;\n }\n\n state.index++;\n\n // are we there yet?\n if (state.index < (state['keyedList'] || list).length)\n {\n iterate(list, iterator, state, iteratorHandler);\n return;\n }\n\n // done here\n callback(null, state.results);\n });\n\n return terminator.bind(state, callback);\n}\n\n/*\n * -- Sort methods\n */\n\n/**\n * sort helper to sort array elements in ascending order\n *\n * @param {mixed} a - an item to compare\n * @param {mixed} b - an item to compare\n * @returns {number} - comparison result\n */\nfunction ascending(a, b)\n{\n return a < b ? -1 : a > b ? 1 : 0;\n}\n\n/**\n * sort helper to sort array elements in descending order\n *\n * @param {mixed} a - an item to compare\n * @param {mixed} b - an item to compare\n * @returns {number} - comparison result\n */\nfunction descending(a, b)\n{\n return -1 * ascending(a, b);\n}\n", "var serialOrdered = require('./serialOrdered.js');\n\n// Public API\nmodule.exports = serial;\n\n/**\n * Runs iterator over provided array elements in series\n *\n * @param {array|object} list - array or object (named list) to iterate over\n * @param {function} iterator - iterator to run\n * @param {function} callback - invoked when all elements processed\n * @returns {function} - jobs terminator\n */\nfunction serial(list, iterator, callback)\n{\n return serialOrdered(list, iterator, null, callback);\n}\n", "module.exports =\n{\n parallel : require('./parallel.js'),\n serial : require('./serial.js'),\n serialOrdered : require('./serialOrdered.js')\n};\n", "// populates missing values\nmodule.exports = function(dst, src) {\n\n Object.keys(src).forEach(function(prop)\n {\n dst[prop] = dst[prop] || src[prop];\n });\n\n return dst;\n};\n", "var CombinedStream = require('combined-stream');\nvar util = require('util');\nvar path = require('path');\nvar http = require('http');\nvar https = require('https');\nvar parseUrl = require('url').parse;\nvar fs = require('fs');\nvar Stream = require('stream').Stream;\nvar mime = require('mime-types');\nvar asynckit = require('asynckit');\nvar populate = require('./populate.js');\n\n// Public API\nmodule.exports = FormData;\n\n// make it a Stream\nutil.inherits(FormData, CombinedStream);\n\n/**\n * Create readable \"multipart/form-data\" streams.\n * Can be used to submit forms\n * and file uploads to other web applications.\n *\n * @constructor\n * @param {Object} options - Properties to be added/overriden for FormData and CombinedStream\n */\nfunction FormData(options) {\n if (!(this instanceof FormData)) {\n return new FormData(options);\n }\n\n this._overheadLength = 0;\n this._valueLength = 0;\n this._valuesToMeasure = [];\n\n CombinedStream.call(this);\n\n options = options || {};\n for (var option in options) {\n this[option] = options[option];\n }\n}\n\nFormData.LINE_BREAK = '\\r\\n';\nFormData.DEFAULT_CONTENT_TYPE = 'application/octet-stream';\n\nFormData.prototype.append = function(field, value, options) {\n\n options = options || {};\n\n // allow filename as single option\n if (typeof options == 'string') {\n options = {filename: options};\n }\n\n var append = CombinedStream.prototype.append.bind(this);\n\n // all that streamy business can't handle numbers\n if (typeof value == 'number') {\n value = '' + value;\n }\n\n // https://github.com/felixge/node-form-data/issues/38\n if (util.isArray(value)) {\n // Please convert your array into string\n // the way web server expects it\n this._error(new Error('Arrays are not supported.'));\n return;\n }\n\n var header = this._multiPartHeader(field, value, options);\n var footer = this._multiPartFooter();\n\n append(header);\n append(value);\n append(footer);\n\n // pass along options.knownLength\n this._trackLength(header, value, options);\n};\n\nFormData.prototype._trackLength = function(header, value, options) {\n var valueLength = 0;\n\n // used w/ getLengthSync(), when length is known.\n // e.g. for streaming directly from a remote server,\n // w/ a known file a size, and not wanting to wait for\n // incoming file to finish to get its size.\n if (options.knownLength != null) {\n valueLength += +options.knownLength;\n } else if (Buffer.isBuffer(value)) {\n valueLength = value.length;\n } else if (typeof value === 'string') {\n valueLength = Buffer.byteLength(value);\n }\n\n this._valueLength += valueLength;\n\n // @check why add CRLF? does this account for custom/multiple CRLFs?\n this._overheadLength +=\n Buffer.byteLength(header) +\n FormData.LINE_BREAK.length;\n\n // empty or either doesn't have path or not an http response or not a stream\n if (!value || ( !value.path && !(value.readable && value.hasOwnProperty('httpVersion')) && !(value instanceof Stream))) {\n return;\n }\n\n // no need to bother with the length\n if (!options.knownLength) {\n this._valuesToMeasure.push(value);\n }\n};\n\nFormData.prototype._lengthRetriever = function(value, callback) {\n\n if (value.hasOwnProperty('fd')) {\n\n // take read range into a account\n // `end` = Infinity \u2013> read file till the end\n //\n // TODO: Looks like there is bug in Node fs.createReadStream\n // it doesn't respect `end` options without `start` options\n // Fix it when node fixes it.\n // https://github.com/joyent/node/issues/7819\n if (value.end != undefined && value.end != Infinity && value.start != undefined) {\n\n // when end specified\n // no need to calculate range\n // inclusive, starts with 0\n callback(null, value.end + 1 - (value.start ? value.start : 0));\n\n // not that fast snoopy\n } else {\n // still need to fetch file size from fs\n fs.stat(value.path, function(err, stat) {\n\n var fileSize;\n\n if (err) {\n callback(err);\n return;\n }\n\n // update final size based on the range options\n fileSize = stat.size - (value.start ? value.start : 0);\n callback(null, fileSize);\n });\n }\n\n // or http response\n } else if (value.hasOwnProperty('httpVersion')) {\n callback(null, +value.headers['content-length']);\n\n // or request stream http://github.com/mikeal/request\n } else if (value.hasOwnProperty('httpModule')) {\n // wait till response come back\n value.on('response', function(response) {\n value.pause();\n callback(null, +response.headers['content-length']);\n });\n value.resume();\n\n // something else\n } else {\n callback('Unknown stream');\n }\n};\n\nFormData.prototype._multiPartHeader = function(field, value, options) {\n // custom header specified (as string)?\n // it becomes responsible for boundary\n // (e.g. to handle extra CRLFs on .NET servers)\n if (typeof options.header == 'string') {\n return options.header;\n }\n\n var contentDisposition = this._getContentDisposition(value, options);\n var contentType = this._getContentType(value, options);\n\n var contents = '';\n var headers = {\n // add custom disposition as third element or keep it two elements if not\n 'Content-Disposition': ['form-data', 'name=\"' + field + '\"'].concat(contentDisposition || []),\n // if no content type. allow it to be empty array\n 'Content-Type': [].concat(contentType || [])\n };\n\n // allow custom headers.\n if (typeof options.header == 'object') {\n populate(headers, options.header);\n }\n\n var header;\n for (var prop in headers) {\n if (!headers.hasOwnProperty(prop)) continue;\n header = headers[prop];\n\n // skip nullish headers.\n if (header == null) {\n continue;\n }\n\n // convert all headers to arrays.\n if (!Array.isArray(header)) {\n header = [header];\n }\n\n // add non-empty headers.\n if (header.length) {\n contents += prop + ': ' + header.join('; ') + FormData.LINE_BREAK;\n }\n }\n\n return '--' + this.getBoundary() + FormData.LINE_BREAK + contents + FormData.LINE_BREAK;\n};\n\nFormData.prototype._getContentDisposition = function(value, options) {\n\n var filename\n , contentDisposition\n ;\n\n if (typeof options.filepath === 'string') {\n // custom filepath for relative paths\n filename = path.normalize(options.filepath).replace(/\\\\/g, '/');\n } else if (options.filename || value.name || value.path) {\n // custom filename take precedence\n // formidable and the browser add a name property\n // fs- and request- streams have path property\n filename = path.basename(options.filename || value.name || value.path);\n } else if (value.readable && value.hasOwnProperty('httpVersion')) {\n // or try http response\n filename = path.basename(value.client._httpMessage.path || '');\n }\n\n if (filename) {\n contentDisposition = 'filename=\"' + filename + '\"';\n }\n\n return contentDisposition;\n};\n\nFormData.prototype._getContentType = function(value, options) {\n\n // use custom content-type above all\n var contentType = options.contentType;\n\n // or try `name` from formidable, browser\n if (!contentType && value.name) {\n contentType = mime.lookup(value.name);\n }\n\n // or try `path` from fs-, request- streams\n if (!contentType && value.path) {\n contentType = mime.lookup(value.path);\n }\n\n // or if it's http-reponse\n if (!contentType && value.readable && value.hasOwnProperty('httpVersion')) {\n contentType = value.headers['content-type'];\n }\n\n // or guess it from the filepath or filename\n if (!contentType && (options.filepath || options.filename)) {\n contentType = mime.lookup(options.filepath || options.filename);\n }\n\n // fallback to the default content type if `value` is not simple value\n if (!contentType && typeof value == 'object') {\n contentType = FormData.DEFAULT_CONTENT_TYPE;\n }\n\n return contentType;\n};\n\nFormData.prototype._multiPartFooter = function() {\n return function(next) {\n var footer = FormData.LINE_BREAK;\n\n var lastPart = (this._streams.length === 0);\n if (lastPart) {\n footer += this._lastBoundary();\n }\n\n next(footer);\n }.bind(this);\n};\n\nFormData.prototype._lastBoundary = function() {\n return '--' + this.getBoundary() + '--' + FormData.LINE_BREAK;\n};\n\nFormData.prototype.getHeaders = function(userHeaders) {\n var header;\n var formHeaders = {\n 'content-type': 'multipart/form-data; boundary=' + this.getBoundary()\n };\n\n for (header in userHeaders) {\n if (userHeaders.hasOwnProperty(header)) {\n formHeaders[header.toLowerCase()] = userHeaders[header];\n }\n }\n\n return formHeaders;\n};\n\nFormData.prototype.setBoundary = function(boundary) {\n this._boundary = boundary;\n};\n\nFormData.prototype.getBoundary = function() {\n if (!this._boundary) {\n this._generateBoundary();\n }\n\n return this._boundary;\n};\n\nFormData.prototype.getBuffer = function() {\n var dataBuffer = new Buffer.alloc( 0 );\n var boundary = this.getBoundary();\n\n // Create the form content. Add Line breaks to the end of data.\n for (var i = 0, len = this._streams.length; i < len; i++) {\n if (typeof this._streams[i] !== 'function') {\n\n // Add content to the buffer.\n if(Buffer.isBuffer(this._streams[i])) {\n dataBuffer = Buffer.concat( [dataBuffer, this._streams[i]]);\n }else {\n dataBuffer = Buffer.concat( [dataBuffer, Buffer.from(this._streams[i])]);\n }\n\n // Add break after content.\n if (typeof this._streams[i] !== 'string' || this._streams[i].substring( 2, boundary.length + 2 ) !== boundary) {\n dataBuffer = Buffer.concat( [dataBuffer, Buffer.from(FormData.LINE_BREAK)] );\n }\n }\n }\n\n // Add the footer and return the Buffer object.\n return Buffer.concat( [dataBuffer, Buffer.from(this._lastBoundary())] );\n};\n\nFormData.prototype._generateBoundary = function() {\n // This generates a 50 character boundary similar to those used by Firefox.\n // They are optimized for boyer-moore parsing.\n var boundary = '--------------------------';\n for (var i = 0; i < 24; i++) {\n boundary += Math.floor(Math.random() * 10).toString(16);\n }\n\n this._boundary = boundary;\n};\n\n// Note: getLengthSync DOESN'T calculate streams length\n// As workaround one can calculate file size manually\n// and add it as knownLength option\nFormData.prototype.getLengthSync = function() {\n var knownLength = this._overheadLength + this._valueLength;\n\n // Don't get confused, there are 3 \"internal\" streams for each keyval pair\n // so it basically checks if there is any value added to the form\n if (this._streams.length) {\n knownLength += this._lastBoundary().length;\n }\n\n // https://github.com/form-data/form-data/issues/40\n if (!this.hasKnownLength()) {\n // Some async length retrievers are present\n // therefore synchronous length calculation is false.\n // Please use getLength(callback) to get proper length\n this._error(new Error('Cannot calculate proper length in synchronous way.'));\n }\n\n return knownLength;\n};\n\n// Public API to check if length of added values is known\n// https://github.com/form-data/form-data/issues/196\n// https://github.com/form-data/form-data/issues/262\nFormData.prototype.hasKnownLength = function() {\n var hasKnownLength = true;\n\n if (this._valuesToMeasure.length) {\n hasKnownLength = false;\n }\n\n return hasKnownLength;\n};\n\nFormData.prototype.getLength = function(cb) {\n var knownLength = this._overheadLength + this._valueLength;\n\n if (this._streams.length) {\n knownLength += this._lastBoundary().length;\n }\n\n if (!this._valuesToMeasure.length) {\n process.nextTick(cb.bind(this, null, knownLength));\n return;\n }\n\n asynckit.parallel(this._valuesToMeasure, this._lengthRetriever, function(err, values) {\n if (err) {\n cb(err);\n return;\n }\n\n values.forEach(function(length) {\n knownLength += length;\n });\n\n cb(null, knownLength);\n });\n};\n\nFormData.prototype.submit = function(params, cb) {\n var request\n , options\n , defaults = {method: 'post'}\n ;\n\n // parse provided url if it's string\n // or treat it as options object\n if (typeof params == 'string') {\n\n params = parseUrl(params);\n options = populate({\n port: params.port,\n path: params.pathname,\n host: params.hostname,\n protocol: params.protocol\n }, defaults);\n\n // use custom params\n } else {\n\n options = populate(params, defaults);\n // if no port provided use default one\n if (!options.port) {\n options.port = options.protocol == 'https:' ? 443 : 80;\n }\n }\n\n // put that good code in getHeaders to some use\n options.headers = this.getHeaders(params.headers);\n\n // https if specified, fallback to http in any other case\n if (options.protocol == 'https:') {\n request = https.request(options);\n } else {\n request = http.request(options);\n }\n\n // get content length and fire away\n this.getLength(function(err, length) {\n if (err && err !== 'Unknown stream') {\n this._error(err);\n return;\n }\n\n // add content length\n if (length) {\n request.setHeader('Content-Length', length);\n }\n\n this.pipe(request);\n if (cb) {\n var onResponse;\n\n var callback = function (error, responce) {\n request.removeListener('error', callback);\n request.removeListener('response', onResponse);\n\n return cb.call(this, error, responce);\n };\n\n onResponse = callback.bind(this, null);\n\n request.on('error', callback);\n request.on('response', onResponse);\n }\n }.bind(this));\n\n return request;\n};\n\nFormData.prototype._error = function(err) {\n if (!this.error) {\n this.error = err;\n this.pause();\n this.emit('error', err);\n }\n};\n\nFormData.prototype.toString = function () {\n return '[object FormData]';\n};\n", "'use strict';\n\nvar parseUrl = require('url').parse;\n\nvar DEFAULT_PORTS = {\n ftp: 21,\n gopher: 70,\n http: 80,\n https: 443,\n ws: 80,\n wss: 443,\n};\n\nvar stringEndsWith = String.prototype.endsWith || function(s) {\n return s.length <= this.length &&\n this.indexOf(s, this.length - s.length) !== -1;\n};\n\n/**\n * @param {string|object} url - The URL, or the result from url.parse.\n * @return {string} The URL of the proxy that should handle the request to the\n * given URL. If no proxy is set, this will be an empty string.\n */\nfunction getProxyForUrl(url) {\n var parsedUrl = typeof url === 'string' ? parseUrl(url) : url || {};\n var proto = parsedUrl.protocol;\n var hostname = parsedUrl.host;\n var port = parsedUrl.port;\n if (typeof hostname !== 'string' || !hostname || typeof proto !== 'string') {\n return ''; // Don't proxy URLs without a valid scheme or host.\n }\n\n proto = proto.split(':', 1)[0];\n // Stripping ports in this way instead of using parsedUrl.hostname to make\n // sure that the brackets around IPv6 addresses are kept.\n hostname = hostname.replace(/:\\d*$/, '');\n port = parseInt(port) || DEFAULT_PORTS[proto] || 0;\n if (!shouldProxy(hostname, port)) {\n return ''; // Don't proxy URLs that match NO_PROXY.\n }\n\n var proxy =\n getEnv('npm_config_' + proto + '_proxy') ||\n getEnv(proto + '_proxy') ||\n getEnv('npm_config_proxy') ||\n getEnv('all_proxy');\n if (proxy && proxy.indexOf('://') === -1) {\n // Missing scheme in proxy, default to the requested URL's scheme.\n proxy = proto + '://' + proxy;\n }\n return proxy;\n}\n\n/**\n * Determines whether a given URL should be proxied.\n *\n * @param {string} hostname - The host name of the URL.\n * @param {number} port - The effective port of the URL.\n * @returns {boolean} Whether the given URL should be proxied.\n * @private\n */\nfunction shouldProxy(hostname, port) {\n var NO_PROXY =\n (getEnv('npm_config_no_proxy') || getEnv('no_proxy')).toLowerCase();\n if (!NO_PROXY) {\n return true; // Always proxy if NO_PROXY is not set.\n }\n if (NO_PROXY === '*') {\n return false; // Never proxy if wildcard is set.\n }\n\n return NO_PROXY.split(/[,\\s]/).every(function(proxy) {\n if (!proxy) {\n return true; // Skip zero-length hosts.\n }\n var parsedProxy = proxy.match(/^(.+):(\\d+)$/);\n var parsedProxyHostname = parsedProxy ? parsedProxy[1] : proxy;\n var parsedProxyPort = parsedProxy ? parseInt(parsedProxy[2]) : 0;\n if (parsedProxyPort && parsedProxyPort !== port) {\n return true; // Skip if ports don't match.\n }\n\n if (!/^[.*]/.test(parsedProxyHostname)) {\n // No wildcards, so stop proxying if there is an exact match.\n return hostname !== parsedProxyHostname;\n }\n\n if (parsedProxyHostname.charAt(0) === '*') {\n // Remove leading wildcard.\n parsedProxyHostname = parsedProxyHostname.slice(1);\n }\n // Stop proxying if the hostname ends with the no_proxy host.\n return !stringEndsWith.call(hostname, parsedProxyHostname);\n });\n}\n\n/**\n * Get the value for an environment variable.\n *\n * @param {string} key - The name of the environment variable.\n * @return {string} The value of the environment variable.\n * @private\n */\nfunction getEnv(key) {\n return process.env[key.toLowerCase()] || process.env[key.toUpperCase()] || '';\n}\n\nexports.getProxyForUrl = getProxyForUrl;\n", "/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n * - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function(val, options) {\n options = options || {};\n var type = typeof val;\n if (type === 'string' && val.length > 0) {\n return parse(val);\n } else if (type === 'number' && isFinite(val)) {\n return options.long ? fmtLong(val) : fmtShort(val);\n }\n throw new Error(\n 'val is not a non-empty string or a valid number. val=' +\n JSON.stringify(val)\n );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n str = String(str);\n if (str.length > 100) {\n return;\n }\n var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n str\n );\n if (!match) {\n return;\n }\n var n = parseFloat(match[1]);\n var type = (match[2] || 'ms').toLowerCase();\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'weeks':\n case 'week':\n case 'w':\n return n * w;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n default:\n return undefined;\n }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return Math.round(ms / d) + 'd';\n }\n if (msAbs >= h) {\n return Math.round(ms / h) + 'h';\n }\n if (msAbs >= m) {\n return Math.round(ms / m) + 'm';\n }\n if (msAbs >= s) {\n return Math.round(ms / s) + 's';\n }\n return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return plural(ms, msAbs, d, 'day');\n }\n if (msAbs >= h) {\n return plural(ms, msAbs, h, 'hour');\n }\n if (msAbs >= m) {\n return plural(ms, msAbs, m, 'minute');\n }\n if (msAbs >= s) {\n return plural(ms, msAbs, s, 'second');\n }\n return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n var isPlural = msAbs >= n * 1.5;\n return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}\n", "\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n */\n\nfunction setup(env) {\n\tcreateDebug.debug = createDebug;\n\tcreateDebug.default = createDebug;\n\tcreateDebug.coerce = coerce;\n\tcreateDebug.disable = disable;\n\tcreateDebug.enable = enable;\n\tcreateDebug.enabled = enabled;\n\tcreateDebug.humanize = require('ms');\n\tcreateDebug.destroy = destroy;\n\n\tObject.keys(env).forEach(key => {\n\t\tcreateDebug[key] = env[key];\n\t});\n\n\t/**\n\t* The currently active debug mode names, and names to skip.\n\t*/\n\n\tcreateDebug.names = [];\n\tcreateDebug.skips = [];\n\n\t/**\n\t* Map of special \"%n\" handling functions, for the debug \"format\" argument.\n\t*\n\t* Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n\t*/\n\tcreateDebug.formatters = {};\n\n\t/**\n\t* Selects a color for a debug namespace\n\t* @param {String} namespace The namespace string for the debug instance to be colored\n\t* @return {Number|String} An ANSI color code for the given namespace\n\t* @api private\n\t*/\n\tfunction selectColor(namespace) {\n\t\tlet hash = 0;\n\n\t\tfor (let i = 0; i < namespace.length; i++) {\n\t\t\thash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n\t\t\thash |= 0; // Convert to 32bit integer\n\t\t}\n\n\t\treturn createDebug.colors[Math.abs(hash) % createDebug.colors.length];\n\t}\n\tcreateDebug.selectColor = selectColor;\n\n\t/**\n\t* Create a debugger with the given `namespace`.\n\t*\n\t* @param {String} namespace\n\t* @return {Function}\n\t* @api public\n\t*/\n\tfunction createDebug(namespace) {\n\t\tlet prevTime;\n\t\tlet enableOverride = null;\n\t\tlet namespacesCache;\n\t\tlet enabledCache;\n\n\t\tfunction debug(...args) {\n\t\t\t// Disabled?\n\t\t\tif (!debug.enabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst self = debug;\n\n\t\t\t// Set `diff` timestamp\n\t\t\tconst curr = Number(new Date());\n\t\t\tconst ms = curr - (prevTime || curr);\n\t\t\tself.diff = ms;\n\t\t\tself.prev = prevTime;\n\t\t\tself.curr = curr;\n\t\t\tprevTime = curr;\n\n\t\t\targs[0] = createDebug.coerce(args[0]);\n\n\t\t\tif (typeof args[0] !== 'string') {\n\t\t\t\t// Anything else let's inspect with %O\n\t\t\t\targs.unshift('%O');\n\t\t\t}\n\n\t\t\t// Apply any `formatters` transformations\n\t\t\tlet index = 0;\n\t\t\targs[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {\n\t\t\t\t// If we encounter an escaped % then don't increase the array index\n\t\t\t\tif (match === '%%') {\n\t\t\t\t\treturn '%';\n\t\t\t\t}\n\t\t\t\tindex++;\n\t\t\t\tconst formatter = createDebug.formatters[format];\n\t\t\t\tif (typeof formatter === 'function') {\n\t\t\t\t\tconst val = args[index];\n\t\t\t\t\tmatch = formatter.call(self, val);\n\n\t\t\t\t\t// Now we need to remove `args[index]` since it's inlined in the `format`\n\t\t\t\t\targs.splice(index, 1);\n\t\t\t\t\tindex--;\n\t\t\t\t}\n\t\t\t\treturn match;\n\t\t\t});\n\n\t\t\t// Apply env-specific formatting (colors, etc.)\n\t\t\tcreateDebug.formatArgs.call(self, args);\n\n\t\t\tconst logFn = self.log || createDebug.log;\n\t\t\tlogFn.apply(self, args);\n\t\t}\n\n\t\tdebug.namespace = namespace;\n\t\tdebug.useColors = createDebug.useColors();\n\t\tdebug.color = createDebug.selectColor(namespace);\n\t\tdebug.extend = extend;\n\t\tdebug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release.\n\n\t\tObject.defineProperty(debug, 'enabled', {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: false,\n\t\t\tget: () => {\n\t\t\t\tif (enableOverride !== null) {\n\t\t\t\t\treturn enableOverride;\n\t\t\t\t}\n\t\t\t\tif (namespacesCache !== createDebug.namespaces) {\n\t\t\t\t\tnamespacesCache = createDebug.namespaces;\n\t\t\t\t\tenabledCache = createDebug.enabled(namespace);\n\t\t\t\t}\n\n\t\t\t\treturn enabledCache;\n\t\t\t},\n\t\t\tset: v => {\n\t\t\t\tenableOverride = v;\n\t\t\t}\n\t\t});\n\n\t\t// Env-specific initialization logic for debug instances\n\t\tif (typeof createDebug.init === 'function') {\n\t\t\tcreateDebug.init(debug);\n\t\t}\n\n\t\treturn debug;\n\t}\n\n\tfunction extend(namespace, delimiter) {\n\t\tconst newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);\n\t\tnewDebug.log = this.log;\n\t\treturn newDebug;\n\t}\n\n\t/**\n\t* Enables a debug mode by namespaces. This can include modes\n\t* separated by a colon and wildcards.\n\t*\n\t* @param {String} namespaces\n\t* @api public\n\t*/\n\tfunction enable(namespaces) {\n\t\tcreateDebug.save(namespaces);\n\t\tcreateDebug.namespaces = namespaces;\n\n\t\tcreateDebug.names = [];\n\t\tcreateDebug.skips = [];\n\n\t\tlet i;\n\t\tconst split = (typeof namespaces === 'string' ? namespaces : '').split(/[\\s,]+/);\n\t\tconst len = split.length;\n\n\t\tfor (i = 0; i < len; i++) {\n\t\t\tif (!split[i]) {\n\t\t\t\t// ignore empty strings\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tnamespaces = split[i].replace(/\\*/g, '.*?');\n\n\t\t\tif (namespaces[0] === '-') {\n\t\t\t\tcreateDebug.skips.push(new RegExp('^' + namespaces.slice(1) + '$'));\n\t\t\t} else {\n\t\t\t\tcreateDebug.names.push(new RegExp('^' + namespaces + '$'));\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t* Disable debug output.\n\t*\n\t* @return {String} namespaces\n\t* @api public\n\t*/\n\tfunction disable() {\n\t\tconst namespaces = [\n\t\t\t...createDebug.names.map(toNamespace),\n\t\t\t...createDebug.skips.map(toNamespace).map(namespace => '-' + namespace)\n\t\t].join(',');\n\t\tcreateDebug.enable('');\n\t\treturn namespaces;\n\t}\n\n\t/**\n\t* Returns true if the given mode name is enabled, false otherwise.\n\t*\n\t* @param {String} name\n\t* @return {Boolean}\n\t* @api public\n\t*/\n\tfunction enabled(name) {\n\t\tif (name[name.length - 1] === '*') {\n\t\t\treturn true;\n\t\t}\n\n\t\tlet i;\n\t\tlet len;\n\n\t\tfor (i = 0, len = createDebug.skips.length; i < len; i++) {\n\t\t\tif (createDebug.skips[i].test(name)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tfor (i = 0, len = createDebug.names.length; i < len; i++) {\n\t\t\tif (createDebug.names[i].test(name)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t* Convert regexp to namespace\n\t*\n\t* @param {RegExp} regxep\n\t* @return {String} namespace\n\t* @api private\n\t*/\n\tfunction toNamespace(regexp) {\n\t\treturn regexp.toString()\n\t\t\t.substring(2, regexp.toString().length - 2)\n\t\t\t.replace(/\\.\\*\\?$/, '*');\n\t}\n\n\t/**\n\t* Coerce `val`.\n\t*\n\t* @param {Mixed} val\n\t* @return {Mixed}\n\t* @api private\n\t*/\n\tfunction coerce(val) {\n\t\tif (val instanceof Error) {\n\t\t\treturn val.stack || val.message;\n\t\t}\n\t\treturn val;\n\t}\n\n\t/**\n\t* XXX DO NOT USE. This is a temporary stub function.\n\t* XXX It WILL be removed in the next major release.\n\t*/\n\tfunction destroy() {\n\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t}\n\n\tcreateDebug.enable(createDebug.load());\n\n\treturn createDebug;\n}\n\nmodule.exports = setup;\n", "/* eslint-env browser */\n\n/**\n * This is the web browser implementation of `debug()`.\n */\n\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = localstorage();\nexports.destroy = (() => {\n\tlet warned = false;\n\n\treturn () => {\n\t\tif (!warned) {\n\t\t\twarned = true;\n\t\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t\t}\n\t};\n})();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n\t'#0000CC',\n\t'#0000FF',\n\t'#0033CC',\n\t'#0033FF',\n\t'#0066CC',\n\t'#0066FF',\n\t'#0099CC',\n\t'#0099FF',\n\t'#00CC00',\n\t'#00CC33',\n\t'#00CC66',\n\t'#00CC99',\n\t'#00CCCC',\n\t'#00CCFF',\n\t'#3300CC',\n\t'#3300FF',\n\t'#3333CC',\n\t'#3333FF',\n\t'#3366CC',\n\t'#3366FF',\n\t'#3399CC',\n\t'#3399FF',\n\t'#33CC00',\n\t'#33CC33',\n\t'#33CC66',\n\t'#33CC99',\n\t'#33CCCC',\n\t'#33CCFF',\n\t'#6600CC',\n\t'#6600FF',\n\t'#6633CC',\n\t'#6633FF',\n\t'#66CC00',\n\t'#66CC33',\n\t'#9900CC',\n\t'#9900FF',\n\t'#9933CC',\n\t'#9933FF',\n\t'#99CC00',\n\t'#99CC33',\n\t'#CC0000',\n\t'#CC0033',\n\t'#CC0066',\n\t'#CC0099',\n\t'#CC00CC',\n\t'#CC00FF',\n\t'#CC3300',\n\t'#CC3333',\n\t'#CC3366',\n\t'#CC3399',\n\t'#CC33CC',\n\t'#CC33FF',\n\t'#CC6600',\n\t'#CC6633',\n\t'#CC9900',\n\t'#CC9933',\n\t'#CCCC00',\n\t'#CCCC33',\n\t'#FF0000',\n\t'#FF0033',\n\t'#FF0066',\n\t'#FF0099',\n\t'#FF00CC',\n\t'#FF00FF',\n\t'#FF3300',\n\t'#FF3333',\n\t'#FF3366',\n\t'#FF3399',\n\t'#FF33CC',\n\t'#FF33FF',\n\t'#FF6600',\n\t'#FF6633',\n\t'#FF9900',\n\t'#FF9933',\n\t'#FFCC00',\n\t'#FFCC33'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\n// eslint-disable-next-line complexity\nfunction useColors() {\n\t// NB: In an Electron preload script, document will be defined but not fully\n\t// initialized. Since we know we're in Chrome, we'll just detect this case\n\t// explicitly\n\tif (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {\n\t\treturn true;\n\t}\n\n\t// Internet Explorer and Edge do not support colors.\n\tif (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n\t\treturn false;\n\t}\n\n\t// Is webkit? http://stackoverflow.com/a/16459606/376773\n\t// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n\treturn (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n\t\t// Is firebug? http://stackoverflow.com/a/398120/376773\n\t\t(typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n\t\t// Is firefox >= v31?\n\t\t// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||\n\t\t// Double check webkit in userAgent just in case we are in a worker\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\targs[0] = (this.useColors ? '%c' : '') +\n\t\tthis.namespace +\n\t\t(this.useColors ? ' %c' : ' ') +\n\t\targs[0] +\n\t\t(this.useColors ? '%c ' : ' ') +\n\t\t'+' + module.exports.humanize(this.diff);\n\n\tif (!this.useColors) {\n\t\treturn;\n\t}\n\n\tconst c = 'color: ' + this.color;\n\targs.splice(1, 0, c, 'color: inherit');\n\n\t// The final \"%c\" is somewhat tricky, because there could be other\n\t// arguments passed either before or after the %c, so we need to\n\t// figure out the correct index to insert the CSS into\n\tlet index = 0;\n\tlet lastC = 0;\n\targs[0].replace(/%[a-zA-Z%]/g, match => {\n\t\tif (match === '%%') {\n\t\t\treturn;\n\t\t}\n\t\tindex++;\n\t\tif (match === '%c') {\n\t\t\t// We only are interested in the *last* %c\n\t\t\t// (the user may have provided their own)\n\t\t\tlastC = index;\n\t\t}\n\t});\n\n\targs.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.debug()` when available.\n * No-op when `console.debug` is not a \"function\".\n * If `console.debug` is not available, falls back\n * to `console.log`.\n *\n * @api public\n */\nexports.log = console.debug || console.log || (() => {});\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\ttry {\n\t\tif (namespaces) {\n\t\t\texports.storage.setItem('debug', namespaces);\n\t\t} else {\n\t\t\texports.storage.removeItem('debug');\n\t\t}\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\nfunction load() {\n\tlet r;\n\ttry {\n\t\tr = exports.storage.getItem('debug');\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n\n\t// If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n\tif (!r && typeof process !== 'undefined' && 'env' in process) {\n\t\tr = process.env.DEBUG;\n\t}\n\n\treturn r;\n}\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n\ttry {\n\t\t// TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context\n\t\t// The Browser also has localStorage in the global context.\n\t\treturn localStorage;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nformatters.j = function (v) {\n\ttry {\n\t\treturn JSON.stringify(v);\n\t} catch (error) {\n\t\treturn '[UnexpectedJSONParseError]: ' + error.message;\n\t}\n};\n", "'use strict';\n\nmodule.exports = (flag, argv = process.argv) => {\n\tconst prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--');\n\tconst position = argv.indexOf(prefix + flag);\n\tconst terminatorPosition = argv.indexOf('--');\n\treturn position !== -1 && (terminatorPosition === -1 || position < terminatorPosition);\n};\n", "'use strict';\nconst os = require('os');\nconst tty = require('tty');\nconst hasFlag = require('has-flag');\n\nconst {env} = process;\n\nlet forceColor;\nif (hasFlag('no-color') ||\n\thasFlag('no-colors') ||\n\thasFlag('color=false') ||\n\thasFlag('color=never')) {\n\tforceColor = 0;\n} else if (hasFlag('color') ||\n\thasFlag('colors') ||\n\thasFlag('color=true') ||\n\thasFlag('color=always')) {\n\tforceColor = 1;\n}\n\nif ('FORCE_COLOR' in env) {\n\tif (env.FORCE_COLOR === 'true') {\n\t\tforceColor = 1;\n\t} else if (env.FORCE_COLOR === 'false') {\n\t\tforceColor = 0;\n\t} else {\n\t\tforceColor = env.FORCE_COLOR.length === 0 ? 1 : Math.min(parseInt(env.FORCE_COLOR, 10), 3);\n\t}\n}\n\nfunction translateLevel(level) {\n\tif (level === 0) {\n\t\treturn false;\n\t}\n\n\treturn {\n\t\tlevel,\n\t\thasBasic: true,\n\t\thas256: level >= 2,\n\t\thas16m: level >= 3\n\t};\n}\n\nfunction supportsColor(haveStream, streamIsTTY) {\n\tif (forceColor === 0) {\n\t\treturn 0;\n\t}\n\n\tif (hasFlag('color=16m') ||\n\t\thasFlag('color=full') ||\n\t\thasFlag('color=truecolor')) {\n\t\treturn 3;\n\t}\n\n\tif (hasFlag('color=256')) {\n\t\treturn 2;\n\t}\n\n\tif (haveStream && !streamIsTTY && forceColor === undefined) {\n\t\treturn 0;\n\t}\n\n\tconst min = forceColor || 0;\n\n\tif (env.TERM === 'dumb') {\n\t\treturn min;\n\t}\n\n\tif (process.platform === 'win32') {\n\t\t// Windows 10 build 10586 is the first Windows release that supports 256 colors.\n\t\t// Windows 10 build 14931 is the first release that supports 16m/TrueColor.\n\t\tconst osRelease = os.release().split('.');\n\t\tif (\n\t\t\tNumber(osRelease[0]) >= 10 &&\n\t\t\tNumber(osRelease[2]) >= 10586\n\t\t) {\n\t\t\treturn Number(osRelease[2]) >= 14931 ? 3 : 2;\n\t\t}\n\n\t\treturn 1;\n\t}\n\n\tif ('CI' in env) {\n\t\tif (['TRAVIS', 'CIRCLECI', 'APPVEYOR', 'GITLAB_CI', 'GITHUB_ACTIONS', 'BUILDKITE'].some(sign => sign in env) || env.CI_NAME === 'codeship') {\n\t\t\treturn 1;\n\t\t}\n\n\t\treturn min;\n\t}\n\n\tif ('TEAMCITY_VERSION' in env) {\n\t\treturn /^(9\\.(0*[1-9]\\d*)\\.|\\d{2,}\\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0;\n\t}\n\n\tif (env.COLORTERM === 'truecolor') {\n\t\treturn 3;\n\t}\n\n\tif ('TERM_PROGRAM' in env) {\n\t\tconst version = parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10);\n\n\t\tswitch (env.TERM_PROGRAM) {\n\t\t\tcase 'iTerm.app':\n\t\t\t\treturn version >= 3 ? 3 : 2;\n\t\t\tcase 'Apple_Terminal':\n\t\t\t\treturn 2;\n\t\t\t// No default\n\t\t}\n\t}\n\n\tif (/-256(color)?$/i.test(env.TERM)) {\n\t\treturn 2;\n\t}\n\n\tif (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {\n\t\treturn 1;\n\t}\n\n\tif ('COLORTERM' in env) {\n\t\treturn 1;\n\t}\n\n\treturn min;\n}\n\nfunction getSupportLevel(stream) {\n\tconst level = supportsColor(stream, stream && stream.isTTY);\n\treturn translateLevel(level);\n}\n\nmodule.exports = {\n\tsupportsColor: getSupportLevel,\n\tstdout: translateLevel(supportsColor(true, tty.isatty(1))),\n\tstderr: translateLevel(supportsColor(true, tty.isatty(2)))\n};\n", "/**\n * Module dependencies.\n */\n\nconst tty = require('tty');\nconst util = require('util');\n\n/**\n * This is the Node.js implementation of `debug()`.\n */\n\nexports.init = init;\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.destroy = util.deprecate(\n\t() => {},\n\t'Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.'\n);\n\n/**\n * Colors.\n */\n\nexports.colors = [6, 2, 3, 4, 5, 1];\n\ntry {\n\t// Optional dependency (as in, doesn't need to be installed, NOT like optionalDependencies in package.json)\n\t// eslint-disable-next-line import/no-extraneous-dependencies\n\tconst supportsColor = require('supports-color');\n\n\tif (supportsColor && (supportsColor.stderr || supportsColor).level >= 2) {\n\t\texports.colors = [\n\t\t\t20,\n\t\t\t21,\n\t\t\t26,\n\t\t\t27,\n\t\t\t32,\n\t\t\t33,\n\t\t\t38,\n\t\t\t39,\n\t\t\t40,\n\t\t\t41,\n\t\t\t42,\n\t\t\t43,\n\t\t\t44,\n\t\t\t45,\n\t\t\t56,\n\t\t\t57,\n\t\t\t62,\n\t\t\t63,\n\t\t\t68,\n\t\t\t69,\n\t\t\t74,\n\t\t\t75,\n\t\t\t76,\n\t\t\t77,\n\t\t\t78,\n\t\t\t79,\n\t\t\t80,\n\t\t\t81,\n\t\t\t92,\n\t\t\t93,\n\t\t\t98,\n\t\t\t99,\n\t\t\t112,\n\t\t\t113,\n\t\t\t128,\n\t\t\t129,\n\t\t\t134,\n\t\t\t135,\n\t\t\t148,\n\t\t\t149,\n\t\t\t160,\n\t\t\t161,\n\t\t\t162,\n\t\t\t163,\n\t\t\t164,\n\t\t\t165,\n\t\t\t166,\n\t\t\t167,\n\t\t\t168,\n\t\t\t169,\n\t\t\t170,\n\t\t\t171,\n\t\t\t172,\n\t\t\t173,\n\t\t\t178,\n\t\t\t179,\n\t\t\t184,\n\t\t\t185,\n\t\t\t196,\n\t\t\t197,\n\t\t\t198,\n\t\t\t199,\n\t\t\t200,\n\t\t\t201,\n\t\t\t202,\n\t\t\t203,\n\t\t\t204,\n\t\t\t205,\n\t\t\t206,\n\t\t\t207,\n\t\t\t208,\n\t\t\t209,\n\t\t\t214,\n\t\t\t215,\n\t\t\t220,\n\t\t\t221\n\t\t];\n\t}\n} catch (error) {\n\t// Swallow - we only care if `supports-color` is available; it doesn't have to be.\n}\n\n/**\n * Build up the default `inspectOpts` object from the environment variables.\n *\n * $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js\n */\n\nexports.inspectOpts = Object.keys(process.env).filter(key => {\n\treturn /^debug_/i.test(key);\n}).reduce((obj, key) => {\n\t// Camel-case\n\tconst prop = key\n\t\t.substring(6)\n\t\t.toLowerCase()\n\t\t.replace(/_([a-z])/g, (_, k) => {\n\t\t\treturn k.toUpperCase();\n\t\t});\n\n\t// Coerce string value into JS value\n\tlet val = process.env[key];\n\tif (/^(yes|on|true|enabled)$/i.test(val)) {\n\t\tval = true;\n\t} else if (/^(no|off|false|disabled)$/i.test(val)) {\n\t\tval = false;\n\t} else if (val === 'null') {\n\t\tval = null;\n\t} else {\n\t\tval = Number(val);\n\t}\n\n\tobj[prop] = val;\n\treturn obj;\n}, {});\n\n/**\n * Is stdout a TTY? Colored output is enabled when `true`.\n */\n\nfunction useColors() {\n\treturn 'colors' in exports.inspectOpts ?\n\t\tBoolean(exports.inspectOpts.colors) :\n\t\ttty.isatty(process.stderr.fd);\n}\n\n/**\n * Adds ANSI color escape codes if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\tconst {namespace: name, useColors} = this;\n\n\tif (useColors) {\n\t\tconst c = this.color;\n\t\tconst colorCode = '\\u001B[3' + (c < 8 ? c : '8;5;' + c);\n\t\tconst prefix = ` ${colorCode};1m${name} \\u001B[0m`;\n\n\t\targs[0] = prefix + args[0].split('\\n').join('\\n' + prefix);\n\t\targs.push(colorCode + 'm+' + module.exports.humanize(this.diff) + '\\u001B[0m');\n\t} else {\n\t\targs[0] = getDate() + name + ' ' + args[0];\n\t}\n}\n\nfunction getDate() {\n\tif (exports.inspectOpts.hideDate) {\n\t\treturn '';\n\t}\n\treturn new Date().toISOString() + ' ';\n}\n\n/**\n * Invokes `util.format()` with the specified arguments and writes to stderr.\n */\n\nfunction log(...args) {\n\treturn process.stderr.write(util.format(...args) + '\\n');\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\tif (namespaces) {\n\t\tprocess.env.DEBUG = namespaces;\n\t} else {\n\t\t// If you set a process.env field to null or undefined, it gets cast to the\n\t\t// string 'null' or 'undefined'. Just delete instead.\n\t\tdelete process.env.DEBUG;\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n\treturn process.env.DEBUG;\n}\n\n/**\n * Init logic for `debug` instances.\n *\n * Create a new `inspectOpts` object in case `useColors` is set\n * differently for a particular `debug` instance.\n */\n\nfunction init(debug) {\n\tdebug.inspectOpts = {};\n\n\tconst keys = Object.keys(exports.inspectOpts);\n\tfor (let i = 0; i < keys.length; i++) {\n\t\tdebug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]];\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %o to `util.inspect()`, all on a single line.\n */\n\nformatters.o = function (v) {\n\tthis.inspectOpts.colors = this.useColors;\n\treturn util.inspect(v, this.inspectOpts)\n\t\t.split('\\n')\n\t\t.map(str => str.trim())\n\t\t.join(' ');\n};\n\n/**\n * Map %O to `util.inspect()`, allowing multiple lines if needed.\n */\n\nformatters.O = function (v) {\n\tthis.inspectOpts.colors = this.useColors;\n\treturn util.inspect(v, this.inspectOpts);\n};\n", "/**\n * Detect Electron renderer / nwjs process, which is node, but we should\n * treat as a browser.\n */\n\nif (typeof process === 'undefined' || process.type === 'renderer' || process.browser === true || process.__nwjs) {\n\tmodule.exports = require('./browser.js');\n} else {\n\tmodule.exports = require('./node.js');\n}\n", "var debug;\n\nmodule.exports = function () {\n if (!debug) {\n try {\n /* eslint global-require: off */\n debug = require(\"debug\")(\"follow-redirects\");\n }\n catch (error) { /* */ }\n if (typeof debug !== \"function\") {\n debug = function () { /* */ };\n }\n }\n debug.apply(null, arguments);\n};\n", "var url = require(\"url\");\nvar URL = url.URL;\nvar http = require(\"http\");\nvar https = require(\"https\");\nvar Writable = require(\"stream\").Writable;\nvar assert = require(\"assert\");\nvar debug = require(\"./debug\");\n\n// Whether to use the native URL object or the legacy url module\nvar useNativeURL = false;\ntry {\n assert(new URL());\n}\ncatch (error) {\n useNativeURL = error.code === \"ERR_INVALID_URL\";\n}\n\n// URL fields to preserve in copy operations\nvar preservedUrlFields = [\n \"auth\",\n \"host\",\n \"hostname\",\n \"href\",\n \"path\",\n \"pathname\",\n \"port\",\n \"protocol\",\n \"query\",\n \"search\",\n \"hash\",\n];\n\n// Create handlers that pass events from native requests\nvar events = [\"abort\", \"aborted\", \"connect\", \"error\", \"socket\", \"timeout\"];\nvar eventHandlers = Object.create(null);\nevents.forEach(function (event) {\n eventHandlers[event] = function (arg1, arg2, arg3) {\n this._redirectable.emit(event, arg1, arg2, arg3);\n };\n});\n\n// Error types with codes\nvar InvalidUrlError = createErrorType(\n \"ERR_INVALID_URL\",\n \"Invalid URL\",\n TypeError\n);\nvar RedirectionError = createErrorType(\n \"ERR_FR_REDIRECTION_FAILURE\",\n \"Redirected request failed\"\n);\nvar TooManyRedirectsError = createErrorType(\n \"ERR_FR_TOO_MANY_REDIRECTS\",\n \"Maximum number of redirects exceeded\",\n RedirectionError\n);\nvar MaxBodyLengthExceededError = createErrorType(\n \"ERR_FR_MAX_BODY_LENGTH_EXCEEDED\",\n \"Request body larger than maxBodyLength limit\"\n);\nvar WriteAfterEndError = createErrorType(\n \"ERR_STREAM_WRITE_AFTER_END\",\n \"write after end\"\n);\n\n// istanbul ignore next\nvar destroy = Writable.prototype.destroy || noop;\n\n// An HTTP(S) request that can be redirected\nfunction RedirectableRequest(options, responseCallback) {\n // Initialize the request\n Writable.call(this);\n this._sanitizeOptions(options);\n this._options = options;\n this._ended = false;\n this._ending = false;\n this._redirectCount = 0;\n this._redirects = [];\n this._requestBodyLength = 0;\n this._requestBodyBuffers = [];\n\n // Attach a callback if passed\n if (responseCallback) {\n this.on(\"response\", responseCallback);\n }\n\n // React to responses of native requests\n var self = this;\n this._onNativeResponse = function (response) {\n try {\n self._processResponse(response);\n }\n catch (cause) {\n self.emit(\"error\", cause instanceof RedirectionError ?\n cause : new RedirectionError({ cause: cause }));\n }\n };\n\n // Perform the first request\n this._performRequest();\n}\nRedirectableRequest.prototype = Object.create(Writable.prototype);\n\nRedirectableRequest.prototype.abort = function () {\n destroyRequest(this._currentRequest);\n this._currentRequest.abort();\n this.emit(\"abort\");\n};\n\nRedirectableRequest.prototype.destroy = function (error) {\n destroyRequest(this._currentRequest, error);\n destroy.call(this, error);\n return this;\n};\n\n// Writes buffered data to the current native request\nRedirectableRequest.prototype.write = function (data, encoding, callback) {\n // Writing is not allowed if end has been called\n if (this._ending) {\n throw new WriteAfterEndError();\n }\n\n // Validate input and shift parameters if necessary\n if (!isString(data) && !isBuffer(data)) {\n throw new TypeError(\"data should be a string, Buffer or Uint8Array\");\n }\n if (isFunction(encoding)) {\n callback = encoding;\n encoding = null;\n }\n\n // Ignore empty buffers, since writing them doesn't invoke the callback\n // https://github.com/nodejs/node/issues/22066\n if (data.length === 0) {\n if (callback) {\n callback();\n }\n return;\n }\n // Only write when we don't exceed the maximum body length\n if (this._requestBodyLength + data.length <= this._options.maxBodyLength) {\n this._requestBodyLength += data.length;\n this._requestBodyBuffers.push({ data: data, encoding: encoding });\n this._currentRequest.write(data, encoding, callback);\n }\n // Error when we exceed the maximum body length\n else {\n this.emit(\"error\", new MaxBodyLengthExceededError());\n this.abort();\n }\n};\n\n// Ends the current native request\nRedirectableRequest.prototype.end = function (data, encoding, callback) {\n // Shift parameters if necessary\n if (isFunction(data)) {\n callback = data;\n data = encoding = null;\n }\n else if (isFunction(encoding)) {\n callback = encoding;\n encoding = null;\n }\n\n // Write data if needed and end\n if (!data) {\n this._ended = this._ending = true;\n this._currentRequest.end(null, null, callback);\n }\n else {\n var self = this;\n var currentRequest = this._currentRequest;\n this.write(data, encoding, function () {\n self._ended = true;\n currentRequest.end(null, null, callback);\n });\n this._ending = true;\n }\n};\n\n// Sets a header value on the current native request\nRedirectableRequest.prototype.setHeader = function (name, value) {\n this._options.headers[name] = value;\n this._currentRequest.setHeader(name, value);\n};\n\n// Clears a header value on the current native request\nRedirectableRequest.prototype.removeHeader = function (name) {\n delete this._options.headers[name];\n this._currentRequest.removeHeader(name);\n};\n\n// Global timeout for all underlying requests\nRedirectableRequest.prototype.setTimeout = function (msecs, callback) {\n var self = this;\n\n // Destroys the socket on timeout\n function destroyOnTimeout(socket) {\n socket.setTimeout(msecs);\n socket.removeListener(\"timeout\", socket.destroy);\n socket.addListener(\"timeout\", socket.destroy);\n }\n\n // Sets up a timer to trigger a timeout event\n function startTimer(socket) {\n if (self._timeout) {\n clearTimeout(self._timeout);\n }\n self._timeout = setTimeout(function () {\n self.emit(\"timeout\");\n clearTimer();\n }, msecs);\n destroyOnTimeout(socket);\n }\n\n // Stops a timeout from triggering\n function clearTimer() {\n // Clear the timeout\n if (self._timeout) {\n clearTimeout(self._timeout);\n self._timeout = null;\n }\n\n // Clean up all attached listeners\n self.removeListener(\"abort\", clearTimer);\n self.removeListener(\"error\", clearTimer);\n self.removeListener(\"response\", clearTimer);\n self.removeListener(\"close\", clearTimer);\n if (callback) {\n self.removeListener(\"timeout\", callback);\n }\n if (!self.socket) {\n self._currentRequest.removeListener(\"socket\", startTimer);\n }\n }\n\n // Attach callback if passed\n if (callback) {\n this.on(\"timeout\", callback);\n }\n\n // Start the timer if or when the socket is opened\n if (this.socket) {\n startTimer(this.socket);\n }\n else {\n this._currentRequest.once(\"socket\", startTimer);\n }\n\n // Clean up on events\n this.on(\"socket\", destroyOnTimeout);\n this.on(\"abort\", clearTimer);\n this.on(\"error\", clearTimer);\n this.on(\"response\", clearTimer);\n this.on(\"close\", clearTimer);\n\n return this;\n};\n\n// Proxy all other public ClientRequest methods\n[\n \"flushHeaders\", \"getHeader\",\n \"setNoDelay\", \"setSocketKeepAlive\",\n].forEach(function (method) {\n RedirectableRequest.prototype[method] = function (a, b) {\n return this._currentRequest[method](a, b);\n };\n});\n\n// Proxy all public ClientRequest properties\n[\"aborted\", \"connection\", \"socket\"].forEach(function (property) {\n Object.defineProperty(RedirectableRequest.prototype, property, {\n get: function () { return this._currentRequest[property]; },\n });\n});\n\nRedirectableRequest.prototype._sanitizeOptions = function (options) {\n // Ensure headers are always present\n if (!options.headers) {\n options.headers = {};\n }\n\n // Since http.request treats host as an alias of hostname,\n // but the url module interprets host as hostname plus port,\n // eliminate the host property to avoid confusion.\n if (options.host) {\n // Use hostname if set, because it has precedence\n if (!options.hostname) {\n options.hostname = options.host;\n }\n delete options.host;\n }\n\n // Complete the URL object when necessary\n if (!options.pathname && options.path) {\n var searchPos = options.path.indexOf(\"?\");\n if (searchPos < 0) {\n options.pathname = options.path;\n }\n else {\n options.pathname = options.path.substring(0, searchPos);\n options.search = options.path.substring(searchPos);\n }\n }\n};\n\n\n// Executes the next native request (initial or redirect)\nRedirectableRequest.prototype._performRequest = function () {\n // Load the native protocol\n var protocol = this._options.protocol;\n var nativeProtocol = this._options.nativeProtocols[protocol];\n if (!nativeProtocol) {\n throw new TypeError(\"Unsupported protocol \" + protocol);\n }\n\n // If specified, use the agent corresponding to the protocol\n // (HTTP and HTTPS use different types of agents)\n if (this._options.agents) {\n var scheme = protocol.slice(0, -1);\n this._options.agent = this._options.agents[scheme];\n }\n\n // Create the native request and set up its event handlers\n var request = this._currentRequest =\n nativeProtocol.request(this._options, this._onNativeResponse);\n request._redirectable = this;\n for (var event of events) {\n request.on(event, eventHandlers[event]);\n }\n\n // RFC7230\u00A75.3.1: When making a request directly to an origin server, [\u2026]\n // a client MUST send only the absolute path [\u2026] as the request-target.\n this._currentUrl = /^\\//.test(this._options.path) ?\n url.format(this._options) :\n // When making a request to a proxy, [\u2026]\n // a client MUST send the target URI in absolute-form [\u2026].\n this._options.path;\n\n // End a redirected request\n // (The first request must be ended explicitly with RedirectableRequest#end)\n if (this._isRedirect) {\n // Write the request entity and end\n var i = 0;\n var self = this;\n var buffers = this._requestBodyBuffers;\n (function writeNext(error) {\n // Only write if this request has not been redirected yet\n /* istanbul ignore else */\n if (request === self._currentRequest) {\n // Report any write errors\n /* istanbul ignore if */\n if (error) {\n self.emit(\"error\", error);\n }\n // Write the next buffer if there are still left\n else if (i < buffers.length) {\n var buffer = buffers[i++];\n /* istanbul ignore else */\n if (!request.finished) {\n request.write(buffer.data, buffer.encoding, writeNext);\n }\n }\n // End the request if `end` has been called on us\n else if (self._ended) {\n request.end();\n }\n }\n }());\n }\n};\n\n// Processes a response from the current native request\nRedirectableRequest.prototype._processResponse = function (response) {\n // Store the redirected response\n var statusCode = response.statusCode;\n if (this._options.trackRedirects) {\n this._redirects.push({\n url: this._currentUrl,\n headers: response.headers,\n statusCode: statusCode,\n });\n }\n\n // RFC7231\u00A76.4: The 3xx (Redirection) class of status code indicates\n // that further action needs to be taken by the user agent in order to\n // fulfill the request. If a Location header field is provided,\n // the user agent MAY automatically redirect its request to the URI\n // referenced by the Location field value,\n // even if the specific status code is not understood.\n\n // If the response is not a redirect; return it as-is\n var location = response.headers.location;\n if (!location || this._options.followRedirects === false ||\n statusCode < 300 || statusCode >= 400) {\n response.responseUrl = this._currentUrl;\n response.redirects = this._redirects;\n this.emit(\"response\", response);\n\n // Clean up\n this._requestBodyBuffers = [];\n return;\n }\n\n // The response is a redirect, so abort the current request\n destroyRequest(this._currentRequest);\n // Discard the remainder of the response to avoid waiting for data\n response.destroy();\n\n // RFC7231\u00A76.4: A client SHOULD detect and intervene\n // in cyclical redirections (i.e., \"infinite\" redirection loops).\n if (++this._redirectCount > this._options.maxRedirects) {\n throw new TooManyRedirectsError();\n }\n\n // Store the request headers if applicable\n var requestHeaders;\n var beforeRedirect = this._options.beforeRedirect;\n if (beforeRedirect) {\n requestHeaders = Object.assign({\n // The Host header was set by nativeProtocol.request\n Host: response.req.getHeader(\"host\"),\n }, this._options.headers);\n }\n\n // RFC7231\u00A76.4: Automatic redirection needs to done with\n // care for methods not known to be safe, [\u2026]\n // RFC7231\u00A76.4.2\u20133: For historical reasons, a user agent MAY change\n // the request method from POST to GET for the subsequent request.\n var method = this._options.method;\n if ((statusCode === 301 || statusCode === 302) && this._options.method === \"POST\" ||\n // RFC7231\u00A76.4.4: The 303 (See Other) status code indicates that\n // the server is redirecting the user agent to a different resource [\u2026]\n // A user agent can perform a retrieval request targeting that URI\n // (a GET or HEAD request if using HTTP) [\u2026]\n (statusCode === 303) && !/^(?:GET|HEAD)$/.test(this._options.method)) {\n this._options.method = \"GET\";\n // Drop a possible entity and headers related to it\n this._requestBodyBuffers = [];\n removeMatchingHeaders(/^content-/i, this._options.headers);\n }\n\n // Drop the Host header, as the redirect might lead to a different host\n var currentHostHeader = removeMatchingHeaders(/^host$/i, this._options.headers);\n\n // If the redirect is relative, carry over the host of the last request\n var currentUrlParts = parseUrl(this._currentUrl);\n var currentHost = currentHostHeader || currentUrlParts.host;\n var currentUrl = /^\\w+:/.test(location) ? this._currentUrl :\n url.format(Object.assign(currentUrlParts, { host: currentHost }));\n\n // Create the redirected request\n var redirectUrl = resolveUrl(location, currentUrl);\n debug(\"redirecting to\", redirectUrl.href);\n this._isRedirect = true;\n spreadUrlObject(redirectUrl, this._options);\n\n // Drop confidential headers when redirecting to a less secure protocol\n // or to a different domain that is not a superdomain\n if (redirectUrl.protocol !== currentUrlParts.protocol &&\n redirectUrl.protocol !== \"https:\" ||\n redirectUrl.host !== currentHost &&\n !isSubdomain(redirectUrl.host, currentHost)) {\n removeMatchingHeaders(/^(?:(?:proxy-)?authorization|cookie)$/i, this._options.headers);\n }\n\n // Evaluate the beforeRedirect callback\n if (isFunction(beforeRedirect)) {\n var responseDetails = {\n headers: response.headers,\n statusCode: statusCode,\n };\n var requestDetails = {\n url: currentUrl,\n method: method,\n headers: requestHeaders,\n };\n beforeRedirect(this._options, responseDetails, requestDetails);\n this._sanitizeOptions(this._options);\n }\n\n // Perform the redirected request\n this._performRequest();\n};\n\n// Wraps the key/value object of protocols with redirect functionality\nfunction wrap(protocols) {\n // Default settings\n var exports = {\n maxRedirects: 21,\n maxBodyLength: 10 * 1024 * 1024,\n };\n\n // Wrap each protocol\n var nativeProtocols = {};\n Object.keys(protocols).forEach(function (scheme) {\n var protocol = scheme + \":\";\n var nativeProtocol = nativeProtocols[protocol] = protocols[scheme];\n var wrappedProtocol = exports[scheme] = Object.create(nativeProtocol);\n\n // Executes a request, following redirects\n function request(input, options, callback) {\n // Parse parameters, ensuring that input is an object\n if (isURL(input)) {\n input = spreadUrlObject(input);\n }\n else if (isString(input)) {\n input = spreadUrlObject(parseUrl(input));\n }\n else {\n callback = options;\n options = validateUrl(input);\n input = { protocol: protocol };\n }\n if (isFunction(options)) {\n callback = options;\n options = null;\n }\n\n // Set defaults\n options = Object.assign({\n maxRedirects: exports.maxRedirects,\n maxBodyLength: exports.maxBodyLength,\n }, input, options);\n options.nativeProtocols = nativeProtocols;\n if (!isString(options.host) && !isString(options.hostname)) {\n options.hostname = \"::1\";\n }\n\n assert.equal(options.protocol, protocol, \"protocol mismatch\");\n debug(\"options\", options);\n return new RedirectableRequest(options, callback);\n }\n\n // Executes a GET request, following redirects\n function get(input, options, callback) {\n var wrappedRequest = wrappedProtocol.request(input, options, callback);\n wrappedRequest.end();\n return wrappedRequest;\n }\n\n // Expose the properties on the wrapped protocol\n Object.defineProperties(wrappedProtocol, {\n request: { value: request, configurable: true, enumerable: true, writable: true },\n get: { value: get, configurable: true, enumerable: true, writable: true },\n });\n });\n return exports;\n}\n\nfunction noop() { /* empty */ }\n\nfunction parseUrl(input) {\n var parsed;\n /* istanbul ignore else */\n if (useNativeURL) {\n parsed = new URL(input);\n }\n else {\n // Ensure the URL is valid and absolute\n parsed = validateUrl(url.parse(input));\n if (!isString(parsed.protocol)) {\n throw new InvalidUrlError({ input });\n }\n }\n return parsed;\n}\n\nfunction resolveUrl(relative, base) {\n /* istanbul ignore next */\n return useNativeURL ? new URL(relative, base) : parseUrl(url.resolve(base, relative));\n}\n\nfunction validateUrl(input) {\n if (/^\\[/.test(input.hostname) && !/^\\[[:0-9a-f]+\\]$/i.test(input.hostname)) {\n throw new InvalidUrlError({ input: input.href || input });\n }\n if (/^\\[/.test(input.host) && !/^\\[[:0-9a-f]+\\](:\\d+)?$/i.test(input.host)) {\n throw new InvalidUrlError({ input: input.href || input });\n }\n return input;\n}\n\nfunction spreadUrlObject(urlObject, target) {\n var spread = target || {};\n for (var key of preservedUrlFields) {\n spread[key] = urlObject[key];\n }\n\n // Fix IPv6 hostname\n if (spread.hostname.startsWith(\"[\")) {\n spread.hostname = spread.hostname.slice(1, -1);\n }\n // Ensure port is a number\n if (spread.port !== \"\") {\n spread.port = Number(spread.port);\n }\n // Concatenate path\n spread.path = spread.search ? spread.pathname + spread.search : spread.pathname;\n\n return spread;\n}\n\nfunction removeMatchingHeaders(regex, headers) {\n var lastValue;\n for (var header in headers) {\n if (regex.test(header)) {\n lastValue = headers[header];\n delete headers[header];\n }\n }\n return (lastValue === null || typeof lastValue === \"undefined\") ?\n undefined : String(lastValue).trim();\n}\n\nfunction createErrorType(code, message, baseClass) {\n // Create constructor\n function CustomError(properties) {\n Error.captureStackTrace(this, this.constructor);\n Object.assign(this, properties || {});\n this.code = code;\n this.message = this.cause ? message + \": \" + this.cause.message : message;\n }\n\n // Attach constructor and set default properties\n CustomError.prototype = new (baseClass || Error)();\n Object.defineProperties(CustomError.prototype, {\n constructor: {\n value: CustomError,\n enumerable: false,\n },\n name: {\n value: \"Error [\" + code + \"]\",\n enumerable: false,\n },\n });\n return CustomError;\n}\n\nfunction destroyRequest(request, error) {\n for (var event of events) {\n request.removeListener(event, eventHandlers[event]);\n }\n request.on(\"error\", noop);\n request.destroy(error);\n}\n\nfunction isSubdomain(subdomain, domain) {\n assert(isString(subdomain) && isString(domain));\n var dot = subdomain.length - domain.length - 1;\n return dot > 0 && subdomain[dot] === \".\" && subdomain.endsWith(domain);\n}\n\nfunction isString(value) {\n return typeof value === \"string\" || value instanceof String;\n}\n\nfunction isFunction(value) {\n return typeof value === \"function\";\n}\n\nfunction isBuffer(value) {\n return typeof value === \"object\" && (\"length\" in value);\n}\n\nfunction isURL(value) {\n return URL && value instanceof URL;\n}\n\n// Exports\nmodule.exports = wrap({ http: http, https: https });\nmodule.exports.wrap = wrap;\n", "'use strict';\n\nexport default function bind(fn, thisArg) {\n return function wrap() {\n return fn.apply(thisArg, arguments);\n };\n}\n", "'use strict';\n\nimport bind from './helpers/bind.js';\n\n// utils is a library of generic helper functions non-specific to axios\n\nconst {toString} = Object.prototype;\nconst {getPrototypeOf} = Object;\n\nconst kindOf = (cache => thing => {\n const str = toString.call(thing);\n return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());\n})(Object.create(null));\n\nconst kindOfTest = (type) => {\n type = type.toLowerCase();\n return (thing) => kindOf(thing) === type\n}\n\nconst typeOfTest = type => thing => typeof thing === type;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n *\n * @returns {boolean} True if value is an Array, otherwise false\n */\nconst {isArray} = Array;\n\n/**\n * Determine if a value is undefined\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nconst isUndefined = typeOfTest('undefined');\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)\n && isFunction(val.constructor.isBuffer) && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nconst isArrayBuffer = kindOfTest('ArrayBuffer');\n\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n let result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (isArrayBuffer(val.buffer));\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a String, otherwise false\n */\nconst isString = typeOfTest('string');\n\n/**\n * Determine if a value is a Function\n *\n * @param {*} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nconst isFunction = typeOfTest('function');\n\n/**\n * Determine if a value is a Number\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Number, otherwise false\n */\nconst isNumber = typeOfTest('number');\n\n/**\n * Determine if a value is an Object\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an Object, otherwise false\n */\nconst isObject = (thing) => thing !== null && typeof thing === 'object';\n\n/**\n * Determine if a value is a Boolean\n *\n * @param {*} thing The value to test\n * @returns {boolean} True if value is a Boolean, otherwise false\n */\nconst isBoolean = thing => thing === true || thing === false;\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a plain Object, otherwise false\n */\nconst isPlainObject = (val) => {\n if (kindOf(val) !== 'object') {\n return false;\n }\n\n const prototype = getPrototypeOf(val);\n return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in val) && !(Symbol.iterator in val);\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Date, otherwise false\n */\nconst isDate = kindOfTest('Date');\n\n/**\n * Determine if a value is a File\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFile = kindOfTest('File');\n\n/**\n * Determine if a value is a Blob\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nconst isBlob = kindOfTest('Blob');\n\n/**\n * Determine if a value is a FileList\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFileList = kindOfTest('FileList');\n\n/**\n * Determine if a value is a Stream\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nconst isStream = (val) => isObject(val) && isFunction(val.pipe);\n\n/**\n * Determine if a value is a FormData\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nconst isFormData = (thing) => {\n let kind;\n return thing && (\n (typeof FormData === 'function' && thing instanceof FormData) || (\n isFunction(thing.append) && (\n (kind = kindOf(thing)) === 'formdata' ||\n // detect form-data instance\n (kind === 'object' && isFunction(thing.toString) && thing.toString() === '[object FormData]')\n )\n )\n )\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nconst isURLSearchParams = kindOfTest('URLSearchParams');\n\nconst [isReadableStream, isRequest, isResponse, isHeaders] = ['ReadableStream', 'Request', 'Response', 'Headers'].map(kindOfTest);\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n *\n * @returns {String} The String freed of excess whitespace\n */\nconst trim = (str) => str.trim ?\n str.trim() : str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n *\n * @param {Boolean} [allOwnKeys = false]\n * @returns {any}\n */\nfunction forEach(obj, fn, {allOwnKeys = false} = {}) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n let i;\n let l;\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Iterate over object keys\n const keys = allOwnKeys ? Object.getOwnPropertyNames(obj) : Object.keys(obj);\n const len = keys.length;\n let key;\n\n for (i = 0; i < len; i++) {\n key = keys[i];\n fn.call(null, obj[key], key, obj);\n }\n }\n}\n\nfunction findKey(obj, key) {\n key = key.toLowerCase();\n const keys = Object.keys(obj);\n let i = keys.length;\n let _key;\n while (i-- > 0) {\n _key = keys[i];\n if (key === _key.toLowerCase()) {\n return _key;\n }\n }\n return null;\n}\n\nconst _global = (() => {\n /*eslint no-undef:0*/\n if (typeof globalThis !== \"undefined\") return globalThis;\n return typeof self !== \"undefined\" ? self : (typeof window !== 'undefined' ? window : global)\n})();\n\nconst isContextDefined = (context) => !isUndefined(context) && context !== _global;\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n *\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n const {caseless} = isContextDefined(this) && this || {};\n const result = {};\n const assignValue = (val, key) => {\n const targetKey = caseless && findKey(result, key) || key;\n if (isPlainObject(result[targetKey]) && isPlainObject(val)) {\n result[targetKey] = merge(result[targetKey], val);\n } else if (isPlainObject(val)) {\n result[targetKey] = merge({}, val);\n } else if (isArray(val)) {\n result[targetKey] = val.slice();\n } else {\n result[targetKey] = val;\n }\n }\n\n for (let i = 0, l = arguments.length; i < l; i++) {\n arguments[i] && forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n *\n * @param {Boolean} [allOwnKeys]\n * @returns {Object} The resulting value of object a\n */\nconst extend = (a, b, thisArg, {allOwnKeys}= {}) => {\n forEach(b, (val, key) => {\n if (thisArg && isFunction(val)) {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n }, {allOwnKeys});\n return a;\n}\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n *\n * @returns {string} content value without BOM\n */\nconst stripBOM = (content) => {\n if (content.charCodeAt(0) === 0xFEFF) {\n content = content.slice(1);\n }\n return content;\n}\n\n/**\n * Inherit the prototype methods from one constructor into another\n * @param {function} constructor\n * @param {function} superConstructor\n * @param {object} [props]\n * @param {object} [descriptors]\n *\n * @returns {void}\n */\nconst inherits = (constructor, superConstructor, props, descriptors) => {\n constructor.prototype = Object.create(superConstructor.prototype, descriptors);\n constructor.prototype.constructor = constructor;\n Object.defineProperty(constructor, 'super', {\n value: superConstructor.prototype\n });\n props && Object.assign(constructor.prototype, props);\n}\n\n/**\n * Resolve object with deep prototype chain to a flat object\n * @param {Object} sourceObj source object\n * @param {Object} [destObj]\n * @param {Function|Boolean} [filter]\n * @param {Function} [propFilter]\n *\n * @returns {Object}\n */\nconst toFlatObject = (sourceObj, destObj, filter, propFilter) => {\n let props;\n let i;\n let prop;\n const merged = {};\n\n destObj = destObj || {};\n // eslint-disable-next-line no-eq-null,eqeqeq\n if (sourceObj == null) return destObj;\n\n do {\n props = Object.getOwnPropertyNames(sourceObj);\n i = props.length;\n while (i-- > 0) {\n prop = props[i];\n if ((!propFilter || propFilter(prop, sourceObj, destObj)) && !merged[prop]) {\n destObj[prop] = sourceObj[prop];\n merged[prop] = true;\n }\n }\n sourceObj = filter !== false && getPrototypeOf(sourceObj);\n } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype);\n\n return destObj;\n}\n\n/**\n * Determines whether a string ends with the characters of a specified string\n *\n * @param {String} str\n * @param {String} searchString\n * @param {Number} [position= 0]\n *\n * @returns {boolean}\n */\nconst endsWith = (str, searchString, position) => {\n str = String(str);\n if (position === undefined || position > str.length) {\n position = str.length;\n }\n position -= searchString.length;\n const lastIndex = str.indexOf(searchString, position);\n return lastIndex !== -1 && lastIndex === position;\n}\n\n\n/**\n * Returns new array from array like object or null if failed\n *\n * @param {*} [thing]\n *\n * @returns {?Array}\n */\nconst toArray = (thing) => {\n if (!thing) return null;\n if (isArray(thing)) return thing;\n let i = thing.length;\n if (!isNumber(i)) return null;\n const arr = new Array(i);\n while (i-- > 0) {\n arr[i] = thing[i];\n }\n return arr;\n}\n\n/**\n * Checking if the Uint8Array exists and if it does, it returns a function that checks if the\n * thing passed in is an instance of Uint8Array\n *\n * @param {TypedArray}\n *\n * @returns {Array}\n */\n// eslint-disable-next-line func-names\nconst isTypedArray = (TypedArray => {\n // eslint-disable-next-line func-names\n return thing => {\n return TypedArray && thing instanceof TypedArray;\n };\n})(typeof Uint8Array !== 'undefined' && getPrototypeOf(Uint8Array));\n\n/**\n * For each entry in the object, call the function with the key and value.\n *\n * @param {Object} obj - The object to iterate over.\n * @param {Function} fn - The function to call for each entry.\n *\n * @returns {void}\n */\nconst forEachEntry = (obj, fn) => {\n const generator = obj && obj[Symbol.iterator];\n\n const iterator = generator.call(obj);\n\n let result;\n\n while ((result = iterator.next()) && !result.done) {\n const pair = result.value;\n fn.call(obj, pair[0], pair[1]);\n }\n}\n\n/**\n * It takes a regular expression and a string, and returns an array of all the matches\n *\n * @param {string} regExp - The regular expression to match against.\n * @param {string} str - The string to search.\n *\n * @returns {Array}\n */\nconst matchAll = (regExp, str) => {\n let matches;\n const arr = [];\n\n while ((matches = regExp.exec(str)) !== null) {\n arr.push(matches);\n }\n\n return arr;\n}\n\n/* Checking if the kindOfTest function returns true when passed an HTMLFormElement. */\nconst isHTMLForm = kindOfTest('HTMLFormElement');\n\nconst toCamelCase = str => {\n return str.toLowerCase().replace(/[-_\\s]([a-z\\d])(\\w*)/g,\n function replacer(m, p1, p2) {\n return p1.toUpperCase() + p2;\n }\n );\n};\n\n/* Creating a function that will check if an object has a property. */\nconst hasOwnProperty = (({hasOwnProperty}) => (obj, prop) => hasOwnProperty.call(obj, prop))(Object.prototype);\n\n/**\n * Determine if a value is a RegExp object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a RegExp object, otherwise false\n */\nconst isRegExp = kindOfTest('RegExp');\n\nconst reduceDescriptors = (obj, reducer) => {\n const descriptors = Object.getOwnPropertyDescriptors(obj);\n const reducedDescriptors = {};\n\n forEach(descriptors, (descriptor, name) => {\n let ret;\n if ((ret = reducer(descriptor, name, obj)) !== false) {\n reducedDescriptors[name] = ret || descriptor;\n }\n });\n\n Object.defineProperties(obj, reducedDescriptors);\n}\n\n/**\n * Makes all methods read-only\n * @param {Object} obj\n */\n\nconst freezeMethods = (obj) => {\n reduceDescriptors(obj, (descriptor, name) => {\n // skip restricted props in strict mode\n if (isFunction(obj) && ['arguments', 'caller', 'callee'].indexOf(name) !== -1) {\n return false;\n }\n\n const value = obj[name];\n\n if (!isFunction(value)) return;\n\n descriptor.enumerable = false;\n\n if ('writable' in descriptor) {\n descriptor.writable = false;\n return;\n }\n\n if (!descriptor.set) {\n descriptor.set = () => {\n throw Error('Can not rewrite read-only method \\'' + name + '\\'');\n };\n }\n });\n}\n\nconst toObjectSet = (arrayOrString, delimiter) => {\n const obj = {};\n\n const define = (arr) => {\n arr.forEach(value => {\n obj[value] = true;\n });\n }\n\n isArray(arrayOrString) ? define(arrayOrString) : define(String(arrayOrString).split(delimiter));\n\n return obj;\n}\n\nconst noop = () => {}\n\nconst toFiniteNumber = (value, defaultValue) => {\n return value != null && Number.isFinite(value = +value) ? value : defaultValue;\n}\n\nconst ALPHA = 'abcdefghijklmnopqrstuvwxyz'\n\nconst DIGIT = '0123456789';\n\nconst ALPHABET = {\n DIGIT,\n ALPHA,\n ALPHA_DIGIT: ALPHA + ALPHA.toUpperCase() + DIGIT\n}\n\nconst generateString = (size = 16, alphabet = ALPHABET.ALPHA_DIGIT) => {\n let str = '';\n const {length} = alphabet;\n while (size--) {\n str += alphabet[Math.random() * length|0]\n }\n\n return str;\n}\n\n/**\n * If the thing is a FormData object, return true, otherwise return false.\n *\n * @param {unknown} thing - The thing to check.\n *\n * @returns {boolean}\n */\nfunction isSpecCompliantForm(thing) {\n return !!(thing && isFunction(thing.append) && thing[Symbol.toStringTag] === 'FormData' && thing[Symbol.iterator]);\n}\n\nconst toJSONObject = (obj) => {\n const stack = new Array(10);\n\n const visit = (source, i) => {\n\n if (isObject(source)) {\n if (stack.indexOf(source) >= 0) {\n return;\n }\n\n if(!('toJSON' in source)) {\n stack[i] = source;\n const target = isArray(source) ? [] : {};\n\n forEach(source, (value, key) => {\n const reducedValue = visit(value, i + 1);\n !isUndefined(reducedValue) && (target[key] = reducedValue);\n });\n\n stack[i] = undefined;\n\n return target;\n }\n }\n\n return source;\n }\n\n return visit(obj, 0);\n}\n\nconst isAsyncFn = kindOfTest('AsyncFunction');\n\nconst isThenable = (thing) =>\n thing && (isObject(thing) || isFunction(thing)) && isFunction(thing.then) && isFunction(thing.catch);\n\nexport default {\n isArray,\n isArrayBuffer,\n isBuffer,\n isFormData,\n isArrayBufferView,\n isString,\n isNumber,\n isBoolean,\n isObject,\n isPlainObject,\n isReadableStream,\n isRequest,\n isResponse,\n isHeaders,\n isUndefined,\n isDate,\n isFile,\n isBlob,\n isRegExp,\n isFunction,\n isStream,\n isURLSearchParams,\n isTypedArray,\n isFileList,\n forEach,\n merge,\n extend,\n trim,\n stripBOM,\n inherits,\n toFlatObject,\n kindOf,\n kindOfTest,\n endsWith,\n toArray,\n forEachEntry,\n matchAll,\n isHTMLForm,\n hasOwnProperty,\n hasOwnProp: hasOwnProperty, // an alias to avoid ESLint no-prototype-builtins detection\n reduceDescriptors,\n freezeMethods,\n toObjectSet,\n toCamelCase,\n noop,\n toFiniteNumber,\n findKey,\n global: _global,\n isContextDefined,\n ALPHABET,\n generateString,\n isSpecCompliantForm,\n toJSONObject,\n isAsyncFn,\n isThenable\n};\n", "'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [config] The config.\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n *\n * @returns {Error} The created error.\n */\nfunction AxiosError(message, code, config, request, response) {\n Error.call(this);\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n } else {\n this.stack = (new Error()).stack;\n }\n\n this.message = message;\n this.name = 'AxiosError';\n code && (this.code = code);\n config && (this.config = config);\n request && (this.request = request);\n response && (this.response = response);\n}\n\nutils.inherits(AxiosError, Error, {\n toJSON: function toJSON() {\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: utils.toJSONObject(this.config),\n code: this.code,\n status: this.response && this.response.status ? this.response.status : null\n };\n }\n});\n\nconst prototype = AxiosError.prototype;\nconst descriptors = {};\n\n[\n 'ERR_BAD_OPTION_VALUE',\n 'ERR_BAD_OPTION',\n 'ECONNABORTED',\n 'ETIMEDOUT',\n 'ERR_NETWORK',\n 'ERR_FR_TOO_MANY_REDIRECTS',\n 'ERR_DEPRECATED',\n 'ERR_BAD_RESPONSE',\n 'ERR_BAD_REQUEST',\n 'ERR_CANCELED',\n 'ERR_NOT_SUPPORT',\n 'ERR_INVALID_URL'\n// eslint-disable-next-line func-names\n].forEach(code => {\n descriptors[code] = {value: code};\n});\n\nObject.defineProperties(AxiosError, descriptors);\nObject.defineProperty(prototype, 'isAxiosError', {value: true});\n\n// eslint-disable-next-line func-names\nAxiosError.from = (error, code, config, request, response, customProps) => {\n const axiosError = Object.create(prototype);\n\n utils.toFlatObject(error, axiosError, function filter(obj) {\n return obj !== Error.prototype;\n }, prop => {\n return prop !== 'isAxiosError';\n });\n\n AxiosError.call(axiosError, error.message, code, config, request, response);\n\n axiosError.cause = error;\n\n axiosError.name = error.name;\n\n customProps && Object.assign(axiosError, customProps);\n\n return axiosError;\n};\n\nexport default AxiosError;\n", "'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\n// temporary hotfix to avoid circular references until AxiosURLSearchParams is refactored\nimport PlatformFormData from '../platform/node/classes/FormData.js';\n\n/**\n * Determines if the given thing is a array or js object.\n *\n * @param {string} thing - The object or array to be visited.\n *\n * @returns {boolean}\n */\nfunction isVisitable(thing) {\n return utils.isPlainObject(thing) || utils.isArray(thing);\n}\n\n/**\n * It removes the brackets from the end of a string\n *\n * @param {string} key - The key of the parameter.\n *\n * @returns {string} the key without the brackets.\n */\nfunction removeBrackets(key) {\n return utils.endsWith(key, '[]') ? key.slice(0, -2) : key;\n}\n\n/**\n * It takes a path, a key, and a boolean, and returns a string\n *\n * @param {string} path - The path to the current key.\n * @param {string} key - The key of the current object being iterated over.\n * @param {string} dots - If true, the key will be rendered with dots instead of brackets.\n *\n * @returns {string} The path to the current key.\n */\nfunction renderKey(path, key, dots) {\n if (!path) return key;\n return path.concat(key).map(function each(token, i) {\n // eslint-disable-next-line no-param-reassign\n token = removeBrackets(token);\n return !dots && i ? '[' + token + ']' : token;\n }).join(dots ? '.' : '');\n}\n\n/**\n * If the array is an array and none of its elements are visitable, then it's a flat array.\n *\n * @param {Array} arr - The array to check\n *\n * @returns {boolean}\n */\nfunction isFlatArray(arr) {\n return utils.isArray(arr) && !arr.some(isVisitable);\n}\n\nconst predicates = utils.toFlatObject(utils, {}, null, function filter(prop) {\n return /^is[A-Z]/.test(prop);\n});\n\n/**\n * Convert a data object to FormData\n *\n * @param {Object} obj\n * @param {?Object} [formData]\n * @param {?Object} [options]\n * @param {Function} [options.visitor]\n * @param {Boolean} [options.metaTokens = true]\n * @param {Boolean} [options.dots = false]\n * @param {?Boolean} [options.indexes = false]\n *\n * @returns {Object}\n **/\n\n/**\n * It converts an object into a FormData object\n *\n * @param {Object} obj - The object to convert to form data.\n * @param {string} formData - The FormData object to append to.\n * @param {Object} options\n *\n * @returns\n */\nfunction toFormData(obj, formData, options) {\n if (!utils.isObject(obj)) {\n throw new TypeError('target must be an object');\n }\n\n // eslint-disable-next-line no-param-reassign\n formData = formData || new (PlatformFormData || FormData)();\n\n // eslint-disable-next-line no-param-reassign\n options = utils.toFlatObject(options, {\n metaTokens: true,\n dots: false,\n indexes: false\n }, false, function defined(option, source) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n return !utils.isUndefined(source[option]);\n });\n\n const metaTokens = options.metaTokens;\n // eslint-disable-next-line no-use-before-define\n const visitor = options.visitor || defaultVisitor;\n const dots = options.dots;\n const indexes = options.indexes;\n const _Blob = options.Blob || typeof Blob !== 'undefined' && Blob;\n const useBlob = _Blob && utils.isSpecCompliantForm(formData);\n\n if (!utils.isFunction(visitor)) {\n throw new TypeError('visitor must be a function');\n }\n\n function convertValue(value) {\n if (value === null) return '';\n\n if (utils.isDate(value)) {\n return value.toISOString();\n }\n\n if (!useBlob && utils.isBlob(value)) {\n throw new AxiosError('Blob is not supported. Use a Buffer instead.');\n }\n\n if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) {\n return useBlob && typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value);\n }\n\n return value;\n }\n\n /**\n * Default visitor.\n *\n * @param {*} value\n * @param {String|Number} key\n * @param {Array} path\n * @this {FormData}\n *\n * @returns {boolean} return true to visit the each prop of the value recursively\n */\n function defaultVisitor(value, key, path) {\n let arr = value;\n\n if (value && !path && typeof value === 'object') {\n if (utils.endsWith(key, '{}')) {\n // eslint-disable-next-line no-param-reassign\n key = metaTokens ? key : key.slice(0, -2);\n // eslint-disable-next-line no-param-reassign\n value = JSON.stringify(value);\n } else if (\n (utils.isArray(value) && isFlatArray(value)) ||\n ((utils.isFileList(value) || utils.endsWith(key, '[]')) && (arr = utils.toArray(value))\n )) {\n // eslint-disable-next-line no-param-reassign\n key = removeBrackets(key);\n\n arr.forEach(function each(el, index) {\n !(utils.isUndefined(el) || el === null) && formData.append(\n // eslint-disable-next-line no-nested-ternary\n indexes === true ? renderKey([key], index, dots) : (indexes === null ? key : key + '[]'),\n convertValue(el)\n );\n });\n return false;\n }\n }\n\n if (isVisitable(value)) {\n return true;\n }\n\n formData.append(renderKey(path, key, dots), convertValue(value));\n\n return false;\n }\n\n const stack = [];\n\n const exposedHelpers = Object.assign(predicates, {\n defaultVisitor,\n convertValue,\n isVisitable\n });\n\n function build(value, path) {\n if (utils.isUndefined(value)) return;\n\n if (stack.indexOf(value) !== -1) {\n throw Error('Circular reference detected in ' + path.join('.'));\n }\n\n stack.push(value);\n\n utils.forEach(value, function each(el, key) {\n const result = !(utils.isUndefined(el) || el === null) && visitor.call(\n formData, el, utils.isString(key) ? key.trim() : key, path, exposedHelpers\n );\n\n if (result === true) {\n build(el, path ? path.concat(key) : [key]);\n }\n });\n\n stack.pop();\n }\n\n if (!utils.isObject(obj)) {\n throw new TypeError('data must be an object');\n }\n\n build(obj);\n\n return formData;\n}\n\nexport default toFormData;\n", "'use strict';\n\nimport toFormData from './toFormData.js';\n\n/**\n * It encodes a string by replacing all characters that are not in the unreserved set with\n * their percent-encoded equivalents\n *\n * @param {string} str - The string to encode.\n *\n * @returns {string} The encoded string.\n */\nfunction encode(str) {\n const charMap = {\n '!': '%21',\n \"'\": '%27',\n '(': '%28',\n ')': '%29',\n '~': '%7E',\n '%20': '+',\n '%00': '\\x00'\n };\n return encodeURIComponent(str).replace(/[!'()~]|%20|%00/g, function replacer(match) {\n return charMap[match];\n });\n}\n\n/**\n * It takes a params object and converts it to a FormData object\n *\n * @param {Object} params - The parameters to be converted to a FormData object.\n * @param {Object} options - The options object passed to the Axios constructor.\n *\n * @returns {void}\n */\nfunction AxiosURLSearchParams(params, options) {\n this._pairs = [];\n\n params && toFormData(params, this, options);\n}\n\nconst prototype = AxiosURLSearchParams.prototype;\n\nprototype.append = function append(name, value) {\n this._pairs.push([name, value]);\n};\n\nprototype.toString = function toString(encoder) {\n const _encode = encoder ? function(value) {\n return encoder.call(this, value, encode);\n } : encode;\n\n return this._pairs.map(function each(pair) {\n return _encode(pair[0]) + '=' + _encode(pair[1]);\n }, '').join('&');\n};\n\nexport default AxiosURLSearchParams;\n", "'use strict';\n\nimport utils from '../utils.js';\nimport AxiosURLSearchParams from '../helpers/AxiosURLSearchParams.js';\n\n/**\n * It replaces all instances of the characters `:`, `$`, `,`, `+`, `[`, and `]` with their\n * URI encoded counterparts\n *\n * @param {string} val The value to be encoded.\n *\n * @returns {string} The encoded value.\n */\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+').\n replace(/%5B/gi, '[').\n replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @param {?object} options\n *\n * @returns {string} The formatted url\n */\nexport default function buildURL(url, params, options) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n \n const _encode = options && options.encode || encode;\n\n const serializeFn = options && options.serialize;\n\n let serializedParams;\n\n if (serializeFn) {\n serializedParams = serializeFn(params, options);\n } else {\n serializedParams = utils.isURLSearchParams(params) ?\n params.toString() :\n new AxiosURLSearchParams(params, options).toString(_encode);\n }\n\n if (serializedParams) {\n const hashmarkIndex = url.indexOf(\"#\");\n\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n}\n", "'use strict';\n\nimport utils from './../utils.js';\n\nclass InterceptorManager {\n constructor() {\n this.handlers = [];\n }\n\n /**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\n use(fulfilled, rejected, options) {\n this.handlers.push({\n fulfilled,\n rejected,\n synchronous: options ? options.synchronous : false,\n runWhen: options ? options.runWhen : null\n });\n return this.handlers.length - 1;\n }\n\n /**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n *\n * @returns {Boolean} `true` if the interceptor was removed, `false` otherwise\n */\n eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n }\n\n /**\n * Clear all interceptors from the stack\n *\n * @returns {void}\n */\n clear() {\n if (this.handlers) {\n this.handlers = [];\n }\n }\n\n /**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n *\n * @returns {void}\n */\n forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n }\n}\n\nexport default InterceptorManager;\n", "'use strict';\n\nexport default {\n silentJSONParsing: true,\n forcedJSONParsing: true,\n clarifyTimeoutError: false\n};\n", "'use strict';\n\nimport url from 'url';\nexport default url.URLSearchParams;\n", "import URLSearchParams from './classes/URLSearchParams.js'\nimport FormData from './classes/FormData.js'\n\nexport default {\n isNode: true,\n classes: {\n URLSearchParams,\n FormData,\n Blob: typeof Blob !== 'undefined' && Blob || null\n },\n protocols: [ 'http', 'https', 'file', 'data' ]\n};\n", "const hasBrowserEnv = typeof window !== 'undefined' && typeof document !== 'undefined';\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n *\n * @returns {boolean}\n */\nconst hasStandardBrowserEnv = (\n (product) => {\n return hasBrowserEnv && ['ReactNative', 'NativeScript', 'NS'].indexOf(product) < 0\n })(typeof navigator !== 'undefined' && navigator.product);\n\n/**\n * Determine if we're running in a standard browser webWorker environment\n *\n * Although the `isStandardBrowserEnv` method indicates that\n * `allows axios to run in a web worker`, the WebWorker will still be\n * filtered out due to its judgment standard\n * `typeof window !== 'undefined' && typeof document !== 'undefined'`.\n * This leads to a problem when axios post `FormData` in webWorker\n */\nconst hasStandardBrowserWebWorkerEnv = (() => {\n return (\n typeof WorkerGlobalScope !== 'undefined' &&\n // eslint-disable-next-line no-undef\n self instanceof WorkerGlobalScope &&\n typeof self.importScripts === 'function'\n );\n})();\n\nconst origin = hasBrowserEnv && window.location.href || 'http://localhost';\n\nexport {\n hasBrowserEnv,\n hasStandardBrowserWebWorkerEnv,\n hasStandardBrowserEnv,\n origin\n}\n", "import platform from './node/index.js';\nimport * as utils from './common/utils.js';\n\nexport default {\n ...utils,\n ...platform\n}\n", "'use strict';\n\nimport utils from '../utils.js';\nimport toFormData from './toFormData.js';\nimport platform from '../platform/index.js';\n\nexport default function toURLEncodedForm(data, options) {\n return toFormData(data, new platform.classes.URLSearchParams(), Object.assign({\n visitor: function(value, key, path, helpers) {\n if (platform.isNode && utils.isBuffer(value)) {\n this.append(key, value.toString('base64'));\n return false;\n }\n\n return helpers.defaultVisitor.apply(this, arguments);\n }\n }, options));\n}\n", "'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * It takes a string like `foo[x][y][z]` and returns an array like `['foo', 'x', 'y', 'z']\n *\n * @param {string} name - The name of the property to get.\n *\n * @returns An array of strings.\n */\nfunction parsePropPath(name) {\n // foo[x][y][z]\n // foo.x.y.z\n // foo-x-y-z\n // foo x y z\n return utils.matchAll(/\\w+|\\[(\\w*)]/g, name).map(match => {\n return match[0] === '[]' ? '' : match[1] || match[0];\n });\n}\n\n/**\n * Convert an array to an object.\n *\n * @param {Array} arr - The array to convert to an object.\n *\n * @returns An object with the same keys and values as the array.\n */\nfunction arrayToObject(arr) {\n const obj = {};\n const keys = Object.keys(arr);\n let i;\n const len = keys.length;\n let key;\n for (i = 0; i < len; i++) {\n key = keys[i];\n obj[key] = arr[key];\n }\n return obj;\n}\n\n/**\n * It takes a FormData object and returns a JavaScript object\n *\n * @param {string} formData The FormData object to convert to JSON.\n *\n * @returns {Object | null} The converted object.\n */\nfunction formDataToJSON(formData) {\n function buildPath(path, value, target, index) {\n let name = path[index++];\n\n if (name === '__proto__') return true;\n\n const isNumericKey = Number.isFinite(+name);\n const isLast = index >= path.length;\n name = !name && utils.isArray(target) ? target.length : name;\n\n if (isLast) {\n if (utils.hasOwnProp(target, name)) {\n target[name] = [target[name], value];\n } else {\n target[name] = value;\n }\n\n return !isNumericKey;\n }\n\n if (!target[name] || !utils.isObject(target[name])) {\n target[name] = [];\n }\n\n const result = buildPath(path, value, target[name], index);\n\n if (result && utils.isArray(target[name])) {\n target[name] = arrayToObject(target[name]);\n }\n\n return !isNumericKey;\n }\n\n if (utils.isFormData(formData) && utils.isFunction(formData.entries)) {\n const obj = {};\n\n utils.forEachEntry(formData, (name, value) => {\n buildPath(parsePropPath(name), value, obj, 0);\n });\n\n return obj;\n }\n\n return null;\n}\n\nexport default formDataToJSON;\n", "'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\nimport transitionalDefaults from './transitional.js';\nimport toFormData from '../helpers/toFormData.js';\nimport toURLEncodedForm from '../helpers/toURLEncodedForm.js';\nimport platform from '../platform/index.js';\nimport formDataToJSON from '../helpers/formDataToJSON.js';\n\n/**\n * It takes a string, tries to parse it, and if it fails, it returns the stringified version\n * of the input\n *\n * @param {any} rawValue - The value to be stringified.\n * @param {Function} parser - A function that parses a string into a JavaScript object.\n * @param {Function} encoder - A function that takes a value and returns a string.\n *\n * @returns {string} A stringified version of the rawValue.\n */\nfunction stringifySafely(rawValue, parser, encoder) {\n if (utils.isString(rawValue)) {\n try {\n (parser || JSON.parse)(rawValue);\n return utils.trim(rawValue);\n } catch (e) {\n if (e.name !== 'SyntaxError') {\n throw e;\n }\n }\n }\n\n return (encoder || JSON.stringify)(rawValue);\n}\n\nconst defaults = {\n\n transitional: transitionalDefaults,\n\n adapter: ['xhr', 'http', 'fetch'],\n\n transformRequest: [function transformRequest(data, headers) {\n const contentType = headers.getContentType() || '';\n const hasJSONContentType = contentType.indexOf('application/json') > -1;\n const isObjectPayload = utils.isObject(data);\n\n if (isObjectPayload && utils.isHTMLForm(data)) {\n data = new FormData(data);\n }\n\n const isFormData = utils.isFormData(data);\n\n if (isFormData) {\n return hasJSONContentType ? JSON.stringify(formDataToJSON(data)) : data;\n }\n\n if (utils.isArrayBuffer(data) ||\n utils.isBuffer(data) ||\n utils.isStream(data) ||\n utils.isFile(data) ||\n utils.isBlob(data) ||\n utils.isReadableStream(data)\n ) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n headers.setContentType('application/x-www-form-urlencoded;charset=utf-8', false);\n return data.toString();\n }\n\n let isFileList;\n\n if (isObjectPayload) {\n if (contentType.indexOf('application/x-www-form-urlencoded') > -1) {\n return toURLEncodedForm(data, this.formSerializer).toString();\n }\n\n if ((isFileList = utils.isFileList(data)) || contentType.indexOf('multipart/form-data') > -1) {\n const _FormData = this.env && this.env.FormData;\n\n return toFormData(\n isFileList ? {'files[]': data} : data,\n _FormData && new _FormData(),\n this.formSerializer\n );\n }\n }\n\n if (isObjectPayload || hasJSONContentType ) {\n headers.setContentType('application/json', false);\n return stringifySafely(data);\n }\n\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n const transitional = this.transitional || defaults.transitional;\n const forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n const JSONRequested = this.responseType === 'json';\n\n if (utils.isResponse(data) || utils.isReadableStream(data)) {\n return data;\n }\n\n if (data && utils.isString(data) && ((forcedJSONParsing && !this.responseType) || JSONRequested)) {\n const silentJSONParsing = transitional && transitional.silentJSONParsing;\n const strictJSONParsing = !silentJSONParsing && JSONRequested;\n\n try {\n return JSON.parse(data);\n } catch (e) {\n if (strictJSONParsing) {\n if (e.name === 'SyntaxError') {\n throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, this.response);\n }\n throw e;\n }\n }\n }\n\n return data;\n }],\n\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n maxBodyLength: -1,\n\n env: {\n FormData: platform.classes.FormData,\n Blob: platform.classes.Blob\n },\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n },\n\n headers: {\n common: {\n 'Accept': 'application/json, text/plain, */*',\n 'Content-Type': undefined\n }\n }\n};\n\nutils.forEach(['delete', 'get', 'head', 'post', 'put', 'patch'], (method) => {\n defaults.headers[method] = {};\n});\n\nexport default defaults;\n", "'use strict';\n\nimport utils from './../utils.js';\n\n// RawAxiosHeaders whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nconst ignoreDuplicateOf = utils.toObjectSet([\n 'age', 'authorization', 'content-length', 'content-type', 'etag',\n 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n 'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n 'referer', 'retry-after', 'user-agent'\n]);\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} rawHeaders Headers needing to be parsed\n *\n * @returns {Object} Headers parsed into an object\n */\nexport default rawHeaders => {\n const parsed = {};\n let key;\n let val;\n let i;\n\n rawHeaders && rawHeaders.split('\\n').forEach(function parser(line) {\n i = line.indexOf(':');\n key = line.substring(0, i).trim().toLowerCase();\n val = line.substring(i + 1).trim();\n\n if (!key || (parsed[key] && ignoreDuplicateOf[key])) {\n return;\n }\n\n if (key === 'set-cookie') {\n if (parsed[key]) {\n parsed[key].push(val);\n } else {\n parsed[key] = [val];\n }\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n });\n\n return parsed;\n};\n", "'use strict';\n\nimport utils from '../utils.js';\nimport parseHeaders from '../helpers/parseHeaders.js';\n\nconst $internals = Symbol('internals');\n\nfunction normalizeHeader(header) {\n return header && String(header).trim().toLowerCase();\n}\n\nfunction normalizeValue(value) {\n if (value === false || value == null) {\n return value;\n }\n\n return utils.isArray(value) ? value.map(normalizeValue) : String(value);\n}\n\nfunction parseTokens(str) {\n const tokens = Object.create(null);\n const tokensRE = /([^\\s,;=]+)\\s*(?:=\\s*([^,;]+))?/g;\n let match;\n\n while ((match = tokensRE.exec(str))) {\n tokens[match[1]] = match[2];\n }\n\n return tokens;\n}\n\nconst isValidHeaderName = (str) => /^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(str.trim());\n\nfunction matchHeaderValue(context, value, header, filter, isHeaderNameFilter) {\n if (utils.isFunction(filter)) {\n return filter.call(this, value, header);\n }\n\n if (isHeaderNameFilter) {\n value = header;\n }\n\n if (!utils.isString(value)) return;\n\n if (utils.isString(filter)) {\n return value.indexOf(filter) !== -1;\n }\n\n if (utils.isRegExp(filter)) {\n return filter.test(value);\n }\n}\n\nfunction formatHeader(header) {\n return header.trim()\n .toLowerCase().replace(/([a-z\\d])(\\w*)/g, (w, char, str) => {\n return char.toUpperCase() + str;\n });\n}\n\nfunction buildAccessors(obj, header) {\n const accessorName = utils.toCamelCase(' ' + header);\n\n ['get', 'set', 'has'].forEach(methodName => {\n Object.defineProperty(obj, methodName + accessorName, {\n value: function(arg1, arg2, arg3) {\n return this[methodName].call(this, header, arg1, arg2, arg3);\n },\n configurable: true\n });\n });\n}\n\nclass AxiosHeaders {\n constructor(headers) {\n headers && this.set(headers);\n }\n\n set(header, valueOrRewrite, rewrite) {\n const self = this;\n\n function setHeader(_value, _header, _rewrite) {\n const lHeader = normalizeHeader(_header);\n\n if (!lHeader) {\n throw new Error('header name must be a non-empty string');\n }\n\n const key = utils.findKey(self, lHeader);\n\n if(!key || self[key] === undefined || _rewrite === true || (_rewrite === undefined && self[key] !== false)) {\n self[key || _header] = normalizeValue(_value);\n }\n }\n\n const setHeaders = (headers, _rewrite) =>\n utils.forEach(headers, (_value, _header) => setHeader(_value, _header, _rewrite));\n\n if (utils.isPlainObject(header) || header instanceof this.constructor) {\n setHeaders(header, valueOrRewrite)\n } else if(utils.isString(header) && (header = header.trim()) && !isValidHeaderName(header)) {\n setHeaders(parseHeaders(header), valueOrRewrite);\n } else if (utils.isHeaders(header)) {\n for (const [key, value] of header.entries()) {\n setHeader(value, key, rewrite);\n }\n } else {\n header != null && setHeader(valueOrRewrite, header, rewrite);\n }\n\n return this;\n }\n\n get(header, parser) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils.findKey(this, header);\n\n if (key) {\n const value = this[key];\n\n if (!parser) {\n return value;\n }\n\n if (parser === true) {\n return parseTokens(value);\n }\n\n if (utils.isFunction(parser)) {\n return parser.call(this, value, key);\n }\n\n if (utils.isRegExp(parser)) {\n return parser.exec(value);\n }\n\n throw new TypeError('parser must be boolean|regexp|function');\n }\n }\n }\n\n has(header, matcher) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils.findKey(this, header);\n\n return !!(key && this[key] !== undefined && (!matcher || matchHeaderValue(this, this[key], key, matcher)));\n }\n\n return false;\n }\n\n delete(header, matcher) {\n const self = this;\n let deleted = false;\n\n function deleteHeader(_header) {\n _header = normalizeHeader(_header);\n\n if (_header) {\n const key = utils.findKey(self, _header);\n\n if (key && (!matcher || matchHeaderValue(self, self[key], key, matcher))) {\n delete self[key];\n\n deleted = true;\n }\n }\n }\n\n if (utils.isArray(header)) {\n header.forEach(deleteHeader);\n } else {\n deleteHeader(header);\n }\n\n return deleted;\n }\n\n clear(matcher) {\n const keys = Object.keys(this);\n let i = keys.length;\n let deleted = false;\n\n while (i--) {\n const key = keys[i];\n if(!matcher || matchHeaderValue(this, this[key], key, matcher, true)) {\n delete this[key];\n deleted = true;\n }\n }\n\n return deleted;\n }\n\n normalize(format) {\n const self = this;\n const headers = {};\n\n utils.forEach(this, (value, header) => {\n const key = utils.findKey(headers, header);\n\n if (key) {\n self[key] = normalizeValue(value);\n delete self[header];\n return;\n }\n\n const normalized = format ? formatHeader(header) : String(header).trim();\n\n if (normalized !== header) {\n delete self[header];\n }\n\n self[normalized] = normalizeValue(value);\n\n headers[normalized] = true;\n });\n\n return this;\n }\n\n concat(...targets) {\n return this.constructor.concat(this, ...targets);\n }\n\n toJSON(asStrings) {\n const obj = Object.create(null);\n\n utils.forEach(this, (value, header) => {\n value != null && value !== false && (obj[header] = asStrings && utils.isArray(value) ? value.join(', ') : value);\n });\n\n return obj;\n }\n\n [Symbol.iterator]() {\n return Object.entries(this.toJSON())[Symbol.iterator]();\n }\n\n toString() {\n return Object.entries(this.toJSON()).map(([header, value]) => header + ': ' + value).join('\\n');\n }\n\n get [Symbol.toStringTag]() {\n return 'AxiosHeaders';\n }\n\n static from(thing) {\n return thing instanceof this ? thing : new this(thing);\n }\n\n static concat(first, ...targets) {\n const computed = new this(first);\n\n targets.forEach((target) => computed.set(target));\n\n return computed;\n }\n\n static accessor(header) {\n const internals = this[$internals] = (this[$internals] = {\n accessors: {}\n });\n\n const accessors = internals.accessors;\n const prototype = this.prototype;\n\n function defineAccessor(_header) {\n const lHeader = normalizeHeader(_header);\n\n if (!accessors[lHeader]) {\n buildAccessors(prototype, _header);\n accessors[lHeader] = true;\n }\n }\n\n utils.isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header);\n\n return this;\n }\n}\n\nAxiosHeaders.accessor(['Content-Type', 'Content-Length', 'Accept', 'Accept-Encoding', 'User-Agent', 'Authorization']);\n\n// reserved names hotfix\nutils.reduceDescriptors(AxiosHeaders.prototype, ({value}, key) => {\n let mapped = key[0].toUpperCase() + key.slice(1); // map `set` => `Set`\n return {\n get: () => value,\n set(headerValue) {\n this[mapped] = headerValue;\n }\n }\n});\n\nutils.freezeMethods(AxiosHeaders);\n\nexport default AxiosHeaders;\n", "'use strict';\n\nimport utils from './../utils.js';\nimport defaults from '../defaults/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Array|Function} fns A single function or Array of functions\n * @param {?Object} response The response object\n *\n * @returns {*} The resulting transformed data\n */\nexport default function transformData(fns, response) {\n const config = this || defaults;\n const context = response || config;\n const headers = AxiosHeaders.from(context.headers);\n let data = context.data;\n\n utils.forEach(fns, function transform(fn) {\n data = fn.call(config, data, headers.normalize(), response ? response.status : undefined);\n });\n\n headers.normalize();\n\n return data;\n}\n", "'use strict';\n\nexport default function isCancel(value) {\n return !!(value && value.__CANCEL__);\n}\n", "'use strict';\n\nimport AxiosError from '../core/AxiosError.js';\nimport utils from '../utils.js';\n\n/**\n * A `CanceledError` is an object that is thrown when an operation is canceled.\n *\n * @param {string=} message The message.\n * @param {Object=} config The config.\n * @param {Object=} request The request.\n *\n * @returns {CanceledError} The created error.\n */\nfunction CanceledError(message, config, request) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n AxiosError.call(this, message == null ? 'canceled' : message, AxiosError.ERR_CANCELED, config, request);\n this.name = 'CanceledError';\n}\n\nutils.inherits(CanceledError, AxiosError, {\n __CANCEL__: true\n});\n\nexport default CanceledError;\n", "'use strict';\n\nimport AxiosError from './AxiosError.js';\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n *\n * @returns {object} The response.\n */\nexport default function settle(resolve, reject, response) {\n const validateStatus = response.config.validateStatus;\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(new AxiosError(\n 'Request failed with status code ' + response.status,\n [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4],\n response.config,\n response.request,\n response\n ));\n }\n}\n", "'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n *\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nexport default function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\n}\n", "'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n *\n * @returns {string} The combined URL\n */\nexport default function combineURLs(baseURL, relativeURL) {\n return relativeURL\n ? baseURL.replace(/\\/?\\/$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n : baseURL;\n}\n", "'use strict';\n\nimport isAbsoluteURL from '../helpers/isAbsoluteURL.js';\nimport combineURLs from '../helpers/combineURLs.js';\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n *\n * @returns {string} The combined full path\n */\nexport default function buildFullPath(baseURL, requestedURL) {\n if (baseURL && !isAbsoluteURL(requestedURL)) {\n return combineURLs(baseURL, requestedURL);\n }\n return requestedURL;\n}\n", "export const VERSION = \"1.7.2\";", "'use strict';\n\nexport default function parseProtocol(url) {\n const match = /^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(url);\n return match && match[1] || '';\n}\n", "'use strict';\n\nimport AxiosError from '../core/AxiosError.js';\nimport parseProtocol from './parseProtocol.js';\nimport platform from '../platform/index.js';\n\nconst DATA_URL_PATTERN = /^(?:([^;]+);)?(?:[^;]+;)?(base64|),([\\s\\S]*)$/;\n\n/**\n * Parse data uri to a Buffer or Blob\n *\n * @param {String} uri\n * @param {?Boolean} asBlob\n * @param {?Object} options\n * @param {?Function} options.Blob\n *\n * @returns {Buffer|Blob}\n */\nexport default function fromDataURI(uri, asBlob, options) {\n const _Blob = options && options.Blob || platform.classes.Blob;\n const protocol = parseProtocol(uri);\n\n if (asBlob === undefined && _Blob) {\n asBlob = true;\n }\n\n if (protocol === 'data') {\n uri = protocol.length ? uri.slice(protocol.length + 1) : uri;\n\n const match = DATA_URL_PATTERN.exec(uri);\n\n if (!match) {\n throw new AxiosError('Invalid URL', AxiosError.ERR_INVALID_URL);\n }\n\n const mime = match[1];\n const isBase64 = match[2];\n const body = match[3];\n const buffer = Buffer.from(decodeURIComponent(body), isBase64 ? 'base64' : 'utf8');\n\n if (asBlob) {\n if (!_Blob) {\n throw new AxiosError('Blob is not supported', AxiosError.ERR_NOT_SUPPORT);\n }\n\n return new _Blob([buffer], {type: mime});\n }\n\n return buffer;\n }\n\n throw new AxiosError('Unsupported protocol ' + protocol, AxiosError.ERR_NOT_SUPPORT);\n}\n", "'use strict';\n\n/**\n * Throttle decorator\n * @param {Function} fn\n * @param {Number} freq\n * @return {Function}\n */\nfunction throttle(fn, freq) {\n let timestamp = 0;\n const threshold = 1000 / freq;\n let timer = null;\n return function throttled() {\n const force = this === true;\n\n const now = Date.now();\n if (force || now - timestamp > threshold) {\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n timestamp = now;\n return fn.apply(null, arguments);\n }\n if (!timer) {\n timer = setTimeout(() => {\n timer = null;\n timestamp = Date.now();\n return fn.apply(null, arguments);\n }, threshold - (now - timestamp));\n }\n };\n}\n\nexport default throttle;\n", "'use strict';\n\n/**\n * Calculate data maxRate\n * @param {Number} [samplesCount= 10]\n * @param {Number} [min= 1000]\n * @returns {Function}\n */\nfunction speedometer(samplesCount, min) {\n samplesCount = samplesCount || 10;\n const bytes = new Array(samplesCount);\n const timestamps = new Array(samplesCount);\n let head = 0;\n let tail = 0;\n let firstSampleTS;\n\n min = min !== undefined ? min : 1000;\n\n return function push(chunkLength) {\n const now = Date.now();\n\n const startedAt = timestamps[tail];\n\n if (!firstSampleTS) {\n firstSampleTS = now;\n }\n\n bytes[head] = chunkLength;\n timestamps[head] = now;\n\n let i = tail;\n let bytesCount = 0;\n\n while (i !== head) {\n bytesCount += bytes[i++];\n i = i % samplesCount;\n }\n\n head = (head + 1) % samplesCount;\n\n if (head === tail) {\n tail = (tail + 1) % samplesCount;\n }\n\n if (now - firstSampleTS < min) {\n return;\n }\n\n const passed = startedAt && now - startedAt;\n\n return passed ? Math.round(bytesCount * 1000 / passed) : undefined;\n };\n}\n\nexport default speedometer;\n", "'use strict';\n\nimport stream from 'stream';\nimport utils from '../utils.js';\nimport throttle from './throttle.js';\nimport speedometer from './speedometer.js';\n\nconst kInternals = Symbol('internals');\n\nclass AxiosTransformStream extends stream.Transform{\n constructor(options) {\n options = utils.toFlatObject(options, {\n maxRate: 0,\n chunkSize: 64 * 1024,\n minChunkSize: 100,\n timeWindow: 500,\n ticksRate: 2,\n samplesCount: 15\n }, null, (prop, source) => {\n return !utils.isUndefined(source[prop]);\n });\n\n super({\n readableHighWaterMark: options.chunkSize\n });\n\n const self = this;\n\n const internals = this[kInternals] = {\n length: options.length,\n timeWindow: options.timeWindow,\n ticksRate: options.ticksRate,\n chunkSize: options.chunkSize,\n maxRate: options.maxRate,\n minChunkSize: options.minChunkSize,\n bytesSeen: 0,\n isCaptured: false,\n notifiedBytesLoaded: 0,\n ts: Date.now(),\n bytes: 0,\n onReadCallback: null\n };\n\n const _speedometer = speedometer(internals.ticksRate * options.samplesCount, internals.timeWindow);\n\n this.on('newListener', event => {\n if (event === 'progress') {\n if (!internals.isCaptured) {\n internals.isCaptured = true;\n }\n }\n });\n\n let bytesNotified = 0;\n\n internals.updateProgress = throttle(function throttledHandler() {\n const totalBytes = internals.length;\n const bytesTransferred = internals.bytesSeen;\n const progressBytes = bytesTransferred - bytesNotified;\n if (!progressBytes || self.destroyed) return;\n\n const rate = _speedometer(progressBytes);\n\n bytesNotified = bytesTransferred;\n\n process.nextTick(() => {\n self.emit('progress', {\n loaded: bytesTransferred,\n total: totalBytes,\n progress: totalBytes ? (bytesTransferred / totalBytes) : undefined,\n bytes: progressBytes,\n rate: rate ? rate : undefined,\n estimated: rate && totalBytes && bytesTransferred <= totalBytes ?\n (totalBytes - bytesTransferred) / rate : undefined,\n lengthComputable: totalBytes != null\n });\n });\n }, internals.ticksRate);\n\n const onFinish = () => {\n internals.updateProgress.call(true);\n };\n\n this.once('end', onFinish);\n this.once('error', onFinish);\n }\n\n _read(size) {\n const internals = this[kInternals];\n\n if (internals.onReadCallback) {\n internals.onReadCallback();\n }\n\n return super._read(size);\n }\n\n _transform(chunk, encoding, callback) {\n const self = this;\n const internals = this[kInternals];\n const maxRate = internals.maxRate;\n\n const readableHighWaterMark = this.readableHighWaterMark;\n\n const timeWindow = internals.timeWindow;\n\n const divider = 1000 / timeWindow;\n const bytesThreshold = (maxRate / divider);\n const minChunkSize = internals.minChunkSize !== false ? Math.max(internals.minChunkSize, bytesThreshold * 0.01) : 0;\n\n function pushChunk(_chunk, _callback) {\n const bytes = Buffer.byteLength(_chunk);\n internals.bytesSeen += bytes;\n internals.bytes += bytes;\n\n if (internals.isCaptured) {\n internals.updateProgress();\n }\n\n if (self.push(_chunk)) {\n process.nextTick(_callback);\n } else {\n internals.onReadCallback = () => {\n internals.onReadCallback = null;\n process.nextTick(_callback);\n };\n }\n }\n\n const transformChunk = (_chunk, _callback) => {\n const chunkSize = Buffer.byteLength(_chunk);\n let chunkRemainder = null;\n let maxChunkSize = readableHighWaterMark;\n let bytesLeft;\n let passed = 0;\n\n if (maxRate) {\n const now = Date.now();\n\n if (!internals.ts || (passed = (now - internals.ts)) >= timeWindow) {\n internals.ts = now;\n bytesLeft = bytesThreshold - internals.bytes;\n internals.bytes = bytesLeft < 0 ? -bytesLeft : 0;\n passed = 0;\n }\n\n bytesLeft = bytesThreshold - internals.bytes;\n }\n\n if (maxRate) {\n if (bytesLeft <= 0) {\n // next time window\n return setTimeout(() => {\n _callback(null, _chunk);\n }, timeWindow - passed);\n }\n\n if (bytesLeft < maxChunkSize) {\n maxChunkSize = bytesLeft;\n }\n }\n\n if (maxChunkSize && chunkSize > maxChunkSize && (chunkSize - maxChunkSize) > minChunkSize) {\n chunkRemainder = _chunk.subarray(maxChunkSize);\n _chunk = _chunk.subarray(0, maxChunkSize);\n }\n\n pushChunk(_chunk, chunkRemainder ? () => {\n process.nextTick(_callback, null, chunkRemainder);\n } : _callback);\n };\n\n transformChunk(chunk, function transformNextChunk(err, _chunk) {\n if (err) {\n return callback(err);\n }\n\n if (_chunk) {\n transformChunk(_chunk, transformNextChunk);\n } else {\n callback(null);\n }\n });\n }\n\n setLength(length) {\n this[kInternals].length = +length;\n return this;\n }\n}\n\nexport default AxiosTransformStream;\n", "const {asyncIterator} = Symbol;\n\nconst readBlob = async function* (blob) {\n if (blob.stream) {\n yield* blob.stream()\n } else if (blob.arrayBuffer) {\n yield await blob.arrayBuffer()\n } else if (blob[asyncIterator]) {\n yield* blob[asyncIterator]();\n } else {\n yield blob;\n }\n}\n\nexport default readBlob;\n", "import {TextEncoder} from 'util';\nimport {Readable} from 'stream';\nimport utils from \"../utils.js\";\nimport readBlob from \"./readBlob.js\";\n\nconst BOUNDARY_ALPHABET = utils.ALPHABET.ALPHA_DIGIT + '-_';\n\nconst textEncoder = new TextEncoder();\n\nconst CRLF = '\\r\\n';\nconst CRLF_BYTES = textEncoder.encode(CRLF);\nconst CRLF_BYTES_COUNT = 2;\n\nclass FormDataPart {\n constructor(name, value) {\n const {escapeName} = this.constructor;\n const isStringValue = utils.isString(value);\n\n let headers = `Content-Disposition: form-data; name=\"${escapeName(name)}\"${\n !isStringValue && value.name ? `; filename=\"${escapeName(value.name)}\"` : ''\n }${CRLF}`;\n\n if (isStringValue) {\n value = textEncoder.encode(String(value).replace(/\\r?\\n|\\r\\n?/g, CRLF));\n } else {\n headers += `Content-Type: ${value.type || \"application/octet-stream\"}${CRLF}`\n }\n\n this.headers = textEncoder.encode(headers + CRLF);\n\n this.contentLength = isStringValue ? value.byteLength : value.size;\n\n this.size = this.headers.byteLength + this.contentLength + CRLF_BYTES_COUNT;\n\n this.name = name;\n this.value = value;\n }\n\n async *encode(){\n yield this.headers;\n\n const {value} = this;\n\n if(utils.isTypedArray(value)) {\n yield value;\n } else {\n yield* readBlob(value);\n }\n\n yield CRLF_BYTES;\n }\n\n static escapeName(name) {\n return String(name).replace(/[\\r\\n\"]/g, (match) => ({\n '\\r' : '%0D',\n '\\n' : '%0A',\n '\"' : '%22',\n }[match]));\n }\n}\n\nconst formDataToStream = (form, headersHandler, options) => {\n const {\n tag = 'form-data-boundary',\n size = 25,\n boundary = tag + '-' + utils.generateString(size, BOUNDARY_ALPHABET)\n } = options || {};\n\n if(!utils.isFormData(form)) {\n throw TypeError('FormData instance required');\n }\n\n if (boundary.length < 1 || boundary.length > 70) {\n throw Error('boundary must be 10-70 characters long')\n }\n\n const boundaryBytes = textEncoder.encode('--' + boundary + CRLF);\n const footerBytes = textEncoder.encode('--' + boundary + '--' + CRLF + CRLF);\n let contentLength = footerBytes.byteLength;\n\n const parts = Array.from(form.entries()).map(([name, value]) => {\n const part = new FormDataPart(name, value);\n contentLength += part.size;\n return part;\n });\n\n contentLength += boundaryBytes.byteLength * parts.length;\n\n contentLength = utils.toFiniteNumber(contentLength);\n\n const computedHeaders = {\n 'Content-Type': `multipart/form-data; boundary=${boundary}`\n }\n\n if (Number.isFinite(contentLength)) {\n computedHeaders['Content-Length'] = contentLength;\n }\n\n headersHandler && headersHandler(computedHeaders);\n\n return Readable.from((async function *() {\n for(const part of parts) {\n yield boundaryBytes;\n yield* part.encode();\n }\n\n yield footerBytes;\n })());\n};\n\nexport default formDataToStream;\n", "\"use strict\";\n\nimport stream from \"stream\";\n\nclass ZlibHeaderTransformStream extends stream.Transform {\n __transform(chunk, encoding, callback) {\n this.push(chunk);\n callback();\n }\n\n _transform(chunk, encoding, callback) {\n if (chunk.length !== 0) {\n this._transform = this.__transform;\n\n // Add Default Compression headers if no zlib headers are present\n if (chunk[0] !== 120) { // Hex: 78\n const header = Buffer.alloc(2);\n header[0] = 120; // Hex: 78\n header[1] = 156; // Hex: 9C \n this.push(header, encoding);\n }\n }\n\n this.__transform(chunk, encoding, callback);\n }\n}\n\nexport default ZlibHeaderTransformStream;\n", "import utils from \"../utils.js\";\n\nconst callbackify = (fn, reducer) => {\n return utils.isAsyncFn(fn) ? function (...args) {\n const cb = args.pop();\n fn.apply(this, args).then((value) => {\n try {\n reducer ? cb(null, ...reducer(value)) : cb(null, value);\n } catch (err) {\n cb(err);\n }\n }, cb);\n } : fn;\n}\n\nexport default callbackify;\n", "'use strict';\n\nimport utils from './../utils.js';\nimport settle from './../core/settle.js';\nimport buildFullPath from '../core/buildFullPath.js';\nimport buildURL from './../helpers/buildURL.js';\nimport {getProxyForUrl} from 'proxy-from-env';\nimport http from 'http';\nimport https from 'https';\nimport util from 'util';\nimport followRedirects from 'follow-redirects';\nimport zlib from 'zlib';\nimport {VERSION} from '../env/data.js';\nimport transitionalDefaults from '../defaults/transitional.js';\nimport AxiosError from '../core/AxiosError.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport platform from '../platform/index.js';\nimport fromDataURI from '../helpers/fromDataURI.js';\nimport stream from 'stream';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport AxiosTransformStream from '../helpers/AxiosTransformStream.js';\nimport {EventEmitter} from 'events';\nimport formDataToStream from \"../helpers/formDataToStream.js\";\nimport readBlob from \"../helpers/readBlob.js\";\nimport ZlibHeaderTransformStream from '../helpers/ZlibHeaderTransformStream.js';\nimport callbackify from \"../helpers/callbackify.js\";\n\nconst zlibOptions = {\n flush: zlib.constants.Z_SYNC_FLUSH,\n finishFlush: zlib.constants.Z_SYNC_FLUSH\n};\n\nconst brotliOptions = {\n flush: zlib.constants.BROTLI_OPERATION_FLUSH,\n finishFlush: zlib.constants.BROTLI_OPERATION_FLUSH\n}\n\nconst isBrotliSupported = utils.isFunction(zlib.createBrotliDecompress);\n\nconst {http: httpFollow, https: httpsFollow} = followRedirects;\n\nconst isHttps = /https:?/;\n\nconst supportedProtocols = platform.protocols.map(protocol => {\n return protocol + ':';\n});\n\n/**\n * If the proxy or config beforeRedirects functions are defined, call them with the options\n * object.\n *\n * @param {Object} options - The options object that was passed to the request.\n *\n * @returns {Object}\n */\nfunction dispatchBeforeRedirect(options, responseDetails) {\n if (options.beforeRedirects.proxy) {\n options.beforeRedirects.proxy(options);\n }\n if (options.beforeRedirects.config) {\n options.beforeRedirects.config(options, responseDetails);\n }\n}\n\n/**\n * If the proxy or config afterRedirects functions are defined, call them with the options\n *\n * @param {http.ClientRequestArgs} options\n * @param {AxiosProxyConfig} configProxy configuration from Axios options object\n * @param {string} location\n *\n * @returns {http.ClientRequestArgs}\n */\nfunction setProxy(options, configProxy, location) {\n let proxy = configProxy;\n if (!proxy && proxy !== false) {\n const proxyUrl = getProxyForUrl(location);\n if (proxyUrl) {\n proxy = new URL(proxyUrl);\n }\n }\n if (proxy) {\n // Basic proxy authorization\n if (proxy.username) {\n proxy.auth = (proxy.username || '') + ':' + (proxy.password || '');\n }\n\n if (proxy.auth) {\n // Support proxy auth object form\n if (proxy.auth.username || proxy.auth.password) {\n proxy.auth = (proxy.auth.username || '') + ':' + (proxy.auth.password || '');\n }\n const base64 = Buffer\n .from(proxy.auth, 'utf8')\n .toString('base64');\n options.headers['Proxy-Authorization'] = 'Basic ' + base64;\n }\n\n options.headers.host = options.hostname + (options.port ? ':' + options.port : '');\n const proxyHost = proxy.hostname || proxy.host;\n options.hostname = proxyHost;\n // Replace 'host' since options is not a URL object\n options.host = proxyHost;\n options.port = proxy.port;\n options.path = location;\n if (proxy.protocol) {\n options.protocol = proxy.protocol.includes(':') ? proxy.protocol : `${proxy.protocol}:`;\n }\n }\n\n options.beforeRedirects.proxy = function beforeRedirect(redirectOptions) {\n // Configure proxy for redirected request, passing the original config proxy to apply\n // the exact same logic as if the redirected request was performed by axios directly.\n setProxy(redirectOptions, configProxy, redirectOptions.href);\n };\n}\n\nconst isHttpAdapterSupported = typeof process !== 'undefined' && utils.kindOf(process) === 'process';\n\n// temporary hotfix\n\nconst wrapAsync = (asyncExecutor) => {\n return new Promise((resolve, reject) => {\n let onDone;\n let isDone;\n\n const done = (value, isRejected) => {\n if (isDone) return;\n isDone = true;\n onDone && onDone(value, isRejected);\n }\n\n const _resolve = (value) => {\n done(value);\n resolve(value);\n };\n\n const _reject = (reason) => {\n done(reason, true);\n reject(reason);\n }\n\n asyncExecutor(_resolve, _reject, (onDoneHandler) => (onDone = onDoneHandler)).catch(_reject);\n })\n};\n\nconst resolveFamily = ({address, family}) => {\n if (!utils.isString(address)) {\n throw TypeError('address must be a string');\n }\n return ({\n address,\n family: family || (address.indexOf('.') < 0 ? 6 : 4)\n });\n}\n\nconst buildAddressEntry = (address, family) => resolveFamily(utils.isObject(address) ? address : {address, family});\n\n/*eslint consistent-return:0*/\nexport default isHttpAdapterSupported && function httpAdapter(config) {\n return wrapAsync(async function dispatchHttpRequest(resolve, reject, onDone) {\n let {data, lookup, family} = config;\n const {responseType, responseEncoding} = config;\n const method = config.method.toUpperCase();\n let isDone;\n let rejected = false;\n let req;\n\n if (lookup) {\n const _lookup = callbackify(lookup, (value) => utils.isArray(value) ? value : [value]);\n // hotfix to support opt.all option which is required for node 20.x\n lookup = (hostname, opt, cb) => {\n _lookup(hostname, opt, (err, arg0, arg1) => {\n if (err) {\n return cb(err);\n }\n\n const addresses = utils.isArray(arg0) ? arg0.map(addr => buildAddressEntry(addr)) : [buildAddressEntry(arg0, arg1)];\n\n opt.all ? cb(err, addresses) : cb(err, addresses[0].address, addresses[0].family);\n });\n }\n }\n\n // temporary internal emitter until the AxiosRequest class will be implemented\n const emitter = new EventEmitter();\n\n const onFinished = () => {\n if (config.cancelToken) {\n config.cancelToken.unsubscribe(abort);\n }\n\n if (config.signal) {\n config.signal.removeEventListener('abort', abort);\n }\n\n emitter.removeAllListeners();\n }\n\n onDone((value, isRejected) => {\n isDone = true;\n if (isRejected) {\n rejected = true;\n onFinished();\n }\n });\n\n function abort(reason) {\n emitter.emit('abort', !reason || reason.type ? new CanceledError(null, config, req) : reason);\n }\n\n emitter.once('abort', reject);\n\n if (config.cancelToken || config.signal) {\n config.cancelToken && config.cancelToken.subscribe(abort);\n if (config.signal) {\n config.signal.aborted ? abort() : config.signal.addEventListener('abort', abort);\n }\n }\n\n // Parse url\n const fullPath = buildFullPath(config.baseURL, config.url);\n const parsed = new URL(fullPath, 'http://localhost');\n const protocol = parsed.protocol || supportedProtocols[0];\n\n if (protocol === 'data:') {\n let convertedData;\n\n if (method !== 'GET') {\n return settle(resolve, reject, {\n status: 405,\n statusText: 'method not allowed',\n headers: {},\n config\n });\n }\n\n try {\n convertedData = fromDataURI(config.url, responseType === 'blob', {\n Blob: config.env && config.env.Blob\n });\n } catch (err) {\n throw AxiosError.from(err, AxiosError.ERR_BAD_REQUEST, config);\n }\n\n if (responseType === 'text') {\n convertedData = convertedData.toString(responseEncoding);\n\n if (!responseEncoding || responseEncoding === 'utf8') {\n convertedData = utils.stripBOM(convertedData);\n }\n } else if (responseType === 'stream') {\n convertedData = stream.Readable.from(convertedData);\n }\n\n return settle(resolve, reject, {\n data: convertedData,\n status: 200,\n statusText: 'OK',\n headers: new AxiosHeaders(),\n config\n });\n }\n\n if (supportedProtocols.indexOf(protocol) === -1) {\n return reject(new AxiosError(\n 'Unsupported protocol ' + protocol,\n AxiosError.ERR_BAD_REQUEST,\n config\n ));\n }\n\n const headers = AxiosHeaders.from(config.headers).normalize();\n\n // Set User-Agent (required by some servers)\n // See https://github.com/axios/axios/issues/69\n // User-Agent is specified; handle case where no UA header is desired\n // Only set header if it hasn't been set in config\n headers.set('User-Agent', 'axios/' + VERSION, false);\n\n const onDownloadProgress = config.onDownloadProgress;\n const onUploadProgress = config.onUploadProgress;\n const maxRate = config.maxRate;\n let maxUploadRate = undefined;\n let maxDownloadRate = undefined;\n\n // support for spec compliant FormData objects\n if (utils.isSpecCompliantForm(data)) {\n const userBoundary = headers.getContentType(/boundary=([-_\\w\\d]{10,70})/i);\n\n data = formDataToStream(data, (formHeaders) => {\n headers.set(formHeaders);\n }, {\n tag: `axios-${VERSION}-boundary`,\n boundary: userBoundary && userBoundary[1] || undefined\n });\n // support for https://www.npmjs.com/package/form-data api\n } else if (utils.isFormData(data) && utils.isFunction(data.getHeaders)) {\n headers.set(data.getHeaders());\n\n if (!headers.hasContentLength()) {\n try {\n const knownLength = await util.promisify(data.getLength).call(data);\n Number.isFinite(knownLength) && knownLength >= 0 && headers.setContentLength(knownLength);\n /*eslint no-empty:0*/\n } catch (e) {\n }\n }\n } else if (utils.isBlob(data)) {\n data.size && headers.setContentType(data.type || 'application/octet-stream');\n headers.setContentLength(data.size || 0);\n data = stream.Readable.from(readBlob(data));\n } else if (data && !utils.isStream(data)) {\n if (Buffer.isBuffer(data)) {\n // Nothing to do...\n } else if (utils.isArrayBuffer(data)) {\n data = Buffer.from(new Uint8Array(data));\n } else if (utils.isString(data)) {\n data = Buffer.from(data, 'utf-8');\n } else {\n return reject(new AxiosError(\n 'Data after transformation must be a string, an ArrayBuffer, a Buffer, or a Stream',\n AxiosError.ERR_BAD_REQUEST,\n config\n ));\n }\n\n // Add Content-Length header if data exists\n headers.setContentLength(data.length, false);\n\n if (config.maxBodyLength > -1 && data.length > config.maxBodyLength) {\n return reject(new AxiosError(\n 'Request body larger than maxBodyLength limit',\n AxiosError.ERR_BAD_REQUEST,\n config\n ));\n }\n }\n\n const contentLength = utils.toFiniteNumber(headers.getContentLength());\n\n if (utils.isArray(maxRate)) {\n maxUploadRate = maxRate[0];\n maxDownloadRate = maxRate[1];\n } else {\n maxUploadRate = maxDownloadRate = maxRate;\n }\n\n if (data && (onUploadProgress || maxUploadRate)) {\n if (!utils.isStream(data)) {\n data = stream.Readable.from(data, {objectMode: false});\n }\n\n data = stream.pipeline([data, new AxiosTransformStream({\n length: contentLength,\n maxRate: utils.toFiniteNumber(maxUploadRate)\n })], utils.noop);\n\n onUploadProgress && data.on('progress', progress => {\n onUploadProgress(Object.assign(progress, {\n upload: true\n }));\n });\n }\n\n // HTTP basic authentication\n let auth = undefined;\n if (config.auth) {\n const username = config.auth.username || '';\n const password = config.auth.password || '';\n auth = username + ':' + password;\n }\n\n if (!auth && parsed.username) {\n const urlUsername = parsed.username;\n const urlPassword = parsed.password;\n auth = urlUsername + ':' + urlPassword;\n }\n\n auth && headers.delete('authorization');\n\n let path;\n\n try {\n path = buildURL(\n parsed.pathname + parsed.search,\n config.params,\n config.paramsSerializer\n ).replace(/^\\?/, '');\n } catch (err) {\n const customErr = new Error(err.message);\n customErr.config = config;\n customErr.url = config.url;\n customErr.exists = true;\n return reject(customErr);\n }\n\n headers.set(\n 'Accept-Encoding',\n 'gzip, compress, deflate' + (isBrotliSupported ? ', br' : ''), false\n );\n\n const options = {\n path,\n method: method,\n headers: headers.toJSON(),\n agents: { http: config.httpAgent, https: config.httpsAgent },\n auth,\n protocol,\n family,\n beforeRedirect: dispatchBeforeRedirect,\n beforeRedirects: {}\n };\n\n // cacheable-lookup integration hotfix\n !utils.isUndefined(lookup) && (options.lookup = lookup);\n\n if (config.socketPath) {\n options.socketPath = config.socketPath;\n } else {\n options.hostname = parsed.hostname;\n options.port = parsed.port;\n setProxy(options, config.proxy, protocol + '//' + parsed.hostname + (parsed.port ? ':' + parsed.port : '') + options.path);\n }\n\n let transport;\n const isHttpsRequest = isHttps.test(options.protocol);\n options.agent = isHttpsRequest ? config.httpsAgent : config.httpAgent;\n if (config.transport) {\n transport = config.transport;\n } else if (config.maxRedirects === 0) {\n transport = isHttpsRequest ? https : http;\n } else {\n if (config.maxRedirects) {\n options.maxRedirects = config.maxRedirects;\n }\n if (config.beforeRedirect) {\n options.beforeRedirects.config = config.beforeRedirect;\n }\n transport = isHttpsRequest ? httpsFollow : httpFollow;\n }\n\n if (config.maxBodyLength > -1) {\n options.maxBodyLength = config.maxBodyLength;\n } else {\n // follow-redirects does not skip comparison, so it should always succeed for axios -1 unlimited\n options.maxBodyLength = Infinity;\n }\n\n if (config.insecureHTTPParser) {\n options.insecureHTTPParser = config.insecureHTTPParser;\n }\n\n // Create the request\n req = transport.request(options, function handleResponse(res) {\n if (req.destroyed) return;\n\n const streams = [res];\n\n const responseLength = +res.headers['content-length'];\n\n if (onDownloadProgress) {\n const transformStream = new AxiosTransformStream({\n length: utils.toFiniteNumber(responseLength),\n maxRate: utils.toFiniteNumber(maxDownloadRate)\n });\n\n onDownloadProgress && transformStream.on('progress', progress => {\n onDownloadProgress(Object.assign(progress, {\n download: true\n }));\n });\n\n streams.push(transformStream);\n }\n\n // decompress the response body transparently if required\n let responseStream = res;\n\n // return the last request in case of redirects\n const lastRequest = res.req || req;\n\n // if decompress disabled we should not decompress\n if (config.decompress !== false && res.headers['content-encoding']) {\n // if no content, but headers still say that it is encoded,\n // remove the header not confuse downstream operations\n if (method === 'HEAD' || res.statusCode === 204) {\n delete res.headers['content-encoding'];\n }\n\n switch ((res.headers['content-encoding'] || '').toLowerCase()) {\n /*eslint default-case:0*/\n case 'gzip':\n case 'x-gzip':\n case 'compress':\n case 'x-compress':\n // add the unzipper to the body stream processing pipeline\n streams.push(zlib.createUnzip(zlibOptions));\n\n // remove the content-encoding in order to not confuse downstream operations\n delete res.headers['content-encoding'];\n break;\n case 'deflate':\n streams.push(new ZlibHeaderTransformStream());\n\n // add the unzipper to the body stream processing pipeline\n streams.push(zlib.createUnzip(zlibOptions));\n\n // remove the content-encoding in order to not confuse downstream operations\n delete res.headers['content-encoding'];\n break;\n case 'br':\n if (isBrotliSupported) {\n streams.push(zlib.createBrotliDecompress(brotliOptions));\n delete res.headers['content-encoding'];\n }\n }\n }\n\n responseStream = streams.length > 1 ? stream.pipeline(streams, utils.noop) : streams[0];\n\n const offListeners = stream.finished(responseStream, () => {\n offListeners();\n onFinished();\n });\n\n const response = {\n status: res.statusCode,\n statusText: res.statusMessage,\n headers: new AxiosHeaders(res.headers),\n config,\n request: lastRequest\n };\n\n if (responseType === 'stream') {\n response.data = responseStream;\n settle(resolve, reject, response);\n } else {\n const responseBuffer = [];\n let totalResponseBytes = 0;\n\n responseStream.on('data', function handleStreamData(chunk) {\n responseBuffer.push(chunk);\n totalResponseBytes += chunk.length;\n\n // make sure the content length is not over the maxContentLength if specified\n if (config.maxContentLength > -1 && totalResponseBytes > config.maxContentLength) {\n // stream.destroy() emit aborted event before calling reject() on Node.js v16\n rejected = true;\n responseStream.destroy();\n reject(new AxiosError('maxContentLength size of ' + config.maxContentLength + ' exceeded',\n AxiosError.ERR_BAD_RESPONSE, config, lastRequest));\n }\n });\n\n responseStream.on('aborted', function handlerStreamAborted() {\n if (rejected) {\n return;\n }\n\n const err = new AxiosError(\n 'maxContentLength size of ' + config.maxContentLength + ' exceeded',\n AxiosError.ERR_BAD_RESPONSE,\n config,\n lastRequest\n );\n responseStream.destroy(err);\n reject(err);\n });\n\n responseStream.on('error', function handleStreamError(err) {\n if (req.destroyed) return;\n reject(AxiosError.from(err, null, config, lastRequest));\n });\n\n responseStream.on('end', function handleStreamEnd() {\n try {\n let responseData = responseBuffer.length === 1 ? responseBuffer[0] : Buffer.concat(responseBuffer);\n if (responseType !== 'arraybuffer') {\n responseData = responseData.toString(responseEncoding);\n if (!responseEncoding || responseEncoding === 'utf8') {\n responseData = utils.stripBOM(responseData);\n }\n }\n response.data = responseData;\n } catch (err) {\n return reject(AxiosError.from(err, null, config, response.request, response));\n }\n settle(resolve, reject, response);\n });\n }\n\n emitter.once('abort', err => {\n if (!responseStream.destroyed) {\n responseStream.emit('error', err);\n responseStream.destroy();\n }\n });\n });\n\n emitter.once('abort', err => {\n reject(err);\n req.destroy(err);\n });\n\n // Handle errors\n req.on('error', function handleRequestError(err) {\n // @todo remove\n // if (req.aborted && err.code !== AxiosError.ERR_FR_TOO_MANY_REDIRECTS) return;\n reject(AxiosError.from(err, null, config, req));\n });\n\n // set tcp keep alive to prevent drop connection by peer\n req.on('socket', function handleRequestSocket(socket) {\n // default interval of sending ack packet is 1 minute\n socket.setKeepAlive(true, 1000 * 60);\n });\n\n // Handle request timeout\n if (config.timeout) {\n // This is forcing a int timeout to avoid problems if the `req` interface doesn't handle other types.\n const timeout = parseInt(config.timeout, 10);\n\n if (Number.isNaN(timeout)) {\n reject(new AxiosError(\n 'error trying to parse `config.timeout` to int',\n AxiosError.ERR_BAD_OPTION_VALUE,\n config,\n req\n ));\n\n return;\n }\n\n // Sometime, the response will be very slow, and does not respond, the connect event will be block by event loop system.\n // And timer callback will be fired, and abort() will be invoked before connection, then get \"socket hang up\" and code ECONNRESET.\n // At this time, if we have a large number of request, nodejs will hang up some socket on background. and the number will up and up.\n // And then these socket which be hang up will devouring CPU little by little.\n // ClientRequest.setTimeout will be fired on the specify milliseconds, and can make sure that abort() will be fired after connect.\n req.setTimeout(timeout, function handleRequestTimeout() {\n if (isDone) return;\n let timeoutErrorMessage = config.timeout ? 'timeout of ' + config.timeout + 'ms exceeded' : 'timeout exceeded';\n const transitional = config.transitional || transitionalDefaults;\n if (config.timeoutErrorMessage) {\n timeoutErrorMessage = config.timeoutErrorMessage;\n }\n reject(new AxiosError(\n timeoutErrorMessage,\n transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,\n config,\n req\n ));\n abort();\n });\n }\n\n\n // Send the request\n if (utils.isStream(data)) {\n let ended = false;\n let errored = false;\n\n data.on('end', () => {\n ended = true;\n });\n\n data.once('error', err => {\n errored = true;\n req.destroy(err);\n });\n\n data.on('close', () => {\n if (!ended && !errored) {\n abort(new CanceledError('Request stream has been aborted', config, req));\n }\n });\n\n data.pipe(req);\n } else {\n req.end(data);\n }\n });\n}\n\nexport const __setProxy = setProxy;\n", "import speedometer from \"./speedometer.js\";\nimport throttle from \"./throttle.js\";\n\nexport default (listener, isDownloadStream, freq = 3) => {\n let bytesNotified = 0;\n const _speedometer = speedometer(50, 250);\n\n return throttle(e => {\n const loaded = e.loaded;\n const total = e.lengthComputable ? e.total : undefined;\n const progressBytes = loaded - bytesNotified;\n const rate = _speedometer(progressBytes);\n const inRange = loaded <= total;\n\n bytesNotified = loaded;\n\n const data = {\n loaded,\n total,\n progress: total ? (loaded / total) : undefined,\n bytes: progressBytes,\n rate: rate ? rate : undefined,\n estimated: rate && total && inRange ? (total - loaded) / rate : undefined,\n event: e,\n lengthComputable: total != null\n };\n\n data[isDownloadStream ? 'download' : 'upload'] = true;\n\n listener(data);\n }, freq);\n}\n", "'use strict';\n\nimport utils from './../utils.js';\nimport platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ?\n\n// Standard browser envs have full support of the APIs needed to test\n// whether the request URL is of the same origin as current location.\n (function standardBrowserEnv() {\n const msie = /(msie|trident)/i.test(navigator.userAgent);\n const urlParsingNode = document.createElement('a');\n let originURL;\n\n /**\n * Parse a URL to discover its components\n *\n * @param {String} url The URL to be parsed\n * @returns {Object}\n */\n function resolveURL(url) {\n let href = url;\n\n if (msie) {\n // IE needs attribute set twice to normalize properties\n urlParsingNode.setAttribute('href', href);\n href = urlParsingNode.href;\n }\n\n urlParsingNode.setAttribute('href', href);\n\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n return {\n href: urlParsingNode.href,\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n host: urlParsingNode.host,\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n hostname: urlParsingNode.hostname,\n port: urlParsingNode.port,\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n urlParsingNode.pathname :\n '/' + urlParsingNode.pathname\n };\n }\n\n originURL = resolveURL(window.location.href);\n\n /**\n * Determine if a URL shares the same origin as the current location\n *\n * @param {String} requestURL The URL to test\n * @returns {boolean} True if URL shares the same origin, otherwise false\n */\n return function isURLSameOrigin(requestURL) {\n const parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n return (parsed.protocol === originURL.protocol &&\n parsed.host === originURL.host);\n };\n })() :\n\n // Non standard browser envs (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return function isURLSameOrigin() {\n return true;\n };\n })();\n", "import utils from './../utils.js';\nimport platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ?\n\n // Standard browser envs support document.cookie\n {\n write(name, value, expires, path, domain, secure) {\n const cookie = [name + '=' + encodeURIComponent(value)];\n\n utils.isNumber(expires) && cookie.push('expires=' + new Date(expires).toGMTString());\n\n utils.isString(path) && cookie.push('path=' + path);\n\n utils.isString(domain) && cookie.push('domain=' + domain);\n\n secure === true && cookie.push('secure');\n\n document.cookie = cookie.join('; ');\n },\n\n read(name) {\n const match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return (match ? decodeURIComponent(match[3]) : null);\n },\n\n remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n }\n\n :\n\n // Non-standard browser env (web workers, react-native) lack needed support.\n {\n write() {},\n read() {\n return null;\n },\n remove() {}\n };\n\n", "'use strict';\n\nimport utils from '../utils.js';\nimport AxiosHeaders from \"./AxiosHeaders.js\";\n\nconst headersToObject = (thing) => thing instanceof AxiosHeaders ? { ...thing } : thing;\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n *\n * @returns {Object} New object resulting from merging config2 to config1\n */\nexport default function mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n const config = {};\n\n function getMergedValue(target, source, caseless) {\n if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n return utils.merge.call({caseless}, target, source);\n } else if (utils.isPlainObject(source)) {\n return utils.merge({}, source);\n } else if (utils.isArray(source)) {\n return source.slice();\n }\n return source;\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDeepProperties(a, b, caseless) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(a, b, caseless);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a, caseless);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function valueFromConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function defaultToConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDirectKeys(a, b, prop) {\n if (prop in config2) {\n return getMergedValue(a, b);\n } else if (prop in config1) {\n return getMergedValue(undefined, a);\n }\n }\n\n const mergeMap = {\n url: valueFromConfig2,\n method: valueFromConfig2,\n data: valueFromConfig2,\n baseURL: defaultToConfig2,\n transformRequest: defaultToConfig2,\n transformResponse: defaultToConfig2,\n paramsSerializer: defaultToConfig2,\n timeout: defaultToConfig2,\n timeoutMessage: defaultToConfig2,\n withCredentials: defaultToConfig2,\n withXSRFToken: defaultToConfig2,\n adapter: defaultToConfig2,\n responseType: defaultToConfig2,\n xsrfCookieName: defaultToConfig2,\n xsrfHeaderName: defaultToConfig2,\n onUploadProgress: defaultToConfig2,\n onDownloadProgress: defaultToConfig2,\n decompress: defaultToConfig2,\n maxContentLength: defaultToConfig2,\n maxBodyLength: defaultToConfig2,\n beforeRedirect: defaultToConfig2,\n transport: defaultToConfig2,\n httpAgent: defaultToConfig2,\n httpsAgent: defaultToConfig2,\n cancelToken: defaultToConfig2,\n socketPath: defaultToConfig2,\n responseEncoding: defaultToConfig2,\n validateStatus: mergeDirectKeys,\n headers: (a, b) => mergeDeepProperties(headersToObject(a), headersToObject(b), true)\n };\n\n utils.forEach(Object.keys(Object.assign({}, config1, config2)), function computeConfigValue(prop) {\n const merge = mergeMap[prop] || mergeDeepProperties;\n const configValue = merge(config1[prop], config2[prop], prop);\n (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);\n });\n\n return config;\n}\n", "import platform from \"../platform/index.js\";\nimport utils from \"../utils.js\";\nimport isURLSameOrigin from \"./isURLSameOrigin.js\";\nimport cookies from \"./cookies.js\";\nimport buildFullPath from \"../core/buildFullPath.js\";\nimport mergeConfig from \"../core/mergeConfig.js\";\nimport AxiosHeaders from \"../core/AxiosHeaders.js\";\nimport buildURL from \"./buildURL.js\";\n\nexport default (config) => {\n const newConfig = mergeConfig({}, config);\n\n let {data, withXSRFToken, xsrfHeaderName, xsrfCookieName, headers, auth} = newConfig;\n\n newConfig.headers = headers = AxiosHeaders.from(headers);\n\n newConfig.url = buildURL(buildFullPath(newConfig.baseURL, newConfig.url), config.params, config.paramsSerializer);\n\n // HTTP basic authentication\n if (auth) {\n headers.set('Authorization', 'Basic ' +\n btoa((auth.username || '') + ':' + (auth.password ? unescape(encodeURIComponent(auth.password)) : ''))\n );\n }\n\n let contentType;\n\n if (utils.isFormData(data)) {\n if (platform.hasStandardBrowserEnv || platform.hasStandardBrowserWebWorkerEnv) {\n headers.setContentType(undefined); // Let the browser set it\n } else if ((contentType = headers.getContentType()) !== false) {\n // fix semicolon duplication issue for ReactNative FormData implementation\n const [type, ...tokens] = contentType ? contentType.split(';').map(token => token.trim()).filter(Boolean) : [];\n headers.setContentType([type || 'multipart/form-data', ...tokens].join('; '));\n }\n }\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n\n if (platform.hasStandardBrowserEnv) {\n withXSRFToken && utils.isFunction(withXSRFToken) && (withXSRFToken = withXSRFToken(newConfig));\n\n if (withXSRFToken || (withXSRFToken !== false && isURLSameOrigin(newConfig.url))) {\n // Add xsrf header\n const xsrfValue = xsrfHeaderName && xsrfCookieName && cookies.read(xsrfCookieName);\n\n if (xsrfValue) {\n headers.set(xsrfHeaderName, xsrfValue);\n }\n }\n }\n\n return newConfig;\n}\n\n", "import utils from './../utils.js';\nimport settle from './../core/settle.js';\nimport transitionalDefaults from '../defaults/transitional.js';\nimport AxiosError from '../core/AxiosError.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport parseProtocol from '../helpers/parseProtocol.js';\nimport platform from '../platform/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport progressEventReducer from '../helpers/progressEventReducer.js';\nimport resolveConfig from \"../helpers/resolveConfig.js\";\n\nconst isXHRAdapterSupported = typeof XMLHttpRequest !== 'undefined';\n\nexport default isXHRAdapterSupported && function (config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n const _config = resolveConfig(config);\n let requestData = _config.data;\n const requestHeaders = AxiosHeaders.from(_config.headers).normalize();\n let {responseType} = _config;\n let onCanceled;\n function done() {\n if (_config.cancelToken) {\n _config.cancelToken.unsubscribe(onCanceled);\n }\n\n if (_config.signal) {\n _config.signal.removeEventListener('abort', onCanceled);\n }\n }\n\n let request = new XMLHttpRequest();\n\n request.open(_config.method.toUpperCase(), _config.url, true);\n\n // Set the request timeout in MS\n request.timeout = _config.timeout;\n\n function onloadend() {\n if (!request) {\n return;\n }\n // Prepare the response\n const responseHeaders = AxiosHeaders.from(\n 'getAllResponseHeaders' in request && request.getAllResponseHeaders()\n );\n const responseData = !responseType || responseType === 'text' || responseType === 'json' ?\n request.responseText : request.response;\n const response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config,\n request\n };\n\n settle(function _resolve(value) {\n resolve(value);\n done();\n }, function _reject(err) {\n reject(err);\n done();\n }, response);\n\n // Clean up request\n request = null;\n }\n\n if ('onloadend' in request) {\n // Use onloadend if available\n request.onloadend = onloadend;\n } else {\n // Listen for ready state to emulate onloadend\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n // readystate handler is calling before onerror or ontimeout handlers,\n // so we should call onloadend on the next 'tick'\n setTimeout(onloadend);\n };\n }\n\n // Handle browser request cancellation (as opposed to a manual cancellation)\n request.onabort = function handleAbort() {\n if (!request) {\n return;\n }\n\n reject(new AxiosError('Request aborted', AxiosError.ECONNABORTED, _config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError() {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(new AxiosError('Network Error', AxiosError.ERR_NETWORK, _config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle timeout\n request.ontimeout = function handleTimeout() {\n let timeoutErrorMessage = _config.timeout ? 'timeout of ' + _config.timeout + 'ms exceeded' : 'timeout exceeded';\n const transitional = _config.transitional || transitionalDefaults;\n if (_config.timeoutErrorMessage) {\n timeoutErrorMessage = _config.timeoutErrorMessage;\n }\n reject(new AxiosError(\n timeoutErrorMessage,\n transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,\n _config,\n request));\n\n // Clean up request\n request = null;\n };\n\n // Remove Content-Type if data is undefined\n requestData === undefined && requestHeaders.setContentType(null);\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders.toJSON(), function setRequestHeader(val, key) {\n request.setRequestHeader(key, val);\n });\n }\n\n // Add withCredentials to request if needed\n if (!utils.isUndefined(_config.withCredentials)) {\n request.withCredentials = !!_config.withCredentials;\n }\n\n // Add responseType to request if needed\n if (responseType && responseType !== 'json') {\n request.responseType = _config.responseType;\n }\n\n // Handle progress if needed\n if (typeof _config.onDownloadProgress === 'function') {\n request.addEventListener('progress', progressEventReducer(_config.onDownloadProgress, true));\n }\n\n // Not all browsers support upload events\n if (typeof _config.onUploadProgress === 'function' && request.upload) {\n request.upload.addEventListener('progress', progressEventReducer(_config.onUploadProgress));\n }\n\n if (_config.cancelToken || _config.signal) {\n // Handle cancellation\n // eslint-disable-next-line func-names\n onCanceled = cancel => {\n if (!request) {\n return;\n }\n reject(!cancel || cancel.type ? new CanceledError(null, config, request) : cancel);\n request.abort();\n request = null;\n };\n\n _config.cancelToken && _config.cancelToken.subscribe(onCanceled);\n if (_config.signal) {\n _config.signal.aborted ? onCanceled() : _config.signal.addEventListener('abort', onCanceled);\n }\n }\n\n const protocol = parseProtocol(_config.url);\n\n if (protocol && platform.protocols.indexOf(protocol) === -1) {\n reject(new AxiosError('Unsupported protocol ' + protocol + ':', AxiosError.ERR_BAD_REQUEST, config));\n return;\n }\n\n\n // Send the request\n request.send(requestData || null);\n });\n}\n", "import CanceledError from \"../cancel/CanceledError.js\";\nimport AxiosError from \"../core/AxiosError.js\";\n\nconst composeSignals = (signals, timeout) => {\n let controller = new AbortController();\n\n let aborted;\n\n const onabort = function (cancel) {\n if (!aborted) {\n aborted = true;\n unsubscribe();\n const err = cancel instanceof Error ? cancel : this.reason;\n controller.abort(err instanceof AxiosError ? err : new CanceledError(err instanceof Error ? err.message : err));\n }\n }\n\n let timer = timeout && setTimeout(() => {\n onabort(new AxiosError(`timeout ${timeout} of ms exceeded`, AxiosError.ETIMEDOUT))\n }, timeout)\n\n const unsubscribe = () => {\n if (signals) {\n timer && clearTimeout(timer);\n timer = null;\n signals.forEach(signal => {\n signal &&\n (signal.removeEventListener ? signal.removeEventListener('abort', onabort) : signal.unsubscribe(onabort));\n });\n signals = null;\n }\n }\n\n signals.forEach((signal) => signal && signal.addEventListener && signal.addEventListener('abort', onabort));\n\n const {signal} = controller;\n\n signal.unsubscribe = unsubscribe;\n\n return [signal, () => {\n timer && clearTimeout(timer);\n timer = null;\n }];\n}\n\nexport default composeSignals;\n", "\n\nexport const streamChunk = function* (chunk, chunkSize) {\n let len = chunk.byteLength;\n\n if (!chunkSize || len < chunkSize) {\n yield chunk;\n return;\n }\n\n let pos = 0;\n let end;\n\n while (pos < len) {\n end = pos + chunkSize;\n yield chunk.slice(pos, end);\n pos = end;\n }\n}\n\nexport const readBytes = async function* (iterable, chunkSize, encode) {\n for await (const chunk of iterable) {\n yield* streamChunk(ArrayBuffer.isView(chunk) ? chunk : (await encode(String(chunk))), chunkSize);\n }\n}\n\nexport const trackStream = (stream, chunkSize, onProgress, onFinish, encode) => {\n const iterator = readBytes(stream, chunkSize, encode);\n\n let bytes = 0;\n\n return new ReadableStream({\n type: 'bytes',\n\n async pull(controller) {\n const {done, value} = await iterator.next();\n\n if (done) {\n controller.close();\n onFinish();\n return;\n }\n\n let len = value.byteLength;\n onProgress && onProgress(bytes += len);\n controller.enqueue(new Uint8Array(value));\n },\n cancel(reason) {\n onFinish(reason);\n return iterator.return();\n }\n }, {\n highWaterMark: 2\n })\n}\n", "import platform from \"../platform/index.js\";\nimport utils from \"../utils.js\";\nimport AxiosError from \"../core/AxiosError.js\";\nimport composeSignals from \"../helpers/composeSignals.js\";\nimport {trackStream} from \"../helpers/trackStream.js\";\nimport AxiosHeaders from \"../core/AxiosHeaders.js\";\nimport progressEventReducer from \"../helpers/progressEventReducer.js\";\nimport resolveConfig from \"../helpers/resolveConfig.js\";\nimport settle from \"../core/settle.js\";\n\nconst fetchProgressDecorator = (total, fn) => {\n const lengthComputable = total != null;\n return (loaded) => setTimeout(() => fn({\n lengthComputable,\n total,\n loaded\n }));\n}\n\nconst isFetchSupported = typeof fetch === 'function' && typeof Request === 'function' && typeof Response === 'function';\nconst isReadableStreamSupported = isFetchSupported && typeof ReadableStream === 'function';\n\n// used only inside the fetch adapter\nconst encodeText = isFetchSupported && (typeof TextEncoder === 'function' ?\n ((encoder) => (str) => encoder.encode(str))(new TextEncoder()) :\n async (str) => new Uint8Array(await new Response(str).arrayBuffer())\n);\n\nconst supportsRequestStream = isReadableStreamSupported && (() => {\n let duplexAccessed = false;\n\n const hasContentType = new Request(platform.origin, {\n body: new ReadableStream(),\n method: 'POST',\n get duplex() {\n duplexAccessed = true;\n return 'half';\n },\n }).headers.has('Content-Type');\n\n return duplexAccessed && !hasContentType;\n})();\n\nconst DEFAULT_CHUNK_SIZE = 64 * 1024;\n\nconst supportsResponseStream = isReadableStreamSupported && !!(()=> {\n try {\n return utils.isReadableStream(new Response('').body);\n } catch(err) {\n // return undefined\n }\n})();\n\nconst resolvers = {\n stream: supportsResponseStream && ((res) => res.body)\n};\n\nisFetchSupported && (((res) => {\n ['text', 'arrayBuffer', 'blob', 'formData', 'stream'].forEach(type => {\n !resolvers[type] && (resolvers[type] = utils.isFunction(res[type]) ? (res) => res[type]() :\n (_, config) => {\n throw new AxiosError(`Response type '${type}' is not supported`, AxiosError.ERR_NOT_SUPPORT, config);\n })\n });\n})(new Response));\n\nconst getBodyLength = async (body) => {\n if (body == null) {\n return 0;\n }\n\n if(utils.isBlob(body)) {\n return body.size;\n }\n\n if(utils.isSpecCompliantForm(body)) {\n return (await new Request(body).arrayBuffer()).byteLength;\n }\n\n if(utils.isArrayBufferView(body)) {\n return body.byteLength;\n }\n\n if(utils.isURLSearchParams(body)) {\n body = body + '';\n }\n\n if(utils.isString(body)) {\n return (await encodeText(body)).byteLength;\n }\n}\n\nconst resolveBodyLength = async (headers, body) => {\n const length = utils.toFiniteNumber(headers.getContentLength());\n\n return length == null ? getBodyLength(body) : length;\n}\n\nexport default isFetchSupported && (async (config) => {\n let {\n url,\n method,\n data,\n signal,\n cancelToken,\n timeout,\n onDownloadProgress,\n onUploadProgress,\n responseType,\n headers,\n withCredentials = 'same-origin',\n fetchOptions\n } = resolveConfig(config);\n\n responseType = responseType ? (responseType + '').toLowerCase() : 'text';\n\n let [composedSignal, stopTimeout] = (signal || cancelToken || timeout) ?\n composeSignals([signal, cancelToken], timeout) : [];\n\n let finished, request;\n\n const onFinish = () => {\n !finished && setTimeout(() => {\n composedSignal && composedSignal.unsubscribe();\n });\n\n finished = true;\n }\n\n let requestContentLength;\n\n try {\n if (\n onUploadProgress && supportsRequestStream && method !== 'get' && method !== 'head' &&\n (requestContentLength = await resolveBodyLength(headers, data)) !== 0\n ) {\n let _request = new Request(url, {\n method: 'POST',\n body: data,\n duplex: \"half\"\n });\n\n let contentTypeHeader;\n\n if (utils.isFormData(data) && (contentTypeHeader = _request.headers.get('content-type'))) {\n headers.setContentType(contentTypeHeader)\n }\n\n if (_request.body) {\n data = trackStream(_request.body, DEFAULT_CHUNK_SIZE, fetchProgressDecorator(\n requestContentLength,\n progressEventReducer(onUploadProgress)\n ), null, encodeText);\n }\n }\n\n if (!utils.isString(withCredentials)) {\n withCredentials = withCredentials ? 'cors' : 'omit';\n }\n\n request = new Request(url, {\n ...fetchOptions,\n signal: composedSignal,\n method: method.toUpperCase(),\n headers: headers.normalize().toJSON(),\n body: data,\n duplex: \"half\",\n withCredentials\n });\n\n let response = await fetch(request);\n\n const isStreamResponse = supportsResponseStream && (responseType === 'stream' || responseType === 'response');\n\n if (supportsResponseStream && (onDownloadProgress || isStreamResponse)) {\n const options = {};\n\n ['status', 'statusText', 'headers'].forEach(prop => {\n options[prop] = response[prop];\n });\n\n const responseContentLength = utils.toFiniteNumber(response.headers.get('content-length'));\n\n response = new Response(\n trackStream(response.body, DEFAULT_CHUNK_SIZE, onDownloadProgress && fetchProgressDecorator(\n responseContentLength,\n progressEventReducer(onDownloadProgress, true)\n ), isStreamResponse && onFinish, encodeText),\n options\n );\n }\n\n responseType = responseType || 'text';\n\n let responseData = await resolvers[utils.findKey(resolvers, responseType) || 'text'](response, config);\n\n !isStreamResponse && onFinish();\n\n stopTimeout && stopTimeout();\n\n return await new Promise((resolve, reject) => {\n settle(resolve, reject, {\n data: responseData,\n headers: AxiosHeaders.from(response.headers),\n status: response.status,\n statusText: response.statusText,\n config,\n request\n })\n })\n } catch (err) {\n onFinish();\n\n if (err && err.name === 'TypeError' && /fetch/i.test(err.message)) {\n throw Object.assign(\n new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request),\n {\n cause: err.cause || err\n }\n )\n }\n\n throw AxiosError.from(err, err && err.code, config, request);\n }\n});\n\n\n", "import utils from '../utils.js';\nimport httpAdapter from './http.js';\nimport xhrAdapter from './xhr.js';\nimport fetchAdapter from './fetch.js';\nimport AxiosError from \"../core/AxiosError.js\";\n\nconst knownAdapters = {\n http: httpAdapter,\n xhr: xhrAdapter,\n fetch: fetchAdapter\n}\n\nutils.forEach(knownAdapters, (fn, value) => {\n if (fn) {\n try {\n Object.defineProperty(fn, 'name', {value});\n } catch (e) {\n // eslint-disable-next-line no-empty\n }\n Object.defineProperty(fn, 'adapterName', {value});\n }\n});\n\nconst renderReason = (reason) => `- ${reason}`;\n\nconst isResolvedHandle = (adapter) => utils.isFunction(adapter) || adapter === null || adapter === false;\n\nexport default {\n getAdapter: (adapters) => {\n adapters = utils.isArray(adapters) ? adapters : [adapters];\n\n const {length} = adapters;\n let nameOrAdapter;\n let adapter;\n\n const rejectedReasons = {};\n\n for (let i = 0; i < length; i++) {\n nameOrAdapter = adapters[i];\n let id;\n\n adapter = nameOrAdapter;\n\n if (!isResolvedHandle(nameOrAdapter)) {\n adapter = knownAdapters[(id = String(nameOrAdapter)).toLowerCase()];\n\n if (adapter === undefined) {\n throw new AxiosError(`Unknown adapter '${id}'`);\n }\n }\n\n if (adapter) {\n break;\n }\n\n rejectedReasons[id || '#' + i] = adapter;\n }\n\n if (!adapter) {\n\n const reasons = Object.entries(rejectedReasons)\n .map(([id, state]) => `adapter ${id} ` +\n (state === false ? 'is not supported by the environment' : 'is not available in the build')\n );\n\n let s = length ?\n (reasons.length > 1 ? 'since :\\n' + reasons.map(renderReason).join('\\n') : ' ' + renderReason(reasons[0])) :\n 'as no adapter specified';\n\n throw new AxiosError(\n `There is no suitable adapter to dispatch the request ` + s,\n 'ERR_NOT_SUPPORT'\n );\n }\n\n return adapter;\n },\n adapters: knownAdapters\n}\n", "'use strict';\n\nimport transformData from './transformData.js';\nimport isCancel from '../cancel/isCancel.js';\nimport defaults from '../defaults/index.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport adapters from \"../adapters/adapters.js\";\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n *\n * @param {Object} config The config that is to be used for the request\n *\n * @returns {void}\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n\n if (config.signal && config.signal.aborted) {\n throw new CanceledError(null, config);\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n *\n * @returns {Promise} The Promise to be fulfilled\n */\nexport default function dispatchRequest(config) {\n throwIfCancellationRequested(config);\n\n config.headers = AxiosHeaders.from(config.headers);\n\n // Transform request data\n config.data = transformData.call(\n config,\n config.transformRequest\n );\n\n if (['post', 'put', 'patch'].indexOf(config.method) !== -1) {\n config.headers.setContentType('application/x-www-form-urlencoded', false);\n }\n\n const adapter = adapters.getAdapter(config.adapter || defaults.adapter);\n\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n response.data = transformData.call(\n config,\n config.transformResponse,\n response\n );\n\n response.headers = AxiosHeaders.from(response.headers);\n\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = transformData.call(\n config,\n config.transformResponse,\n reason.response\n );\n reason.response.headers = AxiosHeaders.from(reason.response.headers);\n }\n }\n\n return Promise.reject(reason);\n });\n}\n", "'use strict';\n\nimport {VERSION} from '../env/data.js';\nimport AxiosError from '../core/AxiosError.js';\n\nconst validators = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach((type, i) => {\n validators[type] = function validator(thing) {\n return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n };\n});\n\nconst deprecatedWarnings = {};\n\n/**\n * Transitional option validator\n *\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\n * @param {string?} version - deprecated version / removed since version\n * @param {string?} message - some message with additional info\n *\n * @returns {function}\n */\nvalidators.transitional = function transitional(validator, version, message) {\n function formatMessage(opt, desc) {\n return '[Axios v' + VERSION + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\n }\n\n // eslint-disable-next-line func-names\n return (value, opt, opts) => {\n if (validator === false) {\n throw new AxiosError(\n formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')),\n AxiosError.ERR_DEPRECATED\n );\n }\n\n if (version && !deprecatedWarnings[opt]) {\n deprecatedWarnings[opt] = true;\n // eslint-disable-next-line no-console\n console.warn(\n formatMessage(\n opt,\n ' has been deprecated since v' + version + ' and will be removed in the near future'\n )\n );\n }\n\n return validator ? validator(value, opt, opts) : true;\n };\n};\n\n/**\n * Assert object's properties type\n *\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n *\n * @returns {object}\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n if (typeof options !== 'object') {\n throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE);\n }\n const keys = Object.keys(options);\n let i = keys.length;\n while (i-- > 0) {\n const opt = keys[i];\n const validator = schema[opt];\n if (validator) {\n const value = options[opt];\n const result = value === undefined || validator(value, opt, options);\n if (result !== true) {\n throw new AxiosError('option ' + opt + ' must be ' + result, AxiosError.ERR_BAD_OPTION_VALUE);\n }\n continue;\n }\n if (allowUnknown !== true) {\n throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION);\n }\n }\n}\n\nexport default {\n assertOptions,\n validators\n};\n", "'use strict';\n\nimport utils from './../utils.js';\nimport buildURL from '../helpers/buildURL.js';\nimport InterceptorManager from './InterceptorManager.js';\nimport dispatchRequest from './dispatchRequest.js';\nimport mergeConfig from './mergeConfig.js';\nimport buildFullPath from './buildFullPath.js';\nimport validator from '../helpers/validator.js';\nimport AxiosHeaders from './AxiosHeaders.js';\n\nconst validators = validator.validators;\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n *\n * @return {Axios} A new instance of Axios\n */\nclass Axios {\n constructor(instanceConfig) {\n this.defaults = instanceConfig;\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n }\n\n /**\n * Dispatch a request\n *\n * @param {String|Object} configOrUrl The config specific for this request (merged with this.defaults)\n * @param {?Object} config\n *\n * @returns {Promise} The Promise to be fulfilled\n */\n async request(configOrUrl, config) {\n try {\n return await this._request(configOrUrl, config);\n } catch (err) {\n if (err instanceof Error) {\n let dummy;\n\n Error.captureStackTrace ? Error.captureStackTrace(dummy = {}) : (dummy = new Error());\n\n // slice off the Error: ... line\n const stack = dummy.stack ? dummy.stack.replace(/^.+\\n/, '') : '';\n try {\n if (!err.stack) {\n err.stack = stack;\n // match without the 2 top stack lines\n } else if (stack && !String(err.stack).endsWith(stack.replace(/^.+\\n.+\\n/, ''))) {\n err.stack += '\\n' + stack\n }\n } catch (e) {\n // ignore the case where \"stack\" is an un-writable property\n }\n }\n\n throw err;\n }\n }\n\n _request(configOrUrl, config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof configOrUrl === 'string') {\n config = config || {};\n config.url = configOrUrl;\n } else {\n config = configOrUrl || {};\n }\n\n config = mergeConfig(this.defaults, config);\n\n const {transitional, paramsSerializer, headers} = config;\n\n if (transitional !== undefined) {\n validator.assertOptions(transitional, {\n silentJSONParsing: validators.transitional(validators.boolean),\n forcedJSONParsing: validators.transitional(validators.boolean),\n clarifyTimeoutError: validators.transitional(validators.boolean)\n }, false);\n }\n\n if (paramsSerializer != null) {\n if (utils.isFunction(paramsSerializer)) {\n config.paramsSerializer = {\n serialize: paramsSerializer\n }\n } else {\n validator.assertOptions(paramsSerializer, {\n encode: validators.function,\n serialize: validators.function\n }, true);\n }\n }\n\n // Set config.method\n config.method = (config.method || this.defaults.method || 'get').toLowerCase();\n\n // Flatten headers\n let contextHeaders = headers && utils.merge(\n headers.common,\n headers[config.method]\n );\n\n headers && utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n (method) => {\n delete headers[method];\n }\n );\n\n config.headers = AxiosHeaders.concat(contextHeaders, headers);\n\n // filter out skipped interceptors\n const requestInterceptorChain = [];\n let synchronousRequestInterceptors = true;\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n return;\n }\n\n synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n\n requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n const responseInterceptorChain = [];\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n let promise;\n let i = 0;\n let len;\n\n if (!synchronousRequestInterceptors) {\n const chain = [dispatchRequest.bind(this), undefined];\n chain.unshift.apply(chain, requestInterceptorChain);\n chain.push.apply(chain, responseInterceptorChain);\n len = chain.length;\n\n promise = Promise.resolve(config);\n\n while (i < len) {\n promise = promise.then(chain[i++], chain[i++]);\n }\n\n return promise;\n }\n\n len = requestInterceptorChain.length;\n\n let newConfig = config;\n\n i = 0;\n\n while (i < len) {\n const onFulfilled = requestInterceptorChain[i++];\n const onRejected = requestInterceptorChain[i++];\n try {\n newConfig = onFulfilled(newConfig);\n } catch (error) {\n onRejected.call(this, error);\n break;\n }\n }\n\n try {\n promise = dispatchRequest.call(this, newConfig);\n } catch (error) {\n return Promise.reject(error);\n }\n\n i = 0;\n len = responseInterceptorChain.length;\n\n while (i < len) {\n promise = promise.then(responseInterceptorChain[i++], responseInterceptorChain[i++]);\n }\n\n return promise;\n }\n\n getUri(config) {\n config = mergeConfig(this.defaults, config);\n const fullPath = buildFullPath(config.baseURL, config.url);\n return buildURL(fullPath, config.params, config.paramsSerializer);\n }\n}\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n url,\n data: (config || {}).data\n }));\n };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n\n function generateHTTPMethod(isForm) {\n return function httpMethod(url, data, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n headers: isForm ? {\n 'Content-Type': 'multipart/form-data'\n } : {},\n url,\n data\n }));\n };\n }\n\n Axios.prototype[method] = generateHTTPMethod();\n\n Axios.prototype[method + 'Form'] = generateHTTPMethod(true);\n});\n\nexport default Axios;\n", "'use strict';\n\nimport CanceledError from './CanceledError.js';\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @param {Function} executor The executor function.\n *\n * @returns {CancelToken}\n */\nclass CancelToken {\n constructor(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n let resolvePromise;\n\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n\n const token = this;\n\n // eslint-disable-next-line func-names\n this.promise.then(cancel => {\n if (!token._listeners) return;\n\n let i = token._listeners.length;\n\n while (i-- > 0) {\n token._listeners[i](cancel);\n }\n token._listeners = null;\n });\n\n // eslint-disable-next-line func-names\n this.promise.then = onfulfilled => {\n let _resolve;\n // eslint-disable-next-line func-names\n const promise = new Promise(resolve => {\n token.subscribe(resolve);\n _resolve = resolve;\n }).then(onfulfilled);\n\n promise.cancel = function reject() {\n token.unsubscribe(_resolve);\n };\n\n return promise;\n };\n\n executor(function cancel(message, config, request) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new CanceledError(message, config, request);\n resolvePromise(token.reason);\n });\n }\n\n /**\n * Throws a `CanceledError` if cancellation has been requested.\n */\n throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n }\n\n /**\n * Subscribe to the cancel signal\n */\n\n subscribe(listener) {\n if (this.reason) {\n listener(this.reason);\n return;\n }\n\n if (this._listeners) {\n this._listeners.push(listener);\n } else {\n this._listeners = [listener];\n }\n }\n\n /**\n * Unsubscribe from the cancel signal\n */\n\n unsubscribe(listener) {\n if (!this._listeners) {\n return;\n }\n const index = this._listeners.indexOf(listener);\n if (index !== -1) {\n this._listeners.splice(index, 1);\n }\n }\n\n /**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\n static source() {\n let cancel;\n const token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token,\n cancel\n };\n }\n}\n\nexport default CancelToken;\n", "'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n *\n * @returns {Function}\n */\nexport default function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n}\n", "'use strict';\n\nimport utils from './../utils.js';\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n *\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nexport default function isAxiosError(payload) {\n return utils.isObject(payload) && (payload.isAxiosError === true);\n}\n", "const HttpStatusCode = {\n Continue: 100,\n SwitchingProtocols: 101,\n Processing: 102,\n EarlyHints: 103,\n Ok: 200,\n Created: 201,\n Accepted: 202,\n NonAuthoritativeInformation: 203,\n NoContent: 204,\n ResetContent: 205,\n PartialContent: 206,\n MultiStatus: 207,\n AlreadyReported: 208,\n ImUsed: 226,\n MultipleChoices: 300,\n MovedPermanently: 301,\n Found: 302,\n SeeOther: 303,\n NotModified: 304,\n UseProxy: 305,\n Unused: 306,\n TemporaryRedirect: 307,\n PermanentRedirect: 308,\n BadRequest: 400,\n Unauthorized: 401,\n PaymentRequired: 402,\n Forbidden: 403,\n NotFound: 404,\n MethodNotAllowed: 405,\n NotAcceptable: 406,\n ProxyAuthenticationRequired: 407,\n RequestTimeout: 408,\n Conflict: 409,\n Gone: 410,\n LengthRequired: 411,\n PreconditionFailed: 412,\n PayloadTooLarge: 413,\n UriTooLong: 414,\n UnsupportedMediaType: 415,\n RangeNotSatisfiable: 416,\n ExpectationFailed: 417,\n ImATeapot: 418,\n MisdirectedRequest: 421,\n UnprocessableEntity: 422,\n Locked: 423,\n FailedDependency: 424,\n TooEarly: 425,\n UpgradeRequired: 426,\n PreconditionRequired: 428,\n TooManyRequests: 429,\n RequestHeaderFieldsTooLarge: 431,\n UnavailableForLegalReasons: 451,\n InternalServerError: 500,\n NotImplemented: 501,\n BadGateway: 502,\n ServiceUnavailable: 503,\n GatewayTimeout: 504,\n HttpVersionNotSupported: 505,\n VariantAlsoNegotiates: 506,\n InsufficientStorage: 507,\n LoopDetected: 508,\n NotExtended: 510,\n NetworkAuthenticationRequired: 511,\n};\n\nObject.entries(HttpStatusCode).forEach(([key, value]) => {\n HttpStatusCode[value] = key;\n});\n\nexport default HttpStatusCode;\n", "'use strict';\n\nimport utils from './utils.js';\nimport bind from './helpers/bind.js';\nimport Axios from './core/Axios.js';\nimport mergeConfig from './core/mergeConfig.js';\nimport defaults from './defaults/index.js';\nimport formDataToJSON from './helpers/formDataToJSON.js';\nimport CanceledError from './cancel/CanceledError.js';\nimport CancelToken from './cancel/CancelToken.js';\nimport isCancel from './cancel/isCancel.js';\nimport {VERSION} from './env/data.js';\nimport toFormData from './helpers/toFormData.js';\nimport AxiosError from './core/AxiosError.js';\nimport spread from './helpers/spread.js';\nimport isAxiosError from './helpers/isAxiosError.js';\nimport AxiosHeaders from \"./core/AxiosHeaders.js\";\nimport adapters from './adapters/adapters.js';\nimport HttpStatusCode from './helpers/HttpStatusCode.js';\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n *\n * @returns {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n const context = new Axios(defaultConfig);\n const instance = bind(Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, Axios.prototype, context, {allOwnKeys: true});\n\n // Copy context to instance\n utils.extend(instance, context, null, {allOwnKeys: true});\n\n // Factory for creating new instances\n instance.create = function create(instanceConfig) {\n return createInstance(mergeConfig(defaultConfig, instanceConfig));\n };\n\n return instance;\n}\n\n// Create the default instance to be exported\nconst axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Expose Cancel & CancelToken\naxios.CanceledError = CanceledError;\naxios.CancelToken = CancelToken;\naxios.isCancel = isCancel;\naxios.VERSION = VERSION;\naxios.toFormData = toFormData;\n\n// Expose AxiosError class\naxios.AxiosError = AxiosError;\n\n// alias for CanceledError for backward compatibility\naxios.Cancel = axios.CanceledError;\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\n\naxios.spread = spread;\n\n// Expose isAxiosError\naxios.isAxiosError = isAxiosError;\n\n// Expose mergeConfig\naxios.mergeConfig = mergeConfig;\n\naxios.AxiosHeaders = AxiosHeaders;\n\naxios.formToJSON = thing => formDataToJSON(utils.isHTMLForm(thing) ? new FormData(thing) : thing);\n\naxios.getAdapter = adapters.getAdapter;\n\naxios.HttpStatusCode = HttpStatusCode;\n\naxios.default = axios;\n\n// this module should only have a default export\nexport default axios\n", "module.exports = function(size) {\n return new LruCache(size)\n}\n\nfunction LruCache(size) {\n this.capacity = size | 0\n this.map = Object.create(null)\n this.list = new DoublyLinkedList()\n}\n\nLruCache.prototype.get = function(key) {\n var node = this.map[key]\n if (node == null) return undefined\n this.used(node)\n return node.val\n}\n\nLruCache.prototype.set = function(key, val) {\n var node = this.map[key]\n if (node != null) {\n node.val = val\n } else {\n if (!this.capacity) this.prune()\n if (!this.capacity) return false\n node = new DoublyLinkedNode(key, val)\n this.map[key] = node\n this.capacity--\n }\n this.used(node)\n return true\n}\n\nLruCache.prototype.used = function(node) {\n this.list.moveToFront(node)\n}\n\nLruCache.prototype.prune = function() {\n var node = this.list.pop()\n if (node != null) {\n delete this.map[node.key]\n this.capacity++\n }\n}\n\n\nfunction DoublyLinkedList() {\n this.firstNode = null\n this.lastNode = null\n}\n\nDoublyLinkedList.prototype.moveToFront = function(node) {\n if (this.firstNode == node) return\n\n this.remove(node)\n\n if (this.firstNode == null) {\n this.firstNode = node\n this.lastNode = node\n node.prev = null\n node.next = null\n } else {\n node.prev = null\n node.next = this.firstNode\n node.next.prev = node\n this.firstNode = node\n }\n}\n\nDoublyLinkedList.prototype.pop = function() {\n var lastNode = this.lastNode\n if (lastNode != null) {\n this.remove(lastNode)\n }\n return lastNode\n}\n\nDoublyLinkedList.prototype.remove = function(node) {\n if (this.firstNode == node) {\n this.firstNode = node.next\n } else if (node.prev != null) {\n node.prev.next = node.next\n }\n if (this.lastNode == node) {\n this.lastNode = node.prev\n } else if (node.next != null) {\n node.next.prev = node.prev\n }\n}\n\n\nfunction DoublyLinkedNode(key, val) {\n this.key = key\n this.val = val\n this.prev = null\n this.next = null\n}\n", "var aws4 = exports,\n url = require('url'),\n querystring = require('querystring'),\n crypto = require('crypto'),\n lru = require('./lru'),\n credentialsCache = lru(1000)\n\n// http://docs.amazonwebservices.com/general/latest/gr/signature-version-4.html\n\nfunction hmac(key, string, encoding) {\n return crypto.createHmac('sha256', key).update(string, 'utf8').digest(encoding)\n}\n\nfunction hash(string, encoding) {\n return crypto.createHash('sha256').update(string, 'utf8').digest(encoding)\n}\n\n// This function assumes the string has already been percent encoded\nfunction encodeRfc3986(urlEncodedString) {\n return urlEncodedString.replace(/[!'()*]/g, function(c) {\n return '%' + c.charCodeAt(0).toString(16).toUpperCase()\n })\n}\n\nfunction encodeRfc3986Full(str) {\n return encodeRfc3986(encodeURIComponent(str))\n}\n\n// A bit of a combination of:\n// https://github.com/aws/aws-sdk-java-v2/blob/dc695de6ab49ad03934e1b02e7263abbd2354be0/core/auth/src/main/java/software/amazon/awssdk/auth/signer/internal/AbstractAws4Signer.java#L59\n// https://github.com/aws/aws-sdk-js/blob/18cb7e5b463b46239f9fdd4a65e2ff8c81831e8f/lib/signers/v4.js#L191-L199\n// https://github.com/mhart/aws4fetch/blob/b3aed16b6f17384cf36ea33bcba3c1e9f3bdfefd/src/main.js#L25-L34\nvar HEADERS_TO_IGNORE = {\n 'authorization': true,\n 'connection': true,\n 'x-amzn-trace-id': true,\n 'user-agent': true,\n 'expect': true,\n 'presigned-expires': true,\n 'range': true,\n}\n\n// request: { path | body, [host], [method], [headers], [service], [region] }\n// credentials: { accessKeyId, secretAccessKey, [sessionToken] }\nfunction RequestSigner(request, credentials) {\n\n if (typeof request === 'string') request = url.parse(request)\n\n var headers = request.headers = Object.assign({}, (request.headers || {})),\n hostParts = (!this.service || !this.region) && this.matchHost(request.hostname || request.host || headers.Host || headers.host)\n\n this.request = request\n this.credentials = credentials || this.defaultCredentials()\n\n this.service = request.service || hostParts[0] || ''\n this.region = request.region || hostParts[1] || 'us-east-1'\n\n // SES uses a different domain from the service name\n if (this.service === 'email') this.service = 'ses'\n\n if (!request.method && request.body)\n request.method = 'POST'\n\n if (!headers.Host && !headers.host) {\n headers.Host = request.hostname || request.host || this.createHost()\n\n // If a port is specified explicitly, use it as is\n if (request.port)\n headers.Host += ':' + request.port\n }\n if (!request.hostname && !request.host)\n request.hostname = headers.Host || headers.host\n\n this.isCodeCommitGit = this.service === 'codecommit' && request.method === 'GIT'\n\n this.extraHeadersToIgnore = request.extraHeadersToIgnore || Object.create(null)\n this.extraHeadersToInclude = request.extraHeadersToInclude || Object.create(null)\n}\n\nRequestSigner.prototype.matchHost = function(host) {\n var match = (host || '').match(/([^\\.]+)\\.(?:([^\\.]*)\\.)?amazonaws\\.com(\\.cn)?$/)\n var hostParts = (match || []).slice(1, 3)\n\n // ES's hostParts are sometimes the other way round, if the value that is expected\n // to be region equals \u2018es\u2019 switch them back\n // e.g. search-cluster-name-aaaa00aaaa0aaa0aaaaaaa0aaa.us-east-1.es.amazonaws.com\n if (hostParts[1] === 'es' || hostParts[1] === 'aoss')\n hostParts = hostParts.reverse()\n\n if (hostParts[1] == 's3') {\n hostParts[0] = 's3'\n hostParts[1] = 'us-east-1'\n } else {\n for (var i = 0; i < 2; i++) {\n if (/^s3-/.test(hostParts[i])) {\n hostParts[1] = hostParts[i].slice(3)\n hostParts[0] = 's3'\n break\n }\n }\n }\n\n return hostParts\n}\n\n// http://docs.aws.amazon.com/general/latest/gr/rande.html\nRequestSigner.prototype.isSingleRegion = function() {\n // Special case for S3 and SimpleDB in us-east-1\n if (['s3', 'sdb'].indexOf(this.service) >= 0 && this.region === 'us-east-1') return true\n\n return ['cloudfront', 'ls', 'route53', 'iam', 'importexport', 'sts']\n .indexOf(this.service) >= 0\n}\n\nRequestSigner.prototype.createHost = function() {\n var region = this.isSingleRegion() ? '' : '.' + this.region,\n subdomain = this.service === 'ses' ? 'email' : this.service\n return subdomain + region + '.amazonaws.com'\n}\n\nRequestSigner.prototype.prepareRequest = function() {\n this.parsePath()\n\n var request = this.request, headers = request.headers, query\n\n if (request.signQuery) {\n\n this.parsedPath.query = query = this.parsedPath.query || {}\n\n if (this.credentials.sessionToken)\n query['X-Amz-Security-Token'] = this.credentials.sessionToken\n\n if (this.service === 's3' && !query['X-Amz-Expires'])\n query['X-Amz-Expires'] = 86400\n\n if (query['X-Amz-Date'])\n this.datetime = query['X-Amz-Date']\n else\n query['X-Amz-Date'] = this.getDateTime()\n\n query['X-Amz-Algorithm'] = 'AWS4-HMAC-SHA256'\n query['X-Amz-Credential'] = this.credentials.accessKeyId + '/' + this.credentialString()\n query['X-Amz-SignedHeaders'] = this.signedHeaders()\n\n } else {\n\n if (!request.doNotModifyHeaders && !this.isCodeCommitGit) {\n if (request.body && !headers['Content-Type'] && !headers['content-type'])\n headers['Content-Type'] = 'application/x-www-form-urlencoded; charset=utf-8'\n\n if (request.body && !headers['Content-Length'] && !headers['content-length'])\n headers['Content-Length'] = Buffer.byteLength(request.body)\n\n if (this.credentials.sessionToken && !headers['X-Amz-Security-Token'] && !headers['x-amz-security-token'])\n headers['X-Amz-Security-Token'] = this.credentials.sessionToken\n\n if (this.service === 's3' && !headers['X-Amz-Content-Sha256'] && !headers['x-amz-content-sha256'])\n headers['X-Amz-Content-Sha256'] = hash(this.request.body || '', 'hex')\n\n if (headers['X-Amz-Date'] || headers['x-amz-date'])\n this.datetime = headers['X-Amz-Date'] || headers['x-amz-date']\n else\n headers['X-Amz-Date'] = this.getDateTime()\n }\n\n delete headers.Authorization\n delete headers.authorization\n }\n}\n\nRequestSigner.prototype.sign = function() {\n if (!this.parsedPath) this.prepareRequest()\n\n if (this.request.signQuery) {\n this.parsedPath.query['X-Amz-Signature'] = this.signature()\n } else {\n this.request.headers.Authorization = this.authHeader()\n }\n\n this.request.path = this.formatPath()\n\n return this.request\n}\n\nRequestSigner.prototype.getDateTime = function() {\n if (!this.datetime) {\n var headers = this.request.headers,\n date = new Date(headers.Date || headers.date || new Date)\n\n this.datetime = date.toISOString().replace(/[:\\-]|\\.\\d{3}/g, '')\n\n // Remove the trailing 'Z' on the timestamp string for CodeCommit git access\n if (this.isCodeCommitGit) this.datetime = this.datetime.slice(0, -1)\n }\n return this.datetime\n}\n\nRequestSigner.prototype.getDate = function() {\n return this.getDateTime().substr(0, 8)\n}\n\nRequestSigner.prototype.authHeader = function() {\n return [\n 'AWS4-HMAC-SHA256 Credential=' + this.credentials.accessKeyId + '/' + this.credentialString(),\n 'SignedHeaders=' + this.signedHeaders(),\n 'Signature=' + this.signature(),\n ].join(', ')\n}\n\nRequestSigner.prototype.signature = function() {\n var date = this.getDate(),\n cacheKey = [this.credentials.secretAccessKey, date, this.region, this.service].join(),\n kDate, kRegion, kService, kCredentials = credentialsCache.get(cacheKey)\n if (!kCredentials) {\n kDate = hmac('AWS4' + this.credentials.secretAccessKey, date)\n kRegion = hmac(kDate, this.region)\n kService = hmac(kRegion, this.service)\n kCredentials = hmac(kService, 'aws4_request')\n credentialsCache.set(cacheKey, kCredentials)\n }\n return hmac(kCredentials, this.stringToSign(), 'hex')\n}\n\nRequestSigner.prototype.stringToSign = function() {\n return [\n 'AWS4-HMAC-SHA256',\n this.getDateTime(),\n this.credentialString(),\n hash(this.canonicalString(), 'hex'),\n ].join('\\n')\n}\n\nRequestSigner.prototype.canonicalString = function() {\n if (!this.parsedPath) this.prepareRequest()\n\n var pathStr = this.parsedPath.path,\n query = this.parsedPath.query,\n headers = this.request.headers,\n queryStr = '',\n normalizePath = this.service !== 's3',\n decodePath = this.service === 's3' || this.request.doNotEncodePath,\n decodeSlashesInPath = this.service === 's3',\n firstValOnly = this.service === 's3',\n bodyHash\n\n if (this.service === 's3' && this.request.signQuery) {\n bodyHash = 'UNSIGNED-PAYLOAD'\n } else if (this.isCodeCommitGit) {\n bodyHash = ''\n } else {\n bodyHash = headers['X-Amz-Content-Sha256'] || headers['x-amz-content-sha256'] ||\n hash(this.request.body || '', 'hex')\n }\n\n if (query) {\n var reducedQuery = Object.keys(query).reduce(function(obj, key) {\n if (!key) return obj\n obj[encodeRfc3986Full(key)] = !Array.isArray(query[key]) ? query[key] :\n (firstValOnly ? query[key][0] : query[key])\n return obj\n }, {})\n var encodedQueryPieces = []\n Object.keys(reducedQuery).sort().forEach(function(key) {\n if (!Array.isArray(reducedQuery[key])) {\n encodedQueryPieces.push(key + '=' + encodeRfc3986Full(reducedQuery[key]))\n } else {\n reducedQuery[key].map(encodeRfc3986Full).sort()\n .forEach(function(val) { encodedQueryPieces.push(key + '=' + val) })\n }\n })\n queryStr = encodedQueryPieces.join('&')\n }\n if (pathStr !== '/') {\n if (normalizePath) pathStr = pathStr.replace(/\\/{2,}/g, '/')\n pathStr = pathStr.split('/').reduce(function(path, piece) {\n if (normalizePath && piece === '..') {\n path.pop()\n } else if (!normalizePath || piece !== '.') {\n if (decodePath) piece = decodeURIComponent(piece.replace(/\\+/g, ' '))\n path.push(encodeRfc3986Full(piece))\n }\n return path\n }, []).join('/')\n if (pathStr[0] !== '/') pathStr = '/' + pathStr\n if (decodeSlashesInPath) pathStr = pathStr.replace(/%2F/g, '/')\n }\n\n return [\n this.request.method || 'GET',\n pathStr,\n queryStr,\n this.canonicalHeaders() + '\\n',\n this.signedHeaders(),\n bodyHash,\n ].join('\\n')\n}\n\nRequestSigner.prototype.canonicalHeaders = function() {\n var headers = this.request.headers\n function trimAll(header) {\n return header.toString().trim().replace(/\\s+/g, ' ')\n }\n return Object.keys(headers)\n .filter(function(key) { return HEADERS_TO_IGNORE[key.toLowerCase()] == null })\n .sort(function(a, b) { return a.toLowerCase() < b.toLowerCase() ? -1 : 1 })\n .map(function(key) { return key.toLowerCase() + ':' + trimAll(headers[key]) })\n .join('\\n')\n}\n\nRequestSigner.prototype.signedHeaders = function() {\n var extraHeadersToInclude = this.extraHeadersToInclude,\n extraHeadersToIgnore = this.extraHeadersToIgnore\n return Object.keys(this.request.headers)\n .map(function(key) { return key.toLowerCase() })\n .filter(function(key) {\n return extraHeadersToInclude[key] ||\n (HEADERS_TO_IGNORE[key] == null && !extraHeadersToIgnore[key])\n })\n .sort()\n .join(';')\n}\n\nRequestSigner.prototype.credentialString = function() {\n return [\n this.getDate(),\n this.region,\n this.service,\n 'aws4_request',\n ].join('/')\n}\n\nRequestSigner.prototype.defaultCredentials = function() {\n var env = process.env\n return {\n accessKeyId: env.AWS_ACCESS_KEY_ID || env.AWS_ACCESS_KEY,\n secretAccessKey: env.AWS_SECRET_ACCESS_KEY || env.AWS_SECRET_KEY,\n sessionToken: env.AWS_SESSION_TOKEN,\n }\n}\n\nRequestSigner.prototype.parsePath = function() {\n var path = this.request.path || '/'\n\n // S3 doesn't always encode characters > 127 correctly and\n // all services don't encode characters > 255 correctly\n // So if there are non-reserved chars (and it's not already all % encoded), just encode them all\n if (/[^0-9A-Za-z;,/?:@&=+$\\-_.!~*'()#%]/.test(path)) {\n path = encodeURI(decodeURI(path))\n }\n\n var queryIx = path.indexOf('?'),\n query = null\n\n if (queryIx >= 0) {\n query = querystring.parse(path.slice(queryIx + 1))\n path = path.slice(0, queryIx)\n }\n\n this.parsedPath = {\n path: path,\n query: query,\n }\n}\n\nRequestSigner.prototype.formatPath = function() {\n var path = this.parsedPath.path,\n query = this.parsedPath.query\n\n if (!query) return path\n\n // Services don't support empty query string keys\n if (query[''] != null) delete query['']\n\n return path + '?' + encodeRfc3986(querystring.stringify(query))\n}\n\naws4.RequestSigner = RequestSigner\n\naws4.sign = function(request, credentials) {\n return new RequestSigner(request, credentials).sign()\n}\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.import_ = void 0;\nexports.default = import_;\nfunction import_(id) {\n id = fixWindowsBug(id);\n return import(/*webpackIgnore: true*/ id);\n}\nexports.import_ = import_;\n// Avoid:\n// ```\n// Error [ERR_UNSUPPORTED_ESM_URL_SCHEME]: Only file and data URLs are supported by the default ESM loader. On Windows, absolute paths must be valid file:// URLs. Received protocol 'd:'\n// ```\n// https://stackoverflow.com/questions/69665780/error-err-unsupported-esm-url-scheme-only-file-and-data-urls-are-supported-by/70057245#70057245\nconst prefix = 'file://';\nfunction fixWindowsBug(id) {\n if (process.platform === 'win32' && isAbsolute(id) && !id.startsWith(prefix)) {\n return prefix + id;\n }\n else {\n return id;\n }\n}\n// Copied from https://github.com/unjs/pathe/blob/ae583c899ed9ebf44c94ab451da5fd7c3094dea9/src/path.ts#L14\n// Alternative: https://github.com/nodejs/node/blob/49a77a5a996a49e8cb728eed42e55a7c1a9eef6e/lib/path.js#L402\n// - Extracted version: https://github.com/brillout/import/commit/40bd11ce1e11e3b455c87a8cbca653fd10986021\nfunction isAbsolute(path) {\n return /^[/\\\\](?![/\\\\])|^[/\\\\]{2}(?!\\.)|^[A-Za-z]:[/\\\\]/.test(path);\n}\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.resolvePath = void 0;\nconst resolvePath = (options) => {\n //remove leading and trailing slash from options.directory\n const directory = options.directory ? options.directory.replace(/^\\/|\\/$/g, \"\") : \"\";\n return options.directory ? `${directory}/${options.filename}` : `${options.filename}`;\n};\nexports.resolvePath = resolvePath;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.PROVIDERS = exports.CLOUD_PROVIDERS = void 0;\nconst utils_1 = require(\"./utils\");\nvar CLOUD_PROVIDERS;\n(function (CLOUD_PROVIDERS) {\n CLOUD_PROVIDERS[\"GCP\"] = \"GCP\";\n CLOUD_PROVIDERS[\"WASABI\"] = \"WASABI\";\n CLOUD_PROVIDERS[\"AWS\"] = \"AWS\";\n CLOUD_PROVIDERS[\"CONTABO\"] = \"CONTABO\";\n CLOUD_PROVIDERS[\"DO\"] = \"DO\";\n CLOUD_PROVIDERS[\"MINIO\"] = \"MINIO\";\n CLOUD_PROVIDERS[\"R2\"] = \"R2\";\n})(CLOUD_PROVIDERS = exports.CLOUD_PROVIDERS || (exports.CLOUD_PROVIDERS = {}));\n/**\n * Please submit a new issue if you need another s3 compatible provider.\n */\nexports.PROVIDERS = {\n \"GCP\": {\n host: ({ bucket }) => `${bucket}.storage.googleapis.com`,\n url: ({ bucket, filename, directory }) => `https://${bucket}.storage.googleapis.com/${(0, utils_1.resolvePath)({ filename, directory })}`,\n res: ({ bucket, filename, directory }) => `https://storage.googleapis.com/${bucket}/${(0, utils_1.resolvePath)({ filename, directory })}`\n },\n \"AWS\": {\n host: ({ bucket }) => `${bucket}.s3.amazonaws.com`,\n url: ({ bucket, filename, directory }) => `https://${bucket}.s3.amazonaws.com/${(0, utils_1.resolvePath)({ filename, directory })}`,\n res: ({ bucket, filename, directory, region }) => `https://${bucket}.s3.${region}.amazonaws.com/${(0, utils_1.resolvePath)({ filename, directory })}`\n },\n \"WASABI\": {\n host: ({ region, bucket }) => `${bucket}.s3.${region}.wasabisys.com`,\n url: ({ region, filename, directory, bucket }) => `https://${bucket}.s3.${region}.wasabisys.com/${(0, utils_1.resolvePath)({ filename, directory })}`,\n res: ({ bucket, filename, directory, region }) => `https://s3.${region}.wasabisys.com/${bucket}/${(0, utils_1.resolvePath)({ filename, directory })}`\n },\n \"DO\": {\n host: ({ region, bucket }) => `${bucket}.${region}.digitaloceanspaces.com`,\n url: ({ bucket, filename, directory, region }) => `https://${bucket}.${region}.digitaloceanspaces.com/${(0, utils_1.resolvePath)({ filename, directory: `${directory}` })}`,\n res: ({ bucket, filename, directory, region }) => `https://${bucket}.${region}.digitaloceanspaces.com/${(0, utils_1.resolvePath)({ filename, directory: `${directory}` })}`\n },\n \"CONTABO\": {\n host: ({ region }) => `${region}.contabostorage.com`,\n url: ({ bucket, filename, directory, region }) => `https://${region}.contabostorage.com/${(0, utils_1.resolvePath)({ filename, directory: `${bucket}${directory}` })}`,\n res: ({ bucket, filename, directory, region }) => `https://${region}.contabostorage.com/${(0, utils_1.resolvePath)({ filename, directory: `${bucket}${directory}` })}`\n },\n \"MINIO\": {\n host: ({ host }) => `${host}`,\n url: ({ bucket, filename, directory, host }) => `${host}/${bucket}/${(0, utils_1.resolvePath)({ filename, directory: `${directory}` })}`,\n res: ({ bucket, filename, directory, host }) => `${host}/${bucket}/${(0, utils_1.resolvePath)({ filename, directory: `${directory}` })}`\n },\n \"SUPABASE\": {\n host: ({ host }) => `${host}`,\n url: ({ bucket, filename, directory, host }) => `${host}/storage/v1/s3/${bucket}/${(0, utils_1.resolvePath)({ filename, directory: `${directory}` })}`,\n res: ({ bucket, filename, directory, host }) => `${host}/storage/v1/s3/${bucket}/${(0, utils_1.resolvePath)({ filename, directory: `${directory}` })}`\n },\n \"R2\": {\n host: ({ host, bucket }) => `https://${bucket}.${host.replace('https://', \"\")}`,\n url: ({ bucket, filename, directory, host }) => `https://${bucket}.${host.replace('https://', \"\")}/${(0, utils_1.resolvePath)({ filename, directory: `${directory}` })}`,\n res: ({ bucket, filename, directory, host }) => `https://${bucket}.${host.replace('https://', \"\")}/${(0, utils_1.resolvePath)({ filename, directory: `${directory}` })}`\n }\n};\n", "\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getObjectEtag = exports.objectExists = exports.getObjectMetadata = exports.deleteObject = exports.getPresignedUrl = exports.getObject = exports.getObjectDataUrl = exports.getObjectBuffer = exports.getTextFile = exports.getObjectBinary = exports.upload = exports.uploadBuffer = exports.s3Request = exports.getS3RequestObject = exports.getProviderConfig = exports.getCloudUrl = exports.FileNotFoundError = void 0;\nconst axios_1 = __importDefault(require(\"axios\"));\nconst aws4_1 = __importDefault(require(\"aws4\"));\nconst db = require('debug')('pico-s3');\nconst err = require('debug')('pico-s3:error');\nconst crypto_1 = __importDefault(require(\"crypto\"));\nconst import_1 = require(\"@brillout/import\");\nconst providers_1 = require(\"./providers\");\nconst utils_1 = require(\"./utils\");\nlet _ft = null;\nconst ft = () => __awaiter(void 0, void 0, void 0, function* () {\n if (!_ft) {\n const x = yield (0, import_1.import_)('file-type');\n _ft = x;\n }\n return _ft;\n});\nclass FileNotFoundError extends Error {\n constructor(message) {\n super(message);\n this.name = \"FileNotFoundError\";\n }\n}\nexports.FileNotFoundError = FileNotFoundError;\nconst getCloudUrl = (options) => providers_1.PROVIDERS[options.provider].res(options);\nexports.getCloudUrl = getCloudUrl;\nconst getProviderConfig = (provider) => providers_1.PROVIDERS[provider];\nexports.getProviderConfig = getProviderConfig;\nconst getS3RequestObject = (options, extendedRequestOptions) => {\n const { provider, accessKeyId, secretAccessKey } = options;\n const region = provider === providers_1.CLOUD_PROVIDERS.GCP ? 'region' : options.region;\n const _ = providers_1.PROVIDERS[provider];\n const _host = _.host(options);\n const host = _host.replace(\"https://\", \"\").replace(\"http://\", \"\");\n if (!_)\n throw new Error(`Invalid provider ${provider}. Valid providers: ${Object.keys(providers_1.PROVIDERS)}`);\n const headers = Object.assign({}, (extendedRequestOptions === null || extendedRequestOptions === void 0 ? void 0 : extendedRequestOptions.headers) || {});\n if (_host.includes(\"https://\") && !headers['x-amz-content-sha256']) {\n headers['x-amz-content-sha256'] = 'UNSIGNED-PAYLOAD';\n }\n extendedRequestOptions === null || extendedRequestOptions === void 0 ? true : delete extendedRequestOptions.headers;\n const toSign = Object.assign({ host, url: _.url(options), service: 's3', region,\n headers }, extendedRequestOptions);\n if (provider === providers_1.CLOUD_PROVIDERS.MINIO)\n toSign['path'] = _.url(options).replace(_host, \"\");\n const signedReq = aws4_1.default.sign(toSign, {\n accessKeyId,\n secretAccessKey\n });\n return signedReq;\n};\nexports.getS3RequestObject = getS3RequestObject;\nconst s3Request = (options, extendedRequestOptions) => __awaiter(void 0, void 0, void 0, function* () {\n const signedReq = (0, exports.getS3RequestObject)(options, extendedRequestOptions);\n //@ts-ignore\n return (0, axios_1.default)(Object.assign({}, signedReq));\n});\nexports.s3Request = s3Request;\nconst uploadBuffer = (options) => __awaiter(void 0, void 0, void 0, function* () {\n const { provider, file } = options;\n const _ = providers_1.PROVIDERS[provider];\n if (!file || file === null)\n throw new Error(\"File isnull or undefined\");\n const path = `/${(0, utils_1.resolvePath)(options)}`;\n const _ftResult = yield (yield ft()).fileTypeFromBuffer(file);\n const { mime } = _ftResult || {};\n const filebuf = file;\n /**\n * Infer data type from filename\n */\n const headers = Object.assign(Object.assign({ 'Content-Type': mime || \"application/octet-stream\", 'Content-length': filebuf.length, 'x-amz-content-sha256': crypto_1.default.createHash('sha256').update(filebuf).digest('hex') || 'UNSIGNED-PAYLOAD' }, (options.headers || {})), (options.public ? {\n 'x-amz-acl': 'public-read'\n } : {}));\n try {\n const START = Date.now();\n db(`Uploading ${path} to ${provider}`);\n db(`Using Headers: ${JSON.stringify(headers)}`);\n const res = yield (0, exports.s3Request)(options, {\n method: 'PUT',\n path,\n data: filebuf,\n headers\n });\n const END = Date.now() - START;\n db(`${path} uploaded to ${provider} in ${END}ms with code ${res.status}`);\n return _.res(options) || \"\";\n }\n catch (error) {\n err(\"UPLOAD ERROR\", path, provider, error.message);\n throw error;\n }\n});\nexports.uploadBuffer = uploadBuffer;\nconst upload = (options) => __awaiter(void 0, void 0, void 0, function* () {\n return (0, exports.uploadBuffer)(Object.assign(Object.assign({}, options), { file: Buffer.isBuffer(options.file) ? options.file : Buffer.from(options.file.split(',')[1], 'base64') }));\n});\nexports.upload = upload;\nconst getObjectBinary = (options) => __awaiter(void 0, void 0, void 0, function* () {\n const res = yield (0, exports.getObject)(options, {\n responseType: 'arraybuffer'\n });\n return res.data;\n});\nexports.getObjectBinary = getObjectBinary;\nconst getTextFile = (options) => __awaiter(void 0, void 0, void 0, function* () {\n const buff = yield (0, exports.getObjectBuffer)(options);\n return buff.toString();\n});\nexports.getTextFile = getTextFile;\nconst getObjectBuffer = (options) => __awaiter(void 0, void 0, void 0, function* () {\n const bin = yield (0, exports.getObjectBinary)(options);\n return Buffer.from(bin, 'binary');\n});\nexports.getObjectBuffer = getObjectBuffer;\nconst getObjectDataUrl = (options) => __awaiter(void 0, void 0, void 0, function* () {\n const res = yield (0, exports.getObject)(options, {\n responseType: 'arraybuffer'\n });\n const buff = Buffer.from(res.data, 'binary');\n const dUrl = `data:${res.headers['content-type']};base64,${buff.toString('base64')}`;\n return dUrl;\n});\nexports.getObjectDataUrl = getObjectDataUrl;\nconst getObject = (options, axiosOverride) => __awaiter(void 0, void 0, void 0, function* () {\n const { provider } = options;\n const path = `/${(0, utils_1.resolvePath)(options)}`;\n try {\n const START = Date.now();\n db(`Downloading ${path} from ${provider}`);\n const res = yield (0, exports.s3Request)(options, Object.assign({ method: 'GET', path }, (axiosOverride || {})));\n const END = Date.now() - START;\n db(`${path} downloaded from ${provider} in ${END}ms`);\n return res;\n }\n catch (error) {\n err(\"GET ERROR\", path, provider, error.message);\n if ((error === null || error === void 0 ? void 0 : error.response.status) === 404)\n throw new FileNotFoundError(`File ${path} not found in ${provider}`);\n else\n throw error;\n }\n});\nexports.getObject = getObject;\nconst getPresignedUrl = (options, axiosOverride) => __awaiter(void 0, void 0, void 0, function* () {\n const { provider, accessKeyId, secretAccessKey } = options;\n const path = `/${(0, utils_1.resolvePath)(options)}`;\n const region = provider === providers_1.CLOUD_PROVIDERS.GCP ? 'region' : options.region;\n const _ = providers_1.PROVIDERS[provider];\n const _host = _.host(options);\n const host = _host.replace(\"https://\", \"\").replace(\"http://\", \"\");\n if (!_)\n throw new Error(`Invalid provider ${provider}. Valid providers: ${Object.keys(providers_1.PROVIDERS)}`);\n const res = aws4_1.default.sign({\n host,\n path,\n service: 's3',\n region,\n signQuery: true,\n }, {\n accessKeyId,\n secretAccessKey\n });\n const signedUrl = _host + res.path;\n return signedUrl;\n});\nexports.getPresignedUrl = getPresignedUrl;\nconst deleteObject = (options, axiosOverride) => __awaiter(void 0, void 0, void 0, function* () {\n const { provider } = options;\n const path = `/${(0, utils_1.resolvePath)(options)}`;\n try {\n const START = Date.now();\n db(`Deleting ${path} from ${provider}`);\n const res = yield (0, exports.s3Request)(options, Object.assign({ method: 'DELETE', path }, (axiosOverride || {})));\n const END = Date.now() - START;\n db(`${path} deleted from ${provider} in ${END}ms`);\n return res.status === 204;\n }\n catch (error) {\n err(\"GET ERROR\", path, provider, error.message);\n if ((error === null || error === void 0 ? void 0 : error.response.status) === 404)\n throw new FileNotFoundError(`File ${path} not found in ${provider}`);\n else\n throw error;\n }\n});\nexports.deleteObject = deleteObject;\n//@ts-ignore\nconst getObjectMetadata = (options, axiosOverride) => __awaiter(void 0, void 0, void 0, function* () {\n const { provider } = options;\n const path = `/${(0, utils_1.resolvePath)(options)}`;\n try {\n const START = Date.now();\n db(`Getting Metadata for ${path} from ${provider}`);\n const res = yield (0, exports.s3Request)(options, Object.assign({ method: 'HEAD', path }, (axiosOverride || {})));\n const END = Date.now() - START;\n db(`${path} metadata downloaded from ${provider} in ${END}ms`);\n return res.headers;\n }\n catch (error) {\n err(\"GET ERROR\", path, provider, error.message);\n if ((error === null || error === void 0 ? void 0 : error.response.status) === 404)\n throw new FileNotFoundError(`File ${path} not found in ${provider}`);\n else\n throw error;\n }\n});\nexports.getObjectMetadata = getObjectMetadata;\nconst objectExists = (options, axiosOverride) => __awaiter(void 0, void 0, void 0, function* () { return (0, exports.getObjectMetadata)(options, axiosOverride).then(res => !!res.etag); });\nexports.objectExists = objectExists;\nconst getObjectEtag = (options, axiosOverride) => __awaiter(void 0, void 0, void 0, function* () { return (0, exports.getObjectMetadata)(options, axiosOverride).then(res => res.etag); });\nexports.getObjectEtag = getObjectEtag;\n", "\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.PicoS3 = void 0;\nconst api_1 = require(\"./api\");\n/**\n * A simple class wrapping of the pico s3 functions.\n */\nclass PicoS3 {\n /**\n * @param {S3RequestOptions} options The authentication details of the S3 bucket.\n *\n * You can simple set this to `true` to get the library to infer the authentication deails of the bucket from the environment variables.\n *\n * Here are the environment variables that need to be set:\n * ```\n * provider = process.env.PICO_S3_CLOUD_PROVIDER\n * region = process.env.PICO_S3_REGION\n * bucket = process.env.PICO_S3_BUCKET\n * accessKeyId = process.env.PICO_S3_ACCESS_KEY_ID\n * secretAccessKey = process.env.PICO_S3_SECRET_ACCESS_KEY\n * ```\n */\n constructor(options) {\n if (typeof options === \"boolean\" && options === true) {\n this.options = {\n provider: process.env.PICO_S3_CLOUD_PROVIDER,\n region: process.env.PICO_S3_REGION,\n bucket: process.env.PICO_S3_BUCKET,\n host: process.env.PICO_S3_HOST,\n accessKeyId: process.env.PICO_S3_ACCESS_KEY_ID,\n secretAccessKey: process.env.PICO_S3_SECRET_ACCESS_KEY,\n };\n }\n else\n this.options = options;\n }\n upload(options) {\n return __awaiter(this, void 0, void 0, function* () {\n if (Buffer.isBuffer(options.file))\n return yield (0, api_1.uploadBuffer)(Object.assign(Object.assign({}, this.options), options));\n else\n return yield (0, api_1.upload)(Object.assign(Object.assign({}, this.options), options));\n });\n }\n getObject(options) {\n return __awaiter(this, void 0, void 0, function* () {\n return yield (0, api_1.getObject)(Object.assign(Object.assign({}, this.options), options));\n });\n }\n getProviderConfig() {\n return (0, api_1.getProviderConfig)(this.options.provider);\n }\n getProvider() {\n return this.options.provider;\n }\n getObjectBuffer(options) {\n return __awaiter(this, void 0, void 0, function* () {\n return yield (0, api_1.getObjectBuffer)(Object.assign(Object.assign({}, this.options), options));\n });\n }\n getObjectDataUrl(options) {\n return __awaiter(this, void 0, void 0, function* () {\n return yield (0, api_1.getObjectDataUrl)(Object.assign(Object.assign({}, this.options), options));\n });\n }\n getObjectBinary(options) {\n return __awaiter(this, void 0, void 0, function* () {\n return yield (0, api_1.getObjectBinary)(Object.assign(Object.assign({}, this.options), options));\n });\n }\n deleteObject(options) {\n return __awaiter(this, void 0, void 0, function* () {\n return yield (0, api_1.deleteObject)(Object.assign(Object.assign({}, this.options), options));\n });\n }\n objectExists(options) {\n return __awaiter(this, void 0, void 0, function* () {\n return yield (0, api_1.objectExists)(Object.assign(Object.assign({}, this.options), options));\n });\n }\n getObjectMetadata(options) {\n return __awaiter(this, void 0, void 0, function* () {\n return yield (0, api_1.getObjectMetadata)(Object.assign(Object.assign({}, this.options), options));\n });\n }\n getObjectEtag(options) {\n return __awaiter(this, void 0, void 0, function* () {\n return yield (0, api_1.getObjectEtag)(Object.assign(Object.assign({}, this.options), options));\n });\n }\n getTextFile(options) {\n return __awaiter(this, void 0, void 0, function* () {\n return yield (0, api_1.getTextFile)(Object.assign(Object.assign({}, this.options), options));\n });\n }\n getPresignedUrl(options) {\n return __awaiter(this, void 0, void 0, function* () {\n return yield (0, api_1.getPresignedUrl)(Object.assign(Object.assign({}, this.options), options));\n });\n }\n}\nexports.PicoS3 = PicoS3;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n", "\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./client\"), exports);\n__exportStar(require(\"./api\"), exports);\n__exportStar(require(\"./types\"), exports);\n__exportStar(require(\"./providers\"), exports);\n__exportStar(require(\"./utils\"), exports);\n", "'use strict';\n\nimport PicoS3 from 'pico-s3';\n\n// const _checkArgs = (...args) => {\n// \tfor (const arg of args) {\n// \t\tif (typeof arg !== 'object' || arg === null) {\n// \t\t\tthrow new Error('lowstorage: missing args or args not an object');\n// \t\t}\n// \t}\n// };\n\nconst _matchesQuery = (document, query) => {\n\treturn Object.keys(query).every((key) => document[key] === query[key]);\n};\n\nconst _generateUUID = () => {\n\tif (typeof crypto !== 'undefined' && crypto.randomUUID) {\n\t\treturn crypto.randomUUID();\n\t} else {\n\t\t// Fallback for environments without crypto.randomUUID\n\t\treturn 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n\t\t\tvar r = (Math.random() * 16) | 0,\n\t\t\t\tv = c === 'x' ? r : (r & 0x3) | 0x8;\n\t\t\treturn v.toString(16);\n\t\t});\n\t}\n};\n\nclass Collection {\n\tconstructor(colName, s3) {\n\t\tthis._colName = colName;\n\t\tthis._s3 = s3;\n\t}\n\n\tasync _loadData() {\n\t\ttry {\n\t\t\tconst data = await this._s3.getTextFile({\n\t\t\t\tpath: `${this._colName}.json`,\n\t\t\t});\n\t\t\treturn JSON.parse(data);\n\t\t} catch (error) {\n\t\t\tif (error instanceof FileNotFoundError) {\n\t\t\t\treturn [];\n\t\t\t} else {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\t}\n\n\tasync _saveData(data) {\n\t\tconst key = `${this._colName}.json`;\n\t\treturn this._s3.upload({\n\t\t\tpath: key,\n\t\t\tfile: JSON.stringify(data),\n\t\t});\n\t}\n\n\tasync insert(doc) {\n\t\tif (!Array.isArray(doc)) {\n\t\t\tdoc = [doc];\n\t\t}\n\t\tconst data = await this._loadData();\n\t\tfor (let item of doc) {\n\t\t\tif (typeof item !== 'object' || item === null) {\n\t\t\t\tthrow new Error('Invalid input: input must be an object or an array of objects');\n\t\t\t}\n\t\t\titem._id = item._id || _generateUUID();\n\t\t\tdata.push(item);\n\t\t}\n\t\tawait this._saveData(data);\n\t\treturn doc.length === 1 ? doc[0] : doc;\n\t}\n\n\tasync find(query = {}, options = {}) {\n\t\tconst data = await this._loadData();\n\t\tconst start = parseInt(options.skip, 10) || 0;\n\t\tconst end = parseInt(options.limit, 10) ? start + parseInt(options.limit, 10) : undefined;\n\t\tconst filteredData = data.filter((doc) => _matchesQuery(doc, query)).slice(start, end);\n\t\treturn filteredData;\n\t}\n\n\tasync findOne(query = {}) {\n\t\treturn (await this.find(query))[0] || null;\n\t}\n\n\tasync update(query = {}, update = {}) {\n\t\tconst data = await this._loadData();\n\t\tlet updatedCount = 0;\n\n\t\tfor (let i = 0; i < data.length; i++) {\n\t\t\tif (_matchesQuery(data[i], query)) {\n\t\t\t\tObject.assign(data[i], update);\n\t\t\t\tupdatedCount++;\n\t\t\t}\n\t\t}\n\n\t\tif (updatedCount > 0) {\n\t\t\tawait this._saveData(data);\n\t\t}\n\n\t\treturn updatedCount;\n\t}\n\n\tasync updateOne(query = {}, update = {}) {\n\t\tconst data = await this._loadData();\n\t\tconst docIndex = data.findIndex((doc) => _matchesQuery(doc, query));\n\n\t\tif (docIndex !== -1) {\n\t\t\tObject.assign(data[docIndex], update);\n\t\t\tawait this._saveData(data);\n\t\t\treturn 1;\n\t\t}\n\t\treturn 0;\n\t}\n\n\tasync delete(query = {}) {\n\t\tconst data = await this._loadData();\n\t\tconst initialLength = data.length;\n\t\tconst newData = data.filter((doc) => !_matchesQuery(doc, query));\n\t\tawait this._saveData(newData);\n\t\treturn initialLength - newData.length;\n\t}\n\n\tasync count(query = {}) {\n\t\treturn (await this.find(query)).length;\n\t}\n\n\tasync remove() {\n\t\tconst data = await this._loadData();\n\t\tconst deletedCount = data.length;\n\t\tawait this._saveData([]);\n\t\treturn deletedCount;\n\t}\n}\n\nclass lowstorage {\n\tconstructor(options) {\n\t\t// _checkArgs(options);\n\t\tthis._s3 = new PicoS3(options);\n\t}\n\n\tcollection(colName) {\n\t\treturn new Collection(colName, this._s3);\n\t}\n\n\tasync listCollections() {\n\t\tconst listed = await this._s3.listObjects();\n\t\tconst collections = listed.filter((entry) => entry.key.endsWith('.json'));\n\t\treturn collections.map((entry) => entry.key.split('/')[0]);\n\t}\n}\n\n// // Conditionally export lowstorage based on the runtime environment\n// if (typeof module !== 'undefined' && module.exports) {\n// \t// Node.js (CommonJS)\n// \tmodule.exports = lowstorage;\n// } else if (typeof define === 'function' && define.amd) {\n// \t// AMD\n// \tdefine(function () {\n// \t\treturn lowstorage;\n// \t});\n// } else if (typeof exports !== 'undefined') {\n// \t// ES module\n// \texports.default = lowstorage;\n// }\n\nexport default lowstorage;\n"], - "mappings": "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", - "names": ["require_delayed_stream", "__commonJSMin", "exports", "module", "Stream", "util", "DelayedStream", "source", "options", "delayedStream", "option", "realEmit", "args", "r", "message", "require_combined_stream", "__commonJSMin", "exports", "module", "util", "Stream", "DelayedStream", "CombinedStream", "options", "combinedStream", "option", "stream", "isStreamLike", "newStream", "dest", "getStream", "value", "self", "err", "data", "message", "require_db", "__commonJSMin", "exports", "module", "require_mime_db", "__commonJSMin", "exports", "module", "require_mime_types", "__commonJSMin", "exports", "db", "extname", "EXTRACT_TYPE_REGEXP", "TEXT_TYPE_REGEXP", "charset", "contentType", "extension", "lookup", "populateMaps", "type", "match", "mime", "str", "exts", "path", "extensions", "types", "preference", "i", "from", "to", "require_defer", "__commonJSMin", "exports", "module", "defer", "fn", "nextTick", "require_async", "__commonJSMin", "exports", "module", "defer", "async", "callback", "isAsync", "err", "result", "require_abort", "__commonJSMin", "exports", "module", "abort", "state", "clean", "key", "require_iterate", "__commonJSMin", "exports", "module", "async", "abort", "iterate", "list", "iterator", "state", "callback", "key", "runJob", "error", "output", "item", "aborter", "require_state", "__commonJSMin", "exports", "module", "state", "list", "sortMethod", "isNamedList", "initState", "a", "b", "require_terminator", "__commonJSMin", "exports", "module", "abort", "async", "terminator", "callback", "require_parallel", "__commonJSMin", "exports", "module", "iterate", "initState", "terminator", "parallel", "list", "iterator", "callback", "state", "error", "result", "require_serialOrdered", "__commonJSMin", "exports", "module", "iterate", "initState", "terminator", "serialOrdered", "ascending", "descending", "list", "iterator", "sortMethod", "callback", "state", "iteratorHandler", "error", "result", "a", "b", "require_serial", "__commonJSMin", "exports", "module", "serialOrdered", "serial", "list", "iterator", "callback", "require_asynckit", "__commonJSMin", "exports", "module", "require_populate", "__commonJSMin", "exports", "module", "dst", "src", "prop", "require_form_data", "__commonJSMin", "exports", "module", "CombinedStream", "util", "path", "http", "https", "parseUrl", "fs", "Stream", "mime", "asynckit", "populate", "FormData", "options", "option", "field", "value", "append", "header", "footer", "valueLength", "callback", "err", "stat", "fileSize", "response", "contentDisposition", "contentType", "contents", "headers", "prop", "filename", "next", "lastPart", "userHeaders", "formHeaders", "boundary", "dataBuffer", "len", "i", "knownLength", "hasKnownLength", "cb", "values", "length", "params", "request", "defaults", "onResponse", "error", "responce", "require_proxy_from_env", "__commonJSMin", "exports", "parseUrl", "DEFAULT_PORTS", "stringEndsWith", "s", "getProxyForUrl", "url", "parsedUrl", "proto", "hostname", "port", "shouldProxy", "proxy", "getEnv", "NO_PROXY", "parsedProxy", "parsedProxyHostname", "parsedProxyPort", "key", "require_ms", "__commonJSMin", "exports", "module", "s", "m", "h", "d", "w", "y", "val", "options", "type", "parse", "fmtLong", "fmtShort", "str", "match", "n", "ms", "msAbs", "plural", "name", "isPlural", "require_common", "__commonJSMin", "exports", "module", "setup", "env", "createDebug", "coerce", "disable", "enable", "enabled", "destroy", "key", "selectColor", "namespace", "hash", "i", "prevTime", "enableOverride", "namespacesCache", "enabledCache", "debug", "args", "self", "curr", "ms", "index", "match", "format", "formatter", "val", "extend", "v", "delimiter", "newDebug", "namespaces", "split", "len", "toNamespace", "name", "regexp", "require_browser", "__commonJSMin", "exports", "module", "formatArgs", "save", "load", "useColors", "localstorage", "warned", "args", "c", "index", "lastC", "match", "namespaces", "r", "formatters", "v", "error", "require_has_flag", "__commonJSMin", "exports", "module", "flag", "argv", "prefix", "position", "terminatorPosition", "require_supports_color", "__commonJSMin", "exports", "module", "os", "tty", "hasFlag", "env", "forceColor", "translateLevel", "level", "supportsColor", "haveStream", "streamIsTTY", "min", "osRelease", "sign", "version", "getSupportLevel", "stream", "require_node", "__commonJSMin", "exports", "module", "tty", "util", "init", "log", "formatArgs", "save", "load", "useColors", "supportsColor", "key", "obj", "prop", "_", "k", "val", "args", "name", "c", "colorCode", "prefix", "getDate", "namespaces", "debug", "keys", "formatters", "v", "str", "require_src", "__commonJSMin", "exports", "module", "require_debug", "__commonJSMin", "exports", "module", "debug", "require_follow_redirects", "__commonJSMin", "exports", "module", "url", "URL", "http", "https", "Writable", "assert", "debug", "useNativeURL", "error", "preservedUrlFields", "events", "eventHandlers", "event", "arg1", "arg2", "arg3", "InvalidUrlError", "createErrorType", "RedirectionError", "TooManyRedirectsError", "MaxBodyLengthExceededError", "WriteAfterEndError", "destroy", "noop", "RedirectableRequest", "options", "responseCallback", "self", "response", "cause", "destroyRequest", "data", "encoding", "callback", "isString", "isBuffer", "isFunction", "currentRequest", "name", "value", "msecs", "destroyOnTimeout", "socket", "startTimer", "clearTimer", "method", "b", "property", "searchPos", "protocol", "nativeProtocol", "scheme", "request", "i", "buffers", "writeNext", "buffer", "statusCode", "location", "requestHeaders", "beforeRedirect", "removeMatchingHeaders", "currentHostHeader", "currentUrlParts", "parseUrl", "currentHost", "currentUrl", "redirectUrl", "resolveUrl", "spreadUrlObject", "isSubdomain", "responseDetails", "requestDetails", "wrap", "protocols", "nativeProtocols", "wrappedProtocol", "input", "isURL", "validateUrl", "get", "wrappedRequest", "parsed", "relative", "base", "urlObject", "target", "spread", "key", "regex", "headers", "lastValue", "header", "code", "message", "baseClass", "CustomError", "properties", "subdomain", "domain", "dot", "bind", "fn", "thisArg", "toString", "getPrototypeOf", "kindOf", "cache", "thing", "str", "kindOfTest", "type", "typeOfTest", "isArray", "isUndefined", "isBuffer", "val", "isFunction", "isArrayBuffer", "isArrayBufferView", "result", "isString", "isNumber", "isObject", "isBoolean", "isPlainObject", "prototype", "isDate", "isFile", "isBlob", "isFileList", "isStream", "isFormData", "kind", "isURLSearchParams", "isReadableStream", "isRequest", "isResponse", "isHeaders", "trim", "forEach", "obj", "allOwnKeys", "i", "l", "keys", "len", "key", "findKey", "_key", "_global", "isContextDefined", "context", "merge", "caseless", "assignValue", "targetKey", "extend", "a", "b", "stripBOM", "content", "inherits", "constructor", "superConstructor", "props", "descriptors", "toFlatObject", "sourceObj", "destObj", "filter", "propFilter", "prop", "merged", "endsWith", "searchString", "position", "lastIndex", "toArray", "arr", "isTypedArray", "TypedArray", "forEachEntry", "iterator", "pair", "matchAll", "regExp", "matches", "isHTMLForm", "toCamelCase", "m", "p1", "p2", "hasOwnProperty", "isRegExp", "reduceDescriptors", "reducer", "reducedDescriptors", "descriptor", "name", "ret", "freezeMethods", "value", "toObjectSet", "arrayOrString", "delimiter", "define", "noop", "toFiniteNumber", "defaultValue", "ALPHA", "DIGIT", "ALPHABET", "generateString", "size", "alphabet", "length", "isSpecCompliantForm", "toJSONObject", "stack", "visit", "source", "target", "reducedValue", "isAsyncFn", "isThenable", "utils$1", "AxiosError", "message", "code", "config", "request", "response", "utils", "error", "customProps", "axiosError", "isVisitable", "removeBrackets", "renderKey", "path", "dots", "token", "isFlatArray", "predicates", "toFormData", "formData", "options", "PlatformFormData", "option", "metaTokens", "visitor", "defaultVisitor", "indexes", "useBlob", "convertValue", "el", "index", "exposedHelpers", "build", "encode", "charMap", "match", "AxiosURLSearchParams", "params", "encoder", "_encode", "buildURL", "url", "serializeFn", "serializedParams", "hashmarkIndex", "InterceptorManager", "fulfilled", "rejected", "id", "h", "InterceptorManager$1", "transitionalDefaults", "URLSearchParams", "platform$1", "FormData", "hasBrowserEnv", "hasStandardBrowserEnv", "product", "hasStandardBrowserWebWorkerEnv", "origin", "platform", "toURLEncodedForm", "data", "helpers", "parsePropPath", "arrayToObject", "formDataToJSON", "buildPath", "isNumericKey", "isLast", "stringifySafely", "rawValue", "parser", "e", "defaults", "headers", "contentType", "hasJSONContentType", "isObjectPayload", "_FormData", "transitional", "forcedJSONParsing", "JSONRequested", "strictJSONParsing", "status", "method", "defaults$1", "ignoreDuplicateOf", "parseHeaders", "rawHeaders", "parsed", "line", "$internals", "normalizeHeader", "header", "normalizeValue", "parseTokens", "tokens", "tokensRE", "isValidHeaderName", "matchHeaderValue", "isHeaderNameFilter", "formatHeader", "w", "char", "buildAccessors", "accessorName", "methodName", "arg1", "arg2", "arg3", "AxiosHeaders", "valueOrRewrite", "rewrite", "self", "setHeader", "_value", "_header", "_rewrite", "lHeader", "setHeaders", "matcher", "deleted", "deleteHeader", "format", "normalized", "targets", "asStrings", "first", "computed", "accessors", "defineAccessor", "mapped", "headerValue", "AxiosHeaders$1", "transformData", "fns", "isCancel", "CanceledError", "settle", "resolve", "reject", "validateStatus", "isAbsoluteURL", "combineURLs", "baseURL", "relativeURL", "buildFullPath", "requestedURL", "VERSION", "parseProtocol", "DATA_URL_PATTERN", "fromDataURI", "uri", "asBlob", "_Blob", "protocol", "mime", "isBase64", "body", "buffer", "throttle", "freq", "timestamp", "threshold", "timer", "force", "now", "speedometer", "samplesCount", "min", "bytes", "timestamps", "head", "tail", "firstSampleTS", "chunkLength", "startedAt", "bytesCount", "passed", "kInternals", "AxiosTransformStream", "stream", "internals", "_speedometer", "event", "bytesNotified", "totalBytes", "bytesTransferred", "progressBytes", "rate", "onFinish", "chunk", "encoding", "callback", "maxRate", "readableHighWaterMark", "timeWindow", "divider", "bytesThreshold", "minChunkSize", "pushChunk", "_chunk", "_callback", "transformChunk", "chunkSize", "chunkRemainder", "maxChunkSize", "bytesLeft", "transformNextChunk", "err", "AxiosTransformStream$1", "asyncIterator", "readBlob", "blob", "readBlob$1", "BOUNDARY_ALPHABET", "textEncoder", "TextEncoder", "CRLF", "CRLF_BYTES", "CRLF_BYTES_COUNT", "FormDataPart", "escapeName", "isStringValue", "formDataToStream", "form", "headersHandler", "tag", "boundary", "boundaryBytes", "footerBytes", "contentLength", "parts", "part", "computedHeaders", "Readable", "formDataToStream$1", "ZlibHeaderTransformStream", "ZlibHeaderTransformStream$1", "callbackify", "args", "cb", "callbackify$1", "zlibOptions", "zlib", "brotliOptions", "isBrotliSupported", "httpFollow", "httpsFollow", "followRedirects", "isHttps", "supportedProtocols", "dispatchBeforeRedirect", "responseDetails", "setProxy", "configProxy", "location", "proxy", "proxyUrl", "getProxyForUrl", "base64", "proxyHost", "redirectOptions", "isHttpAdapterSupported", "wrapAsync", "asyncExecutor", "onDone", "isDone", "done", "isRejected", "_resolve", "_reject", "reason", "onDoneHandler", "resolveFamily", "address", "family", "buildAddressEntry", "httpAdapter", "lookup", "responseType", "responseEncoding", "req", "_lookup", "hostname", "opt", "arg0", "addresses", "addr", "emitter", "EventEmitter", "onFinished", "abort", "fullPath", "convertedData", "onDownloadProgress", "onUploadProgress", "maxUploadRate", "maxDownloadRate", "userBoundary", "formHeaders", "knownLength", "util", "progress", "auth", "username", "password", "urlUsername", "urlPassword", "customErr", "transport", "isHttpsRequest", "https", "http", "res", "streams", "responseLength", "transformStream", "responseStream", "lastRequest", "offListeners", "responseBuffer", "totalResponseBytes", "responseData", "socket", "timeout", "timeoutErrorMessage", "ended", "errored", "progressEventReducer", "listener", "isDownloadStream", "loaded", "total", "inRange", "isURLSameOrigin", "msie", "urlParsingNode", "originURL", "resolveURL", "href", "requestURL", "cookies", "expires", "domain", "secure", "cookie", "headersToObject", "mergeConfig", "config1", "config2", "getMergedValue", "mergeDeepProperties", "valueFromConfig2", "defaultToConfig2", "mergeDirectKeys", "mergeMap", "configValue", "resolveConfig", "newConfig", "withXSRFToken", "xsrfHeaderName", "xsrfCookieName", "xsrfValue", "isXHRAdapterSupported", "xhrAdapter", "_config", "requestData", "requestHeaders", "onCanceled", "onloadend", "responseHeaders", "cancel", "composeSignals", "signals", "controller", "aborted", "onabort", "unsubscribe", "signal", "composeSignals$1", "streamChunk", "pos", "end", "readBytes", "iterable", "trackStream", "onProgress", "fetchProgressDecorator", "lengthComputable", "isFetchSupported", "isReadableStreamSupported", "encodeText", "supportsRequestStream", "duplexAccessed", "hasContentType", "DEFAULT_CHUNK_SIZE", "supportsResponseStream", "resolvers", "_", "getBodyLength", "resolveBodyLength", "fetchAdapter", "cancelToken", "withCredentials", "fetchOptions", "composedSignal", "stopTimeout", "finished", "requestContentLength", "_request", "contentTypeHeader", "isStreamResponse", "responseContentLength", "knownAdapters", "renderReason", "isResolvedHandle", "adapter", "adapters", "nameOrAdapter", "rejectedReasons", "reasons", "state", "s", "throwIfCancellationRequested", "dispatchRequest", "validators", "deprecatedWarnings", "validator", "version", "formatMessage", "desc", "opts", "assertOptions", "schema", "allowUnknown", "Axios", "instanceConfig", "configOrUrl", "dummy", "paramsSerializer", "contextHeaders", "requestInterceptorChain", "synchronousRequestInterceptors", "interceptor", "responseInterceptorChain", "promise", "chain", "onFulfilled", "onRejected", "generateHTTPMethod", "isForm", "Axios$1", "CancelToken", "_CancelToken", "executor", "resolvePromise", "onfulfilled", "c", "CancelToken$1", "spread", "isAxiosError", "payload", "HttpStatusCode", "HttpStatusCode$1", "createInstance", "defaultConfig", "instance", "axios", "promises", "require_lru", "__commonJSMin", "exports", "module", "size", "LruCache", "DoublyLinkedList", "key", "node", "val", "DoublyLinkedNode", "lastNode", "require_aws4", "__commonJSMin", "exports", "aws4", "url", "querystring", "crypto", "lru", "credentialsCache", "hmac", "key", "string", "encoding", "hash", "encodeRfc3986", "urlEncodedString", "c", "encodeRfc3986Full", "str", "HEADERS_TO_IGNORE", "RequestSigner", "request", "credentials", "headers", "hostParts", "host", "match", "i", "region", "subdomain", "query", "date", "cacheKey", "kDate", "kRegion", "kService", "kCredentials", "pathStr", "queryStr", "normalizePath", "decodePath", "decodeSlashesInPath", "firstValOnly", "bodyHash", "reducedQuery", "obj", "encodedQueryPieces", "val", "path", "piece", "trimAll", "header", "a", "b", "extraHeadersToInclude", "extraHeadersToIgnore", "env", "queryIx", "require_dist", "__commonJSMin", "exports", "import_", "id", "fixWindowsBug", "prefix", "isAbsolute", "path", "require_utils", "__commonJSMin", "exports", "resolvePath", "options", "directory", "require_providers", "__commonJSMin", "exports", "utils_1", "CLOUD_PROVIDERS", "bucket", "filename", "directory", "region", "host", "require_api", "__commonJSMin", "exports", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "__importDefault", "mod", "axios_1", "aws4_1", "db", "err", "crypto_1", "import_1", "providers_1", "utils_1", "_ft", "ft", "FileNotFoundError", "message", "getCloudUrl", "options", "getProviderConfig", "provider", "getS3RequestObject", "extendedRequestOptions", "accessKeyId", "secretAccessKey", "region", "_", "_host", "host", "headers", "toSign", "s3Request", "signedReq", "uploadBuffer", "file", "path", "_ftResult", "mime", "filebuf", "START", "res", "END", "error", "upload", "getObjectBinary", "getTextFile", "getObjectBuffer", "bin", "getObjectDataUrl", "buff", "getObject", "axiosOverride", "getPresignedUrl", "deleteObject", "getObjectMetadata", "objectExists", "getObjectEtag", "require_client", "__commonJSMin", "exports", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "api_1", "PicoS3", "options", "require_types", "__commonJSMin", "exports", "require_dist", "__commonJSMin", "exports", "__createBinding", "o", "m", "k", "k2", "__exportStar", "p", "import_pico_s3", "_matchesQuery", "document", "query", "key", "_generateUUID", "c", "r", "v", "Collection", "colName", "s3", "data", "error", "doc", "item", "options", "start", "end", "update", "updatedCount", "i", "docIndex", "initialLength", "newData", "deletedCount", "lowstorage", "PicoS3", "entry", "lowstorage_default"] + "sources": ["../node_modules/ultralight-s3/src/index.ts", "../src/lowstorage.js", "../src/helpers.js"], + "sourcesContent": ["'use strict';\n\nimport { parse } from 'node:path';\n\ninterface S3Config {\n accessKeyId: string;\n secretAccessKey: string;\n endpoint: string;\n bucketName: string;\n region?: string;\n maxRequestSizeInBytes?: number;\n requestAbortTimeout?: number;\n logger?: Logger;\n}\n\ndeclare global {\n interface Crypto {\n createHmac: (\n algorithm: string,\n key: string | Buffer,\n ) => {\n update: (data: string | Buffer) => void;\n digest: (encoding?: 'hex' | 'base64' | 'latin1') => string;\n };\n createHash: (algorithm: string) => {\n update: (data: string | Buffer) => void;\n digest: (encoding?: 'hex' | 'base64' | 'latin1') => string;\n };\n }\n}\n\ninterface Logger {\n info: (message: string, ...args: any[]) => void;\n warn: (message: string, ...args: any[]) => void;\n error: (message: string, ...args: any[]) => void;\n}\n\ninterface UploadPart {\n partNumber: number;\n ETag: string;\n}\n\ninterface CompleteMultipartUploadResult {\n Location: string;\n Bucket: string;\n Key: string;\n ETag: string;\n}\n\ntype HttpMethod = 'POST' | 'GET' | 'HEAD' | 'PUT' | 'DELETE';\n\nlet _createHmac = crypto.createHmac || (await import('node:crypto')).createHmac;\nlet _createHash = crypto.createHash || (await import('node:crypto')).createHash;\n\nif (typeof _createHmac === 'undefined' && typeof _createHash === 'undefined') {\n console.error(\n 'ultralight-S3 Module: Crypto functions are not available, please report the issue with necessary description: https://github.com/sentienhq/ultralight-s3/issues',\n );\n}\n\n// Constants\nconst AWS_ALGORITHM = 'AWS4-HMAC-SHA256';\nconst AWS_REQUEST_TYPE = 'aws4_request';\nconst S3_SERVICE = 's3';\nconst LIST_TYPE = '2';\nconst UNSIGNED_PAYLOAD = 'UNSIGNED-PAYLOAD';\nconst DEFAULT_STREAM_CONTENT_TYPE = 'application/octet-stream';\nconst XML_CONTENT_TYPE = 'application/xml';\nconst JSON_CONTENT_TYPE = 'application/json';\n// List of keys that might contain sensitive information\nconst SENSITIVE_KEYS_REDACTED = ['accessKeyId', 'secretAccessKey', 'sessionToken', 'password'];\nconst MIN_MAX_REQUEST_SIZE_IN_BYTES = 5 * 1024 * 1024;\n\n// Headers\nconst HEADER_AMZ_CONTENT_SHA256 = 'x-amz-content-sha256';\nconst HEADER_AMZ_DATE = 'x-amz-date';\nconst HEADER_HOST = 'host';\nconst HEADER_AUTHORIZATION = 'Authorization';\nconst HEADER_CONTENT_TYPE = 'Content-Type';\nconst HEADER_CONTENT_LENGTH = 'Content-Length';\nconst HEADER_ETAG = 'etag';\nconst HEADER_LAST_MODIFIED = 'last-modified';\n\n// Error messages\nconst ERROR_PREFIX = 'ultralight-s3 Module: ';\nconst ERROR_ACCESS_KEY_REQUIRED = `${ERROR_PREFIX}accessKeyId must be a non-empty string`;\nconst ERROR_SECRET_KEY_REQUIRED = `${ERROR_PREFIX}secretAccessKey must be a non-empty string`;\nconst ERROR_ENDPOINT_REQUIRED = `${ERROR_PREFIX}endpoint must be a non-empty string`;\nconst ERROR_BUCKET_NAME_REQUIRED = `${ERROR_PREFIX}bucketName must be a non-empty string`;\nconst ERROR_KEY_REQUIRED = `${ERROR_PREFIX}key must be a non-empty string`;\nconst ERROR_UPLOAD_ID_REQUIRED = `${ERROR_PREFIX}uploadId must be a non-empty string`;\nconst ERROR_PARTS_REQUIRED = `${ERROR_PREFIX}parts must be a non-empty array`;\nconst ERROR_INVALID_PART = `${ERROR_PREFIX}Each part must have a partNumber (number) and ETag (string)`;\nconst ERROR_DATA_BUFFER_REQUIRED = `${ERROR_PREFIX}data must be a Buffer or string`;\nconst ERROR_PATH_REQUIRED = `${ERROR_PREFIX}path must be a string`;\nconst ERROR_PREFIX_TYPE = `${ERROR_PREFIX}prefix must be a string`;\nconst ERROR_MAX_KEYS_TYPE = `${ERROR_PREFIX}maxKeys must be a positive integer`;\n\nconst expectArray: { [key: string]: boolean } = {\n contents: true,\n};\n\nconst encodeAsHex = (c: string): string => `%${c.charCodeAt(0).toString(16).toUpperCase()}`;\n\nconst uriEscape = (uriStr: string): string => {\n return encodeURIComponent(uriStr).replace(/[!'()*]/g, encodeAsHex);\n};\n\nconst uriResourceEscape = (string: string): string => {\n return uriEscape(string).replace(/%2F/g, '/');\n};\n\n/**\n * S3 class for interacting with S3-compatible object storage services.\n * This class provides methods for common S3 operations such as uploading, downloading,\n * and deleting objects, as well as multipart uploads.\n *\n * @class\n * @example\n * const s3 = new S3({\n * accessKeyId: 'your-access-key',\n * secretAccessKey: 'your-secret-key',\n * endpoint: 'https://your-s3-endpoint.com',\n * bucketName: 'your-bucket-name',\n * region: 'us-east-1' // by default is auto\n * });\n *\n * // Upload a file\n * await s3.put('example.txt', 'Hello, World!');\n *\n * // Download a file\n * const content = await s3.get('example.txt');\n *\n * // Delete a file\n * await s3.delete('example.txt');\n */\nclass S3 {\n /**\n * Creates an instance of the S3 class.\n *\n * @constructor\n * @param {Object} config - Configuration options for the S3 instance.\n * @param {string} config.accessKeyId - The access key ID for authentication.\n * @param {string} config.secretAccessKey - The secret access key for authentication.\n * @param {string} config.endpoint - The endpoint URL of the S3-compatible service.\n * @param {string} [config.bucketName=''] - The name of the bucket to operate on.\n * @param {string} [config.region='auto'] - The region of the S3 service.\n * @param {number} [config.maxRequestSizeInBytes=5242880] - The maximum size of a single request in bytes (minimum for AWS S3 is 5MB).\n * @param {number} [config.requestAbortTimeout=undefined] - The timeout in milliseconds after which a request should be aborted (careful on streamed requests).\n * @param {Object} [config.logger=null] - A logger object with methods like info, warn, error.\n * @throws {TypeError} Will throw an error if required parameters are missing or of incorrect type.\n */\n private accessKeyId: string;\n private secretAccessKey: string;\n private endpoint: string;\n private bucketName: string;\n private region: string;\n private maxRequestSizeInBytes: number;\n private requestAbortTimeout?: number;\n private logger?: Logger;\n\n constructor({\n accessKeyId,\n secretAccessKey,\n endpoint,\n bucketName,\n region = 'auto',\n maxRequestSizeInBytes = MIN_MAX_REQUEST_SIZE_IN_BYTES,\n requestAbortTimeout = undefined,\n logger = undefined,\n }: S3Config) {\n this._validateConstructorParams(accessKeyId, secretAccessKey, endpoint, bucketName);\n this.accessKeyId = accessKeyId;\n this.secretAccessKey = secretAccessKey;\n this.endpoint = endpoint;\n this.bucketName = bucketName;\n this.region = region;\n this.maxRequestSizeInBytes = maxRequestSizeInBytes;\n this.requestAbortTimeout = requestAbortTimeout;\n this.logger = logger;\n }\n\n private _validateConstructorParams(\n accessKeyId: string,\n secretAccessKey: string,\n endpoint: string,\n bucketName: string,\n ): void {\n if (typeof accessKeyId !== 'string' || accessKeyId.trim().length === 0)\n throw new TypeError(ERROR_ACCESS_KEY_REQUIRED);\n if (typeof secretAccessKey !== 'string' || secretAccessKey.trim().length === 0)\n throw new TypeError(ERROR_SECRET_KEY_REQUIRED);\n if (typeof endpoint !== 'string' || endpoint.trim().length === 0) throw new TypeError(ERROR_ENDPOINT_REQUIRED);\n if (typeof bucketName !== 'string' || bucketName.trim().length === 0)\n throw new TypeError(ERROR_BUCKET_NAME_REQUIRED);\n }\n\n /**\n * Internal method to log messages with sanitized sensitive information.\n * @param {string} level - The log level (e.g., 'info', 'warn', 'error').\n * @param {string} message - The message to log.\n * @param {Object} [additionalData={}] - Additional data to include in the log.\n * @private\n */\n private _log(\n level: 'info' | 'warn' | 'error',\n message: string,\n additionalData: Record | string = {},\n ): void {\n if (this.logger && typeof this.logger[level] === 'function') {\n // Function to recursively sanitize an object\n const sanitize = (obj: any): any => {\n if (typeof obj !== 'object' || obj === null) {\n return obj;\n }\n return Object.keys(obj).reduce(\n (acc: any, key) => {\n if (SENSITIVE_KEYS_REDACTED.includes(key.toLowerCase())) {\n acc[key] = '[REDACTED]';\n } else if (typeof obj[key] === 'object' && obj[key] !== null) {\n acc[key] = sanitize(obj[key]);\n } else {\n acc[key] = obj[key];\n }\n return acc;\n },\n Array.isArray(obj) ? [] : {},\n );\n };\n\n // Sanitize the additional data\n const sanitizedData = sanitize(additionalData);\n // Prepare the log entry\n const logEntry = {\n timestamp: new Date().toISOString(),\n level,\n message,\n ...sanitizedData,\n // Include some general context, but sanitize sensitive parts\n context: sanitize({\n bucketName: this.bucketName,\n region: this.region,\n endpoint: this.endpoint,\n // Only include the first few characters of the access key, if it exists\n accessKeyId: this.accessKeyId ? `${this.accessKeyId.substring(0, 4)}...` : undefined,\n }),\n };\n\n // Log the sanitized entry\n this.logger[level](logEntry);\n }\n }\n\n getBucketName = () => this.bucketName;\n setBucketName = (bucketName: string) => {\n this.bucketName = bucketName;\n };\n getRegion = () => this.region;\n setRegion = (region: string) => {\n this.region = region;\n };\n getEndpoint = () => this.endpoint;\n setEndpoint = (endpoint: string) => {\n this.endpoint = endpoint;\n };\n getMaxRequestSizeInBytes = () => this.maxRequestSizeInBytes;\n setMaxRequestSizeInBytes = (maxRequestSizeInBytes: number) => {\n this.maxRequestSizeInBytes = maxRequestSizeInBytes;\n };\n\n getProps = () => ({\n accessKeyId: this.accessKeyId,\n secretAccessKey: this.secretAccessKey,\n region: this.region,\n bucket: this.bucketName,\n endpoint: this.endpoint,\n maxRequestSizeInBytes: this.maxRequestSizeInBytes,\n requestAbortTimeout: this.requestAbortTimeout,\n logger: this.logger,\n });\n setProps = (props: S3Config) => {\n this._validateConstructorParams(props.accessKeyId, props.secretAccessKey, props.bucketName, props.endpoint);\n this.accessKeyId = props.accessKeyId;\n this.secretAccessKey = props.secretAccessKey;\n this.region = props.region || 'auto';\n this.bucketName = props.bucketName;\n this.endpoint = props.endpoint;\n this.maxRequestSizeInBytes = props.maxRequestSizeInBytes || MIN_MAX_REQUEST_SIZE_IN_BYTES;\n this.requestAbortTimeout = props.requestAbortTimeout;\n this.logger = props.logger;\n };\n\n /**\n * Get the content length of an object.\n * @param {string} key - The key of the object.\n * @returns {Promise} The content length of the object in bytes.\n * @throws {TypeError} If the key is not a non-empty string.\n */\n async getContentLength(key: string): Promise {\n if (typeof key !== 'string' || key.trim().length === 0) {\n this._log('error', ERROR_KEY_REQUIRED);\n throw new TypeError(ERROR_KEY_REQUIRED);\n }\n const headers = {\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('HEAD', encodedKey, {}, headers, '');\n const res = await this._sendRequest(url, 'HEAD', signedHeaders);\n const contentLength = res.headers.get(HEADER_CONTENT_LENGTH);\n return contentLength ? parseInt(contentLength, 10) : 0;\n }\n\n /**\n * Check if a bucket exists.\n * @returns {Promise} True if the bucket exists, false otherwise.\n */\n async bucketExists(): Promise {\n const headers = {\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n const { url, headers: signedHeaders } = await this._sign('HEAD', '', {}, headers, '');\n const res = await this._sendRequest(url, 'HEAD', signedHeaders);\n if (res.ok && res.status === 200) {\n return true;\n }\n return false;\n }\n\n // TBD\n // async createBucket(bucketName) {\n // const xmlBody = `\n // \n // \n // ${this.region}\n // \n // `;\n // const headers = {\n // [HEADER_CONTENT_TYPE]: XML_CONTENT_TYPE,\n // [HEADER_CONTENT_LENGTH]: Buffer.byteLength(xmlBody).toString(),\n // [HEADER_AMZ_CONTENT_SHA256]: await _hash(xmlBody),\n // };\n // const encodedKey = encodeURI(bucketName);\n // const { url, headers: signedHeaders } = await this._sign('PUT', encodedKey, {}, headers, '');\n // const res = await this._sendRequest(url, 'PUT', signedHeaders);\n // if (res.ok && res.status === 200) {\n // return true;\n // }\n // return false;\n // }\n\n /**\n * Check if a file exists in the bucket.\n * @param {string} key - The key of the object.\n * @returns {Promise} True if the file exists, false otherwise.\n * @throws {TypeError} If the key is not a non-empty string.\n */\n async fileExists(key: string): Promise {\n if (typeof key !== 'string' || key.trim().length === 0) {\n this._log('error', ERROR_KEY_REQUIRED);\n throw new TypeError(ERROR_KEY_REQUIRED);\n }\n const headers = { [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('HEAD', encodedKey, {}, headers, '');\n try {\n const res = await fetch(url, {\n method: 'HEAD',\n headers: signedHeaders,\n });\n if (res.ok && res.status === 200) return true;\n else if (res.status === 404) return false;\n else this._handleErrorResponse(res);\n return false;\n } catch (error: unknown) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n this._log('error', `${ERROR_PREFIX}Failed to check if file exists: ${errorMessage}`);\n throw new Error(`${ERROR_PREFIX}Failed to check if file exists: ${errorMessage}`);\n }\n }\n async _sign(\n method: HttpMethod,\n keyPath: string,\n query: Object,\n headers: Record,\n body: string | Buffer,\n ): Promise<{ url: string; headers: Record }> {\n const datetime = new Date().toISOString().replace(/[:-]|\\.\\d{3}/g, '');\n const url =\n typeof keyPath === 'string' && keyPath.length > 0 ? new URL(keyPath, this.endpoint) : new URL(this.endpoint);\n url.pathname = `/${encodeURI(this.bucketName)}${url.pathname}`;\n headers[HEADER_AMZ_CONTENT_SHA256] = body ? await _hash(body) : UNSIGNED_PAYLOAD;\n headers[HEADER_AMZ_DATE] = datetime;\n headers[HEADER_HOST] = url.host;\n const canonicalHeaders = this._buildCanonicalHeaders(headers);\n const signedHeaders = Object.keys(headers)\n .map(key => key.toLowerCase())\n .sort()\n .join(';');\n\n const canonicalRequest = await this._buildCanonicalRequest(\n method,\n url,\n query,\n canonicalHeaders,\n signedHeaders,\n body,\n );\n const stringToSign = await this._buildStringToSign(datetime, canonicalRequest);\n const signature = await this._calculateSignature(datetime, stringToSign);\n const authorizationHeader = this._buildAuthorizationHeader(datetime, signedHeaders, signature);\n headers[HEADER_AUTHORIZATION] = authorizationHeader;\n return { url: url.toString(), headers };\n }\n\n _buildCanonicalHeaders(headers: Record): string {\n return Object.entries(headers)\n .map(([key, value]) => `${key.toLowerCase()}:${String(value).trim()}`)\n .sort()\n .join('\\n');\n }\n\n async _buildCanonicalRequest(\n method: HttpMethod,\n url: URL,\n query: Object,\n canonicalHeaders: string,\n signedHeaders: string,\n body: string | Buffer,\n ): Promise {\n return [\n method,\n url.pathname,\n this._buildCanonicalQueryString(query),\n `${canonicalHeaders}\\n`,\n signedHeaders,\n body ? await _hash(body) : UNSIGNED_PAYLOAD,\n ].join('\\n');\n }\n\n async _buildStringToSign(datetime: string, canonicalRequest: string): Promise {\n const credentialScope = [datetime.slice(0, 8), this.region, S3_SERVICE, AWS_REQUEST_TYPE].join('/');\n return [AWS_ALGORITHM, datetime, credentialScope, await _hash(canonicalRequest)].join('\\n');\n }\n\n async _calculateSignature(datetime: string, stringToSign: string): Promise {\n const signingKey = await this._getSignatureKey(datetime.slice(0, 8));\n return _hmac(signingKey, stringToSign, 'hex');\n }\n\n _buildAuthorizationHeader(datetime: string, signedHeaders: string, signature: string): string {\n const credentialScope = [datetime.slice(0, 8), this.region, S3_SERVICE, AWS_REQUEST_TYPE].join('/');\n return [\n `${AWS_ALGORITHM} Credential=${this.accessKeyId}/${credentialScope}`,\n `SignedHeaders=${signedHeaders}`,\n `Signature=${signature}`,\n ].join(', ');\n }\n\n /**\n * List objects in the bucket.\n * @param {string} [path='/'] - The path to list objects from.\n * @param {string} [prefix=''] - The prefix to filter objects.\n * @param {number} [maxKeys=1000] - The maximum number of keys to return.\n * @param {string} [method='GET'] - The HTTP method to use (GET or HEAD).\n * @param {Object} [opts={}] - Additional options for the list operation.\n * @returns {Promise} The list of objects or object metadata.\n * @throws {TypeError} If any of the parameters are of incorrect type.\n */\n async list(\n path: string = '/',\n prefix: string = '',\n maxKeys: number = 1000,\n method: HttpMethod = 'GET',\n opts: Object = {},\n ): Promise> {\n if (typeof path !== 'string' || path.trim().length === 0) {\n this._log('error', ERROR_PATH_REQUIRED);\n throw new TypeError(ERROR_PATH_REQUIRED);\n }\n if (typeof prefix !== 'string') {\n this._log('error', ERROR_PREFIX_TYPE);\n throw new TypeError(ERROR_PREFIX_TYPE);\n }\n if (!Number.isInteger(maxKeys) || maxKeys <= 0) {\n this._log('error', ERROR_MAX_KEYS_TYPE);\n throw new TypeError(ERROR_MAX_KEYS_TYPE);\n }\n if (method !== 'GET' && method !== 'HEAD') {\n this._log('error', `${ERROR_PREFIX}method must be either GET or HEAD`);\n throw new TypeError(`${ERROR_PREFIX}method must be either GET or HEAD`);\n }\n if (typeof opts !== 'object') {\n this._log('error', `${ERROR_PREFIX}opts must be an object`);\n throw new TypeError(`${ERROR_PREFIX}opts must be an object`);\n }\n\n this._log('info', `Listing objects in ${path}`);\n\n const query = {\n 'list-type': LIST_TYPE,\n 'max-keys': String(maxKeys),\n ...opts,\n } as { [key: string]: any };\n if (prefix.length > 0) {\n query['prefix'] = prefix;\n }\n const headers = {\n [HEADER_CONTENT_TYPE]: JSON_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n const encodedKey = path === '/' ? path : uriEscape(path);\n const { url, headers: signedHeaders } = await this._sign('GET', encodedKey, query, headers, '');\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n const res = await this._sendRequest(urlWithQuery, 'GET', signedHeaders);\n const responseBody = await res.text();\n\n if (method === 'HEAD') {\n const contentLength = res.headers.get(HEADER_CONTENT_LENGTH);\n const lastModified = res.headers.get(HEADER_LAST_MODIFIED);\n const etag = res.headers.get(HEADER_ETAG);\n\n return {\n size: contentLength ? +contentLength : undefined,\n mtime: lastModified ? new Date(lastModified) : undefined,\n ETag: etag || undefined,\n };\n }\n\n const data = _parseXml(responseBody);\n const output = data.listBucketResult || data.error || data;\n return output.contents || output;\n }\n\n /**\n * List multipart uploads in the bucket.\n * @param {string} [path='/'] - The path to list objects from.\n * @param {string} [prefix=''] - The prefix to filter objects.\n * @param {string} [method='GET'] - The HTTP method to use (GET or HEAD).\n * @param {Object} [opts={}] - Additional options for the list operation.\n * @returns {Promise} The list of objects or object metadata.\n * @throws {TypeError} If any of the parameters are of incorrect type.\n */\n async listMultiPartUploads(\n path: string = '/',\n prefix: string = '',\n method: HttpMethod = 'GET',\n opts: Object = {},\n ): Promise {\n if (typeof path !== 'string' || path.trim().length === 0) {\n this._log('error', ERROR_PATH_REQUIRED);\n throw new TypeError(ERROR_PATH_REQUIRED);\n }\n if (typeof prefix !== 'string') {\n this._log('error', ERROR_PREFIX_TYPE);\n throw new TypeError(ERROR_PREFIX_TYPE);\n }\n if (method !== 'GET' && method !== 'HEAD') {\n this._log('error', `${ERROR_PREFIX}method must be either GET or HEAD`);\n throw new TypeError(`${ERROR_PREFIX}method must be either GET or HEAD`);\n }\n if (typeof opts !== 'object') {\n this._log('error', `${ERROR_PREFIX}opts must be an object`);\n throw new TypeError(`${ERROR_PREFIX}opts must be an object`);\n }\n\n this._log('info', `Listing multipart uploads in ${path}`);\n\n const query = {\n uploads: '',\n ...opts,\n } as Record;\n const headers = {\n [HEADER_CONTENT_TYPE]: JSON_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n const encodedKey = path === '/' ? path : uriEscape(path);\n const { url, headers: signedHeaders } = await this._sign('GET', encodedKey, query, headers, '');\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n const res = await this._sendRequest(urlWithQuery, 'GET', signedHeaders);\n const responseBody = await res.text();\n\n if (method === 'HEAD') {\n return {\n size: +(res.headers.get(HEADER_CONTENT_LENGTH) ?? '0'),\n mtime: new Date(res.headers.get(HEADER_LAST_MODIFIED) ?? ''),\n ETag: res.headers.get(HEADER_ETAG) ?? '',\n };\n }\n\n const data = _parseXml(responseBody);\n const output = data.listMultipartUploadsResult || data.error || data;\n return output.uploads || output;\n }\n\n /**\n * Get an object from the bucket.\n * @param {string} key - The key of the object to get.\n * @param {Object} [opts={}] - Additional options for the get operation.\n * @returns {Promise} The content of the object.\n */\n async get(key: string, opts: Record = {}): Promise {\n if (typeof key !== 'string' || key.trim().length === 0) {\n this._log('error', ERROR_KEY_REQUIRED);\n throw new TypeError(ERROR_KEY_REQUIRED);\n }\n const headers = {\n [HEADER_CONTENT_TYPE]: JSON_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n this._log('info', `Getting object ${key}`);\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('GET', encodedKey, opts, headers, '');\n const res = await this._sendRequest(url, 'GET', signedHeaders);\n return res.text();\n }\n\n /**\n * Get a response of an object from the bucket.\n * @param {string} key - The key of the object to get.\n * @param {boolean} [wholeFile=true] - Whether to get the whole file or a part.\n * @param {number} [rangeFrom=0] - The range from to get if not getting the whole file.\n * @param {number} [rangeTo=this.maxRequestSizeInBytes] - The range to to get if not getting the whole file. Note: rangeTo is inclusive.\n * @param {Object} [opts={}] - Additional options for the get operation.\n * @returns {Promise} Response of the object content. Use readableStream() to get the stream from .body.\n */\n async getResponse(\n key: string,\n wholeFile: boolean = true,\n rangeFrom: number = 0,\n rangeTo: number = this.maxRequestSizeInBytes,\n opts: Record = {},\n ): Promise {\n const query = opts;\n const headers = {\n [HEADER_CONTENT_TYPE]: JSON_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n ...(wholeFile ? {} : { range: `bytes=${rangeFrom}-${rangeTo - 1}` }),\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('GET', encodedKey, query, headers, '');\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n\n return this._sendRequest(urlWithQuery, 'GET', signedHeaders);\n }\n\n /**\n * Put an object into the bucket.\n * @param {string} key - The key of the object to put. To create a folder, include a trailing slash.\n * @param {Buffer|string} data - The content of the object to put.\n * @returns {Promise} The response from the put operation.\n * @throws {TypeError} If the key is not a non-empty string or data is not a Buffer or string.\n */\n async put(key: string, data: string | Buffer): Promise {\n if (typeof key !== 'string' || key.trim().length === 0) {\n this._log('error', ERROR_KEY_REQUIRED);\n throw new TypeError(ERROR_KEY_REQUIRED);\n }\n if (!(data instanceof Buffer || typeof data === 'string')) {\n this._log('error', ERROR_DATA_BUFFER_REQUIRED);\n throw new TypeError(ERROR_DATA_BUFFER_REQUIRED);\n }\n // const encodedKey = encodeURIComponent(key);\n this._log('info', `Uploading object ${key}`);\n const contentLength = typeof data === 'string' ? Buffer.byteLength(data) : data.length;\n const headers = {\n [HEADER_CONTENT_LENGTH]: contentLength,\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('PUT', encodedKey, {}, headers, data);\n const res = await this._sendRequest(url, 'PUT', signedHeaders, data);\n return res;\n }\n\n /**\n * Initiate a multipart upload.\n * @param {string} key - The key of the object to upload.\n * @param {string} [fileType='application/octet-stream'] - The MIME type of the file.\n * @returns {Promise} The upload ID for the multipart upload.\n * @throws {TypeError} If the key is not a non-empty string or fileType is not a string.\n * @throws {Error} If the multipart upload initiation fails.\n */\n async getMultipartUploadId(key: string, fileType: string = DEFAULT_STREAM_CONTENT_TYPE): Promise {\n if (typeof key !== 'string' || key.trim().length === 0) {\n this._log('error', ERROR_KEY_REQUIRED);\n throw new TypeError(ERROR_KEY_REQUIRED);\n }\n if (typeof fileType !== 'string') {\n this._log('error', `${ERROR_PREFIX}fileType must be a string`);\n throw new TypeError(`${ERROR_PREFIX}fileType must be a string`);\n }\n this._log('info', `Initiating multipart upload for object ${key}`);\n const query = { uploads: '' };\n const headers = {\n [HEADER_CONTENT_TYPE]: fileType,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('POST', encodedKey, query, headers, '');\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n\n const res = await this._sendRequest(urlWithQuery, 'POST', signedHeaders);\n const responseBody = await res.text();\n const parsedResponse = _parseXml(responseBody);\n\n if (\n typeof parsedResponse === 'object' &&\n parsedResponse !== null &&\n 'error' in parsedResponse &&\n typeof parsedResponse.error === 'object' &&\n parsedResponse.error !== null &&\n 'message' in parsedResponse.error\n ) {\n const errorMessage = String(parsedResponse.error.message);\n this._log('error', `${ERROR_PREFIX}Failed to abort multipart upload: ${errorMessage}`);\n throw new Error(`${ERROR_PREFIX}Failed to abort multipart upload: ${errorMessage}`);\n }\n\n if (typeof parsedResponse === 'object' && parsedResponse !== null) {\n if (!parsedResponse.initiateMultipartUploadResult || !parsedResponse.initiateMultipartUploadResult.uploadId) {\n this._log('error', `${ERROR_PREFIX}Failed to create multipart upload: no uploadId in response`);\n throw new Error(`${ERROR_PREFIX}Failed to create multipart upload: Missing upload ID in response`);\n }\n\n return parsedResponse.initiateMultipartUploadResult.uploadId;\n } else {\n this._log('error', `${ERROR_PREFIX}Failed to create multipart upload: unexpected response format`);\n throw new Error(`${ERROR_PREFIX}Failed to create multipart upload: Unexpected response format`);\n }\n }\n\n /**\n * Upload a part in a multipart upload.\n * @param {string} key - The key of the object being uploaded.\n * @param {Buffer|string} data - The content of the part.\n * @param {string} uploadId - The upload ID of the multipart upload.\n * @param {number} partNumber - The part number.\n * @param {Object} [opts={}] - Additional options for the upload.\n * @returns {Promise} The ETag and part number of the uploaded part.\n * @throws {TypeError} If any of the parameters are of incorrect type.\n */\n async uploadPart(\n key: string,\n data: Buffer | string,\n uploadId: string,\n partNumber: number,\n opts: Object = {},\n ): Promise {\n this._validateUploadPartParams(key, data, uploadId, partNumber, opts);\n const query = { uploadId, partNumber, ...opts } as { [key: string]: any };\n const headers = {\n [HEADER_CONTENT_LENGTH]: data.length,\n } as { [key: string]: any };\n\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('PUT', encodedKey, query, headers, data);\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n\n const res = await this._sendRequest(urlWithQuery, 'PUT', signedHeaders, data);\n const ETag = res.headers.get('etag') || '';\n return { partNumber, ETag };\n }\n\n _validateUploadPartParams(key: string, data: Buffer | string, uploadId: string, partNumber: number, opts: Object) {\n if (typeof key !== 'string' || key.trim().length === 0) {\n this._log('error', ERROR_KEY_REQUIRED);\n throw new TypeError(ERROR_KEY_REQUIRED);\n }\n if (!(data instanceof Buffer || typeof data === 'string')) {\n this._log('error', ERROR_DATA_BUFFER_REQUIRED);\n throw new TypeError(ERROR_DATA_BUFFER_REQUIRED);\n }\n if (typeof uploadId !== 'string' || uploadId.trim().length === 0) {\n this._log('error', ERROR_UPLOAD_ID_REQUIRED);\n throw new TypeError(ERROR_UPLOAD_ID_REQUIRED);\n }\n if (!Number.isInteger(partNumber) || partNumber <= 0) {\n this._log('error', `${ERROR_PREFIX}partNumber must be a positive integer`);\n throw new TypeError(`${ERROR_PREFIX}partNumber must be a positive integer`);\n }\n if (typeof opts !== 'object') {\n this._log('error', `${ERROR_PREFIX}opts must be an object`);\n throw new TypeError(`${ERROR_PREFIX}opts must be an object`);\n }\n }\n\n /**\n * Complete a multipart upload.\n * @param {string} key - The key of the object being uploaded.\n * @param {string} uploadId - The upload ID of the multipart upload.\n * @param {Array} parts - An array of objects containing PartNumber and ETag for each part.\n * @returns {Promise} The result of the complete multipart upload operation.\n * @throws {TypeError} If any of the parameters are of incorrect type.\n * @throws {Error} If the complete multipart upload operation fails.\n */\n async completeMultipartUpload(\n key: string,\n uploadId: string,\n parts: Array,\n ): Promise {\n if (typeof key !== 'string' || key.trim().length === 0) {\n this._log('error', ERROR_KEY_REQUIRED);\n throw new TypeError(ERROR_KEY_REQUIRED);\n }\n if (typeof uploadId !== 'string' || uploadId.trim().length === 0) {\n this._log('error', ERROR_UPLOAD_ID_REQUIRED);\n throw new TypeError(ERROR_UPLOAD_ID_REQUIRED);\n }\n if (!Array.isArray(parts) || parts.length === 0) {\n this._log('error', ERROR_PARTS_REQUIRED);\n throw new TypeError(ERROR_PARTS_REQUIRED);\n }\n if (!parts.every(part => typeof part.partNumber === 'number' && typeof part.ETag === 'string')) {\n this._log('error', ERROR_INVALID_PART);\n throw new TypeError(ERROR_INVALID_PART);\n }\n this._log('info', `Complete multipart upload ${uploadId} for object ${key}`);\n const query = { uploadId };\n const xmlBody = this._buildCompleteMultipartUploadXml(parts);\n const headers = {\n [HEADER_CONTENT_TYPE]: XML_CONTENT_TYPE,\n [HEADER_CONTENT_LENGTH]: Buffer.byteLength(xmlBody).toString(),\n [HEADER_AMZ_CONTENT_SHA256]: await _hash(xmlBody),\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('POST', encodedKey, query, headers, xmlBody);\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n\n const res = await this._sendRequest(urlWithQuery, 'POST', signedHeaders, xmlBody);\n const responseBody = await res.text();\n const parsedResponse = _parseXml(responseBody);\n\n if (\n typeof parsedResponse === 'object' &&\n parsedResponse !== null &&\n 'error' in parsedResponse &&\n typeof parsedResponse.error === 'object' &&\n parsedResponse.error !== null &&\n 'message' in parsedResponse.error\n ) {\n const errorMessage = String(parsedResponse.error.message);\n this._log('error', `${ERROR_PREFIX}Failed to abort multipart upload: ${errorMessage}`);\n throw new Error(`${ERROR_PREFIX}Failed to abort multipart upload: ${errorMessage}`);\n }\n\n return parsedResponse.completeMultipartUploadResult;\n }\n\n /**\n * Aborts a multipart upload.\n * @param {string} key - The key of the object being uploaded.\n * @param {string} uploadId - The ID of the multipart upload to abort.\n * @returns {Promise} - A promise that resolves to the abort response.\n * @throws {Error} If the abort operation fails.\n */\n async abortMultipartUpload(key: string, uploadId: string): Promise {\n // Input validation\n if (typeof key !== 'string' || key.trim().length === 0) {\n this._log('error', ERROR_KEY_REQUIRED);\n throw new TypeError(ERROR_KEY_REQUIRED);\n }\n if (typeof uploadId !== 'string' || uploadId.trim().length === 0) {\n this._log('error', ERROR_UPLOAD_ID_REQUIRED);\n throw new TypeError(ERROR_UPLOAD_ID_REQUIRED);\n }\n\n this._log('info', `Aborting multipart upload ${uploadId} for object ${key}`);\n\n // Prepare the request\n const query = { uploadId };\n const headers = {\n [HEADER_CONTENT_TYPE]: XML_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n\n try {\n // Sign and send the request\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('DELETE', encodedKey, query, headers, '');\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n\n const res = await this._sendRequest(urlWithQuery, 'DELETE', signedHeaders);\n\n // Check for successful response\n if (res.ok) {\n const responseBody = await res.text();\n const parsedResponse = _parseXml(responseBody);\n\n if (\n typeof parsedResponse === 'object' &&\n parsedResponse !== null &&\n 'error' in parsedResponse &&\n typeof parsedResponse.error === 'object' &&\n parsedResponse.error !== null &&\n 'message' in parsedResponse.error\n ) {\n const errorMessage = String(parsedResponse.error.message);\n this._log('error', `${ERROR_PREFIX}Failed to abort multipart upload: ${errorMessage}`);\n throw new Error(`${ERROR_PREFIX}Failed to abort multipart upload: ${errorMessage}`);\n }\n\n return {\n status: 'Aborted',\n key,\n uploadId,\n response: parsedResponse,\n };\n } else {\n this._log('error', `${ERROR_PREFIX}Abort request failed with status ${res.status}`);\n throw new Error(`${ERROR_PREFIX}Abort request failed with status ${res.status}`);\n }\n } catch (error: unknown) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n this._log('error', `${ERROR_PREFIX}Failed to abort multipart upload for key ${key}: ${errorMessage}`);\n throw new Error(`${ERROR_PREFIX}Failed to abort multipart upload for key ${key}: ${errorMessage}`);\n }\n }\n\n _buildCompleteMultipartUploadXml(parts: Array): string {\n return `\n \n ${parts\n .map(\n part => `\n \n ${part.partNumber}\n ${part.ETag}\n \n `,\n )\n .join('')}\n \n `;\n }\n\n /**\n * Delete an object from the bucket.\n * @param {string} key - The key of the object to delete.\n * @returns {Promise} The response from the delete operation.\n */\n async delete(key: string): Promise {\n if (typeof key !== 'string' || key.trim().length === 0) {\n this._log('error', ERROR_KEY_REQUIRED);\n throw new TypeError(ERROR_KEY_REQUIRED);\n }\n this._log('info', `Deleting object ${key}`);\n const headers = {\n [HEADER_CONTENT_TYPE]: JSON_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('DELETE', encodedKey, {}, headers, '');\n const res = await this._sendRequest(url, 'DELETE', signedHeaders);\n return res.text();\n }\n\n async _sendRequest(\n url: string,\n method: HttpMethod,\n headers: Record,\n body?: string | Buffer,\n ): Promise {\n this._log('info', `Sending ${method} request to ${url}, headers: ${JSON.stringify(headers)}`);\n const res = await fetch(url, {\n method,\n headers,\n body,\n signal: this.requestAbortTimeout !== undefined ? AbortSignal.timeout(this.requestAbortTimeout) : undefined,\n });\n\n if (!res.ok) {\n await this._handleErrorResponse(res);\n }\n\n return res;\n }\n\n async _handleErrorResponse(res: Response) {\n const errorBody = await res.text();\n const errorCode = res.headers.get('x-amz-error-code') || 'Unknown';\n const errorMessage = res.headers.get('x-amz-error-message') || res.statusText;\n this._log(\n 'error',\n `${ERROR_PREFIX}Request failed with status ${res.status}: ${errorCode} - ${errorMessage},err body: ${errorBody}`,\n );\n throw new Error(\n `${ERROR_PREFIX}Request failed with status ${res.status}: ${errorCode} - ${errorMessage}, err body: ${errorBody}`,\n );\n }\n\n _buildCanonicalQueryString(queryParams: Object): string {\n if (Object.keys(queryParams).length < 1) {\n return '';\n }\n\n return Object.keys(queryParams)\n .sort()\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent((queryParams as Record)[key])}`)\n .join('&');\n }\n async _getSignatureKey(dateStamp: string): Promise {\n const kDate = await _hmac(`AWS4${this.secretAccessKey}`, dateStamp);\n const kRegion = await _hmac(kDate, this.region);\n const kService = await _hmac(kRegion, S3_SERVICE);\n return _hmac(kService, AWS_REQUEST_TYPE);\n }\n}\n\nconst _hash = async (content: string | Buffer): Promise => {\n const hashSum = _createHash('sha256');\n hashSum.update(content);\n return hashSum.digest('hex');\n};\n\nconst _hmac = async (key: string | Buffer, content: string, encoding?: 'hex'): Promise => {\n const hmacSum = _createHmac('sha256', key);\n hmacSum.update(content);\n return hmacSum.digest(encoding);\n};\n\nconst _parseXml = (str: string): string | object | any => {\n const unescapeXml = (value: string): string => {\n return value\n .replace(/"/g, '\"')\n .replace(/'/g, \"'\")\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/&/g, '&');\n };\n\n const json = {};\n const re = /<(\\w)([-\\w]+)(?:\\/|[^>]*>((?:(?!<\\1)[\\s\\S])*)<\\/\\1\\2)>/gm;\n let match;\n\n while ((match = re.exec(str))) {\n const [, prefix, key, value] = match;\n const fullKey = prefix.toLowerCase() + key;\n const parsedValue = value != null ? _parseXml(value) : true;\n\n if (typeof parsedValue === 'string') {\n (json as { [key: string]: any })[fullKey] = unescapeXml(parsedValue);\n } else if (Array.isArray((json as { [key: string]: any })[fullKey])) {\n (json as { [key: string]: any })[fullKey].push(parsedValue);\n } else {\n (json as { [key: string]: any })[fullKey] =\n (json as { [key: string]: any })[fullKey] != null\n ? [(json as { [key: string]: any })[fullKey], parsedValue]\n : expectArray[fullKey]\n ? [parsedValue]\n : parsedValue;\n }\n }\n\n return Object.keys(json).length ? json : unescapeXml(str);\n};\n\nexport { S3 };\nexport default S3;\n", "'use strict';\n\nimport { S3 } from 'ultralight-s3';\nimport avro from 'avro-js'; // eslint-disable-line\nimport { matchesQuery, generateUUID, inferAvroType } from './helpers.js';\n\nconst MODULE_NAME = 'lowstorage';\nconst PROJECT_DIR_PREFIX = 'lowstorage/';\nconst SCHEMA_SUFFIX = '.avro';\nconst CHUNG_1MB = 1024 * 1024;\nconst CHUNG_5MB = 5 * CHUNG_1MB;\n\nclass lowstorage {\n\tconstructor(\n\t\toptions = {\n\t\t\taccessKeyId: undefined,\n\t\t\tsecretAccessKey: undefined,\n\t\t\tendpoint: undefined,\n\t\t\tbucketName: undefined,\n\t\t\tregion: 'auto',\n\t\t\tlogger: null,\n\t\t},\n\t) {\n\t\tthis._checkArgs(options);\n\t\tthis._schemas = new Map();\n\t\tthis._s3 = new S3(options);\n\t\tthis._avro = avro;\n\t}\n\n\t_checkArgs = (args) => {\n\t\tconst requiredFields = ['accessKeyId', 'secretAccessKey', 'endpoint', 'bucketName'];\n\t\tfor (const field of requiredFields) {\n\t\t\tif (!args[field]) {\n\t\t\t\tthrow new Error(`${MODULE_NAME}: ${field} is required`);\n\t\t\t}\n\t\t}\n\t};\n\n\tasync listCollections() {\n\t\tconst listed = await this._s3.list(PROJECT_DIR_PREFIX, '', 1000);\n\t\treturn listed.map((entry) => entry.key.slice(PROJECT_DIR_PREFIX.length, -SCHEMA_SUFFIX.length));\n\t}\n\n\tasync createCollection(colName, schema = undefined) {\n\t\ttry {\n\t\t\tif (colName === undefined || colName.trim() === '' || colName === null) {\n\t\t\t\tthrow new Error(`${MODULE_NAME}: Collection name is required`);\n\t\t\t}\n\t\t\tif (await this.collectionExists(colName)) {\n\t\t\t\tthrow new Error(`${MODULE_NAME}: Collection ${colName} already exists`);\n\t\t\t}\n\t\t\tif (schema) {\n\t\t\t\tconst avroType = this._avro.parse(schema);\n\t\t\t\tthis._schemas.set(colName, avroType);\n\t\t\t}\n\t\t\treturn this.collection(colName, schema);\n\t\t} catch (error) {\n\t\t\tthrow new Error(`${MODULE_NAME}: ${error.message}`);\n\t\t}\n\t}\n\n\tasync removeCollection(colName) {\n\t\ttry {\n\t\t\tconst exists = await this._s3.fileExists(`${PROJECT_DIR_PREFIX}${colName}${SCHEMA_SUFFIX}`);\n\t\t\tif (exists) {\n\t\t\t\tconst resp = await this._s3.delete(`${PROJECT_DIR_PREFIX}${colName}${SCHEMA_SUFFIX}`);\n\t\t\t\tif (resp.status === 200) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t} catch (error) {\n\t\t\tthrow new Error(`${MODULE_NAME}: ${error.message}`);\n\t\t}\n\t}\n\n\tasync collectionExists(colName) {\n\t\ttry {\n\t\t\tconst exists = await this._s3.fileExists(`${PROJECT_DIR_PREFIX}${colName}${SCHEMA_SUFFIX}`);\n\t\t\treturn exists;\n\t\t} catch (error) {\n\t\t\tif (error.message.includes('Not Found')) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tthrow new Error(`${MODULE_NAME}: ${error.message}`);\n\t\t}\n\t}\n\n\tasync updateCollectionSchema(colName, schema) {\n\t\ttry {\n\t\t\tif (colName === undefined || colName.trim() === '' || colName === null) {\n\t\t\t\tthrow new Error(`${MODULE_NAME}: Collection name is required`);\n\t\t\t}\n\t\t\t// Check if collection exists\n\t\t\tconst exists = await this.collectionExists(colName);\n\t\t\tif (!exists) {\n\t\t\t\tthrow new Error(`${MODULE_NAME}: Collection ${colName} does not exist`);\n\t\t\t}\n\t\t\tif (schema === undefined || schema === null) {\n\t\t\t\tthrow new Error(`${MODULE_NAME}: Schema is required`);\n\t\t\t}\n\t\t\tconst avroType = this._avro.parse(schema);\n\t\t\tthis._schemas.set(colName, avroType);\n\t\t\tconst resp = await this._s3.put(`${PROJECT_DIR_PREFIX}${colName}${SCHEMA_SUFFIX}`, JSON.stringify(schema));\n\t\t\tif (resp.status === 200) {\n\t\t\t\treturn true;\n\t\t\t} else {\n\t\t\t\tthrow new Error(`${MODULE_NAME}: Failed to update schema for collection ${colName}`);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tthrow new Error(`${MODULE_NAME}: ${error.message}`);\n\t\t}\n\t}\n\n\tasync collection(colName, schema = undefined) {\n\t\ttry {\n\t\t\tif (colName === undefined || colName.trim() === '' || colName === null) {\n\t\t\t\tthrow new Error(`${MODULE_NAME}: Collection name is required`);\n\t\t\t}\n\t\t\tif (typeof schema === 'undefined') {\n\t\t\t\t// Load schema if not in memory\n\t\t\t\tif (this._schemas.has(colName)) {\n\t\t\t\t\treturn new Collection(colName, this._s3, this._schemas.get(colName));\n\t\t\t\t}\n\t\t\t\t// check if schema file exists\n\t\t\t\tconst exists = await this._s3.fileExists(`${PROJECT_DIR_PREFIX}${colName}${SCHEMA_SUFFIX}`);\n\t\t\t\tif (exists) {\n\t\t\t\t\tconst schemaContent = await this._s3.get(`${PROJECT_DIR_PREFIX}${colName}${SCHEMA_SUFFIX}`);\n\n\t\t\t\t\tconst avroType = this._avro.parse(schemaContent);\n\t\t\t\t\tthis._schemas.set(colName, avroType);\n\t\t\t\t\treturn new Collection(colName, this._s3, avroType);\n\t\t\t\t}\n\t\t\t\treturn new Collection(colName, this._s3, undefined);\n\t\t\t}\n\t\t\treturn new Collection(colName, this._s3, this._avro.parse(schema));\n\t\t} catch (error) {\n\t\t\tthrow new Error(`${MODULE_NAME}: ${error.message}`);\n\t\t}\n\t}\n}\n\nclass Collection {\n\tconstructor(colName, s3, avroType = undefined) {\n\t\tthis._colName = colName;\n\t\tthis._s3 = s3;\n\t\tthis._avro = avro;\n\t\tthis._avroType = avroType;\n\t}\n\n\tasync insert(doc, schema = undefined) {\n\t\ttry {\n\t\t\tif (doc === undefined || doc === null) {\n\t\t\t\tthrow new Error(`${MODULE_NAME}: Document is required for insert`);\n\t\t\t}\n\t\t\tif (typeof doc !== 'object' && !Array.isArray(doc)) {\n\t\t\t\tthrow new Error(`${MODULE_NAME}: Document must be an object or an array`);\n\t\t\t}\n\t\t\tconst items = !Array.isArray(doc) ? [doc] : doc;\n\n\t\t\tconst avroType = !!schema ? this._avro.parse(schema) : this._avroType || this._avro.parse(inferAvroType(doc));\n\n\t\t\t// throw new Error('avroType::: ', avroType);\n\t\t\tif (avroType === undefined) {\n\t\t\t\tthrow new Error(`${MODULE_NAME}: Schema is required - Pass a schema to the insert method`);\n\t\t\t}\n\t\t\tthis._avroType = avroType;\n\t\t\tconst wrapperType = this._avro.parse({ type: 'array', items: this._avroType });\n\t\t\tconst bufferData = await this._loadDataBuffer();\n\t\t\tconst data = bufferData.length > 0 ? wrapperType.fromBuffer(bufferData) : [];\n\t\t\tfor (let item of items) {\n\t\t\t\tif (typeof item !== 'object' || item === null) {\n\t\t\t\t\tthrow new Error('Invalid input: input must be an object or an array of objects');\n\t\t\t\t}\n\t\t\t\titem._id = item._id || (await generateUUID());\n\t\t\t\tconst valid = this._avroType.isValid(item);\n\t\t\t\tif (!valid) {\n\t\t\t\t\tthrow new Error(`${MODULE_NAME}: Invalid document or schema`);\n\t\t\t\t}\n\t\t\t\tdata.push(item);\n\t\t\t}\n\t\t\tconst resp = await this._saveDataBuffer(wrapperType.toBuffer(data));\n\t\t\tif (resp) {\n\t\t\t\treturn items;\n\t\t\t} else {\n\t\t\t\tthrow new Error(`${MODULE_NAME}: Failed to insert document`);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tthrow new Error(`${MODULE_NAME}: ${error.message}`);\n\t\t}\n\t}\n\n\tasync _loadDataBuffer() {\n\t\ttry {\n\t\t\tconst KEY = `${PROJECT_DIR_PREFIX}${this._colName}${SCHEMA_SUFFIX}`;\n\t\t\tconst CHUNK_SIZE = this._s3.getMaxRequestSizeInBytes() || CHUNG_5MB;\n\t\t\tlet firstData = await this._s3.get(KEY);\n\t\t\tif (firstData.length < CHUNK_SIZE) {\n\t\t\t\treturn Buffer.from(firstData, 'utf8');\n\t\t\t}\n\t\t\tlet offset = CHUNK_SIZE;\n\t\t\tlet bufferArr = [Buffer.from(firstData, 'utf8')];\n\t\t\tlet repeat = true;\n\t\t\twhile (repeat) {\n\t\t\t\tconst nextDataResponse = await this._s3.getResponse(KEY, false, offset, offset + CHUNK_SIZE);\n\t\t\t\tconst nextDataBody = await nextDataResponse.text();\n\t\t\t\tbufferArr.push(Buffer.from(nextDataBody, 'utf8'));\n\t\t\t\toffset += CHUNG;\n\t\t\t\tconst contentLength = nextDataResponse.headers.get('content-length') || nextDataBody.length;\n\t\t\t\tif (contentLength < CHUNK_SIZE) {\n\t\t\t\t\trepeat = false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn Buffer.concat(bufferArr);\n\t\t} catch (error) {\n\t\t\tif (error.toString().indexOf('status 404: Unknown - Not Found') > -1) {\n\t\t\t\treturn Buffer.from('');\n\t\t\t}\n\t\t\tthrow new Error(`${MODULE_NAME}: ${error.message}`);\n\t\t}\n\t}\n\n\tasync _saveDataBuffer(data) {\n\t\ttry {\n\t\t\tconst KEY = `${PROJECT_DIR_PREFIX}${this._colName}${SCHEMA_SUFFIX}`;\n\t\t\tconst resp = await this._s3.put(KEY, data);\n\t\t\tif (resp.status === 200) {\n\t\t\t\treturn true;\n\t\t\t} else {\n\t\t\t\tthrow new Error(`${MODULE_NAME}: Failed to save data`);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tthrow new Error(`${MODULE_NAME}: ${error.message}`);\n\t\t}\n\t}\n\n\tasync find(query = {}, options = {}) {\n\t\ttry {\n\t\t\tconst bufferData = await this._loadDataBuffer(); // load data from s3\n\t\t\tconst wrapperType = this._avro.parse({ type: 'array', items: this._avroType });\n\t\t\tconst data = bufferData.length > 0 ? wrapperType.fromBuffer(bufferData) : [];\n\t\t\tconst start = parseInt(options.skip, 10) || 0;\n\t\t\tconst end = parseInt(options.limit, 10) ? start + parseInt(options.limit, 10) : undefined;\n\t\t\tconst filteredData = data.filter((doc) => matchesQuery(doc, query)).slice(start, end);\n\t\t\treturn filteredData;\n\t\t} catch (error) {\n\t\t\tthrow new Error(`${MODULE_NAME}: ${error.message}`);\n\t\t}\n\t}\n\n\tasync findOne(query = {}) {\n\t\treturn (await this.find(query))[0] || null;\n\t}\n\n\tasync update(query = {}, update = {}) {\n\t\ttry {\n\t\t\tconst bufferData = await this._loadDataBuffer(); // load data from s3\n\t\t\tconst wrapperType = this._avro.parse({ type: 'array', items: this._avroType });\n\t\t\tconst data = bufferData.length > 0 ? wrapperType.fromBuffer(bufferData) : [];\n\t\t\tlet updatedCount = 0;\n\n\t\t\tfor (let i = 0; i < data.length; i++) {\n\t\t\t\tif (matchesQuery(data[i], query)) {\n\t\t\t\t\tObject.assign(data[i], update);\n\t\t\t\t\tupdatedCount++;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (updatedCount > 0) {\n\t\t\t\tconst resp = await this._saveDataBuffer(wrapperType.toBuffer(data));\n\t\t\t\tif (resp) {\n\t\t\t\t\treturn updatedCount;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn 0;\n\t\t} catch (error) {\n\t\t\tthrow new Error(`${MODULE_NAME}: ${error.message}`);\n\t\t}\n\t}\n\n\tasync updateOne(query = {}, update = {}) {\n\t\ttry {\n\t\t\tconst bufferData = await this._loadDataBuffer(); // load data from s3\n\t\t\tconst wrapperType = this._avro.parse({ type: 'array', items: this._avroType });\n\t\t\tconst data = bufferData.length > 0 ? wrapperType.fromBuffer(bufferData) : [];\n\t\t\tconst docIndex = data.findIndex((doc) => matchesQuery(doc, query));\n\n\t\t\tif (docIndex !== -1) {\n\t\t\t\tObject.assign(data[docIndex], update);\n\t\t\t\tconst resp = await this._saveDataBuffer(wrapperType.toBuffer(data));\n\t\t\t\tif (resp) {\n\t\t\t\t\treturn 1;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn 0;\n\t\t} catch (error) {\n\t\t\tthrow new Error(`${MODULE_NAME}: ${error.message}`);\n\t\t}\n\t}\n\n\tasync delete(query = {}) {\n\t\ttry {\n\t\t\tconst bufferData = await this._loadDataBuffer(); // load data from s3\n\t\t\tconst wrapperType = this._avro.parse({ type: 'array', items: this._avroType });\n\t\t\tconst data = bufferData.length > 0 ? wrapperType.fromBuffer(bufferData) : [];\n\t\t\tconst initialLength = data.length;\n\t\t\tconst newData = data.filter((doc) => !matchesQuery(doc, query));\n\t\t\tconst resp = await this._saveDataBuffer(wrapperType.toBuffer(newData));\n\t\t\tif (resp) {\n\t\t\t\treturn initialLength - newData.length;\n\t\t\t}\n\t\t\treturn 0;\n\t\t} catch (error) {\n\t\t\tthrow new Error(`${MODULE_NAME}: ${error.message}`);\n\t\t}\n\t}\n\n\tasync count(query = {}) {\n\t\ttry {\n\t\t\tif (query === undefined || query === null) {\n\t\t\t\tthrow new Error(`${MODULE_NAME}: Query is required`);\n\t\t\t}\n\t\t\tif (Object.keys(query).length === 0) {\n\t\t\t\tconst bufferData = await this._loadDataBuffer(); // load data from s3\n\t\t\t\tconst wrapperType = this._avro.parse({ type: 'array', items: this._avroType });\n\t\t\t\tconst data = bufferData.length > 0 ? wrapperType.fromBuffer(bufferData) : [];\n\t\t\t\treturn data.length || null;\n\t\t\t}\n\t\t\treturn (await this.find(query)).length;\n\t\t} catch (error) {\n\t\t\tthrow new Error(`${MODULE_NAME}: ${error.message}`);\n\t\t}\n\t}\n}\n\nexport default lowstorage;\nexport { lowstorage };\n", "'use strict';\n\n// export const avroLoader = async (isAvroLoaded) => {\n// \tconst avro = isAvroLoaded ? isAvroLoaded : await import('avro-js');\n// \treturn avro;\n// };\n\nimport { randomUUID } from 'node:crypto';\n\nexport const matchesQuery = (document, query) => {\n\treturn Object.keys(query).every((key) => document[key] === query[key]);\n};\n\nexport const generateUUID = async () => {\n\tlet _randomUUID = randomUUID || (await import('node:crypto')).randomUUID;\n\tif (typeof _randomUUID !== 'undefined' && typeof _randomUUID === 'function') {\n\t\treturn _randomUUID();\n\t} else {\n\t\t// Fallback for environments without crypto.randomUUID\n\t\treturn 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n\t\t\tvar r = (Math.random() * 16) | 0,\n\t\t\t\tv = c === 'x' ? r : (r & 0x3) | 0x8;\n\t\t\treturn v.toString(16);\n\t\t});\n\t}\n};\n\nconst _getAvroType = (value, name = 'SubAutoGenerated') => {\n\tswitch (typeof value) {\n\t\tcase 'string':\n\t\t\tif (_isUUID(value)) {\n\t\t\t\treturn {\n\t\t\t\t\ttype: 'string',\n\t\t\t\t\tname: '_id',\n\t\t\t\t\tsize: 16,\n\t\t\t\t\tlogicalType: 'UUID',\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn 'string';\n\t\tcase 'number':\n\t\t\treturn Number.isInteger(value) ? 'int' : 'float';\n\t\tcase 'boolean':\n\t\t\treturn 'boolean';\n\t\tcase 'object':\n\t\t\tif (value === null) return 'null';\n\t\t\tif (Array.isArray(value)) return { type: 'array', items: _getAvroType(value[0]) };\n\t\t\treturn inferAvroType(value, name);\n\t\tdefault:\n\t\t\treturn 'string'; // Default to string for unknown types\n\t}\n};\n\nexport const inferAvroType = (data, typeName = 'AutoGenerated') => {\n\tif (Array.isArray(data)) {\n\t\tdata = data[0];\n\t}\n\tconst fields = Object.entries(data).map(([name, value]) => {\n\t\treturn { name, type: _getAvroType(value, `${typeName}.${name}`) };\n\t});\n\treturn {\n\t\ttype: 'record',\n\t\tname: typeName,\n\t\tfields: fields,\n\t};\n};\n\nconst _isUUID = (str) => {\n\tconst uuidV4Regex = /^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i;\n\treturn uuidV4Regex.test(str);\n};\n"], + "mappings": "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", + "names": ["_createHmac", "_createHash", "AWS_ALGORITHM", "AWS_REQUEST_TYPE", "S3_SERVICE", "LIST_TYPE", "UNSIGNED_PAYLOAD", "DEFAULT_STREAM_CONTENT_TYPE", "XML_CONTENT_TYPE", "JSON_CONTENT_TYPE", "SENSITIVE_KEYS_REDACTED", "MIN_MAX_REQUEST_SIZE_IN_BYTES", "HEADER_AMZ_CONTENT_SHA256", "HEADER_AMZ_DATE", "HEADER_HOST", "HEADER_AUTHORIZATION", "HEADER_CONTENT_TYPE", "HEADER_CONTENT_LENGTH", "HEADER_ETAG", "HEADER_LAST_MODIFIED", "ERROR_PREFIX", "ERROR_ACCESS_KEY_REQUIRED", "ERROR_SECRET_KEY_REQUIRED", "ERROR_ENDPOINT_REQUIRED", "ERROR_BUCKET_NAME_REQUIRED", "ERROR_KEY_REQUIRED", "ERROR_UPLOAD_ID_REQUIRED", "ERROR_PARTS_REQUIRED", "ERROR_INVALID_PART", "ERROR_DATA_BUFFER_REQUIRED", "ERROR_PATH_REQUIRED", "ERROR_PREFIX_TYPE", "ERROR_MAX_KEYS_TYPE", "expectArray", "encodeAsHex", "c", "uriEscape", "uriStr", "uriResourceEscape", "string", "S3", "accessKeyId", "secretAccessKey", "endpoint", "bucketName", "region", "maxRequestSizeInBytes", "requestAbortTimeout", "logger", "props", "level", "message", "additionalData", "sanitize", "obj", "acc", "key", "sanitizedData", "logEntry", "headers", "encodedKey", "url", "signedHeaders", "contentLength", "res", "error", "errorMessage", "method", "keyPath", "query", "body", "datetime", "_hash", "canonicalHeaders", "canonicalRequest", "stringToSign", "signature", "authorizationHeader", "value", "credentialScope", "signingKey", "_hmac", "path", "prefix", "maxKeys", "opts", "urlWithQuery", "responseBody", "lastModified", "etag", "data", "_parseXml", "output", "_a", "_b", "_c", "wholeFile", "rangeFrom", "rangeTo", "fileType", "parsedResponse", "uploadId", "partNumber", "ETag", "parts", "part", "xmlBody", "errorBody", "errorCode", "queryParams", "dateStamp", "kDate", "kRegion", "kService", "content", "hashSum", "encoding", "hmacSum", "str", "unescapeXml", "json", "re", "match", "fullKey", "parsedValue", "c"] } diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..da878ec --- /dev/null +++ b/package-lock.json @@ -0,0 +1,8607 @@ +{ + "name": "lowstorage", + "version": "2.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "lowstorage", + "version": "2.0.0", + "license": "MIT", + "dependencies": { + "avro-js": "^1.11.3", + "ultralight-s3": "^0.0.3" + }, + "devDependencies": { + "avro-js": "^1.11.3", + "esbuild": "^0.23.0", + "jest": "^29.7.0", + "prettier": "^3.3.2", + "typescript": "^5.5.2", + "ultralight-s3": "^0.0.3", + "wrangler": "^3.62.0" + }, + "engines": { + "node": ">=18.12.0" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", + "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.24.7", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.7.tgz", + "integrity": "sha512-qJzAIcv03PyaWqxRgO4mSU3lihncDT296vnyuE2O8uA4w3UHWI4S3hgeZd1L8W1Bft40w9JxJ2b412iDUFFRhw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.7.tgz", + "integrity": "sha512-nykK+LEK86ahTkX/3TgauT0ikKoNCfKHEaZYTUVupJdTLzGNvrblu4u6fa7DhZONAltdf8e662t/abY8idrd/g==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.24.7", + "@babel/helper-compilation-targets": "^7.24.7", + "@babel/helper-module-transforms": "^7.24.7", + "@babel/helpers": "^7.24.7", + "@babel/parser": "^7.24.7", + "@babel/template": "^7.24.7", + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.7.tgz", + "integrity": "sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.24.7", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.7.tgz", + "integrity": "sha512-ctSdRHBi20qWOfy27RUb4Fhp07KSJ3sXcuSvTrXrc4aG8NSYDo1ici3Vhg9bg69y5bj0Mr1lh0aeEgTvc12rMg==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.24.7", + "@babel/helper-validator-option": "^7.24.7", + "browserslist": "^4.22.2", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz", + "integrity": "sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.24.7.tgz", + "integrity": "sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==", + "dev": true, + "dependencies": { + "@babel/template": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.7.tgz", + "integrity": "sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", + "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.7.tgz", + "integrity": "sha512-1fuJEwIrp+97rM4RWdO+qrRsZlAeL1lQJoPqtCYWv0NL115XM93hIH4CSRln2w52SqvmY5hqdtauB6QFCDiZNQ==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-simple-access": "^7.24.7", + "@babel/helper-split-export-declaration": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.7.tgz", + "integrity": "sha512-Rq76wjt7yz9AAc1KnlRKNAi/dMSVWgDRx43FHoJEbcYU6xOWaE2dVPwcdTukJrjxS65GITyfbvEYHvkirZ6uEg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", + "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz", + "integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.7.tgz", + "integrity": "sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", + "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.7.tgz", + "integrity": "sha512-yy1/KvjhV/ZCL+SM7hBrvnZJ3ZuT9OuZgIJAGpPEToANvc3iM6iDvBnRjtElWibHU6n8/LPR/EjX9EtIEYO3pw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.7.tgz", + "integrity": "sha512-NlmJJtvcw72yRJRcnCmGvSi+3jDEg8qFu3z0AFoymmzLx5ERVWyzd9kVXr7Th9/8yIJi2Zc6av4Tqz3wFs8QWg==", + "dev": true, + "dependencies": { + "@babel/template": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", + "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.24.7", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/@babel/highlight/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/parser": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.7.tgz", + "integrity": "sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.7.tgz", + "integrity": "sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.7.tgz", + "integrity": "sha512-c/+fVeJBB0FeKsFvwytYiUD+LBvhHjGSI0g446PRGdSVGZLRNArBUno2PETbAly3tpiNAQR5XaZ+JslxkotsbA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.7.tgz", + "integrity": "sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/parser": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.7.tgz", + "integrity": "sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.24.7", + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-function-name": "^7.24.7", + "@babel/helper-hoist-variables": "^7.24.7", + "@babel/helper-split-export-declaration": "^7.24.7", + "@babel/parser": "^7.24.7", + "@babel/types": "^7.24.7", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.7.tgz", + "integrity": "sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, + "node_modules/@cloudflare/kv-asset-handler": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@cloudflare/kv-asset-handler/-/kv-asset-handler-0.3.4.tgz", + "integrity": "sha512-YLPHc8yASwjNkmcDMQMY35yiWjoKAKnhUbPRszBRS0YgH+IXtsMp61j+yTcnCE3oO2DgP0U3iejLC8FTtKDC8Q==", + "dev": true, + "dependencies": { + "mime": "^3.0.0" + }, + "engines": { + "node": ">=16.13" + } + }, + "node_modules/@cloudflare/workerd-darwin-64": { + "version": "1.20240701.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-64/-/workerd-darwin-64-1.20240701.0.tgz", + "integrity": "sha512-XAZa4ZP+qyTn6JQQACCPH09hGZXP2lTnWKkmg5mPwT8EyRzCKLkczAf98vPP5bq7JZD/zORdFWRY0dOTap8zTQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=16" + } + }, + "node_modules/@cloudflare/workerd-darwin-arm64": { + "version": "1.20240701.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-arm64/-/workerd-darwin-arm64-1.20240701.0.tgz", + "integrity": "sha512-w80ZVAgfH4UwTz7fXZtk7KmS2FzlXniuQm4ku4+cIgRTilBAuKqjpOjwUCbx5g13Gqcm9NuiHce+IDGtobRTIQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=16" + } + }, + "node_modules/@cloudflare/workerd-linux-64": { + "version": "1.20240701.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-64/-/workerd-linux-64-1.20240701.0.tgz", + "integrity": "sha512-UWLr/Anxwwe/25nGv451MNd2jhREmPt/ws17DJJqTLAx6JxwGWA15MeitAIzl0dbxRFAJa+0+R8ag2WR3F/D6g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16" + } + }, + "node_modules/@cloudflare/workerd-linux-arm64": { + "version": "1.20240701.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-arm64/-/workerd-linux-arm64-1.20240701.0.tgz", + "integrity": "sha512-3kCnF9kYgov1ggpuWbgpXt4stPOIYtVmPCa7MO2xhhA0TWP6JDUHRUOsnmIgKrvDjXuXqlK16cdg3v+EWsaPJg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16" + } + }, + "node_modules/@cloudflare/workerd-windows-64": { + "version": "1.20240701.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-windows-64/-/workerd-windows-64-1.20240701.0.tgz", + "integrity": "sha512-6IPGITRAeS67j3BH1rN4iwYWDt47SqJG7KlZJ5bB4UaNAia4mvMBSy/p2p4vA89bbXoDRjMtEvRu7Robu6O7hQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=16" + } + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@esbuild-plugins/node-globals-polyfill": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@esbuild-plugins/node-globals-polyfill/-/node-globals-polyfill-0.2.3.tgz", + "integrity": "sha512-r3MIryXDeXDOZh7ih1l/yE9ZLORCd5e8vWg02azWRGj5SPTuoh69A2AIyn0Z31V/kHBfZ4HgWJ+OK3GTTwLmnw==", + "dev": true, + "peerDependencies": { + "esbuild": "*" + } + }, + "node_modules/@esbuild-plugins/node-modules-polyfill": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@esbuild-plugins/node-modules-polyfill/-/node-modules-polyfill-0.2.2.tgz", + "integrity": "sha512-LXV7QsWJxRuMYvKbiznh+U1ilIop3g2TeKRzUxOG5X3YITc8JyyTa90BmLwqqv0YnX4v32CSlG+vsziZp9dMvA==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^4.0.0", + "rollup-plugin-node-polyfills": "^0.2.1" + }, + "peerDependencies": { + "esbuild": "*" + } + }, + "node_modules/@esbuild-plugins/node-modules-polyfill/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.23.0.tgz", + "integrity": "sha512-3sG8Zwa5fMcA9bgqB8AfWPQ+HFke6uD3h1s3RIwUNK8EG7a4buxvuFTs3j1IMs2NXAk9F30C/FF4vxRgQCcmoQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.23.0.tgz", + "integrity": "sha512-+KuOHTKKyIKgEEqKbGTK8W7mPp+hKinbMBeEnNzjJGyFcWsfrXjSTNluJHCY1RqhxFurdD8uNXQDei7qDlR6+g==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.23.0.tgz", + "integrity": "sha512-EuHFUYkAVfU4qBdyivULuu03FhJO4IJN9PGuABGrFy4vUuzk91P2d+npxHcFdpUnfYKy0PuV+n6bKIpHOB3prQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.23.0.tgz", + "integrity": "sha512-WRrmKidLoKDl56LsbBMhzTTBxrsVwTKdNbKDalbEZr0tcsBgCLbEtoNthOW6PX942YiYq8HzEnb4yWQMLQuipQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.23.0.tgz", + "integrity": "sha512-YLntie/IdS31H54Ogdn+v50NuoWF5BDkEUFpiOChVa9UnKpftgwzZRrI4J132ETIi+D8n6xh9IviFV3eXdxfow==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.23.0.tgz", + "integrity": "sha512-IMQ6eme4AfznElesHUPDZ+teuGwoRmVuuixu7sv92ZkdQcPbsNHzutd+rAfaBKo8YK3IrBEi9SLLKWJdEvJniQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.0.tgz", + "integrity": "sha512-0muYWCng5vqaxobq6LB3YNtevDFSAZGlgtLoAc81PjUfiFz36n4KMpwhtAd4he8ToSI3TGyuhyx5xmiWNYZFyw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.23.0.tgz", + "integrity": "sha512-XKDVu8IsD0/q3foBzsXGt/KjD/yTKBCIwOHE1XwiXmrRwrX6Hbnd5Eqn/WvDekddK21tfszBSrE/WMaZh+1buQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.23.0.tgz", + "integrity": "sha512-SEELSTEtOFu5LPykzA395Mc+54RMg1EUgXP+iw2SJ72+ooMwVsgfuwXo5Fn0wXNgWZsTVHwY2cg4Vi/bOD88qw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.23.0.tgz", + "integrity": "sha512-j1t5iG8jE7BhonbsEg5d9qOYcVZv/Rv6tghaXM/Ug9xahM0nX/H2gfu6X6z11QRTMT6+aywOMA8TDkhPo8aCGw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.23.0.tgz", + "integrity": "sha512-P7O5Tkh2NbgIm2R6x1zGJJsnacDzTFcRWZyTTMgFdVit6E98LTxO+v8LCCLWRvPrjdzXHx9FEOA8oAZPyApWUA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.23.0.tgz", + "integrity": "sha512-InQwepswq6urikQiIC/kkx412fqUZudBO4SYKu0N+tGhXRWUqAx+Q+341tFV6QdBifpjYgUndV1hhMq3WeJi7A==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.23.0.tgz", + "integrity": "sha512-J9rflLtqdYrxHv2FqXE2i1ELgNjT+JFURt/uDMoPQLcjWQA5wDKgQA4t/dTqGa88ZVECKaD0TctwsUfHbVoi4w==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.23.0.tgz", + "integrity": "sha512-cShCXtEOVc5GxU0fM+dsFD10qZ5UpcQ8AM22bYj0u/yaAykWnqXJDpd77ublcX6vdDsWLuweeuSNZk4yUxZwtw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.23.0.tgz", + "integrity": "sha512-HEtaN7Y5UB4tZPeQmgz/UhzoEyYftbMXrBCUjINGjh3uil+rB/QzzpMshz3cNUxqXN7Vr93zzVtpIDL99t9aRw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.23.0.tgz", + "integrity": "sha512-WDi3+NVAuyjg/Wxi+o5KPqRbZY0QhI9TjrEEm+8dmpY9Xir8+HE/HNx2JoLckhKbFopW0RdO2D72w8trZOV+Wg==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.23.0.tgz", + "integrity": "sha512-a3pMQhUEJkITgAw6e0bWA+F+vFtCciMjW/LPtoj99MhVt+Mfb6bbL9hu2wmTZgNd994qTAEw+U/r6k3qHWWaOQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.23.0.tgz", + "integrity": "sha512-cRK+YDem7lFTs2Q5nEv/HHc4LnrfBCbH5+JHu6wm2eP+d8OZNoSMYgPZJq78vqQ9g+9+nMuIsAO7skzphRXHyw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.23.0.tgz", + "integrity": "sha512-suXjq53gERueVWu0OKxzWqk7NxiUWSUlrxoZK7usiF50C6ipColGR5qie2496iKGYNLhDZkPxBI3erbnYkU0rQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.23.0.tgz", + "integrity": "sha512-6p3nHpby0DM/v15IFKMjAaayFhqnXV52aEmv1whZHX56pdkK+MEaLoQWj+H42ssFarP1PcomVhbsR4pkz09qBg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.23.0.tgz", + "integrity": "sha512-BFelBGfrBwk6LVrmFzCq1u1dZbG4zy/Kp93w2+y83Q5UGYF1d8sCzeLI9NXjKyujjBBniQa8R8PzLFAUrSM9OA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.23.0.tgz", + "integrity": "sha512-lY6AC8p4Cnb7xYHuIxQ6iYPe6MfO2CC43XXKo9nBXDb35krYt7KGhQnOkRGar5psxYkircpCqfbNDB4uJbS2jQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.23.0.tgz", + "integrity": "sha512-7L1bHlOTcO4ByvI7OXVI5pNN6HSu6pUQq9yodga8izeuB1KcT2UkHaH6118QJwopExPn0rMHIseCTx1CRo/uNA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.23.0.tgz", + "integrity": "sha512-Arm+WgUFLUATuoxCJcahGuk6Yj9Pzxd6l11Zb/2aAuv5kWWvvfhLFo2fni4uSK5vzlUdCGZ/BdV5tH8klj8p8g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@fastify/busboy": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz", + "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==", + "dev": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", + "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/core": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", + "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", + "dev": true, + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/reporters": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^29.7.0", + "jest-config": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-resolve-dependencies": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "jest-watcher": "^29.7.0", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/environment": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", + "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", + "dev": true, + "dependencies": { + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", + "dev": true, + "dependencies": { + "expect": "^29.7.0", + "jest-snapshot": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", + "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", + "dev": true, + "dependencies": { + "jest-get-type": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/fake-timers": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", + "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@sinonjs/fake-timers": "^10.0.2", + "@types/node": "*", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/globals": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", + "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/types": "^29.6.3", + "jest-mock": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/reporters": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", + "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", + "dev": true, + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^6.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "slash": "^3.0.0", + "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", + "v8-to-istanbul": "^9.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "dev": true, + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/source-map": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", + "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.18", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-result": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", + "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", + "dev": true, + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-sequencer": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", + "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", + "dev": true, + "dependencies": { + "@jest/test-result": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/transform": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", + "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true + }, + "node_modules/@sinonjs/commons": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", + "dev": true, + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^3.0.0" + } + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.8", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", + "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.6", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", + "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/graceful-fs": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", + "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "dev": true + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/node": { + "version": "20.14.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.9.tgz", + "integrity": "sha512-06OCtnTXtWOZBJlRApleWndH4JsRVs1pDCc8dLSQp+7PpUpX3ePdHyeNSFTeSe7FtKyQkrlPvHwJOW3SLd8Oyg==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/node-forge": { + "version": "1.3.11", + "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz", + "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/stack-utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", + "dev": true + }, + "node_modules/@types/yargs": { + "version": "17.0.32", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", + "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "dev": true + }, + "node_modules/acorn": { + "version": "8.12.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", + "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.3", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.3.tgz", + "integrity": "sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==", + "dev": true, + "dependencies": { + "acorn": "^8.11.0" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/as-table": { + "version": "1.0.55", + "resolved": "https://registry.npmjs.org/as-table/-/as-table-1.0.55.tgz", + "integrity": "sha512-xvsWESUJn0JN421Xb9MQw6AsMHRCUknCe0Wjlxvjud80mU4E6hQf1A6NzQKcYNmYw62MfzEtXc+badstZP3JpQ==", + "dev": true, + "dependencies": { + "printable-characters": "^1.0.42" + } + }, + "node_modules/avro-js": { + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/avro-js/-/avro-js-1.11.3.tgz", + "integrity": "sha512-B1b0wI5iwSkVwj3RQWRzW99/LGoYl6df9j1kWime8r8b0dXCdKU7t7mEOFkOpQFaT/I9JXaL7KAIxM+/3TUk1A==", + "dev": true, + "dependencies": { + "underscore": "^1.13.2" + } + }, + "node_modules/babel-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", + "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", + "dev": true, + "dependencies": { + "@jest/transform": "^29.7.0", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^29.6.3", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-jest-hoist": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", + "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", + "dev": true, + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "dev": true, + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-preset-jest": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", + "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", + "dev": true, + "dependencies": { + "babel-plugin-jest-hoist": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/blake3-wasm": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/blake3-wasm/-/blake3-wasm-2.1.5.tgz", + "integrity": "sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.23.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.1.tgz", + "integrity": "sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001629", + "electron-to-chromium": "^1.4.796", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.0.16" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001640", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001640.tgz", + "integrity": "sha512-lA4VMpW0PSUrFnkmVuEKBUovSWKhj7puyCg8StBChgu298N1AtuF1sKWEvfDuimSEDbhlb/KqPKC3fs1HbuQUA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/capnp-ts": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/capnp-ts/-/capnp-ts-0.7.0.tgz", + "integrity": "sha512-XKxXAC3HVPv7r674zP0VC3RTXz+/JKhfyw94ljvF80yynK6VkTnqE3jMuN8b3dUVmmc43TjyxjW4KTsmB3c86g==", + "dev": true, + "dependencies": { + "debug": "^4.3.1", + "tslib": "^2.2.0" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } + }, + "node_modules/cjs-module-lexer": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.3.1.tgz", + "integrity": "sha512-a3KdPAANPbNE4ZUv9h6LckSl9zLsYOP4MBmhIPkRaeyybt+r4UghLvq+xw/YwUcC1gqylCkL4rdVs3Lwupjm4Q==", + "dev": true + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "dev": true, + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/collect-v8-coverage": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", + "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", + "dev": true + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/consola": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/consola/-/consola-3.2.3.tgz", + "integrity": "sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==", + "dev": true, + "engines": { + "node": "^14.18.0 || >=16.10.0" + } + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "node_modules/cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/create-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", + "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "prompts": "^2.0.1" + }, + "bin": { + "create-jest": "bin/create-jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/data-uri-to-buffer": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-2.0.2.tgz", + "integrity": "sha512-ND9qDTLc6diwj+Xe5cdAgVTbLVdXbtxTJRXRhli8Mowuaan+0EJOtdqJ0QCHNSSPyoXGx9HX2/VMnKeC34AChA==", + "dev": true + }, + "node_modules/date-fns": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-3.6.0.tgz", + "integrity": "sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/kossnocorp" + } + }, + "node_modules/debug": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/dedent": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz", + "integrity": "sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==", + "dev": true, + "peerDependencies": { + "babel-plugin-macros": "^3.1.0" + }, + "peerDependenciesMeta": { + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/defu": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz", + "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==", + "dev": true + }, + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.4.816", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.816.tgz", + "integrity": "sha512-EKH5X5oqC6hLmiS7/vYtZHZFTNdhsYG5NVPRN6Yn0kQHNBlT59+xSM8HBy66P5fxWpKgZbPqb+diC64ng295Jw==", + "dev": true + }, + "node_modules/emittery": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/esbuild": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.23.0.tgz", + "integrity": "sha512-1lvV17H2bMYda/WaFb2jLPeHU3zml2k4/yagNMG8Q/YtfMjCwEUZa2eXXMgZTVSL5q1n4H7sQ0X6CdJDqqeCFA==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.23.0", + "@esbuild/android-arm": "0.23.0", + "@esbuild/android-arm64": "0.23.0", + "@esbuild/android-x64": "0.23.0", + "@esbuild/darwin-arm64": "0.23.0", + "@esbuild/darwin-x64": "0.23.0", + "@esbuild/freebsd-arm64": "0.23.0", + "@esbuild/freebsd-x64": "0.23.0", + "@esbuild/linux-arm": "0.23.0", + "@esbuild/linux-arm64": "0.23.0", + "@esbuild/linux-ia32": "0.23.0", + "@esbuild/linux-loong64": "0.23.0", + "@esbuild/linux-mips64el": "0.23.0", + "@esbuild/linux-ppc64": "0.23.0", + "@esbuild/linux-riscv64": "0.23.0", + "@esbuild/linux-s390x": "0.23.0", + "@esbuild/linux-x64": "0.23.0", + "@esbuild/netbsd-x64": "0.23.0", + "@esbuild/openbsd-arm64": "0.23.0", + "@esbuild/openbsd-x64": "0.23.0", + "@esbuild/sunos-x64": "0.23.0", + "@esbuild/win32-arm64": "0.23.0", + "@esbuild/win32-ia32": "0.23.0", + "@esbuild/win32-x64": "0.23.0" + } + }, + "node_modules/escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/estree-walker": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", + "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", + "dev": true + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/exit-hook": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-2.2.1.tgz", + "integrity": "sha512-eNTPlAD67BmP31LDINZ3U7HSF8l57TxOY2PmBJ1shpCvpnxBF93mWCE8YHBnXs8qiUZJc9WDcWIeC3a2HIAMfw==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", + "dev": true, + "dependencies": { + "@jest/expect-utils": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "dev": true, + "dependencies": { + "bser": "2.1.1" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-source": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/get-source/-/get-source-2.0.12.tgz", + "integrity": "sha512-X5+4+iD+HoSeEED+uwrQ07BOQr0kEDFMVqqpBuI+RaZBpBpHCuXxo70bjar6f0b0u/DQJsJ7ssurpP0V60Az+w==", + "dev": true, + "dependencies": { + "data-uri-to-buffer": "^2.0.0", + "source-map": "^0.6.1" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "dev": true, + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.14.0.tgz", + "integrity": "sha512-a5dFJih5ZLYlRtDc0dZWP7RiKr6xIKzmn/oAYCDvdLThadVgyJwlaoQPmRtMSpz+rk0OGAgIu+TcM9HUF0fk1A==", + "dev": true, + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", + "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", + "dev": true, + "dependencies": { + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", + "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", + "dev": true, + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", + "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", + "dev": true, + "dependencies": { + "@jest/core": "^29.7.0", + "@jest/types": "^29.6.3", + "import-local": "^3.0.2", + "jest-cli": "^29.7.0" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-changed-files": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", + "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", + "dev": true, + "dependencies": { + "execa": "^5.0.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-circus": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", + "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^1.0.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^29.7.0", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0", + "pretty-format": "^29.7.0", + "pure-rand": "^6.0.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-cli": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", + "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", + "dev": true, + "dependencies": { + "@jest/core": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "create-jest": "^29.7.0", + "exit": "^0.1.2", + "import-local": "^3.0.2", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "yargs": "^17.3.1" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-config": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", + "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-jest": "^29.7.0", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@types/node": "*", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/jest-diff": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-docblock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", + "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", + "dev": true, + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-each": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", + "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "jest-util": "^29.7.0", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-environment-node": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", + "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-haste-map": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", + "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/jest-leak-detector": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", + "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", + "dev": true, + "dependencies": { + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-matcher-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", + "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-message-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-mock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", + "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-pnp-resolver": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", + "dev": true, + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } + } + }, + "node_modules/jest-regex-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", + "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "resolve": "^1.20.0", + "resolve.exports": "^2.0.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve-dependencies": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", + "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", + "dev": true, + "dependencies": { + "jest-regex-util": "^29.6.3", + "jest-snapshot": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runner": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", + "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", + "dev": true, + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/environment": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-leak-detector": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-resolve": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-util": "^29.7.0", + "jest-watcher": "^29.7.0", + "jest-worker": "^29.7.0", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runtime": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", + "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/globals": "^29.7.0", + "@jest/source-map": "^29.6.3", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-snapshot": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", + "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "natural-compare": "^1.4.0", + "pretty-format": "^29.7.0", + "semver": "^7.5.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-validate": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", + "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "leven": "^3.1.0", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-watcher": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", + "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", + "dev": true, + "dependencies": { + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "jest-util": "^29.7.0", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-worker": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "dev": true, + "dependencies": { + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "dev": true, + "dependencies": { + "sourcemap-codec": "^1.4.8" + } + }, + "node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, + "dependencies": { + "tmpl": "1.0.5" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/micromatch": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", + "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", + "dev": true, + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", + "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/miniflare": { + "version": "3.20240701.0", + "resolved": "https://registry.npmjs.org/miniflare/-/miniflare-3.20240701.0.tgz", + "integrity": "sha512-m9+I+7JNyqDGftCMKp9cK9pCZkK72hAL2mM9IWwhct+ZmucLBA8Uu6+rHQqA5iod86cpwOkrB2PrPA3wx9YNgw==", + "dev": true, + "dependencies": { + "@cspotcode/source-map-support": "0.8.1", + "acorn": "^8.8.0", + "acorn-walk": "^8.2.0", + "capnp-ts": "^0.7.0", + "exit-hook": "^2.2.1", + "glob-to-regexp": "^0.4.1", + "stoppable": "^1.1.0", + "undici": "^5.28.4", + "workerd": "1.20240701.0", + "ws": "^8.17.1", + "youch": "^3.2.2", + "zod": "^3.22.3" + }, + "bin": { + "miniflare": "bootstrap.js" + }, + "engines": { + "node": ">=16.13" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/mustache": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz", + "integrity": "sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==", + "dev": true, + "bin": { + "mustache": "bin/mustache" + } + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/node-fetch-native": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.4.tgz", + "integrity": "sha512-IhOigYzAKHd244OC0JIMIUrjzctirCmPkaIfhDeGcEETWof5zKYUW7e7MYvChGWh/4CJeXEgsRyGzuF334rOOQ==", + "dev": true + }, + "node_modules/node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "dev": true, + "engines": { + "node": ">= 6.13.0" + } + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true + }, + "node_modules/node-releases": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", + "dev": true + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-locate/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-to-regexp": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.2.tgz", + "integrity": "sha512-GQX3SSMokngb36+whdpRXE+3f9V8UzyAorlYvOGx87ufGHehNTn5lCxrKtLyZ4Yl/wEKnNnr98ZzOwwDZV5ogw==", + "dev": true + }, + "node_modules/pathe": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", + "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", + "dev": true + }, + "node_modules/picocolors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/prettier": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.2.tgz", + "integrity": "sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==", + "dev": true, + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/printable-characters": { + "version": "1.0.42", + "resolved": "https://registry.npmjs.org/printable-characters/-/printable-characters-1.0.42.tgz", + "integrity": "sha512-dKp+C4iXWK4vVYZmYSd0KBH5F/h1HoZRsbJ82AVKRO3PEo8L4lBS/vLwhVtpwwuYcoIsVY+1JYKR268yn480uQ==", + "dev": true + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dev": true, + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/pure-rand": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", + "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ] + }, + "node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve.exports": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", + "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/rollup-plugin-inject": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-inject/-/rollup-plugin-inject-3.0.2.tgz", + "integrity": "sha512-ptg9PQwzs3orn4jkgXJ74bfs5vYz1NCZlSQMBUA0wKcGp5i5pA1AO3fOUEte8enhGUC+iapTCzEWw2jEFFUO/w==", + "deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-inject.", + "dev": true, + "dependencies": { + "estree-walker": "^0.6.1", + "magic-string": "^0.25.3", + "rollup-pluginutils": "^2.8.1" + } + }, + "node_modules/rollup-plugin-node-polyfills": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/rollup-plugin-node-polyfills/-/rollup-plugin-node-polyfills-0.2.1.tgz", + "integrity": "sha512-4kCrKPTJ6sK4/gLL/U5QzVT8cxJcofO0OU74tnB19F40cmuAKSzH5/siithxlofFEjwvw1YAhPmbvGNA6jEroA==", + "dev": true, + "dependencies": { + "rollup-plugin-inject": "^3.0.0" + } + }, + "node_modules/rollup-pluginutils": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", + "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", + "dev": true, + "dependencies": { + "estree-walker": "^0.6.1" + } + }, + "node_modules/selfsigned": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", + "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", + "dev": true, + "dependencies": { + "@types/node-forge": "^1.3.0", + "node-forge": "^1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "deprecated": "Please use @jridgewell/sourcemap-codec instead", + "dev": true + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, + "node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stacktracey": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/stacktracey/-/stacktracey-2.1.8.tgz", + "integrity": "sha512-Kpij9riA+UNg7TnphqjH7/CzctQ/owJGNbFkfEeve4Z4uxT5+JapVLFXcsurIfN34gnTWZNJ/f7NMG0E8JDzTw==", + "dev": true, + "dependencies": { + "as-table": "^1.0.36", + "get-source": "^2.0.12" + } + }, + "node_modules/stoppable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stoppable/-/stoppable-1.1.0.tgz", + "integrity": "sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==", + "dev": true, + "engines": { + "node": ">=4", + "npm": ">=6" + } + }, + "node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "dev": true + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typescript": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.3.tgz", + "integrity": "sha512-/hreyEujaB0w76zKo6717l3L0o/qEUtRgdvUBvlkhoWeOVMjMuHNHk0BRBzikzuGDqNmPQbg5ifMEqsHLiIUcQ==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/ufo": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.5.3.tgz", + "integrity": "sha512-Y7HYmWaFwPUmkoQCUIAYpKqkOf+SbVj/2fJJZ4RJMCfZp0rTGwRbzQD+HghfnhKOjL9E01okqz+ncJskGYfBNw==", + "dev": true + }, + "node_modules/ultralight-s3": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/ultralight-s3/-/ultralight-s3-0.0.3.tgz", + "integrity": "sha512-9AMcXN/QFqUcI36Q1YXeIarVxXGrGAKusvKtP5Z00I8ZCqdQilG6Du6dDgPq+qVo+38U6HpkI1tJ3oOo5j1krw==", + "dev": true, + "engines": { + "node": ">=16" + } + }, + "node_modules/underscore": { + "version": "1.13.6", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz", + "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==", + "dev": true + }, + "node_modules/undici": { + "version": "5.28.4", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.28.4.tgz", + "integrity": "sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==", + "dev": true, + "dependencies": { + "@fastify/busboy": "^2.0.0" + }, + "engines": { + "node": ">=14.0" + } + }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true + }, + "node_modules/unenv": { + "name": "unenv-nightly", + "version": "1.10.0-1717606461.a117952", + "resolved": "https://registry.npmjs.org/unenv-nightly/-/unenv-nightly-1.10.0-1717606461.a117952.tgz", + "integrity": "sha512-u3TfBX02WzbHTpaEfWEKwDijDSFAHcgXkayUZ+MVDrjhLFvgAJzFGTSTmwlEhwWi2exyRQey23ah9wELMM6etg==", + "dev": true, + "dependencies": { + "consola": "^3.2.3", + "defu": "^6.1.4", + "mime": "^3.0.0", + "node-fetch-native": "^1.6.4", + "pathe": "^1.1.2", + "ufo": "^1.5.3" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", + "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.1.2", + "picocolors": "^1.0.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/v8-to-istanbul": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", + "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^2.0.0" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dev": true, + "dependencies": { + "makeerror": "1.0.12" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/workerd": { + "version": "1.20240701.0", + "resolved": "https://registry.npmjs.org/workerd/-/workerd-1.20240701.0.tgz", + "integrity": "sha512-qSgNVqauqzNCij9MaJLF2c2ko3AnFioVSIxMSryGbRK+LvtGr9BKBt6JOxCb24DoJASoJDx3pe3DJHBVydUiBg==", + "dev": true, + "hasInstallScript": true, + "bin": { + "workerd": "bin/workerd" + }, + "engines": { + "node": ">=16" + }, + "optionalDependencies": { + "@cloudflare/workerd-darwin-64": "1.20240701.0", + "@cloudflare/workerd-darwin-arm64": "1.20240701.0", + "@cloudflare/workerd-linux-64": "1.20240701.0", + "@cloudflare/workerd-linux-arm64": "1.20240701.0", + "@cloudflare/workerd-windows-64": "1.20240701.0" + } + }, + "node_modules/wrangler": { + "version": "3.63.0", + "resolved": "https://registry.npmjs.org/wrangler/-/wrangler-3.63.0.tgz", + "integrity": "sha512-FMIGorXhYN161S1qotoIlg9EqpfRsPqtB/fd9J+qXTJ5xpctq4meaQAmRKfLI87cQDdkjUXpQBJyNgBXw4i81Q==", + "dev": true, + "dependencies": { + "@cloudflare/kv-asset-handler": "0.3.4", + "@esbuild-plugins/node-globals-polyfill": "^0.2.3", + "@esbuild-plugins/node-modules-polyfill": "^0.2.2", + "blake3-wasm": "^2.1.5", + "chokidar": "^3.5.3", + "date-fns": "^3.6.0", + "esbuild": "0.17.19", + "miniflare": "3.20240701.0", + "nanoid": "^3.3.3", + "path-to-regexp": "^6.2.0", + "resolve": "^1.22.8", + "resolve.exports": "^2.0.2", + "selfsigned": "^2.0.1", + "source-map": "^0.6.1", + "unenv": "npm:unenv-nightly@1.10.0-1717606461.a117952", + "xxhash-wasm": "^1.0.1" + }, + "bin": { + "wrangler": "bin/wrangler.js", + "wrangler2": "bin/wrangler.js" + }, + "engines": { + "node": ">=16.17.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "@cloudflare/workers-types": "^4.20240620.0" + }, + "peerDependenciesMeta": { + "@cloudflare/workers-types": { + "optional": true + } + } + }, + "node_modules/wrangler/node_modules/@esbuild/android-arm": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz", + "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/wrangler/node_modules/@esbuild/android-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz", + "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/wrangler/node_modules/@esbuild/android-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.19.tgz", + "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/wrangler/node_modules/@esbuild/darwin-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz", + "integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/wrangler/node_modules/@esbuild/darwin-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz", + "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/wrangler/node_modules/@esbuild/freebsd-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz", + "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/wrangler/node_modules/@esbuild/freebsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz", + "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/wrangler/node_modules/@esbuild/linux-arm": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz", + "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/wrangler/node_modules/@esbuild/linux-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz", + "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/wrangler/node_modules/@esbuild/linux-ia32": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz", + "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/wrangler/node_modules/@esbuild/linux-loong64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz", + "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/wrangler/node_modules/@esbuild/linux-mips64el": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz", + "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/wrangler/node_modules/@esbuild/linux-ppc64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz", + "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/wrangler/node_modules/@esbuild/linux-riscv64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz", + "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/wrangler/node_modules/@esbuild/linux-s390x": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz", + "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/wrangler/node_modules/@esbuild/linux-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz", + "integrity": "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/wrangler/node_modules/@esbuild/netbsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz", + "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/wrangler/node_modules/@esbuild/openbsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz", + "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/wrangler/node_modules/@esbuild/sunos-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz", + "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/wrangler/node_modules/@esbuild/win32-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz", + "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/wrangler/node_modules/@esbuild/win32-ia32": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz", + "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/wrangler/node_modules/@esbuild/win32-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz", + "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/wrangler/node_modules/esbuild": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.19.tgz", + "integrity": "sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.17.19", + "@esbuild/android-arm64": "0.17.19", + "@esbuild/android-x64": "0.17.19", + "@esbuild/darwin-arm64": "0.17.19", + "@esbuild/darwin-x64": "0.17.19", + "@esbuild/freebsd-arm64": "0.17.19", + "@esbuild/freebsd-x64": "0.17.19", + "@esbuild/linux-arm": "0.17.19", + "@esbuild/linux-arm64": "0.17.19", + "@esbuild/linux-ia32": "0.17.19", + "@esbuild/linux-loong64": "0.17.19", + "@esbuild/linux-mips64el": "0.17.19", + "@esbuild/linux-ppc64": "0.17.19", + "@esbuild/linux-riscv64": "0.17.19", + "@esbuild/linux-s390x": "0.17.19", + "@esbuild/linux-x64": "0.17.19", + "@esbuild/netbsd-x64": "0.17.19", + "@esbuild/openbsd-x64": "0.17.19", + "@esbuild/sunos-x64": "0.17.19", + "@esbuild/win32-arm64": "0.17.19", + "@esbuild/win32-ia32": "0.17.19", + "@esbuild/win32-x64": "0.17.19" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/ws": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xxhash-wasm": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/xxhash-wasm/-/xxhash-wasm-1.0.2.tgz", + "integrity": "sha512-ibF0Or+FivM9lNrg+HGJfVX8WJqgo+kCLDc4vx6xMeTce7Aj+DLttKbxxRR/gNLSAelRc1omAPlJ77N/Jem07A==", + "dev": true + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/youch": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/youch/-/youch-3.3.3.tgz", + "integrity": "sha512-qSFXUk3UZBLfggAW3dJKg0BMblG5biqSF8M34E06o5CSsZtH92u9Hqmj2RzGiHDi64fhe83+4tENFP2DB6t6ZA==", + "dev": true, + "dependencies": { + "cookie": "^0.5.0", + "mustache": "^4.2.0", + "stacktracey": "^2.1.8" + } + }, + "node_modules/zod": { + "version": "3.23.8", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.23.8.tgz", + "integrity": "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + } + }, + "dependencies": { + "@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "@babel/code-frame": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", + "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", + "dev": true, + "requires": { + "@babel/highlight": "^7.24.7", + "picocolors": "^1.0.0" + } + }, + "@babel/compat-data": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.7.tgz", + "integrity": "sha512-qJzAIcv03PyaWqxRgO4mSU3lihncDT296vnyuE2O8uA4w3UHWI4S3hgeZd1L8W1Bft40w9JxJ2b412iDUFFRhw==", + "dev": true + }, + "@babel/core": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.7.tgz", + "integrity": "sha512-nykK+LEK86ahTkX/3TgauT0ikKoNCfKHEaZYTUVupJdTLzGNvrblu4u6fa7DhZONAltdf8e662t/abY8idrd/g==", + "dev": true, + "requires": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.24.7", + "@babel/helper-compilation-targets": "^7.24.7", + "@babel/helper-module-transforms": "^7.24.7", + "@babel/helpers": "^7.24.7", + "@babel/parser": "^7.24.7", + "@babel/template": "^7.24.7", + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + } + }, + "@babel/generator": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.7.tgz", + "integrity": "sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==", + "dev": true, + "requires": { + "@babel/types": "^7.24.7", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^2.5.1" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.7.tgz", + "integrity": "sha512-ctSdRHBi20qWOfy27RUb4Fhp07KSJ3sXcuSvTrXrc4aG8NSYDo1ici3Vhg9bg69y5bj0Mr1lh0aeEgTvc12rMg==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.24.7", + "@babel/helper-validator-option": "^7.24.7", + "browserslist": "^4.22.2", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + } + }, + "@babel/helper-environment-visitor": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz", + "integrity": "sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==", + "dev": true, + "requires": { + "@babel/types": "^7.24.7" + } + }, + "@babel/helper-function-name": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.24.7.tgz", + "integrity": "sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==", + "dev": true, + "requires": { + "@babel/template": "^7.24.7", + "@babel/types": "^7.24.7" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.7.tgz", + "integrity": "sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==", + "dev": true, + "requires": { + "@babel/types": "^7.24.7" + } + }, + "@babel/helper-module-imports": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", + "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", + "dev": true, + "requires": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + } + }, + "@babel/helper-module-transforms": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.7.tgz", + "integrity": "sha512-1fuJEwIrp+97rM4RWdO+qrRsZlAeL1lQJoPqtCYWv0NL115XM93hIH4CSRln2w52SqvmY5hqdtauB6QFCDiZNQ==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-simple-access": "^7.24.7", + "@babel/helper-split-export-declaration": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.7.tgz", + "integrity": "sha512-Rq76wjt7yz9AAc1KnlRKNAi/dMSVWgDRx43FHoJEbcYU6xOWaE2dVPwcdTukJrjxS65GITyfbvEYHvkirZ6uEg==", + "dev": true + }, + "@babel/helper-simple-access": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", + "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", + "dev": true, + "requires": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz", + "integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==", + "dev": true, + "requires": { + "@babel/types": "^7.24.7" + } + }, + "@babel/helper-string-parser": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.7.tgz", + "integrity": "sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==", + "dev": true + }, + "@babel/helper-validator-identifier": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", + "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", + "dev": true + }, + "@babel/helper-validator-option": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.7.tgz", + "integrity": "sha512-yy1/KvjhV/ZCL+SM7hBrvnZJ3ZuT9OuZgIJAGpPEToANvc3iM6iDvBnRjtElWibHU6n8/LPR/EjX9EtIEYO3pw==", + "dev": true + }, + "@babel/helpers": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.7.tgz", + "integrity": "sha512-NlmJJtvcw72yRJRcnCmGvSi+3jDEg8qFu3z0AFoymmzLx5ERVWyzd9kVXr7Th9/8yIJi2Zc6av4Tqz3wFs8QWg==", + "dev": true, + "requires": { + "@babel/template": "^7.24.7", + "@babel/types": "^7.24.7" + } + }, + "@babel/highlight": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", + "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.24.7", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@babel/parser": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.7.tgz", + "integrity": "sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==", + "dev": true + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-jsx": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.7.tgz", + "integrity": "sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.7" + } + }, + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-typescript": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.7.tgz", + "integrity": "sha512-c/+fVeJBB0FeKsFvwytYiUD+LBvhHjGSI0g446PRGdSVGZLRNArBUno2PETbAly3tpiNAQR5XaZ+JslxkotsbA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.7" + } + }, + "@babel/template": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.7.tgz", + "integrity": "sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.24.7", + "@babel/parser": "^7.24.7", + "@babel/types": "^7.24.7" + } + }, + "@babel/traverse": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.7.tgz", + "integrity": "sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.24.7", + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-function-name": "^7.24.7", + "@babel/helper-hoist-variables": "^7.24.7", + "@babel/helper-split-export-declaration": "^7.24.7", + "@babel/parser": "^7.24.7", + "@babel/types": "^7.24.7", + "debug": "^4.3.1", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.7.tgz", + "integrity": "sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==", + "dev": true, + "requires": { + "@babel/helper-string-parser": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7", + "to-fast-properties": "^2.0.0" + } + }, + "@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, + "@cloudflare/kv-asset-handler": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@cloudflare/kv-asset-handler/-/kv-asset-handler-0.3.4.tgz", + "integrity": "sha512-YLPHc8yASwjNkmcDMQMY35yiWjoKAKnhUbPRszBRS0YgH+IXtsMp61j+yTcnCE3oO2DgP0U3iejLC8FTtKDC8Q==", + "dev": true, + "requires": { + "mime": "^3.0.0" + } + }, + "@cloudflare/workerd-darwin-64": { + "version": "1.20240701.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-64/-/workerd-darwin-64-1.20240701.0.tgz", + "integrity": "sha512-XAZa4ZP+qyTn6JQQACCPH09hGZXP2lTnWKkmg5mPwT8EyRzCKLkczAf98vPP5bq7JZD/zORdFWRY0dOTap8zTQ==", + "dev": true, + "optional": true + }, + "@cloudflare/workerd-darwin-arm64": { + "version": "1.20240701.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-arm64/-/workerd-darwin-arm64-1.20240701.0.tgz", + "integrity": "sha512-w80ZVAgfH4UwTz7fXZtk7KmS2FzlXniuQm4ku4+cIgRTilBAuKqjpOjwUCbx5g13Gqcm9NuiHce+IDGtobRTIQ==", + "dev": true, + "optional": true + }, + "@cloudflare/workerd-linux-64": { + "version": "1.20240701.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-64/-/workerd-linux-64-1.20240701.0.tgz", + "integrity": "sha512-UWLr/Anxwwe/25nGv451MNd2jhREmPt/ws17DJJqTLAx6JxwGWA15MeitAIzl0dbxRFAJa+0+R8ag2WR3F/D6g==", + "dev": true, + "optional": true + }, + "@cloudflare/workerd-linux-arm64": { + "version": "1.20240701.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-arm64/-/workerd-linux-arm64-1.20240701.0.tgz", + "integrity": "sha512-3kCnF9kYgov1ggpuWbgpXt4stPOIYtVmPCa7MO2xhhA0TWP6JDUHRUOsnmIgKrvDjXuXqlK16cdg3v+EWsaPJg==", + "dev": true, + "optional": true + }, + "@cloudflare/workerd-windows-64": { + "version": "1.20240701.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-windows-64/-/workerd-windows-64-1.20240701.0.tgz", + "integrity": "sha512-6IPGITRAeS67j3BH1rN4iwYWDt47SqJG7KlZJ5bB4UaNAia4mvMBSy/p2p4vA89bbXoDRjMtEvRu7Robu6O7hQ==", + "dev": true, + "optional": true + }, + "@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "dependencies": { + "@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + } + } + }, + "@esbuild-plugins/node-globals-polyfill": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@esbuild-plugins/node-globals-polyfill/-/node-globals-polyfill-0.2.3.tgz", + "integrity": "sha512-r3MIryXDeXDOZh7ih1l/yE9ZLORCd5e8vWg02azWRGj5SPTuoh69A2AIyn0Z31V/kHBfZ4HgWJ+OK3GTTwLmnw==", + "dev": true, + "requires": {} + }, + "@esbuild-plugins/node-modules-polyfill": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@esbuild-plugins/node-modules-polyfill/-/node-modules-polyfill-0.2.2.tgz", + "integrity": "sha512-LXV7QsWJxRuMYvKbiznh+U1ilIop3g2TeKRzUxOG5X3YITc8JyyTa90BmLwqqv0YnX4v32CSlG+vsziZp9dMvA==", + "dev": true, + "requires": { + "escape-string-regexp": "^4.0.0", + "rollup-plugin-node-polyfills": "^0.2.1" + }, + "dependencies": { + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + } + } + }, + "@esbuild/aix-ppc64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.23.0.tgz", + "integrity": "sha512-3sG8Zwa5fMcA9bgqB8AfWPQ+HFke6uD3h1s3RIwUNK8EG7a4buxvuFTs3j1IMs2NXAk9F30C/FF4vxRgQCcmoQ==", + "dev": true, + "optional": true + }, + "@esbuild/android-arm": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.23.0.tgz", + "integrity": "sha512-+KuOHTKKyIKgEEqKbGTK8W7mPp+hKinbMBeEnNzjJGyFcWsfrXjSTNluJHCY1RqhxFurdD8uNXQDei7qDlR6+g==", + "dev": true, + "optional": true + }, + "@esbuild/android-arm64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.23.0.tgz", + "integrity": "sha512-EuHFUYkAVfU4qBdyivULuu03FhJO4IJN9PGuABGrFy4vUuzk91P2d+npxHcFdpUnfYKy0PuV+n6bKIpHOB3prQ==", + "dev": true, + "optional": true + }, + "@esbuild/android-x64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.23.0.tgz", + "integrity": "sha512-WRrmKidLoKDl56LsbBMhzTTBxrsVwTKdNbKDalbEZr0tcsBgCLbEtoNthOW6PX942YiYq8HzEnb4yWQMLQuipQ==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-arm64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.23.0.tgz", + "integrity": "sha512-YLntie/IdS31H54Ogdn+v50NuoWF5BDkEUFpiOChVa9UnKpftgwzZRrI4J132ETIi+D8n6xh9IviFV3eXdxfow==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-x64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.23.0.tgz", + "integrity": "sha512-IMQ6eme4AfznElesHUPDZ+teuGwoRmVuuixu7sv92ZkdQcPbsNHzutd+rAfaBKo8YK3IrBEi9SLLKWJdEvJniQ==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-arm64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.0.tgz", + "integrity": "sha512-0muYWCng5vqaxobq6LB3YNtevDFSAZGlgtLoAc81PjUfiFz36n4KMpwhtAd4he8ToSI3TGyuhyx5xmiWNYZFyw==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-x64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.23.0.tgz", + "integrity": "sha512-XKDVu8IsD0/q3foBzsXGt/KjD/yTKBCIwOHE1XwiXmrRwrX6Hbnd5Eqn/WvDekddK21tfszBSrE/WMaZh+1buQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.23.0.tgz", + "integrity": "sha512-SEELSTEtOFu5LPykzA395Mc+54RMg1EUgXP+iw2SJ72+ooMwVsgfuwXo5Fn0wXNgWZsTVHwY2cg4Vi/bOD88qw==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.23.0.tgz", + "integrity": "sha512-j1t5iG8jE7BhonbsEg5d9qOYcVZv/Rv6tghaXM/Ug9xahM0nX/H2gfu6X6z11QRTMT6+aywOMA8TDkhPo8aCGw==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ia32": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.23.0.tgz", + "integrity": "sha512-P7O5Tkh2NbgIm2R6x1zGJJsnacDzTFcRWZyTTMgFdVit6E98LTxO+v8LCCLWRvPrjdzXHx9FEOA8oAZPyApWUA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-loong64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.23.0.tgz", + "integrity": "sha512-InQwepswq6urikQiIC/kkx412fqUZudBO4SYKu0N+tGhXRWUqAx+Q+341tFV6QdBifpjYgUndV1hhMq3WeJi7A==", + "dev": true, + "optional": true + }, + "@esbuild/linux-mips64el": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.23.0.tgz", + "integrity": "sha512-J9rflLtqdYrxHv2FqXE2i1ELgNjT+JFURt/uDMoPQLcjWQA5wDKgQA4t/dTqGa88ZVECKaD0TctwsUfHbVoi4w==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ppc64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.23.0.tgz", + "integrity": "sha512-cShCXtEOVc5GxU0fM+dsFD10qZ5UpcQ8AM22bYj0u/yaAykWnqXJDpd77ublcX6vdDsWLuweeuSNZk4yUxZwtw==", + "dev": true, + "optional": true + }, + "@esbuild/linux-riscv64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.23.0.tgz", + "integrity": "sha512-HEtaN7Y5UB4tZPeQmgz/UhzoEyYftbMXrBCUjINGjh3uil+rB/QzzpMshz3cNUxqXN7Vr93zzVtpIDL99t9aRw==", + "dev": true, + "optional": true + }, + "@esbuild/linux-s390x": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.23.0.tgz", + "integrity": "sha512-WDi3+NVAuyjg/Wxi+o5KPqRbZY0QhI9TjrEEm+8dmpY9Xir8+HE/HNx2JoLckhKbFopW0RdO2D72w8trZOV+Wg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-x64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.23.0.tgz", + "integrity": "sha512-a3pMQhUEJkITgAw6e0bWA+F+vFtCciMjW/LPtoj99MhVt+Mfb6bbL9hu2wmTZgNd994qTAEw+U/r6k3qHWWaOQ==", + "dev": true, + "optional": true + }, + "@esbuild/netbsd-x64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.23.0.tgz", + "integrity": "sha512-cRK+YDem7lFTs2Q5nEv/HHc4LnrfBCbH5+JHu6wm2eP+d8OZNoSMYgPZJq78vqQ9g+9+nMuIsAO7skzphRXHyw==", + "dev": true, + "optional": true + }, + "@esbuild/openbsd-arm64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.23.0.tgz", + "integrity": "sha512-suXjq53gERueVWu0OKxzWqk7NxiUWSUlrxoZK7usiF50C6ipColGR5qie2496iKGYNLhDZkPxBI3erbnYkU0rQ==", + "dev": true, + "optional": true + }, + "@esbuild/openbsd-x64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.23.0.tgz", + "integrity": "sha512-6p3nHpby0DM/v15IFKMjAaayFhqnXV52aEmv1whZHX56pdkK+MEaLoQWj+H42ssFarP1PcomVhbsR4pkz09qBg==", + "dev": true, + "optional": true + }, + "@esbuild/sunos-x64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.23.0.tgz", + "integrity": "sha512-BFelBGfrBwk6LVrmFzCq1u1dZbG4zy/Kp93w2+y83Q5UGYF1d8sCzeLI9NXjKyujjBBniQa8R8PzLFAUrSM9OA==", + "dev": true, + "optional": true + }, + "@esbuild/win32-arm64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.23.0.tgz", + "integrity": "sha512-lY6AC8p4Cnb7xYHuIxQ6iYPe6MfO2CC43XXKo9nBXDb35krYt7KGhQnOkRGar5psxYkircpCqfbNDB4uJbS2jQ==", + "dev": true, + "optional": true + }, + "@esbuild/win32-ia32": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.23.0.tgz", + "integrity": "sha512-7L1bHlOTcO4ByvI7OXVI5pNN6HSu6pUQq9yodga8izeuB1KcT2UkHaH6118QJwopExPn0rMHIseCTx1CRo/uNA==", + "dev": true, + "optional": true + }, + "@esbuild/win32-x64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.23.0.tgz", + "integrity": "sha512-Arm+WgUFLUATuoxCJcahGuk6Yj9Pzxd6l11Zb/2aAuv5kWWvvfhLFo2fni4uSK5vzlUdCGZ/BdV5tH8klj8p8g==", + "dev": true, + "optional": true + }, + "@fastify/busboy": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz", + "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==", + "dev": true + }, + "@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "requires": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + } + }, + "@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true + }, + "@jest/console": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", + "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", + "dev": true, + "requires": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0" + } + }, + "@jest/core": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", + "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", + "dev": true, + "requires": { + "@jest/console": "^29.7.0", + "@jest/reporters": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^29.7.0", + "jest-config": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-resolve-dependencies": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "jest-watcher": "^29.7.0", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "@jest/environment": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", + "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", + "dev": true, + "requires": { + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0" + } + }, + "@jest/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", + "dev": true, + "requires": { + "expect": "^29.7.0", + "jest-snapshot": "^29.7.0" + } + }, + "@jest/expect-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", + "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", + "dev": true, + "requires": { + "jest-get-type": "^29.6.3" + } + }, + "@jest/fake-timers": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", + "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", + "dev": true, + "requires": { + "@jest/types": "^29.6.3", + "@sinonjs/fake-timers": "^10.0.2", + "@types/node": "*", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + } + }, + "@jest/globals": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", + "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", + "dev": true, + "requires": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/types": "^29.6.3", + "jest-mock": "^29.7.0" + } + }, + "@jest/reporters": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", + "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", + "dev": true, + "requires": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^6.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "slash": "^3.0.0", + "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", + "v8-to-istanbul": "^9.0.1" + } + }, + "@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "dev": true, + "requires": { + "@sinclair/typebox": "^0.27.8" + } + }, + "@jest/source-map": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", + "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.18", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" + } + }, + "@jest/test-result": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", + "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", + "dev": true, + "requires": { + "@jest/console": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + } + }, + "@jest/test-sequencer": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", + "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", + "dev": true, + "requires": { + "@jest/test-result": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "slash": "^3.0.0" + } + }, + "@jest/transform": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", + "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", + "dev": true, + "requires": { + "@babel/core": "^7.11.6", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" + } + }, + "@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, + "requires": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + } + }, + "@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true + }, + "@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true + }, + "@sinonjs/commons": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", + "dev": true, + "requires": { + "type-detect": "4.0.8" + } + }, + "@sinonjs/fake-timers": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "dev": true, + "requires": { + "@sinonjs/commons": "^3.0.0" + } + }, + "@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "requires": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "@types/babel__generator": { + "version": "7.6.8", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", + "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@types/babel__traverse": { + "version": "7.20.6", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", + "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", + "dev": true, + "requires": { + "@babel/types": "^7.20.7" + } + }, + "@types/graceful-fs": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", + "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "dev": true + }, + "@types/istanbul-lib-report": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "*" + } + }, + "@types/istanbul-reports": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "dev": true, + "requires": { + "@types/istanbul-lib-report": "*" + } + }, + "@types/node": { + "version": "20.14.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.9.tgz", + "integrity": "sha512-06OCtnTXtWOZBJlRApleWndH4JsRVs1pDCc8dLSQp+7PpUpX3ePdHyeNSFTeSe7FtKyQkrlPvHwJOW3SLd8Oyg==", + "dev": true, + "requires": { + "undici-types": "~5.26.4" + } + }, + "@types/node-forge": { + "version": "1.3.11", + "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz", + "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/stack-utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", + "dev": true + }, + "@types/yargs": { + "version": "17.0.32", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", + "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "dev": true + }, + "acorn": { + "version": "8.12.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", + "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", + "dev": true + }, + "acorn-walk": { + "version": "8.3.3", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.3.tgz", + "integrity": "sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==", + "dev": true, + "requires": { + "acorn": "^8.11.0" + } + }, + "ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "requires": { + "type-fest": "^0.21.3" + } + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "as-table": { + "version": "1.0.55", + "resolved": "https://registry.npmjs.org/as-table/-/as-table-1.0.55.tgz", + "integrity": "sha512-xvsWESUJn0JN421Xb9MQw6AsMHRCUknCe0Wjlxvjud80mU4E6hQf1A6NzQKcYNmYw62MfzEtXc+badstZP3JpQ==", + "dev": true, + "requires": { + "printable-characters": "^1.0.42" + } + }, + "avro-js": { + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/avro-js/-/avro-js-1.11.3.tgz", + "integrity": "sha512-B1b0wI5iwSkVwj3RQWRzW99/LGoYl6df9j1kWime8r8b0dXCdKU7t7mEOFkOpQFaT/I9JXaL7KAIxM+/3TUk1A==", + "dev": true, + "requires": { + "underscore": "^1.13.2" + } + }, + "babel-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", + "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", + "dev": true, + "requires": { + "@jest/transform": "^29.7.0", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^29.6.3", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + } + }, + "babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "dependencies": { + "istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dev": true, + "requires": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + } + } + } + }, + "babel-plugin-jest-hoist": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", + "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", + "dev": true, + "requires": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" + } + }, + "babel-preset-current-node-syntax": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "dev": true, + "requires": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.8.3" + } + }, + "babel-preset-jest": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", + "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", + "dev": true, + "requires": { + "babel-plugin-jest-hoist": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0" + } + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true + }, + "blake3-wasm": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/blake3-wasm/-/blake3-wasm-2.1.5.tgz", + "integrity": "sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g==", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "requires": { + "fill-range": "^7.1.1" + } + }, + "browserslist": { + "version": "4.23.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.1.tgz", + "integrity": "sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001629", + "electron-to-chromium": "^1.4.796", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.0.16" + } + }, + "bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "requires": { + "node-int64": "^0.4.0" + } + }, + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "caniuse-lite": { + "version": "1.0.30001640", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001640.tgz", + "integrity": "sha512-lA4VMpW0PSUrFnkmVuEKBUovSWKhj7puyCg8StBChgu298N1AtuF1sKWEvfDuimSEDbhlb/KqPKC3fs1HbuQUA==", + "dev": true + }, + "capnp-ts": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/capnp-ts/-/capnp-ts-0.7.0.tgz", + "integrity": "sha512-XKxXAC3HVPv7r674zP0VC3RTXz+/JKhfyw94ljvF80yynK6VkTnqE3jMuN8b3dUVmmc43TjyxjW4KTsmB3c86g==", + "dev": true, + "requires": { + "debug": "^4.3.1", + "tslib": "^2.2.0" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true + }, + "chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, + "ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true + }, + "cjs-module-lexer": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.3.1.tgz", + "integrity": "sha512-a3KdPAANPbNE4ZUv9h6LckSl9zLsYOP4MBmhIPkRaeyybt+r4UghLvq+xw/YwUcC1gqylCkL4rdVs3Lwupjm4Q==", + "dev": true + }, + "cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + } + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "dev": true + }, + "collect-v8-coverage": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", + "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", + "dev": true + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "consola": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/consola/-/consola-3.2.3.tgz", + "integrity": "sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==", + "dev": true + }, + "convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "dev": true + }, + "create-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", + "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", + "dev": true, + "requires": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "prompts": "^2.0.1" + } + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "data-uri-to-buffer": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-2.0.2.tgz", + "integrity": "sha512-ND9qDTLc6diwj+Xe5cdAgVTbLVdXbtxTJRXRhli8Mowuaan+0EJOtdqJ0QCHNSSPyoXGx9HX2/VMnKeC34AChA==", + "dev": true + }, + "date-fns": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-3.6.0.tgz", + "integrity": "sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==", + "dev": true + }, + "debug": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "dedent": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz", + "integrity": "sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==", + "dev": true, + "requires": {} + }, + "deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true + }, + "defu": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz", + "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==", + "dev": true + }, + "detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true + }, + "diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true + }, + "electron-to-chromium": { + "version": "1.4.816", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.816.tgz", + "integrity": "sha512-EKH5X5oqC6hLmiS7/vYtZHZFTNdhsYG5NVPRN6Yn0kQHNBlT59+xSM8HBy66P5fxWpKgZbPqb+diC64ng295Jw==", + "dev": true + }, + "emittery": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "esbuild": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.23.0.tgz", + "integrity": "sha512-1lvV17H2bMYda/WaFb2jLPeHU3zml2k4/yagNMG8Q/YtfMjCwEUZa2eXXMgZTVSL5q1n4H7sQ0X6CdJDqqeCFA==", + "dev": true, + "requires": { + "@esbuild/aix-ppc64": "0.23.0", + "@esbuild/android-arm": "0.23.0", + "@esbuild/android-arm64": "0.23.0", + "@esbuild/android-x64": "0.23.0", + "@esbuild/darwin-arm64": "0.23.0", + "@esbuild/darwin-x64": "0.23.0", + "@esbuild/freebsd-arm64": "0.23.0", + "@esbuild/freebsd-x64": "0.23.0", + "@esbuild/linux-arm": "0.23.0", + "@esbuild/linux-arm64": "0.23.0", + "@esbuild/linux-ia32": "0.23.0", + "@esbuild/linux-loong64": "0.23.0", + "@esbuild/linux-mips64el": "0.23.0", + "@esbuild/linux-ppc64": "0.23.0", + "@esbuild/linux-riscv64": "0.23.0", + "@esbuild/linux-s390x": "0.23.0", + "@esbuild/linux-x64": "0.23.0", + "@esbuild/netbsd-x64": "0.23.0", + "@esbuild/openbsd-arm64": "0.23.0", + "@esbuild/openbsd-x64": "0.23.0", + "@esbuild/sunos-x64": "0.23.0", + "@esbuild/win32-arm64": "0.23.0", + "@esbuild/win32-ia32": "0.23.0", + "@esbuild/win32-x64": "0.23.0" + } + }, + "escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "dev": true + }, + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "estree-walker": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", + "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", + "dev": true + }, + "execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + } + }, + "exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "dev": true + }, + "exit-hook": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-2.2.1.tgz", + "integrity": "sha512-eNTPlAD67BmP31LDINZ3U7HSF8l57TxOY2PmBJ1shpCvpnxBF93mWCE8YHBnXs8qiUZJc9WDcWIeC3a2HIAMfw==", + "dev": true + }, + "expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", + "dev": true, + "requires": { + "@jest/expect-utils": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0" + } + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "dev": true, + "requires": { + "bser": "2.1.1" + } + }, + "fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true + }, + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true + }, + "get-source": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/get-source/-/get-source-2.0.12.tgz", + "integrity": "sha512-X5+4+iD+HoSeEED+uwrQ07BOQr0kEDFMVqqpBuI+RaZBpBpHCuXxo70bjar6f0b0u/DQJsJ7ssurpP0V60Az+w==", + "dev": true, + "requires": { + "data-uri-to-buffer": "^2.0.0", + "source-map": "^0.6.1" + } + }, + "get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + }, + "graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "requires": { + "function-bind": "^1.1.2" + } + }, + "html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true + }, + "import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "dev": true, + "requires": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-core-module": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.14.0.tgz", + "integrity": "sha512-a5dFJih5ZLYlRtDc0dZWP7RiKr6xIKzmn/oAYCDvdLThadVgyJwlaoQPmRtMSpz+rk0OGAgIu+TcM9HUF0fk1A==", + "dev": true, + "requires": { + "hasown": "^2.0.2" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true + }, + "istanbul-lib-instrument": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", + "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", + "dev": true, + "requires": { + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" + }, + "dependencies": { + "semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "dev": true + } + } + }, + "istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + } + }, + "istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + } + }, + "istanbul-reports": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", + "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", + "dev": true, + "requires": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + } + }, + "jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", + "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", + "dev": true, + "requires": { + "@jest/core": "^29.7.0", + "@jest/types": "^29.6.3", + "import-local": "^3.0.2", + "jest-cli": "^29.7.0" + } + }, + "jest-changed-files": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", + "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", + "dev": true, + "requires": { + "execa": "^5.0.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0" + } + }, + "jest-circus": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", + "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", + "dev": true, + "requires": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^1.0.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^29.7.0", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0", + "pretty-format": "^29.7.0", + "pure-rand": "^6.0.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + } + }, + "jest-cli": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", + "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", + "dev": true, + "requires": { + "@jest/core": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "create-jest": "^29.7.0", + "exit": "^0.1.2", + "import-local": "^3.0.2", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "yargs": "^17.3.1" + } + }, + "jest-config": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", + "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", + "dev": true, + "requires": { + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-jest": "^29.7.0", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + } + }, + "jest-diff": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + } + }, + "jest-docblock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", + "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", + "dev": true, + "requires": { + "detect-newline": "^3.0.0" + } + }, + "jest-each": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", + "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", + "dev": true, + "requires": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "jest-util": "^29.7.0", + "pretty-format": "^29.7.0" + } + }, + "jest-environment-node": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", + "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", + "dev": true, + "requires": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + } + }, + "jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "dev": true + }, + "jest-haste-map": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", + "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "dev": true, + "requires": { + "@jest/types": "^29.6.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "fsevents": "^2.3.2", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + } + }, + "jest-leak-detector": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", + "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", + "dev": true, + "requires": { + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + } + }, + "jest-matcher-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", + "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + } + }, + "jest-message-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + } + }, + "jest-mock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", + "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", + "dev": true, + "requires": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-util": "^29.7.0" + } + }, + "jest-pnp-resolver": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", + "dev": true, + "requires": {} + }, + "jest-regex-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "dev": true + }, + "jest-resolve": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", + "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "resolve": "^1.20.0", + "resolve.exports": "^2.0.0", + "slash": "^3.0.0" + } + }, + "jest-resolve-dependencies": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", + "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", + "dev": true, + "requires": { + "jest-regex-util": "^29.6.3", + "jest-snapshot": "^29.7.0" + } + }, + "jest-runner": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", + "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", + "dev": true, + "requires": { + "@jest/console": "^29.7.0", + "@jest/environment": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-leak-detector": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-resolve": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-util": "^29.7.0", + "jest-watcher": "^29.7.0", + "jest-worker": "^29.7.0", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" + } + }, + "jest-runtime": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", + "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", + "dev": true, + "requires": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/globals": "^29.7.0", + "@jest/source-map": "^29.6.3", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + } + }, + "jest-snapshot": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", + "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", + "dev": true, + "requires": { + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "natural-compare": "^1.4.0", + "pretty-format": "^29.7.0", + "semver": "^7.5.3" + }, + "dependencies": { + "semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "dev": true + } + } + }, + "jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, + "requires": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + } + }, + "jest-validate": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", + "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", + "dev": true, + "requires": { + "@jest/types": "^29.6.3", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "leven": "^3.1.0", + "pretty-format": "^29.7.0" + }, + "dependencies": { + "camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true + } + } + }, + "jest-watcher": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", + "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", + "dev": true, + "requires": { + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "jest-util": "^29.7.0", + "string-length": "^4.0.1" + } + }, + "jest-worker": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "dev": true, + "requires": { + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "dependencies": { + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true + }, + "kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true + }, + "leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true + }, + "lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "dev": true, + "requires": { + "sourcemap-codec": "^1.4.8" + } + }, + "make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "requires": { + "semver": "^7.5.3" + }, + "dependencies": { + "semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "dev": true + } + } + }, + "makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, + "requires": { + "tmpl": "1.0.5" + } + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "micromatch": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", + "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", + "dev": true, + "requires": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + } + }, + "mime": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", + "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", + "dev": true + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, + "miniflare": { + "version": "3.20240701.0", + "resolved": "https://registry.npmjs.org/miniflare/-/miniflare-3.20240701.0.tgz", + "integrity": "sha512-m9+I+7JNyqDGftCMKp9cK9pCZkK72hAL2mM9IWwhct+ZmucLBA8Uu6+rHQqA5iod86cpwOkrB2PrPA3wx9YNgw==", + "dev": true, + "requires": { + "@cspotcode/source-map-support": "0.8.1", + "acorn": "^8.8.0", + "acorn-walk": "^8.2.0", + "capnp-ts": "^0.7.0", + "exit-hook": "^2.2.1", + "glob-to-regexp": "^0.4.1", + "stoppable": "^1.1.0", + "undici": "^5.28.4", + "workerd": "1.20240701.0", + "ws": "^8.17.1", + "youch": "^3.2.2", + "zod": "^3.22.3" + } + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "mustache": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz", + "integrity": "sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==", + "dev": true + }, + "nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "dev": true + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node-fetch-native": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.4.tgz", + "integrity": "sha512-IhOigYzAKHd244OC0JIMIUrjzctirCmPkaIfhDeGcEETWof5zKYUW7e7MYvChGWh/4CJeXEgsRyGzuF334rOOQ==", + "dev": true + }, + "node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "dev": true + }, + "node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true + }, + "node-releases": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", + "dev": true + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + }, + "dependencies": { + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + } + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "path-to-regexp": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.2.tgz", + "integrity": "sha512-GQX3SSMokngb36+whdpRXE+3f9V8UzyAorlYvOGx87ufGHehNTn5lCxrKtLyZ4Yl/wEKnNnr98ZzOwwDZV5ogw==", + "dev": true + }, + "pathe": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", + "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", + "dev": true + }, + "picocolors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", + "dev": true + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "dev": true + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "requires": { + "find-up": "^4.0.0" + } + }, + "prettier": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.2.tgz", + "integrity": "sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==", + "dev": true + }, + "pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "requires": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + } + } + }, + "printable-characters": { + "version": "1.0.42", + "resolved": "https://registry.npmjs.org/printable-characters/-/printable-characters-1.0.42.tgz", + "integrity": "sha512-dKp+C4iXWK4vVYZmYSd0KBH5F/h1HoZRsbJ82AVKRO3PEo8L4lBS/vLwhVtpwwuYcoIsVY+1JYKR268yn480uQ==", + "dev": true + }, + "prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dev": true, + "requires": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + } + }, + "pure-rand": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", + "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", + "dev": true + }, + "react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true + }, + "resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "requires": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "requires": { + "resolve-from": "^5.0.0" + } + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + }, + "resolve.exports": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", + "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", + "dev": true + }, + "rollup-plugin-inject": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-inject/-/rollup-plugin-inject-3.0.2.tgz", + "integrity": "sha512-ptg9PQwzs3orn4jkgXJ74bfs5vYz1NCZlSQMBUA0wKcGp5i5pA1AO3fOUEte8enhGUC+iapTCzEWw2jEFFUO/w==", + "dev": true, + "requires": { + "estree-walker": "^0.6.1", + "magic-string": "^0.25.3", + "rollup-pluginutils": "^2.8.1" + } + }, + "rollup-plugin-node-polyfills": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/rollup-plugin-node-polyfills/-/rollup-plugin-node-polyfills-0.2.1.tgz", + "integrity": "sha512-4kCrKPTJ6sK4/gLL/U5QzVT8cxJcofO0OU74tnB19F40cmuAKSzH5/siithxlofFEjwvw1YAhPmbvGNA6jEroA==", + "dev": true, + "requires": { + "rollup-plugin-inject": "^3.0.0" + } + }, + "rollup-pluginutils": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", + "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", + "dev": true, + "requires": { + "estree-walker": "^0.6.1" + } + }, + "selfsigned": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", + "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", + "dev": true, + "requires": { + "@types/node-forge": "^1.3.0", + "node-forge": "^1" + } + }, + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "dev": true + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, + "stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dev": true, + "requires": { + "escape-string-regexp": "^2.0.0" + } + }, + "stacktracey": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/stacktracey/-/stacktracey-2.1.8.tgz", + "integrity": "sha512-Kpij9riA+UNg7TnphqjH7/CzctQ/owJGNbFkfEeve4Z4uxT5+JapVLFXcsurIfN34gnTWZNJ/f7NMG0E8JDzTw==", + "dev": true, + "requires": { + "as-table": "^1.0.36", + "get-source": "^2.0.12" + } + }, + "stoppable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stoppable/-/stoppable-1.1.0.tgz", + "integrity": "sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==", + "dev": true + }, + "string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, + "requires": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + } + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true + }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true + }, + "test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "requires": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + } + }, + "tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "dev": true + }, + "type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true + }, + "type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true + }, + "typescript": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.3.tgz", + "integrity": "sha512-/hreyEujaB0w76zKo6717l3L0o/qEUtRgdvUBvlkhoWeOVMjMuHNHk0BRBzikzuGDqNmPQbg5ifMEqsHLiIUcQ==", + "dev": true + }, + "ufo": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.5.3.tgz", + "integrity": "sha512-Y7HYmWaFwPUmkoQCUIAYpKqkOf+SbVj/2fJJZ4RJMCfZp0rTGwRbzQD+HghfnhKOjL9E01okqz+ncJskGYfBNw==", + "dev": true + }, + "ultralight-s3": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/ultralight-s3/-/ultralight-s3-0.0.3.tgz", + "integrity": "sha512-9AMcXN/QFqUcI36Q1YXeIarVxXGrGAKusvKtP5Z00I8ZCqdQilG6Du6dDgPq+qVo+38U6HpkI1tJ3oOo5j1krw==", + "dev": true + }, + "underscore": { + "version": "1.13.6", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz", + "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==", + "dev": true + }, + "undici": { + "version": "5.28.4", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.28.4.tgz", + "integrity": "sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==", + "dev": true, + "requires": { + "@fastify/busboy": "^2.0.0" + } + }, + "undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true + }, + "unenv": { + "version": "npm:unenv-nightly@1.10.0-1717606461.a117952", + "resolved": "https://registry.npmjs.org/unenv-nightly/-/unenv-nightly-1.10.0-1717606461.a117952.tgz", + "integrity": "sha512-u3TfBX02WzbHTpaEfWEKwDijDSFAHcgXkayUZ+MVDrjhLFvgAJzFGTSTmwlEhwWi2exyRQey23ah9wELMM6etg==", + "dev": true, + "requires": { + "consola": "^3.2.3", + "defu": "^6.1.4", + "mime": "^3.0.0", + "node-fetch-native": "^1.6.4", + "pathe": "^1.1.2", + "ufo": "^1.5.3" + } + }, + "update-browserslist-db": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", + "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", + "dev": true, + "requires": { + "escalade": "^3.1.2", + "picocolors": "^1.0.1" + } + }, + "v8-to-istanbul": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", + "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^2.0.0" + } + }, + "walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dev": true, + "requires": { + "makeerror": "1.0.12" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "workerd": { + "version": "1.20240701.0", + "resolved": "https://registry.npmjs.org/workerd/-/workerd-1.20240701.0.tgz", + "integrity": "sha512-qSgNVqauqzNCij9MaJLF2c2ko3AnFioVSIxMSryGbRK+LvtGr9BKBt6JOxCb24DoJASoJDx3pe3DJHBVydUiBg==", + "dev": true, + "requires": { + "@cloudflare/workerd-darwin-64": "1.20240701.0", + "@cloudflare/workerd-darwin-arm64": "1.20240701.0", + "@cloudflare/workerd-linux-64": "1.20240701.0", + "@cloudflare/workerd-linux-arm64": "1.20240701.0", + "@cloudflare/workerd-windows-64": "1.20240701.0" + } + }, + "wrangler": { + "version": "3.63.0", + "resolved": "https://registry.npmjs.org/wrangler/-/wrangler-3.63.0.tgz", + "integrity": "sha512-FMIGorXhYN161S1qotoIlg9EqpfRsPqtB/fd9J+qXTJ5xpctq4meaQAmRKfLI87cQDdkjUXpQBJyNgBXw4i81Q==", + "dev": true, + "requires": { + "@cloudflare/kv-asset-handler": "0.3.4", + "@esbuild-plugins/node-globals-polyfill": "^0.2.3", + "@esbuild-plugins/node-modules-polyfill": "^0.2.2", + "blake3-wasm": "^2.1.5", + "chokidar": "^3.5.3", + "date-fns": "^3.6.0", + "esbuild": "0.17.19", + "fsevents": "~2.3.2", + "miniflare": "3.20240701.0", + "nanoid": "^3.3.3", + "path-to-regexp": "^6.2.0", + "resolve": "^1.22.8", + "resolve.exports": "^2.0.2", + "selfsigned": "^2.0.1", + "source-map": "^0.6.1", + "unenv": "npm:unenv-nightly@1.10.0-1717606461.a117952", + "xxhash-wasm": "^1.0.1" + }, + "dependencies": { + "@esbuild/android-arm": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz", + "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==", + "dev": true, + "optional": true + }, + "@esbuild/android-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz", + "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==", + "dev": true, + "optional": true + }, + "@esbuild/android-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.19.tgz", + "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz", + "integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz", + "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz", + "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz", + "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz", + "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz", + "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ia32": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz", + "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-loong64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz", + "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-mips64el": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz", + "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ppc64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz", + "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-riscv64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz", + "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-s390x": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz", + "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==", + "dev": true, + "optional": true + }, + "@esbuild/linux-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz", + "integrity": "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==", + "dev": true, + "optional": true + }, + "@esbuild/netbsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz", + "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==", + "dev": true, + "optional": true + }, + "@esbuild/openbsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz", + "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==", + "dev": true, + "optional": true + }, + "@esbuild/sunos-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz", + "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==", + "dev": true, + "optional": true + }, + "@esbuild/win32-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz", + "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==", + "dev": true, + "optional": true + }, + "@esbuild/win32-ia32": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz", + "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==", + "dev": true, + "optional": true + }, + "@esbuild/win32-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz", + "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==", + "dev": true, + "optional": true + }, + "esbuild": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.19.tgz", + "integrity": "sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==", + "dev": true, + "requires": { + "@esbuild/android-arm": "0.17.19", + "@esbuild/android-arm64": "0.17.19", + "@esbuild/android-x64": "0.17.19", + "@esbuild/darwin-arm64": "0.17.19", + "@esbuild/darwin-x64": "0.17.19", + "@esbuild/freebsd-arm64": "0.17.19", + "@esbuild/freebsd-x64": "0.17.19", + "@esbuild/linux-arm": "0.17.19", + "@esbuild/linux-arm64": "0.17.19", + "@esbuild/linux-ia32": "0.17.19", + "@esbuild/linux-loong64": "0.17.19", + "@esbuild/linux-mips64el": "0.17.19", + "@esbuild/linux-ppc64": "0.17.19", + "@esbuild/linux-riscv64": "0.17.19", + "@esbuild/linux-s390x": "0.17.19", + "@esbuild/linux-x64": "0.17.19", + "@esbuild/netbsd-x64": "0.17.19", + "@esbuild/openbsd-x64": "0.17.19", + "@esbuild/sunos-x64": "0.17.19", + "@esbuild/win32-arm64": "0.17.19", + "@esbuild/win32-ia32": "0.17.19", + "@esbuild/win32-x64": "0.17.19" + } + } + } + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + } + }, + "ws": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "dev": true, + "requires": {} + }, + "xxhash-wasm": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/xxhash-wasm/-/xxhash-wasm-1.0.2.tgz", + "integrity": "sha512-ibF0Or+FivM9lNrg+HGJfVX8WJqgo+kCLDc4vx6xMeTce7Aj+DLttKbxxRR/gNLSAelRc1omAPlJ77N/Jem07A==", + "dev": true + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "requires": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + } + }, + "yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true + }, + "youch": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/youch/-/youch-3.3.3.tgz", + "integrity": "sha512-qSFXUk3UZBLfggAW3dJKg0BMblG5biqSF8M34E06o5CSsZtH92u9Hqmj2RzGiHDi64fhe83+4tENFP2DB6t6ZA==", + "dev": true, + "requires": { + "cookie": "^0.5.0", + "mustache": "^4.2.0", + "stacktracey": "^2.1.8" + } + }, + "zod": { + "version": "3.23.8", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.23.8.tgz", + "integrity": "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==", + "dev": true + } + } +} diff --git a/package.json b/package.json index 181d135..1216dd3 100644 --- a/package.json +++ b/package.json @@ -1,27 +1,7 @@ { "name": "lowstorage", "version": "2.0.0", - "description": "Zero-dependency, simple pseudo-database on Cloudflare R2, inspired by lowdb.", - "keywords": [ - "storage", - "database", - "db", - "json", - "lowdb", - "edge", - "S3", - "aws", - "R2", - "cloudflare", - "lambda", - "worker", - "wasabi", - "r2-s3", - "r2-worker", - "digitalocean", - "minio", - "minio-s3" - ], + "description": "Simple, micro-dependency, pseudo-database using Apache Avro serialization on S3-compatible storages, inspired by lowdb.", "main": "lib/lowstorage.js", "type": "module", "homepage": "https://github.com/good-lly/lowstorage#README.md", @@ -34,8 +14,8 @@ }, "scripts": { "test": "npm run build && jest --config=jest.config.json", - "build": "esbuild --bundle --minify --sourcemap --platform=node --target=node19 --format=esm --outfile=lib/lowstorage.js src/lowstorage.js", - "dev": "node src/lowstorage.js" + "build": "esbuild --bundle --sourcemap --platform=node --target=node19 --format=esm --outfile=lib/lowstorage.js src/lowstorage.js --external:avro-js", + "dev": "node --env-file ./.env ./dev/dev-index.js" }, "license": "MIT", "author": "Peter Jensen ", @@ -49,16 +29,35 @@ }, "devDependencies": { "avro-js": "^1.11.3", - "esbuild": "^0.19.12", + "esbuild": "^0.23.0", "jest": "^29.7.0", "prettier": "^3.3.2", - "supertest": "^6.3.4", "typescript": "^5.5.2", "ultralight-s3": "^0.0.3", "wrangler": "^3.62.0" }, "dependencies": { "avro-js": "^1.11.3", - "ultralight-s3": "^0.0.2" - } + "ultralight-s3": "^0.0.3" + }, + "keywords": [ + "storage", + "database", + "db", + "json", + "lowdb", + "edge", + "S3", + "aws", + "R2", + "cloudflare", + "lambda", + "worker", + "wasabi", + "r2-s3", + "r2-worker", + "digitalocean", + "minio", + "minio-s3" + ] } diff --git a/src/helpers.js b/src/helpers.js index 1fbe99c..faf60ec 100644 --- a/src/helpers.js +++ b/src/helpers.js @@ -1,12 +1,20 @@ 'use strict'; +// export const avroLoader = async (isAvroLoaded) => { +// const avro = isAvroLoaded ? isAvroLoaded : await import('avro-js'); +// return avro; +// }; + +import { randomUUID } from 'node:crypto'; + export const matchesQuery = (document, query) => { return Object.keys(query).every((key) => document[key] === query[key]); }; -export const generateUUID = () => { - if (typeof crypto !== 'undefined' && crypto.randomUUID) { - return crypto.randomUUID(); +export const generateUUID = async () => { + let _randomUUID = randomUUID || (await import('node:crypto')).randomUUID; + if (typeof _randomUUID !== 'undefined' && typeof _randomUUID === 'function') { + return _randomUUID(); } else { // Fallback for environments without crypto.randomUUID return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) { @@ -22,10 +30,10 @@ const _getAvroType = (value, name = 'SubAutoGenerated') => { case 'string': if (_isUUID(value)) { return { - type: 'fixed', - name: 'UUID', + type: 'string', + name: '_id', size: 16, - logicalType: 'uuid', + logicalType: 'UUID', }; } return 'string'; diff --git a/src/lowstorage.js b/src/lowstorage.js index 37ee81d..26fb632 100644 --- a/src/lowstorage.js +++ b/src/lowstorage.js @@ -1,9 +1,8 @@ 'use strict'; import { S3 } from 'ultralight-s3'; -import avro from 'avro-js'; +import avro from 'avro-js'; // eslint-disable-line import { matchesQuery, generateUUID, inferAvroType } from './helpers.js'; -import { Buffer } from 'safe-buffer'; const MODULE_NAME = 'lowstorage'; const PROJECT_DIR_PREFIX = 'lowstorage/'; @@ -22,9 +21,10 @@ class lowstorage { logger: null, }, ) { - _checkArgs(options); + this._checkArgs(options); this._schemas = new Map(); this._s3 = new S3(options); + this._avro = avro; } _checkArgs = (args) => { @@ -38,15 +38,7 @@ class lowstorage { async listCollections() { const listed = await this._s3.list(PROJECT_DIR_PREFIX, '', 1000); - // fill the this._schemas map - for (const entry of listed) { - if (entry.key.endsWith(SCHEMA_SUFFIX)) { - const colName = entry.key.slice(PROJECT_DIR_PREFIX.length, -SCHEMA_SUFFIX.length); - const schema = await this._s3.get(entry.key); - this._schemas.set(colName, JSON.parse(schema)); - } - } - return this._schemas.keys(); + return listed.map((entry) => entry.key.slice(PROJECT_DIR_PREFIX.length, -SCHEMA_SUFFIX.length)); } async createCollection(colName, schema = undefined) { @@ -58,7 +50,7 @@ class lowstorage { throw new Error(`${MODULE_NAME}: Collection ${colName} already exists`); } if (schema) { - const avroType = avro.parse(schema); + const avroType = this._avro.parse(schema); this._schemas.set(colName, avroType); } return this.collection(colName, schema); @@ -72,7 +64,7 @@ class lowstorage { const exists = await this._s3.fileExists(`${PROJECT_DIR_PREFIX}${colName}${SCHEMA_SUFFIX}`); if (exists) { const resp = await this._s3.delete(`${PROJECT_DIR_PREFIX}${colName}${SCHEMA_SUFFIX}`); - if (resp.statusCode === 200) { + if (resp.status === 200) { return true; } return false; @@ -108,11 +100,10 @@ class lowstorage { if (schema === undefined || schema === null) { throw new Error(`${MODULE_NAME}: Schema is required`); } - - const avroType = avro.parse(schema); + const avroType = this._avro.parse(schema); this._schemas.set(colName, avroType); const resp = await this._s3.put(`${PROJECT_DIR_PREFIX}${colName}${SCHEMA_SUFFIX}`, JSON.stringify(schema)); - if (resp.statusCode === 200) { + if (resp.status === 200) { return true; } else { throw new Error(`${MODULE_NAME}: Failed to update schema for collection ${colName}`); @@ -136,13 +127,14 @@ class lowstorage { const exists = await this._s3.fileExists(`${PROJECT_DIR_PREFIX}${colName}${SCHEMA_SUFFIX}`); if (exists) { const schemaContent = await this._s3.get(`${PROJECT_DIR_PREFIX}${colName}${SCHEMA_SUFFIX}`); - const avroType = avro.parse(schemaContent); + + const avroType = this._avro.parse(schemaContent); this._schemas.set(colName, avroType); return new Collection(colName, this._s3, avroType); } return new Collection(colName, this._s3, undefined); } - return new Collection(colName, this._s3, schema); + return new Collection(colName, this._s3, this._avro.parse(schema)); } catch (error) { throw new Error(`${MODULE_NAME}: ${error.message}`); } @@ -153,6 +145,7 @@ class Collection { constructor(colName, s3, avroType = undefined) { this._colName = colName; this._s3 = s3; + this._avro = avro; this._avroType = avroType; } @@ -164,30 +157,32 @@ class Collection { if (typeof doc !== 'object' && !Array.isArray(doc)) { throw new Error(`${MODULE_NAME}: Document must be an object or an array`); } - if (!Array.isArray(doc)) { - doc = [doc]; - } - const avroType = avro.parse(schema) || this._avroType || avro.parse(inferAvroType(doc)); + const items = !Array.isArray(doc) ? [doc] : doc; + + const avroType = !!schema ? this._avro.parse(schema) : this._avroType || this._avro.parse(inferAvroType(doc)); + + // throw new Error('avroType::: ', avroType); if (avroType === undefined) { throw new Error(`${MODULE_NAME}: Schema is required - Pass a schema to the insert method`); } this._avroType = avroType; - const bufferData = await this._loadDataBuffer(); // load data from s3 - const data = bufferData.length > 0 ? this._avroType.fromBuffer(bufferData) : []; - for (let item of doc) { + const wrapperType = this._avro.parse({ type: 'array', items: this._avroType }); + const bufferData = await this._loadDataBuffer(); + const data = bufferData.length > 0 ? wrapperType.fromBuffer(bufferData) : []; + for (let item of items) { if (typeof item !== 'object' || item === null) { throw new Error('Invalid input: input must be an object or an array of objects'); } + item._id = item._id || (await generateUUID()); const valid = this._avroType.isValid(item); if (!valid) { throw new Error(`${MODULE_NAME}: Invalid document or schema`); } - item._id = item._id || generateUUID(); data.push(item); } - const resp = await this._saveDataBuffer(this._avroType.toBuffer(data)); + const resp = await this._saveDataBuffer(wrapperType.toBuffer(data)); if (resp) { - return doc; + return items; } else { throw new Error(`${MODULE_NAME}: Failed to insert document`); } @@ -198,7 +193,7 @@ class Collection { async _loadDataBuffer() { try { - const KEY = `${PROJECT_DIR_PREFIX}${this._colName}${DATA_SUFFIX}`; + const KEY = `${PROJECT_DIR_PREFIX}${this._colName}${SCHEMA_SUFFIX}`; const CHUNK_SIZE = this._s3.getMaxRequestSizeInBytes() || CHUNG_5MB; let firstData = await this._s3.get(KEY); if (firstData.length < CHUNK_SIZE) { @@ -228,9 +223,9 @@ class Collection { async _saveDataBuffer(data) { try { - const key = `${PROJECT_DIR_PREFIX}${this._colName}${DATA_SUFFIX}`; - const resp = await this._s3.put(key, data); - if (resp.statusCode === 200) { + const KEY = `${PROJECT_DIR_PREFIX}${this._colName}${SCHEMA_SUFFIX}`; + const resp = await this._s3.put(KEY, data); + if (resp.status === 200) { return true; } else { throw new Error(`${MODULE_NAME}: Failed to save data`); @@ -243,7 +238,8 @@ class Collection { async find(query = {}, options = {}) { try { const bufferData = await this._loadDataBuffer(); // load data from s3 - const data = bufferData.length > 0 ? this._avroType.fromBuffer(bufferData) : []; + const wrapperType = this._avro.parse({ type: 'array', items: this._avroType }); + const data = bufferData.length > 0 ? wrapperType.fromBuffer(bufferData) : []; const start = parseInt(options.skip, 10) || 0; const end = parseInt(options.limit, 10) ? start + parseInt(options.limit, 10) : undefined; const filteredData = data.filter((doc) => matchesQuery(doc, query)).slice(start, end); @@ -260,7 +256,8 @@ class Collection { async update(query = {}, update = {}) { try { const bufferData = await this._loadDataBuffer(); // load data from s3 - const data = bufferData.length > 0 ? this._avroType.fromBuffer(bufferData) : []; + const wrapperType = this._avro.parse({ type: 'array', items: this._avroType }); + const data = bufferData.length > 0 ? wrapperType.fromBuffer(bufferData) : []; let updatedCount = 0; for (let i = 0; i < data.length; i++) { @@ -271,7 +268,7 @@ class Collection { } if (updatedCount > 0) { - const resp = await this._saveDataBuffer(this._avroType.toBuffer(data)); + const resp = await this._saveDataBuffer(wrapperType.toBuffer(data)); if (resp) { return updatedCount; } @@ -285,12 +282,13 @@ class Collection { async updateOne(query = {}, update = {}) { try { const bufferData = await this._loadDataBuffer(); // load data from s3 - const data = bufferData.length > 0 ? this._avroType.fromBuffer(bufferData) : []; + const wrapperType = this._avro.parse({ type: 'array', items: this._avroType }); + const data = bufferData.length > 0 ? wrapperType.fromBuffer(bufferData) : []; const docIndex = data.findIndex((doc) => matchesQuery(doc, query)); if (docIndex !== -1) { Object.assign(data[docIndex], update); - const resp = await this._saveDataBuffer(this._avroType.toBuffer(data)); + const resp = await this._saveDataBuffer(wrapperType.toBuffer(data)); if (resp) { return 1; } @@ -304,10 +302,11 @@ class Collection { async delete(query = {}) { try { const bufferData = await this._loadDataBuffer(); // load data from s3 - const data = bufferData.length > 0 ? this._avroType.fromBuffer(bufferData) : []; + const wrapperType = this._avro.parse({ type: 'array', items: this._avroType }); + const data = bufferData.length > 0 ? wrapperType.fromBuffer(bufferData) : []; const initialLength = data.length; const newData = data.filter((doc) => !matchesQuery(doc, query)); - const resp = await this._saveDataBuffer(this._avroType.toBuffer(newData)); + const resp = await this._saveDataBuffer(wrapperType.toBuffer(newData)); if (resp) { return initialLength - newData.length; } @@ -322,9 +321,10 @@ class Collection { if (query === undefined || query === null) { throw new Error(`${MODULE_NAME}: Query is required`); } - if (Object.keys(obj).length === 0) { + if (Object.keys(query).length === 0) { const bufferData = await this._loadDataBuffer(); // load data from s3 - const data = bufferData.length > 0 ? this._avroType.fromBuffer(bufferData) : []; + const wrapperType = this._avro.parse({ type: 'array', items: this._avroType }); + const data = bufferData.length > 0 ? wrapperType.fromBuffer(bufferData) : []; return data.length || null; } return (await this.find(query)).length; diff --git a/src/lowstorage.test.js b/src/lowstorage.test.js index 0cfb91d..3fb4756 100644 --- a/src/lowstorage.test.js +++ b/src/lowstorage.test.js @@ -1,30 +1,41 @@ -const { unstable_dev } = require('wrangler'); -const supertest = require('supertest'); +// import { unstable_dev } from 'wrangler'; +// import supertest from 'supertest'; console.log('🏃 Running tests...'); let worker = null; let request; + const usersToInsert = [ { name: 'Alice', age: 30 }, { name: 'Bob', age: 25 }, + { name: 'Charlie', age: 25 }, ]; +const userAvroSchema = { + type: 'record', + name: 'User', + fields: [ + { name: 'name', type: 'string' }, + { name: 'age', type: 'int' }, + ], +}; + beforeAll(async () => { - worker = await unstable_dev('./examples/src/index.js', { - config: './examples/wrangler.toml', - experimental: { disableExperimentalWarning: true }, - }); - const protocol = worker.proxyData.userWorkerUrl.protocol; - const hostname = worker.proxyData.userWorkerUrl.hostname; - const port = worker.proxyData.userWorkerUrl.port; - const fullUrl = `${protocol}//${hostname}:${port}`; - request = supertest(fullUrl); - console.log('✅ Worker started at ', fullUrl); + // worker = await unstable_dev('./examples/src/index.js', { + // config: './examples/wrangler.toml', + // experimental: { disableExperimentalWarning: true }, + // }); + // const protocol = worker.proxyData.userWorkerUrl.protocol; + // const hostname = worker.proxyData.userWorkerUrl.hostname; + // const port = worker.proxyData.userWorkerUrl.port; + // const fullUrl = `${protocol}//${hostname}:${port}`; + // request = supertest(fullUrl); + // console.log('✅ Worker started at ', fullUrl); }); afterAll(async () => { - if (worker) await worker.stop(); + // if (worker) await worker.stop(); }); test('POST /insertdata - inserts multiple users', async () => { From ae18141fb6eb4ad45c116f9cac9b037ad1bf3f21 Mon Sep 17 00:00:00 2001 From: Jolly Good <1671375+good-lly@users.noreply.github.com> Date: Fri, 12 Jul 2024 21:43:51 +0200 Subject: [PATCH 04/18] #11 #13 in progress of S3 support testing and a lot of rewrite [wip] --- dev/dev-index.js | 6 +- jest.config.json | 4 +- lib/lowstorage.js | 641 +---------------------------------------- lib/lowstorage.js.map | 8 +- package-lock.json | 124 ++++---- package.json | 12 +- src/errors.js | 64 ++++ src/helpers.js | 33 +-- src/lowstorage.js | 382 +++++++++++++++++------- src/lowstorage.test.js | 303 ++++++++++--------- tsconfig.json | 2 +- 11 files changed, 584 insertions(+), 995 deletions(-) create mode 100644 src/errors.js diff --git a/dev/dev-index.js b/dev/dev-index.js index bfff8ed..5b43b68 100644 --- a/dev/dev-index.js +++ b/dev/dev-index.js @@ -142,6 +142,10 @@ async function lowstorageRun() { const newUsers = await userCol.insert(usersToInsert); //console.log('newUsers', newUsers); + // list all collections + const listCollections = await ls_cf.listCollections(); + console.log('listCollections', listCollections); + // list all users const allUsers = await userCol.find({}); console.log('allUsers', allUsers); @@ -185,7 +189,7 @@ async function lowstorageRun() { // delete collection const deleteCollection = await ls_cf.removeCollection('users'); - //console.log('deleteCollection', deleteCollection); + console.log('deleteCollection', deleteCollection); } finally { console.timeEnd('lowstorage'); } diff --git a/jest.config.json b/jest.config.json index 03f86fb..aa775e7 100644 --- a/jest.config.json +++ b/jest.config.json @@ -2,6 +2,6 @@ "verbose": true, "collectCoverage": false, "testMatch": ["**/src/*.test.js"], - "collectCoverageFrom": ["src/lowstorage.js"], - "testEnvironment": "node" + "testEnvironment": "node", + "testTimeout": 20000 } diff --git a/lib/lowstorage.js b/lib/lowstorage.js index 5a1a1e1..cb48877 100644 --- a/lib/lowstorage.js +++ b/lib/lowstorage.js @@ -1,638 +1,15 @@ -// node_modules/ultralight-s3/lib/index.min.js -var Q = crypto.createHmac || (await import("node:crypto")).createHmac; -var Y = crypto.createHash || (await import("node:crypto")).createHash; -typeof Q > "u" && typeof Y > "u" && console.error("ultralight-S3 Module: Crypto functions are not available, please report the issue with necessary description: https://github.com/sentienhq/ultralight-s3/issues"); -var K = "AWS4-HMAC-SHA256"; -var C = "aws4_request"; -var P = "s3"; -var W = "2"; -var _ = "UNSIGNED-PAYLOAD"; -var X = "application/octet-stream"; -var L = "application/xml"; -var S = "application/json"; -var V = ["accessKeyId", "secretAccessKey", "sessionToken", "password"]; -var M = 5 * 1024 * 1024; -var y = "x-amz-content-sha256"; -var Z = "x-amz-date"; -var J = "host"; -var k = "Authorization"; -var w = "Content-Type"; -var T = "Content-Length"; -var j = "etag"; -var B = "last-modified"; -var c = "ultralight-s3 Module: "; -var ee = `${c}accessKeyId must be a non-empty string`; -var te = `${c}secretAccessKey must be a non-empty string`; -var re = `${c}endpoint must be a non-empty string`; -var se = `${c}bucketName must be a non-empty string`; -var h = `${c}key must be a non-empty string`; -var $ = `${c}uploadId must be a non-empty string`; -var z = `${c}parts must be a non-empty array`; -var G = `${c}Each part must have a partNumber (number) and ETag (string)`; -var I = `${c}data must be a Buffer or string`; -var U = `${c}path must be a string`; -var q = `${c}prefix must be a string`; -var F = `${c}maxKeys must be a positive integer`; -var oe = { contents: true }; -var ne = (m) => `%${m.charCodeAt(0).toString(16).toUpperCase()}`; -var O = (m) => encodeURIComponent(m).replace(/[!'()*]/g, ne); -var f = (m) => O(m).replace(/%2F/g, "/"); -var x = class { - constructor({ accessKeyId: e, secretAccessKey: t, endpoint: r, bucketName: s, region: n = "auto", maxRequestSizeInBytes: i = M, requestAbortTimeout: a = void 0, logger: u = void 0 }) { - this.getBucketName = () => this.bucketName, this.setBucketName = (o) => { - this.bucketName = o; - }, this.getRegion = () => this.region, this.setRegion = (o) => { - this.region = o; - }, this.getEndpoint = () => this.endpoint, this.setEndpoint = (o) => { - this.endpoint = o; - }, this.getMaxRequestSizeInBytes = () => this.maxRequestSizeInBytes, this.setMaxRequestSizeInBytes = (o) => { - this.maxRequestSizeInBytes = o; - }, this.getProps = () => ({ accessKeyId: this.accessKeyId, secretAccessKey: this.secretAccessKey, region: this.region, bucket: this.bucketName, endpoint: this.endpoint, maxRequestSizeInBytes: this.maxRequestSizeInBytes, requestAbortTimeout: this.requestAbortTimeout, logger: this.logger }), this.setProps = (o) => { - this._validateConstructorParams(o.accessKeyId, o.secretAccessKey, o.bucketName, o.endpoint), this.accessKeyId = o.accessKeyId, this.secretAccessKey = o.secretAccessKey, this.region = o.region || "auto", this.bucketName = o.bucketName, this.endpoint = o.endpoint, this.maxRequestSizeInBytes = o.maxRequestSizeInBytes || M, this.requestAbortTimeout = o.requestAbortTimeout, this.logger = o.logger; - }, this._validateConstructorParams(e, t, r, s), this.accessKeyId = e, this.secretAccessKey = t, this.endpoint = r, this.bucketName = s, this.region = n, this.maxRequestSizeInBytes = i, this.requestAbortTimeout = a, this.logger = u; - } - _validateConstructorParams(e, t, r, s) { - if (typeof e != "string" || e.trim().length === 0) throw new TypeError(ee); - if (typeof t != "string" || t.trim().length === 0) throw new TypeError(te); - if (typeof r != "string" || r.trim().length === 0) throw new TypeError(re); - if (typeof s != "string" || s.trim().length === 0) throw new TypeError(se); - } - _log(e, t, r = {}) { - if (this.logger && typeof this.logger[e] == "function") { - let s = (a) => typeof a != "object" || a === null ? a : Object.keys(a).reduce((u, o) => (V.includes(o.toLowerCase()) ? u[o] = "[REDACTED]" : typeof a[o] == "object" && a[o] !== null ? u[o] = s(a[o]) : u[o] = a[o], u), Array.isArray(a) ? [] : {}), n = s(r), i = { timestamp: (/* @__PURE__ */ new Date()).toISOString(), level: e, message: t, ...n, context: s({ bucketName: this.bucketName, region: this.region, endpoint: this.endpoint, accessKeyId: this.accessKeyId ? `${this.accessKeyId.substring(0, 4)}...` : void 0 }) }; - this.logger[e](i); - } - } - async getContentLength(e) { - if (typeof e != "string" || e.trim().length === 0) throw this._log("error", h), new TypeError(h); - let t = { [y]: _ }, r = f(e), { url: s, headers: n } = await this._sign("HEAD", r, {}, t, ""), a = (await this._sendRequest(s, "HEAD", n)).headers.get(T); - return a ? parseInt(a, 10) : 0; - } - async bucketExists() { - let e = { [y]: _ }, { url: t, headers: r } = await this._sign("HEAD", "", {}, e, ""), s = await this._sendRequest(t, "HEAD", r); - return !!(s.ok && s.status === 200); - } - async fileExists(e) { - if (typeof e != "string" || e.trim().length === 0) throw this._log("error", h), new TypeError(h); - let t = { [y]: _ }, r = f(e), { url: s, headers: n } = await this._sign("HEAD", r, {}, t, ""); - try { - let i = await fetch(s, { method: "HEAD", headers: n }); - return i.ok && i.status === 200 ? true : (i.status === 404 || this._handleErrorResponse(i), false); - } catch (i) { - let a = i instanceof Error ? i.message : String(i); - throw this._log("error", `${c}Failed to check if file exists: ${a}`), new Error(`${c}Failed to check if file exists: ${a}`); - } - } - async _sign(e, t, r, s, n) { - let i = (/* @__PURE__ */ new Date()).toISOString().replace(/[:-]|\.\d{3}/g, ""), a = typeof t == "string" && t.length > 0 ? new URL(t, this.endpoint) : new URL(this.endpoint); - a.pathname = `/${encodeURI(this.bucketName)}${a.pathname}`, s[y] = n ? await N(n) : _, s[Z] = i, s[J] = a.host; - let u = this._buildCanonicalHeaders(s), o = Object.keys(s).map((p) => p.toLowerCase()).sort().join(";"), E = await this._buildCanonicalRequest(e, a, r, u, o, n), l = await this._buildStringToSign(i, E), g = await this._calculateSignature(i, l), d = this._buildAuthorizationHeader(i, o, g); - return s[k] = d, { url: a.toString(), headers: s }; - } - _buildCanonicalHeaders(e) { - return Object.entries(e).map(([t, r]) => `${t.toLowerCase()}:${String(r).trim()}`).sort().join(` -`); - } - async _buildCanonicalRequest(e, t, r, s, n, i) { - return [e, t.pathname, this._buildCanonicalQueryString(r), `${s} -`, n, i ? await N(i) : _].join(` -`); - } - async _buildStringToSign(e, t) { - let r = [e.slice(0, 8), this.region, P, C].join("/"); - return [K, e, r, await N(t)].join(` -`); - } - async _calculateSignature(e, t) { - let r = await this._getSignatureKey(e.slice(0, 8)); - return D(r, t, "hex"); - } - _buildAuthorizationHeader(e, t, r) { - let s = [e.slice(0, 8), this.region, P, C].join("/"); - return [`${K} Credential=${this.accessKeyId}/${s}`, `SignedHeaders=${t}`, `Signature=${r}`].join(", "); - } - async list(e = "/", t = "", r = 1e3, s = "GET", n = {}) { - if (typeof e != "string" || e.trim().length === 0) throw this._log("error", U), new TypeError(U); - if (typeof t != "string") throw this._log("error", q), new TypeError(q); - if (!Number.isInteger(r) || r <= 0) throw this._log("error", F), new TypeError(F); - if (s !== "GET" && s !== "HEAD") throw this._log("error", `${c}method must be either GET or HEAD`), new TypeError(`${c}method must be either GET or HEAD`); - if (typeof n != "object") throw this._log("error", `${c}opts must be an object`), new TypeError(`${c}opts must be an object`); - this._log("info", `Listing objects in ${e}`); - let i = { "list-type": W, "max-keys": String(r), ...n }; - t.length > 0 && (i.prefix = t); - let a = { [w]: S, [y]: _ }, u = e === "/" ? e : O(e), { url: o, headers: E } = await this._sign("GET", u, i, a, ""), l = `${o}?${new URLSearchParams(i)}`, g = await this._sendRequest(l, "GET", E), d = await g.text(); - if (s === "HEAD") { - let R = g.headers.get(T), A = g.headers.get(B), v = g.headers.get(j); - return { size: R ? +R : void 0, mtime: A ? new Date(A) : void 0, ETag: v || void 0 }; - } - let p = b(d), H = p.listBucketResult || p.error || p; - return H.contents || H; - } - async listMultiPartUploads(e = "/", t = "", r = "GET", s = {}) { - var n, i, a; - if (typeof e != "string" || e.trim().length === 0) throw this._log("error", U), new TypeError(U); - if (typeof t != "string") throw this._log("error", q), new TypeError(q); - if (r !== "GET" && r !== "HEAD") throw this._log("error", `${c}method must be either GET or HEAD`), new TypeError(`${c}method must be either GET or HEAD`); - if (typeof s != "object") throw this._log("error", `${c}opts must be an object`), new TypeError(`${c}opts must be an object`); - this._log("info", `Listing multipart uploads in ${e}`); - let u = { uploads: "", ...s }, o = { [w]: S, [y]: _ }, E = e === "/" ? e : O(e), { url: l, headers: g } = await this._sign("GET", E, u, o, ""), d = `${l}?${new URLSearchParams(u)}`, p = await this._sendRequest(d, "GET", g), H = await p.text(); - if (r === "HEAD") return { size: +((n = p.headers.get(T)) !== null && n !== void 0 ? n : "0"), mtime: new Date((i = p.headers.get(B)) !== null && i !== void 0 ? i : ""), ETag: (a = p.headers.get(j)) !== null && a !== void 0 ? a : "" }; - let R = b(H), A = R.listMultipartUploadsResult || R.error || R; - return A.uploads || A; - } - async get(e, t = {}) { - if (typeof e != "string" || e.trim().length === 0) throw this._log("error", h), new TypeError(h); - let r = { [w]: S, [y]: _ }; - this._log("info", `Getting object ${e}`); - let s = f(e), { url: n, headers: i } = await this._sign("GET", s, t, r, ""); - return (await this._sendRequest(n, "GET", i)).text(); - } - async getResponse(e, t = true, r = 0, s = this.maxRequestSizeInBytes, n = {}) { - let i = n, a = { [w]: S, [y]: _, ...t ? {} : { range: `bytes=${r}-${s - 1}` } }, u = f(e), { url: o, headers: E } = await this._sign("GET", u, i, a, ""), l = `${o}?${new URLSearchParams(i)}`; - return this._sendRequest(l, "GET", E); - } - async put(e, t) { - if (typeof e != "string" || e.trim().length === 0) throw this._log("error", h), new TypeError(h); - if (!(t instanceof Buffer || typeof t == "string")) throw this._log("error", I), new TypeError(I); - this._log("info", `Uploading object ${e}`); - let r = typeof t == "string" ? Buffer.byteLength(t) : t.length, s = { [T]: r }, n = f(e), { url: i, headers: a } = await this._sign("PUT", n, {}, s, t); - return await this._sendRequest(i, "PUT", a, t); - } - async getMultipartUploadId(e, t = X) { - if (typeof e != "string" || e.trim().length === 0) throw this._log("error", h), new TypeError(h); - if (typeof t != "string") throw this._log("error", `${c}fileType must be a string`), new TypeError(`${c}fileType must be a string`); - this._log("info", `Initiating multipart upload for object ${e}`); - let r = { uploads: "" }, s = { [w]: t, [y]: _ }, n = f(e), { url: i, headers: a } = await this._sign("POST", n, r, s, ""), u = `${i}?${new URLSearchParams(r)}`, E = await (await this._sendRequest(u, "POST", a)).text(), l = b(E); - if (typeof l == "object" && l !== null && "error" in l && typeof l.error == "object" && l.error !== null && "message" in l.error) { - let g = String(l.error.message); - throw this._log("error", `${c}Failed to abort multipart upload: ${g}`), new Error(`${c}Failed to abort multipart upload: ${g}`); - } - if (typeof l == "object" && l !== null) { - if (!l.initiateMultipartUploadResult || !l.initiateMultipartUploadResult.uploadId) throw this._log("error", `${c}Failed to create multipart upload: no uploadId in response`), new Error(`${c}Failed to create multipart upload: Missing upload ID in response`); - return l.initiateMultipartUploadResult.uploadId; - } else throw this._log("error", `${c}Failed to create multipart upload: unexpected response format`), new Error(`${c}Failed to create multipart upload: Unexpected response format`); - } - async uploadPart(e, t, r, s, n = {}) { - this._validateUploadPartParams(e, t, r, s, n); - let i = { uploadId: r, partNumber: s, ...n }, a = { [T]: t.length }, u = f(e), { url: o, headers: E } = await this._sign("PUT", u, i, a, t), l = `${o}?${new URLSearchParams(i)}`, d = (await this._sendRequest(l, "PUT", E, t)).headers.get("etag") || ""; - return { partNumber: s, ETag: d }; - } - _validateUploadPartParams(e, t, r, s, n) { - if (typeof e != "string" || e.trim().length === 0) throw this._log("error", h), new TypeError(h); - if (!(t instanceof Buffer || typeof t == "string")) throw this._log("error", I), new TypeError(I); - if (typeof r != "string" || r.trim().length === 0) throw this._log("error", $), new TypeError($); - if (!Number.isInteger(s) || s <= 0) throw this._log("error", `${c}partNumber must be a positive integer`), new TypeError(`${c}partNumber must be a positive integer`); - if (typeof n != "object") throw this._log("error", `${c}opts must be an object`), new TypeError(`${c}opts must be an object`); - } - async completeMultipartUpload(e, t, r) { - if (typeof e != "string" || e.trim().length === 0) throw this._log("error", h), new TypeError(h); - if (typeof t != "string" || t.trim().length === 0) throw this._log("error", $), new TypeError($); - if (!Array.isArray(r) || r.length === 0) throw this._log("error", z), new TypeError(z); - if (!r.every((p) => typeof p.partNumber == "number" && typeof p.ETag == "string")) throw this._log("error", G), new TypeError(G); - this._log("info", `Complete multipart upload ${t} for object ${e}`); - let s = { uploadId: t }, n = this._buildCompleteMultipartUploadXml(r), i = { [w]: L, [T]: Buffer.byteLength(n).toString(), [y]: await N(n) }, a = f(e), { url: u, headers: o } = await this._sign("POST", a, s, i, n), E = `${u}?${new URLSearchParams(s)}`, g = await (await this._sendRequest(E, "POST", o, n)).text(), d = b(g); - if (typeof d == "object" && d !== null && "error" in d && typeof d.error == "object" && d.error !== null && "message" in d.error) { - let p = String(d.error.message); - throw this._log("error", `${c}Failed to abort multipart upload: ${p}`), new Error(`${c}Failed to abort multipart upload: ${p}`); - } - return d.completeMultipartUploadResult; - } - async abortMultipartUpload(e, t) { - if (typeof e != "string" || e.trim().length === 0) throw this._log("error", h), new TypeError(h); - if (typeof t != "string" || t.trim().length === 0) throw this._log("error", $), new TypeError($); - this._log("info", `Aborting multipart upload ${t} for object ${e}`); - let r = { uploadId: t }, s = { [w]: L, [y]: _ }; - try { - let n = f(e), { url: i, headers: a } = await this._sign("DELETE", n, r, s, ""), u = `${i}?${new URLSearchParams(r)}`, o = await this._sendRequest(u, "DELETE", a); - if (o.ok) { - let E = await o.text(), l = b(E); - if (typeof l == "object" && l !== null && "error" in l && typeof l.error == "object" && l.error !== null && "message" in l.error) { - let g = String(l.error.message); - throw this._log("error", `${c}Failed to abort multipart upload: ${g}`), new Error(`${c}Failed to abort multipart upload: ${g}`); - } - return { status: "Aborted", key: e, uploadId: t, response: l }; - } else throw this._log("error", `${c}Abort request failed with status ${o.status}`), new Error(`${c}Abort request failed with status ${o.status}`); - } catch (n) { - let i = n instanceof Error ? n.message : String(n); - throw this._log("error", `${c}Failed to abort multipart upload for key ${e}: ${i}`), new Error(`${c}Failed to abort multipart upload for key ${e}: ${i}`); - } - } - _buildCompleteMultipartUploadXml(e) { - return ` +var se=crypto.createHmac||(await import("node:crypto")).createHmac,ie=crypto.createHash||(await import("node:crypto")).createHash;typeof se>"u"&&typeof ie>"u"&&console.error("ultralight-S3 Module: Crypto functions are not available, please report the issue with necessary description: https://github.com/sentienhq/ultralight-s3/issues");var V="AWS4-HMAC-SHA256",F="aws4_request",K="s3",ue="2",R="UNSIGNED-PAYLOAD",de="application/octet-stream",z="application/xml",U="application/json",pe=["accessKeyId","secretAccessKey","sessionToken","password"],X=5*1024*1024,E="x-amz-content-sha256",fe="x-amz-date",_e="host",ge="Authorization",T="Content-Type",b="Content-Length",Q="etag",W="last-modified",u="ultralight-s3 Module: ",Re=`${u}accessKeyId must be a non-empty string`,Ee=`${u}secretAccessKey must be a non-empty string`,ye=`${u}endpoint must be a non-empty string`,we=`${u}bucketName must be a non-empty string`,Y=`${u}key must be a non-empty string`,x=`${u}uploadId must be a non-empty string`,J=`${u}parts must be a non-empty array`,Z=`${u}Each part must have a partNumber (number) and ETag (string)`,k=`${u}data must be a Buffer or string`,ee=`${u}prefix must be a string`,te=`${u}maxKeys must be a positive integer`,re=`${u}delimiter must be a string`,me={contents:!0},Oe=r=>`%${r.charCodeAt(0).toString(16).toUpperCase()}`,j=r=>encodeURIComponent(r).replace(/[!'()*]/g,Oe),$=r=>j(r).replace(/%2F/g,"/"),ae=class{constructor({accessKeyId:r,secretAccessKey:e,endpoint:t,bucketName:s,region:i="auto",maxRequestSizeInBytes:a=X,requestAbortTimeout:n=void 0,logger:h=void 0}){this.getBucketName=()=>this.bucketName,this.setBucketName=o=>{this.bucketName=o},this.getRegion=()=>this.region,this.setRegion=o=>{this.region=o},this.getEndpoint=()=>this.endpoint,this.setEndpoint=o=>{this.endpoint=o},this.getMaxRequestSizeInBytes=()=>this.maxRequestSizeInBytes,this.setMaxRequestSizeInBytes=o=>{this.maxRequestSizeInBytes=o},this.getProps=()=>({accessKeyId:this.accessKeyId,secretAccessKey:this.secretAccessKey,region:this.region,bucket:this.bucketName,endpoint:this.endpoint,maxRequestSizeInBytes:this.maxRequestSizeInBytes,requestAbortTimeout:this.requestAbortTimeout,logger:this.logger}),this.setProps=o=>{this._validateConstructorParams(o.accessKeyId,o.secretAccessKey,o.bucketName,o.endpoint),this.accessKeyId=o.accessKeyId,this.secretAccessKey=o.secretAccessKey,this.region=o.region||"auto",this.bucketName=o.bucketName,this.endpoint=o.endpoint,this.maxRequestSizeInBytes=o.maxRequestSizeInBytes||X,this.requestAbortTimeout=o.requestAbortTimeout,this.logger=o.logger},this._validateConstructorParams(r,e,t,s),this.accessKeyId=r,this.secretAccessKey=e,this.endpoint=t,this.bucketName=s,this.region=i,this.maxRequestSizeInBytes=a,this.requestAbortTimeout=n,this.logger=h}_validateConstructorParams(r,e,t,s){if(typeof r!="string"||r.trim().length===0)throw new TypeError(Re);if(typeof e!="string"||e.trim().length===0)throw new TypeError(Ee);if(typeof t!="string"||t.trim().length===0)throw new TypeError(ye);if(typeof s!="string"||s.trim().length===0)throw new TypeError(we)}_checkMethodHeadnGet(r){if(r!=="GET"&&r!=="HEAD")throw this._log("error",`${u}method must be either GET or HEAD`),new Error("method must be either GET or HEAD")}_checkKey(r){if(typeof r!="string"||r.trim().length===0)throw this._log("error",Y),new TypeError(Y)}_checkDelimiter(r){if(typeof r!="string"||r.trim().length===0)throw this._log("error",re),new TypeError(re)}_checkPrefix(r){if(typeof r!="string")throw this._log("error",ee),new TypeError(ee)}_checkMaxKeys(r){if(typeof r!="number"||r<=0)throw this._log("error",te),new TypeError(te)}_checkOpts(r){if(typeof r!="object")throw this._log("error",`${u}opts must be an object`),new TypeError(`${u}opts must be an object`)}_log(r,e,t={}){if(this.logger&&typeof this.logger[r]=="function"){let s=n=>typeof n!="object"||n===null?n:Object.keys(n).reduce((h,o)=>(pe.includes(o.toLowerCase())?h[o]="[REDACTED]":typeof n[o]=="object"&&n[o]!==null?h[o]=s(n[o]):h[o]=n[o],h),Array.isArray(n)?[]:{}),i=s(t),a={timestamp:new Date().toISOString(),level:r,message:e,...i,context:s({bucketName:this.bucketName,region:this.region,endpoint:this.endpoint,accessKeyId:this.accessKeyId?`${this.accessKeyId.substring(0,4)}...`:void 0})};this.logger[r](a)}}async getContentLength(r){this._checkKey(r);let e={[E]:R},t=$(r),{url:s,headers:i}=await this._sign("HEAD",t,{},e,""),a=(await this._sendRequest(s,"HEAD",i)).headers.get(b);return a?parseInt(a,10):0}async bucketExists(){let r={[E]:R},{url:e,headers:t}=await this._sign("HEAD","",{},r,""),s=await this._sendRequest(e,"HEAD",t);return!!(s.ok&&s.status===200)}async fileExists(r){this._checkKey(r);let e={[E]:R},t=$(r),{url:s,headers:i}=await this._sign("HEAD",t,{},e,"");try{let a=await fetch(s,{method:"HEAD",headers:i});return a.ok&&a.status===200?!0:(a.status===404||this._handleErrorResponse(a),!1)}catch(a){let n=a instanceof Error?a.message:String(a);throw this._log("error",`${u}Failed to check if file exists: ${n}`),new Error(`${u}Failed to check if file exists: ${n}`)}}async _sign(r,e,t,s,i){let a=new Date().toISOString().replace(/[:-]|\.\d{3}/g,""),n=typeof e=="string"&&e.length>0?new URL(e,this.endpoint):new URL(this.endpoint);n.pathname=`/${encodeURI(this.bucketName)}${n.pathname}`,s[E]=i?await M(i):R,s[fe]=a,s[_e]=n.host;let h=this._buildCanonicalHeaders(s),o=Object.keys(s).map(O=>O.toLowerCase()).sort().join(";"),c=await this._buildCanonicalRequest(r,n,t,h,o,i),f=await this._buildStringToSign(a,c),_=await this._calculateSignature(a,f),y=this._buildAuthorizationHeader(a,o,_);return s[ge]=y,{url:n.toString(),headers:s}}_buildCanonicalHeaders(r){return Object.entries(r).map(([e,t])=>`${e.toLowerCase()}:${String(t).trim()}`).sort().join(` +`)}async _buildCanonicalRequest(r,e,t,s,i,a){return[r,e.pathname,this._buildCanonicalQueryString(t),`${s} +`,i,a?await M(a):R].join(` +`)}async _buildStringToSign(r,e){let t=[r.slice(0,8),this.region,K,F].join("/");return[V,r,t,await M(e)].join(` +`)}async _calculateSignature(r,e){let t=await this._getSignatureKey(r.slice(0,8));return L(t,e,"hex")}_buildAuthorizationHeader(r,e,t){let s=[r.slice(0,8),this.region,K,F].join("/");return[`${V} Credential=${this.accessKeyId}/${s}`,`SignedHeaders=${e}`,`Signature=${t}`].join(", ")}async list(r="/",e="",t=1e3,s="GET",i={}){this._checkDelimiter(r),this._checkPrefix(e),this._checkMaxKeys(t),this._checkMethodHeadnGet(s),this._checkOpts(i),this._log("info",`Listing objects in ${e}`);let a={"list-type":ue,"max-keys":String(t),...i};e.length>0&&(a.prefix=e);let n={[T]:U,[E]:R},h=r==="/"?r:j(r),{url:o,headers:c}=await this._sign("GET",h,a,n,""),f=`${o}?${new URLSearchParams(a)}`,_=await this._sendRequest(f,"GET",c),y=await _.text();if(s==="HEAD"){let A=_.headers.get(b),S=_.headers.get(W),le=_.headers.get(Q);return{size:A?+A:void 0,mtime:S?new Date(S):void 0,ETag:le||void 0}}let O=N(y),P=O.listBucketResult||O.error||O;return P.contents||P}async listMultiPartUploads(r="/",e="",t="GET",s={}){var i,a,n;this._checkDelimiter(r),this._checkPrefix(e),this._checkMethodHeadnGet(t),this._checkOpts(s),this._log("info",`Listing multipart uploads in ${e}`);let h={uploads:"",...s},o={[T]:U,[E]:R},c=r==="/"?r:j(r),{url:f,headers:_}=await this._sign("GET",c,h,o,""),y=`${f}?${new URLSearchParams(h)}`,O=await this._sendRequest(y,"GET",_),P=await O.text();if(t==="HEAD")return{size:+((i=O.headers.get(b))!==null&&i!==void 0?i:"0"),mtime:new Date((a=O.headers.get(W))!==null&&a!==void 0?a:""),ETag:(n=O.headers.get(Q))!==null&&n!==void 0?n:""};let A=N(P),S=A.listMultipartUploadsResult||A.error||A;return S.uploads||S}async get(r,e={}){this._checkKey(r),this._log("info",`Getting object ${r}`);let t={[T]:U,[E]:R},s=$(r),{url:i,headers:a}=await this._sign("GET",s,e,t,"");return(await this._sendRequest(i,"GET",a)).text()}async getResponse(r,e=!0,t=0,s=this.maxRequestSizeInBytes,i={}){this._checkKey(r);let a=i,n={[T]:U,[E]:R,...e?{}:{range:`bytes=${t}-${s-1}`}},h=$(r),{url:o,headers:c}=await this._sign("GET",h,a,n,""),f=`${o}?${new URLSearchParams(a)}`;return this._sendRequest(f,"GET",c)}async put(r,e){if(this._checkKey(r),!(e instanceof Buffer||typeof e=="string"))throw this._log("error",k),new TypeError(k);this._log("info",`Uploading object ${r}`);let t=typeof e=="string"?Buffer.byteLength(e):e.length,s={[b]:t},i=$(r),{url:a,headers:n}=await this._sign("PUT",i,{},s,e);return await this._sendRequest(a,"PUT",n,e)}async getMultipartUploadId(r,e=de){if(this._checkKey(r),typeof e!="string")throw this._log("error",`${u}fileType must be a string`),new TypeError(`${u}fileType must be a string`);this._log("info",`Initiating multipart upload for object ${r}`);let t={uploads:""},s={[T]:e,[E]:R},i=$(r),{url:a,headers:n}=await this._sign("POST",i,t,s,""),h=`${a}?${new URLSearchParams(t)}`,o=await(await this._sendRequest(h,"POST",n)).text(),c=N(o);if(typeof c=="object"&&c!==null&&"error"in c&&typeof c.error=="object"&&c.error!==null&&"message"in c.error){let f=String(c.error.message);throw this._log("error",`${u}Failed to abort multipart upload: ${f}`),new Error(`${u}Failed to abort multipart upload: ${f}`)}if(typeof c=="object"&&c!==null){if(!c.initiateMultipartUploadResult||!c.initiateMultipartUploadResult.uploadId)throw this._log("error",`${u}Failed to create multipart upload: no uploadId in response`),new Error(`${u}Failed to create multipart upload: Missing upload ID in response`);return c.initiateMultipartUploadResult.uploadId}else throw this._log("error",`${u}Failed to create multipart upload: unexpected response format`),new Error(`${u}Failed to create multipart upload: Unexpected response format`)}async uploadPart(r,e,t,s,i={}){this._validateUploadPartParams(r,e,t,s,i);let a={uploadId:t,partNumber:s,...i},n={[b]:e.length},h=$(r),{url:o,headers:c}=await this._sign("PUT",h,a,n,e),f=`${o}?${new URLSearchParams(a)}`,_=(await this._sendRequest(f,"PUT",c,e)).headers.get("etag")||"";return{partNumber:s,ETag:_}}_validateUploadPartParams(r,e,t,s,i){if(this._checkKey(r),!(e instanceof Buffer||typeof e=="string"))throw this._log("error",k),new TypeError(k);if(typeof t!="string"||t.trim().length===0)throw this._log("error",x),new TypeError(x);if(!Number.isInteger(s)||s<=0)throw this._log("error",`${u}partNumber must be a positive integer`),new TypeError(`${u}partNumber must be a positive integer`);this._checkOpts(i)}async completeMultipartUpload(r,e,t){if(this._checkKey(r),typeof e!="string"||e.trim().length===0)throw this._log("error",x),new TypeError(x);if(!Array.isArray(t)||t.length===0)throw this._log("error",J),new TypeError(J);if(!t.every(y=>typeof y.partNumber=="number"&&typeof y.ETag=="string"))throw this._log("error",Z),new TypeError(Z);this._log("info",`Complete multipart upload ${e} for object ${r}`);let s={uploadId:e},i=this._buildCompleteMultipartUploadXml(t),a={[T]:z,[b]:Buffer.byteLength(i).toString(),[E]:await M(i)},n=$(r),{url:h,headers:o}=await this._sign("POST",n,s,a,i),c=`${h}?${new URLSearchParams(s)}`,f=await(await this._sendRequest(c,"POST",o,i)).text(),_=N(f);if(typeof _=="object"&&_!==null&&"error"in _&&typeof _.error=="object"&&_.error!==null&&"message"in _.error){let y=String(_.error.message);throw this._log("error",`${u}Failed to abort multipart upload: ${y}`),new Error(`${u}Failed to abort multipart upload: ${y}`)}return _.completeMultipartUploadResult}async abortMultipartUpload(r,e){if(this._checkKey(r),typeof e!="string"||e.trim().length===0)throw this._log("error",x),new TypeError(x);this._log("info",`Aborting multipart upload ${e} for object ${r}`);let t={uploadId:e},s={[T]:z,[E]:R};try{let i=$(r),{url:a,headers:n}=await this._sign("DELETE",i,t,s,""),h=`${a}?${new URLSearchParams(t)}`,o=await this._sendRequest(h,"DELETE",n);if(o.ok){let c=await o.text(),f=N(c);if(typeof f=="object"&&f!==null&&"error"in f&&typeof f.error=="object"&&f.error!==null&&"message"in f.error){let _=String(f.error.message);throw this._log("error",`${u}Failed to abort multipart upload: ${_}`),new Error(`${u}Failed to abort multipart upload: ${_}`)}return{status:"Aborted",key:r,uploadId:e,response:f}}else throw this._log("error",`${u}Abort request failed with status ${o.status}`),new Error(`${u}Abort request failed with status ${o.status}`)}catch(i){let a=i instanceof Error?i.message:String(i);throw this._log("error",`${u}Failed to abort multipart upload for key ${r}: ${a}`),new Error(`${u}Failed to abort multipart upload for key ${r}: ${a}`)}}_buildCompleteMultipartUploadXml(r){return` - ${e.map((t) => ` + ${r.map(e=>` - ${t.partNumber} - ${t.ETag} + ${e.partNumber} + ${e.ETag} `).join("")} - `; - } - async delete(e) { - if (typeof e != "string" || e.trim().length === 0) throw this._log("error", h), new TypeError(h); - this._log("info", `Deleting object ${e}`); - let t = { [w]: S, [y]: _ }, r = f(e), { url: s, headers: n } = await this._sign("DELETE", r, {}, t, ""); - return (await this._sendRequest(s, "DELETE", n)).text(); - } - async _sendRequest(e, t, r, s) { - this._log("info", `Sending ${t} request to ${e}, headers: ${JSON.stringify(r)}`); - let n = await fetch(e, { method: t, headers: r, body: s, signal: this.requestAbortTimeout !== void 0 ? AbortSignal.timeout(this.requestAbortTimeout) : void 0 }); - return n.ok || await this._handleErrorResponse(n), n; - } - async _handleErrorResponse(e) { - let t = await e.text(), r = e.headers.get("x-amz-error-code") || "Unknown", s = e.headers.get("x-amz-error-message") || e.statusText; - throw this._log("error", `${c}Request failed with status ${e.status}: ${r} - ${s},err body: ${t}`), new Error(`${c}Request failed with status ${e.status}: ${r} - ${s}, err body: ${t}`); - } - _buildCanonicalQueryString(e) { - return Object.keys(e).length < 1 ? "" : Object.keys(e).sort().map((t) => `${encodeURIComponent(t)}=${encodeURIComponent(e[t])}`).join("&"); - } - async _getSignatureKey(e) { - let t = await D(`AWS4${this.secretAccessKey}`, e), r = await D(t, this.region), s = await D(r, P); - return D(s, C); - } -}; -var N = async (m) => { - let e = Y("sha256"); - return e.update(m), e.digest("hex"); -}; -var D = async (m, e, t) => { - let r = Q("sha256", m); - return r.update(e), r.digest(t); -}; -var b = (m) => { - let e = (n) => n.replace(/"/g, '"').replace(/'/g, "'").replace(/</g, "<").replace(/>/g, ">").replace(/&/g, "&"), t = {}, r = /<(\w)([-\w]+)(?:\/|[^>]*>((?:(?!<\1)[\s\S])*)<\/\1\2)>/gm, s; - for (; s = r.exec(m); ) { - let [, n, i, a] = s, u = n.toLowerCase() + i, o = a != null ? b(a) : true; - typeof o == "string" ? t[u] = e(o) : Array.isArray(t[u]) ? t[u].push(o) : t[u] = t[u] != null ? [t[u], o] : oe[u] ? [o] : o; - } - return Object.keys(t).length ? t : e(m); -}; - -// src/lowstorage.js -import avro from "avro-js"; - -// src/helpers.js -import { randomUUID } from "node:crypto"; -var matchesQuery = (document, query) => { - return Object.keys(query).every((key) => document[key] === query[key]); -}; -var generateUUID = async () => { - let _randomUUID = randomUUID || (await import("node:crypto")).randomUUID; - if (typeof _randomUUID !== "undefined" && typeof _randomUUID === "function") { - return _randomUUID(); - } else { - return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function(c2) { - var r = Math.random() * 16 | 0, v = c2 === "x" ? r : r & 3 | 8; - return v.toString(16); - }); - } -}; -var _getAvroType = (value, name = "SubAutoGenerated") => { - switch (typeof value) { - case "string": - if (_isUUID(value)) { - return { - type: "string", - name: "_id", - size: 16, - logicalType: "UUID" - }; - } - return "string"; - case "number": - return Number.isInteger(value) ? "int" : "float"; - case "boolean": - return "boolean"; - case "object": - if (value === null) return "null"; - if (Array.isArray(value)) return { type: "array", items: _getAvroType(value[0]) }; - return inferAvroType(value, name); - default: - return "string"; - } -}; -var inferAvroType = (data, typeName = "AutoGenerated") => { - if (Array.isArray(data)) { - data = data[0]; - } - const fields = Object.entries(data).map(([name, value]) => { - return { name, type: _getAvroType(value, `${typeName}.${name}`) }; - }); - return { - type: "record", - name: typeName, - fields - }; -}; -var _isUUID = (str) => { - const uuidV4Regex = /^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i; - return uuidV4Regex.test(str); -}; - -// src/lowstorage.js -var MODULE_NAME = "lowstorage"; -var PROJECT_DIR_PREFIX = "lowstorage/"; -var SCHEMA_SUFFIX = ".avro"; -var CHUNG_1MB = 1024 * 1024; -var CHUNG_5MB = 5 * CHUNG_1MB; -var lowstorage = class { - constructor(options = { - accessKeyId: void 0, - secretAccessKey: void 0, - endpoint: void 0, - bucketName: void 0, - region: "auto", - logger: null - }) { - this._checkArgs(options); - this._schemas = /* @__PURE__ */ new Map(); - this._s3 = new x(options); - this._avro = avro; - } - _checkArgs = (args) => { - const requiredFields = ["accessKeyId", "secretAccessKey", "endpoint", "bucketName"]; - for (const field of requiredFields) { - if (!args[field]) { - throw new Error(`${MODULE_NAME}: ${field} is required`); - } - } - }; - async listCollections() { - const listed = await this._s3.list(PROJECT_DIR_PREFIX, "", 1e3); - return listed.map((entry) => entry.key.slice(PROJECT_DIR_PREFIX.length, -SCHEMA_SUFFIX.length)); - } - async createCollection(colName, schema = void 0) { - try { - if (colName === void 0 || colName.trim() === "" || colName === null) { - throw new Error(`${MODULE_NAME}: Collection name is required`); - } - if (await this.collectionExists(colName)) { - throw new Error(`${MODULE_NAME}: Collection ${colName} already exists`); - } - if (schema) { - const avroType = this._avro.parse(schema); - this._schemas.set(colName, avroType); - } - return this.collection(colName, schema); - } catch (error) { - throw new Error(`${MODULE_NAME}: ${error.message}`); - } - } - async removeCollection(colName) { - try { - const exists = await this._s3.fileExists(`${PROJECT_DIR_PREFIX}${colName}${SCHEMA_SUFFIX}`); - if (exists) { - const resp = await this._s3.delete(`${PROJECT_DIR_PREFIX}${colName}${SCHEMA_SUFFIX}`); - if (resp.status === 200) { - return true; - } - return false; - } - return true; - } catch (error) { - throw new Error(`${MODULE_NAME}: ${error.message}`); - } - } - async collectionExists(colName) { - try { - const exists = await this._s3.fileExists(`${PROJECT_DIR_PREFIX}${colName}${SCHEMA_SUFFIX}`); - return exists; - } catch (error) { - if (error.message.includes("Not Found")) { - return false; - } - throw new Error(`${MODULE_NAME}: ${error.message}`); - } - } - async updateCollectionSchema(colName, schema) { - try { - if (colName === void 0 || colName.trim() === "" || colName === null) { - throw new Error(`${MODULE_NAME}: Collection name is required`); - } - const exists = await this.collectionExists(colName); - if (!exists) { - throw new Error(`${MODULE_NAME}: Collection ${colName} does not exist`); - } - if (schema === void 0 || schema === null) { - throw new Error(`${MODULE_NAME}: Schema is required`); - } - const avroType = this._avro.parse(schema); - this._schemas.set(colName, avroType); - const resp = await this._s3.put(`${PROJECT_DIR_PREFIX}${colName}${SCHEMA_SUFFIX}`, JSON.stringify(schema)); - if (resp.status === 200) { - return true; - } else { - throw new Error(`${MODULE_NAME}: Failed to update schema for collection ${colName}`); - } - } catch (error) { - throw new Error(`${MODULE_NAME}: ${error.message}`); - } - } - async collection(colName, schema = void 0) { - try { - if (colName === void 0 || colName.trim() === "" || colName === null) { - throw new Error(`${MODULE_NAME}: Collection name is required`); - } - if (typeof schema === "undefined") { - if (this._schemas.has(colName)) { - return new Collection(colName, this._s3, this._schemas.get(colName)); - } - const exists = await this._s3.fileExists(`${PROJECT_DIR_PREFIX}${colName}${SCHEMA_SUFFIX}`); - if (exists) { - const schemaContent = await this._s3.get(`${PROJECT_DIR_PREFIX}${colName}${SCHEMA_SUFFIX}`); - const avroType = this._avro.parse(schemaContent); - this._schemas.set(colName, avroType); - return new Collection(colName, this._s3, avroType); - } - return new Collection(colName, this._s3, void 0); - } - return new Collection(colName, this._s3, this._avro.parse(schema)); - } catch (error) { - throw new Error(`${MODULE_NAME}: ${error.message}`); - } - } -}; -var Collection = class { - constructor(colName, s3, avroType = void 0) { - this._colName = colName; - this._s3 = s3; - this._avro = avro; - this._avroType = avroType; - } - async insert(doc, schema = void 0) { - try { - if (doc === void 0 || doc === null) { - throw new Error(`${MODULE_NAME}: Document is required for insert`); - } - if (typeof doc !== "object" && !Array.isArray(doc)) { - throw new Error(`${MODULE_NAME}: Document must be an object or an array`); - } - const items = !Array.isArray(doc) ? [doc] : doc; - const avroType = !!schema ? this._avro.parse(schema) : this._avroType || this._avro.parse(inferAvroType(doc)); - if (avroType === void 0) { - throw new Error(`${MODULE_NAME}: Schema is required - Pass a schema to the insert method`); - } - this._avroType = avroType; - const wrapperType = this._avro.parse({ type: "array", items: this._avroType }); - const bufferData = await this._loadDataBuffer(); - const data = bufferData.length > 0 ? wrapperType.fromBuffer(bufferData) : []; - for (let item of items) { - if (typeof item !== "object" || item === null) { - throw new Error("Invalid input: input must be an object or an array of objects"); - } - item._id = item._id || await generateUUID(); - const valid = this._avroType.isValid(item); - if (!valid) { - throw new Error(`${MODULE_NAME}: Invalid document or schema`); - } - data.push(item); - } - const resp = await this._saveDataBuffer(wrapperType.toBuffer(data)); - if (resp) { - return items; - } else { - throw new Error(`${MODULE_NAME}: Failed to insert document`); - } - } catch (error) { - throw new Error(`${MODULE_NAME}: ${error.message}`); - } - } - async _loadDataBuffer() { - try { - const KEY = `${PROJECT_DIR_PREFIX}${this._colName}${SCHEMA_SUFFIX}`; - const CHUNK_SIZE = this._s3.getMaxRequestSizeInBytes() || CHUNG_5MB; - let firstData = await this._s3.get(KEY); - if (firstData.length < CHUNK_SIZE) { - return Buffer.from(firstData, "utf8"); - } - let offset = CHUNK_SIZE; - let bufferArr = [Buffer.from(firstData, "utf8")]; - let repeat = true; - while (repeat) { - const nextDataResponse = await this._s3.getResponse(KEY, false, offset, offset + CHUNK_SIZE); - const nextDataBody = await nextDataResponse.text(); - bufferArr.push(Buffer.from(nextDataBody, "utf8")); - offset += CHUNG; - const contentLength = nextDataResponse.headers.get("content-length") || nextDataBody.length; - if (contentLength < CHUNK_SIZE) { - repeat = false; - } - } - return Buffer.concat(bufferArr); - } catch (error) { - if (error.toString().indexOf("status 404: Unknown - Not Found") > -1) { - return Buffer.from(""); - } - throw new Error(`${MODULE_NAME}: ${error.message}`); - } - } - async _saveDataBuffer(data) { - try { - const KEY = `${PROJECT_DIR_PREFIX}${this._colName}${SCHEMA_SUFFIX}`; - const resp = await this._s3.put(KEY, data); - if (resp.status === 200) { - return true; - } else { - throw new Error(`${MODULE_NAME}: Failed to save data`); - } - } catch (error) { - throw new Error(`${MODULE_NAME}: ${error.message}`); - } - } - async find(query = {}, options = {}) { - try { - const bufferData = await this._loadDataBuffer(); - const wrapperType = this._avro.parse({ type: "array", items: this._avroType }); - const data = bufferData.length > 0 ? wrapperType.fromBuffer(bufferData) : []; - const start = parseInt(options.skip, 10) || 0; - const end = parseInt(options.limit, 10) ? start + parseInt(options.limit, 10) : void 0; - const filteredData = data.filter((doc) => matchesQuery(doc, query)).slice(start, end); - return filteredData; - } catch (error) { - throw new Error(`${MODULE_NAME}: ${error.message}`); - } - } - async findOne(query = {}) { - return (await this.find(query))[0] || null; - } - async update(query = {}, update = {}) { - try { - const bufferData = await this._loadDataBuffer(); - const wrapperType = this._avro.parse({ type: "array", items: this._avroType }); - const data = bufferData.length > 0 ? wrapperType.fromBuffer(bufferData) : []; - let updatedCount = 0; - for (let i = 0; i < data.length; i++) { - if (matchesQuery(data[i], query)) { - Object.assign(data[i], update); - updatedCount++; - } - } - if (updatedCount > 0) { - const resp = await this._saveDataBuffer(wrapperType.toBuffer(data)); - if (resp) { - return updatedCount; - } - } - return 0; - } catch (error) { - throw new Error(`${MODULE_NAME}: ${error.message}`); - } - } - async updateOne(query = {}, update = {}) { - try { - const bufferData = await this._loadDataBuffer(); - const wrapperType = this._avro.parse({ type: "array", items: this._avroType }); - const data = bufferData.length > 0 ? wrapperType.fromBuffer(bufferData) : []; - const docIndex = data.findIndex((doc) => matchesQuery(doc, query)); - if (docIndex !== -1) { - Object.assign(data[docIndex], update); - const resp = await this._saveDataBuffer(wrapperType.toBuffer(data)); - if (resp) { - return 1; - } - } - return 0; - } catch (error) { - throw new Error(`${MODULE_NAME}: ${error.message}`); - } - } - async delete(query = {}) { - try { - const bufferData = await this._loadDataBuffer(); - const wrapperType = this._avro.parse({ type: "array", items: this._avroType }); - const data = bufferData.length > 0 ? wrapperType.fromBuffer(bufferData) : []; - const initialLength = data.length; - const newData = data.filter((doc) => !matchesQuery(doc, query)); - const resp = await this._saveDataBuffer(wrapperType.toBuffer(newData)); - if (resp) { - return initialLength - newData.length; - } - return 0; - } catch (error) { - throw new Error(`${MODULE_NAME}: ${error.message}`); - } - } - async count(query = {}) { - try { - if (query === void 0 || query === null) { - throw new Error(`${MODULE_NAME}: Query is required`); - } - if (Object.keys(query).length === 0) { - const bufferData = await this._loadDataBuffer(); - const wrapperType = this._avro.parse({ type: "array", items: this._avroType }); - const data = bufferData.length > 0 ? wrapperType.fromBuffer(bufferData) : []; - return data.length || null; - } - return (await this.find(query)).length; - } catch (error) { - throw new Error(`${MODULE_NAME}: ${error.message}`); - } - } -}; -var lowstorage_default = lowstorage; -export { - lowstorage_default as default, - lowstorage -}; + `}async delete(r){this._checkKey(r),this._log("info",`Deleting object ${r}`);let e={[T]:U,[E]:R},t=$(r),{url:s,headers:i}=await this._sign("DELETE",t,{},e,"");return(await this._sendRequest(s,"DELETE",i)).text()}async _sendRequest(r,e,t,s){this._log("info",`Sending ${e} request to ${r}, headers: ${JSON.stringify(t)}`);let i=await fetch(r,{method:e,headers:t,body:s,signal:this.requestAbortTimeout!==void 0?AbortSignal.timeout(this.requestAbortTimeout):void 0});return i.ok||await this._handleErrorResponse(i),i}async _handleErrorResponse(r){let e=await r.text(),t=r.headers.get("x-amz-error-code")||"Unknown",s=r.headers.get("x-amz-error-message")||r.statusText;throw this._log("error",`${u}Request failed with status ${r.status}: ${t} - ${s},err body: ${e}`),new Error(`${u}Request failed with status ${r.status}: ${t} - ${s}, err body: ${e}`)}_buildCanonicalQueryString(r){return Object.keys(r).length<1?"":Object.keys(r).sort().map(e=>`${encodeURIComponent(e)}=${encodeURIComponent(r[e])}`).join("&")}async _getSignatureKey(r){let e=await L(`AWS4${this.secretAccessKey}`,r),t=await L(e,this.region),s=await L(t,K);return L(s,F)}},M=async r=>{let e=ie("sha256");return e.update(r),e.digest("hex")},L=async(r,e,t)=>{let s=se("sha256",r);return s.update(e),s.digest(t)},N=r=>{let e=a=>a.replace(/"/g,'"').replace(/'/g,"'").replace(/</g,"<").replace(/>/g,">").replace(/&/g,"&"),t={},s=/<(\w)([-\w]+)(?:\/|[^>]*>((?:(?!<\1)[\s\S])*)<\/\1\2)>/gm,i;for(;i=s.exec(r);){let[,a,n,h]=i,o=a.toLowerCase()+n,c=h!=null?N(h):!0;typeof c=="string"?t[o]=e(c):Array.isArray(t[o])?t[o].push(c):t[o]=t[o]!=null?[t[o],c]:me[o]?[c]:c}return Object.keys(t).length?t:e(r)};import ce from"avro-js";var l={MISSING_ARGUMENT:"MISSING_ARGUMENT",COLLECTION_EXISTS:"COLLECTION_EXISTS",CREATE_COLLECTION_ERROR:"CREATE_COLLECTION_ERROR",RENAME_COLLECTION_ERROR:"RENAME_COLLECTION_ERROR",REMOVE_COLLECTION_ERROR:"REMOVE_COLLECTION_ERROR",UPDATE_COLLECTION_SCHEMA_ERROR:"UPDATE_COLLECTION_SCHEMA_ERROR",COLLECTION_NOT_FOUND:"COLLECTION_NOT_FOUND",SCHEMA_VALIDATION_ERROR:"SCHEMA_VALIDATION_ERROR",DOCUMENT_VALIDATION_ERROR:"DOCUMENT_VALIDATION_ERROR",S3_OPERATION_ERROR:"S3_OPERATION_ERROR",FIND_ERROR:"FIND_ERROR",FIND_ONE_ERROR:"FIND_ONE_ERROR",SAVE_DATA_ERROR:"SAVE_DATA_ERROR",INSERT_ERROR:"INSERT_ERROR",UPDATE_ERROR:"UPDATE_ERROR",UPDATE_ONE_ERROR:"UPDATE_ONE_ERROR",DELETE_ERROR:"DELETE_ERROR",COUNT_ERROR:"COUNT_ERROR",UNKNOWN_ERROR:"UNKNOWN_ERROR"},p=class extends Error{constructor(e,t=l.UNKNOWN_ERROR){super(`lowstorageError: ${e} :: code: ${t}`),this.name=this.constructor.name,this.code=t,Error.captureStackTrace(this,this.constructor)}},B=class extends p{constructor(e){super(`Collection ${e} not found`,l.COLLECTION_NOT_FOUND)}},D=class extends p{constructor(e){super(e,l.SCHEMA_VALIDATION_ERROR)}},I=class extends p{constructor(e){super(e,l.DOCUMENT_VALIDATION_ERROR)}},g=class extends p{constructor(e,t){super(`S3 ${t} operation failed: ${e}`,l.S3_OPERATION_ERROR)}};import{randomUUID as q}from"node:crypto";var v=(r,e)=>Object.keys(e).every(t=>r[t]===e[t]),oe=async()=>typeof q<"u"&&typeof q=="function"?q():typeof crypto<"u"&&typeof crypto=="object"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(r){var e=Math.random()*16|0,t=r==="x"?e:e&3|8;return t.toString(16)}),ne=(r,e="SubAutoGenerated")=>{switch(typeof r){case"string":return $e(r)?{type:"string",name:"_id",size:16,logicalType:"UUID"}:"string";case"number":return Number.isInteger(r)?"int":"float";case"boolean":return"boolean";case"object":return r===null?"null":Array.isArray(r)?{type:"array",items:ne(r[0])}:H(r,e);default:return"string"}},H=(r,e="AutoGenerated")=>{Array.isArray(r)&&(r=r[0]);let t=Object.entries(r).map(([s,i])=>({name:s,type:ne(i,`${e}.${s}`)}));return{type:"record",name:e,fields:t}},$e=r=>/^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i.test(r);var d="lowstorage",w="/",G="lowstorage",m=".avro",Te=1024*1024,Ie=5*Te,he=class{constructor(e={accessKeyId:void 0,secretAccessKey:void 0,endpoint:void 0,bucketName:void 0,region:"auto",logger:null,dirPrefix:G}){this._checkArgs(e),this._schemas=new Map,this._s3=new ae(e),this._dirPrefix=e.dirPrefix||G,this._avro=ce}_checkArgs=e=>{let t=["accessKeyId","secretAccessKey","endpoint","bucketName"];for(let s of t)if(!e[s])throw new p(`${d}: ${s} is required`,l.MISSING_ARGUMENT)};_hasColName=e=>{if(e.trim()===""||e===null||typeof e>"u")throw new p(`${d}: Collection name is required`,l.MISSING_ARGUMENT)};async listCollections(){try{let e=await this._s3.list(w,this._dirPrefix);return typeof e=="object"&&e!==null&&e.keyCount==="0"?[]:e.map(t=>t.key.slice(this._dirPrefix.length+1,-m.length))}catch(e){throw new g(`${d}: ${e.message}`,l.S3_OPERATION_ERROR)}}async collectionExists(e){try{return this._hasColName(e),await this._s3.fileExists(`${this._dirPrefix}${w}${e}${m}`)}catch(t){if(t.message.includes("Not Found"))return!1;throw new p(`${d}: ${t.message}`,l.COLLECTION_NOT_FOUND)}}async createCollection(e,t,s=[]){try{if(this._hasColName(e),!await this.collectionExists(e))return await this._s3.put(`${this._dirPrefix}${w}${e}${m}`,s.length>0?s:""),this.collection(e,t);throw new p(`${d}: Collection ${e} already exists`,l.COLLECTION_EXISTS)}catch(i){throw i instanceof p?i:new p(`${d}: ${i.message}`,l.CREATE_COLLECTION_ERROR)}}async removeCollection(e){try{this._hasColName(e);let t=`${this._dirPrefix}${w}${e}${m}`;if(await this.collectionExists(e)){await this._s3.delete(t);let i=await this.collectionExists(e);if(typeof i=="boolean")return!i;throw new g(`${d}: Failed to delete collection ${e}`,l.S3_OPERATION_ERROR)}throw new p(`${d}: Collection ${e} does not exist`,l.REMOVE_COLLECTION_ERROR)}catch(t){throw t instanceof g?t:new p(`${d}: Failed to remove collection: ${t.message}`,l.REMOVE_COLLECTION_ERROR)}}async renameCollection(e,t){try{if(this._hasColName(e),this._hasColName(t),!await this.collectionExists(e))throw new B(`${d}: Collection ${e} does not exist`,l.COLLECTION_NOT_FOUND);let i=this.collection(e),a=await i._loadDataBuffer();if(!await this.removeCollection(e))throw new p(`${d}: Failed to rename collection`,l.RENAME_COLLECTION_ERROR);return await this.createCollection(t,i._avroType,a)}catch(s){throw s instanceof p?s:new p(`${d}: Rename collection failed: ${s.message}`,l.RENAME_COLLECTION_ERROR)}}async collection(e,t,s=!0){try{if(this._hasColName(e),typeof t>"u"){if(this._schemas.has(e))return new C(e,this._s3,this._schemas.get(e),this._dirPrefix);if(await this._s3.fileExists(`${this._dirPrefix}${w}${e}${m}`)){let a=await this._s3.get(`${this._dirPrefix}${w}${e}${m}`),n=this._avro.parse(a);return this._schemas.set(e,n),new C(e,this._s3,n,this._dirPrefix)}return s&&this._s3.put(`${this._dirPrefix}${w}${e}${m}`,""),new C(e,this._s3,void 0,this._dirPrefix)}return s&&(await this._s3.fileExists(`${this._dirPrefix}${w}${e}${m}`)||await this._s3.put(`${this._dirPrefix}${w}${e}${m}`,"")),new C(e,this._s3,this._avro.parse(t),this._dirPrefix)}catch(i){throw new p(`${d}: ${i.message}`,l.COLLECTION_NOT_FOUND)}}s3=()=>this._s3},C=class{constructor(e,t,s=void 0,i=G){this._colName=e,this._s3=t,this._avro=ce,this._avroType=s,this._dirPrefix=i}async insert(e,t=void 0){try{if(e==null)throw new p(`${d}: Document is required for insert`,l.MISSING_ARGUMENT);if(typeof e!="object"&&!Array.isArray(e))throw new I(`${d}: Document must be an object or an array`,l.DOCUMENT_VALIDATION_ERROR);let s=Array.isArray(e)?e:[e],i=t?this._avro.parse(t):this._avroType||this._avro.parse(H(e));if(!i)throw new D(`${d}: Schema is required - Pass a schema to the insert method`,l.SCHEMA_VALIDATION_ERROR);this._avroType=i;let a=this._avro.parse({type:"array",items:this._avroType}),n=await this._loadDataBuffer(),h=n.length>0?a.fromBuffer(n):[];for(let c of s){if(typeof c!="object"||c===null)throw new I(`${d}: Invalid input: input must be an object or an array of objects`,l.DOCUMENT_VALIDATION_ERROR);if(c._id=c._id||await oe(),!this._avroType.isValid(c))throw new I(`${d}: Invalid document or schema`,l.DOCUMENT_VALIDATION_ERROR);h.push(c)}if(!await this._saveDataBuffer(a.toBuffer(h)))throw new g(`${d}: Failed to insert document`,l.S3_OPERATION_ERROR);return s}catch(s){throw s instanceof p?s:new p(`${d} Insert operation failed: ${s.message}`,l.INSERT_ERROR)}}async _loadDataBuffer(){try{let e=`${this._dirPrefix}${w}${this._colName}${m}`,t=this._s3.getMaxRequestSizeInBytes()||Ie,s=await this._s3.get(e);if(s.length-1)return Buffer.from("");throw new g(`${d}: Failed to load data buffer: ${e.message}`,l.S3_OPERATION_ERROR)}}async _saveDataBuffer(e){try{let t=`${this._dirPrefix}${w}${this._colName}${m}`;if((await this._s3.put(t,e)).status!==200)throw new g(`${d}: Failed to save data`,l.S3_OPERATION_ERROR);return!0}catch(t){throw t instanceof g?t:new p(`${d}: ${t.message}`,l.SAVE_DATA_ERROR)}}async find(e={},t={}){try{let s=await this._loadDataBuffer();if(s.length===0)return[];let i=this._avro.parse({type:"array",items:this._avroType}),a=s.length>0?i.fromBuffer(s):[],n=parseInt(t.skip,10)||0,h=parseInt(t.limit,10)?n+parseInt(t.limit,10):void 0;return a.filter(c=>v(c,e)).slice(n,h)}catch(s){throw new p(`${d}: Find operation failed: ${s.message}`,l.FIND_ERROR)}}async findOne(e={}){try{return(await this.find(e))[0]||[]}catch(t){throw new p(`${d}: FindOne operation failed: ${t.message}`,l.FIND_ONE_ERROR)}}async update(e={},t={}){try{if(!this._avroType)throw new D(`${d}: Schema is not defined for this collection`,l.SCHEMA_VALIDATION_ERROR);let s=await this._loadDataBuffer();if(s.length===0)return 0;let i=this._avro.parse({type:"array",items:this._avroType}),a=s.length>0?i.fromBuffer(s):[],n=0;for(let h=0;h0&&!await this._saveDataBuffer(i.toBuffer(a)))throw new g(`${d}: Failed to update document`,l.S3_OPERATION_ERROR);return n}catch(s){throw s instanceof g?s:new p(`${d}: Update operation failed: ${s.message}`,l.UPDATE_ERROR)}}async updateOne(e={},t={}){try{if(!this._avroType)throw new D(`${d}: Schema is not defined for this collection`,l.SCHEMA_VALIDATION_ERROR);let s=await this._loadDataBuffer();if(s.length===0)return 0;let i=this._avro.parse({type:"array",items:this._avroType}),a=s.length>0?i.fromBuffer(s):[],n=a.findIndex(h=>v(h,e));if(n!==-1){let h={...a[n],...t};if(!this._avroType.isValid(h))throw new I(`${d}: Invalid document or schema`,l.DOCUMENT_VALIDATION_ERROR);if(a[n]=h,!await this._saveDataBuffer(i.toBuffer(a)))throw new g(`${d}: Failed to update document`,l.S3_OPERATION_ERROR);return 1}return 0}catch(s){throw s instanceof p?s:new p(`${d}: UpdateOne operation failed: ${s.message}`,l.UPDATE_ONE_ERROR)}}async delete(e={}){try{let t=await this._loadDataBuffer();if(t.length===0)return 0;let s=this._avro.parse({type:"array",items:this._avroType}),i=t.length>0?s.fromBuffer(t):[],a=i.length,n=i.filter(o=>!v(o,e));if(!await this._saveDataBuffer(s.toBuffer(n)))throw new g(`${d}: Failed to delete document`,l.S3_OPERATION_ERROR);return a-n.length}catch(t){throw t instanceof g?t:new p(`${d}: Delete operation failed: ${t.message}`,l.DELETE_ERROR)}}async count(e={}){try{if(e==null)throw new p(`${d}: Query is required`,l.MISSING_ARGUMENT);if(Object.keys(e).length===0){let t=await this._loadDataBuffer();if(t.length===0)return 0;let s=this._avro.parse({type:"array",items:this._avroType});return(t.length>0?s.fromBuffer(t):[]).length||null}return(await this.find(e)).length}catch(t){throw new p(`${d}: Count operation failed: ${t.message}`,l.COUNT_ERROR)}}};export{he as lowstorage,p as lowstorageError,l as lowstorage_ERROR_CODES}; //# sourceMappingURL=lowstorage.js.map diff --git a/lib/lowstorage.js.map b/lib/lowstorage.js.map index 4bc7682..55e5ef9 100644 --- a/lib/lowstorage.js.map +++ b/lib/lowstorage.js.map @@ -1,7 +1,7 @@ { "version": 3, - "sources": ["../node_modules/ultralight-s3/src/index.ts", "../src/lowstorage.js", "../src/helpers.js"], - "sourcesContent": ["'use strict';\n\nimport { parse } from 'node:path';\n\ninterface S3Config {\n accessKeyId: string;\n secretAccessKey: string;\n endpoint: string;\n bucketName: string;\n region?: string;\n maxRequestSizeInBytes?: number;\n requestAbortTimeout?: number;\n logger?: Logger;\n}\n\ndeclare global {\n interface Crypto {\n createHmac: (\n algorithm: string,\n key: string | Buffer,\n ) => {\n update: (data: string | Buffer) => void;\n digest: (encoding?: 'hex' | 'base64' | 'latin1') => string;\n };\n createHash: (algorithm: string) => {\n update: (data: string | Buffer) => void;\n digest: (encoding?: 'hex' | 'base64' | 'latin1') => string;\n };\n }\n}\n\ninterface Logger {\n info: (message: string, ...args: any[]) => void;\n warn: (message: string, ...args: any[]) => void;\n error: (message: string, ...args: any[]) => void;\n}\n\ninterface UploadPart {\n partNumber: number;\n ETag: string;\n}\n\ninterface CompleteMultipartUploadResult {\n Location: string;\n Bucket: string;\n Key: string;\n ETag: string;\n}\n\ntype HttpMethod = 'POST' | 'GET' | 'HEAD' | 'PUT' | 'DELETE';\n\nlet _createHmac = crypto.createHmac || (await import('node:crypto')).createHmac;\nlet _createHash = crypto.createHash || (await import('node:crypto')).createHash;\n\nif (typeof _createHmac === 'undefined' && typeof _createHash === 'undefined') {\n console.error(\n 'ultralight-S3 Module: Crypto functions are not available, please report the issue with necessary description: https://github.com/sentienhq/ultralight-s3/issues',\n );\n}\n\n// Constants\nconst AWS_ALGORITHM = 'AWS4-HMAC-SHA256';\nconst AWS_REQUEST_TYPE = 'aws4_request';\nconst S3_SERVICE = 's3';\nconst LIST_TYPE = '2';\nconst UNSIGNED_PAYLOAD = 'UNSIGNED-PAYLOAD';\nconst DEFAULT_STREAM_CONTENT_TYPE = 'application/octet-stream';\nconst XML_CONTENT_TYPE = 'application/xml';\nconst JSON_CONTENT_TYPE = 'application/json';\n// List of keys that might contain sensitive information\nconst SENSITIVE_KEYS_REDACTED = ['accessKeyId', 'secretAccessKey', 'sessionToken', 'password'];\nconst MIN_MAX_REQUEST_SIZE_IN_BYTES = 5 * 1024 * 1024;\n\n// Headers\nconst HEADER_AMZ_CONTENT_SHA256 = 'x-amz-content-sha256';\nconst HEADER_AMZ_DATE = 'x-amz-date';\nconst HEADER_HOST = 'host';\nconst HEADER_AUTHORIZATION = 'Authorization';\nconst HEADER_CONTENT_TYPE = 'Content-Type';\nconst HEADER_CONTENT_LENGTH = 'Content-Length';\nconst HEADER_ETAG = 'etag';\nconst HEADER_LAST_MODIFIED = 'last-modified';\n\n// Error messages\nconst ERROR_PREFIX = 'ultralight-s3 Module: ';\nconst ERROR_ACCESS_KEY_REQUIRED = `${ERROR_PREFIX}accessKeyId must be a non-empty string`;\nconst ERROR_SECRET_KEY_REQUIRED = `${ERROR_PREFIX}secretAccessKey must be a non-empty string`;\nconst ERROR_ENDPOINT_REQUIRED = `${ERROR_PREFIX}endpoint must be a non-empty string`;\nconst ERROR_BUCKET_NAME_REQUIRED = `${ERROR_PREFIX}bucketName must be a non-empty string`;\nconst ERROR_KEY_REQUIRED = `${ERROR_PREFIX}key must be a non-empty string`;\nconst ERROR_UPLOAD_ID_REQUIRED = `${ERROR_PREFIX}uploadId must be a non-empty string`;\nconst ERROR_PARTS_REQUIRED = `${ERROR_PREFIX}parts must be a non-empty array`;\nconst ERROR_INVALID_PART = `${ERROR_PREFIX}Each part must have a partNumber (number) and ETag (string)`;\nconst ERROR_DATA_BUFFER_REQUIRED = `${ERROR_PREFIX}data must be a Buffer or string`;\nconst ERROR_PATH_REQUIRED = `${ERROR_PREFIX}path must be a string`;\nconst ERROR_PREFIX_TYPE = `${ERROR_PREFIX}prefix must be a string`;\nconst ERROR_MAX_KEYS_TYPE = `${ERROR_PREFIX}maxKeys must be a positive integer`;\n\nconst expectArray: { [key: string]: boolean } = {\n contents: true,\n};\n\nconst encodeAsHex = (c: string): string => `%${c.charCodeAt(0).toString(16).toUpperCase()}`;\n\nconst uriEscape = (uriStr: string): string => {\n return encodeURIComponent(uriStr).replace(/[!'()*]/g, encodeAsHex);\n};\n\nconst uriResourceEscape = (string: string): string => {\n return uriEscape(string).replace(/%2F/g, '/');\n};\n\n/**\n * S3 class for interacting with S3-compatible object storage services.\n * This class provides methods for common S3 operations such as uploading, downloading,\n * and deleting objects, as well as multipart uploads.\n *\n * @class\n * @example\n * const s3 = new S3({\n * accessKeyId: 'your-access-key',\n * secretAccessKey: 'your-secret-key',\n * endpoint: 'https://your-s3-endpoint.com',\n * bucketName: 'your-bucket-name',\n * region: 'us-east-1' // by default is auto\n * });\n *\n * // Upload a file\n * await s3.put('example.txt', 'Hello, World!');\n *\n * // Download a file\n * const content = await s3.get('example.txt');\n *\n * // Delete a file\n * await s3.delete('example.txt');\n */\nclass S3 {\n /**\n * Creates an instance of the S3 class.\n *\n * @constructor\n * @param {Object} config - Configuration options for the S3 instance.\n * @param {string} config.accessKeyId - The access key ID for authentication.\n * @param {string} config.secretAccessKey - The secret access key for authentication.\n * @param {string} config.endpoint - The endpoint URL of the S3-compatible service.\n * @param {string} [config.bucketName=''] - The name of the bucket to operate on.\n * @param {string} [config.region='auto'] - The region of the S3 service.\n * @param {number} [config.maxRequestSizeInBytes=5242880] - The maximum size of a single request in bytes (minimum for AWS S3 is 5MB).\n * @param {number} [config.requestAbortTimeout=undefined] - The timeout in milliseconds after which a request should be aborted (careful on streamed requests).\n * @param {Object} [config.logger=null] - A logger object with methods like info, warn, error.\n * @throws {TypeError} Will throw an error if required parameters are missing or of incorrect type.\n */\n private accessKeyId: string;\n private secretAccessKey: string;\n private endpoint: string;\n private bucketName: string;\n private region: string;\n private maxRequestSizeInBytes: number;\n private requestAbortTimeout?: number;\n private logger?: Logger;\n\n constructor({\n accessKeyId,\n secretAccessKey,\n endpoint,\n bucketName,\n region = 'auto',\n maxRequestSizeInBytes = MIN_MAX_REQUEST_SIZE_IN_BYTES,\n requestAbortTimeout = undefined,\n logger = undefined,\n }: S3Config) {\n this._validateConstructorParams(accessKeyId, secretAccessKey, endpoint, bucketName);\n this.accessKeyId = accessKeyId;\n this.secretAccessKey = secretAccessKey;\n this.endpoint = endpoint;\n this.bucketName = bucketName;\n this.region = region;\n this.maxRequestSizeInBytes = maxRequestSizeInBytes;\n this.requestAbortTimeout = requestAbortTimeout;\n this.logger = logger;\n }\n\n private _validateConstructorParams(\n accessKeyId: string,\n secretAccessKey: string,\n endpoint: string,\n bucketName: string,\n ): void {\n if (typeof accessKeyId !== 'string' || accessKeyId.trim().length === 0)\n throw new TypeError(ERROR_ACCESS_KEY_REQUIRED);\n if (typeof secretAccessKey !== 'string' || secretAccessKey.trim().length === 0)\n throw new TypeError(ERROR_SECRET_KEY_REQUIRED);\n if (typeof endpoint !== 'string' || endpoint.trim().length === 0) throw new TypeError(ERROR_ENDPOINT_REQUIRED);\n if (typeof bucketName !== 'string' || bucketName.trim().length === 0)\n throw new TypeError(ERROR_BUCKET_NAME_REQUIRED);\n }\n\n /**\n * Internal method to log messages with sanitized sensitive information.\n * @param {string} level - The log level (e.g., 'info', 'warn', 'error').\n * @param {string} message - The message to log.\n * @param {Object} [additionalData={}] - Additional data to include in the log.\n * @private\n */\n private _log(\n level: 'info' | 'warn' | 'error',\n message: string,\n additionalData: Record | string = {},\n ): void {\n if (this.logger && typeof this.logger[level] === 'function') {\n // Function to recursively sanitize an object\n const sanitize = (obj: any): any => {\n if (typeof obj !== 'object' || obj === null) {\n return obj;\n }\n return Object.keys(obj).reduce(\n (acc: any, key) => {\n if (SENSITIVE_KEYS_REDACTED.includes(key.toLowerCase())) {\n acc[key] = '[REDACTED]';\n } else if (typeof obj[key] === 'object' && obj[key] !== null) {\n acc[key] = sanitize(obj[key]);\n } else {\n acc[key] = obj[key];\n }\n return acc;\n },\n Array.isArray(obj) ? [] : {},\n );\n };\n\n // Sanitize the additional data\n const sanitizedData = sanitize(additionalData);\n // Prepare the log entry\n const logEntry = {\n timestamp: new Date().toISOString(),\n level,\n message,\n ...sanitizedData,\n // Include some general context, but sanitize sensitive parts\n context: sanitize({\n bucketName: this.bucketName,\n region: this.region,\n endpoint: this.endpoint,\n // Only include the first few characters of the access key, if it exists\n accessKeyId: this.accessKeyId ? `${this.accessKeyId.substring(0, 4)}...` : undefined,\n }),\n };\n\n // Log the sanitized entry\n this.logger[level](logEntry);\n }\n }\n\n getBucketName = () => this.bucketName;\n setBucketName = (bucketName: string) => {\n this.bucketName = bucketName;\n };\n getRegion = () => this.region;\n setRegion = (region: string) => {\n this.region = region;\n };\n getEndpoint = () => this.endpoint;\n setEndpoint = (endpoint: string) => {\n this.endpoint = endpoint;\n };\n getMaxRequestSizeInBytes = () => this.maxRequestSizeInBytes;\n setMaxRequestSizeInBytes = (maxRequestSizeInBytes: number) => {\n this.maxRequestSizeInBytes = maxRequestSizeInBytes;\n };\n\n getProps = () => ({\n accessKeyId: this.accessKeyId,\n secretAccessKey: this.secretAccessKey,\n region: this.region,\n bucket: this.bucketName,\n endpoint: this.endpoint,\n maxRequestSizeInBytes: this.maxRequestSizeInBytes,\n requestAbortTimeout: this.requestAbortTimeout,\n logger: this.logger,\n });\n setProps = (props: S3Config) => {\n this._validateConstructorParams(props.accessKeyId, props.secretAccessKey, props.bucketName, props.endpoint);\n this.accessKeyId = props.accessKeyId;\n this.secretAccessKey = props.secretAccessKey;\n this.region = props.region || 'auto';\n this.bucketName = props.bucketName;\n this.endpoint = props.endpoint;\n this.maxRequestSizeInBytes = props.maxRequestSizeInBytes || MIN_MAX_REQUEST_SIZE_IN_BYTES;\n this.requestAbortTimeout = props.requestAbortTimeout;\n this.logger = props.logger;\n };\n\n /**\n * Get the content length of an object.\n * @param {string} key - The key of the object.\n * @returns {Promise} The content length of the object in bytes.\n * @throws {TypeError} If the key is not a non-empty string.\n */\n async getContentLength(key: string): Promise {\n if (typeof key !== 'string' || key.trim().length === 0) {\n this._log('error', ERROR_KEY_REQUIRED);\n throw new TypeError(ERROR_KEY_REQUIRED);\n }\n const headers = {\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('HEAD', encodedKey, {}, headers, '');\n const res = await this._sendRequest(url, 'HEAD', signedHeaders);\n const contentLength = res.headers.get(HEADER_CONTENT_LENGTH);\n return contentLength ? parseInt(contentLength, 10) : 0;\n }\n\n /**\n * Check if a bucket exists.\n * @returns {Promise} True if the bucket exists, false otherwise.\n */\n async bucketExists(): Promise {\n const headers = {\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n const { url, headers: signedHeaders } = await this._sign('HEAD', '', {}, headers, '');\n const res = await this._sendRequest(url, 'HEAD', signedHeaders);\n if (res.ok && res.status === 200) {\n return true;\n }\n return false;\n }\n\n // TBD\n // async createBucket(bucketName) {\n // const xmlBody = `\n // \n // \n // ${this.region}\n // \n // `;\n // const headers = {\n // [HEADER_CONTENT_TYPE]: XML_CONTENT_TYPE,\n // [HEADER_CONTENT_LENGTH]: Buffer.byteLength(xmlBody).toString(),\n // [HEADER_AMZ_CONTENT_SHA256]: await _hash(xmlBody),\n // };\n // const encodedKey = encodeURI(bucketName);\n // const { url, headers: signedHeaders } = await this._sign('PUT', encodedKey, {}, headers, '');\n // const res = await this._sendRequest(url, 'PUT', signedHeaders);\n // if (res.ok && res.status === 200) {\n // return true;\n // }\n // return false;\n // }\n\n /**\n * Check if a file exists in the bucket.\n * @param {string} key - The key of the object.\n * @returns {Promise} True if the file exists, false otherwise.\n * @throws {TypeError} If the key is not a non-empty string.\n */\n async fileExists(key: string): Promise {\n if (typeof key !== 'string' || key.trim().length === 0) {\n this._log('error', ERROR_KEY_REQUIRED);\n throw new TypeError(ERROR_KEY_REQUIRED);\n }\n const headers = { [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('HEAD', encodedKey, {}, headers, '');\n try {\n const res = await fetch(url, {\n method: 'HEAD',\n headers: signedHeaders,\n });\n if (res.ok && res.status === 200) return true;\n else if (res.status === 404) return false;\n else this._handleErrorResponse(res);\n return false;\n } catch (error: unknown) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n this._log('error', `${ERROR_PREFIX}Failed to check if file exists: ${errorMessage}`);\n throw new Error(`${ERROR_PREFIX}Failed to check if file exists: ${errorMessage}`);\n }\n }\n async _sign(\n method: HttpMethod,\n keyPath: string,\n query: Object,\n headers: Record,\n body: string | Buffer,\n ): Promise<{ url: string; headers: Record }> {\n const datetime = new Date().toISOString().replace(/[:-]|\\.\\d{3}/g, '');\n const url =\n typeof keyPath === 'string' && keyPath.length > 0 ? new URL(keyPath, this.endpoint) : new URL(this.endpoint);\n url.pathname = `/${encodeURI(this.bucketName)}${url.pathname}`;\n headers[HEADER_AMZ_CONTENT_SHA256] = body ? await _hash(body) : UNSIGNED_PAYLOAD;\n headers[HEADER_AMZ_DATE] = datetime;\n headers[HEADER_HOST] = url.host;\n const canonicalHeaders = this._buildCanonicalHeaders(headers);\n const signedHeaders = Object.keys(headers)\n .map(key => key.toLowerCase())\n .sort()\n .join(';');\n\n const canonicalRequest = await this._buildCanonicalRequest(\n method,\n url,\n query,\n canonicalHeaders,\n signedHeaders,\n body,\n );\n const stringToSign = await this._buildStringToSign(datetime, canonicalRequest);\n const signature = await this._calculateSignature(datetime, stringToSign);\n const authorizationHeader = this._buildAuthorizationHeader(datetime, signedHeaders, signature);\n headers[HEADER_AUTHORIZATION] = authorizationHeader;\n return { url: url.toString(), headers };\n }\n\n _buildCanonicalHeaders(headers: Record): string {\n return Object.entries(headers)\n .map(([key, value]) => `${key.toLowerCase()}:${String(value).trim()}`)\n .sort()\n .join('\\n');\n }\n\n async _buildCanonicalRequest(\n method: HttpMethod,\n url: URL,\n query: Object,\n canonicalHeaders: string,\n signedHeaders: string,\n body: string | Buffer,\n ): Promise {\n return [\n method,\n url.pathname,\n this._buildCanonicalQueryString(query),\n `${canonicalHeaders}\\n`,\n signedHeaders,\n body ? await _hash(body) : UNSIGNED_PAYLOAD,\n ].join('\\n');\n }\n\n async _buildStringToSign(datetime: string, canonicalRequest: string): Promise {\n const credentialScope = [datetime.slice(0, 8), this.region, S3_SERVICE, AWS_REQUEST_TYPE].join('/');\n return [AWS_ALGORITHM, datetime, credentialScope, await _hash(canonicalRequest)].join('\\n');\n }\n\n async _calculateSignature(datetime: string, stringToSign: string): Promise {\n const signingKey = await this._getSignatureKey(datetime.slice(0, 8));\n return _hmac(signingKey, stringToSign, 'hex');\n }\n\n _buildAuthorizationHeader(datetime: string, signedHeaders: string, signature: string): string {\n const credentialScope = [datetime.slice(0, 8), this.region, S3_SERVICE, AWS_REQUEST_TYPE].join('/');\n return [\n `${AWS_ALGORITHM} Credential=${this.accessKeyId}/${credentialScope}`,\n `SignedHeaders=${signedHeaders}`,\n `Signature=${signature}`,\n ].join(', ');\n }\n\n /**\n * List objects in the bucket.\n * @param {string} [path='/'] - The path to list objects from.\n * @param {string} [prefix=''] - The prefix to filter objects.\n * @param {number} [maxKeys=1000] - The maximum number of keys to return.\n * @param {string} [method='GET'] - The HTTP method to use (GET or HEAD).\n * @param {Object} [opts={}] - Additional options for the list operation.\n * @returns {Promise} The list of objects or object metadata.\n * @throws {TypeError} If any of the parameters are of incorrect type.\n */\n async list(\n path: string = '/',\n prefix: string = '',\n maxKeys: number = 1000,\n method: HttpMethod = 'GET',\n opts: Object = {},\n ): Promise> {\n if (typeof path !== 'string' || path.trim().length === 0) {\n this._log('error', ERROR_PATH_REQUIRED);\n throw new TypeError(ERROR_PATH_REQUIRED);\n }\n if (typeof prefix !== 'string') {\n this._log('error', ERROR_PREFIX_TYPE);\n throw new TypeError(ERROR_PREFIX_TYPE);\n }\n if (!Number.isInteger(maxKeys) || maxKeys <= 0) {\n this._log('error', ERROR_MAX_KEYS_TYPE);\n throw new TypeError(ERROR_MAX_KEYS_TYPE);\n }\n if (method !== 'GET' && method !== 'HEAD') {\n this._log('error', `${ERROR_PREFIX}method must be either GET or HEAD`);\n throw new TypeError(`${ERROR_PREFIX}method must be either GET or HEAD`);\n }\n if (typeof opts !== 'object') {\n this._log('error', `${ERROR_PREFIX}opts must be an object`);\n throw new TypeError(`${ERROR_PREFIX}opts must be an object`);\n }\n\n this._log('info', `Listing objects in ${path}`);\n\n const query = {\n 'list-type': LIST_TYPE,\n 'max-keys': String(maxKeys),\n ...opts,\n } as { [key: string]: any };\n if (prefix.length > 0) {\n query['prefix'] = prefix;\n }\n const headers = {\n [HEADER_CONTENT_TYPE]: JSON_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n const encodedKey = path === '/' ? path : uriEscape(path);\n const { url, headers: signedHeaders } = await this._sign('GET', encodedKey, query, headers, '');\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n const res = await this._sendRequest(urlWithQuery, 'GET', signedHeaders);\n const responseBody = await res.text();\n\n if (method === 'HEAD') {\n const contentLength = res.headers.get(HEADER_CONTENT_LENGTH);\n const lastModified = res.headers.get(HEADER_LAST_MODIFIED);\n const etag = res.headers.get(HEADER_ETAG);\n\n return {\n size: contentLength ? +contentLength : undefined,\n mtime: lastModified ? new Date(lastModified) : undefined,\n ETag: etag || undefined,\n };\n }\n\n const data = _parseXml(responseBody);\n const output = data.listBucketResult || data.error || data;\n return output.contents || output;\n }\n\n /**\n * List multipart uploads in the bucket.\n * @param {string} [path='/'] - The path to list objects from.\n * @param {string} [prefix=''] - The prefix to filter objects.\n * @param {string} [method='GET'] - The HTTP method to use (GET or HEAD).\n * @param {Object} [opts={}] - Additional options for the list operation.\n * @returns {Promise} The list of objects or object metadata.\n * @throws {TypeError} If any of the parameters are of incorrect type.\n */\n async listMultiPartUploads(\n path: string = '/',\n prefix: string = '',\n method: HttpMethod = 'GET',\n opts: Object = {},\n ): Promise {\n if (typeof path !== 'string' || path.trim().length === 0) {\n this._log('error', ERROR_PATH_REQUIRED);\n throw new TypeError(ERROR_PATH_REQUIRED);\n }\n if (typeof prefix !== 'string') {\n this._log('error', ERROR_PREFIX_TYPE);\n throw new TypeError(ERROR_PREFIX_TYPE);\n }\n if (method !== 'GET' && method !== 'HEAD') {\n this._log('error', `${ERROR_PREFIX}method must be either GET or HEAD`);\n throw new TypeError(`${ERROR_PREFIX}method must be either GET or HEAD`);\n }\n if (typeof opts !== 'object') {\n this._log('error', `${ERROR_PREFIX}opts must be an object`);\n throw new TypeError(`${ERROR_PREFIX}opts must be an object`);\n }\n\n this._log('info', `Listing multipart uploads in ${path}`);\n\n const query = {\n uploads: '',\n ...opts,\n } as Record;\n const headers = {\n [HEADER_CONTENT_TYPE]: JSON_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n const encodedKey = path === '/' ? path : uriEscape(path);\n const { url, headers: signedHeaders } = await this._sign('GET', encodedKey, query, headers, '');\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n const res = await this._sendRequest(urlWithQuery, 'GET', signedHeaders);\n const responseBody = await res.text();\n\n if (method === 'HEAD') {\n return {\n size: +(res.headers.get(HEADER_CONTENT_LENGTH) ?? '0'),\n mtime: new Date(res.headers.get(HEADER_LAST_MODIFIED) ?? ''),\n ETag: res.headers.get(HEADER_ETAG) ?? '',\n };\n }\n\n const data = _parseXml(responseBody);\n const output = data.listMultipartUploadsResult || data.error || data;\n return output.uploads || output;\n }\n\n /**\n * Get an object from the bucket.\n * @param {string} key - The key of the object to get.\n * @param {Object} [opts={}] - Additional options for the get operation.\n * @returns {Promise} The content of the object.\n */\n async get(key: string, opts: Record = {}): Promise {\n if (typeof key !== 'string' || key.trim().length === 0) {\n this._log('error', ERROR_KEY_REQUIRED);\n throw new TypeError(ERROR_KEY_REQUIRED);\n }\n const headers = {\n [HEADER_CONTENT_TYPE]: JSON_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n this._log('info', `Getting object ${key}`);\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('GET', encodedKey, opts, headers, '');\n const res = await this._sendRequest(url, 'GET', signedHeaders);\n return res.text();\n }\n\n /**\n * Get a response of an object from the bucket.\n * @param {string} key - The key of the object to get.\n * @param {boolean} [wholeFile=true] - Whether to get the whole file or a part.\n * @param {number} [rangeFrom=0] - The range from to get if not getting the whole file.\n * @param {number} [rangeTo=this.maxRequestSizeInBytes] - The range to to get if not getting the whole file. Note: rangeTo is inclusive.\n * @param {Object} [opts={}] - Additional options for the get operation.\n * @returns {Promise} Response of the object content. Use readableStream() to get the stream from .body.\n */\n async getResponse(\n key: string,\n wholeFile: boolean = true,\n rangeFrom: number = 0,\n rangeTo: number = this.maxRequestSizeInBytes,\n opts: Record = {},\n ): Promise {\n const query = opts;\n const headers = {\n [HEADER_CONTENT_TYPE]: JSON_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n ...(wholeFile ? {} : { range: `bytes=${rangeFrom}-${rangeTo - 1}` }),\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('GET', encodedKey, query, headers, '');\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n\n return this._sendRequest(urlWithQuery, 'GET', signedHeaders);\n }\n\n /**\n * Put an object into the bucket.\n * @param {string} key - The key of the object to put. To create a folder, include a trailing slash.\n * @param {Buffer|string} data - The content of the object to put.\n * @returns {Promise} The response from the put operation.\n * @throws {TypeError} If the key is not a non-empty string or data is not a Buffer or string.\n */\n async put(key: string, data: string | Buffer): Promise {\n if (typeof key !== 'string' || key.trim().length === 0) {\n this._log('error', ERROR_KEY_REQUIRED);\n throw new TypeError(ERROR_KEY_REQUIRED);\n }\n if (!(data instanceof Buffer || typeof data === 'string')) {\n this._log('error', ERROR_DATA_BUFFER_REQUIRED);\n throw new TypeError(ERROR_DATA_BUFFER_REQUIRED);\n }\n // const encodedKey = encodeURIComponent(key);\n this._log('info', `Uploading object ${key}`);\n const contentLength = typeof data === 'string' ? Buffer.byteLength(data) : data.length;\n const headers = {\n [HEADER_CONTENT_LENGTH]: contentLength,\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('PUT', encodedKey, {}, headers, data);\n const res = await this._sendRequest(url, 'PUT', signedHeaders, data);\n return res;\n }\n\n /**\n * Initiate a multipart upload.\n * @param {string} key - The key of the object to upload.\n * @param {string} [fileType='application/octet-stream'] - The MIME type of the file.\n * @returns {Promise} The upload ID for the multipart upload.\n * @throws {TypeError} If the key is not a non-empty string or fileType is not a string.\n * @throws {Error} If the multipart upload initiation fails.\n */\n async getMultipartUploadId(key: string, fileType: string = DEFAULT_STREAM_CONTENT_TYPE): Promise {\n if (typeof key !== 'string' || key.trim().length === 0) {\n this._log('error', ERROR_KEY_REQUIRED);\n throw new TypeError(ERROR_KEY_REQUIRED);\n }\n if (typeof fileType !== 'string') {\n this._log('error', `${ERROR_PREFIX}fileType must be a string`);\n throw new TypeError(`${ERROR_PREFIX}fileType must be a string`);\n }\n this._log('info', `Initiating multipart upload for object ${key}`);\n const query = { uploads: '' };\n const headers = {\n [HEADER_CONTENT_TYPE]: fileType,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('POST', encodedKey, query, headers, '');\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n\n const res = await this._sendRequest(urlWithQuery, 'POST', signedHeaders);\n const responseBody = await res.text();\n const parsedResponse = _parseXml(responseBody);\n\n if (\n typeof parsedResponse === 'object' &&\n parsedResponse !== null &&\n 'error' in parsedResponse &&\n typeof parsedResponse.error === 'object' &&\n parsedResponse.error !== null &&\n 'message' in parsedResponse.error\n ) {\n const errorMessage = String(parsedResponse.error.message);\n this._log('error', `${ERROR_PREFIX}Failed to abort multipart upload: ${errorMessage}`);\n throw new Error(`${ERROR_PREFIX}Failed to abort multipart upload: ${errorMessage}`);\n }\n\n if (typeof parsedResponse === 'object' && parsedResponse !== null) {\n if (!parsedResponse.initiateMultipartUploadResult || !parsedResponse.initiateMultipartUploadResult.uploadId) {\n this._log('error', `${ERROR_PREFIX}Failed to create multipart upload: no uploadId in response`);\n throw new Error(`${ERROR_PREFIX}Failed to create multipart upload: Missing upload ID in response`);\n }\n\n return parsedResponse.initiateMultipartUploadResult.uploadId;\n } else {\n this._log('error', `${ERROR_PREFIX}Failed to create multipart upload: unexpected response format`);\n throw new Error(`${ERROR_PREFIX}Failed to create multipart upload: Unexpected response format`);\n }\n }\n\n /**\n * Upload a part in a multipart upload.\n * @param {string} key - The key of the object being uploaded.\n * @param {Buffer|string} data - The content of the part.\n * @param {string} uploadId - The upload ID of the multipart upload.\n * @param {number} partNumber - The part number.\n * @param {Object} [opts={}] - Additional options for the upload.\n * @returns {Promise} The ETag and part number of the uploaded part.\n * @throws {TypeError} If any of the parameters are of incorrect type.\n */\n async uploadPart(\n key: string,\n data: Buffer | string,\n uploadId: string,\n partNumber: number,\n opts: Object = {},\n ): Promise {\n this._validateUploadPartParams(key, data, uploadId, partNumber, opts);\n const query = { uploadId, partNumber, ...opts } as { [key: string]: any };\n const headers = {\n [HEADER_CONTENT_LENGTH]: data.length,\n } as { [key: string]: any };\n\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('PUT', encodedKey, query, headers, data);\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n\n const res = await this._sendRequest(urlWithQuery, 'PUT', signedHeaders, data);\n const ETag = res.headers.get('etag') || '';\n return { partNumber, ETag };\n }\n\n _validateUploadPartParams(key: string, data: Buffer | string, uploadId: string, partNumber: number, opts: Object) {\n if (typeof key !== 'string' || key.trim().length === 0) {\n this._log('error', ERROR_KEY_REQUIRED);\n throw new TypeError(ERROR_KEY_REQUIRED);\n }\n if (!(data instanceof Buffer || typeof data === 'string')) {\n this._log('error', ERROR_DATA_BUFFER_REQUIRED);\n throw new TypeError(ERROR_DATA_BUFFER_REQUIRED);\n }\n if (typeof uploadId !== 'string' || uploadId.trim().length === 0) {\n this._log('error', ERROR_UPLOAD_ID_REQUIRED);\n throw new TypeError(ERROR_UPLOAD_ID_REQUIRED);\n }\n if (!Number.isInteger(partNumber) || partNumber <= 0) {\n this._log('error', `${ERROR_PREFIX}partNumber must be a positive integer`);\n throw new TypeError(`${ERROR_PREFIX}partNumber must be a positive integer`);\n }\n if (typeof opts !== 'object') {\n this._log('error', `${ERROR_PREFIX}opts must be an object`);\n throw new TypeError(`${ERROR_PREFIX}opts must be an object`);\n }\n }\n\n /**\n * Complete a multipart upload.\n * @param {string} key - The key of the object being uploaded.\n * @param {string} uploadId - The upload ID of the multipart upload.\n * @param {Array} parts - An array of objects containing PartNumber and ETag for each part.\n * @returns {Promise} The result of the complete multipart upload operation.\n * @throws {TypeError} If any of the parameters are of incorrect type.\n * @throws {Error} If the complete multipart upload operation fails.\n */\n async completeMultipartUpload(\n key: string,\n uploadId: string,\n parts: Array,\n ): Promise {\n if (typeof key !== 'string' || key.trim().length === 0) {\n this._log('error', ERROR_KEY_REQUIRED);\n throw new TypeError(ERROR_KEY_REQUIRED);\n }\n if (typeof uploadId !== 'string' || uploadId.trim().length === 0) {\n this._log('error', ERROR_UPLOAD_ID_REQUIRED);\n throw new TypeError(ERROR_UPLOAD_ID_REQUIRED);\n }\n if (!Array.isArray(parts) || parts.length === 0) {\n this._log('error', ERROR_PARTS_REQUIRED);\n throw new TypeError(ERROR_PARTS_REQUIRED);\n }\n if (!parts.every(part => typeof part.partNumber === 'number' && typeof part.ETag === 'string')) {\n this._log('error', ERROR_INVALID_PART);\n throw new TypeError(ERROR_INVALID_PART);\n }\n this._log('info', `Complete multipart upload ${uploadId} for object ${key}`);\n const query = { uploadId };\n const xmlBody = this._buildCompleteMultipartUploadXml(parts);\n const headers = {\n [HEADER_CONTENT_TYPE]: XML_CONTENT_TYPE,\n [HEADER_CONTENT_LENGTH]: Buffer.byteLength(xmlBody).toString(),\n [HEADER_AMZ_CONTENT_SHA256]: await _hash(xmlBody),\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('POST', encodedKey, query, headers, xmlBody);\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n\n const res = await this._sendRequest(urlWithQuery, 'POST', signedHeaders, xmlBody);\n const responseBody = await res.text();\n const parsedResponse = _parseXml(responseBody);\n\n if (\n typeof parsedResponse === 'object' &&\n parsedResponse !== null &&\n 'error' in parsedResponse &&\n typeof parsedResponse.error === 'object' &&\n parsedResponse.error !== null &&\n 'message' in parsedResponse.error\n ) {\n const errorMessage = String(parsedResponse.error.message);\n this._log('error', `${ERROR_PREFIX}Failed to abort multipart upload: ${errorMessage}`);\n throw new Error(`${ERROR_PREFIX}Failed to abort multipart upload: ${errorMessage}`);\n }\n\n return parsedResponse.completeMultipartUploadResult;\n }\n\n /**\n * Aborts a multipart upload.\n * @param {string} key - The key of the object being uploaded.\n * @param {string} uploadId - The ID of the multipart upload to abort.\n * @returns {Promise} - A promise that resolves to the abort response.\n * @throws {Error} If the abort operation fails.\n */\n async abortMultipartUpload(key: string, uploadId: string): Promise {\n // Input validation\n if (typeof key !== 'string' || key.trim().length === 0) {\n this._log('error', ERROR_KEY_REQUIRED);\n throw new TypeError(ERROR_KEY_REQUIRED);\n }\n if (typeof uploadId !== 'string' || uploadId.trim().length === 0) {\n this._log('error', ERROR_UPLOAD_ID_REQUIRED);\n throw new TypeError(ERROR_UPLOAD_ID_REQUIRED);\n }\n\n this._log('info', `Aborting multipart upload ${uploadId} for object ${key}`);\n\n // Prepare the request\n const query = { uploadId };\n const headers = {\n [HEADER_CONTENT_TYPE]: XML_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n\n try {\n // Sign and send the request\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('DELETE', encodedKey, query, headers, '');\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n\n const res = await this._sendRequest(urlWithQuery, 'DELETE', signedHeaders);\n\n // Check for successful response\n if (res.ok) {\n const responseBody = await res.text();\n const parsedResponse = _parseXml(responseBody);\n\n if (\n typeof parsedResponse === 'object' &&\n parsedResponse !== null &&\n 'error' in parsedResponse &&\n typeof parsedResponse.error === 'object' &&\n parsedResponse.error !== null &&\n 'message' in parsedResponse.error\n ) {\n const errorMessage = String(parsedResponse.error.message);\n this._log('error', `${ERROR_PREFIX}Failed to abort multipart upload: ${errorMessage}`);\n throw new Error(`${ERROR_PREFIX}Failed to abort multipart upload: ${errorMessage}`);\n }\n\n return {\n status: 'Aborted',\n key,\n uploadId,\n response: parsedResponse,\n };\n } else {\n this._log('error', `${ERROR_PREFIX}Abort request failed with status ${res.status}`);\n throw new Error(`${ERROR_PREFIX}Abort request failed with status ${res.status}`);\n }\n } catch (error: unknown) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n this._log('error', `${ERROR_PREFIX}Failed to abort multipart upload for key ${key}: ${errorMessage}`);\n throw new Error(`${ERROR_PREFIX}Failed to abort multipart upload for key ${key}: ${errorMessage}`);\n }\n }\n\n _buildCompleteMultipartUploadXml(parts: Array): string {\n return `\n \n ${parts\n .map(\n part => `\n \n ${part.partNumber}\n ${part.ETag}\n \n `,\n )\n .join('')}\n \n `;\n }\n\n /**\n * Delete an object from the bucket.\n * @param {string} key - The key of the object to delete.\n * @returns {Promise} The response from the delete operation.\n */\n async delete(key: string): Promise {\n if (typeof key !== 'string' || key.trim().length === 0) {\n this._log('error', ERROR_KEY_REQUIRED);\n throw new TypeError(ERROR_KEY_REQUIRED);\n }\n this._log('info', `Deleting object ${key}`);\n const headers = {\n [HEADER_CONTENT_TYPE]: JSON_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('DELETE', encodedKey, {}, headers, '');\n const res = await this._sendRequest(url, 'DELETE', signedHeaders);\n return res.text();\n }\n\n async _sendRequest(\n url: string,\n method: HttpMethod,\n headers: Record,\n body?: string | Buffer,\n ): Promise {\n this._log('info', `Sending ${method} request to ${url}, headers: ${JSON.stringify(headers)}`);\n const res = await fetch(url, {\n method,\n headers,\n body,\n signal: this.requestAbortTimeout !== undefined ? AbortSignal.timeout(this.requestAbortTimeout) : undefined,\n });\n\n if (!res.ok) {\n await this._handleErrorResponse(res);\n }\n\n return res;\n }\n\n async _handleErrorResponse(res: Response) {\n const errorBody = await res.text();\n const errorCode = res.headers.get('x-amz-error-code') || 'Unknown';\n const errorMessage = res.headers.get('x-amz-error-message') || res.statusText;\n this._log(\n 'error',\n `${ERROR_PREFIX}Request failed with status ${res.status}: ${errorCode} - ${errorMessage},err body: ${errorBody}`,\n );\n throw new Error(\n `${ERROR_PREFIX}Request failed with status ${res.status}: ${errorCode} - ${errorMessage}, err body: ${errorBody}`,\n );\n }\n\n _buildCanonicalQueryString(queryParams: Object): string {\n if (Object.keys(queryParams).length < 1) {\n return '';\n }\n\n return Object.keys(queryParams)\n .sort()\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent((queryParams as Record)[key])}`)\n .join('&');\n }\n async _getSignatureKey(dateStamp: string): Promise {\n const kDate = await _hmac(`AWS4${this.secretAccessKey}`, dateStamp);\n const kRegion = await _hmac(kDate, this.region);\n const kService = await _hmac(kRegion, S3_SERVICE);\n return _hmac(kService, AWS_REQUEST_TYPE);\n }\n}\n\nconst _hash = async (content: string | Buffer): Promise => {\n const hashSum = _createHash('sha256');\n hashSum.update(content);\n return hashSum.digest('hex');\n};\n\nconst _hmac = async (key: string | Buffer, content: string, encoding?: 'hex'): Promise => {\n const hmacSum = _createHmac('sha256', key);\n hmacSum.update(content);\n return hmacSum.digest(encoding);\n};\n\nconst _parseXml = (str: string): string | object | any => {\n const unescapeXml = (value: string): string => {\n return value\n .replace(/"/g, '\"')\n .replace(/'/g, \"'\")\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/&/g, '&');\n };\n\n const json = {};\n const re = /<(\\w)([-\\w]+)(?:\\/|[^>]*>((?:(?!<\\1)[\\s\\S])*)<\\/\\1\\2)>/gm;\n let match;\n\n while ((match = re.exec(str))) {\n const [, prefix, key, value] = match;\n const fullKey = prefix.toLowerCase() + key;\n const parsedValue = value != null ? _parseXml(value) : true;\n\n if (typeof parsedValue === 'string') {\n (json as { [key: string]: any })[fullKey] = unescapeXml(parsedValue);\n } else if (Array.isArray((json as { [key: string]: any })[fullKey])) {\n (json as { [key: string]: any })[fullKey].push(parsedValue);\n } else {\n (json as { [key: string]: any })[fullKey] =\n (json as { [key: string]: any })[fullKey] != null\n ? [(json as { [key: string]: any })[fullKey], parsedValue]\n : expectArray[fullKey]\n ? [parsedValue]\n : parsedValue;\n }\n }\n\n return Object.keys(json).length ? json : unescapeXml(str);\n};\n\nexport { S3 };\nexport default S3;\n", "'use strict';\n\nimport { S3 } from 'ultralight-s3';\nimport avro from 'avro-js'; // eslint-disable-line\nimport { matchesQuery, generateUUID, inferAvroType } from './helpers.js';\n\nconst MODULE_NAME = 'lowstorage';\nconst PROJECT_DIR_PREFIX = 'lowstorage/';\nconst SCHEMA_SUFFIX = '.avro';\nconst CHUNG_1MB = 1024 * 1024;\nconst CHUNG_5MB = 5 * CHUNG_1MB;\n\nclass lowstorage {\n\tconstructor(\n\t\toptions = {\n\t\t\taccessKeyId: undefined,\n\t\t\tsecretAccessKey: undefined,\n\t\t\tendpoint: undefined,\n\t\t\tbucketName: undefined,\n\t\t\tregion: 'auto',\n\t\t\tlogger: null,\n\t\t},\n\t) {\n\t\tthis._checkArgs(options);\n\t\tthis._schemas = new Map();\n\t\tthis._s3 = new S3(options);\n\t\tthis._avro = avro;\n\t}\n\n\t_checkArgs = (args) => {\n\t\tconst requiredFields = ['accessKeyId', 'secretAccessKey', 'endpoint', 'bucketName'];\n\t\tfor (const field of requiredFields) {\n\t\t\tif (!args[field]) {\n\t\t\t\tthrow new Error(`${MODULE_NAME}: ${field} is required`);\n\t\t\t}\n\t\t}\n\t};\n\n\tasync listCollections() {\n\t\tconst listed = await this._s3.list(PROJECT_DIR_PREFIX, '', 1000);\n\t\treturn listed.map((entry) => entry.key.slice(PROJECT_DIR_PREFIX.length, -SCHEMA_SUFFIX.length));\n\t}\n\n\tasync createCollection(colName, schema = undefined) {\n\t\ttry {\n\t\t\tif (colName === undefined || colName.trim() === '' || colName === null) {\n\t\t\t\tthrow new Error(`${MODULE_NAME}: Collection name is required`);\n\t\t\t}\n\t\t\tif (await this.collectionExists(colName)) {\n\t\t\t\tthrow new Error(`${MODULE_NAME}: Collection ${colName} already exists`);\n\t\t\t}\n\t\t\tif (schema) {\n\t\t\t\tconst avroType = this._avro.parse(schema);\n\t\t\t\tthis._schemas.set(colName, avroType);\n\t\t\t}\n\t\t\treturn this.collection(colName, schema);\n\t\t} catch (error) {\n\t\t\tthrow new Error(`${MODULE_NAME}: ${error.message}`);\n\t\t}\n\t}\n\n\tasync removeCollection(colName) {\n\t\ttry {\n\t\t\tconst exists = await this._s3.fileExists(`${PROJECT_DIR_PREFIX}${colName}${SCHEMA_SUFFIX}`);\n\t\t\tif (exists) {\n\t\t\t\tconst resp = await this._s3.delete(`${PROJECT_DIR_PREFIX}${colName}${SCHEMA_SUFFIX}`);\n\t\t\t\tif (resp.status === 200) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t} catch (error) {\n\t\t\tthrow new Error(`${MODULE_NAME}: ${error.message}`);\n\t\t}\n\t}\n\n\tasync collectionExists(colName) {\n\t\ttry {\n\t\t\tconst exists = await this._s3.fileExists(`${PROJECT_DIR_PREFIX}${colName}${SCHEMA_SUFFIX}`);\n\t\t\treturn exists;\n\t\t} catch (error) {\n\t\t\tif (error.message.includes('Not Found')) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tthrow new Error(`${MODULE_NAME}: ${error.message}`);\n\t\t}\n\t}\n\n\tasync updateCollectionSchema(colName, schema) {\n\t\ttry {\n\t\t\tif (colName === undefined || colName.trim() === '' || colName === null) {\n\t\t\t\tthrow new Error(`${MODULE_NAME}: Collection name is required`);\n\t\t\t}\n\t\t\t// Check if collection exists\n\t\t\tconst exists = await this.collectionExists(colName);\n\t\t\tif (!exists) {\n\t\t\t\tthrow new Error(`${MODULE_NAME}: Collection ${colName} does not exist`);\n\t\t\t}\n\t\t\tif (schema === undefined || schema === null) {\n\t\t\t\tthrow new Error(`${MODULE_NAME}: Schema is required`);\n\t\t\t}\n\t\t\tconst avroType = this._avro.parse(schema);\n\t\t\tthis._schemas.set(colName, avroType);\n\t\t\tconst resp = await this._s3.put(`${PROJECT_DIR_PREFIX}${colName}${SCHEMA_SUFFIX}`, JSON.stringify(schema));\n\t\t\tif (resp.status === 200) {\n\t\t\t\treturn true;\n\t\t\t} else {\n\t\t\t\tthrow new Error(`${MODULE_NAME}: Failed to update schema for collection ${colName}`);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tthrow new Error(`${MODULE_NAME}: ${error.message}`);\n\t\t}\n\t}\n\n\tasync collection(colName, schema = undefined) {\n\t\ttry {\n\t\t\tif (colName === undefined || colName.trim() === '' || colName === null) {\n\t\t\t\tthrow new Error(`${MODULE_NAME}: Collection name is required`);\n\t\t\t}\n\t\t\tif (typeof schema === 'undefined') {\n\t\t\t\t// Load schema if not in memory\n\t\t\t\tif (this._schemas.has(colName)) {\n\t\t\t\t\treturn new Collection(colName, this._s3, this._schemas.get(colName));\n\t\t\t\t}\n\t\t\t\t// check if schema file exists\n\t\t\t\tconst exists = await this._s3.fileExists(`${PROJECT_DIR_PREFIX}${colName}${SCHEMA_SUFFIX}`);\n\t\t\t\tif (exists) {\n\t\t\t\t\tconst schemaContent = await this._s3.get(`${PROJECT_DIR_PREFIX}${colName}${SCHEMA_SUFFIX}`);\n\n\t\t\t\t\tconst avroType = this._avro.parse(schemaContent);\n\t\t\t\t\tthis._schemas.set(colName, avroType);\n\t\t\t\t\treturn new Collection(colName, this._s3, avroType);\n\t\t\t\t}\n\t\t\t\treturn new Collection(colName, this._s3, undefined);\n\t\t\t}\n\t\t\treturn new Collection(colName, this._s3, this._avro.parse(schema));\n\t\t} catch (error) {\n\t\t\tthrow new Error(`${MODULE_NAME}: ${error.message}`);\n\t\t}\n\t}\n}\n\nclass Collection {\n\tconstructor(colName, s3, avroType = undefined) {\n\t\tthis._colName = colName;\n\t\tthis._s3 = s3;\n\t\tthis._avro = avro;\n\t\tthis._avroType = avroType;\n\t}\n\n\tasync insert(doc, schema = undefined) {\n\t\ttry {\n\t\t\tif (doc === undefined || doc === null) {\n\t\t\t\tthrow new Error(`${MODULE_NAME}: Document is required for insert`);\n\t\t\t}\n\t\t\tif (typeof doc !== 'object' && !Array.isArray(doc)) {\n\t\t\t\tthrow new Error(`${MODULE_NAME}: Document must be an object or an array`);\n\t\t\t}\n\t\t\tconst items = !Array.isArray(doc) ? [doc] : doc;\n\n\t\t\tconst avroType = !!schema ? this._avro.parse(schema) : this._avroType || this._avro.parse(inferAvroType(doc));\n\n\t\t\t// throw new Error('avroType::: ', avroType);\n\t\t\tif (avroType === undefined) {\n\t\t\t\tthrow new Error(`${MODULE_NAME}: Schema is required - Pass a schema to the insert method`);\n\t\t\t}\n\t\t\tthis._avroType = avroType;\n\t\t\tconst wrapperType = this._avro.parse({ type: 'array', items: this._avroType });\n\t\t\tconst bufferData = await this._loadDataBuffer();\n\t\t\tconst data = bufferData.length > 0 ? wrapperType.fromBuffer(bufferData) : [];\n\t\t\tfor (let item of items) {\n\t\t\t\tif (typeof item !== 'object' || item === null) {\n\t\t\t\t\tthrow new Error('Invalid input: input must be an object or an array of objects');\n\t\t\t\t}\n\t\t\t\titem._id = item._id || (await generateUUID());\n\t\t\t\tconst valid = this._avroType.isValid(item);\n\t\t\t\tif (!valid) {\n\t\t\t\t\tthrow new Error(`${MODULE_NAME}: Invalid document or schema`);\n\t\t\t\t}\n\t\t\t\tdata.push(item);\n\t\t\t}\n\t\t\tconst resp = await this._saveDataBuffer(wrapperType.toBuffer(data));\n\t\t\tif (resp) {\n\t\t\t\treturn items;\n\t\t\t} else {\n\t\t\t\tthrow new Error(`${MODULE_NAME}: Failed to insert document`);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tthrow new Error(`${MODULE_NAME}: ${error.message}`);\n\t\t}\n\t}\n\n\tasync _loadDataBuffer() {\n\t\ttry {\n\t\t\tconst KEY = `${PROJECT_DIR_PREFIX}${this._colName}${SCHEMA_SUFFIX}`;\n\t\t\tconst CHUNK_SIZE = this._s3.getMaxRequestSizeInBytes() || CHUNG_5MB;\n\t\t\tlet firstData = await this._s3.get(KEY);\n\t\t\tif (firstData.length < CHUNK_SIZE) {\n\t\t\t\treturn Buffer.from(firstData, 'utf8');\n\t\t\t}\n\t\t\tlet offset = CHUNK_SIZE;\n\t\t\tlet bufferArr = [Buffer.from(firstData, 'utf8')];\n\t\t\tlet repeat = true;\n\t\t\twhile (repeat) {\n\t\t\t\tconst nextDataResponse = await this._s3.getResponse(KEY, false, offset, offset + CHUNK_SIZE);\n\t\t\t\tconst nextDataBody = await nextDataResponse.text();\n\t\t\t\tbufferArr.push(Buffer.from(nextDataBody, 'utf8'));\n\t\t\t\toffset += CHUNG;\n\t\t\t\tconst contentLength = nextDataResponse.headers.get('content-length') || nextDataBody.length;\n\t\t\t\tif (contentLength < CHUNK_SIZE) {\n\t\t\t\t\trepeat = false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn Buffer.concat(bufferArr);\n\t\t} catch (error) {\n\t\t\tif (error.toString().indexOf('status 404: Unknown - Not Found') > -1) {\n\t\t\t\treturn Buffer.from('');\n\t\t\t}\n\t\t\tthrow new Error(`${MODULE_NAME}: ${error.message}`);\n\t\t}\n\t}\n\n\tasync _saveDataBuffer(data) {\n\t\ttry {\n\t\t\tconst KEY = `${PROJECT_DIR_PREFIX}${this._colName}${SCHEMA_SUFFIX}`;\n\t\t\tconst resp = await this._s3.put(KEY, data);\n\t\t\tif (resp.status === 200) {\n\t\t\t\treturn true;\n\t\t\t} else {\n\t\t\t\tthrow new Error(`${MODULE_NAME}: Failed to save data`);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tthrow new Error(`${MODULE_NAME}: ${error.message}`);\n\t\t}\n\t}\n\n\tasync find(query = {}, options = {}) {\n\t\ttry {\n\t\t\tconst bufferData = await this._loadDataBuffer(); // load data from s3\n\t\t\tconst wrapperType = this._avro.parse({ type: 'array', items: this._avroType });\n\t\t\tconst data = bufferData.length > 0 ? wrapperType.fromBuffer(bufferData) : [];\n\t\t\tconst start = parseInt(options.skip, 10) || 0;\n\t\t\tconst end = parseInt(options.limit, 10) ? start + parseInt(options.limit, 10) : undefined;\n\t\t\tconst filteredData = data.filter((doc) => matchesQuery(doc, query)).slice(start, end);\n\t\t\treturn filteredData;\n\t\t} catch (error) {\n\t\t\tthrow new Error(`${MODULE_NAME}: ${error.message}`);\n\t\t}\n\t}\n\n\tasync findOne(query = {}) {\n\t\treturn (await this.find(query))[0] || null;\n\t}\n\n\tasync update(query = {}, update = {}) {\n\t\ttry {\n\t\t\tconst bufferData = await this._loadDataBuffer(); // load data from s3\n\t\t\tconst wrapperType = this._avro.parse({ type: 'array', items: this._avroType });\n\t\t\tconst data = bufferData.length > 0 ? wrapperType.fromBuffer(bufferData) : [];\n\t\t\tlet updatedCount = 0;\n\n\t\t\tfor (let i = 0; i < data.length; i++) {\n\t\t\t\tif (matchesQuery(data[i], query)) {\n\t\t\t\t\tObject.assign(data[i], update);\n\t\t\t\t\tupdatedCount++;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (updatedCount > 0) {\n\t\t\t\tconst resp = await this._saveDataBuffer(wrapperType.toBuffer(data));\n\t\t\t\tif (resp) {\n\t\t\t\t\treturn updatedCount;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn 0;\n\t\t} catch (error) {\n\t\t\tthrow new Error(`${MODULE_NAME}: ${error.message}`);\n\t\t}\n\t}\n\n\tasync updateOne(query = {}, update = {}) {\n\t\ttry {\n\t\t\tconst bufferData = await this._loadDataBuffer(); // load data from s3\n\t\t\tconst wrapperType = this._avro.parse({ type: 'array', items: this._avroType });\n\t\t\tconst data = bufferData.length > 0 ? wrapperType.fromBuffer(bufferData) : [];\n\t\t\tconst docIndex = data.findIndex((doc) => matchesQuery(doc, query));\n\n\t\t\tif (docIndex !== -1) {\n\t\t\t\tObject.assign(data[docIndex], update);\n\t\t\t\tconst resp = await this._saveDataBuffer(wrapperType.toBuffer(data));\n\t\t\t\tif (resp) {\n\t\t\t\t\treturn 1;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn 0;\n\t\t} catch (error) {\n\t\t\tthrow new Error(`${MODULE_NAME}: ${error.message}`);\n\t\t}\n\t}\n\n\tasync delete(query = {}) {\n\t\ttry {\n\t\t\tconst bufferData = await this._loadDataBuffer(); // load data from s3\n\t\t\tconst wrapperType = this._avro.parse({ type: 'array', items: this._avroType });\n\t\t\tconst data = bufferData.length > 0 ? wrapperType.fromBuffer(bufferData) : [];\n\t\t\tconst initialLength = data.length;\n\t\t\tconst newData = data.filter((doc) => !matchesQuery(doc, query));\n\t\t\tconst resp = await this._saveDataBuffer(wrapperType.toBuffer(newData));\n\t\t\tif (resp) {\n\t\t\t\treturn initialLength - newData.length;\n\t\t\t}\n\t\t\treturn 0;\n\t\t} catch (error) {\n\t\t\tthrow new Error(`${MODULE_NAME}: ${error.message}`);\n\t\t}\n\t}\n\n\tasync count(query = {}) {\n\t\ttry {\n\t\t\tif (query === undefined || query === null) {\n\t\t\t\tthrow new Error(`${MODULE_NAME}: Query is required`);\n\t\t\t}\n\t\t\tif (Object.keys(query).length === 0) {\n\t\t\t\tconst bufferData = await this._loadDataBuffer(); // load data from s3\n\t\t\t\tconst wrapperType = this._avro.parse({ type: 'array', items: this._avroType });\n\t\t\t\tconst data = bufferData.length > 0 ? wrapperType.fromBuffer(bufferData) : [];\n\t\t\t\treturn data.length || null;\n\t\t\t}\n\t\t\treturn (await this.find(query)).length;\n\t\t} catch (error) {\n\t\t\tthrow new Error(`${MODULE_NAME}: ${error.message}`);\n\t\t}\n\t}\n}\n\nexport default lowstorage;\nexport { lowstorage };\n", "'use strict';\n\n// export const avroLoader = async (isAvroLoaded) => {\n// \tconst avro = isAvroLoaded ? isAvroLoaded : await import('avro-js');\n// \treturn avro;\n// };\n\nimport { randomUUID } from 'node:crypto';\n\nexport const matchesQuery = (document, query) => {\n\treturn Object.keys(query).every((key) => document[key] === query[key]);\n};\n\nexport const generateUUID = async () => {\n\tlet _randomUUID = randomUUID || (await import('node:crypto')).randomUUID;\n\tif (typeof _randomUUID !== 'undefined' && typeof _randomUUID === 'function') {\n\t\treturn _randomUUID();\n\t} else {\n\t\t// Fallback for environments without crypto.randomUUID\n\t\treturn 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n\t\t\tvar r = (Math.random() * 16) | 0,\n\t\t\t\tv = c === 'x' ? r : (r & 0x3) | 0x8;\n\t\t\treturn v.toString(16);\n\t\t});\n\t}\n};\n\nconst _getAvroType = (value, name = 'SubAutoGenerated') => {\n\tswitch (typeof value) {\n\t\tcase 'string':\n\t\t\tif (_isUUID(value)) {\n\t\t\t\treturn {\n\t\t\t\t\ttype: 'string',\n\t\t\t\t\tname: '_id',\n\t\t\t\t\tsize: 16,\n\t\t\t\t\tlogicalType: 'UUID',\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn 'string';\n\t\tcase 'number':\n\t\t\treturn Number.isInteger(value) ? 'int' : 'float';\n\t\tcase 'boolean':\n\t\t\treturn 'boolean';\n\t\tcase 'object':\n\t\t\tif (value === null) return 'null';\n\t\t\tif (Array.isArray(value)) return { type: 'array', items: _getAvroType(value[0]) };\n\t\t\treturn inferAvroType(value, name);\n\t\tdefault:\n\t\t\treturn 'string'; // Default to string for unknown types\n\t}\n};\n\nexport const inferAvroType = (data, typeName = 'AutoGenerated') => {\n\tif (Array.isArray(data)) {\n\t\tdata = data[0];\n\t}\n\tconst fields = Object.entries(data).map(([name, value]) => {\n\t\treturn { name, type: _getAvroType(value, `${typeName}.${name}`) };\n\t});\n\treturn {\n\t\ttype: 'record',\n\t\tname: typeName,\n\t\tfields: fields,\n\t};\n};\n\nconst _isUUID = (str) => {\n\tconst uuidV4Regex = /^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i;\n\treturn uuidV4Regex.test(str);\n};\n"], - "mappings": "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", - "names": ["_createHmac", "_createHash", "AWS_ALGORITHM", "AWS_REQUEST_TYPE", "S3_SERVICE", "LIST_TYPE", "UNSIGNED_PAYLOAD", "DEFAULT_STREAM_CONTENT_TYPE", "XML_CONTENT_TYPE", "JSON_CONTENT_TYPE", "SENSITIVE_KEYS_REDACTED", "MIN_MAX_REQUEST_SIZE_IN_BYTES", "HEADER_AMZ_CONTENT_SHA256", "HEADER_AMZ_DATE", "HEADER_HOST", "HEADER_AUTHORIZATION", "HEADER_CONTENT_TYPE", "HEADER_CONTENT_LENGTH", "HEADER_ETAG", "HEADER_LAST_MODIFIED", "ERROR_PREFIX", "ERROR_ACCESS_KEY_REQUIRED", "ERROR_SECRET_KEY_REQUIRED", "ERROR_ENDPOINT_REQUIRED", "ERROR_BUCKET_NAME_REQUIRED", "ERROR_KEY_REQUIRED", "ERROR_UPLOAD_ID_REQUIRED", "ERROR_PARTS_REQUIRED", "ERROR_INVALID_PART", "ERROR_DATA_BUFFER_REQUIRED", "ERROR_PATH_REQUIRED", "ERROR_PREFIX_TYPE", "ERROR_MAX_KEYS_TYPE", "expectArray", "encodeAsHex", "c", "uriEscape", "uriStr", "uriResourceEscape", "string", "S3", "accessKeyId", "secretAccessKey", "endpoint", "bucketName", "region", "maxRequestSizeInBytes", "requestAbortTimeout", "logger", "props", "level", "message", "additionalData", "sanitize", "obj", "acc", "key", "sanitizedData", "logEntry", "headers", "encodedKey", "url", "signedHeaders", "contentLength", "res", "error", "errorMessage", "method", "keyPath", "query", "body", "datetime", "_hash", "canonicalHeaders", "canonicalRequest", "stringToSign", "signature", "authorizationHeader", "value", "credentialScope", "signingKey", "_hmac", "path", "prefix", "maxKeys", "opts", "urlWithQuery", "responseBody", "lastModified", "etag", "data", "_parseXml", "output", "_a", "_b", "_c", "wholeFile", "rangeFrom", "rangeTo", "fileType", "parsedResponse", "uploadId", "partNumber", "ETag", "parts", "part", "xmlBody", "errorBody", "errorCode", "queryParams", "dateStamp", "kDate", "kRegion", "kService", "content", "hashSum", "encoding", "hmacSum", "str", "unescapeXml", "json", "re", "match", "fullKey", "parsedValue", "c"] + "sources": ["../node_modules/ultralight-s3/src/index.ts", "../src/lowstorage.js", "../src/errors.js", "../src/helpers.js"], + "sourcesContent": ["'use strict';\n\ninterface S3Config {\n accessKeyId: string;\n secretAccessKey: string;\n endpoint: string;\n bucketName: string;\n region?: string;\n maxRequestSizeInBytes?: number;\n requestAbortTimeout?: number;\n logger?: Logger;\n}\n\ndeclare global {\n interface Crypto {\n createHmac: (\n algorithm: string,\n key: string | Buffer,\n ) => {\n update: (data: string | Buffer) => void;\n digest: (encoding?: 'hex' | 'base64' | 'latin1') => string;\n };\n createHash: (algorithm: string) => {\n update: (data: string | Buffer) => void;\n digest: (encoding?: 'hex' | 'base64' | 'latin1') => string;\n };\n }\n}\n\ninterface Logger {\n info: (message: string, ...args: any[]) => void;\n warn: (message: string, ...args: any[]) => void;\n error: (message: string, ...args: any[]) => void;\n}\n\ninterface UploadPart {\n partNumber: number;\n ETag: string;\n}\n\ninterface CompleteMultipartUploadResult {\n Location: string;\n Bucket: string;\n Key: string;\n ETag: string;\n}\n\ntype HttpMethod = 'POST' | 'GET' | 'HEAD' | 'PUT' | 'DELETE';\n\nlet _createHmac = crypto.createHmac || (await import('node:crypto')).createHmac;\nlet _createHash = crypto.createHash || (await import('node:crypto')).createHash;\n\nif (typeof _createHmac === 'undefined' && typeof _createHash === 'undefined') {\n console.error(\n 'ultralight-S3 Module: Crypto functions are not available, please report the issue with necessary description: https://github.com/sentienhq/ultralight-s3/issues',\n );\n}\n\n// Constants\nconst AWS_ALGORITHM = 'AWS4-HMAC-SHA256';\nconst AWS_REQUEST_TYPE = 'aws4_request';\nconst S3_SERVICE = 's3';\nconst LIST_TYPE = '2';\nconst UNSIGNED_PAYLOAD = 'UNSIGNED-PAYLOAD';\nconst DEFAULT_STREAM_CONTENT_TYPE = 'application/octet-stream';\nconst XML_CONTENT_TYPE = 'application/xml';\nconst JSON_CONTENT_TYPE = 'application/json';\n// List of keys that might contain sensitive information\nconst SENSITIVE_KEYS_REDACTED = ['accessKeyId', 'secretAccessKey', 'sessionToken', 'password'];\nconst MIN_MAX_REQUEST_SIZE_IN_BYTES = 5 * 1024 * 1024;\n\n// Headers\nconst HEADER_AMZ_CONTENT_SHA256 = 'x-amz-content-sha256';\nconst HEADER_AMZ_DATE = 'x-amz-date';\nconst HEADER_HOST = 'host';\nconst HEADER_AUTHORIZATION = 'Authorization';\nconst HEADER_CONTENT_TYPE = 'Content-Type';\nconst HEADER_CONTENT_LENGTH = 'Content-Length';\nconst HEADER_ETAG = 'etag';\nconst HEADER_LAST_MODIFIED = 'last-modified';\n\n// Error messages\nexport const ERROR_PREFIX = 'ultralight-s3 Module: ';\nconst ERROR_ACCESS_KEY_REQUIRED = `${ERROR_PREFIX}accessKeyId must be a non-empty string`;\nconst ERROR_SECRET_KEY_REQUIRED = `${ERROR_PREFIX}secretAccessKey must be a non-empty string`;\nconst ERROR_ENDPOINT_REQUIRED = `${ERROR_PREFIX}endpoint must be a non-empty string`;\nconst ERROR_BUCKET_NAME_REQUIRED = `${ERROR_PREFIX}bucketName must be a non-empty string`;\nconst ERROR_KEY_REQUIRED = `${ERROR_PREFIX}key must be a non-empty string`;\nconst ERROR_UPLOAD_ID_REQUIRED = `${ERROR_PREFIX}uploadId must be a non-empty string`;\nconst ERROR_PARTS_REQUIRED = `${ERROR_PREFIX}parts must be a non-empty array`;\nconst ERROR_INVALID_PART = `${ERROR_PREFIX}Each part must have a partNumber (number) and ETag (string)`;\nconst ERROR_DATA_BUFFER_REQUIRED = `${ERROR_PREFIX}data must be a Buffer or string`;\n// const ERROR_PATH_REQUIRED = `${ERROR_PREFIX}path must be a string`;\nconst ERROR_PREFIX_TYPE = `${ERROR_PREFIX}prefix must be a string`;\nconst ERROR_MAX_KEYS_TYPE = `${ERROR_PREFIX}maxKeys must be a positive integer`;\nconst ERROR_DELIMITER_REQUIRED = `${ERROR_PREFIX}delimiter must be a string`;\n\nconst expectArray: { [key: string]: boolean } = {\n contents: true,\n};\n\nconst encodeAsHex = (c: string): string => `%${c.charCodeAt(0).toString(16).toUpperCase()}`;\n\nconst uriEscape = (uriStr: string): string => {\n return encodeURIComponent(uriStr).replace(/[!'()*]/g, encodeAsHex);\n};\n\nconst uriResourceEscape = (string: string): string => {\n return uriEscape(string).replace(/%2F/g, '/');\n};\n\n/**\n * S3 class for interacting with S3-compatible object storage services.\n * This class provides methods for common S3 operations such as uploading, downloading,\n * and deleting objects, as well as multipart uploads.\n *\n * @class\n * @example\n * const s3 = new S3({\n * accessKeyId: 'your-access-key',\n * secretAccessKey: 'your-secret-key',\n * endpoint: 'https://your-s3-endpoint.com',\n * bucketName: 'your-bucket-name',\n * region: 'us-east-1' // by default is auto\n * });\n *\n * // Upload a file\n * await s3.put('example.txt', 'Hello, World!');\n *\n * // Download a file\n * const content = await s3.get('example.txt');\n *\n * // Delete a file\n * await s3.delete('example.txt');\n */\nclass S3 {\n /**\n * Creates an instance of the S3 class.\n *\n * @constructor\n * @param {Object} config - Configuration options for the S3 instance.\n * @param {string} config.accessKeyId - The access key ID for authentication.\n * @param {string} config.secretAccessKey - The secret access key for authentication.\n * @param {string} config.endpoint - The endpoint URL of the S3-compatible service.\n * @param {string} [config.bucketName=''] - The name of the bucket to operate on.\n * @param {string} [config.region='auto'] - The region of the S3 service.\n * @param {number} [config.maxRequestSizeInBytes=5242880] - The maximum size of a single request in bytes (minimum for AWS S3 is 5MB).\n * @param {number} [config.requestAbortTimeout=undefined] - The timeout in milliseconds after which a request should be aborted (careful on streamed requests).\n * @param {Object} [config.logger=null] - A logger object with methods like info, warn, error.\n * @throws {TypeError} Will throw an error if required parameters are missing or of incorrect type.\n */\n private accessKeyId: string;\n private secretAccessKey: string;\n private endpoint: string;\n private bucketName: string;\n private region: string;\n private maxRequestSizeInBytes: number;\n private requestAbortTimeout?: number;\n private logger?: Logger;\n\n constructor({\n accessKeyId,\n secretAccessKey,\n endpoint,\n bucketName,\n region = 'auto',\n maxRequestSizeInBytes = MIN_MAX_REQUEST_SIZE_IN_BYTES,\n requestAbortTimeout = undefined,\n logger = undefined,\n }: S3Config) {\n this._validateConstructorParams(accessKeyId, secretAccessKey, endpoint, bucketName);\n this.accessKeyId = accessKeyId;\n this.secretAccessKey = secretAccessKey;\n this.endpoint = endpoint;\n this.bucketName = bucketName;\n this.region = region;\n this.maxRequestSizeInBytes = maxRequestSizeInBytes;\n this.requestAbortTimeout = requestAbortTimeout;\n this.logger = logger;\n }\n\n private _validateConstructorParams(\n accessKeyId: string,\n secretAccessKey: string,\n endpoint: string,\n bucketName: string,\n ): void {\n if (typeof accessKeyId !== 'string' || accessKeyId.trim().length === 0)\n throw new TypeError(ERROR_ACCESS_KEY_REQUIRED);\n if (typeof secretAccessKey !== 'string' || secretAccessKey.trim().length === 0)\n throw new TypeError(ERROR_SECRET_KEY_REQUIRED);\n if (typeof endpoint !== 'string' || endpoint.trim().length === 0) throw new TypeError(ERROR_ENDPOINT_REQUIRED);\n if (typeof bucketName !== 'string' || bucketName.trim().length === 0)\n throw new TypeError(ERROR_BUCKET_NAME_REQUIRED);\n }\n\n private _checkMethodHeadnGet(method: string): void {\n if (method !== 'GET' && method !== 'HEAD') {\n this._log('error', `${ERROR_PREFIX}method must be either GET or HEAD`);\n throw new Error('method must be either GET or HEAD');\n }\n }\n\n private _checkKey(key: string): void {\n if (typeof key !== 'string' || key.trim().length === 0) {\n this._log('error', ERROR_KEY_REQUIRED);\n throw new TypeError(ERROR_KEY_REQUIRED);\n }\n }\n\n private _checkDelimiter(delimiter: string): void {\n if (typeof delimiter !== 'string' || delimiter.trim().length === 0) {\n this._log('error', ERROR_DELIMITER_REQUIRED);\n throw new TypeError(ERROR_DELIMITER_REQUIRED);\n }\n }\n\n private _checkPrefix(prefix: string): void {\n if (typeof prefix !== 'string') {\n this._log('error', ERROR_PREFIX_TYPE);\n throw new TypeError(ERROR_PREFIX_TYPE);\n }\n }\n\n private _checkMaxKeys(maxKeys: number): void {\n if (typeof maxKeys !== 'number' || maxKeys <= 0) {\n this._log('error', ERROR_MAX_KEYS_TYPE);\n throw new TypeError(ERROR_MAX_KEYS_TYPE);\n }\n }\n\n private _checkOpts(opts: Record): void {\n if (typeof opts !== 'object') {\n this._log('error', `${ERROR_PREFIX}opts must be an object`);\n throw new TypeError(`${ERROR_PREFIX}opts must be an object`);\n }\n }\n\n /**\n * Internal method to log messages with sanitized sensitive information.\n * @param {string} level - The log level (e.g., 'info', 'warn', 'error').\n * @param {string} message - The message to log.\n * @param {Object} [additionalData={}] - Additional data to include in the log.\n * @private\n */\n private _log(\n level: 'info' | 'warn' | 'error',\n message: string,\n additionalData: Record | string = {},\n ): void {\n if (this.logger && typeof this.logger[level] === 'function') {\n // Function to recursively sanitize an object\n const sanitize = (obj: any): any => {\n if (typeof obj !== 'object' || obj === null) {\n return obj;\n }\n return Object.keys(obj).reduce(\n (acc: any, key) => {\n if (SENSITIVE_KEYS_REDACTED.includes(key.toLowerCase())) {\n acc[key] = '[REDACTED]';\n } else if (typeof obj[key] === 'object' && obj[key] !== null) {\n acc[key] = sanitize(obj[key]);\n } else {\n acc[key] = obj[key];\n }\n return acc;\n },\n Array.isArray(obj) ? [] : {},\n );\n };\n\n // Sanitize the additional data\n const sanitizedData = sanitize(additionalData);\n // Prepare the log entry\n const logEntry = {\n timestamp: new Date().toISOString(),\n level,\n message,\n ...sanitizedData,\n // Include some general context, but sanitize sensitive parts\n context: sanitize({\n bucketName: this.bucketName,\n region: this.region,\n endpoint: this.endpoint,\n // Only include the first few characters of the access key, if it exists\n accessKeyId: this.accessKeyId ? `${this.accessKeyId.substring(0, 4)}...` : undefined,\n }),\n };\n\n // Log the sanitized entry\n this.logger[level](logEntry);\n }\n }\n\n getBucketName = () => this.bucketName;\n setBucketName = (bucketName: string) => {\n this.bucketName = bucketName;\n };\n getRegion = () => this.region;\n setRegion = (region: string) => {\n this.region = region;\n };\n getEndpoint = () => this.endpoint;\n setEndpoint = (endpoint: string) => {\n this.endpoint = endpoint;\n };\n getMaxRequestSizeInBytes = () => this.maxRequestSizeInBytes;\n setMaxRequestSizeInBytes = (maxRequestSizeInBytes: number) => {\n this.maxRequestSizeInBytes = maxRequestSizeInBytes;\n };\n\n getProps = () => ({\n accessKeyId: this.accessKeyId,\n secretAccessKey: this.secretAccessKey,\n region: this.region,\n bucket: this.bucketName,\n endpoint: this.endpoint,\n maxRequestSizeInBytes: this.maxRequestSizeInBytes,\n requestAbortTimeout: this.requestAbortTimeout,\n logger: this.logger,\n });\n setProps = (props: S3Config) => {\n this._validateConstructorParams(props.accessKeyId, props.secretAccessKey, props.bucketName, props.endpoint);\n this.accessKeyId = props.accessKeyId;\n this.secretAccessKey = props.secretAccessKey;\n this.region = props.region || 'auto';\n this.bucketName = props.bucketName;\n this.endpoint = props.endpoint;\n this.maxRequestSizeInBytes = props.maxRequestSizeInBytes || MIN_MAX_REQUEST_SIZE_IN_BYTES;\n this.requestAbortTimeout = props.requestAbortTimeout;\n this.logger = props.logger;\n };\n\n /**\n * Get the content length of an object.\n * @param {string} key - The key of the object.\n * @returns {Promise} The content length of the object in bytes.\n * @throws {TypeError} If the key is not a non-empty string.\n */\n async getContentLength(key: string): Promise {\n this._checkKey(key);\n const headers = {\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('HEAD', encodedKey, {}, headers, '');\n const res = await this._sendRequest(url, 'HEAD', signedHeaders);\n const contentLength = res.headers.get(HEADER_CONTENT_LENGTH);\n return contentLength ? parseInt(contentLength, 10) : 0;\n }\n\n /**\n * Check if a bucket exists.\n * @returns {Promise} True if the bucket exists, false otherwise.\n */\n async bucketExists(): Promise {\n const headers = {\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n const { url, headers: signedHeaders } = await this._sign('HEAD', '', {}, headers, '');\n const res = await this._sendRequest(url, 'HEAD', signedHeaders);\n if (res.ok && res.status === 200) {\n return true;\n }\n return false;\n }\n\n // TBD\n // async createBucket(bucketName) {\n // const xmlBody = `\n // \n // \n // ${this.region}\n // \n // `;\n // const headers = {\n // [HEADER_CONTENT_TYPE]: XML_CONTENT_TYPE,\n // [HEADER_CONTENT_LENGTH]: Buffer.byteLength(xmlBody).toString(),\n // [HEADER_AMZ_CONTENT_SHA256]: await _hash(xmlBody),\n // };\n // const encodedKey = encodeURI(bucketName);\n // const { url, headers: signedHeaders } = await this._sign('PUT', encodedKey, {}, headers, '');\n // const res = await this._sendRequest(url, 'PUT', signedHeaders);\n // if (res.ok && res.status === 200) {\n // return true;\n // }\n // return false;\n // }\n\n /**\n * Check if a file exists in the bucket.\n * @param {string} key - The key of the object.\n * @returns {Promise} True if the file exists, false otherwise.\n * @throws {TypeError} If the key is not a non-empty string.\n */\n async fileExists(key: string): Promise {\n this._checkKey(key);\n const headers = { [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('HEAD', encodedKey, {}, headers, '');\n try {\n const res = await fetch(url, {\n method: 'HEAD',\n headers: signedHeaders,\n });\n if (res.ok && res.status === 200) return true;\n else if (res.status === 404) return false;\n else this._handleErrorResponse(res);\n return false;\n } catch (error: unknown) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n this._log('error', `${ERROR_PREFIX}Failed to check if file exists: ${errorMessage}`);\n throw new Error(`${ERROR_PREFIX}Failed to check if file exists: ${errorMessage}`);\n }\n }\n async _sign(\n method: HttpMethod,\n keyPath: string,\n query: Object,\n headers: Record,\n body: string | Buffer,\n ): Promise<{ url: string; headers: Record }> {\n const datetime = new Date().toISOString().replace(/[:-]|\\.\\d{3}/g, '');\n const url =\n typeof keyPath === 'string' && keyPath.length > 0 ? new URL(keyPath, this.endpoint) : new URL(this.endpoint);\n url.pathname = `/${encodeURI(this.bucketName)}${url.pathname}`;\n headers[HEADER_AMZ_CONTENT_SHA256] = body ? await _hash(body) : UNSIGNED_PAYLOAD;\n headers[HEADER_AMZ_DATE] = datetime;\n headers[HEADER_HOST] = url.host;\n const canonicalHeaders = this._buildCanonicalHeaders(headers);\n const signedHeaders = Object.keys(headers)\n .map(key => key.toLowerCase())\n .sort()\n .join(';');\n\n const canonicalRequest = await this._buildCanonicalRequest(\n method,\n url,\n query,\n canonicalHeaders,\n signedHeaders,\n body,\n );\n const stringToSign = await this._buildStringToSign(datetime, canonicalRequest);\n const signature = await this._calculateSignature(datetime, stringToSign);\n const authorizationHeader = this._buildAuthorizationHeader(datetime, signedHeaders, signature);\n headers[HEADER_AUTHORIZATION] = authorizationHeader;\n return { url: url.toString(), headers };\n }\n\n _buildCanonicalHeaders(headers: Record): string {\n return Object.entries(headers)\n .map(([key, value]) => `${key.toLowerCase()}:${String(value).trim()}`)\n .sort()\n .join('\\n');\n }\n\n async _buildCanonicalRequest(\n method: HttpMethod,\n url: URL,\n query: Object,\n canonicalHeaders: string,\n signedHeaders: string,\n body: string | Buffer,\n ): Promise {\n return [\n method,\n url.pathname,\n this._buildCanonicalQueryString(query),\n `${canonicalHeaders}\\n`,\n signedHeaders,\n body ? await _hash(body) : UNSIGNED_PAYLOAD,\n ].join('\\n');\n }\n\n async _buildStringToSign(datetime: string, canonicalRequest: string): Promise {\n const credentialScope = [datetime.slice(0, 8), this.region, S3_SERVICE, AWS_REQUEST_TYPE].join('/');\n return [AWS_ALGORITHM, datetime, credentialScope, await _hash(canonicalRequest)].join('\\n');\n }\n\n async _calculateSignature(datetime: string, stringToSign: string): Promise {\n const signingKey = await this._getSignatureKey(datetime.slice(0, 8));\n return _hmac(signingKey, stringToSign, 'hex');\n }\n\n _buildAuthorizationHeader(datetime: string, signedHeaders: string, signature: string): string {\n const credentialScope = [datetime.slice(0, 8), this.region, S3_SERVICE, AWS_REQUEST_TYPE].join('/');\n return [\n `${AWS_ALGORITHM} Credential=${this.accessKeyId}/${credentialScope}`,\n `SignedHeaders=${signedHeaders}`,\n `Signature=${signature}`,\n ].join(', ');\n }\n\n /**\n * List objects in the bucket.\n * @param {string} [delimiter='/'] - The delimiter to use for grouping objects in specific path.\n * @param {string} [prefix=''] - The prefix to filter objects in specific path.\n * @param {number} [maxKeys=1000] - The maximum number of keys to return.\n * @param {string} [method='GET'] - The HTTP method to use (GET or HEAD).\n * @param {Object} [opts={}] - Additional options for the list operation.\n * @returns {Promise} The list of objects or object metadata.\n * @throws {TypeError} If any of the parameters are of incorrect type.\n */\n async list(\n delimiter: string = '/',\n prefix: string = '',\n maxKeys: number = 1000,\n method: HttpMethod = 'GET',\n opts: Object = {},\n ): Promise> {\n this._checkDelimiter(delimiter);\n this._checkPrefix(prefix);\n this._checkMaxKeys(maxKeys);\n this._checkMethodHeadnGet(method);\n this._checkOpts(opts);\n this._log('info', `Listing objects in ${prefix}`);\n\n const query = {\n 'list-type': LIST_TYPE,\n 'max-keys': String(maxKeys),\n ...opts,\n } as { [key: string]: any };\n if (prefix.length > 0) {\n query['prefix'] = prefix;\n }\n const headers = {\n [HEADER_CONTENT_TYPE]: JSON_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n const encodedKey = delimiter === '/' ? delimiter : uriEscape(delimiter);\n const { url, headers: signedHeaders } = await this._sign('GET', encodedKey, query, headers, '');\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n const res = await this._sendRequest(urlWithQuery, 'GET', signedHeaders);\n const responseBody = await res.text();\n\n if (method === 'HEAD') {\n const contentLength = res.headers.get(HEADER_CONTENT_LENGTH);\n const lastModified = res.headers.get(HEADER_LAST_MODIFIED);\n const etag = res.headers.get(HEADER_ETAG);\n\n return {\n size: contentLength ? +contentLength : undefined,\n mtime: lastModified ? new Date(lastModified) : undefined,\n ETag: etag || undefined,\n };\n }\n\n const data = _parseXml(responseBody);\n const output = data.listBucketResult || data.error || data;\n return output.contents || output;\n }\n\n /**\n * List multipart uploads in the bucket.\n * @param {string} [delimiter='/'] - The delimiter to use for grouping objects in specific path.\n * @param {string} [prefix=''] - The prefix to filter objects in specific path.\n * @param {string} [method='GET'] - The HTTP method to use (GET or HEAD).\n * @param {Object} [opts={}] - Additional options for the list operation.\n * @returns {Promise} The list of objects or object metadata.\n * @throws {TypeError} If any of the parameters are of incorrect type.\n */\n async listMultiPartUploads(\n delimiter: string = '/',\n prefix: string = '',\n method: HttpMethod = 'GET',\n opts: Object = {},\n ): Promise {\n this._checkDelimiter(delimiter);\n this._checkPrefix(prefix);\n this._checkMethodHeadnGet(method);\n this._checkOpts(opts);\n this._log('info', `Listing multipart uploads in ${prefix}`);\n\n const query = {\n uploads: '',\n ...opts,\n } as Record;\n const headers = {\n [HEADER_CONTENT_TYPE]: JSON_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n const encodedKey = delimiter === '/' ? delimiter : uriEscape(delimiter);\n const { url, headers: signedHeaders } = await this._sign('GET', encodedKey, query, headers, '');\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n const res = await this._sendRequest(urlWithQuery, 'GET', signedHeaders);\n const responseBody = await res.text();\n\n if (method === 'HEAD') {\n return {\n size: +(res.headers.get(HEADER_CONTENT_LENGTH) ?? '0'),\n mtime: new Date(res.headers.get(HEADER_LAST_MODIFIED) ?? ''),\n ETag: res.headers.get(HEADER_ETAG) ?? '',\n };\n }\n\n const data = _parseXml(responseBody);\n const output = data.listMultipartUploadsResult || data.error || data;\n return output.uploads || output;\n }\n\n /**\n * Get an object from the bucket.\n * @param {string} key - The key of the object to get.\n * @param {Object} [opts={}] - Additional options for the get operation.\n * @returns {Promise} The content of the object.\n */\n async get(key: string, opts: Record = {}): Promise {\n this._checkKey(key);\n this._log('info', `Getting object ${key}`);\n\n const headers = {\n [HEADER_CONTENT_TYPE]: JSON_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('GET', encodedKey, opts, headers, '');\n const res = await this._sendRequest(url, 'GET', signedHeaders);\n return res.text();\n }\n\n /**\n * Get a response of an object from the bucket.\n * @param {string} key - The key of the object to get.\n * @param {boolean} [wholeFile=true] - Whether to get the whole file or a part.\n * @param {number} [rangeFrom=0] - The range from to get if not getting the whole file.\n * @param {number} [rangeTo=this.maxRequestSizeInBytes] - The range to to get if not getting the whole file. Note: rangeTo is inclusive.\n * @param {Object} [opts={}] - Additional options for the get operation.\n * @returns {Promise} Response of the object content. Use readableStream() to get the stream from .body.\n */\n async getResponse(\n key: string,\n wholeFile: boolean = true,\n rangeFrom: number = 0,\n rangeTo: number = this.maxRequestSizeInBytes,\n opts: Record = {},\n ): Promise {\n this._checkKey(key);\n const query = opts;\n const headers = {\n [HEADER_CONTENT_TYPE]: JSON_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n ...(wholeFile ? {} : { range: `bytes=${rangeFrom}-${rangeTo - 1}` }),\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('GET', encodedKey, query, headers, '');\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n\n return this._sendRequest(urlWithQuery, 'GET', signedHeaders);\n }\n\n /**\n * Put an object into the bucket.\n * @param {string} key - The key of the object to put. To create a folder, include a trailing slash.\n * @param {Buffer|string} data - The content of the object to put.\n * @returns {Promise} The response from the put operation.\n * @throws {TypeError} If the key is not a non-empty string or data is not a Buffer or string.\n */\n async put(key: string, data: string | Buffer): Promise {\n this._checkKey(key);\n if (!(data instanceof Buffer || typeof data === 'string')) {\n this._log('error', ERROR_DATA_BUFFER_REQUIRED);\n throw new TypeError(ERROR_DATA_BUFFER_REQUIRED);\n }\n // const encodedKey = encodeURIComponent(key);\n this._log('info', `Uploading object ${key}`);\n const contentLength = typeof data === 'string' ? Buffer.byteLength(data) : data.length;\n const headers = {\n [HEADER_CONTENT_LENGTH]: contentLength,\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('PUT', encodedKey, {}, headers, data);\n const res = await this._sendRequest(url, 'PUT', signedHeaders, data);\n return res;\n }\n\n /**\n * Initiate a multipart upload.\n * @param {string} key - The key of the object to upload.\n * @param {string} [fileType='application/octet-stream'] - The MIME type of the file.\n * @returns {Promise} The upload ID for the multipart upload.\n * @throws {TypeError} If the key is not a non-empty string or fileType is not a string.\n * @throws {Error} If the multipart upload initiation fails.\n */\n async getMultipartUploadId(key: string, fileType: string = DEFAULT_STREAM_CONTENT_TYPE): Promise {\n this._checkKey(key);\n if (typeof fileType !== 'string') {\n this._log('error', `${ERROR_PREFIX}fileType must be a string`);\n throw new TypeError(`${ERROR_PREFIX}fileType must be a string`);\n }\n this._log('info', `Initiating multipart upload for object ${key}`);\n const query = { uploads: '' };\n const headers = {\n [HEADER_CONTENT_TYPE]: fileType,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('POST', encodedKey, query, headers, '');\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n\n const res = await this._sendRequest(urlWithQuery, 'POST', signedHeaders);\n const responseBody = await res.text();\n const parsedResponse = _parseXml(responseBody);\n\n if (\n typeof parsedResponse === 'object' &&\n parsedResponse !== null &&\n 'error' in parsedResponse &&\n typeof parsedResponse.error === 'object' &&\n parsedResponse.error !== null &&\n 'message' in parsedResponse.error\n ) {\n const errorMessage = String(parsedResponse.error.message);\n this._log('error', `${ERROR_PREFIX}Failed to abort multipart upload: ${errorMessage}`);\n throw new Error(`${ERROR_PREFIX}Failed to abort multipart upload: ${errorMessage}`);\n }\n\n if (typeof parsedResponse === 'object' && parsedResponse !== null) {\n if (!parsedResponse.initiateMultipartUploadResult || !parsedResponse.initiateMultipartUploadResult.uploadId) {\n this._log('error', `${ERROR_PREFIX}Failed to create multipart upload: no uploadId in response`);\n throw new Error(`${ERROR_PREFIX}Failed to create multipart upload: Missing upload ID in response`);\n }\n\n return parsedResponse.initiateMultipartUploadResult.uploadId;\n } else {\n this._log('error', `${ERROR_PREFIX}Failed to create multipart upload: unexpected response format`);\n throw new Error(`${ERROR_PREFIX}Failed to create multipart upload: Unexpected response format`);\n }\n }\n\n /**\n * Upload a part in a multipart upload.\n * @param {string} key - The key of the object being uploaded.\n * @param {Buffer|string} data - The content of the part.\n * @param {string} uploadId - The upload ID of the multipart upload.\n * @param {number} partNumber - The part number.\n * @param {Object} [opts={}] - Additional options for the upload.\n * @returns {Promise} The ETag and part number of the uploaded part.\n * @throws {TypeError} If any of the parameters are of incorrect type.\n */\n async uploadPart(\n key: string,\n data: Buffer | string,\n uploadId: string,\n partNumber: number,\n opts: Object = {},\n ): Promise {\n this._validateUploadPartParams(key, data, uploadId, partNumber, opts);\n const query = { uploadId, partNumber, ...opts } as { [key: string]: any };\n const headers = {\n [HEADER_CONTENT_LENGTH]: data.length,\n } as { [key: string]: any };\n\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('PUT', encodedKey, query, headers, data);\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n\n const res = await this._sendRequest(urlWithQuery, 'PUT', signedHeaders, data);\n const ETag = res.headers.get('etag') || '';\n return { partNumber, ETag };\n }\n\n _validateUploadPartParams(key: string, data: Buffer | string, uploadId: string, partNumber: number, opts: Object) {\n this._checkKey(key);\n if (!(data instanceof Buffer || typeof data === 'string')) {\n this._log('error', ERROR_DATA_BUFFER_REQUIRED);\n throw new TypeError(ERROR_DATA_BUFFER_REQUIRED);\n }\n if (typeof uploadId !== 'string' || uploadId.trim().length === 0) {\n this._log('error', ERROR_UPLOAD_ID_REQUIRED);\n throw new TypeError(ERROR_UPLOAD_ID_REQUIRED);\n }\n if (!Number.isInteger(partNumber) || partNumber <= 0) {\n this._log('error', `${ERROR_PREFIX}partNumber must be a positive integer`);\n throw new TypeError(`${ERROR_PREFIX}partNumber must be a positive integer`);\n }\n this._checkOpts(opts);\n }\n\n /**\n * Complete a multipart upload.\n * @param {string} key - The key of the object being uploaded.\n * @param {string} uploadId - The upload ID of the multipart upload.\n * @param {Array} parts - An array of objects containing PartNumber and ETag for each part.\n * @returns {Promise} The result of the complete multipart upload operation.\n * @throws {TypeError} If any of the parameters are of incorrect type.\n * @throws {Error} If the complete multipart upload operation fails.\n */\n async completeMultipartUpload(\n key: string,\n uploadId: string,\n parts: Array,\n ): Promise {\n this._checkKey(key);\n if (typeof uploadId !== 'string' || uploadId.trim().length === 0) {\n this._log('error', ERROR_UPLOAD_ID_REQUIRED);\n throw new TypeError(ERROR_UPLOAD_ID_REQUIRED);\n }\n if (!Array.isArray(parts) || parts.length === 0) {\n this._log('error', ERROR_PARTS_REQUIRED);\n throw new TypeError(ERROR_PARTS_REQUIRED);\n }\n if (!parts.every(part => typeof part.partNumber === 'number' && typeof part.ETag === 'string')) {\n this._log('error', ERROR_INVALID_PART);\n throw new TypeError(ERROR_INVALID_PART);\n }\n this._log('info', `Complete multipart upload ${uploadId} for object ${key}`);\n const query = { uploadId };\n const xmlBody = this._buildCompleteMultipartUploadXml(parts);\n const headers = {\n [HEADER_CONTENT_TYPE]: XML_CONTENT_TYPE,\n [HEADER_CONTENT_LENGTH]: Buffer.byteLength(xmlBody).toString(),\n [HEADER_AMZ_CONTENT_SHA256]: await _hash(xmlBody),\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('POST', encodedKey, query, headers, xmlBody);\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n\n const res = await this._sendRequest(urlWithQuery, 'POST', signedHeaders, xmlBody);\n const responseBody = await res.text();\n const parsedResponse = _parseXml(responseBody);\n\n if (\n typeof parsedResponse === 'object' &&\n parsedResponse !== null &&\n 'error' in parsedResponse &&\n typeof parsedResponse.error === 'object' &&\n parsedResponse.error !== null &&\n 'message' in parsedResponse.error\n ) {\n const errorMessage = String(parsedResponse.error.message);\n this._log('error', `${ERROR_PREFIX}Failed to abort multipart upload: ${errorMessage}`);\n throw new Error(`${ERROR_PREFIX}Failed to abort multipart upload: ${errorMessage}`);\n }\n\n return parsedResponse.completeMultipartUploadResult;\n }\n\n /**\n * Aborts a multipart upload.\n * @param {string} key - The key of the object being uploaded.\n * @param {string} uploadId - The ID of the multipart upload to abort.\n * @returns {Promise} - A promise that resolves to the abort response.\n * @throws {Error} If the abort operation fails.\n */\n async abortMultipartUpload(key: string, uploadId: string): Promise {\n // Input validation\n this._checkKey(key);\n if (typeof uploadId !== 'string' || uploadId.trim().length === 0) {\n this._log('error', ERROR_UPLOAD_ID_REQUIRED);\n throw new TypeError(ERROR_UPLOAD_ID_REQUIRED);\n }\n\n this._log('info', `Aborting multipart upload ${uploadId} for object ${key}`);\n\n // Prepare the request\n const query = { uploadId };\n const headers = {\n [HEADER_CONTENT_TYPE]: XML_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n\n try {\n // Sign and send the request\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('DELETE', encodedKey, query, headers, '');\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n\n const res = await this._sendRequest(urlWithQuery, 'DELETE', signedHeaders);\n\n // Check for successful response\n if (res.ok) {\n const responseBody = await res.text();\n const parsedResponse = _parseXml(responseBody);\n\n if (\n typeof parsedResponse === 'object' &&\n parsedResponse !== null &&\n 'error' in parsedResponse &&\n typeof parsedResponse.error === 'object' &&\n parsedResponse.error !== null &&\n 'message' in parsedResponse.error\n ) {\n const errorMessage = String(parsedResponse.error.message);\n this._log('error', `${ERROR_PREFIX}Failed to abort multipart upload: ${errorMessage}`);\n throw new Error(`${ERROR_PREFIX}Failed to abort multipart upload: ${errorMessage}`);\n }\n\n return {\n status: 'Aborted',\n key,\n uploadId,\n response: parsedResponse,\n };\n } else {\n this._log('error', `${ERROR_PREFIX}Abort request failed with status ${res.status}`);\n throw new Error(`${ERROR_PREFIX}Abort request failed with status ${res.status}`);\n }\n } catch (error: unknown) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n this._log('error', `${ERROR_PREFIX}Failed to abort multipart upload for key ${key}: ${errorMessage}`);\n throw new Error(`${ERROR_PREFIX}Failed to abort multipart upload for key ${key}: ${errorMessage}`);\n }\n }\n\n _buildCompleteMultipartUploadXml(parts: Array): string {\n return `\n \n ${parts\n .map(\n part => `\n \n ${part.partNumber}\n ${part.ETag}\n \n `,\n )\n .join('')}\n \n `;\n }\n\n /**\n * Delete an object from the bucket.\n * @param {string} key - The key of the object to delete.\n * @returns {Promise} The response from the delete operation.\n */\n async delete(key: string): Promise {\n this._checkKey(key);\n this._log('info', `Deleting object ${key}`);\n const headers = {\n [HEADER_CONTENT_TYPE]: JSON_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('DELETE', encodedKey, {}, headers, '');\n const res = await this._sendRequest(url, 'DELETE', signedHeaders);\n return res.text();\n }\n\n async _sendRequest(\n url: string,\n method: HttpMethod,\n headers: Record,\n body?: string | Buffer,\n ): Promise {\n this._log('info', `Sending ${method} request to ${url}, headers: ${JSON.stringify(headers)}`);\n const res = await fetch(url, {\n method,\n headers,\n body,\n signal: this.requestAbortTimeout !== undefined ? AbortSignal.timeout(this.requestAbortTimeout) : undefined,\n });\n\n if (!res.ok) {\n await this._handleErrorResponse(res);\n }\n\n return res;\n }\n\n async _handleErrorResponse(res: Response) {\n const errorBody = await res.text();\n const errorCode = res.headers.get('x-amz-error-code') || 'Unknown';\n const errorMessage = res.headers.get('x-amz-error-message') || res.statusText;\n this._log(\n 'error',\n `${ERROR_PREFIX}Request failed with status ${res.status}: ${errorCode} - ${errorMessage},err body: ${errorBody}`,\n );\n throw new Error(\n `${ERROR_PREFIX}Request failed with status ${res.status}: ${errorCode} - ${errorMessage}, err body: ${errorBody}`,\n );\n }\n\n _buildCanonicalQueryString(queryParams: Object): string {\n if (Object.keys(queryParams).length < 1) {\n return '';\n }\n\n return Object.keys(queryParams)\n .sort()\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent((queryParams as Record)[key])}`)\n .join('&');\n }\n async _getSignatureKey(dateStamp: string): Promise {\n const kDate = await _hmac(`AWS4${this.secretAccessKey}`, dateStamp);\n const kRegion = await _hmac(kDate, this.region);\n const kService = await _hmac(kRegion, S3_SERVICE);\n return _hmac(kService, AWS_REQUEST_TYPE);\n }\n}\n\nconst _hash = async (content: string | Buffer): Promise => {\n const hashSum = _createHash('sha256');\n hashSum.update(content);\n return hashSum.digest('hex');\n};\n\nconst _hmac = async (key: string | Buffer, content: string, encoding?: 'hex'): Promise => {\n const hmacSum = _createHmac('sha256', key);\n hmacSum.update(content);\n return hmacSum.digest(encoding);\n};\n\nconst _parseXml = (str: string): string | object | any => {\n const unescapeXml = (value: string): string => {\n return value\n .replace(/"/g, '\"')\n .replace(/'/g, \"'\")\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/&/g, '&');\n };\n\n const json = {};\n const re = /<(\\w)([-\\w]+)(?:\\/|[^>]*>((?:(?!<\\1)[\\s\\S])*)<\\/\\1\\2)>/gm;\n let match;\n\n while ((match = re.exec(str))) {\n const [, prefix, key, value] = match;\n const fullKey = prefix.toLowerCase() + key;\n const parsedValue = value != null ? _parseXml(value) : true;\n\n if (typeof parsedValue === 'string') {\n (json as { [key: string]: any })[fullKey] = unescapeXml(parsedValue);\n } else if (Array.isArray((json as { [key: string]: any })[fullKey])) {\n (json as { [key: string]: any })[fullKey].push(parsedValue);\n } else {\n (json as { [key: string]: any })[fullKey] =\n (json as { [key: string]: any })[fullKey] != null\n ? [(json as { [key: string]: any })[fullKey], parsedValue]\n : expectArray[fullKey]\n ? [parsedValue]\n : parsedValue;\n }\n }\n\n return Object.keys(json).length ? json : unescapeXml(str);\n};\n\nexport { S3 };\nexport default S3;\n", "'use strict';\n\nimport { S3 } from 'ultralight-s3';\nimport avro from 'avro-js'; // eslint-disable-line\nimport {\n\tlowstorage_ERROR_CODES,\n\tlowstorageError,\n\tCollectionNotFoundError,\n\tSchemaValidationError,\n\tDocumentValidationError,\n\tS3OperationError,\n} from './errors.js';\nimport { matchesQuery, generateUUID, inferAvroType } from './helpers.js';\n\nconst MODULE_NAME = 'lowstorage';\nconst DEFAULT_DELIMITER = '/';\nconst PROJECT_DIR_PREFIX = 'lowstorage';\nconst SCHEMA_SUFFIX = '.avro';\nconst CHUNG_1MB = 1024 * 1024;\nconst CHUNG_5MB = 5 * CHUNG_1MB;\n\n// code / description\n// init of new collection is automatically creating it in the bucket\n// there is optional (opt-in) switch to create new collections in bucket\n// if the schema is not provided, it will create empty buffer and save it\n// if the schema is provided, it will save it in memory and use it for all ops\n// if the schema is updated, it will save it in memory and use it for all ops\n// exposed functions are:\n// listCollections \u2705\n// collectionExists \u2705\n// createCollection \u2705\n// removeCollection \u2705\n// renameCollection \u2705\n// updateCollectionSchema \u274C\n// collection \u2705\n// s3 \u2705\n\n// Operations over collections are:\n// insert \u2705\n// find \u2705\n// findOne \u2705\n// update \u2705\n// updateOne \u2705\n// delete \u2705\n// count \u2705\n\n// Errors:\n// lowstorageError \u2705\n// CollectionNotFoundError \u2705\n// SchemaValidationError \u2705\n// DocumentValidationError \u2705\n// S3OperationError \u2705\n\nclass lowstorage {\n\tconstructor(\n\t\toptions = {\n\t\t\taccessKeyId: undefined,\n\t\t\tsecretAccessKey: undefined,\n\t\t\tendpoint: undefined,\n\t\t\tbucketName: undefined,\n\t\t\tregion: 'auto',\n\t\t\tlogger: null,\n\t\t\tdirPrefix: PROJECT_DIR_PREFIX,\n\t\t},\n\t) {\n\t\tthis._checkArgs(options);\n\t\tthis._schemas = new Map();\n\t\tthis._s3 = new S3(options);\n\t\tthis._dirPrefix = options.dirPrefix || PROJECT_DIR_PREFIX;\n\t\tthis._avro = avro;\n\t}\n\n\t_checkArgs = (args) => {\n\t\tconst requiredFields = ['accessKeyId', 'secretAccessKey', 'endpoint', 'bucketName'];\n\t\tfor (const field of requiredFields) {\n\t\t\tif (!args[field]) {\n\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: ${field} is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n\t\t\t}\n\t\t}\n\t};\n\n\t_hasColName = (colName) => {\n\t\tif (colName.trim() === '' || colName === null || typeof colName === 'undefined') {\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Collection name is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n\t\t}\n\t};\n\n\tasync listCollections() {\n\t\ttry {\n\t\t\tconst listed = await this._s3.list(DEFAULT_DELIMITER, this._dirPrefix);\n\t\t\tif (typeof listed === 'object' && listed !== null && listed.keyCount === '0') return [];\n\t\t\t// remove the delimiter from the key\n\t\t\treturn listed.map((entry) => entry.key.slice(this._dirPrefix.length + 1, -SCHEMA_SUFFIX.length));\n\t\t} catch (error) {\n\t\t\tthrow new S3OperationError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t}\n\t}\n\n\tasync collectionExists(colName) {\n\t\ttry {\n\t\t\tthis._hasColName(colName);\n\t\t\tconst exists = await this._s3.fileExists(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${SCHEMA_SUFFIX}`);\n\t\t\treturn exists;\n\t\t} catch (error) {\n\t\t\tif (error.message.includes('Not Found')) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND);\n\t\t}\n\t}\n\n\tasync createCollection(colName, schema, data = []) {\n\t\ttry {\n\t\t\tthis._hasColName(colName);\n\t\t\tconst exists = await this.collectionExists(colName);\n\t\t\tif (!exists) {\n\t\t\t\tawait this._s3.put(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${SCHEMA_SUFFIX}`, data.length > 0 ? data : '');\n\t\t\t\treturn this.collection(colName, schema);\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Collection ${colName} already exists`, lowstorage_ERROR_CODES.COLLECTION_EXISTS);\n\t\t} catch (error) {\n\t\t\tif (error instanceof lowstorageError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.CREATE_COLLECTION_ERROR);\n\t\t}\n\t}\n\n\tasync removeCollection(colName) {\n\t\ttry {\n\t\t\tthis._hasColName(colName);\n\t\t\tconst KEY = `${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${SCHEMA_SUFFIX}`;\n\t\t\tconst exists = await this.collectionExists(colName);\n\t\t\tif (exists) {\n\t\t\t\tawait this._s3.delete(KEY);\n\t\t\t\tconst exists2 = await this.collectionExists(colName);\n\t\t\t\tif (typeof exists2 === 'boolean') {\n\t\t\t\t\treturn !exists2;\n\t\t\t\t}\n\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to delete collection ${colName}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Collection ${colName} does not exist`, lowstorage_ERROR_CODES.REMOVE_COLLECTION_ERROR);\n\t\t} catch (error) {\n\t\t\tif (error instanceof S3OperationError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(\n\t\t\t\t`${MODULE_NAME}: Failed to remove collection: ${error.message}`,\n\t\t\t\tlowstorage_ERROR_CODES.REMOVE_COLLECTION_ERROR,\n\t\t\t);\n\t\t}\n\t}\n\n\tasync renameCollection(oldColName, newColName) {\n\t\ttry {\n\t\t\tthis._hasColName(oldColName);\n\t\t\tthis._hasColName(newColName);\n\t\t\tconst exists = await this.collectionExists(oldColName);\n\t\t\tif (!exists) {\n\t\t\t\tthrow new CollectionNotFoundError(\n\t\t\t\t\t`${MODULE_NAME}: Collection ${oldColName} does not exist`,\n\t\t\t\t\tlowstorage_ERROR_CODES.COLLECTION_NOT_FOUND,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst oldCol = this.collection(oldColName);\n\t\t\tconst oldColData = await oldCol._loadDataBuffer();\n\t\t\tconst success = await this.removeCollection(oldColName);\n\t\t\tif (!success) {\n\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Failed to rename collection`, lowstorage_ERROR_CODES.RENAME_COLLECTION_ERROR);\n\t\t\t}\n\t\t\treturn await this.createCollection(newColName, oldCol._avroType, oldColData);\n\t\t} catch (error) {\n\t\t\tif (error instanceof lowstorageError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(\n\t\t\t\t`${MODULE_NAME}: Rename collection failed: ${error.message}`,\n\t\t\t\tlowstorage_ERROR_CODES.RENAME_COLLECTION_ERROR,\n\t\t\t);\n\t\t}\n\t}\n\n\t// TODO: update collection schema\n\t// async updateCollectionSchema(colName, newSchema) {\n\t// \ttry {\n\t// \t\tthis._hasColName(colName);\n\t// \t\t// Check if collection exists\n\t// \t\tconst exists = await this.collectionExists(colName);\n\t// \t\tif (!exists) {\n\t// \t\t\tthrow new CollectionNotFoundError(`${MODULE_NAME}: Collection ${colName} does not exist`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND);\n\t// \t\t}\n\t// \t\tif (typeof schema === 'undefined' || schema === null) {\n\t// \t\t\tthrow new lowstorageError(`${MODULE_NAME}: Schema is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n\t// \t\t}\n\t// \t\tconst col = this.collection(colName);\n\t// \t\tconst colData = await col._loadDataBuffer();\n\t// \t\tconst avroType = this._avro.parse(schema);\n\t// \t\tthis._schemas.set(colName, avroType);\n\n\t// \t} catch (error) {\n\t// \t\tif (error instanceof S3OperationError) {\n\t// \t\t\tthrow error;\n\t// \t\t}\n\t// \t\tthrow new lowstorageError(\n\t// \t\t\t`${MODULE_NAME}: Failed to update collection schema: ${error.message}`,\n\t// \t\t\tlowstorage_ERROR_CODES.UPDATE_COLLECTION_SCHEMA_ERROR,\n\t// \t\t);\n\t// \t}\n\t// }\n\n\tasync collection(colName, schema, autoCreate = true) {\n\t\ttry {\n\t\t\tthis._hasColName(colName);\n\t\t\tif (typeof schema === 'undefined') {\n\t\t\t\t// Load schema if not in memory\n\t\t\t\tif (this._schemas.has(colName)) {\n\t\t\t\t\treturn new Collection(colName, this._s3, this._schemas.get(colName), this._dirPrefix);\n\t\t\t\t}\n\t\t\t\t// check if schema file exists\n\t\t\t\tconst exists = await this._s3.fileExists(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${SCHEMA_SUFFIX}`);\n\t\t\t\tif (exists) {\n\t\t\t\t\tconst schemaContent = await this._s3.get(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${SCHEMA_SUFFIX}`);\n\t\t\t\t\tconst avroType = this._avro.parse(schemaContent);\n\t\t\t\t\tthis._schemas.set(colName, avroType);\n\t\t\t\t\treturn new Collection(colName, this._s3, avroType, this._dirPrefix);\n\t\t\t\t}\n\t\t\t\tif (autoCreate) {\n\t\t\t\t\tthis._s3.put(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${SCHEMA_SUFFIX}`, '');\n\t\t\t\t}\n\t\t\t\treturn new Collection(colName, this._s3, undefined, this._dirPrefix);\n\t\t\t}\n\t\t\tif (autoCreate) {\n\t\t\t\tconst exists = await this._s3.fileExists(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${SCHEMA_SUFFIX}`);\n\t\t\t\tif (!exists) {\n\t\t\t\t\tawait this._s3.put(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${SCHEMA_SUFFIX}`, '');\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn new Collection(colName, this._s3, this._avro.parse(schema), this._dirPrefix);\n\t\t} catch (error) {\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND);\n\t\t}\n\t}\n\n\ts3 = () => {\n\t\treturn this._s3;\n\t};\n}\n\nclass Collection {\n\tconstructor(colName, s3, avroType = undefined, dirPrefix = PROJECT_DIR_PREFIX) {\n\t\tthis._colName = colName;\n\t\tthis._s3 = s3;\n\t\tthis._avro = avro;\n\t\tthis._avroType = avroType;\n\t\tthis._dirPrefix = dirPrefix;\n\t}\n\n\tasync insert(doc, schema = undefined) {\n\t\ttry {\n\t\t\tif (doc === undefined || doc === null) {\n\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Document is required for insert`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n\t\t\t}\n\t\t\tif (typeof doc !== 'object' && !Array.isArray(doc)) {\n\t\t\t\tthrow new DocumentValidationError(\n\t\t\t\t\t`${MODULE_NAME}: Document must be an object or an array`,\n\t\t\t\t\tlowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst items = !Array.isArray(doc) ? [doc] : doc;\n\n\t\t\tconst avroType = !!schema ? this._avro.parse(schema) : this._avroType || this._avro.parse(inferAvroType(doc));\n\n\t\t\tif (!avroType) {\n\t\t\t\tthrow new SchemaValidationError(\n\t\t\t\t\t`${MODULE_NAME}: Schema is required - Pass a schema to the insert method`,\n\t\t\t\t\tlowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthis._avroType = avroType;\n\t\t\tconst wrapperType = this._avro.parse({ type: 'array', items: this._avroType });\n\t\t\tconst bufferData = await this._loadDataBuffer();\n\t\t\tconst data = bufferData.length > 0 ? wrapperType.fromBuffer(bufferData) : [];\n\t\t\tfor (let item of items) {\n\t\t\t\tif (typeof item !== 'object' || item === null) {\n\t\t\t\t\tthrow new DocumentValidationError(\n\t\t\t\t\t\t`${MODULE_NAME}: Invalid input: input must be an object or an array of objects`,\n\t\t\t\t\t\tlowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\titem._id = item._id || (await generateUUID());\n\t\t\t\tconst valid = this._avroType.isValid(item);\n\t\t\t\tif (!valid) {\n\t\t\t\t\tthrow new DocumentValidationError(`${MODULE_NAME}: Invalid document or schema`, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR);\n\t\t\t\t}\n\t\t\t\tdata.push(item);\n\t\t\t}\n\t\t\tconst success = await this._saveDataBuffer(wrapperType.toBuffer(data));\n\t\t\tif (!success) {\n\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to insert document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t}\n\t\t\treturn items;\n\t\t} catch (error) {\n\t\t\tif (error instanceof lowstorageError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME} Insert operation failed: ${error.message}`, lowstorage_ERROR_CODES.INSERT_ERROR);\n\t\t}\n\t}\n\n\tasync _loadDataBuffer() {\n\t\ttry {\n\t\t\tconst KEY = `${this._dirPrefix}${DEFAULT_DELIMITER}${this._colName}${SCHEMA_SUFFIX}`;\n\t\t\tconst CHUNK_SIZE = this._s3.getMaxRequestSizeInBytes() || CHUNG_5MB;\n\t\t\tlet firstData = await this._s3.get(KEY);\n\t\t\tif (firstData.length < CHUNK_SIZE) {\n\t\t\t\treturn Buffer.from(firstData, 'utf8');\n\t\t\t}\n\t\t\tlet offset = CHUNK_SIZE;\n\t\t\tlet bufferArr = [Buffer.from(firstData, 'utf8')];\n\t\t\tlet repeat = true;\n\t\t\twhile (repeat) {\n\t\t\t\tconst nextDataResponse = await this._s3.getResponse(KEY, false, offset, offset + CHUNK_SIZE);\n\t\t\t\tconst nextDataBody = await nextDataResponse.text();\n\t\t\t\tbufferArr.push(Buffer.from(nextDataBody, 'utf8'));\n\t\t\t\toffset += CHUNK_SIZE;\n\t\t\t\tconst contentLength = nextDataResponse.headers.get('content-length') || nextDataBody.length;\n\t\t\t\tif (contentLength < CHUNK_SIZE) {\n\t\t\t\t\trepeat = false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn Buffer.concat(bufferArr);\n\t\t} catch (error) {\n\t\t\tif (error.toString().indexOf('status 404: Unknown - Not Found') > -1) {\n\t\t\t\treturn Buffer.from('');\n\t\t\t}\n\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to load data buffer: ${error.message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t}\n\t}\n\n\tasync _saveDataBuffer(data) {\n\t\ttry {\n\t\t\tconst KEY = `${this._dirPrefix}${DEFAULT_DELIMITER}${this._colName}${SCHEMA_SUFFIX}`;\n\t\t\tconst resp = await this._s3.put(KEY, data);\n\t\t\tif (resp.status !== 200) {\n\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to save data`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t}\n\t\t\treturn true;\n\t\t} catch (error) {\n\t\t\tif (error instanceof S3OperationError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.SAVE_DATA_ERROR);\n\t\t}\n\t}\n\n\tasync find(query = {}, options = {}) {\n\t\ttry {\n\t\t\tconst bufferData = await this._loadDataBuffer(); // load data from s3\n\t\t\tif (bufferData.length === 0) {\n\t\t\t\treturn [];\n\t\t\t}\n\t\t\tconst wrapperType = this._avro.parse({ type: 'array', items: this._avroType });\n\t\t\tconst data = bufferData.length > 0 ? wrapperType.fromBuffer(bufferData) : [];\n\t\t\tconst start = parseInt(options.skip, 10) || 0;\n\t\t\tconst end = parseInt(options.limit, 10) ? start + parseInt(options.limit, 10) : undefined;\n\t\t\tconst filteredData = data.filter((doc) => matchesQuery(doc, query)).slice(start, end);\n\t\t\treturn filteredData;\n\t\t} catch (error) {\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Find operation failed: ${error.message}`, lowstorage_ERROR_CODES.FIND_ERROR);\n\t\t}\n\t}\n\n\tasync findOne(query = {}) {\n\t\ttry {\n\t\t\tconst result = await this.find(query);\n\t\t\treturn result[0] || [];\n\t\t} catch (error) {\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: FindOne operation failed: ${error.message}`, lowstorage_ERROR_CODES.FIND_ONE_ERROR);\n\t\t}\n\t}\n\n\tasync update(query = {}, update = {}) {\n\t\ttry {\n\t\t\tif (!this._avroType) {\n\t\t\t\tthrow new SchemaValidationError(\n\t\t\t\t\t`${MODULE_NAME}: Schema is not defined for this collection`,\n\t\t\t\t\tlowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst bufferData = await this._loadDataBuffer(); // load data from s3\n\t\t\tif (bufferData.length === 0) return 0;\n\t\t\tconst wrapperType = this._avro.parse({ type: 'array', items: this._avroType });\n\t\t\tconst data = bufferData.length > 0 ? wrapperType.fromBuffer(bufferData) : [];\n\t\t\tlet updatedCount = 0;\n\n\t\t\tfor (let i = 0; i < data.length; i++) {\n\t\t\t\tif (matchesQuery(data[i], query)) {\n\t\t\t\t\tconst updatedDoc = { ...data[i], ...update };\n\t\t\t\t\tconst valid = this._avroType.isValid(updatedDoc);\n\t\t\t\t\tif (!valid) {\n\t\t\t\t\t\tthrow new DocumentValidationError(\n\t\t\t\t\t\t\t`${MODULE_NAME}: Invalid document or schema`,\n\t\t\t\t\t\t\tlowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tdata[i] = updatedDoc;\n\t\t\t\t\tupdatedCount++;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (updatedCount > 0) {\n\t\t\t\tconst success = await this._saveDataBuffer(wrapperType.toBuffer(data));\n\t\t\t\tif (!success) {\n\t\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn updatedCount;\n\t\t} catch (error) {\n\t\t\tif (error instanceof S3OperationError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Update operation failed: ${error.message}`, lowstorage_ERROR_CODES.UPDATE_ERROR);\n\t\t}\n\t}\n\n\tasync updateOne(query = {}, update = {}) {\n\t\ttry {\n\t\t\tif (!this._avroType) {\n\t\t\t\tthrow new SchemaValidationError(\n\t\t\t\t\t`${MODULE_NAME}: Schema is not defined for this collection`,\n\t\t\t\t\tlowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst bufferData = await this._loadDataBuffer(); // load data from s3\n\t\t\tif (bufferData.length === 0) return 0;\n\t\t\tconst wrapperType = this._avro.parse({ type: 'array', items: this._avroType });\n\t\t\tconst data = bufferData.length > 0 ? wrapperType.fromBuffer(bufferData) : [];\n\t\t\tconst docIndex = data.findIndex((doc) => matchesQuery(doc, query));\n\n\t\t\tif (docIndex !== -1) {\n\t\t\t\tconst updatedDoc = { ...data[docIndex], ...update };\n\t\t\t\tconst valid = this._avroType.isValid(updatedDoc);\n\t\t\t\tif (!valid) {\n\t\t\t\t\tthrow new DocumentValidationError(`${MODULE_NAME}: Invalid document or schema`, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR);\n\t\t\t\t}\n\t\t\t\tdata[docIndex] = updatedDoc;\n\t\t\t\tconst success = await this._saveDataBuffer(wrapperType.toBuffer(data));\n\t\t\t\tif (!success) {\n\t\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t\t}\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t\treturn 0;\n\t\t} catch (error) {\n\t\t\tif (error instanceof lowstorageError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: UpdateOne operation failed: ${error.message}`, lowstorage_ERROR_CODES.UPDATE_ONE_ERROR);\n\t\t}\n\t}\n\n\tasync delete(query = {}) {\n\t\ttry {\n\t\t\tconst bufferData = await this._loadDataBuffer(); // load data from s3\n\t\t\tif (bufferData.length === 0) return 0;\n\t\t\tconst wrapperType = this._avro.parse({ type: 'array', items: this._avroType });\n\t\t\tconst data = bufferData.length > 0 ? wrapperType.fromBuffer(bufferData) : [];\n\t\t\tconst initialLength = data.length;\n\t\t\tconst newData = data.filter((doc) => !matchesQuery(doc, query));\n\t\t\tconst success = await this._saveDataBuffer(wrapperType.toBuffer(newData));\n\t\t\tif (!success) {\n\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to delete document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t}\n\t\t\treturn initialLength - newData.length;\n\t\t} catch (error) {\n\t\t\tif (error instanceof S3OperationError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Delete operation failed: ${error.message}`, lowstorage_ERROR_CODES.DELETE_ERROR);\n\t\t}\n\t}\n\n\tasync count(query = {}) {\n\t\ttry {\n\t\t\tif (query === undefined || query === null) {\n\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Query is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n\t\t\t}\n\t\t\tif (Object.keys(query).length === 0) {\n\t\t\t\tconst bufferData = await this._loadDataBuffer(); // load data from s3\n\t\t\t\tif (bufferData.length === 0) return 0;\n\t\t\t\tconst wrapperType = this._avro.parse({ type: 'array', items: this._avroType });\n\t\t\t\tconst data = bufferData.length > 0 ? wrapperType.fromBuffer(bufferData) : [];\n\t\t\t\treturn data.length || null;\n\t\t\t}\n\t\t\treturn (await this.find(query)).length;\n\t\t} catch (error) {\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Count operation failed: ${error.message}`, lowstorage_ERROR_CODES.COUNT_ERROR);\n\t\t}\n\t}\n}\n\n// export default lowstorage;\nexport { lowstorage, lowstorageError, lowstorage_ERROR_CODES };\n", "'use strict';\n\nconst lowstorage_ERROR_CODES = {\n\tMISSING_ARGUMENT: 'MISSING_ARGUMENT',\n\tCOLLECTION_EXISTS: 'COLLECTION_EXISTS',\n\tCREATE_COLLECTION_ERROR: 'CREATE_COLLECTION_ERROR',\n\tRENAME_COLLECTION_ERROR: 'RENAME_COLLECTION_ERROR',\n\tREMOVE_COLLECTION_ERROR: 'REMOVE_COLLECTION_ERROR',\n\tUPDATE_COLLECTION_SCHEMA_ERROR: 'UPDATE_COLLECTION_SCHEMA_ERROR',\n\tCOLLECTION_NOT_FOUND: 'COLLECTION_NOT_FOUND',\n\tSCHEMA_VALIDATION_ERROR: 'SCHEMA_VALIDATION_ERROR',\n\tDOCUMENT_VALIDATION_ERROR: 'DOCUMENT_VALIDATION_ERROR',\n\tS3_OPERATION_ERROR: 'S3_OPERATION_ERROR',\n\tFIND_ERROR: 'FIND_ERROR',\n\tFIND_ONE_ERROR: 'FIND_ONE_ERROR',\n\tSAVE_DATA_ERROR: 'SAVE_DATA_ERROR',\n\tINSERT_ERROR: 'INSERT_ERROR',\n\tUPDATE_ERROR: 'UPDATE_ERROR',\n\tUPDATE_ONE_ERROR: 'UPDATE_ONE_ERROR',\n\tDELETE_ERROR: 'DELETE_ERROR',\n\tCOUNT_ERROR: 'COUNT_ERROR',\n\tUNKNOWN_ERROR: 'UNKNOWN_ERROR',\n};\nclass lowstorageError extends Error {\n\tconstructor(message, code = lowstorage_ERROR_CODES.UNKNOWN_ERROR) {\n\t\tsuper(`lowstorageError: ${message} :: code: ${code}`);\n\t\tthis.name = this.constructor.name;\n\t\tthis.code = code;\n\t\tError.captureStackTrace(this, this.constructor);\n\t}\n}\n\nclass CollectionNotFoundError extends lowstorageError {\n\tconstructor(collectionName) {\n\t\tsuper(`Collection ${collectionName} not found`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND);\n\t}\n}\n\nclass SchemaValidationError extends lowstorageError {\n\tconstructor(message) {\n\t\tsuper(message, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR);\n\t}\n}\n\nclass DocumentValidationError extends lowstorageError {\n\tconstructor(message) {\n\t\tsuper(message, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR);\n\t}\n}\n\nclass S3OperationError extends lowstorageError {\n\tconstructor(message, operation) {\n\t\tsuper(`S3 ${operation} operation failed: ${message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t}\n}\n\nexport {\n\tlowstorage_ERROR_CODES,\n\tlowstorageError,\n\tCollectionNotFoundError,\n\tSchemaValidationError,\n\tDocumentValidationError,\n\tS3OperationError,\n};\n", "'use strict';\n\nimport { randomUUID } from 'node:crypto';\n\nconst matchesQuery = (document, query) => {\n\treturn Object.keys(query).every((key) => document[key] === query[key]);\n};\n\nconst generateUUID = async () => {\n\tif (typeof randomUUID !== 'undefined' && typeof randomUUID === 'function') {\n\t\treturn randomUUID();\n\t}\n\tif (typeof crypto !== 'undefined' && typeof crypto === 'object' && typeof crypto.randomUUID === 'function') {\n\t\treturn crypto.randomUUID();\n\t}\n\treturn 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n\t\tvar r = (Math.random() * 16) | 0,\n\t\t\tv = c === 'x' ? r : (r & 0x3) | 0x8;\n\t\treturn v.toString(16);\n\t});\n};\n\nconst _getAvroType = (value, name = 'SubAutoGenerated') => {\n\tswitch (typeof value) {\n\t\tcase 'string':\n\t\t\tif (_isUUID(value)) {\n\t\t\t\treturn {\n\t\t\t\t\ttype: 'string',\n\t\t\t\t\tname: '_id',\n\t\t\t\t\tsize: 16,\n\t\t\t\t\tlogicalType: 'UUID',\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn 'string';\n\t\tcase 'number':\n\t\t\treturn Number.isInteger(value) ? 'int' : 'float';\n\t\tcase 'boolean':\n\t\t\treturn 'boolean';\n\t\tcase 'object':\n\t\t\tif (value === null) return 'null';\n\t\t\tif (Array.isArray(value)) return { type: 'array', items: _getAvroType(value[0]) };\n\t\t\treturn inferAvroType(value, name);\n\t\tdefault:\n\t\t\treturn 'string'; // Default to string for unknown types\n\t}\n};\n\nconst inferAvroType = (data, typeName = 'AutoGenerated') => {\n\tif (Array.isArray(data)) {\n\t\tdata = data[0];\n\t}\n\tconst fields = Object.entries(data).map(([name, value]) => {\n\t\treturn { name, type: _getAvroType(value, `${typeName}.${name}`) };\n\t});\n\treturn {\n\t\ttype: 'record',\n\t\tname: typeName,\n\t\tfields: fields,\n\t};\n};\n\nconst _isUUID = (str) => {\n\tconst uuidV4Regex = /^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i;\n\treturn uuidV4Regex.test(str);\n};\n\nexport { matchesQuery, generateUUID, inferAvroType };\n"], + "mappings": "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", + "names": ["_createHmac", "_createHash", "AWS_ALGORITHM", "AWS_REQUEST_TYPE", "S3_SERVICE", "LIST_TYPE", "UNSIGNED_PAYLOAD", "DEFAULT_STREAM_CONTENT_TYPE", "XML_CONTENT_TYPE", "JSON_CONTENT_TYPE", "SENSITIVE_KEYS_REDACTED", "MIN_MAX_REQUEST_SIZE_IN_BYTES", "HEADER_AMZ_CONTENT_SHA256", "HEADER_AMZ_DATE", "HEADER_HOST", "HEADER_AUTHORIZATION", "HEADER_CONTENT_TYPE", "HEADER_CONTENT_LENGTH", "HEADER_ETAG", "HEADER_LAST_MODIFIED", "ERROR_PREFIX", "ERROR_ACCESS_KEY_REQUIRED", "ERROR_SECRET_KEY_REQUIRED", "ERROR_ENDPOINT_REQUIRED", "ERROR_BUCKET_NAME_REQUIRED", "ERROR_KEY_REQUIRED", "ERROR_UPLOAD_ID_REQUIRED", "ERROR_PARTS_REQUIRED", "ERROR_INVALID_PART", "ERROR_DATA_BUFFER_REQUIRED", "ERROR_PREFIX_TYPE", "ERROR_MAX_KEYS_TYPE", "ERROR_DELIMITER_REQUIRED", "expectArray", "encodeAsHex", "c", "uriEscape", "uriStr", "uriResourceEscape", "string", "S3", "accessKeyId", "secretAccessKey", "endpoint", "bucketName", "region", "maxRequestSizeInBytes", "requestAbortTimeout", "logger", "props", "method", "key", "delimiter", "prefix", "maxKeys", "opts", "level", "message", "additionalData", "sanitize", "obj", "acc", "sanitizedData", "logEntry", "headers", "encodedKey", "url", "signedHeaders", "contentLength", "res", "error", "errorMessage", "keyPath", "query", "body", "datetime", "_hash", "canonicalHeaders", "canonicalRequest", "stringToSign", "signature", "authorizationHeader", "value", "credentialScope", "signingKey", "_hmac", "urlWithQuery", "responseBody", "lastModified", "etag", "data", "_parseXml", "output", "o", "i", "a", "_a", "_b", "_c", "wholeFile", "rangeFrom", "rangeTo", "fileType", "parsedResponse", "uploadId", "partNumber", "ETag", "parts", "part", "xmlBody", "errorBody", "errorCode", "queryParams", "dateStamp", "kDate", "kRegion", "kService", "content", "hashSum", "encoding", "hmacSum", "str", "unescapeXml", "json", "re", "match", "fullKey", "parsedValue", "avro", "lowstorage_ERROR_CODES", "lowstorageError", "message", "code", "CollectionNotFoundError", "collectionName", "SchemaValidationError", "DocumentValidationError", "S3OperationError", "operation", "randomUUID", "matchesQuery", "document", "query", "key", "generateUUID", "c", "r", "v", "_getAvroType", "value", "name", "_isUUID", "inferAvroType", "data", "typeName", "fields", "str", "MODULE_NAME", "DEFAULT_DELIMITER", "PROJECT_DIR_PREFIX", "SCHEMA_SUFFIX", "CHUNG_1MB", "CHUNG_5MB", "lowstorage", "options", "O", "avro", "args", "requiredFields", "field", "lowstorageError", "lowstorage_ERROR_CODES", "colName", "listed", "entry", "error", "S3OperationError", "schema", "data", "KEY", "exists2", "oldColName", "newColName", "CollectionNotFoundError", "oldCol", "oldColData", "autoCreate", "Collection", "schemaContent", "avroType", "s3", "dirPrefix", "doc", "DocumentValidationError", "items", "inferAvroType", "SchemaValidationError", "wrapperType", "bufferData", "item", "generateUUID", "CHUNK_SIZE", "firstData", "offset", "bufferArr", "repeat", "nextDataResponse", "nextDataBody", "query", "start", "end", "matchesQuery", "update", "updatedCount", "i", "updatedDoc", "docIndex", "initialLength", "newData"] } diff --git a/package-lock.json b/package-lock.json index da878ec..925c442 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,19 +10,17 @@ "license": "MIT", "dependencies": { "avro-js": "^1.11.3", - "ultralight-s3": "^0.0.3" + "ultralight-s3": "^0.0.4" }, "devDependencies": { - "avro-js": "^1.11.3", "esbuild": "^0.23.0", "jest": "^29.7.0", "prettier": "^3.3.2", "typescript": "^5.5.2", - "ultralight-s3": "^0.0.3", "wrangler": "^3.62.0" }, "engines": { - "node": ">=18.12.0" + "node": ">=20.0.0" } }, "node_modules/@ampproject/remapping": { @@ -1471,9 +1469,9 @@ } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", "dev": true }, "node_modules/@jridgewell/trace-mapping": { @@ -1585,9 +1583,9 @@ } }, "node_modules/@types/node": { - "version": "20.14.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.9.tgz", - "integrity": "sha512-06OCtnTXtWOZBJlRApleWndH4JsRVs1pDCc8dLSQp+7PpUpX3ePdHyeNSFTeSe7FtKyQkrlPvHwJOW3SLd8Oyg==", + "version": "20.14.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.10.tgz", + "integrity": "sha512-MdiXf+nDuMvY0gJKxyfZ7/6UFsETO7mGKF54MVD/ekJS6HdFtpZFBgrh6Pseu64XTb2MLyFPlbW6hj8HYRQNOQ==", "dev": true, "dependencies": { "undici-types": "~5.26.4" @@ -1721,7 +1719,6 @@ "version": "1.11.3", "resolved": "https://registry.npmjs.org/avro-js/-/avro-js-1.11.3.tgz", "integrity": "sha512-B1b0wI5iwSkVwj3RQWRzW99/LGoYl6df9j1kWime8r8b0dXCdKU7t7mEOFkOpQFaT/I9JXaL7KAIxM+/3TUk1A==", - "dev": true, "dependencies": { "underscore": "^1.13.2" } @@ -1880,9 +1877,9 @@ } }, "node_modules/browserslist": { - "version": "4.23.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.1.tgz", - "integrity": "sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw==", + "version": "4.23.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.2.tgz", + "integrity": "sha512-qkqSyistMYdxAcw+CzbZwlBy8AGmS/eEWs+sEV5TnLRGDOL+C5M2EnH6tlZyg0YoAxGJAFKh61En9BR941GnHA==", "dev": true, "funding": [ { @@ -1899,10 +1896,10 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001629", - "electron-to-chromium": "^1.4.796", + "caniuse-lite": "^1.0.30001640", + "electron-to-chromium": "^1.4.820", "node-releases": "^2.0.14", - "update-browserslist-db": "^1.0.16" + "update-browserslist-db": "^1.1.0" }, "bin": { "browserslist": "cli.js" @@ -1945,9 +1942,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001640", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001640.tgz", - "integrity": "sha512-lA4VMpW0PSUrFnkmVuEKBUovSWKhj7puyCg8StBChgu298N1AtuF1sKWEvfDuimSEDbhlb/KqPKC3fs1HbuQUA==", + "version": "1.0.30001641", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001641.tgz", + "integrity": "sha512-Phv5thgl67bHYo1TtMY/MurjkHhV4EDaCosezRXgZ8jzA/Ub+wjxAvbGvjoFENStinwi5kCyOYV3mi5tOGykwA==", "dev": true, "funding": [ { @@ -2238,9 +2235,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.816", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.816.tgz", - "integrity": "sha512-EKH5X5oqC6hLmiS7/vYtZHZFTNdhsYG5NVPRN6Yn0kQHNBlT59+xSM8HBy66P5fxWpKgZbPqb+diC64ng295Jw==", + "version": "1.4.825", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.825.tgz", + "integrity": "sha512-OCcF+LwdgFGcsYPYC5keEEFC2XT0gBhrYbeGzHCx7i9qRFbzO/AqTmc/C/1xNhJj+JA7rzlN7mpBuStshh96Cg==", "dev": true }, "node_modules/emittery": { @@ -4373,10 +4370,9 @@ "dev": true }, "node_modules/ultralight-s3": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/ultralight-s3/-/ultralight-s3-0.0.3.tgz", - "integrity": "sha512-9AMcXN/QFqUcI36Q1YXeIarVxXGrGAKusvKtP5Z00I8ZCqdQilG6Du6dDgPq+qVo+38U6HpkI1tJ3oOo5j1krw==", - "dev": true, + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/ultralight-s3/-/ultralight-s3-0.0.4.tgz", + "integrity": "sha512-/b0X2ruk+jI2VhjQK/s5lWQy+4LuobD9Yb/FcR3qD4DE+NCH97Zwi6PB+o5B/M/Fl1K8vJgAtOtEoVhaHgOHvw==", "engines": { "node": ">=16" } @@ -4384,8 +4380,7 @@ "node_modules/underscore": { "version": "1.13.6", "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz", - "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==", - "dev": true + "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==" }, "node_modules/undici": { "version": "5.28.4", @@ -4509,9 +4504,9 @@ } }, "node_modules/wrangler": { - "version": "3.63.0", - "resolved": "https://registry.npmjs.org/wrangler/-/wrangler-3.63.0.tgz", - "integrity": "sha512-FMIGorXhYN161S1qotoIlg9EqpfRsPqtB/fd9J+qXTJ5xpctq4meaQAmRKfLI87cQDdkjUXpQBJyNgBXw4i81Q==", + "version": "3.63.2", + "resolved": "https://registry.npmjs.org/wrangler/-/wrangler-3.63.2.tgz", + "integrity": "sha512-c7F46JtBGTIQehTOgfGbxfDMYgO9AjC70CXVSohxHiF9ajHz56HEV2k3aowhJJiP3MBB8sJMm8rdG10f5zUs+w==", "dev": true, "dependencies": { "@cloudflare/kv-asset-handler": "0.3.4", @@ -4976,9 +4971,9 @@ } }, "node_modules/ws": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", - "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", + "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", "dev": true, "engines": { "node": ">=10.0.0" @@ -6031,9 +6026,9 @@ "dev": true }, "@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", "dev": true }, "@jridgewell/trace-mapping": { @@ -6145,9 +6140,9 @@ } }, "@types/node": { - "version": "20.14.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.9.tgz", - "integrity": "sha512-06OCtnTXtWOZBJlRApleWndH4JsRVs1pDCc8dLSQp+7PpUpX3ePdHyeNSFTeSe7FtKyQkrlPvHwJOW3SLd8Oyg==", + "version": "20.14.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.10.tgz", + "integrity": "sha512-MdiXf+nDuMvY0gJKxyfZ7/6UFsETO7mGKF54MVD/ekJS6HdFtpZFBgrh6Pseu64XTb2MLyFPlbW6hj8HYRQNOQ==", "dev": true, "requires": { "undici-types": "~5.26.4" @@ -6254,7 +6249,6 @@ "version": "1.11.3", "resolved": "https://registry.npmjs.org/avro-js/-/avro-js-1.11.3.tgz", "integrity": "sha512-B1b0wI5iwSkVwj3RQWRzW99/LGoYl6df9j1kWime8r8b0dXCdKU7t7mEOFkOpQFaT/I9JXaL7KAIxM+/3TUk1A==", - "dev": true, "requires": { "underscore": "^1.13.2" } @@ -6382,15 +6376,15 @@ } }, "browserslist": { - "version": "4.23.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.1.tgz", - "integrity": "sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw==", + "version": "4.23.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.2.tgz", + "integrity": "sha512-qkqSyistMYdxAcw+CzbZwlBy8AGmS/eEWs+sEV5TnLRGDOL+C5M2EnH6tlZyg0YoAxGJAFKh61En9BR941GnHA==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001629", - "electron-to-chromium": "^1.4.796", + "caniuse-lite": "^1.0.30001640", + "electron-to-chromium": "^1.4.820", "node-releases": "^2.0.14", - "update-browserslist-db": "^1.0.16" + "update-browserslist-db": "^1.1.0" } }, "bser": { @@ -6421,9 +6415,9 @@ "dev": true }, "caniuse-lite": { - "version": "1.0.30001640", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001640.tgz", - "integrity": "sha512-lA4VMpW0PSUrFnkmVuEKBUovSWKhj7puyCg8StBChgu298N1AtuF1sKWEvfDuimSEDbhlb/KqPKC3fs1HbuQUA==", + "version": "1.0.30001641", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001641.tgz", + "integrity": "sha512-Phv5thgl67bHYo1TtMY/MurjkHhV4EDaCosezRXgZ8jzA/Ub+wjxAvbGvjoFENStinwi5kCyOYV3mi5tOGykwA==", "dev": true }, "capnp-ts": { @@ -6621,9 +6615,9 @@ "dev": true }, "electron-to-chromium": { - "version": "1.4.816", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.816.tgz", - "integrity": "sha512-EKH5X5oqC6hLmiS7/vYtZHZFTNdhsYG5NVPRN6Yn0kQHNBlT59+xSM8HBy66P5fxWpKgZbPqb+diC64ng295Jw==", + "version": "1.4.825", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.825.tgz", + "integrity": "sha512-OCcF+LwdgFGcsYPYC5keEEFC2XT0gBhrYbeGzHCx7i9qRFbzO/AqTmc/C/1xNhJj+JA7rzlN7mpBuStshh96Cg==", "dev": true }, "emittery": { @@ -8204,16 +8198,14 @@ "dev": true }, "ultralight-s3": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/ultralight-s3/-/ultralight-s3-0.0.3.tgz", - "integrity": "sha512-9AMcXN/QFqUcI36Q1YXeIarVxXGrGAKusvKtP5Z00I8ZCqdQilG6Du6dDgPq+qVo+38U6HpkI1tJ3oOo5j1krw==", - "dev": true + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/ultralight-s3/-/ultralight-s3-0.0.4.tgz", + "integrity": "sha512-/b0X2ruk+jI2VhjQK/s5lWQy+4LuobD9Yb/FcR3qD4DE+NCH97Zwi6PB+o5B/M/Fl1K8vJgAtOtEoVhaHgOHvw==" }, "underscore": { "version": "1.13.6", "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz", - "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==", - "dev": true + "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==" }, "undici": { "version": "5.28.4", @@ -8297,9 +8289,9 @@ } }, "wrangler": { - "version": "3.63.0", - "resolved": "https://registry.npmjs.org/wrangler/-/wrangler-3.63.0.tgz", - "integrity": "sha512-FMIGorXhYN161S1qotoIlg9EqpfRsPqtB/fd9J+qXTJ5xpctq4meaQAmRKfLI87cQDdkjUXpQBJyNgBXw4i81Q==", + "version": "3.63.2", + "resolved": "https://registry.npmjs.org/wrangler/-/wrangler-3.63.2.tgz", + "integrity": "sha512-c7F46JtBGTIQehTOgfGbxfDMYgO9AjC70CXVSohxHiF9ajHz56HEV2k3aowhJJiP3MBB8sJMm8rdG10f5zUs+w==", "dev": true, "requires": { "@cloudflare/kv-asset-handler": "0.3.4", @@ -8535,9 +8527,9 @@ } }, "ws": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", - "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", + "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", "dev": true, "requires": {} }, diff --git a/package.json b/package.json index 1216dd3..5709ba4 100644 --- a/package.json +++ b/package.json @@ -13,14 +13,14 @@ "url": "git+https://github.com/good-lly/lowstorage.git" }, "scripts": { - "test": "npm run build && jest --config=jest.config.json", - "build": "esbuild --bundle --sourcemap --platform=node --target=node19 --format=esm --outfile=lib/lowstorage.js src/lowstorage.js --external:avro-js", - "dev": "node --env-file ./.env ./dev/dev-index.js" + "test": "node --env-file ./.env --experimental-vm-modules node_modules/jest/bin/jest.js --config=jest.config.json --no-cache", + "build": "esbuild --bundle --minify --sourcemap --platform=node --target=node20 --format=esm --outfile=lib/lowstorage.js src/lowstorage.js --external:avro-js", + "dev": "esbuild --bundle --platform=node --target=node20 --format=esm --outfile=lib/lowstorage.js src/lowstorage.js --external:avro-js && node --env-file ./.env ./dev/dev-index.js" }, "license": "MIT", "author": "Peter Jensen ", "engines": { - "node": ">=18.12.0" + "node": ">=20.0.0" }, "jest": { "collectCoverageFrom": [ @@ -28,17 +28,15 @@ ] }, "devDependencies": { - "avro-js": "^1.11.3", "esbuild": "^0.23.0", "jest": "^29.7.0", "prettier": "^3.3.2", "typescript": "^5.5.2", - "ultralight-s3": "^0.0.3", "wrangler": "^3.62.0" }, "dependencies": { "avro-js": "^1.11.3", - "ultralight-s3": "^0.0.3" + "ultralight-s3": "^0.0.4" }, "keywords": [ "storage", diff --git a/src/errors.js b/src/errors.js new file mode 100644 index 0000000..0269cc8 --- /dev/null +++ b/src/errors.js @@ -0,0 +1,64 @@ +'use strict'; + +const lowstorage_ERROR_CODES = { + MISSING_ARGUMENT: 'MISSING_ARGUMENT', + COLLECTION_EXISTS: 'COLLECTION_EXISTS', + CREATE_COLLECTION_ERROR: 'CREATE_COLLECTION_ERROR', + RENAME_COLLECTION_ERROR: 'RENAME_COLLECTION_ERROR', + REMOVE_COLLECTION_ERROR: 'REMOVE_COLLECTION_ERROR', + UPDATE_COLLECTION_SCHEMA_ERROR: 'UPDATE_COLLECTION_SCHEMA_ERROR', + COLLECTION_NOT_FOUND: 'COLLECTION_NOT_FOUND', + SCHEMA_VALIDATION_ERROR: 'SCHEMA_VALIDATION_ERROR', + DOCUMENT_VALIDATION_ERROR: 'DOCUMENT_VALIDATION_ERROR', + S3_OPERATION_ERROR: 'S3_OPERATION_ERROR', + FIND_ERROR: 'FIND_ERROR', + FIND_ONE_ERROR: 'FIND_ONE_ERROR', + SAVE_DATA_ERROR: 'SAVE_DATA_ERROR', + INSERT_ERROR: 'INSERT_ERROR', + UPDATE_ERROR: 'UPDATE_ERROR', + UPDATE_ONE_ERROR: 'UPDATE_ONE_ERROR', + DELETE_ERROR: 'DELETE_ERROR', + COUNT_ERROR: 'COUNT_ERROR', + UNKNOWN_ERROR: 'UNKNOWN_ERROR', +}; +class lowstorageError extends Error { + constructor(message, code = lowstorage_ERROR_CODES.UNKNOWN_ERROR) { + super(`lowstorageError: ${message} :: code: ${code}`); + this.name = this.constructor.name; + this.code = code; + Error.captureStackTrace(this, this.constructor); + } +} + +class CollectionNotFoundError extends lowstorageError { + constructor(collectionName) { + super(`Collection ${collectionName} not found`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND); + } +} + +class SchemaValidationError extends lowstorageError { + constructor(message) { + super(message, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR); + } +} + +class DocumentValidationError extends lowstorageError { + constructor(message) { + super(message, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR); + } +} + +class S3OperationError extends lowstorageError { + constructor(message, operation) { + super(`S3 ${operation} operation failed: ${message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); + } +} + +export { + lowstorage_ERROR_CODES, + lowstorageError, + CollectionNotFoundError, + SchemaValidationError, + DocumentValidationError, + S3OperationError, +}; diff --git a/src/helpers.js b/src/helpers.js index faf60ec..5a943ca 100644 --- a/src/helpers.js +++ b/src/helpers.js @@ -1,28 +1,23 @@ 'use strict'; -// export const avroLoader = async (isAvroLoaded) => { -// const avro = isAvroLoaded ? isAvroLoaded : await import('avro-js'); -// return avro; -// }; - import { randomUUID } from 'node:crypto'; -export const matchesQuery = (document, query) => { +const matchesQuery = (document, query) => { return Object.keys(query).every((key) => document[key] === query[key]); }; -export const generateUUID = async () => { - let _randomUUID = randomUUID || (await import('node:crypto')).randomUUID; - if (typeof _randomUUID !== 'undefined' && typeof _randomUUID === 'function') { - return _randomUUID(); - } else { - // Fallback for environments without crypto.randomUUID - return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) { - var r = (Math.random() * 16) | 0, - v = c === 'x' ? r : (r & 0x3) | 0x8; - return v.toString(16); - }); +const generateUUID = async () => { + if (typeof randomUUID !== 'undefined' && typeof randomUUID === 'function') { + return randomUUID(); + } + if (typeof crypto !== 'undefined' && typeof crypto === 'object' && typeof crypto.randomUUID === 'function') { + return crypto.randomUUID(); } + return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) { + var r = (Math.random() * 16) | 0, + v = c === 'x' ? r : (r & 0x3) | 0x8; + return v.toString(16); + }); }; const _getAvroType = (value, name = 'SubAutoGenerated') => { @@ -50,7 +45,7 @@ const _getAvroType = (value, name = 'SubAutoGenerated') => { } }; -export const inferAvroType = (data, typeName = 'AutoGenerated') => { +const inferAvroType = (data, typeName = 'AutoGenerated') => { if (Array.isArray(data)) { data = data[0]; } @@ -68,3 +63,5 @@ const _isUUID = (str) => { const uuidV4Regex = /^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i; return uuidV4Regex.test(str); }; + +export { matchesQuery, generateUUID, inferAvroType }; diff --git a/src/lowstorage.js b/src/lowstorage.js index 26fb632..cd40ad4 100644 --- a/src/lowstorage.js +++ b/src/lowstorage.js @@ -2,14 +2,55 @@ import { S3 } from 'ultralight-s3'; import avro from 'avro-js'; // eslint-disable-line +import { + lowstorage_ERROR_CODES, + lowstorageError, + CollectionNotFoundError, + SchemaValidationError, + DocumentValidationError, + S3OperationError, +} from './errors.js'; import { matchesQuery, generateUUID, inferAvroType } from './helpers.js'; const MODULE_NAME = 'lowstorage'; -const PROJECT_DIR_PREFIX = 'lowstorage/'; +const DEFAULT_DELIMITER = '/'; +const PROJECT_DIR_PREFIX = 'lowstorage'; const SCHEMA_SUFFIX = '.avro'; const CHUNG_1MB = 1024 * 1024; const CHUNG_5MB = 5 * CHUNG_1MB; +// code / description +// init of new collection is automatically creating it in the bucket +// there is optional (opt-in) switch to create new collections in bucket +// if the schema is not provided, it will create empty buffer and save it +// if the schema is provided, it will save it in memory and use it for all ops +// if the schema is updated, it will save it in memory and use it for all ops +// exposed functions are: +// listCollections ✅ +// collectionExists ✅ +// createCollection ✅ +// removeCollection ✅ +// renameCollection ✅ +// updateCollectionSchema ❌ +// collection ✅ +// s3 ✅ + +// Operations over collections are: +// insert ✅ +// find ✅ +// findOne ✅ +// update ✅ +// updateOne ✅ +// delete ✅ +// count ✅ + +// Errors: +// lowstorageError ✅ +// CollectionNotFoundError ✅ +// SchemaValidationError ✅ +// DocumentValidationError ✅ +// S3OperationError ✅ + class lowstorage { constructor( options = { @@ -19,11 +60,13 @@ class lowstorage { bucketName: undefined, region: 'auto', logger: null, + dirPrefix: PROJECT_DIR_PREFIX, }, ) { this._checkArgs(options); this._schemas = new Map(); this._s3 = new S3(options); + this._dirPrefix = options.dirPrefix || PROJECT_DIR_PREFIX; this._avro = avro; } @@ -31,169 +74,243 @@ class lowstorage { const requiredFields = ['accessKeyId', 'secretAccessKey', 'endpoint', 'bucketName']; for (const field of requiredFields) { if (!args[field]) { - throw new Error(`${MODULE_NAME}: ${field} is required`); + throw new lowstorageError(`${MODULE_NAME}: ${field} is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT); } } }; - async listCollections() { - const listed = await this._s3.list(PROJECT_DIR_PREFIX, '', 1000); - return listed.map((entry) => entry.key.slice(PROJECT_DIR_PREFIX.length, -SCHEMA_SUFFIX.length)); - } - - async createCollection(colName, schema = undefined) { - try { - if (colName === undefined || colName.trim() === '' || colName === null) { - throw new Error(`${MODULE_NAME}: Collection name is required`); - } - if (await this.collectionExists(colName)) { - throw new Error(`${MODULE_NAME}: Collection ${colName} already exists`); - } - if (schema) { - const avroType = this._avro.parse(schema); - this._schemas.set(colName, avroType); - } - return this.collection(colName, schema); - } catch (error) { - throw new Error(`${MODULE_NAME}: ${error.message}`); + _hasColName = (colName) => { + if (colName.trim() === '' || colName === null || typeof colName === 'undefined') { + throw new lowstorageError(`${MODULE_NAME}: Collection name is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT); } - } + }; - async removeCollection(colName) { + async listCollections() { try { - const exists = await this._s3.fileExists(`${PROJECT_DIR_PREFIX}${colName}${SCHEMA_SUFFIX}`); - if (exists) { - const resp = await this._s3.delete(`${PROJECT_DIR_PREFIX}${colName}${SCHEMA_SUFFIX}`); - if (resp.status === 200) { - return true; - } - return false; - } - return true; + const listed = await this._s3.list(DEFAULT_DELIMITER, this._dirPrefix); + if (typeof listed === 'object' && listed !== null && listed.keyCount === '0') return []; + // remove the delimiter from the key + return listed.map((entry) => entry.key.slice(this._dirPrefix.length + 1, -SCHEMA_SUFFIX.length)); } catch (error) { - throw new Error(`${MODULE_NAME}: ${error.message}`); + throw new S3OperationError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); } } async collectionExists(colName) { try { - const exists = await this._s3.fileExists(`${PROJECT_DIR_PREFIX}${colName}${SCHEMA_SUFFIX}`); + this._hasColName(colName); + const exists = await this._s3.fileExists(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${SCHEMA_SUFFIX}`); return exists; } catch (error) { if (error.message.includes('Not Found')) { return false; } - throw new Error(`${MODULE_NAME}: ${error.message}`); + throw new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND); } } - async updateCollectionSchema(colName, schema) { + async createCollection(colName, schema, data = []) { try { - if (colName === undefined || colName.trim() === '' || colName === null) { - throw new Error(`${MODULE_NAME}: Collection name is required`); - } - // Check if collection exists + this._hasColName(colName); const exists = await this.collectionExists(colName); if (!exists) { - throw new Error(`${MODULE_NAME}: Collection ${colName} does not exist`); + await this._s3.put(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${SCHEMA_SUFFIX}`, data.length > 0 ? data : ''); + return this.collection(colName, schema); } - if (schema === undefined || schema === null) { - throw new Error(`${MODULE_NAME}: Schema is required`); + throw new lowstorageError(`${MODULE_NAME}: Collection ${colName} already exists`, lowstorage_ERROR_CODES.COLLECTION_EXISTS); + } catch (error) { + if (error instanceof lowstorageError) { + throw error; } - const avroType = this._avro.parse(schema); - this._schemas.set(colName, avroType); - const resp = await this._s3.put(`${PROJECT_DIR_PREFIX}${colName}${SCHEMA_SUFFIX}`, JSON.stringify(schema)); - if (resp.status === 200) { - return true; - } else { - throw new Error(`${MODULE_NAME}: Failed to update schema for collection ${colName}`); + throw new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.CREATE_COLLECTION_ERROR); + } + } + + async removeCollection(colName) { + try { + this._hasColName(colName); + const KEY = `${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${SCHEMA_SUFFIX}`; + const exists = await this.collectionExists(colName); + if (exists) { + await this._s3.delete(KEY); + const exists2 = await this.collectionExists(colName); + if (typeof exists2 === 'boolean') { + return !exists2; + } + throw new S3OperationError(`${MODULE_NAME}: Failed to delete collection ${colName}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); } + throw new lowstorageError(`${MODULE_NAME}: Collection ${colName} does not exist`, lowstorage_ERROR_CODES.REMOVE_COLLECTION_ERROR); } catch (error) { - throw new Error(`${MODULE_NAME}: ${error.message}`); + if (error instanceof S3OperationError) { + throw error; + } + throw new lowstorageError( + `${MODULE_NAME}: Failed to remove collection: ${error.message}`, + lowstorage_ERROR_CODES.REMOVE_COLLECTION_ERROR, + ); } } - async collection(colName, schema = undefined) { + async renameCollection(oldColName, newColName) { try { - if (colName === undefined || colName.trim() === '' || colName === null) { - throw new Error(`${MODULE_NAME}: Collection name is required`); + this._hasColName(oldColName); + this._hasColName(newColName); + const exists = await this.collectionExists(oldColName); + if (!exists) { + throw new CollectionNotFoundError( + `${MODULE_NAME}: Collection ${oldColName} does not exist`, + lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND, + ); } + const oldCol = this.collection(oldColName); + const oldColData = await oldCol._loadDataBuffer(); + const success = await this.removeCollection(oldColName); + if (!success) { + throw new lowstorageError(`${MODULE_NAME}: Failed to rename collection`, lowstorage_ERROR_CODES.RENAME_COLLECTION_ERROR); + } + return await this.createCollection(newColName, oldCol._avroType, oldColData); + } catch (error) { + if (error instanceof lowstorageError) { + throw error; + } + throw new lowstorageError( + `${MODULE_NAME}: Rename collection failed: ${error.message}`, + lowstorage_ERROR_CODES.RENAME_COLLECTION_ERROR, + ); + } + } + + // TODO: update collection schema + // async updateCollectionSchema(colName, newSchema) { + // try { + // this._hasColName(colName); + // // Check if collection exists + // const exists = await this.collectionExists(colName); + // if (!exists) { + // throw new CollectionNotFoundError(`${MODULE_NAME}: Collection ${colName} does not exist`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND); + // } + // if (typeof schema === 'undefined' || schema === null) { + // throw new lowstorageError(`${MODULE_NAME}: Schema is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT); + // } + // const col = this.collection(colName); + // const colData = await col._loadDataBuffer(); + // const avroType = this._avro.parse(schema); + // this._schemas.set(colName, avroType); + + // } catch (error) { + // if (error instanceof S3OperationError) { + // throw error; + // } + // throw new lowstorageError( + // `${MODULE_NAME}: Failed to update collection schema: ${error.message}`, + // lowstorage_ERROR_CODES.UPDATE_COLLECTION_SCHEMA_ERROR, + // ); + // } + // } + + async collection(colName, schema, autoCreate = true) { + try { + this._hasColName(colName); if (typeof schema === 'undefined') { // Load schema if not in memory if (this._schemas.has(colName)) { - return new Collection(colName, this._s3, this._schemas.get(colName)); + return new Collection(colName, this._s3, this._schemas.get(colName), this._dirPrefix); } // check if schema file exists - const exists = await this._s3.fileExists(`${PROJECT_DIR_PREFIX}${colName}${SCHEMA_SUFFIX}`); + const exists = await this._s3.fileExists(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${SCHEMA_SUFFIX}`); if (exists) { - const schemaContent = await this._s3.get(`${PROJECT_DIR_PREFIX}${colName}${SCHEMA_SUFFIX}`); - + const schemaContent = await this._s3.get(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${SCHEMA_SUFFIX}`); const avroType = this._avro.parse(schemaContent); this._schemas.set(colName, avroType); - return new Collection(colName, this._s3, avroType); + return new Collection(colName, this._s3, avroType, this._dirPrefix); + } + if (autoCreate) { + this._s3.put(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${SCHEMA_SUFFIX}`, ''); + } + return new Collection(colName, this._s3, undefined, this._dirPrefix); + } + if (autoCreate) { + const exists = await this._s3.fileExists(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${SCHEMA_SUFFIX}`); + if (!exists) { + await this._s3.put(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${SCHEMA_SUFFIX}`, ''); } - return new Collection(colName, this._s3, undefined); } - return new Collection(colName, this._s3, this._avro.parse(schema)); + return new Collection(colName, this._s3, this._avro.parse(schema), this._dirPrefix); } catch (error) { - throw new Error(`${MODULE_NAME}: ${error.message}`); + throw new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND); } } + + s3 = () => { + return this._s3; + }; } class Collection { - constructor(colName, s3, avroType = undefined) { + constructor(colName, s3, avroType = undefined, dirPrefix = PROJECT_DIR_PREFIX) { this._colName = colName; this._s3 = s3; this._avro = avro; this._avroType = avroType; + this._dirPrefix = dirPrefix; } async insert(doc, schema = undefined) { try { if (doc === undefined || doc === null) { - throw new Error(`${MODULE_NAME}: Document is required for insert`); + throw new lowstorageError(`${MODULE_NAME}: Document is required for insert`, lowstorage_ERROR_CODES.MISSING_ARGUMENT); } if (typeof doc !== 'object' && !Array.isArray(doc)) { - throw new Error(`${MODULE_NAME}: Document must be an object or an array`); + throw new DocumentValidationError( + `${MODULE_NAME}: Document must be an object or an array`, + lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR, + ); } const items = !Array.isArray(doc) ? [doc] : doc; const avroType = !!schema ? this._avro.parse(schema) : this._avroType || this._avro.parse(inferAvroType(doc)); - // throw new Error('avroType::: ', avroType); - if (avroType === undefined) { - throw new Error(`${MODULE_NAME}: Schema is required - Pass a schema to the insert method`); + if (!avroType) { + throw new SchemaValidationError( + `${MODULE_NAME}: Schema is required - Pass a schema to the insert method`, + lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR, + ); } + this._avroType = avroType; const wrapperType = this._avro.parse({ type: 'array', items: this._avroType }); const bufferData = await this._loadDataBuffer(); const data = bufferData.length > 0 ? wrapperType.fromBuffer(bufferData) : []; for (let item of items) { if (typeof item !== 'object' || item === null) { - throw new Error('Invalid input: input must be an object or an array of objects'); + throw new DocumentValidationError( + `${MODULE_NAME}: Invalid input: input must be an object or an array of objects`, + lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR, + ); } item._id = item._id || (await generateUUID()); const valid = this._avroType.isValid(item); if (!valid) { - throw new Error(`${MODULE_NAME}: Invalid document or schema`); + throw new DocumentValidationError(`${MODULE_NAME}: Invalid document or schema`, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR); } data.push(item); } - const resp = await this._saveDataBuffer(wrapperType.toBuffer(data)); - if (resp) { - return items; - } else { - throw new Error(`${MODULE_NAME}: Failed to insert document`); + const success = await this._saveDataBuffer(wrapperType.toBuffer(data)); + if (!success) { + throw new S3OperationError(`${MODULE_NAME}: Failed to insert document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); } + return items; } catch (error) { - throw new Error(`${MODULE_NAME}: ${error.message}`); + if (error instanceof lowstorageError) { + throw error; + } + throw new lowstorageError(`${MODULE_NAME} Insert operation failed: ${error.message}`, lowstorage_ERROR_CODES.INSERT_ERROR); } } async _loadDataBuffer() { try { - const KEY = `${PROJECT_DIR_PREFIX}${this._colName}${SCHEMA_SUFFIX}`; + const KEY = `${this._dirPrefix}${DEFAULT_DELIMITER}${this._colName}${SCHEMA_SUFFIX}`; const CHUNK_SIZE = this._s3.getMaxRequestSizeInBytes() || CHUNG_5MB; let firstData = await this._s3.get(KEY); if (firstData.length < CHUNK_SIZE) { @@ -206,7 +323,7 @@ class Collection { const nextDataResponse = await this._s3.getResponse(KEY, false, offset, offset + CHUNK_SIZE); const nextDataBody = await nextDataResponse.text(); bufferArr.push(Buffer.from(nextDataBody, 'utf8')); - offset += CHUNG; + offset += CHUNK_SIZE; const contentLength = nextDataResponse.headers.get('content-length') || nextDataBody.length; if (contentLength < CHUNK_SIZE) { repeat = false; @@ -217,27 +334,32 @@ class Collection { if (error.toString().indexOf('status 404: Unknown - Not Found') > -1) { return Buffer.from(''); } - throw new Error(`${MODULE_NAME}: ${error.message}`); + throw new S3OperationError(`${MODULE_NAME}: Failed to load data buffer: ${error.message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); } } async _saveDataBuffer(data) { try { - const KEY = `${PROJECT_DIR_PREFIX}${this._colName}${SCHEMA_SUFFIX}`; + const KEY = `${this._dirPrefix}${DEFAULT_DELIMITER}${this._colName}${SCHEMA_SUFFIX}`; const resp = await this._s3.put(KEY, data); - if (resp.status === 200) { - return true; - } else { - throw new Error(`${MODULE_NAME}: Failed to save data`); + if (resp.status !== 200) { + throw new S3OperationError(`${MODULE_NAME}: Failed to save data`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); } + return true; } catch (error) { - throw new Error(`${MODULE_NAME}: ${error.message}`); + if (error instanceof S3OperationError) { + throw error; + } + throw new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.SAVE_DATA_ERROR); } } async find(query = {}, options = {}) { try { const bufferData = await this._loadDataBuffer(); // load data from s3 + if (bufferData.length === 0) { + return []; + } const wrapperType = this._avro.parse({ type: 'array', items: this._avroType }); const data = bufferData.length > 0 ? wrapperType.fromBuffer(bufferData) : []; const start = parseInt(options.skip, 10) || 0; @@ -245,94 +367,138 @@ class Collection { const filteredData = data.filter((doc) => matchesQuery(doc, query)).slice(start, end); return filteredData; } catch (error) { - throw new Error(`${MODULE_NAME}: ${error.message}`); + throw new lowstorageError(`${MODULE_NAME}: Find operation failed: ${error.message}`, lowstorage_ERROR_CODES.FIND_ERROR); } } async findOne(query = {}) { - return (await this.find(query))[0] || null; + try { + const result = await this.find(query); + return result[0] || []; + } catch (error) { + throw new lowstorageError(`${MODULE_NAME}: FindOne operation failed: ${error.message}`, lowstorage_ERROR_CODES.FIND_ONE_ERROR); + } } async update(query = {}, update = {}) { try { + if (!this._avroType) { + throw new SchemaValidationError( + `${MODULE_NAME}: Schema is not defined for this collection`, + lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR, + ); + } const bufferData = await this._loadDataBuffer(); // load data from s3 + if (bufferData.length === 0) return 0; const wrapperType = this._avro.parse({ type: 'array', items: this._avroType }); const data = bufferData.length > 0 ? wrapperType.fromBuffer(bufferData) : []; let updatedCount = 0; for (let i = 0; i < data.length; i++) { if (matchesQuery(data[i], query)) { - Object.assign(data[i], update); + const updatedDoc = { ...data[i], ...update }; + const valid = this._avroType.isValid(updatedDoc); + if (!valid) { + throw new DocumentValidationError( + `${MODULE_NAME}: Invalid document or schema`, + lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR, + ); + } + data[i] = updatedDoc; updatedCount++; } } if (updatedCount > 0) { - const resp = await this._saveDataBuffer(wrapperType.toBuffer(data)); - if (resp) { - return updatedCount; + const success = await this._saveDataBuffer(wrapperType.toBuffer(data)); + if (!success) { + throw new S3OperationError(`${MODULE_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); } } - return 0; + return updatedCount; } catch (error) { - throw new Error(`${MODULE_NAME}: ${error.message}`); + if (error instanceof S3OperationError) { + throw error; + } + throw new lowstorageError(`${MODULE_NAME}: Update operation failed: ${error.message}`, lowstorage_ERROR_CODES.UPDATE_ERROR); } } async updateOne(query = {}, update = {}) { try { + if (!this._avroType) { + throw new SchemaValidationError( + `${MODULE_NAME}: Schema is not defined for this collection`, + lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR, + ); + } const bufferData = await this._loadDataBuffer(); // load data from s3 + if (bufferData.length === 0) return 0; const wrapperType = this._avro.parse({ type: 'array', items: this._avroType }); const data = bufferData.length > 0 ? wrapperType.fromBuffer(bufferData) : []; const docIndex = data.findIndex((doc) => matchesQuery(doc, query)); if (docIndex !== -1) { - Object.assign(data[docIndex], update); - const resp = await this._saveDataBuffer(wrapperType.toBuffer(data)); - if (resp) { - return 1; + const updatedDoc = { ...data[docIndex], ...update }; + const valid = this._avroType.isValid(updatedDoc); + if (!valid) { + throw new DocumentValidationError(`${MODULE_NAME}: Invalid document or schema`, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR); } + data[docIndex] = updatedDoc; + const success = await this._saveDataBuffer(wrapperType.toBuffer(data)); + if (!success) { + throw new S3OperationError(`${MODULE_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); + } + return 1; } return 0; } catch (error) { - throw new Error(`${MODULE_NAME}: ${error.message}`); + if (error instanceof lowstorageError) { + throw error; + } + throw new lowstorageError(`${MODULE_NAME}: UpdateOne operation failed: ${error.message}`, lowstorage_ERROR_CODES.UPDATE_ONE_ERROR); } } async delete(query = {}) { try { const bufferData = await this._loadDataBuffer(); // load data from s3 + if (bufferData.length === 0) return 0; const wrapperType = this._avro.parse({ type: 'array', items: this._avroType }); const data = bufferData.length > 0 ? wrapperType.fromBuffer(bufferData) : []; const initialLength = data.length; const newData = data.filter((doc) => !matchesQuery(doc, query)); - const resp = await this._saveDataBuffer(wrapperType.toBuffer(newData)); - if (resp) { - return initialLength - newData.length; + const success = await this._saveDataBuffer(wrapperType.toBuffer(newData)); + if (!success) { + throw new S3OperationError(`${MODULE_NAME}: Failed to delete document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); } - return 0; + return initialLength - newData.length; } catch (error) { - throw new Error(`${MODULE_NAME}: ${error.message}`); + if (error instanceof S3OperationError) { + throw error; + } + throw new lowstorageError(`${MODULE_NAME}: Delete operation failed: ${error.message}`, lowstorage_ERROR_CODES.DELETE_ERROR); } } async count(query = {}) { try { if (query === undefined || query === null) { - throw new Error(`${MODULE_NAME}: Query is required`); + throw new lowstorageError(`${MODULE_NAME}: Query is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT); } if (Object.keys(query).length === 0) { const bufferData = await this._loadDataBuffer(); // load data from s3 + if (bufferData.length === 0) return 0; const wrapperType = this._avro.parse({ type: 'array', items: this._avroType }); const data = bufferData.length > 0 ? wrapperType.fromBuffer(bufferData) : []; return data.length || null; } return (await this.find(query)).length; } catch (error) { - throw new Error(`${MODULE_NAME}: ${error.message}`); + throw new lowstorageError(`${MODULE_NAME}: Count operation failed: ${error.message}`, lowstorage_ERROR_CODES.COUNT_ERROR); } } } -export default lowstorage; -export { lowstorage }; +// export default lowstorage; +export { lowstorage, lowstorageError, lowstorage_ERROR_CODES }; diff --git a/src/lowstorage.test.js b/src/lowstorage.test.js index 3fb4756..87dcc32 100644 --- a/src/lowstorage.test.js +++ b/src/lowstorage.test.js @@ -1,11 +1,28 @@ // import { unstable_dev } from 'wrangler'; +import { env } from 'node:process'; +import { lowstorage, lowstorageError, lowstorage_ERROR_CODES } from '../lib/lowstorage.js'; + // import supertest from 'supertest'; -console.log('🏃 Running tests...'); +const configCF = { + endpoint: env.CF_ENDPOINT, + region: env.CF_REGION, + accessKeyId: env.CF_ACCESS_KEY_ID, + secretAccessKey: env.CF_SECRET_ACCESS_KEY, + bucketName: env.CF_BUCKET_NAME, +}; -let worker = null; -let request; +console.log('🏃 Running tests...', configCF); +const configMinio = { + endPoint: env.MINIO_ENDPOINT, + port: env.MINIO_PORT, + region: env.MINIO_REGION, + useSSL: env.MINIO_USE_SSL, + accessKey: env.MINIO_ACCESS_KEY, + secretKey: env.MINIO_SECRET_KEY, + bucketName: env.MINIO_BUCKET_NAME, +}; const usersToInsert = [ { name: 'Alice', age: 30 }, { name: 'Bob', age: 25 }, @@ -16,188 +33,162 @@ const userAvroSchema = { type: 'record', name: 'User', fields: [ + { name: '_id', type: 'string', size: 16, logicalType: 'UUID' }, { name: 'name', type: 'string' }, { name: 'age', type: 'int' }, ], }; +const testColSchame = { + type: 'record', + name: 'TestCol', + fields: [ + { name: '_id', type: 'string', size: 16, logicalType: 'UUID' }, + { name: 'name', type: 'string' }, + { name: 'age', type: 'int' }, + ], +}; + +// let worker = null; +let request; +let lStorage; + beforeAll(async () => { - // worker = await unstable_dev('./examples/src/index.js', { - // config: './examples/wrangler.toml', - // experimental: { disableExperimentalWarning: true }, - // }); - // const protocol = worker.proxyData.userWorkerUrl.protocol; - // const hostname = worker.proxyData.userWorkerUrl.hostname; - // const port = worker.proxyData.userWorkerUrl.port; - // const fullUrl = `${protocol}//${hostname}:${port}`; - // request = supertest(fullUrl); - // console.log('✅ Worker started at ', fullUrl); + console.time('lowstorage-test'); + lStorage = new lowstorage(configCF); }); afterAll(async () => { - // if (worker) await worker.stop(); + console.timeEnd('lowstorage-test'); }); -test('POST /insertdata - inserts multiple users', async () => { - for (const user of usersToInsert) { - const response = await request.post('/insertdata').send(user); - expect(response.status).toBe(200); - expect(response.body._id).toBeDefined(); +// full test basic operations on collection +test('Collections | essentials check, create, list and delete collections', async () => { + // check if collections exist + const userColExists = await lStorage.collectionExists('userCol'); + // expect to be bollean + expect(typeof userColExists).toBe('boolean'); + if (userColExists) { + // try to create collection and get error + await expect(lStorage.createCollection('userCol', userAvroSchema)).rejects.toThrowError(); + // remove collection + const removeCollection = await lStorage.removeCollection('userCol'); + expect(removeCollection).toBe(true); + const doubleCheckIfExists = await lStorage.collectionExists('userCol'); + expect(doubleCheckIfExists).toBe(false); } -}); - -test('GET /users-count - gets the correct user count', async () => { - const response = await request.get('/users-count'); - expect(response.status).toBe(200); - // Assuming the response returns a plain text count - const userCount = parseInt(response.text, 10); - // Replace with the expected count after insertions - expect(userCount).toBe(2); -}); - -test('GET /users - fetches all users', async () => { - const response = await request.get('/users'); - expect(response.status).toBe(200); - expect(Array.isArray(response.body.users)).toBe(true); - expect(response.body.users.length).toBe(2); // Expect the inserted count -}); - -test('POST /update/:id - updates an existing user', async () => { - // 1. Insert a test user - const testUser = { name: 'John Doe', age: 35 }; - const insertResponse = await request.post('/insertdata').send(testUser); - expect(insertResponse.status).toBe(200); - - const userId = insertResponse.body._id; - - // 2. Update user data - const updatedData = { name: 'Jane Smith', age: 30 }; - const updateResponse = await request.post(`/update/${userId}`).send(updatedData); - expect(updateResponse.status).toBe(200); - - // 3. Verify the update - const getResponse = await request.get(`/user/${userId}`); - expect(getResponse.status).toBe(200); - expect(getResponse.body.user.name).toBe('Jane Smith'); - expect(getResponse.body.user.age).toBe(30); -}); - -test('GET /search/:value - finds users by name', async () => { - // Setup: Insert some test users - const testUsers = [ - { name: 'Alice', age: 28 }, - { name: 'Bob', age: 32 }, - { name: 'Charlie', age: 25 }, - { name: 'Alice', age: 30 }, // Another Alice - ]; - - for (const user of testUsers) { - await request.post('/insertdata').send(user); + // create collection now + const userCol = await lStorage.createCollection('userCol', userAvroSchema); + expect(userCol).toBeDefined(); + const userColExists3 = await lStorage.collectionExists('userCol'); + expect(userColExists3).toBe(true); + + const listCollections = await lStorage.listCollections(); + expect(listCollections).toContain('userCol'); + await expect(lStorage.createCollection('userCol', userAvroSchema)).rejects.toThrowError(); + + // check if collections exist + const testColExists = await lStorage.collectionExists('testCol'); + // expect to be bollean + expect(typeof testColExists).toBe('boolean'); + if (testColExists) { + // try to create collection and get error + await expect(lStorage.createCollection('testCol', testColSchame)).rejects.toThrowError(); + // remove collection + const removeCollection = await lStorage.removeCollection('testCol'); + expect(removeCollection).toBe(true); + const doubleCheckIfExists = await lStorage.collectionExists('testCol'); + expect(doubleCheckIfExists).toBe(false); } - // Test the search - const searchName = 'Alice'; - const response = await request.get(`/search/${searchName}`); - - expect(response.status).toBe(200); - expect(response.body.users).toBeInstanceOf(Array); - - // Ensure at least two 'Alice' entries are found - expect(response.body.users.length).toBeGreaterThanOrEqual(2); - - // Verify that all returned users have the correct name - response.body.users.forEach((user) => { - expect(user.name).toBe(searchName); - }); -}); + await lStorage.createCollection('testCol', testColSchame); -test('GET /search/:value - finds users by name', async () => { - const searchName = 'Alice'; - const response = await request.get(`/search/${searchName}`); - expect(response.status).toBe(200); - expect(response.body.users.length).toBeGreaterThanOrEqual(1); - expect(response.body.users[0].name).toBe(searchName); -}); + const testColExists2 = await lStorage.collectionExists('testCol'); + expect(testColExists2).toBe(true); -test('GET /users - fetches users with limit and skip', async () => { - // Setup: Insert a decent number of test users (more than your typical limit) - const deleteResponse = await request.get('/users-delete-all'); - expect(deleteResponse.status).toBe(200); + const listCollections2 = await lStorage.listCollections(); + console.log('listCollections', listCollections2); + expect(listCollections2).toContain('testCol'); + expect(listCollections2).toContain('userCol'); + expect(listCollections2.length).toBe(2); - // Verify count is zero - const countResponse = await request.get('/users-count'); - expect(countResponse.status).toBe(200); - expect(parseInt(countResponse.text, 10)).toBe(0); + const removeCollection = await lStorage.removeCollection('testCol'); + expect(removeCollection).toBe(true); - const testUsers = []; - for (let i = 0; i < 20; i++) { - testUsers.push({ name: `User ${i}`, age: 25 + i }); - } + const listCollections3 = await lStorage.listCollections(); + expect(listCollections3).not.toContain('testCol'); + expect(listCollections3).toContain('userCol'); + expect(listCollections3.length).toBe(1); - for (const user of testUsers) { - await request.post('/insertdata').send(user); - } + const removeCollection2 = await lStorage.removeCollection('userCol'); + expect(removeCollection2).toBe(true); - // Test 1: Limit only - const limit = 5; - const response1 = await request.get('/users').query({ limit }); + const listCollections4 = await lStorage.listCollections(); + expect(listCollections4).not.toContain('testCol'); + expect(listCollections4).not.toContain('userCol'); + expect(listCollections4.length).toBe(0); +}); +// test create collection +test('Collections | create via createCollection', async () => { + const preListCheck = await lStorage.listCollections(); + expect(preListCheck.length).toBe(0); - expect(response1.status).toBe(200); - expect(response1.body.users.length).toBe(limit); + const userCol = await lStorage.createCollection('userCol', userAvroSchema); + expect(userCol).toBeDefined(); - // Test 2: Skip only - const skip = 3; - const response2 = await request.get('/users').query({ skip }); + const userColExists3 = await lStorage.collectionExists('userCol'); + expect(userColExists3).toBe(true); - expect(response2.status).toBe(200); - expect(response2.body.users.length).toBe(testUsers.length - skip); - expect(response2.body.users[0].name).toBe(`User ${skip}`); // Verify skip worked + const listCollections = await lStorage.listCollections(); + expect(listCollections).toContain('userCol'); + expect(listCollections.length).toBe(1); - // Test 3: Limit and skip combined - const limit2 = 4; - const skip2 = 5; - const response3 = await request.get('/users').query({ limit: limit2, skip: skip2 }); + const removeCollection = await lStorage.removeCollection('userCol'); + expect(removeCollection).toBe(true); - expect(response3.status).toBe(200); - expect(response3.body.users.length).toBe(limit2); - expect(response3.body.users[0].name).toBe(`User ${skip2}`); + const listCollections2 = await lStorage.listCollections(); + expect(listCollections2).not.toContain('userCol'); + expect(listCollections2.length).toBe(0); }); +test('Collections | create via constructor', async () => { + const preListCheck = await lStorage.listCollections(); + expect(preListCheck.length).toBe(0); -test('GET /users-delete-all - deletes all users', async () => { - const deleteResponse = await request.get('/users-delete-all'); - expect(deleteResponse.status).toBe(200); + const userCol = await lStorage.collection('userCol', userAvroSchema); + expect(userCol).toBeDefined(); - // Verify count is zero - const countResponse = await request.get('/users-count'); - expect(countResponse.status).toBe(200); - expect(parseInt(countResponse.text, 10)).toBe(0); -}); + const userColExists = await lStorage.collectionExists('userCol'); + expect(userColExists).toBe(true); -test('POST /insertdata - handles very long user names ', async () => { - const veryLongName = 'X'.repeat(256); // Assume some maximum name length - const user = { name: veryLongName, age: 30 }; - const response = await request.post('/insertdata').send(user); - // Option 2: Expect truncation (if your app silently truncates) - expect(response.status).toBe(200); - expect(response.body.name.length).toBeLessThanOrEqual(256); // Max length -}); + const listCollections = await lStorage.listCollections(); + expect(listCollections).toContain('userCol'); + expect(listCollections.length).toBe(1); + const removeCollection = await lStorage.removeCollection('userCol'); + expect(removeCollection).toBe(true); -test('GET /search/:value - handles non-existent search values', async () => { - const searchName = 'NonExistentUser'; - const response = await request.get(`/search/${searchName}`); - expect(response.status).toBe(200); - expect(response.body.users).toEqual([]); // Empty array + const listCollections2 = await lStorage.listCollections(); + expect(listCollections2).not.toContain('userCol'); + expect(listCollections2.length).toBe(0); }); - -test('GET /users-delete-all - handles deletion on an empty collection', async () => { - // Ensure the collection is empty before the test - await request.get('/users-delete-all'); - const deleteResponse = await request.get('/users-delete-all'); - - // Choose the appropriate expectation - // Option 1: Success - expect(deleteResponse.status).toBe(200); - - // Option 2: Error (if your app design dictates) - // expect(deleteResponse.status).toBe(404); // Or another suitable error code +test('Collections | error cases and error codes', async () => { + // Test create collection error + await expect(lStorage.createCollection()).rejects.toThrow(lowstorageError); + await expect(lStorage.createCollection()).rejects.toThrow(lowstorage_ERROR_CODES.CREATE_COLLECTION_ERROR); + + // Test collection already exists error + await lStorage.createCollection('testCol', testColSchame); + await expect(lStorage.createCollection('testCol', testColSchame)).rejects.toThrow(lowstorageError); + await expect(lStorage.createCollection('testCol', testColSchame)).rejects.toThrow(lowstorage_ERROR_CODES.COLLECTION_EXISTS); + + // TODO: test update collection schema error + // Test rename collection error + await expect(lStorage.renameCollection('testCol', 'testCol2')).rejects.toThrow(lowstorageError); + await expect(lStorage.renameCollection('testCol', 'testCol2')).rejects.toThrow(lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND); + + // await expect(lStorage.renameCollection('testCol2', 'testCol')).rejects.toThrow(lowstorageError); + // await expect(lStorage.renameCollection('testCol2', 'testCol')).rejects.toThrow(lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND); + + // // Test remove collection error + // await expect(lStorage.removeCollection('testCol2')).rejects.toThrow(lowstorageError); + // await expect(lStorage.removeCollection('testCol2')).rejects.toThrow(lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND); }); diff --git a/tsconfig.json b/tsconfig.json index 252c3b0..cbaf9e9 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -25,7 +25,7 @@ // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ /* Modules */ - "module": "commonjs" /* Specify what module code is generated. */, + "module": "ES2020" /* Specify what module code is generated. */, // "rootDir": "./", /* Specify the root folder within your source files. */ // "moduleResolution": "node10", /* Specify how TypeScript looks up a file from a given module specifier. */ // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ From 3680a4115e8675c6a58d304161a59d3bc33ee1d2 Mon Sep 17 00:00:00 2001 From: Jolly Good <1671375+good-lly@users.noreply.github.com> Date: Tue, 6 Aug 2024 17:27:56 +0200 Subject: [PATCH 05/18] #13 rewrite into avro + s3 [wip] tests --- lib/lowstorage.js | 10 ++-- lib/lowstorage.js.map | 6 +-- src/lowstorage.js | 119 ++++++++++++++++++++++++++++------------- src/lowstorage.test.js | 81 +++++++++++++++++++++++++--- 4 files changed, 165 insertions(+), 51 deletions(-) diff --git a/lib/lowstorage.js b/lib/lowstorage.js index cb48877..e88b1ab 100644 --- a/lib/lowstorage.js +++ b/lib/lowstorage.js @@ -1,8 +1,8 @@ -var se=crypto.createHmac||(await import("node:crypto")).createHmac,ie=crypto.createHash||(await import("node:crypto")).createHash;typeof se>"u"&&typeof ie>"u"&&console.error("ultralight-S3 Module: Crypto functions are not available, please report the issue with necessary description: https://github.com/sentienhq/ultralight-s3/issues");var V="AWS4-HMAC-SHA256",F="aws4_request",K="s3",ue="2",R="UNSIGNED-PAYLOAD",de="application/octet-stream",z="application/xml",U="application/json",pe=["accessKeyId","secretAccessKey","sessionToken","password"],X=5*1024*1024,E="x-amz-content-sha256",fe="x-amz-date",_e="host",ge="Authorization",T="Content-Type",b="Content-Length",Q="etag",W="last-modified",u="ultralight-s3 Module: ",Re=`${u}accessKeyId must be a non-empty string`,Ee=`${u}secretAccessKey must be a non-empty string`,ye=`${u}endpoint must be a non-empty string`,we=`${u}bucketName must be a non-empty string`,Y=`${u}key must be a non-empty string`,x=`${u}uploadId must be a non-empty string`,J=`${u}parts must be a non-empty array`,Z=`${u}Each part must have a partNumber (number) and ETag (string)`,k=`${u}data must be a Buffer or string`,ee=`${u}prefix must be a string`,te=`${u}maxKeys must be a positive integer`,re=`${u}delimiter must be a string`,me={contents:!0},Oe=r=>`%${r.charCodeAt(0).toString(16).toUpperCase()}`,j=r=>encodeURIComponent(r).replace(/[!'()*]/g,Oe),$=r=>j(r).replace(/%2F/g,"/"),ae=class{constructor({accessKeyId:r,secretAccessKey:e,endpoint:t,bucketName:s,region:i="auto",maxRequestSizeInBytes:a=X,requestAbortTimeout:n=void 0,logger:h=void 0}){this.getBucketName=()=>this.bucketName,this.setBucketName=o=>{this.bucketName=o},this.getRegion=()=>this.region,this.setRegion=o=>{this.region=o},this.getEndpoint=()=>this.endpoint,this.setEndpoint=o=>{this.endpoint=o},this.getMaxRequestSizeInBytes=()=>this.maxRequestSizeInBytes,this.setMaxRequestSizeInBytes=o=>{this.maxRequestSizeInBytes=o},this.getProps=()=>({accessKeyId:this.accessKeyId,secretAccessKey:this.secretAccessKey,region:this.region,bucket:this.bucketName,endpoint:this.endpoint,maxRequestSizeInBytes:this.maxRequestSizeInBytes,requestAbortTimeout:this.requestAbortTimeout,logger:this.logger}),this.setProps=o=>{this._validateConstructorParams(o.accessKeyId,o.secretAccessKey,o.bucketName,o.endpoint),this.accessKeyId=o.accessKeyId,this.secretAccessKey=o.secretAccessKey,this.region=o.region||"auto",this.bucketName=o.bucketName,this.endpoint=o.endpoint,this.maxRequestSizeInBytes=o.maxRequestSizeInBytes||X,this.requestAbortTimeout=o.requestAbortTimeout,this.logger=o.logger},this._validateConstructorParams(r,e,t,s),this.accessKeyId=r,this.secretAccessKey=e,this.endpoint=t,this.bucketName=s,this.region=i,this.maxRequestSizeInBytes=a,this.requestAbortTimeout=n,this.logger=h}_validateConstructorParams(r,e,t,s){if(typeof r!="string"||r.trim().length===0)throw new TypeError(Re);if(typeof e!="string"||e.trim().length===0)throw new TypeError(Ee);if(typeof t!="string"||t.trim().length===0)throw new TypeError(ye);if(typeof s!="string"||s.trim().length===0)throw new TypeError(we)}_checkMethodHeadnGet(r){if(r!=="GET"&&r!=="HEAD")throw this._log("error",`${u}method must be either GET or HEAD`),new Error("method must be either GET or HEAD")}_checkKey(r){if(typeof r!="string"||r.trim().length===0)throw this._log("error",Y),new TypeError(Y)}_checkDelimiter(r){if(typeof r!="string"||r.trim().length===0)throw this._log("error",re),new TypeError(re)}_checkPrefix(r){if(typeof r!="string")throw this._log("error",ee),new TypeError(ee)}_checkMaxKeys(r){if(typeof r!="number"||r<=0)throw this._log("error",te),new TypeError(te)}_checkOpts(r){if(typeof r!="object")throw this._log("error",`${u}opts must be an object`),new TypeError(`${u}opts must be an object`)}_log(r,e,t={}){if(this.logger&&typeof this.logger[r]=="function"){let s=n=>typeof n!="object"||n===null?n:Object.keys(n).reduce((h,o)=>(pe.includes(o.toLowerCase())?h[o]="[REDACTED]":typeof n[o]=="object"&&n[o]!==null?h[o]=s(n[o]):h[o]=n[o],h),Array.isArray(n)?[]:{}),i=s(t),a={timestamp:new Date().toISOString(),level:r,message:e,...i,context:s({bucketName:this.bucketName,region:this.region,endpoint:this.endpoint,accessKeyId:this.accessKeyId?`${this.accessKeyId.substring(0,4)}...`:void 0})};this.logger[r](a)}}async getContentLength(r){this._checkKey(r);let e={[E]:R},t=$(r),{url:s,headers:i}=await this._sign("HEAD",t,{},e,""),a=(await this._sendRequest(s,"HEAD",i)).headers.get(b);return a?parseInt(a,10):0}async bucketExists(){let r={[E]:R},{url:e,headers:t}=await this._sign("HEAD","",{},r,""),s=await this._sendRequest(e,"HEAD",t);return!!(s.ok&&s.status===200)}async fileExists(r){this._checkKey(r);let e={[E]:R},t=$(r),{url:s,headers:i}=await this._sign("HEAD",t,{},e,"");try{let a=await fetch(s,{method:"HEAD",headers:i});return a.ok&&a.status===200?!0:(a.status===404||this._handleErrorResponse(a),!1)}catch(a){let n=a instanceof Error?a.message:String(a);throw this._log("error",`${u}Failed to check if file exists: ${n}`),new Error(`${u}Failed to check if file exists: ${n}`)}}async _sign(r,e,t,s,i){let a=new Date().toISOString().replace(/[:-]|\.\d{3}/g,""),n=typeof e=="string"&&e.length>0?new URL(e,this.endpoint):new URL(this.endpoint);n.pathname=`/${encodeURI(this.bucketName)}${n.pathname}`,s[E]=i?await M(i):R,s[fe]=a,s[_e]=n.host;let h=this._buildCanonicalHeaders(s),o=Object.keys(s).map(O=>O.toLowerCase()).sort().join(";"),c=await this._buildCanonicalRequest(r,n,t,h,o,i),f=await this._buildStringToSign(a,c),_=await this._calculateSignature(a,f),y=this._buildAuthorizationHeader(a,o,_);return s[ge]=y,{url:n.toString(),headers:s}}_buildCanonicalHeaders(r){return Object.entries(r).map(([e,t])=>`${e.toLowerCase()}:${String(t).trim()}`).sort().join(` +var se=crypto.createHmac||(await import("node:crypto")).createHmac,ie=crypto.createHash||(await import("node:crypto")).createHash;typeof se>"u"&&typeof ie>"u"&&console.error("ultralight-S3 Module: Crypto functions are not available, please report the issue with necessary description: https://github.com/sentienhq/ultralight-s3/issues");var V="AWS4-HMAC-SHA256",B="aws4_request",F="s3",ue="2",g="UNSIGNED-PAYLOAD",de="application/octet-stream",z="application/xml",L="application/json",fe=["accessKeyId","secretAccessKey","sessionToken","password"],Q=5*1024*1024,E="x-amz-content-sha256",pe="x-amz-date",_e="host",Re="Authorization",O="Content-Type",N="Content-Length",X="etag",W="last-modified",d="ultralight-s3 Module: ",ge=`${d}accessKeyId must be a non-empty string`,Ee=`${d}secretAccessKey must be a non-empty string`,we=`${d}endpoint must be a non-empty string`,ye=`${d}bucketName must be a non-empty string`,Y=`${d}key must be a non-empty string`,x=`${d}uploadId must be a non-empty string`,J=`${d}parts must be a non-empty array`,Z=`${d}Each part must have a partNumber (number) and ETag (string)`,M=`${d}data must be a Buffer or string`,ee=`${d}prefix must be a string`,te=`${d}maxKeys must be a positive integer`,re=`${d}delimiter must be a string`,me={contents:!0},Oe=r=>`%${r.charCodeAt(0).toString(16).toUpperCase()}`,K=r=>encodeURIComponent(r).replace(/[!'()*]/g,Oe),m=r=>K(r).replace(/%2F/g,"/"),ae=class{constructor({accessKeyId:r,secretAccessKey:e,endpoint:t,bucketName:s,region:i="auto",maxRequestSizeInBytes:a=Q,requestAbortTimeout:n=void 0,logger:h=void 0}){this.getBucketName=()=>this.bucketName,this.setBucketName=o=>{this.bucketName=o},this.getRegion=()=>this.region,this.setRegion=o=>{this.region=o},this.getEndpoint=()=>this.endpoint,this.setEndpoint=o=>{this.endpoint=o},this.getMaxRequestSizeInBytes=()=>this.maxRequestSizeInBytes,this.setMaxRequestSizeInBytes=o=>{this.maxRequestSizeInBytes=o},this.getProps=()=>({accessKeyId:this.accessKeyId,secretAccessKey:this.secretAccessKey,region:this.region,bucket:this.bucketName,endpoint:this.endpoint,maxRequestSizeInBytes:this.maxRequestSizeInBytes,requestAbortTimeout:this.requestAbortTimeout,logger:this.logger}),this.setProps=o=>{this._validateConstructorParams(o.accessKeyId,o.secretAccessKey,o.bucketName,o.endpoint),this.accessKeyId=o.accessKeyId,this.secretAccessKey=o.secretAccessKey,this.region=o.region||"auto",this.bucketName=o.bucketName,this.endpoint=o.endpoint,this.maxRequestSizeInBytes=o.maxRequestSizeInBytes||Q,this.requestAbortTimeout=o.requestAbortTimeout,this.logger=o.logger},this._validateConstructorParams(r,e,t,s),this.accessKeyId=r,this.secretAccessKey=e,this.endpoint=t,this.bucketName=s,this.region=i,this.maxRequestSizeInBytes=a,this.requestAbortTimeout=n,this.logger=h}_validateConstructorParams(r,e,t,s){if(typeof r!="string"||r.trim().length===0)throw new TypeError(ge);if(typeof e!="string"||e.trim().length===0)throw new TypeError(Ee);if(typeof t!="string"||t.trim().length===0)throw new TypeError(we);if(typeof s!="string"||s.trim().length===0)throw new TypeError(ye)}_checkMethodHeadnGet(r){if(r!=="GET"&&r!=="HEAD")throw this._log("error",`${d}method must be either GET or HEAD`),new Error("method must be either GET or HEAD")}_checkKey(r){if(typeof r!="string"||r.trim().length===0)throw this._log("error",Y),new TypeError(Y)}_checkDelimiter(r){if(typeof r!="string"||r.trim().length===0)throw this._log("error",re),new TypeError(re)}_checkPrefix(r){if(typeof r!="string")throw this._log("error",ee),new TypeError(ee)}_checkMaxKeys(r){if(typeof r!="number"||r<=0)throw this._log("error",te),new TypeError(te)}_checkOpts(r){if(typeof r!="object")throw this._log("error",`${d}opts must be an object`),new TypeError(`${d}opts must be an object`)}_log(r,e,t={}){if(this.logger&&typeof this.logger[r]=="function"){let s=n=>typeof n!="object"||n===null?n:Object.keys(n).reduce((h,o)=>(fe.includes(o.toLowerCase())?h[o]="[REDACTED]":typeof n[o]=="object"&&n[o]!==null?h[o]=s(n[o]):h[o]=n[o],h),Array.isArray(n)?[]:{}),i=s(t),a={timestamp:new Date().toISOString(),level:r,message:e,...i,context:s({bucketName:this.bucketName,region:this.region,endpoint:this.endpoint,accessKeyId:this.accessKeyId?`${this.accessKeyId.substring(0,4)}...`:void 0})};this.logger[r](a)}}async getContentLength(r){this._checkKey(r);let e={[E]:g},t=m(r),{url:s,headers:i}=await this._sign("HEAD",t,{},e,""),a=(await this._sendRequest(s,"HEAD",i)).headers.get(N);return a?parseInt(a,10):0}async bucketExists(){let r={[E]:g},{url:e,headers:t}=await this._sign("HEAD","",{},r,""),s=await this._sendRequest(e,"HEAD",t);return!!(s.ok&&s.status===200)}async fileExists(r){this._checkKey(r);let e={[E]:g},t=m(r),{url:s,headers:i}=await this._sign("HEAD",t,{},e,"");try{let a=await fetch(s,{method:"HEAD",headers:i});return a.ok&&a.status===200?!0:(a.status===404||this._handleErrorResponse(a),!1)}catch(a){let n=a instanceof Error?a.message:String(a);throw this._log("error",`${d}Failed to check if file exists: ${n}`),new Error(`${d}Failed to check if file exists: ${n}`)}}async _sign(r,e,t,s,i){let a=new Date().toISOString().replace(/[:-]|\.\d{3}/g,""),n=typeof e=="string"&&e.length>0?new URL(e,this.endpoint):new URL(this.endpoint);n.pathname=`/${encodeURI(this.bucketName)}${n.pathname}`,s[E]=i?await k(i):g,s[pe]=a,s[_e]=n.host;let h=this._buildCanonicalHeaders(s),o=Object.keys(s).map(y=>y.toLowerCase()).sort().join(";"),u=await this._buildCanonicalRequest(r,n,t,h,o,i),p=await this._buildStringToSign(a,u),_=await this._calculateSignature(a,p),w=this._buildAuthorizationHeader(a,o,_);return s[Re]=w,{url:n.toString(),headers:s}}_buildCanonicalHeaders(r){return Object.entries(r).map(([e,t])=>`${e.toLowerCase()}:${String(t).trim()}`).sort().join(` `)}async _buildCanonicalRequest(r,e,t,s,i,a){return[r,e.pathname,this._buildCanonicalQueryString(t),`${s} -`,i,a?await M(a):R].join(` -`)}async _buildStringToSign(r,e){let t=[r.slice(0,8),this.region,K,F].join("/");return[V,r,t,await M(e)].join(` -`)}async _calculateSignature(r,e){let t=await this._getSignatureKey(r.slice(0,8));return L(t,e,"hex")}_buildAuthorizationHeader(r,e,t){let s=[r.slice(0,8),this.region,K,F].join("/");return[`${V} Credential=${this.accessKeyId}/${s}`,`SignedHeaders=${e}`,`Signature=${t}`].join(", ")}async list(r="/",e="",t=1e3,s="GET",i={}){this._checkDelimiter(r),this._checkPrefix(e),this._checkMaxKeys(t),this._checkMethodHeadnGet(s),this._checkOpts(i),this._log("info",`Listing objects in ${e}`);let a={"list-type":ue,"max-keys":String(t),...i};e.length>0&&(a.prefix=e);let n={[T]:U,[E]:R},h=r==="/"?r:j(r),{url:o,headers:c}=await this._sign("GET",h,a,n,""),f=`${o}?${new URLSearchParams(a)}`,_=await this._sendRequest(f,"GET",c),y=await _.text();if(s==="HEAD"){let A=_.headers.get(b),S=_.headers.get(W),le=_.headers.get(Q);return{size:A?+A:void 0,mtime:S?new Date(S):void 0,ETag:le||void 0}}let O=N(y),P=O.listBucketResult||O.error||O;return P.contents||P}async listMultiPartUploads(r="/",e="",t="GET",s={}){var i,a,n;this._checkDelimiter(r),this._checkPrefix(e),this._checkMethodHeadnGet(t),this._checkOpts(s),this._log("info",`Listing multipart uploads in ${e}`);let h={uploads:"",...s},o={[T]:U,[E]:R},c=r==="/"?r:j(r),{url:f,headers:_}=await this._sign("GET",c,h,o,""),y=`${f}?${new URLSearchParams(h)}`,O=await this._sendRequest(y,"GET",_),P=await O.text();if(t==="HEAD")return{size:+((i=O.headers.get(b))!==null&&i!==void 0?i:"0"),mtime:new Date((a=O.headers.get(W))!==null&&a!==void 0?a:""),ETag:(n=O.headers.get(Q))!==null&&n!==void 0?n:""};let A=N(P),S=A.listMultipartUploadsResult||A.error||A;return S.uploads||S}async get(r,e={}){this._checkKey(r),this._log("info",`Getting object ${r}`);let t={[T]:U,[E]:R},s=$(r),{url:i,headers:a}=await this._sign("GET",s,e,t,"");return(await this._sendRequest(i,"GET",a)).text()}async getResponse(r,e=!0,t=0,s=this.maxRequestSizeInBytes,i={}){this._checkKey(r);let a=i,n={[T]:U,[E]:R,...e?{}:{range:`bytes=${t}-${s-1}`}},h=$(r),{url:o,headers:c}=await this._sign("GET",h,a,n,""),f=`${o}?${new URLSearchParams(a)}`;return this._sendRequest(f,"GET",c)}async put(r,e){if(this._checkKey(r),!(e instanceof Buffer||typeof e=="string"))throw this._log("error",k),new TypeError(k);this._log("info",`Uploading object ${r}`);let t=typeof e=="string"?Buffer.byteLength(e):e.length,s={[b]:t},i=$(r),{url:a,headers:n}=await this._sign("PUT",i,{},s,e);return await this._sendRequest(a,"PUT",n,e)}async getMultipartUploadId(r,e=de){if(this._checkKey(r),typeof e!="string")throw this._log("error",`${u}fileType must be a string`),new TypeError(`${u}fileType must be a string`);this._log("info",`Initiating multipart upload for object ${r}`);let t={uploads:""},s={[T]:e,[E]:R},i=$(r),{url:a,headers:n}=await this._sign("POST",i,t,s,""),h=`${a}?${new URLSearchParams(t)}`,o=await(await this._sendRequest(h,"POST",n)).text(),c=N(o);if(typeof c=="object"&&c!==null&&"error"in c&&typeof c.error=="object"&&c.error!==null&&"message"in c.error){let f=String(c.error.message);throw this._log("error",`${u}Failed to abort multipart upload: ${f}`),new Error(`${u}Failed to abort multipart upload: ${f}`)}if(typeof c=="object"&&c!==null){if(!c.initiateMultipartUploadResult||!c.initiateMultipartUploadResult.uploadId)throw this._log("error",`${u}Failed to create multipart upload: no uploadId in response`),new Error(`${u}Failed to create multipart upload: Missing upload ID in response`);return c.initiateMultipartUploadResult.uploadId}else throw this._log("error",`${u}Failed to create multipart upload: unexpected response format`),new Error(`${u}Failed to create multipart upload: Unexpected response format`)}async uploadPart(r,e,t,s,i={}){this._validateUploadPartParams(r,e,t,s,i);let a={uploadId:t,partNumber:s,...i},n={[b]:e.length},h=$(r),{url:o,headers:c}=await this._sign("PUT",h,a,n,e),f=`${o}?${new URLSearchParams(a)}`,_=(await this._sendRequest(f,"PUT",c,e)).headers.get("etag")||"";return{partNumber:s,ETag:_}}_validateUploadPartParams(r,e,t,s,i){if(this._checkKey(r),!(e instanceof Buffer||typeof e=="string"))throw this._log("error",k),new TypeError(k);if(typeof t!="string"||t.trim().length===0)throw this._log("error",x),new TypeError(x);if(!Number.isInteger(s)||s<=0)throw this._log("error",`${u}partNumber must be a positive integer`),new TypeError(`${u}partNumber must be a positive integer`);this._checkOpts(i)}async completeMultipartUpload(r,e,t){if(this._checkKey(r),typeof e!="string"||e.trim().length===0)throw this._log("error",x),new TypeError(x);if(!Array.isArray(t)||t.length===0)throw this._log("error",J),new TypeError(J);if(!t.every(y=>typeof y.partNumber=="number"&&typeof y.ETag=="string"))throw this._log("error",Z),new TypeError(Z);this._log("info",`Complete multipart upload ${e} for object ${r}`);let s={uploadId:e},i=this._buildCompleteMultipartUploadXml(t),a={[T]:z,[b]:Buffer.byteLength(i).toString(),[E]:await M(i)},n=$(r),{url:h,headers:o}=await this._sign("POST",n,s,a,i),c=`${h}?${new URLSearchParams(s)}`,f=await(await this._sendRequest(c,"POST",o,i)).text(),_=N(f);if(typeof _=="object"&&_!==null&&"error"in _&&typeof _.error=="object"&&_.error!==null&&"message"in _.error){let y=String(_.error.message);throw this._log("error",`${u}Failed to abort multipart upload: ${y}`),new Error(`${u}Failed to abort multipart upload: ${y}`)}return _.completeMultipartUploadResult}async abortMultipartUpload(r,e){if(this._checkKey(r),typeof e!="string"||e.trim().length===0)throw this._log("error",x),new TypeError(x);this._log("info",`Aborting multipart upload ${e} for object ${r}`);let t={uploadId:e},s={[T]:z,[E]:R};try{let i=$(r),{url:a,headers:n}=await this._sign("DELETE",i,t,s,""),h=`${a}?${new URLSearchParams(t)}`,o=await this._sendRequest(h,"DELETE",n);if(o.ok){let c=await o.text(),f=N(c);if(typeof f=="object"&&f!==null&&"error"in f&&typeof f.error=="object"&&f.error!==null&&"message"in f.error){let _=String(f.error.message);throw this._log("error",`${u}Failed to abort multipart upload: ${_}`),new Error(`${u}Failed to abort multipart upload: ${_}`)}return{status:"Aborted",key:r,uploadId:e,response:f}}else throw this._log("error",`${u}Abort request failed with status ${o.status}`),new Error(`${u}Abort request failed with status ${o.status}`)}catch(i){let a=i instanceof Error?i.message:String(i);throw this._log("error",`${u}Failed to abort multipart upload for key ${r}: ${a}`),new Error(`${u}Failed to abort multipart upload for key ${r}: ${a}`)}}_buildCompleteMultipartUploadXml(r){return` +`,i,a?await k(a):g].join(` +`)}async _buildStringToSign(r,e){let t=[r.slice(0,8),this.region,F,B].join("/");return[V,r,t,await k(e)].join(` +`)}async _calculateSignature(r,e){let t=await this._getSignatureKey(r.slice(0,8));return U(t,e,"hex")}_buildAuthorizationHeader(r,e,t){let s=[r.slice(0,8),this.region,F,B].join("/");return[`${V} Credential=${this.accessKeyId}/${s}`,`SignedHeaders=${e}`,`Signature=${t}`].join(", ")}async list(r="/",e="",t=1e3,s="GET",i={}){this._checkDelimiter(r),this._checkPrefix(e),this._checkMaxKeys(t),this._checkMethodHeadnGet(s),this._checkOpts(i),this._log("info",`Listing objects in ${e}`);let a={"list-type":ue,"max-keys":String(t),...i};e.length>0&&(a.prefix=e);let n={[O]:L,[E]:g},h=r==="/"?r:K(r),{url:o,headers:u}=await this._sign("GET",h,a,n,""),p=`${o}?${new URLSearchParams(a)}`,_=await this._sendRequest(p,"GET",u),w=await _.text();if(s==="HEAD"){let b=_.headers.get(N),C=_.headers.get(W),le=_.headers.get(X);return{size:b?+b:void 0,mtime:C?new Date(C):void 0,ETag:le||void 0}}let y=D(w),v=y.listBucketResult||y.error||y;return v.contents||v}async listMultiPartUploads(r="/",e="",t="GET",s={}){var i,a,n;this._checkDelimiter(r),this._checkPrefix(e),this._checkMethodHeadnGet(t),this._checkOpts(s),this._log("info",`Listing multipart uploads in ${e}`);let h={uploads:"",...s},o={[O]:L,[E]:g},u=r==="/"?r:K(r),{url:p,headers:_}=await this._sign("GET",u,h,o,""),w=`${p}?${new URLSearchParams(h)}`,y=await this._sendRequest(w,"GET",_),v=await y.text();if(t==="HEAD")return{size:+((i=y.headers.get(N))!==null&&i!==void 0?i:"0"),mtime:new Date((a=y.headers.get(W))!==null&&a!==void 0?a:""),ETag:(n=y.headers.get(X))!==null&&n!==void 0?n:""};let b=D(v),C=b.listMultipartUploadsResult||b.error||b;return C.uploads||C}async get(r,e={}){this._checkKey(r),this._log("info",`Getting object ${r}`);let t={[O]:L,[E]:g},s=m(r),{url:i,headers:a}=await this._sign("GET",s,e,t,"");return(await this._sendRequest(i,"GET",a)).text()}async getResponse(r,e=!0,t=0,s=this.maxRequestSizeInBytes,i={}){this._checkKey(r);let a=i,n={[O]:L,[E]:g,...e?{}:{range:`bytes=${t}-${s-1}`}},h=m(r),{url:o,headers:u}=await this._sign("GET",h,a,n,""),p=`${o}?${new URLSearchParams(a)}`;return this._sendRequest(p,"GET",u)}async put(r,e){if(this._checkKey(r),!(e instanceof Buffer||typeof e=="string"))throw this._log("error",M),new TypeError(M);this._log("info",`Uploading object ${r}`);let t=typeof e=="string"?Buffer.byteLength(e):e.length,s={[N]:t},i=m(r),{url:a,headers:n}=await this._sign("PUT",i,{},s,e);return await this._sendRequest(a,"PUT",n,e)}async getMultipartUploadId(r,e=de){if(this._checkKey(r),typeof e!="string")throw this._log("error",`${d}fileType must be a string`),new TypeError(`${d}fileType must be a string`);this._log("info",`Initiating multipart upload for object ${r}`);let t={uploads:""},s={[O]:e,[E]:g},i=m(r),{url:a,headers:n}=await this._sign("POST",i,t,s,""),h=`${a}?${new URLSearchParams(t)}`,o=await(await this._sendRequest(h,"POST",n)).text(),u=D(o);if(typeof u=="object"&&u!==null&&"error"in u&&typeof u.error=="object"&&u.error!==null&&"message"in u.error){let p=String(u.error.message);throw this._log("error",`${d}Failed to abort multipart upload: ${p}`),new Error(`${d}Failed to abort multipart upload: ${p}`)}if(typeof u=="object"&&u!==null){if(!u.initiateMultipartUploadResult||!u.initiateMultipartUploadResult.uploadId)throw this._log("error",`${d}Failed to create multipart upload: no uploadId in response`),new Error(`${d}Failed to create multipart upload: Missing upload ID in response`);return u.initiateMultipartUploadResult.uploadId}else throw this._log("error",`${d}Failed to create multipart upload: unexpected response format`),new Error(`${d}Failed to create multipart upload: Unexpected response format`)}async uploadPart(r,e,t,s,i={}){this._validateUploadPartParams(r,e,t,s,i);let a={uploadId:t,partNumber:s,...i},n={[N]:e.length},h=m(r),{url:o,headers:u}=await this._sign("PUT",h,a,n,e),p=`${o}?${new URLSearchParams(a)}`,_=(await this._sendRequest(p,"PUT",u,e)).headers.get("etag")||"";return{partNumber:s,ETag:_}}_validateUploadPartParams(r,e,t,s,i){if(this._checkKey(r),!(e instanceof Buffer||typeof e=="string"))throw this._log("error",M),new TypeError(M);if(typeof t!="string"||t.trim().length===0)throw this._log("error",x),new TypeError(x);if(!Number.isInteger(s)||s<=0)throw this._log("error",`${d}partNumber must be a positive integer`),new TypeError(`${d}partNumber must be a positive integer`);this._checkOpts(i)}async completeMultipartUpload(r,e,t){if(this._checkKey(r),typeof e!="string"||e.trim().length===0)throw this._log("error",x),new TypeError(x);if(!Array.isArray(t)||t.length===0)throw this._log("error",J),new TypeError(J);if(!t.every(w=>typeof w.partNumber=="number"&&typeof w.ETag=="string"))throw this._log("error",Z),new TypeError(Z);this._log("info",`Complete multipart upload ${e} for object ${r}`);let s={uploadId:e},i=this._buildCompleteMultipartUploadXml(t),a={[O]:z,[N]:Buffer.byteLength(i).toString(),[E]:await k(i)},n=m(r),{url:h,headers:o}=await this._sign("POST",n,s,a,i),u=`${h}?${new URLSearchParams(s)}`,p=await(await this._sendRequest(u,"POST",o,i)).text(),_=D(p);if(typeof _=="object"&&_!==null&&"error"in _&&typeof _.error=="object"&&_.error!==null&&"message"in _.error){let w=String(_.error.message);throw this._log("error",`${d}Failed to abort multipart upload: ${w}`),new Error(`${d}Failed to abort multipart upload: ${w}`)}return _.completeMultipartUploadResult}async abortMultipartUpload(r,e){if(this._checkKey(r),typeof e!="string"||e.trim().length===0)throw this._log("error",x),new TypeError(x);this._log("info",`Aborting multipart upload ${e} for object ${r}`);let t={uploadId:e},s={[O]:z,[E]:g};try{let i=m(r),{url:a,headers:n}=await this._sign("DELETE",i,t,s,""),h=`${a}?${new URLSearchParams(t)}`,o=await this._sendRequest(h,"DELETE",n);if(o.ok){let u=await o.text(),p=D(u);if(typeof p=="object"&&p!==null&&"error"in p&&typeof p.error=="object"&&p.error!==null&&"message"in p.error){let _=String(p.error.message);throw this._log("error",`${d}Failed to abort multipart upload: ${_}`),new Error(`${d}Failed to abort multipart upload: ${_}`)}return{status:"Aborted",key:r,uploadId:e,response:p}}else throw this._log("error",`${d}Abort request failed with status ${o.status}`),new Error(`${d}Abort request failed with status ${o.status}`)}catch(i){let a=i instanceof Error?i.message:String(i);throw this._log("error",`${d}Failed to abort multipart upload for key ${r}: ${a}`),new Error(`${d}Failed to abort multipart upload for key ${r}: ${a}`)}}_buildCompleteMultipartUploadXml(r){return` ${r.map(e=>` @@ -11,5 +11,5 @@ var se=crypto.createHmac||(await import("node:crypto")).createHmac,ie=crypto.cre `).join("")} - `}async delete(r){this._checkKey(r),this._log("info",`Deleting object ${r}`);let e={[T]:U,[E]:R},t=$(r),{url:s,headers:i}=await this._sign("DELETE",t,{},e,"");return(await this._sendRequest(s,"DELETE",i)).text()}async _sendRequest(r,e,t,s){this._log("info",`Sending ${e} request to ${r}, headers: ${JSON.stringify(t)}`);let i=await fetch(r,{method:e,headers:t,body:s,signal:this.requestAbortTimeout!==void 0?AbortSignal.timeout(this.requestAbortTimeout):void 0});return i.ok||await this._handleErrorResponse(i),i}async _handleErrorResponse(r){let e=await r.text(),t=r.headers.get("x-amz-error-code")||"Unknown",s=r.headers.get("x-amz-error-message")||r.statusText;throw this._log("error",`${u}Request failed with status ${r.status}: ${t} - ${s},err body: ${e}`),new Error(`${u}Request failed with status ${r.status}: ${t} - ${s}, err body: ${e}`)}_buildCanonicalQueryString(r){return Object.keys(r).length<1?"":Object.keys(r).sort().map(e=>`${encodeURIComponent(e)}=${encodeURIComponent(r[e])}`).join("&")}async _getSignatureKey(r){let e=await L(`AWS4${this.secretAccessKey}`,r),t=await L(e,this.region),s=await L(t,K);return L(s,F)}},M=async r=>{let e=ie("sha256");return e.update(r),e.digest("hex")},L=async(r,e,t)=>{let s=se("sha256",r);return s.update(e),s.digest(t)},N=r=>{let e=a=>a.replace(/"/g,'"').replace(/'/g,"'").replace(/</g,"<").replace(/>/g,">").replace(/&/g,"&"),t={},s=/<(\w)([-\w]+)(?:\/|[^>]*>((?:(?!<\1)[\s\S])*)<\/\1\2)>/gm,i;for(;i=s.exec(r);){let[,a,n,h]=i,o=a.toLowerCase()+n,c=h!=null?N(h):!0;typeof c=="string"?t[o]=e(c):Array.isArray(t[o])?t[o].push(c):t[o]=t[o]!=null?[t[o],c]:me[o]?[c]:c}return Object.keys(t).length?t:e(r)};import ce from"avro-js";var l={MISSING_ARGUMENT:"MISSING_ARGUMENT",COLLECTION_EXISTS:"COLLECTION_EXISTS",CREATE_COLLECTION_ERROR:"CREATE_COLLECTION_ERROR",RENAME_COLLECTION_ERROR:"RENAME_COLLECTION_ERROR",REMOVE_COLLECTION_ERROR:"REMOVE_COLLECTION_ERROR",UPDATE_COLLECTION_SCHEMA_ERROR:"UPDATE_COLLECTION_SCHEMA_ERROR",COLLECTION_NOT_FOUND:"COLLECTION_NOT_FOUND",SCHEMA_VALIDATION_ERROR:"SCHEMA_VALIDATION_ERROR",DOCUMENT_VALIDATION_ERROR:"DOCUMENT_VALIDATION_ERROR",S3_OPERATION_ERROR:"S3_OPERATION_ERROR",FIND_ERROR:"FIND_ERROR",FIND_ONE_ERROR:"FIND_ONE_ERROR",SAVE_DATA_ERROR:"SAVE_DATA_ERROR",INSERT_ERROR:"INSERT_ERROR",UPDATE_ERROR:"UPDATE_ERROR",UPDATE_ONE_ERROR:"UPDATE_ONE_ERROR",DELETE_ERROR:"DELETE_ERROR",COUNT_ERROR:"COUNT_ERROR",UNKNOWN_ERROR:"UNKNOWN_ERROR"},p=class extends Error{constructor(e,t=l.UNKNOWN_ERROR){super(`lowstorageError: ${e} :: code: ${t}`),this.name=this.constructor.name,this.code=t,Error.captureStackTrace(this,this.constructor)}},B=class extends p{constructor(e){super(`Collection ${e} not found`,l.COLLECTION_NOT_FOUND)}},D=class extends p{constructor(e){super(e,l.SCHEMA_VALIDATION_ERROR)}},I=class extends p{constructor(e){super(e,l.DOCUMENT_VALIDATION_ERROR)}},g=class extends p{constructor(e,t){super(`S3 ${t} operation failed: ${e}`,l.S3_OPERATION_ERROR)}};import{randomUUID as q}from"node:crypto";var v=(r,e)=>Object.keys(e).every(t=>r[t]===e[t]),oe=async()=>typeof q<"u"&&typeof q=="function"?q():typeof crypto<"u"&&typeof crypto=="object"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(r){var e=Math.random()*16|0,t=r==="x"?e:e&3|8;return t.toString(16)}),ne=(r,e="SubAutoGenerated")=>{switch(typeof r){case"string":return $e(r)?{type:"string",name:"_id",size:16,logicalType:"UUID"}:"string";case"number":return Number.isInteger(r)?"int":"float";case"boolean":return"boolean";case"object":return r===null?"null":Array.isArray(r)?{type:"array",items:ne(r[0])}:H(r,e);default:return"string"}},H=(r,e="AutoGenerated")=>{Array.isArray(r)&&(r=r[0]);let t=Object.entries(r).map(([s,i])=>({name:s,type:ne(i,`${e}.${s}`)}));return{type:"record",name:e,fields:t}},$e=r=>/^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i.test(r);var d="lowstorage",w="/",G="lowstorage",m=".avro",Te=1024*1024,Ie=5*Te,he=class{constructor(e={accessKeyId:void 0,secretAccessKey:void 0,endpoint:void 0,bucketName:void 0,region:"auto",logger:null,dirPrefix:G}){this._checkArgs(e),this._schemas=new Map,this._s3=new ae(e),this._dirPrefix=e.dirPrefix||G,this._avro=ce}_checkArgs=e=>{let t=["accessKeyId","secretAccessKey","endpoint","bucketName"];for(let s of t)if(!e[s])throw new p(`${d}: ${s} is required`,l.MISSING_ARGUMENT)};_hasColName=e=>{if(e.trim()===""||e===null||typeof e>"u")throw new p(`${d}: Collection name is required`,l.MISSING_ARGUMENT)};async listCollections(){try{let e=await this._s3.list(w,this._dirPrefix);return typeof e=="object"&&e!==null&&e.keyCount==="0"?[]:e.map(t=>t.key.slice(this._dirPrefix.length+1,-m.length))}catch(e){throw new g(`${d}: ${e.message}`,l.S3_OPERATION_ERROR)}}async collectionExists(e){try{return this._hasColName(e),await this._s3.fileExists(`${this._dirPrefix}${w}${e}${m}`)}catch(t){if(t.message.includes("Not Found"))return!1;throw new p(`${d}: ${t.message}`,l.COLLECTION_NOT_FOUND)}}async createCollection(e,t,s=[]){try{if(this._hasColName(e),!await this.collectionExists(e))return await this._s3.put(`${this._dirPrefix}${w}${e}${m}`,s.length>0?s:""),this.collection(e,t);throw new p(`${d}: Collection ${e} already exists`,l.COLLECTION_EXISTS)}catch(i){throw i instanceof p?i:new p(`${d}: ${i.message}`,l.CREATE_COLLECTION_ERROR)}}async removeCollection(e){try{this._hasColName(e);let t=`${this._dirPrefix}${w}${e}${m}`;if(await this.collectionExists(e)){await this._s3.delete(t);let i=await this.collectionExists(e);if(typeof i=="boolean")return!i;throw new g(`${d}: Failed to delete collection ${e}`,l.S3_OPERATION_ERROR)}throw new p(`${d}: Collection ${e} does not exist`,l.REMOVE_COLLECTION_ERROR)}catch(t){throw t instanceof g?t:new p(`${d}: Failed to remove collection: ${t.message}`,l.REMOVE_COLLECTION_ERROR)}}async renameCollection(e,t){try{if(this._hasColName(e),this._hasColName(t),!await this.collectionExists(e))throw new B(`${d}: Collection ${e} does not exist`,l.COLLECTION_NOT_FOUND);let i=this.collection(e),a=await i._loadDataBuffer();if(!await this.removeCollection(e))throw new p(`${d}: Failed to rename collection`,l.RENAME_COLLECTION_ERROR);return await this.createCollection(t,i._avroType,a)}catch(s){throw s instanceof p?s:new p(`${d}: Rename collection failed: ${s.message}`,l.RENAME_COLLECTION_ERROR)}}async collection(e,t,s=!0){try{if(this._hasColName(e),typeof t>"u"){if(this._schemas.has(e))return new C(e,this._s3,this._schemas.get(e),this._dirPrefix);if(await this._s3.fileExists(`${this._dirPrefix}${w}${e}${m}`)){let a=await this._s3.get(`${this._dirPrefix}${w}${e}${m}`),n=this._avro.parse(a);return this._schemas.set(e,n),new C(e,this._s3,n,this._dirPrefix)}return s&&this._s3.put(`${this._dirPrefix}${w}${e}${m}`,""),new C(e,this._s3,void 0,this._dirPrefix)}return s&&(await this._s3.fileExists(`${this._dirPrefix}${w}${e}${m}`)||await this._s3.put(`${this._dirPrefix}${w}${e}${m}`,"")),new C(e,this._s3,this._avro.parse(t),this._dirPrefix)}catch(i){throw new p(`${d}: ${i.message}`,l.COLLECTION_NOT_FOUND)}}s3=()=>this._s3},C=class{constructor(e,t,s=void 0,i=G){this._colName=e,this._s3=t,this._avro=ce,this._avroType=s,this._dirPrefix=i}async insert(e,t=void 0){try{if(e==null)throw new p(`${d}: Document is required for insert`,l.MISSING_ARGUMENT);if(typeof e!="object"&&!Array.isArray(e))throw new I(`${d}: Document must be an object or an array`,l.DOCUMENT_VALIDATION_ERROR);let s=Array.isArray(e)?e:[e],i=t?this._avro.parse(t):this._avroType||this._avro.parse(H(e));if(!i)throw new D(`${d}: Schema is required - Pass a schema to the insert method`,l.SCHEMA_VALIDATION_ERROR);this._avroType=i;let a=this._avro.parse({type:"array",items:this._avroType}),n=await this._loadDataBuffer(),h=n.length>0?a.fromBuffer(n):[];for(let c of s){if(typeof c!="object"||c===null)throw new I(`${d}: Invalid input: input must be an object or an array of objects`,l.DOCUMENT_VALIDATION_ERROR);if(c._id=c._id||await oe(),!this._avroType.isValid(c))throw new I(`${d}: Invalid document or schema`,l.DOCUMENT_VALIDATION_ERROR);h.push(c)}if(!await this._saveDataBuffer(a.toBuffer(h)))throw new g(`${d}: Failed to insert document`,l.S3_OPERATION_ERROR);return s}catch(s){throw s instanceof p?s:new p(`${d} Insert operation failed: ${s.message}`,l.INSERT_ERROR)}}async _loadDataBuffer(){try{let e=`${this._dirPrefix}${w}${this._colName}${m}`,t=this._s3.getMaxRequestSizeInBytes()||Ie,s=await this._s3.get(e);if(s.length-1)return Buffer.from("");throw new g(`${d}: Failed to load data buffer: ${e.message}`,l.S3_OPERATION_ERROR)}}async _saveDataBuffer(e){try{let t=`${this._dirPrefix}${w}${this._colName}${m}`;if((await this._s3.put(t,e)).status!==200)throw new g(`${d}: Failed to save data`,l.S3_OPERATION_ERROR);return!0}catch(t){throw t instanceof g?t:new p(`${d}: ${t.message}`,l.SAVE_DATA_ERROR)}}async find(e={},t={}){try{let s=await this._loadDataBuffer();if(s.length===0)return[];let i=this._avro.parse({type:"array",items:this._avroType}),a=s.length>0?i.fromBuffer(s):[],n=parseInt(t.skip,10)||0,h=parseInt(t.limit,10)?n+parseInt(t.limit,10):void 0;return a.filter(c=>v(c,e)).slice(n,h)}catch(s){throw new p(`${d}: Find operation failed: ${s.message}`,l.FIND_ERROR)}}async findOne(e={}){try{return(await this.find(e))[0]||[]}catch(t){throw new p(`${d}: FindOne operation failed: ${t.message}`,l.FIND_ONE_ERROR)}}async update(e={},t={}){try{if(!this._avroType)throw new D(`${d}: Schema is not defined for this collection`,l.SCHEMA_VALIDATION_ERROR);let s=await this._loadDataBuffer();if(s.length===0)return 0;let i=this._avro.parse({type:"array",items:this._avroType}),a=s.length>0?i.fromBuffer(s):[],n=0;for(let h=0;h0&&!await this._saveDataBuffer(i.toBuffer(a)))throw new g(`${d}: Failed to update document`,l.S3_OPERATION_ERROR);return n}catch(s){throw s instanceof g?s:new p(`${d}: Update operation failed: ${s.message}`,l.UPDATE_ERROR)}}async updateOne(e={},t={}){try{if(!this._avroType)throw new D(`${d}: Schema is not defined for this collection`,l.SCHEMA_VALIDATION_ERROR);let s=await this._loadDataBuffer();if(s.length===0)return 0;let i=this._avro.parse({type:"array",items:this._avroType}),a=s.length>0?i.fromBuffer(s):[],n=a.findIndex(h=>v(h,e));if(n!==-1){let h={...a[n],...t};if(!this._avroType.isValid(h))throw new I(`${d}: Invalid document or schema`,l.DOCUMENT_VALIDATION_ERROR);if(a[n]=h,!await this._saveDataBuffer(i.toBuffer(a)))throw new g(`${d}: Failed to update document`,l.S3_OPERATION_ERROR);return 1}return 0}catch(s){throw s instanceof p?s:new p(`${d}: UpdateOne operation failed: ${s.message}`,l.UPDATE_ONE_ERROR)}}async delete(e={}){try{let t=await this._loadDataBuffer();if(t.length===0)return 0;let s=this._avro.parse({type:"array",items:this._avroType}),i=t.length>0?s.fromBuffer(t):[],a=i.length,n=i.filter(o=>!v(o,e));if(!await this._saveDataBuffer(s.toBuffer(n)))throw new g(`${d}: Failed to delete document`,l.S3_OPERATION_ERROR);return a-n.length}catch(t){throw t instanceof g?t:new p(`${d}: Delete operation failed: ${t.message}`,l.DELETE_ERROR)}}async count(e={}){try{if(e==null)throw new p(`${d}: Query is required`,l.MISSING_ARGUMENT);if(Object.keys(e).length===0){let t=await this._loadDataBuffer();if(t.length===0)return 0;let s=this._avro.parse({type:"array",items:this._avroType});return(t.length>0?s.fromBuffer(t):[]).length||null}return(await this.find(e)).length}catch(t){throw new p(`${d}: Count operation failed: ${t.message}`,l.COUNT_ERROR)}}};export{he as lowstorage,p as lowstorageError,l as lowstorage_ERROR_CODES}; + `}async delete(r){this._checkKey(r),this._log("info",`Deleting object ${r}`);let e={[O]:L,[E]:g},t=m(r),{url:s,headers:i}=await this._sign("DELETE",t,{},e,"");return(await this._sendRequest(s,"DELETE",i)).text()}async _sendRequest(r,e,t,s){this._log("info",`Sending ${e} request to ${r}, headers: ${JSON.stringify(t)}`);let i=await fetch(r,{method:e,headers:t,body:s,signal:this.requestAbortTimeout!==void 0?AbortSignal.timeout(this.requestAbortTimeout):void 0});return i.ok||await this._handleErrorResponse(i),i}async _handleErrorResponse(r){let e=await r.text(),t=r.headers.get("x-amz-error-code")||"Unknown",s=r.headers.get("x-amz-error-message")||r.statusText;throw this._log("error",`${d}Request failed with status ${r.status}: ${t} - ${s},err body: ${e}`),new Error(`${d}Request failed with status ${r.status}: ${t} - ${s}, err body: ${e}`)}_buildCanonicalQueryString(r){return Object.keys(r).length<1?"":Object.keys(r).sort().map(e=>`${encodeURIComponent(e)}=${encodeURIComponent(r[e])}`).join("&")}async _getSignatureKey(r){let e=await U(`AWS4${this.secretAccessKey}`,r),t=await U(e,this.region),s=await U(t,F);return U(s,B)}},k=async r=>{let e=ie("sha256");return e.update(r),e.digest("hex")},U=async(r,e,t)=>{let s=se("sha256",r);return s.update(e),s.digest(t)},D=r=>{let e=a=>a.replace(/"/g,'"').replace(/'/g,"'").replace(/</g,"<").replace(/>/g,">").replace(/&/g,"&"),t={},s=/<(\w)([-\w]+)(?:\/|[^>]*>((?:(?!<\1)[\s\S])*)<\/\1\2)>/gm,i;for(;i=s.exec(r);){let[,a,n,h]=i,o=a.toLowerCase()+n,u=h!=null?D(h):!0;typeof u=="string"?t[o]=e(u):Array.isArray(t[o])?t[o].push(u):t[o]=t[o]!=null?[t[o],u]:me[o]?[u]:u}return Object.keys(t).length?t:e(r)};import he from"avro-js";var c={MISSING_ARGUMENT:"MISSING_ARGUMENT",COLLECTION_EXISTS:"COLLECTION_EXISTS",CREATE_COLLECTION_ERROR:"CREATE_COLLECTION_ERROR",RENAME_COLLECTION_ERROR:"RENAME_COLLECTION_ERROR",REMOVE_COLLECTION_ERROR:"REMOVE_COLLECTION_ERROR",UPDATE_COLLECTION_SCHEMA_ERROR:"UPDATE_COLLECTION_SCHEMA_ERROR",COLLECTION_NOT_FOUND:"COLLECTION_NOT_FOUND",SCHEMA_VALIDATION_ERROR:"SCHEMA_VALIDATION_ERROR",DOCUMENT_VALIDATION_ERROR:"DOCUMENT_VALIDATION_ERROR",S3_OPERATION_ERROR:"S3_OPERATION_ERROR",FIND_ERROR:"FIND_ERROR",FIND_ONE_ERROR:"FIND_ONE_ERROR",SAVE_DATA_ERROR:"SAVE_DATA_ERROR",INSERT_ERROR:"INSERT_ERROR",UPDATE_ERROR:"UPDATE_ERROR",UPDATE_ONE_ERROR:"UPDATE_ONE_ERROR",DELETE_ERROR:"DELETE_ERROR",COUNT_ERROR:"COUNT_ERROR",UNKNOWN_ERROR:"UNKNOWN_ERROR"},f=class extends Error{constructor(e,t=c.UNKNOWN_ERROR){super(`lowstorageError: ${e} :: code: ${t}`),this.name=this.constructor.name,this.code=t,Error.captureStackTrace(this,this.constructor)}},P=class extends f{constructor(e){super(`Collection ${e} not found`,c.COLLECTION_NOT_FOUND)}},$=class extends f{constructor(e){super(e,c.SCHEMA_VALIDATION_ERROR)}},T=class extends f{constructor(e){super(e,c.DOCUMENT_VALIDATION_ERROR)}},R=class extends f{constructor(e,t){super(`S3 ${t} operation failed: ${e}`,c.S3_OPERATION_ERROR)}};import{randomUUID as j}from"node:crypto";var S=(r,e)=>Object.keys(e).every(t=>r[t]===e[t]),oe=async()=>typeof j<"u"&&typeof j=="function"?j():typeof crypto<"u"&&typeof crypto=="object"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(r){var e=Math.random()*16|0,t=r==="x"?e:e&3|8;return t.toString(16)}),ne=(r,e="SubAutoGenerated")=>{switch(typeof r){case"string":return $e(r)?{type:"string",name:"_id",size:16,logicalType:"UUID"}:"string";case"number":return Number.isInteger(r)?"int":"float";case"boolean":return"boolean";case"object":return r===null?"null":Array.isArray(r)?{type:"array",items:ne(r[0])}:q(r,e);default:return"string"}},q=(r,e="AutoGenerated")=>{Array.isArray(r)&&(r=r[0]);let t=Object.entries(r).map(([s,i])=>({name:s,type:ne(i,`${e}.${s}`)}));return{type:"record",name:e,fields:t}},$e=r=>/^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i.test(r);var l="lowstorage",I="/",G="lowstorage",A=".avro",Te=1024*1024,Ie=5*Te,ce=class{constructor(e={accessKeyId:void 0,secretAccessKey:void 0,endpoint:void 0,bucketName:void 0,region:"auto",logger:null,dirPrefix:G}){this._checkArgs(e),this._schemas=new Map,this._s3=new ae(e),this._dirPrefix=e.dirPrefix||G,this._avro=he}_checkArgs=e=>{let t=["accessKeyId","secretAccessKey","endpoint","bucketName"];for(let s of t)if(!e[s])throw new f(`${l}: ${s} is required`,c.MISSING_ARGUMENT)};_hasColName=e=>{if(e.trim()===""||e===null||typeof e>"u")throw new f(`${l}: Collection name is required`,c.MISSING_ARGUMENT)};async listCollections(){try{let e=await this._s3.list(I,this._dirPrefix);return typeof e=="object"&&e!==null&&e.keyCount==="0"?[]:e.map(t=>t.key.slice(this._dirPrefix.length+1,-A.length))}catch(e){throw new R(`${l}: ${e.message}`,c.S3_OPERATION_ERROR)}}async collectionExists(e){try{return this._hasColName(e),await this._s3.fileExists(`${this._dirPrefix}${I}${e}${A}`)}catch(t){if(t.message.includes("Not Found"))return!1;throw new f(`${l}: ${t.message}`,c.COLLECTION_NOT_FOUND)}}async createCollection(e,t,s=[]){try{if(this._hasColName(e),!await this.collectionExists(e))return await this._s3.put(`${this._dirPrefix}${I}${e}${A}`,s.length>0?s:""),this.collection(e,t);throw new f(`${l}: Collection ${e} already exists`,c.COLLECTION_EXISTS)}catch(i){throw i instanceof f?i:new f(`${l}: ${i.message}`,c.CREATE_COLLECTION_ERROR)}}async removeCollection(e){try{this._hasColName(e);let t=`${this._dirPrefix}${I}${e}${A}`;if(await this.collectionExists(e)){await this._s3.delete(t);let i=await this.collectionExists(e);if(typeof i=="boolean")return!i;throw new R(`${l}: Failed to delete collection ${e}`,c.S3_OPERATION_ERROR)}throw new f(`${l}: Collection ${e} does not exist`,c.REMOVE_COLLECTION_ERROR)}catch(t){throw t instanceof R?t:new f(`${l}: Failed to remove collection: ${t.message}`,c.REMOVE_COLLECTION_ERROR)}}async renameCollection(e,t){try{if(this._hasColName(e),this._hasColName(t),!await this.collectionExists(e))throw new P(`${l}: Collection ${e} does not exist`,c.COLLECTION_NOT_FOUND);let i=await this.collection(e),a=await i._loadDataBuffer();if(!await this.removeCollection(e))throw new f(`${l}: Failed to rename collection`,c.RENAME_COLLECTION_ERROR);return await this.createCollection(t,i._avroType,a)}catch(s){throw s instanceof f?s:new f(`${l}: Rename collection failed: ${s.message}`,c.RENAME_COLLECTION_ERROR)}}async collection(e,t,s=!0){try{this._hasColName(e);let i=`${this._dirPrefix}${I}${e}${A}`,a,n=await this._s3.fileExists(i);if(!n&&!s)throw new f(`${l}: Collection ${e} does not exist`,c.COLLECTION_NOT_FOUND);if(t)a=this._avro.parse(t),this._schemas.set(e,a),!n&&s&&await this._s3.put(i,"");else if(this._schemas.has(e))a=this._schemas.get(e);else if(n){let h=await this._s3.get(i);a=this._avro.parse(h),this._schemas.set(e,a)}else s&&await this._s3.put(i,"");return new H(e,this._s3,a,this._dirPrefix)}catch(i){throw i.message.includes("unknown type")?new $(`${l}: Schema input is invalid: ${i.message}`,c.SCHEMA_VALIDATION_ERROR):new f(`${l}: ${i.message}`,c.COLLECTION_NOT_FOUND)}}s3=()=>this._s3},H=class{constructor(e,t,s=void 0,i=G){this._colName=e,this._s3=t,this._avro=he,this._avroType=s,this._dirPrefix=i}async insert(e,t=void 0){try{if(e==null)throw new f(`${l}: Document is required for insert`,c.INSERT_ERROR);if(typeof e!="object"&&!Array.isArray(e))throw new T(`${l}: Document must be an object or an array`,c.DOCUMENT_VALIDATION_ERROR);let s=Array.isArray(e)?e:[e],i=t?this._avro.parse(t):this._avroType||this._avro.parse(q(e));if(!i)throw new $(`${l}: Schema is required - Pass a schema to the insert method`,c.SCHEMA_VALIDATION_ERROR);this._avroType=i;let a=this._avro.parse({type:"array",items:this._avroType}),n=await this._loadDataBuffer(),h=n.length>0?a.fromBuffer(n):[];for(let u of s){if(typeof u!="object"||u===null)throw new T(`${l}: Invalid input: input must be an object or an array of objects`,c.DOCUMENT_VALIDATION_ERROR);if(u._id=u._id||await oe(),!this._avroType.isValid(u))throw new T(`${l}: Invalid document or schema`,c.DOCUMENT_VALIDATION_ERROR);h.push(u)}if(!await this._saveDataBuffer(a.toBuffer(h)))throw new R(`${l}: Failed to insert document`,c.S3_OPERATION_ERROR);return s}catch(s){throw s.message.includes("unknown type")?new $(`${l}: Schema input is invalid: ${s.message}`,c.SCHEMA_VALIDATION_ERROR):s instanceof f?s:new f(`${l} Insert operation failed: ${s.message}`,c.INSERT_ERROR)}}async _loadDataBuffer(){try{let e=`${this._dirPrefix}${I}${this._colName}${A}`,t=this._s3.getMaxRequestSizeInBytes()||Ie,s=await this._s3.get(e);if(s.length-1)return Buffer.from("");throw new R(`${l}: Failed to load data buffer: ${e.message}`,c.S3_OPERATION_ERROR)}}async _saveDataBuffer(e){try{let t=`${this._dirPrefix}${I}${this._colName}${A}`;if((await this._s3.put(t,e)).status!==200)throw new R(`${l}: Failed to save data`,c.S3_OPERATION_ERROR);return!0}catch(t){throw t instanceof R?t:new f(`${l}: ${t.message}`,c.SAVE_DATA_ERROR)}}async find(e={},t={}){try{if(e==null)throw new f(`${l}: Query is required for update`,c.MISSING_ARGUMENT);let s=await this._loadDataBuffer();if(s.length===0)return[];let i=this._avro.parse({type:"array",items:this._avroType}),a=s.length>0?i.fromBuffer(s):[],n=parseInt(t.skip,10)||0,h=parseInt(t.limit,10)?n+parseInt(t.limit,10):void 0;return a.filter(u=>S(u,e)).slice(n,h)}catch(s){throw new f(`${l}: Find operation failed: ${s.message}`,c.FIND_ERROR)}}async findOne(e={}){try{if(e==null)throw new f(`${l}: Query is required for update`,c.MISSING_ARGUMENT);return(await this.find(e))[0]||[]}catch(t){throw new f(`${l}: FindOne operation failed: ${t.message}`,c.FIND_ONE_ERROR)}}async update(e={},t={}){try{if(e==null||t===void 0||t===null)throw new f(`${l}: Query is required for update`,c.MISSING_ARGUMENT);if(!this._avroType)throw new $(`${l}: Schema is not defined for this collection`,c.SCHEMA_VALIDATION_ERROR);let s=await this._loadDataBuffer();if(s.length===0)return 0;let i=this._avro.parse({type:"array",items:this._avroType}),a=s.length>0?i.fromBuffer(s):[],n=0;for(let h=0;h0&&!await this._saveDataBuffer(i.toBuffer(a)))throw new R(`${l}: Failed to update document`,c.S3_OPERATION_ERROR);return n}catch(s){throw s instanceof R?s:new f(`${l}: Update operation failed: ${s.message}`,c.UPDATE_ERROR)}}async updateOne(e={},t={}){try{if(e==null||t===void 0||t===null)throw new f(`${l}: Query is required`,c.MISSING_ARGUMENT);if(!this._avroType)throw new $(`${l}: Schema is not defined for this collection`,c.SCHEMA_VALIDATION_ERROR);let s=await this._loadDataBuffer();if(s.length===0)return 0;let i=this._avro.parse({type:"array",items:this._avroType}),a=s.length>0?i.fromBuffer(s):[],n=a.findIndex(h=>S(h,e));if(n!==-1){let h={...a[n],...t};if(!this._avroType.isValid(h))throw new T(`${l}: Invalid document or schema`,c.DOCUMENT_VALIDATION_ERROR);if(a[n]=h,!await this._saveDataBuffer(i.toBuffer(a)))throw new R(`${l}: Failed to update document`,c.S3_OPERATION_ERROR);return 1}return 0}catch(s){throw s instanceof f?s:new f(`${l}: UpdateOne operation failed: ${s.message}`,c.UPDATE_ONE_ERROR)}}async delete(e={}){try{if(e==null)throw new f(`${l}: Query is required`,c.MISSING_ARGUMENT);let t=await this._loadDataBuffer();if(t.length===0)return 0;let s=this._avro.parse({type:"array",items:this._avroType}),i=t.length>0?s.fromBuffer(t):[],a=i.length,n=i.filter(o=>!S(o,e));if(!await this._saveDataBuffer(s.toBuffer(n)))throw new R(`${l}: Failed to delete document`,c.S3_OPERATION_ERROR);return a-n.length}catch(t){throw t instanceof R?t:new f(`${l}: Delete operation failed: ${t.message}`,c.DELETE_ERROR)}}async deleteAll(){try{let e=await this._loadDataBuffer();if(e.length===0)return 0;let t=this._avro.parse({type:"array",items:this._avroType}),s=e.length>0?t.fromBuffer(e):[],i=s.length,a=s.filter(h=>!S(h,{}));if(!await this._saveDataBuffer(t.toBuffer(a)))throw new R(`${l}: Failed to delete document`,c.S3_OPERATION_ERROR);return i-a.length}catch(e){throw e instanceof R?e:new f(`${l}: Delete operation failed: ${e.message}`,c.DELETE_ERROR)}}async count(e={}){try{if(Object.keys(e).length===0){let t=await this._loadDataBuffer();return t.length===0?0:this._avro.parse({type:"array",items:this._avroType}).fromBuffer(t).length||0}return(await this.find(e)).length}catch(t){throw new f(`${l}: Count operation failed: ${t.message}`,c.COUNT_ERROR)}}};export{ce as lowstorage,f as lowstorageError,c as lowstorage_ERROR_CODES}; //# sourceMappingURL=lowstorage.js.map diff --git a/lib/lowstorage.js.map b/lib/lowstorage.js.map index 55e5ef9..756362d 100644 --- a/lib/lowstorage.js.map +++ b/lib/lowstorage.js.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["../node_modules/ultralight-s3/src/index.ts", "../src/lowstorage.js", "../src/errors.js", "../src/helpers.js"], - "sourcesContent": ["'use strict';\n\ninterface S3Config {\n accessKeyId: string;\n secretAccessKey: string;\n endpoint: string;\n bucketName: string;\n region?: string;\n maxRequestSizeInBytes?: number;\n requestAbortTimeout?: number;\n logger?: Logger;\n}\n\ndeclare global {\n interface Crypto {\n createHmac: (\n algorithm: string,\n key: string | Buffer,\n ) => {\n update: (data: string | Buffer) => void;\n digest: (encoding?: 'hex' | 'base64' | 'latin1') => string;\n };\n createHash: (algorithm: string) => {\n update: (data: string | Buffer) => void;\n digest: (encoding?: 'hex' | 'base64' | 'latin1') => string;\n };\n }\n}\n\ninterface Logger {\n info: (message: string, ...args: any[]) => void;\n warn: (message: string, ...args: any[]) => void;\n error: (message: string, ...args: any[]) => void;\n}\n\ninterface UploadPart {\n partNumber: number;\n ETag: string;\n}\n\ninterface CompleteMultipartUploadResult {\n Location: string;\n Bucket: string;\n Key: string;\n ETag: string;\n}\n\ntype HttpMethod = 'POST' | 'GET' | 'HEAD' | 'PUT' | 'DELETE';\n\nlet _createHmac = crypto.createHmac || (await import('node:crypto')).createHmac;\nlet _createHash = crypto.createHash || (await import('node:crypto')).createHash;\n\nif (typeof _createHmac === 'undefined' && typeof _createHash === 'undefined') {\n console.error(\n 'ultralight-S3 Module: Crypto functions are not available, please report the issue with necessary description: https://github.com/sentienhq/ultralight-s3/issues',\n );\n}\n\n// Constants\nconst AWS_ALGORITHM = 'AWS4-HMAC-SHA256';\nconst AWS_REQUEST_TYPE = 'aws4_request';\nconst S3_SERVICE = 's3';\nconst LIST_TYPE = '2';\nconst UNSIGNED_PAYLOAD = 'UNSIGNED-PAYLOAD';\nconst DEFAULT_STREAM_CONTENT_TYPE = 'application/octet-stream';\nconst XML_CONTENT_TYPE = 'application/xml';\nconst JSON_CONTENT_TYPE = 'application/json';\n// List of keys that might contain sensitive information\nconst SENSITIVE_KEYS_REDACTED = ['accessKeyId', 'secretAccessKey', 'sessionToken', 'password'];\nconst MIN_MAX_REQUEST_SIZE_IN_BYTES = 5 * 1024 * 1024;\n\n// Headers\nconst HEADER_AMZ_CONTENT_SHA256 = 'x-amz-content-sha256';\nconst HEADER_AMZ_DATE = 'x-amz-date';\nconst HEADER_HOST = 'host';\nconst HEADER_AUTHORIZATION = 'Authorization';\nconst HEADER_CONTENT_TYPE = 'Content-Type';\nconst HEADER_CONTENT_LENGTH = 'Content-Length';\nconst HEADER_ETAG = 'etag';\nconst HEADER_LAST_MODIFIED = 'last-modified';\n\n// Error messages\nexport const ERROR_PREFIX = 'ultralight-s3 Module: ';\nconst ERROR_ACCESS_KEY_REQUIRED = `${ERROR_PREFIX}accessKeyId must be a non-empty string`;\nconst ERROR_SECRET_KEY_REQUIRED = `${ERROR_PREFIX}secretAccessKey must be a non-empty string`;\nconst ERROR_ENDPOINT_REQUIRED = `${ERROR_PREFIX}endpoint must be a non-empty string`;\nconst ERROR_BUCKET_NAME_REQUIRED = `${ERROR_PREFIX}bucketName must be a non-empty string`;\nconst ERROR_KEY_REQUIRED = `${ERROR_PREFIX}key must be a non-empty string`;\nconst ERROR_UPLOAD_ID_REQUIRED = `${ERROR_PREFIX}uploadId must be a non-empty string`;\nconst ERROR_PARTS_REQUIRED = `${ERROR_PREFIX}parts must be a non-empty array`;\nconst ERROR_INVALID_PART = `${ERROR_PREFIX}Each part must have a partNumber (number) and ETag (string)`;\nconst ERROR_DATA_BUFFER_REQUIRED = `${ERROR_PREFIX}data must be a Buffer or string`;\n// const ERROR_PATH_REQUIRED = `${ERROR_PREFIX}path must be a string`;\nconst ERROR_PREFIX_TYPE = `${ERROR_PREFIX}prefix must be a string`;\nconst ERROR_MAX_KEYS_TYPE = `${ERROR_PREFIX}maxKeys must be a positive integer`;\nconst ERROR_DELIMITER_REQUIRED = `${ERROR_PREFIX}delimiter must be a string`;\n\nconst expectArray: { [key: string]: boolean } = {\n contents: true,\n};\n\nconst encodeAsHex = (c: string): string => `%${c.charCodeAt(0).toString(16).toUpperCase()}`;\n\nconst uriEscape = (uriStr: string): string => {\n return encodeURIComponent(uriStr).replace(/[!'()*]/g, encodeAsHex);\n};\n\nconst uriResourceEscape = (string: string): string => {\n return uriEscape(string).replace(/%2F/g, '/');\n};\n\n/**\n * S3 class for interacting with S3-compatible object storage services.\n * This class provides methods for common S3 operations such as uploading, downloading,\n * and deleting objects, as well as multipart uploads.\n *\n * @class\n * @example\n * const s3 = new S3({\n * accessKeyId: 'your-access-key',\n * secretAccessKey: 'your-secret-key',\n * endpoint: 'https://your-s3-endpoint.com',\n * bucketName: 'your-bucket-name',\n * region: 'us-east-1' // by default is auto\n * });\n *\n * // Upload a file\n * await s3.put('example.txt', 'Hello, World!');\n *\n * // Download a file\n * const content = await s3.get('example.txt');\n *\n * // Delete a file\n * await s3.delete('example.txt');\n */\nclass S3 {\n /**\n * Creates an instance of the S3 class.\n *\n * @constructor\n * @param {Object} config - Configuration options for the S3 instance.\n * @param {string} config.accessKeyId - The access key ID for authentication.\n * @param {string} config.secretAccessKey - The secret access key for authentication.\n * @param {string} config.endpoint - The endpoint URL of the S3-compatible service.\n * @param {string} [config.bucketName=''] - The name of the bucket to operate on.\n * @param {string} [config.region='auto'] - The region of the S3 service.\n * @param {number} [config.maxRequestSizeInBytes=5242880] - The maximum size of a single request in bytes (minimum for AWS S3 is 5MB).\n * @param {number} [config.requestAbortTimeout=undefined] - The timeout in milliseconds after which a request should be aborted (careful on streamed requests).\n * @param {Object} [config.logger=null] - A logger object with methods like info, warn, error.\n * @throws {TypeError} Will throw an error if required parameters are missing or of incorrect type.\n */\n private accessKeyId: string;\n private secretAccessKey: string;\n private endpoint: string;\n private bucketName: string;\n private region: string;\n private maxRequestSizeInBytes: number;\n private requestAbortTimeout?: number;\n private logger?: Logger;\n\n constructor({\n accessKeyId,\n secretAccessKey,\n endpoint,\n bucketName,\n region = 'auto',\n maxRequestSizeInBytes = MIN_MAX_REQUEST_SIZE_IN_BYTES,\n requestAbortTimeout = undefined,\n logger = undefined,\n }: S3Config) {\n this._validateConstructorParams(accessKeyId, secretAccessKey, endpoint, bucketName);\n this.accessKeyId = accessKeyId;\n this.secretAccessKey = secretAccessKey;\n this.endpoint = endpoint;\n this.bucketName = bucketName;\n this.region = region;\n this.maxRequestSizeInBytes = maxRequestSizeInBytes;\n this.requestAbortTimeout = requestAbortTimeout;\n this.logger = logger;\n }\n\n private _validateConstructorParams(\n accessKeyId: string,\n secretAccessKey: string,\n endpoint: string,\n bucketName: string,\n ): void {\n if (typeof accessKeyId !== 'string' || accessKeyId.trim().length === 0)\n throw new TypeError(ERROR_ACCESS_KEY_REQUIRED);\n if (typeof secretAccessKey !== 'string' || secretAccessKey.trim().length === 0)\n throw new TypeError(ERROR_SECRET_KEY_REQUIRED);\n if (typeof endpoint !== 'string' || endpoint.trim().length === 0) throw new TypeError(ERROR_ENDPOINT_REQUIRED);\n if (typeof bucketName !== 'string' || bucketName.trim().length === 0)\n throw new TypeError(ERROR_BUCKET_NAME_REQUIRED);\n }\n\n private _checkMethodHeadnGet(method: string): void {\n if (method !== 'GET' && method !== 'HEAD') {\n this._log('error', `${ERROR_PREFIX}method must be either GET or HEAD`);\n throw new Error('method must be either GET or HEAD');\n }\n }\n\n private _checkKey(key: string): void {\n if (typeof key !== 'string' || key.trim().length === 0) {\n this._log('error', ERROR_KEY_REQUIRED);\n throw new TypeError(ERROR_KEY_REQUIRED);\n }\n }\n\n private _checkDelimiter(delimiter: string): void {\n if (typeof delimiter !== 'string' || delimiter.trim().length === 0) {\n this._log('error', ERROR_DELIMITER_REQUIRED);\n throw new TypeError(ERROR_DELIMITER_REQUIRED);\n }\n }\n\n private _checkPrefix(prefix: string): void {\n if (typeof prefix !== 'string') {\n this._log('error', ERROR_PREFIX_TYPE);\n throw new TypeError(ERROR_PREFIX_TYPE);\n }\n }\n\n private _checkMaxKeys(maxKeys: number): void {\n if (typeof maxKeys !== 'number' || maxKeys <= 0) {\n this._log('error', ERROR_MAX_KEYS_TYPE);\n throw new TypeError(ERROR_MAX_KEYS_TYPE);\n }\n }\n\n private _checkOpts(opts: Record): void {\n if (typeof opts !== 'object') {\n this._log('error', `${ERROR_PREFIX}opts must be an object`);\n throw new TypeError(`${ERROR_PREFIX}opts must be an object`);\n }\n }\n\n /**\n * Internal method to log messages with sanitized sensitive information.\n * @param {string} level - The log level (e.g., 'info', 'warn', 'error').\n * @param {string} message - The message to log.\n * @param {Object} [additionalData={}] - Additional data to include in the log.\n * @private\n */\n private _log(\n level: 'info' | 'warn' | 'error',\n message: string,\n additionalData: Record | string = {},\n ): void {\n if (this.logger && typeof this.logger[level] === 'function') {\n // Function to recursively sanitize an object\n const sanitize = (obj: any): any => {\n if (typeof obj !== 'object' || obj === null) {\n return obj;\n }\n return Object.keys(obj).reduce(\n (acc: any, key) => {\n if (SENSITIVE_KEYS_REDACTED.includes(key.toLowerCase())) {\n acc[key] = '[REDACTED]';\n } else if (typeof obj[key] === 'object' && obj[key] !== null) {\n acc[key] = sanitize(obj[key]);\n } else {\n acc[key] = obj[key];\n }\n return acc;\n },\n Array.isArray(obj) ? [] : {},\n );\n };\n\n // Sanitize the additional data\n const sanitizedData = sanitize(additionalData);\n // Prepare the log entry\n const logEntry = {\n timestamp: new Date().toISOString(),\n level,\n message,\n ...sanitizedData,\n // Include some general context, but sanitize sensitive parts\n context: sanitize({\n bucketName: this.bucketName,\n region: this.region,\n endpoint: this.endpoint,\n // Only include the first few characters of the access key, if it exists\n accessKeyId: this.accessKeyId ? `${this.accessKeyId.substring(0, 4)}...` : undefined,\n }),\n };\n\n // Log the sanitized entry\n this.logger[level](logEntry);\n }\n }\n\n getBucketName = () => this.bucketName;\n setBucketName = (bucketName: string) => {\n this.bucketName = bucketName;\n };\n getRegion = () => this.region;\n setRegion = (region: string) => {\n this.region = region;\n };\n getEndpoint = () => this.endpoint;\n setEndpoint = (endpoint: string) => {\n this.endpoint = endpoint;\n };\n getMaxRequestSizeInBytes = () => this.maxRequestSizeInBytes;\n setMaxRequestSizeInBytes = (maxRequestSizeInBytes: number) => {\n this.maxRequestSizeInBytes = maxRequestSizeInBytes;\n };\n\n getProps = () => ({\n accessKeyId: this.accessKeyId,\n secretAccessKey: this.secretAccessKey,\n region: this.region,\n bucket: this.bucketName,\n endpoint: this.endpoint,\n maxRequestSizeInBytes: this.maxRequestSizeInBytes,\n requestAbortTimeout: this.requestAbortTimeout,\n logger: this.logger,\n });\n setProps = (props: S3Config) => {\n this._validateConstructorParams(props.accessKeyId, props.secretAccessKey, props.bucketName, props.endpoint);\n this.accessKeyId = props.accessKeyId;\n this.secretAccessKey = props.secretAccessKey;\n this.region = props.region || 'auto';\n this.bucketName = props.bucketName;\n this.endpoint = props.endpoint;\n this.maxRequestSizeInBytes = props.maxRequestSizeInBytes || MIN_MAX_REQUEST_SIZE_IN_BYTES;\n this.requestAbortTimeout = props.requestAbortTimeout;\n this.logger = props.logger;\n };\n\n /**\n * Get the content length of an object.\n * @param {string} key - The key of the object.\n * @returns {Promise} The content length of the object in bytes.\n * @throws {TypeError} If the key is not a non-empty string.\n */\n async getContentLength(key: string): Promise {\n this._checkKey(key);\n const headers = {\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('HEAD', encodedKey, {}, headers, '');\n const res = await this._sendRequest(url, 'HEAD', signedHeaders);\n const contentLength = res.headers.get(HEADER_CONTENT_LENGTH);\n return contentLength ? parseInt(contentLength, 10) : 0;\n }\n\n /**\n * Check if a bucket exists.\n * @returns {Promise} True if the bucket exists, false otherwise.\n */\n async bucketExists(): Promise {\n const headers = {\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n const { url, headers: signedHeaders } = await this._sign('HEAD', '', {}, headers, '');\n const res = await this._sendRequest(url, 'HEAD', signedHeaders);\n if (res.ok && res.status === 200) {\n return true;\n }\n return false;\n }\n\n // TBD\n // async createBucket(bucketName) {\n // const xmlBody = `\n // \n // \n // ${this.region}\n // \n // `;\n // const headers = {\n // [HEADER_CONTENT_TYPE]: XML_CONTENT_TYPE,\n // [HEADER_CONTENT_LENGTH]: Buffer.byteLength(xmlBody).toString(),\n // [HEADER_AMZ_CONTENT_SHA256]: await _hash(xmlBody),\n // };\n // const encodedKey = encodeURI(bucketName);\n // const { url, headers: signedHeaders } = await this._sign('PUT', encodedKey, {}, headers, '');\n // const res = await this._sendRequest(url, 'PUT', signedHeaders);\n // if (res.ok && res.status === 200) {\n // return true;\n // }\n // return false;\n // }\n\n /**\n * Check if a file exists in the bucket.\n * @param {string} key - The key of the object.\n * @returns {Promise} True if the file exists, false otherwise.\n * @throws {TypeError} If the key is not a non-empty string.\n */\n async fileExists(key: string): Promise {\n this._checkKey(key);\n const headers = { [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('HEAD', encodedKey, {}, headers, '');\n try {\n const res = await fetch(url, {\n method: 'HEAD',\n headers: signedHeaders,\n });\n if (res.ok && res.status === 200) return true;\n else if (res.status === 404) return false;\n else this._handleErrorResponse(res);\n return false;\n } catch (error: unknown) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n this._log('error', `${ERROR_PREFIX}Failed to check if file exists: ${errorMessage}`);\n throw new Error(`${ERROR_PREFIX}Failed to check if file exists: ${errorMessage}`);\n }\n }\n async _sign(\n method: HttpMethod,\n keyPath: string,\n query: Object,\n headers: Record,\n body: string | Buffer,\n ): Promise<{ url: string; headers: Record }> {\n const datetime = new Date().toISOString().replace(/[:-]|\\.\\d{3}/g, '');\n const url =\n typeof keyPath === 'string' && keyPath.length > 0 ? new URL(keyPath, this.endpoint) : new URL(this.endpoint);\n url.pathname = `/${encodeURI(this.bucketName)}${url.pathname}`;\n headers[HEADER_AMZ_CONTENT_SHA256] = body ? await _hash(body) : UNSIGNED_PAYLOAD;\n headers[HEADER_AMZ_DATE] = datetime;\n headers[HEADER_HOST] = url.host;\n const canonicalHeaders = this._buildCanonicalHeaders(headers);\n const signedHeaders = Object.keys(headers)\n .map(key => key.toLowerCase())\n .sort()\n .join(';');\n\n const canonicalRequest = await this._buildCanonicalRequest(\n method,\n url,\n query,\n canonicalHeaders,\n signedHeaders,\n body,\n );\n const stringToSign = await this._buildStringToSign(datetime, canonicalRequest);\n const signature = await this._calculateSignature(datetime, stringToSign);\n const authorizationHeader = this._buildAuthorizationHeader(datetime, signedHeaders, signature);\n headers[HEADER_AUTHORIZATION] = authorizationHeader;\n return { url: url.toString(), headers };\n }\n\n _buildCanonicalHeaders(headers: Record): string {\n return Object.entries(headers)\n .map(([key, value]) => `${key.toLowerCase()}:${String(value).trim()}`)\n .sort()\n .join('\\n');\n }\n\n async _buildCanonicalRequest(\n method: HttpMethod,\n url: URL,\n query: Object,\n canonicalHeaders: string,\n signedHeaders: string,\n body: string | Buffer,\n ): Promise {\n return [\n method,\n url.pathname,\n this._buildCanonicalQueryString(query),\n `${canonicalHeaders}\\n`,\n signedHeaders,\n body ? await _hash(body) : UNSIGNED_PAYLOAD,\n ].join('\\n');\n }\n\n async _buildStringToSign(datetime: string, canonicalRequest: string): Promise {\n const credentialScope = [datetime.slice(0, 8), this.region, S3_SERVICE, AWS_REQUEST_TYPE].join('/');\n return [AWS_ALGORITHM, datetime, credentialScope, await _hash(canonicalRequest)].join('\\n');\n }\n\n async _calculateSignature(datetime: string, stringToSign: string): Promise {\n const signingKey = await this._getSignatureKey(datetime.slice(0, 8));\n return _hmac(signingKey, stringToSign, 'hex');\n }\n\n _buildAuthorizationHeader(datetime: string, signedHeaders: string, signature: string): string {\n const credentialScope = [datetime.slice(0, 8), this.region, S3_SERVICE, AWS_REQUEST_TYPE].join('/');\n return [\n `${AWS_ALGORITHM} Credential=${this.accessKeyId}/${credentialScope}`,\n `SignedHeaders=${signedHeaders}`,\n `Signature=${signature}`,\n ].join(', ');\n }\n\n /**\n * List objects in the bucket.\n * @param {string} [delimiter='/'] - The delimiter to use for grouping objects in specific path.\n * @param {string} [prefix=''] - The prefix to filter objects in specific path.\n * @param {number} [maxKeys=1000] - The maximum number of keys to return.\n * @param {string} [method='GET'] - The HTTP method to use (GET or HEAD).\n * @param {Object} [opts={}] - Additional options for the list operation.\n * @returns {Promise} The list of objects or object metadata.\n * @throws {TypeError} If any of the parameters are of incorrect type.\n */\n async list(\n delimiter: string = '/',\n prefix: string = '',\n maxKeys: number = 1000,\n method: HttpMethod = 'GET',\n opts: Object = {},\n ): Promise> {\n this._checkDelimiter(delimiter);\n this._checkPrefix(prefix);\n this._checkMaxKeys(maxKeys);\n this._checkMethodHeadnGet(method);\n this._checkOpts(opts);\n this._log('info', `Listing objects in ${prefix}`);\n\n const query = {\n 'list-type': LIST_TYPE,\n 'max-keys': String(maxKeys),\n ...opts,\n } as { [key: string]: any };\n if (prefix.length > 0) {\n query['prefix'] = prefix;\n }\n const headers = {\n [HEADER_CONTENT_TYPE]: JSON_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n const encodedKey = delimiter === '/' ? delimiter : uriEscape(delimiter);\n const { url, headers: signedHeaders } = await this._sign('GET', encodedKey, query, headers, '');\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n const res = await this._sendRequest(urlWithQuery, 'GET', signedHeaders);\n const responseBody = await res.text();\n\n if (method === 'HEAD') {\n const contentLength = res.headers.get(HEADER_CONTENT_LENGTH);\n const lastModified = res.headers.get(HEADER_LAST_MODIFIED);\n const etag = res.headers.get(HEADER_ETAG);\n\n return {\n size: contentLength ? +contentLength : undefined,\n mtime: lastModified ? new Date(lastModified) : undefined,\n ETag: etag || undefined,\n };\n }\n\n const data = _parseXml(responseBody);\n const output = data.listBucketResult || data.error || data;\n return output.contents || output;\n }\n\n /**\n * List multipart uploads in the bucket.\n * @param {string} [delimiter='/'] - The delimiter to use for grouping objects in specific path.\n * @param {string} [prefix=''] - The prefix to filter objects in specific path.\n * @param {string} [method='GET'] - The HTTP method to use (GET or HEAD).\n * @param {Object} [opts={}] - Additional options for the list operation.\n * @returns {Promise} The list of objects or object metadata.\n * @throws {TypeError} If any of the parameters are of incorrect type.\n */\n async listMultiPartUploads(\n delimiter: string = '/',\n prefix: string = '',\n method: HttpMethod = 'GET',\n opts: Object = {},\n ): Promise {\n this._checkDelimiter(delimiter);\n this._checkPrefix(prefix);\n this._checkMethodHeadnGet(method);\n this._checkOpts(opts);\n this._log('info', `Listing multipart uploads in ${prefix}`);\n\n const query = {\n uploads: '',\n ...opts,\n } as Record;\n const headers = {\n [HEADER_CONTENT_TYPE]: JSON_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n const encodedKey = delimiter === '/' ? delimiter : uriEscape(delimiter);\n const { url, headers: signedHeaders } = await this._sign('GET', encodedKey, query, headers, '');\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n const res = await this._sendRequest(urlWithQuery, 'GET', signedHeaders);\n const responseBody = await res.text();\n\n if (method === 'HEAD') {\n return {\n size: +(res.headers.get(HEADER_CONTENT_LENGTH) ?? '0'),\n mtime: new Date(res.headers.get(HEADER_LAST_MODIFIED) ?? ''),\n ETag: res.headers.get(HEADER_ETAG) ?? '',\n };\n }\n\n const data = _parseXml(responseBody);\n const output = data.listMultipartUploadsResult || data.error || data;\n return output.uploads || output;\n }\n\n /**\n * Get an object from the bucket.\n * @param {string} key - The key of the object to get.\n * @param {Object} [opts={}] - Additional options for the get operation.\n * @returns {Promise} The content of the object.\n */\n async get(key: string, opts: Record = {}): Promise {\n this._checkKey(key);\n this._log('info', `Getting object ${key}`);\n\n const headers = {\n [HEADER_CONTENT_TYPE]: JSON_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('GET', encodedKey, opts, headers, '');\n const res = await this._sendRequest(url, 'GET', signedHeaders);\n return res.text();\n }\n\n /**\n * Get a response of an object from the bucket.\n * @param {string} key - The key of the object to get.\n * @param {boolean} [wholeFile=true] - Whether to get the whole file or a part.\n * @param {number} [rangeFrom=0] - The range from to get if not getting the whole file.\n * @param {number} [rangeTo=this.maxRequestSizeInBytes] - The range to to get if not getting the whole file. Note: rangeTo is inclusive.\n * @param {Object} [opts={}] - Additional options for the get operation.\n * @returns {Promise} Response of the object content. Use readableStream() to get the stream from .body.\n */\n async getResponse(\n key: string,\n wholeFile: boolean = true,\n rangeFrom: number = 0,\n rangeTo: number = this.maxRequestSizeInBytes,\n opts: Record = {},\n ): Promise {\n this._checkKey(key);\n const query = opts;\n const headers = {\n [HEADER_CONTENT_TYPE]: JSON_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n ...(wholeFile ? {} : { range: `bytes=${rangeFrom}-${rangeTo - 1}` }),\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('GET', encodedKey, query, headers, '');\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n\n return this._sendRequest(urlWithQuery, 'GET', signedHeaders);\n }\n\n /**\n * Put an object into the bucket.\n * @param {string} key - The key of the object to put. To create a folder, include a trailing slash.\n * @param {Buffer|string} data - The content of the object to put.\n * @returns {Promise} The response from the put operation.\n * @throws {TypeError} If the key is not a non-empty string or data is not a Buffer or string.\n */\n async put(key: string, data: string | Buffer): Promise {\n this._checkKey(key);\n if (!(data instanceof Buffer || typeof data === 'string')) {\n this._log('error', ERROR_DATA_BUFFER_REQUIRED);\n throw new TypeError(ERROR_DATA_BUFFER_REQUIRED);\n }\n // const encodedKey = encodeURIComponent(key);\n this._log('info', `Uploading object ${key}`);\n const contentLength = typeof data === 'string' ? Buffer.byteLength(data) : data.length;\n const headers = {\n [HEADER_CONTENT_LENGTH]: contentLength,\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('PUT', encodedKey, {}, headers, data);\n const res = await this._sendRequest(url, 'PUT', signedHeaders, data);\n return res;\n }\n\n /**\n * Initiate a multipart upload.\n * @param {string} key - The key of the object to upload.\n * @param {string} [fileType='application/octet-stream'] - The MIME type of the file.\n * @returns {Promise} The upload ID for the multipart upload.\n * @throws {TypeError} If the key is not a non-empty string or fileType is not a string.\n * @throws {Error} If the multipart upload initiation fails.\n */\n async getMultipartUploadId(key: string, fileType: string = DEFAULT_STREAM_CONTENT_TYPE): Promise {\n this._checkKey(key);\n if (typeof fileType !== 'string') {\n this._log('error', `${ERROR_PREFIX}fileType must be a string`);\n throw new TypeError(`${ERROR_PREFIX}fileType must be a string`);\n }\n this._log('info', `Initiating multipart upload for object ${key}`);\n const query = { uploads: '' };\n const headers = {\n [HEADER_CONTENT_TYPE]: fileType,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('POST', encodedKey, query, headers, '');\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n\n const res = await this._sendRequest(urlWithQuery, 'POST', signedHeaders);\n const responseBody = await res.text();\n const parsedResponse = _parseXml(responseBody);\n\n if (\n typeof parsedResponse === 'object' &&\n parsedResponse !== null &&\n 'error' in parsedResponse &&\n typeof parsedResponse.error === 'object' &&\n parsedResponse.error !== null &&\n 'message' in parsedResponse.error\n ) {\n const errorMessage = String(parsedResponse.error.message);\n this._log('error', `${ERROR_PREFIX}Failed to abort multipart upload: ${errorMessage}`);\n throw new Error(`${ERROR_PREFIX}Failed to abort multipart upload: ${errorMessage}`);\n }\n\n if (typeof parsedResponse === 'object' && parsedResponse !== null) {\n if (!parsedResponse.initiateMultipartUploadResult || !parsedResponse.initiateMultipartUploadResult.uploadId) {\n this._log('error', `${ERROR_PREFIX}Failed to create multipart upload: no uploadId in response`);\n throw new Error(`${ERROR_PREFIX}Failed to create multipart upload: Missing upload ID in response`);\n }\n\n return parsedResponse.initiateMultipartUploadResult.uploadId;\n } else {\n this._log('error', `${ERROR_PREFIX}Failed to create multipart upload: unexpected response format`);\n throw new Error(`${ERROR_PREFIX}Failed to create multipart upload: Unexpected response format`);\n }\n }\n\n /**\n * Upload a part in a multipart upload.\n * @param {string} key - The key of the object being uploaded.\n * @param {Buffer|string} data - The content of the part.\n * @param {string} uploadId - The upload ID of the multipart upload.\n * @param {number} partNumber - The part number.\n * @param {Object} [opts={}] - Additional options for the upload.\n * @returns {Promise} The ETag and part number of the uploaded part.\n * @throws {TypeError} If any of the parameters are of incorrect type.\n */\n async uploadPart(\n key: string,\n data: Buffer | string,\n uploadId: string,\n partNumber: number,\n opts: Object = {},\n ): Promise {\n this._validateUploadPartParams(key, data, uploadId, partNumber, opts);\n const query = { uploadId, partNumber, ...opts } as { [key: string]: any };\n const headers = {\n [HEADER_CONTENT_LENGTH]: data.length,\n } as { [key: string]: any };\n\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('PUT', encodedKey, query, headers, data);\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n\n const res = await this._sendRequest(urlWithQuery, 'PUT', signedHeaders, data);\n const ETag = res.headers.get('etag') || '';\n return { partNumber, ETag };\n }\n\n _validateUploadPartParams(key: string, data: Buffer | string, uploadId: string, partNumber: number, opts: Object) {\n this._checkKey(key);\n if (!(data instanceof Buffer || typeof data === 'string')) {\n this._log('error', ERROR_DATA_BUFFER_REQUIRED);\n throw new TypeError(ERROR_DATA_BUFFER_REQUIRED);\n }\n if (typeof uploadId !== 'string' || uploadId.trim().length === 0) {\n this._log('error', ERROR_UPLOAD_ID_REQUIRED);\n throw new TypeError(ERROR_UPLOAD_ID_REQUIRED);\n }\n if (!Number.isInteger(partNumber) || partNumber <= 0) {\n this._log('error', `${ERROR_PREFIX}partNumber must be a positive integer`);\n throw new TypeError(`${ERROR_PREFIX}partNumber must be a positive integer`);\n }\n this._checkOpts(opts);\n }\n\n /**\n * Complete a multipart upload.\n * @param {string} key - The key of the object being uploaded.\n * @param {string} uploadId - The upload ID of the multipart upload.\n * @param {Array} parts - An array of objects containing PartNumber and ETag for each part.\n * @returns {Promise} The result of the complete multipart upload operation.\n * @throws {TypeError} If any of the parameters are of incorrect type.\n * @throws {Error} If the complete multipart upload operation fails.\n */\n async completeMultipartUpload(\n key: string,\n uploadId: string,\n parts: Array,\n ): Promise {\n this._checkKey(key);\n if (typeof uploadId !== 'string' || uploadId.trim().length === 0) {\n this._log('error', ERROR_UPLOAD_ID_REQUIRED);\n throw new TypeError(ERROR_UPLOAD_ID_REQUIRED);\n }\n if (!Array.isArray(parts) || parts.length === 0) {\n this._log('error', ERROR_PARTS_REQUIRED);\n throw new TypeError(ERROR_PARTS_REQUIRED);\n }\n if (!parts.every(part => typeof part.partNumber === 'number' && typeof part.ETag === 'string')) {\n this._log('error', ERROR_INVALID_PART);\n throw new TypeError(ERROR_INVALID_PART);\n }\n this._log('info', `Complete multipart upload ${uploadId} for object ${key}`);\n const query = { uploadId };\n const xmlBody = this._buildCompleteMultipartUploadXml(parts);\n const headers = {\n [HEADER_CONTENT_TYPE]: XML_CONTENT_TYPE,\n [HEADER_CONTENT_LENGTH]: Buffer.byteLength(xmlBody).toString(),\n [HEADER_AMZ_CONTENT_SHA256]: await _hash(xmlBody),\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('POST', encodedKey, query, headers, xmlBody);\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n\n const res = await this._sendRequest(urlWithQuery, 'POST', signedHeaders, xmlBody);\n const responseBody = await res.text();\n const parsedResponse = _parseXml(responseBody);\n\n if (\n typeof parsedResponse === 'object' &&\n parsedResponse !== null &&\n 'error' in parsedResponse &&\n typeof parsedResponse.error === 'object' &&\n parsedResponse.error !== null &&\n 'message' in parsedResponse.error\n ) {\n const errorMessage = String(parsedResponse.error.message);\n this._log('error', `${ERROR_PREFIX}Failed to abort multipart upload: ${errorMessage}`);\n throw new Error(`${ERROR_PREFIX}Failed to abort multipart upload: ${errorMessage}`);\n }\n\n return parsedResponse.completeMultipartUploadResult;\n }\n\n /**\n * Aborts a multipart upload.\n * @param {string} key - The key of the object being uploaded.\n * @param {string} uploadId - The ID of the multipart upload to abort.\n * @returns {Promise} - A promise that resolves to the abort response.\n * @throws {Error} If the abort operation fails.\n */\n async abortMultipartUpload(key: string, uploadId: string): Promise {\n // Input validation\n this._checkKey(key);\n if (typeof uploadId !== 'string' || uploadId.trim().length === 0) {\n this._log('error', ERROR_UPLOAD_ID_REQUIRED);\n throw new TypeError(ERROR_UPLOAD_ID_REQUIRED);\n }\n\n this._log('info', `Aborting multipart upload ${uploadId} for object ${key}`);\n\n // Prepare the request\n const query = { uploadId };\n const headers = {\n [HEADER_CONTENT_TYPE]: XML_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n\n try {\n // Sign and send the request\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('DELETE', encodedKey, query, headers, '');\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n\n const res = await this._sendRequest(urlWithQuery, 'DELETE', signedHeaders);\n\n // Check for successful response\n if (res.ok) {\n const responseBody = await res.text();\n const parsedResponse = _parseXml(responseBody);\n\n if (\n typeof parsedResponse === 'object' &&\n parsedResponse !== null &&\n 'error' in parsedResponse &&\n typeof parsedResponse.error === 'object' &&\n parsedResponse.error !== null &&\n 'message' in parsedResponse.error\n ) {\n const errorMessage = String(parsedResponse.error.message);\n this._log('error', `${ERROR_PREFIX}Failed to abort multipart upload: ${errorMessage}`);\n throw new Error(`${ERROR_PREFIX}Failed to abort multipart upload: ${errorMessage}`);\n }\n\n return {\n status: 'Aborted',\n key,\n uploadId,\n response: parsedResponse,\n };\n } else {\n this._log('error', `${ERROR_PREFIX}Abort request failed with status ${res.status}`);\n throw new Error(`${ERROR_PREFIX}Abort request failed with status ${res.status}`);\n }\n } catch (error: unknown) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n this._log('error', `${ERROR_PREFIX}Failed to abort multipart upload for key ${key}: ${errorMessage}`);\n throw new Error(`${ERROR_PREFIX}Failed to abort multipart upload for key ${key}: ${errorMessage}`);\n }\n }\n\n _buildCompleteMultipartUploadXml(parts: Array): string {\n return `\n \n ${parts\n .map(\n part => `\n \n ${part.partNumber}\n ${part.ETag}\n \n `,\n )\n .join('')}\n \n `;\n }\n\n /**\n * Delete an object from the bucket.\n * @param {string} key - The key of the object to delete.\n * @returns {Promise} The response from the delete operation.\n */\n async delete(key: string): Promise {\n this._checkKey(key);\n this._log('info', `Deleting object ${key}`);\n const headers = {\n [HEADER_CONTENT_TYPE]: JSON_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('DELETE', encodedKey, {}, headers, '');\n const res = await this._sendRequest(url, 'DELETE', signedHeaders);\n return res.text();\n }\n\n async _sendRequest(\n url: string,\n method: HttpMethod,\n headers: Record,\n body?: string | Buffer,\n ): Promise {\n this._log('info', `Sending ${method} request to ${url}, headers: ${JSON.stringify(headers)}`);\n const res = await fetch(url, {\n method,\n headers,\n body,\n signal: this.requestAbortTimeout !== undefined ? AbortSignal.timeout(this.requestAbortTimeout) : undefined,\n });\n\n if (!res.ok) {\n await this._handleErrorResponse(res);\n }\n\n return res;\n }\n\n async _handleErrorResponse(res: Response) {\n const errorBody = await res.text();\n const errorCode = res.headers.get('x-amz-error-code') || 'Unknown';\n const errorMessage = res.headers.get('x-amz-error-message') || res.statusText;\n this._log(\n 'error',\n `${ERROR_PREFIX}Request failed with status ${res.status}: ${errorCode} - ${errorMessage},err body: ${errorBody}`,\n );\n throw new Error(\n `${ERROR_PREFIX}Request failed with status ${res.status}: ${errorCode} - ${errorMessage}, err body: ${errorBody}`,\n );\n }\n\n _buildCanonicalQueryString(queryParams: Object): string {\n if (Object.keys(queryParams).length < 1) {\n return '';\n }\n\n return Object.keys(queryParams)\n .sort()\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent((queryParams as Record)[key])}`)\n .join('&');\n }\n async _getSignatureKey(dateStamp: string): Promise {\n const kDate = await _hmac(`AWS4${this.secretAccessKey}`, dateStamp);\n const kRegion = await _hmac(kDate, this.region);\n const kService = await _hmac(kRegion, S3_SERVICE);\n return _hmac(kService, AWS_REQUEST_TYPE);\n }\n}\n\nconst _hash = async (content: string | Buffer): Promise => {\n const hashSum = _createHash('sha256');\n hashSum.update(content);\n return hashSum.digest('hex');\n};\n\nconst _hmac = async (key: string | Buffer, content: string, encoding?: 'hex'): Promise => {\n const hmacSum = _createHmac('sha256', key);\n hmacSum.update(content);\n return hmacSum.digest(encoding);\n};\n\nconst _parseXml = (str: string): string | object | any => {\n const unescapeXml = (value: string): string => {\n return value\n .replace(/"/g, '\"')\n .replace(/'/g, \"'\")\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/&/g, '&');\n };\n\n const json = {};\n const re = /<(\\w)([-\\w]+)(?:\\/|[^>]*>((?:(?!<\\1)[\\s\\S])*)<\\/\\1\\2)>/gm;\n let match;\n\n while ((match = re.exec(str))) {\n const [, prefix, key, value] = match;\n const fullKey = prefix.toLowerCase() + key;\n const parsedValue = value != null ? _parseXml(value) : true;\n\n if (typeof parsedValue === 'string') {\n (json as { [key: string]: any })[fullKey] = unescapeXml(parsedValue);\n } else if (Array.isArray((json as { [key: string]: any })[fullKey])) {\n (json as { [key: string]: any })[fullKey].push(parsedValue);\n } else {\n (json as { [key: string]: any })[fullKey] =\n (json as { [key: string]: any })[fullKey] != null\n ? [(json as { [key: string]: any })[fullKey], parsedValue]\n : expectArray[fullKey]\n ? [parsedValue]\n : parsedValue;\n }\n }\n\n return Object.keys(json).length ? json : unescapeXml(str);\n};\n\nexport { S3 };\nexport default S3;\n", "'use strict';\n\nimport { S3 } from 'ultralight-s3';\nimport avro from 'avro-js'; // eslint-disable-line\nimport {\n\tlowstorage_ERROR_CODES,\n\tlowstorageError,\n\tCollectionNotFoundError,\n\tSchemaValidationError,\n\tDocumentValidationError,\n\tS3OperationError,\n} from './errors.js';\nimport { matchesQuery, generateUUID, inferAvroType } from './helpers.js';\n\nconst MODULE_NAME = 'lowstorage';\nconst DEFAULT_DELIMITER = '/';\nconst PROJECT_DIR_PREFIX = 'lowstorage';\nconst SCHEMA_SUFFIX = '.avro';\nconst CHUNG_1MB = 1024 * 1024;\nconst CHUNG_5MB = 5 * CHUNG_1MB;\n\n// code / description\n// init of new collection is automatically creating it in the bucket\n// there is optional (opt-in) switch to create new collections in bucket\n// if the schema is not provided, it will create empty buffer and save it\n// if the schema is provided, it will save it in memory and use it for all ops\n// if the schema is updated, it will save it in memory and use it for all ops\n// exposed functions are:\n// listCollections \u2705\n// collectionExists \u2705\n// createCollection \u2705\n// removeCollection \u2705\n// renameCollection \u2705\n// updateCollectionSchema \u274C\n// collection \u2705\n// s3 \u2705\n\n// Operations over collections are:\n// insert \u2705\n// find \u2705\n// findOne \u2705\n// update \u2705\n// updateOne \u2705\n// delete \u2705\n// count \u2705\n\n// Errors:\n// lowstorageError \u2705\n// CollectionNotFoundError \u2705\n// SchemaValidationError \u2705\n// DocumentValidationError \u2705\n// S3OperationError \u2705\n\nclass lowstorage {\n\tconstructor(\n\t\toptions = {\n\t\t\taccessKeyId: undefined,\n\t\t\tsecretAccessKey: undefined,\n\t\t\tendpoint: undefined,\n\t\t\tbucketName: undefined,\n\t\t\tregion: 'auto',\n\t\t\tlogger: null,\n\t\t\tdirPrefix: PROJECT_DIR_PREFIX,\n\t\t},\n\t) {\n\t\tthis._checkArgs(options);\n\t\tthis._schemas = new Map();\n\t\tthis._s3 = new S3(options);\n\t\tthis._dirPrefix = options.dirPrefix || PROJECT_DIR_PREFIX;\n\t\tthis._avro = avro;\n\t}\n\n\t_checkArgs = (args) => {\n\t\tconst requiredFields = ['accessKeyId', 'secretAccessKey', 'endpoint', 'bucketName'];\n\t\tfor (const field of requiredFields) {\n\t\t\tif (!args[field]) {\n\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: ${field} is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n\t\t\t}\n\t\t}\n\t};\n\n\t_hasColName = (colName) => {\n\t\tif (colName.trim() === '' || colName === null || typeof colName === 'undefined') {\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Collection name is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n\t\t}\n\t};\n\n\tasync listCollections() {\n\t\ttry {\n\t\t\tconst listed = await this._s3.list(DEFAULT_DELIMITER, this._dirPrefix);\n\t\t\tif (typeof listed === 'object' && listed !== null && listed.keyCount === '0') return [];\n\t\t\t// remove the delimiter from the key\n\t\t\treturn listed.map((entry) => entry.key.slice(this._dirPrefix.length + 1, -SCHEMA_SUFFIX.length));\n\t\t} catch (error) {\n\t\t\tthrow new S3OperationError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t}\n\t}\n\n\tasync collectionExists(colName) {\n\t\ttry {\n\t\t\tthis._hasColName(colName);\n\t\t\tconst exists = await this._s3.fileExists(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${SCHEMA_SUFFIX}`);\n\t\t\treturn exists;\n\t\t} catch (error) {\n\t\t\tif (error.message.includes('Not Found')) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND);\n\t\t}\n\t}\n\n\tasync createCollection(colName, schema, data = []) {\n\t\ttry {\n\t\t\tthis._hasColName(colName);\n\t\t\tconst exists = await this.collectionExists(colName);\n\t\t\tif (!exists) {\n\t\t\t\tawait this._s3.put(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${SCHEMA_SUFFIX}`, data.length > 0 ? data : '');\n\t\t\t\treturn this.collection(colName, schema);\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Collection ${colName} already exists`, lowstorage_ERROR_CODES.COLLECTION_EXISTS);\n\t\t} catch (error) {\n\t\t\tif (error instanceof lowstorageError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.CREATE_COLLECTION_ERROR);\n\t\t}\n\t}\n\n\tasync removeCollection(colName) {\n\t\ttry {\n\t\t\tthis._hasColName(colName);\n\t\t\tconst KEY = `${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${SCHEMA_SUFFIX}`;\n\t\t\tconst exists = await this.collectionExists(colName);\n\t\t\tif (exists) {\n\t\t\t\tawait this._s3.delete(KEY);\n\t\t\t\tconst exists2 = await this.collectionExists(colName);\n\t\t\t\tif (typeof exists2 === 'boolean') {\n\t\t\t\t\treturn !exists2;\n\t\t\t\t}\n\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to delete collection ${colName}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Collection ${colName} does not exist`, lowstorage_ERROR_CODES.REMOVE_COLLECTION_ERROR);\n\t\t} catch (error) {\n\t\t\tif (error instanceof S3OperationError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(\n\t\t\t\t`${MODULE_NAME}: Failed to remove collection: ${error.message}`,\n\t\t\t\tlowstorage_ERROR_CODES.REMOVE_COLLECTION_ERROR,\n\t\t\t);\n\t\t}\n\t}\n\n\tasync renameCollection(oldColName, newColName) {\n\t\ttry {\n\t\t\tthis._hasColName(oldColName);\n\t\t\tthis._hasColName(newColName);\n\t\t\tconst exists = await this.collectionExists(oldColName);\n\t\t\tif (!exists) {\n\t\t\t\tthrow new CollectionNotFoundError(\n\t\t\t\t\t`${MODULE_NAME}: Collection ${oldColName} does not exist`,\n\t\t\t\t\tlowstorage_ERROR_CODES.COLLECTION_NOT_FOUND,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst oldCol = this.collection(oldColName);\n\t\t\tconst oldColData = await oldCol._loadDataBuffer();\n\t\t\tconst success = await this.removeCollection(oldColName);\n\t\t\tif (!success) {\n\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Failed to rename collection`, lowstorage_ERROR_CODES.RENAME_COLLECTION_ERROR);\n\t\t\t}\n\t\t\treturn await this.createCollection(newColName, oldCol._avroType, oldColData);\n\t\t} catch (error) {\n\t\t\tif (error instanceof lowstorageError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(\n\t\t\t\t`${MODULE_NAME}: Rename collection failed: ${error.message}`,\n\t\t\t\tlowstorage_ERROR_CODES.RENAME_COLLECTION_ERROR,\n\t\t\t);\n\t\t}\n\t}\n\n\t// TODO: update collection schema\n\t// async updateCollectionSchema(colName, newSchema) {\n\t// \ttry {\n\t// \t\tthis._hasColName(colName);\n\t// \t\t// Check if collection exists\n\t// \t\tconst exists = await this.collectionExists(colName);\n\t// \t\tif (!exists) {\n\t// \t\t\tthrow new CollectionNotFoundError(`${MODULE_NAME}: Collection ${colName} does not exist`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND);\n\t// \t\t}\n\t// \t\tif (typeof schema === 'undefined' || schema === null) {\n\t// \t\t\tthrow new lowstorageError(`${MODULE_NAME}: Schema is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n\t// \t\t}\n\t// \t\tconst col = this.collection(colName);\n\t// \t\tconst colData = await col._loadDataBuffer();\n\t// \t\tconst avroType = this._avro.parse(schema);\n\t// \t\tthis._schemas.set(colName, avroType);\n\n\t// \t} catch (error) {\n\t// \t\tif (error instanceof S3OperationError) {\n\t// \t\t\tthrow error;\n\t// \t\t}\n\t// \t\tthrow new lowstorageError(\n\t// \t\t\t`${MODULE_NAME}: Failed to update collection schema: ${error.message}`,\n\t// \t\t\tlowstorage_ERROR_CODES.UPDATE_COLLECTION_SCHEMA_ERROR,\n\t// \t\t);\n\t// \t}\n\t// }\n\n\tasync collection(colName, schema, autoCreate = true) {\n\t\ttry {\n\t\t\tthis._hasColName(colName);\n\t\t\tif (typeof schema === 'undefined') {\n\t\t\t\t// Load schema if not in memory\n\t\t\t\tif (this._schemas.has(colName)) {\n\t\t\t\t\treturn new Collection(colName, this._s3, this._schemas.get(colName), this._dirPrefix);\n\t\t\t\t}\n\t\t\t\t// check if schema file exists\n\t\t\t\tconst exists = await this._s3.fileExists(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${SCHEMA_SUFFIX}`);\n\t\t\t\tif (exists) {\n\t\t\t\t\tconst schemaContent = await this._s3.get(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${SCHEMA_SUFFIX}`);\n\t\t\t\t\tconst avroType = this._avro.parse(schemaContent);\n\t\t\t\t\tthis._schemas.set(colName, avroType);\n\t\t\t\t\treturn new Collection(colName, this._s3, avroType, this._dirPrefix);\n\t\t\t\t}\n\t\t\t\tif (autoCreate) {\n\t\t\t\t\tthis._s3.put(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${SCHEMA_SUFFIX}`, '');\n\t\t\t\t}\n\t\t\t\treturn new Collection(colName, this._s3, undefined, this._dirPrefix);\n\t\t\t}\n\t\t\tif (autoCreate) {\n\t\t\t\tconst exists = await this._s3.fileExists(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${SCHEMA_SUFFIX}`);\n\t\t\t\tif (!exists) {\n\t\t\t\t\tawait this._s3.put(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${SCHEMA_SUFFIX}`, '');\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn new Collection(colName, this._s3, this._avro.parse(schema), this._dirPrefix);\n\t\t} catch (error) {\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND);\n\t\t}\n\t}\n\n\ts3 = () => {\n\t\treturn this._s3;\n\t};\n}\n\nclass Collection {\n\tconstructor(colName, s3, avroType = undefined, dirPrefix = PROJECT_DIR_PREFIX) {\n\t\tthis._colName = colName;\n\t\tthis._s3 = s3;\n\t\tthis._avro = avro;\n\t\tthis._avroType = avroType;\n\t\tthis._dirPrefix = dirPrefix;\n\t}\n\n\tasync insert(doc, schema = undefined) {\n\t\ttry {\n\t\t\tif (doc === undefined || doc === null) {\n\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Document is required for insert`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n\t\t\t}\n\t\t\tif (typeof doc !== 'object' && !Array.isArray(doc)) {\n\t\t\t\tthrow new DocumentValidationError(\n\t\t\t\t\t`${MODULE_NAME}: Document must be an object or an array`,\n\t\t\t\t\tlowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst items = !Array.isArray(doc) ? [doc] : doc;\n\n\t\t\tconst avroType = !!schema ? this._avro.parse(schema) : this._avroType || this._avro.parse(inferAvroType(doc));\n\n\t\t\tif (!avroType) {\n\t\t\t\tthrow new SchemaValidationError(\n\t\t\t\t\t`${MODULE_NAME}: Schema is required - Pass a schema to the insert method`,\n\t\t\t\t\tlowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthis._avroType = avroType;\n\t\t\tconst wrapperType = this._avro.parse({ type: 'array', items: this._avroType });\n\t\t\tconst bufferData = await this._loadDataBuffer();\n\t\t\tconst data = bufferData.length > 0 ? wrapperType.fromBuffer(bufferData) : [];\n\t\t\tfor (let item of items) {\n\t\t\t\tif (typeof item !== 'object' || item === null) {\n\t\t\t\t\tthrow new DocumentValidationError(\n\t\t\t\t\t\t`${MODULE_NAME}: Invalid input: input must be an object or an array of objects`,\n\t\t\t\t\t\tlowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\titem._id = item._id || (await generateUUID());\n\t\t\t\tconst valid = this._avroType.isValid(item);\n\t\t\t\tif (!valid) {\n\t\t\t\t\tthrow new DocumentValidationError(`${MODULE_NAME}: Invalid document or schema`, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR);\n\t\t\t\t}\n\t\t\t\tdata.push(item);\n\t\t\t}\n\t\t\tconst success = await this._saveDataBuffer(wrapperType.toBuffer(data));\n\t\t\tif (!success) {\n\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to insert document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t}\n\t\t\treturn items;\n\t\t} catch (error) {\n\t\t\tif (error instanceof lowstorageError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME} Insert operation failed: ${error.message}`, lowstorage_ERROR_CODES.INSERT_ERROR);\n\t\t}\n\t}\n\n\tasync _loadDataBuffer() {\n\t\ttry {\n\t\t\tconst KEY = `${this._dirPrefix}${DEFAULT_DELIMITER}${this._colName}${SCHEMA_SUFFIX}`;\n\t\t\tconst CHUNK_SIZE = this._s3.getMaxRequestSizeInBytes() || CHUNG_5MB;\n\t\t\tlet firstData = await this._s3.get(KEY);\n\t\t\tif (firstData.length < CHUNK_SIZE) {\n\t\t\t\treturn Buffer.from(firstData, 'utf8');\n\t\t\t}\n\t\t\tlet offset = CHUNK_SIZE;\n\t\t\tlet bufferArr = [Buffer.from(firstData, 'utf8')];\n\t\t\tlet repeat = true;\n\t\t\twhile (repeat) {\n\t\t\t\tconst nextDataResponse = await this._s3.getResponse(KEY, false, offset, offset + CHUNK_SIZE);\n\t\t\t\tconst nextDataBody = await nextDataResponse.text();\n\t\t\t\tbufferArr.push(Buffer.from(nextDataBody, 'utf8'));\n\t\t\t\toffset += CHUNK_SIZE;\n\t\t\t\tconst contentLength = nextDataResponse.headers.get('content-length') || nextDataBody.length;\n\t\t\t\tif (contentLength < CHUNK_SIZE) {\n\t\t\t\t\trepeat = false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn Buffer.concat(bufferArr);\n\t\t} catch (error) {\n\t\t\tif (error.toString().indexOf('status 404: Unknown - Not Found') > -1) {\n\t\t\t\treturn Buffer.from('');\n\t\t\t}\n\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to load data buffer: ${error.message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t}\n\t}\n\n\tasync _saveDataBuffer(data) {\n\t\ttry {\n\t\t\tconst KEY = `${this._dirPrefix}${DEFAULT_DELIMITER}${this._colName}${SCHEMA_SUFFIX}`;\n\t\t\tconst resp = await this._s3.put(KEY, data);\n\t\t\tif (resp.status !== 200) {\n\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to save data`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t}\n\t\t\treturn true;\n\t\t} catch (error) {\n\t\t\tif (error instanceof S3OperationError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.SAVE_DATA_ERROR);\n\t\t}\n\t}\n\n\tasync find(query = {}, options = {}) {\n\t\ttry {\n\t\t\tconst bufferData = await this._loadDataBuffer(); // load data from s3\n\t\t\tif (bufferData.length === 0) {\n\t\t\t\treturn [];\n\t\t\t}\n\t\t\tconst wrapperType = this._avro.parse({ type: 'array', items: this._avroType });\n\t\t\tconst data = bufferData.length > 0 ? wrapperType.fromBuffer(bufferData) : [];\n\t\t\tconst start = parseInt(options.skip, 10) || 0;\n\t\t\tconst end = parseInt(options.limit, 10) ? start + parseInt(options.limit, 10) : undefined;\n\t\t\tconst filteredData = data.filter((doc) => matchesQuery(doc, query)).slice(start, end);\n\t\t\treturn filteredData;\n\t\t} catch (error) {\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Find operation failed: ${error.message}`, lowstorage_ERROR_CODES.FIND_ERROR);\n\t\t}\n\t}\n\n\tasync findOne(query = {}) {\n\t\ttry {\n\t\t\tconst result = await this.find(query);\n\t\t\treturn result[0] || [];\n\t\t} catch (error) {\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: FindOne operation failed: ${error.message}`, lowstorage_ERROR_CODES.FIND_ONE_ERROR);\n\t\t}\n\t}\n\n\tasync update(query = {}, update = {}) {\n\t\ttry {\n\t\t\tif (!this._avroType) {\n\t\t\t\tthrow new SchemaValidationError(\n\t\t\t\t\t`${MODULE_NAME}: Schema is not defined for this collection`,\n\t\t\t\t\tlowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst bufferData = await this._loadDataBuffer(); // load data from s3\n\t\t\tif (bufferData.length === 0) return 0;\n\t\t\tconst wrapperType = this._avro.parse({ type: 'array', items: this._avroType });\n\t\t\tconst data = bufferData.length > 0 ? wrapperType.fromBuffer(bufferData) : [];\n\t\t\tlet updatedCount = 0;\n\n\t\t\tfor (let i = 0; i < data.length; i++) {\n\t\t\t\tif (matchesQuery(data[i], query)) {\n\t\t\t\t\tconst updatedDoc = { ...data[i], ...update };\n\t\t\t\t\tconst valid = this._avroType.isValid(updatedDoc);\n\t\t\t\t\tif (!valid) {\n\t\t\t\t\t\tthrow new DocumentValidationError(\n\t\t\t\t\t\t\t`${MODULE_NAME}: Invalid document or schema`,\n\t\t\t\t\t\t\tlowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tdata[i] = updatedDoc;\n\t\t\t\t\tupdatedCount++;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (updatedCount > 0) {\n\t\t\t\tconst success = await this._saveDataBuffer(wrapperType.toBuffer(data));\n\t\t\t\tif (!success) {\n\t\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn updatedCount;\n\t\t} catch (error) {\n\t\t\tif (error instanceof S3OperationError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Update operation failed: ${error.message}`, lowstorage_ERROR_CODES.UPDATE_ERROR);\n\t\t}\n\t}\n\n\tasync updateOne(query = {}, update = {}) {\n\t\ttry {\n\t\t\tif (!this._avroType) {\n\t\t\t\tthrow new SchemaValidationError(\n\t\t\t\t\t`${MODULE_NAME}: Schema is not defined for this collection`,\n\t\t\t\t\tlowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst bufferData = await this._loadDataBuffer(); // load data from s3\n\t\t\tif (bufferData.length === 0) return 0;\n\t\t\tconst wrapperType = this._avro.parse({ type: 'array', items: this._avroType });\n\t\t\tconst data = bufferData.length > 0 ? wrapperType.fromBuffer(bufferData) : [];\n\t\t\tconst docIndex = data.findIndex((doc) => matchesQuery(doc, query));\n\n\t\t\tif (docIndex !== -1) {\n\t\t\t\tconst updatedDoc = { ...data[docIndex], ...update };\n\t\t\t\tconst valid = this._avroType.isValid(updatedDoc);\n\t\t\t\tif (!valid) {\n\t\t\t\t\tthrow new DocumentValidationError(`${MODULE_NAME}: Invalid document or schema`, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR);\n\t\t\t\t}\n\t\t\t\tdata[docIndex] = updatedDoc;\n\t\t\t\tconst success = await this._saveDataBuffer(wrapperType.toBuffer(data));\n\t\t\t\tif (!success) {\n\t\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t\t}\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t\treturn 0;\n\t\t} catch (error) {\n\t\t\tif (error instanceof lowstorageError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: UpdateOne operation failed: ${error.message}`, lowstorage_ERROR_CODES.UPDATE_ONE_ERROR);\n\t\t}\n\t}\n\n\tasync delete(query = {}) {\n\t\ttry {\n\t\t\tconst bufferData = await this._loadDataBuffer(); // load data from s3\n\t\t\tif (bufferData.length === 0) return 0;\n\t\t\tconst wrapperType = this._avro.parse({ type: 'array', items: this._avroType });\n\t\t\tconst data = bufferData.length > 0 ? wrapperType.fromBuffer(bufferData) : [];\n\t\t\tconst initialLength = data.length;\n\t\t\tconst newData = data.filter((doc) => !matchesQuery(doc, query));\n\t\t\tconst success = await this._saveDataBuffer(wrapperType.toBuffer(newData));\n\t\t\tif (!success) {\n\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to delete document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t}\n\t\t\treturn initialLength - newData.length;\n\t\t} catch (error) {\n\t\t\tif (error instanceof S3OperationError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Delete operation failed: ${error.message}`, lowstorage_ERROR_CODES.DELETE_ERROR);\n\t\t}\n\t}\n\n\tasync count(query = {}) {\n\t\ttry {\n\t\t\tif (query === undefined || query === null) {\n\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Query is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n\t\t\t}\n\t\t\tif (Object.keys(query).length === 0) {\n\t\t\t\tconst bufferData = await this._loadDataBuffer(); // load data from s3\n\t\t\t\tif (bufferData.length === 0) return 0;\n\t\t\t\tconst wrapperType = this._avro.parse({ type: 'array', items: this._avroType });\n\t\t\t\tconst data = bufferData.length > 0 ? wrapperType.fromBuffer(bufferData) : [];\n\t\t\t\treturn data.length || null;\n\t\t\t}\n\t\t\treturn (await this.find(query)).length;\n\t\t} catch (error) {\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Count operation failed: ${error.message}`, lowstorage_ERROR_CODES.COUNT_ERROR);\n\t\t}\n\t}\n}\n\n// export default lowstorage;\nexport { lowstorage, lowstorageError, lowstorage_ERROR_CODES };\n", "'use strict';\n\nconst lowstorage_ERROR_CODES = {\n\tMISSING_ARGUMENT: 'MISSING_ARGUMENT',\n\tCOLLECTION_EXISTS: 'COLLECTION_EXISTS',\n\tCREATE_COLLECTION_ERROR: 'CREATE_COLLECTION_ERROR',\n\tRENAME_COLLECTION_ERROR: 'RENAME_COLLECTION_ERROR',\n\tREMOVE_COLLECTION_ERROR: 'REMOVE_COLLECTION_ERROR',\n\tUPDATE_COLLECTION_SCHEMA_ERROR: 'UPDATE_COLLECTION_SCHEMA_ERROR',\n\tCOLLECTION_NOT_FOUND: 'COLLECTION_NOT_FOUND',\n\tSCHEMA_VALIDATION_ERROR: 'SCHEMA_VALIDATION_ERROR',\n\tDOCUMENT_VALIDATION_ERROR: 'DOCUMENT_VALIDATION_ERROR',\n\tS3_OPERATION_ERROR: 'S3_OPERATION_ERROR',\n\tFIND_ERROR: 'FIND_ERROR',\n\tFIND_ONE_ERROR: 'FIND_ONE_ERROR',\n\tSAVE_DATA_ERROR: 'SAVE_DATA_ERROR',\n\tINSERT_ERROR: 'INSERT_ERROR',\n\tUPDATE_ERROR: 'UPDATE_ERROR',\n\tUPDATE_ONE_ERROR: 'UPDATE_ONE_ERROR',\n\tDELETE_ERROR: 'DELETE_ERROR',\n\tCOUNT_ERROR: 'COUNT_ERROR',\n\tUNKNOWN_ERROR: 'UNKNOWN_ERROR',\n};\nclass lowstorageError extends Error {\n\tconstructor(message, code = lowstorage_ERROR_CODES.UNKNOWN_ERROR) {\n\t\tsuper(`lowstorageError: ${message} :: code: ${code}`);\n\t\tthis.name = this.constructor.name;\n\t\tthis.code = code;\n\t\tError.captureStackTrace(this, this.constructor);\n\t}\n}\n\nclass CollectionNotFoundError extends lowstorageError {\n\tconstructor(collectionName) {\n\t\tsuper(`Collection ${collectionName} not found`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND);\n\t}\n}\n\nclass SchemaValidationError extends lowstorageError {\n\tconstructor(message) {\n\t\tsuper(message, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR);\n\t}\n}\n\nclass DocumentValidationError extends lowstorageError {\n\tconstructor(message) {\n\t\tsuper(message, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR);\n\t}\n}\n\nclass S3OperationError extends lowstorageError {\n\tconstructor(message, operation) {\n\t\tsuper(`S3 ${operation} operation failed: ${message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t}\n}\n\nexport {\n\tlowstorage_ERROR_CODES,\n\tlowstorageError,\n\tCollectionNotFoundError,\n\tSchemaValidationError,\n\tDocumentValidationError,\n\tS3OperationError,\n};\n", "'use strict';\n\nimport { randomUUID } from 'node:crypto';\n\nconst matchesQuery = (document, query) => {\n\treturn Object.keys(query).every((key) => document[key] === query[key]);\n};\n\nconst generateUUID = async () => {\n\tif (typeof randomUUID !== 'undefined' && typeof randomUUID === 'function') {\n\t\treturn randomUUID();\n\t}\n\tif (typeof crypto !== 'undefined' && typeof crypto === 'object' && typeof crypto.randomUUID === 'function') {\n\t\treturn crypto.randomUUID();\n\t}\n\treturn 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n\t\tvar r = (Math.random() * 16) | 0,\n\t\t\tv = c === 'x' ? r : (r & 0x3) | 0x8;\n\t\treturn v.toString(16);\n\t});\n};\n\nconst _getAvroType = (value, name = 'SubAutoGenerated') => {\n\tswitch (typeof value) {\n\t\tcase 'string':\n\t\t\tif (_isUUID(value)) {\n\t\t\t\treturn {\n\t\t\t\t\ttype: 'string',\n\t\t\t\t\tname: '_id',\n\t\t\t\t\tsize: 16,\n\t\t\t\t\tlogicalType: 'UUID',\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn 'string';\n\t\tcase 'number':\n\t\t\treturn Number.isInteger(value) ? 'int' : 'float';\n\t\tcase 'boolean':\n\t\t\treturn 'boolean';\n\t\tcase 'object':\n\t\t\tif (value === null) return 'null';\n\t\t\tif (Array.isArray(value)) return { type: 'array', items: _getAvroType(value[0]) };\n\t\t\treturn inferAvroType(value, name);\n\t\tdefault:\n\t\t\treturn 'string'; // Default to string for unknown types\n\t}\n};\n\nconst inferAvroType = (data, typeName = 'AutoGenerated') => {\n\tif (Array.isArray(data)) {\n\t\tdata = data[0];\n\t}\n\tconst fields = Object.entries(data).map(([name, value]) => {\n\t\treturn { name, type: _getAvroType(value, `${typeName}.${name}`) };\n\t});\n\treturn {\n\t\ttype: 'record',\n\t\tname: typeName,\n\t\tfields: fields,\n\t};\n};\n\nconst _isUUID = (str) => {\n\tconst uuidV4Regex = /^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i;\n\treturn uuidV4Regex.test(str);\n};\n\nexport { matchesQuery, generateUUID, inferAvroType };\n"], - "mappings": "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", - "names": ["_createHmac", "_createHash", "AWS_ALGORITHM", "AWS_REQUEST_TYPE", "S3_SERVICE", "LIST_TYPE", "UNSIGNED_PAYLOAD", "DEFAULT_STREAM_CONTENT_TYPE", "XML_CONTENT_TYPE", "JSON_CONTENT_TYPE", "SENSITIVE_KEYS_REDACTED", "MIN_MAX_REQUEST_SIZE_IN_BYTES", "HEADER_AMZ_CONTENT_SHA256", "HEADER_AMZ_DATE", "HEADER_HOST", "HEADER_AUTHORIZATION", "HEADER_CONTENT_TYPE", "HEADER_CONTENT_LENGTH", "HEADER_ETAG", "HEADER_LAST_MODIFIED", "ERROR_PREFIX", "ERROR_ACCESS_KEY_REQUIRED", "ERROR_SECRET_KEY_REQUIRED", "ERROR_ENDPOINT_REQUIRED", "ERROR_BUCKET_NAME_REQUIRED", "ERROR_KEY_REQUIRED", "ERROR_UPLOAD_ID_REQUIRED", "ERROR_PARTS_REQUIRED", "ERROR_INVALID_PART", "ERROR_DATA_BUFFER_REQUIRED", "ERROR_PREFIX_TYPE", "ERROR_MAX_KEYS_TYPE", "ERROR_DELIMITER_REQUIRED", "expectArray", "encodeAsHex", "c", "uriEscape", "uriStr", "uriResourceEscape", "string", "S3", "accessKeyId", "secretAccessKey", "endpoint", "bucketName", "region", "maxRequestSizeInBytes", "requestAbortTimeout", "logger", "props", "method", "key", "delimiter", "prefix", "maxKeys", "opts", "level", "message", "additionalData", "sanitize", "obj", "acc", "sanitizedData", "logEntry", "headers", "encodedKey", "url", "signedHeaders", "contentLength", "res", "error", "errorMessage", "keyPath", "query", "body", "datetime", "_hash", "canonicalHeaders", "canonicalRequest", "stringToSign", "signature", "authorizationHeader", "value", "credentialScope", "signingKey", "_hmac", "urlWithQuery", "responseBody", "lastModified", "etag", "data", "_parseXml", "output", "o", "i", "a", "_a", "_b", "_c", "wholeFile", "rangeFrom", "rangeTo", "fileType", "parsedResponse", "uploadId", "partNumber", "ETag", "parts", "part", "xmlBody", "errorBody", "errorCode", "queryParams", "dateStamp", "kDate", "kRegion", "kService", "content", "hashSum", "encoding", "hmacSum", "str", "unescapeXml", "json", "re", "match", "fullKey", "parsedValue", "avro", "lowstorage_ERROR_CODES", "lowstorageError", "message", "code", "CollectionNotFoundError", "collectionName", "SchemaValidationError", "DocumentValidationError", "S3OperationError", "operation", "randomUUID", "matchesQuery", "document", "query", "key", "generateUUID", "c", "r", "v", "_getAvroType", "value", "name", "_isUUID", "inferAvroType", "data", "typeName", "fields", "str", "MODULE_NAME", "DEFAULT_DELIMITER", "PROJECT_DIR_PREFIX", "SCHEMA_SUFFIX", "CHUNG_1MB", "CHUNG_5MB", "lowstorage", "options", "O", "avro", "args", "requiredFields", "field", "lowstorageError", "lowstorage_ERROR_CODES", "colName", "listed", "entry", "error", "S3OperationError", "schema", "data", "KEY", "exists2", "oldColName", "newColName", "CollectionNotFoundError", "oldCol", "oldColData", "autoCreate", "Collection", "schemaContent", "avroType", "s3", "dirPrefix", "doc", "DocumentValidationError", "items", "inferAvroType", "SchemaValidationError", "wrapperType", "bufferData", "item", "generateUUID", "CHUNK_SIZE", "firstData", "offset", "bufferArr", "repeat", "nextDataResponse", "nextDataBody", "query", "start", "end", "matchesQuery", "update", "updatedCount", "i", "updatedDoc", "docIndex", "initialLength", "newData"] + "sourcesContent": ["'use strict';\n\ninterface S3Config {\n accessKeyId: string;\n secretAccessKey: string;\n endpoint: string;\n bucketName: string;\n region?: string;\n maxRequestSizeInBytes?: number;\n requestAbortTimeout?: number;\n logger?: Logger;\n}\n\ndeclare global {\n interface Crypto {\n createHmac: (\n algorithm: string,\n key: string | Buffer,\n ) => {\n update: (data: string | Buffer) => void;\n digest: (encoding?: 'hex' | 'base64' | 'latin1') => string;\n };\n createHash: (algorithm: string) => {\n update: (data: string | Buffer) => void;\n digest: (encoding?: 'hex' | 'base64' | 'latin1') => string;\n };\n }\n}\n\ninterface Logger {\n info: (message: string, ...args: any[]) => void;\n warn: (message: string, ...args: any[]) => void;\n error: (message: string, ...args: any[]) => void;\n}\n\ninterface UploadPart {\n partNumber: number;\n ETag: string;\n}\n\ninterface CompleteMultipartUploadResult {\n Location: string;\n Bucket: string;\n Key: string;\n ETag: string;\n}\n\ntype HttpMethod = 'POST' | 'GET' | 'HEAD' | 'PUT' | 'DELETE';\n\nlet _createHmac = crypto.createHmac || (await import('node:crypto')).createHmac;\nlet _createHash = crypto.createHash || (await import('node:crypto')).createHash;\n\nif (typeof _createHmac === 'undefined' && typeof _createHash === 'undefined') {\n console.error(\n 'ultralight-S3 Module: Crypto functions are not available, please report the issue with necessary description: https://github.com/sentienhq/ultralight-s3/issues',\n );\n}\n\n// Constants\nconst AWS_ALGORITHM = 'AWS4-HMAC-SHA256';\nconst AWS_REQUEST_TYPE = 'aws4_request';\nconst S3_SERVICE = 's3';\nconst LIST_TYPE = '2';\nconst UNSIGNED_PAYLOAD = 'UNSIGNED-PAYLOAD';\nconst DEFAULT_STREAM_CONTENT_TYPE = 'application/octet-stream';\nconst XML_CONTENT_TYPE = 'application/xml';\nconst JSON_CONTENT_TYPE = 'application/json';\n// List of keys that might contain sensitive information\nconst SENSITIVE_KEYS_REDACTED = ['accessKeyId', 'secretAccessKey', 'sessionToken', 'password'];\nconst MIN_MAX_REQUEST_SIZE_IN_BYTES = 5 * 1024 * 1024;\n\n// Headers\nconst HEADER_AMZ_CONTENT_SHA256 = 'x-amz-content-sha256';\nconst HEADER_AMZ_DATE = 'x-amz-date';\nconst HEADER_HOST = 'host';\nconst HEADER_AUTHORIZATION = 'Authorization';\nconst HEADER_CONTENT_TYPE = 'Content-Type';\nconst HEADER_CONTENT_LENGTH = 'Content-Length';\nconst HEADER_ETAG = 'etag';\nconst HEADER_LAST_MODIFIED = 'last-modified';\n\n// Error messages\nexport const ERROR_PREFIX = 'ultralight-s3 Module: ';\nconst ERROR_ACCESS_KEY_REQUIRED = `${ERROR_PREFIX}accessKeyId must be a non-empty string`;\nconst ERROR_SECRET_KEY_REQUIRED = `${ERROR_PREFIX}secretAccessKey must be a non-empty string`;\nconst ERROR_ENDPOINT_REQUIRED = `${ERROR_PREFIX}endpoint must be a non-empty string`;\nconst ERROR_BUCKET_NAME_REQUIRED = `${ERROR_PREFIX}bucketName must be a non-empty string`;\nconst ERROR_KEY_REQUIRED = `${ERROR_PREFIX}key must be a non-empty string`;\nconst ERROR_UPLOAD_ID_REQUIRED = `${ERROR_PREFIX}uploadId must be a non-empty string`;\nconst ERROR_PARTS_REQUIRED = `${ERROR_PREFIX}parts must be a non-empty array`;\nconst ERROR_INVALID_PART = `${ERROR_PREFIX}Each part must have a partNumber (number) and ETag (string)`;\nconst ERROR_DATA_BUFFER_REQUIRED = `${ERROR_PREFIX}data must be a Buffer or string`;\n// const ERROR_PATH_REQUIRED = `${ERROR_PREFIX}path must be a string`;\nconst ERROR_PREFIX_TYPE = `${ERROR_PREFIX}prefix must be a string`;\nconst ERROR_MAX_KEYS_TYPE = `${ERROR_PREFIX}maxKeys must be a positive integer`;\nconst ERROR_DELIMITER_REQUIRED = `${ERROR_PREFIX}delimiter must be a string`;\n\nconst expectArray: { [key: string]: boolean } = {\n contents: true,\n};\n\nconst encodeAsHex = (c: string): string => `%${c.charCodeAt(0).toString(16).toUpperCase()}`;\n\nconst uriEscape = (uriStr: string): string => {\n return encodeURIComponent(uriStr).replace(/[!'()*]/g, encodeAsHex);\n};\n\nconst uriResourceEscape = (string: string): string => {\n return uriEscape(string).replace(/%2F/g, '/');\n};\n\n/**\n * S3 class for interacting with S3-compatible object storage services.\n * This class provides methods for common S3 operations such as uploading, downloading,\n * and deleting objects, as well as multipart uploads.\n *\n * @class\n * @example\n * const s3 = new S3({\n * accessKeyId: 'your-access-key',\n * secretAccessKey: 'your-secret-key',\n * endpoint: 'https://your-s3-endpoint.com',\n * bucketName: 'your-bucket-name',\n * region: 'us-east-1' // by default is auto\n * });\n *\n * // Upload a file\n * await s3.put('example.txt', 'Hello, World!');\n *\n * // Download a file\n * const content = await s3.get('example.txt');\n *\n * // Delete a file\n * await s3.delete('example.txt');\n */\nclass S3 {\n /**\n * Creates an instance of the S3 class.\n *\n * @constructor\n * @param {Object} config - Configuration options for the S3 instance.\n * @param {string} config.accessKeyId - The access key ID for authentication.\n * @param {string} config.secretAccessKey - The secret access key for authentication.\n * @param {string} config.endpoint - The endpoint URL of the S3-compatible service.\n * @param {string} [config.bucketName=''] - The name of the bucket to operate on.\n * @param {string} [config.region='auto'] - The region of the S3 service.\n * @param {number} [config.maxRequestSizeInBytes=5242880] - The maximum size of a single request in bytes (minimum for AWS S3 is 5MB).\n * @param {number} [config.requestAbortTimeout=undefined] - The timeout in milliseconds after which a request should be aborted (careful on streamed requests).\n * @param {Object} [config.logger=null] - A logger object with methods like info, warn, error.\n * @throws {TypeError} Will throw an error if required parameters are missing or of incorrect type.\n */\n private accessKeyId: string;\n private secretAccessKey: string;\n private endpoint: string;\n private bucketName: string;\n private region: string;\n private maxRequestSizeInBytes: number;\n private requestAbortTimeout?: number;\n private logger?: Logger;\n\n constructor({\n accessKeyId,\n secretAccessKey,\n endpoint,\n bucketName,\n region = 'auto',\n maxRequestSizeInBytes = MIN_MAX_REQUEST_SIZE_IN_BYTES,\n requestAbortTimeout = undefined,\n logger = undefined,\n }: S3Config) {\n this._validateConstructorParams(accessKeyId, secretAccessKey, endpoint, bucketName);\n this.accessKeyId = accessKeyId;\n this.secretAccessKey = secretAccessKey;\n this.endpoint = endpoint;\n this.bucketName = bucketName;\n this.region = region;\n this.maxRequestSizeInBytes = maxRequestSizeInBytes;\n this.requestAbortTimeout = requestAbortTimeout;\n this.logger = logger;\n }\n\n private _validateConstructorParams(\n accessKeyId: string,\n secretAccessKey: string,\n endpoint: string,\n bucketName: string,\n ): void {\n if (typeof accessKeyId !== 'string' || accessKeyId.trim().length === 0)\n throw new TypeError(ERROR_ACCESS_KEY_REQUIRED);\n if (typeof secretAccessKey !== 'string' || secretAccessKey.trim().length === 0)\n throw new TypeError(ERROR_SECRET_KEY_REQUIRED);\n if (typeof endpoint !== 'string' || endpoint.trim().length === 0) throw new TypeError(ERROR_ENDPOINT_REQUIRED);\n if (typeof bucketName !== 'string' || bucketName.trim().length === 0)\n throw new TypeError(ERROR_BUCKET_NAME_REQUIRED);\n }\n\n private _checkMethodHeadnGet(method: string): void {\n if (method !== 'GET' && method !== 'HEAD') {\n this._log('error', `${ERROR_PREFIX}method must be either GET or HEAD`);\n throw new Error('method must be either GET or HEAD');\n }\n }\n\n private _checkKey(key: string): void {\n if (typeof key !== 'string' || key.trim().length === 0) {\n this._log('error', ERROR_KEY_REQUIRED);\n throw new TypeError(ERROR_KEY_REQUIRED);\n }\n }\n\n private _checkDelimiter(delimiter: string): void {\n if (typeof delimiter !== 'string' || delimiter.trim().length === 0) {\n this._log('error', ERROR_DELIMITER_REQUIRED);\n throw new TypeError(ERROR_DELIMITER_REQUIRED);\n }\n }\n\n private _checkPrefix(prefix: string): void {\n if (typeof prefix !== 'string') {\n this._log('error', ERROR_PREFIX_TYPE);\n throw new TypeError(ERROR_PREFIX_TYPE);\n }\n }\n\n private _checkMaxKeys(maxKeys: number): void {\n if (typeof maxKeys !== 'number' || maxKeys <= 0) {\n this._log('error', ERROR_MAX_KEYS_TYPE);\n throw new TypeError(ERROR_MAX_KEYS_TYPE);\n }\n }\n\n private _checkOpts(opts: Record): void {\n if (typeof opts !== 'object') {\n this._log('error', `${ERROR_PREFIX}opts must be an object`);\n throw new TypeError(`${ERROR_PREFIX}opts must be an object`);\n }\n }\n\n /**\n * Internal method to log messages with sanitized sensitive information.\n * @param {string} level - The log level (e.g., 'info', 'warn', 'error').\n * @param {string} message - The message to log.\n * @param {Object} [additionalData={}] - Additional data to include in the log.\n * @private\n */\n private _log(\n level: 'info' | 'warn' | 'error',\n message: string,\n additionalData: Record | string = {},\n ): void {\n if (this.logger && typeof this.logger[level] === 'function') {\n // Function to recursively sanitize an object\n const sanitize = (obj: any): any => {\n if (typeof obj !== 'object' || obj === null) {\n return obj;\n }\n return Object.keys(obj).reduce(\n (acc: any, key) => {\n if (SENSITIVE_KEYS_REDACTED.includes(key.toLowerCase())) {\n acc[key] = '[REDACTED]';\n } else if (typeof obj[key] === 'object' && obj[key] !== null) {\n acc[key] = sanitize(obj[key]);\n } else {\n acc[key] = obj[key];\n }\n return acc;\n },\n Array.isArray(obj) ? [] : {},\n );\n };\n\n // Sanitize the additional data\n const sanitizedData = sanitize(additionalData);\n // Prepare the log entry\n const logEntry = {\n timestamp: new Date().toISOString(),\n level,\n message,\n ...sanitizedData,\n // Include some general context, but sanitize sensitive parts\n context: sanitize({\n bucketName: this.bucketName,\n region: this.region,\n endpoint: this.endpoint,\n // Only include the first few characters of the access key, if it exists\n accessKeyId: this.accessKeyId ? `${this.accessKeyId.substring(0, 4)}...` : undefined,\n }),\n };\n\n // Log the sanitized entry\n this.logger[level](logEntry);\n }\n }\n\n getBucketName = () => this.bucketName;\n setBucketName = (bucketName: string) => {\n this.bucketName = bucketName;\n };\n getRegion = () => this.region;\n setRegion = (region: string) => {\n this.region = region;\n };\n getEndpoint = () => this.endpoint;\n setEndpoint = (endpoint: string) => {\n this.endpoint = endpoint;\n };\n getMaxRequestSizeInBytes = () => this.maxRequestSizeInBytes;\n setMaxRequestSizeInBytes = (maxRequestSizeInBytes: number) => {\n this.maxRequestSizeInBytes = maxRequestSizeInBytes;\n };\n\n getProps = () => ({\n accessKeyId: this.accessKeyId,\n secretAccessKey: this.secretAccessKey,\n region: this.region,\n bucket: this.bucketName,\n endpoint: this.endpoint,\n maxRequestSizeInBytes: this.maxRequestSizeInBytes,\n requestAbortTimeout: this.requestAbortTimeout,\n logger: this.logger,\n });\n setProps = (props: S3Config) => {\n this._validateConstructorParams(props.accessKeyId, props.secretAccessKey, props.bucketName, props.endpoint);\n this.accessKeyId = props.accessKeyId;\n this.secretAccessKey = props.secretAccessKey;\n this.region = props.region || 'auto';\n this.bucketName = props.bucketName;\n this.endpoint = props.endpoint;\n this.maxRequestSizeInBytes = props.maxRequestSizeInBytes || MIN_MAX_REQUEST_SIZE_IN_BYTES;\n this.requestAbortTimeout = props.requestAbortTimeout;\n this.logger = props.logger;\n };\n\n /**\n * Get the content length of an object.\n * @param {string} key - The key of the object.\n * @returns {Promise} The content length of the object in bytes.\n * @throws {TypeError} If the key is not a non-empty string.\n */\n async getContentLength(key: string): Promise {\n this._checkKey(key);\n const headers = {\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('HEAD', encodedKey, {}, headers, '');\n const res = await this._sendRequest(url, 'HEAD', signedHeaders);\n const contentLength = res.headers.get(HEADER_CONTENT_LENGTH);\n return contentLength ? parseInt(contentLength, 10) : 0;\n }\n\n /**\n * Check if a bucket exists.\n * @returns {Promise} True if the bucket exists, false otherwise.\n */\n async bucketExists(): Promise {\n const headers = {\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n const { url, headers: signedHeaders } = await this._sign('HEAD', '', {}, headers, '');\n const res = await this._sendRequest(url, 'HEAD', signedHeaders);\n if (res.ok && res.status === 200) {\n return true;\n }\n return false;\n }\n\n // TBD\n // async createBucket(bucketName) {\n // const xmlBody = `\n // \n // \n // ${this.region}\n // \n // `;\n // const headers = {\n // [HEADER_CONTENT_TYPE]: XML_CONTENT_TYPE,\n // [HEADER_CONTENT_LENGTH]: Buffer.byteLength(xmlBody).toString(),\n // [HEADER_AMZ_CONTENT_SHA256]: await _hash(xmlBody),\n // };\n // const encodedKey = encodeURI(bucketName);\n // const { url, headers: signedHeaders } = await this._sign('PUT', encodedKey, {}, headers, '');\n // const res = await this._sendRequest(url, 'PUT', signedHeaders);\n // if (res.ok && res.status === 200) {\n // return true;\n // }\n // return false;\n // }\n\n /**\n * Check if a file exists in the bucket.\n * @param {string} key - The key of the object.\n * @returns {Promise} True if the file exists, false otherwise.\n * @throws {TypeError} If the key is not a non-empty string.\n */\n async fileExists(key: string): Promise {\n this._checkKey(key);\n const headers = { [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('HEAD', encodedKey, {}, headers, '');\n try {\n const res = await fetch(url, {\n method: 'HEAD',\n headers: signedHeaders,\n });\n if (res.ok && res.status === 200) return true;\n else if (res.status === 404) return false;\n else this._handleErrorResponse(res);\n return false;\n } catch (error: unknown) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n this._log('error', `${ERROR_PREFIX}Failed to check if file exists: ${errorMessage}`);\n throw new Error(`${ERROR_PREFIX}Failed to check if file exists: ${errorMessage}`);\n }\n }\n async _sign(\n method: HttpMethod,\n keyPath: string,\n query: Object,\n headers: Record,\n body: string | Buffer,\n ): Promise<{ url: string; headers: Record }> {\n const datetime = new Date().toISOString().replace(/[:-]|\\.\\d{3}/g, '');\n const url =\n typeof keyPath === 'string' && keyPath.length > 0 ? new URL(keyPath, this.endpoint) : new URL(this.endpoint);\n url.pathname = `/${encodeURI(this.bucketName)}${url.pathname}`;\n headers[HEADER_AMZ_CONTENT_SHA256] = body ? await _hash(body) : UNSIGNED_PAYLOAD;\n headers[HEADER_AMZ_DATE] = datetime;\n headers[HEADER_HOST] = url.host;\n const canonicalHeaders = this._buildCanonicalHeaders(headers);\n const signedHeaders = Object.keys(headers)\n .map(key => key.toLowerCase())\n .sort()\n .join(';');\n\n const canonicalRequest = await this._buildCanonicalRequest(\n method,\n url,\n query,\n canonicalHeaders,\n signedHeaders,\n body,\n );\n const stringToSign = await this._buildStringToSign(datetime, canonicalRequest);\n const signature = await this._calculateSignature(datetime, stringToSign);\n const authorizationHeader = this._buildAuthorizationHeader(datetime, signedHeaders, signature);\n headers[HEADER_AUTHORIZATION] = authorizationHeader;\n return { url: url.toString(), headers };\n }\n\n _buildCanonicalHeaders(headers: Record): string {\n return Object.entries(headers)\n .map(([key, value]) => `${key.toLowerCase()}:${String(value).trim()}`)\n .sort()\n .join('\\n');\n }\n\n async _buildCanonicalRequest(\n method: HttpMethod,\n url: URL,\n query: Object,\n canonicalHeaders: string,\n signedHeaders: string,\n body: string | Buffer,\n ): Promise {\n return [\n method,\n url.pathname,\n this._buildCanonicalQueryString(query),\n `${canonicalHeaders}\\n`,\n signedHeaders,\n body ? await _hash(body) : UNSIGNED_PAYLOAD,\n ].join('\\n');\n }\n\n async _buildStringToSign(datetime: string, canonicalRequest: string): Promise {\n const credentialScope = [datetime.slice(0, 8), this.region, S3_SERVICE, AWS_REQUEST_TYPE].join('/');\n return [AWS_ALGORITHM, datetime, credentialScope, await _hash(canonicalRequest)].join('\\n');\n }\n\n async _calculateSignature(datetime: string, stringToSign: string): Promise {\n const signingKey = await this._getSignatureKey(datetime.slice(0, 8));\n return _hmac(signingKey, stringToSign, 'hex');\n }\n\n _buildAuthorizationHeader(datetime: string, signedHeaders: string, signature: string): string {\n const credentialScope = [datetime.slice(0, 8), this.region, S3_SERVICE, AWS_REQUEST_TYPE].join('/');\n return [\n `${AWS_ALGORITHM} Credential=${this.accessKeyId}/${credentialScope}`,\n `SignedHeaders=${signedHeaders}`,\n `Signature=${signature}`,\n ].join(', ');\n }\n\n /**\n * List objects in the bucket.\n * @param {string} [delimiter='/'] - The delimiter to use for grouping objects in specific path.\n * @param {string} [prefix=''] - The prefix to filter objects in specific path.\n * @param {number} [maxKeys=1000] - The maximum number of keys to return.\n * @param {string} [method='GET'] - The HTTP method to use (GET or HEAD).\n * @param {Object} [opts={}] - Additional options for the list operation.\n * @returns {Promise} The list of objects or object metadata.\n * @throws {TypeError} If any of the parameters are of incorrect type.\n */\n async list(\n delimiter: string = '/',\n prefix: string = '',\n maxKeys: number = 1000,\n method: HttpMethod = 'GET',\n opts: Object = {},\n ): Promise> {\n this._checkDelimiter(delimiter);\n this._checkPrefix(prefix);\n this._checkMaxKeys(maxKeys);\n this._checkMethodHeadnGet(method);\n this._checkOpts(opts);\n this._log('info', `Listing objects in ${prefix}`);\n\n const query = {\n 'list-type': LIST_TYPE,\n 'max-keys': String(maxKeys),\n ...opts,\n } as { [key: string]: any };\n if (prefix.length > 0) {\n query['prefix'] = prefix;\n }\n const headers = {\n [HEADER_CONTENT_TYPE]: JSON_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n const encodedKey = delimiter === '/' ? delimiter : uriEscape(delimiter);\n const { url, headers: signedHeaders } = await this._sign('GET', encodedKey, query, headers, '');\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n const res = await this._sendRequest(urlWithQuery, 'GET', signedHeaders);\n const responseBody = await res.text();\n\n if (method === 'HEAD') {\n const contentLength = res.headers.get(HEADER_CONTENT_LENGTH);\n const lastModified = res.headers.get(HEADER_LAST_MODIFIED);\n const etag = res.headers.get(HEADER_ETAG);\n\n return {\n size: contentLength ? +contentLength : undefined,\n mtime: lastModified ? new Date(lastModified) : undefined,\n ETag: etag || undefined,\n };\n }\n\n const data = _parseXml(responseBody);\n const output = data.listBucketResult || data.error || data;\n return output.contents || output;\n }\n\n /**\n * List multipart uploads in the bucket.\n * @param {string} [delimiter='/'] - The delimiter to use for grouping objects in specific path.\n * @param {string} [prefix=''] - The prefix to filter objects in specific path.\n * @param {string} [method='GET'] - The HTTP method to use (GET or HEAD).\n * @param {Object} [opts={}] - Additional options for the list operation.\n * @returns {Promise} The list of objects or object metadata.\n * @throws {TypeError} If any of the parameters are of incorrect type.\n */\n async listMultiPartUploads(\n delimiter: string = '/',\n prefix: string = '',\n method: HttpMethod = 'GET',\n opts: Object = {},\n ): Promise {\n this._checkDelimiter(delimiter);\n this._checkPrefix(prefix);\n this._checkMethodHeadnGet(method);\n this._checkOpts(opts);\n this._log('info', `Listing multipart uploads in ${prefix}`);\n\n const query = {\n uploads: '',\n ...opts,\n } as Record;\n const headers = {\n [HEADER_CONTENT_TYPE]: JSON_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n const encodedKey = delimiter === '/' ? delimiter : uriEscape(delimiter);\n const { url, headers: signedHeaders } = await this._sign('GET', encodedKey, query, headers, '');\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n const res = await this._sendRequest(urlWithQuery, 'GET', signedHeaders);\n const responseBody = await res.text();\n\n if (method === 'HEAD') {\n return {\n size: +(res.headers.get(HEADER_CONTENT_LENGTH) ?? '0'),\n mtime: new Date(res.headers.get(HEADER_LAST_MODIFIED) ?? ''),\n ETag: res.headers.get(HEADER_ETAG) ?? '',\n };\n }\n\n const data = _parseXml(responseBody);\n const output = data.listMultipartUploadsResult || data.error || data;\n return output.uploads || output;\n }\n\n /**\n * Get an object from the bucket.\n * @param {string} key - The key of the object to get.\n * @param {Object} [opts={}] - Additional options for the get operation.\n * @returns {Promise} The content of the object.\n */\n async get(key: string, opts: Record = {}): Promise {\n this._checkKey(key);\n this._log('info', `Getting object ${key}`);\n\n const headers = {\n [HEADER_CONTENT_TYPE]: JSON_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('GET', encodedKey, opts, headers, '');\n const res = await this._sendRequest(url, 'GET', signedHeaders);\n return res.text();\n }\n\n /**\n * Get a response of an object from the bucket.\n * @param {string} key - The key of the object to get.\n * @param {boolean} [wholeFile=true] - Whether to get the whole file or a part.\n * @param {number} [rangeFrom=0] - The range from to get if not getting the whole file.\n * @param {number} [rangeTo=this.maxRequestSizeInBytes] - The range to to get if not getting the whole file. Note: rangeTo is inclusive.\n * @param {Object} [opts={}] - Additional options for the get operation.\n * @returns {Promise} Response of the object content. Use readableStream() to get the stream from .body.\n */\n async getResponse(\n key: string,\n wholeFile: boolean = true,\n rangeFrom: number = 0,\n rangeTo: number = this.maxRequestSizeInBytes,\n opts: Record = {},\n ): Promise {\n this._checkKey(key);\n const query = opts;\n const headers = {\n [HEADER_CONTENT_TYPE]: JSON_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n ...(wholeFile ? {} : { range: `bytes=${rangeFrom}-${rangeTo - 1}` }),\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('GET', encodedKey, query, headers, '');\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n\n return this._sendRequest(urlWithQuery, 'GET', signedHeaders);\n }\n\n /**\n * Put an object into the bucket.\n * @param {string} key - The key of the object to put. To create a folder, include a trailing slash.\n * @param {Buffer|string} data - The content of the object to put.\n * @returns {Promise} The response from the put operation.\n * @throws {TypeError} If the key is not a non-empty string or data is not a Buffer or string.\n */\n async put(key: string, data: string | Buffer): Promise {\n this._checkKey(key);\n if (!(data instanceof Buffer || typeof data === 'string')) {\n this._log('error', ERROR_DATA_BUFFER_REQUIRED);\n throw new TypeError(ERROR_DATA_BUFFER_REQUIRED);\n }\n // const encodedKey = encodeURIComponent(key);\n this._log('info', `Uploading object ${key}`);\n const contentLength = typeof data === 'string' ? Buffer.byteLength(data) : data.length;\n const headers = {\n [HEADER_CONTENT_LENGTH]: contentLength,\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('PUT', encodedKey, {}, headers, data);\n const res = await this._sendRequest(url, 'PUT', signedHeaders, data);\n return res;\n }\n\n /**\n * Initiate a multipart upload.\n * @param {string} key - The key of the object to upload.\n * @param {string} [fileType='application/octet-stream'] - The MIME type of the file.\n * @returns {Promise} The upload ID for the multipart upload.\n * @throws {TypeError} If the key is not a non-empty string or fileType is not a string.\n * @throws {Error} If the multipart upload initiation fails.\n */\n async getMultipartUploadId(key: string, fileType: string = DEFAULT_STREAM_CONTENT_TYPE): Promise {\n this._checkKey(key);\n if (typeof fileType !== 'string') {\n this._log('error', `${ERROR_PREFIX}fileType must be a string`);\n throw new TypeError(`${ERROR_PREFIX}fileType must be a string`);\n }\n this._log('info', `Initiating multipart upload for object ${key}`);\n const query = { uploads: '' };\n const headers = {\n [HEADER_CONTENT_TYPE]: fileType,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('POST', encodedKey, query, headers, '');\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n\n const res = await this._sendRequest(urlWithQuery, 'POST', signedHeaders);\n const responseBody = await res.text();\n const parsedResponse = _parseXml(responseBody);\n\n if (\n typeof parsedResponse === 'object' &&\n parsedResponse !== null &&\n 'error' in parsedResponse &&\n typeof parsedResponse.error === 'object' &&\n parsedResponse.error !== null &&\n 'message' in parsedResponse.error\n ) {\n const errorMessage = String(parsedResponse.error.message);\n this._log('error', `${ERROR_PREFIX}Failed to abort multipart upload: ${errorMessage}`);\n throw new Error(`${ERROR_PREFIX}Failed to abort multipart upload: ${errorMessage}`);\n }\n\n if (typeof parsedResponse === 'object' && parsedResponse !== null) {\n if (!parsedResponse.initiateMultipartUploadResult || !parsedResponse.initiateMultipartUploadResult.uploadId) {\n this._log('error', `${ERROR_PREFIX}Failed to create multipart upload: no uploadId in response`);\n throw new Error(`${ERROR_PREFIX}Failed to create multipart upload: Missing upload ID in response`);\n }\n\n return parsedResponse.initiateMultipartUploadResult.uploadId;\n } else {\n this._log('error', `${ERROR_PREFIX}Failed to create multipart upload: unexpected response format`);\n throw new Error(`${ERROR_PREFIX}Failed to create multipart upload: Unexpected response format`);\n }\n }\n\n /**\n * Upload a part in a multipart upload.\n * @param {string} key - The key of the object being uploaded.\n * @param {Buffer|string} data - The content of the part.\n * @param {string} uploadId - The upload ID of the multipart upload.\n * @param {number} partNumber - The part number.\n * @param {Object} [opts={}] - Additional options for the upload.\n * @returns {Promise} The ETag and part number of the uploaded part.\n * @throws {TypeError} If any of the parameters are of incorrect type.\n */\n async uploadPart(\n key: string,\n data: Buffer | string,\n uploadId: string,\n partNumber: number,\n opts: Object = {},\n ): Promise {\n this._validateUploadPartParams(key, data, uploadId, partNumber, opts);\n const query = { uploadId, partNumber, ...opts } as { [key: string]: any };\n const headers = {\n [HEADER_CONTENT_LENGTH]: data.length,\n } as { [key: string]: any };\n\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('PUT', encodedKey, query, headers, data);\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n\n const res = await this._sendRequest(urlWithQuery, 'PUT', signedHeaders, data);\n const ETag = res.headers.get('etag') || '';\n return { partNumber, ETag };\n }\n\n _validateUploadPartParams(key: string, data: Buffer | string, uploadId: string, partNumber: number, opts: Object) {\n this._checkKey(key);\n if (!(data instanceof Buffer || typeof data === 'string')) {\n this._log('error', ERROR_DATA_BUFFER_REQUIRED);\n throw new TypeError(ERROR_DATA_BUFFER_REQUIRED);\n }\n if (typeof uploadId !== 'string' || uploadId.trim().length === 0) {\n this._log('error', ERROR_UPLOAD_ID_REQUIRED);\n throw new TypeError(ERROR_UPLOAD_ID_REQUIRED);\n }\n if (!Number.isInteger(partNumber) || partNumber <= 0) {\n this._log('error', `${ERROR_PREFIX}partNumber must be a positive integer`);\n throw new TypeError(`${ERROR_PREFIX}partNumber must be a positive integer`);\n }\n this._checkOpts(opts);\n }\n\n /**\n * Complete a multipart upload.\n * @param {string} key - The key of the object being uploaded.\n * @param {string} uploadId - The upload ID of the multipart upload.\n * @param {Array} parts - An array of objects containing PartNumber and ETag for each part.\n * @returns {Promise} The result of the complete multipart upload operation.\n * @throws {TypeError} If any of the parameters are of incorrect type.\n * @throws {Error} If the complete multipart upload operation fails.\n */\n async completeMultipartUpload(\n key: string,\n uploadId: string,\n parts: Array,\n ): Promise {\n this._checkKey(key);\n if (typeof uploadId !== 'string' || uploadId.trim().length === 0) {\n this._log('error', ERROR_UPLOAD_ID_REQUIRED);\n throw new TypeError(ERROR_UPLOAD_ID_REQUIRED);\n }\n if (!Array.isArray(parts) || parts.length === 0) {\n this._log('error', ERROR_PARTS_REQUIRED);\n throw new TypeError(ERROR_PARTS_REQUIRED);\n }\n if (!parts.every(part => typeof part.partNumber === 'number' && typeof part.ETag === 'string')) {\n this._log('error', ERROR_INVALID_PART);\n throw new TypeError(ERROR_INVALID_PART);\n }\n this._log('info', `Complete multipart upload ${uploadId} for object ${key}`);\n const query = { uploadId };\n const xmlBody = this._buildCompleteMultipartUploadXml(parts);\n const headers = {\n [HEADER_CONTENT_TYPE]: XML_CONTENT_TYPE,\n [HEADER_CONTENT_LENGTH]: Buffer.byteLength(xmlBody).toString(),\n [HEADER_AMZ_CONTENT_SHA256]: await _hash(xmlBody),\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('POST', encodedKey, query, headers, xmlBody);\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n\n const res = await this._sendRequest(urlWithQuery, 'POST', signedHeaders, xmlBody);\n const responseBody = await res.text();\n const parsedResponse = _parseXml(responseBody);\n\n if (\n typeof parsedResponse === 'object' &&\n parsedResponse !== null &&\n 'error' in parsedResponse &&\n typeof parsedResponse.error === 'object' &&\n parsedResponse.error !== null &&\n 'message' in parsedResponse.error\n ) {\n const errorMessage = String(parsedResponse.error.message);\n this._log('error', `${ERROR_PREFIX}Failed to abort multipart upload: ${errorMessage}`);\n throw new Error(`${ERROR_PREFIX}Failed to abort multipart upload: ${errorMessage}`);\n }\n\n return parsedResponse.completeMultipartUploadResult;\n }\n\n /**\n * Aborts a multipart upload.\n * @param {string} key - The key of the object being uploaded.\n * @param {string} uploadId - The ID of the multipart upload to abort.\n * @returns {Promise} - A promise that resolves to the abort response.\n * @throws {Error} If the abort operation fails.\n */\n async abortMultipartUpload(key: string, uploadId: string): Promise {\n // Input validation\n this._checkKey(key);\n if (typeof uploadId !== 'string' || uploadId.trim().length === 0) {\n this._log('error', ERROR_UPLOAD_ID_REQUIRED);\n throw new TypeError(ERROR_UPLOAD_ID_REQUIRED);\n }\n\n this._log('info', `Aborting multipart upload ${uploadId} for object ${key}`);\n\n // Prepare the request\n const query = { uploadId };\n const headers = {\n [HEADER_CONTENT_TYPE]: XML_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n\n try {\n // Sign and send the request\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('DELETE', encodedKey, query, headers, '');\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n\n const res = await this._sendRequest(urlWithQuery, 'DELETE', signedHeaders);\n\n // Check for successful response\n if (res.ok) {\n const responseBody = await res.text();\n const parsedResponse = _parseXml(responseBody);\n\n if (\n typeof parsedResponse === 'object' &&\n parsedResponse !== null &&\n 'error' in parsedResponse &&\n typeof parsedResponse.error === 'object' &&\n parsedResponse.error !== null &&\n 'message' in parsedResponse.error\n ) {\n const errorMessage = String(parsedResponse.error.message);\n this._log('error', `${ERROR_PREFIX}Failed to abort multipart upload: ${errorMessage}`);\n throw new Error(`${ERROR_PREFIX}Failed to abort multipart upload: ${errorMessage}`);\n }\n\n return {\n status: 'Aborted',\n key,\n uploadId,\n response: parsedResponse,\n };\n } else {\n this._log('error', `${ERROR_PREFIX}Abort request failed with status ${res.status}`);\n throw new Error(`${ERROR_PREFIX}Abort request failed with status ${res.status}`);\n }\n } catch (error: unknown) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n this._log('error', `${ERROR_PREFIX}Failed to abort multipart upload for key ${key}: ${errorMessage}`);\n throw new Error(`${ERROR_PREFIX}Failed to abort multipart upload for key ${key}: ${errorMessage}`);\n }\n }\n\n _buildCompleteMultipartUploadXml(parts: Array): string {\n return `\n \n ${parts\n .map(\n part => `\n \n ${part.partNumber}\n ${part.ETag}\n \n `,\n )\n .join('')}\n \n `;\n }\n\n /**\n * Delete an object from the bucket.\n * @param {string} key - The key of the object to delete.\n * @returns {Promise} The response from the delete operation.\n */\n async delete(key: string): Promise {\n this._checkKey(key);\n this._log('info', `Deleting object ${key}`);\n const headers = {\n [HEADER_CONTENT_TYPE]: JSON_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('DELETE', encodedKey, {}, headers, '');\n const res = await this._sendRequest(url, 'DELETE', signedHeaders);\n return res.text();\n }\n\n async _sendRequest(\n url: string,\n method: HttpMethod,\n headers: Record,\n body?: string | Buffer,\n ): Promise {\n this._log('info', `Sending ${method} request to ${url}, headers: ${JSON.stringify(headers)}`);\n const res = await fetch(url, {\n method,\n headers,\n body,\n signal: this.requestAbortTimeout !== undefined ? AbortSignal.timeout(this.requestAbortTimeout) : undefined,\n });\n\n if (!res.ok) {\n await this._handleErrorResponse(res);\n }\n\n return res;\n }\n\n async _handleErrorResponse(res: Response) {\n const errorBody = await res.text();\n const errorCode = res.headers.get('x-amz-error-code') || 'Unknown';\n const errorMessage = res.headers.get('x-amz-error-message') || res.statusText;\n this._log(\n 'error',\n `${ERROR_PREFIX}Request failed with status ${res.status}: ${errorCode} - ${errorMessage},err body: ${errorBody}`,\n );\n throw new Error(\n `${ERROR_PREFIX}Request failed with status ${res.status}: ${errorCode} - ${errorMessage}, err body: ${errorBody}`,\n );\n }\n\n _buildCanonicalQueryString(queryParams: Object): string {\n if (Object.keys(queryParams).length < 1) {\n return '';\n }\n\n return Object.keys(queryParams)\n .sort()\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent((queryParams as Record)[key])}`)\n .join('&');\n }\n async _getSignatureKey(dateStamp: string): Promise {\n const kDate = await _hmac(`AWS4${this.secretAccessKey}`, dateStamp);\n const kRegion = await _hmac(kDate, this.region);\n const kService = await _hmac(kRegion, S3_SERVICE);\n return _hmac(kService, AWS_REQUEST_TYPE);\n }\n}\n\nconst _hash = async (content: string | Buffer): Promise => {\n const hashSum = _createHash('sha256');\n hashSum.update(content);\n return hashSum.digest('hex');\n};\n\nconst _hmac = async (key: string | Buffer, content: string, encoding?: 'hex'): Promise => {\n const hmacSum = _createHmac('sha256', key);\n hmacSum.update(content);\n return hmacSum.digest(encoding);\n};\n\nconst _parseXml = (str: string): string | object | any => {\n const unescapeXml = (value: string): string => {\n return value\n .replace(/"/g, '\"')\n .replace(/'/g, \"'\")\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/&/g, '&');\n };\n\n const json = {};\n const re = /<(\\w)([-\\w]+)(?:\\/|[^>]*>((?:(?!<\\1)[\\s\\S])*)<\\/\\1\\2)>/gm;\n let match;\n\n while ((match = re.exec(str))) {\n const [, prefix, key, value] = match;\n const fullKey = prefix.toLowerCase() + key;\n const parsedValue = value != null ? _parseXml(value) : true;\n\n if (typeof parsedValue === 'string') {\n (json as { [key: string]: any })[fullKey] = unescapeXml(parsedValue);\n } else if (Array.isArray((json as { [key: string]: any })[fullKey])) {\n (json as { [key: string]: any })[fullKey].push(parsedValue);\n } else {\n (json as { [key: string]: any })[fullKey] =\n (json as { [key: string]: any })[fullKey] != null\n ? [(json as { [key: string]: any })[fullKey], parsedValue]\n : expectArray[fullKey]\n ? [parsedValue]\n : parsedValue;\n }\n }\n\n return Object.keys(json).length ? json : unescapeXml(str);\n};\n\nexport { S3 };\nexport default S3;\n", "'use strict';\n\nimport { S3 } from 'ultralight-s3';\nimport avro from 'avro-js'; // eslint-disable-line\nimport {\n\tlowstorage_ERROR_CODES,\n\tlowstorageError,\n\tCollectionNotFoundError,\n\tSchemaValidationError,\n\tDocumentValidationError,\n\tS3OperationError,\n} from './errors.js';\nimport { matchesQuery, generateUUID, inferAvroType } from './helpers.js';\n\nconst MODULE_NAME = 'lowstorage';\nconst DEFAULT_DELIMITER = '/';\nconst PROJECT_DIR_PREFIX = 'lowstorage';\nconst COL_SUFFIX = '.avro';\nconst CHUNG_1MB = 1024 * 1024;\nconst CHUNG_5MB = 5 * CHUNG_1MB;\n\n// code / description\n// init of new collection is automatically creating it in the bucket\n// there is optional (opt-in) switch to create new collections in bucket\n// if the schema is not provided, it will create empty buffer and save it\n// if the schema is provided, it will save it in memory and use it for all ops\n// if the schema is updated, it will save it in memory and use it for all ops\n// exposed functions are:\n// listCollections \u2705\n// collectionExists \u2705\n// createCollection \u2705\n// removeCollection \u2705\n// renameCollection \u2705\n// updateCollectionSchema \u274C\n// collection \u2705\n// s3 \u2705\n\n// Operations over collections are:\n// insert \u2705\n// find \u2705\n// findOne \u2705\n// update \u2705\n// updateOne \u2705\n// delete \u2705\n// count \u2705\n\n// Errors:\n// lowstorageError \u2705\n// CollectionNotFoundError \u2705\n// SchemaValidationError \u2705\n// DocumentValidationError \u2705\n// S3OperationError \u2705\n\nclass lowstorage {\n\tconstructor(\n\t\toptions = {\n\t\t\taccessKeyId: undefined,\n\t\t\tsecretAccessKey: undefined,\n\t\t\tendpoint: undefined,\n\t\t\tbucketName: undefined,\n\t\t\tregion: 'auto',\n\t\t\tlogger: null,\n\t\t\tdirPrefix: PROJECT_DIR_PREFIX,\n\t\t},\n\t) {\n\t\tthis._checkArgs(options);\n\t\tthis._schemas = new Map();\n\t\tthis._s3 = new S3(options);\n\t\tthis._dirPrefix = options.dirPrefix || PROJECT_DIR_PREFIX;\n\t\tthis._avro = avro;\n\t}\n\n\t_checkArgs = (args) => {\n\t\tconst requiredFields = ['accessKeyId', 'secretAccessKey', 'endpoint', 'bucketName'];\n\t\tfor (const field of requiredFields) {\n\t\t\tif (!args[field]) {\n\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: ${field} is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n\t\t\t}\n\t\t}\n\t};\n\n\t_hasColName = (colName) => {\n\t\tif (colName.trim() === '' || colName === null || typeof colName === 'undefined') {\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Collection name is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n\t\t}\n\t};\n\n\tasync listCollections() {\n\t\ttry {\n\t\t\tconst listed = await this._s3.list(DEFAULT_DELIMITER, this._dirPrefix);\n\t\t\tif (typeof listed === 'object' && listed !== null && listed.keyCount === '0') return [];\n\t\t\t// remove the delimiter from the key\n\t\t\treturn listed.map((entry) => entry.key.slice(this._dirPrefix.length + 1, -COL_SUFFIX.length));\n\t\t} catch (error) {\n\t\t\tthrow new S3OperationError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t}\n\t}\n\n\tasync collectionExists(colName) {\n\t\ttry {\n\t\t\tthis._hasColName(colName);\n\t\t\tconst exists = await this._s3.fileExists(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`);\n\t\t\treturn exists;\n\t\t} catch (error) {\n\t\t\tif (error.message.includes('Not Found')) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND);\n\t\t}\n\t}\n\n\tasync createCollection(colName, schema, data = []) {\n\t\ttry {\n\t\t\tthis._hasColName(colName);\n\t\t\tconst exists = await this.collectionExists(colName);\n\t\t\tif (!exists) {\n\t\t\t\tawait this._s3.put(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`, data.length > 0 ? data : '');\n\t\t\t\treturn this.collection(colName, schema);\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Collection ${colName} already exists`, lowstorage_ERROR_CODES.COLLECTION_EXISTS);\n\t\t} catch (error) {\n\t\t\tif (error instanceof lowstorageError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.CREATE_COLLECTION_ERROR);\n\t\t}\n\t}\n\n\tasync removeCollection(colName) {\n\t\ttry {\n\t\t\tthis._hasColName(colName);\n\t\t\tconst KEY = `${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`;\n\t\t\tconst exists = await this.collectionExists(colName);\n\t\t\tif (exists) {\n\t\t\t\tawait this._s3.delete(KEY);\n\t\t\t\tconst exists2 = await this.collectionExists(colName);\n\t\t\t\tif (typeof exists2 === 'boolean') {\n\t\t\t\t\treturn !exists2;\n\t\t\t\t}\n\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to delete collection ${colName}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Collection ${colName} does not exist`, lowstorage_ERROR_CODES.REMOVE_COLLECTION_ERROR);\n\t\t} catch (error) {\n\t\t\tif (error instanceof S3OperationError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(\n\t\t\t\t`${MODULE_NAME}: Failed to remove collection: ${error.message}`,\n\t\t\t\tlowstorage_ERROR_CODES.REMOVE_COLLECTION_ERROR,\n\t\t\t);\n\t\t}\n\t}\n\n\tasync renameCollection(oldColName, newColName) {\n\t\ttry {\n\t\t\tthis._hasColName(oldColName);\n\t\t\tthis._hasColName(newColName);\n\t\t\tconst exists = await this.collectionExists(oldColName);\n\t\t\tif (!exists) {\n\t\t\t\tthrow new CollectionNotFoundError(\n\t\t\t\t\t`${MODULE_NAME}: Collection ${oldColName} does not exist`,\n\t\t\t\t\tlowstorage_ERROR_CODES.COLLECTION_NOT_FOUND,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst oldCol = await this.collection(oldColName);\n\t\t\tconst oldColData = await oldCol._loadDataBuffer();\n\t\t\tconst success = await this.removeCollection(oldColName);\n\t\t\tif (!success) {\n\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Failed to rename collection`, lowstorage_ERROR_CODES.RENAME_COLLECTION_ERROR);\n\t\t\t}\n\t\t\treturn await this.createCollection(newColName, oldCol._avroType, oldColData);\n\t\t} catch (error) {\n\t\t\tif (error instanceof lowstorageError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(\n\t\t\t\t`${MODULE_NAME}: Rename collection failed: ${error.message}`,\n\t\t\t\tlowstorage_ERROR_CODES.RENAME_COLLECTION_ERROR,\n\t\t\t);\n\t\t}\n\t}\n\n\t// TODO: update collection schema\n\t// async updateCollectionSchema(colName, newSchema) {\n\t// \ttry {\n\t// \t\tthis._hasColName(colName);\n\t// \t\t// Check if collection exists\n\t// \t\tconst exists = await this.collectionExists(colName);\n\t// \t\tif (!exists) {\n\t// \t\t\tthrow new CollectionNotFoundError(`${MODULE_NAME}: Collection ${colName} does not exist`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND);\n\t// \t\t}\n\t// \t\tif (typeof schema === 'undefined' || schema === null) {\n\t// \t\t\tthrow new lowstorageError(`${MODULE_NAME}: Schema is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n\t// \t\t}\n\t// \t\tconst col = this.collection(colName);\n\t// \t\tconst colData = await col._loadDataBuffer();\n\t// \t\tconst avroType = this._avro.parse(schema);\n\t// \t\tthis._schemas.set(colName, avroType);\n\n\t// \t} catch (error) {\n\t// \t\tif (error instanceof S3OperationError) {\n\t// \t\t\tthrow error;\n\t// \t\t}\n\t// \t\tthrow new lowstorageError(\n\t// \t\t\t`${MODULE_NAME}: Failed to update collection schema: ${error.message}`,\n\t// \t\t\tlowstorage_ERROR_CODES.UPDATE_COLLECTION_SCHEMA_ERROR,\n\t// \t\t);\n\t// \t}\n\t// }\n\n\tasync collection(colName, schema, autoCreate = true) {\n\t\ttry {\n\t\t\tthis._hasColName(colName);\n\t\t\tconst colPath = `${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`;\n\t\t\tlet avroType;\n\n\t\t\tconst exists = await this._s3.fileExists(colPath);\n\n\t\t\tif (!exists && !autoCreate) {\n\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Collection ${colName} does not exist`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND);\n\t\t\t}\n\n\t\t\tif (schema) {\n\t\t\t\tavroType = this._avro.parse(schema);\n\t\t\t\tthis._schemas.set(colName, avroType);\n\t\t\t\tif (!exists && autoCreate) {\n\t\t\t\t\tawait this._s3.put(colPath, '');\n\t\t\t\t}\n\t\t\t} else if (this._schemas.has(colName)) {\n\t\t\t\tavroType = this._schemas.get(colName);\n\t\t\t} else if (exists) {\n\t\t\t\tconst schemaContent = await this._s3.get(colPath);\n\t\t\t\tavroType = this._avro.parse(schemaContent);\n\t\t\t\tthis._schemas.set(colName, avroType);\n\t\t\t} else if (autoCreate) {\n\t\t\t\tawait this._s3.put(colPath, '');\n\t\t\t}\n\n\t\t\treturn new Collection(colName, this._s3, avroType, this._dirPrefix);\n\t\t} catch (error) {\n\t\t\t// check if error message contains \"unknown type\" and if so, throw a schema validation error\n\t\t\tif (error.message.includes('unknown type')) {\n\t\t\t\tthrow new SchemaValidationError(\n\t\t\t\t\t`${MODULE_NAME}: Schema input is invalid: ${error.message}`,\n\t\t\t\t\tlowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND);\n\t\t}\n\t}\n\n\ts3 = () => {\n\t\treturn this._s3;\n\t};\n}\n\nclass Collection {\n\tconstructor(colName, s3, avroType = undefined, dirPrefix = PROJECT_DIR_PREFIX) {\n\t\tthis._colName = colName;\n\t\tthis._s3 = s3;\n\t\tthis._avro = avro;\n\t\tthis._avroType = avroType;\n\t\tthis._dirPrefix = dirPrefix;\n\t}\n\n\tasync insert(doc, schema = undefined) {\n\t\ttry {\n\t\t\tif (doc === undefined || doc === null) {\n\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Document is required for insert`, lowstorage_ERROR_CODES.INSERT_ERROR);\n\t\t\t}\n\t\t\tif (typeof doc !== 'object' && !Array.isArray(doc)) {\n\t\t\t\tthrow new DocumentValidationError(\n\t\t\t\t\t`${MODULE_NAME}: Document must be an object or an array`,\n\t\t\t\t\tlowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst items = !Array.isArray(doc) ? [doc] : doc;\n\n\t\t\tconst avroType = !!schema ? this._avro.parse(schema) : this._avroType || this._avro.parse(inferAvroType(doc));\n\n\t\t\tif (!avroType) {\n\t\t\t\tthrow new SchemaValidationError(\n\t\t\t\t\t`${MODULE_NAME}: Schema is required - Pass a schema to the insert method`,\n\t\t\t\t\tlowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthis._avroType = avroType;\n\t\t\tconst wrapperType = this._avro.parse({ type: 'array', items: this._avroType });\n\t\t\tconst bufferData = await this._loadDataBuffer();\n\t\t\tconst data = bufferData.length > 0 ? wrapperType.fromBuffer(bufferData) : [];\n\t\t\tfor (let item of items) {\n\t\t\t\tif (typeof item !== 'object' || item === null) {\n\t\t\t\t\tthrow new DocumentValidationError(\n\t\t\t\t\t\t`${MODULE_NAME}: Invalid input: input must be an object or an array of objects`,\n\t\t\t\t\t\tlowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\titem._id = item._id || (await generateUUID());\n\t\t\t\tconst valid = this._avroType.isValid(item);\n\t\t\t\tif (!valid) {\n\t\t\t\t\tthrow new DocumentValidationError(`${MODULE_NAME}: Invalid document or schema`, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR);\n\t\t\t\t}\n\t\t\t\tdata.push(item);\n\t\t\t}\n\t\t\tconst success = await this._saveDataBuffer(wrapperType.toBuffer(data));\n\t\t\tif (!success) {\n\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to insert document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t}\n\t\t\treturn items;\n\t\t} catch (error) {\n\t\t\tif (error.message.includes('unknown type')) {\n\t\t\t\tthrow new SchemaValidationError(\n\t\t\t\t\t`${MODULE_NAME}: Schema input is invalid: ${error.message}`,\n\t\t\t\t\tlowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (error instanceof lowstorageError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME} Insert operation failed: ${error.message}`, lowstorage_ERROR_CODES.INSERT_ERROR);\n\t\t}\n\t}\n\n\tasync _loadDataBuffer() {\n\t\ttry {\n\t\t\tconst KEY = `${this._dirPrefix}${DEFAULT_DELIMITER}${this._colName}${COL_SUFFIX}`;\n\t\t\tconst CHUNK_SIZE = this._s3.getMaxRequestSizeInBytes() || CHUNG_5MB;\n\t\t\tlet firstData = await this._s3.get(KEY);\n\t\t\tif (firstData.length < CHUNK_SIZE) {\n\t\t\t\treturn Buffer.from(firstData, 'utf8');\n\t\t\t}\n\t\t\tlet offset = CHUNK_SIZE;\n\t\t\tlet bufferArr = [Buffer.from(firstData, 'utf8')];\n\t\t\tlet repeat = true;\n\t\t\twhile (repeat) {\n\t\t\t\tconst nextDataResponse = await this._s3.getResponse(KEY, false, offset, offset + CHUNK_SIZE);\n\t\t\t\tconst nextDataBody = await nextDataResponse.text();\n\t\t\t\tbufferArr.push(Buffer.from(nextDataBody, 'utf8'));\n\t\t\t\toffset += CHUNK_SIZE;\n\t\t\t\tconst contentLength = nextDataResponse.headers.get('content-length') || nextDataBody.length;\n\t\t\t\tif (contentLength < CHUNK_SIZE) {\n\t\t\t\t\trepeat = false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn Buffer.concat(bufferArr);\n\t\t} catch (error) {\n\t\t\tif (error.toString().indexOf('status 404: Unknown - Not Found') > -1) {\n\t\t\t\treturn Buffer.from('');\n\t\t\t}\n\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to load data buffer: ${error.message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t}\n\t}\n\n\tasync _saveDataBuffer(data) {\n\t\ttry {\n\t\t\tconst KEY = `${this._dirPrefix}${DEFAULT_DELIMITER}${this._colName}${COL_SUFFIX}`;\n\t\t\tconst resp = await this._s3.put(KEY, data);\n\t\t\tif (resp.status !== 200) {\n\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to save data`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t}\n\t\t\treturn true;\n\t\t} catch (error) {\n\t\t\tif (error instanceof S3OperationError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.SAVE_DATA_ERROR);\n\t\t}\n\t}\n\n\tasync find(query = {}, options = {}) {\n\t\ttry {\n\t\t\tif (query === undefined || query === null) {\n\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Query is required for update`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n\t\t\t}\n\t\t\tconst bufferData = await this._loadDataBuffer(); // load data from s3\n\t\t\tif (bufferData.length === 0) {\n\t\t\t\treturn [];\n\t\t\t}\n\t\t\tconst wrapperType = this._avro.parse({ type: 'array', items: this._avroType });\n\t\t\tconst data = bufferData.length > 0 ? wrapperType.fromBuffer(bufferData) : [];\n\t\t\tconst start = parseInt(options.skip, 10) || 0;\n\t\t\tconst end = parseInt(options.limit, 10) ? start + parseInt(options.limit, 10) : undefined;\n\t\t\tconst filteredData = data.filter((doc) => matchesQuery(doc, query)).slice(start, end);\n\t\t\treturn filteredData;\n\t\t} catch (error) {\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Find operation failed: ${error.message}`, lowstorage_ERROR_CODES.FIND_ERROR);\n\t\t}\n\t}\n\n\tasync findOne(query = {}) {\n\t\ttry {\n\t\t\tif (query === undefined || query === null) {\n\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Query is required for update`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n\t\t\t}\n\t\t\tconst result = await this.find(query);\n\t\t\treturn result[0] || [];\n\t\t} catch (error) {\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: FindOne operation failed: ${error.message}`, lowstorage_ERROR_CODES.FIND_ONE_ERROR);\n\t\t}\n\t}\n\n\tasync update(query = {}, update = {}) {\n\t\ttry {\n\t\t\tif (query === undefined || query === null || update === undefined || update === null) {\n\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Query is required for update`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n\t\t\t}\n\t\t\tif (!this._avroType) {\n\t\t\t\tthrow new SchemaValidationError(\n\t\t\t\t\t`${MODULE_NAME}: Schema is not defined for this collection`,\n\t\t\t\t\tlowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst bufferData = await this._loadDataBuffer(); // load data from s3\n\t\t\tif (bufferData.length === 0) return 0;\n\t\t\tconst wrapperType = this._avro.parse({ type: 'array', items: this._avroType });\n\t\t\tconst data = bufferData.length > 0 ? wrapperType.fromBuffer(bufferData) : [];\n\t\t\tlet updatedCount = 0;\n\n\t\t\tfor (let i = 0; i < data.length; i++) {\n\t\t\t\tif (matchesQuery(data[i], query)) {\n\t\t\t\t\tconst updatedDoc = { ...data[i], ...update };\n\t\t\t\t\tconst valid = this._avroType.isValid(updatedDoc);\n\t\t\t\t\tif (!valid) {\n\t\t\t\t\t\tthrow new DocumentValidationError(\n\t\t\t\t\t\t\t`${MODULE_NAME}: Invalid document or schema`,\n\t\t\t\t\t\t\tlowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tdata[i] = updatedDoc;\n\t\t\t\t\tupdatedCount++;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (updatedCount > 0) {\n\t\t\t\tconst success = await this._saveDataBuffer(wrapperType.toBuffer(data));\n\t\t\t\tif (!success) {\n\t\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn updatedCount;\n\t\t} catch (error) {\n\t\t\tif (error instanceof S3OperationError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Update operation failed: ${error.message}`, lowstorage_ERROR_CODES.UPDATE_ERROR);\n\t\t}\n\t}\n\n\tasync updateOne(query = {}, update = {}) {\n\t\ttry {\n\t\t\tif (query === undefined || query === null || update === undefined || update === null) {\n\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Query is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n\t\t\t}\n\t\t\tif (!this._avroType) {\n\t\t\t\tthrow new SchemaValidationError(\n\t\t\t\t\t`${MODULE_NAME}: Schema is not defined for this collection`,\n\t\t\t\t\tlowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst bufferData = await this._loadDataBuffer(); // load data from s3\n\t\t\tif (bufferData.length === 0) return 0;\n\t\t\tconst wrapperType = this._avro.parse({ type: 'array', items: this._avroType });\n\t\t\tconst data = bufferData.length > 0 ? wrapperType.fromBuffer(bufferData) : [];\n\t\t\tconst docIndex = data.findIndex((doc) => matchesQuery(doc, query));\n\n\t\t\tif (docIndex !== -1) {\n\t\t\t\tconst updatedDoc = { ...data[docIndex], ...update };\n\t\t\t\tconst valid = this._avroType.isValid(updatedDoc);\n\t\t\t\tif (!valid) {\n\t\t\t\t\tthrow new DocumentValidationError(`${MODULE_NAME}: Invalid document or schema`, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR);\n\t\t\t\t}\n\t\t\t\tdata[docIndex] = updatedDoc;\n\t\t\t\tconst success = await this._saveDataBuffer(wrapperType.toBuffer(data));\n\t\t\t\tif (!success) {\n\t\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t\t}\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t\treturn 0;\n\t\t} catch (error) {\n\t\t\tif (error instanceof lowstorageError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: UpdateOne operation failed: ${error.message}`, lowstorage_ERROR_CODES.UPDATE_ONE_ERROR);\n\t\t}\n\t}\n\n\tasync delete(query = {}) {\n\t\ttry {\n\t\t\tif (query === undefined || query === null) {\n\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Query is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n\t\t\t}\n\t\t\tconst bufferData = await this._loadDataBuffer(); // load data from s3\n\t\t\tif (bufferData.length === 0) return 0;\n\t\t\tconst wrapperType = this._avro.parse({ type: 'array', items: this._avroType });\n\t\t\tconst data = bufferData.length > 0 ? wrapperType.fromBuffer(bufferData) : [];\n\t\t\tconst initialLength = data.length;\n\t\t\tconst newData = data.filter((doc) => !matchesQuery(doc, query));\n\t\t\tconst success = await this._saveDataBuffer(wrapperType.toBuffer(newData));\n\t\t\tif (!success) {\n\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to delete document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t}\n\t\t\treturn initialLength - newData.length;\n\t\t} catch (error) {\n\t\t\tif (error instanceof S3OperationError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Delete operation failed: ${error.message}`, lowstorage_ERROR_CODES.DELETE_ERROR);\n\t\t}\n\t}\n\n\tasync deleteAll() {\n\t\ttry {\n\t\t\tconst bufferData = await this._loadDataBuffer(); // load data from s3\n\t\t\tif (bufferData.length === 0) return 0;\n\t\t\tconst wrapperType = this._avro.parse({ type: 'array', items: this._avroType });\n\t\t\tconst data = bufferData.length > 0 ? wrapperType.fromBuffer(bufferData) : [];\n\t\t\tconst initialLength = data.length;\n\t\t\tconst newData = data.filter((doc) => !matchesQuery(doc, {}));\n\t\t\tconst success = await this._saveDataBuffer(wrapperType.toBuffer(newData));\n\t\t\tif (!success) {\n\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to delete document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t}\n\t\t\treturn initialLength - newData.length;\n\t\t} catch (error) {\n\t\t\tif (error instanceof S3OperationError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Delete operation failed: ${error.message}`, lowstorage_ERROR_CODES.DELETE_ERROR);\n\t\t}\n\t}\n\n\tasync count(query = {}) {\n\t\ttry {\n\t\t\tif (Object.keys(query).length === 0) {\n\t\t\t\tconst bufferData = await this._loadDataBuffer(); // load data from s3\n\t\t\t\tif (bufferData.length === 0) return 0;\n\t\t\t\tconst wrapperType = this._avro.parse({ type: 'array', items: this._avroType });\n\t\t\t\treturn wrapperType.fromBuffer(bufferData).length || 0;\n\t\t\t}\n\t\t\treturn (await this.find(query)).length;\n\t\t} catch (error) {\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Count operation failed: ${error.message}`, lowstorage_ERROR_CODES.COUNT_ERROR);\n\t\t}\n\t}\n}\n\n// export default lowstorage;\nexport { lowstorage, lowstorageError, lowstorage_ERROR_CODES };\n", "'use strict';\n\nconst lowstorage_ERROR_CODES = {\n\tMISSING_ARGUMENT: 'MISSING_ARGUMENT',\n\tCOLLECTION_EXISTS: 'COLLECTION_EXISTS',\n\tCREATE_COLLECTION_ERROR: 'CREATE_COLLECTION_ERROR',\n\tRENAME_COLLECTION_ERROR: 'RENAME_COLLECTION_ERROR',\n\tREMOVE_COLLECTION_ERROR: 'REMOVE_COLLECTION_ERROR',\n\tUPDATE_COLLECTION_SCHEMA_ERROR: 'UPDATE_COLLECTION_SCHEMA_ERROR',\n\tCOLLECTION_NOT_FOUND: 'COLLECTION_NOT_FOUND',\n\tSCHEMA_VALIDATION_ERROR: 'SCHEMA_VALIDATION_ERROR',\n\tDOCUMENT_VALIDATION_ERROR: 'DOCUMENT_VALIDATION_ERROR',\n\tS3_OPERATION_ERROR: 'S3_OPERATION_ERROR',\n\tFIND_ERROR: 'FIND_ERROR',\n\tFIND_ONE_ERROR: 'FIND_ONE_ERROR',\n\tSAVE_DATA_ERROR: 'SAVE_DATA_ERROR',\n\tINSERT_ERROR: 'INSERT_ERROR',\n\tUPDATE_ERROR: 'UPDATE_ERROR',\n\tUPDATE_ONE_ERROR: 'UPDATE_ONE_ERROR',\n\tDELETE_ERROR: 'DELETE_ERROR',\n\tCOUNT_ERROR: 'COUNT_ERROR',\n\tUNKNOWN_ERROR: 'UNKNOWN_ERROR',\n};\nclass lowstorageError extends Error {\n\tconstructor(message, code = lowstorage_ERROR_CODES.UNKNOWN_ERROR) {\n\t\tsuper(`lowstorageError: ${message} :: code: ${code}`);\n\t\tthis.name = this.constructor.name;\n\t\tthis.code = code;\n\t\tError.captureStackTrace(this, this.constructor);\n\t}\n}\n\nclass CollectionNotFoundError extends lowstorageError {\n\tconstructor(collectionName) {\n\t\tsuper(`Collection ${collectionName} not found`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND);\n\t}\n}\n\nclass SchemaValidationError extends lowstorageError {\n\tconstructor(message) {\n\t\tsuper(message, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR);\n\t}\n}\n\nclass DocumentValidationError extends lowstorageError {\n\tconstructor(message) {\n\t\tsuper(message, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR);\n\t}\n}\n\nclass S3OperationError extends lowstorageError {\n\tconstructor(message, operation) {\n\t\tsuper(`S3 ${operation} operation failed: ${message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t}\n}\n\nexport {\n\tlowstorage_ERROR_CODES,\n\tlowstorageError,\n\tCollectionNotFoundError,\n\tSchemaValidationError,\n\tDocumentValidationError,\n\tS3OperationError,\n};\n", "'use strict';\n\nimport { randomUUID } from 'node:crypto';\n\nconst matchesQuery = (document, query) => {\n\treturn Object.keys(query).every((key) => document[key] === query[key]);\n};\n\nconst generateUUID = async () => {\n\tif (typeof randomUUID !== 'undefined' && typeof randomUUID === 'function') {\n\t\treturn randomUUID();\n\t}\n\tif (typeof crypto !== 'undefined' && typeof crypto === 'object' && typeof crypto.randomUUID === 'function') {\n\t\treturn crypto.randomUUID();\n\t}\n\treturn 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n\t\tvar r = (Math.random() * 16) | 0,\n\t\t\tv = c === 'x' ? r : (r & 0x3) | 0x8;\n\t\treturn v.toString(16);\n\t});\n};\n\nconst _getAvroType = (value, name = 'SubAutoGenerated') => {\n\tswitch (typeof value) {\n\t\tcase 'string':\n\t\t\tif (_isUUID(value)) {\n\t\t\t\treturn {\n\t\t\t\t\ttype: 'string',\n\t\t\t\t\tname: '_id',\n\t\t\t\t\tsize: 16,\n\t\t\t\t\tlogicalType: 'UUID',\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn 'string';\n\t\tcase 'number':\n\t\t\treturn Number.isInteger(value) ? 'int' : 'float';\n\t\tcase 'boolean':\n\t\t\treturn 'boolean';\n\t\tcase 'object':\n\t\t\tif (value === null) return 'null';\n\t\t\tif (Array.isArray(value)) return { type: 'array', items: _getAvroType(value[0]) };\n\t\t\treturn inferAvroType(value, name);\n\t\tdefault:\n\t\t\treturn 'string'; // Default to string for unknown types\n\t}\n};\n\nconst inferAvroType = (data, typeName = 'AutoGenerated') => {\n\tif (Array.isArray(data)) {\n\t\tdata = data[0];\n\t}\n\tconst fields = Object.entries(data).map(([name, value]) => {\n\t\treturn { name, type: _getAvroType(value, `${typeName}.${name}`) };\n\t});\n\treturn {\n\t\ttype: 'record',\n\t\tname: typeName,\n\t\tfields: fields,\n\t};\n};\n\nconst _isUUID = (str) => {\n\tconst uuidV4Regex = /^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i;\n\treturn uuidV4Regex.test(str);\n};\n\nexport { matchesQuery, generateUUID, inferAvroType };\n"], + "mappings": "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", + "names": ["_createHmac", "_createHash", "AWS_ALGORITHM", "AWS_REQUEST_TYPE", "S3_SERVICE", "LIST_TYPE", "UNSIGNED_PAYLOAD", "DEFAULT_STREAM_CONTENT_TYPE", "XML_CONTENT_TYPE", "JSON_CONTENT_TYPE", "SENSITIVE_KEYS_REDACTED", "MIN_MAX_REQUEST_SIZE_IN_BYTES", "HEADER_AMZ_CONTENT_SHA256", "HEADER_AMZ_DATE", "HEADER_HOST", "HEADER_AUTHORIZATION", "HEADER_CONTENT_TYPE", "HEADER_CONTENT_LENGTH", "HEADER_ETAG", "HEADER_LAST_MODIFIED", "ERROR_PREFIX", "ERROR_ACCESS_KEY_REQUIRED", "ERROR_SECRET_KEY_REQUIRED", "ERROR_ENDPOINT_REQUIRED", "ERROR_BUCKET_NAME_REQUIRED", "ERROR_KEY_REQUIRED", "ERROR_UPLOAD_ID_REQUIRED", "ERROR_PARTS_REQUIRED", "ERROR_INVALID_PART", "ERROR_DATA_BUFFER_REQUIRED", "ERROR_PREFIX_TYPE", "ERROR_MAX_KEYS_TYPE", "ERROR_DELIMITER_REQUIRED", "expectArray", "encodeAsHex", "c", "uriEscape", "uriStr", "uriResourceEscape", "string", "S3", "accessKeyId", "secretAccessKey", "endpoint", "bucketName", "region", "maxRequestSizeInBytes", "requestAbortTimeout", "logger", "props", "method", "key", "delimiter", "prefix", "maxKeys", "opts", "level", "message", "additionalData", "sanitize", "obj", "acc", "sanitizedData", "logEntry", "headers", "encodedKey", "url", "signedHeaders", "contentLength", "res", "error", "errorMessage", "keyPath", "query", "body", "datetime", "_hash", "canonicalHeaders", "canonicalRequest", "stringToSign", "signature", "authorizationHeader", "value", "credentialScope", "signingKey", "_hmac", "urlWithQuery", "responseBody", "lastModified", "etag", "data", "_parseXml", "output", "o", "i", "a", "_a", "_b", "_c", "wholeFile", "rangeFrom", "rangeTo", "fileType", "parsedResponse", "uploadId", "partNumber", "ETag", "parts", "part", "xmlBody", "errorBody", "errorCode", "queryParams", "dateStamp", "kDate", "kRegion", "kService", "content", "hashSum", "encoding", "hmacSum", "str", "unescapeXml", "json", "re", "match", "fullKey", "parsedValue", "avro", "lowstorage_ERROR_CODES", "lowstorageError", "message", "code", "CollectionNotFoundError", "collectionName", "SchemaValidationError", "DocumentValidationError", "S3OperationError", "operation", "randomUUID", "matchesQuery", "document", "query", "key", "generateUUID", "c", "r", "v", "_getAvroType", "value", "name", "_isUUID", "inferAvroType", "data", "typeName", "fields", "str", "MODULE_NAME", "DEFAULT_DELIMITER", "PROJECT_DIR_PREFIX", "COL_SUFFIX", "CHUNG_1MB", "CHUNG_5MB", "lowstorage", "options", "O", "avro", "args", "requiredFields", "field", "lowstorageError", "lowstorage_ERROR_CODES", "colName", "listed", "entry", "error", "S3OperationError", "schema", "data", "KEY", "exists2", "oldColName", "newColName", "CollectionNotFoundError", "oldCol", "oldColData", "autoCreate", "colPath", "avroType", "exists", "schemaContent", "Collection", "SchemaValidationError", "s3", "dirPrefix", "doc", "DocumentValidationError", "items", "inferAvroType", "wrapperType", "bufferData", "item", "generateUUID", "CHUNK_SIZE", "firstData", "offset", "bufferArr", "repeat", "nextDataResponse", "nextDataBody", "query", "start", "end", "matchesQuery", "update", "updatedCount", "i", "updatedDoc", "docIndex", "initialLength", "newData"] } diff --git a/src/lowstorage.js b/src/lowstorage.js index cd40ad4..de45d10 100644 --- a/src/lowstorage.js +++ b/src/lowstorage.js @@ -15,7 +15,7 @@ import { matchesQuery, generateUUID, inferAvroType } from './helpers.js'; const MODULE_NAME = 'lowstorage'; const DEFAULT_DELIMITER = '/'; const PROJECT_DIR_PREFIX = 'lowstorage'; -const SCHEMA_SUFFIX = '.avro'; +const COL_SUFFIX = '.avro'; const CHUNG_1MB = 1024 * 1024; const CHUNG_5MB = 5 * CHUNG_1MB; @@ -90,7 +90,7 @@ class lowstorage { const listed = await this._s3.list(DEFAULT_DELIMITER, this._dirPrefix); if (typeof listed === 'object' && listed !== null && listed.keyCount === '0') return []; // remove the delimiter from the key - return listed.map((entry) => entry.key.slice(this._dirPrefix.length + 1, -SCHEMA_SUFFIX.length)); + return listed.map((entry) => entry.key.slice(this._dirPrefix.length + 1, -COL_SUFFIX.length)); } catch (error) { throw new S3OperationError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); } @@ -99,7 +99,7 @@ class lowstorage { async collectionExists(colName) { try { this._hasColName(colName); - const exists = await this._s3.fileExists(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${SCHEMA_SUFFIX}`); + const exists = await this._s3.fileExists(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`); return exists; } catch (error) { if (error.message.includes('Not Found')) { @@ -114,7 +114,7 @@ class lowstorage { this._hasColName(colName); const exists = await this.collectionExists(colName); if (!exists) { - await this._s3.put(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${SCHEMA_SUFFIX}`, data.length > 0 ? data : ''); + await this._s3.put(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`, data.length > 0 ? data : ''); return this.collection(colName, schema); } throw new lowstorageError(`${MODULE_NAME}: Collection ${colName} already exists`, lowstorage_ERROR_CODES.COLLECTION_EXISTS); @@ -129,7 +129,7 @@ class lowstorage { async removeCollection(colName) { try { this._hasColName(colName); - const KEY = `${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${SCHEMA_SUFFIX}`; + const KEY = `${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`; const exists = await this.collectionExists(colName); if (exists) { await this._s3.delete(KEY); @@ -162,7 +162,7 @@ class lowstorage { lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND, ); } - const oldCol = this.collection(oldColName); + const oldCol = await this.collection(oldColName); const oldColData = await oldCol._loadDataBuffer(); const success = await this.removeCollection(oldColName); if (!success) { @@ -211,32 +211,41 @@ class lowstorage { async collection(colName, schema, autoCreate = true) { try { this._hasColName(colName); - if (typeof schema === 'undefined') { - // Load schema if not in memory - if (this._schemas.has(colName)) { - return new Collection(colName, this._s3, this._schemas.get(colName), this._dirPrefix); - } - // check if schema file exists - const exists = await this._s3.fileExists(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${SCHEMA_SUFFIX}`); - if (exists) { - const schemaContent = await this._s3.get(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${SCHEMA_SUFFIX}`); - const avroType = this._avro.parse(schemaContent); - this._schemas.set(colName, avroType); - return new Collection(colName, this._s3, avroType, this._dirPrefix); - } - if (autoCreate) { - this._s3.put(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${SCHEMA_SUFFIX}`, ''); - } - return new Collection(colName, this._s3, undefined, this._dirPrefix); + const colPath = `${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`; + let avroType; + + const exists = await this._s3.fileExists(colPath); + + if (!exists && !autoCreate) { + throw new lowstorageError(`${MODULE_NAME}: Collection ${colName} does not exist`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND); } - if (autoCreate) { - const exists = await this._s3.fileExists(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${SCHEMA_SUFFIX}`); - if (!exists) { - await this._s3.put(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${SCHEMA_SUFFIX}`, ''); + + if (schema) { + avroType = this._avro.parse(schema); + this._schemas.set(colName, avroType); + if (!exists && autoCreate) { + await this._s3.put(colPath, ''); } + } else if (this._schemas.has(colName)) { + avroType = this._schemas.get(colName); + } else if (exists) { + const schemaContent = await this._s3.get(colPath); + avroType = this._avro.parse(schemaContent); + this._schemas.set(colName, avroType); + } else if (autoCreate) { + await this._s3.put(colPath, ''); } - return new Collection(colName, this._s3, this._avro.parse(schema), this._dirPrefix); + + return new Collection(colName, this._s3, avroType, this._dirPrefix); } catch (error) { + // check if error message contains "unknown type" and if so, throw a schema validation error + if (error.message.includes('unknown type')) { + throw new SchemaValidationError( + `${MODULE_NAME}: Schema input is invalid: ${error.message}`, + lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR, + ); + } + throw new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND); } } @@ -258,7 +267,7 @@ class Collection { async insert(doc, schema = undefined) { try { if (doc === undefined || doc === null) { - throw new lowstorageError(`${MODULE_NAME}: Document is required for insert`, lowstorage_ERROR_CODES.MISSING_ARGUMENT); + throw new lowstorageError(`${MODULE_NAME}: Document is required for insert`, lowstorage_ERROR_CODES.INSERT_ERROR); } if (typeof doc !== 'object' && !Array.isArray(doc)) { throw new DocumentValidationError( @@ -301,6 +310,12 @@ class Collection { } return items; } catch (error) { + if (error.message.includes('unknown type')) { + throw new SchemaValidationError( + `${MODULE_NAME}: Schema input is invalid: ${error.message}`, + lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR, + ); + } if (error instanceof lowstorageError) { throw error; } @@ -310,7 +325,7 @@ class Collection { async _loadDataBuffer() { try { - const KEY = `${this._dirPrefix}${DEFAULT_DELIMITER}${this._colName}${SCHEMA_SUFFIX}`; + const KEY = `${this._dirPrefix}${DEFAULT_DELIMITER}${this._colName}${COL_SUFFIX}`; const CHUNK_SIZE = this._s3.getMaxRequestSizeInBytes() || CHUNG_5MB; let firstData = await this._s3.get(KEY); if (firstData.length < CHUNK_SIZE) { @@ -340,7 +355,7 @@ class Collection { async _saveDataBuffer(data) { try { - const KEY = `${this._dirPrefix}${DEFAULT_DELIMITER}${this._colName}${SCHEMA_SUFFIX}`; + const KEY = `${this._dirPrefix}${DEFAULT_DELIMITER}${this._colName}${COL_SUFFIX}`; const resp = await this._s3.put(KEY, data); if (resp.status !== 200) { throw new S3OperationError(`${MODULE_NAME}: Failed to save data`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); @@ -356,6 +371,9 @@ class Collection { async find(query = {}, options = {}) { try { + if (query === undefined || query === null) { + throw new lowstorageError(`${MODULE_NAME}: Query is required for update`, lowstorage_ERROR_CODES.MISSING_ARGUMENT); + } const bufferData = await this._loadDataBuffer(); // load data from s3 if (bufferData.length === 0) { return []; @@ -373,6 +391,9 @@ class Collection { async findOne(query = {}) { try { + if (query === undefined || query === null) { + throw new lowstorageError(`${MODULE_NAME}: Query is required for update`, lowstorage_ERROR_CODES.MISSING_ARGUMENT); + } const result = await this.find(query); return result[0] || []; } catch (error) { @@ -382,6 +403,9 @@ class Collection { async update(query = {}, update = {}) { try { + if (query === undefined || query === null || update === undefined || update === null) { + throw new lowstorageError(`${MODULE_NAME}: Query is required for update`, lowstorage_ERROR_CODES.MISSING_ARGUMENT); + } if (!this._avroType) { throw new SchemaValidationError( `${MODULE_NAME}: Schema is not defined for this collection`, @@ -426,6 +450,9 @@ class Collection { async updateOne(query = {}, update = {}) { try { + if (query === undefined || query === null || update === undefined || update === null) { + throw new lowstorageError(`${MODULE_NAME}: Query is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT); + } if (!this._avroType) { throw new SchemaValidationError( `${MODULE_NAME}: Schema is not defined for this collection`, @@ -462,6 +489,9 @@ class Collection { async delete(query = {}) { try { + if (query === undefined || query === null) { + throw new lowstorageError(`${MODULE_NAME}: Query is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT); + } const bufferData = await this._loadDataBuffer(); // load data from s3 if (bufferData.length === 0) return 0; const wrapperType = this._avro.parse({ type: 'array', items: this._avroType }); @@ -481,17 +511,34 @@ class Collection { } } - async count(query = {}) { + async deleteAll() { try { - if (query === undefined || query === null) { - throw new lowstorageError(`${MODULE_NAME}: Query is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT); + const bufferData = await this._loadDataBuffer(); // load data from s3 + if (bufferData.length === 0) return 0; + const wrapperType = this._avro.parse({ type: 'array', items: this._avroType }); + const data = bufferData.length > 0 ? wrapperType.fromBuffer(bufferData) : []; + const initialLength = data.length; + const newData = data.filter((doc) => !matchesQuery(doc, {})); + const success = await this._saveDataBuffer(wrapperType.toBuffer(newData)); + if (!success) { + throw new S3OperationError(`${MODULE_NAME}: Failed to delete document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); + } + return initialLength - newData.length; + } catch (error) { + if (error instanceof S3OperationError) { + throw error; } + throw new lowstorageError(`${MODULE_NAME}: Delete operation failed: ${error.message}`, lowstorage_ERROR_CODES.DELETE_ERROR); + } + } + + async count(query = {}) { + try { if (Object.keys(query).length === 0) { const bufferData = await this._loadDataBuffer(); // load data from s3 if (bufferData.length === 0) return 0; const wrapperType = this._avro.parse({ type: 'array', items: this._avroType }); - const data = bufferData.length > 0 ? wrapperType.fromBuffer(bufferData) : []; - return data.length || null; + return wrapperType.fromBuffer(bufferData).length || 0; } return (await this.find(query)).length; } catch (error) { diff --git a/src/lowstorage.test.js b/src/lowstorage.test.js index 87dcc32..cd9e31f 100644 --- a/src/lowstorage.test.js +++ b/src/lowstorage.test.js @@ -56,6 +56,11 @@ let lStorage; beforeAll(async () => { console.time('lowstorage-test'); lStorage = new lowstorage(configCF); + // clean up any existing collections + const listCollections = await lStorage.listCollections(); + for (const col of listCollections) { + await lStorage.removeCollection(col); + } }); afterAll(async () => { @@ -63,7 +68,7 @@ afterAll(async () => { }); // full test basic operations on collection -test('Collections | essentials check, create, list and delete collections', async () => { +test('Collections | basic CRUD operations', async () => { // check if collections exist const userColExists = await lStorage.collectionExists('userCol'); // expect to be bollean @@ -180,15 +185,77 @@ test('Collections | error cases and error codes', async () => { await expect(lStorage.createCollection('testCol', testColSchame)).rejects.toThrow(lowstorageError); await expect(lStorage.createCollection('testCol', testColSchame)).rejects.toThrow(lowstorage_ERROR_CODES.COLLECTION_EXISTS); - // TODO: test update collection schema error + const listCollections = await lStorage.listCollections(); + console.log('listCollections::::: ', listCollections); + expect(listCollections).toContain('testCol'); + + // Verify the collection exists before attempting to rename + const testColExists = await lStorage.collectionExists('testCol'); + expect(testColExists).toBe(true); + + // Test rename collection + await expect(lStorage.renameCollection('testCol', 'testCol2')).resolves.not.toThrow(); + const listCollectionsAfterRename = await lStorage.listCollections(); + expect(listCollectionsAfterRename).not.toContain('testCol'); + expect(listCollectionsAfterRename).toContain('testCol2'); + + // Verify the collection exists after renaming + const testCol2Exists = await lStorage.collectionExists('testCol2'); + expect(testCol2Exists).toBe(true); + // Test rename collection error await expect(lStorage.renameCollection('testCol', 'testCol2')).rejects.toThrow(lowstorageError); await expect(lStorage.renameCollection('testCol', 'testCol2')).rejects.toThrow(lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND); - // await expect(lStorage.renameCollection('testCol2', 'testCol')).rejects.toThrow(lowstorageError); - // await expect(lStorage.renameCollection('testCol2', 'testCol')).rejects.toThrow(lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND); - // // Test remove collection error - // await expect(lStorage.removeCollection('testCol2')).rejects.toThrow(lowstorageError); - // await expect(lStorage.removeCollection('testCol2')).rejects.toThrow(lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND); + await expect(lStorage.removeCollection('testCol')).rejects.toThrow(lowstorageError); + await expect(lStorage.removeCollection('testCol')).rejects.toThrow(lowstorage_ERROR_CODES.REMOVE_COLLECTION_ERROR); + + // Test update collection schema error - NOT IMPLEMENTED + // const testColSchema = { + // type: 'record', + // name: 'TestCol', + // fields: [ + // { name: '_id', type: 'string', size: 16, logicalType: 'UUID' }, + // { name: 'name', type: 'string' }, + // { name: 'age', type: 'int' }, + // ], + // }; + // await expect(lStorage.updateCollectionSchema('testCol', testColSchema)).rejects.toThrow(lowstorageError); + // await expect(lStorage.updateCollectionSchema('testCol', testColSchema)).rejects.toThrow(lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND); + + // Test schema validation error + const invalidSchema = { type: 'invalid' }; + await expect(lStorage.createCollection('invalidSchemaCol', invalidSchema)).rejects.toThrow( + lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR, + ); + + // Test document validation error + const col = await lStorage.collection('testCol2'); + await expect(col.insert({ invalidField: 'value' })).rejects.toThrow(lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR); + + // Test insert error + await expect(col.insert(null)).rejects.toThrow(lowstorage_ERROR_CODES.INSERT_ERROR); + + // Test update error + await expect(col.update(null, { field: 'value' })).rejects.toThrow(lowstorage_ERROR_CODES.MISSING_ARGUMENT); + + // Test update one error + await expect(col.updateOne(null, { field: 'value' })).rejects.toThrow(lowstorage_ERROR_CODES.MISSING_ARGUMENT); + + // Test delete error + await expect(col.delete(null)).rejects.toThrow(lowstorage_ERROR_CODES.MISSING_ARGUMENT); + + // Test count error - wrong argument + await expect(col.count(null)).rejects.toThrow(lowstorage_ERROR_CODES.COUNT_ERROR); + await expect(col.count()).toBe(0); + + // Test remove collection error + await expect(lStorage.removeCollection(null)).rejects.toThrow(lowstorage_ERROR_CODES.REMOVE_COLLECTION_ERROR); + + // Test rename collection error + await expect(lStorage.renameCollection(null, 'newName')).rejects.toThrow(lowstorage_ERROR_CODES.RENAME_COLLECTION_ERROR); + + // Clean up + await lStorage.removeCollection('testCol2'); }); From 0a4d8a44f5a57c0f44251f8efccdc1ad9dd5931a Mon Sep 17 00:00:00 2001 From: Jolly Good <1671375+good-lly@users.noreply.github.com> Date: Tue, 13 Aug 2024 12:15:07 +0200 Subject: [PATCH 06/18] update tests, add jsdoc, make minor changes in api --- jest.config.json | 3 +- lib/lowstorage.js | 6 +- lib/lowstorage.js.map | 4 +- src/lowstorage.js | 212 ++++++++++++++++++++++++++++++++++++++--- src/lowstorage.test.js | 169 +++++++++++++++++++++++++++++++- 5 files changed, 372 insertions(+), 22 deletions(-) diff --git a/jest.config.json b/jest.config.json index aa775e7..a3fc781 100644 --- a/jest.config.json +++ b/jest.config.json @@ -3,5 +3,6 @@ "collectCoverage": false, "testMatch": ["**/src/*.test.js"], "testEnvironment": "node", - "testTimeout": 20000 + "testTimeout": 20000, + "silent": false } diff --git a/lib/lowstorage.js b/lib/lowstorage.js index e88b1ab..1bdf85d 100644 --- a/lib/lowstorage.js +++ b/lib/lowstorage.js @@ -1,8 +1,8 @@ -var se=crypto.createHmac||(await import("node:crypto")).createHmac,ie=crypto.createHash||(await import("node:crypto")).createHash;typeof se>"u"&&typeof ie>"u"&&console.error("ultralight-S3 Module: Crypto functions are not available, please report the issue with necessary description: https://github.com/sentienhq/ultralight-s3/issues");var V="AWS4-HMAC-SHA256",B="aws4_request",F="s3",ue="2",g="UNSIGNED-PAYLOAD",de="application/octet-stream",z="application/xml",L="application/json",fe=["accessKeyId","secretAccessKey","sessionToken","password"],Q=5*1024*1024,E="x-amz-content-sha256",pe="x-amz-date",_e="host",Re="Authorization",O="Content-Type",N="Content-Length",X="etag",W="last-modified",d="ultralight-s3 Module: ",ge=`${d}accessKeyId must be a non-empty string`,Ee=`${d}secretAccessKey must be a non-empty string`,we=`${d}endpoint must be a non-empty string`,ye=`${d}bucketName must be a non-empty string`,Y=`${d}key must be a non-empty string`,x=`${d}uploadId must be a non-empty string`,J=`${d}parts must be a non-empty array`,Z=`${d}Each part must have a partNumber (number) and ETag (string)`,M=`${d}data must be a Buffer or string`,ee=`${d}prefix must be a string`,te=`${d}maxKeys must be a positive integer`,re=`${d}delimiter must be a string`,me={contents:!0},Oe=r=>`%${r.charCodeAt(0).toString(16).toUpperCase()}`,K=r=>encodeURIComponent(r).replace(/[!'()*]/g,Oe),m=r=>K(r).replace(/%2F/g,"/"),ae=class{constructor({accessKeyId:r,secretAccessKey:e,endpoint:t,bucketName:s,region:i="auto",maxRequestSizeInBytes:a=Q,requestAbortTimeout:n=void 0,logger:h=void 0}){this.getBucketName=()=>this.bucketName,this.setBucketName=o=>{this.bucketName=o},this.getRegion=()=>this.region,this.setRegion=o=>{this.region=o},this.getEndpoint=()=>this.endpoint,this.setEndpoint=o=>{this.endpoint=o},this.getMaxRequestSizeInBytes=()=>this.maxRequestSizeInBytes,this.setMaxRequestSizeInBytes=o=>{this.maxRequestSizeInBytes=o},this.getProps=()=>({accessKeyId:this.accessKeyId,secretAccessKey:this.secretAccessKey,region:this.region,bucket:this.bucketName,endpoint:this.endpoint,maxRequestSizeInBytes:this.maxRequestSizeInBytes,requestAbortTimeout:this.requestAbortTimeout,logger:this.logger}),this.setProps=o=>{this._validateConstructorParams(o.accessKeyId,o.secretAccessKey,o.bucketName,o.endpoint),this.accessKeyId=o.accessKeyId,this.secretAccessKey=o.secretAccessKey,this.region=o.region||"auto",this.bucketName=o.bucketName,this.endpoint=o.endpoint,this.maxRequestSizeInBytes=o.maxRequestSizeInBytes||Q,this.requestAbortTimeout=o.requestAbortTimeout,this.logger=o.logger},this._validateConstructorParams(r,e,t,s),this.accessKeyId=r,this.secretAccessKey=e,this.endpoint=t,this.bucketName=s,this.region=i,this.maxRequestSizeInBytes=a,this.requestAbortTimeout=n,this.logger=h}_validateConstructorParams(r,e,t,s){if(typeof r!="string"||r.trim().length===0)throw new TypeError(ge);if(typeof e!="string"||e.trim().length===0)throw new TypeError(Ee);if(typeof t!="string"||t.trim().length===0)throw new TypeError(we);if(typeof s!="string"||s.trim().length===0)throw new TypeError(ye)}_checkMethodHeadnGet(r){if(r!=="GET"&&r!=="HEAD")throw this._log("error",`${d}method must be either GET or HEAD`),new Error("method must be either GET or HEAD")}_checkKey(r){if(typeof r!="string"||r.trim().length===0)throw this._log("error",Y),new TypeError(Y)}_checkDelimiter(r){if(typeof r!="string"||r.trim().length===0)throw this._log("error",re),new TypeError(re)}_checkPrefix(r){if(typeof r!="string")throw this._log("error",ee),new TypeError(ee)}_checkMaxKeys(r){if(typeof r!="number"||r<=0)throw this._log("error",te),new TypeError(te)}_checkOpts(r){if(typeof r!="object")throw this._log("error",`${d}opts must be an object`),new TypeError(`${d}opts must be an object`)}_log(r,e,t={}){if(this.logger&&typeof this.logger[r]=="function"){let s=n=>typeof n!="object"||n===null?n:Object.keys(n).reduce((h,o)=>(fe.includes(o.toLowerCase())?h[o]="[REDACTED]":typeof n[o]=="object"&&n[o]!==null?h[o]=s(n[o]):h[o]=n[o],h),Array.isArray(n)?[]:{}),i=s(t),a={timestamp:new Date().toISOString(),level:r,message:e,...i,context:s({bucketName:this.bucketName,region:this.region,endpoint:this.endpoint,accessKeyId:this.accessKeyId?`${this.accessKeyId.substring(0,4)}...`:void 0})};this.logger[r](a)}}async getContentLength(r){this._checkKey(r);let e={[E]:g},t=m(r),{url:s,headers:i}=await this._sign("HEAD",t,{},e,""),a=(await this._sendRequest(s,"HEAD",i)).headers.get(N);return a?parseInt(a,10):0}async bucketExists(){let r={[E]:g},{url:e,headers:t}=await this._sign("HEAD","",{},r,""),s=await this._sendRequest(e,"HEAD",t);return!!(s.ok&&s.status===200)}async fileExists(r){this._checkKey(r);let e={[E]:g},t=m(r),{url:s,headers:i}=await this._sign("HEAD",t,{},e,"");try{let a=await fetch(s,{method:"HEAD",headers:i});return a.ok&&a.status===200?!0:(a.status===404||this._handleErrorResponse(a),!1)}catch(a){let n=a instanceof Error?a.message:String(a);throw this._log("error",`${d}Failed to check if file exists: ${n}`),new Error(`${d}Failed to check if file exists: ${n}`)}}async _sign(r,e,t,s,i){let a=new Date().toISOString().replace(/[:-]|\.\d{3}/g,""),n=typeof e=="string"&&e.length>0?new URL(e,this.endpoint):new URL(this.endpoint);n.pathname=`/${encodeURI(this.bucketName)}${n.pathname}`,s[E]=i?await k(i):g,s[pe]=a,s[_e]=n.host;let h=this._buildCanonicalHeaders(s),o=Object.keys(s).map(y=>y.toLowerCase()).sort().join(";"),u=await this._buildCanonicalRequest(r,n,t,h,o,i),p=await this._buildStringToSign(a,u),_=await this._calculateSignature(a,p),w=this._buildAuthorizationHeader(a,o,_);return s[Re]=w,{url:n.toString(),headers:s}}_buildCanonicalHeaders(r){return Object.entries(r).map(([e,t])=>`${e.toLowerCase()}:${String(t).trim()}`).sort().join(` +var se=crypto.createHmac||(await import("node:crypto")).createHmac,ie=crypto.createHash||(await import("node:crypto")).createHash;typeof se>"u"&&typeof ie>"u"&&console.error("ultralight-S3 Module: Crypto functions are not available, please report the issue with necessary description: https://github.com/sentienhq/ultralight-s3/issues");var V="AWS4-HMAC-SHA256",B="aws4_request",F="s3",ue="2",g="UNSIGNED-PAYLOAD",de="application/octet-stream",z="application/xml",L="application/json",fe=["accessKeyId","secretAccessKey","sessionToken","password"],Q=5*1024*1024,E="x-amz-content-sha256",pe="x-amz-date",_e="host",Re="Authorization",O="Content-Type",b="Content-Length",X="etag",W="last-modified",d="ultralight-s3 Module: ",ge=`${d}accessKeyId must be a non-empty string`,Ee=`${d}secretAccessKey must be a non-empty string`,we=`${d}endpoint must be a non-empty string`,ye=`${d}bucketName must be a non-empty string`,Y=`${d}key must be a non-empty string`,x=`${d}uploadId must be a non-empty string`,J=`${d}parts must be a non-empty array`,Z=`${d}Each part must have a partNumber (number) and ETag (string)`,M=`${d}data must be a Buffer or string`,ee=`${d}prefix must be a string`,te=`${d}maxKeys must be a positive integer`,re=`${d}delimiter must be a string`,me={contents:!0},Oe=r=>`%${r.charCodeAt(0).toString(16).toUpperCase()}`,K=r=>encodeURIComponent(r).replace(/[!'()*]/g,Oe),m=r=>K(r).replace(/%2F/g,"/"),ae=class{constructor({accessKeyId:r,secretAccessKey:e,endpoint:t,bucketName:s,region:i="auto",maxRequestSizeInBytes:a=Q,requestAbortTimeout:n=void 0,logger:h=void 0}){this.getBucketName=()=>this.bucketName,this.setBucketName=o=>{this.bucketName=o},this.getRegion=()=>this.region,this.setRegion=o=>{this.region=o},this.getEndpoint=()=>this.endpoint,this.setEndpoint=o=>{this.endpoint=o},this.getMaxRequestSizeInBytes=()=>this.maxRequestSizeInBytes,this.setMaxRequestSizeInBytes=o=>{this.maxRequestSizeInBytes=o},this.getProps=()=>({accessKeyId:this.accessKeyId,secretAccessKey:this.secretAccessKey,region:this.region,bucket:this.bucketName,endpoint:this.endpoint,maxRequestSizeInBytes:this.maxRequestSizeInBytes,requestAbortTimeout:this.requestAbortTimeout,logger:this.logger}),this.setProps=o=>{this._validateConstructorParams(o.accessKeyId,o.secretAccessKey,o.bucketName,o.endpoint),this.accessKeyId=o.accessKeyId,this.secretAccessKey=o.secretAccessKey,this.region=o.region||"auto",this.bucketName=o.bucketName,this.endpoint=o.endpoint,this.maxRequestSizeInBytes=o.maxRequestSizeInBytes||Q,this.requestAbortTimeout=o.requestAbortTimeout,this.logger=o.logger},this._validateConstructorParams(r,e,t,s),this.accessKeyId=r,this.secretAccessKey=e,this.endpoint=t,this.bucketName=s,this.region=i,this.maxRequestSizeInBytes=a,this.requestAbortTimeout=n,this.logger=h}_validateConstructorParams(r,e,t,s){if(typeof r!="string"||r.trim().length===0)throw new TypeError(ge);if(typeof e!="string"||e.trim().length===0)throw new TypeError(Ee);if(typeof t!="string"||t.trim().length===0)throw new TypeError(we);if(typeof s!="string"||s.trim().length===0)throw new TypeError(ye)}_checkMethodHeadnGet(r){if(r!=="GET"&&r!=="HEAD")throw this._log("error",`${d}method must be either GET or HEAD`),new Error("method must be either GET or HEAD")}_checkKey(r){if(typeof r!="string"||r.trim().length===0)throw this._log("error",Y),new TypeError(Y)}_checkDelimiter(r){if(typeof r!="string"||r.trim().length===0)throw this._log("error",re),new TypeError(re)}_checkPrefix(r){if(typeof r!="string")throw this._log("error",ee),new TypeError(ee)}_checkMaxKeys(r){if(typeof r!="number"||r<=0)throw this._log("error",te),new TypeError(te)}_checkOpts(r){if(typeof r!="object")throw this._log("error",`${d}opts must be an object`),new TypeError(`${d}opts must be an object`)}_log(r,e,t={}){if(this.logger&&typeof this.logger[r]=="function"){let s=n=>typeof n!="object"||n===null?n:Object.keys(n).reduce((h,o)=>(fe.includes(o.toLowerCase())?h[o]="[REDACTED]":typeof n[o]=="object"&&n[o]!==null?h[o]=s(n[o]):h[o]=n[o],h),Array.isArray(n)?[]:{}),i=s(t),a={timestamp:new Date().toISOString(),level:r,message:e,...i,context:s({bucketName:this.bucketName,region:this.region,endpoint:this.endpoint,accessKeyId:this.accessKeyId?`${this.accessKeyId.substring(0,4)}...`:void 0})};this.logger[r](a)}}async getContentLength(r){this._checkKey(r);let e={[E]:g},t=m(r),{url:s,headers:i}=await this._sign("HEAD",t,{},e,""),a=(await this._sendRequest(s,"HEAD",i)).headers.get(b);return a?parseInt(a,10):0}async bucketExists(){let r={[E]:g},{url:e,headers:t}=await this._sign("HEAD","",{},r,""),s=await this._sendRequest(e,"HEAD",t);return!!(s.ok&&s.status===200)}async fileExists(r){this._checkKey(r);let e={[E]:g},t=m(r),{url:s,headers:i}=await this._sign("HEAD",t,{},e,"");try{let a=await fetch(s,{method:"HEAD",headers:i});return a.ok&&a.status===200?!0:(a.status===404||this._handleErrorResponse(a),!1)}catch(a){let n=a instanceof Error?a.message:String(a);throw this._log("error",`${d}Failed to check if file exists: ${n}`),new Error(`${d}Failed to check if file exists: ${n}`)}}async _sign(r,e,t,s,i){let a=new Date().toISOString().replace(/[:-]|\.\d{3}/g,""),n=typeof e=="string"&&e.length>0?new URL(e,this.endpoint):new URL(this.endpoint);n.pathname=`/${encodeURI(this.bucketName)}${n.pathname}`,s[E]=i?await k(i):g,s[pe]=a,s[_e]=n.host;let h=this._buildCanonicalHeaders(s),o=Object.keys(s).map(y=>y.toLowerCase()).sort().join(";"),u=await this._buildCanonicalRequest(r,n,t,h,o,i),p=await this._buildStringToSign(a,u),_=await this._calculateSignature(a,p),w=this._buildAuthorizationHeader(a,o,_);return s[Re]=w,{url:n.toString(),headers:s}}_buildCanonicalHeaders(r){return Object.entries(r).map(([e,t])=>`${e.toLowerCase()}:${String(t).trim()}`).sort().join(` `)}async _buildCanonicalRequest(r,e,t,s,i,a){return[r,e.pathname,this._buildCanonicalQueryString(t),`${s} `,i,a?await k(a):g].join(` `)}async _buildStringToSign(r,e){let t=[r.slice(0,8),this.region,F,B].join("/");return[V,r,t,await k(e)].join(` -`)}async _calculateSignature(r,e){let t=await this._getSignatureKey(r.slice(0,8));return U(t,e,"hex")}_buildAuthorizationHeader(r,e,t){let s=[r.slice(0,8),this.region,F,B].join("/");return[`${V} Credential=${this.accessKeyId}/${s}`,`SignedHeaders=${e}`,`Signature=${t}`].join(", ")}async list(r="/",e="",t=1e3,s="GET",i={}){this._checkDelimiter(r),this._checkPrefix(e),this._checkMaxKeys(t),this._checkMethodHeadnGet(s),this._checkOpts(i),this._log("info",`Listing objects in ${e}`);let a={"list-type":ue,"max-keys":String(t),...i};e.length>0&&(a.prefix=e);let n={[O]:L,[E]:g},h=r==="/"?r:K(r),{url:o,headers:u}=await this._sign("GET",h,a,n,""),p=`${o}?${new URLSearchParams(a)}`,_=await this._sendRequest(p,"GET",u),w=await _.text();if(s==="HEAD"){let b=_.headers.get(N),C=_.headers.get(W),le=_.headers.get(X);return{size:b?+b:void 0,mtime:C?new Date(C):void 0,ETag:le||void 0}}let y=D(w),v=y.listBucketResult||y.error||y;return v.contents||v}async listMultiPartUploads(r="/",e="",t="GET",s={}){var i,a,n;this._checkDelimiter(r),this._checkPrefix(e),this._checkMethodHeadnGet(t),this._checkOpts(s),this._log("info",`Listing multipart uploads in ${e}`);let h={uploads:"",...s},o={[O]:L,[E]:g},u=r==="/"?r:K(r),{url:p,headers:_}=await this._sign("GET",u,h,o,""),w=`${p}?${new URLSearchParams(h)}`,y=await this._sendRequest(w,"GET",_),v=await y.text();if(t==="HEAD")return{size:+((i=y.headers.get(N))!==null&&i!==void 0?i:"0"),mtime:new Date((a=y.headers.get(W))!==null&&a!==void 0?a:""),ETag:(n=y.headers.get(X))!==null&&n!==void 0?n:""};let b=D(v),C=b.listMultipartUploadsResult||b.error||b;return C.uploads||C}async get(r,e={}){this._checkKey(r),this._log("info",`Getting object ${r}`);let t={[O]:L,[E]:g},s=m(r),{url:i,headers:a}=await this._sign("GET",s,e,t,"");return(await this._sendRequest(i,"GET",a)).text()}async getResponse(r,e=!0,t=0,s=this.maxRequestSizeInBytes,i={}){this._checkKey(r);let a=i,n={[O]:L,[E]:g,...e?{}:{range:`bytes=${t}-${s-1}`}},h=m(r),{url:o,headers:u}=await this._sign("GET",h,a,n,""),p=`${o}?${new URLSearchParams(a)}`;return this._sendRequest(p,"GET",u)}async put(r,e){if(this._checkKey(r),!(e instanceof Buffer||typeof e=="string"))throw this._log("error",M),new TypeError(M);this._log("info",`Uploading object ${r}`);let t=typeof e=="string"?Buffer.byteLength(e):e.length,s={[N]:t},i=m(r),{url:a,headers:n}=await this._sign("PUT",i,{},s,e);return await this._sendRequest(a,"PUT",n,e)}async getMultipartUploadId(r,e=de){if(this._checkKey(r),typeof e!="string")throw this._log("error",`${d}fileType must be a string`),new TypeError(`${d}fileType must be a string`);this._log("info",`Initiating multipart upload for object ${r}`);let t={uploads:""},s={[O]:e,[E]:g},i=m(r),{url:a,headers:n}=await this._sign("POST",i,t,s,""),h=`${a}?${new URLSearchParams(t)}`,o=await(await this._sendRequest(h,"POST",n)).text(),u=D(o);if(typeof u=="object"&&u!==null&&"error"in u&&typeof u.error=="object"&&u.error!==null&&"message"in u.error){let p=String(u.error.message);throw this._log("error",`${d}Failed to abort multipart upload: ${p}`),new Error(`${d}Failed to abort multipart upload: ${p}`)}if(typeof u=="object"&&u!==null){if(!u.initiateMultipartUploadResult||!u.initiateMultipartUploadResult.uploadId)throw this._log("error",`${d}Failed to create multipart upload: no uploadId in response`),new Error(`${d}Failed to create multipart upload: Missing upload ID in response`);return u.initiateMultipartUploadResult.uploadId}else throw this._log("error",`${d}Failed to create multipart upload: unexpected response format`),new Error(`${d}Failed to create multipart upload: Unexpected response format`)}async uploadPart(r,e,t,s,i={}){this._validateUploadPartParams(r,e,t,s,i);let a={uploadId:t,partNumber:s,...i},n={[N]:e.length},h=m(r),{url:o,headers:u}=await this._sign("PUT",h,a,n,e),p=`${o}?${new URLSearchParams(a)}`,_=(await this._sendRequest(p,"PUT",u,e)).headers.get("etag")||"";return{partNumber:s,ETag:_}}_validateUploadPartParams(r,e,t,s,i){if(this._checkKey(r),!(e instanceof Buffer||typeof e=="string"))throw this._log("error",M),new TypeError(M);if(typeof t!="string"||t.trim().length===0)throw this._log("error",x),new TypeError(x);if(!Number.isInteger(s)||s<=0)throw this._log("error",`${d}partNumber must be a positive integer`),new TypeError(`${d}partNumber must be a positive integer`);this._checkOpts(i)}async completeMultipartUpload(r,e,t){if(this._checkKey(r),typeof e!="string"||e.trim().length===0)throw this._log("error",x),new TypeError(x);if(!Array.isArray(t)||t.length===0)throw this._log("error",J),new TypeError(J);if(!t.every(w=>typeof w.partNumber=="number"&&typeof w.ETag=="string"))throw this._log("error",Z),new TypeError(Z);this._log("info",`Complete multipart upload ${e} for object ${r}`);let s={uploadId:e},i=this._buildCompleteMultipartUploadXml(t),a={[O]:z,[N]:Buffer.byteLength(i).toString(),[E]:await k(i)},n=m(r),{url:h,headers:o}=await this._sign("POST",n,s,a,i),u=`${h}?${new URLSearchParams(s)}`,p=await(await this._sendRequest(u,"POST",o,i)).text(),_=D(p);if(typeof _=="object"&&_!==null&&"error"in _&&typeof _.error=="object"&&_.error!==null&&"message"in _.error){let w=String(_.error.message);throw this._log("error",`${d}Failed to abort multipart upload: ${w}`),new Error(`${d}Failed to abort multipart upload: ${w}`)}return _.completeMultipartUploadResult}async abortMultipartUpload(r,e){if(this._checkKey(r),typeof e!="string"||e.trim().length===0)throw this._log("error",x),new TypeError(x);this._log("info",`Aborting multipart upload ${e} for object ${r}`);let t={uploadId:e},s={[O]:z,[E]:g};try{let i=m(r),{url:a,headers:n}=await this._sign("DELETE",i,t,s,""),h=`${a}?${new URLSearchParams(t)}`,o=await this._sendRequest(h,"DELETE",n);if(o.ok){let u=await o.text(),p=D(u);if(typeof p=="object"&&p!==null&&"error"in p&&typeof p.error=="object"&&p.error!==null&&"message"in p.error){let _=String(p.error.message);throw this._log("error",`${d}Failed to abort multipart upload: ${_}`),new Error(`${d}Failed to abort multipart upload: ${_}`)}return{status:"Aborted",key:r,uploadId:e,response:p}}else throw this._log("error",`${d}Abort request failed with status ${o.status}`),new Error(`${d}Abort request failed with status ${o.status}`)}catch(i){let a=i instanceof Error?i.message:String(i);throw this._log("error",`${d}Failed to abort multipart upload for key ${r}: ${a}`),new Error(`${d}Failed to abort multipart upload for key ${r}: ${a}`)}}_buildCompleteMultipartUploadXml(r){return` +`)}async _calculateSignature(r,e){let t=await this._getSignatureKey(r.slice(0,8));return U(t,e,"hex")}_buildAuthorizationHeader(r,e,t){let s=[r.slice(0,8),this.region,F,B].join("/");return[`${V} Credential=${this.accessKeyId}/${s}`,`SignedHeaders=${e}`,`Signature=${t}`].join(", ")}async list(r="/",e="",t=1e3,s="GET",i={}){this._checkDelimiter(r),this._checkPrefix(e),this._checkMaxKeys(t),this._checkMethodHeadnGet(s),this._checkOpts(i),this._log("info",`Listing objects in ${e}`);let a={"list-type":ue,"max-keys":String(t),...i};e.length>0&&(a.prefix=e);let n={[O]:L,[E]:g},h=r==="/"?r:K(r),{url:o,headers:u}=await this._sign("GET",h,a,n,""),p=`${o}?${new URLSearchParams(a)}`,_=await this._sendRequest(p,"GET",u),w=await _.text();if(s==="HEAD"){let N=_.headers.get(b),C=_.headers.get(W),le=_.headers.get(X);return{size:N?+N:void 0,mtime:C?new Date(C):void 0,ETag:le||void 0}}let y=D(w),v=y.listBucketResult||y.error||y;return v.contents||v}async listMultiPartUploads(r="/",e="",t="GET",s={}){var i,a,n;this._checkDelimiter(r),this._checkPrefix(e),this._checkMethodHeadnGet(t),this._checkOpts(s),this._log("info",`Listing multipart uploads in ${e}`);let h={uploads:"",...s},o={[O]:L,[E]:g},u=r==="/"?r:K(r),{url:p,headers:_}=await this._sign("GET",u,h,o,""),w=`${p}?${new URLSearchParams(h)}`,y=await this._sendRequest(w,"GET",_),v=await y.text();if(t==="HEAD")return{size:+((i=y.headers.get(b))!==null&&i!==void 0?i:"0"),mtime:new Date((a=y.headers.get(W))!==null&&a!==void 0?a:""),ETag:(n=y.headers.get(X))!==null&&n!==void 0?n:""};let N=D(v),C=N.listMultipartUploadsResult||N.error||N;return C.uploads||C}async get(r,e={}){this._checkKey(r),this._log("info",`Getting object ${r}`);let t={[O]:L,[E]:g},s=m(r),{url:i,headers:a}=await this._sign("GET",s,e,t,"");return(await this._sendRequest(i,"GET",a)).text()}async getResponse(r,e=!0,t=0,s=this.maxRequestSizeInBytes,i={}){this._checkKey(r);let a=i,n={[O]:L,[E]:g,...e?{}:{range:`bytes=${t}-${s-1}`}},h=m(r),{url:o,headers:u}=await this._sign("GET",h,a,n,""),p=`${o}?${new URLSearchParams(a)}`;return this._sendRequest(p,"GET",u)}async put(r,e){if(this._checkKey(r),!(e instanceof Buffer||typeof e=="string"))throw this._log("error",M),new TypeError(M);this._log("info",`Uploading object ${r}`);let t=typeof e=="string"?Buffer.byteLength(e):e.length,s={[b]:t},i=m(r),{url:a,headers:n}=await this._sign("PUT",i,{},s,e);return await this._sendRequest(a,"PUT",n,e)}async getMultipartUploadId(r,e=de){if(this._checkKey(r),typeof e!="string")throw this._log("error",`${d}fileType must be a string`),new TypeError(`${d}fileType must be a string`);this._log("info",`Initiating multipart upload for object ${r}`);let t={uploads:""},s={[O]:e,[E]:g},i=m(r),{url:a,headers:n}=await this._sign("POST",i,t,s,""),h=`${a}?${new URLSearchParams(t)}`,o=await(await this._sendRequest(h,"POST",n)).text(),u=D(o);if(typeof u=="object"&&u!==null&&"error"in u&&typeof u.error=="object"&&u.error!==null&&"message"in u.error){let p=String(u.error.message);throw this._log("error",`${d}Failed to abort multipart upload: ${p}`),new Error(`${d}Failed to abort multipart upload: ${p}`)}if(typeof u=="object"&&u!==null){if(!u.initiateMultipartUploadResult||!u.initiateMultipartUploadResult.uploadId)throw this._log("error",`${d}Failed to create multipart upload: no uploadId in response`),new Error(`${d}Failed to create multipart upload: Missing upload ID in response`);return u.initiateMultipartUploadResult.uploadId}else throw this._log("error",`${d}Failed to create multipart upload: unexpected response format`),new Error(`${d}Failed to create multipart upload: Unexpected response format`)}async uploadPart(r,e,t,s,i={}){this._validateUploadPartParams(r,e,t,s,i);let a={uploadId:t,partNumber:s,...i},n={[b]:e.length},h=m(r),{url:o,headers:u}=await this._sign("PUT",h,a,n,e),p=`${o}?${new URLSearchParams(a)}`,_=(await this._sendRequest(p,"PUT",u,e)).headers.get("etag")||"";return{partNumber:s,ETag:_}}_validateUploadPartParams(r,e,t,s,i){if(this._checkKey(r),!(e instanceof Buffer||typeof e=="string"))throw this._log("error",M),new TypeError(M);if(typeof t!="string"||t.trim().length===0)throw this._log("error",x),new TypeError(x);if(!Number.isInteger(s)||s<=0)throw this._log("error",`${d}partNumber must be a positive integer`),new TypeError(`${d}partNumber must be a positive integer`);this._checkOpts(i)}async completeMultipartUpload(r,e,t){if(this._checkKey(r),typeof e!="string"||e.trim().length===0)throw this._log("error",x),new TypeError(x);if(!Array.isArray(t)||t.length===0)throw this._log("error",J),new TypeError(J);if(!t.every(w=>typeof w.partNumber=="number"&&typeof w.ETag=="string"))throw this._log("error",Z),new TypeError(Z);this._log("info",`Complete multipart upload ${e} for object ${r}`);let s={uploadId:e},i=this._buildCompleteMultipartUploadXml(t),a={[O]:z,[b]:Buffer.byteLength(i).toString(),[E]:await k(i)},n=m(r),{url:h,headers:o}=await this._sign("POST",n,s,a,i),u=`${h}?${new URLSearchParams(s)}`,p=await(await this._sendRequest(u,"POST",o,i)).text(),_=D(p);if(typeof _=="object"&&_!==null&&"error"in _&&typeof _.error=="object"&&_.error!==null&&"message"in _.error){let w=String(_.error.message);throw this._log("error",`${d}Failed to abort multipart upload: ${w}`),new Error(`${d}Failed to abort multipart upload: ${w}`)}return _.completeMultipartUploadResult}async abortMultipartUpload(r,e){if(this._checkKey(r),typeof e!="string"||e.trim().length===0)throw this._log("error",x),new TypeError(x);this._log("info",`Aborting multipart upload ${e} for object ${r}`);let t={uploadId:e},s={[O]:z,[E]:g};try{let i=m(r),{url:a,headers:n}=await this._sign("DELETE",i,t,s,""),h=`${a}?${new URLSearchParams(t)}`,o=await this._sendRequest(h,"DELETE",n);if(o.ok){let u=await o.text(),p=D(u);if(typeof p=="object"&&p!==null&&"error"in p&&typeof p.error=="object"&&p.error!==null&&"message"in p.error){let _=String(p.error.message);throw this._log("error",`${d}Failed to abort multipart upload: ${_}`),new Error(`${d}Failed to abort multipart upload: ${_}`)}return{status:"Aborted",key:r,uploadId:e,response:p}}else throw this._log("error",`${d}Abort request failed with status ${o.status}`),new Error(`${d}Abort request failed with status ${o.status}`)}catch(i){let a=i instanceof Error?i.message:String(i);throw this._log("error",`${d}Failed to abort multipart upload for key ${r}: ${a}`),new Error(`${d}Failed to abort multipart upload for key ${r}: ${a}`)}}_buildCompleteMultipartUploadXml(r){return` ${r.map(e=>` @@ -11,5 +11,5 @@ var se=crypto.createHmac||(await import("node:crypto")).createHmac,ie=crypto.cre `).join("")} - `}async delete(r){this._checkKey(r),this._log("info",`Deleting object ${r}`);let e={[O]:L,[E]:g},t=m(r),{url:s,headers:i}=await this._sign("DELETE",t,{},e,"");return(await this._sendRequest(s,"DELETE",i)).text()}async _sendRequest(r,e,t,s){this._log("info",`Sending ${e} request to ${r}, headers: ${JSON.stringify(t)}`);let i=await fetch(r,{method:e,headers:t,body:s,signal:this.requestAbortTimeout!==void 0?AbortSignal.timeout(this.requestAbortTimeout):void 0});return i.ok||await this._handleErrorResponse(i),i}async _handleErrorResponse(r){let e=await r.text(),t=r.headers.get("x-amz-error-code")||"Unknown",s=r.headers.get("x-amz-error-message")||r.statusText;throw this._log("error",`${d}Request failed with status ${r.status}: ${t} - ${s},err body: ${e}`),new Error(`${d}Request failed with status ${r.status}: ${t} - ${s}, err body: ${e}`)}_buildCanonicalQueryString(r){return Object.keys(r).length<1?"":Object.keys(r).sort().map(e=>`${encodeURIComponent(e)}=${encodeURIComponent(r[e])}`).join("&")}async _getSignatureKey(r){let e=await U(`AWS4${this.secretAccessKey}`,r),t=await U(e,this.region),s=await U(t,F);return U(s,B)}},k=async r=>{let e=ie("sha256");return e.update(r),e.digest("hex")},U=async(r,e,t)=>{let s=se("sha256",r);return s.update(e),s.digest(t)},D=r=>{let e=a=>a.replace(/"/g,'"').replace(/'/g,"'").replace(/</g,"<").replace(/>/g,">").replace(/&/g,"&"),t={},s=/<(\w)([-\w]+)(?:\/|[^>]*>((?:(?!<\1)[\s\S])*)<\/\1\2)>/gm,i;for(;i=s.exec(r);){let[,a,n,h]=i,o=a.toLowerCase()+n,u=h!=null?D(h):!0;typeof u=="string"?t[o]=e(u):Array.isArray(t[o])?t[o].push(u):t[o]=t[o]!=null?[t[o],u]:me[o]?[u]:u}return Object.keys(t).length?t:e(r)};import he from"avro-js";var c={MISSING_ARGUMENT:"MISSING_ARGUMENT",COLLECTION_EXISTS:"COLLECTION_EXISTS",CREATE_COLLECTION_ERROR:"CREATE_COLLECTION_ERROR",RENAME_COLLECTION_ERROR:"RENAME_COLLECTION_ERROR",REMOVE_COLLECTION_ERROR:"REMOVE_COLLECTION_ERROR",UPDATE_COLLECTION_SCHEMA_ERROR:"UPDATE_COLLECTION_SCHEMA_ERROR",COLLECTION_NOT_FOUND:"COLLECTION_NOT_FOUND",SCHEMA_VALIDATION_ERROR:"SCHEMA_VALIDATION_ERROR",DOCUMENT_VALIDATION_ERROR:"DOCUMENT_VALIDATION_ERROR",S3_OPERATION_ERROR:"S3_OPERATION_ERROR",FIND_ERROR:"FIND_ERROR",FIND_ONE_ERROR:"FIND_ONE_ERROR",SAVE_DATA_ERROR:"SAVE_DATA_ERROR",INSERT_ERROR:"INSERT_ERROR",UPDATE_ERROR:"UPDATE_ERROR",UPDATE_ONE_ERROR:"UPDATE_ONE_ERROR",DELETE_ERROR:"DELETE_ERROR",COUNT_ERROR:"COUNT_ERROR",UNKNOWN_ERROR:"UNKNOWN_ERROR"},f=class extends Error{constructor(e,t=c.UNKNOWN_ERROR){super(`lowstorageError: ${e} :: code: ${t}`),this.name=this.constructor.name,this.code=t,Error.captureStackTrace(this,this.constructor)}},P=class extends f{constructor(e){super(`Collection ${e} not found`,c.COLLECTION_NOT_FOUND)}},$=class extends f{constructor(e){super(e,c.SCHEMA_VALIDATION_ERROR)}},T=class extends f{constructor(e){super(e,c.DOCUMENT_VALIDATION_ERROR)}},R=class extends f{constructor(e,t){super(`S3 ${t} operation failed: ${e}`,c.S3_OPERATION_ERROR)}};import{randomUUID as j}from"node:crypto";var S=(r,e)=>Object.keys(e).every(t=>r[t]===e[t]),oe=async()=>typeof j<"u"&&typeof j=="function"?j():typeof crypto<"u"&&typeof crypto=="object"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(r){var e=Math.random()*16|0,t=r==="x"?e:e&3|8;return t.toString(16)}),ne=(r,e="SubAutoGenerated")=>{switch(typeof r){case"string":return $e(r)?{type:"string",name:"_id",size:16,logicalType:"UUID"}:"string";case"number":return Number.isInteger(r)?"int":"float";case"boolean":return"boolean";case"object":return r===null?"null":Array.isArray(r)?{type:"array",items:ne(r[0])}:q(r,e);default:return"string"}},q=(r,e="AutoGenerated")=>{Array.isArray(r)&&(r=r[0]);let t=Object.entries(r).map(([s,i])=>({name:s,type:ne(i,`${e}.${s}`)}));return{type:"record",name:e,fields:t}},$e=r=>/^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i.test(r);var l="lowstorage",I="/",G="lowstorage",A=".avro",Te=1024*1024,Ie=5*Te,ce=class{constructor(e={accessKeyId:void 0,secretAccessKey:void 0,endpoint:void 0,bucketName:void 0,region:"auto",logger:null,dirPrefix:G}){this._checkArgs(e),this._schemas=new Map,this._s3=new ae(e),this._dirPrefix=e.dirPrefix||G,this._avro=he}_checkArgs=e=>{let t=["accessKeyId","secretAccessKey","endpoint","bucketName"];for(let s of t)if(!e[s])throw new f(`${l}: ${s} is required`,c.MISSING_ARGUMENT)};_hasColName=e=>{if(e.trim()===""||e===null||typeof e>"u")throw new f(`${l}: Collection name is required`,c.MISSING_ARGUMENT)};async listCollections(){try{let e=await this._s3.list(I,this._dirPrefix);return typeof e=="object"&&e!==null&&e.keyCount==="0"?[]:e.map(t=>t.key.slice(this._dirPrefix.length+1,-A.length))}catch(e){throw new R(`${l}: ${e.message}`,c.S3_OPERATION_ERROR)}}async collectionExists(e){try{return this._hasColName(e),await this._s3.fileExists(`${this._dirPrefix}${I}${e}${A}`)}catch(t){if(t.message.includes("Not Found"))return!1;throw new f(`${l}: ${t.message}`,c.COLLECTION_NOT_FOUND)}}async createCollection(e,t,s=[]){try{if(this._hasColName(e),!await this.collectionExists(e))return await this._s3.put(`${this._dirPrefix}${I}${e}${A}`,s.length>0?s:""),this.collection(e,t);throw new f(`${l}: Collection ${e} already exists`,c.COLLECTION_EXISTS)}catch(i){throw i instanceof f?i:new f(`${l}: ${i.message}`,c.CREATE_COLLECTION_ERROR)}}async removeCollection(e){try{this._hasColName(e);let t=`${this._dirPrefix}${I}${e}${A}`;if(await this.collectionExists(e)){await this._s3.delete(t);let i=await this.collectionExists(e);if(typeof i=="boolean")return!i;throw new R(`${l}: Failed to delete collection ${e}`,c.S3_OPERATION_ERROR)}throw new f(`${l}: Collection ${e} does not exist`,c.REMOVE_COLLECTION_ERROR)}catch(t){throw t instanceof R?t:new f(`${l}: Failed to remove collection: ${t.message}`,c.REMOVE_COLLECTION_ERROR)}}async renameCollection(e,t){try{if(this._hasColName(e),this._hasColName(t),!await this.collectionExists(e))throw new P(`${l}: Collection ${e} does not exist`,c.COLLECTION_NOT_FOUND);let i=await this.collection(e),a=await i._loadDataBuffer();if(!await this.removeCollection(e))throw new f(`${l}: Failed to rename collection`,c.RENAME_COLLECTION_ERROR);return await this.createCollection(t,i._avroType,a)}catch(s){throw s instanceof f?s:new f(`${l}: Rename collection failed: ${s.message}`,c.RENAME_COLLECTION_ERROR)}}async collection(e,t,s=!0){try{this._hasColName(e);let i=`${this._dirPrefix}${I}${e}${A}`,a,n=await this._s3.fileExists(i);if(!n&&!s)throw new f(`${l}: Collection ${e} does not exist`,c.COLLECTION_NOT_FOUND);if(t)a=this._avro.parse(t),this._schemas.set(e,a),!n&&s&&await this._s3.put(i,"");else if(this._schemas.has(e))a=this._schemas.get(e);else if(n){let h=await this._s3.get(i);a=this._avro.parse(h),this._schemas.set(e,a)}else s&&await this._s3.put(i,"");return new H(e,this._s3,a,this._dirPrefix)}catch(i){throw i.message.includes("unknown type")?new $(`${l}: Schema input is invalid: ${i.message}`,c.SCHEMA_VALIDATION_ERROR):new f(`${l}: ${i.message}`,c.COLLECTION_NOT_FOUND)}}s3=()=>this._s3},H=class{constructor(e,t,s=void 0,i=G){this._colName=e,this._s3=t,this._avro=he,this._avroType=s,this._dirPrefix=i}async insert(e,t=void 0){try{if(e==null)throw new f(`${l}: Document is required for insert`,c.INSERT_ERROR);if(typeof e!="object"&&!Array.isArray(e))throw new T(`${l}: Document must be an object or an array`,c.DOCUMENT_VALIDATION_ERROR);let s=Array.isArray(e)?e:[e],i=t?this._avro.parse(t):this._avroType||this._avro.parse(q(e));if(!i)throw new $(`${l}: Schema is required - Pass a schema to the insert method`,c.SCHEMA_VALIDATION_ERROR);this._avroType=i;let a=this._avro.parse({type:"array",items:this._avroType}),n=await this._loadDataBuffer(),h=n.length>0?a.fromBuffer(n):[];for(let u of s){if(typeof u!="object"||u===null)throw new T(`${l}: Invalid input: input must be an object or an array of objects`,c.DOCUMENT_VALIDATION_ERROR);if(u._id=u._id||await oe(),!this._avroType.isValid(u))throw new T(`${l}: Invalid document or schema`,c.DOCUMENT_VALIDATION_ERROR);h.push(u)}if(!await this._saveDataBuffer(a.toBuffer(h)))throw new R(`${l}: Failed to insert document`,c.S3_OPERATION_ERROR);return s}catch(s){throw s.message.includes("unknown type")?new $(`${l}: Schema input is invalid: ${s.message}`,c.SCHEMA_VALIDATION_ERROR):s instanceof f?s:new f(`${l} Insert operation failed: ${s.message}`,c.INSERT_ERROR)}}async _loadDataBuffer(){try{let e=`${this._dirPrefix}${I}${this._colName}${A}`,t=this._s3.getMaxRequestSizeInBytes()||Ie,s=await this._s3.get(e);if(s.length-1)return Buffer.from("");throw new R(`${l}: Failed to load data buffer: ${e.message}`,c.S3_OPERATION_ERROR)}}async _saveDataBuffer(e){try{let t=`${this._dirPrefix}${I}${this._colName}${A}`;if((await this._s3.put(t,e)).status!==200)throw new R(`${l}: Failed to save data`,c.S3_OPERATION_ERROR);return!0}catch(t){throw t instanceof R?t:new f(`${l}: ${t.message}`,c.SAVE_DATA_ERROR)}}async find(e={},t={}){try{if(e==null)throw new f(`${l}: Query is required for update`,c.MISSING_ARGUMENT);let s=await this._loadDataBuffer();if(s.length===0)return[];let i=this._avro.parse({type:"array",items:this._avroType}),a=s.length>0?i.fromBuffer(s):[],n=parseInt(t.skip,10)||0,h=parseInt(t.limit,10)?n+parseInt(t.limit,10):void 0;return a.filter(u=>S(u,e)).slice(n,h)}catch(s){throw new f(`${l}: Find operation failed: ${s.message}`,c.FIND_ERROR)}}async findOne(e={}){try{if(e==null)throw new f(`${l}: Query is required for update`,c.MISSING_ARGUMENT);return(await this.find(e))[0]||[]}catch(t){throw new f(`${l}: FindOne operation failed: ${t.message}`,c.FIND_ONE_ERROR)}}async update(e={},t={}){try{if(e==null||t===void 0||t===null)throw new f(`${l}: Query is required for update`,c.MISSING_ARGUMENT);if(!this._avroType)throw new $(`${l}: Schema is not defined for this collection`,c.SCHEMA_VALIDATION_ERROR);let s=await this._loadDataBuffer();if(s.length===0)return 0;let i=this._avro.parse({type:"array",items:this._avroType}),a=s.length>0?i.fromBuffer(s):[],n=0;for(let h=0;h0&&!await this._saveDataBuffer(i.toBuffer(a)))throw new R(`${l}: Failed to update document`,c.S3_OPERATION_ERROR);return n}catch(s){throw s instanceof R?s:new f(`${l}: Update operation failed: ${s.message}`,c.UPDATE_ERROR)}}async updateOne(e={},t={}){try{if(e==null||t===void 0||t===null)throw new f(`${l}: Query is required`,c.MISSING_ARGUMENT);if(!this._avroType)throw new $(`${l}: Schema is not defined for this collection`,c.SCHEMA_VALIDATION_ERROR);let s=await this._loadDataBuffer();if(s.length===0)return 0;let i=this._avro.parse({type:"array",items:this._avroType}),a=s.length>0?i.fromBuffer(s):[],n=a.findIndex(h=>S(h,e));if(n!==-1){let h={...a[n],...t};if(!this._avroType.isValid(h))throw new T(`${l}: Invalid document or schema`,c.DOCUMENT_VALIDATION_ERROR);if(a[n]=h,!await this._saveDataBuffer(i.toBuffer(a)))throw new R(`${l}: Failed to update document`,c.S3_OPERATION_ERROR);return 1}return 0}catch(s){throw s instanceof f?s:new f(`${l}: UpdateOne operation failed: ${s.message}`,c.UPDATE_ONE_ERROR)}}async delete(e={}){try{if(e==null)throw new f(`${l}: Query is required`,c.MISSING_ARGUMENT);let t=await this._loadDataBuffer();if(t.length===0)return 0;let s=this._avro.parse({type:"array",items:this._avroType}),i=t.length>0?s.fromBuffer(t):[],a=i.length,n=i.filter(o=>!S(o,e));if(!await this._saveDataBuffer(s.toBuffer(n)))throw new R(`${l}: Failed to delete document`,c.S3_OPERATION_ERROR);return a-n.length}catch(t){throw t instanceof R?t:new f(`${l}: Delete operation failed: ${t.message}`,c.DELETE_ERROR)}}async deleteAll(){try{let e=await this._loadDataBuffer();if(e.length===0)return 0;let t=this._avro.parse({type:"array",items:this._avroType}),s=e.length>0?t.fromBuffer(e):[],i=s.length,a=s.filter(h=>!S(h,{}));if(!await this._saveDataBuffer(t.toBuffer(a)))throw new R(`${l}: Failed to delete document`,c.S3_OPERATION_ERROR);return i-a.length}catch(e){throw e instanceof R?e:new f(`${l}: Delete operation failed: ${e.message}`,c.DELETE_ERROR)}}async count(e={}){try{if(Object.keys(e).length===0){let t=await this._loadDataBuffer();return t.length===0?0:this._avro.parse({type:"array",items:this._avroType}).fromBuffer(t).length||0}return(await this.find(e)).length}catch(t){throw new f(`${l}: Count operation failed: ${t.message}`,c.COUNT_ERROR)}}};export{ce as lowstorage,f as lowstorageError,c as lowstorage_ERROR_CODES}; + `}async delete(r){this._checkKey(r),this._log("info",`Deleting object ${r}`);let e={[O]:L,[E]:g},t=m(r),{url:s,headers:i}=await this._sign("DELETE",t,{},e,"");return(await this._sendRequest(s,"DELETE",i)).text()}async _sendRequest(r,e,t,s){this._log("info",`Sending ${e} request to ${r}, headers: ${JSON.stringify(t)}`);let i=await fetch(r,{method:e,headers:t,body:s,signal:this.requestAbortTimeout!==void 0?AbortSignal.timeout(this.requestAbortTimeout):void 0});return i.ok||await this._handleErrorResponse(i),i}async _handleErrorResponse(r){let e=await r.text(),t=r.headers.get("x-amz-error-code")||"Unknown",s=r.headers.get("x-amz-error-message")||r.statusText;throw this._log("error",`${d}Request failed with status ${r.status}: ${t} - ${s},err body: ${e}`),new Error(`${d}Request failed with status ${r.status}: ${t} - ${s}, err body: ${e}`)}_buildCanonicalQueryString(r){return Object.keys(r).length<1?"":Object.keys(r).sort().map(e=>`${encodeURIComponent(e)}=${encodeURIComponent(r[e])}`).join("&")}async _getSignatureKey(r){let e=await U(`AWS4${this.secretAccessKey}`,r),t=await U(e,this.region),s=await U(t,F);return U(s,B)}},k=async r=>{let e=ie("sha256");return e.update(r),e.digest("hex")},U=async(r,e,t)=>{let s=se("sha256",r);return s.update(e),s.digest(t)},D=r=>{let e=a=>a.replace(/"/g,'"').replace(/'/g,"'").replace(/</g,"<").replace(/>/g,">").replace(/&/g,"&"),t={},s=/<(\w)([-\w]+)(?:\/|[^>]*>((?:(?!<\1)[\s\S])*)<\/\1\2)>/gm,i;for(;i=s.exec(r);){let[,a,n,h]=i,o=a.toLowerCase()+n,u=h!=null?D(h):!0;typeof u=="string"?t[o]=e(u):Array.isArray(t[o])?t[o].push(u):t[o]=t[o]!=null?[t[o],u]:me[o]?[u]:u}return Object.keys(t).length?t:e(r)};import he from"avro-js";var c={MISSING_ARGUMENT:"MISSING_ARGUMENT",COLLECTION_EXISTS:"COLLECTION_EXISTS",CREATE_COLLECTION_ERROR:"CREATE_COLLECTION_ERROR",RENAME_COLLECTION_ERROR:"RENAME_COLLECTION_ERROR",REMOVE_COLLECTION_ERROR:"REMOVE_COLLECTION_ERROR",UPDATE_COLLECTION_SCHEMA_ERROR:"UPDATE_COLLECTION_SCHEMA_ERROR",COLLECTION_NOT_FOUND:"COLLECTION_NOT_FOUND",SCHEMA_VALIDATION_ERROR:"SCHEMA_VALIDATION_ERROR",DOCUMENT_VALIDATION_ERROR:"DOCUMENT_VALIDATION_ERROR",S3_OPERATION_ERROR:"S3_OPERATION_ERROR",FIND_ERROR:"FIND_ERROR",FIND_ONE_ERROR:"FIND_ONE_ERROR",SAVE_DATA_ERROR:"SAVE_DATA_ERROR",INSERT_ERROR:"INSERT_ERROR",UPDATE_ERROR:"UPDATE_ERROR",UPDATE_ONE_ERROR:"UPDATE_ONE_ERROR",DELETE_ERROR:"DELETE_ERROR",COUNT_ERROR:"COUNT_ERROR",UNKNOWN_ERROR:"UNKNOWN_ERROR"},f=class extends Error{constructor(e,t=c.UNKNOWN_ERROR){super(`lowstorageError: ${e} :: code: ${t}`),this.name=this.constructor.name,this.code=t,Error.captureStackTrace(this,this.constructor)}},P=class extends f{constructor(e){super(`Collection ${e} not found`,c.COLLECTION_NOT_FOUND)}},$=class extends f{constructor(e){super(e,c.SCHEMA_VALIDATION_ERROR)}},T=class extends f{constructor(e){super(e,c.DOCUMENT_VALIDATION_ERROR)}},R=class extends f{constructor(e,t){super(`S3 ${t} operation failed: ${e}`,c.S3_OPERATION_ERROR)}};import{randomUUID as j}from"node:crypto";var S=(r,e)=>Object.keys(e).every(t=>r[t]===e[t]),oe=async()=>typeof j<"u"&&typeof j=="function"?j():typeof crypto<"u"&&typeof crypto=="object"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(r){var e=Math.random()*16|0,t=r==="x"?e:e&3|8;return t.toString(16)}),ne=(r,e="SubAutoGenerated")=>{switch(typeof r){case"string":return $e(r)?{type:"string",name:"_id",size:16,logicalType:"UUID"}:"string";case"number":return Number.isInteger(r)?"int":"float";case"boolean":return"boolean";case"object":return r===null?"null":Array.isArray(r)?{type:"array",items:ne(r[0])}:q(r,e);default:return"string"}},q=(r,e="AutoGenerated")=>{Array.isArray(r)&&(r=r[0]);let t=Object.entries(r).map(([s,i])=>({name:s,type:ne(i,`${e}.${s}`)}));return{type:"record",name:e,fields:t}},$e=r=>/^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i.test(r);var l="lowstorage",I="/",G="lowstorage",A=".avro",Te=1024*1024,Ie=5*Te,ce=class{constructor(e={accessKeyId:void 0,secretAccessKey:void 0,endpoint:void 0,bucketName:void 0,region:"auto",logger:null,dirPrefix:G}){this._checkArgs(e),this._schemas=new Map,this._s3=new ae(e),this._dirPrefix=e.dirPrefix||G,this._avro=he}_checkArgs=e=>{let t=["accessKeyId","secretAccessKey","endpoint","bucketName"];for(let s of t)if(!e[s])throw new f(`${l}: ${s} is required`,c.MISSING_ARGUMENT)};_hasColName=e=>{if(e.trim()===""||e===null||typeof e>"u")throw new f(`${l}: Collection name is required`,c.MISSING_ARGUMENT)};async listCollections(){try{let e=await this._s3.list(I,this._dirPrefix);return typeof e=="object"&&e!==null&&e.keyCount==="0"?[]:e.map(t=>t.key.slice(this._dirPrefix.length+1,-A.length))}catch(e){throw new R(`${l}: ${e.message}`,c.S3_OPERATION_ERROR)}}async collectionExists(e){try{return this._hasColName(e),await this._s3.fileExists(`${this._dirPrefix}${I}${e}${A}`)}catch(t){if(t.message.includes("Not Found"))return!1;throw new f(`${l}: ${t.message}`,c.COLLECTION_NOT_FOUND)}}async createCollection(e,t,s=[]){try{if(this._hasColName(e),!await this.collectionExists(e))return await this._s3.put(`${this._dirPrefix}${I}${e}${A}`,s.length>0?s:""),this.collection(e,t);throw new f(`${l}: Collection ${e} already exists`,c.COLLECTION_EXISTS)}catch(i){throw i instanceof f?i:new f(`${l}: ${i.message}`,c.CREATE_COLLECTION_ERROR)}}async removeCollection(e){try{this._hasColName(e);let t=`${this._dirPrefix}${I}${e}${A}`;if(await this.collectionExists(e)){await this._s3.delete(t);let i=await this.collectionExists(e);if(typeof i=="boolean")return!i;throw new R(`${l}: Failed to delete collection ${e}`,c.S3_OPERATION_ERROR)}throw new f(`${l}: Collection ${e} does not exist`,c.REMOVE_COLLECTION_ERROR)}catch(t){throw t instanceof R?t:new f(`${l}: Failed to remove collection: ${t.message}`,c.REMOVE_COLLECTION_ERROR)}}async renameCollection(e,t){try{if(this._hasColName(e),this._hasColName(t),!await this.collectionExists(e))throw new P(`${l}: Collection ${e} does not exist`,c.COLLECTION_NOT_FOUND);let i=await this.collection(e),a=await i._loadDataBuffer();if(!await this.removeCollection(e))throw new f(`${l}: Failed to rename collection`,c.RENAME_COLLECTION_ERROR);return await this.createCollection(t,i._avroType,a)}catch(s){throw s instanceof f?s:new f(`${l}: Rename collection failed: ${s.message}`,c.RENAME_COLLECTION_ERROR)}}async collection(e,t,s=!0){try{this._hasColName(e);let i=`${this._dirPrefix}${I}${e}${A}`,a,n=await this._s3.fileExists(i);if(!n&&!s)throw new f(`${l}: Collection ${e} does not exist`,c.COLLECTION_NOT_FOUND);if(t)a=this._avro.parse(t),this._schemas.set(e,a),!n&&s&&await this._s3.put(i,"");else if(this._schemas.has(e))a=this._schemas.get(e);else if(n){let h=await this._s3.get(i);a=this._avro.parse(h),this._schemas.set(e,a)}else s&&await this._s3.put(i,"");return new H(e,this._s3,a,this._dirPrefix)}catch(i){throw i.message.includes("unknown type")?new $(`${l}: Schema input is invalid: ${i.message}`,c.SCHEMA_VALIDATION_ERROR):new f(`${l}: ${i.message}`,c.COLLECTION_NOT_FOUND)}}s3=()=>this._s3},H=class{constructor(e,t,s=void 0,i=G){this._colName=e,this._s3=t,this._avro=he,this._avroType=s,this._dirPrefix=i}async insert(e,t=void 0){try{if(e==null)throw new f(`${l}: Document is required for insert`,c.INSERT_ERROR);if(typeof e!="object"&&!Array.isArray(e))throw new T(`${l}: Document must be an object or an array`,c.DOCUMENT_VALIDATION_ERROR);let s=Array.isArray(e)?e:[e],i=t?this._avro.parse(t):this._avroType||this._avro.parse(q(e));if(!i)throw new $(`${l}: Schema is required - Pass a schema to the insert method`,c.SCHEMA_VALIDATION_ERROR);this._avroType=i;let a=this._avro.parse({type:"array",items:this._avroType}),n=await this._loadDataBuffer(),h=n.length>0?a.fromBuffer(n):[];for(let u of s){if(typeof u!="object"||u===null)throw new T(`${l}: Invalid input: input must be an object or an array of objects`,c.DOCUMENT_VALIDATION_ERROR);if(u._id=u._id||await oe(),!this._avroType.isValid(u))throw new T(`${l}: Invalid document or schema`,c.DOCUMENT_VALIDATION_ERROR);h.push(u)}if(!await this._saveDataBuffer(a.toBuffer(h)))throw new R(`${l}: Failed to insert document`,c.S3_OPERATION_ERROR);return s}catch(s){throw s.message.includes("unknown type")?new $(`${l}: Schema input is invalid: ${s.message}`,c.SCHEMA_VALIDATION_ERROR):s instanceof f?s:new f(`${l} Insert operation failed: ${s.message}`,c.INSERT_ERROR)}}async _loadDataBuffer(){try{let e=`${this._dirPrefix}${I}${this._colName}${A}`,t=this._s3.getMaxRequestSizeInBytes()||Ie,s=await this._s3.get(e);if(s.length-1)return Buffer.from("");throw new R(`${l}: Failed to load data buffer: ${e.message}`,c.S3_OPERATION_ERROR)}}async _saveDataBuffer(e){try{let t=`${this._dirPrefix}${I}${this._colName}${A}`;if((await this._s3.put(t,e)).status!==200)throw new R(`${l}: Failed to save data`,c.S3_OPERATION_ERROR);return!0}catch(t){throw t instanceof R?t:new f(`${l}: ${t.message}`,c.SAVE_DATA_ERROR)}}async find(e={},t={}){try{if(e==null)throw new f(`${l}: Query is required for update`,c.MISSING_ARGUMENT);let s=await this._loadDataBuffer();if(s.length===0)return[];let i=this._avro.parse({type:"array",items:this._avroType}),a=s.length>0?i.fromBuffer(s):[],n=parseInt(t.skip,10)||0,h=parseInt(t.limit,10)?n+parseInt(t.limit,10):void 0;return a.filter(u=>S(u,e)).slice(n,h)}catch(s){throw new f(`${l}: Find operation failed: ${s.message}`,c.FIND_ERROR)}}async findOne(e={}){try{if(e==null)throw new f(`${l}: Query is required for update`,c.MISSING_ARGUMENT);return(await this.find(e))[0]||[]}catch(t){throw new f(`${l}: FindOne operation failed: ${t.message}`,c.FIND_ONE_ERROR)}}async update(e={},t={}){try{if(e==null||t===void 0||t===null)throw new f(`${l}: Query is required for update`,c.MISSING_ARGUMENT);if(!this._avroType)throw new $(`${l}: Schema is not defined for this collection`,c.SCHEMA_VALIDATION_ERROR);let s=await this._loadDataBuffer();if(s.length===0)return 0;let i=this._avro.parse({type:"array",items:this._avroType}),a=s.length>0?i.fromBuffer(s):[],n=0;for(let h=0;h0&&!await this._saveDataBuffer(i.toBuffer(a)))throw new R(`${l}: Failed to update document`,c.S3_OPERATION_ERROR);return n}catch(s){throw s instanceof R?s:new f(`${l}: Update operation failed: ${s.message}`,c.UPDATE_ERROR)}}async updateOne(e={},t={}){try{if(e==null||t===void 0||t===null)throw new f(`${l}: Query is required`,c.MISSING_ARGUMENT);if(!this._avroType)throw new $(`${l}: Schema is not defined for this collection`,c.SCHEMA_VALIDATION_ERROR);let s=await this._loadDataBuffer();if(s.length===0)return 0;let i=this._avro.parse({type:"array",items:this._avroType}),a=s.length>0?i.fromBuffer(s):[],n=a.findIndex(h=>S(h,e));if(n!==-1){let h={...a[n],...t};if(!this._avroType.isValid(h))throw new T(`${l}: Invalid document or schema`,c.DOCUMENT_VALIDATION_ERROR);if(a[n]=h,!await this._saveDataBuffer(i.toBuffer(a)))throw new R(`${l}: Failed to update document`,c.S3_OPERATION_ERROR);return 1}return 0}catch(s){throw s instanceof f?s:new f(`${l}: UpdateOne operation failed: ${s.message}`,c.UPDATE_ONE_ERROR)}}async delete(e={}){try{if(e==null)throw new f(`${l}: Query is required`,c.MISSING_ARGUMENT);let t=await this._loadDataBuffer();if(t.length===0)return 0;let s=this._avro.parse({type:"array",items:this._avroType}),i=t.length>0?s.fromBuffer(t):[],a=i.length,n=i.filter(o=>!S(o,e));if(!await this._saveDataBuffer(s.toBuffer(n)))throw new R(`${l}: Failed to delete document`,c.S3_OPERATION_ERROR);return a-n.length}catch(t){throw t instanceof R?t:new f(`${l}: Delete operation failed: ${t.message}`,c.DELETE_ERROR)}}async deleteAll(){try{let e=await this._loadDataBuffer();if(e.length===0)return 0;let t=this._avro.parse({type:"array",items:this._avroType}),s=e.length>0?t.fromBuffer(e):[],i=s.length,a=s.filter(h=>!S(h,{}));if(!await this._saveDataBuffer(t.toBuffer(a)))throw new R(`${l}: Failed to delete document`,c.S3_OPERATION_ERROR);return i-a.length}catch(e){throw e instanceof R?e:new f(`${l}: Delete operation failed: ${e.message}`,c.DELETE_ERROR)}}async count(e={}){try{return(await this.find(e)).length}catch(t){throw new f(`${l}: Count operation failed: ${t.message}`,c.COUNT_ERROR)}}};export{ce as lowstorage,f as lowstorageError,c as lowstorage_ERROR_CODES}; //# sourceMappingURL=lowstorage.js.map diff --git a/lib/lowstorage.js.map b/lib/lowstorage.js.map index 756362d..affb08f 100644 --- a/lib/lowstorage.js.map +++ b/lib/lowstorage.js.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["../node_modules/ultralight-s3/src/index.ts", "../src/lowstorage.js", "../src/errors.js", "../src/helpers.js"], - "sourcesContent": ["'use strict';\n\ninterface S3Config {\n accessKeyId: string;\n secretAccessKey: string;\n endpoint: string;\n bucketName: string;\n region?: string;\n maxRequestSizeInBytes?: number;\n requestAbortTimeout?: number;\n logger?: Logger;\n}\n\ndeclare global {\n interface Crypto {\n createHmac: (\n algorithm: string,\n key: string | Buffer,\n ) => {\n update: (data: string | Buffer) => void;\n digest: (encoding?: 'hex' | 'base64' | 'latin1') => string;\n };\n createHash: (algorithm: string) => {\n update: (data: string | Buffer) => void;\n digest: (encoding?: 'hex' | 'base64' | 'latin1') => string;\n };\n }\n}\n\ninterface Logger {\n info: (message: string, ...args: any[]) => void;\n warn: (message: string, ...args: any[]) => void;\n error: (message: string, ...args: any[]) => void;\n}\n\ninterface UploadPart {\n partNumber: number;\n ETag: string;\n}\n\ninterface CompleteMultipartUploadResult {\n Location: string;\n Bucket: string;\n Key: string;\n ETag: string;\n}\n\ntype HttpMethod = 'POST' | 'GET' | 'HEAD' | 'PUT' | 'DELETE';\n\nlet _createHmac = crypto.createHmac || (await import('node:crypto')).createHmac;\nlet _createHash = crypto.createHash || (await import('node:crypto')).createHash;\n\nif (typeof _createHmac === 'undefined' && typeof _createHash === 'undefined') {\n console.error(\n 'ultralight-S3 Module: Crypto functions are not available, please report the issue with necessary description: https://github.com/sentienhq/ultralight-s3/issues',\n );\n}\n\n// Constants\nconst AWS_ALGORITHM = 'AWS4-HMAC-SHA256';\nconst AWS_REQUEST_TYPE = 'aws4_request';\nconst S3_SERVICE = 's3';\nconst LIST_TYPE = '2';\nconst UNSIGNED_PAYLOAD = 'UNSIGNED-PAYLOAD';\nconst DEFAULT_STREAM_CONTENT_TYPE = 'application/octet-stream';\nconst XML_CONTENT_TYPE = 'application/xml';\nconst JSON_CONTENT_TYPE = 'application/json';\n// List of keys that might contain sensitive information\nconst SENSITIVE_KEYS_REDACTED = ['accessKeyId', 'secretAccessKey', 'sessionToken', 'password'];\nconst MIN_MAX_REQUEST_SIZE_IN_BYTES = 5 * 1024 * 1024;\n\n// Headers\nconst HEADER_AMZ_CONTENT_SHA256 = 'x-amz-content-sha256';\nconst HEADER_AMZ_DATE = 'x-amz-date';\nconst HEADER_HOST = 'host';\nconst HEADER_AUTHORIZATION = 'Authorization';\nconst HEADER_CONTENT_TYPE = 'Content-Type';\nconst HEADER_CONTENT_LENGTH = 'Content-Length';\nconst HEADER_ETAG = 'etag';\nconst HEADER_LAST_MODIFIED = 'last-modified';\n\n// Error messages\nexport const ERROR_PREFIX = 'ultralight-s3 Module: ';\nconst ERROR_ACCESS_KEY_REQUIRED = `${ERROR_PREFIX}accessKeyId must be a non-empty string`;\nconst ERROR_SECRET_KEY_REQUIRED = `${ERROR_PREFIX}secretAccessKey must be a non-empty string`;\nconst ERROR_ENDPOINT_REQUIRED = `${ERROR_PREFIX}endpoint must be a non-empty string`;\nconst ERROR_BUCKET_NAME_REQUIRED = `${ERROR_PREFIX}bucketName must be a non-empty string`;\nconst ERROR_KEY_REQUIRED = `${ERROR_PREFIX}key must be a non-empty string`;\nconst ERROR_UPLOAD_ID_REQUIRED = `${ERROR_PREFIX}uploadId must be a non-empty string`;\nconst ERROR_PARTS_REQUIRED = `${ERROR_PREFIX}parts must be a non-empty array`;\nconst ERROR_INVALID_PART = `${ERROR_PREFIX}Each part must have a partNumber (number) and ETag (string)`;\nconst ERROR_DATA_BUFFER_REQUIRED = `${ERROR_PREFIX}data must be a Buffer or string`;\n// const ERROR_PATH_REQUIRED = `${ERROR_PREFIX}path must be a string`;\nconst ERROR_PREFIX_TYPE = `${ERROR_PREFIX}prefix must be a string`;\nconst ERROR_MAX_KEYS_TYPE = `${ERROR_PREFIX}maxKeys must be a positive integer`;\nconst ERROR_DELIMITER_REQUIRED = `${ERROR_PREFIX}delimiter must be a string`;\n\nconst expectArray: { [key: string]: boolean } = {\n contents: true,\n};\n\nconst encodeAsHex = (c: string): string => `%${c.charCodeAt(0).toString(16).toUpperCase()}`;\n\nconst uriEscape = (uriStr: string): string => {\n return encodeURIComponent(uriStr).replace(/[!'()*]/g, encodeAsHex);\n};\n\nconst uriResourceEscape = (string: string): string => {\n return uriEscape(string).replace(/%2F/g, '/');\n};\n\n/**\n * S3 class for interacting with S3-compatible object storage services.\n * This class provides methods for common S3 operations such as uploading, downloading,\n * and deleting objects, as well as multipart uploads.\n *\n * @class\n * @example\n * const s3 = new S3({\n * accessKeyId: 'your-access-key',\n * secretAccessKey: 'your-secret-key',\n * endpoint: 'https://your-s3-endpoint.com',\n * bucketName: 'your-bucket-name',\n * region: 'us-east-1' // by default is auto\n * });\n *\n * // Upload a file\n * await s3.put('example.txt', 'Hello, World!');\n *\n * // Download a file\n * const content = await s3.get('example.txt');\n *\n * // Delete a file\n * await s3.delete('example.txt');\n */\nclass S3 {\n /**\n * Creates an instance of the S3 class.\n *\n * @constructor\n * @param {Object} config - Configuration options for the S3 instance.\n * @param {string} config.accessKeyId - The access key ID for authentication.\n * @param {string} config.secretAccessKey - The secret access key for authentication.\n * @param {string} config.endpoint - The endpoint URL of the S3-compatible service.\n * @param {string} [config.bucketName=''] - The name of the bucket to operate on.\n * @param {string} [config.region='auto'] - The region of the S3 service.\n * @param {number} [config.maxRequestSizeInBytes=5242880] - The maximum size of a single request in bytes (minimum for AWS S3 is 5MB).\n * @param {number} [config.requestAbortTimeout=undefined] - The timeout in milliseconds after which a request should be aborted (careful on streamed requests).\n * @param {Object} [config.logger=null] - A logger object with methods like info, warn, error.\n * @throws {TypeError} Will throw an error if required parameters are missing or of incorrect type.\n */\n private accessKeyId: string;\n private secretAccessKey: string;\n private endpoint: string;\n private bucketName: string;\n private region: string;\n private maxRequestSizeInBytes: number;\n private requestAbortTimeout?: number;\n private logger?: Logger;\n\n constructor({\n accessKeyId,\n secretAccessKey,\n endpoint,\n bucketName,\n region = 'auto',\n maxRequestSizeInBytes = MIN_MAX_REQUEST_SIZE_IN_BYTES,\n requestAbortTimeout = undefined,\n logger = undefined,\n }: S3Config) {\n this._validateConstructorParams(accessKeyId, secretAccessKey, endpoint, bucketName);\n this.accessKeyId = accessKeyId;\n this.secretAccessKey = secretAccessKey;\n this.endpoint = endpoint;\n this.bucketName = bucketName;\n this.region = region;\n this.maxRequestSizeInBytes = maxRequestSizeInBytes;\n this.requestAbortTimeout = requestAbortTimeout;\n this.logger = logger;\n }\n\n private _validateConstructorParams(\n accessKeyId: string,\n secretAccessKey: string,\n endpoint: string,\n bucketName: string,\n ): void {\n if (typeof accessKeyId !== 'string' || accessKeyId.trim().length === 0)\n throw new TypeError(ERROR_ACCESS_KEY_REQUIRED);\n if (typeof secretAccessKey !== 'string' || secretAccessKey.trim().length === 0)\n throw new TypeError(ERROR_SECRET_KEY_REQUIRED);\n if (typeof endpoint !== 'string' || endpoint.trim().length === 0) throw new TypeError(ERROR_ENDPOINT_REQUIRED);\n if (typeof bucketName !== 'string' || bucketName.trim().length === 0)\n throw new TypeError(ERROR_BUCKET_NAME_REQUIRED);\n }\n\n private _checkMethodHeadnGet(method: string): void {\n if (method !== 'GET' && method !== 'HEAD') {\n this._log('error', `${ERROR_PREFIX}method must be either GET or HEAD`);\n throw new Error('method must be either GET or HEAD');\n }\n }\n\n private _checkKey(key: string): void {\n if (typeof key !== 'string' || key.trim().length === 0) {\n this._log('error', ERROR_KEY_REQUIRED);\n throw new TypeError(ERROR_KEY_REQUIRED);\n }\n }\n\n private _checkDelimiter(delimiter: string): void {\n if (typeof delimiter !== 'string' || delimiter.trim().length === 0) {\n this._log('error', ERROR_DELIMITER_REQUIRED);\n throw new TypeError(ERROR_DELIMITER_REQUIRED);\n }\n }\n\n private _checkPrefix(prefix: string): void {\n if (typeof prefix !== 'string') {\n this._log('error', ERROR_PREFIX_TYPE);\n throw new TypeError(ERROR_PREFIX_TYPE);\n }\n }\n\n private _checkMaxKeys(maxKeys: number): void {\n if (typeof maxKeys !== 'number' || maxKeys <= 0) {\n this._log('error', ERROR_MAX_KEYS_TYPE);\n throw new TypeError(ERROR_MAX_KEYS_TYPE);\n }\n }\n\n private _checkOpts(opts: Record): void {\n if (typeof opts !== 'object') {\n this._log('error', `${ERROR_PREFIX}opts must be an object`);\n throw new TypeError(`${ERROR_PREFIX}opts must be an object`);\n }\n }\n\n /**\n * Internal method to log messages with sanitized sensitive information.\n * @param {string} level - The log level (e.g., 'info', 'warn', 'error').\n * @param {string} message - The message to log.\n * @param {Object} [additionalData={}] - Additional data to include in the log.\n * @private\n */\n private _log(\n level: 'info' | 'warn' | 'error',\n message: string,\n additionalData: Record | string = {},\n ): void {\n if (this.logger && typeof this.logger[level] === 'function') {\n // Function to recursively sanitize an object\n const sanitize = (obj: any): any => {\n if (typeof obj !== 'object' || obj === null) {\n return obj;\n }\n return Object.keys(obj).reduce(\n (acc: any, key) => {\n if (SENSITIVE_KEYS_REDACTED.includes(key.toLowerCase())) {\n acc[key] = '[REDACTED]';\n } else if (typeof obj[key] === 'object' && obj[key] !== null) {\n acc[key] = sanitize(obj[key]);\n } else {\n acc[key] = obj[key];\n }\n return acc;\n },\n Array.isArray(obj) ? [] : {},\n );\n };\n\n // Sanitize the additional data\n const sanitizedData = sanitize(additionalData);\n // Prepare the log entry\n const logEntry = {\n timestamp: new Date().toISOString(),\n level,\n message,\n ...sanitizedData,\n // Include some general context, but sanitize sensitive parts\n context: sanitize({\n bucketName: this.bucketName,\n region: this.region,\n endpoint: this.endpoint,\n // Only include the first few characters of the access key, if it exists\n accessKeyId: this.accessKeyId ? `${this.accessKeyId.substring(0, 4)}...` : undefined,\n }),\n };\n\n // Log the sanitized entry\n this.logger[level](logEntry);\n }\n }\n\n getBucketName = () => this.bucketName;\n setBucketName = (bucketName: string) => {\n this.bucketName = bucketName;\n };\n getRegion = () => this.region;\n setRegion = (region: string) => {\n this.region = region;\n };\n getEndpoint = () => this.endpoint;\n setEndpoint = (endpoint: string) => {\n this.endpoint = endpoint;\n };\n getMaxRequestSizeInBytes = () => this.maxRequestSizeInBytes;\n setMaxRequestSizeInBytes = (maxRequestSizeInBytes: number) => {\n this.maxRequestSizeInBytes = maxRequestSizeInBytes;\n };\n\n getProps = () => ({\n accessKeyId: this.accessKeyId,\n secretAccessKey: this.secretAccessKey,\n region: this.region,\n bucket: this.bucketName,\n endpoint: this.endpoint,\n maxRequestSizeInBytes: this.maxRequestSizeInBytes,\n requestAbortTimeout: this.requestAbortTimeout,\n logger: this.logger,\n });\n setProps = (props: S3Config) => {\n this._validateConstructorParams(props.accessKeyId, props.secretAccessKey, props.bucketName, props.endpoint);\n this.accessKeyId = props.accessKeyId;\n this.secretAccessKey = props.secretAccessKey;\n this.region = props.region || 'auto';\n this.bucketName = props.bucketName;\n this.endpoint = props.endpoint;\n this.maxRequestSizeInBytes = props.maxRequestSizeInBytes || MIN_MAX_REQUEST_SIZE_IN_BYTES;\n this.requestAbortTimeout = props.requestAbortTimeout;\n this.logger = props.logger;\n };\n\n /**\n * Get the content length of an object.\n * @param {string} key - The key of the object.\n * @returns {Promise} The content length of the object in bytes.\n * @throws {TypeError} If the key is not a non-empty string.\n */\n async getContentLength(key: string): Promise {\n this._checkKey(key);\n const headers = {\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('HEAD', encodedKey, {}, headers, '');\n const res = await this._sendRequest(url, 'HEAD', signedHeaders);\n const contentLength = res.headers.get(HEADER_CONTENT_LENGTH);\n return contentLength ? parseInt(contentLength, 10) : 0;\n }\n\n /**\n * Check if a bucket exists.\n * @returns {Promise} True if the bucket exists, false otherwise.\n */\n async bucketExists(): Promise {\n const headers = {\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n const { url, headers: signedHeaders } = await this._sign('HEAD', '', {}, headers, '');\n const res = await this._sendRequest(url, 'HEAD', signedHeaders);\n if (res.ok && res.status === 200) {\n return true;\n }\n return false;\n }\n\n // TBD\n // async createBucket(bucketName) {\n // const xmlBody = `\n // \n // \n // ${this.region}\n // \n // `;\n // const headers = {\n // [HEADER_CONTENT_TYPE]: XML_CONTENT_TYPE,\n // [HEADER_CONTENT_LENGTH]: Buffer.byteLength(xmlBody).toString(),\n // [HEADER_AMZ_CONTENT_SHA256]: await _hash(xmlBody),\n // };\n // const encodedKey = encodeURI(bucketName);\n // const { url, headers: signedHeaders } = await this._sign('PUT', encodedKey, {}, headers, '');\n // const res = await this._sendRequest(url, 'PUT', signedHeaders);\n // if (res.ok && res.status === 200) {\n // return true;\n // }\n // return false;\n // }\n\n /**\n * Check if a file exists in the bucket.\n * @param {string} key - The key of the object.\n * @returns {Promise} True if the file exists, false otherwise.\n * @throws {TypeError} If the key is not a non-empty string.\n */\n async fileExists(key: string): Promise {\n this._checkKey(key);\n const headers = { [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('HEAD', encodedKey, {}, headers, '');\n try {\n const res = await fetch(url, {\n method: 'HEAD',\n headers: signedHeaders,\n });\n if (res.ok && res.status === 200) return true;\n else if (res.status === 404) return false;\n else this._handleErrorResponse(res);\n return false;\n } catch (error: unknown) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n this._log('error', `${ERROR_PREFIX}Failed to check if file exists: ${errorMessage}`);\n throw new Error(`${ERROR_PREFIX}Failed to check if file exists: ${errorMessage}`);\n }\n }\n async _sign(\n method: HttpMethod,\n keyPath: string,\n query: Object,\n headers: Record,\n body: string | Buffer,\n ): Promise<{ url: string; headers: Record }> {\n const datetime = new Date().toISOString().replace(/[:-]|\\.\\d{3}/g, '');\n const url =\n typeof keyPath === 'string' && keyPath.length > 0 ? new URL(keyPath, this.endpoint) : new URL(this.endpoint);\n url.pathname = `/${encodeURI(this.bucketName)}${url.pathname}`;\n headers[HEADER_AMZ_CONTENT_SHA256] = body ? await _hash(body) : UNSIGNED_PAYLOAD;\n headers[HEADER_AMZ_DATE] = datetime;\n headers[HEADER_HOST] = url.host;\n const canonicalHeaders = this._buildCanonicalHeaders(headers);\n const signedHeaders = Object.keys(headers)\n .map(key => key.toLowerCase())\n .sort()\n .join(';');\n\n const canonicalRequest = await this._buildCanonicalRequest(\n method,\n url,\n query,\n canonicalHeaders,\n signedHeaders,\n body,\n );\n const stringToSign = await this._buildStringToSign(datetime, canonicalRequest);\n const signature = await this._calculateSignature(datetime, stringToSign);\n const authorizationHeader = this._buildAuthorizationHeader(datetime, signedHeaders, signature);\n headers[HEADER_AUTHORIZATION] = authorizationHeader;\n return { url: url.toString(), headers };\n }\n\n _buildCanonicalHeaders(headers: Record): string {\n return Object.entries(headers)\n .map(([key, value]) => `${key.toLowerCase()}:${String(value).trim()}`)\n .sort()\n .join('\\n');\n }\n\n async _buildCanonicalRequest(\n method: HttpMethod,\n url: URL,\n query: Object,\n canonicalHeaders: string,\n signedHeaders: string,\n body: string | Buffer,\n ): Promise {\n return [\n method,\n url.pathname,\n this._buildCanonicalQueryString(query),\n `${canonicalHeaders}\\n`,\n signedHeaders,\n body ? await _hash(body) : UNSIGNED_PAYLOAD,\n ].join('\\n');\n }\n\n async _buildStringToSign(datetime: string, canonicalRequest: string): Promise {\n const credentialScope = [datetime.slice(0, 8), this.region, S3_SERVICE, AWS_REQUEST_TYPE].join('/');\n return [AWS_ALGORITHM, datetime, credentialScope, await _hash(canonicalRequest)].join('\\n');\n }\n\n async _calculateSignature(datetime: string, stringToSign: string): Promise {\n const signingKey = await this._getSignatureKey(datetime.slice(0, 8));\n return _hmac(signingKey, stringToSign, 'hex');\n }\n\n _buildAuthorizationHeader(datetime: string, signedHeaders: string, signature: string): string {\n const credentialScope = [datetime.slice(0, 8), this.region, S3_SERVICE, AWS_REQUEST_TYPE].join('/');\n return [\n `${AWS_ALGORITHM} Credential=${this.accessKeyId}/${credentialScope}`,\n `SignedHeaders=${signedHeaders}`,\n `Signature=${signature}`,\n ].join(', ');\n }\n\n /**\n * List objects in the bucket.\n * @param {string} [delimiter='/'] - The delimiter to use for grouping objects in specific path.\n * @param {string} [prefix=''] - The prefix to filter objects in specific path.\n * @param {number} [maxKeys=1000] - The maximum number of keys to return.\n * @param {string} [method='GET'] - The HTTP method to use (GET or HEAD).\n * @param {Object} [opts={}] - Additional options for the list operation.\n * @returns {Promise} The list of objects or object metadata.\n * @throws {TypeError} If any of the parameters are of incorrect type.\n */\n async list(\n delimiter: string = '/',\n prefix: string = '',\n maxKeys: number = 1000,\n method: HttpMethod = 'GET',\n opts: Object = {},\n ): Promise> {\n this._checkDelimiter(delimiter);\n this._checkPrefix(prefix);\n this._checkMaxKeys(maxKeys);\n this._checkMethodHeadnGet(method);\n this._checkOpts(opts);\n this._log('info', `Listing objects in ${prefix}`);\n\n const query = {\n 'list-type': LIST_TYPE,\n 'max-keys': String(maxKeys),\n ...opts,\n } as { [key: string]: any };\n if (prefix.length > 0) {\n query['prefix'] = prefix;\n }\n const headers = {\n [HEADER_CONTENT_TYPE]: JSON_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n const encodedKey = delimiter === '/' ? delimiter : uriEscape(delimiter);\n const { url, headers: signedHeaders } = await this._sign('GET', encodedKey, query, headers, '');\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n const res = await this._sendRequest(urlWithQuery, 'GET', signedHeaders);\n const responseBody = await res.text();\n\n if (method === 'HEAD') {\n const contentLength = res.headers.get(HEADER_CONTENT_LENGTH);\n const lastModified = res.headers.get(HEADER_LAST_MODIFIED);\n const etag = res.headers.get(HEADER_ETAG);\n\n return {\n size: contentLength ? +contentLength : undefined,\n mtime: lastModified ? new Date(lastModified) : undefined,\n ETag: etag || undefined,\n };\n }\n\n const data = _parseXml(responseBody);\n const output = data.listBucketResult || data.error || data;\n return output.contents || output;\n }\n\n /**\n * List multipart uploads in the bucket.\n * @param {string} [delimiter='/'] - The delimiter to use for grouping objects in specific path.\n * @param {string} [prefix=''] - The prefix to filter objects in specific path.\n * @param {string} [method='GET'] - The HTTP method to use (GET or HEAD).\n * @param {Object} [opts={}] - Additional options for the list operation.\n * @returns {Promise} The list of objects or object metadata.\n * @throws {TypeError} If any of the parameters are of incorrect type.\n */\n async listMultiPartUploads(\n delimiter: string = '/',\n prefix: string = '',\n method: HttpMethod = 'GET',\n opts: Object = {},\n ): Promise {\n this._checkDelimiter(delimiter);\n this._checkPrefix(prefix);\n this._checkMethodHeadnGet(method);\n this._checkOpts(opts);\n this._log('info', `Listing multipart uploads in ${prefix}`);\n\n const query = {\n uploads: '',\n ...opts,\n } as Record;\n const headers = {\n [HEADER_CONTENT_TYPE]: JSON_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n const encodedKey = delimiter === '/' ? delimiter : uriEscape(delimiter);\n const { url, headers: signedHeaders } = await this._sign('GET', encodedKey, query, headers, '');\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n const res = await this._sendRequest(urlWithQuery, 'GET', signedHeaders);\n const responseBody = await res.text();\n\n if (method === 'HEAD') {\n return {\n size: +(res.headers.get(HEADER_CONTENT_LENGTH) ?? '0'),\n mtime: new Date(res.headers.get(HEADER_LAST_MODIFIED) ?? ''),\n ETag: res.headers.get(HEADER_ETAG) ?? '',\n };\n }\n\n const data = _parseXml(responseBody);\n const output = data.listMultipartUploadsResult || data.error || data;\n return output.uploads || output;\n }\n\n /**\n * Get an object from the bucket.\n * @param {string} key - The key of the object to get.\n * @param {Object} [opts={}] - Additional options for the get operation.\n * @returns {Promise} The content of the object.\n */\n async get(key: string, opts: Record = {}): Promise {\n this._checkKey(key);\n this._log('info', `Getting object ${key}`);\n\n const headers = {\n [HEADER_CONTENT_TYPE]: JSON_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('GET', encodedKey, opts, headers, '');\n const res = await this._sendRequest(url, 'GET', signedHeaders);\n return res.text();\n }\n\n /**\n * Get a response of an object from the bucket.\n * @param {string} key - The key of the object to get.\n * @param {boolean} [wholeFile=true] - Whether to get the whole file or a part.\n * @param {number} [rangeFrom=0] - The range from to get if not getting the whole file.\n * @param {number} [rangeTo=this.maxRequestSizeInBytes] - The range to to get if not getting the whole file. Note: rangeTo is inclusive.\n * @param {Object} [opts={}] - Additional options for the get operation.\n * @returns {Promise} Response of the object content. Use readableStream() to get the stream from .body.\n */\n async getResponse(\n key: string,\n wholeFile: boolean = true,\n rangeFrom: number = 0,\n rangeTo: number = this.maxRequestSizeInBytes,\n opts: Record = {},\n ): Promise {\n this._checkKey(key);\n const query = opts;\n const headers = {\n [HEADER_CONTENT_TYPE]: JSON_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n ...(wholeFile ? {} : { range: `bytes=${rangeFrom}-${rangeTo - 1}` }),\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('GET', encodedKey, query, headers, '');\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n\n return this._sendRequest(urlWithQuery, 'GET', signedHeaders);\n }\n\n /**\n * Put an object into the bucket.\n * @param {string} key - The key of the object to put. To create a folder, include a trailing slash.\n * @param {Buffer|string} data - The content of the object to put.\n * @returns {Promise} The response from the put operation.\n * @throws {TypeError} If the key is not a non-empty string or data is not a Buffer or string.\n */\n async put(key: string, data: string | Buffer): Promise {\n this._checkKey(key);\n if (!(data instanceof Buffer || typeof data === 'string')) {\n this._log('error', ERROR_DATA_BUFFER_REQUIRED);\n throw new TypeError(ERROR_DATA_BUFFER_REQUIRED);\n }\n // const encodedKey = encodeURIComponent(key);\n this._log('info', `Uploading object ${key}`);\n const contentLength = typeof data === 'string' ? Buffer.byteLength(data) : data.length;\n const headers = {\n [HEADER_CONTENT_LENGTH]: contentLength,\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('PUT', encodedKey, {}, headers, data);\n const res = await this._sendRequest(url, 'PUT', signedHeaders, data);\n return res;\n }\n\n /**\n * Initiate a multipart upload.\n * @param {string} key - The key of the object to upload.\n * @param {string} [fileType='application/octet-stream'] - The MIME type of the file.\n * @returns {Promise} The upload ID for the multipart upload.\n * @throws {TypeError} If the key is not a non-empty string or fileType is not a string.\n * @throws {Error} If the multipart upload initiation fails.\n */\n async getMultipartUploadId(key: string, fileType: string = DEFAULT_STREAM_CONTENT_TYPE): Promise {\n this._checkKey(key);\n if (typeof fileType !== 'string') {\n this._log('error', `${ERROR_PREFIX}fileType must be a string`);\n throw new TypeError(`${ERROR_PREFIX}fileType must be a string`);\n }\n this._log('info', `Initiating multipart upload for object ${key}`);\n const query = { uploads: '' };\n const headers = {\n [HEADER_CONTENT_TYPE]: fileType,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('POST', encodedKey, query, headers, '');\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n\n const res = await this._sendRequest(urlWithQuery, 'POST', signedHeaders);\n const responseBody = await res.text();\n const parsedResponse = _parseXml(responseBody);\n\n if (\n typeof parsedResponse === 'object' &&\n parsedResponse !== null &&\n 'error' in parsedResponse &&\n typeof parsedResponse.error === 'object' &&\n parsedResponse.error !== null &&\n 'message' in parsedResponse.error\n ) {\n const errorMessage = String(parsedResponse.error.message);\n this._log('error', `${ERROR_PREFIX}Failed to abort multipart upload: ${errorMessage}`);\n throw new Error(`${ERROR_PREFIX}Failed to abort multipart upload: ${errorMessage}`);\n }\n\n if (typeof parsedResponse === 'object' && parsedResponse !== null) {\n if (!parsedResponse.initiateMultipartUploadResult || !parsedResponse.initiateMultipartUploadResult.uploadId) {\n this._log('error', `${ERROR_PREFIX}Failed to create multipart upload: no uploadId in response`);\n throw new Error(`${ERROR_PREFIX}Failed to create multipart upload: Missing upload ID in response`);\n }\n\n return parsedResponse.initiateMultipartUploadResult.uploadId;\n } else {\n this._log('error', `${ERROR_PREFIX}Failed to create multipart upload: unexpected response format`);\n throw new Error(`${ERROR_PREFIX}Failed to create multipart upload: Unexpected response format`);\n }\n }\n\n /**\n * Upload a part in a multipart upload.\n * @param {string} key - The key of the object being uploaded.\n * @param {Buffer|string} data - The content of the part.\n * @param {string} uploadId - The upload ID of the multipart upload.\n * @param {number} partNumber - The part number.\n * @param {Object} [opts={}] - Additional options for the upload.\n * @returns {Promise} The ETag and part number of the uploaded part.\n * @throws {TypeError} If any of the parameters are of incorrect type.\n */\n async uploadPart(\n key: string,\n data: Buffer | string,\n uploadId: string,\n partNumber: number,\n opts: Object = {},\n ): Promise {\n this._validateUploadPartParams(key, data, uploadId, partNumber, opts);\n const query = { uploadId, partNumber, ...opts } as { [key: string]: any };\n const headers = {\n [HEADER_CONTENT_LENGTH]: data.length,\n } as { [key: string]: any };\n\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('PUT', encodedKey, query, headers, data);\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n\n const res = await this._sendRequest(urlWithQuery, 'PUT', signedHeaders, data);\n const ETag = res.headers.get('etag') || '';\n return { partNumber, ETag };\n }\n\n _validateUploadPartParams(key: string, data: Buffer | string, uploadId: string, partNumber: number, opts: Object) {\n this._checkKey(key);\n if (!(data instanceof Buffer || typeof data === 'string')) {\n this._log('error', ERROR_DATA_BUFFER_REQUIRED);\n throw new TypeError(ERROR_DATA_BUFFER_REQUIRED);\n }\n if (typeof uploadId !== 'string' || uploadId.trim().length === 0) {\n this._log('error', ERROR_UPLOAD_ID_REQUIRED);\n throw new TypeError(ERROR_UPLOAD_ID_REQUIRED);\n }\n if (!Number.isInteger(partNumber) || partNumber <= 0) {\n this._log('error', `${ERROR_PREFIX}partNumber must be a positive integer`);\n throw new TypeError(`${ERROR_PREFIX}partNumber must be a positive integer`);\n }\n this._checkOpts(opts);\n }\n\n /**\n * Complete a multipart upload.\n * @param {string} key - The key of the object being uploaded.\n * @param {string} uploadId - The upload ID of the multipart upload.\n * @param {Array} parts - An array of objects containing PartNumber and ETag for each part.\n * @returns {Promise} The result of the complete multipart upload operation.\n * @throws {TypeError} If any of the parameters are of incorrect type.\n * @throws {Error} If the complete multipart upload operation fails.\n */\n async completeMultipartUpload(\n key: string,\n uploadId: string,\n parts: Array,\n ): Promise {\n this._checkKey(key);\n if (typeof uploadId !== 'string' || uploadId.trim().length === 0) {\n this._log('error', ERROR_UPLOAD_ID_REQUIRED);\n throw new TypeError(ERROR_UPLOAD_ID_REQUIRED);\n }\n if (!Array.isArray(parts) || parts.length === 0) {\n this._log('error', ERROR_PARTS_REQUIRED);\n throw new TypeError(ERROR_PARTS_REQUIRED);\n }\n if (!parts.every(part => typeof part.partNumber === 'number' && typeof part.ETag === 'string')) {\n this._log('error', ERROR_INVALID_PART);\n throw new TypeError(ERROR_INVALID_PART);\n }\n this._log('info', `Complete multipart upload ${uploadId} for object ${key}`);\n const query = { uploadId };\n const xmlBody = this._buildCompleteMultipartUploadXml(parts);\n const headers = {\n [HEADER_CONTENT_TYPE]: XML_CONTENT_TYPE,\n [HEADER_CONTENT_LENGTH]: Buffer.byteLength(xmlBody).toString(),\n [HEADER_AMZ_CONTENT_SHA256]: await _hash(xmlBody),\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('POST', encodedKey, query, headers, xmlBody);\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n\n const res = await this._sendRequest(urlWithQuery, 'POST', signedHeaders, xmlBody);\n const responseBody = await res.text();\n const parsedResponse = _parseXml(responseBody);\n\n if (\n typeof parsedResponse === 'object' &&\n parsedResponse !== null &&\n 'error' in parsedResponse &&\n typeof parsedResponse.error === 'object' &&\n parsedResponse.error !== null &&\n 'message' in parsedResponse.error\n ) {\n const errorMessage = String(parsedResponse.error.message);\n this._log('error', `${ERROR_PREFIX}Failed to abort multipart upload: ${errorMessage}`);\n throw new Error(`${ERROR_PREFIX}Failed to abort multipart upload: ${errorMessage}`);\n }\n\n return parsedResponse.completeMultipartUploadResult;\n }\n\n /**\n * Aborts a multipart upload.\n * @param {string} key - The key of the object being uploaded.\n * @param {string} uploadId - The ID of the multipart upload to abort.\n * @returns {Promise} - A promise that resolves to the abort response.\n * @throws {Error} If the abort operation fails.\n */\n async abortMultipartUpload(key: string, uploadId: string): Promise {\n // Input validation\n this._checkKey(key);\n if (typeof uploadId !== 'string' || uploadId.trim().length === 0) {\n this._log('error', ERROR_UPLOAD_ID_REQUIRED);\n throw new TypeError(ERROR_UPLOAD_ID_REQUIRED);\n }\n\n this._log('info', `Aborting multipart upload ${uploadId} for object ${key}`);\n\n // Prepare the request\n const query = { uploadId };\n const headers = {\n [HEADER_CONTENT_TYPE]: XML_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n\n try {\n // Sign and send the request\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('DELETE', encodedKey, query, headers, '');\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n\n const res = await this._sendRequest(urlWithQuery, 'DELETE', signedHeaders);\n\n // Check for successful response\n if (res.ok) {\n const responseBody = await res.text();\n const parsedResponse = _parseXml(responseBody);\n\n if (\n typeof parsedResponse === 'object' &&\n parsedResponse !== null &&\n 'error' in parsedResponse &&\n typeof parsedResponse.error === 'object' &&\n parsedResponse.error !== null &&\n 'message' in parsedResponse.error\n ) {\n const errorMessage = String(parsedResponse.error.message);\n this._log('error', `${ERROR_PREFIX}Failed to abort multipart upload: ${errorMessage}`);\n throw new Error(`${ERROR_PREFIX}Failed to abort multipart upload: ${errorMessage}`);\n }\n\n return {\n status: 'Aborted',\n key,\n uploadId,\n response: parsedResponse,\n };\n } else {\n this._log('error', `${ERROR_PREFIX}Abort request failed with status ${res.status}`);\n throw new Error(`${ERROR_PREFIX}Abort request failed with status ${res.status}`);\n }\n } catch (error: unknown) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n this._log('error', `${ERROR_PREFIX}Failed to abort multipart upload for key ${key}: ${errorMessage}`);\n throw new Error(`${ERROR_PREFIX}Failed to abort multipart upload for key ${key}: ${errorMessage}`);\n }\n }\n\n _buildCompleteMultipartUploadXml(parts: Array): string {\n return `\n \n ${parts\n .map(\n part => `\n \n ${part.partNumber}\n ${part.ETag}\n \n `,\n )\n .join('')}\n \n `;\n }\n\n /**\n * Delete an object from the bucket.\n * @param {string} key - The key of the object to delete.\n * @returns {Promise} The response from the delete operation.\n */\n async delete(key: string): Promise {\n this._checkKey(key);\n this._log('info', `Deleting object ${key}`);\n const headers = {\n [HEADER_CONTENT_TYPE]: JSON_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('DELETE', encodedKey, {}, headers, '');\n const res = await this._sendRequest(url, 'DELETE', signedHeaders);\n return res.text();\n }\n\n async _sendRequest(\n url: string,\n method: HttpMethod,\n headers: Record,\n body?: string | Buffer,\n ): Promise {\n this._log('info', `Sending ${method} request to ${url}, headers: ${JSON.stringify(headers)}`);\n const res = await fetch(url, {\n method,\n headers,\n body,\n signal: this.requestAbortTimeout !== undefined ? AbortSignal.timeout(this.requestAbortTimeout) : undefined,\n });\n\n if (!res.ok) {\n await this._handleErrorResponse(res);\n }\n\n return res;\n }\n\n async _handleErrorResponse(res: Response) {\n const errorBody = await res.text();\n const errorCode = res.headers.get('x-amz-error-code') || 'Unknown';\n const errorMessage = res.headers.get('x-amz-error-message') || res.statusText;\n this._log(\n 'error',\n `${ERROR_PREFIX}Request failed with status ${res.status}: ${errorCode} - ${errorMessage},err body: ${errorBody}`,\n );\n throw new Error(\n `${ERROR_PREFIX}Request failed with status ${res.status}: ${errorCode} - ${errorMessage}, err body: ${errorBody}`,\n );\n }\n\n _buildCanonicalQueryString(queryParams: Object): string {\n if (Object.keys(queryParams).length < 1) {\n return '';\n }\n\n return Object.keys(queryParams)\n .sort()\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent((queryParams as Record)[key])}`)\n .join('&');\n }\n async _getSignatureKey(dateStamp: string): Promise {\n const kDate = await _hmac(`AWS4${this.secretAccessKey}`, dateStamp);\n const kRegion = await _hmac(kDate, this.region);\n const kService = await _hmac(kRegion, S3_SERVICE);\n return _hmac(kService, AWS_REQUEST_TYPE);\n }\n}\n\nconst _hash = async (content: string | Buffer): Promise => {\n const hashSum = _createHash('sha256');\n hashSum.update(content);\n return hashSum.digest('hex');\n};\n\nconst _hmac = async (key: string | Buffer, content: string, encoding?: 'hex'): Promise => {\n const hmacSum = _createHmac('sha256', key);\n hmacSum.update(content);\n return hmacSum.digest(encoding);\n};\n\nconst _parseXml = (str: string): string | object | any => {\n const unescapeXml = (value: string): string => {\n return value\n .replace(/"/g, '\"')\n .replace(/'/g, \"'\")\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/&/g, '&');\n };\n\n const json = {};\n const re = /<(\\w)([-\\w]+)(?:\\/|[^>]*>((?:(?!<\\1)[\\s\\S])*)<\\/\\1\\2)>/gm;\n let match;\n\n while ((match = re.exec(str))) {\n const [, prefix, key, value] = match;\n const fullKey = prefix.toLowerCase() + key;\n const parsedValue = value != null ? _parseXml(value) : true;\n\n if (typeof parsedValue === 'string') {\n (json as { [key: string]: any })[fullKey] = unescapeXml(parsedValue);\n } else if (Array.isArray((json as { [key: string]: any })[fullKey])) {\n (json as { [key: string]: any })[fullKey].push(parsedValue);\n } else {\n (json as { [key: string]: any })[fullKey] =\n (json as { [key: string]: any })[fullKey] != null\n ? [(json as { [key: string]: any })[fullKey], parsedValue]\n : expectArray[fullKey]\n ? [parsedValue]\n : parsedValue;\n }\n }\n\n return Object.keys(json).length ? json : unescapeXml(str);\n};\n\nexport { S3 };\nexport default S3;\n", "'use strict';\n\nimport { S3 } from 'ultralight-s3';\nimport avro from 'avro-js'; // eslint-disable-line\nimport {\n\tlowstorage_ERROR_CODES,\n\tlowstorageError,\n\tCollectionNotFoundError,\n\tSchemaValidationError,\n\tDocumentValidationError,\n\tS3OperationError,\n} from './errors.js';\nimport { matchesQuery, generateUUID, inferAvroType } from './helpers.js';\n\nconst MODULE_NAME = 'lowstorage';\nconst DEFAULT_DELIMITER = '/';\nconst PROJECT_DIR_PREFIX = 'lowstorage';\nconst COL_SUFFIX = '.avro';\nconst CHUNG_1MB = 1024 * 1024;\nconst CHUNG_5MB = 5 * CHUNG_1MB;\n\n// code / description\n// init of new collection is automatically creating it in the bucket\n// there is optional (opt-in) switch to create new collections in bucket\n// if the schema is not provided, it will create empty buffer and save it\n// if the schema is provided, it will save it in memory and use it for all ops\n// if the schema is updated, it will save it in memory and use it for all ops\n// exposed functions are:\n// listCollections \u2705\n// collectionExists \u2705\n// createCollection \u2705\n// removeCollection \u2705\n// renameCollection \u2705\n// updateCollectionSchema \u274C\n// collection \u2705\n// s3 \u2705\n\n// Operations over collections are:\n// insert \u2705\n// find \u2705\n// findOne \u2705\n// update \u2705\n// updateOne \u2705\n// delete \u2705\n// count \u2705\n\n// Errors:\n// lowstorageError \u2705\n// CollectionNotFoundError \u2705\n// SchemaValidationError \u2705\n// DocumentValidationError \u2705\n// S3OperationError \u2705\n\nclass lowstorage {\n\tconstructor(\n\t\toptions = {\n\t\t\taccessKeyId: undefined,\n\t\t\tsecretAccessKey: undefined,\n\t\t\tendpoint: undefined,\n\t\t\tbucketName: undefined,\n\t\t\tregion: 'auto',\n\t\t\tlogger: null,\n\t\t\tdirPrefix: PROJECT_DIR_PREFIX,\n\t\t},\n\t) {\n\t\tthis._checkArgs(options);\n\t\tthis._schemas = new Map();\n\t\tthis._s3 = new S3(options);\n\t\tthis._dirPrefix = options.dirPrefix || PROJECT_DIR_PREFIX;\n\t\tthis._avro = avro;\n\t}\n\n\t_checkArgs = (args) => {\n\t\tconst requiredFields = ['accessKeyId', 'secretAccessKey', 'endpoint', 'bucketName'];\n\t\tfor (const field of requiredFields) {\n\t\t\tif (!args[field]) {\n\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: ${field} is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n\t\t\t}\n\t\t}\n\t};\n\n\t_hasColName = (colName) => {\n\t\tif (colName.trim() === '' || colName === null || typeof colName === 'undefined') {\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Collection name is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n\t\t}\n\t};\n\n\tasync listCollections() {\n\t\ttry {\n\t\t\tconst listed = await this._s3.list(DEFAULT_DELIMITER, this._dirPrefix);\n\t\t\tif (typeof listed === 'object' && listed !== null && listed.keyCount === '0') return [];\n\t\t\t// remove the delimiter from the key\n\t\t\treturn listed.map((entry) => entry.key.slice(this._dirPrefix.length + 1, -COL_SUFFIX.length));\n\t\t} catch (error) {\n\t\t\tthrow new S3OperationError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t}\n\t}\n\n\tasync collectionExists(colName) {\n\t\ttry {\n\t\t\tthis._hasColName(colName);\n\t\t\tconst exists = await this._s3.fileExists(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`);\n\t\t\treturn exists;\n\t\t} catch (error) {\n\t\t\tif (error.message.includes('Not Found')) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND);\n\t\t}\n\t}\n\n\tasync createCollection(colName, schema, data = []) {\n\t\ttry {\n\t\t\tthis._hasColName(colName);\n\t\t\tconst exists = await this.collectionExists(colName);\n\t\t\tif (!exists) {\n\t\t\t\tawait this._s3.put(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`, data.length > 0 ? data : '');\n\t\t\t\treturn this.collection(colName, schema);\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Collection ${colName} already exists`, lowstorage_ERROR_CODES.COLLECTION_EXISTS);\n\t\t} catch (error) {\n\t\t\tif (error instanceof lowstorageError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.CREATE_COLLECTION_ERROR);\n\t\t}\n\t}\n\n\tasync removeCollection(colName) {\n\t\ttry {\n\t\t\tthis._hasColName(colName);\n\t\t\tconst KEY = `${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`;\n\t\t\tconst exists = await this.collectionExists(colName);\n\t\t\tif (exists) {\n\t\t\t\tawait this._s3.delete(KEY);\n\t\t\t\tconst exists2 = await this.collectionExists(colName);\n\t\t\t\tif (typeof exists2 === 'boolean') {\n\t\t\t\t\treturn !exists2;\n\t\t\t\t}\n\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to delete collection ${colName}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Collection ${colName} does not exist`, lowstorage_ERROR_CODES.REMOVE_COLLECTION_ERROR);\n\t\t} catch (error) {\n\t\t\tif (error instanceof S3OperationError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(\n\t\t\t\t`${MODULE_NAME}: Failed to remove collection: ${error.message}`,\n\t\t\t\tlowstorage_ERROR_CODES.REMOVE_COLLECTION_ERROR,\n\t\t\t);\n\t\t}\n\t}\n\n\tasync renameCollection(oldColName, newColName) {\n\t\ttry {\n\t\t\tthis._hasColName(oldColName);\n\t\t\tthis._hasColName(newColName);\n\t\t\tconst exists = await this.collectionExists(oldColName);\n\t\t\tif (!exists) {\n\t\t\t\tthrow new CollectionNotFoundError(\n\t\t\t\t\t`${MODULE_NAME}: Collection ${oldColName} does not exist`,\n\t\t\t\t\tlowstorage_ERROR_CODES.COLLECTION_NOT_FOUND,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst oldCol = await this.collection(oldColName);\n\t\t\tconst oldColData = await oldCol._loadDataBuffer();\n\t\t\tconst success = await this.removeCollection(oldColName);\n\t\t\tif (!success) {\n\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Failed to rename collection`, lowstorage_ERROR_CODES.RENAME_COLLECTION_ERROR);\n\t\t\t}\n\t\t\treturn await this.createCollection(newColName, oldCol._avroType, oldColData);\n\t\t} catch (error) {\n\t\t\tif (error instanceof lowstorageError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(\n\t\t\t\t`${MODULE_NAME}: Rename collection failed: ${error.message}`,\n\t\t\t\tlowstorage_ERROR_CODES.RENAME_COLLECTION_ERROR,\n\t\t\t);\n\t\t}\n\t}\n\n\t// TODO: update collection schema\n\t// async updateCollectionSchema(colName, newSchema) {\n\t// \ttry {\n\t// \t\tthis._hasColName(colName);\n\t// \t\t// Check if collection exists\n\t// \t\tconst exists = await this.collectionExists(colName);\n\t// \t\tif (!exists) {\n\t// \t\t\tthrow new CollectionNotFoundError(`${MODULE_NAME}: Collection ${colName} does not exist`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND);\n\t// \t\t}\n\t// \t\tif (typeof schema === 'undefined' || schema === null) {\n\t// \t\t\tthrow new lowstorageError(`${MODULE_NAME}: Schema is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n\t// \t\t}\n\t// \t\tconst col = this.collection(colName);\n\t// \t\tconst colData = await col._loadDataBuffer();\n\t// \t\tconst avroType = this._avro.parse(schema);\n\t// \t\tthis._schemas.set(colName, avroType);\n\n\t// \t} catch (error) {\n\t// \t\tif (error instanceof S3OperationError) {\n\t// \t\t\tthrow error;\n\t// \t\t}\n\t// \t\tthrow new lowstorageError(\n\t// \t\t\t`${MODULE_NAME}: Failed to update collection schema: ${error.message}`,\n\t// \t\t\tlowstorage_ERROR_CODES.UPDATE_COLLECTION_SCHEMA_ERROR,\n\t// \t\t);\n\t// \t}\n\t// }\n\n\tasync collection(colName, schema, autoCreate = true) {\n\t\ttry {\n\t\t\tthis._hasColName(colName);\n\t\t\tconst colPath = `${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`;\n\t\t\tlet avroType;\n\n\t\t\tconst exists = await this._s3.fileExists(colPath);\n\n\t\t\tif (!exists && !autoCreate) {\n\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Collection ${colName} does not exist`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND);\n\t\t\t}\n\n\t\t\tif (schema) {\n\t\t\t\tavroType = this._avro.parse(schema);\n\t\t\t\tthis._schemas.set(colName, avroType);\n\t\t\t\tif (!exists && autoCreate) {\n\t\t\t\t\tawait this._s3.put(colPath, '');\n\t\t\t\t}\n\t\t\t} else if (this._schemas.has(colName)) {\n\t\t\t\tavroType = this._schemas.get(colName);\n\t\t\t} else if (exists) {\n\t\t\t\tconst schemaContent = await this._s3.get(colPath);\n\t\t\t\tavroType = this._avro.parse(schemaContent);\n\t\t\t\tthis._schemas.set(colName, avroType);\n\t\t\t} else if (autoCreate) {\n\t\t\t\tawait this._s3.put(colPath, '');\n\t\t\t}\n\n\t\t\treturn new Collection(colName, this._s3, avroType, this._dirPrefix);\n\t\t} catch (error) {\n\t\t\t// check if error message contains \"unknown type\" and if so, throw a schema validation error\n\t\t\tif (error.message.includes('unknown type')) {\n\t\t\t\tthrow new SchemaValidationError(\n\t\t\t\t\t`${MODULE_NAME}: Schema input is invalid: ${error.message}`,\n\t\t\t\t\tlowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND);\n\t\t}\n\t}\n\n\ts3 = () => {\n\t\treturn this._s3;\n\t};\n}\n\nclass Collection {\n\tconstructor(colName, s3, avroType = undefined, dirPrefix = PROJECT_DIR_PREFIX) {\n\t\tthis._colName = colName;\n\t\tthis._s3 = s3;\n\t\tthis._avro = avro;\n\t\tthis._avroType = avroType;\n\t\tthis._dirPrefix = dirPrefix;\n\t}\n\n\tasync insert(doc, schema = undefined) {\n\t\ttry {\n\t\t\tif (doc === undefined || doc === null) {\n\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Document is required for insert`, lowstorage_ERROR_CODES.INSERT_ERROR);\n\t\t\t}\n\t\t\tif (typeof doc !== 'object' && !Array.isArray(doc)) {\n\t\t\t\tthrow new DocumentValidationError(\n\t\t\t\t\t`${MODULE_NAME}: Document must be an object or an array`,\n\t\t\t\t\tlowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst items = !Array.isArray(doc) ? [doc] : doc;\n\n\t\t\tconst avroType = !!schema ? this._avro.parse(schema) : this._avroType || this._avro.parse(inferAvroType(doc));\n\n\t\t\tif (!avroType) {\n\t\t\t\tthrow new SchemaValidationError(\n\t\t\t\t\t`${MODULE_NAME}: Schema is required - Pass a schema to the insert method`,\n\t\t\t\t\tlowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthis._avroType = avroType;\n\t\t\tconst wrapperType = this._avro.parse({ type: 'array', items: this._avroType });\n\t\t\tconst bufferData = await this._loadDataBuffer();\n\t\t\tconst data = bufferData.length > 0 ? wrapperType.fromBuffer(bufferData) : [];\n\t\t\tfor (let item of items) {\n\t\t\t\tif (typeof item !== 'object' || item === null) {\n\t\t\t\t\tthrow new DocumentValidationError(\n\t\t\t\t\t\t`${MODULE_NAME}: Invalid input: input must be an object or an array of objects`,\n\t\t\t\t\t\tlowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\titem._id = item._id || (await generateUUID());\n\t\t\t\tconst valid = this._avroType.isValid(item);\n\t\t\t\tif (!valid) {\n\t\t\t\t\tthrow new DocumentValidationError(`${MODULE_NAME}: Invalid document or schema`, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR);\n\t\t\t\t}\n\t\t\t\tdata.push(item);\n\t\t\t}\n\t\t\tconst success = await this._saveDataBuffer(wrapperType.toBuffer(data));\n\t\t\tif (!success) {\n\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to insert document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t}\n\t\t\treturn items;\n\t\t} catch (error) {\n\t\t\tif (error.message.includes('unknown type')) {\n\t\t\t\tthrow new SchemaValidationError(\n\t\t\t\t\t`${MODULE_NAME}: Schema input is invalid: ${error.message}`,\n\t\t\t\t\tlowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (error instanceof lowstorageError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME} Insert operation failed: ${error.message}`, lowstorage_ERROR_CODES.INSERT_ERROR);\n\t\t}\n\t}\n\n\tasync _loadDataBuffer() {\n\t\ttry {\n\t\t\tconst KEY = `${this._dirPrefix}${DEFAULT_DELIMITER}${this._colName}${COL_SUFFIX}`;\n\t\t\tconst CHUNK_SIZE = this._s3.getMaxRequestSizeInBytes() || CHUNG_5MB;\n\t\t\tlet firstData = await this._s3.get(KEY);\n\t\t\tif (firstData.length < CHUNK_SIZE) {\n\t\t\t\treturn Buffer.from(firstData, 'utf8');\n\t\t\t}\n\t\t\tlet offset = CHUNK_SIZE;\n\t\t\tlet bufferArr = [Buffer.from(firstData, 'utf8')];\n\t\t\tlet repeat = true;\n\t\t\twhile (repeat) {\n\t\t\t\tconst nextDataResponse = await this._s3.getResponse(KEY, false, offset, offset + CHUNK_SIZE);\n\t\t\t\tconst nextDataBody = await nextDataResponse.text();\n\t\t\t\tbufferArr.push(Buffer.from(nextDataBody, 'utf8'));\n\t\t\t\toffset += CHUNK_SIZE;\n\t\t\t\tconst contentLength = nextDataResponse.headers.get('content-length') || nextDataBody.length;\n\t\t\t\tif (contentLength < CHUNK_SIZE) {\n\t\t\t\t\trepeat = false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn Buffer.concat(bufferArr);\n\t\t} catch (error) {\n\t\t\tif (error.toString().indexOf('status 404: Unknown - Not Found') > -1) {\n\t\t\t\treturn Buffer.from('');\n\t\t\t}\n\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to load data buffer: ${error.message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t}\n\t}\n\n\tasync _saveDataBuffer(data) {\n\t\ttry {\n\t\t\tconst KEY = `${this._dirPrefix}${DEFAULT_DELIMITER}${this._colName}${COL_SUFFIX}`;\n\t\t\tconst resp = await this._s3.put(KEY, data);\n\t\t\tif (resp.status !== 200) {\n\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to save data`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t}\n\t\t\treturn true;\n\t\t} catch (error) {\n\t\t\tif (error instanceof S3OperationError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.SAVE_DATA_ERROR);\n\t\t}\n\t}\n\n\tasync find(query = {}, options = {}) {\n\t\ttry {\n\t\t\tif (query === undefined || query === null) {\n\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Query is required for update`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n\t\t\t}\n\t\t\tconst bufferData = await this._loadDataBuffer(); // load data from s3\n\t\t\tif (bufferData.length === 0) {\n\t\t\t\treturn [];\n\t\t\t}\n\t\t\tconst wrapperType = this._avro.parse({ type: 'array', items: this._avroType });\n\t\t\tconst data = bufferData.length > 0 ? wrapperType.fromBuffer(bufferData) : [];\n\t\t\tconst start = parseInt(options.skip, 10) || 0;\n\t\t\tconst end = parseInt(options.limit, 10) ? start + parseInt(options.limit, 10) : undefined;\n\t\t\tconst filteredData = data.filter((doc) => matchesQuery(doc, query)).slice(start, end);\n\t\t\treturn filteredData;\n\t\t} catch (error) {\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Find operation failed: ${error.message}`, lowstorage_ERROR_CODES.FIND_ERROR);\n\t\t}\n\t}\n\n\tasync findOne(query = {}) {\n\t\ttry {\n\t\t\tif (query === undefined || query === null) {\n\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Query is required for update`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n\t\t\t}\n\t\t\tconst result = await this.find(query);\n\t\t\treturn result[0] || [];\n\t\t} catch (error) {\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: FindOne operation failed: ${error.message}`, lowstorage_ERROR_CODES.FIND_ONE_ERROR);\n\t\t}\n\t}\n\n\tasync update(query = {}, update = {}) {\n\t\ttry {\n\t\t\tif (query === undefined || query === null || update === undefined || update === null) {\n\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Query is required for update`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n\t\t\t}\n\t\t\tif (!this._avroType) {\n\t\t\t\tthrow new SchemaValidationError(\n\t\t\t\t\t`${MODULE_NAME}: Schema is not defined for this collection`,\n\t\t\t\t\tlowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst bufferData = await this._loadDataBuffer(); // load data from s3\n\t\t\tif (bufferData.length === 0) return 0;\n\t\t\tconst wrapperType = this._avro.parse({ type: 'array', items: this._avroType });\n\t\t\tconst data = bufferData.length > 0 ? wrapperType.fromBuffer(bufferData) : [];\n\t\t\tlet updatedCount = 0;\n\n\t\t\tfor (let i = 0; i < data.length; i++) {\n\t\t\t\tif (matchesQuery(data[i], query)) {\n\t\t\t\t\tconst updatedDoc = { ...data[i], ...update };\n\t\t\t\t\tconst valid = this._avroType.isValid(updatedDoc);\n\t\t\t\t\tif (!valid) {\n\t\t\t\t\t\tthrow new DocumentValidationError(\n\t\t\t\t\t\t\t`${MODULE_NAME}: Invalid document or schema`,\n\t\t\t\t\t\t\tlowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tdata[i] = updatedDoc;\n\t\t\t\t\tupdatedCount++;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (updatedCount > 0) {\n\t\t\t\tconst success = await this._saveDataBuffer(wrapperType.toBuffer(data));\n\t\t\t\tif (!success) {\n\t\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn updatedCount;\n\t\t} catch (error) {\n\t\t\tif (error instanceof S3OperationError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Update operation failed: ${error.message}`, lowstorage_ERROR_CODES.UPDATE_ERROR);\n\t\t}\n\t}\n\n\tasync updateOne(query = {}, update = {}) {\n\t\ttry {\n\t\t\tif (query === undefined || query === null || update === undefined || update === null) {\n\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Query is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n\t\t\t}\n\t\t\tif (!this._avroType) {\n\t\t\t\tthrow new SchemaValidationError(\n\t\t\t\t\t`${MODULE_NAME}: Schema is not defined for this collection`,\n\t\t\t\t\tlowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst bufferData = await this._loadDataBuffer(); // load data from s3\n\t\t\tif (bufferData.length === 0) return 0;\n\t\t\tconst wrapperType = this._avro.parse({ type: 'array', items: this._avroType });\n\t\t\tconst data = bufferData.length > 0 ? wrapperType.fromBuffer(bufferData) : [];\n\t\t\tconst docIndex = data.findIndex((doc) => matchesQuery(doc, query));\n\n\t\t\tif (docIndex !== -1) {\n\t\t\t\tconst updatedDoc = { ...data[docIndex], ...update };\n\t\t\t\tconst valid = this._avroType.isValid(updatedDoc);\n\t\t\t\tif (!valid) {\n\t\t\t\t\tthrow new DocumentValidationError(`${MODULE_NAME}: Invalid document or schema`, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR);\n\t\t\t\t}\n\t\t\t\tdata[docIndex] = updatedDoc;\n\t\t\t\tconst success = await this._saveDataBuffer(wrapperType.toBuffer(data));\n\t\t\t\tif (!success) {\n\t\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t\t}\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t\treturn 0;\n\t\t} catch (error) {\n\t\t\tif (error instanceof lowstorageError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: UpdateOne operation failed: ${error.message}`, lowstorage_ERROR_CODES.UPDATE_ONE_ERROR);\n\t\t}\n\t}\n\n\tasync delete(query = {}) {\n\t\ttry {\n\t\t\tif (query === undefined || query === null) {\n\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Query is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n\t\t\t}\n\t\t\tconst bufferData = await this._loadDataBuffer(); // load data from s3\n\t\t\tif (bufferData.length === 0) return 0;\n\t\t\tconst wrapperType = this._avro.parse({ type: 'array', items: this._avroType });\n\t\t\tconst data = bufferData.length > 0 ? wrapperType.fromBuffer(bufferData) : [];\n\t\t\tconst initialLength = data.length;\n\t\t\tconst newData = data.filter((doc) => !matchesQuery(doc, query));\n\t\t\tconst success = await this._saveDataBuffer(wrapperType.toBuffer(newData));\n\t\t\tif (!success) {\n\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to delete document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t}\n\t\t\treturn initialLength - newData.length;\n\t\t} catch (error) {\n\t\t\tif (error instanceof S3OperationError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Delete operation failed: ${error.message}`, lowstorage_ERROR_CODES.DELETE_ERROR);\n\t\t}\n\t}\n\n\tasync deleteAll() {\n\t\ttry {\n\t\t\tconst bufferData = await this._loadDataBuffer(); // load data from s3\n\t\t\tif (bufferData.length === 0) return 0;\n\t\t\tconst wrapperType = this._avro.parse({ type: 'array', items: this._avroType });\n\t\t\tconst data = bufferData.length > 0 ? wrapperType.fromBuffer(bufferData) : [];\n\t\t\tconst initialLength = data.length;\n\t\t\tconst newData = data.filter((doc) => !matchesQuery(doc, {}));\n\t\t\tconst success = await this._saveDataBuffer(wrapperType.toBuffer(newData));\n\t\t\tif (!success) {\n\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to delete document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t}\n\t\t\treturn initialLength - newData.length;\n\t\t} catch (error) {\n\t\t\tif (error instanceof S3OperationError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Delete operation failed: ${error.message}`, lowstorage_ERROR_CODES.DELETE_ERROR);\n\t\t}\n\t}\n\n\tasync count(query = {}) {\n\t\ttry {\n\t\t\tif (Object.keys(query).length === 0) {\n\t\t\t\tconst bufferData = await this._loadDataBuffer(); // load data from s3\n\t\t\t\tif (bufferData.length === 0) return 0;\n\t\t\t\tconst wrapperType = this._avro.parse({ type: 'array', items: this._avroType });\n\t\t\t\treturn wrapperType.fromBuffer(bufferData).length || 0;\n\t\t\t}\n\t\t\treturn (await this.find(query)).length;\n\t\t} catch (error) {\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Count operation failed: ${error.message}`, lowstorage_ERROR_CODES.COUNT_ERROR);\n\t\t}\n\t}\n}\n\n// export default lowstorage;\nexport { lowstorage, lowstorageError, lowstorage_ERROR_CODES };\n", "'use strict';\n\nconst lowstorage_ERROR_CODES = {\n\tMISSING_ARGUMENT: 'MISSING_ARGUMENT',\n\tCOLLECTION_EXISTS: 'COLLECTION_EXISTS',\n\tCREATE_COLLECTION_ERROR: 'CREATE_COLLECTION_ERROR',\n\tRENAME_COLLECTION_ERROR: 'RENAME_COLLECTION_ERROR',\n\tREMOVE_COLLECTION_ERROR: 'REMOVE_COLLECTION_ERROR',\n\tUPDATE_COLLECTION_SCHEMA_ERROR: 'UPDATE_COLLECTION_SCHEMA_ERROR',\n\tCOLLECTION_NOT_FOUND: 'COLLECTION_NOT_FOUND',\n\tSCHEMA_VALIDATION_ERROR: 'SCHEMA_VALIDATION_ERROR',\n\tDOCUMENT_VALIDATION_ERROR: 'DOCUMENT_VALIDATION_ERROR',\n\tS3_OPERATION_ERROR: 'S3_OPERATION_ERROR',\n\tFIND_ERROR: 'FIND_ERROR',\n\tFIND_ONE_ERROR: 'FIND_ONE_ERROR',\n\tSAVE_DATA_ERROR: 'SAVE_DATA_ERROR',\n\tINSERT_ERROR: 'INSERT_ERROR',\n\tUPDATE_ERROR: 'UPDATE_ERROR',\n\tUPDATE_ONE_ERROR: 'UPDATE_ONE_ERROR',\n\tDELETE_ERROR: 'DELETE_ERROR',\n\tCOUNT_ERROR: 'COUNT_ERROR',\n\tUNKNOWN_ERROR: 'UNKNOWN_ERROR',\n};\nclass lowstorageError extends Error {\n\tconstructor(message, code = lowstorage_ERROR_CODES.UNKNOWN_ERROR) {\n\t\tsuper(`lowstorageError: ${message} :: code: ${code}`);\n\t\tthis.name = this.constructor.name;\n\t\tthis.code = code;\n\t\tError.captureStackTrace(this, this.constructor);\n\t}\n}\n\nclass CollectionNotFoundError extends lowstorageError {\n\tconstructor(collectionName) {\n\t\tsuper(`Collection ${collectionName} not found`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND);\n\t}\n}\n\nclass SchemaValidationError extends lowstorageError {\n\tconstructor(message) {\n\t\tsuper(message, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR);\n\t}\n}\n\nclass DocumentValidationError extends lowstorageError {\n\tconstructor(message) {\n\t\tsuper(message, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR);\n\t}\n}\n\nclass S3OperationError extends lowstorageError {\n\tconstructor(message, operation) {\n\t\tsuper(`S3 ${operation} operation failed: ${message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t}\n}\n\nexport {\n\tlowstorage_ERROR_CODES,\n\tlowstorageError,\n\tCollectionNotFoundError,\n\tSchemaValidationError,\n\tDocumentValidationError,\n\tS3OperationError,\n};\n", "'use strict';\n\nimport { randomUUID } from 'node:crypto';\n\nconst matchesQuery = (document, query) => {\n\treturn Object.keys(query).every((key) => document[key] === query[key]);\n};\n\nconst generateUUID = async () => {\n\tif (typeof randomUUID !== 'undefined' && typeof randomUUID === 'function') {\n\t\treturn randomUUID();\n\t}\n\tif (typeof crypto !== 'undefined' && typeof crypto === 'object' && typeof crypto.randomUUID === 'function') {\n\t\treturn crypto.randomUUID();\n\t}\n\treturn 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n\t\tvar r = (Math.random() * 16) | 0,\n\t\t\tv = c === 'x' ? r : (r & 0x3) | 0x8;\n\t\treturn v.toString(16);\n\t});\n};\n\nconst _getAvroType = (value, name = 'SubAutoGenerated') => {\n\tswitch (typeof value) {\n\t\tcase 'string':\n\t\t\tif (_isUUID(value)) {\n\t\t\t\treturn {\n\t\t\t\t\ttype: 'string',\n\t\t\t\t\tname: '_id',\n\t\t\t\t\tsize: 16,\n\t\t\t\t\tlogicalType: 'UUID',\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn 'string';\n\t\tcase 'number':\n\t\t\treturn Number.isInteger(value) ? 'int' : 'float';\n\t\tcase 'boolean':\n\t\t\treturn 'boolean';\n\t\tcase 'object':\n\t\t\tif (value === null) return 'null';\n\t\t\tif (Array.isArray(value)) return { type: 'array', items: _getAvroType(value[0]) };\n\t\t\treturn inferAvroType(value, name);\n\t\tdefault:\n\t\t\treturn 'string'; // Default to string for unknown types\n\t}\n};\n\nconst inferAvroType = (data, typeName = 'AutoGenerated') => {\n\tif (Array.isArray(data)) {\n\t\tdata = data[0];\n\t}\n\tconst fields = Object.entries(data).map(([name, value]) => {\n\t\treturn { name, type: _getAvroType(value, `${typeName}.${name}`) };\n\t});\n\treturn {\n\t\ttype: 'record',\n\t\tname: typeName,\n\t\tfields: fields,\n\t};\n};\n\nconst _isUUID = (str) => {\n\tconst uuidV4Regex = /^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i;\n\treturn uuidV4Regex.test(str);\n};\n\nexport { matchesQuery, generateUUID, inferAvroType };\n"], - "mappings": "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", + "sourcesContent": ["'use strict';\n\ninterface S3Config {\n accessKeyId: string;\n secretAccessKey: string;\n endpoint: string;\n bucketName: string;\n region?: string;\n maxRequestSizeInBytes?: number;\n requestAbortTimeout?: number;\n logger?: Logger;\n}\n\ndeclare global {\n interface Crypto {\n createHmac: (\n algorithm: string,\n key: string | Buffer,\n ) => {\n update: (data: string | Buffer) => void;\n digest: (encoding?: 'hex' | 'base64' | 'latin1') => string;\n };\n createHash: (algorithm: string) => {\n update: (data: string | Buffer) => void;\n digest: (encoding?: 'hex' | 'base64' | 'latin1') => string;\n };\n }\n}\n\ninterface Logger {\n info: (message: string, ...args: any[]) => void;\n warn: (message: string, ...args: any[]) => void;\n error: (message: string, ...args: any[]) => void;\n}\n\ninterface UploadPart {\n partNumber: number;\n ETag: string;\n}\n\ninterface CompleteMultipartUploadResult {\n Location: string;\n Bucket: string;\n Key: string;\n ETag: string;\n}\n\ntype HttpMethod = 'POST' | 'GET' | 'HEAD' | 'PUT' | 'DELETE';\n\nlet _createHmac = crypto.createHmac || (await import('node:crypto')).createHmac;\nlet _createHash = crypto.createHash || (await import('node:crypto')).createHash;\n\nif (typeof _createHmac === 'undefined' && typeof _createHash === 'undefined') {\n console.error(\n 'ultralight-S3 Module: Crypto functions are not available, please report the issue with necessary description: https://github.com/sentienhq/ultralight-s3/issues',\n );\n}\n\n// Constants\nconst AWS_ALGORITHM = 'AWS4-HMAC-SHA256';\nconst AWS_REQUEST_TYPE = 'aws4_request';\nconst S3_SERVICE = 's3';\nconst LIST_TYPE = '2';\nconst UNSIGNED_PAYLOAD = 'UNSIGNED-PAYLOAD';\nconst DEFAULT_STREAM_CONTENT_TYPE = 'application/octet-stream';\nconst XML_CONTENT_TYPE = 'application/xml';\nconst JSON_CONTENT_TYPE = 'application/json';\n// List of keys that might contain sensitive information\nconst SENSITIVE_KEYS_REDACTED = ['accessKeyId', 'secretAccessKey', 'sessionToken', 'password'];\nconst MIN_MAX_REQUEST_SIZE_IN_BYTES = 5 * 1024 * 1024;\n\n// Headers\nconst HEADER_AMZ_CONTENT_SHA256 = 'x-amz-content-sha256';\nconst HEADER_AMZ_DATE = 'x-amz-date';\nconst HEADER_HOST = 'host';\nconst HEADER_AUTHORIZATION = 'Authorization';\nconst HEADER_CONTENT_TYPE = 'Content-Type';\nconst HEADER_CONTENT_LENGTH = 'Content-Length';\nconst HEADER_ETAG = 'etag';\nconst HEADER_LAST_MODIFIED = 'last-modified';\n\n// Error messages\nexport const ERROR_PREFIX = 'ultralight-s3 Module: ';\nconst ERROR_ACCESS_KEY_REQUIRED = `${ERROR_PREFIX}accessKeyId must be a non-empty string`;\nconst ERROR_SECRET_KEY_REQUIRED = `${ERROR_PREFIX}secretAccessKey must be a non-empty string`;\nconst ERROR_ENDPOINT_REQUIRED = `${ERROR_PREFIX}endpoint must be a non-empty string`;\nconst ERROR_BUCKET_NAME_REQUIRED = `${ERROR_PREFIX}bucketName must be a non-empty string`;\nconst ERROR_KEY_REQUIRED = `${ERROR_PREFIX}key must be a non-empty string`;\nconst ERROR_UPLOAD_ID_REQUIRED = `${ERROR_PREFIX}uploadId must be a non-empty string`;\nconst ERROR_PARTS_REQUIRED = `${ERROR_PREFIX}parts must be a non-empty array`;\nconst ERROR_INVALID_PART = `${ERROR_PREFIX}Each part must have a partNumber (number) and ETag (string)`;\nconst ERROR_DATA_BUFFER_REQUIRED = `${ERROR_PREFIX}data must be a Buffer or string`;\n// const ERROR_PATH_REQUIRED = `${ERROR_PREFIX}path must be a string`;\nconst ERROR_PREFIX_TYPE = `${ERROR_PREFIX}prefix must be a string`;\nconst ERROR_MAX_KEYS_TYPE = `${ERROR_PREFIX}maxKeys must be a positive integer`;\nconst ERROR_DELIMITER_REQUIRED = `${ERROR_PREFIX}delimiter must be a string`;\n\nconst expectArray: { [key: string]: boolean } = {\n contents: true,\n};\n\nconst encodeAsHex = (c: string): string => `%${c.charCodeAt(0).toString(16).toUpperCase()}`;\n\nconst uriEscape = (uriStr: string): string => {\n return encodeURIComponent(uriStr).replace(/[!'()*]/g, encodeAsHex);\n};\n\nconst uriResourceEscape = (string: string): string => {\n return uriEscape(string).replace(/%2F/g, '/');\n};\n\n/**\n * S3 class for interacting with S3-compatible object storage services.\n * This class provides methods for common S3 operations such as uploading, downloading,\n * and deleting objects, as well as multipart uploads.\n *\n * @class\n * @example\n * const s3 = new S3({\n * accessKeyId: 'your-access-key',\n * secretAccessKey: 'your-secret-key',\n * endpoint: 'https://your-s3-endpoint.com',\n * bucketName: 'your-bucket-name',\n * region: 'us-east-1' // by default is auto\n * });\n *\n * // Upload a file\n * await s3.put('example.txt', 'Hello, World!');\n *\n * // Download a file\n * const content = await s3.get('example.txt');\n *\n * // Delete a file\n * await s3.delete('example.txt');\n */\nclass S3 {\n /**\n * Creates an instance of the S3 class.\n *\n * @constructor\n * @param {Object} config - Configuration options for the S3 instance.\n * @param {string} config.accessKeyId - The access key ID for authentication.\n * @param {string} config.secretAccessKey - The secret access key for authentication.\n * @param {string} config.endpoint - The endpoint URL of the S3-compatible service.\n * @param {string} [config.bucketName=''] - The name of the bucket to operate on.\n * @param {string} [config.region='auto'] - The region of the S3 service.\n * @param {number} [config.maxRequestSizeInBytes=5242880] - The maximum size of a single request in bytes (minimum for AWS S3 is 5MB).\n * @param {number} [config.requestAbortTimeout=undefined] - The timeout in milliseconds after which a request should be aborted (careful on streamed requests).\n * @param {Object} [config.logger=null] - A logger object with methods like info, warn, error.\n * @throws {TypeError} Will throw an error if required parameters are missing or of incorrect type.\n */\n private accessKeyId: string;\n private secretAccessKey: string;\n private endpoint: string;\n private bucketName: string;\n private region: string;\n private maxRequestSizeInBytes: number;\n private requestAbortTimeout?: number;\n private logger?: Logger;\n\n constructor({\n accessKeyId,\n secretAccessKey,\n endpoint,\n bucketName,\n region = 'auto',\n maxRequestSizeInBytes = MIN_MAX_REQUEST_SIZE_IN_BYTES,\n requestAbortTimeout = undefined,\n logger = undefined,\n }: S3Config) {\n this._validateConstructorParams(accessKeyId, secretAccessKey, endpoint, bucketName);\n this.accessKeyId = accessKeyId;\n this.secretAccessKey = secretAccessKey;\n this.endpoint = endpoint;\n this.bucketName = bucketName;\n this.region = region;\n this.maxRequestSizeInBytes = maxRequestSizeInBytes;\n this.requestAbortTimeout = requestAbortTimeout;\n this.logger = logger;\n }\n\n private _validateConstructorParams(\n accessKeyId: string,\n secretAccessKey: string,\n endpoint: string,\n bucketName: string,\n ): void {\n if (typeof accessKeyId !== 'string' || accessKeyId.trim().length === 0)\n throw new TypeError(ERROR_ACCESS_KEY_REQUIRED);\n if (typeof secretAccessKey !== 'string' || secretAccessKey.trim().length === 0)\n throw new TypeError(ERROR_SECRET_KEY_REQUIRED);\n if (typeof endpoint !== 'string' || endpoint.trim().length === 0) throw new TypeError(ERROR_ENDPOINT_REQUIRED);\n if (typeof bucketName !== 'string' || bucketName.trim().length === 0)\n throw new TypeError(ERROR_BUCKET_NAME_REQUIRED);\n }\n\n private _checkMethodHeadnGet(method: string): void {\n if (method !== 'GET' && method !== 'HEAD') {\n this._log('error', `${ERROR_PREFIX}method must be either GET or HEAD`);\n throw new Error('method must be either GET or HEAD');\n }\n }\n\n private _checkKey(key: string): void {\n if (typeof key !== 'string' || key.trim().length === 0) {\n this._log('error', ERROR_KEY_REQUIRED);\n throw new TypeError(ERROR_KEY_REQUIRED);\n }\n }\n\n private _checkDelimiter(delimiter: string): void {\n if (typeof delimiter !== 'string' || delimiter.trim().length === 0) {\n this._log('error', ERROR_DELIMITER_REQUIRED);\n throw new TypeError(ERROR_DELIMITER_REQUIRED);\n }\n }\n\n private _checkPrefix(prefix: string): void {\n if (typeof prefix !== 'string') {\n this._log('error', ERROR_PREFIX_TYPE);\n throw new TypeError(ERROR_PREFIX_TYPE);\n }\n }\n\n private _checkMaxKeys(maxKeys: number): void {\n if (typeof maxKeys !== 'number' || maxKeys <= 0) {\n this._log('error', ERROR_MAX_KEYS_TYPE);\n throw new TypeError(ERROR_MAX_KEYS_TYPE);\n }\n }\n\n private _checkOpts(opts: Record): void {\n if (typeof opts !== 'object') {\n this._log('error', `${ERROR_PREFIX}opts must be an object`);\n throw new TypeError(`${ERROR_PREFIX}opts must be an object`);\n }\n }\n\n /**\n * Internal method to log messages with sanitized sensitive information.\n * @param {string} level - The log level (e.g., 'info', 'warn', 'error').\n * @param {string} message - The message to log.\n * @param {Object} [additionalData={}] - Additional data to include in the log.\n * @private\n */\n private _log(\n level: 'info' | 'warn' | 'error',\n message: string,\n additionalData: Record | string = {},\n ): void {\n if (this.logger && typeof this.logger[level] === 'function') {\n // Function to recursively sanitize an object\n const sanitize = (obj: any): any => {\n if (typeof obj !== 'object' || obj === null) {\n return obj;\n }\n return Object.keys(obj).reduce(\n (acc: any, key) => {\n if (SENSITIVE_KEYS_REDACTED.includes(key.toLowerCase())) {\n acc[key] = '[REDACTED]';\n } else if (typeof obj[key] === 'object' && obj[key] !== null) {\n acc[key] = sanitize(obj[key]);\n } else {\n acc[key] = obj[key];\n }\n return acc;\n },\n Array.isArray(obj) ? [] : {},\n );\n };\n\n // Sanitize the additional data\n const sanitizedData = sanitize(additionalData);\n // Prepare the log entry\n const logEntry = {\n timestamp: new Date().toISOString(),\n level,\n message,\n ...sanitizedData,\n // Include some general context, but sanitize sensitive parts\n context: sanitize({\n bucketName: this.bucketName,\n region: this.region,\n endpoint: this.endpoint,\n // Only include the first few characters of the access key, if it exists\n accessKeyId: this.accessKeyId ? `${this.accessKeyId.substring(0, 4)}...` : undefined,\n }),\n };\n\n // Log the sanitized entry\n this.logger[level](logEntry);\n }\n }\n\n getBucketName = () => this.bucketName;\n setBucketName = (bucketName: string) => {\n this.bucketName = bucketName;\n };\n getRegion = () => this.region;\n setRegion = (region: string) => {\n this.region = region;\n };\n getEndpoint = () => this.endpoint;\n setEndpoint = (endpoint: string) => {\n this.endpoint = endpoint;\n };\n getMaxRequestSizeInBytes = () => this.maxRequestSizeInBytes;\n setMaxRequestSizeInBytes = (maxRequestSizeInBytes: number) => {\n this.maxRequestSizeInBytes = maxRequestSizeInBytes;\n };\n\n getProps = () => ({\n accessKeyId: this.accessKeyId,\n secretAccessKey: this.secretAccessKey,\n region: this.region,\n bucket: this.bucketName,\n endpoint: this.endpoint,\n maxRequestSizeInBytes: this.maxRequestSizeInBytes,\n requestAbortTimeout: this.requestAbortTimeout,\n logger: this.logger,\n });\n setProps = (props: S3Config) => {\n this._validateConstructorParams(props.accessKeyId, props.secretAccessKey, props.bucketName, props.endpoint);\n this.accessKeyId = props.accessKeyId;\n this.secretAccessKey = props.secretAccessKey;\n this.region = props.region || 'auto';\n this.bucketName = props.bucketName;\n this.endpoint = props.endpoint;\n this.maxRequestSizeInBytes = props.maxRequestSizeInBytes || MIN_MAX_REQUEST_SIZE_IN_BYTES;\n this.requestAbortTimeout = props.requestAbortTimeout;\n this.logger = props.logger;\n };\n\n /**\n * Get the content length of an object.\n * @param {string} key - The key of the object.\n * @returns {Promise} The content length of the object in bytes.\n * @throws {TypeError} If the key is not a non-empty string.\n */\n async getContentLength(key: string): Promise {\n this._checkKey(key);\n const headers = {\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('HEAD', encodedKey, {}, headers, '');\n const res = await this._sendRequest(url, 'HEAD', signedHeaders);\n const contentLength = res.headers.get(HEADER_CONTENT_LENGTH);\n return contentLength ? parseInt(contentLength, 10) : 0;\n }\n\n /**\n * Check if a bucket exists.\n * @returns {Promise} True if the bucket exists, false otherwise.\n */\n async bucketExists(): Promise {\n const headers = {\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n const { url, headers: signedHeaders } = await this._sign('HEAD', '', {}, headers, '');\n const res = await this._sendRequest(url, 'HEAD', signedHeaders);\n if (res.ok && res.status === 200) {\n return true;\n }\n return false;\n }\n\n // TBD\n // async createBucket(bucketName) {\n // const xmlBody = `\n // \n // \n // ${this.region}\n // \n // `;\n // const headers = {\n // [HEADER_CONTENT_TYPE]: XML_CONTENT_TYPE,\n // [HEADER_CONTENT_LENGTH]: Buffer.byteLength(xmlBody).toString(),\n // [HEADER_AMZ_CONTENT_SHA256]: await _hash(xmlBody),\n // };\n // const encodedKey = encodeURI(bucketName);\n // const { url, headers: signedHeaders } = await this._sign('PUT', encodedKey, {}, headers, '');\n // const res = await this._sendRequest(url, 'PUT', signedHeaders);\n // if (res.ok && res.status === 200) {\n // return true;\n // }\n // return false;\n // }\n\n /**\n * Check if a file exists in the bucket.\n * @param {string} key - The key of the object.\n * @returns {Promise} True if the file exists, false otherwise.\n * @throws {TypeError} If the key is not a non-empty string.\n */\n async fileExists(key: string): Promise {\n this._checkKey(key);\n const headers = { [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('HEAD', encodedKey, {}, headers, '');\n try {\n const res = await fetch(url, {\n method: 'HEAD',\n headers: signedHeaders,\n });\n if (res.ok && res.status === 200) return true;\n else if (res.status === 404) return false;\n else this._handleErrorResponse(res);\n return false;\n } catch (error: unknown) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n this._log('error', `${ERROR_PREFIX}Failed to check if file exists: ${errorMessage}`);\n throw new Error(`${ERROR_PREFIX}Failed to check if file exists: ${errorMessage}`);\n }\n }\n async _sign(\n method: HttpMethod,\n keyPath: string,\n query: Object,\n headers: Record,\n body: string | Buffer,\n ): Promise<{ url: string; headers: Record }> {\n const datetime = new Date().toISOString().replace(/[:-]|\\.\\d{3}/g, '');\n const url =\n typeof keyPath === 'string' && keyPath.length > 0 ? new URL(keyPath, this.endpoint) : new URL(this.endpoint);\n url.pathname = `/${encodeURI(this.bucketName)}${url.pathname}`;\n headers[HEADER_AMZ_CONTENT_SHA256] = body ? await _hash(body) : UNSIGNED_PAYLOAD;\n headers[HEADER_AMZ_DATE] = datetime;\n headers[HEADER_HOST] = url.host;\n const canonicalHeaders = this._buildCanonicalHeaders(headers);\n const signedHeaders = Object.keys(headers)\n .map(key => key.toLowerCase())\n .sort()\n .join(';');\n\n const canonicalRequest = await this._buildCanonicalRequest(\n method,\n url,\n query,\n canonicalHeaders,\n signedHeaders,\n body,\n );\n const stringToSign = await this._buildStringToSign(datetime, canonicalRequest);\n const signature = await this._calculateSignature(datetime, stringToSign);\n const authorizationHeader = this._buildAuthorizationHeader(datetime, signedHeaders, signature);\n headers[HEADER_AUTHORIZATION] = authorizationHeader;\n return { url: url.toString(), headers };\n }\n\n _buildCanonicalHeaders(headers: Record): string {\n return Object.entries(headers)\n .map(([key, value]) => `${key.toLowerCase()}:${String(value).trim()}`)\n .sort()\n .join('\\n');\n }\n\n async _buildCanonicalRequest(\n method: HttpMethod,\n url: URL,\n query: Object,\n canonicalHeaders: string,\n signedHeaders: string,\n body: string | Buffer,\n ): Promise {\n return [\n method,\n url.pathname,\n this._buildCanonicalQueryString(query),\n `${canonicalHeaders}\\n`,\n signedHeaders,\n body ? await _hash(body) : UNSIGNED_PAYLOAD,\n ].join('\\n');\n }\n\n async _buildStringToSign(datetime: string, canonicalRequest: string): Promise {\n const credentialScope = [datetime.slice(0, 8), this.region, S3_SERVICE, AWS_REQUEST_TYPE].join('/');\n return [AWS_ALGORITHM, datetime, credentialScope, await _hash(canonicalRequest)].join('\\n');\n }\n\n async _calculateSignature(datetime: string, stringToSign: string): Promise {\n const signingKey = await this._getSignatureKey(datetime.slice(0, 8));\n return _hmac(signingKey, stringToSign, 'hex');\n }\n\n _buildAuthorizationHeader(datetime: string, signedHeaders: string, signature: string): string {\n const credentialScope = [datetime.slice(0, 8), this.region, S3_SERVICE, AWS_REQUEST_TYPE].join('/');\n return [\n `${AWS_ALGORITHM} Credential=${this.accessKeyId}/${credentialScope}`,\n `SignedHeaders=${signedHeaders}`,\n `Signature=${signature}`,\n ].join(', ');\n }\n\n /**\n * List objects in the bucket.\n * @param {string} [delimiter='/'] - The delimiter to use for grouping objects in specific path.\n * @param {string} [prefix=''] - The prefix to filter objects in specific path.\n * @param {number} [maxKeys=1000] - The maximum number of keys to return.\n * @param {string} [method='GET'] - The HTTP method to use (GET or HEAD).\n * @param {Object} [opts={}] - Additional options for the list operation.\n * @returns {Promise} The list of objects or object metadata.\n * @throws {TypeError} If any of the parameters are of incorrect type.\n */\n async list(\n delimiter: string = '/',\n prefix: string = '',\n maxKeys: number = 1000,\n method: HttpMethod = 'GET',\n opts: Object = {},\n ): Promise> {\n this._checkDelimiter(delimiter);\n this._checkPrefix(prefix);\n this._checkMaxKeys(maxKeys);\n this._checkMethodHeadnGet(method);\n this._checkOpts(opts);\n this._log('info', `Listing objects in ${prefix}`);\n\n const query = {\n 'list-type': LIST_TYPE,\n 'max-keys': String(maxKeys),\n ...opts,\n } as { [key: string]: any };\n if (prefix.length > 0) {\n query['prefix'] = prefix;\n }\n const headers = {\n [HEADER_CONTENT_TYPE]: JSON_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n const encodedKey = delimiter === '/' ? delimiter : uriEscape(delimiter);\n const { url, headers: signedHeaders } = await this._sign('GET', encodedKey, query, headers, '');\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n const res = await this._sendRequest(urlWithQuery, 'GET', signedHeaders);\n const responseBody = await res.text();\n\n if (method === 'HEAD') {\n const contentLength = res.headers.get(HEADER_CONTENT_LENGTH);\n const lastModified = res.headers.get(HEADER_LAST_MODIFIED);\n const etag = res.headers.get(HEADER_ETAG);\n\n return {\n size: contentLength ? +contentLength : undefined,\n mtime: lastModified ? new Date(lastModified) : undefined,\n ETag: etag || undefined,\n };\n }\n\n const data = _parseXml(responseBody);\n const output = data.listBucketResult || data.error || data;\n return output.contents || output;\n }\n\n /**\n * List multipart uploads in the bucket.\n * @param {string} [delimiter='/'] - The delimiter to use for grouping objects in specific path.\n * @param {string} [prefix=''] - The prefix to filter objects in specific path.\n * @param {string} [method='GET'] - The HTTP method to use (GET or HEAD).\n * @param {Object} [opts={}] - Additional options for the list operation.\n * @returns {Promise} The list of objects or object metadata.\n * @throws {TypeError} If any of the parameters are of incorrect type.\n */\n async listMultiPartUploads(\n delimiter: string = '/',\n prefix: string = '',\n method: HttpMethod = 'GET',\n opts: Object = {},\n ): Promise {\n this._checkDelimiter(delimiter);\n this._checkPrefix(prefix);\n this._checkMethodHeadnGet(method);\n this._checkOpts(opts);\n this._log('info', `Listing multipart uploads in ${prefix}`);\n\n const query = {\n uploads: '',\n ...opts,\n } as Record;\n const headers = {\n [HEADER_CONTENT_TYPE]: JSON_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n const encodedKey = delimiter === '/' ? delimiter : uriEscape(delimiter);\n const { url, headers: signedHeaders } = await this._sign('GET', encodedKey, query, headers, '');\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n const res = await this._sendRequest(urlWithQuery, 'GET', signedHeaders);\n const responseBody = await res.text();\n\n if (method === 'HEAD') {\n return {\n size: +(res.headers.get(HEADER_CONTENT_LENGTH) ?? '0'),\n mtime: new Date(res.headers.get(HEADER_LAST_MODIFIED) ?? ''),\n ETag: res.headers.get(HEADER_ETAG) ?? '',\n };\n }\n\n const data = _parseXml(responseBody);\n const output = data.listMultipartUploadsResult || data.error || data;\n return output.uploads || output;\n }\n\n /**\n * Get an object from the bucket.\n * @param {string} key - The key of the object to get.\n * @param {Object} [opts={}] - Additional options for the get operation.\n * @returns {Promise} The content of the object.\n */\n async get(key: string, opts: Record = {}): Promise {\n this._checkKey(key);\n this._log('info', `Getting object ${key}`);\n\n const headers = {\n [HEADER_CONTENT_TYPE]: JSON_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('GET', encodedKey, opts, headers, '');\n const res = await this._sendRequest(url, 'GET', signedHeaders);\n return res.text();\n }\n\n /**\n * Get a response of an object from the bucket.\n * @param {string} key - The key of the object to get.\n * @param {boolean} [wholeFile=true] - Whether to get the whole file or a part.\n * @param {number} [rangeFrom=0] - The range from to get if not getting the whole file.\n * @param {number} [rangeTo=this.maxRequestSizeInBytes] - The range to to get if not getting the whole file. Note: rangeTo is inclusive.\n * @param {Object} [opts={}] - Additional options for the get operation.\n * @returns {Promise} Response of the object content. Use readableStream() to get the stream from .body.\n */\n async getResponse(\n key: string,\n wholeFile: boolean = true,\n rangeFrom: number = 0,\n rangeTo: number = this.maxRequestSizeInBytes,\n opts: Record = {},\n ): Promise {\n this._checkKey(key);\n const query = opts;\n const headers = {\n [HEADER_CONTENT_TYPE]: JSON_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n ...(wholeFile ? {} : { range: `bytes=${rangeFrom}-${rangeTo - 1}` }),\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('GET', encodedKey, query, headers, '');\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n\n return this._sendRequest(urlWithQuery, 'GET', signedHeaders);\n }\n\n /**\n * Put an object into the bucket.\n * @param {string} key - The key of the object to put. To create a folder, include a trailing slash.\n * @param {Buffer|string} data - The content of the object to put.\n * @returns {Promise} The response from the put operation.\n * @throws {TypeError} If the key is not a non-empty string or data is not a Buffer or string.\n */\n async put(key: string, data: string | Buffer): Promise {\n this._checkKey(key);\n if (!(data instanceof Buffer || typeof data === 'string')) {\n this._log('error', ERROR_DATA_BUFFER_REQUIRED);\n throw new TypeError(ERROR_DATA_BUFFER_REQUIRED);\n }\n // const encodedKey = encodeURIComponent(key);\n this._log('info', `Uploading object ${key}`);\n const contentLength = typeof data === 'string' ? Buffer.byteLength(data) : data.length;\n const headers = {\n [HEADER_CONTENT_LENGTH]: contentLength,\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('PUT', encodedKey, {}, headers, data);\n const res = await this._sendRequest(url, 'PUT', signedHeaders, data);\n return res;\n }\n\n /**\n * Initiate a multipart upload.\n * @param {string} key - The key of the object to upload.\n * @param {string} [fileType='application/octet-stream'] - The MIME type of the file.\n * @returns {Promise} The upload ID for the multipart upload.\n * @throws {TypeError} If the key is not a non-empty string or fileType is not a string.\n * @throws {Error} If the multipart upload initiation fails.\n */\n async getMultipartUploadId(key: string, fileType: string = DEFAULT_STREAM_CONTENT_TYPE): Promise {\n this._checkKey(key);\n if (typeof fileType !== 'string') {\n this._log('error', `${ERROR_PREFIX}fileType must be a string`);\n throw new TypeError(`${ERROR_PREFIX}fileType must be a string`);\n }\n this._log('info', `Initiating multipart upload for object ${key}`);\n const query = { uploads: '' };\n const headers = {\n [HEADER_CONTENT_TYPE]: fileType,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('POST', encodedKey, query, headers, '');\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n\n const res = await this._sendRequest(urlWithQuery, 'POST', signedHeaders);\n const responseBody = await res.text();\n const parsedResponse = _parseXml(responseBody);\n\n if (\n typeof parsedResponse === 'object' &&\n parsedResponse !== null &&\n 'error' in parsedResponse &&\n typeof parsedResponse.error === 'object' &&\n parsedResponse.error !== null &&\n 'message' in parsedResponse.error\n ) {\n const errorMessage = String(parsedResponse.error.message);\n this._log('error', `${ERROR_PREFIX}Failed to abort multipart upload: ${errorMessage}`);\n throw new Error(`${ERROR_PREFIX}Failed to abort multipart upload: ${errorMessage}`);\n }\n\n if (typeof parsedResponse === 'object' && parsedResponse !== null) {\n if (!parsedResponse.initiateMultipartUploadResult || !parsedResponse.initiateMultipartUploadResult.uploadId) {\n this._log('error', `${ERROR_PREFIX}Failed to create multipart upload: no uploadId in response`);\n throw new Error(`${ERROR_PREFIX}Failed to create multipart upload: Missing upload ID in response`);\n }\n\n return parsedResponse.initiateMultipartUploadResult.uploadId;\n } else {\n this._log('error', `${ERROR_PREFIX}Failed to create multipart upload: unexpected response format`);\n throw new Error(`${ERROR_PREFIX}Failed to create multipart upload: Unexpected response format`);\n }\n }\n\n /**\n * Upload a part in a multipart upload.\n * @param {string} key - The key of the object being uploaded.\n * @param {Buffer|string} data - The content of the part.\n * @param {string} uploadId - The upload ID of the multipart upload.\n * @param {number} partNumber - The part number.\n * @param {Object} [opts={}] - Additional options for the upload.\n * @returns {Promise} The ETag and part number of the uploaded part.\n * @throws {TypeError} If any of the parameters are of incorrect type.\n */\n async uploadPart(\n key: string,\n data: Buffer | string,\n uploadId: string,\n partNumber: number,\n opts: Object = {},\n ): Promise {\n this._validateUploadPartParams(key, data, uploadId, partNumber, opts);\n const query = { uploadId, partNumber, ...opts } as { [key: string]: any };\n const headers = {\n [HEADER_CONTENT_LENGTH]: data.length,\n } as { [key: string]: any };\n\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('PUT', encodedKey, query, headers, data);\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n\n const res = await this._sendRequest(urlWithQuery, 'PUT', signedHeaders, data);\n const ETag = res.headers.get('etag') || '';\n return { partNumber, ETag };\n }\n\n _validateUploadPartParams(key: string, data: Buffer | string, uploadId: string, partNumber: number, opts: Object) {\n this._checkKey(key);\n if (!(data instanceof Buffer || typeof data === 'string')) {\n this._log('error', ERROR_DATA_BUFFER_REQUIRED);\n throw new TypeError(ERROR_DATA_BUFFER_REQUIRED);\n }\n if (typeof uploadId !== 'string' || uploadId.trim().length === 0) {\n this._log('error', ERROR_UPLOAD_ID_REQUIRED);\n throw new TypeError(ERROR_UPLOAD_ID_REQUIRED);\n }\n if (!Number.isInteger(partNumber) || partNumber <= 0) {\n this._log('error', `${ERROR_PREFIX}partNumber must be a positive integer`);\n throw new TypeError(`${ERROR_PREFIX}partNumber must be a positive integer`);\n }\n this._checkOpts(opts);\n }\n\n /**\n * Complete a multipart upload.\n * @param {string} key - The key of the object being uploaded.\n * @param {string} uploadId - The upload ID of the multipart upload.\n * @param {Array} parts - An array of objects containing PartNumber and ETag for each part.\n * @returns {Promise} The result of the complete multipart upload operation.\n * @throws {TypeError} If any of the parameters are of incorrect type.\n * @throws {Error} If the complete multipart upload operation fails.\n */\n async completeMultipartUpload(\n key: string,\n uploadId: string,\n parts: Array,\n ): Promise {\n this._checkKey(key);\n if (typeof uploadId !== 'string' || uploadId.trim().length === 0) {\n this._log('error', ERROR_UPLOAD_ID_REQUIRED);\n throw new TypeError(ERROR_UPLOAD_ID_REQUIRED);\n }\n if (!Array.isArray(parts) || parts.length === 0) {\n this._log('error', ERROR_PARTS_REQUIRED);\n throw new TypeError(ERROR_PARTS_REQUIRED);\n }\n if (!parts.every(part => typeof part.partNumber === 'number' && typeof part.ETag === 'string')) {\n this._log('error', ERROR_INVALID_PART);\n throw new TypeError(ERROR_INVALID_PART);\n }\n this._log('info', `Complete multipart upload ${uploadId} for object ${key}`);\n const query = { uploadId };\n const xmlBody = this._buildCompleteMultipartUploadXml(parts);\n const headers = {\n [HEADER_CONTENT_TYPE]: XML_CONTENT_TYPE,\n [HEADER_CONTENT_LENGTH]: Buffer.byteLength(xmlBody).toString(),\n [HEADER_AMZ_CONTENT_SHA256]: await _hash(xmlBody),\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('POST', encodedKey, query, headers, xmlBody);\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n\n const res = await this._sendRequest(urlWithQuery, 'POST', signedHeaders, xmlBody);\n const responseBody = await res.text();\n const parsedResponse = _parseXml(responseBody);\n\n if (\n typeof parsedResponse === 'object' &&\n parsedResponse !== null &&\n 'error' in parsedResponse &&\n typeof parsedResponse.error === 'object' &&\n parsedResponse.error !== null &&\n 'message' in parsedResponse.error\n ) {\n const errorMessage = String(parsedResponse.error.message);\n this._log('error', `${ERROR_PREFIX}Failed to abort multipart upload: ${errorMessage}`);\n throw new Error(`${ERROR_PREFIX}Failed to abort multipart upload: ${errorMessage}`);\n }\n\n return parsedResponse.completeMultipartUploadResult;\n }\n\n /**\n * Aborts a multipart upload.\n * @param {string} key - The key of the object being uploaded.\n * @param {string} uploadId - The ID of the multipart upload to abort.\n * @returns {Promise} - A promise that resolves to the abort response.\n * @throws {Error} If the abort operation fails.\n */\n async abortMultipartUpload(key: string, uploadId: string): Promise {\n // Input validation\n this._checkKey(key);\n if (typeof uploadId !== 'string' || uploadId.trim().length === 0) {\n this._log('error', ERROR_UPLOAD_ID_REQUIRED);\n throw new TypeError(ERROR_UPLOAD_ID_REQUIRED);\n }\n\n this._log('info', `Aborting multipart upload ${uploadId} for object ${key}`);\n\n // Prepare the request\n const query = { uploadId };\n const headers = {\n [HEADER_CONTENT_TYPE]: XML_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n\n try {\n // Sign and send the request\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('DELETE', encodedKey, query, headers, '');\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n\n const res = await this._sendRequest(urlWithQuery, 'DELETE', signedHeaders);\n\n // Check for successful response\n if (res.ok) {\n const responseBody = await res.text();\n const parsedResponse = _parseXml(responseBody);\n\n if (\n typeof parsedResponse === 'object' &&\n parsedResponse !== null &&\n 'error' in parsedResponse &&\n typeof parsedResponse.error === 'object' &&\n parsedResponse.error !== null &&\n 'message' in parsedResponse.error\n ) {\n const errorMessage = String(parsedResponse.error.message);\n this._log('error', `${ERROR_PREFIX}Failed to abort multipart upload: ${errorMessage}`);\n throw new Error(`${ERROR_PREFIX}Failed to abort multipart upload: ${errorMessage}`);\n }\n\n return {\n status: 'Aborted',\n key,\n uploadId,\n response: parsedResponse,\n };\n } else {\n this._log('error', `${ERROR_PREFIX}Abort request failed with status ${res.status}`);\n throw new Error(`${ERROR_PREFIX}Abort request failed with status ${res.status}`);\n }\n } catch (error: unknown) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n this._log('error', `${ERROR_PREFIX}Failed to abort multipart upload for key ${key}: ${errorMessage}`);\n throw new Error(`${ERROR_PREFIX}Failed to abort multipart upload for key ${key}: ${errorMessage}`);\n }\n }\n\n _buildCompleteMultipartUploadXml(parts: Array): string {\n return `\n \n ${parts\n .map(\n part => `\n \n ${part.partNumber}\n ${part.ETag}\n \n `,\n )\n .join('')}\n \n `;\n }\n\n /**\n * Delete an object from the bucket.\n * @param {string} key - The key of the object to delete.\n * @returns {Promise} The response from the delete operation.\n */\n async delete(key: string): Promise {\n this._checkKey(key);\n this._log('info', `Deleting object ${key}`);\n const headers = {\n [HEADER_CONTENT_TYPE]: JSON_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('DELETE', encodedKey, {}, headers, '');\n const res = await this._sendRequest(url, 'DELETE', signedHeaders);\n return res.text();\n }\n\n async _sendRequest(\n url: string,\n method: HttpMethod,\n headers: Record,\n body?: string | Buffer,\n ): Promise {\n this._log('info', `Sending ${method} request to ${url}, headers: ${JSON.stringify(headers)}`);\n const res = await fetch(url, {\n method,\n headers,\n body,\n signal: this.requestAbortTimeout !== undefined ? AbortSignal.timeout(this.requestAbortTimeout) : undefined,\n });\n\n if (!res.ok) {\n await this._handleErrorResponse(res);\n }\n\n return res;\n }\n\n async _handleErrorResponse(res: Response) {\n const errorBody = await res.text();\n const errorCode = res.headers.get('x-amz-error-code') || 'Unknown';\n const errorMessage = res.headers.get('x-amz-error-message') || res.statusText;\n this._log(\n 'error',\n `${ERROR_PREFIX}Request failed with status ${res.status}: ${errorCode} - ${errorMessage},err body: ${errorBody}`,\n );\n throw new Error(\n `${ERROR_PREFIX}Request failed with status ${res.status}: ${errorCode} - ${errorMessage}, err body: ${errorBody}`,\n );\n }\n\n _buildCanonicalQueryString(queryParams: Object): string {\n if (Object.keys(queryParams).length < 1) {\n return '';\n }\n\n return Object.keys(queryParams)\n .sort()\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent((queryParams as Record)[key])}`)\n .join('&');\n }\n async _getSignatureKey(dateStamp: string): Promise {\n const kDate = await _hmac(`AWS4${this.secretAccessKey}`, dateStamp);\n const kRegion = await _hmac(kDate, this.region);\n const kService = await _hmac(kRegion, S3_SERVICE);\n return _hmac(kService, AWS_REQUEST_TYPE);\n }\n}\n\nconst _hash = async (content: string | Buffer): Promise => {\n const hashSum = _createHash('sha256');\n hashSum.update(content);\n return hashSum.digest('hex');\n};\n\nconst _hmac = async (key: string | Buffer, content: string, encoding?: 'hex'): Promise => {\n const hmacSum = _createHmac('sha256', key);\n hmacSum.update(content);\n return hmacSum.digest(encoding);\n};\n\nconst _parseXml = (str: string): string | object | any => {\n const unescapeXml = (value: string): string => {\n return value\n .replace(/"/g, '\"')\n .replace(/'/g, \"'\")\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/&/g, '&');\n };\n\n const json = {};\n const re = /<(\\w)([-\\w]+)(?:\\/|[^>]*>((?:(?!<\\1)[\\s\\S])*)<\\/\\1\\2)>/gm;\n let match;\n\n while ((match = re.exec(str))) {\n const [, prefix, key, value] = match;\n const fullKey = prefix.toLowerCase() + key;\n const parsedValue = value != null ? _parseXml(value) : true;\n\n if (typeof parsedValue === 'string') {\n (json as { [key: string]: any })[fullKey] = unescapeXml(parsedValue);\n } else if (Array.isArray((json as { [key: string]: any })[fullKey])) {\n (json as { [key: string]: any })[fullKey].push(parsedValue);\n } else {\n (json as { [key: string]: any })[fullKey] =\n (json as { [key: string]: any })[fullKey] != null\n ? [(json as { [key: string]: any })[fullKey], parsedValue]\n : expectArray[fullKey]\n ? [parsedValue]\n : parsedValue;\n }\n }\n\n return Object.keys(json).length ? json : unescapeXml(str);\n};\n\nexport { S3 };\nexport default S3;\n", "'use strict';\n\nimport { S3 } from 'ultralight-s3';\nimport avro from 'avro-js'; // eslint-disable-line\nimport {\n\tlowstorage_ERROR_CODES,\n\tlowstorageError,\n\tCollectionNotFoundError,\n\tSchemaValidationError,\n\tDocumentValidationError,\n\tS3OperationError,\n} from './errors.js';\nimport { matchesQuery, generateUUID, inferAvroType } from './helpers.js';\n\nconst MODULE_NAME = 'lowstorage';\nconst DEFAULT_DELIMITER = '/';\nconst PROJECT_DIR_PREFIX = 'lowstorage';\nconst COL_SUFFIX = '.avro';\nconst CHUNG_1MB = 1024 * 1024;\nconst CHUNG_5MB = 5 * CHUNG_1MB;\n\n// code / description\n// init of new collection is automatically creating it in the bucket\n// there is optional (opt-in) switch to create new collections in bucket\n// if the schema is not provided, it will create empty buffer and save it\n// if the schema is provided, it will save it in memory and use it for all ops\n// if the schema is updated, it will save it in memory and use it for all ops\n// exposed functions are:\n// listCollections \u2705\n// collectionExists \u2705\n// createCollection \u2705\n// removeCollection \u2705\n// renameCollection \u2705\n// updateCollectionSchema \u274C\n// collection \u2705\n// s3 \u2705\n\n// Operations over collections are:\n// insert \u2705\n// find \u2705\n// findOne \u2705\n// update \u2705\n// updateOne \u2705\n// delete \u2705\n// count \u2705\n\n// Errors:\n// lowstorageError \u2705\n// CollectionNotFoundError \u2705\n// SchemaValidationError \u2705\n// DocumentValidationError \u2705\n// S3OperationError \u2705\n\nclass lowstorage {\n\tconstructor(\n\t\toptions = {\n\t\t\taccessKeyId: undefined,\n\t\t\tsecretAccessKey: undefined,\n\t\t\tendpoint: undefined,\n\t\t\tbucketName: undefined,\n\t\t\tregion: 'auto',\n\t\t\tlogger: null,\n\t\t\tdirPrefix: PROJECT_DIR_PREFIX,\n\t\t},\n\t) {\n\t\tthis._checkArgs(options);\n\t\tthis._schemas = new Map();\n\t\tthis._s3 = new S3(options);\n\t\tthis._dirPrefix = options.dirPrefix || PROJECT_DIR_PREFIX;\n\t\tthis._avro = avro;\n\t}\n\n\t_checkArgs = (args) => {\n\t\tconst requiredFields = ['accessKeyId', 'secretAccessKey', 'endpoint', 'bucketName'];\n\t\tfor (const field of requiredFields) {\n\t\t\tif (!args[field]) {\n\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: ${field} is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n\t\t\t}\n\t\t}\n\t};\n\n\t_hasColName = (colName) => {\n\t\tif (colName.trim() === '' || colName === null || typeof colName === 'undefined') {\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Collection name is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n\t\t}\n\t};\n\n\tasync listCollections() {\n\t\ttry {\n\t\t\tconst listed = await this._s3.list(DEFAULT_DELIMITER, this._dirPrefix);\n\t\t\tif (typeof listed === 'object' && listed !== null && listed.keyCount === '0') return [];\n\t\t\t// remove the delimiter from the key\n\t\t\treturn listed.map((entry) => entry.key.slice(this._dirPrefix.length + 1, -COL_SUFFIX.length));\n\t\t} catch (error) {\n\t\t\tthrow new S3OperationError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t}\n\t}\n\n\tasync collectionExists(colName) {\n\t\ttry {\n\t\t\tthis._hasColName(colName);\n\t\t\tconst exists = await this._s3.fileExists(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`);\n\t\t\treturn exists;\n\t\t} catch (error) {\n\t\t\tif (error.message.includes('Not Found')) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND);\n\t\t}\n\t}\n\n\tasync createCollection(colName, schema, data = []) {\n\t\ttry {\n\t\t\tthis._hasColName(colName);\n\t\t\tconst exists = await this.collectionExists(colName);\n\t\t\tif (!exists) {\n\t\t\t\tawait this._s3.put(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`, data.length > 0 ? data : '');\n\t\t\t\treturn this.collection(colName, schema);\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Collection ${colName} already exists`, lowstorage_ERROR_CODES.COLLECTION_EXISTS);\n\t\t} catch (error) {\n\t\t\tif (error instanceof lowstorageError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.CREATE_COLLECTION_ERROR);\n\t\t}\n\t}\n\n\tasync removeCollection(colName) {\n\t\ttry {\n\t\t\tthis._hasColName(colName);\n\t\t\tconst KEY = `${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`;\n\t\t\tconst exists = await this.collectionExists(colName);\n\t\t\tif (exists) {\n\t\t\t\tawait this._s3.delete(KEY);\n\t\t\t\tconst exists2 = await this.collectionExists(colName);\n\t\t\t\tif (typeof exists2 === 'boolean') {\n\t\t\t\t\treturn !exists2;\n\t\t\t\t}\n\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to delete collection ${colName}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Collection ${colName} does not exist`, lowstorage_ERROR_CODES.REMOVE_COLLECTION_ERROR);\n\t\t} catch (error) {\n\t\t\tif (error instanceof S3OperationError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(\n\t\t\t\t`${MODULE_NAME}: Failed to remove collection: ${error.message}`,\n\t\t\t\tlowstorage_ERROR_CODES.REMOVE_COLLECTION_ERROR,\n\t\t\t);\n\t\t}\n\t}\n\n\tasync renameCollection(oldColName, newColName) {\n\t\ttry {\n\t\t\tthis._hasColName(oldColName);\n\t\t\tthis._hasColName(newColName);\n\t\t\tconst exists = await this.collectionExists(oldColName);\n\t\t\tif (!exists) {\n\t\t\t\tthrow new CollectionNotFoundError(\n\t\t\t\t\t`${MODULE_NAME}: Collection ${oldColName} does not exist`,\n\t\t\t\t\tlowstorage_ERROR_CODES.COLLECTION_NOT_FOUND,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst oldCol = await this.collection(oldColName);\n\t\t\tconst oldColData = await oldCol._loadDataBuffer();\n\t\t\tconst success = await this.removeCollection(oldColName);\n\t\t\tif (!success) {\n\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Failed to rename collection`, lowstorage_ERROR_CODES.RENAME_COLLECTION_ERROR);\n\t\t\t}\n\t\t\treturn await this.createCollection(newColName, oldCol._avroType, oldColData);\n\t\t} catch (error) {\n\t\t\tif (error instanceof lowstorageError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(\n\t\t\t\t`${MODULE_NAME}: Rename collection failed: ${error.message}`,\n\t\t\t\tlowstorage_ERROR_CODES.RENAME_COLLECTION_ERROR,\n\t\t\t);\n\t\t}\n\t}\n\n\t// TODO: update collection schema\n\t// async updateCollectionSchema(colName, newSchema) {\n\t// \ttry {\n\t// \t\tthis._hasColName(colName);\n\t// \t\t// Check if collection exists\n\t// \t\tconst exists = await this.collectionExists(colName);\n\t// \t\tif (!exists) {\n\t// \t\t\tthrow new CollectionNotFoundError(`${MODULE_NAME}: Collection ${colName} does not exist`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND);\n\t// \t\t}\n\t// \t\tif (typeof schema === 'undefined' || schema === null) {\n\t// \t\t\tthrow new lowstorageError(`${MODULE_NAME}: Schema is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n\t// \t\t}\n\t// \t\tconst col = this.collection(colName);\n\t// \t\tconst colData = await col._loadDataBuffer();\n\t// \t\tconst avroType = this._avro.parse(schema);\n\t// \t\tthis._schemas.set(colName, avroType);\n\n\t// \t} catch (error) {\n\t// \t\tif (error instanceof S3OperationError) {\n\t// \t\t\tthrow error;\n\t// \t\t}\n\t// \t\tthrow new lowstorageError(\n\t// \t\t\t`${MODULE_NAME}: Failed to update collection schema: ${error.message}`,\n\t// \t\t\tlowstorage_ERROR_CODES.UPDATE_COLLECTION_SCHEMA_ERROR,\n\t// \t\t);\n\t// \t}\n\t// }\n\n\tasync collection(colName, schema, autoCreate = true) {\n\t\ttry {\n\t\t\tthis._hasColName(colName);\n\t\t\tconst colPath = `${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`;\n\t\t\tlet avroType;\n\n\t\t\tconst exists = await this._s3.fileExists(colPath);\n\n\t\t\tif (!exists && !autoCreate) {\n\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Collection ${colName} does not exist`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND);\n\t\t\t}\n\n\t\t\tif (schema) {\n\t\t\t\tavroType = this._avro.parse(schema);\n\t\t\t\tthis._schemas.set(colName, avroType);\n\t\t\t\tif (!exists && autoCreate) {\n\t\t\t\t\tawait this._s3.put(colPath, '');\n\t\t\t\t}\n\t\t\t} else if (this._schemas.has(colName)) {\n\t\t\t\tavroType = this._schemas.get(colName);\n\t\t\t} else if (exists) {\n\t\t\t\tconst schemaContent = await this._s3.get(colPath);\n\t\t\t\tavroType = this._avro.parse(schemaContent);\n\t\t\t\tthis._schemas.set(colName, avroType);\n\t\t\t} else if (autoCreate) {\n\t\t\t\tawait this._s3.put(colPath, '');\n\t\t\t}\n\n\t\t\treturn new Collection(colName, this._s3, avroType, this._dirPrefix);\n\t\t} catch (error) {\n\t\t\t// check if error message contains \"unknown type\" and if so, throw a schema validation error\n\t\t\tif (error.message.includes('unknown type')) {\n\t\t\t\tthrow new SchemaValidationError(\n\t\t\t\t\t`${MODULE_NAME}: Schema input is invalid: ${error.message}`,\n\t\t\t\t\tlowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND);\n\t\t}\n\t}\n\n\ts3 = () => {\n\t\treturn this._s3;\n\t};\n}\n\nclass Collection {\n\tconstructor(colName, s3, avroType = undefined, dirPrefix = PROJECT_DIR_PREFIX) {\n\t\tthis._colName = colName;\n\t\tthis._s3 = s3;\n\t\tthis._avro = avro;\n\t\tthis._avroType = avroType;\n\t\tthis._dirPrefix = dirPrefix;\n\t}\n\n\tasync insert(doc, schema = undefined) {\n\t\ttry {\n\t\t\tif (doc === undefined || doc === null) {\n\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Document is required for insert`, lowstorage_ERROR_CODES.INSERT_ERROR);\n\t\t\t}\n\t\t\tif (typeof doc !== 'object' && !Array.isArray(doc)) {\n\t\t\t\tthrow new DocumentValidationError(\n\t\t\t\t\t`${MODULE_NAME}: Document must be an object or an array`,\n\t\t\t\t\tlowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst items = !Array.isArray(doc) ? [doc] : doc;\n\n\t\t\tconst avroType = !!schema ? this._avro.parse(schema) : this._avroType || this._avro.parse(inferAvroType(doc));\n\n\t\t\tif (!avroType) {\n\t\t\t\tthrow new SchemaValidationError(\n\t\t\t\t\t`${MODULE_NAME}: Schema is required - Pass a schema to the insert method`,\n\t\t\t\t\tlowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthis._avroType = avroType;\n\t\t\tconst wrapperType = this._avro.parse({ type: 'array', items: this._avroType });\n\t\t\tconst bufferData = await this._loadDataBuffer();\n\t\t\tconst data = bufferData.length > 0 ? wrapperType.fromBuffer(bufferData) : [];\n\t\t\tfor (let item of items) {\n\t\t\t\tif (typeof item !== 'object' || item === null) {\n\t\t\t\t\tthrow new DocumentValidationError(\n\t\t\t\t\t\t`${MODULE_NAME}: Invalid input: input must be an object or an array of objects`,\n\t\t\t\t\t\tlowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\titem._id = item._id || (await generateUUID());\n\t\t\t\tconst valid = this._avroType.isValid(item);\n\t\t\t\tif (!valid) {\n\t\t\t\t\tthrow new DocumentValidationError(`${MODULE_NAME}: Invalid document or schema`, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR);\n\t\t\t\t}\n\t\t\t\tdata.push(item);\n\t\t\t}\n\t\t\tconst success = await this._saveDataBuffer(wrapperType.toBuffer(data));\n\t\t\tif (!success) {\n\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to insert document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t}\n\t\t\treturn items;\n\t\t} catch (error) {\n\t\t\tif (error.message.includes('unknown type')) {\n\t\t\t\tthrow new SchemaValidationError(\n\t\t\t\t\t`${MODULE_NAME}: Schema input is invalid: ${error.message}`,\n\t\t\t\t\tlowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (error instanceof lowstorageError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME} Insert operation failed: ${error.message}`, lowstorage_ERROR_CODES.INSERT_ERROR);\n\t\t}\n\t}\n\n\tasync _loadDataBuffer() {\n\t\ttry {\n\t\t\tconst KEY = `${this._dirPrefix}${DEFAULT_DELIMITER}${this._colName}${COL_SUFFIX}`;\n\t\t\tconst CHUNK_SIZE = this._s3.getMaxRequestSizeInBytes() || CHUNG_5MB;\n\t\t\tlet firstData = await this._s3.get(KEY);\n\t\t\tif (firstData.length < CHUNK_SIZE) {\n\t\t\t\treturn Buffer.from(firstData, 'utf8');\n\t\t\t}\n\t\t\tlet offset = CHUNK_SIZE;\n\t\t\tlet bufferArr = [Buffer.from(firstData, 'utf8')];\n\t\t\tlet repeat = true;\n\t\t\twhile (repeat) {\n\t\t\t\tconst nextDataResponse = await this._s3.getResponse(KEY, false, offset, offset + CHUNK_SIZE);\n\t\t\t\tconst nextDataBody = await nextDataResponse.text();\n\t\t\t\tbufferArr.push(Buffer.from(nextDataBody, 'utf8'));\n\t\t\t\toffset += CHUNK_SIZE;\n\t\t\t\tconst contentLength = nextDataResponse.headers.get('content-length') || nextDataBody.length;\n\t\t\t\tif (contentLength < CHUNK_SIZE) {\n\t\t\t\t\trepeat = false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn Buffer.concat(bufferArr);\n\t\t} catch (error) {\n\t\t\tif (error.toString().indexOf('status 404: Unknown - Not Found') > -1) {\n\t\t\t\treturn Buffer.from('');\n\t\t\t}\n\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to load data buffer: ${error.message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t}\n\t}\n\n\tasync _saveDataBuffer(data) {\n\t\ttry {\n\t\t\tconst KEY = `${this._dirPrefix}${DEFAULT_DELIMITER}${this._colName}${COL_SUFFIX}`;\n\t\t\tconst resp = await this._s3.put(KEY, data);\n\t\t\tif (resp.status !== 200) {\n\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to save data`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t}\n\t\t\treturn true;\n\t\t} catch (error) {\n\t\t\tif (error instanceof S3OperationError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.SAVE_DATA_ERROR);\n\t\t}\n\t}\n\n\tasync find(query = {}, options = {}) {\n\t\ttry {\n\t\t\tif (query === undefined || query === null) {\n\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Query is required for update`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n\t\t\t}\n\t\t\tconst bufferData = await this._loadDataBuffer(); // load data from s3\n\t\t\tif (bufferData.length === 0) {\n\t\t\t\treturn [];\n\t\t\t}\n\t\t\tconst wrapperType = this._avro.parse({ type: 'array', items: this._avroType });\n\t\t\tconst data = bufferData.length > 0 ? wrapperType.fromBuffer(bufferData) : [];\n\t\t\tconst start = parseInt(options.skip, 10) || 0;\n\t\t\tconst end = parseInt(options.limit, 10) ? start + parseInt(options.limit, 10) : undefined;\n\t\t\tconst filteredData = data.filter((doc) => matchesQuery(doc, query)).slice(start, end);\n\t\t\treturn filteredData;\n\t\t} catch (error) {\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Find operation failed: ${error.message}`, lowstorage_ERROR_CODES.FIND_ERROR);\n\t\t}\n\t}\n\n\tasync findOne(query = {}) {\n\t\ttry {\n\t\t\tif (query === undefined || query === null) {\n\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Query is required for update`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n\t\t\t}\n\t\t\tconst result = await this.find(query);\n\t\t\treturn result[0] || [];\n\t\t} catch (error) {\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: FindOne operation failed: ${error.message}`, lowstorage_ERROR_CODES.FIND_ONE_ERROR);\n\t\t}\n\t}\n\n\tasync update(query = {}, update = {}) {\n\t\ttry {\n\t\t\tif (query === undefined || query === null || update === undefined || update === null) {\n\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Query is required for update`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n\t\t\t}\n\t\t\tif (!this._avroType) {\n\t\t\t\tthrow new SchemaValidationError(\n\t\t\t\t\t`${MODULE_NAME}: Schema is not defined for this collection`,\n\t\t\t\t\tlowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst bufferData = await this._loadDataBuffer(); // load data from s3\n\t\t\tif (bufferData.length === 0) return 0;\n\t\t\tconst wrapperType = this._avro.parse({ type: 'array', items: this._avroType });\n\t\t\tconst data = bufferData.length > 0 ? wrapperType.fromBuffer(bufferData) : [];\n\t\t\tlet updatedCount = 0;\n\n\t\t\tfor (let i = 0; i < data.length; i++) {\n\t\t\t\tif (matchesQuery(data[i], query)) {\n\t\t\t\t\tconst updatedDoc = { ...data[i], ...update };\n\t\t\t\t\tconst valid = this._avroType.isValid(updatedDoc);\n\t\t\t\t\tif (!valid) {\n\t\t\t\t\t\tthrow new DocumentValidationError(\n\t\t\t\t\t\t\t`${MODULE_NAME}: Invalid document or schema`,\n\t\t\t\t\t\t\tlowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tdata[i] = updatedDoc;\n\t\t\t\t\tupdatedCount++;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (updatedCount > 0) {\n\t\t\t\tconst success = await this._saveDataBuffer(wrapperType.toBuffer(data));\n\t\t\t\tif (!success) {\n\t\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn updatedCount;\n\t\t} catch (error) {\n\t\t\tif (error instanceof S3OperationError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Update operation failed: ${error.message}`, lowstorage_ERROR_CODES.UPDATE_ERROR);\n\t\t}\n\t}\n\n\tasync updateOne(query = {}, update = {}) {\n\t\ttry {\n\t\t\tif (query === undefined || query === null || update === undefined || update === null) {\n\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Query is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n\t\t\t}\n\t\t\tif (!this._avroType) {\n\t\t\t\tthrow new SchemaValidationError(\n\t\t\t\t\t`${MODULE_NAME}: Schema is not defined for this collection`,\n\t\t\t\t\tlowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst bufferData = await this._loadDataBuffer(); // load data from s3\n\t\t\tif (bufferData.length === 0) return 0;\n\t\t\tconst wrapperType = this._avro.parse({ type: 'array', items: this._avroType });\n\t\t\tconst data = bufferData.length > 0 ? wrapperType.fromBuffer(bufferData) : [];\n\t\t\tconst docIndex = data.findIndex((doc) => matchesQuery(doc, query));\n\n\t\t\tif (docIndex !== -1) {\n\t\t\t\tconst updatedDoc = { ...data[docIndex], ...update };\n\t\t\t\tconst valid = this._avroType.isValid(updatedDoc);\n\t\t\t\tif (!valid) {\n\t\t\t\t\tthrow new DocumentValidationError(`${MODULE_NAME}: Invalid document or schema`, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR);\n\t\t\t\t}\n\t\t\t\tdata[docIndex] = updatedDoc;\n\t\t\t\tconst success = await this._saveDataBuffer(wrapperType.toBuffer(data));\n\t\t\t\tif (!success) {\n\t\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t\t}\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t\treturn 0;\n\t\t} catch (error) {\n\t\t\tif (error instanceof lowstorageError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: UpdateOne operation failed: ${error.message}`, lowstorage_ERROR_CODES.UPDATE_ONE_ERROR);\n\t\t}\n\t}\n\n\tasync delete(query = {}) {\n\t\ttry {\n\t\t\tif (query === undefined || query === null) {\n\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Query is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n\t\t\t}\n\t\t\tconst bufferData = await this._loadDataBuffer(); // load data from s3\n\t\t\tif (bufferData.length === 0) return 0;\n\t\t\tconst wrapperType = this._avro.parse({ type: 'array', items: this._avroType });\n\t\t\tconst data = bufferData.length > 0 ? wrapperType.fromBuffer(bufferData) : [];\n\t\t\tconst initialLength = data.length;\n\t\t\tconst newData = data.filter((doc) => !matchesQuery(doc, query));\n\t\t\tconst success = await this._saveDataBuffer(wrapperType.toBuffer(newData));\n\t\t\tif (!success) {\n\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to delete document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t}\n\t\t\treturn initialLength - newData.length;\n\t\t} catch (error) {\n\t\t\tif (error instanceof S3OperationError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Delete operation failed: ${error.message}`, lowstorage_ERROR_CODES.DELETE_ERROR);\n\t\t}\n\t}\n\n\tasync deleteAll() {\n\t\ttry {\n\t\t\tconst bufferData = await this._loadDataBuffer(); // load data from s3\n\t\t\tif (bufferData.length === 0) return 0;\n\t\t\tconst wrapperType = this._avro.parse({ type: 'array', items: this._avroType });\n\t\t\tconst data = bufferData.length > 0 ? wrapperType.fromBuffer(bufferData) : [];\n\t\t\tconst initialLength = data.length;\n\t\t\tconst newData = data.filter((doc) => !matchesQuery(doc, {}));\n\t\t\tconst success = await this._saveDataBuffer(wrapperType.toBuffer(newData));\n\t\t\tif (!success) {\n\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to delete document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t}\n\t\t\treturn initialLength - newData.length;\n\t\t} catch (error) {\n\t\t\tif (error instanceof S3OperationError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Delete operation failed: ${error.message}`, lowstorage_ERROR_CODES.DELETE_ERROR);\n\t\t}\n\t}\n\n\tasync count(query = {}) {\n\t\ttry {\n\t\t\tconst data = await this.find(query);\n\t\t\treturn data.length;\n\t\t} catch (error) {\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Count operation failed: ${error.message}`, lowstorage_ERROR_CODES.COUNT_ERROR);\n\t\t}\n\t}\n}\n\n// export default lowstorage;\nexport { lowstorage, lowstorageError, lowstorage_ERROR_CODES };\n", "'use strict';\n\nconst lowstorage_ERROR_CODES = {\n\tMISSING_ARGUMENT: 'MISSING_ARGUMENT',\n\tCOLLECTION_EXISTS: 'COLLECTION_EXISTS',\n\tCREATE_COLLECTION_ERROR: 'CREATE_COLLECTION_ERROR',\n\tRENAME_COLLECTION_ERROR: 'RENAME_COLLECTION_ERROR',\n\tREMOVE_COLLECTION_ERROR: 'REMOVE_COLLECTION_ERROR',\n\tUPDATE_COLLECTION_SCHEMA_ERROR: 'UPDATE_COLLECTION_SCHEMA_ERROR',\n\tCOLLECTION_NOT_FOUND: 'COLLECTION_NOT_FOUND',\n\tSCHEMA_VALIDATION_ERROR: 'SCHEMA_VALIDATION_ERROR',\n\tDOCUMENT_VALIDATION_ERROR: 'DOCUMENT_VALIDATION_ERROR',\n\tS3_OPERATION_ERROR: 'S3_OPERATION_ERROR',\n\tFIND_ERROR: 'FIND_ERROR',\n\tFIND_ONE_ERROR: 'FIND_ONE_ERROR',\n\tSAVE_DATA_ERROR: 'SAVE_DATA_ERROR',\n\tINSERT_ERROR: 'INSERT_ERROR',\n\tUPDATE_ERROR: 'UPDATE_ERROR',\n\tUPDATE_ONE_ERROR: 'UPDATE_ONE_ERROR',\n\tDELETE_ERROR: 'DELETE_ERROR',\n\tCOUNT_ERROR: 'COUNT_ERROR',\n\tUNKNOWN_ERROR: 'UNKNOWN_ERROR',\n};\nclass lowstorageError extends Error {\n\tconstructor(message, code = lowstorage_ERROR_CODES.UNKNOWN_ERROR) {\n\t\tsuper(`lowstorageError: ${message} :: code: ${code}`);\n\t\tthis.name = this.constructor.name;\n\t\tthis.code = code;\n\t\tError.captureStackTrace(this, this.constructor);\n\t}\n}\n\nclass CollectionNotFoundError extends lowstorageError {\n\tconstructor(collectionName) {\n\t\tsuper(`Collection ${collectionName} not found`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND);\n\t}\n}\n\nclass SchemaValidationError extends lowstorageError {\n\tconstructor(message) {\n\t\tsuper(message, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR);\n\t}\n}\n\nclass DocumentValidationError extends lowstorageError {\n\tconstructor(message) {\n\t\tsuper(message, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR);\n\t}\n}\n\nclass S3OperationError extends lowstorageError {\n\tconstructor(message, operation) {\n\t\tsuper(`S3 ${operation} operation failed: ${message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t}\n}\n\nexport {\n\tlowstorage_ERROR_CODES,\n\tlowstorageError,\n\tCollectionNotFoundError,\n\tSchemaValidationError,\n\tDocumentValidationError,\n\tS3OperationError,\n};\n", "'use strict';\n\nimport { randomUUID } from 'node:crypto';\n\nconst matchesQuery = (document, query) => {\n\treturn Object.keys(query).every((key) => document[key] === query[key]);\n};\n\nconst generateUUID = async () => {\n\tif (typeof randomUUID !== 'undefined' && typeof randomUUID === 'function') {\n\t\treturn randomUUID();\n\t}\n\tif (typeof crypto !== 'undefined' && typeof crypto === 'object' && typeof crypto.randomUUID === 'function') {\n\t\treturn crypto.randomUUID();\n\t}\n\treturn 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n\t\tvar r = (Math.random() * 16) | 0,\n\t\t\tv = c === 'x' ? r : (r & 0x3) | 0x8;\n\t\treturn v.toString(16);\n\t});\n};\n\nconst _getAvroType = (value, name = 'SubAutoGenerated') => {\n\tswitch (typeof value) {\n\t\tcase 'string':\n\t\t\tif (_isUUID(value)) {\n\t\t\t\treturn {\n\t\t\t\t\ttype: 'string',\n\t\t\t\t\tname: '_id',\n\t\t\t\t\tsize: 16,\n\t\t\t\t\tlogicalType: 'UUID',\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn 'string';\n\t\tcase 'number':\n\t\t\treturn Number.isInteger(value) ? 'int' : 'float';\n\t\tcase 'boolean':\n\t\t\treturn 'boolean';\n\t\tcase 'object':\n\t\t\tif (value === null) return 'null';\n\t\t\tif (Array.isArray(value)) return { type: 'array', items: _getAvroType(value[0]) };\n\t\t\treturn inferAvroType(value, name);\n\t\tdefault:\n\t\t\treturn 'string'; // Default to string for unknown types\n\t}\n};\n\nconst inferAvroType = (data, typeName = 'AutoGenerated') => {\n\tif (Array.isArray(data)) {\n\t\tdata = data[0];\n\t}\n\tconst fields = Object.entries(data).map(([name, value]) => {\n\t\treturn { name, type: _getAvroType(value, `${typeName}.${name}`) };\n\t});\n\treturn {\n\t\ttype: 'record',\n\t\tname: typeName,\n\t\tfields: fields,\n\t};\n};\n\nconst _isUUID = (str) => {\n\tconst uuidV4Regex = /^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i;\n\treturn uuidV4Regex.test(str);\n};\n\nexport { matchesQuery, generateUUID, inferAvroType };\n"], + "mappings": "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", "names": ["_createHmac", "_createHash", "AWS_ALGORITHM", "AWS_REQUEST_TYPE", "S3_SERVICE", "LIST_TYPE", "UNSIGNED_PAYLOAD", "DEFAULT_STREAM_CONTENT_TYPE", "XML_CONTENT_TYPE", "JSON_CONTENT_TYPE", "SENSITIVE_KEYS_REDACTED", "MIN_MAX_REQUEST_SIZE_IN_BYTES", "HEADER_AMZ_CONTENT_SHA256", "HEADER_AMZ_DATE", "HEADER_HOST", "HEADER_AUTHORIZATION", "HEADER_CONTENT_TYPE", "HEADER_CONTENT_LENGTH", "HEADER_ETAG", "HEADER_LAST_MODIFIED", "ERROR_PREFIX", "ERROR_ACCESS_KEY_REQUIRED", "ERROR_SECRET_KEY_REQUIRED", "ERROR_ENDPOINT_REQUIRED", "ERROR_BUCKET_NAME_REQUIRED", "ERROR_KEY_REQUIRED", "ERROR_UPLOAD_ID_REQUIRED", "ERROR_PARTS_REQUIRED", "ERROR_INVALID_PART", "ERROR_DATA_BUFFER_REQUIRED", "ERROR_PREFIX_TYPE", "ERROR_MAX_KEYS_TYPE", "ERROR_DELIMITER_REQUIRED", "expectArray", "encodeAsHex", "c", "uriEscape", "uriStr", "uriResourceEscape", "string", "S3", "accessKeyId", "secretAccessKey", "endpoint", "bucketName", "region", "maxRequestSizeInBytes", "requestAbortTimeout", "logger", "props", "method", "key", "delimiter", "prefix", "maxKeys", "opts", "level", "message", "additionalData", "sanitize", "obj", "acc", "sanitizedData", "logEntry", "headers", "encodedKey", "url", "signedHeaders", "contentLength", "res", "error", "errorMessage", "keyPath", "query", "body", "datetime", "_hash", "canonicalHeaders", "canonicalRequest", "stringToSign", "signature", "authorizationHeader", "value", "credentialScope", "signingKey", "_hmac", "urlWithQuery", "responseBody", "lastModified", "etag", "data", "_parseXml", "output", "o", "i", "a", "_a", "_b", "_c", "wholeFile", "rangeFrom", "rangeTo", "fileType", "parsedResponse", "uploadId", "partNumber", "ETag", "parts", "part", "xmlBody", "errorBody", "errorCode", "queryParams", "dateStamp", "kDate", "kRegion", "kService", "content", "hashSum", "encoding", "hmacSum", "str", "unescapeXml", "json", "re", "match", "fullKey", "parsedValue", "avro", "lowstorage_ERROR_CODES", "lowstorageError", "message", "code", "CollectionNotFoundError", "collectionName", "SchemaValidationError", "DocumentValidationError", "S3OperationError", "operation", "randomUUID", "matchesQuery", "document", "query", "key", "generateUUID", "c", "r", "v", "_getAvroType", "value", "name", "_isUUID", "inferAvroType", "data", "typeName", "fields", "str", "MODULE_NAME", "DEFAULT_DELIMITER", "PROJECT_DIR_PREFIX", "COL_SUFFIX", "CHUNG_1MB", "CHUNG_5MB", "lowstorage", "options", "O", "avro", "args", "requiredFields", "field", "lowstorageError", "lowstorage_ERROR_CODES", "colName", "listed", "entry", "error", "S3OperationError", "schema", "data", "KEY", "exists2", "oldColName", "newColName", "CollectionNotFoundError", "oldCol", "oldColData", "autoCreate", "colPath", "avroType", "exists", "schemaContent", "Collection", "SchemaValidationError", "s3", "dirPrefix", "doc", "DocumentValidationError", "items", "inferAvroType", "wrapperType", "bufferData", "item", "generateUUID", "CHUNK_SIZE", "firstData", "offset", "bufferArr", "repeat", "nextDataResponse", "nextDataBody", "query", "start", "end", "matchesQuery", "update", "updatedCount", "i", "updatedDoc", "docIndex", "initialLength", "newData"] } diff --git a/src/lowstorage.js b/src/lowstorage.js index de45d10..43725e9 100644 --- a/src/lowstorage.js +++ b/src/lowstorage.js @@ -51,7 +51,50 @@ const CHUNG_5MB = 5 * CHUNG_1MB; // DocumentValidationError ✅ // S3OperationError ✅ +/** + * lowstorage class for managing collections and performing operations on top of S3-compatible storages. + * @class + * @example + * const storage = new lowstorage({ + * accessKeyId: 'YOUR_ACCESS_KEY', + * secretAccessKey: 'YOUR_SECRET_KEY', + * endpoint: 'YOUR_ENDPOINT', + * bucketName: 'YOUR_BUCKET_NAME', + * region: 'YOUR_REGION', + * }); + * + * // Create a collection + * const userCol = await storage.collection('users'); + * + * // Insert a document + * await userCol.insert({ + * name: 'Kevin', + * gender: 'whatever', + * posts: [], + * }); + * + * // Show all users + * const allUsers = await userCol.find({}); + * + * // Find users with pagination (e.g., page 2, 10 users per page) + * const secondPageUsers = await userCol.find({}, { skip: 10, limit: 10 }); + * + * // Find user by ID and update name + * await userCol.update({ _id: id }, { name: 'Carlos' }); + */ class lowstorage { + /** + * Create a new lowstorage instance. + * @param {Object} options - Configuration options for lowstorage. + * @param {string} options.accessKeyId - S3 access key ID. + * @param {string} options.secretAccessKey - S3 secret access key. + * @param {string} options.endpoint - S3 endpoint URL. + * @param {string} options.bucketName - S3 bucket name. + * @param {string} [options.region='auto'] - S3 region. + * @param {Object} [options.logger=null] - Logger object. + * @param {string} [options.dirPrefix=PROJECT_DIR_PREFIX] - Directory prefix for collections. + * @returns {lowstorage} A new lowstorage instance. + */ constructor( options = { accessKeyId: undefined, @@ -85,6 +128,11 @@ class lowstorage { } }; + /** + * List all collections. + * @returns {Promise} An array of collection names. + * @throws {S3OperationError} If there's an error during S3 operation. + */ async listCollections() { try { const listed = await this._s3.list(DEFAULT_DELIMITER, this._dirPrefix); @@ -96,6 +144,12 @@ class lowstorage { } } + /** + * Check if a collection exists. + * @param {string} colName - The name of the collection. + * @returns {Promise} True if the collection exists, false otherwise. + * @throws {lowstorageError} If there's an error. + */ async collectionExists(colName) { try { this._hasColName(colName); @@ -109,6 +163,14 @@ class lowstorage { } } + /** + * Create a new collection. + * @param {string} colName - The name of the collection. + * @param {Object} [schema] - The schema for the collection. + * @param {Array} [data=[]] - The initial data for the collection. + * @returns {Promise} A Promise that resolves to a Collection object. + * @throws {lowstorageError} If there's an error. + */ async createCollection(colName, schema, data = []) { try { this._hasColName(colName); @@ -126,6 +188,12 @@ class lowstorage { } } + /** + * Remove a collection. + * @param {string} colName - The name of the collection. + * @returns {Promise} A Promise that resolves to true if the collection is removed, false otherwise. + * @throws {lowstorageError} If there's an error. + */ async removeCollection(colName) { try { this._hasColName(colName); @@ -151,6 +219,13 @@ class lowstorage { } } + /** + * Rename a collection. + * @param {string} oldColName - The current name of the collection. + * @param {string} newColName - The new name of the collection. + * @returns {Promise} A Promise that resolves to a Collection object. + * @throws {lowstorageError} If there's an error. + */ async renameCollection(oldColName, newColName) { try { this._hasColName(oldColName); @@ -208,6 +283,14 @@ class lowstorage { // } // } + /** + * Get or create a collection. + * @param {string} colName - The name of the collection. + * @param {Object} [schema] - The schema for the collection. + * @param {boolean} [autoCreate=true] - Whether to automatically create the collection if it doesn't exist. + * @returns {Promise} A Promise that resolves to a Collection object. + * @throws {lowstorageError} If there's an error. + */ async collection(colName, schema, autoCreate = true) { try { this._hasColName(colName); @@ -250,12 +333,55 @@ class lowstorage { } } + /** + * Get the S3 instance associated with the lowstorage instance. + * @returns {S3} The S3 instance. Use this to perform S3 operations. Check for ultralight-s3 for more details. + */ s3 = () => { return this._s3; }; } +/** + * Collection class for managing documents in a collection. + * @class + * @example + * const storage = new lowstorage({ + * accessKeyId: 'YOUR_ACCESS_KEY', + * secretAccessKey: 'YOUR_SECRET_KEY', + * endpoint: 'YOUR_ENDPOINT', + * bucketName: 'YOUR_BUCKET_NAME', + * region: 'YOUR_REGION', + * }); + * + * // Create a collection + * const userCol = await storage.collection('users'); + * + * // Insert a document + * await userCol.insert({ + * name: 'Kevin', + * gender: 'whatever', + * posts: [], + * }); + * + * // Show all users + * const allUsers = await userCol.find({}); + * + * // Find users with pagination (e.g., page 2, 10 users per page) + * const secondPageUsers = await userCol.find({}, { skip: 10, limit: 10 }); + * + * // Find user by ID and update name + * await userCol.update({ _id: id }, { name: 'Carlos' }); + */ class Collection { + /** + * Create a new Collection instance. + * @param {string} colName - The name of the collection. + * @param {S3} s3 - The S3 instance. + * @param {Object} [avroType=undefined] - The Avro type for the collection. + * @param {string} [dirPrefix=PROJECT_DIR_PREFIX] - The directory prefix for the collection. + * @returns {Collection} A new Collection instance. + */ constructor(colName, s3, avroType = undefined, dirPrefix = PROJECT_DIR_PREFIX) { this._colName = colName; this._s3 = s3; @@ -264,6 +390,13 @@ class Collection { this._dirPrefix = dirPrefix; } + /** + * Insert a document into the collection. + * @param {Object|Array} doc - The document to insert. + * @param {Object} [schema=undefined] - The schema for the document. + * @returns {Promise} A Promise that resolves to the array of inserted document(s). + * @throws {lowstorageError} If there's an error. + */ async insert(doc, schema = undefined) { try { if (doc === undefined || doc === null) { @@ -369,6 +502,15 @@ class Collection { } } + /** + * Find documents in the collection. + * @param {Object} [query={}] - The query to filter documents. + * @param {Object} [options={}] - The options for pagination. + * @param {number} [options.skip=0] - The number of documents to skip. Default is 0. + * @param {number} [options.limit=undefined] - The maximum number of documents to return. Default is undefined, which means no limit. + * @returns {Promise} A Promise that resolves to an array of matching documents. + * @throws {lowstorageError} If there's an error. + */ async find(query = {}, options = {}) { try { if (query === undefined || query === null) { @@ -389,22 +531,44 @@ class Collection { } } + /** + * Find the first document in the collection that matches the query. + * @param {Object} [query={}] - The query to filter documents. + * @returns {Promise} A Promise that resolves to the first matching document or null if no match is found. + * @throws {lowstorageError} If there's an error. + */ async findOne(query = {}) { try { - if (query === undefined || query === null) { - throw new lowstorageError(`${MODULE_NAME}: Query is required for update`, lowstorage_ERROR_CODES.MISSING_ARGUMENT); + if (query === null) { + throw new lowstorageError(`${MODULE_NAME}: Query cannot be null`, lowstorage_ERROR_CODES.INVALID_ARGUMENT); } - const result = await this.find(query); - return result[0] || []; + const result = await this.find(query, { limit: 1 }); + return result[0] || null; } catch (error) { + if (error instanceof lowstorageError) { + throw error; + } throw new lowstorageError(`${MODULE_NAME}: FindOne operation failed: ${error.message}`, lowstorage_ERROR_CODES.FIND_ONE_ERROR); } } + /** + * Update a single document in the collection that matches the query. + * @param {Object} [query={}] - The query to filter the document to update. + * @param {Object} [update={}] - The update operations to apply to the matching document. + * @returns {Promise} A Promise that resolves to 1 if a document was updated, 0 otherwise. + * @throws {lowstorageError} If the updateOne operation fails. + * @throws {SchemaValidationError} If the schema is not defined for the collection. + * @throws {DocumentValidationError} If the updated document is invalid. + * @throws {S3OperationError} If the S3 operation fails. + */ async update(query = {}, update = {}) { try { if (query === undefined || query === null || update === undefined || update === null) { - throw new lowstorageError(`${MODULE_NAME}: Query is required for update`, lowstorage_ERROR_CODES.MISSING_ARGUMENT); + throw new lowstorageError( + `${MODULE_NAME}: Query and update values are required for update`, + lowstorage_ERROR_CODES.MISSING_ARGUMENT, + ); } if (!this._avroType) { throw new SchemaValidationError( @@ -448,6 +612,16 @@ class Collection { } } + /** + * Update a single document in the collection that matches the query. + * @param {Object} [query={}] - The query to filter the document to update. + * @param {Object} [update={}] - The update operations to apply to the matching document. + * @returns {Promise} A Promise that resolves to 1 if a document was updated, 0 otherwise. + * @throws {lowstorageError} If the updateOne operation fails. + * @throws {SchemaValidationError} If the schema is not defined for the collection. + * @throws {DocumentValidationError} If the updated document is invalid. + * @throws {S3OperationError} If the S3 operation fails. + */ async updateOne(query = {}, update = {}) { try { if (query === undefined || query === null || update === undefined || update === null) { @@ -487,6 +661,13 @@ class Collection { } } + /** + * Delete documents from the collection. + * @param {Object} [query={}] - The query to filter documents to delete. + * @returns {Promise} A Promise that resolves to the number of documents deleted. + * @throws {lowstorageError} If the delete operation fails. + * @throws {S3OperationError} If the S3 operation fails. + */ async delete(query = {}) { try { if (query === undefined || query === null) { @@ -511,6 +692,12 @@ class Collection { } } + /** + * Delete all documents from the collection. + * @returns {Promise} A Promise that resolves to the number of documents deleted. + * @throws {lowstorageError} If the delete operation fails. + * @throws {S3OperationError} If the S3 operation fails. + */ async deleteAll() { try { const bufferData = await this._loadDataBuffer(); // load data from s3 @@ -532,15 +719,16 @@ class Collection { } } + /** + * Count the number of documents in the collection. + * @param {Object} [query={}] - The query to filter documents. + * @returns {Promise} A Promise that resolves to the number of documents in the collection. + * @throws {lowstorageError} If the count operation fails. + */ async count(query = {}) { try { - if (Object.keys(query).length === 0) { - const bufferData = await this._loadDataBuffer(); // load data from s3 - if (bufferData.length === 0) return 0; - const wrapperType = this._avro.parse({ type: 'array', items: this._avroType }); - return wrapperType.fromBuffer(bufferData).length || 0; - } - return (await this.find(query)).length; + const data = await this.find(query); + return data.length; } catch (error) { throw new lowstorageError(`${MODULE_NAME}: Count operation failed: ${error.message}`, lowstorage_ERROR_CODES.COUNT_ERROR); } diff --git a/src/lowstorage.test.js b/src/lowstorage.test.js index cd9e31f..6d3228f 100644 --- a/src/lowstorage.test.js +++ b/src/lowstorage.test.js @@ -1,9 +1,6 @@ -// import { unstable_dev } from 'wrangler'; import { env } from 'node:process'; import { lowstorage, lowstorageError, lowstorage_ERROR_CODES } from '../lib/lowstorage.js'; -// import supertest from 'supertest'; - const configCF = { endpoint: env.CF_ENDPOINT, region: env.CF_REGION, @@ -248,7 +245,8 @@ test('Collections | error cases and error codes', async () => { // Test count error - wrong argument await expect(col.count(null)).rejects.toThrow(lowstorage_ERROR_CODES.COUNT_ERROR); - await expect(col.count()).toBe(0); + const count = await col.count(); + await expect(count).toBe(0); // Test remove collection error await expect(lStorage.removeCollection(null)).rejects.toThrow(lowstorage_ERROR_CODES.REMOVE_COLLECTION_ERROR); @@ -259,3 +257,166 @@ test('Collections | error cases and error codes', async () => { // Clean up await lStorage.removeCollection('testCol2'); }); + +test('Document | CRUD operations', async () => { + // Test insert + const col = await lStorage.collection('testCol'); + const insertData = await col.insert({ name: 'Carlos', age: 25 }); + expect(insertData).toBeDefined(); + expect(insertData).toHaveLength(1); + expect(insertData[0]).toHaveProperty('_id'); + expect(insertData[0]).toHaveProperty('name', 'Carlos'); + expect(insertData[0]).toHaveProperty('age', 25); + + // Test by find + const findData = await col.find({ name: 'Carlos' }); + expect(findData).toBeDefined(); + expect(findData).toHaveLength(1); + expect(findData[0]).toHaveProperty('_id'); + expect(findData[0]).toHaveProperty('name', 'Carlos'); + expect(findData[0]).toHaveProperty('age', 25); + + // Test insert with schema + const insertDataWithSchema = await col.insert({ name: 'Carlos', age: 25 }, userAvroSchema); + expect(insertDataWithSchema).toBeDefined(); + expect(insertDataWithSchema).toHaveLength(1); + expect(insertDataWithSchema[0]).toHaveProperty('_id'); + expect(insertDataWithSchema[0]).toHaveProperty('name', 'Carlos'); + expect(insertDataWithSchema[0]).toHaveProperty('age', 25); + + // Test by find + const findDataWithSchema = await col.find({ name: 'Carlos' }); + expect(findDataWithSchema).toBeDefined(); + expect(findDataWithSchema).toHaveLength(2); + expect(findDataWithSchema[0]).toHaveProperty('_id'); + expect(findDataWithSchema[0]).toHaveProperty('name', 'Carlos'); + expect(findDataWithSchema[0]).toHaveProperty('age', 25); + + // test count + const count = await col.count({ name: 'Carlos' }); + expect(count).toBe(2); + + const count2 = await col.count(); + expect(count2).toBe(2); + + const count3 = await col.count({ name: 'Carlos2' }); + expect(count3).toBe(0); + + // Test insert with invalid schema + const invalidSchema = { type: 'invalid' }; + await expect(col.insert({ name: 'Carlos', age: 25 }, invalidSchema)).rejects.toThrow(lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR); + + // Test insert with invalid data + await expect(col.insert(null)).rejects.toThrow(lowstorage_ERROR_CODES.INSERT_ERROR); + + // Test insert with array + const insertDataArray = await col.insert([ + { name: 'Carlos', age: 25 }, + { name: 'Bob', age: 30 }, + ]); + expect(insertDataArray).toBeDefined(); + expect(insertDataArray).toHaveLength(2); + expect(insertDataArray[0]).toHaveProperty('_id'); + expect(insertDataArray[0]).toHaveProperty('name', 'Carlos'); + expect(insertDataArray[0]).toHaveProperty('age', 25); + expect(insertDataArray[1]).toHaveProperty('_id'); + expect(insertDataArray[1]).toHaveProperty('name', 'Bob'); + expect(insertDataArray[1]).toHaveProperty('age', 30); + + // Test insert with array and schema + const insertDataArrayWithSchema = await col.insert( + [ + { name: 'Carlos', age: 25 }, + { name: 'Bob', age: 30 }, + ], + userAvroSchema, + ); + expect(insertDataArrayWithSchema).toBeDefined(); + expect(insertDataArrayWithSchema).toHaveLength(2); + expect(insertDataArrayWithSchema[0]).toHaveProperty('_id'); + expect(insertDataArrayWithSchema[0]).toHaveProperty('name', 'Carlos'); + expect(insertDataArrayWithSchema[0]).toHaveProperty('age', 25); + expect(insertDataArrayWithSchema[1]).toHaveProperty('_id'); + expect(insertDataArrayWithSchema[1]).toHaveProperty('name', 'Bob'); + expect(insertDataArrayWithSchema[1]).toHaveProperty('age', 30); + + // Test insert with invalid array + await expect(col.insert(null)).rejects.toThrow(lowstorage_ERROR_CODES.INSERT_ERROR); + + // Test insert with invalid array and schema + await expect( + col.insert( + [ + { name: 'Carlos', age: 25 }, + { name: 'Bob', age: 30 }, + ], + invalidSchema, + ), + ).rejects.toThrow(lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR); + + // Test update + const updateData = await col.update({ name: 'Carlos' }, { name: 'Carlos2' }); + expect(updateData).toBeDefined(); + expect(updateData).toHaveLength(4); + expect(updateData[0]).toHaveProperty('_id'); + expect(updateData[0]).toHaveProperty('name', 'Carlos2'); + expect(updateData[0]).toHaveProperty('age', 25); + + // Test update with invalid array + await expect(col.update(null, { name: 'Carlos2' })).rejects.toThrow(lowstorage_ERROR_CODES.UPDATE_ERROR); + + // Test delete + const deleteData = await col.delete({ name: 'Carlos2' }); + expect(deleteData).toBeDefined(); + expect(deleteData).toHaveLength(1); + expect(deleteData[0]).toHaveProperty('_id'); + expect(deleteData[0]).toHaveProperty('name', 'Carlos2'); + expect(deleteData[0]).toHaveProperty('age', 25); + + // Test delete with schema + const deleteDataWithSchema = await col.delete({ name: 'Carlos2' }, userAvroSchema); + expect(deleteDataWithSchema).toBeDefined(); + expect(deleteDataWithSchema).toHaveLength(1); + expect(deleteDataWithSchema[0]).toHaveProperty('_id'); + expect(deleteDataWithSchema[0]).toHaveProperty('name', 'Carlos2'); + expect(deleteDataWithSchema[0]).toHaveProperty('age', 25); + + // Test delete with invalid schema + await expect(col.delete({ name: 'Carlos2' }, invalidSchema)).rejects.toThrow(lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR); + + // Test delete with invalid data + await expect(col.delete(null)).rejects.toThrow(lowstorage_ERROR_CODES.DELETE_ERROR); + + // Test delete with array + const deleteDataArray = await col.delete([{ name: 'Carlos2' }, { name: 'Bob' }]); + expect(deleteDataArray).toBeDefined(); + expect(deleteDataArray).toHaveLength(2); + expect(deleteDataArray[0]).toHaveProperty('_id'); + expect(deleteDataArray[0]).toHaveProperty('name', 'Carlos2'); + expect(deleteDataArray[0]).toHaveProperty('age', 25); + expect(deleteDataArray[1]).toHaveProperty('_id'); + expect(deleteDataArray[1]).toHaveProperty('name', 'Bob'); + expect(deleteDataArray[1]).toHaveProperty('age', 30); + + // Test delete with array and schema + const deleteDataArrayWithSchema = await col.delete([{ name: 'Carlos2' }, { name: 'Bob' }], userAvroSchema); + expect(deleteDataArrayWithSchema).toBeDefined(); + expect(deleteDataArrayWithSchema).toHaveLength(2); + expect(deleteDataArrayWithSchema[0]).toHaveProperty('_id'); + expect(deleteDataArrayWithSchema[0]).toHaveProperty('name', 'Carlos2'); + expect(deleteDataArrayWithSchema[0]).toHaveProperty('age', 25); + expect(deleteDataArrayWithSchema[1]).toHaveProperty('_id'); + expect(deleteDataArrayWithSchema[1]).toHaveProperty('name', 'Bob'); + expect(deleteDataArrayWithSchema[1]).toHaveProperty('age', 30); + + // Test delete with invalid array + await expect(col.delete(null)).rejects.toThrow(lowstorage_ERROR_CODES.DELETE_ERROR); + + // Test delete with invalid array and schema + await expect(col.delete([{ name: 'Carlos2' }, { name: 'Bob' }], invalidSchema)).rejects.toThrow( + lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR, + ); + + // cleanup + await lStorage.removeCollection('testCol'); +}); From 73eca10e08bafcd9b8a302acc79e83cb56686973 Mon Sep 17 00:00:00 2001 From: Jolly Good <1671375+good-lly@users.noreply.github.com> Date: Wed, 14 Aug 2024 14:27:59 +0200 Subject: [PATCH 07/18] update ultralight s3 version --- package-lock.json | 848 +++++++++++++++++++++++----------------------- package.json | 2 +- 2 files changed, 428 insertions(+), 422 deletions(-) diff --git a/package-lock.json b/package-lock.json index 925c442..9600b1a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,7 @@ "license": "MIT", "dependencies": { "avro-js": "^1.11.3", - "ultralight-s3": "^0.0.4" + "ultralight-s3": "^0.0.5" }, "devDependencies": { "esbuild": "^0.23.0", @@ -50,30 +50,30 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.7.tgz", - "integrity": "sha512-qJzAIcv03PyaWqxRgO4mSU3lihncDT296vnyuE2O8uA4w3UHWI4S3hgeZd1L8W1Bft40w9JxJ2b412iDUFFRhw==", + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.2.tgz", + "integrity": "sha512-bYcppcpKBvX4znYaPEeFau03bp89ShqNMLs+rmdptMw+heSZh9+z84d2YG+K7cYLbWwzdjtDoW/uqZmPjulClQ==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.7.tgz", - "integrity": "sha512-nykK+LEK86ahTkX/3TgauT0ikKoNCfKHEaZYTUVupJdTLzGNvrblu4u6fa7DhZONAltdf8e662t/abY8idrd/g==", + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.2.tgz", + "integrity": "sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==", "dev": true, "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.24.7", - "@babel/helper-compilation-targets": "^7.24.7", - "@babel/helper-module-transforms": "^7.24.7", - "@babel/helpers": "^7.24.7", - "@babel/parser": "^7.24.7", - "@babel/template": "^7.24.7", - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7", + "@babel/generator": "^7.25.0", + "@babel/helper-compilation-targets": "^7.25.2", + "@babel/helper-module-transforms": "^7.25.2", + "@babel/helpers": "^7.25.0", + "@babel/parser": "^7.25.0", + "@babel/template": "^7.25.0", + "@babel/traverse": "^7.25.2", + "@babel/types": "^7.25.2", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -89,12 +89,12 @@ } }, "node_modules/@babel/generator": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.7.tgz", - "integrity": "sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.0.tgz", + "integrity": "sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==", "dev": true, "dependencies": { - "@babel/types": "^7.24.7", + "@babel/types": "^7.25.0", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^2.5.1" @@ -104,14 +104,14 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.7.tgz", - "integrity": "sha512-ctSdRHBi20qWOfy27RUb4Fhp07KSJ3sXcuSvTrXrc4aG8NSYDo1ici3Vhg9bg69y5bj0Mr1lh0aeEgTvc12rMg==", + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz", + "integrity": "sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.24.7", - "@babel/helper-validator-option": "^7.24.7", - "browserslist": "^4.22.2", + "@babel/compat-data": "^7.25.2", + "@babel/helper-validator-option": "^7.24.8", + "browserslist": "^4.23.1", "lru-cache": "^5.1.1", "semver": "^6.3.1" }, @@ -119,43 +119,6 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz", - "integrity": "sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==", - "dev": true, - "dependencies": { - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.24.7.tgz", - "integrity": "sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==", - "dev": true, - "dependencies": { - "@babel/template": "^7.24.7", - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.7.tgz", - "integrity": "sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==", - "dev": true, - "dependencies": { - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-module-imports": { "version": "7.24.7", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", @@ -170,16 +133,15 @@ } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.7.tgz", - "integrity": "sha512-1fuJEwIrp+97rM4RWdO+qrRsZlAeL1lQJoPqtCYWv0NL115XM93hIH4CSRln2w52SqvmY5hqdtauB6QFCDiZNQ==", + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz", + "integrity": "sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==", "dev": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.24.7", "@babel/helper-module-imports": "^7.24.7", "@babel/helper-simple-access": "^7.24.7", - "@babel/helper-split-export-declaration": "^7.24.7", - "@babel/helper-validator-identifier": "^7.24.7" + "@babel/helper-validator-identifier": "^7.24.7", + "@babel/traverse": "^7.25.2" }, "engines": { "node": ">=6.9.0" @@ -189,9 +151,9 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.7.tgz", - "integrity": "sha512-Rq76wjt7yz9AAc1KnlRKNAi/dMSVWgDRx43FHoJEbcYU6xOWaE2dVPwcdTukJrjxS65GITyfbvEYHvkirZ6uEg==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz", + "integrity": "sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==", "dev": true, "engines": { "node": ">=6.9.0" @@ -210,22 +172,10 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz", - "integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-string-parser": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.7.tgz", - "integrity": "sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", + "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", "dev": true, "engines": { "node": ">=6.9.0" @@ -241,22 +191,22 @@ } }, "node_modules/@babel/helper-validator-option": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.7.tgz", - "integrity": "sha512-yy1/KvjhV/ZCL+SM7hBrvnZJ3ZuT9OuZgIJAGpPEToANvc3iM6iDvBnRjtElWibHU6n8/LPR/EjX9EtIEYO3pw==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz", + "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.7.tgz", - "integrity": "sha512-NlmJJtvcw72yRJRcnCmGvSi+3jDEg8qFu3z0AFoymmzLx5ERVWyzd9kVXr7Th9/8yIJi2Zc6av4Tqz3wFs8QWg==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.0.tgz", + "integrity": "sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw==", "dev": true, "dependencies": { - "@babel/template": "^7.24.7", - "@babel/types": "^7.24.7" + "@babel/template": "^7.25.0", + "@babel/types": "^7.25.0" }, "engines": { "node": ">=6.9.0" @@ -349,10 +299,13 @@ } }, "node_modules/@babel/parser": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.7.tgz", - "integrity": "sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==", + "version": "7.25.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.3.tgz", + "integrity": "sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw==", "dev": true, + "dependencies": { + "@babel/types": "^7.25.2" + }, "bin": { "parser": "bin/babel-parser.js" }, @@ -396,6 +349,36 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.7.tgz", + "integrity": "sha512-hbX+lKKeUMGihnK8nvKqmXBInriT3GVjzXKFriV3YC6APGxMbP8RZNFwy91+hocLXq90Mta+HshoB31802bb8A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-syntax-import-meta": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", @@ -507,6 +490,21 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-syntax-top-level-await": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", @@ -538,33 +536,30 @@ } }, "node_modules/@babel/template": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.7.tgz", - "integrity": "sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz", + "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==", "dev": true, "dependencies": { "@babel/code-frame": "^7.24.7", - "@babel/parser": "^7.24.7", - "@babel/types": "^7.24.7" + "@babel/parser": "^7.25.0", + "@babel/types": "^7.25.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.7.tgz", - "integrity": "sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==", + "version": "7.25.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.3.tgz", + "integrity": "sha512-HefgyP1x754oGCsKmV5reSmtV7IXj/kpaE1XYY+D9G5PvKKoFfSbiS4M77MdjuwlZKDIKFCffq9rPU+H/s3ZdQ==", "dev": true, "dependencies": { "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.24.7", - "@babel/helper-environment-visitor": "^7.24.7", - "@babel/helper-function-name": "^7.24.7", - "@babel/helper-hoist-variables": "^7.24.7", - "@babel/helper-split-export-declaration": "^7.24.7", - "@babel/parser": "^7.24.7", - "@babel/types": "^7.24.7", + "@babel/generator": "^7.25.0", + "@babel/parser": "^7.25.3", + "@babel/template": "^7.25.0", + "@babel/types": "^7.25.2", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -573,12 +568,12 @@ } }, "node_modules/@babel/types": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.7.tgz", - "integrity": "sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==", + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.2.tgz", + "integrity": "sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==", "dev": true, "dependencies": { - "@babel/helper-string-parser": "^7.24.7", + "@babel/helper-string-parser": "^7.24.8", "@babel/helper-validator-identifier": "^7.24.7", "to-fast-properties": "^2.0.0" }, @@ -605,9 +600,9 @@ } }, "node_modules/@cloudflare/workerd-darwin-64": { - "version": "1.20240701.0", - "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-64/-/workerd-darwin-64-1.20240701.0.tgz", - "integrity": "sha512-XAZa4ZP+qyTn6JQQACCPH09hGZXP2lTnWKkmg5mPwT8EyRzCKLkczAf98vPP5bq7JZD/zORdFWRY0dOTap8zTQ==", + "version": "1.20240806.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-64/-/workerd-darwin-64-1.20240806.0.tgz", + "integrity": "sha512-FqcVBBCO//I39K5F+HqE/v+UkqY1UrRnS653Jv+XsNNH9TpX5fTs7VCKG4kDSnmxlAaKttyIN5sMEt7lpuNExQ==", "cpu": [ "x64" ], @@ -621,9 +616,9 @@ } }, "node_modules/@cloudflare/workerd-darwin-arm64": { - "version": "1.20240701.0", - "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-arm64/-/workerd-darwin-arm64-1.20240701.0.tgz", - "integrity": "sha512-w80ZVAgfH4UwTz7fXZtk7KmS2FzlXniuQm4ku4+cIgRTilBAuKqjpOjwUCbx5g13Gqcm9NuiHce+IDGtobRTIQ==", + "version": "1.20240806.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-arm64/-/workerd-darwin-arm64-1.20240806.0.tgz", + "integrity": "sha512-8c3KvmzYp/wg+82KHSOzDetJK+pThH4MTrU1OsjmsR2cUfedm5dk5Lah9/0Ld68+6A0umFACi4W2xJHs/RoBpA==", "cpu": [ "arm64" ], @@ -637,9 +632,9 @@ } }, "node_modules/@cloudflare/workerd-linux-64": { - "version": "1.20240701.0", - "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-64/-/workerd-linux-64-1.20240701.0.tgz", - "integrity": "sha512-UWLr/Anxwwe/25nGv451MNd2jhREmPt/ws17DJJqTLAx6JxwGWA15MeitAIzl0dbxRFAJa+0+R8ag2WR3F/D6g==", + "version": "1.20240806.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-64/-/workerd-linux-64-1.20240806.0.tgz", + "integrity": "sha512-/149Bpxw4e2p5QqnBc06g0mx+4sZYh9j0doilnt0wk/uqYkLp0DdXGMQVRB74sBLg2UD3wW8amn1w3KyFhK2tQ==", "cpu": [ "x64" ], @@ -653,9 +648,9 @@ } }, "node_modules/@cloudflare/workerd-linux-arm64": { - "version": "1.20240701.0", - "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-arm64/-/workerd-linux-arm64-1.20240701.0.tgz", - "integrity": "sha512-3kCnF9kYgov1ggpuWbgpXt4stPOIYtVmPCa7MO2xhhA0TWP6JDUHRUOsnmIgKrvDjXuXqlK16cdg3v+EWsaPJg==", + "version": "1.20240806.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-arm64/-/workerd-linux-arm64-1.20240806.0.tgz", + "integrity": "sha512-lacDWY3S1rKL/xT6iMtTQJEKmTTKrBavPczInEuBFXElmrS6IwVjZwv8hhVm32piyNt/AuFu9BYoJALi9D85/g==", "cpu": [ "arm64" ], @@ -669,9 +664,9 @@ } }, "node_modules/@cloudflare/workerd-windows-64": { - "version": "1.20240701.0", - "resolved": "https://registry.npmjs.org/@cloudflare/workerd-windows-64/-/workerd-windows-64-1.20240701.0.tgz", - "integrity": "sha512-6IPGITRAeS67j3BH1rN4iwYWDt47SqJG7KlZJ5bB4UaNAia4mvMBSy/p2p4vA89bbXoDRjMtEvRu7Robu6O7hQ==", + "version": "1.20240806.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-windows-64/-/workerd-windows-64-1.20240806.0.tgz", + "integrity": "sha512-hC6JEfTSQK6//Lg+D54TLVn1ceTPY+fv4MXqDZIYlPP53iN+dL8Xd0utn2SG57UYdlL5FRAhm/EWHcATZg1RgA==", "cpu": [ "x64" ], @@ -684,6 +679,12 @@ "node": ">=16" } }, + "node_modules/@cloudflare/workers-shared": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workers-shared/-/workers-shared-0.1.0.tgz", + "integrity": "sha512-SyD4iw6jM4anZaG+ujgVETV4fulF2KHBOW31eavbVN7TNpk2l4aJgwY1YSPK00IKSWsoQuH2TigR446KuT5lqQ==", + "dev": true + }, "node_modules/@cspotcode/source-map-support": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", @@ -1583,12 +1584,12 @@ } }, "node_modules/@types/node": { - "version": "20.14.10", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.10.tgz", - "integrity": "sha512-MdiXf+nDuMvY0gJKxyfZ7/6UFsETO7mGKF54MVD/ekJS6HdFtpZFBgrh6Pseu64XTb2MLyFPlbW6hj8HYRQNOQ==", + "version": "22.3.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.3.0.tgz", + "integrity": "sha512-nrWpWVaDZuaVc5X84xJ0vNrLvomM205oQyLsRt7OHNZbSHslcWsvgFR7O7hire2ZonjLrWBbedmotmIlJDVd6g==", "dev": true, "dependencies": { - "undici-types": "~5.26.4" + "undici-types": "~6.18.2" } }, "node_modules/@types/node-forge": { @@ -1607,9 +1608,9 @@ "dev": true }, "node_modules/@types/yargs": { - "version": "17.0.32", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", - "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", + "version": "17.0.33", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", + "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", "dev": true, "dependencies": { "@types/yargs-parser": "*" @@ -1716,9 +1717,9 @@ } }, "node_modules/avro-js": { - "version": "1.11.3", - "resolved": "https://registry.npmjs.org/avro-js/-/avro-js-1.11.3.tgz", - "integrity": "sha512-B1b0wI5iwSkVwj3RQWRzW99/LGoYl6df9j1kWime8r8b0dXCdKU7t7mEOFkOpQFaT/I9JXaL7KAIxM+/3TUk1A==", + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/avro-js/-/avro-js-1.12.0.tgz", + "integrity": "sha512-mBhOjtHHua2MHrrgQ71YKKTGfZpS1sPvgL+QcCQ5SkUyp6qLkeTsCnQXUmATfpiOvoXB6CczzFEqn5UKbPUn3Q==", "dependencies": { "underscore": "^1.13.2" } @@ -1792,23 +1793,26 @@ } }, "node_modules/babel-preset-current-node-syntax": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.1.0.tgz", + "integrity": "sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==", "dev": true, "dependencies": { "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-import-attributes": "^7.24.7", + "@babel/plugin-syntax-import-meta": "^7.10.4", "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5" }, "peerDependencies": { "@babel/core": "^7.0.0" @@ -1877,9 +1881,9 @@ } }, "node_modules/browserslist": { - "version": "4.23.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.2.tgz", - "integrity": "sha512-qkqSyistMYdxAcw+CzbZwlBy8AGmS/eEWs+sEV5TnLRGDOL+C5M2EnH6tlZyg0YoAxGJAFKh61En9BR941GnHA==", + "version": "4.23.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz", + "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==", "dev": true, "funding": [ { @@ -1896,9 +1900,9 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001640", - "electron-to-chromium": "^1.4.820", - "node-releases": "^2.0.14", + "caniuse-lite": "^1.0.30001646", + "electron-to-chromium": "^1.5.4", + "node-releases": "^2.0.18", "update-browserslist-db": "^1.1.0" }, "bin": { @@ -1942,9 +1946,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001641", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001641.tgz", - "integrity": "sha512-Phv5thgl67bHYo1TtMY/MurjkHhV4EDaCosezRXgZ8jzA/Ub+wjxAvbGvjoFENStinwi5kCyOYV3mi5tOGykwA==", + "version": "1.0.30001651", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001651.tgz", + "integrity": "sha512-9Cf+Xv1jJNe1xPZLGuUXLNkE1BoDkqRqYyFJ9TDYSqhduqA4hu4oR9HluGoWYQC/aj8WHjsGVV+bwkh0+tegRg==", "dev": true, "funding": [ { @@ -2171,9 +2175,9 @@ } }, "node_modules/debug": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", - "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", + "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", "dev": true, "dependencies": { "ms": "2.1.2" @@ -2235,9 +2239,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.825", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.825.tgz", - "integrity": "sha512-OCcF+LwdgFGcsYPYC5keEEFC2XT0gBhrYbeGzHCx7i9qRFbzO/AqTmc/C/1xNhJj+JA7rzlN7mpBuStshh96Cg==", + "version": "1.5.7", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.7.tgz", + "integrity": "sha512-6FTNWIWMxMy/ZY6799nBlPtF1DFDQ6VQJ7yyDP27SJNt5lwtQ5ufqVvHylb3fdQefvRcgA3fKcFMJi9OLwBRNw==", "dev": true }, "node_modules/emittery": { @@ -2612,9 +2616,9 @@ } }, "node_modules/import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", + "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", "dev": true, "dependencies": { "pkg-dir": "^4.2.0", @@ -2675,9 +2679,9 @@ } }, "node_modules/is-core-module": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.14.0.tgz", - "integrity": "sha512-a5dFJih5ZLYlRtDc0dZWP7RiKr6xIKzmn/oAYCDvdLThadVgyJwlaoQPmRtMSpz+rk0OGAgIu+TcM9HUF0fk1A==", + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.0.tgz", + "integrity": "sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==", "dev": true, "dependencies": { "hasown": "^2.0.2" @@ -2781,9 +2785,9 @@ } }, "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true, "bin": { "semver": "bin/semver.js" @@ -3294,9 +3298,9 @@ } }, "node_modules/jest-snapshot/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true, "bin": { "semver": "bin/semver.js" @@ -3519,9 +3523,9 @@ } }, "node_modules/make-dir/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true, "bin": { "semver": "bin/semver.js" @@ -3580,9 +3584,9 @@ } }, "node_modules/miniflare": { - "version": "3.20240701.0", - "resolved": "https://registry.npmjs.org/miniflare/-/miniflare-3.20240701.0.tgz", - "integrity": "sha512-m9+I+7JNyqDGftCMKp9cK9pCZkK72hAL2mM9IWwhct+ZmucLBA8Uu6+rHQqA5iod86cpwOkrB2PrPA3wx9YNgw==", + "version": "3.20240806.0", + "resolved": "https://registry.npmjs.org/miniflare/-/miniflare-3.20240806.0.tgz", + "integrity": "sha512-jDsXBJOLUVpIQXHsluX3xV0piDxXolTCsxdje2Ex2LTC9PsSoBIkMwvCmnCxe9wpJJCq8rb0UMyeEn3KOF3LOw==", "dev": true, "dependencies": { "@cspotcode/source-map-support": "0.8.1", @@ -3593,7 +3597,7 @@ "glob-to-regexp": "^0.4.1", "stoppable": "^1.1.0", "undici": "^5.28.4", - "workerd": "1.20240701.0", + "workerd": "1.20240806.0", "ws": "^8.17.1", "youch": "^3.2.2", "zod": "^3.22.3" @@ -3678,9 +3682,9 @@ "dev": true }, "node_modules/node-releases": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", - "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", "dev": true }, "node_modules/normalize-path": { @@ -3882,9 +3886,9 @@ } }, "node_modules/prettier": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.2.tgz", - "integrity": "sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", + "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", "dev": true, "bin": { "prettier": "bin/prettier.cjs" @@ -4351,9 +4355,9 @@ } }, "node_modules/typescript": { - "version": "5.5.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.3.tgz", - "integrity": "sha512-/hreyEujaB0w76zKo6717l3L0o/qEUtRgdvUBvlkhoWeOVMjMuHNHk0BRBzikzuGDqNmPQbg5ifMEqsHLiIUcQ==", + "version": "5.5.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", + "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==", "dev": true, "bin": { "tsc": "bin/tsc", @@ -4364,23 +4368,23 @@ } }, "node_modules/ufo": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.5.3.tgz", - "integrity": "sha512-Y7HYmWaFwPUmkoQCUIAYpKqkOf+SbVj/2fJJZ4RJMCfZp0rTGwRbzQD+HghfnhKOjL9E01okqz+ncJskGYfBNw==", + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.5.4.tgz", + "integrity": "sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==", "dev": true }, "node_modules/ultralight-s3": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/ultralight-s3/-/ultralight-s3-0.0.4.tgz", - "integrity": "sha512-/b0X2ruk+jI2VhjQK/s5lWQy+4LuobD9Yb/FcR3qD4DE+NCH97Zwi6PB+o5B/M/Fl1K8vJgAtOtEoVhaHgOHvw==", + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/ultralight-s3/-/ultralight-s3-0.0.5.tgz", + "integrity": "sha512-rCjL5ZJq2lgmWlofm8ShLNzShSB61dOTJ3IaRObDGjbaye8HVX6jxaxfx0UyVQlMS1tpochBxpynKumk+IZ5vw==", "engines": { "node": ">=16" } }, "node_modules/underscore": { - "version": "1.13.6", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz", - "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==" + "version": "1.13.7", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.7.tgz", + "integrity": "sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g==" }, "node_modules/undici": { "version": "5.28.4", @@ -4395,9 +4399,9 @@ } }, "node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "version": "6.18.2", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.18.2.tgz", + "integrity": "sha512-5ruQbENj95yDYJNS3TvcaxPMshV7aizdv/hWYjGIKoANWKjhWNBsr2YEuYZKodQulB1b8l7ILOuDQep3afowQQ==", "dev": true }, "node_modules/unenv": { @@ -4484,9 +4488,9 @@ } }, "node_modules/workerd": { - "version": "1.20240701.0", - "resolved": "https://registry.npmjs.org/workerd/-/workerd-1.20240701.0.tgz", - "integrity": "sha512-qSgNVqauqzNCij9MaJLF2c2ko3AnFioVSIxMSryGbRK+LvtGr9BKBt6JOxCb24DoJASoJDx3pe3DJHBVydUiBg==", + "version": "1.20240806.0", + "resolved": "https://registry.npmjs.org/workerd/-/workerd-1.20240806.0.tgz", + "integrity": "sha512-yyNtyzTMgVY0sgYijHBONqZFVXsOFGj2jDjS8MF/RbO2ZdGROvs4Hkc/9QnmqFWahE0STxXeJ1yW1yVotdF0UQ==", "dev": true, "hasInstallScript": true, "bin": { @@ -4496,27 +4500,28 @@ "node": ">=16" }, "optionalDependencies": { - "@cloudflare/workerd-darwin-64": "1.20240701.0", - "@cloudflare/workerd-darwin-arm64": "1.20240701.0", - "@cloudflare/workerd-linux-64": "1.20240701.0", - "@cloudflare/workerd-linux-arm64": "1.20240701.0", - "@cloudflare/workerd-windows-64": "1.20240701.0" + "@cloudflare/workerd-darwin-64": "1.20240806.0", + "@cloudflare/workerd-darwin-arm64": "1.20240806.0", + "@cloudflare/workerd-linux-64": "1.20240806.0", + "@cloudflare/workerd-linux-arm64": "1.20240806.0", + "@cloudflare/workerd-windows-64": "1.20240806.0" } }, "node_modules/wrangler": { - "version": "3.63.2", - "resolved": "https://registry.npmjs.org/wrangler/-/wrangler-3.63.2.tgz", - "integrity": "sha512-c7F46JtBGTIQehTOgfGbxfDMYgO9AjC70CXVSohxHiF9ajHz56HEV2k3aowhJJiP3MBB8sJMm8rdG10f5zUs+w==", + "version": "3.71.0", + "resolved": "https://registry.npmjs.org/wrangler/-/wrangler-3.71.0.tgz", + "integrity": "sha512-WHWBmU2z0p1hRtSIIP5HEeoR+6aNpuZR82HMXAwpfeiyijjfkMyt/TUs8gvIOKC3x3+ETQQIdVeX2al5KtrIxQ==", "dev": true, "dependencies": { "@cloudflare/kv-asset-handler": "0.3.4", + "@cloudflare/workers-shared": "0.1.0", "@esbuild-plugins/node-globals-polyfill": "^0.2.3", "@esbuild-plugins/node-modules-polyfill": "^0.2.2", "blake3-wasm": "^2.1.5", "chokidar": "^3.5.3", "date-fns": "^3.6.0", "esbuild": "0.17.19", - "miniflare": "3.20240701.0", + "miniflare": "3.20240806.0", "nanoid": "^3.3.3", "path-to-regexp": "^6.2.0", "resolve": "^1.22.8", @@ -4524,6 +4529,7 @@ "selfsigned": "^2.0.1", "source-map": "^0.6.1", "unenv": "npm:unenv-nightly@1.10.0-1717606461.a117952", + "workerd": "1.20240806.0", "xxhash-wasm": "^1.0.1" }, "bin": { @@ -4537,7 +4543,7 @@ "fsevents": "~2.3.2" }, "peerDependencies": { - "@cloudflare/workers-types": "^4.20240620.0" + "@cloudflare/workers-types": "^4.20240806.0" }, "peerDependenciesMeta": { "@cloudflare/workers-types": { @@ -5094,27 +5100,27 @@ } }, "@babel/compat-data": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.7.tgz", - "integrity": "sha512-qJzAIcv03PyaWqxRgO4mSU3lihncDT296vnyuE2O8uA4w3UHWI4S3hgeZd1L8W1Bft40w9JxJ2b412iDUFFRhw==", + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.2.tgz", + "integrity": "sha512-bYcppcpKBvX4znYaPEeFau03bp89ShqNMLs+rmdptMw+heSZh9+z84d2YG+K7cYLbWwzdjtDoW/uqZmPjulClQ==", "dev": true }, "@babel/core": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.7.tgz", - "integrity": "sha512-nykK+LEK86ahTkX/3TgauT0ikKoNCfKHEaZYTUVupJdTLzGNvrblu4u6fa7DhZONAltdf8e662t/abY8idrd/g==", + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.2.tgz", + "integrity": "sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==", "dev": true, "requires": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.24.7", - "@babel/helper-compilation-targets": "^7.24.7", - "@babel/helper-module-transforms": "^7.24.7", - "@babel/helpers": "^7.24.7", - "@babel/parser": "^7.24.7", - "@babel/template": "^7.24.7", - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7", + "@babel/generator": "^7.25.0", + "@babel/helper-compilation-targets": "^7.25.2", + "@babel/helper-module-transforms": "^7.25.2", + "@babel/helpers": "^7.25.0", + "@babel/parser": "^7.25.0", + "@babel/template": "^7.25.0", + "@babel/traverse": "^7.25.2", + "@babel/types": "^7.25.2", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -5123,58 +5129,30 @@ } }, "@babel/generator": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.7.tgz", - "integrity": "sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.0.tgz", + "integrity": "sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==", "dev": true, "requires": { - "@babel/types": "^7.24.7", + "@babel/types": "^7.25.0", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^2.5.1" } }, "@babel/helper-compilation-targets": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.7.tgz", - "integrity": "sha512-ctSdRHBi20qWOfy27RUb4Fhp07KSJ3sXcuSvTrXrc4aG8NSYDo1ici3Vhg9bg69y5bj0Mr1lh0aeEgTvc12rMg==", + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz", + "integrity": "sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==", "dev": true, "requires": { - "@babel/compat-data": "^7.24.7", - "@babel/helper-validator-option": "^7.24.7", - "browserslist": "^4.22.2", + "@babel/compat-data": "^7.25.2", + "@babel/helper-validator-option": "^7.24.8", + "browserslist": "^4.23.1", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, - "@babel/helper-environment-visitor": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz", - "integrity": "sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==", - "dev": true, - "requires": { - "@babel/types": "^7.24.7" - } - }, - "@babel/helper-function-name": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.24.7.tgz", - "integrity": "sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==", - "dev": true, - "requires": { - "@babel/template": "^7.24.7", - "@babel/types": "^7.24.7" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.7.tgz", - "integrity": "sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==", - "dev": true, - "requires": { - "@babel/types": "^7.24.7" - } - }, "@babel/helper-module-imports": { "version": "7.24.7", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", @@ -5186,22 +5164,21 @@ } }, "@babel/helper-module-transforms": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.7.tgz", - "integrity": "sha512-1fuJEwIrp+97rM4RWdO+qrRsZlAeL1lQJoPqtCYWv0NL115XM93hIH4CSRln2w52SqvmY5hqdtauB6QFCDiZNQ==", + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz", + "integrity": "sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==", "dev": true, "requires": { - "@babel/helper-environment-visitor": "^7.24.7", "@babel/helper-module-imports": "^7.24.7", "@babel/helper-simple-access": "^7.24.7", - "@babel/helper-split-export-declaration": "^7.24.7", - "@babel/helper-validator-identifier": "^7.24.7" + "@babel/helper-validator-identifier": "^7.24.7", + "@babel/traverse": "^7.25.2" } }, "@babel/helper-plugin-utils": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.7.tgz", - "integrity": "sha512-Rq76wjt7yz9AAc1KnlRKNAi/dMSVWgDRx43FHoJEbcYU6xOWaE2dVPwcdTukJrjxS65GITyfbvEYHvkirZ6uEg==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz", + "integrity": "sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==", "dev": true }, "@babel/helper-simple-access": { @@ -5214,19 +5191,10 @@ "@babel/types": "^7.24.7" } }, - "@babel/helper-split-export-declaration": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz", - "integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==", - "dev": true, - "requires": { - "@babel/types": "^7.24.7" - } - }, "@babel/helper-string-parser": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.7.tgz", - "integrity": "sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", + "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", "dev": true }, "@babel/helper-validator-identifier": { @@ -5236,19 +5204,19 @@ "dev": true }, "@babel/helper-validator-option": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.7.tgz", - "integrity": "sha512-yy1/KvjhV/ZCL+SM7hBrvnZJ3ZuT9OuZgIJAGpPEToANvc3iM6iDvBnRjtElWibHU6n8/LPR/EjX9EtIEYO3pw==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz", + "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==", "dev": true }, "@babel/helpers": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.7.tgz", - "integrity": "sha512-NlmJJtvcw72yRJRcnCmGvSi+3jDEg8qFu3z0AFoymmzLx5ERVWyzd9kVXr7Th9/8yIJi2Zc6av4Tqz3wFs8QWg==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.0.tgz", + "integrity": "sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw==", "dev": true, "requires": { - "@babel/template": "^7.24.7", - "@babel/types": "^7.24.7" + "@babel/template": "^7.25.0", + "@babel/types": "^7.25.0" } }, "@babel/highlight": { @@ -5322,10 +5290,13 @@ } }, "@babel/parser": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.7.tgz", - "integrity": "sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==", - "dev": true + "version": "7.25.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.3.tgz", + "integrity": "sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw==", + "dev": true, + "requires": { + "@babel/types": "^7.25.2" + } }, "@babel/plugin-syntax-async-generators": { "version": "7.8.4", @@ -5354,6 +5325,24 @@ "@babel/helper-plugin-utils": "^7.12.13" } }, + "@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-import-attributes": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.7.tgz", + "integrity": "sha512-hbX+lKKeUMGihnK8nvKqmXBInriT3GVjzXKFriV3YC6APGxMbP8RZNFwy91+hocLXq90Mta+HshoB31802bb8A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.7" + } + }, "@babel/plugin-syntax-import-meta": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", @@ -5435,6 +5424,15 @@ "@babel/helper-plugin-utils": "^7.8.0" } }, + "@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, "@babel/plugin-syntax-top-level-await": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", @@ -5454,41 +5452,38 @@ } }, "@babel/template": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.7.tgz", - "integrity": "sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz", + "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==", "dev": true, "requires": { "@babel/code-frame": "^7.24.7", - "@babel/parser": "^7.24.7", - "@babel/types": "^7.24.7" + "@babel/parser": "^7.25.0", + "@babel/types": "^7.25.0" } }, "@babel/traverse": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.7.tgz", - "integrity": "sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==", + "version": "7.25.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.3.tgz", + "integrity": "sha512-HefgyP1x754oGCsKmV5reSmtV7IXj/kpaE1XYY+D9G5PvKKoFfSbiS4M77MdjuwlZKDIKFCffq9rPU+H/s3ZdQ==", "dev": true, "requires": { "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.24.7", - "@babel/helper-environment-visitor": "^7.24.7", - "@babel/helper-function-name": "^7.24.7", - "@babel/helper-hoist-variables": "^7.24.7", - "@babel/helper-split-export-declaration": "^7.24.7", - "@babel/parser": "^7.24.7", - "@babel/types": "^7.24.7", + "@babel/generator": "^7.25.0", + "@babel/parser": "^7.25.3", + "@babel/template": "^7.25.0", + "@babel/types": "^7.25.2", "debug": "^4.3.1", "globals": "^11.1.0" } }, "@babel/types": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.7.tgz", - "integrity": "sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==", + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.2.tgz", + "integrity": "sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==", "dev": true, "requires": { - "@babel/helper-string-parser": "^7.24.7", + "@babel/helper-string-parser": "^7.24.8", "@babel/helper-validator-identifier": "^7.24.7", "to-fast-properties": "^2.0.0" } @@ -5509,40 +5504,46 @@ } }, "@cloudflare/workerd-darwin-64": { - "version": "1.20240701.0", - "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-64/-/workerd-darwin-64-1.20240701.0.tgz", - "integrity": "sha512-XAZa4ZP+qyTn6JQQACCPH09hGZXP2lTnWKkmg5mPwT8EyRzCKLkczAf98vPP5bq7JZD/zORdFWRY0dOTap8zTQ==", + "version": "1.20240806.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-64/-/workerd-darwin-64-1.20240806.0.tgz", + "integrity": "sha512-FqcVBBCO//I39K5F+HqE/v+UkqY1UrRnS653Jv+XsNNH9TpX5fTs7VCKG4kDSnmxlAaKttyIN5sMEt7lpuNExQ==", "dev": true, "optional": true }, "@cloudflare/workerd-darwin-arm64": { - "version": "1.20240701.0", - "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-arm64/-/workerd-darwin-arm64-1.20240701.0.tgz", - "integrity": "sha512-w80ZVAgfH4UwTz7fXZtk7KmS2FzlXniuQm4ku4+cIgRTilBAuKqjpOjwUCbx5g13Gqcm9NuiHce+IDGtobRTIQ==", + "version": "1.20240806.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-arm64/-/workerd-darwin-arm64-1.20240806.0.tgz", + "integrity": "sha512-8c3KvmzYp/wg+82KHSOzDetJK+pThH4MTrU1OsjmsR2cUfedm5dk5Lah9/0Ld68+6A0umFACi4W2xJHs/RoBpA==", "dev": true, "optional": true }, "@cloudflare/workerd-linux-64": { - "version": "1.20240701.0", - "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-64/-/workerd-linux-64-1.20240701.0.tgz", - "integrity": "sha512-UWLr/Anxwwe/25nGv451MNd2jhREmPt/ws17DJJqTLAx6JxwGWA15MeitAIzl0dbxRFAJa+0+R8ag2WR3F/D6g==", + "version": "1.20240806.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-64/-/workerd-linux-64-1.20240806.0.tgz", + "integrity": "sha512-/149Bpxw4e2p5QqnBc06g0mx+4sZYh9j0doilnt0wk/uqYkLp0DdXGMQVRB74sBLg2UD3wW8amn1w3KyFhK2tQ==", "dev": true, "optional": true }, "@cloudflare/workerd-linux-arm64": { - "version": "1.20240701.0", - "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-arm64/-/workerd-linux-arm64-1.20240701.0.tgz", - "integrity": "sha512-3kCnF9kYgov1ggpuWbgpXt4stPOIYtVmPCa7MO2xhhA0TWP6JDUHRUOsnmIgKrvDjXuXqlK16cdg3v+EWsaPJg==", + "version": "1.20240806.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-arm64/-/workerd-linux-arm64-1.20240806.0.tgz", + "integrity": "sha512-lacDWY3S1rKL/xT6iMtTQJEKmTTKrBavPczInEuBFXElmrS6IwVjZwv8hhVm32piyNt/AuFu9BYoJALi9D85/g==", "dev": true, "optional": true }, "@cloudflare/workerd-windows-64": { - "version": "1.20240701.0", - "resolved": "https://registry.npmjs.org/@cloudflare/workerd-windows-64/-/workerd-windows-64-1.20240701.0.tgz", - "integrity": "sha512-6IPGITRAeS67j3BH1rN4iwYWDt47SqJG7KlZJ5bB4UaNAia4mvMBSy/p2p4vA89bbXoDRjMtEvRu7Robu6O7hQ==", + "version": "1.20240806.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-windows-64/-/workerd-windows-64-1.20240806.0.tgz", + "integrity": "sha512-hC6JEfTSQK6//Lg+D54TLVn1ceTPY+fv4MXqDZIYlPP53iN+dL8Xd0utn2SG57UYdlL5FRAhm/EWHcATZg1RgA==", "dev": true, "optional": true }, + "@cloudflare/workers-shared": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workers-shared/-/workers-shared-0.1.0.tgz", + "integrity": "sha512-SyD4iw6jM4anZaG+ujgVETV4fulF2KHBOW31eavbVN7TNpk2l4aJgwY1YSPK00IKSWsoQuH2TigR446KuT5lqQ==", + "dev": true + }, "@cspotcode/source-map-support": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", @@ -6140,12 +6141,12 @@ } }, "@types/node": { - "version": "20.14.10", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.10.tgz", - "integrity": "sha512-MdiXf+nDuMvY0gJKxyfZ7/6UFsETO7mGKF54MVD/ekJS6HdFtpZFBgrh6Pseu64XTb2MLyFPlbW6hj8HYRQNOQ==", + "version": "22.3.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.3.0.tgz", + "integrity": "sha512-nrWpWVaDZuaVc5X84xJ0vNrLvomM205oQyLsRt7OHNZbSHslcWsvgFR7O7hire2ZonjLrWBbedmotmIlJDVd6g==", "dev": true, "requires": { - "undici-types": "~5.26.4" + "undici-types": "~6.18.2" } }, "@types/node-forge": { @@ -6164,9 +6165,9 @@ "dev": true }, "@types/yargs": { - "version": "17.0.32", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", - "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", + "version": "17.0.33", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", + "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", "dev": true, "requires": { "@types/yargs-parser": "*" @@ -6246,9 +6247,9 @@ } }, "avro-js": { - "version": "1.11.3", - "resolved": "https://registry.npmjs.org/avro-js/-/avro-js-1.11.3.tgz", - "integrity": "sha512-B1b0wI5iwSkVwj3RQWRzW99/LGoYl6df9j1kWime8r8b0dXCdKU7t7mEOFkOpQFaT/I9JXaL7KAIxM+/3TUk1A==", + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/avro-js/-/avro-js-1.12.0.tgz", + "integrity": "sha512-mBhOjtHHua2MHrrgQ71YKKTGfZpS1sPvgL+QcCQ5SkUyp6qLkeTsCnQXUmATfpiOvoXB6CczzFEqn5UKbPUn3Q==", "requires": { "underscore": "^1.13.2" } @@ -6309,23 +6310,26 @@ } }, "babel-preset-current-node-syntax": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.1.0.tgz", + "integrity": "sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==", "dev": true, "requires": { "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-import-attributes": "^7.24.7", + "@babel/plugin-syntax-import-meta": "^7.10.4", "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5" } }, "babel-preset-jest": { @@ -6376,14 +6380,14 @@ } }, "browserslist": { - "version": "4.23.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.2.tgz", - "integrity": "sha512-qkqSyistMYdxAcw+CzbZwlBy8AGmS/eEWs+sEV5TnLRGDOL+C5M2EnH6tlZyg0YoAxGJAFKh61En9BR941GnHA==", + "version": "4.23.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz", + "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001640", - "electron-to-chromium": "^1.4.820", - "node-releases": "^2.0.14", + "caniuse-lite": "^1.0.30001646", + "electron-to-chromium": "^1.5.4", + "node-releases": "^2.0.18", "update-browserslist-db": "^1.1.0" } }, @@ -6415,9 +6419,9 @@ "dev": true }, "caniuse-lite": { - "version": "1.0.30001641", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001641.tgz", - "integrity": "sha512-Phv5thgl67bHYo1TtMY/MurjkHhV4EDaCosezRXgZ8jzA/Ub+wjxAvbGvjoFENStinwi5kCyOYV3mi5tOGykwA==", + "version": "1.0.30001651", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001651.tgz", + "integrity": "sha512-9Cf+Xv1jJNe1xPZLGuUXLNkE1BoDkqRqYyFJ9TDYSqhduqA4hu4oR9HluGoWYQC/aj8WHjsGVV+bwkh0+tegRg==", "dev": true }, "capnp-ts": { @@ -6575,9 +6579,9 @@ "dev": true }, "debug": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", - "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", + "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", "dev": true, "requires": { "ms": "2.1.2" @@ -6615,9 +6619,9 @@ "dev": true }, "electron-to-chromium": { - "version": "1.4.825", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.825.tgz", - "integrity": "sha512-OCcF+LwdgFGcsYPYC5keEEFC2XT0gBhrYbeGzHCx7i9qRFbzO/AqTmc/C/1xNhJj+JA7rzlN7mpBuStshh96Cg==", + "version": "1.5.7", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.7.tgz", + "integrity": "sha512-6FTNWIWMxMy/ZY6799nBlPtF1DFDQ6VQJ7yyDP27SJNt5lwtQ5ufqVvHylb3fdQefvRcgA3fKcFMJi9OLwBRNw==", "dev": true }, "emittery": { @@ -6895,9 +6899,9 @@ "dev": true }, "import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", + "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", "dev": true, "requires": { "pkg-dir": "^4.2.0", @@ -6942,9 +6946,9 @@ } }, "is-core-module": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.14.0.tgz", - "integrity": "sha512-a5dFJih5ZLYlRtDc0dZWP7RiKr6xIKzmn/oAYCDvdLThadVgyJwlaoQPmRtMSpz+rk0OGAgIu+TcM9HUF0fk1A==", + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.0.tgz", + "integrity": "sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==", "dev": true, "requires": { "hasown": "^2.0.2" @@ -7015,9 +7019,9 @@ }, "dependencies": { "semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true } } @@ -7406,9 +7410,9 @@ }, "dependencies": { "semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true } } @@ -7577,9 +7581,9 @@ }, "dependencies": { "semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true } } @@ -7622,9 +7626,9 @@ "dev": true }, "miniflare": { - "version": "3.20240701.0", - "resolved": "https://registry.npmjs.org/miniflare/-/miniflare-3.20240701.0.tgz", - "integrity": "sha512-m9+I+7JNyqDGftCMKp9cK9pCZkK72hAL2mM9IWwhct+ZmucLBA8Uu6+rHQqA5iod86cpwOkrB2PrPA3wx9YNgw==", + "version": "3.20240806.0", + "resolved": "https://registry.npmjs.org/miniflare/-/miniflare-3.20240806.0.tgz", + "integrity": "sha512-jDsXBJOLUVpIQXHsluX3xV0piDxXolTCsxdje2Ex2LTC9PsSoBIkMwvCmnCxe9wpJJCq8rb0UMyeEn3KOF3LOw==", "dev": true, "requires": { "@cspotcode/source-map-support": "0.8.1", @@ -7635,7 +7639,7 @@ "glob-to-regexp": "^0.4.1", "stoppable": "^1.1.0", "undici": "^5.28.4", - "workerd": "1.20240701.0", + "workerd": "1.20240806.0", "ws": "^8.17.1", "youch": "^3.2.2", "zod": "^3.22.3" @@ -7693,9 +7697,9 @@ "dev": true }, "node-releases": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", - "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", "dev": true }, "normalize-path": { @@ -7842,9 +7846,9 @@ } }, "prettier": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.2.tgz", - "integrity": "sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", + "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", "dev": true }, "pretty-format": { @@ -8186,26 +8190,26 @@ "dev": true }, "typescript": { - "version": "5.5.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.3.tgz", - "integrity": "sha512-/hreyEujaB0w76zKo6717l3L0o/qEUtRgdvUBvlkhoWeOVMjMuHNHk0BRBzikzuGDqNmPQbg5ifMEqsHLiIUcQ==", + "version": "5.5.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", + "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==", "dev": true }, "ufo": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.5.3.tgz", - "integrity": "sha512-Y7HYmWaFwPUmkoQCUIAYpKqkOf+SbVj/2fJJZ4RJMCfZp0rTGwRbzQD+HghfnhKOjL9E01okqz+ncJskGYfBNw==", + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.5.4.tgz", + "integrity": "sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==", "dev": true }, "ultralight-s3": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/ultralight-s3/-/ultralight-s3-0.0.4.tgz", - "integrity": "sha512-/b0X2ruk+jI2VhjQK/s5lWQy+4LuobD9Yb/FcR3qD4DE+NCH97Zwi6PB+o5B/M/Fl1K8vJgAtOtEoVhaHgOHvw==" + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/ultralight-s3/-/ultralight-s3-0.0.5.tgz", + "integrity": "sha512-rCjL5ZJq2lgmWlofm8ShLNzShSB61dOTJ3IaRObDGjbaye8HVX6jxaxfx0UyVQlMS1tpochBxpynKumk+IZ5vw==" }, "underscore": { - "version": "1.13.6", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz", - "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==" + "version": "1.13.7", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.7.tgz", + "integrity": "sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g==" }, "undici": { "version": "5.28.4", @@ -8217,9 +8221,9 @@ } }, "undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "version": "6.18.2", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.18.2.tgz", + "integrity": "sha512-5ruQbENj95yDYJNS3TvcaxPMshV7aizdv/hWYjGIKoANWKjhWNBsr2YEuYZKodQulB1b8l7ILOuDQep3afowQQ==", "dev": true }, "unenv": { @@ -8276,25 +8280,26 @@ } }, "workerd": { - "version": "1.20240701.0", - "resolved": "https://registry.npmjs.org/workerd/-/workerd-1.20240701.0.tgz", - "integrity": "sha512-qSgNVqauqzNCij9MaJLF2c2ko3AnFioVSIxMSryGbRK+LvtGr9BKBt6JOxCb24DoJASoJDx3pe3DJHBVydUiBg==", + "version": "1.20240806.0", + "resolved": "https://registry.npmjs.org/workerd/-/workerd-1.20240806.0.tgz", + "integrity": "sha512-yyNtyzTMgVY0sgYijHBONqZFVXsOFGj2jDjS8MF/RbO2ZdGROvs4Hkc/9QnmqFWahE0STxXeJ1yW1yVotdF0UQ==", "dev": true, "requires": { - "@cloudflare/workerd-darwin-64": "1.20240701.0", - "@cloudflare/workerd-darwin-arm64": "1.20240701.0", - "@cloudflare/workerd-linux-64": "1.20240701.0", - "@cloudflare/workerd-linux-arm64": "1.20240701.0", - "@cloudflare/workerd-windows-64": "1.20240701.0" + "@cloudflare/workerd-darwin-64": "1.20240806.0", + "@cloudflare/workerd-darwin-arm64": "1.20240806.0", + "@cloudflare/workerd-linux-64": "1.20240806.0", + "@cloudflare/workerd-linux-arm64": "1.20240806.0", + "@cloudflare/workerd-windows-64": "1.20240806.0" } }, "wrangler": { - "version": "3.63.2", - "resolved": "https://registry.npmjs.org/wrangler/-/wrangler-3.63.2.tgz", - "integrity": "sha512-c7F46JtBGTIQehTOgfGbxfDMYgO9AjC70CXVSohxHiF9ajHz56HEV2k3aowhJJiP3MBB8sJMm8rdG10f5zUs+w==", + "version": "3.71.0", + "resolved": "https://registry.npmjs.org/wrangler/-/wrangler-3.71.0.tgz", + "integrity": "sha512-WHWBmU2z0p1hRtSIIP5HEeoR+6aNpuZR82HMXAwpfeiyijjfkMyt/TUs8gvIOKC3x3+ETQQIdVeX2al5KtrIxQ==", "dev": true, "requires": { "@cloudflare/kv-asset-handler": "0.3.4", + "@cloudflare/workers-shared": "0.1.0", "@esbuild-plugins/node-globals-polyfill": "^0.2.3", "@esbuild-plugins/node-modules-polyfill": "^0.2.2", "blake3-wasm": "^2.1.5", @@ -8302,7 +8307,7 @@ "date-fns": "^3.6.0", "esbuild": "0.17.19", "fsevents": "~2.3.2", - "miniflare": "3.20240701.0", + "miniflare": "3.20240806.0", "nanoid": "^3.3.3", "path-to-regexp": "^6.2.0", "resolve": "^1.22.8", @@ -8310,6 +8315,7 @@ "selfsigned": "^2.0.1", "source-map": "^0.6.1", "unenv": "npm:unenv-nightly@1.10.0-1717606461.a117952", + "workerd": "1.20240806.0", "xxhash-wasm": "^1.0.1" }, "dependencies": { diff --git a/package.json b/package.json index 5709ba4..f6b5455 100644 --- a/package.json +++ b/package.json @@ -36,7 +36,7 @@ }, "dependencies": { "avro-js": "^1.11.3", - "ultralight-s3": "^0.0.4" + "ultralight-s3": "^0.0.5" }, "keywords": [ "storage", From d0d1bf7b4a6a2062dd2b52bcfb97a4f3d95eccbc Mon Sep 17 00:00:00 2001 From: Jolly Good <1671375+good-lly@users.noreply.github.com> Date: Thu, 15 Aug 2024 17:13:38 +0200 Subject: [PATCH 08/18] rewrite into caching and using etags --- lib/lowstorage.js | 14 +- lib/lowstorage.js.map | 6 +- src/helpers.js | 30 +- src/lowstorage.js | 314 +++++++++++------ src/lowstorage.test.js | 745 ++++++++++++++++++++++------------------- 5 files changed, 642 insertions(+), 467 deletions(-) diff --git a/lib/lowstorage.js b/lib/lowstorage.js index 1bdf85d..543a41a 100644 --- a/lib/lowstorage.js +++ b/lib/lowstorage.js @@ -1,15 +1,15 @@ -var se=crypto.createHmac||(await import("node:crypto")).createHmac,ie=crypto.createHash||(await import("node:crypto")).createHash;typeof se>"u"&&typeof ie>"u"&&console.error("ultralight-S3 Module: Crypto functions are not available, please report the issue with necessary description: https://github.com/sentienhq/ultralight-s3/issues");var V="AWS4-HMAC-SHA256",B="aws4_request",F="s3",ue="2",g="UNSIGNED-PAYLOAD",de="application/octet-stream",z="application/xml",L="application/json",fe=["accessKeyId","secretAccessKey","sessionToken","password"],Q=5*1024*1024,E="x-amz-content-sha256",pe="x-amz-date",_e="host",Re="Authorization",O="Content-Type",b="Content-Length",X="etag",W="last-modified",d="ultralight-s3 Module: ",ge=`${d}accessKeyId must be a non-empty string`,Ee=`${d}secretAccessKey must be a non-empty string`,we=`${d}endpoint must be a non-empty string`,ye=`${d}bucketName must be a non-empty string`,Y=`${d}key must be a non-empty string`,x=`${d}uploadId must be a non-empty string`,J=`${d}parts must be a non-empty array`,Z=`${d}Each part must have a partNumber (number) and ETag (string)`,M=`${d}data must be a Buffer or string`,ee=`${d}prefix must be a string`,te=`${d}maxKeys must be a positive integer`,re=`${d}delimiter must be a string`,me={contents:!0},Oe=r=>`%${r.charCodeAt(0).toString(16).toUpperCase()}`,K=r=>encodeURIComponent(r).replace(/[!'()*]/g,Oe),m=r=>K(r).replace(/%2F/g,"/"),ae=class{constructor({accessKeyId:r,secretAccessKey:e,endpoint:t,bucketName:s,region:i="auto",maxRequestSizeInBytes:a=Q,requestAbortTimeout:n=void 0,logger:h=void 0}){this.getBucketName=()=>this.bucketName,this.setBucketName=o=>{this.bucketName=o},this.getRegion=()=>this.region,this.setRegion=o=>{this.region=o},this.getEndpoint=()=>this.endpoint,this.setEndpoint=o=>{this.endpoint=o},this.getMaxRequestSizeInBytes=()=>this.maxRequestSizeInBytes,this.setMaxRequestSizeInBytes=o=>{this.maxRequestSizeInBytes=o},this.getProps=()=>({accessKeyId:this.accessKeyId,secretAccessKey:this.secretAccessKey,region:this.region,bucket:this.bucketName,endpoint:this.endpoint,maxRequestSizeInBytes:this.maxRequestSizeInBytes,requestAbortTimeout:this.requestAbortTimeout,logger:this.logger}),this.setProps=o=>{this._validateConstructorParams(o.accessKeyId,o.secretAccessKey,o.bucketName,o.endpoint),this.accessKeyId=o.accessKeyId,this.secretAccessKey=o.secretAccessKey,this.region=o.region||"auto",this.bucketName=o.bucketName,this.endpoint=o.endpoint,this.maxRequestSizeInBytes=o.maxRequestSizeInBytes||Q,this.requestAbortTimeout=o.requestAbortTimeout,this.logger=o.logger},this._validateConstructorParams(r,e,t,s),this.accessKeyId=r,this.secretAccessKey=e,this.endpoint=t,this.bucketName=s,this.region=i,this.maxRequestSizeInBytes=a,this.requestAbortTimeout=n,this.logger=h}_validateConstructorParams(r,e,t,s){if(typeof r!="string"||r.trim().length===0)throw new TypeError(ge);if(typeof e!="string"||e.trim().length===0)throw new TypeError(Ee);if(typeof t!="string"||t.trim().length===0)throw new TypeError(we);if(typeof s!="string"||s.trim().length===0)throw new TypeError(ye)}_checkMethodHeadnGet(r){if(r!=="GET"&&r!=="HEAD")throw this._log("error",`${d}method must be either GET or HEAD`),new Error("method must be either GET or HEAD")}_checkKey(r){if(typeof r!="string"||r.trim().length===0)throw this._log("error",Y),new TypeError(Y)}_checkDelimiter(r){if(typeof r!="string"||r.trim().length===0)throw this._log("error",re),new TypeError(re)}_checkPrefix(r){if(typeof r!="string")throw this._log("error",ee),new TypeError(ee)}_checkMaxKeys(r){if(typeof r!="number"||r<=0)throw this._log("error",te),new TypeError(te)}_checkOpts(r){if(typeof r!="object")throw this._log("error",`${d}opts must be an object`),new TypeError(`${d}opts must be an object`)}_log(r,e,t={}){if(this.logger&&typeof this.logger[r]=="function"){let s=n=>typeof n!="object"||n===null?n:Object.keys(n).reduce((h,o)=>(fe.includes(o.toLowerCase())?h[o]="[REDACTED]":typeof n[o]=="object"&&n[o]!==null?h[o]=s(n[o]):h[o]=n[o],h),Array.isArray(n)?[]:{}),i=s(t),a={timestamp:new Date().toISOString(),level:r,message:e,...i,context:s({bucketName:this.bucketName,region:this.region,endpoint:this.endpoint,accessKeyId:this.accessKeyId?`${this.accessKeyId.substring(0,4)}...`:void 0})};this.logger[r](a)}}async getContentLength(r){this._checkKey(r);let e={[E]:g},t=m(r),{url:s,headers:i}=await this._sign("HEAD",t,{},e,""),a=(await this._sendRequest(s,"HEAD",i)).headers.get(b);return a?parseInt(a,10):0}async bucketExists(){let r={[E]:g},{url:e,headers:t}=await this._sign("HEAD","",{},r,""),s=await this._sendRequest(e,"HEAD",t);return!!(s.ok&&s.status===200)}async fileExists(r){this._checkKey(r);let e={[E]:g},t=m(r),{url:s,headers:i}=await this._sign("HEAD",t,{},e,"");try{let a=await fetch(s,{method:"HEAD",headers:i});return a.ok&&a.status===200?!0:(a.status===404||this._handleErrorResponse(a),!1)}catch(a){let n=a instanceof Error?a.message:String(a);throw this._log("error",`${d}Failed to check if file exists: ${n}`),new Error(`${d}Failed to check if file exists: ${n}`)}}async _sign(r,e,t,s,i){let a=new Date().toISOString().replace(/[:-]|\.\d{3}/g,""),n=typeof e=="string"&&e.length>0?new URL(e,this.endpoint):new URL(this.endpoint);n.pathname=`/${encodeURI(this.bucketName)}${n.pathname}`,s[E]=i?await k(i):g,s[pe]=a,s[_e]=n.host;let h=this._buildCanonicalHeaders(s),o=Object.keys(s).map(y=>y.toLowerCase()).sort().join(";"),u=await this._buildCanonicalRequest(r,n,t,h,o,i),p=await this._buildStringToSign(a,u),_=await this._calculateSignature(a,p),w=this._buildAuthorizationHeader(a,o,_);return s[Re]=w,{url:n.toString(),headers:s}}_buildCanonicalHeaders(r){return Object.entries(r).map(([e,t])=>`${e.toLowerCase()}:${String(t).trim()}`).sort().join(` -`)}async _buildCanonicalRequest(r,e,t,s,i,a){return[r,e.pathname,this._buildCanonicalQueryString(t),`${s} -`,i,a?await k(a):g].join(` -`)}async _buildStringToSign(r,e){let t=[r.slice(0,8),this.region,F,B].join("/");return[V,r,t,await k(e)].join(` -`)}async _calculateSignature(r,e){let t=await this._getSignatureKey(r.slice(0,8));return U(t,e,"hex")}_buildAuthorizationHeader(r,e,t){let s=[r.slice(0,8),this.region,F,B].join("/");return[`${V} Credential=${this.accessKeyId}/${s}`,`SignedHeaders=${e}`,`Signature=${t}`].join(", ")}async list(r="/",e="",t=1e3,s="GET",i={}){this._checkDelimiter(r),this._checkPrefix(e),this._checkMaxKeys(t),this._checkMethodHeadnGet(s),this._checkOpts(i),this._log("info",`Listing objects in ${e}`);let a={"list-type":ue,"max-keys":String(t),...i};e.length>0&&(a.prefix=e);let n={[O]:L,[E]:g},h=r==="/"?r:K(r),{url:o,headers:u}=await this._sign("GET",h,a,n,""),p=`${o}?${new URLSearchParams(a)}`,_=await this._sendRequest(p,"GET",u),w=await _.text();if(s==="HEAD"){let N=_.headers.get(b),C=_.headers.get(W),le=_.headers.get(X);return{size:N?+N:void 0,mtime:C?new Date(C):void 0,ETag:le||void 0}}let y=D(w),v=y.listBucketResult||y.error||y;return v.contents||v}async listMultiPartUploads(r="/",e="",t="GET",s={}){var i,a,n;this._checkDelimiter(r),this._checkPrefix(e),this._checkMethodHeadnGet(t),this._checkOpts(s),this._log("info",`Listing multipart uploads in ${e}`);let h={uploads:"",...s},o={[O]:L,[E]:g},u=r==="/"?r:K(r),{url:p,headers:_}=await this._sign("GET",u,h,o,""),w=`${p}?${new URLSearchParams(h)}`,y=await this._sendRequest(w,"GET",_),v=await y.text();if(t==="HEAD")return{size:+((i=y.headers.get(b))!==null&&i!==void 0?i:"0"),mtime:new Date((a=y.headers.get(W))!==null&&a!==void 0?a:""),ETag:(n=y.headers.get(X))!==null&&n!==void 0?n:""};let N=D(v),C=N.listMultipartUploadsResult||N.error||N;return C.uploads||C}async get(r,e={}){this._checkKey(r),this._log("info",`Getting object ${r}`);let t={[O]:L,[E]:g},s=m(r),{url:i,headers:a}=await this._sign("GET",s,e,t,"");return(await this._sendRequest(i,"GET",a)).text()}async getResponse(r,e=!0,t=0,s=this.maxRequestSizeInBytes,i={}){this._checkKey(r);let a=i,n={[O]:L,[E]:g,...e?{}:{range:`bytes=${t}-${s-1}`}},h=m(r),{url:o,headers:u}=await this._sign("GET",h,a,n,""),p=`${o}?${new URLSearchParams(a)}`;return this._sendRequest(p,"GET",u)}async put(r,e){if(this._checkKey(r),!(e instanceof Buffer||typeof e=="string"))throw this._log("error",M),new TypeError(M);this._log("info",`Uploading object ${r}`);let t=typeof e=="string"?Buffer.byteLength(e):e.length,s={[b]:t},i=m(r),{url:a,headers:n}=await this._sign("PUT",i,{},s,e);return await this._sendRequest(a,"PUT",n,e)}async getMultipartUploadId(r,e=de){if(this._checkKey(r),typeof e!="string")throw this._log("error",`${d}fileType must be a string`),new TypeError(`${d}fileType must be a string`);this._log("info",`Initiating multipart upload for object ${r}`);let t={uploads:""},s={[O]:e,[E]:g},i=m(r),{url:a,headers:n}=await this._sign("POST",i,t,s,""),h=`${a}?${new URLSearchParams(t)}`,o=await(await this._sendRequest(h,"POST",n)).text(),u=D(o);if(typeof u=="object"&&u!==null&&"error"in u&&typeof u.error=="object"&&u.error!==null&&"message"in u.error){let p=String(u.error.message);throw this._log("error",`${d}Failed to abort multipart upload: ${p}`),new Error(`${d}Failed to abort multipart upload: ${p}`)}if(typeof u=="object"&&u!==null){if(!u.initiateMultipartUploadResult||!u.initiateMultipartUploadResult.uploadId)throw this._log("error",`${d}Failed to create multipart upload: no uploadId in response`),new Error(`${d}Failed to create multipart upload: Missing upload ID in response`);return u.initiateMultipartUploadResult.uploadId}else throw this._log("error",`${d}Failed to create multipart upload: unexpected response format`),new Error(`${d}Failed to create multipart upload: Unexpected response format`)}async uploadPart(r,e,t,s,i={}){this._validateUploadPartParams(r,e,t,s,i);let a={uploadId:t,partNumber:s,...i},n={[b]:e.length},h=m(r),{url:o,headers:u}=await this._sign("PUT",h,a,n,e),p=`${o}?${new URLSearchParams(a)}`,_=(await this._sendRequest(p,"PUT",u,e)).headers.get("etag")||"";return{partNumber:s,ETag:_}}_validateUploadPartParams(r,e,t,s,i){if(this._checkKey(r),!(e instanceof Buffer||typeof e=="string"))throw this._log("error",M),new TypeError(M);if(typeof t!="string"||t.trim().length===0)throw this._log("error",x),new TypeError(x);if(!Number.isInteger(s)||s<=0)throw this._log("error",`${d}partNumber must be a positive integer`),new TypeError(`${d}partNumber must be a positive integer`);this._checkOpts(i)}async completeMultipartUpload(r,e,t){if(this._checkKey(r),typeof e!="string"||e.trim().length===0)throw this._log("error",x),new TypeError(x);if(!Array.isArray(t)||t.length===0)throw this._log("error",J),new TypeError(J);if(!t.every(w=>typeof w.partNumber=="number"&&typeof w.ETag=="string"))throw this._log("error",Z),new TypeError(Z);this._log("info",`Complete multipart upload ${e} for object ${r}`);let s={uploadId:e},i=this._buildCompleteMultipartUploadXml(t),a={[O]:z,[b]:Buffer.byteLength(i).toString(),[E]:await k(i)},n=m(r),{url:h,headers:o}=await this._sign("POST",n,s,a,i),u=`${h}?${new URLSearchParams(s)}`,p=await(await this._sendRequest(u,"POST",o,i)).text(),_=D(p);if(typeof _=="object"&&_!==null&&"error"in _&&typeof _.error=="object"&&_.error!==null&&"message"in _.error){let w=String(_.error.message);throw this._log("error",`${d}Failed to abort multipart upload: ${w}`),new Error(`${d}Failed to abort multipart upload: ${w}`)}return _.completeMultipartUploadResult}async abortMultipartUpload(r,e){if(this._checkKey(r),typeof e!="string"||e.trim().length===0)throw this._log("error",x),new TypeError(x);this._log("info",`Aborting multipart upload ${e} for object ${r}`);let t={uploadId:e},s={[O]:z,[E]:g};try{let i=m(r),{url:a,headers:n}=await this._sign("DELETE",i,t,s,""),h=`${a}?${new URLSearchParams(t)}`,o=await this._sendRequest(h,"DELETE",n);if(o.ok){let u=await o.text(),p=D(u);if(typeof p=="object"&&p!==null&&"error"in p&&typeof p.error=="object"&&p.error!==null&&"message"in p.error){let _=String(p.error.message);throw this._log("error",`${d}Failed to abort multipart upload: ${_}`),new Error(`${d}Failed to abort multipart upload: ${_}`)}return{status:"Aborted",key:r,uploadId:e,response:p}}else throw this._log("error",`${d}Abort request failed with status ${o.status}`),new Error(`${d}Abort request failed with status ${o.status}`)}catch(i){let a=i instanceof Error?i.message:String(i);throw this._log("error",`${d}Failed to abort multipart upload for key ${r}: ${a}`),new Error(`${d}Failed to abort multipart upload for key ${r}: ${a}`)}}_buildCompleteMultipartUploadXml(r){return` +var W="AWS4-HMAC-SHA256",j="aws4_request",H="s3",de="2",R="UNSIGNED-PAYLOAD",_e="application/octet-stream",Q="application/xml",I="application/json",fe=["accessKeyId","secretAccessKey","sessionToken","password"],w="x-amz-content-sha256",ge="x-amz-date",pe="host",Ee="Authorization",O="Content-Type",S="Content-Length",X="etag",Y="last-modified",_="ultralight-s3 Module: ",Re=`${_}accessKeyId must be a non-empty string`,we=`${_}secretAccessKey must be a non-empty string`,ye=`${_}endpoint must be a non-empty string`,me=`${_}bucketName must be a non-empty string`,J=`${_}key must be a non-empty string`,C=`${_}uploadId must be a non-empty string`,Z=`${_}parts must be a non-empty array`,ee=`${_}Each part must have a partNumber (number) and ETag (string)`,P=`${_}data must be a Buffer or string`,te=`${_}prefix must be a string`,re=`${_}maxKeys must be a positive integer`,se=`${_}delimiter must be a string`,ie=crypto.createHmac||(await import("node:crypto")).createHmac,ae=crypto.createHash||(await import("node:crypto")).createHash;typeof ie>"u"&&typeof ae>"u"&&console.error("ultralight-S3 Module: Crypto functions are not available, please report the issue with necessary description: https://github.com/sentienhq/ultralight-s3/issues");var Oe={contents:!0},Te=t=>`%${t.charCodeAt(0).toString(16).toUpperCase()}`,K=t=>encodeURIComponent(t).replace(/[!'()*]/g,Te),y=t=>K(t).replace(/%2F/g,"/"),oe=class{constructor({accessKeyId:t,secretAccessKey:e,endpoint:r,bucketName:s,region:i="auto",maxRequestSizeInBytes:o=5242880,requestAbortTimeout:n=void 0,logger:c=void 0}){this.getBucketName=()=>this.bucketName,this.setBucketName=a=>{this.bucketName=a},this.getRegion=()=>this.region,this.setRegion=a=>{this.region=a},this.getEndpoint=()=>this.endpoint,this.setEndpoint=a=>{this.endpoint=a},this.getMaxRequestSizeInBytes=()=>this.maxRequestSizeInBytes,this.setMaxRequestSizeInBytes=a=>{this.maxRequestSizeInBytes=a},this.sanitizeETag=a=>L(a),this.getProps=()=>({accessKeyId:this.accessKeyId,secretAccessKey:this.secretAccessKey,region:this.region,bucket:this.bucketName,endpoint:this.endpoint,maxRequestSizeInBytes:this.maxRequestSizeInBytes,requestAbortTimeout:this.requestAbortTimeout,logger:this.logger}),this.setProps=a=>{this._validateConstructorParams(a.accessKeyId,a.secretAccessKey,a.bucketName,a.endpoint),this.accessKeyId=a.accessKeyId,this.secretAccessKey=a.secretAccessKey,this.region=a.region||"auto",this.bucketName=a.bucketName,this.endpoint=a.endpoint,this.maxRequestSizeInBytes=a.maxRequestSizeInBytes||5242880,this.requestAbortTimeout=a.requestAbortTimeout,this.logger=a.logger},this._validateConstructorParams(t,e,r,s),this.accessKeyId=t,this.secretAccessKey=e,this.endpoint=r,this.bucketName=s,this.region=i,this.maxRequestSizeInBytes=o,this.requestAbortTimeout=n,this.logger=c}_validateConstructorParams(t,e,r,s){if(typeof t!="string"||t.trim().length===0)throw new TypeError(Re);if(typeof e!="string"||e.trim().length===0)throw new TypeError(we);if(typeof r!="string"||r.trim().length===0)throw new TypeError(ye);if(typeof s!="string"||s.trim().length===0)throw new TypeError(me)}_checkMethodHeadnGet(t){if(t!=="GET"&&t!=="HEAD")throw this._log("error",`${_}method must be either GET or HEAD`),new Error("method must be either GET or HEAD")}_checkKey(t){if(typeof t!="string"||t.trim().length===0)throw this._log("error",J),new TypeError(J)}_checkDelimiter(t){if(typeof t!="string"||t.trim().length===0)throw this._log("error",se),new TypeError(se)}_checkPrefix(t){if(typeof t!="string")throw this._log("error",te),new TypeError(te)}_checkMaxKeys(t){if(typeof t!="number"||t<=0)throw this._log("error",re),new TypeError(re)}_checkOpts(t){if(typeof t!="object")throw this._log("error",`${_}opts must be an object`),new TypeError(`${_}opts must be an object`)}_log(t,e,r={}){if(this.logger&&typeof this.logger[t]=="function"){let s=n=>typeof n!="object"||n===null?n:Object.keys(n).reduce((c,a)=>(fe.includes(a.toLowerCase())?c[a]="[REDACTED]":typeof n[a]=="object"&&n[a]!==null?c[a]=s(n[a]):c[a]=n[a],c),Array.isArray(n)?[]:{}),i=s(r),o={timestamp:new Date().toISOString(),level:t,message:e,...i,context:s({bucketName:this.bucketName,region:this.region,endpoint:this.endpoint,accessKeyId:this.accessKeyId?`${this.accessKeyId.substring(0,4)}...`:void 0})};this.logger[t](o)}}async getContentLength(t){this._checkKey(t);let e={[w]:R},r=y(t),{url:s,headers:i}=await this._sign("HEAD",r,{},e,""),o=(await this._sendRequest(s,"HEAD",i)).headers.get(S);return o?parseInt(o,10):0}async bucketExists(){let t={[w]:R},{url:e,headers:r}=await this._sign("HEAD","",{},t,""),s=await this._sendRequest(e,"HEAD",r);return!!(s.ok&&s.status===200)}async fileExists(t,e={}){this._checkKey(t);let{filteredOpts:r,conditionalHeaders:s}=this._filterIfHeaders(e),i={[w]:R,...s},o=y(t),{url:n,headers:c}=await this._sign("HEAD",o,r,i,"");try{let a=await this._sendRequest(n,"HEAD",c,"",[200,404,412,304]);return a.status===404?!1:a.status===412||a.status===304?null:a.ok&&a.status===200?!0:(this._handleErrorResponse(a),!1)}catch(a){let u=a instanceof Error?a.message:String(a);throw this._log("error",`${_}Failed to check if file exists: ${u}`),new Error(`${_}Failed to check if file exists: ${u}`)}}async _sign(t,e,r,s,i){let o=new Date().toISOString().replace(/[:-]|\.\d{3}/g,""),n=typeof e=="string"&&e.length>0?new URL(e,this.endpoint):new URL(this.endpoint);n.pathname=`/${encodeURI(this.bucketName)}${n.pathname}`,s[w]=i?await k(i):R,s[ge]=o,s[pe]=n.host;let c=this._buildCanonicalHeaders(s),a=Object.keys(s).map(m=>m.toLowerCase()).sort().join(";"),u=await this._buildCanonicalRequest(t,n,r,c,a,i),f=await this._buildStringToSign(o,u),g=await this._calculateSignature(o,f),E=this._buildAuthorizationHeader(o,a,g);return s[Ee]=E,{url:n.toString(),headers:s}}_buildCanonicalHeaders(t){return Object.entries(t).map(([e,r])=>`${e.toLowerCase()}:${String(r).trim()}`).sort().join(` +`)}async _buildCanonicalRequest(t,e,r,s,i,o){return[t,e.pathname,this._buildCanonicalQueryString(r),`${s} +`,i,o?await k(o):R].join(` +`)}async _buildStringToSign(t,e){let r=[t.slice(0,8),this.region,H,j].join("/");return[W,t,r,await k(e)].join(` +`)}async _calculateSignature(t,e){let r=await this._getSignatureKey(t.slice(0,8));return U(r,e,"hex")}_buildAuthorizationHeader(t,e,r){let s=[t.slice(0,8),this.region,H,j].join("/");return[`${W} Credential=${this.accessKeyId}/${s}`,`SignedHeaders=${e}`,`Signature=${r}`].join(", ")}_filterIfHeaders(t){let e={},r={},s=["if-match","if-none-match","if-modified-since","if-unmodified-since"];for(let[i,o]of Object.entries(t))s.includes(i)?r[i]=o:e[i]=o;return{filteredOpts:e,conditionalHeaders:r}}async list(t="/",e="",r=1e3,s="GET",i={}){this._checkDelimiter(t),this._checkPrefix(e),this._checkMaxKeys(r),this._checkMethodHeadnGet(s),this._checkOpts(i),this._log("info",`Listing objects in ${e}`);let o={"list-type":de,"max-keys":String(r),...i};e.length>0&&(o.prefix=e);let n={[O]:I,[w]:R},c=t==="/"?t:K(t),{url:a,headers:u}=await this._sign("GET",c,o,n,""),f=`${a}?${new URLSearchParams(o)}`,g=await this._sendRequest(f,"GET",u),E=await g.text();if(s==="HEAD"){let b=g.headers.get(S),D=g.headers.get(Y),ue=g.headers.get(X);return{size:b?+b:void 0,mtime:D?new Date(D):void 0,ETag:ue||void 0}}let m=x(E),M=m.listBucketResult||m.error||m;return M.contents||M}async listMultiPartUploads(t="/",e="",r="GET",s={}){var i,o,n;this._checkDelimiter(t),this._checkPrefix(e),this._checkMethodHeadnGet(r),this._checkOpts(s),this._log("info",`Listing multipart uploads in ${e}`);let c={uploads:"",...s},a={[O]:I,[w]:R},u=t==="/"?t:K(t),{url:f,headers:g}=await this._sign("GET",u,c,a,""),E=`${f}?${new URLSearchParams(c)}`,m=await this._sendRequest(E,"GET",g),M=await m.text();if(r==="HEAD")return{size:+((i=m.headers.get(S))!==null&&i!==void 0?i:"0"),mtime:new Date((o=m.headers.get(Y))!==null&&o!==void 0?o:""),ETag:(n=m.headers.get(X))!==null&&n!==void 0?n:""};let b=x(M),D=b.listMultipartUploadsResult||b.error||b;return D.uploads||D}async get(t,e={}){this._checkKey(t),this._log("info",`Getting object ${t}`);let{filteredOpts:r,conditionalHeaders:s}=this._filterIfHeaders(e),i={[O]:I,[w]:R,...s},o=y(t),{url:n,headers:c}=await this._sign("GET",o,r,i,""),a=await this._sendRequest(n,"GET",c,"",[200,404,412,304]);if(a.status===404||a.status===412||a.status===304)return this._log("error",`Failed to get object. Status: ${a.status}`),null;if(!a.ok)throw this._log("error",`Failed to get object. Status: ${a.status}`),new Error(`Failed to get object. Status: ${a.status}`);return a.text()}async getObjectWithETag(t,e={}){this._checkKey(t),this._log("info",`Getting object ${t}`);let{filteredOpts:r,conditionalHeaders:s}=this._filterIfHeaders(e),i={[O]:I,[w]:R,...s},o=y(t),{url:n,headers:c}=await this._sign("GET",o,r,i,"");try{let a=await this._sendRequest(n,"GET",c,"",[200,404,412,304]);if(a.status===404||a.status===412||a.status===304)return this._log("error",`Failed to get object. Status: ${a.status}`),{etag:null,data:null};if(!a.ok)throw this._log("error",`Failed to get object. Status: ${a.status}`),new Error(`Failed to get object. Status: ${a.status}`);let u=a.headers.get("etag");if(!u)throw new Error("ETag not found in response headers");let f=await a.text();return{etag:L(u),data:f}}catch(a){throw this._log("error",`Error getting object ${t} with ETag: ${a}`),a}}async getEtag(t,e={}){this._checkKey(t),this._log("info",`Getting etag object ${t}`);let{filteredOpts:r,conditionalHeaders:s}=this._filterIfHeaders(e),i={[O]:I,[w]:R,...s},o=y(t),{url:n,headers:c}=await this._sign("HEAD",o,r,i,""),a=await this._sendRequest(n,"HEAD",c,"",[200,412,304]);if(this._log("info",`Response status: ${a.status,a.statusText}`),a.status===412||a.status===304)return null;let u=a.headers.get("etag");if(!u)throw this._log("error","ETag not found in response headers"),new Error("ETag not found in response headers");return L(u)}async getResponse(t,e=!0,r=0,s=this.maxRequestSizeInBytes,i={}){this._checkKey(t);let{filteredOpts:o,conditionalHeaders:n}=this._filterIfHeaders({...i}),c={[O]:I,[w]:R,...e?{}:{range:`bytes=${r}-${s-1}`},...n},a=y(t),{url:u,headers:f}=await this._sign("GET",a,o,c,""),g=`${u}?${new URLSearchParams(o)}`;return this._sendRequest(g,"GET",f)}async put(t,e){if(this._checkKey(t),!(e instanceof Buffer||typeof e=="string"))throw this._log("error",P),new TypeError(P);this._log("info",`Uploading object ${t}`);let r=typeof e=="string"?Buffer.byteLength(e):e.length,s={[S]:r},i=y(t),{url:o,headers:n}=await this._sign("PUT",i,{},s,e);return await this._sendRequest(o,"PUT",n,e)}async getMultipartUploadId(t,e=_e){if(this._checkKey(t),typeof e!="string")throw this._log("error",`${_}fileType must be a string`),new TypeError(`${_}fileType must be a string`);this._log("info",`Initiating multipart upload for object ${t}`);let r={uploads:""},s={[O]:e,[w]:R},i=y(t),{url:o,headers:n}=await this._sign("POST",i,r,s,""),c=`${o}?${new URLSearchParams(r)}`,a=await(await this._sendRequest(c,"POST",n)).text(),u=x(a);if(typeof u=="object"&&u!==null&&"error"in u&&typeof u.error=="object"&&u.error!==null&&"message"in u.error){let f=String(u.error.message);throw this._log("error",`${_}Failed to abort multipart upload: ${f}`),new Error(`${_}Failed to abort multipart upload: ${f}`)}if(typeof u=="object"&&u!==null){if(!u.initiateMultipartUploadResult||!u.initiateMultipartUploadResult.uploadId)throw this._log("error",`${_}Failed to create multipart upload: no uploadId in response`),new Error(`${_}Failed to create multipart upload: Missing upload ID in response`);return u.initiateMultipartUploadResult.uploadId}else throw this._log("error",`${_}Failed to create multipart upload: unexpected response format`),new Error(`${_}Failed to create multipart upload: Unexpected response format`)}async uploadPart(t,e,r,s,i={}){this._validateUploadPartParams(t,e,r,s,i);let o={uploadId:r,partNumber:s,...i},n={[S]:e.length},c=y(t),{url:a,headers:u}=await this._sign("PUT",c,o,n,e),f=`${a}?${new URLSearchParams(o)}`,g=await this._sendRequest(f,"PUT",u,e),E=L(g.headers.get("etag")||"");return{partNumber:s,ETag:E}}_validateUploadPartParams(t,e,r,s,i){if(this._checkKey(t),!(e instanceof Buffer||typeof e=="string"))throw this._log("error",P),new TypeError(P);if(typeof r!="string"||r.trim().length===0)throw this._log("error",C),new TypeError(C);if(!Number.isInteger(s)||s<=0)throw this._log("error",`${_}partNumber must be a positive integer`),new TypeError(`${_}partNumber must be a positive integer`);this._checkOpts(i)}async completeMultipartUpload(t,e,r){if(this._checkKey(t),typeof e!="string"||e.trim().length===0)throw this._log("error",C),new TypeError(C);if(!Array.isArray(r)||r.length===0)throw this._log("error",Z),new TypeError(Z);if(!r.every(E=>typeof E.partNumber=="number"&&typeof E.ETag=="string"))throw this._log("error",ee),new TypeError(ee);this._log("info",`Complete multipart upload ${e} for object ${t}`);let s={uploadId:e},i=this._buildCompleteMultipartUploadXml(r),o={[O]:Q,[S]:Buffer.byteLength(i).toString(),[w]:await k(i)},n=y(t),{url:c,headers:a}=await this._sign("POST",n,s,o,i),u=`${c}?${new URLSearchParams(s)}`,f=await(await this._sendRequest(u,"POST",a,i)).text(),g=x(f);if(typeof g=="object"&&g!==null&&"error"in g&&typeof g.error=="object"&&g.error!==null&&"message"in g.error){let E=String(g.error.message);throw this._log("error",`${_}Failed to abort multipart upload: ${E}`),new Error(`${_}Failed to abort multipart upload: ${E}`)}return g.completeMultipartUploadResult}async abortMultipartUpload(t,e){if(this._checkKey(t),typeof e!="string"||e.trim().length===0)throw this._log("error",C),new TypeError(C);this._log("info",`Aborting multipart upload ${e} for object ${t}`);let r={uploadId:e},s={[O]:Q,[w]:R};try{let i=y(t),{url:o,headers:n}=await this._sign("DELETE",i,r,s,""),c=`${o}?${new URLSearchParams(r)}`,a=await this._sendRequest(c,"DELETE",n);if(a.ok){let u=await a.text(),f=x(u);if(typeof f=="object"&&f!==null&&"error"in f&&typeof f.error=="object"&&f.error!==null&&"message"in f.error){let g=String(f.error.message);throw this._log("error",`${_}Failed to abort multipart upload: ${g}`),new Error(`${_}Failed to abort multipart upload: ${g}`)}return{status:"Aborted",key:t,uploadId:e,response:f}}else throw this._log("error",`${_}Abort request failed with status ${a.status}`),new Error(`${_}Abort request failed with status ${a.status}`)}catch(i){let o=i instanceof Error?i.message:String(i);throw this._log("error",`${_}Failed to abort multipart upload for key ${t}: ${o}`),new Error(`${_}Failed to abort multipart upload for key ${t}: ${o}`)}}_buildCompleteMultipartUploadXml(t){return` - ${r.map(e=>` + ${t.map(e=>` ${e.partNumber} ${e.ETag} `).join("")} - `}async delete(r){this._checkKey(r),this._log("info",`Deleting object ${r}`);let e={[O]:L,[E]:g},t=m(r),{url:s,headers:i}=await this._sign("DELETE",t,{},e,"");return(await this._sendRequest(s,"DELETE",i)).text()}async _sendRequest(r,e,t,s){this._log("info",`Sending ${e} request to ${r}, headers: ${JSON.stringify(t)}`);let i=await fetch(r,{method:e,headers:t,body:s,signal:this.requestAbortTimeout!==void 0?AbortSignal.timeout(this.requestAbortTimeout):void 0});return i.ok||await this._handleErrorResponse(i),i}async _handleErrorResponse(r){let e=await r.text(),t=r.headers.get("x-amz-error-code")||"Unknown",s=r.headers.get("x-amz-error-message")||r.statusText;throw this._log("error",`${d}Request failed with status ${r.status}: ${t} - ${s},err body: ${e}`),new Error(`${d}Request failed with status ${r.status}: ${t} - ${s}, err body: ${e}`)}_buildCanonicalQueryString(r){return Object.keys(r).length<1?"":Object.keys(r).sort().map(e=>`${encodeURIComponent(e)}=${encodeURIComponent(r[e])}`).join("&")}async _getSignatureKey(r){let e=await U(`AWS4${this.secretAccessKey}`,r),t=await U(e,this.region),s=await U(t,F);return U(s,B)}},k=async r=>{let e=ie("sha256");return e.update(r),e.digest("hex")},U=async(r,e,t)=>{let s=se("sha256",r);return s.update(e),s.digest(t)},D=r=>{let e=a=>a.replace(/"/g,'"').replace(/'/g,"'").replace(/</g,"<").replace(/>/g,">").replace(/&/g,"&"),t={},s=/<(\w)([-\w]+)(?:\/|[^>]*>((?:(?!<\1)[\s\S])*)<\/\1\2)>/gm,i;for(;i=s.exec(r);){let[,a,n,h]=i,o=a.toLowerCase()+n,u=h!=null?D(h):!0;typeof u=="string"?t[o]=e(u):Array.isArray(t[o])?t[o].push(u):t[o]=t[o]!=null?[t[o],u]:me[o]?[u]:u}return Object.keys(t).length?t:e(r)};import he from"avro-js";var c={MISSING_ARGUMENT:"MISSING_ARGUMENT",COLLECTION_EXISTS:"COLLECTION_EXISTS",CREATE_COLLECTION_ERROR:"CREATE_COLLECTION_ERROR",RENAME_COLLECTION_ERROR:"RENAME_COLLECTION_ERROR",REMOVE_COLLECTION_ERROR:"REMOVE_COLLECTION_ERROR",UPDATE_COLLECTION_SCHEMA_ERROR:"UPDATE_COLLECTION_SCHEMA_ERROR",COLLECTION_NOT_FOUND:"COLLECTION_NOT_FOUND",SCHEMA_VALIDATION_ERROR:"SCHEMA_VALIDATION_ERROR",DOCUMENT_VALIDATION_ERROR:"DOCUMENT_VALIDATION_ERROR",S3_OPERATION_ERROR:"S3_OPERATION_ERROR",FIND_ERROR:"FIND_ERROR",FIND_ONE_ERROR:"FIND_ONE_ERROR",SAVE_DATA_ERROR:"SAVE_DATA_ERROR",INSERT_ERROR:"INSERT_ERROR",UPDATE_ERROR:"UPDATE_ERROR",UPDATE_ONE_ERROR:"UPDATE_ONE_ERROR",DELETE_ERROR:"DELETE_ERROR",COUNT_ERROR:"COUNT_ERROR",UNKNOWN_ERROR:"UNKNOWN_ERROR"},f=class extends Error{constructor(e,t=c.UNKNOWN_ERROR){super(`lowstorageError: ${e} :: code: ${t}`),this.name=this.constructor.name,this.code=t,Error.captureStackTrace(this,this.constructor)}},P=class extends f{constructor(e){super(`Collection ${e} not found`,c.COLLECTION_NOT_FOUND)}},$=class extends f{constructor(e){super(e,c.SCHEMA_VALIDATION_ERROR)}},T=class extends f{constructor(e){super(e,c.DOCUMENT_VALIDATION_ERROR)}},R=class extends f{constructor(e,t){super(`S3 ${t} operation failed: ${e}`,c.S3_OPERATION_ERROR)}};import{randomUUID as j}from"node:crypto";var S=(r,e)=>Object.keys(e).every(t=>r[t]===e[t]),oe=async()=>typeof j<"u"&&typeof j=="function"?j():typeof crypto<"u"&&typeof crypto=="object"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(r){var e=Math.random()*16|0,t=r==="x"?e:e&3|8;return t.toString(16)}),ne=(r,e="SubAutoGenerated")=>{switch(typeof r){case"string":return $e(r)?{type:"string",name:"_id",size:16,logicalType:"UUID"}:"string";case"number":return Number.isInteger(r)?"int":"float";case"boolean":return"boolean";case"object":return r===null?"null":Array.isArray(r)?{type:"array",items:ne(r[0])}:q(r,e);default:return"string"}},q=(r,e="AutoGenerated")=>{Array.isArray(r)&&(r=r[0]);let t=Object.entries(r).map(([s,i])=>({name:s,type:ne(i,`${e}.${s}`)}));return{type:"record",name:e,fields:t}},$e=r=>/^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i.test(r);var l="lowstorage",I="/",G="lowstorage",A=".avro",Te=1024*1024,Ie=5*Te,ce=class{constructor(e={accessKeyId:void 0,secretAccessKey:void 0,endpoint:void 0,bucketName:void 0,region:"auto",logger:null,dirPrefix:G}){this._checkArgs(e),this._schemas=new Map,this._s3=new ae(e),this._dirPrefix=e.dirPrefix||G,this._avro=he}_checkArgs=e=>{let t=["accessKeyId","secretAccessKey","endpoint","bucketName"];for(let s of t)if(!e[s])throw new f(`${l}: ${s} is required`,c.MISSING_ARGUMENT)};_hasColName=e=>{if(e.trim()===""||e===null||typeof e>"u")throw new f(`${l}: Collection name is required`,c.MISSING_ARGUMENT)};async listCollections(){try{let e=await this._s3.list(I,this._dirPrefix);return typeof e=="object"&&e!==null&&e.keyCount==="0"?[]:e.map(t=>t.key.slice(this._dirPrefix.length+1,-A.length))}catch(e){throw new R(`${l}: ${e.message}`,c.S3_OPERATION_ERROR)}}async collectionExists(e){try{return this._hasColName(e),await this._s3.fileExists(`${this._dirPrefix}${I}${e}${A}`)}catch(t){if(t.message.includes("Not Found"))return!1;throw new f(`${l}: ${t.message}`,c.COLLECTION_NOT_FOUND)}}async createCollection(e,t,s=[]){try{if(this._hasColName(e),!await this.collectionExists(e))return await this._s3.put(`${this._dirPrefix}${I}${e}${A}`,s.length>0?s:""),this.collection(e,t);throw new f(`${l}: Collection ${e} already exists`,c.COLLECTION_EXISTS)}catch(i){throw i instanceof f?i:new f(`${l}: ${i.message}`,c.CREATE_COLLECTION_ERROR)}}async removeCollection(e){try{this._hasColName(e);let t=`${this._dirPrefix}${I}${e}${A}`;if(await this.collectionExists(e)){await this._s3.delete(t);let i=await this.collectionExists(e);if(typeof i=="boolean")return!i;throw new R(`${l}: Failed to delete collection ${e}`,c.S3_OPERATION_ERROR)}throw new f(`${l}: Collection ${e} does not exist`,c.REMOVE_COLLECTION_ERROR)}catch(t){throw t instanceof R?t:new f(`${l}: Failed to remove collection: ${t.message}`,c.REMOVE_COLLECTION_ERROR)}}async renameCollection(e,t){try{if(this._hasColName(e),this._hasColName(t),!await this.collectionExists(e))throw new P(`${l}: Collection ${e} does not exist`,c.COLLECTION_NOT_FOUND);let i=await this.collection(e),a=await i._loadDataBuffer();if(!await this.removeCollection(e))throw new f(`${l}: Failed to rename collection`,c.RENAME_COLLECTION_ERROR);return await this.createCollection(t,i._avroType,a)}catch(s){throw s instanceof f?s:new f(`${l}: Rename collection failed: ${s.message}`,c.RENAME_COLLECTION_ERROR)}}async collection(e,t,s=!0){try{this._hasColName(e);let i=`${this._dirPrefix}${I}${e}${A}`,a,n=await this._s3.fileExists(i);if(!n&&!s)throw new f(`${l}: Collection ${e} does not exist`,c.COLLECTION_NOT_FOUND);if(t)a=this._avro.parse(t),this._schemas.set(e,a),!n&&s&&await this._s3.put(i,"");else if(this._schemas.has(e))a=this._schemas.get(e);else if(n){let h=await this._s3.get(i);a=this._avro.parse(h),this._schemas.set(e,a)}else s&&await this._s3.put(i,"");return new H(e,this._s3,a,this._dirPrefix)}catch(i){throw i.message.includes("unknown type")?new $(`${l}: Schema input is invalid: ${i.message}`,c.SCHEMA_VALIDATION_ERROR):new f(`${l}: ${i.message}`,c.COLLECTION_NOT_FOUND)}}s3=()=>this._s3},H=class{constructor(e,t,s=void 0,i=G){this._colName=e,this._s3=t,this._avro=he,this._avroType=s,this._dirPrefix=i}async insert(e,t=void 0){try{if(e==null)throw new f(`${l}: Document is required for insert`,c.INSERT_ERROR);if(typeof e!="object"&&!Array.isArray(e))throw new T(`${l}: Document must be an object or an array`,c.DOCUMENT_VALIDATION_ERROR);let s=Array.isArray(e)?e:[e],i=t?this._avro.parse(t):this._avroType||this._avro.parse(q(e));if(!i)throw new $(`${l}: Schema is required - Pass a schema to the insert method`,c.SCHEMA_VALIDATION_ERROR);this._avroType=i;let a=this._avro.parse({type:"array",items:this._avroType}),n=await this._loadDataBuffer(),h=n.length>0?a.fromBuffer(n):[];for(let u of s){if(typeof u!="object"||u===null)throw new T(`${l}: Invalid input: input must be an object or an array of objects`,c.DOCUMENT_VALIDATION_ERROR);if(u._id=u._id||await oe(),!this._avroType.isValid(u))throw new T(`${l}: Invalid document or schema`,c.DOCUMENT_VALIDATION_ERROR);h.push(u)}if(!await this._saveDataBuffer(a.toBuffer(h)))throw new R(`${l}: Failed to insert document`,c.S3_OPERATION_ERROR);return s}catch(s){throw s.message.includes("unknown type")?new $(`${l}: Schema input is invalid: ${s.message}`,c.SCHEMA_VALIDATION_ERROR):s instanceof f?s:new f(`${l} Insert operation failed: ${s.message}`,c.INSERT_ERROR)}}async _loadDataBuffer(){try{let e=`${this._dirPrefix}${I}${this._colName}${A}`,t=this._s3.getMaxRequestSizeInBytes()||Ie,s=await this._s3.get(e);if(s.length-1)return Buffer.from("");throw new R(`${l}: Failed to load data buffer: ${e.message}`,c.S3_OPERATION_ERROR)}}async _saveDataBuffer(e){try{let t=`${this._dirPrefix}${I}${this._colName}${A}`;if((await this._s3.put(t,e)).status!==200)throw new R(`${l}: Failed to save data`,c.S3_OPERATION_ERROR);return!0}catch(t){throw t instanceof R?t:new f(`${l}: ${t.message}`,c.SAVE_DATA_ERROR)}}async find(e={},t={}){try{if(e==null)throw new f(`${l}: Query is required for update`,c.MISSING_ARGUMENT);let s=await this._loadDataBuffer();if(s.length===0)return[];let i=this._avro.parse({type:"array",items:this._avroType}),a=s.length>0?i.fromBuffer(s):[],n=parseInt(t.skip,10)||0,h=parseInt(t.limit,10)?n+parseInt(t.limit,10):void 0;return a.filter(u=>S(u,e)).slice(n,h)}catch(s){throw new f(`${l}: Find operation failed: ${s.message}`,c.FIND_ERROR)}}async findOne(e={}){try{if(e==null)throw new f(`${l}: Query is required for update`,c.MISSING_ARGUMENT);return(await this.find(e))[0]||[]}catch(t){throw new f(`${l}: FindOne operation failed: ${t.message}`,c.FIND_ONE_ERROR)}}async update(e={},t={}){try{if(e==null||t===void 0||t===null)throw new f(`${l}: Query is required for update`,c.MISSING_ARGUMENT);if(!this._avroType)throw new $(`${l}: Schema is not defined for this collection`,c.SCHEMA_VALIDATION_ERROR);let s=await this._loadDataBuffer();if(s.length===0)return 0;let i=this._avro.parse({type:"array",items:this._avroType}),a=s.length>0?i.fromBuffer(s):[],n=0;for(let h=0;h0&&!await this._saveDataBuffer(i.toBuffer(a)))throw new R(`${l}: Failed to update document`,c.S3_OPERATION_ERROR);return n}catch(s){throw s instanceof R?s:new f(`${l}: Update operation failed: ${s.message}`,c.UPDATE_ERROR)}}async updateOne(e={},t={}){try{if(e==null||t===void 0||t===null)throw new f(`${l}: Query is required`,c.MISSING_ARGUMENT);if(!this._avroType)throw new $(`${l}: Schema is not defined for this collection`,c.SCHEMA_VALIDATION_ERROR);let s=await this._loadDataBuffer();if(s.length===0)return 0;let i=this._avro.parse({type:"array",items:this._avroType}),a=s.length>0?i.fromBuffer(s):[],n=a.findIndex(h=>S(h,e));if(n!==-1){let h={...a[n],...t};if(!this._avroType.isValid(h))throw new T(`${l}: Invalid document or schema`,c.DOCUMENT_VALIDATION_ERROR);if(a[n]=h,!await this._saveDataBuffer(i.toBuffer(a)))throw new R(`${l}: Failed to update document`,c.S3_OPERATION_ERROR);return 1}return 0}catch(s){throw s instanceof f?s:new f(`${l}: UpdateOne operation failed: ${s.message}`,c.UPDATE_ONE_ERROR)}}async delete(e={}){try{if(e==null)throw new f(`${l}: Query is required`,c.MISSING_ARGUMENT);let t=await this._loadDataBuffer();if(t.length===0)return 0;let s=this._avro.parse({type:"array",items:this._avroType}),i=t.length>0?s.fromBuffer(t):[],a=i.length,n=i.filter(o=>!S(o,e));if(!await this._saveDataBuffer(s.toBuffer(n)))throw new R(`${l}: Failed to delete document`,c.S3_OPERATION_ERROR);return a-n.length}catch(t){throw t instanceof R?t:new f(`${l}: Delete operation failed: ${t.message}`,c.DELETE_ERROR)}}async deleteAll(){try{let e=await this._loadDataBuffer();if(e.length===0)return 0;let t=this._avro.parse({type:"array",items:this._avroType}),s=e.length>0?t.fromBuffer(e):[],i=s.length,a=s.filter(h=>!S(h,{}));if(!await this._saveDataBuffer(t.toBuffer(a)))throw new R(`${l}: Failed to delete document`,c.S3_OPERATION_ERROR);return i-a.length}catch(e){throw e instanceof R?e:new f(`${l}: Delete operation failed: ${e.message}`,c.DELETE_ERROR)}}async count(e={}){try{return(await this.find(e)).length}catch(t){throw new f(`${l}: Count operation failed: ${t.message}`,c.COUNT_ERROR)}}};export{ce as lowstorage,f as lowstorageError,c as lowstorage_ERROR_CODES}; + `}async delete(t){this._checkKey(t),this._log("info",`Deleting object ${t}`);let e={[O]:I,[w]:R},r=y(t),{url:s,headers:i}=await this._sign("DELETE",r,{},e,""),o=await this._sendRequest(s,"DELETE",i);return o.status===204||o.status===200}async _sendRequest(t,e,r,s,i=[]){this._log("info",`Sending ${e} request to ${t}, headers: ${JSON.stringify(r)}`);let o=await fetch(t,{method:e,headers:r,body:["GET","HEAD"].includes(e)?void 0:s,signal:this.requestAbortTimeout!==void 0?AbortSignal.timeout(this.requestAbortTimeout):void 0});return!o.ok&&!i.includes(o.status)&&await this._handleErrorResponse(o),o}async _handleErrorResponse(t){let e=await t.text(),r=t.headers.get("x-amz-error-code")||"Unknown",s=t.headers.get("x-amz-error-message")||t.statusText;throw this._log("error",`${_}Request failed with status ${t.status}: ${r} - ${s},err body: ${e}`),new Error(`${_}Request failed with status ${t.status}: ${r} - ${s}, err body: ${e}`)}_buildCanonicalQueryString(t){return Object.keys(t).length<1?"":Object.keys(t).sort().map(e=>`${encodeURIComponent(e)}=${encodeURIComponent(t[e])}`).join("&")}async _getSignatureKey(t){let e=await U(`AWS4${this.secretAccessKey}`,t),r=await U(e,this.region),s=await U(r,H);return U(s,j)}},k=async t=>{let e=ae("sha256");return e.update(t),e.digest("hex")},U=async(t,e,r)=>{let s=ie("sha256",t);return s.update(e),s.digest(r)},L=t=>{let e={'"':"",""":"",""":"",""":"",""":""};return t.replace(/^("|"|")|("|"|")$/g,r=>e[r])},x=t=>{let e=o=>o.replace(/"/g,'"').replace(/'/g,"'").replace(/</g,"<").replace(/>/g,">").replace(/&/g,"&"),r={},s=/<(\w)([-\w]+)(?:\/|[^>]*>((?:(?!<\1)[\s\S])*)<\/\1\2)>/gm,i;for(;i=s.exec(t);){let[,o,n,c]=i,a=o.toLowerCase()+n,u=c!=null?x(c):!0;typeof u=="string"?r[a]=L(e(u)):Array.isArray(r[a])?r[a].push(u):r[a]=r[a]!=null?[r[a],u]:Oe[a]?[u]:u}return Object.keys(r).length?r:e(t)};import ce from"avro-js";var l={MISSING_ARGUMENT:"MISSING_ARGUMENT",COLLECTION_EXISTS:"COLLECTION_EXISTS",CREATE_COLLECTION_ERROR:"CREATE_COLLECTION_ERROR",RENAME_COLLECTION_ERROR:"RENAME_COLLECTION_ERROR",REMOVE_COLLECTION_ERROR:"REMOVE_COLLECTION_ERROR",UPDATE_COLLECTION_SCHEMA_ERROR:"UPDATE_COLLECTION_SCHEMA_ERROR",COLLECTION_NOT_FOUND:"COLLECTION_NOT_FOUND",SCHEMA_VALIDATION_ERROR:"SCHEMA_VALIDATION_ERROR",DOCUMENT_VALIDATION_ERROR:"DOCUMENT_VALIDATION_ERROR",S3_OPERATION_ERROR:"S3_OPERATION_ERROR",FIND_ERROR:"FIND_ERROR",FIND_ONE_ERROR:"FIND_ONE_ERROR",SAVE_DATA_ERROR:"SAVE_DATA_ERROR",INSERT_ERROR:"INSERT_ERROR",UPDATE_ERROR:"UPDATE_ERROR",UPDATE_ONE_ERROR:"UPDATE_ONE_ERROR",DELETE_ERROR:"DELETE_ERROR",COUNT_ERROR:"COUNT_ERROR",UNKNOWN_ERROR:"UNKNOWN_ERROR"},d=class extends Error{constructor(e,r=l.UNKNOWN_ERROR){super(`lowstorageError: ${e} :: code: ${r}`),this.name=this.constructor.name,this.code=r,Error.captureStackTrace(this,this.constructor)}},F=class extends d{constructor(e){super(`Collection ${e} not found`,l.COLLECTION_NOT_FOUND)}},$=class extends d{constructor(e){super(e,l.SCHEMA_VALIDATION_ERROR)}},T=class extends d{constructor(e){super(e,l.DOCUMENT_VALIDATION_ERROR)}},p=class extends d{constructor(e,r){super(`S3 ${r} operation failed: ${e}`,l.S3_OPERATION_ERROR)}};import{randomUUID as q}from"node:crypto";var v=(t,e)=>Object.keys(e).every(r=>t[r]===e[r]),ne=async()=>typeof q<"u"&&typeof q=="function"?q():typeof crypto<"u"&&typeof crypto=="object"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(t){var e=Math.random()*16|0,r=t==="x"?e:e&3|8;return r.toString(16)}),le=(t,e="SubAutoGenerated")=>{switch(typeof t){case"string":return Ie(t)?{type:"string",name:"_id",size:16,logicalType:"UUID"}:"string";case"number":return Number.isInteger(t)?"int":"float";case"boolean":return"boolean";case"object":return t===null?"null":Array.isArray(t)?{type:"array",items:le(t[0])}:G(t,e);default:return"string"}},$e=t=>{let e={name:"_id",type:"string",size:16,logicalType:"UUID"};return t.type==="record"?t.fields.some(s=>s.name==="_id")||t.fields.unshift(e):t.type==="array"&&t.items.type==="record"&&(t.items.fields.some(s=>s.name==="_id")||t.items.fields.unshift(e)),t},G=(t,e="AutoGenerated")=>{Array.isArray(t)&&(t=t[0]);let r=Object.entries(t).map(([i,o])=>({name:i,type:le(o,`${e}.${i}`)}));return $e({type:"record",name:e,fields:r})},Ie=t=>/^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i.test(t);var h="lowstorage",A="/",B="lowstorage",N=".avro",Ae=1024*1024,Ne=5*Ae,V=(t=l.DOCUMENT_VALIDATION_ERROR)=>{throw new T(`${h}: Invalid document or schema`,t)},he=class{constructor(e={accessKeyId:void 0,secretAccessKey:void 0,endpoint:void 0,bucketName:void 0,region:"auto",logger:null,dirPrefix:B}){this._checkArgs(e),this._schemas=new Map,this._s3=new oe(e),this._dirPrefix=e.dirPrefix||B,this._avro=ce}_checkArgs=e=>{let r=["accessKeyId","secretAccessKey","endpoint","bucketName"];for(let s of r)if(!e[s])throw new d(`${h}: ${s} is required`,l.MISSING_ARGUMENT)};_hasColName=e=>{if(e.trim()===""||e===null||typeof e>"u")throw new d(`${h}: Collection name is required`,l.MISSING_ARGUMENT)};async listCollections(){try{let e=await this._s3.list(A,this._dirPrefix);return typeof e=="object"&&e!==null&&e.keyCount==="0"?[]:e.map(r=>r.key.slice(this._dirPrefix.length+1,-N.length))}catch(e){throw new p(`${h}: ${e.message}`,l.S3_OPERATION_ERROR)}}async collectionExists(e){try{return this._hasColName(e),await this._s3.fileExists(`${this._dirPrefix}${A}${e}${N}`)}catch(r){if(r.message.includes("Not Found"))return!1;throw new d(`${h}: ${r.message}`,l.COLLECTION_NOT_FOUND)}}async createCollection(e,r,s=[]){try{if(this._hasColName(e),!await this.collectionExists(e))return await this._s3.put(`${this._dirPrefix}${A}${e}${N}`,s.length>0?s:""),this.collection(e,r);throw new d(`${h}: Collection ${e} already exists`,l.COLLECTION_EXISTS)}catch(i){throw i instanceof d?i:new d(`${h}: ${i.message}`,l.CREATE_COLLECTION_ERROR)}}async removeCollection(e){try{this._hasColName(e);let r=`${this._dirPrefix}${A}${e}${N}`;if(await this.collectionExists(e)){await this._s3.delete(r);let i=await this.collectionExists(e);if(typeof i=="boolean"){if(!i)return this._schemas.delete(e),!0;throw new d(`${h}: Failed to delete collection ${e}`,l.S3_OPERATION_ERROR)}throw new p(`${h}: Failed to delete collection ${e}`,l.S3_OPERATION_ERROR)}throw new d(`${h}: Collection ${e} does not exist`,l.REMOVE_COLLECTION_ERROR)}catch(r){throw r instanceof p?r:new d(`${h}: Failed to remove collection: ${r.message}`,l.REMOVE_COLLECTION_ERROR)}}async renameCollection(e,r){try{if(this._hasColName(e),this._hasColName(r),!await this.collectionExists(e))throw new F(`${h}: Collection ${e} does not exist`,l.COLLECTION_NOT_FOUND);let i=await this.collection(e),o=await i._loadData();if(!await this.removeCollection(e))throw new d(`${h}: Failed to rename collection`,l.RENAME_COLLECTION_ERROR);return await this.createCollection(r,i._avroType,o)}catch(s){throw s instanceof d?s:new d(`${h}: Rename collection failed: ${s.message}`,l.RENAME_COLLECTION_ERROR)}}async collection(e,r,s=!0){try{this._hasColName(e);let i=`${this._dirPrefix}${A}${e}${N}`,o;if(!await this._s3.fileExists(i)){if(!s)throw new d(`${h}: Collection ${e} does not exist`,l.COLLECTION_NOT_FOUND);let c=Buffer.from("","utf8");await this._s3.put(i,c)}return r?(o=this._avro.parse(r),this._schemas.set(e,o)):this._schemas.has(e)&&(o=this._schemas.get(e)),new z(e,this._s3,o,this._dirPrefix)}catch(i){throw i.message.includes("unknown type")?new $(`${h}: Schema input is invalid: ${i.message}`,l.SCHEMA_VALIDATION_ERROR):new d(`${h}: ${i.message}`,l.COLLECTION_NOT_FOUND)}}s3=()=>this._s3},z=class{constructor(e,r,s,i=B,o=!1){this._colName=e,this._s3=r,this._avro=ce,this._lastETag="",this._dataCache=[],this._avroType=s,this._dirPrefix=i,this._safeWrite=o}getProps=()=>({colName:this._colName,s3:this._s3,avro:this._avro,avroType:this._avroType,dirPrefix:this._dirPrefix,safeWrite:this._safeWrite});setProps=e=>{this._colName=e.colName,this._s3=e.s3,this._avro=e.avro,this._avroType=e.avroType,this._dirPrefix=e.dirPrefix,this._safeWrite=e.safeWrite};setSafeWrite=e=>{this._safeWrite=e};getSafeWrite=()=>this._safeWrite;getAvroSchema=()=>this._avroType;setAvroSchema=e=>{this._avroType=this._avro.parse(e)};async _loadData(){try{let e=`${this._dirPrefix}${A}${this._colName}${N}`,r=this._s3.getMaxRequestSizeInBytes()||Ne;if(this._avroType===null||typeof this._avroType>"u")throw new d(`${h}: Missing type definition. Configure before operations `,l.SCHEMA_VALIDATION_ERROR);console.log("Getting object:",e,this._lastETag);let{etag:s,data:i}=await this._s3.getObjectWithETag(e,{"if-none-match":this._lastETag});if(console.log("data :::::::::::::::::::::::::",i,s,this._dataCache),i===null)return this._dataCache;this._lastETag=s===null?this._lastETag:s;let o=this._avro.parse({type:"array",items:this._avroType});if(i.length0?o.fromBuffer(i):[],this._dataCache;let n=r,c=[Buffer.from(i,"utf8")],a=!0;for(;a;){let f=await this._s3.getResponse(e,!1,n,n+r),g=await f.text();c.push(Buffer.from(g,"utf8")),n+=r,(f.headers.get("content-length")||g.length)-1)return this._dataCache=[],this._dataCache;throw new p(`${h}: Failed to load data: ${e.message}`,l.S3_OPERATION_ERROR)}}async _saveData(e){try{if(this._avroType===null||typeof this._avroType>"u")throw new d(`${h}: Missing type definition. Configure before operations `,l.SCHEMA_VALIDATION_ERROR);let r=this._avro.parse({type:"array",items:this._avroType}),s=e.length>0?r.toBuffer(e):Buffer.from("","utf8"),i=`${this._dirPrefix}${A}${this._colName}${N}`;if(this._safeWrite&&this._lastETag!==""){let c=await this._s3.getEtag(i);if(c!==null&&c!==this._lastETag)return!1}let o=await this._s3.put(i,s);if(o.status!==200)throw new p(`${h}: Failed to save data`,l.S3_OPERATION_ERROR);let n=o.headers.get("etag");return n&&(this._lastETag=this._s3.sanitizeETag(n),this._dataCache=e),!0}catch(r){throw r instanceof p?r:new d(`${h}: ${r.message}`,l.SAVE_DATA_ERROR)}}async insert(e,r=void 0){try{if(e==null)throw new d(`${h}: Document is required for insert`,l.INSERT_ERROR);if(typeof e!="object"&&!Array.isArray(e))throw new T(`${h}: Document must be an object or an array`,l.DOCUMENT_VALIDATION_ERROR);let s=Array.isArray(e)?e:[e],i=r||this._avroType||G(s[0]),o=this._avro.parse(i);if(!o)throw new $(`${h}: Schema is required - Pass a schema to the insert method`,l.SCHEMA_VALIDATION_ERROR);this._avroType=o;let n=await this._loadData();for(let a of s){if(typeof a!="object"||a===null)throw new T(`${h}: Invalid input: input must be an object or an array of objects`,l.DOCUMENT_VALIDATION_ERROR);if(a._id=a._id||await ne(),this._avroType.isValid(a,{errorHook:V,noUndeclaredFields:!0})===!0)n.push(a);else throw new T(`${h}: Invalid document or schema`,l.DOCUMENT_VALIDATION_ERROR)}if(!await this._saveData(n))throw new p(`${h}: Failed to insert document`,l.S3_OPERATION_ERROR);return s}catch(s){throw s.message.includes("unknown type")?new $(`${h}: Schema input is invalid: ${s.message}`,l.SCHEMA_VALIDATION_ERROR):s instanceof d?s:new d(`${h} Insert operation failed: ${s.message}`,l.INSERT_ERROR)}}async find(e={},r={}){try{if(e==null)throw new d(`${h}: Query is required for update`,l.MISSING_ARGUMENT);let s=await this._loadData(),i=parseInt(r.skip,10)||0,o=parseInt(r.limit,10)?i+parseInt(r.limit,10):void 0;return s.filter(c=>v(c,e)).slice(i,o)}catch(s){throw new d(`${h}: Find operation failed: ${s.message}`,l.FIND_ERROR)}}async findOne(e={}){try{if(e===null)throw new d(`${h}: Query cannot be null`,l.INVALID_ARGUMENT);return(await this.find(e,{limit:1}))[0]||null}catch(r){throw r instanceof d?r:new d(`${h}: FindOne operation failed: ${r.message}`,l.FIND_ONE_ERROR)}}async update(e={},r={},s={}){try{if(e==null||r===void 0||r===null)throw new d(`${h}: Query and update values are required for update`,l.MISSING_ARGUMENT);if(!this._avroType)throw new $(`${h}: Schema is not defined for this collection`,l.SCHEMA_VALIDATION_ERROR);let i=await this._loadData();if(i.length===0)return 0;let o=0;for(let n=0;n0){if(!await this._saveData(i))throw new p(`${h}: Failed to update document`,l.S3_OPERATION_ERROR)}else if(s.upsert){if(!await this.insert(r))throw new p(`${h}: Failed to update document`,l.S3_OPERATION_ERROR);o=1}return o}catch(i){throw i instanceof p?i:new d(`${h}: Update operation failed: ${i.message}`,l.UPDATE_ERROR)}}async updateOne(e={},r={},s={}){try{if(e==null||r===void 0||r===null)throw new d(`${h}: Query is required`,l.MISSING_ARGUMENT);if(!this._avroType)throw new $(`${h}: Schema is not defined for this collection`,l.SCHEMA_VALIDATION_ERROR);let i=await this._loadData();if(i.length===0)return 0;let o=i.findIndex(n=>v(n,e));if(o!==-1){let n={...i[o],...r};if(this._avroType.isValid(n,{errorHook:V,noUndeclaredFields:!0})===!0){if(i[o]=n,!await this._saveData(i))throw new p(`${h}: Failed to update document`,l.S3_OPERATION_ERROR);return 1}else throw new T(`${h}: Invalid document or schema`,l.DOCUMENT_VALIDATION_ERROR)}if(s.upsert){if(!await this.insert(r))throw new p(`${h}: Failed to update document`,l.S3_OPERATION_ERROR);return 1}return 0}catch(i){throw i instanceof d?i:new d(`${h}: UpdateOne operation failed: ${i.message}`,l.UPDATE_ONE_ERROR)}}async delete(e={}){try{if(e==null)throw new d(`${h}: Query is required`,l.MISSING_ARGUMENT);let r=await this._loadData();if(r.length===0)return 0;let s=r.length,i=r.filter(n=>!v(n,e));if(!await this._saveData(i))throw new p(`${h}: Failed to delete document`,l.S3_OPERATION_ERROR);return s-i.length}catch(r){throw r instanceof p?r:new d(`${h}: Delete operation failed: ${r.message}`,l.DELETE_ERROR)}}async deleteAll(){try{let r=(await this._loadData()).length;if(!await this._saveData([]))throw new p(`${h}: Failed to delete document`,l.S3_OPERATION_ERROR);return r}catch(e){throw e instanceof p?e:new d(`${h}: Delete operation failed: ${e.message}`,l.DELETE_ERROR)}}async count(e={}){try{return(await this.find(e)).length}catch(r){throw new d(`${h}: Count operation failed: ${r.message}`,l.COUNT_ERROR)}}};export{he as lowstorage,d as lowstorageError,l as lowstorage_ERROR_CODES}; //# sourceMappingURL=lowstorage.js.map diff --git a/lib/lowstorage.js.map b/lib/lowstorage.js.map index affb08f..bad45c2 100644 --- a/lib/lowstorage.js.map +++ b/lib/lowstorage.js.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["../node_modules/ultralight-s3/src/index.ts", "../src/lowstorage.js", "../src/errors.js", "../src/helpers.js"], - "sourcesContent": ["'use strict';\n\ninterface S3Config {\n accessKeyId: string;\n secretAccessKey: string;\n endpoint: string;\n bucketName: string;\n region?: string;\n maxRequestSizeInBytes?: number;\n requestAbortTimeout?: number;\n logger?: Logger;\n}\n\ndeclare global {\n interface Crypto {\n createHmac: (\n algorithm: string,\n key: string | Buffer,\n ) => {\n update: (data: string | Buffer) => void;\n digest: (encoding?: 'hex' | 'base64' | 'latin1') => string;\n };\n createHash: (algorithm: string) => {\n update: (data: string | Buffer) => void;\n digest: (encoding?: 'hex' | 'base64' | 'latin1') => string;\n };\n }\n}\n\ninterface Logger {\n info: (message: string, ...args: any[]) => void;\n warn: (message: string, ...args: any[]) => void;\n error: (message: string, ...args: any[]) => void;\n}\n\ninterface UploadPart {\n partNumber: number;\n ETag: string;\n}\n\ninterface CompleteMultipartUploadResult {\n Location: string;\n Bucket: string;\n Key: string;\n ETag: string;\n}\n\ntype HttpMethod = 'POST' | 'GET' | 'HEAD' | 'PUT' | 'DELETE';\n\nlet _createHmac = crypto.createHmac || (await import('node:crypto')).createHmac;\nlet _createHash = crypto.createHash || (await import('node:crypto')).createHash;\n\nif (typeof _createHmac === 'undefined' && typeof _createHash === 'undefined') {\n console.error(\n 'ultralight-S3 Module: Crypto functions are not available, please report the issue with necessary description: https://github.com/sentienhq/ultralight-s3/issues',\n );\n}\n\n// Constants\nconst AWS_ALGORITHM = 'AWS4-HMAC-SHA256';\nconst AWS_REQUEST_TYPE = 'aws4_request';\nconst S3_SERVICE = 's3';\nconst LIST_TYPE = '2';\nconst UNSIGNED_PAYLOAD = 'UNSIGNED-PAYLOAD';\nconst DEFAULT_STREAM_CONTENT_TYPE = 'application/octet-stream';\nconst XML_CONTENT_TYPE = 'application/xml';\nconst JSON_CONTENT_TYPE = 'application/json';\n// List of keys that might contain sensitive information\nconst SENSITIVE_KEYS_REDACTED = ['accessKeyId', 'secretAccessKey', 'sessionToken', 'password'];\nconst MIN_MAX_REQUEST_SIZE_IN_BYTES = 5 * 1024 * 1024;\n\n// Headers\nconst HEADER_AMZ_CONTENT_SHA256 = 'x-amz-content-sha256';\nconst HEADER_AMZ_DATE = 'x-amz-date';\nconst HEADER_HOST = 'host';\nconst HEADER_AUTHORIZATION = 'Authorization';\nconst HEADER_CONTENT_TYPE = 'Content-Type';\nconst HEADER_CONTENT_LENGTH = 'Content-Length';\nconst HEADER_ETAG = 'etag';\nconst HEADER_LAST_MODIFIED = 'last-modified';\n\n// Error messages\nexport const ERROR_PREFIX = 'ultralight-s3 Module: ';\nconst ERROR_ACCESS_KEY_REQUIRED = `${ERROR_PREFIX}accessKeyId must be a non-empty string`;\nconst ERROR_SECRET_KEY_REQUIRED = `${ERROR_PREFIX}secretAccessKey must be a non-empty string`;\nconst ERROR_ENDPOINT_REQUIRED = `${ERROR_PREFIX}endpoint must be a non-empty string`;\nconst ERROR_BUCKET_NAME_REQUIRED = `${ERROR_PREFIX}bucketName must be a non-empty string`;\nconst ERROR_KEY_REQUIRED = `${ERROR_PREFIX}key must be a non-empty string`;\nconst ERROR_UPLOAD_ID_REQUIRED = `${ERROR_PREFIX}uploadId must be a non-empty string`;\nconst ERROR_PARTS_REQUIRED = `${ERROR_PREFIX}parts must be a non-empty array`;\nconst ERROR_INVALID_PART = `${ERROR_PREFIX}Each part must have a partNumber (number) and ETag (string)`;\nconst ERROR_DATA_BUFFER_REQUIRED = `${ERROR_PREFIX}data must be a Buffer or string`;\n// const ERROR_PATH_REQUIRED = `${ERROR_PREFIX}path must be a string`;\nconst ERROR_PREFIX_TYPE = `${ERROR_PREFIX}prefix must be a string`;\nconst ERROR_MAX_KEYS_TYPE = `${ERROR_PREFIX}maxKeys must be a positive integer`;\nconst ERROR_DELIMITER_REQUIRED = `${ERROR_PREFIX}delimiter must be a string`;\n\nconst expectArray: { [key: string]: boolean } = {\n contents: true,\n};\n\nconst encodeAsHex = (c: string): string => `%${c.charCodeAt(0).toString(16).toUpperCase()}`;\n\nconst uriEscape = (uriStr: string): string => {\n return encodeURIComponent(uriStr).replace(/[!'()*]/g, encodeAsHex);\n};\n\nconst uriResourceEscape = (string: string): string => {\n return uriEscape(string).replace(/%2F/g, '/');\n};\n\n/**\n * S3 class for interacting with S3-compatible object storage services.\n * This class provides methods for common S3 operations such as uploading, downloading,\n * and deleting objects, as well as multipart uploads.\n *\n * @class\n * @example\n * const s3 = new S3({\n * accessKeyId: 'your-access-key',\n * secretAccessKey: 'your-secret-key',\n * endpoint: 'https://your-s3-endpoint.com',\n * bucketName: 'your-bucket-name',\n * region: 'us-east-1' // by default is auto\n * });\n *\n * // Upload a file\n * await s3.put('example.txt', 'Hello, World!');\n *\n * // Download a file\n * const content = await s3.get('example.txt');\n *\n * // Delete a file\n * await s3.delete('example.txt');\n */\nclass S3 {\n /**\n * Creates an instance of the S3 class.\n *\n * @constructor\n * @param {Object} config - Configuration options for the S3 instance.\n * @param {string} config.accessKeyId - The access key ID for authentication.\n * @param {string} config.secretAccessKey - The secret access key for authentication.\n * @param {string} config.endpoint - The endpoint URL of the S3-compatible service.\n * @param {string} [config.bucketName=''] - The name of the bucket to operate on.\n * @param {string} [config.region='auto'] - The region of the S3 service.\n * @param {number} [config.maxRequestSizeInBytes=5242880] - The maximum size of a single request in bytes (minimum for AWS S3 is 5MB).\n * @param {number} [config.requestAbortTimeout=undefined] - The timeout in milliseconds after which a request should be aborted (careful on streamed requests).\n * @param {Object} [config.logger=null] - A logger object with methods like info, warn, error.\n * @throws {TypeError} Will throw an error if required parameters are missing or of incorrect type.\n */\n private accessKeyId: string;\n private secretAccessKey: string;\n private endpoint: string;\n private bucketName: string;\n private region: string;\n private maxRequestSizeInBytes: number;\n private requestAbortTimeout?: number;\n private logger?: Logger;\n\n constructor({\n accessKeyId,\n secretAccessKey,\n endpoint,\n bucketName,\n region = 'auto',\n maxRequestSizeInBytes = MIN_MAX_REQUEST_SIZE_IN_BYTES,\n requestAbortTimeout = undefined,\n logger = undefined,\n }: S3Config) {\n this._validateConstructorParams(accessKeyId, secretAccessKey, endpoint, bucketName);\n this.accessKeyId = accessKeyId;\n this.secretAccessKey = secretAccessKey;\n this.endpoint = endpoint;\n this.bucketName = bucketName;\n this.region = region;\n this.maxRequestSizeInBytes = maxRequestSizeInBytes;\n this.requestAbortTimeout = requestAbortTimeout;\n this.logger = logger;\n }\n\n private _validateConstructorParams(\n accessKeyId: string,\n secretAccessKey: string,\n endpoint: string,\n bucketName: string,\n ): void {\n if (typeof accessKeyId !== 'string' || accessKeyId.trim().length === 0)\n throw new TypeError(ERROR_ACCESS_KEY_REQUIRED);\n if (typeof secretAccessKey !== 'string' || secretAccessKey.trim().length === 0)\n throw new TypeError(ERROR_SECRET_KEY_REQUIRED);\n if (typeof endpoint !== 'string' || endpoint.trim().length === 0) throw new TypeError(ERROR_ENDPOINT_REQUIRED);\n if (typeof bucketName !== 'string' || bucketName.trim().length === 0)\n throw new TypeError(ERROR_BUCKET_NAME_REQUIRED);\n }\n\n private _checkMethodHeadnGet(method: string): void {\n if (method !== 'GET' && method !== 'HEAD') {\n this._log('error', `${ERROR_PREFIX}method must be either GET or HEAD`);\n throw new Error('method must be either GET or HEAD');\n }\n }\n\n private _checkKey(key: string): void {\n if (typeof key !== 'string' || key.trim().length === 0) {\n this._log('error', ERROR_KEY_REQUIRED);\n throw new TypeError(ERROR_KEY_REQUIRED);\n }\n }\n\n private _checkDelimiter(delimiter: string): void {\n if (typeof delimiter !== 'string' || delimiter.trim().length === 0) {\n this._log('error', ERROR_DELIMITER_REQUIRED);\n throw new TypeError(ERROR_DELIMITER_REQUIRED);\n }\n }\n\n private _checkPrefix(prefix: string): void {\n if (typeof prefix !== 'string') {\n this._log('error', ERROR_PREFIX_TYPE);\n throw new TypeError(ERROR_PREFIX_TYPE);\n }\n }\n\n private _checkMaxKeys(maxKeys: number): void {\n if (typeof maxKeys !== 'number' || maxKeys <= 0) {\n this._log('error', ERROR_MAX_KEYS_TYPE);\n throw new TypeError(ERROR_MAX_KEYS_TYPE);\n }\n }\n\n private _checkOpts(opts: Record): void {\n if (typeof opts !== 'object') {\n this._log('error', `${ERROR_PREFIX}opts must be an object`);\n throw new TypeError(`${ERROR_PREFIX}opts must be an object`);\n }\n }\n\n /**\n * Internal method to log messages with sanitized sensitive information.\n * @param {string} level - The log level (e.g., 'info', 'warn', 'error').\n * @param {string} message - The message to log.\n * @param {Object} [additionalData={}] - Additional data to include in the log.\n * @private\n */\n private _log(\n level: 'info' | 'warn' | 'error',\n message: string,\n additionalData: Record | string = {},\n ): void {\n if (this.logger && typeof this.logger[level] === 'function') {\n // Function to recursively sanitize an object\n const sanitize = (obj: any): any => {\n if (typeof obj !== 'object' || obj === null) {\n return obj;\n }\n return Object.keys(obj).reduce(\n (acc: any, key) => {\n if (SENSITIVE_KEYS_REDACTED.includes(key.toLowerCase())) {\n acc[key] = '[REDACTED]';\n } else if (typeof obj[key] === 'object' && obj[key] !== null) {\n acc[key] = sanitize(obj[key]);\n } else {\n acc[key] = obj[key];\n }\n return acc;\n },\n Array.isArray(obj) ? [] : {},\n );\n };\n\n // Sanitize the additional data\n const sanitizedData = sanitize(additionalData);\n // Prepare the log entry\n const logEntry = {\n timestamp: new Date().toISOString(),\n level,\n message,\n ...sanitizedData,\n // Include some general context, but sanitize sensitive parts\n context: sanitize({\n bucketName: this.bucketName,\n region: this.region,\n endpoint: this.endpoint,\n // Only include the first few characters of the access key, if it exists\n accessKeyId: this.accessKeyId ? `${this.accessKeyId.substring(0, 4)}...` : undefined,\n }),\n };\n\n // Log the sanitized entry\n this.logger[level](logEntry);\n }\n }\n\n getBucketName = () => this.bucketName;\n setBucketName = (bucketName: string) => {\n this.bucketName = bucketName;\n };\n getRegion = () => this.region;\n setRegion = (region: string) => {\n this.region = region;\n };\n getEndpoint = () => this.endpoint;\n setEndpoint = (endpoint: string) => {\n this.endpoint = endpoint;\n };\n getMaxRequestSizeInBytes = () => this.maxRequestSizeInBytes;\n setMaxRequestSizeInBytes = (maxRequestSizeInBytes: number) => {\n this.maxRequestSizeInBytes = maxRequestSizeInBytes;\n };\n\n getProps = () => ({\n accessKeyId: this.accessKeyId,\n secretAccessKey: this.secretAccessKey,\n region: this.region,\n bucket: this.bucketName,\n endpoint: this.endpoint,\n maxRequestSizeInBytes: this.maxRequestSizeInBytes,\n requestAbortTimeout: this.requestAbortTimeout,\n logger: this.logger,\n });\n setProps = (props: S3Config) => {\n this._validateConstructorParams(props.accessKeyId, props.secretAccessKey, props.bucketName, props.endpoint);\n this.accessKeyId = props.accessKeyId;\n this.secretAccessKey = props.secretAccessKey;\n this.region = props.region || 'auto';\n this.bucketName = props.bucketName;\n this.endpoint = props.endpoint;\n this.maxRequestSizeInBytes = props.maxRequestSizeInBytes || MIN_MAX_REQUEST_SIZE_IN_BYTES;\n this.requestAbortTimeout = props.requestAbortTimeout;\n this.logger = props.logger;\n };\n\n /**\n * Get the content length of an object.\n * @param {string} key - The key of the object.\n * @returns {Promise} The content length of the object in bytes.\n * @throws {TypeError} If the key is not a non-empty string.\n */\n async getContentLength(key: string): Promise {\n this._checkKey(key);\n const headers = {\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('HEAD', encodedKey, {}, headers, '');\n const res = await this._sendRequest(url, 'HEAD', signedHeaders);\n const contentLength = res.headers.get(HEADER_CONTENT_LENGTH);\n return contentLength ? parseInt(contentLength, 10) : 0;\n }\n\n /**\n * Check if a bucket exists.\n * @returns {Promise} True if the bucket exists, false otherwise.\n */\n async bucketExists(): Promise {\n const headers = {\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n const { url, headers: signedHeaders } = await this._sign('HEAD', '', {}, headers, '');\n const res = await this._sendRequest(url, 'HEAD', signedHeaders);\n if (res.ok && res.status === 200) {\n return true;\n }\n return false;\n }\n\n // TBD\n // async createBucket(bucketName) {\n // const xmlBody = `\n // \n // \n // ${this.region}\n // \n // `;\n // const headers = {\n // [HEADER_CONTENT_TYPE]: XML_CONTENT_TYPE,\n // [HEADER_CONTENT_LENGTH]: Buffer.byteLength(xmlBody).toString(),\n // [HEADER_AMZ_CONTENT_SHA256]: await _hash(xmlBody),\n // };\n // const encodedKey = encodeURI(bucketName);\n // const { url, headers: signedHeaders } = await this._sign('PUT', encodedKey, {}, headers, '');\n // const res = await this._sendRequest(url, 'PUT', signedHeaders);\n // if (res.ok && res.status === 200) {\n // return true;\n // }\n // return false;\n // }\n\n /**\n * Check if a file exists in the bucket.\n * @param {string} key - The key of the object.\n * @returns {Promise} True if the file exists, false otherwise.\n * @throws {TypeError} If the key is not a non-empty string.\n */\n async fileExists(key: string): Promise {\n this._checkKey(key);\n const headers = { [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('HEAD', encodedKey, {}, headers, '');\n try {\n const res = await fetch(url, {\n method: 'HEAD',\n headers: signedHeaders,\n });\n if (res.ok && res.status === 200) return true;\n else if (res.status === 404) return false;\n else this._handleErrorResponse(res);\n return false;\n } catch (error: unknown) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n this._log('error', `${ERROR_PREFIX}Failed to check if file exists: ${errorMessage}`);\n throw new Error(`${ERROR_PREFIX}Failed to check if file exists: ${errorMessage}`);\n }\n }\n async _sign(\n method: HttpMethod,\n keyPath: string,\n query: Object,\n headers: Record,\n body: string | Buffer,\n ): Promise<{ url: string; headers: Record }> {\n const datetime = new Date().toISOString().replace(/[:-]|\\.\\d{3}/g, '');\n const url =\n typeof keyPath === 'string' && keyPath.length > 0 ? new URL(keyPath, this.endpoint) : new URL(this.endpoint);\n url.pathname = `/${encodeURI(this.bucketName)}${url.pathname}`;\n headers[HEADER_AMZ_CONTENT_SHA256] = body ? await _hash(body) : UNSIGNED_PAYLOAD;\n headers[HEADER_AMZ_DATE] = datetime;\n headers[HEADER_HOST] = url.host;\n const canonicalHeaders = this._buildCanonicalHeaders(headers);\n const signedHeaders = Object.keys(headers)\n .map(key => key.toLowerCase())\n .sort()\n .join(';');\n\n const canonicalRequest = await this._buildCanonicalRequest(\n method,\n url,\n query,\n canonicalHeaders,\n signedHeaders,\n body,\n );\n const stringToSign = await this._buildStringToSign(datetime, canonicalRequest);\n const signature = await this._calculateSignature(datetime, stringToSign);\n const authorizationHeader = this._buildAuthorizationHeader(datetime, signedHeaders, signature);\n headers[HEADER_AUTHORIZATION] = authorizationHeader;\n return { url: url.toString(), headers };\n }\n\n _buildCanonicalHeaders(headers: Record): string {\n return Object.entries(headers)\n .map(([key, value]) => `${key.toLowerCase()}:${String(value).trim()}`)\n .sort()\n .join('\\n');\n }\n\n async _buildCanonicalRequest(\n method: HttpMethod,\n url: URL,\n query: Object,\n canonicalHeaders: string,\n signedHeaders: string,\n body: string | Buffer,\n ): Promise {\n return [\n method,\n url.pathname,\n this._buildCanonicalQueryString(query),\n `${canonicalHeaders}\\n`,\n signedHeaders,\n body ? await _hash(body) : UNSIGNED_PAYLOAD,\n ].join('\\n');\n }\n\n async _buildStringToSign(datetime: string, canonicalRequest: string): Promise {\n const credentialScope = [datetime.slice(0, 8), this.region, S3_SERVICE, AWS_REQUEST_TYPE].join('/');\n return [AWS_ALGORITHM, datetime, credentialScope, await _hash(canonicalRequest)].join('\\n');\n }\n\n async _calculateSignature(datetime: string, stringToSign: string): Promise {\n const signingKey = await this._getSignatureKey(datetime.slice(0, 8));\n return _hmac(signingKey, stringToSign, 'hex');\n }\n\n _buildAuthorizationHeader(datetime: string, signedHeaders: string, signature: string): string {\n const credentialScope = [datetime.slice(0, 8), this.region, S3_SERVICE, AWS_REQUEST_TYPE].join('/');\n return [\n `${AWS_ALGORITHM} Credential=${this.accessKeyId}/${credentialScope}`,\n `SignedHeaders=${signedHeaders}`,\n `Signature=${signature}`,\n ].join(', ');\n }\n\n /**\n * List objects in the bucket.\n * @param {string} [delimiter='/'] - The delimiter to use for grouping objects in specific path.\n * @param {string} [prefix=''] - The prefix to filter objects in specific path.\n * @param {number} [maxKeys=1000] - The maximum number of keys to return.\n * @param {string} [method='GET'] - The HTTP method to use (GET or HEAD).\n * @param {Object} [opts={}] - Additional options for the list operation.\n * @returns {Promise} The list of objects or object metadata.\n * @throws {TypeError} If any of the parameters are of incorrect type.\n */\n async list(\n delimiter: string = '/',\n prefix: string = '',\n maxKeys: number = 1000,\n method: HttpMethod = 'GET',\n opts: Object = {},\n ): Promise> {\n this._checkDelimiter(delimiter);\n this._checkPrefix(prefix);\n this._checkMaxKeys(maxKeys);\n this._checkMethodHeadnGet(method);\n this._checkOpts(opts);\n this._log('info', `Listing objects in ${prefix}`);\n\n const query = {\n 'list-type': LIST_TYPE,\n 'max-keys': String(maxKeys),\n ...opts,\n } as { [key: string]: any };\n if (prefix.length > 0) {\n query['prefix'] = prefix;\n }\n const headers = {\n [HEADER_CONTENT_TYPE]: JSON_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n const encodedKey = delimiter === '/' ? delimiter : uriEscape(delimiter);\n const { url, headers: signedHeaders } = await this._sign('GET', encodedKey, query, headers, '');\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n const res = await this._sendRequest(urlWithQuery, 'GET', signedHeaders);\n const responseBody = await res.text();\n\n if (method === 'HEAD') {\n const contentLength = res.headers.get(HEADER_CONTENT_LENGTH);\n const lastModified = res.headers.get(HEADER_LAST_MODIFIED);\n const etag = res.headers.get(HEADER_ETAG);\n\n return {\n size: contentLength ? +contentLength : undefined,\n mtime: lastModified ? new Date(lastModified) : undefined,\n ETag: etag || undefined,\n };\n }\n\n const data = _parseXml(responseBody);\n const output = data.listBucketResult || data.error || data;\n return output.contents || output;\n }\n\n /**\n * List multipart uploads in the bucket.\n * @param {string} [delimiter='/'] - The delimiter to use for grouping objects in specific path.\n * @param {string} [prefix=''] - The prefix to filter objects in specific path.\n * @param {string} [method='GET'] - The HTTP method to use (GET or HEAD).\n * @param {Object} [opts={}] - Additional options for the list operation.\n * @returns {Promise} The list of objects or object metadata.\n * @throws {TypeError} If any of the parameters are of incorrect type.\n */\n async listMultiPartUploads(\n delimiter: string = '/',\n prefix: string = '',\n method: HttpMethod = 'GET',\n opts: Object = {},\n ): Promise {\n this._checkDelimiter(delimiter);\n this._checkPrefix(prefix);\n this._checkMethodHeadnGet(method);\n this._checkOpts(opts);\n this._log('info', `Listing multipart uploads in ${prefix}`);\n\n const query = {\n uploads: '',\n ...opts,\n } as Record;\n const headers = {\n [HEADER_CONTENT_TYPE]: JSON_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n const encodedKey = delimiter === '/' ? delimiter : uriEscape(delimiter);\n const { url, headers: signedHeaders } = await this._sign('GET', encodedKey, query, headers, '');\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n const res = await this._sendRequest(urlWithQuery, 'GET', signedHeaders);\n const responseBody = await res.text();\n\n if (method === 'HEAD') {\n return {\n size: +(res.headers.get(HEADER_CONTENT_LENGTH) ?? '0'),\n mtime: new Date(res.headers.get(HEADER_LAST_MODIFIED) ?? ''),\n ETag: res.headers.get(HEADER_ETAG) ?? '',\n };\n }\n\n const data = _parseXml(responseBody);\n const output = data.listMultipartUploadsResult || data.error || data;\n return output.uploads || output;\n }\n\n /**\n * Get an object from the bucket.\n * @param {string} key - The key of the object to get.\n * @param {Object} [opts={}] - Additional options for the get operation.\n * @returns {Promise} The content of the object.\n */\n async get(key: string, opts: Record = {}): Promise {\n this._checkKey(key);\n this._log('info', `Getting object ${key}`);\n\n const headers = {\n [HEADER_CONTENT_TYPE]: JSON_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('GET', encodedKey, opts, headers, '');\n const res = await this._sendRequest(url, 'GET', signedHeaders);\n return res.text();\n }\n\n /**\n * Get a response of an object from the bucket.\n * @param {string} key - The key of the object to get.\n * @param {boolean} [wholeFile=true] - Whether to get the whole file or a part.\n * @param {number} [rangeFrom=0] - The range from to get if not getting the whole file.\n * @param {number} [rangeTo=this.maxRequestSizeInBytes] - The range to to get if not getting the whole file. Note: rangeTo is inclusive.\n * @param {Object} [opts={}] - Additional options for the get operation.\n * @returns {Promise} Response of the object content. Use readableStream() to get the stream from .body.\n */\n async getResponse(\n key: string,\n wholeFile: boolean = true,\n rangeFrom: number = 0,\n rangeTo: number = this.maxRequestSizeInBytes,\n opts: Record = {},\n ): Promise {\n this._checkKey(key);\n const query = opts;\n const headers = {\n [HEADER_CONTENT_TYPE]: JSON_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n ...(wholeFile ? {} : { range: `bytes=${rangeFrom}-${rangeTo - 1}` }),\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('GET', encodedKey, query, headers, '');\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n\n return this._sendRequest(urlWithQuery, 'GET', signedHeaders);\n }\n\n /**\n * Put an object into the bucket.\n * @param {string} key - The key of the object to put. To create a folder, include a trailing slash.\n * @param {Buffer|string} data - The content of the object to put.\n * @returns {Promise} The response from the put operation.\n * @throws {TypeError} If the key is not a non-empty string or data is not a Buffer or string.\n */\n async put(key: string, data: string | Buffer): Promise {\n this._checkKey(key);\n if (!(data instanceof Buffer || typeof data === 'string')) {\n this._log('error', ERROR_DATA_BUFFER_REQUIRED);\n throw new TypeError(ERROR_DATA_BUFFER_REQUIRED);\n }\n // const encodedKey = encodeURIComponent(key);\n this._log('info', `Uploading object ${key}`);\n const contentLength = typeof data === 'string' ? Buffer.byteLength(data) : data.length;\n const headers = {\n [HEADER_CONTENT_LENGTH]: contentLength,\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('PUT', encodedKey, {}, headers, data);\n const res = await this._sendRequest(url, 'PUT', signedHeaders, data);\n return res;\n }\n\n /**\n * Initiate a multipart upload.\n * @param {string} key - The key of the object to upload.\n * @param {string} [fileType='application/octet-stream'] - The MIME type of the file.\n * @returns {Promise} The upload ID for the multipart upload.\n * @throws {TypeError} If the key is not a non-empty string or fileType is not a string.\n * @throws {Error} If the multipart upload initiation fails.\n */\n async getMultipartUploadId(key: string, fileType: string = DEFAULT_STREAM_CONTENT_TYPE): Promise {\n this._checkKey(key);\n if (typeof fileType !== 'string') {\n this._log('error', `${ERROR_PREFIX}fileType must be a string`);\n throw new TypeError(`${ERROR_PREFIX}fileType must be a string`);\n }\n this._log('info', `Initiating multipart upload for object ${key}`);\n const query = { uploads: '' };\n const headers = {\n [HEADER_CONTENT_TYPE]: fileType,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('POST', encodedKey, query, headers, '');\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n\n const res = await this._sendRequest(urlWithQuery, 'POST', signedHeaders);\n const responseBody = await res.text();\n const parsedResponse = _parseXml(responseBody);\n\n if (\n typeof parsedResponse === 'object' &&\n parsedResponse !== null &&\n 'error' in parsedResponse &&\n typeof parsedResponse.error === 'object' &&\n parsedResponse.error !== null &&\n 'message' in parsedResponse.error\n ) {\n const errorMessage = String(parsedResponse.error.message);\n this._log('error', `${ERROR_PREFIX}Failed to abort multipart upload: ${errorMessage}`);\n throw new Error(`${ERROR_PREFIX}Failed to abort multipart upload: ${errorMessage}`);\n }\n\n if (typeof parsedResponse === 'object' && parsedResponse !== null) {\n if (!parsedResponse.initiateMultipartUploadResult || !parsedResponse.initiateMultipartUploadResult.uploadId) {\n this._log('error', `${ERROR_PREFIX}Failed to create multipart upload: no uploadId in response`);\n throw new Error(`${ERROR_PREFIX}Failed to create multipart upload: Missing upload ID in response`);\n }\n\n return parsedResponse.initiateMultipartUploadResult.uploadId;\n } else {\n this._log('error', `${ERROR_PREFIX}Failed to create multipart upload: unexpected response format`);\n throw new Error(`${ERROR_PREFIX}Failed to create multipart upload: Unexpected response format`);\n }\n }\n\n /**\n * Upload a part in a multipart upload.\n * @param {string} key - The key of the object being uploaded.\n * @param {Buffer|string} data - The content of the part.\n * @param {string} uploadId - The upload ID of the multipart upload.\n * @param {number} partNumber - The part number.\n * @param {Object} [opts={}] - Additional options for the upload.\n * @returns {Promise} The ETag and part number of the uploaded part.\n * @throws {TypeError} If any of the parameters are of incorrect type.\n */\n async uploadPart(\n key: string,\n data: Buffer | string,\n uploadId: string,\n partNumber: number,\n opts: Object = {},\n ): Promise {\n this._validateUploadPartParams(key, data, uploadId, partNumber, opts);\n const query = { uploadId, partNumber, ...opts } as { [key: string]: any };\n const headers = {\n [HEADER_CONTENT_LENGTH]: data.length,\n } as { [key: string]: any };\n\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('PUT', encodedKey, query, headers, data);\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n\n const res = await this._sendRequest(urlWithQuery, 'PUT', signedHeaders, data);\n const ETag = res.headers.get('etag') || '';\n return { partNumber, ETag };\n }\n\n _validateUploadPartParams(key: string, data: Buffer | string, uploadId: string, partNumber: number, opts: Object) {\n this._checkKey(key);\n if (!(data instanceof Buffer || typeof data === 'string')) {\n this._log('error', ERROR_DATA_BUFFER_REQUIRED);\n throw new TypeError(ERROR_DATA_BUFFER_REQUIRED);\n }\n if (typeof uploadId !== 'string' || uploadId.trim().length === 0) {\n this._log('error', ERROR_UPLOAD_ID_REQUIRED);\n throw new TypeError(ERROR_UPLOAD_ID_REQUIRED);\n }\n if (!Number.isInteger(partNumber) || partNumber <= 0) {\n this._log('error', `${ERROR_PREFIX}partNumber must be a positive integer`);\n throw new TypeError(`${ERROR_PREFIX}partNumber must be a positive integer`);\n }\n this._checkOpts(opts);\n }\n\n /**\n * Complete a multipart upload.\n * @param {string} key - The key of the object being uploaded.\n * @param {string} uploadId - The upload ID of the multipart upload.\n * @param {Array} parts - An array of objects containing PartNumber and ETag for each part.\n * @returns {Promise} The result of the complete multipart upload operation.\n * @throws {TypeError} If any of the parameters are of incorrect type.\n * @throws {Error} If the complete multipart upload operation fails.\n */\n async completeMultipartUpload(\n key: string,\n uploadId: string,\n parts: Array,\n ): Promise {\n this._checkKey(key);\n if (typeof uploadId !== 'string' || uploadId.trim().length === 0) {\n this._log('error', ERROR_UPLOAD_ID_REQUIRED);\n throw new TypeError(ERROR_UPLOAD_ID_REQUIRED);\n }\n if (!Array.isArray(parts) || parts.length === 0) {\n this._log('error', ERROR_PARTS_REQUIRED);\n throw new TypeError(ERROR_PARTS_REQUIRED);\n }\n if (!parts.every(part => typeof part.partNumber === 'number' && typeof part.ETag === 'string')) {\n this._log('error', ERROR_INVALID_PART);\n throw new TypeError(ERROR_INVALID_PART);\n }\n this._log('info', `Complete multipart upload ${uploadId} for object ${key}`);\n const query = { uploadId };\n const xmlBody = this._buildCompleteMultipartUploadXml(parts);\n const headers = {\n [HEADER_CONTENT_TYPE]: XML_CONTENT_TYPE,\n [HEADER_CONTENT_LENGTH]: Buffer.byteLength(xmlBody).toString(),\n [HEADER_AMZ_CONTENT_SHA256]: await _hash(xmlBody),\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('POST', encodedKey, query, headers, xmlBody);\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n\n const res = await this._sendRequest(urlWithQuery, 'POST', signedHeaders, xmlBody);\n const responseBody = await res.text();\n const parsedResponse = _parseXml(responseBody);\n\n if (\n typeof parsedResponse === 'object' &&\n parsedResponse !== null &&\n 'error' in parsedResponse &&\n typeof parsedResponse.error === 'object' &&\n parsedResponse.error !== null &&\n 'message' in parsedResponse.error\n ) {\n const errorMessage = String(parsedResponse.error.message);\n this._log('error', `${ERROR_PREFIX}Failed to abort multipart upload: ${errorMessage}`);\n throw new Error(`${ERROR_PREFIX}Failed to abort multipart upload: ${errorMessage}`);\n }\n\n return parsedResponse.completeMultipartUploadResult;\n }\n\n /**\n * Aborts a multipart upload.\n * @param {string} key - The key of the object being uploaded.\n * @param {string} uploadId - The ID of the multipart upload to abort.\n * @returns {Promise} - A promise that resolves to the abort response.\n * @throws {Error} If the abort operation fails.\n */\n async abortMultipartUpload(key: string, uploadId: string): Promise {\n // Input validation\n this._checkKey(key);\n if (typeof uploadId !== 'string' || uploadId.trim().length === 0) {\n this._log('error', ERROR_UPLOAD_ID_REQUIRED);\n throw new TypeError(ERROR_UPLOAD_ID_REQUIRED);\n }\n\n this._log('info', `Aborting multipart upload ${uploadId} for object ${key}`);\n\n // Prepare the request\n const query = { uploadId };\n const headers = {\n [HEADER_CONTENT_TYPE]: XML_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n\n try {\n // Sign and send the request\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('DELETE', encodedKey, query, headers, '');\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n\n const res = await this._sendRequest(urlWithQuery, 'DELETE', signedHeaders);\n\n // Check for successful response\n if (res.ok) {\n const responseBody = await res.text();\n const parsedResponse = _parseXml(responseBody);\n\n if (\n typeof parsedResponse === 'object' &&\n parsedResponse !== null &&\n 'error' in parsedResponse &&\n typeof parsedResponse.error === 'object' &&\n parsedResponse.error !== null &&\n 'message' in parsedResponse.error\n ) {\n const errorMessage = String(parsedResponse.error.message);\n this._log('error', `${ERROR_PREFIX}Failed to abort multipart upload: ${errorMessage}`);\n throw new Error(`${ERROR_PREFIX}Failed to abort multipart upload: ${errorMessage}`);\n }\n\n return {\n status: 'Aborted',\n key,\n uploadId,\n response: parsedResponse,\n };\n } else {\n this._log('error', `${ERROR_PREFIX}Abort request failed with status ${res.status}`);\n throw new Error(`${ERROR_PREFIX}Abort request failed with status ${res.status}`);\n }\n } catch (error: unknown) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n this._log('error', `${ERROR_PREFIX}Failed to abort multipart upload for key ${key}: ${errorMessage}`);\n throw new Error(`${ERROR_PREFIX}Failed to abort multipart upload for key ${key}: ${errorMessage}`);\n }\n }\n\n _buildCompleteMultipartUploadXml(parts: Array): string {\n return `\n \n ${parts\n .map(\n part => `\n \n ${part.partNumber}\n ${part.ETag}\n \n `,\n )\n .join('')}\n \n `;\n }\n\n /**\n * Delete an object from the bucket.\n * @param {string} key - The key of the object to delete.\n * @returns {Promise} The response from the delete operation.\n */\n async delete(key: string): Promise {\n this._checkKey(key);\n this._log('info', `Deleting object ${key}`);\n const headers = {\n [HEADER_CONTENT_TYPE]: JSON_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('DELETE', encodedKey, {}, headers, '');\n const res = await this._sendRequest(url, 'DELETE', signedHeaders);\n return res.text();\n }\n\n async _sendRequest(\n url: string,\n method: HttpMethod,\n headers: Record,\n body?: string | Buffer,\n ): Promise {\n this._log('info', `Sending ${method} request to ${url}, headers: ${JSON.stringify(headers)}`);\n const res = await fetch(url, {\n method,\n headers,\n body,\n signal: this.requestAbortTimeout !== undefined ? AbortSignal.timeout(this.requestAbortTimeout) : undefined,\n });\n\n if (!res.ok) {\n await this._handleErrorResponse(res);\n }\n\n return res;\n }\n\n async _handleErrorResponse(res: Response) {\n const errorBody = await res.text();\n const errorCode = res.headers.get('x-amz-error-code') || 'Unknown';\n const errorMessage = res.headers.get('x-amz-error-message') || res.statusText;\n this._log(\n 'error',\n `${ERROR_PREFIX}Request failed with status ${res.status}: ${errorCode} - ${errorMessage},err body: ${errorBody}`,\n );\n throw new Error(\n `${ERROR_PREFIX}Request failed with status ${res.status}: ${errorCode} - ${errorMessage}, err body: ${errorBody}`,\n );\n }\n\n _buildCanonicalQueryString(queryParams: Object): string {\n if (Object.keys(queryParams).length < 1) {\n return '';\n }\n\n return Object.keys(queryParams)\n .sort()\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent((queryParams as Record)[key])}`)\n .join('&');\n }\n async _getSignatureKey(dateStamp: string): Promise {\n const kDate = await _hmac(`AWS4${this.secretAccessKey}`, dateStamp);\n const kRegion = await _hmac(kDate, this.region);\n const kService = await _hmac(kRegion, S3_SERVICE);\n return _hmac(kService, AWS_REQUEST_TYPE);\n }\n}\n\nconst _hash = async (content: string | Buffer): Promise => {\n const hashSum = _createHash('sha256');\n hashSum.update(content);\n return hashSum.digest('hex');\n};\n\nconst _hmac = async (key: string | Buffer, content: string, encoding?: 'hex'): Promise => {\n const hmacSum = _createHmac('sha256', key);\n hmacSum.update(content);\n return hmacSum.digest(encoding);\n};\n\nconst _parseXml = (str: string): string | object | any => {\n const unescapeXml = (value: string): string => {\n return value\n .replace(/"/g, '\"')\n .replace(/'/g, \"'\")\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/&/g, '&');\n };\n\n const json = {};\n const re = /<(\\w)([-\\w]+)(?:\\/|[^>]*>((?:(?!<\\1)[\\s\\S])*)<\\/\\1\\2)>/gm;\n let match;\n\n while ((match = re.exec(str))) {\n const [, prefix, key, value] = match;\n const fullKey = prefix.toLowerCase() + key;\n const parsedValue = value != null ? _parseXml(value) : true;\n\n if (typeof parsedValue === 'string') {\n (json as { [key: string]: any })[fullKey] = unescapeXml(parsedValue);\n } else if (Array.isArray((json as { [key: string]: any })[fullKey])) {\n (json as { [key: string]: any })[fullKey].push(parsedValue);\n } else {\n (json as { [key: string]: any })[fullKey] =\n (json as { [key: string]: any })[fullKey] != null\n ? [(json as { [key: string]: any })[fullKey], parsedValue]\n : expectArray[fullKey]\n ? [parsedValue]\n : parsedValue;\n }\n }\n\n return Object.keys(json).length ? json : unescapeXml(str);\n};\n\nexport { S3 };\nexport default S3;\n", "'use strict';\n\nimport { S3 } from 'ultralight-s3';\nimport avro from 'avro-js'; // eslint-disable-line\nimport {\n\tlowstorage_ERROR_CODES,\n\tlowstorageError,\n\tCollectionNotFoundError,\n\tSchemaValidationError,\n\tDocumentValidationError,\n\tS3OperationError,\n} from './errors.js';\nimport { matchesQuery, generateUUID, inferAvroType } from './helpers.js';\n\nconst MODULE_NAME = 'lowstorage';\nconst DEFAULT_DELIMITER = '/';\nconst PROJECT_DIR_PREFIX = 'lowstorage';\nconst COL_SUFFIX = '.avro';\nconst CHUNG_1MB = 1024 * 1024;\nconst CHUNG_5MB = 5 * CHUNG_1MB;\n\n// code / description\n// init of new collection is automatically creating it in the bucket\n// there is optional (opt-in) switch to create new collections in bucket\n// if the schema is not provided, it will create empty buffer and save it\n// if the schema is provided, it will save it in memory and use it for all ops\n// if the schema is updated, it will save it in memory and use it for all ops\n// exposed functions are:\n// listCollections \u2705\n// collectionExists \u2705\n// createCollection \u2705\n// removeCollection \u2705\n// renameCollection \u2705\n// updateCollectionSchema \u274C\n// collection \u2705\n// s3 \u2705\n\n// Operations over collections are:\n// insert \u2705\n// find \u2705\n// findOne \u2705\n// update \u2705\n// updateOne \u2705\n// delete \u2705\n// count \u2705\n\n// Errors:\n// lowstorageError \u2705\n// CollectionNotFoundError \u2705\n// SchemaValidationError \u2705\n// DocumentValidationError \u2705\n// S3OperationError \u2705\n\nclass lowstorage {\n\tconstructor(\n\t\toptions = {\n\t\t\taccessKeyId: undefined,\n\t\t\tsecretAccessKey: undefined,\n\t\t\tendpoint: undefined,\n\t\t\tbucketName: undefined,\n\t\t\tregion: 'auto',\n\t\t\tlogger: null,\n\t\t\tdirPrefix: PROJECT_DIR_PREFIX,\n\t\t},\n\t) {\n\t\tthis._checkArgs(options);\n\t\tthis._schemas = new Map();\n\t\tthis._s3 = new S3(options);\n\t\tthis._dirPrefix = options.dirPrefix || PROJECT_DIR_PREFIX;\n\t\tthis._avro = avro;\n\t}\n\n\t_checkArgs = (args) => {\n\t\tconst requiredFields = ['accessKeyId', 'secretAccessKey', 'endpoint', 'bucketName'];\n\t\tfor (const field of requiredFields) {\n\t\t\tif (!args[field]) {\n\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: ${field} is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n\t\t\t}\n\t\t}\n\t};\n\n\t_hasColName = (colName) => {\n\t\tif (colName.trim() === '' || colName === null || typeof colName === 'undefined') {\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Collection name is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n\t\t}\n\t};\n\n\tasync listCollections() {\n\t\ttry {\n\t\t\tconst listed = await this._s3.list(DEFAULT_DELIMITER, this._dirPrefix);\n\t\t\tif (typeof listed === 'object' && listed !== null && listed.keyCount === '0') return [];\n\t\t\t// remove the delimiter from the key\n\t\t\treturn listed.map((entry) => entry.key.slice(this._dirPrefix.length + 1, -COL_SUFFIX.length));\n\t\t} catch (error) {\n\t\t\tthrow new S3OperationError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t}\n\t}\n\n\tasync collectionExists(colName) {\n\t\ttry {\n\t\t\tthis._hasColName(colName);\n\t\t\tconst exists = await this._s3.fileExists(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`);\n\t\t\treturn exists;\n\t\t} catch (error) {\n\t\t\tif (error.message.includes('Not Found')) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND);\n\t\t}\n\t}\n\n\tasync createCollection(colName, schema, data = []) {\n\t\ttry {\n\t\t\tthis._hasColName(colName);\n\t\t\tconst exists = await this.collectionExists(colName);\n\t\t\tif (!exists) {\n\t\t\t\tawait this._s3.put(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`, data.length > 0 ? data : '');\n\t\t\t\treturn this.collection(colName, schema);\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Collection ${colName} already exists`, lowstorage_ERROR_CODES.COLLECTION_EXISTS);\n\t\t} catch (error) {\n\t\t\tif (error instanceof lowstorageError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.CREATE_COLLECTION_ERROR);\n\t\t}\n\t}\n\n\tasync removeCollection(colName) {\n\t\ttry {\n\t\t\tthis._hasColName(colName);\n\t\t\tconst KEY = `${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`;\n\t\t\tconst exists = await this.collectionExists(colName);\n\t\t\tif (exists) {\n\t\t\t\tawait this._s3.delete(KEY);\n\t\t\t\tconst exists2 = await this.collectionExists(colName);\n\t\t\t\tif (typeof exists2 === 'boolean') {\n\t\t\t\t\treturn !exists2;\n\t\t\t\t}\n\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to delete collection ${colName}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Collection ${colName} does not exist`, lowstorage_ERROR_CODES.REMOVE_COLLECTION_ERROR);\n\t\t} catch (error) {\n\t\t\tif (error instanceof S3OperationError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(\n\t\t\t\t`${MODULE_NAME}: Failed to remove collection: ${error.message}`,\n\t\t\t\tlowstorage_ERROR_CODES.REMOVE_COLLECTION_ERROR,\n\t\t\t);\n\t\t}\n\t}\n\n\tasync renameCollection(oldColName, newColName) {\n\t\ttry {\n\t\t\tthis._hasColName(oldColName);\n\t\t\tthis._hasColName(newColName);\n\t\t\tconst exists = await this.collectionExists(oldColName);\n\t\t\tif (!exists) {\n\t\t\t\tthrow new CollectionNotFoundError(\n\t\t\t\t\t`${MODULE_NAME}: Collection ${oldColName} does not exist`,\n\t\t\t\t\tlowstorage_ERROR_CODES.COLLECTION_NOT_FOUND,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst oldCol = await this.collection(oldColName);\n\t\t\tconst oldColData = await oldCol._loadDataBuffer();\n\t\t\tconst success = await this.removeCollection(oldColName);\n\t\t\tif (!success) {\n\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Failed to rename collection`, lowstorage_ERROR_CODES.RENAME_COLLECTION_ERROR);\n\t\t\t}\n\t\t\treturn await this.createCollection(newColName, oldCol._avroType, oldColData);\n\t\t} catch (error) {\n\t\t\tif (error instanceof lowstorageError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(\n\t\t\t\t`${MODULE_NAME}: Rename collection failed: ${error.message}`,\n\t\t\t\tlowstorage_ERROR_CODES.RENAME_COLLECTION_ERROR,\n\t\t\t);\n\t\t}\n\t}\n\n\t// TODO: update collection schema\n\t// async updateCollectionSchema(colName, newSchema) {\n\t// \ttry {\n\t// \t\tthis._hasColName(colName);\n\t// \t\t// Check if collection exists\n\t// \t\tconst exists = await this.collectionExists(colName);\n\t// \t\tif (!exists) {\n\t// \t\t\tthrow new CollectionNotFoundError(`${MODULE_NAME}: Collection ${colName} does not exist`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND);\n\t// \t\t}\n\t// \t\tif (typeof schema === 'undefined' || schema === null) {\n\t// \t\t\tthrow new lowstorageError(`${MODULE_NAME}: Schema is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n\t// \t\t}\n\t// \t\tconst col = this.collection(colName);\n\t// \t\tconst colData = await col._loadDataBuffer();\n\t// \t\tconst avroType = this._avro.parse(schema);\n\t// \t\tthis._schemas.set(colName, avroType);\n\n\t// \t} catch (error) {\n\t// \t\tif (error instanceof S3OperationError) {\n\t// \t\t\tthrow error;\n\t// \t\t}\n\t// \t\tthrow new lowstorageError(\n\t// \t\t\t`${MODULE_NAME}: Failed to update collection schema: ${error.message}`,\n\t// \t\t\tlowstorage_ERROR_CODES.UPDATE_COLLECTION_SCHEMA_ERROR,\n\t// \t\t);\n\t// \t}\n\t// }\n\n\tasync collection(colName, schema, autoCreate = true) {\n\t\ttry {\n\t\t\tthis._hasColName(colName);\n\t\t\tconst colPath = `${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`;\n\t\t\tlet avroType;\n\n\t\t\tconst exists = await this._s3.fileExists(colPath);\n\n\t\t\tif (!exists && !autoCreate) {\n\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Collection ${colName} does not exist`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND);\n\t\t\t}\n\n\t\t\tif (schema) {\n\t\t\t\tavroType = this._avro.parse(schema);\n\t\t\t\tthis._schemas.set(colName, avroType);\n\t\t\t\tif (!exists && autoCreate) {\n\t\t\t\t\tawait this._s3.put(colPath, '');\n\t\t\t\t}\n\t\t\t} else if (this._schemas.has(colName)) {\n\t\t\t\tavroType = this._schemas.get(colName);\n\t\t\t} else if (exists) {\n\t\t\t\tconst schemaContent = await this._s3.get(colPath);\n\t\t\t\tavroType = this._avro.parse(schemaContent);\n\t\t\t\tthis._schemas.set(colName, avroType);\n\t\t\t} else if (autoCreate) {\n\t\t\t\tawait this._s3.put(colPath, '');\n\t\t\t}\n\n\t\t\treturn new Collection(colName, this._s3, avroType, this._dirPrefix);\n\t\t} catch (error) {\n\t\t\t// check if error message contains \"unknown type\" and if so, throw a schema validation error\n\t\t\tif (error.message.includes('unknown type')) {\n\t\t\t\tthrow new SchemaValidationError(\n\t\t\t\t\t`${MODULE_NAME}: Schema input is invalid: ${error.message}`,\n\t\t\t\t\tlowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND);\n\t\t}\n\t}\n\n\ts3 = () => {\n\t\treturn this._s3;\n\t};\n}\n\nclass Collection {\n\tconstructor(colName, s3, avroType = undefined, dirPrefix = PROJECT_DIR_PREFIX) {\n\t\tthis._colName = colName;\n\t\tthis._s3 = s3;\n\t\tthis._avro = avro;\n\t\tthis._avroType = avroType;\n\t\tthis._dirPrefix = dirPrefix;\n\t}\n\n\tasync insert(doc, schema = undefined) {\n\t\ttry {\n\t\t\tif (doc === undefined || doc === null) {\n\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Document is required for insert`, lowstorage_ERROR_CODES.INSERT_ERROR);\n\t\t\t}\n\t\t\tif (typeof doc !== 'object' && !Array.isArray(doc)) {\n\t\t\t\tthrow new DocumentValidationError(\n\t\t\t\t\t`${MODULE_NAME}: Document must be an object or an array`,\n\t\t\t\t\tlowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst items = !Array.isArray(doc) ? [doc] : doc;\n\n\t\t\tconst avroType = !!schema ? this._avro.parse(schema) : this._avroType || this._avro.parse(inferAvroType(doc));\n\n\t\t\tif (!avroType) {\n\t\t\t\tthrow new SchemaValidationError(\n\t\t\t\t\t`${MODULE_NAME}: Schema is required - Pass a schema to the insert method`,\n\t\t\t\t\tlowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthis._avroType = avroType;\n\t\t\tconst wrapperType = this._avro.parse({ type: 'array', items: this._avroType });\n\t\t\tconst bufferData = await this._loadDataBuffer();\n\t\t\tconst data = bufferData.length > 0 ? wrapperType.fromBuffer(bufferData) : [];\n\t\t\tfor (let item of items) {\n\t\t\t\tif (typeof item !== 'object' || item === null) {\n\t\t\t\t\tthrow new DocumentValidationError(\n\t\t\t\t\t\t`${MODULE_NAME}: Invalid input: input must be an object or an array of objects`,\n\t\t\t\t\t\tlowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\titem._id = item._id || (await generateUUID());\n\t\t\t\tconst valid = this._avroType.isValid(item);\n\t\t\t\tif (!valid) {\n\t\t\t\t\tthrow new DocumentValidationError(`${MODULE_NAME}: Invalid document or schema`, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR);\n\t\t\t\t}\n\t\t\t\tdata.push(item);\n\t\t\t}\n\t\t\tconst success = await this._saveDataBuffer(wrapperType.toBuffer(data));\n\t\t\tif (!success) {\n\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to insert document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t}\n\t\t\treturn items;\n\t\t} catch (error) {\n\t\t\tif (error.message.includes('unknown type')) {\n\t\t\t\tthrow new SchemaValidationError(\n\t\t\t\t\t`${MODULE_NAME}: Schema input is invalid: ${error.message}`,\n\t\t\t\t\tlowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (error instanceof lowstorageError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME} Insert operation failed: ${error.message}`, lowstorage_ERROR_CODES.INSERT_ERROR);\n\t\t}\n\t}\n\n\tasync _loadDataBuffer() {\n\t\ttry {\n\t\t\tconst KEY = `${this._dirPrefix}${DEFAULT_DELIMITER}${this._colName}${COL_SUFFIX}`;\n\t\t\tconst CHUNK_SIZE = this._s3.getMaxRequestSizeInBytes() || CHUNG_5MB;\n\t\t\tlet firstData = await this._s3.get(KEY);\n\t\t\tif (firstData.length < CHUNK_SIZE) {\n\t\t\t\treturn Buffer.from(firstData, 'utf8');\n\t\t\t}\n\t\t\tlet offset = CHUNK_SIZE;\n\t\t\tlet bufferArr = [Buffer.from(firstData, 'utf8')];\n\t\t\tlet repeat = true;\n\t\t\twhile (repeat) {\n\t\t\t\tconst nextDataResponse = await this._s3.getResponse(KEY, false, offset, offset + CHUNK_SIZE);\n\t\t\t\tconst nextDataBody = await nextDataResponse.text();\n\t\t\t\tbufferArr.push(Buffer.from(nextDataBody, 'utf8'));\n\t\t\t\toffset += CHUNK_SIZE;\n\t\t\t\tconst contentLength = nextDataResponse.headers.get('content-length') || nextDataBody.length;\n\t\t\t\tif (contentLength < CHUNK_SIZE) {\n\t\t\t\t\trepeat = false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn Buffer.concat(bufferArr);\n\t\t} catch (error) {\n\t\t\tif (error.toString().indexOf('status 404: Unknown - Not Found') > -1) {\n\t\t\t\treturn Buffer.from('');\n\t\t\t}\n\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to load data buffer: ${error.message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t}\n\t}\n\n\tasync _saveDataBuffer(data) {\n\t\ttry {\n\t\t\tconst KEY = `${this._dirPrefix}${DEFAULT_DELIMITER}${this._colName}${COL_SUFFIX}`;\n\t\t\tconst resp = await this._s3.put(KEY, data);\n\t\t\tif (resp.status !== 200) {\n\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to save data`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t}\n\t\t\treturn true;\n\t\t} catch (error) {\n\t\t\tif (error instanceof S3OperationError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.SAVE_DATA_ERROR);\n\t\t}\n\t}\n\n\tasync find(query = {}, options = {}) {\n\t\ttry {\n\t\t\tif (query === undefined || query === null) {\n\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Query is required for update`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n\t\t\t}\n\t\t\tconst bufferData = await this._loadDataBuffer(); // load data from s3\n\t\t\tif (bufferData.length === 0) {\n\t\t\t\treturn [];\n\t\t\t}\n\t\t\tconst wrapperType = this._avro.parse({ type: 'array', items: this._avroType });\n\t\t\tconst data = bufferData.length > 0 ? wrapperType.fromBuffer(bufferData) : [];\n\t\t\tconst start = parseInt(options.skip, 10) || 0;\n\t\t\tconst end = parseInt(options.limit, 10) ? start + parseInt(options.limit, 10) : undefined;\n\t\t\tconst filteredData = data.filter((doc) => matchesQuery(doc, query)).slice(start, end);\n\t\t\treturn filteredData;\n\t\t} catch (error) {\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Find operation failed: ${error.message}`, lowstorage_ERROR_CODES.FIND_ERROR);\n\t\t}\n\t}\n\n\tasync findOne(query = {}) {\n\t\ttry {\n\t\t\tif (query === undefined || query === null) {\n\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Query is required for update`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n\t\t\t}\n\t\t\tconst result = await this.find(query);\n\t\t\treturn result[0] || [];\n\t\t} catch (error) {\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: FindOne operation failed: ${error.message}`, lowstorage_ERROR_CODES.FIND_ONE_ERROR);\n\t\t}\n\t}\n\n\tasync update(query = {}, update = {}) {\n\t\ttry {\n\t\t\tif (query === undefined || query === null || update === undefined || update === null) {\n\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Query is required for update`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n\t\t\t}\n\t\t\tif (!this._avroType) {\n\t\t\t\tthrow new SchemaValidationError(\n\t\t\t\t\t`${MODULE_NAME}: Schema is not defined for this collection`,\n\t\t\t\t\tlowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst bufferData = await this._loadDataBuffer(); // load data from s3\n\t\t\tif (bufferData.length === 0) return 0;\n\t\t\tconst wrapperType = this._avro.parse({ type: 'array', items: this._avroType });\n\t\t\tconst data = bufferData.length > 0 ? wrapperType.fromBuffer(bufferData) : [];\n\t\t\tlet updatedCount = 0;\n\n\t\t\tfor (let i = 0; i < data.length; i++) {\n\t\t\t\tif (matchesQuery(data[i], query)) {\n\t\t\t\t\tconst updatedDoc = { ...data[i], ...update };\n\t\t\t\t\tconst valid = this._avroType.isValid(updatedDoc);\n\t\t\t\t\tif (!valid) {\n\t\t\t\t\t\tthrow new DocumentValidationError(\n\t\t\t\t\t\t\t`${MODULE_NAME}: Invalid document or schema`,\n\t\t\t\t\t\t\tlowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tdata[i] = updatedDoc;\n\t\t\t\t\tupdatedCount++;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (updatedCount > 0) {\n\t\t\t\tconst success = await this._saveDataBuffer(wrapperType.toBuffer(data));\n\t\t\t\tif (!success) {\n\t\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn updatedCount;\n\t\t} catch (error) {\n\t\t\tif (error instanceof S3OperationError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Update operation failed: ${error.message}`, lowstorage_ERROR_CODES.UPDATE_ERROR);\n\t\t}\n\t}\n\n\tasync updateOne(query = {}, update = {}) {\n\t\ttry {\n\t\t\tif (query === undefined || query === null || update === undefined || update === null) {\n\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Query is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n\t\t\t}\n\t\t\tif (!this._avroType) {\n\t\t\t\tthrow new SchemaValidationError(\n\t\t\t\t\t`${MODULE_NAME}: Schema is not defined for this collection`,\n\t\t\t\t\tlowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst bufferData = await this._loadDataBuffer(); // load data from s3\n\t\t\tif (bufferData.length === 0) return 0;\n\t\t\tconst wrapperType = this._avro.parse({ type: 'array', items: this._avroType });\n\t\t\tconst data = bufferData.length > 0 ? wrapperType.fromBuffer(bufferData) : [];\n\t\t\tconst docIndex = data.findIndex((doc) => matchesQuery(doc, query));\n\n\t\t\tif (docIndex !== -1) {\n\t\t\t\tconst updatedDoc = { ...data[docIndex], ...update };\n\t\t\t\tconst valid = this._avroType.isValid(updatedDoc);\n\t\t\t\tif (!valid) {\n\t\t\t\t\tthrow new DocumentValidationError(`${MODULE_NAME}: Invalid document or schema`, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR);\n\t\t\t\t}\n\t\t\t\tdata[docIndex] = updatedDoc;\n\t\t\t\tconst success = await this._saveDataBuffer(wrapperType.toBuffer(data));\n\t\t\t\tif (!success) {\n\t\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t\t}\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t\treturn 0;\n\t\t} catch (error) {\n\t\t\tif (error instanceof lowstorageError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: UpdateOne operation failed: ${error.message}`, lowstorage_ERROR_CODES.UPDATE_ONE_ERROR);\n\t\t}\n\t}\n\n\tasync delete(query = {}) {\n\t\ttry {\n\t\t\tif (query === undefined || query === null) {\n\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Query is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n\t\t\t}\n\t\t\tconst bufferData = await this._loadDataBuffer(); // load data from s3\n\t\t\tif (bufferData.length === 0) return 0;\n\t\t\tconst wrapperType = this._avro.parse({ type: 'array', items: this._avroType });\n\t\t\tconst data = bufferData.length > 0 ? wrapperType.fromBuffer(bufferData) : [];\n\t\t\tconst initialLength = data.length;\n\t\t\tconst newData = data.filter((doc) => !matchesQuery(doc, query));\n\t\t\tconst success = await this._saveDataBuffer(wrapperType.toBuffer(newData));\n\t\t\tif (!success) {\n\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to delete document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t}\n\t\t\treturn initialLength - newData.length;\n\t\t} catch (error) {\n\t\t\tif (error instanceof S3OperationError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Delete operation failed: ${error.message}`, lowstorage_ERROR_CODES.DELETE_ERROR);\n\t\t}\n\t}\n\n\tasync deleteAll() {\n\t\ttry {\n\t\t\tconst bufferData = await this._loadDataBuffer(); // load data from s3\n\t\t\tif (bufferData.length === 0) return 0;\n\t\t\tconst wrapperType = this._avro.parse({ type: 'array', items: this._avroType });\n\t\t\tconst data = bufferData.length > 0 ? wrapperType.fromBuffer(bufferData) : [];\n\t\t\tconst initialLength = data.length;\n\t\t\tconst newData = data.filter((doc) => !matchesQuery(doc, {}));\n\t\t\tconst success = await this._saveDataBuffer(wrapperType.toBuffer(newData));\n\t\t\tif (!success) {\n\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to delete document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t}\n\t\t\treturn initialLength - newData.length;\n\t\t} catch (error) {\n\t\t\tif (error instanceof S3OperationError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Delete operation failed: ${error.message}`, lowstorage_ERROR_CODES.DELETE_ERROR);\n\t\t}\n\t}\n\n\tasync count(query = {}) {\n\t\ttry {\n\t\t\tconst data = await this.find(query);\n\t\t\treturn data.length;\n\t\t} catch (error) {\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Count operation failed: ${error.message}`, lowstorage_ERROR_CODES.COUNT_ERROR);\n\t\t}\n\t}\n}\n\n// export default lowstorage;\nexport { lowstorage, lowstorageError, lowstorage_ERROR_CODES };\n", "'use strict';\n\nconst lowstorage_ERROR_CODES = {\n\tMISSING_ARGUMENT: 'MISSING_ARGUMENT',\n\tCOLLECTION_EXISTS: 'COLLECTION_EXISTS',\n\tCREATE_COLLECTION_ERROR: 'CREATE_COLLECTION_ERROR',\n\tRENAME_COLLECTION_ERROR: 'RENAME_COLLECTION_ERROR',\n\tREMOVE_COLLECTION_ERROR: 'REMOVE_COLLECTION_ERROR',\n\tUPDATE_COLLECTION_SCHEMA_ERROR: 'UPDATE_COLLECTION_SCHEMA_ERROR',\n\tCOLLECTION_NOT_FOUND: 'COLLECTION_NOT_FOUND',\n\tSCHEMA_VALIDATION_ERROR: 'SCHEMA_VALIDATION_ERROR',\n\tDOCUMENT_VALIDATION_ERROR: 'DOCUMENT_VALIDATION_ERROR',\n\tS3_OPERATION_ERROR: 'S3_OPERATION_ERROR',\n\tFIND_ERROR: 'FIND_ERROR',\n\tFIND_ONE_ERROR: 'FIND_ONE_ERROR',\n\tSAVE_DATA_ERROR: 'SAVE_DATA_ERROR',\n\tINSERT_ERROR: 'INSERT_ERROR',\n\tUPDATE_ERROR: 'UPDATE_ERROR',\n\tUPDATE_ONE_ERROR: 'UPDATE_ONE_ERROR',\n\tDELETE_ERROR: 'DELETE_ERROR',\n\tCOUNT_ERROR: 'COUNT_ERROR',\n\tUNKNOWN_ERROR: 'UNKNOWN_ERROR',\n};\nclass lowstorageError extends Error {\n\tconstructor(message, code = lowstorage_ERROR_CODES.UNKNOWN_ERROR) {\n\t\tsuper(`lowstorageError: ${message} :: code: ${code}`);\n\t\tthis.name = this.constructor.name;\n\t\tthis.code = code;\n\t\tError.captureStackTrace(this, this.constructor);\n\t}\n}\n\nclass CollectionNotFoundError extends lowstorageError {\n\tconstructor(collectionName) {\n\t\tsuper(`Collection ${collectionName} not found`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND);\n\t}\n}\n\nclass SchemaValidationError extends lowstorageError {\n\tconstructor(message) {\n\t\tsuper(message, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR);\n\t}\n}\n\nclass DocumentValidationError extends lowstorageError {\n\tconstructor(message) {\n\t\tsuper(message, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR);\n\t}\n}\n\nclass S3OperationError extends lowstorageError {\n\tconstructor(message, operation) {\n\t\tsuper(`S3 ${operation} operation failed: ${message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t}\n}\n\nexport {\n\tlowstorage_ERROR_CODES,\n\tlowstorageError,\n\tCollectionNotFoundError,\n\tSchemaValidationError,\n\tDocumentValidationError,\n\tS3OperationError,\n};\n", "'use strict';\n\nimport { randomUUID } from 'node:crypto';\n\nconst matchesQuery = (document, query) => {\n\treturn Object.keys(query).every((key) => document[key] === query[key]);\n};\n\nconst generateUUID = async () => {\n\tif (typeof randomUUID !== 'undefined' && typeof randomUUID === 'function') {\n\t\treturn randomUUID();\n\t}\n\tif (typeof crypto !== 'undefined' && typeof crypto === 'object' && typeof crypto.randomUUID === 'function') {\n\t\treturn crypto.randomUUID();\n\t}\n\treturn 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n\t\tvar r = (Math.random() * 16) | 0,\n\t\t\tv = c === 'x' ? r : (r & 0x3) | 0x8;\n\t\treturn v.toString(16);\n\t});\n};\n\nconst _getAvroType = (value, name = 'SubAutoGenerated') => {\n\tswitch (typeof value) {\n\t\tcase 'string':\n\t\t\tif (_isUUID(value)) {\n\t\t\t\treturn {\n\t\t\t\t\ttype: 'string',\n\t\t\t\t\tname: '_id',\n\t\t\t\t\tsize: 16,\n\t\t\t\t\tlogicalType: 'UUID',\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn 'string';\n\t\tcase 'number':\n\t\t\treturn Number.isInteger(value) ? 'int' : 'float';\n\t\tcase 'boolean':\n\t\t\treturn 'boolean';\n\t\tcase 'object':\n\t\t\tif (value === null) return 'null';\n\t\t\tif (Array.isArray(value)) return { type: 'array', items: _getAvroType(value[0]) };\n\t\t\treturn inferAvroType(value, name);\n\t\tdefault:\n\t\t\treturn 'string'; // Default to string for unknown types\n\t}\n};\n\nconst inferAvroType = (data, typeName = 'AutoGenerated') => {\n\tif (Array.isArray(data)) {\n\t\tdata = data[0];\n\t}\n\tconst fields = Object.entries(data).map(([name, value]) => {\n\t\treturn { name, type: _getAvroType(value, `${typeName}.${name}`) };\n\t});\n\treturn {\n\t\ttype: 'record',\n\t\tname: typeName,\n\t\tfields: fields,\n\t};\n};\n\nconst _isUUID = (str) => {\n\tconst uuidV4Regex = /^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i;\n\treturn uuidV4Regex.test(str);\n};\n\nexport { matchesQuery, generateUUID, inferAvroType };\n"], - "mappings": "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", - "names": ["_createHmac", "_createHash", "AWS_ALGORITHM", "AWS_REQUEST_TYPE", "S3_SERVICE", "LIST_TYPE", "UNSIGNED_PAYLOAD", "DEFAULT_STREAM_CONTENT_TYPE", "XML_CONTENT_TYPE", "JSON_CONTENT_TYPE", "SENSITIVE_KEYS_REDACTED", "MIN_MAX_REQUEST_SIZE_IN_BYTES", "HEADER_AMZ_CONTENT_SHA256", "HEADER_AMZ_DATE", "HEADER_HOST", "HEADER_AUTHORIZATION", "HEADER_CONTENT_TYPE", "HEADER_CONTENT_LENGTH", "HEADER_ETAG", "HEADER_LAST_MODIFIED", "ERROR_PREFIX", "ERROR_ACCESS_KEY_REQUIRED", "ERROR_SECRET_KEY_REQUIRED", "ERROR_ENDPOINT_REQUIRED", "ERROR_BUCKET_NAME_REQUIRED", "ERROR_KEY_REQUIRED", "ERROR_UPLOAD_ID_REQUIRED", "ERROR_PARTS_REQUIRED", "ERROR_INVALID_PART", "ERROR_DATA_BUFFER_REQUIRED", "ERROR_PREFIX_TYPE", "ERROR_MAX_KEYS_TYPE", "ERROR_DELIMITER_REQUIRED", "expectArray", "encodeAsHex", "c", "uriEscape", "uriStr", "uriResourceEscape", "string", "S3", "accessKeyId", "secretAccessKey", "endpoint", "bucketName", "region", "maxRequestSizeInBytes", "requestAbortTimeout", "logger", "props", "method", "key", "delimiter", "prefix", "maxKeys", "opts", "level", "message", "additionalData", "sanitize", "obj", "acc", "sanitizedData", "logEntry", "headers", "encodedKey", "url", "signedHeaders", "contentLength", "res", "error", "errorMessage", "keyPath", "query", "body", "datetime", "_hash", "canonicalHeaders", "canonicalRequest", "stringToSign", "signature", "authorizationHeader", "value", "credentialScope", "signingKey", "_hmac", "urlWithQuery", "responseBody", "lastModified", "etag", "data", "_parseXml", "output", "o", "i", "a", "_a", "_b", "_c", "wholeFile", "rangeFrom", "rangeTo", "fileType", "parsedResponse", "uploadId", "partNumber", "ETag", "parts", "part", "xmlBody", "errorBody", "errorCode", "queryParams", "dateStamp", "kDate", "kRegion", "kService", "content", "hashSum", "encoding", "hmacSum", "str", "unescapeXml", "json", "re", "match", "fullKey", "parsedValue", "avro", "lowstorage_ERROR_CODES", "lowstorageError", "message", "code", "CollectionNotFoundError", "collectionName", "SchemaValidationError", "DocumentValidationError", "S3OperationError", "operation", "randomUUID", "matchesQuery", "document", "query", "key", "generateUUID", "c", "r", "v", "_getAvroType", "value", "name", "_isUUID", "inferAvroType", "data", "typeName", "fields", "str", "MODULE_NAME", "DEFAULT_DELIMITER", "PROJECT_DIR_PREFIX", "COL_SUFFIX", "CHUNG_1MB", "CHUNG_5MB", "lowstorage", "options", "O", "avro", "args", "requiredFields", "field", "lowstorageError", "lowstorage_ERROR_CODES", "colName", "listed", "entry", "error", "S3OperationError", "schema", "data", "KEY", "exists2", "oldColName", "newColName", "CollectionNotFoundError", "oldCol", "oldColData", "autoCreate", "colPath", "avroType", "exists", "schemaContent", "Collection", "SchemaValidationError", "s3", "dirPrefix", "doc", "DocumentValidationError", "items", "inferAvroType", "wrapperType", "bufferData", "item", "generateUUID", "CHUNK_SIZE", "firstData", "offset", "bufferArr", "repeat", "nextDataResponse", "nextDataBody", "query", "start", "end", "matchesQuery", "update", "updatedCount", "i", "updatedDoc", "docIndex", "initialLength", "newData"] + "sourcesContent": ["'use strict';\n\n// Constants\nconst AWS_ALGORITHM = 'AWS4-HMAC-SHA256';\nconst AWS_REQUEST_TYPE = 'aws4_request';\nconst S3_SERVICE = 's3';\nconst LIST_TYPE = '2';\nconst UNSIGNED_PAYLOAD = 'UNSIGNED-PAYLOAD';\nconst DEFAULT_STREAM_CONTENT_TYPE = 'application/octet-stream';\nconst XML_CONTENT_TYPE = 'application/xml';\nconst JSON_CONTENT_TYPE = 'application/json';\n// List of keys that might contain sensitive information\nconst SENSITIVE_KEYS_REDACTED = ['accessKeyId', 'secretAccessKey', 'sessionToken', 'password'];\nconst MIN_MAX_REQUEST_SIZE_IN_BYTES = 5 * 1024 * 1024;\n\n// Headers\nconst HEADER_AMZ_CONTENT_SHA256 = 'x-amz-content-sha256';\nconst HEADER_AMZ_DATE = 'x-amz-date';\nconst HEADER_HOST = 'host';\nconst HEADER_AUTHORIZATION = 'Authorization';\nconst HEADER_CONTENT_TYPE = 'Content-Type';\nconst HEADER_CONTENT_LENGTH = 'Content-Length';\nconst HEADER_ETAG = 'etag';\nconst HEADER_LAST_MODIFIED = 'last-modified';\n\n// Error messages\nconst ERROR_PREFIX = 'ultralight-s3 Module: ';\nconst ERROR_ACCESS_KEY_REQUIRED = `${ERROR_PREFIX}accessKeyId must be a non-empty string`;\nconst ERROR_SECRET_KEY_REQUIRED = `${ERROR_PREFIX}secretAccessKey must be a non-empty string`;\nconst ERROR_ENDPOINT_REQUIRED = `${ERROR_PREFIX}endpoint must be a non-empty string`;\nconst ERROR_BUCKET_NAME_REQUIRED = `${ERROR_PREFIX}bucketName must be a non-empty string`;\nconst ERROR_KEY_REQUIRED = `${ERROR_PREFIX}key must be a non-empty string`;\nconst ERROR_UPLOAD_ID_REQUIRED = `${ERROR_PREFIX}uploadId must be a non-empty string`;\nconst ERROR_PARTS_REQUIRED = `${ERROR_PREFIX}parts must be a non-empty array`;\nconst ERROR_INVALID_PART = `${ERROR_PREFIX}Each part must have a partNumber (number) and ETag (string)`;\nconst ERROR_DATA_BUFFER_REQUIRED = `${ERROR_PREFIX}data must be a Buffer or string`;\n// const ERROR_PATH_REQUIRED = `${ERROR_PREFIX}path must be a string`;\nconst ERROR_PREFIX_TYPE = `${ERROR_PREFIX}prefix must be a string`;\nconst ERROR_MAX_KEYS_TYPE = `${ERROR_PREFIX}maxKeys must be a positive integer`;\nconst ERROR_DELIMITER_REQUIRED = `${ERROR_PREFIX}delimiter must be a string`;\n\n// const STATUS_CODES: Record = {\n// 200: 'OK',\n// 204: 'No Content',\n// 205: 'Reset Content',\n// 206: 'Partial Content',\n// 301: 'Moved Permanently',\n// 302: 'Found',\n// 400: 'Bad Request',\n// 401: 'Unauthorized',\n// 403: 'Forbidden',\n// 404: 'Not Found',\n// 418: \"I'm a Teapot\",\n// 428: 'Precondition Required',\n// 429: 'Too Many Requests',\n// 500: 'Internal Server Error',\n// 501: 'Not Implemented',\n// };\n\ninterface S3Config {\n accessKeyId: string;\n secretAccessKey: string;\n endpoint: string;\n bucketName: string;\n region?: string;\n maxRequestSizeInBytes?: number;\n requestAbortTimeout?: number;\n logger?: Logger;\n}\n\ndeclare global {\n interface Crypto {\n createHmac: (\n algorithm: string,\n key: string | Buffer,\n ) => {\n update: (data: string | Buffer) => void;\n digest: (encoding?: 'hex' | 'base64' | 'latin1') => string;\n };\n createHash: (algorithm: string) => {\n update: (data: string | Buffer) => void;\n digest: (encoding?: 'hex' | 'base64' | 'latin1') => string;\n };\n }\n}\n\ninterface Logger {\n info: (message: string, ...args: any[]) => void;\n warn: (message: string, ...args: any[]) => void;\n error: (message: string, ...args: any[]) => void;\n}\n\ninterface UploadPart {\n partNumber: number;\n ETag: string;\n}\n\ninterface CompleteMultipartUploadResult {\n Location: string;\n Bucket: string;\n Key: string;\n ETag: string;\n}\n\ntype HttpMethod = 'POST' | 'GET' | 'HEAD' | 'PUT' | 'DELETE';\n\n// false - Not found (404)\n// true - Found (200)\n// null - ETag mismatch (412)\ntype ExistResponseCode = false | true | null;\n\nlet _createHmac = crypto.createHmac || (await import('node:crypto')).createHmac;\nlet _createHash = crypto.createHash || (await import('node:crypto')).createHash;\n\nif (typeof _createHmac === 'undefined' && typeof _createHash === 'undefined') {\n console.error(\n 'ultralight-S3 Module: Crypto functions are not available, please report the issue with necessary description: https://github.com/sentienhq/ultralight-s3/issues',\n );\n}\n\nconst expectArray: { [key: string]: boolean } = {\n contents: true,\n};\n\nconst encodeAsHex = (c: string): string => `%${c.charCodeAt(0).toString(16).toUpperCase()}`;\n\nconst uriEscape = (uriStr: string): string => {\n return encodeURIComponent(uriStr).replace(/[!'()*]/g, encodeAsHex);\n};\n\nconst uriResourceEscape = (string: string): string => {\n return uriEscape(string).replace(/%2F/g, '/');\n};\n\n/**\n * S3 class for interacting with S3-compatible object storage services.\n * This class provides methods for common S3 operations such as uploading, downloading,\n * and deleting objects, as well as multipart uploads.\n *\n * @class\n * @example\n * const s3 = new S3({\n * accessKeyId: 'your-access-key',\n * secretAccessKey: 'your-secret-key',\n * endpoint: 'https://your-s3-endpoint.com',\n * bucketName: 'your-bucket-name',\n * region: 'us-east-1' // by default is auto\n * });\n *\n * // Upload a file\n * await s3.put('example.txt', 'Hello, World!');\n *\n * // Download a file\n * const content = await s3.get('example.txt');\n *\n * // Delete a file\n * await s3.delete('example.txt');\n */\nclass S3 {\n /**\n * Creates an instance of the S3 class.\n *\n * @constructor\n * @param {Object} config - Configuration options for the S3 instance.\n * @param {string} config.accessKeyId - The access key ID for authentication.\n * @param {string} config.secretAccessKey - The secret access key for authentication.\n * @param {string} config.endpoint - The endpoint URL of the S3-compatible service.\n * @param {string} [config.bucketName=''] - The name of the bucket to operate on.\n * @param {string} [config.region='auto'] - The region of the S3 service.\n * @param {number} [config.maxRequestSizeInBytes=5242880] - The maximum size of a single request in bytes (minimum for AWS S3 is 5MB).\n * @param {number} [config.requestAbortTimeout=undefined] - The timeout in milliseconds after which a request should be aborted (careful on streamed requests).\n * @param {Object} [config.logger=null] - A logger object with methods like info, warn, error.\n * @throws {TypeError} Will throw an error if required parameters are missing or of incorrect type.\n */\n private accessKeyId: string;\n private secretAccessKey: string;\n private endpoint: string;\n private bucketName: string;\n private region: string;\n private maxRequestSizeInBytes: number;\n private requestAbortTimeout?: number;\n private logger?: Logger;\n\n constructor({\n accessKeyId,\n secretAccessKey,\n endpoint,\n bucketName,\n region = 'auto',\n maxRequestSizeInBytes = MIN_MAX_REQUEST_SIZE_IN_BYTES,\n requestAbortTimeout = undefined,\n logger = undefined,\n }: S3Config) {\n this._validateConstructorParams(accessKeyId, secretAccessKey, endpoint, bucketName);\n this.accessKeyId = accessKeyId;\n this.secretAccessKey = secretAccessKey;\n this.endpoint = endpoint;\n this.bucketName = bucketName;\n this.region = region;\n this.maxRequestSizeInBytes = maxRequestSizeInBytes;\n this.requestAbortTimeout = requestAbortTimeout;\n this.logger = logger;\n }\n\n private _validateConstructorParams(\n accessKeyId: string,\n secretAccessKey: string,\n endpoint: string,\n bucketName: string,\n ): void {\n if (typeof accessKeyId !== 'string' || accessKeyId.trim().length === 0)\n throw new TypeError(ERROR_ACCESS_KEY_REQUIRED);\n if (typeof secretAccessKey !== 'string' || secretAccessKey.trim().length === 0)\n throw new TypeError(ERROR_SECRET_KEY_REQUIRED);\n if (typeof endpoint !== 'string' || endpoint.trim().length === 0) throw new TypeError(ERROR_ENDPOINT_REQUIRED);\n if (typeof bucketName !== 'string' || bucketName.trim().length === 0)\n throw new TypeError(ERROR_BUCKET_NAME_REQUIRED);\n }\n\n private _checkMethodHeadnGet(method: string): void {\n if (method !== 'GET' && method !== 'HEAD') {\n this._log('error', `${ERROR_PREFIX}method must be either GET or HEAD`);\n throw new Error('method must be either GET or HEAD');\n }\n }\n\n private _checkKey(key: string): void {\n if (typeof key !== 'string' || key.trim().length === 0) {\n this._log('error', ERROR_KEY_REQUIRED);\n throw new TypeError(ERROR_KEY_REQUIRED);\n }\n }\n\n private _checkDelimiter(delimiter: string): void {\n if (typeof delimiter !== 'string' || delimiter.trim().length === 0) {\n this._log('error', ERROR_DELIMITER_REQUIRED);\n throw new TypeError(ERROR_DELIMITER_REQUIRED);\n }\n }\n\n private _checkPrefix(prefix: string): void {\n if (typeof prefix !== 'string') {\n this._log('error', ERROR_PREFIX_TYPE);\n throw new TypeError(ERROR_PREFIX_TYPE);\n }\n }\n\n private _checkMaxKeys(maxKeys: number): void {\n if (typeof maxKeys !== 'number' || maxKeys <= 0) {\n this._log('error', ERROR_MAX_KEYS_TYPE);\n throw new TypeError(ERROR_MAX_KEYS_TYPE);\n }\n }\n\n private _checkOpts(opts: Record): void {\n if (typeof opts !== 'object') {\n this._log('error', `${ERROR_PREFIX}opts must be an object`);\n throw new TypeError(`${ERROR_PREFIX}opts must be an object`);\n }\n }\n\n /**\n * Internal method to log messages with sanitized sensitive information.\n * @param {string} level - The log level (e.g., 'info', 'warn', 'error').\n * @param {string} message - The message to log.\n * @param {Object} [additionalData={}] - Additional data to include in the log.\n * @private\n */\n private _log(\n level: 'info' | 'warn' | 'error',\n message: string,\n additionalData: Record | string = {},\n ): void {\n if (this.logger && typeof this.logger[level] === 'function') {\n // Function to recursively sanitize an object\n const sanitize = (obj: any): any => {\n if (typeof obj !== 'object' || obj === null) {\n return obj;\n }\n return Object.keys(obj).reduce(\n (acc: any, key) => {\n if (SENSITIVE_KEYS_REDACTED.includes(key.toLowerCase())) {\n acc[key] = '[REDACTED]';\n } else if (typeof obj[key] === 'object' && obj[key] !== null) {\n acc[key] = sanitize(obj[key]);\n } else {\n acc[key] = obj[key];\n }\n return acc;\n },\n Array.isArray(obj) ? [] : {},\n );\n };\n\n // Sanitize the additional data\n const sanitizedData = sanitize(additionalData);\n // Prepare the log entry\n const logEntry = {\n timestamp: new Date().toISOString(),\n level,\n message,\n ...sanitizedData,\n // Include some general context, but sanitize sensitive parts\n context: sanitize({\n bucketName: this.bucketName,\n region: this.region,\n endpoint: this.endpoint,\n // Only include the first few characters of the access key, if it exists\n accessKeyId: this.accessKeyId ? `${this.accessKeyId.substring(0, 4)}...` : undefined,\n }),\n };\n\n // Log the sanitized entry\n this.logger[level](logEntry);\n }\n }\n\n getBucketName = () => this.bucketName;\n setBucketName = (bucketName: string) => {\n this.bucketName = bucketName;\n };\n getRegion = () => this.region;\n setRegion = (region: string) => {\n this.region = region;\n };\n getEndpoint = () => this.endpoint;\n setEndpoint = (endpoint: string) => {\n this.endpoint = endpoint;\n };\n getMaxRequestSizeInBytes = () => this.maxRequestSizeInBytes;\n setMaxRequestSizeInBytes = (maxRequestSizeInBytes: number) => {\n this.maxRequestSizeInBytes = maxRequestSizeInBytes;\n };\n sanitizeETag = (etag: string): string => sanitizeETag(etag);\n\n getProps = () => ({\n accessKeyId: this.accessKeyId,\n secretAccessKey: this.secretAccessKey,\n region: this.region,\n bucket: this.bucketName,\n endpoint: this.endpoint,\n maxRequestSizeInBytes: this.maxRequestSizeInBytes,\n requestAbortTimeout: this.requestAbortTimeout,\n logger: this.logger,\n });\n setProps = (props: S3Config) => {\n this._validateConstructorParams(props.accessKeyId, props.secretAccessKey, props.bucketName, props.endpoint);\n this.accessKeyId = props.accessKeyId;\n this.secretAccessKey = props.secretAccessKey;\n this.region = props.region || 'auto';\n this.bucketName = props.bucketName;\n this.endpoint = props.endpoint;\n this.maxRequestSizeInBytes = props.maxRequestSizeInBytes || MIN_MAX_REQUEST_SIZE_IN_BYTES;\n this.requestAbortTimeout = props.requestAbortTimeout;\n this.logger = props.logger;\n };\n\n /**\n * Get the content length of an object.\n * @param {string} key - The key of the object.\n * @returns {Promise} The content length of the object in bytes.\n * @throws {TypeError} If the key is not a non-empty string.\n */\n async getContentLength(key: string): Promise {\n this._checkKey(key);\n const headers = {\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('HEAD', encodedKey, {}, headers, '');\n const res = await this._sendRequest(url, 'HEAD', signedHeaders);\n const contentLength = res.headers.get(HEADER_CONTENT_LENGTH);\n return contentLength ? parseInt(contentLength, 10) : 0;\n }\n\n /**\n * Check if a bucket exists.\n * @returns {Promise} True if the bucket exists, false otherwise.\n */\n async bucketExists(): Promise {\n const headers = {\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n const { url, headers: signedHeaders } = await this._sign('HEAD', '', {}, headers, '');\n const res = await this._sendRequest(url, 'HEAD', signedHeaders);\n if (res.ok && res.status === 200) {\n return true;\n }\n return false;\n }\n\n // TBD\n // async createBucket(bucketName) {\n // const xmlBody = `\n // \n // \n // ${this.region}\n // \n // `;\n // const headers = {\n // [HEADER_CONTENT_TYPE]: XML_CONTENT_TYPE,\n // [HEADER_CONTENT_LENGTH]: Buffer.byteLength(xmlBody).toString(),\n // [HEADER_AMZ_CONTENT_SHA256]: await _hash(xmlBody),\n // };\n // const encodedKey = encodeURI(bucketName);\n // const { url, headers: signedHeaders } = await this._sign('PUT', encodedKey, {}, headers, '');\n // const res = await this._sendRequest(url, 'PUT', signedHeaders);\n // if (res.ok && res.status === 200) {\n // return true;\n // }\n // return false;\n // }\n\n /**\n * Check if a file exists in the bucket.\n * @param {string} key - The key of the object.\n * @param {Object} [opts={}] - Additional options for the fileExists operation.\n * @returns {Promise} True if the file exists, false otherwise. 0 - Not found (404), 1 - Found (200), 2 - ETag mismatch (412).\n * @throws {TypeError} If the key is not a non-empty string.\n */\n async fileExists(key: string, opts: Record = {}): Promise {\n this._checkKey(key);\n const { filteredOpts, conditionalHeaders } = this._filterIfHeaders(opts);\n const headers = { [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD, ...conditionalHeaders };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('HEAD', encodedKey, filteredOpts, headers, '');\n try {\n const res = await this._sendRequest(url, 'HEAD', signedHeaders, '', [200, 404, 412, 304]);\n if (res.status === 404) {\n return false;\n }\n if (res.status === 412 || res.status === 304) {\n return null;\n }\n if (res.ok && res.status === 200) return true;\n else this._handleErrorResponse(res);\n return false; // should never happen\n } catch (error: unknown) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n this._log('error', `${ERROR_PREFIX}Failed to check if file exists: ${errorMessage}`);\n throw new Error(`${ERROR_PREFIX}Failed to check if file exists: ${errorMessage}`);\n }\n }\n private async _sign(\n method: HttpMethod,\n keyPath: string,\n query: Object,\n headers: Record,\n body: string | Buffer,\n ): Promise<{ url: string; headers: Record }> {\n const datetime = new Date().toISOString().replace(/[:-]|\\.\\d{3}/g, '');\n const url =\n typeof keyPath === 'string' && keyPath.length > 0 ? new URL(keyPath, this.endpoint) : new URL(this.endpoint);\n url.pathname = `/${encodeURI(this.bucketName)}${url.pathname}`;\n headers[HEADER_AMZ_CONTENT_SHA256] = body ? await _hash(body) : UNSIGNED_PAYLOAD;\n headers[HEADER_AMZ_DATE] = datetime;\n headers[HEADER_HOST] = url.host;\n const canonicalHeaders = this._buildCanonicalHeaders(headers);\n const signedHeaders = Object.keys(headers)\n .map(key => key.toLowerCase())\n .sort()\n .join(';');\n\n const canonicalRequest = await this._buildCanonicalRequest(\n method,\n url,\n query,\n canonicalHeaders,\n signedHeaders,\n body,\n );\n const stringToSign = await this._buildStringToSign(datetime, canonicalRequest);\n const signature = await this._calculateSignature(datetime, stringToSign);\n const authorizationHeader = this._buildAuthorizationHeader(datetime, signedHeaders, signature);\n headers[HEADER_AUTHORIZATION] = authorizationHeader;\n return { url: url.toString(), headers };\n }\n\n private _buildCanonicalHeaders(headers: Record): string {\n return Object.entries(headers)\n .map(([key, value]) => `${key.toLowerCase()}:${String(value).trim()}`)\n .sort()\n .join('\\n');\n }\n\n async _buildCanonicalRequest(\n method: HttpMethod,\n url: URL,\n query: Object,\n canonicalHeaders: string,\n signedHeaders: string,\n body: string | Buffer,\n ): Promise {\n return [\n method,\n url.pathname,\n this._buildCanonicalQueryString(query),\n `${canonicalHeaders}\\n`,\n signedHeaders,\n body ? await _hash(body) : UNSIGNED_PAYLOAD,\n ].join('\\n');\n }\n\n async _buildStringToSign(datetime: string, canonicalRequest: string): Promise {\n const credentialScope = [datetime.slice(0, 8), this.region, S3_SERVICE, AWS_REQUEST_TYPE].join('/');\n return [AWS_ALGORITHM, datetime, credentialScope, await _hash(canonicalRequest)].join('\\n');\n }\n\n async _calculateSignature(datetime: string, stringToSign: string): Promise {\n const signingKey = await this._getSignatureKey(datetime.slice(0, 8));\n return _hmac(signingKey, stringToSign, 'hex');\n }\n\n private _buildAuthorizationHeader(datetime: string, signedHeaders: string, signature: string): string {\n const credentialScope = [datetime.slice(0, 8), this.region, S3_SERVICE, AWS_REQUEST_TYPE].join('/');\n return [\n `${AWS_ALGORITHM} Credential=${this.accessKeyId}/${credentialScope}`,\n `SignedHeaders=${signedHeaders}`,\n `Signature=${signature}`,\n ].join(', ');\n }\n\n private _filterIfHeaders(opts: Record): {\n filteredOpts: Record;\n conditionalHeaders: Record;\n } {\n const filteredOpts: Record = {};\n const conditionalHeaders: Record = {};\n const ifHeaders = ['if-match', 'if-none-match', 'if-modified-since', 'if-unmodified-since'];\n\n for (const [key, value] of Object.entries(opts)) {\n if (ifHeaders.includes(key)) {\n conditionalHeaders[key] = value;\n } else {\n filteredOpts[key] = value;\n }\n }\n\n return { filteredOpts, conditionalHeaders };\n }\n /**\n * List objects in the bucket.\n * @param {string} [delimiter='/'] - The delimiter to use for grouping objects in specific path.\n * @param {string} [prefix=''] - The prefix to filter objects in specific path.\n * @param {number} [maxKeys=1000] - The maximum number of keys to return.\n * @param {string} [method='GET'] - The HTTP method to use (GET or HEAD).\n * @param {Object} [opts={}] - Additional options for the list operation.\n * @returns {Promise} The list of objects or object metadata.\n * @throws {TypeError} If any of the parameters are of incorrect type.\n */\n async list(\n delimiter: string = '/',\n prefix: string = '',\n maxKeys: number = 1000,\n method: HttpMethod = 'GET',\n opts: Object = {},\n ): Promise> {\n this._checkDelimiter(delimiter);\n this._checkPrefix(prefix);\n this._checkMaxKeys(maxKeys);\n this._checkMethodHeadnGet(method);\n this._checkOpts(opts);\n this._log('info', `Listing objects in ${prefix}`);\n\n const query = {\n 'list-type': LIST_TYPE,\n 'max-keys': String(maxKeys),\n ...opts,\n } as { [key: string]: any };\n if (prefix.length > 0) {\n query['prefix'] = prefix;\n }\n const headers = {\n [HEADER_CONTENT_TYPE]: JSON_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n const encodedKey = delimiter === '/' ? delimiter : uriEscape(delimiter);\n const { url, headers: signedHeaders } = await this._sign('GET', encodedKey, query, headers, '');\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n const res = await this._sendRequest(urlWithQuery, 'GET', signedHeaders);\n const responseBody = await res.text();\n\n if (method === 'HEAD') {\n const contentLength = res.headers.get(HEADER_CONTENT_LENGTH);\n const lastModified = res.headers.get(HEADER_LAST_MODIFIED);\n const etag = res.headers.get(HEADER_ETAG);\n\n return {\n size: contentLength ? +contentLength : undefined,\n mtime: lastModified ? new Date(lastModified) : undefined,\n ETag: etag || undefined,\n };\n }\n\n const data = _parseXml(responseBody);\n const output = data.listBucketResult || data.error || data;\n return output.contents || output;\n }\n\n /**\n * List multipart uploads in the bucket.\n * @param {string} [delimiter='/'] - The delimiter to use for grouping objects in specific path.\n * @param {string} [prefix=''] - The prefix to filter objects in specific path.\n * @param {string} [method='GET'] - The HTTP method to use (GET or HEAD).\n * @param {Object} [opts={}] - Additional options for the list operation.\n * @returns {Promise} The list of objects or object metadata.\n * @throws {TypeError} If any of the parameters are of incorrect type.\n */\n async listMultiPartUploads(\n delimiter: string = '/',\n prefix: string = '',\n method: HttpMethod = 'GET',\n opts: Object = {},\n ): Promise {\n this._checkDelimiter(delimiter);\n this._checkPrefix(prefix);\n this._checkMethodHeadnGet(method);\n this._checkOpts(opts);\n this._log('info', `Listing multipart uploads in ${prefix}`);\n\n const query = {\n uploads: '',\n ...opts,\n } as Record;\n const headers = {\n [HEADER_CONTENT_TYPE]: JSON_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n const encodedKey = delimiter === '/' ? delimiter : uriEscape(delimiter);\n const { url, headers: signedHeaders } = await this._sign('GET', encodedKey, query, headers, '');\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n const res = await this._sendRequest(urlWithQuery, 'GET', signedHeaders);\n const responseBody = await res.text();\n\n if (method === 'HEAD') {\n return {\n size: +(res.headers.get(HEADER_CONTENT_LENGTH) ?? '0'),\n mtime: new Date(res.headers.get(HEADER_LAST_MODIFIED) ?? ''),\n ETag: res.headers.get(HEADER_ETAG) ?? '',\n };\n }\n\n const data = _parseXml(responseBody);\n const output = data.listMultipartUploadsResult || data.error || data;\n return output.uploads || output;\n }\n\n /**\n * Get an object from the bucket.\n * @param {string} key - The key of the object to get.\n * @param {Object} [opts={}] - Additional options for the get operation.\n * @returns {Promise} The content of the object. If the object does not exist, null will be returned.\n */\n async get(key: string, opts: Record = {}): Promise {\n this._checkKey(key);\n this._log('info', `Getting object ${key}`);\n const { filteredOpts, conditionalHeaders } = this._filterIfHeaders(opts);\n const headers = {\n [HEADER_CONTENT_TYPE]: JSON_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n ...conditionalHeaders,\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('GET', encodedKey, filteredOpts, headers, '');\n const res = await this._sendRequest(url, 'GET', signedHeaders, '', [200, 404, 412, 304]);\n if (res.status === 404 || res.status === 412 || res.status === 304) {\n this._log('error', `Failed to get object. Status: ${res.status}`);\n return null;\n }\n if (!res.ok) {\n this._log('error', `Failed to get object. Status: ${res.status}`);\n throw new Error(`Failed to get object. Status: ${res.status}`);\n }\n return res.text();\n }\n\n /**\n *\n * @param {string} key - The key of the object to get.\n * @param {Object} [opts={}] - Additional options for the get operation.\n * @returns {Promise<{ etag: string|null; data: string|null }>} The content of the object. If the object does not exist, etag and data will be null.\n */\n async getObjectWithETag(\n key: string,\n opts: Record = {},\n ): Promise<{ etag: string | null; data: string | null }> {\n this._checkKey(key);\n this._log('info', `Getting object ${key}`);\n const { filteredOpts, conditionalHeaders } = this._filterIfHeaders(opts);\n const headers = {\n [HEADER_CONTENT_TYPE]: JSON_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n ...conditionalHeaders,\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('GET', encodedKey, filteredOpts, headers, '');\n try {\n const res = await this._sendRequest(url, 'GET', signedHeaders, '', [200, 404, 412, 304]);\n if (res.status === 404 || res.status === 412 || res.status === 304) {\n this._log('error', `Failed to get object. Status: ${res.status}`);\n return { etag: null, data: null };\n }\n if (!res.ok) {\n this._log('error', `Failed to get object. Status: ${res.status}`);\n throw new Error(`Failed to get object. Status: ${res.status}`);\n }\n\n const etag = res.headers.get('etag');\n if (!etag) {\n throw new Error('ETag not found in response headers');\n }\n const data = await res.text();\n return { etag: sanitizeETag(etag), data };\n } catch (error) {\n this._log('error', `Error getting object ${key} with ETag: ${error}`);\n throw error;\n }\n }\n\n /**\n * Get the ETag of an object.\n * @param {string} key - The key of the object to get.\n * @param {Object} [opts={}] - Additional options for the get operation.\n * @returns {Promise} The ETag of the object or null if the object etag does not match.\n */\n async getEtag(key: string, opts: Record = {}): Promise {\n this._checkKey(key);\n this._log('info', `Getting etag object ${key}`);\n const { filteredOpts, conditionalHeaders } = this._filterIfHeaders(opts);\n const headers = {\n [HEADER_CONTENT_TYPE]: JSON_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n ...conditionalHeaders,\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('HEAD', encodedKey, filteredOpts, headers, '');\n\n const res = await this._sendRequest(url, 'HEAD', signedHeaders, '', [200, 412, 304]);\n this._log('info', `Response status: ${(res.status, res.statusText)}`);\n // etag does not match\n if (res.status === 412 || res.status === 304) {\n return null;\n }\n\n const etag = res.headers.get('etag');\n if (!etag) {\n this._log('error', `ETag not found in response headers`);\n throw new Error(`ETag not found in response headers`);\n }\n return sanitizeETag(etag);\n }\n\n /**\n * Get a response of an object from the bucket.\n * @param {string} key - The key of the object to get.\n * @param {boolean} [wholeFile=true] - Whether to get the whole file or a part.\n * @param {number} [rangeFrom=0] - The range from to get if not getting the whole file.\n * @param {number} [rangeTo=this.maxRequestSizeInBytes] - The range to to get if not getting the whole file. Note: rangeTo is inclusive.\n * @param {Object} [opts={}] - Additional options for the get operation.\n * @returns {Promise} Response of the object content. Use readableStream() to get the stream from .body.\n */\n async getResponse(\n key: string,\n wholeFile: boolean = true,\n rangeFrom: number = 0,\n rangeTo: number = this.maxRequestSizeInBytes,\n opts: Record = {},\n ): Promise {\n this._checkKey(key);\n const { filteredOpts, conditionalHeaders } = this._filterIfHeaders({ ...opts });\n const headers = {\n [HEADER_CONTENT_TYPE]: JSON_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n ...(wholeFile ? {} : { range: `bytes=${rangeFrom}-${rangeTo - 1}` }),\n ...conditionalHeaders,\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('GET', encodedKey, filteredOpts, headers, '');\n const urlWithQuery = `${url}?${new URLSearchParams(filteredOpts)}`;\n\n return this._sendRequest(urlWithQuery, 'GET', signedHeaders);\n }\n\n /**\n * Put an object into the bucket.\n * @param {string} key - The key of the object to put. To create a folder, include a trailing slash.\n * @param {Buffer|string} data - The content of the object to put.\n * @returns {Promise} The response from the put operation.\n * @throws {TypeError} If the key is not a non-empty string or data is not a Buffer or string.\n */\n async put(key: string, data: string | Buffer): Promise {\n this._checkKey(key);\n if (!(data instanceof Buffer || typeof data === 'string')) {\n this._log('error', ERROR_DATA_BUFFER_REQUIRED);\n throw new TypeError(ERROR_DATA_BUFFER_REQUIRED);\n }\n // const encodedKey = encodeURIComponent(key);\n this._log('info', `Uploading object ${key}`);\n const contentLength = typeof data === 'string' ? Buffer.byteLength(data) : data.length;\n const headers = {\n [HEADER_CONTENT_LENGTH]: contentLength,\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('PUT', encodedKey, {}, headers, data);\n const res = await this._sendRequest(url, 'PUT', signedHeaders, data);\n return res;\n }\n\n /**\n * Initiate a multipart upload.\n * @param {string} key - The key of the object to upload.\n * @param {string} [fileType='application/octet-stream'] - The MIME type of the file.\n * @returns {Promise} The upload ID for the multipart upload.\n * @throws {TypeError} If the key is not a non-empty string or fileType is not a string.\n * @throws {Error} If the multipart upload initiation fails.\n */\n async getMultipartUploadId(key: string, fileType: string = DEFAULT_STREAM_CONTENT_TYPE): Promise {\n this._checkKey(key);\n if (typeof fileType !== 'string') {\n this._log('error', `${ERROR_PREFIX}fileType must be a string`);\n throw new TypeError(`${ERROR_PREFIX}fileType must be a string`);\n }\n this._log('info', `Initiating multipart upload for object ${key}`);\n const query = { uploads: '' };\n const headers = {\n [HEADER_CONTENT_TYPE]: fileType,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('POST', encodedKey, query, headers, '');\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n\n const res = await this._sendRequest(urlWithQuery, 'POST', signedHeaders);\n const responseBody = await res.text();\n const parsedResponse = _parseXml(responseBody);\n\n if (\n typeof parsedResponse === 'object' &&\n parsedResponse !== null &&\n 'error' in parsedResponse &&\n typeof parsedResponse.error === 'object' &&\n parsedResponse.error !== null &&\n 'message' in parsedResponse.error\n ) {\n const errorMessage = String(parsedResponse.error.message);\n this._log('error', `${ERROR_PREFIX}Failed to abort multipart upload: ${errorMessage}`);\n throw new Error(`${ERROR_PREFIX}Failed to abort multipart upload: ${errorMessage}`);\n }\n\n if (typeof parsedResponse === 'object' && parsedResponse !== null) {\n if (!parsedResponse.initiateMultipartUploadResult || !parsedResponse.initiateMultipartUploadResult.uploadId) {\n this._log('error', `${ERROR_PREFIX}Failed to create multipart upload: no uploadId in response`);\n throw new Error(`${ERROR_PREFIX}Failed to create multipart upload: Missing upload ID in response`);\n }\n\n return parsedResponse.initiateMultipartUploadResult.uploadId;\n } else {\n this._log('error', `${ERROR_PREFIX}Failed to create multipart upload: unexpected response format`);\n throw new Error(`${ERROR_PREFIX}Failed to create multipart upload: Unexpected response format`);\n }\n }\n\n /**\n * Upload a part in a multipart upload.\n * @param {string} key - The key of the object being uploaded.\n * @param {Buffer|string} data - The content of the part.\n * @param {string} uploadId - The upload ID of the multipart upload.\n * @param {number} partNumber - The part number.\n * @param {Object} [opts={}] - Additional options for the upload.\n * @returns {Promise} The ETag and part number of the uploaded part.\n * @throws {TypeError} If any of the parameters are of incorrect type.\n */\n async uploadPart(\n key: string,\n data: Buffer | string,\n uploadId: string,\n partNumber: number,\n opts: Object = {},\n ): Promise {\n this._validateUploadPartParams(key, data, uploadId, partNumber, opts);\n const query = { uploadId, partNumber, ...opts } as { [key: string]: any };\n const headers = {\n [HEADER_CONTENT_LENGTH]: data.length,\n } as { [key: string]: any };\n\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('PUT', encodedKey, query, headers, data);\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n\n const res = await this._sendRequest(urlWithQuery, 'PUT', signedHeaders, data);\n const ETag = sanitizeETag(res.headers.get('etag') || '');\n return { partNumber, ETag };\n }\n\n private _validateUploadPartParams(\n key: string,\n data: Buffer | string,\n uploadId: string,\n partNumber: number,\n opts: Object,\n ) {\n this._checkKey(key);\n if (!(data instanceof Buffer || typeof data === 'string')) {\n this._log('error', ERROR_DATA_BUFFER_REQUIRED);\n throw new TypeError(ERROR_DATA_BUFFER_REQUIRED);\n }\n if (typeof uploadId !== 'string' || uploadId.trim().length === 0) {\n this._log('error', ERROR_UPLOAD_ID_REQUIRED);\n throw new TypeError(ERROR_UPLOAD_ID_REQUIRED);\n }\n if (!Number.isInteger(partNumber) || partNumber <= 0) {\n this._log('error', `${ERROR_PREFIX}partNumber must be a positive integer`);\n throw new TypeError(`${ERROR_PREFIX}partNumber must be a positive integer`);\n }\n this._checkOpts(opts);\n }\n\n /**\n * Complete a multipart upload.\n * @param {string} key - The key of the object being uploaded.\n * @param {string} uploadId - The upload ID of the multipart upload.\n * @param {Array} parts - An array of objects containing PartNumber and ETag for each part.\n * @returns {Promise} The result of the complete multipart upload operation.\n * @throws {TypeError} If any of the parameters are of incorrect type.\n * @throws {Error} If the complete multipart upload operation fails.\n */\n async completeMultipartUpload(\n key: string,\n uploadId: string,\n parts: Array,\n ): Promise {\n this._checkKey(key);\n if (typeof uploadId !== 'string' || uploadId.trim().length === 0) {\n this._log('error', ERROR_UPLOAD_ID_REQUIRED);\n throw new TypeError(ERROR_UPLOAD_ID_REQUIRED);\n }\n if (!Array.isArray(parts) || parts.length === 0) {\n this._log('error', ERROR_PARTS_REQUIRED);\n throw new TypeError(ERROR_PARTS_REQUIRED);\n }\n if (!parts.every(part => typeof part.partNumber === 'number' && typeof part.ETag === 'string')) {\n this._log('error', ERROR_INVALID_PART);\n throw new TypeError(ERROR_INVALID_PART);\n }\n this._log('info', `Complete multipart upload ${uploadId} for object ${key}`);\n const query = { uploadId };\n const xmlBody = this._buildCompleteMultipartUploadXml(parts);\n const headers = {\n [HEADER_CONTENT_TYPE]: XML_CONTENT_TYPE,\n [HEADER_CONTENT_LENGTH]: Buffer.byteLength(xmlBody).toString(),\n [HEADER_AMZ_CONTENT_SHA256]: await _hash(xmlBody),\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('POST', encodedKey, query, headers, xmlBody);\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n\n const res = await this._sendRequest(urlWithQuery, 'POST', signedHeaders, xmlBody);\n const responseBody = await res.text();\n const parsedResponse = _parseXml(responseBody);\n\n if (\n typeof parsedResponse === 'object' &&\n parsedResponse !== null &&\n 'error' in parsedResponse &&\n typeof parsedResponse.error === 'object' &&\n parsedResponse.error !== null &&\n 'message' in parsedResponse.error\n ) {\n const errorMessage = String(parsedResponse.error.message);\n this._log('error', `${ERROR_PREFIX}Failed to abort multipart upload: ${errorMessage}`);\n throw new Error(`${ERROR_PREFIX}Failed to abort multipart upload: ${errorMessage}`);\n }\n\n return parsedResponse.completeMultipartUploadResult;\n }\n\n /**\n * Aborts a multipart upload.\n * @param {string} key - The key of the object being uploaded.\n * @param {string} uploadId - The ID of the multipart upload to abort.\n * @returns {Promise} - A promise that resolves to the abort response.\n * @throws {Error} If the abort operation fails.\n */\n async abortMultipartUpload(key: string, uploadId: string): Promise {\n // Input validation\n this._checkKey(key);\n if (typeof uploadId !== 'string' || uploadId.trim().length === 0) {\n this._log('error', ERROR_UPLOAD_ID_REQUIRED);\n throw new TypeError(ERROR_UPLOAD_ID_REQUIRED);\n }\n\n this._log('info', `Aborting multipart upload ${uploadId} for object ${key}`);\n\n // Prepare the request\n const query = { uploadId };\n const headers = {\n [HEADER_CONTENT_TYPE]: XML_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n\n try {\n // Sign and send the request\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('DELETE', encodedKey, query, headers, '');\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n\n const res = await this._sendRequest(urlWithQuery, 'DELETE', signedHeaders);\n\n // Check for successful response\n if (res.ok) {\n const responseBody = await res.text();\n const parsedResponse = _parseXml(responseBody);\n\n if (\n typeof parsedResponse === 'object' &&\n parsedResponse !== null &&\n 'error' in parsedResponse &&\n typeof parsedResponse.error === 'object' &&\n parsedResponse.error !== null &&\n 'message' in parsedResponse.error\n ) {\n const errorMessage = String(parsedResponse.error.message);\n this._log('error', `${ERROR_PREFIX}Failed to abort multipart upload: ${errorMessage}`);\n throw new Error(`${ERROR_PREFIX}Failed to abort multipart upload: ${errorMessage}`);\n }\n\n return {\n status: 'Aborted',\n key,\n uploadId,\n response: parsedResponse,\n };\n } else {\n this._log('error', `${ERROR_PREFIX}Abort request failed with status ${res.status}`);\n throw new Error(`${ERROR_PREFIX}Abort request failed with status ${res.status}`);\n }\n } catch (error: unknown) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n this._log('error', `${ERROR_PREFIX}Failed to abort multipart upload for key ${key}: ${errorMessage}`);\n throw new Error(`${ERROR_PREFIX}Failed to abort multipart upload for key ${key}: ${errorMessage}`);\n }\n }\n\n private _buildCompleteMultipartUploadXml(parts: Array): string {\n return `\n \n ${parts\n .map(\n part => `\n \n ${part.partNumber}\n ${part.ETag}\n \n `,\n )\n .join('')}\n \n `;\n }\n\n /**\n * Delete an object from the bucket.\n * @param {string} key - The key of the object to delete.\n * @returns {Promise} The response from the delete operation. True if the delete operation was successful, false otherwise. Note: The delete operation may return a 204 status code even if the object was not found.\n */\n async delete(key: string): Promise {\n this._checkKey(key);\n this._log('info', `Deleting object ${key}`);\n const headers = {\n [HEADER_CONTENT_TYPE]: JSON_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('DELETE', encodedKey, {}, headers, '');\n const res = await this._sendRequest(url, 'DELETE', signedHeaders);\n if (res.status === 204 || res.status === 200) {\n return true;\n }\n return false;\n }\n\n async _sendRequest(\n url: string,\n method: HttpMethod,\n headers: Record,\n body?: string | Buffer,\n toleratedStatusCodes: number[] = [],\n ): Promise {\n this._log('info', `Sending ${method} request to ${url}, headers: ${JSON.stringify(headers)}`);\n const res = await fetch(url, {\n method,\n headers,\n body: ['GET', 'HEAD'].includes(method) ? undefined : body,\n signal: this.requestAbortTimeout !== undefined ? AbortSignal.timeout(this.requestAbortTimeout) : undefined,\n });\n\n if (!res.ok && !toleratedStatusCodes.includes(res.status)) {\n await this._handleErrorResponse(res);\n }\n\n return res;\n }\n\n async _handleErrorResponse(res: Response) {\n const errorBody = await res.text();\n const errorCode = res.headers.get('x-amz-error-code') || 'Unknown';\n const errorMessage = res.headers.get('x-amz-error-message') || res.statusText;\n this._log(\n 'error',\n `${ERROR_PREFIX}Request failed with status ${res.status}: ${errorCode} - ${errorMessage},err body: ${errorBody}`,\n );\n throw new Error(\n `${ERROR_PREFIX}Request failed with status ${res.status}: ${errorCode} - ${errorMessage}, err body: ${errorBody}`,\n );\n }\n\n _buildCanonicalQueryString(queryParams: Object): string {\n if (Object.keys(queryParams).length < 1) {\n return '';\n }\n\n return Object.keys(queryParams)\n .sort()\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent((queryParams as Record)[key])}`)\n .join('&');\n }\n async _getSignatureKey(dateStamp: string): Promise {\n const kDate = await _hmac(`AWS4${this.secretAccessKey}`, dateStamp);\n const kRegion = await _hmac(kDate, this.region);\n const kService = await _hmac(kRegion, S3_SERVICE);\n return _hmac(kService, AWS_REQUEST_TYPE);\n }\n}\n\nconst _hash = async (content: string | Buffer): Promise => {\n const hashSum = _createHash('sha256');\n hashSum.update(content);\n return hashSum.digest('hex');\n};\n\nconst _hmac = async (key: string | Buffer, content: string, encoding?: 'hex'): Promise => {\n const hmacSum = _createHmac('sha256', key);\n hmacSum.update(content);\n return hmacSum.digest(encoding);\n};\nexport const sanitizeETag = (etag: string): string => {\n const replaceChars: Record = {\n '\"': '',\n '"': '',\n '"': '',\n '"': '',\n '"': '',\n };\n return etag.replace(/^(\"|"|")|(\"|"|")$/g, m => replaceChars[m] as string);\n};\n\nconst _parseXml = (str: string): string | object | any => {\n const unescapeXml = (value: string): string => {\n return value\n .replace(/"/g, '\"')\n .replace(/'/g, \"'\")\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/&/g, '&');\n };\n\n const json = {};\n const re = /<(\\w)([-\\w]+)(?:\\/|[^>]*>((?:(?!<\\1)[\\s\\S])*)<\\/\\1\\2)>/gm;\n let match;\n\n while ((match = re.exec(str))) {\n const [, prefix, key, value] = match;\n const fullKey = prefix.toLowerCase() + key;\n const parsedValue = value != null ? _parseXml(value) : true;\n\n if (typeof parsedValue === 'string') {\n (json as { [key: string]: any })[fullKey] = sanitizeETag(unescapeXml(parsedValue));\n } else if (Array.isArray((json as { [key: string]: any })[fullKey])) {\n (json as { [key: string]: any })[fullKey].push(parsedValue);\n } else {\n (json as { [key: string]: any })[fullKey] =\n (json as { [key: string]: any })[fullKey] != null\n ? [(json as { [key: string]: any })[fullKey], parsedValue]\n : expectArray[fullKey]\n ? [parsedValue]\n : parsedValue;\n }\n }\n\n return Object.keys(json).length ? json : unescapeXml(str);\n};\n\nexport { S3 };\nexport default S3;\n", "'use strict';\n\nimport { S3 } from 'ultralight-s3';\nimport avro from 'avro-js'; // eslint-disable-line\nimport {\n\tlowstorage_ERROR_CODES,\n\tlowstorageError,\n\tCollectionNotFoundError,\n\tSchemaValidationError,\n\tDocumentValidationError,\n\tS3OperationError,\n} from './errors.js';\nimport { matchesQuery, generateUUID, inferAvroType } from './helpers.js';\n\nconst MODULE_NAME = 'lowstorage';\nconst DEFAULT_DELIMITER = '/';\nconst PROJECT_DIR_PREFIX = 'lowstorage';\nconst COL_SUFFIX = '.avro';\nconst CHUNG_1MB = 1024 * 1024;\nconst CHUNG_5MB = 5 * CHUNG_1MB;\n\nconst errorValidationFn = (errorCode = lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR) => {\n\tthrow new DocumentValidationError(`${MODULE_NAME}: Invalid document or schema`, errorCode);\n};\n\n// code / description\n// init of new collection is automatically creating it in the bucket\n// there is optional (opt-in) switch to create new collections in bucket\n// if the schema is not provided, it will create empty buffer and save it\n// if the schema is provided, it will save it in memory and use it for all ops\n// if the schema is updated, it will save it in memory and use it for all ops\n// exposed functions are:\n// listCollections \u2705\n// collectionExists \u2705\n// createCollection \u2705\n// removeCollection \u2705\n// renameCollection \u2705\n// updateCollectionSchema \u274C\n// collection \u2705\n// s3 \u2705\n\n// Operations over collections are:\n// insert \u2705\n// find \u2705\n// findOne \u2705\n// update \u2705\n// updateOne \u2705\n// delete \u2705\n// count \u2705\n\n// Errors:\n// lowstorageError \u2705\n// CollectionNotFoundError \u2705\n// SchemaValidationError \u2705\n// DocumentValidationError \u2705\n// S3OperationError \u2705\n\n/**\n * lowstorage class for managing collections and performing operations on top of S3-compatible storages.\n * @class\n * @example\n * const storage = new lowstorage({\n * \taccessKeyId: 'YOUR_ACCESS_KEY',\n * \tsecretAccessKey: 'YOUR_SECRET_KEY',\n * \tendpoint: 'YOUR_ENDPOINT',\n * \tbucketName: 'YOUR_BUCKET_NAME',\n * \tregion: 'YOUR_REGION',\n * });\n *\n * // Create a collection\n * const userCol = await storage.collection('users');\n *\n * // Insert a document\n * await userCol.insert({\n * \tname: 'Kevin',\n * \tgender: 'whatever',\n * \tposts: [],\n * });\n *\n * // Show all users\n * const allUsers = await userCol.find({});\n *\n * // Find users with pagination (e.g., page 2, 10 users per page)\n * const secondPageUsers = await userCol.find({}, { skip: 10, limit: 10 });\n *\n * // Find user by ID and update name\n * await userCol.update({ _id: id }, { name: 'Carlos' });\n */\nclass lowstorage {\n\t/**\n\t * Create a new lowstorage instance.\n\t * @param {Object} options - Configuration options for lowstorage.\n\t * @param {string} options.accessKeyId - S3 access key ID.\n\t * @param {string} options.secretAccessKey - S3 secret access key.\n\t * @param {string} options.endpoint - S3 endpoint URL.\n\t * @param {string} options.bucketName - S3 bucket name.\n\t * @param {string} [options.region='auto'] - S3 region.\n\t * @param {Object} [options.logger=null] - Logger object.\n\t * @param {string} [options.dirPrefix=PROJECT_DIR_PREFIX] - Directory prefix for collections.\n\t * @returns {lowstorage} A new lowstorage instance.\n\t */\n\tconstructor(\n\t\toptions = {\n\t\t\taccessKeyId: undefined,\n\t\t\tsecretAccessKey: undefined,\n\t\t\tendpoint: undefined,\n\t\t\tbucketName: undefined,\n\t\t\tregion: 'auto',\n\t\t\tlogger: null,\n\t\t\tdirPrefix: PROJECT_DIR_PREFIX,\n\t\t},\n\t) {\n\t\tthis._checkArgs(options);\n\t\tthis._schemas = new Map();\n\t\tthis._s3 = new S3(options);\n\t\tthis._dirPrefix = options.dirPrefix || PROJECT_DIR_PREFIX;\n\t\tthis._avro = avro;\n\t}\n\n\t_checkArgs = (args) => {\n\t\tconst requiredFields = ['accessKeyId', 'secretAccessKey', 'endpoint', 'bucketName'];\n\t\tfor (const field of requiredFields) {\n\t\t\tif (!args[field]) {\n\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: ${field} is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n\t\t\t}\n\t\t}\n\t};\n\n\t_hasColName = (colName) => {\n\t\tif (colName.trim() === '' || colName === null || typeof colName === 'undefined') {\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Collection name is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n\t\t}\n\t};\n\n\t/**\n\t * List all collections.\n\t * @returns {Promise} An array of collection names.\n\t * @throws {S3OperationError} If there's an error during S3 operation.\n\t */\n\tasync listCollections() {\n\t\ttry {\n\t\t\tconst listed = await this._s3.list(DEFAULT_DELIMITER, this._dirPrefix);\n\t\t\tif (typeof listed === 'object' && listed !== null && listed.keyCount === '0') return [];\n\t\t\t// remove the delimiter from the key\n\t\t\treturn listed.map((entry) => entry.key.slice(this._dirPrefix.length + 1, -COL_SUFFIX.length));\n\t\t} catch (error) {\n\t\t\tthrow new S3OperationError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t}\n\t}\n\n\t/**\n\t * Check if a collection exists.\n\t * @param {string} colName - The name of the collection.\n\t * @returns {Promise} True if the collection exists, false otherwise.\n\t * @throws {lowstorageError} If there's an error.\n\t */\n\tasync collectionExists(colName) {\n\t\ttry {\n\t\t\tthis._hasColName(colName);\n\t\t\tconst exists = await this._s3.fileExists(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`);\n\t\t\treturn exists;\n\t\t} catch (error) {\n\t\t\tif (error.message.includes('Not Found')) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND);\n\t\t}\n\t}\n\n\t/**\n\t * Create a new collection.\n\t * @param {string} colName - The name of the collection.\n\t * @param {Object} [schema] - The schema for the collection.\n\t * @param {Array} [data=[]] - The initial data for the collection.\n\t * @returns {Promise} A Promise that resolves to a Collection object.\n\t * @throws {lowstorageError} If there's an error.\n\t */\n\tasync createCollection(colName, schema, data = []) {\n\t\ttry {\n\t\t\tthis._hasColName(colName);\n\t\t\tconst exists = await this.collectionExists(colName);\n\t\t\tif (!exists) {\n\t\t\t\tawait this._s3.put(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`, data.length > 0 ? data : '');\n\t\t\t\treturn this.collection(colName, schema);\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Collection ${colName} already exists`, lowstorage_ERROR_CODES.COLLECTION_EXISTS);\n\t\t} catch (error) {\n\t\t\tif (error instanceof lowstorageError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.CREATE_COLLECTION_ERROR);\n\t\t}\n\t}\n\n\t/**\n\t * Remove a collection.\n\t * @param {string} colName - The name of the collection.\n\t * @returns {Promise} A Promise that resolves to true if the collection is removed, false otherwise.\n\t * @throws {lowstorageError} If there's an error.\n\t */\n\tasync removeCollection(colName) {\n\t\ttry {\n\t\t\tthis._hasColName(colName);\n\t\t\tconst KEY = `${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`;\n\t\t\tconst exists = await this.collectionExists(colName);\n\t\t\tif (exists) {\n\t\t\t\tawait this._s3.delete(KEY);\n\t\t\t\tconst exists2 = await this.collectionExists(colName);\n\t\t\t\tif (typeof exists2 === 'boolean') {\n\t\t\t\t\tif (!exists2) {\n\t\t\t\t\t\tthis._schemas.delete(colName);\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Failed to delete collection ${colName}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t\t}\n\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to delete collection ${colName}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Collection ${colName} does not exist`, lowstorage_ERROR_CODES.REMOVE_COLLECTION_ERROR);\n\t\t} catch (error) {\n\t\t\tif (error instanceof S3OperationError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(\n\t\t\t\t`${MODULE_NAME}: Failed to remove collection: ${error.message}`,\n\t\t\t\tlowstorage_ERROR_CODES.REMOVE_COLLECTION_ERROR,\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Rename a collection.\n\t * @param {string} oldColName - The current name of the collection.\n\t * @param {string} newColName - The new name of the collection.\n\t * @returns {Promise} A Promise that resolves to a Collection object.\n\t * @throws {lowstorageError} If there's an error.\n\t */\n\tasync renameCollection(oldColName, newColName) {\n\t\ttry {\n\t\t\tthis._hasColName(oldColName);\n\t\t\tthis._hasColName(newColName);\n\t\t\tconst exists = await this.collectionExists(oldColName);\n\t\t\tif (!exists) {\n\t\t\t\tthrow new CollectionNotFoundError(\n\t\t\t\t\t`${MODULE_NAME}: Collection ${oldColName} does not exist`,\n\t\t\t\t\tlowstorage_ERROR_CODES.COLLECTION_NOT_FOUND,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst oldCol = await this.collection(oldColName);\n\t\t\tconst oldColData = await oldCol._loadData();\n\t\t\tconst success = await this.removeCollection(oldColName);\n\t\t\tif (!success) {\n\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Failed to rename collection`, lowstorage_ERROR_CODES.RENAME_COLLECTION_ERROR);\n\t\t\t}\n\t\t\treturn await this.createCollection(newColName, oldCol._avroType, oldColData);\n\t\t} catch (error) {\n\t\t\tif (error instanceof lowstorageError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(\n\t\t\t\t`${MODULE_NAME}: Rename collection failed: ${error.message}`,\n\t\t\t\tlowstorage_ERROR_CODES.RENAME_COLLECTION_ERROR,\n\t\t\t);\n\t\t}\n\t}\n\n\t// TODO: update collection schema\n\t// async updateCollectionSchema(colName, newSchema) {\n\t// \ttry {\n\t// \t\tthis._hasColName(colName);\n\t// \t\t// Check if collection exists\n\t// \t\tconst exists = await this.collectionExists(colName);\n\t// \t\tif (!exists) {\n\t// \t\t\tthrow new CollectionNotFoundError(`${MODULE_NAME}: Collection ${colName} does not exist`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND);\n\t// \t\t}\n\t// \t\tif (typeof schema === 'undefined' || schema === null) {\n\t// \t\t\tthrow new lowstorageError(`${MODULE_NAME}: Schema is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n\t// \t\t}\n\t// \t\tconst col = this.collection(colName);\n\t// \t\tconst colData = await col._loadDataBuffer();\n\t// \t\tconst avroType = this._avro.parse(schema);\n\t// \t\tthis._schemas.set(colName, avroType);\n\n\t// \t} catch (error) {\n\t// \t\tif (error instanceof S3OperationError) {\n\t// \t\t\tthrow error;\n\t// \t\t}\n\t// \t\tthrow new lowstorageError(\n\t// \t\t\t`${MODULE_NAME}: Failed to update collection schema: ${error.message}`,\n\t// \t\t\tlowstorage_ERROR_CODES.UPDATE_COLLECTION_SCHEMA_ERROR,\n\t// \t\t);\n\t// \t}\n\t// }\n\n\t/**\n\t * Get or create a collection.\n\t * @param {string} colName - The name of the collection.\n\t * @param {Object} [schema] - The schema for the collection.\n\t * @param {boolean} [autoCreate=true] - Whether to automatically create the collection if it doesn't exist.\n\t * @returns {Promise} A Promise that resolves to a Collection object.\n\t * @throws {lowstorageError} If there's an error.\n\t */\n\tasync collection(colName, schema, autoCreate = true) {\n\t\ttry {\n\t\t\tthis._hasColName(colName);\n\t\t\tconst colPath = `${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`;\n\t\t\tlet avroType;\n\n\t\t\tconst exists = await this._s3.fileExists(colPath);\n\n\t\t\tif (!exists) {\n\t\t\t\tif (!autoCreate) {\n\t\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Collection ${colName} does not exist`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND);\n\t\t\t\t}\n\t\t\t\tconst emptyData = Buffer.from('', 'utf8');\n\t\t\t\tawait this._s3.put(colPath, emptyData);\n\t\t\t}\n\n\t\t\tif (schema) {\n\t\t\t\tavroType = this._avro.parse(schema);\n\t\t\t\tthis._schemas.set(colName, avroType);\n\t\t\t} else if (this._schemas.has(colName)) {\n\t\t\t\tavroType = this._schemas.get(colName);\n\t\t\t}\n\n\t\t\treturn new Collection(colName, this._s3, avroType, this._dirPrefix);\n\t\t} catch (error) {\n\t\t\t// check if error message contains \"unknown type\" and if so, throw a schema validation error\n\t\t\tif (error.message.includes('unknown type')) {\n\t\t\t\tthrow new SchemaValidationError(\n\t\t\t\t\t`${MODULE_NAME}: Schema input is invalid: ${error.message}`,\n\t\t\t\t\tlowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND);\n\t\t}\n\t}\n\n\t/**\n\t * Get the S3 instance associated with the lowstorage instance.\n\t * @returns {S3} The S3 instance. Use this to perform S3 operations. Check for ultralight-s3 for more details.\n\t */\n\ts3 = () => {\n\t\treturn this._s3;\n\t};\n}\n\n/**\n * Collection class for managing documents in a collection.\n * @class\n * @example\n * const storage = new lowstorage({\n * \taccessKeyId: 'YOUR_ACCESS_KEY',\n * \tsecretAccessKey: 'YOUR_SECRET_KEY',\n * \tendpoint: 'YOUR_ENDPOINT',\n * \tbucketName: 'YOUR_BUCKET_NAME',\n * \tregion: 'YOUR_REGION',\n * });\n *\n * // Create a collection\n * const userCol = await storage.collection('users');\n *\n * // Insert a document\n * await userCol.insert({\n * \tname: 'Kevin',\n * \tgender: 'whatever',\n * \tposts: [],\n * });\n *\n * // Show all users\n * const allUsers = await userCol.find({});\n *\n * // Find users with pagination (e.g., page 2, 10 users per page)\n * const secondPageUsers = await userCol.find({}, { skip: 10, limit: 10 });\n *\n * // Find user by ID and update name\n * await userCol.update({ _id: id }, { name: 'Carlos' });\n */\nclass Collection {\n\t/**\n\t * Create a new Collection instance.\n\t * @param {string} colName - The name of the collection.\n\t * @param {S3} s3 - The S3 instance.\n\t * @param {Object} [avroType] - The Avro type for the collection.\n\t * @param {string} [dirPrefix=PROJECT_DIR_PREFIX] - The directory prefix for the collection.\n\t * @param {boolean} [safeWrite=false] - Whether to perform a safe write operation. It doublechecks the ETag of the object before writing. False = overwrites the object, True = only writes if the object has not been modified.\n\t * @returns {Collection} A new Collection instance.\n\t */\n\tconstructor(colName, s3, avroType, dirPrefix = PROJECT_DIR_PREFIX, safeWrite = false) {\n\t\tthis._colName = colName;\n\t\tthis._s3 = s3;\n\t\tthis._avro = avro;\n\t\tthis._lastETag = '';\n\t\tthis._dataCache = [];\n\t\tthis._avroType = avroType;\n\t\tthis._dirPrefix = dirPrefix;\n\t\tthis._safeWrite = safeWrite;\n\t}\n\n\tgetProps = () => ({\n\t\tcolName: this._colName,\n\t\ts3: this._s3,\n\t\tavro: this._avro,\n\t\tavroType: this._avroType,\n\t\tdirPrefix: this._dirPrefix,\n\t\tsafeWrite: this._safeWrite,\n\t});\n\n\tsetProps = (props) => {\n\t\tthis._colName = props.colName;\n\t\tthis._s3 = props.s3;\n\t\tthis._avro = props.avro;\n\t\tthis._avroType = props.avroType;\n\t\tthis._dirPrefix = props.dirPrefix;\n\t\tthis._safeWrite = props.safeWrite;\n\t};\n\n\tsetSafeWrite = (safeWrite) => {\n\t\tthis._safeWrite = safeWrite;\n\t};\n\n\tgetSafeWrite = () => {\n\t\treturn this._safeWrite;\n\t};\n\n\tgetAvroSchema = () => {\n\t\treturn this._avroType;\n\t};\n\n\tsetAvroSchema = (schema) => {\n\t\tthis._avroType = this._avro.parse(schema);\n\t};\n\n\tasync _loadData() {\n\t\ttry {\n\t\t\tconst KEY = `${this._dirPrefix}${DEFAULT_DELIMITER}${this._colName}${COL_SUFFIX}`;\n\t\t\tconst CHUNK_SIZE = this._s3.getMaxRequestSizeInBytes() || CHUNG_5MB;\n\t\t\tif (this._avroType === null || typeof this._avroType === 'undefined') {\n\t\t\t\tthrow new lowstorageError(\n\t\t\t\t\t`${MODULE_NAME}: Missing type definition. Configure before operations `,\n\t\t\t\t\tlowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconsole.log('Getting object:', KEY, this._lastETag);\n\t\t\tlet { etag, data } = await this._s3.getObjectWithETag(KEY, { 'if-none-match': this._lastETag });\n\t\t\tconsole.log('data :::::::::::::::::::::::::', data, etag, this._dataCache);\n\t\t\tif (data === null) {\n\t\t\t\t// console.log('data is null, returning cache');\n\t\t\t\treturn this._dataCache;\n\t\t\t}\n\t\t\tthis._lastETag = etag === null ? this._lastETag : etag;\n\t\t\tconst wrapperType = this._avro.parse({ type: 'array', items: this._avroType });\n\t\t\tif (data.length < CHUNK_SIZE) {\n\t\t\t\tthis._dataCache = data.length > 0 ? wrapperType.fromBuffer(data) : [];\n\t\t\t\treturn this._dataCache;\n\t\t\t}\n\t\t\tlet offset = CHUNK_SIZE;\n\t\t\tlet bufferArr = [Buffer.from(data, 'utf8')];\n\t\t\tlet repeat = true;\n\t\t\twhile (repeat) {\n\t\t\t\tconst nextDataResponse = await this._s3.getResponse(KEY, false, offset, offset + CHUNK_SIZE);\n\t\t\t\tconst nextDataBody = await nextDataResponse.text();\n\t\t\t\tbufferArr.push(Buffer.from(nextDataBody, 'utf8'));\n\t\t\t\toffset += CHUNK_SIZE;\n\t\t\t\tconst contentLength = nextDataResponse.headers.get('content-length') || nextDataBody.length;\n\t\t\t\tif (contentLength < CHUNK_SIZE) {\n\t\t\t\t\trepeat = false;\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst bufferedData = Buffer.concat(bufferArr);\n\t\t\tthis._dataCache = wrapperType.fromBuffer(bufferedData);\n\t\t\treturn this._dataCache;\n\t\t} catch (error) {\n\t\t\tif (error.toString().indexOf('status 404: Unknown - Not Found') > -1) {\n\t\t\t\tthis._dataCache = [];\n\t\t\t\treturn this._dataCache;\n\t\t\t}\n\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to load data: ${error.message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t}\n\t}\n\n\tasync _saveData(data) {\n\t\ttry {\n\t\t\tif (this._avroType === null || typeof this._avroType === 'undefined') {\n\t\t\t\tthrow new lowstorageError(\n\t\t\t\t\t`${MODULE_NAME}: Missing type definition. Configure before operations `,\n\t\t\t\t\tlowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst wrapperType = this._avro.parse({ type: 'array', items: this._avroType });\n\t\t\tconst dataBuffer = data.length > 0 ? wrapperType.toBuffer(data) : Buffer.from('', 'utf8');\n\n\t\t\tconst KEY = `${this._dirPrefix}${DEFAULT_DELIMITER}${this._colName}${COL_SUFFIX}`;\n\t\t\tif (this._safeWrite && this._lastETag !== '') {\n\t\t\t\tconst currentETag = await this._s3.getEtag(KEY);\n\t\t\t\t// If we have a current ETag, check if it matches our last known ETag\n\t\t\t\tif (currentETag !== null && currentETag !== this._lastETag) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst resp = await this._s3.put(KEY, dataBuffer);\n\t\t\tif (resp.status !== 200) {\n\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to save data`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t}\n\n\t\t\t// Update the cached ETag\n\t\t\tconst newETag = resp.headers.get('etag');\n\t\t\t// console.log('saveddata newETag', this._s3.sanitizeETag(newETag));\n\t\t\tif (newETag) {\n\t\t\t\tthis._lastETag = this._s3.sanitizeETag(newETag);\n\t\t\t\t// console.log('saveddata lastETag', this._lastETag, 'data is ', data);\n\t\t\t\tthis._dataCache = data;\n\t\t\t}\n\t\t\treturn true;\n\t\t} catch (error) {\n\t\t\tif (error instanceof S3OperationError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.SAVE_DATA_ERROR);\n\t\t}\n\t}\n\n\t/**\n\t * Insert a document into the collection.\n\t * @param {Object|Array} doc - The document to insert.\n\t * @param {Object} [schema=undefined] - The schema for the document.\n\t * @returns {Promise} A Promise that resolves to the array of inserted document(s).\n\t * @throws {lowstorageError} If there's an error.\n\t */\n\tasync insert(doc, schema = undefined) {\n\t\ttry {\n\t\t\tif (doc === undefined || doc === null) {\n\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Document is required for insert`, lowstorage_ERROR_CODES.INSERT_ERROR);\n\t\t\t}\n\t\t\tif (typeof doc !== 'object' && !Array.isArray(doc)) {\n\t\t\t\tthrow new DocumentValidationError(\n\t\t\t\t\t`${MODULE_NAME}: Document must be an object or an array`,\n\t\t\t\t\tlowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst items = !Array.isArray(doc) ? [doc] : doc;\n\n\t\t\tconst schemaWithId = schema || this._avroType || inferAvroType(items[0]);\n\t\t\tconst avroType = this._avro.parse(schemaWithId);\n\t\t\tif (!avroType) {\n\t\t\t\tthrow new SchemaValidationError(\n\t\t\t\t\t`${MODULE_NAME}: Schema is required - Pass a schema to the insert method`,\n\t\t\t\t\tlowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR,\n\t\t\t\t);\n\t\t\t}\n\t\t\tthis._avroType = avroType;\n\t\t\tconst data = await this._loadData();\n\t\t\tfor (let item of items) {\n\t\t\t\tif (typeof item !== 'object' || item === null) {\n\t\t\t\t\tthrow new DocumentValidationError(\n\t\t\t\t\t\t`${MODULE_NAME}: Invalid input: input must be an object or an array of objects`,\n\t\t\t\t\t\tlowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\titem._id = item._id || (await generateUUID());\n\t\t\t\tconst validBuffer = this._avroType.isValid(item, {\n\t\t\t\t\terrorHook: errorValidationFn,\n\t\t\t\t\tnoUndeclaredFields: true,\n\t\t\t\t});\n\t\t\t\tif (validBuffer === true) {\n\t\t\t\t\tdata.push(item);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new DocumentValidationError(`${MODULE_NAME}: Invalid document or schema`, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR);\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst success = await this._saveData(data);\n\t\t\tif (!success) {\n\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to insert document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t}\n\t\t\treturn items;\n\t\t} catch (error) {\n\t\t\tif (error.message.includes('unknown type')) {\n\t\t\t\tthrow new SchemaValidationError(\n\t\t\t\t\t`${MODULE_NAME}: Schema input is invalid: ${error.message}`,\n\t\t\t\t\tlowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (error instanceof lowstorageError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME} Insert operation failed: ${error.message}`, lowstorage_ERROR_CODES.INSERT_ERROR);\n\t\t}\n\t}\n\n\t/**\n\t * Find documents in the collection.\n\t * @param {Object} [query={}] - The query to filter documents.\n\t * @param {Object} [options={}] - The options for pagination.\n\t * @param {number} [options.skip=0] - The number of documents to skip. Default is 0.\n\t * @param {number} [options.limit=undefined] - The maximum number of documents to return. Default is undefined, which means no limit.\n\t * @returns {Promise} A Promise that resolves to an array of matching documents.\n\t * @throws {lowstorageError} If there's an error.\n\t */\n\tasync find(query = {}, options = {}) {\n\t\ttry {\n\t\t\tif (query === undefined || query === null) {\n\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Query is required for update`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n\t\t\t}\n\t\t\tconst data = await this._loadData();\n\t\t\tconst start = parseInt(options.skip, 10) || 0;\n\t\t\tconst end = parseInt(options.limit, 10) ? start + parseInt(options.limit, 10) : undefined;\n\t\t\tconst filteredData = data.filter((doc) => matchesQuery(doc, query)).slice(start, end);\n\t\t\treturn filteredData;\n\t\t} catch (error) {\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Find operation failed: ${error.message}`, lowstorage_ERROR_CODES.FIND_ERROR);\n\t\t}\n\t}\n\n\t/**\n\t * Find the first document in the collection that matches the query.\n\t * @param {Object} [query={}] - The query to filter documents.\n\t * @returns {Promise} A Promise that resolves to the first matching document or null if no match is found.\n\t * @throws {lowstorageError} If there's an error.\n\t */\n\tasync findOne(query = {}) {\n\t\ttry {\n\t\t\tif (query === null) {\n\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Query cannot be null`, lowstorage_ERROR_CODES.INVALID_ARGUMENT);\n\t\t\t}\n\t\t\tconst result = await this.find(query, { limit: 1 });\n\t\t\treturn result[0] || null;\n\t\t} catch (error) {\n\t\t\tif (error instanceof lowstorageError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: FindOne operation failed: ${error.message}`, lowstorage_ERROR_CODES.FIND_ONE_ERROR);\n\t\t}\n\t}\n\n\t/**\n\t * Update a single document in the collection that matches the query.\n\t * @param {Object} [query={}] - The query to filter the document to update.\n\t * @param {Object} [update={}] - The update operations to apply to the matching document.\n\t * @returns {Promise} A Promise that resolves to number of documents updated.\n\t * @throws {lowstorageError} If the updateOne operation fails.\n\t * @throws {SchemaValidationError} If the schema is not defined for the collection.\n\t * @throws {DocumentValidationError} If the updated document is invalid.\n\t * @throws {S3OperationError} If the S3 operation fails.\n\t */\n\tasync update(query = {}, update = {}, options = {}) {\n\t\ttry {\n\t\t\tif (query === undefined || query === null || update === undefined || update === null) {\n\t\t\t\tthrow new lowstorageError(\n\t\t\t\t\t`${MODULE_NAME}: Query and update values are required for update`,\n\t\t\t\t\tlowstorage_ERROR_CODES.MISSING_ARGUMENT,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (!this._avroType) {\n\t\t\t\tthrow new SchemaValidationError(\n\t\t\t\t\t`${MODULE_NAME}: Schema is not defined for this collection`,\n\t\t\t\t\tlowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst data = await this._loadData();\n\t\t\tif (data.length === 0) return 0;\n\t\t\tlet updatedCount = 0;\n\t\t\tfor (let i = 0; i < data.length; i++) {\n\t\t\t\tif (matchesQuery(data[i], query)) {\n\t\t\t\t\tconst updatedDoc = { ...data[i], ...update };\n\t\t\t\t\tconst isValid = this._avroType.isValid(updatedDoc, {\n\t\t\t\t\t\terrorHook: errorValidationFn,\n\t\t\t\t\t\tnoUndeclaredFields: true,\n\t\t\t\t\t});\n\t\t\t\t\tif (isValid === true) {\n\t\t\t\t\t\tdata[i] = updatedDoc;\n\t\t\t\t\t\tupdatedCount++;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow new DocumentValidationError(\n\t\t\t\t\t\t\t`${MODULE_NAME}: Invalid document or schema`,\n\t\t\t\t\t\t\tlowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (updatedCount > 0) {\n\t\t\t\tconst success = await this._saveData(data);\n\t\t\t\tif (!success) {\n\t\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t\t}\n\t\t\t} else if (options.upsert) {\n\t\t\t\t// If upsert is true, we need to insert the document\n\t\t\t\tconst success = await this.insert(update);\n\t\t\t\tif (!success) {\n\t\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t\t}\n\t\t\t\tupdatedCount = 1;\n\t\t\t}\n\t\t\treturn updatedCount;\n\t\t} catch (error) {\n\t\t\tif (error instanceof S3OperationError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Update operation failed: ${error.message}`, lowstorage_ERROR_CODES.UPDATE_ERROR);\n\t\t}\n\t}\n\n\t/**\n\t * Update a single document in the collection that matches the query.\n\t * @param {Object} [query={}] - The query to filter the document to update.\n\t * @param {Object} [update={}] - The update operations to apply to the matching document.\n\t * @returns {Promise} A Promise that resolves to 1 if a document was updated, 0 otherwise.\n\t * @throws {lowstorageError} If the updateOne operation fails.\n\t * @throws {SchemaValidationError} If the schema is not defined for the collection.\n\t * @throws {DocumentValidationError} If the updated document is invalid.\n\t * @throws {S3OperationError} If the S3 operation fails.\n\t */\n\tasync updateOne(query = {}, update = {}, options = {}) {\n\t\ttry {\n\t\t\tif (query === undefined || query === null || update === undefined || update === null) {\n\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Query is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n\t\t\t}\n\t\t\tif (!this._avroType) {\n\t\t\t\tthrow new SchemaValidationError(\n\t\t\t\t\t`${MODULE_NAME}: Schema is not defined for this collection`,\n\t\t\t\t\tlowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst data = await this._loadData();\n\t\t\tif (data.length === 0) return 0;\n\t\t\tconst docIndex = data.findIndex((doc) => matchesQuery(doc, query));\n\n\t\t\tif (docIndex !== -1) {\n\t\t\t\tconst updatedDoc = { ...data[docIndex], ...update };\n\t\t\t\tconst isValid = this._avroType.isValid(updatedDoc, {\n\t\t\t\t\terrorHook: errorValidationFn,\n\t\t\t\t\tnoUndeclaredFields: true,\n\t\t\t\t});\n\t\t\t\tif (isValid === true) {\n\t\t\t\t\tdata[docIndex] = updatedDoc;\n\t\t\t\t\tconst success = await this._saveData(data);\n\t\t\t\t\tif (!success) {\n\t\t\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t\t\t}\n\t\t\t\t\treturn 1;\n\t\t\t\t} else {\n\t\t\t\t\tthrow new DocumentValidationError(`${MODULE_NAME}: Invalid document or schema`, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (options.upsert) {\n\t\t\t\t// If upsert is true, we need to insert the document\n\t\t\t\tconst success = await this.insert(update);\n\t\t\t\tif (!success) {\n\t\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t\t}\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t\treturn 0;\n\t\t} catch (error) {\n\t\t\tif (error instanceof lowstorageError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: UpdateOne operation failed: ${error.message}`, lowstorage_ERROR_CODES.UPDATE_ONE_ERROR);\n\t\t}\n\t}\n\n\t/**\n\t * Delete documents from the collection.\n\t * @param {Object} [query={}] - The query to filter documents to delete.\n\t * @returns {Promise} A Promise that resolves to the number of documents deleted.\n\t * @throws {lowstorageError} If the delete operation fails.\n\t * @throws {S3OperationError} If the S3 operation fails.\n\t */\n\tasync delete(query = {}) {\n\t\ttry {\n\t\t\tif (query === undefined || query === null) {\n\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Query is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n\t\t\t}\n\t\t\tconst data = await this._loadData();\n\t\t\tif (data.length === 0) return 0;\n\t\t\tconst initialLength = data.length;\n\n\t\t\tconst newData = data.filter((doc) => !matchesQuery(doc, query));\n\t\t\tconst success = await this._saveData(newData);\n\t\t\tif (!success) {\n\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to delete document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t}\n\t\t\treturn initialLength - newData.length;\n\t\t} catch (error) {\n\t\t\tif (error instanceof S3OperationError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Delete operation failed: ${error.message}`, lowstorage_ERROR_CODES.DELETE_ERROR);\n\t\t}\n\t}\n\n\t/**\n\t * Delete all documents from the collection.\n\t * @returns {Promise} A Promise that resolves to the number of documents deleted.\n\t * @throws {lowstorageError} If the delete operation fails.\n\t * @throws {S3OperationError} If the S3 operation fails.\n\t */\n\tasync deleteAll() {\n\t\ttry {\n\t\t\tconst data = await this._loadData();\n\t\t\tconst initialLength = data.length;\n\t\t\tconst success = await this._saveData([]);\n\t\t\tif (!success) {\n\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to delete document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t}\n\t\t\treturn initialLength;\n\t\t} catch (error) {\n\t\t\tif (error instanceof S3OperationError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Delete operation failed: ${error.message}`, lowstorage_ERROR_CODES.DELETE_ERROR);\n\t\t}\n\t}\n\n\t/**\n\t * Count the number of documents in the collection.\n\t * @param {Object} [query={}] - The query to filter documents.\n\t * @returns {Promise} A Promise that resolves to the number of documents in the collection.\n\t * @throws {lowstorageError} If the count operation fails.\n\t */\n\tasync count(query = {}) {\n\t\ttry {\n\t\t\tconst data = await this.find(query);\n\t\t\treturn data.length;\n\t\t} catch (error) {\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Count operation failed: ${error.message}`, lowstorage_ERROR_CODES.COUNT_ERROR);\n\t\t}\n\t}\n}\n\n// export default lowstorage;\nexport { lowstorage, lowstorageError, lowstorage_ERROR_CODES };\n", "'use strict';\n\nconst lowstorage_ERROR_CODES = {\n\tMISSING_ARGUMENT: 'MISSING_ARGUMENT',\n\tCOLLECTION_EXISTS: 'COLLECTION_EXISTS',\n\tCREATE_COLLECTION_ERROR: 'CREATE_COLLECTION_ERROR',\n\tRENAME_COLLECTION_ERROR: 'RENAME_COLLECTION_ERROR',\n\tREMOVE_COLLECTION_ERROR: 'REMOVE_COLLECTION_ERROR',\n\tUPDATE_COLLECTION_SCHEMA_ERROR: 'UPDATE_COLLECTION_SCHEMA_ERROR',\n\tCOLLECTION_NOT_FOUND: 'COLLECTION_NOT_FOUND',\n\tSCHEMA_VALIDATION_ERROR: 'SCHEMA_VALIDATION_ERROR',\n\tDOCUMENT_VALIDATION_ERROR: 'DOCUMENT_VALIDATION_ERROR',\n\tS3_OPERATION_ERROR: 'S3_OPERATION_ERROR',\n\tFIND_ERROR: 'FIND_ERROR',\n\tFIND_ONE_ERROR: 'FIND_ONE_ERROR',\n\tSAVE_DATA_ERROR: 'SAVE_DATA_ERROR',\n\tINSERT_ERROR: 'INSERT_ERROR',\n\tUPDATE_ERROR: 'UPDATE_ERROR',\n\tUPDATE_ONE_ERROR: 'UPDATE_ONE_ERROR',\n\tDELETE_ERROR: 'DELETE_ERROR',\n\tCOUNT_ERROR: 'COUNT_ERROR',\n\tUNKNOWN_ERROR: 'UNKNOWN_ERROR',\n};\nclass lowstorageError extends Error {\n\tconstructor(message, code = lowstorage_ERROR_CODES.UNKNOWN_ERROR) {\n\t\tsuper(`lowstorageError: ${message} :: code: ${code}`);\n\t\tthis.name = this.constructor.name;\n\t\tthis.code = code;\n\t\tError.captureStackTrace(this, this.constructor);\n\t}\n}\n\nclass CollectionNotFoundError extends lowstorageError {\n\tconstructor(collectionName) {\n\t\tsuper(`Collection ${collectionName} not found`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND);\n\t}\n}\n\nclass SchemaValidationError extends lowstorageError {\n\tconstructor(message) {\n\t\tsuper(message, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR);\n\t}\n}\n\nclass DocumentValidationError extends lowstorageError {\n\tconstructor(message) {\n\t\tsuper(message, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR);\n\t}\n}\n\nclass S3OperationError extends lowstorageError {\n\tconstructor(message, operation) {\n\t\tsuper(`S3 ${operation} operation failed: ${message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t}\n}\n\nexport {\n\tlowstorage_ERROR_CODES,\n\tlowstorageError,\n\tCollectionNotFoundError,\n\tSchemaValidationError,\n\tDocumentValidationError,\n\tS3OperationError,\n};\n", "'use strict';\n\nimport { randomUUID } from 'node:crypto';\n\nconst matchesQuery = (document, query) => {\n\treturn Object.keys(query).every((key) => document[key] === query[key]);\n};\n\nconst generateUUID = async () => {\n\tif (typeof randomUUID !== 'undefined' && typeof randomUUID === 'function') {\n\t\treturn randomUUID();\n\t}\n\tif (typeof crypto !== 'undefined' && typeof crypto === 'object' && typeof crypto.randomUUID === 'function') {\n\t\treturn crypto.randomUUID();\n\t}\n\treturn 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n\t\tvar r = (Math.random() * 16) | 0,\n\t\t\tv = c === 'x' ? r : (r & 0x3) | 0x8;\n\t\treturn v.toString(16);\n\t});\n};\n\nconst _getAvroType = (value, name = 'SubAutoGenerated') => {\n\tswitch (typeof value) {\n\t\tcase 'string':\n\t\t\tif (_isUUID(value)) {\n\t\t\t\treturn {\n\t\t\t\t\ttype: 'string',\n\t\t\t\t\tname: '_id',\n\t\t\t\t\tsize: 16,\n\t\t\t\t\tlogicalType: 'UUID',\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn 'string';\n\t\tcase 'number':\n\t\t\treturn Number.isInteger(value) ? 'int' : 'float';\n\t\tcase 'boolean':\n\t\t\treturn 'boolean';\n\t\tcase 'object':\n\t\t\tif (value === null) return 'null';\n\t\t\tif (Array.isArray(value)) return { type: 'array', items: _getAvroType(value[0]) };\n\t\t\treturn inferAvroType(value, name);\n\t\tdefault:\n\t\t\treturn 'string'; // Default to string for unknown types\n\t}\n};\n\nconst ensureIdFieldInSchema = (schema) => {\n\tconst idField = {\n\t\tname: '_id',\n\t\ttype: 'string',\n\t\tsize: 16,\n\t\tlogicalType: 'UUID',\n\t};\n\n\tif (schema.type === 'record') {\n\t\tconst hasIdField = schema.fields.some((field) => field.name === '_id');\n\t\tif (!hasIdField) {\n\t\t\tschema.fields.unshift(idField);\n\t\t}\n\t} else if (schema.type === 'array' && schema.items.type === 'record') {\n\t\tconst hasIdField = schema.items.fields.some((field) => field.name === '_id');\n\t\tif (!hasIdField) {\n\t\t\tschema.items.fields.unshift(idField);\n\t\t}\n\t}\n\treturn schema;\n};\n\nconst inferAvroType = (data, typeName = 'AutoGenerated') => {\n\tif (Array.isArray(data)) {\n\t\tdata = data[0];\n\t}\n\tconst fields = Object.entries(data).map(([name, value]) => {\n\t\treturn { name, type: _getAvroType(value, `${typeName}.${name}`) };\n\t});\n\n\tconst schema = {\n\t\ttype: 'record',\n\t\tname: typeName,\n\t\tfields: fields,\n\t};\n\n\t// Ensure the _id field is present in the schema\n\treturn ensureIdFieldInSchema(schema);\n};\n\nconst _isUUID = (str) => {\n\tconst uuidV4Regex = /^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i;\n\treturn uuidV4Regex.test(str);\n};\n\nexport { matchesQuery, generateUUID, inferAvroType, ensureIdFieldInSchema };\n"], + "mappings": "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", + "names": ["AWS_ALGORITHM", "AWS_REQUEST_TYPE", "S3_SERVICE", "LIST_TYPE", "UNSIGNED_PAYLOAD", "DEFAULT_STREAM_CONTENT_TYPE", "XML_CONTENT_TYPE", "JSON_CONTENT_TYPE", "SENSITIVE_KEYS_REDACTED", "HEADER_AMZ_CONTENT_SHA256", "HEADER_AMZ_DATE", "HEADER_HOST", "HEADER_AUTHORIZATION", "HEADER_CONTENT_TYPE", "HEADER_CONTENT_LENGTH", "HEADER_ETAG", "HEADER_LAST_MODIFIED", "ERROR_PREFIX", "ERROR_ACCESS_KEY_REQUIRED", "ERROR_SECRET_KEY_REQUIRED", "ERROR_ENDPOINT_REQUIRED", "ERROR_BUCKET_NAME_REQUIRED", "ERROR_KEY_REQUIRED", "ERROR_UPLOAD_ID_REQUIRED", "ERROR_PARTS_REQUIRED", "ERROR_INVALID_PART", "ERROR_DATA_BUFFER_REQUIRED", "ERROR_PREFIX_TYPE", "ERROR_MAX_KEYS_TYPE", "ERROR_DELIMITER_REQUIRED", "_createHmac", "_createHash", "expectArray", "encodeAsHex", "c", "uriEscape", "uriStr", "uriResourceEscape", "string", "S3", "accessKeyId", "secretAccessKey", "endpoint", "bucketName", "region", "maxRequestSizeInBytes", "requestAbortTimeout", "logger", "etag", "sanitizeETag", "props", "method", "key", "delimiter", "prefix", "maxKeys", "opts", "level", "message", "additionalData", "sanitize", "obj", "acc", "sanitizedData", "logEntry", "headers", "encodedKey", "url", "signedHeaders", "contentLength", "res", "filteredOpts", "conditionalHeaders", "error", "errorMessage", "keyPath", "query", "body", "datetime", "_hash", "canonicalHeaders", "canonicalRequest", "stringToSign", "signature", "authorizationHeader", "value", "credentialScope", "signingKey", "_hmac", "ifHeaders", "urlWithQuery", "responseBody", "lastModified", "data", "_parseXml", "output", "o", "i", "a", "_a", "_b", "_c", "wholeFile", "rangeFrom", "rangeTo", "fileType", "parsedResponse", "uploadId", "partNumber", "ETag", "parts", "part", "xmlBody", "toleratedStatusCodes", "errorBody", "errorCode", "queryParams", "dateStamp", "kDate", "kRegion", "kService", "content", "hashSum", "encoding", "hmacSum", "replaceChars", "m", "str", "unescapeXml", "json", "re", "match", "fullKey", "parsedValue", "avro", "lowstorage_ERROR_CODES", "lowstorageError", "message", "code", "CollectionNotFoundError", "collectionName", "SchemaValidationError", "DocumentValidationError", "S3OperationError", "operation", "randomUUID", "matchesQuery", "document", "query", "key", "generateUUID", "c", "r", "v", "_getAvroType", "value", "name", "_isUUID", "inferAvroType", "ensureIdFieldInSchema", "schema", "idField", "field", "data", "typeName", "fields", "str", "MODULE_NAME", "DEFAULT_DELIMITER", "PROJECT_DIR_PREFIX", "COL_SUFFIX", "CHUNG_1MB", "CHUNG_5MB", "errorValidationFn", "errorCode", "lowstorage_ERROR_CODES", "DocumentValidationError", "lowstorage", "options", "N", "avro", "args", "requiredFields", "field", "lowstorageError", "colName", "listed", "entry", "error", "S3OperationError", "schema", "data", "KEY", "exists2", "oldColName", "newColName", "CollectionNotFoundError", "oldCol", "oldColData", "autoCreate", "colPath", "avroType", "emptyData", "Collection", "SchemaValidationError", "s3", "dirPrefix", "safeWrite", "props", "CHUNK_SIZE", "etag", "wrapperType", "offset", "bufferArr", "repeat", "nextDataResponse", "nextDataBody", "bufferedData", "dataBuffer", "currentETag", "resp", "newETag", "doc", "items", "schemaWithId", "inferAvroType", "item", "generateUUID", "query", "start", "end", "matchesQuery", "update", "updatedCount", "i", "updatedDoc", "docIndex", "initialLength", "newData"] } diff --git a/src/helpers.js b/src/helpers.js index 5a943ca..32ba37a 100644 --- a/src/helpers.js +++ b/src/helpers.js @@ -45,6 +45,28 @@ const _getAvroType = (value, name = 'SubAutoGenerated') => { } }; +const ensureIdFieldInSchema = (schema) => { + const idField = { + name: '_id', + type: 'string', + size: 16, + logicalType: 'UUID', + }; + + if (schema.type === 'record') { + const hasIdField = schema.fields.some((field) => field.name === '_id'); + if (!hasIdField) { + schema.fields.unshift(idField); + } + } else if (schema.type === 'array' && schema.items.type === 'record') { + const hasIdField = schema.items.fields.some((field) => field.name === '_id'); + if (!hasIdField) { + schema.items.fields.unshift(idField); + } + } + return schema; +}; + const inferAvroType = (data, typeName = 'AutoGenerated') => { if (Array.isArray(data)) { data = data[0]; @@ -52,11 +74,15 @@ const inferAvroType = (data, typeName = 'AutoGenerated') => { const fields = Object.entries(data).map(([name, value]) => { return { name, type: _getAvroType(value, `${typeName}.${name}`) }; }); - return { + + const schema = { type: 'record', name: typeName, fields: fields, }; + + // Ensure the _id field is present in the schema + return ensureIdFieldInSchema(schema); }; const _isUUID = (str) => { @@ -64,4 +90,4 @@ const _isUUID = (str) => { return uuidV4Regex.test(str); }; -export { matchesQuery, generateUUID, inferAvroType }; +export { matchesQuery, generateUUID, inferAvroType, ensureIdFieldInSchema }; diff --git a/src/lowstorage.js b/src/lowstorage.js index 43725e9..38b17a2 100644 --- a/src/lowstorage.js +++ b/src/lowstorage.js @@ -19,6 +19,10 @@ const COL_SUFFIX = '.avro'; const CHUNG_1MB = 1024 * 1024; const CHUNG_5MB = 5 * CHUNG_1MB; +const errorValidationFn = (errorCode = lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR) => { + throw new DocumentValidationError(`${MODULE_NAME}: Invalid document or schema`, errorCode); +}; + // code / description // init of new collection is automatically creating it in the bucket // there is optional (opt-in) switch to create new collections in bucket @@ -203,7 +207,11 @@ class lowstorage { await this._s3.delete(KEY); const exists2 = await this.collectionExists(colName); if (typeof exists2 === 'boolean') { - return !exists2; + if (!exists2) { + this._schemas.delete(colName); + return true; + } + throw new lowstorageError(`${MODULE_NAME}: Failed to delete collection ${colName}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); } throw new S3OperationError(`${MODULE_NAME}: Failed to delete collection ${colName}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); } @@ -238,7 +246,7 @@ class lowstorage { ); } const oldCol = await this.collection(oldColName); - const oldColData = await oldCol._loadDataBuffer(); + const oldColData = await oldCol._loadData(); const success = await this.removeCollection(oldColName); if (!success) { throw new lowstorageError(`${MODULE_NAME}: Failed to rename collection`, lowstorage_ERROR_CODES.RENAME_COLLECTION_ERROR); @@ -299,24 +307,19 @@ class lowstorage { const exists = await this._s3.fileExists(colPath); - if (!exists && !autoCreate) { - throw new lowstorageError(`${MODULE_NAME}: Collection ${colName} does not exist`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND); + if (!exists) { + if (!autoCreate) { + throw new lowstorageError(`${MODULE_NAME}: Collection ${colName} does not exist`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND); + } + const emptyData = Buffer.from('', 'utf8'); + await this._s3.put(colPath, emptyData); } if (schema) { avroType = this._avro.parse(schema); this._schemas.set(colName, avroType); - if (!exists && autoCreate) { - await this._s3.put(colPath, ''); - } } else if (this._schemas.has(colName)) { avroType = this._schemas.get(colName); - } else if (exists) { - const schemaContent = await this._s3.get(colPath); - avroType = this._avro.parse(schemaContent); - this._schemas.set(colName, avroType); - } else if (autoCreate) { - await this._s3.put(colPath, ''); } return new Collection(colName, this._s3, avroType, this._dirPrefix); @@ -378,16 +381,144 @@ class Collection { * Create a new Collection instance. * @param {string} colName - The name of the collection. * @param {S3} s3 - The S3 instance. - * @param {Object} [avroType=undefined] - The Avro type for the collection. + * @param {Object} [avroType] - The Avro type for the collection. * @param {string} [dirPrefix=PROJECT_DIR_PREFIX] - The directory prefix for the collection. + * @param {boolean} [safeWrite=false] - Whether to perform a safe write operation. It doublechecks the ETag of the object before writing. False = overwrites the object, True = only writes if the object has not been modified. * @returns {Collection} A new Collection instance. */ - constructor(colName, s3, avroType = undefined, dirPrefix = PROJECT_DIR_PREFIX) { + constructor(colName, s3, avroType, dirPrefix = PROJECT_DIR_PREFIX, safeWrite = false) { this._colName = colName; this._s3 = s3; this._avro = avro; + this._lastETag = ''; + this._dataCache = []; this._avroType = avroType; this._dirPrefix = dirPrefix; + this._safeWrite = safeWrite; + } + + getProps = () => ({ + colName: this._colName, + s3: this._s3, + avro: this._avro, + avroType: this._avroType, + dirPrefix: this._dirPrefix, + safeWrite: this._safeWrite, + }); + + setProps = (props) => { + this._colName = props.colName; + this._s3 = props.s3; + this._avro = props.avro; + this._avroType = props.avroType; + this._dirPrefix = props.dirPrefix; + this._safeWrite = props.safeWrite; + }; + + setSafeWrite = (safeWrite) => { + this._safeWrite = safeWrite; + }; + + getSafeWrite = () => { + return this._safeWrite; + }; + + getAvroSchema = () => { + return this._avroType; + }; + + setAvroSchema = (schema) => { + this._avroType = this._avro.parse(schema); + }; + + async _loadData() { + try { + const KEY = `${this._dirPrefix}${DEFAULT_DELIMITER}${this._colName}${COL_SUFFIX}`; + const CHUNK_SIZE = this._s3.getMaxRequestSizeInBytes() || CHUNG_5MB; + if (this._avroType === null || typeof this._avroType === 'undefined') { + throw new lowstorageError( + `${MODULE_NAME}: Missing type definition. Configure before operations `, + lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR, + ); + } + console.log('Getting object:', KEY, this._lastETag); + let { etag, data } = await this._s3.getObjectWithETag(KEY, { 'if-none-match': this._lastETag }); + console.log('data :::::::::::::::::::::::::', data, etag, this._dataCache); + if (data === null) { + // console.log('data is null, returning cache'); + return this._dataCache; + } + this._lastETag = etag === null ? this._lastETag : etag; + const wrapperType = this._avro.parse({ type: 'array', items: this._avroType }); + if (data.length < CHUNK_SIZE) { + this._dataCache = data.length > 0 ? wrapperType.fromBuffer(data) : []; + return this._dataCache; + } + let offset = CHUNK_SIZE; + let bufferArr = [Buffer.from(data, 'utf8')]; + let repeat = true; + while (repeat) { + const nextDataResponse = await this._s3.getResponse(KEY, false, offset, offset + CHUNK_SIZE); + const nextDataBody = await nextDataResponse.text(); + bufferArr.push(Buffer.from(nextDataBody, 'utf8')); + offset += CHUNK_SIZE; + const contentLength = nextDataResponse.headers.get('content-length') || nextDataBody.length; + if (contentLength < CHUNK_SIZE) { + repeat = false; + } + } + const bufferedData = Buffer.concat(bufferArr); + this._dataCache = wrapperType.fromBuffer(bufferedData); + return this._dataCache; + } catch (error) { + if (error.toString().indexOf('status 404: Unknown - Not Found') > -1) { + this._dataCache = []; + return this._dataCache; + } + throw new S3OperationError(`${MODULE_NAME}: Failed to load data: ${error.message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); + } + } + + async _saveData(data) { + try { + if (this._avroType === null || typeof this._avroType === 'undefined') { + throw new lowstorageError( + `${MODULE_NAME}: Missing type definition. Configure before operations `, + lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR, + ); + } + const wrapperType = this._avro.parse({ type: 'array', items: this._avroType }); + const dataBuffer = data.length > 0 ? wrapperType.toBuffer(data) : Buffer.from('', 'utf8'); + + const KEY = `${this._dirPrefix}${DEFAULT_DELIMITER}${this._colName}${COL_SUFFIX}`; + if (this._safeWrite && this._lastETag !== '') { + const currentETag = await this._s3.getEtag(KEY); + // If we have a current ETag, check if it matches our last known ETag + if (currentETag !== null && currentETag !== this._lastETag) { + return false; + } + } + + const resp = await this._s3.put(KEY, dataBuffer); + if (resp.status !== 200) { + throw new S3OperationError(`${MODULE_NAME}: Failed to save data`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); + } + + // Update the cached ETag + const newETag = resp.headers.get('etag'); + // console.log('saveddata newETag', this._s3.sanitizeETag(newETag)); + if (newETag) { + this._lastETag = this._s3.sanitizeETag(newETag); + // console.log('saveddata lastETag', this._lastETag, 'data is ', data); + this._dataCache = data; + } + return true; + } catch (error) { + if (error instanceof S3OperationError) { + throw error; + } + throw new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.SAVE_DATA_ERROR); + } } /** @@ -410,19 +541,16 @@ class Collection { } const items = !Array.isArray(doc) ? [doc] : doc; - const avroType = !!schema ? this._avro.parse(schema) : this._avroType || this._avro.parse(inferAvroType(doc)); - + const schemaWithId = schema || this._avroType || inferAvroType(items[0]); + const avroType = this._avro.parse(schemaWithId); if (!avroType) { throw new SchemaValidationError( `${MODULE_NAME}: Schema is required - Pass a schema to the insert method`, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR, ); } - this._avroType = avroType; - const wrapperType = this._avro.parse({ type: 'array', items: this._avroType }); - const bufferData = await this._loadDataBuffer(); - const data = bufferData.length > 0 ? wrapperType.fromBuffer(bufferData) : []; + const data = await this._loadData(); for (let item of items) { if (typeof item !== 'object' || item === null) { throw new DocumentValidationError( @@ -431,13 +559,17 @@ class Collection { ); } item._id = item._id || (await generateUUID()); - const valid = this._avroType.isValid(item); - if (!valid) { + const validBuffer = this._avroType.isValid(item, { + errorHook: errorValidationFn, + noUndeclaredFields: true, + }); + if (validBuffer === true) { + data.push(item); + } else { throw new DocumentValidationError(`${MODULE_NAME}: Invalid document or schema`, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR); } - data.push(item); } - const success = await this._saveDataBuffer(wrapperType.toBuffer(data)); + const success = await this._saveData(data); if (!success) { throw new S3OperationError(`${MODULE_NAME}: Failed to insert document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); } @@ -456,52 +588,6 @@ class Collection { } } - async _loadDataBuffer() { - try { - const KEY = `${this._dirPrefix}${DEFAULT_DELIMITER}${this._colName}${COL_SUFFIX}`; - const CHUNK_SIZE = this._s3.getMaxRequestSizeInBytes() || CHUNG_5MB; - let firstData = await this._s3.get(KEY); - if (firstData.length < CHUNK_SIZE) { - return Buffer.from(firstData, 'utf8'); - } - let offset = CHUNK_SIZE; - let bufferArr = [Buffer.from(firstData, 'utf8')]; - let repeat = true; - while (repeat) { - const nextDataResponse = await this._s3.getResponse(KEY, false, offset, offset + CHUNK_SIZE); - const nextDataBody = await nextDataResponse.text(); - bufferArr.push(Buffer.from(nextDataBody, 'utf8')); - offset += CHUNK_SIZE; - const contentLength = nextDataResponse.headers.get('content-length') || nextDataBody.length; - if (contentLength < CHUNK_SIZE) { - repeat = false; - } - } - return Buffer.concat(bufferArr); - } catch (error) { - if (error.toString().indexOf('status 404: Unknown - Not Found') > -1) { - return Buffer.from(''); - } - throw new S3OperationError(`${MODULE_NAME}: Failed to load data buffer: ${error.message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); - } - } - - async _saveDataBuffer(data) { - try { - const KEY = `${this._dirPrefix}${DEFAULT_DELIMITER}${this._colName}${COL_SUFFIX}`; - const resp = await this._s3.put(KEY, data); - if (resp.status !== 200) { - throw new S3OperationError(`${MODULE_NAME}: Failed to save data`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); - } - return true; - } catch (error) { - if (error instanceof S3OperationError) { - throw error; - } - throw new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.SAVE_DATA_ERROR); - } - } - /** * Find documents in the collection. * @param {Object} [query={}] - The query to filter documents. @@ -516,12 +602,7 @@ class Collection { if (query === undefined || query === null) { throw new lowstorageError(`${MODULE_NAME}: Query is required for update`, lowstorage_ERROR_CODES.MISSING_ARGUMENT); } - const bufferData = await this._loadDataBuffer(); // load data from s3 - if (bufferData.length === 0) { - return []; - } - const wrapperType = this._avro.parse({ type: 'array', items: this._avroType }); - const data = bufferData.length > 0 ? wrapperType.fromBuffer(bufferData) : []; + const data = await this._loadData(); const start = parseInt(options.skip, 10) || 0; const end = parseInt(options.limit, 10) ? start + parseInt(options.limit, 10) : undefined; const filteredData = data.filter((doc) => matchesQuery(doc, query)).slice(start, end); @@ -556,13 +637,13 @@ class Collection { * Update a single document in the collection that matches the query. * @param {Object} [query={}] - The query to filter the document to update. * @param {Object} [update={}] - The update operations to apply to the matching document. - * @returns {Promise} A Promise that resolves to 1 if a document was updated, 0 otherwise. + * @returns {Promise} A Promise that resolves to number of documents updated. * @throws {lowstorageError} If the updateOne operation fails. * @throws {SchemaValidationError} If the schema is not defined for the collection. * @throws {DocumentValidationError} If the updated document is invalid. * @throws {S3OperationError} If the S3 operation fails. */ - async update(query = {}, update = {}) { + async update(query = {}, update = {}, options = {}) { try { if (query === undefined || query === null || update === undefined || update === null) { throw new lowstorageError( @@ -576,32 +657,40 @@ class Collection { lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR, ); } - const bufferData = await this._loadDataBuffer(); // load data from s3 - if (bufferData.length === 0) return 0; - const wrapperType = this._avro.parse({ type: 'array', items: this._avroType }); - const data = bufferData.length > 0 ? wrapperType.fromBuffer(bufferData) : []; + const data = await this._loadData(); + if (data.length === 0) return 0; let updatedCount = 0; - for (let i = 0; i < data.length; i++) { if (matchesQuery(data[i], query)) { const updatedDoc = { ...data[i], ...update }; - const valid = this._avroType.isValid(updatedDoc); - if (!valid) { + const isValid = this._avroType.isValid(updatedDoc, { + errorHook: errorValidationFn, + noUndeclaredFields: true, + }); + if (isValid === true) { + data[i] = updatedDoc; + updatedCount++; + } else { throw new DocumentValidationError( `${MODULE_NAME}: Invalid document or schema`, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR, ); } - data[i] = updatedDoc; - updatedCount++; } } if (updatedCount > 0) { - const success = await this._saveDataBuffer(wrapperType.toBuffer(data)); + const success = await this._saveData(data); + if (!success) { + throw new S3OperationError(`${MODULE_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); + } + } else if (options.upsert) { + // If upsert is true, we need to insert the document + const success = await this.insert(update); if (!success) { throw new S3OperationError(`${MODULE_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); } + updatedCount = 1; } return updatedCount; } catch (error) { @@ -622,7 +711,7 @@ class Collection { * @throws {DocumentValidationError} If the updated document is invalid. * @throws {S3OperationError} If the S3 operation fails. */ - async updateOne(query = {}, update = {}) { + async updateOne(query = {}, update = {}, options = {}) { try { if (query === undefined || query === null || update === undefined || update === null) { throw new lowstorageError(`${MODULE_NAME}: Query is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT); @@ -633,20 +722,30 @@ class Collection { lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR, ); } - const bufferData = await this._loadDataBuffer(); // load data from s3 - if (bufferData.length === 0) return 0; - const wrapperType = this._avro.parse({ type: 'array', items: this._avroType }); - const data = bufferData.length > 0 ? wrapperType.fromBuffer(bufferData) : []; + const data = await this._loadData(); + if (data.length === 0) return 0; const docIndex = data.findIndex((doc) => matchesQuery(doc, query)); if (docIndex !== -1) { const updatedDoc = { ...data[docIndex], ...update }; - const valid = this._avroType.isValid(updatedDoc); - if (!valid) { + const isValid = this._avroType.isValid(updatedDoc, { + errorHook: errorValidationFn, + noUndeclaredFields: true, + }); + if (isValid === true) { + data[docIndex] = updatedDoc; + const success = await this._saveData(data); + if (!success) { + throw new S3OperationError(`${MODULE_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); + } + return 1; + } else { throw new DocumentValidationError(`${MODULE_NAME}: Invalid document or schema`, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR); } - data[docIndex] = updatedDoc; - const success = await this._saveDataBuffer(wrapperType.toBuffer(data)); + } + if (options.upsert) { + // If upsert is true, we need to insert the document + const success = await this.insert(update); if (!success) { throw new S3OperationError(`${MODULE_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); } @@ -673,13 +772,12 @@ class Collection { if (query === undefined || query === null) { throw new lowstorageError(`${MODULE_NAME}: Query is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT); } - const bufferData = await this._loadDataBuffer(); // load data from s3 - if (bufferData.length === 0) return 0; - const wrapperType = this._avro.parse({ type: 'array', items: this._avroType }); - const data = bufferData.length > 0 ? wrapperType.fromBuffer(bufferData) : []; + const data = await this._loadData(); + if (data.length === 0) return 0; const initialLength = data.length; + const newData = data.filter((doc) => !matchesQuery(doc, query)); - const success = await this._saveDataBuffer(wrapperType.toBuffer(newData)); + const success = await this._saveData(newData); if (!success) { throw new S3OperationError(`${MODULE_NAME}: Failed to delete document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); } @@ -700,17 +798,13 @@ class Collection { */ async deleteAll() { try { - const bufferData = await this._loadDataBuffer(); // load data from s3 - if (bufferData.length === 0) return 0; - const wrapperType = this._avro.parse({ type: 'array', items: this._avroType }); - const data = bufferData.length > 0 ? wrapperType.fromBuffer(bufferData) : []; + const data = await this._loadData(); const initialLength = data.length; - const newData = data.filter((doc) => !matchesQuery(doc, {})); - const success = await this._saveDataBuffer(wrapperType.toBuffer(newData)); + const success = await this._saveData([]); if (!success) { throw new S3OperationError(`${MODULE_NAME}: Failed to delete document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); } - return initialLength - newData.length; + return initialLength; } catch (error) { if (error instanceof S3OperationError) { throw error; diff --git a/src/lowstorage.test.js b/src/lowstorage.test.js index 6d3228f..5cb3a4f 100644 --- a/src/lowstorage.test.js +++ b/src/lowstorage.test.js @@ -65,358 +65,413 @@ afterAll(async () => { }); // full test basic operations on collection -test('Collections | basic CRUD operations', async () => { - // check if collections exist - const userColExists = await lStorage.collectionExists('userCol'); - // expect to be bollean - expect(typeof userColExists).toBe('boolean'); - if (userColExists) { - // try to create collection and get error - await expect(lStorage.createCollection('userCol', userAvroSchema)).rejects.toThrowError(); - // remove collection - const removeCollection = await lStorage.removeCollection('userCol'); - expect(removeCollection).toBe(true); - const doubleCheckIfExists = await lStorage.collectionExists('userCol'); - expect(doubleCheckIfExists).toBe(false); +// test('Collections | basic CRUD operations', async () => { +// // check if collections exist +// const userColExists = await lStorage.collectionExists('userCol'); +// // expect to be bollean +// expect(typeof userColExists).toBe('boolean'); +// if (userColExists) { +// // try to create collection and get error +// await expect(lStorage.createCollection('userCol', userAvroSchema)).rejects.toThrowError(); +// // remove collection +// const removeCollection = await lStorage.removeCollection('userCol'); +// expect(removeCollection).toBe(true); +// const doubleCheckIfExists = await lStorage.collectionExists('userCol'); +// expect(doubleCheckIfExists).toBe(false); +// } +// // create collection now +// const userCol = await lStorage.createCollection('userCol', userAvroSchema); +// expect(userCol).toBeDefined(); +// const userColExists3 = await lStorage.collectionExists('userCol'); +// expect(userColExists3).toBe(true); + +// const listCollections = await lStorage.listCollections(); +// expect(listCollections).toContain('userCol'); +// await expect(lStorage.createCollection('userCol', userAvroSchema)).rejects.toThrowError(); + +// // check if collections exist +// const testColExists = await lStorage.collectionExists('testCol'); +// // expect to be bollean +// expect(typeof testColExists).toBe('boolean'); +// if (testColExists) { +// // try to create collection and get error +// await expect(lStorage.createCollection('testCol', testColSchame)).rejects.toThrowError(); +// // remove collection +// const removeCollection = await lStorage.removeCollection('testCol'); +// expect(removeCollection).toBe(true); +// const doubleCheckIfExists = await lStorage.collectionExists('testCol'); +// expect(doubleCheckIfExists).toBe(false); +// } + +// await lStorage.createCollection('testCol', testColSchame); + +// const testColExists2 = await lStorage.collectionExists('testCol'); +// expect(testColExists2).toBe(true); + +// const listCollections2 = await lStorage.listCollections(); +// console.log('listCollections', listCollections2); +// expect(listCollections2).toContain('testCol'); +// expect(listCollections2).toContain('userCol'); +// expect(listCollections2.length).toBe(2); + +// const removeCollection = await lStorage.removeCollection('testCol'); +// expect(removeCollection).toBe(true); + +// const listCollections3 = await lStorage.listCollections(); +// expect(listCollections3).not.toContain('testCol'); +// expect(listCollections3).toContain('userCol'); +// expect(listCollections3.length).toBe(1); + +// const removeCollection2 = await lStorage.removeCollection('userCol'); +// expect(removeCollection2).toBe(true); + +// const listCollections4 = await lStorage.listCollections(); +// expect(listCollections4).not.toContain('testCol'); +// expect(listCollections4).not.toContain('userCol'); +// expect(listCollections4.length).toBe(0); +// }); +// // test create collection +// test('Collections | create via createCollection', async () => { +// const preListCheck = await lStorage.listCollections(); +// expect(preListCheck.length).toBe(0); + +// const userCol = await lStorage.createCollection('userCol', userAvroSchema); +// expect(userCol).toBeDefined(); + +// const userColExists3 = await lStorage.collectionExists('userCol'); +// expect(userColExists3).toBe(true); + +// const listCollections = await lStorage.listCollections(); +// expect(listCollections).toContain('userCol'); +// expect(listCollections.length).toBe(1); + +// const removeCollection = await lStorage.removeCollection('userCol'); +// expect(removeCollection).toBe(true); + +// const listCollections2 = await lStorage.listCollections(); +// expect(listCollections2).not.toContain('userCol'); +// expect(listCollections2.length).toBe(0); +// }); +// test('Collections | create via constructor', async () => { +// const preListCheck = await lStorage.listCollections(); +// expect(preListCheck.length).toBe(0); + +// const userCol = await lStorage.collection('userCol', userAvroSchema); +// expect(userCol).toBeDefined(); + +// const userColExists = await lStorage.collectionExists('userCol'); +// expect(userColExists).toBe(true); + +// const listCollections = await lStorage.listCollections(); +// expect(listCollections).toContain('userCol'); +// expect(listCollections.length).toBe(1); +// const removeCollection = await lStorage.removeCollection('userCol'); +// expect(removeCollection).toBe(true); + +// const listCollections2 = await lStorage.listCollections(); +// expect(listCollections2).not.toContain('userCol'); +// expect(listCollections2.length).toBe(0); +// }); +// test('Collections | error cases and error codes', async () => { +// // Test create collection error +// await expect(lStorage.createCollection()).rejects.toThrow(lowstorageError); +// await expect(lStorage.createCollection()).rejects.toThrow(lowstorage_ERROR_CODES.CREATE_COLLECTION_ERROR); + +// // Test collection already exists error +// await lStorage.createCollection('testCol', testColSchame); +// await expect(lStorage.createCollection('testCol', testColSchame)).rejects.toThrow(lowstorageError); +// await expect(lStorage.createCollection('testCol', testColSchame)).rejects.toThrow(lowstorage_ERROR_CODES.COLLECTION_EXISTS); + +// const listCollections = await lStorage.listCollections(); +// console.log('listCollections::::: ', listCollections); +// expect(listCollections).toContain('testCol'); + +// // Verify the collection exists before attempting to rename +// const testColExists = await lStorage.collectionExists('testCol'); +// expect(testColExists).toBe(true); + +// // Test rename collection +// await expect(lStorage.renameCollection('testCol', 'testCol2')).resolves.not.toThrow(); +// const listCollectionsAfterRename = await lStorage.listCollections(); +// expect(listCollectionsAfterRename).not.toContain('testCol'); +// expect(listCollectionsAfterRename).toContain('testCol2'); + +// // Verify the collection exists after renaming +// const testCol2Exists = await lStorage.collectionExists('testCol2'); +// expect(testCol2Exists).toBe(true); + +// // Test rename collection error +// await expect(lStorage.renameCollection('testCol', 'testCol2')).rejects.toThrow(lowstorageError); +// await expect(lStorage.renameCollection('testCol', 'testCol2')).rejects.toThrow(lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND); + +// // // Test remove collection error +// await expect(lStorage.removeCollection('testCol')).rejects.toThrow(lowstorageError); +// await expect(lStorage.removeCollection('testCol')).rejects.toThrow(lowstorage_ERROR_CODES.REMOVE_COLLECTION_ERROR); + +// // Test update collection schema error - NOT IMPLEMENTED +// // const testColSchema = { +// // type: 'record', +// // name: 'TestCol', +// // fields: [ +// // { name: '_id', type: 'string', size: 16, logicalType: 'UUID' }, +// // { name: 'name', type: 'string' }, +// // { name: 'age', type: 'int' }, +// // ], +// // }; +// // await expect(lStorage.updateCollectionSchema('testCol', testColSchema)).rejects.toThrow(lowstorageError); +// // await expect(lStorage.updateCollectionSchema('testCol', testColSchema)).rejects.toThrow(lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND); + +// // Test schema validation error +// const invalidSchema = { type: 'invalid' }; +// await expect(lStorage.createCollection('invalidSchemaCol', invalidSchema)).rejects.toThrow( +// lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR, +// ); + +// // Test document validation error +// const col = await lStorage.collection('testCol2'); +// await expect(col.insert({ invalidField: 'value' })).rejects.toThrow(lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR); + +// // Test insert error +// await expect(col.insert(null)).rejects.toThrow(lowstorage_ERROR_CODES.INSERT_ERROR); + +// // Test update error +// await expect(col.update(null, { field: 'value' })).rejects.toThrow(lowstorage_ERROR_CODES.MISSING_ARGUMENT); + +// // Test update one error +// await expect(col.updateOne(null, { field: 'value' })).rejects.toThrow(lowstorage_ERROR_CODES.MISSING_ARGUMENT); + +// // Test delete error +// await expect(col.delete(null)).rejects.toThrow(lowstorage_ERROR_CODES.MISSING_ARGUMENT); + +// // Test count error - wrong argument +// await expect(col.count(null)).rejects.toThrow(lowstorage_ERROR_CODES.COUNT_ERROR); +// const count = await col.count(); +// await expect(count).toBe(0); + +// // Test remove collection error +// await expect(lStorage.removeCollection(null)).rejects.toThrow(lowstorage_ERROR_CODES.REMOVE_COLLECTION_ERROR); + +// // Test rename collection error +// await expect(lStorage.renameCollection(null, 'newName')).rejects.toThrow(lowstorage_ERROR_CODES.RENAME_COLLECTION_ERROR); + +// // Clean up +// await lStorage.removeCollection('testCol2'); +// }); + +// test('Document | CRUD operations', async () => { +// // Test insert +// const colName = 'testColXXXX'; +// const col = await lStorage.collection(colName); +// const insertData = await col.insert({ name: 'Carlos', age: 25 }); +// expect(insertData).toBeDefined(); +// expect(insertData).toHaveLength(1); +// expect(insertData[0]).toHaveProperty('_id'); +// expect(insertData[0]).toHaveProperty('name', 'Carlos'); +// expect(insertData[0]).toHaveProperty('age', 25); + +// // Test by find +// const findData = await col.find({ name: 'Carlos' }); +// expect(findData).toBeDefined(); +// expect(findData).toHaveLength(1); +// expect(findData[0]).toHaveProperty('_id'); +// expect(findData[0]).toHaveProperty('name', 'Carlos'); +// expect(findData[0]).toHaveProperty('age', 25); + +// // Test insert with schema +// const insertDataWithSchema = await col.insert({ name: 'Carlos', age: 25 }, userAvroSchema); +// expect(insertDataWithSchema).toBeDefined(); +// expect(insertDataWithSchema).toHaveLength(1); +// expect(insertDataWithSchema[0]).toHaveProperty('_id'); +// expect(insertDataWithSchema[0]).toHaveProperty('name', 'Carlos'); +// expect(insertDataWithSchema[0]).toHaveProperty('age', 25); + +// // Test by find +// const findDataWithSchema = await col.find({ name: 'Carlos' }); +// expect(findDataWithSchema).toBeDefined(); +// expect(findDataWithSchema).toHaveLength(2); +// expect(findDataWithSchema[0]).toHaveProperty('_id'); +// expect(findDataWithSchema[0]).toHaveProperty('name', 'Carlos'); +// expect(findDataWithSchema[0]).toHaveProperty('age', 25); + +// // test count +// const count = await col.count({ name: 'Carlos' }); +// expect(count).toBe(2); + +// const count2 = await col.count(); +// expect(count2).toBe(2); + +// const count3 = await col.count({ name: 'Carlos2' }); +// expect(count3).toBe(0); + +// // Test insert with invalid schema +// const invalidSchema = { type: 'invalid' }; +// await expect(col.insert({ name: 'Carlos', age: 25 }, invalidSchema)).rejects.toThrow(lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR); + +// // Test insert with invalid data +// await expect(col.insert(null)).rejects.toThrow(lowstorage_ERROR_CODES.INSERT_ERROR); + +// // Test insert with array +// const insertDataArray = await col.insert([ +// { name: 'Carlos', age: 25 }, +// { name: 'Bob', age: 30 }, +// ]); +// expect(insertDataArray).toBeDefined(); +// expect(insertDataArray).toHaveLength(2); +// expect(insertDataArray[0]).toHaveProperty('_id'); +// expect(insertDataArray[0]).toHaveProperty('name', 'Carlos'); +// expect(insertDataArray[0]).toHaveProperty('age', 25); +// expect(insertDataArray[1]).toHaveProperty('_id'); +// expect(insertDataArray[1]).toHaveProperty('name', 'Bob'); +// expect(insertDataArray[1]).toHaveProperty('age', 30); + +// // Test insert with array and schema +// const insertDataArrayWithSchema = await col.insert( +// [ +// { name: 'Carlos', age: 25 }, +// { name: 'Bob', age: 30 }, +// ], +// userAvroSchema, +// ); + +// expect(insertDataArrayWithSchema).toBeDefined(); +// expect(insertDataArrayWithSchema).toHaveLength(2); +// expect(insertDataArrayWithSchema[0]).toHaveProperty('_id'); +// expect(insertDataArrayWithSchema[0]).toHaveProperty('name', 'Carlos'); +// expect(insertDataArrayWithSchema[0]).toHaveProperty('age', 25); +// expect(insertDataArrayWithSchema[1]).toHaveProperty('_id'); +// expect(insertDataArrayWithSchema[1]).toHaveProperty('name', 'Bob'); +// expect(insertDataArrayWithSchema[1]).toHaveProperty('age', 30); + +// // Test insert with invalid array +// await expect(col.insert(null)).rejects.toThrow(lowstorage_ERROR_CODES.INSERT_ERROR); + +// // Test insert with invalid array and schema +// await expect( +// col.insert( +// [ +// { name: 'Carlos', age: 25 }, +// { name: 'Bob', age: 30 }, +// ], +// invalidSchema, +// ), +// ).rejects.toThrow(lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR); + +// // Test update +// const updateData = await col.update({ name: 'Carlos' }, { name: 'Carlos2' }); +// console.log('updateData', updateData); +// expect(updateData).toBeDefined(); +// expect(updateData).toBe(4); +// expect(updateData).toEqual(4); + +// // Test update with invalid array +// await expect(col.update(null, { name: 'Carlos2' })).rejects.toThrow(lowstorage_ERROR_CODES.UPDATE_ERROR); + +// // Test delete +// const deleteData = await col.delete({ name: 'Carlos2' }); +// expect(deleteData).toBeDefined(); +// expect(deleteData).toBe(4); + +// // Test delete with invalid data +// await expect(col.delete(null)).rejects.toThrow(lowstorage_ERROR_CODES.DELETE_ERROR); + +// // Test delete with array +// const deleteDataArray = await col.delete({ name: 'Bob' }); +// expect(deleteDataArray).toBeDefined(); +// expect(deleteDataArray).toBe(2); + +// // Test delete with invalid array +// await expect(col.delete(null)).rejects.toThrow(lowstorage_ERROR_CODES.DELETE_ERROR); + +// // cleanup +// await lStorage.removeCollection(colName); +// }); + +test('Document | cachcing and race conditions', async () => { + const colName = 'testColX1'; + const exsists = await lStorage.collectionExists(colName); + console.log('exsists::::::::::::::::::::::', exsists); + if (exsists) { + await lStorage.removeCollection(colName); } - // create collection now - const userCol = await lStorage.createCollection('userCol', userAvroSchema); - expect(userCol).toBeDefined(); - const userColExists3 = await lStorage.collectionExists('userCol'); - expect(userColExists3).toBe(true); + const lStorage2 = new lowstorage(configCF); + const col2 = await lStorage2.collection(colName, userAvroSchema); - const listCollections = await lStorage.listCollections(); - expect(listCollections).toContain('userCol'); - await expect(lStorage.createCollection('userCol', userAvroSchema)).rejects.toThrowError(); - - // check if collections exist - const testColExists = await lStorage.collectionExists('testCol'); - // expect to be bollean - expect(typeof testColExists).toBe('boolean'); - if (testColExists) { - // try to create collection and get error - await expect(lStorage.createCollection('testCol', testColSchame)).rejects.toThrowError(); - // remove collection - const removeCollection = await lStorage.removeCollection('testCol'); - expect(removeCollection).toBe(true); - const doubleCheckIfExists = await lStorage.collectionExists('testCol'); - expect(doubleCheckIfExists).toBe(false); - } - - await lStorage.createCollection('testCol', testColSchame); - - const testColExists2 = await lStorage.collectionExists('testCol'); - expect(testColExists2).toBe(true); - - const listCollections2 = await lStorage.listCollections(); - console.log('listCollections', listCollections2); - expect(listCollections2).toContain('testCol'); - expect(listCollections2).toContain('userCol'); - expect(listCollections2.length).toBe(2); - - const removeCollection = await lStorage.removeCollection('testCol'); - expect(removeCollection).toBe(true); - - const listCollections3 = await lStorage.listCollections(); - expect(listCollections3).not.toContain('testCol'); - expect(listCollections3).toContain('userCol'); - expect(listCollections3.length).toBe(1); - - const removeCollection2 = await lStorage.removeCollection('userCol'); - expect(removeCollection2).toBe(true); - - const listCollections4 = await lStorage.listCollections(); - expect(listCollections4).not.toContain('testCol'); - expect(listCollections4).not.toContain('userCol'); - expect(listCollections4.length).toBe(0); -}); -// test create collection -test('Collections | create via createCollection', async () => { - const preListCheck = await lStorage.listCollections(); - expect(preListCheck.length).toBe(0); - - const userCol = await lStorage.createCollection('userCol', userAvroSchema); - expect(userCol).toBeDefined(); - - const userColExists3 = await lStorage.collectionExists('userCol'); - expect(userColExists3).toBe(true); - - const listCollections = await lStorage.listCollections(); - expect(listCollections).toContain('userCol'); - expect(listCollections.length).toBe(1); - - const removeCollection = await lStorage.removeCollection('userCol'); - expect(removeCollection).toBe(true); - - const listCollections2 = await lStorage.listCollections(); - expect(listCollections2).not.toContain('userCol'); - expect(listCollections2.length).toBe(0); -}); -test('Collections | create via constructor', async () => { - const preListCheck = await lStorage.listCollections(); - expect(preListCheck.length).toBe(0); - - const userCol = await lStorage.collection('userCol', userAvroSchema); - expect(userCol).toBeDefined(); - - const userColExists = await lStorage.collectionExists('userCol'); - expect(userColExists).toBe(true); - - const listCollections = await lStorage.listCollections(); - expect(listCollections).toContain('userCol'); - expect(listCollections.length).toBe(1); - const removeCollection = await lStorage.removeCollection('userCol'); - expect(removeCollection).toBe(true); - - const listCollections2 = await lStorage.listCollections(); - expect(listCollections2).not.toContain('userCol'); - expect(listCollections2.length).toBe(0); -}); -test('Collections | error cases and error codes', async () => { - // Test create collection error - await expect(lStorage.createCollection()).rejects.toThrow(lowstorageError); - await expect(lStorage.createCollection()).rejects.toThrow(lowstorage_ERROR_CODES.CREATE_COLLECTION_ERROR); - - // Test collection already exists error - await lStorage.createCollection('testCol', testColSchame); - await expect(lStorage.createCollection('testCol', testColSchame)).rejects.toThrow(lowstorageError); - await expect(lStorage.createCollection('testCol', testColSchame)).rejects.toThrow(lowstorage_ERROR_CODES.COLLECTION_EXISTS); - - const listCollections = await lStorage.listCollections(); - console.log('listCollections::::: ', listCollections); - expect(listCollections).toContain('testCol'); - - // Verify the collection exists before attempting to rename - const testColExists = await lStorage.collectionExists('testCol'); - expect(testColExists).toBe(true); - - // Test rename collection - await expect(lStorage.renameCollection('testCol', 'testCol2')).resolves.not.toThrow(); - const listCollectionsAfterRename = await lStorage.listCollections(); - expect(listCollectionsAfterRename).not.toContain('testCol'); - expect(listCollectionsAfterRename).toContain('testCol2'); - - // Verify the collection exists after renaming - const testCol2Exists = await lStorage.collectionExists('testCol2'); - expect(testCol2Exists).toBe(true); - - // Test rename collection error - await expect(lStorage.renameCollection('testCol', 'testCol2')).rejects.toThrow(lowstorageError); - await expect(lStorage.renameCollection('testCol', 'testCol2')).rejects.toThrow(lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND); - - // // Test remove collection error - await expect(lStorage.removeCollection('testCol')).rejects.toThrow(lowstorageError); - await expect(lStorage.removeCollection('testCol')).rejects.toThrow(lowstorage_ERROR_CODES.REMOVE_COLLECTION_ERROR); - - // Test update collection schema error - NOT IMPLEMENTED - // const testColSchema = { - // type: 'record', - // name: 'TestCol', - // fields: [ - // { name: '_id', type: 'string', size: 16, logicalType: 'UUID' }, - // { name: 'name', type: 'string' }, - // { name: 'age', type: 'int' }, - // ], - // }; - // await expect(lStorage.updateCollectionSchema('testCol', testColSchema)).rejects.toThrow(lowstorageError); - // await expect(lStorage.updateCollectionSchema('testCol', testColSchema)).rejects.toThrow(lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND); - - // Test schema validation error - const invalidSchema = { type: 'invalid' }; - await expect(lStorage.createCollection('invalidSchemaCol', invalidSchema)).rejects.toThrow( - lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR, - ); - - // Test document validation error - const col = await lStorage.collection('testCol2'); - await expect(col.insert({ invalidField: 'value' })).rejects.toThrow(lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR); - - // Test insert error - await expect(col.insert(null)).rejects.toThrow(lowstorage_ERROR_CODES.INSERT_ERROR); - - // Test update error - await expect(col.update(null, { field: 'value' })).rejects.toThrow(lowstorage_ERROR_CODES.MISSING_ARGUMENT); - - // Test update one error - await expect(col.updateOne(null, { field: 'value' })).rejects.toThrow(lowstorage_ERROR_CODES.MISSING_ARGUMENT); - - // Test delete error - await expect(col.delete(null)).rejects.toThrow(lowstorage_ERROR_CODES.MISSING_ARGUMENT); - - // Test count error - wrong argument - await expect(col.count(null)).rejects.toThrow(lowstorage_ERROR_CODES.COUNT_ERROR); - const count = await col.count(); - await expect(count).toBe(0); - - // Test remove collection error - await expect(lStorage.removeCollection(null)).rejects.toThrow(lowstorage_ERROR_CODES.REMOVE_COLLECTION_ERROR); - - // Test rename collection error - await expect(lStorage.renameCollection(null, 'newName')).rejects.toThrow(lowstorage_ERROR_CODES.RENAME_COLLECTION_ERROR); - - // Clean up - await lStorage.removeCollection('testCol2'); -}); + const col = await lStorage.collection(colName); + const insertData = await col.insert({ name: 'Carlos', age: 25 }, userAvroSchema); -test('Document | CRUD operations', async () => { - // Test insert - const col = await lStorage.collection('testCol'); - const insertData = await col.insert({ name: 'Carlos', age: 25 }); expect(insertData).toBeDefined(); expect(insertData).toHaveLength(1); expect(insertData[0]).toHaveProperty('_id'); expect(insertData[0]).toHaveProperty('name', 'Carlos'); expect(insertData[0]).toHaveProperty('age', 25); - // Test by find - const findData = await col.find({ name: 'Carlos' }); - expect(findData).toBeDefined(); - expect(findData).toHaveLength(1); - expect(findData[0]).toHaveProperty('_id'); - expect(findData[0]).toHaveProperty('name', 'Carlos'); - expect(findData[0]).toHaveProperty('age', 25); - - // Test insert with schema - const insertDataWithSchema = await col.insert({ name: 'Carlos', age: 25 }, userAvroSchema); - expect(insertDataWithSchema).toBeDefined(); - expect(insertDataWithSchema).toHaveLength(1); - expect(insertDataWithSchema[0]).toHaveProperty('_id'); - expect(insertDataWithSchema[0]).toHaveProperty('name', 'Carlos'); - expect(insertDataWithSchema[0]).toHaveProperty('age', 25); - - // Test by find - const findDataWithSchema = await col.find({ name: 'Carlos' }); - expect(findDataWithSchema).toBeDefined(); - expect(findDataWithSchema).toHaveLength(2); - expect(findDataWithSchema[0]).toHaveProperty('_id'); - expect(findDataWithSchema[0]).toHaveProperty('name', 'Carlos'); - expect(findDataWithSchema[0]).toHaveProperty('age', 25); - - // test count - const count = await col.count({ name: 'Carlos' }); - expect(count).toBe(2); - - const count2 = await col.count(); - expect(count2).toBe(2); - - const count3 = await col.count({ name: 'Carlos2' }); - expect(count3).toBe(0); - - // Test insert with invalid schema - const invalidSchema = { type: 'invalid' }; - await expect(col.insert({ name: 'Carlos', age: 25 }, invalidSchema)).rejects.toThrow(lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR); - - // Test insert with invalid data - await expect(col.insert(null)).rejects.toThrow(lowstorage_ERROR_CODES.INSERT_ERROR); - - // Test insert with array - const insertDataArray = await col.insert([ - { name: 'Carlos', age: 25 }, - { name: 'Bob', age: 30 }, - ]); - expect(insertDataArray).toBeDefined(); - expect(insertDataArray).toHaveLength(2); - expect(insertDataArray[0]).toHaveProperty('_id'); - expect(insertDataArray[0]).toHaveProperty('name', 'Carlos'); - expect(insertDataArray[0]).toHaveProperty('age', 25); - expect(insertDataArray[1]).toHaveProperty('_id'); - expect(insertDataArray[1]).toHaveProperty('name', 'Bob'); - expect(insertDataArray[1]).toHaveProperty('age', 30); - - // Test insert with array and schema - const insertDataArrayWithSchema = await col.insert( - [ - { name: 'Carlos', age: 25 }, - { name: 'Bob', age: 30 }, - ], - userAvroSchema, - ); - expect(insertDataArrayWithSchema).toBeDefined(); - expect(insertDataArrayWithSchema).toHaveLength(2); - expect(insertDataArrayWithSchema[0]).toHaveProperty('_id'); - expect(insertDataArrayWithSchema[0]).toHaveProperty('name', 'Carlos'); - expect(insertDataArrayWithSchema[0]).toHaveProperty('age', 25); - expect(insertDataArrayWithSchema[1]).toHaveProperty('_id'); - expect(insertDataArrayWithSchema[1]).toHaveProperty('name', 'Bob'); - expect(insertDataArrayWithSchema[1]).toHaveProperty('age', 30); - - // Test insert with invalid array - await expect(col.insert(null)).rejects.toThrow(lowstorage_ERROR_CODES.INSERT_ERROR); - - // Test insert with invalid array and schema - await expect( - col.insert( - [ - { name: 'Carlos', age: 25 }, - { name: 'Bob', age: 30 }, - ], - invalidSchema, - ), - ).rejects.toThrow(lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR); - - // Test update - const updateData = await col.update({ name: 'Carlos' }, { name: 'Carlos2' }); - expect(updateData).toBeDefined(); - expect(updateData).toHaveLength(4); - expect(updateData[0]).toHaveProperty('_id'); - expect(updateData[0]).toHaveProperty('name', 'Carlos2'); - expect(updateData[0]).toHaveProperty('age', 25); - - // Test update with invalid array - await expect(col.update(null, { name: 'Carlos2' })).rejects.toThrow(lowstorage_ERROR_CODES.UPDATE_ERROR); - - // Test delete - const deleteData = await col.delete({ name: 'Carlos2' }); - expect(deleteData).toBeDefined(); - expect(deleteData).toHaveLength(1); - expect(deleteData[0]).toHaveProperty('_id'); - expect(deleteData[0]).toHaveProperty('name', 'Carlos2'); - expect(deleteData[0]).toHaveProperty('age', 25); - - // Test delete with schema - const deleteDataWithSchema = await col.delete({ name: 'Carlos2' }, userAvroSchema); - expect(deleteDataWithSchema).toBeDefined(); - expect(deleteDataWithSchema).toHaveLength(1); - expect(deleteDataWithSchema[0]).toHaveProperty('_id'); - expect(deleteDataWithSchema[0]).toHaveProperty('name', 'Carlos2'); - expect(deleteDataWithSchema[0]).toHaveProperty('age', 25); - - // Test delete with invalid schema - await expect(col.delete({ name: 'Carlos2' }, invalidSchema)).rejects.toThrow(lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR); - - // Test delete with invalid data - await expect(col.delete(null)).rejects.toThrow(lowstorage_ERROR_CODES.DELETE_ERROR); - - // Test delete with array - const deleteDataArray = await col.delete([{ name: 'Carlos2' }, { name: 'Bob' }]); - expect(deleteDataArray).toBeDefined(); - expect(deleteDataArray).toHaveLength(2); - expect(deleteDataArray[0]).toHaveProperty('_id'); - expect(deleteDataArray[0]).toHaveProperty('name', 'Carlos2'); - expect(deleteDataArray[0]).toHaveProperty('age', 25); - expect(deleteDataArray[1]).toHaveProperty('_id'); - expect(deleteDataArray[1]).toHaveProperty('name', 'Bob'); - expect(deleteDataArray[1]).toHaveProperty('age', 30); - - // Test delete with array and schema - const deleteDataArrayWithSchema = await col.delete([{ name: 'Carlos2' }, { name: 'Bob' }], userAvroSchema); - expect(deleteDataArrayWithSchema).toBeDefined(); - expect(deleteDataArrayWithSchema).toHaveLength(2); - expect(deleteDataArrayWithSchema[0]).toHaveProperty('_id'); - expect(deleteDataArrayWithSchema[0]).toHaveProperty('name', 'Carlos2'); - expect(deleteDataArrayWithSchema[0]).toHaveProperty('age', 25); - expect(deleteDataArrayWithSchema[1]).toHaveProperty('_id'); - expect(deleteDataArrayWithSchema[1]).toHaveProperty('name', 'Bob'); - expect(deleteDataArrayWithSchema[1]).toHaveProperty('age', 30); - - // Test delete with invalid array - await expect(col.delete(null)).rejects.toThrow(lowstorage_ERROR_CODES.DELETE_ERROR); - - // Test delete with invalid array and schema - await expect(col.delete([{ name: 'Carlos2' }, { name: 'Bob' }], invalidSchema)).rejects.toThrow( - lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR, - ); - - // cleanup - await lStorage.removeCollection('testCol'); + expect(col2.find({ name: 'Carlos' })).rejects.toThrow(lowstorage_ERROR_CODES.FIND_ERROR); + + col2.setAvroSchema(userAvroSchema); + + const schema2 = col2.getAvroSchema(); + + const schema1 = col.getAvroSchema(); + console.log('schema::::::::::::::::::::::', schema1); + expect(schema1).toBeDefined(); + + console.log('schema::::::::::::::::::::::', schema2); + expect(schema2).toBeDefined(); + + const find1 = await col.find({ name: 'Carlos' }); + + console.log('find1::::::::::::::::::::::', find1); + expect(find1).toBeDefined(); + expect(find1).toHaveLength(1); + expect(find1[0]).toHaveProperty('_id'); + expect(find1[0]).toHaveProperty('name', 'Carlos'); + expect(find1[0]).toHaveProperty('age', 25); + + // TODO - fix this + const findData2 = await col2.find({ name: 'Carlos' }); + console.log('findData2::::::::::::::::::::::', findData2); + expect(findData2).toBeDefined(); + expect(findData2).toHaveLength(1); + expect(findData2[0]).toHaveProperty('_id'); + expect(findData2[0]).toHaveProperty('name', 'Carlos'); + expect(findData2[0]).toHaveProperty('age', 25); + + // const insertData2 = await col2.insert({ name: 'Carlos', age: 29 }); + // expect(insertData2).toBeDefined(); + // expect(insertData2).toHaveLength(1); + // expect(insertData2[0]).toHaveProperty('_id'); + // expect(insertData2[0]).toHaveProperty('name', 'Carlos'); + // expect(insertData2[0]).toHaveProperty('age', 29); + + // const findData3 = await col.find({ name: 'Carlos' }); + // expect(findData3).toBeDefined(); + // expect(findData3).toHaveLength(1); + // expect(findData3[0]).toHaveProperty('_id'); + // expect(findData3[0]).toHaveProperty('name', 'Carlos'); + // expect(findData3[0]).toHaveProperty('age', 29); + + // // Test update + // const updateData = await col2.update({ name: 'Carlos' }, { name: 'Carlos2' }); + // console.log('updateData', updateData); + // expect(updateData).toBeDefined(); + // expect(updateData).toBe(1); + // expect(updateData).toEqual(1); + + // // Test update with invalid array + // await expect(col.update(null, { name: 'Carlos2' })).rejects.toThrow(lowstorage_ERROR_CODES.UPDATE_ERROR); + + // // Test delete + // const deleteData = await col.delete({ name: 'Carlos2' }); + // expect(deleteData).toBeDefined(); + // expect(deleteData).toBe(4); + + // // Test delete with invalid array + // await expect(col.delete(null)).rejects.toThrow(lowstorage_ERROR_CODES.DELETE_ERROR); + + // // Test update + // const updateData2 = await col.update({ name: 'Carlos' }, { name: 'Carlos2' }); + // console.log('updateData2', updateData2); + // expect(updateData2).toBeDefined(); + // expect(updateData2).toBe(4); + // expect(updateData2).toEqual(4); }); From 9b758f2705c189bbd687f6591f3eae4f0c273fc6 Mon Sep 17 00:00:00 2001 From: Jolly Good <1671375+good-lly@users.noreply.github.com> Date: Fri, 16 Aug 2024 11:47:02 +0200 Subject: [PATCH 09/18] fixing, clearing, removing and simplifying [wip] --- lib/lowstorage.js | 10 +- lib/lowstorage.js.map | 6 +- src/lowstorage.js | 153 ++++------ src/lowstorage.test.js | 647 +++++++++++++++++++++-------------------- 4 files changed, 391 insertions(+), 425 deletions(-) diff --git a/lib/lowstorage.js b/lib/lowstorage.js index 543a41a..19b6494 100644 --- a/lib/lowstorage.js +++ b/lib/lowstorage.js @@ -1,8 +1,8 @@ -var W="AWS4-HMAC-SHA256",j="aws4_request",H="s3",de="2",R="UNSIGNED-PAYLOAD",_e="application/octet-stream",Q="application/xml",I="application/json",fe=["accessKeyId","secretAccessKey","sessionToken","password"],w="x-amz-content-sha256",ge="x-amz-date",pe="host",Ee="Authorization",O="Content-Type",S="Content-Length",X="etag",Y="last-modified",_="ultralight-s3 Module: ",Re=`${_}accessKeyId must be a non-empty string`,we=`${_}secretAccessKey must be a non-empty string`,ye=`${_}endpoint must be a non-empty string`,me=`${_}bucketName must be a non-empty string`,J=`${_}key must be a non-empty string`,C=`${_}uploadId must be a non-empty string`,Z=`${_}parts must be a non-empty array`,ee=`${_}Each part must have a partNumber (number) and ETag (string)`,P=`${_}data must be a Buffer or string`,te=`${_}prefix must be a string`,re=`${_}maxKeys must be a positive integer`,se=`${_}delimiter must be a string`,ie=crypto.createHmac||(await import("node:crypto")).createHmac,ae=crypto.createHash||(await import("node:crypto")).createHash;typeof ie>"u"&&typeof ae>"u"&&console.error("ultralight-S3 Module: Crypto functions are not available, please report the issue with necessary description: https://github.com/sentienhq/ultralight-s3/issues");var Oe={contents:!0},Te=t=>`%${t.charCodeAt(0).toString(16).toUpperCase()}`,K=t=>encodeURIComponent(t).replace(/[!'()*]/g,Te),y=t=>K(t).replace(/%2F/g,"/"),oe=class{constructor({accessKeyId:t,secretAccessKey:e,endpoint:r,bucketName:s,region:i="auto",maxRequestSizeInBytes:o=5242880,requestAbortTimeout:n=void 0,logger:c=void 0}){this.getBucketName=()=>this.bucketName,this.setBucketName=a=>{this.bucketName=a},this.getRegion=()=>this.region,this.setRegion=a=>{this.region=a},this.getEndpoint=()=>this.endpoint,this.setEndpoint=a=>{this.endpoint=a},this.getMaxRequestSizeInBytes=()=>this.maxRequestSizeInBytes,this.setMaxRequestSizeInBytes=a=>{this.maxRequestSizeInBytes=a},this.sanitizeETag=a=>L(a),this.getProps=()=>({accessKeyId:this.accessKeyId,secretAccessKey:this.secretAccessKey,region:this.region,bucket:this.bucketName,endpoint:this.endpoint,maxRequestSizeInBytes:this.maxRequestSizeInBytes,requestAbortTimeout:this.requestAbortTimeout,logger:this.logger}),this.setProps=a=>{this._validateConstructorParams(a.accessKeyId,a.secretAccessKey,a.bucketName,a.endpoint),this.accessKeyId=a.accessKeyId,this.secretAccessKey=a.secretAccessKey,this.region=a.region||"auto",this.bucketName=a.bucketName,this.endpoint=a.endpoint,this.maxRequestSizeInBytes=a.maxRequestSizeInBytes||5242880,this.requestAbortTimeout=a.requestAbortTimeout,this.logger=a.logger},this._validateConstructorParams(t,e,r,s),this.accessKeyId=t,this.secretAccessKey=e,this.endpoint=r,this.bucketName=s,this.region=i,this.maxRequestSizeInBytes=o,this.requestAbortTimeout=n,this.logger=c}_validateConstructorParams(t,e,r,s){if(typeof t!="string"||t.trim().length===0)throw new TypeError(Re);if(typeof e!="string"||e.trim().length===0)throw new TypeError(we);if(typeof r!="string"||r.trim().length===0)throw new TypeError(ye);if(typeof s!="string"||s.trim().length===0)throw new TypeError(me)}_checkMethodHeadnGet(t){if(t!=="GET"&&t!=="HEAD")throw this._log("error",`${_}method must be either GET or HEAD`),new Error("method must be either GET or HEAD")}_checkKey(t){if(typeof t!="string"||t.trim().length===0)throw this._log("error",J),new TypeError(J)}_checkDelimiter(t){if(typeof t!="string"||t.trim().length===0)throw this._log("error",se),new TypeError(se)}_checkPrefix(t){if(typeof t!="string")throw this._log("error",te),new TypeError(te)}_checkMaxKeys(t){if(typeof t!="number"||t<=0)throw this._log("error",re),new TypeError(re)}_checkOpts(t){if(typeof t!="object")throw this._log("error",`${_}opts must be an object`),new TypeError(`${_}opts must be an object`)}_log(t,e,r={}){if(this.logger&&typeof this.logger[t]=="function"){let s=n=>typeof n!="object"||n===null?n:Object.keys(n).reduce((c,a)=>(fe.includes(a.toLowerCase())?c[a]="[REDACTED]":typeof n[a]=="object"&&n[a]!==null?c[a]=s(n[a]):c[a]=n[a],c),Array.isArray(n)?[]:{}),i=s(r),o={timestamp:new Date().toISOString(),level:t,message:e,...i,context:s({bucketName:this.bucketName,region:this.region,endpoint:this.endpoint,accessKeyId:this.accessKeyId?`${this.accessKeyId.substring(0,4)}...`:void 0})};this.logger[t](o)}}async getContentLength(t){this._checkKey(t);let e={[w]:R},r=y(t),{url:s,headers:i}=await this._sign("HEAD",r,{},e,""),o=(await this._sendRequest(s,"HEAD",i)).headers.get(S);return o?parseInt(o,10):0}async bucketExists(){let t={[w]:R},{url:e,headers:r}=await this._sign("HEAD","",{},t,""),s=await this._sendRequest(e,"HEAD",r);return!!(s.ok&&s.status===200)}async fileExists(t,e={}){this._checkKey(t);let{filteredOpts:r,conditionalHeaders:s}=this._filterIfHeaders(e),i={[w]:R,...s},o=y(t),{url:n,headers:c}=await this._sign("HEAD",o,r,i,"");try{let a=await this._sendRequest(n,"HEAD",c,"",[200,404,412,304]);return a.status===404?!1:a.status===412||a.status===304?null:a.ok&&a.status===200?!0:(this._handleErrorResponse(a),!1)}catch(a){let u=a instanceof Error?a.message:String(a);throw this._log("error",`${_}Failed to check if file exists: ${u}`),new Error(`${_}Failed to check if file exists: ${u}`)}}async _sign(t,e,r,s,i){let o=new Date().toISOString().replace(/[:-]|\.\d{3}/g,""),n=typeof e=="string"&&e.length>0?new URL(e,this.endpoint):new URL(this.endpoint);n.pathname=`/${encodeURI(this.bucketName)}${n.pathname}`,s[w]=i?await k(i):R,s[ge]=o,s[pe]=n.host;let c=this._buildCanonicalHeaders(s),a=Object.keys(s).map(m=>m.toLowerCase()).sort().join(";"),u=await this._buildCanonicalRequest(t,n,r,c,a,i),f=await this._buildStringToSign(o,u),g=await this._calculateSignature(o,f),E=this._buildAuthorizationHeader(o,a,g);return s[Ee]=E,{url:n.toString(),headers:s}}_buildCanonicalHeaders(t){return Object.entries(t).map(([e,r])=>`${e.toLowerCase()}:${String(r).trim()}`).sort().join(` +var Q="AWS4-HMAC-SHA256",j="aws4_request",H="s3",_e="2",R="UNSIGNED-PAYLOAD",fe="application/octet-stream",X="application/xml",b="application/json",ge=["accessKeyId","secretAccessKey","sessionToken","password"],w="x-amz-content-sha256",pe="x-amz-date",Ee="host",Re="Authorization",T="Content-Type",N="Content-Length",Y="etag",J="last-modified",_="ultralight-s3 Module: ",we=`${_}accessKeyId must be a non-empty string`,ye=`${_}secretAccessKey must be a non-empty string`,me=`${_}endpoint must be a non-empty string`,Oe=`${_}bucketName must be a non-empty string`,Z=`${_}key must be a non-empty string`,x=`${_}uploadId must be a non-empty string`,ee=`${_}parts must be a non-empty array`,te=`${_}Each part must have a partNumber (number) and ETag (string)`,k=`${_}data must be a Buffer or string`,re=`${_}prefix must be a string`,se=`${_}maxKeys must be a positive integer`,ie=`${_}delimiter must be a string`,ae=crypto.createHmac||(await import("node:crypto")).createHmac,oe=crypto.createHash||(await import("node:crypto")).createHash;typeof ae>"u"&&typeof oe>"u"&&console.error("ultralight-S3 Module: Crypto functions are not available, please report the issue with necessary description: https://github.com/sentienhq/ultralight-s3/issues");var $e={contents:!0},Te=t=>`%${t.charCodeAt(0).toString(16).toUpperCase()}`,K=t=>encodeURIComponent(t).replace(/[!'()*]/g,Te),y=t=>K(t).replace(/%2F/g,"/"),ne=class{constructor({accessKeyId:t,secretAccessKey:e,endpoint:r,bucketName:s,region:i="auto",maxRequestSizeInBytes:o=5242880,requestAbortTimeout:n=void 0,logger:c=void 0}){this.getBucketName=()=>this.bucketName,this.setBucketName=a=>{this.bucketName=a},this.getRegion=()=>this.region,this.setRegion=a=>{this.region=a},this.getEndpoint=()=>this.endpoint,this.setEndpoint=a=>{this.endpoint=a},this.getMaxRequestSizeInBytes=()=>this.maxRequestSizeInBytes,this.setMaxRequestSizeInBytes=a=>{this.maxRequestSizeInBytes=a},this.sanitizeETag=a=>L(a),this.getProps=()=>({accessKeyId:this.accessKeyId,secretAccessKey:this.secretAccessKey,region:this.region,bucket:this.bucketName,endpoint:this.endpoint,maxRequestSizeInBytes:this.maxRequestSizeInBytes,requestAbortTimeout:this.requestAbortTimeout,logger:this.logger}),this.setProps=a=>{this._validateConstructorParams(a.accessKeyId,a.secretAccessKey,a.bucketName,a.endpoint),this.accessKeyId=a.accessKeyId,this.secretAccessKey=a.secretAccessKey,this.region=a.region||"auto",this.bucketName=a.bucketName,this.endpoint=a.endpoint,this.maxRequestSizeInBytes=a.maxRequestSizeInBytes||5242880,this.requestAbortTimeout=a.requestAbortTimeout,this.logger=a.logger},this._validateConstructorParams(t,e,r,s),this.accessKeyId=t,this.secretAccessKey=e,this.endpoint=r,this.bucketName=s,this.region=i,this.maxRequestSizeInBytes=o,this.requestAbortTimeout=n,this.logger=c}_validateConstructorParams(t,e,r,s){if(typeof t!="string"||t.trim().length===0)throw new TypeError(we);if(typeof e!="string"||e.trim().length===0)throw new TypeError(ye);if(typeof r!="string"||r.trim().length===0)throw new TypeError(me);if(typeof s!="string"||s.trim().length===0)throw new TypeError(Oe)}_checkMethodHeadnGet(t){if(t!=="GET"&&t!=="HEAD")throw this._log("error",`${_}method must be either GET or HEAD`),new Error("method must be either GET or HEAD")}_checkKey(t){if(typeof t!="string"||t.trim().length===0)throw this._log("error",Z),new TypeError(Z)}_checkDelimiter(t){if(typeof t!="string"||t.trim().length===0)throw this._log("error",ie),new TypeError(ie)}_checkPrefix(t){if(typeof t!="string")throw this._log("error",re),new TypeError(re)}_checkMaxKeys(t){if(typeof t!="number"||t<=0)throw this._log("error",se),new TypeError(se)}_checkOpts(t){if(typeof t!="object")throw this._log("error",`${_}opts must be an object`),new TypeError(`${_}opts must be an object`)}_log(t,e,r={}){if(this.logger&&typeof this.logger[t]=="function"){let s=n=>typeof n!="object"||n===null?n:Object.keys(n).reduce((c,a)=>(ge.includes(a.toLowerCase())?c[a]="[REDACTED]":typeof n[a]=="object"&&n[a]!==null?c[a]=s(n[a]):c[a]=n[a],c),Array.isArray(n)?[]:{}),i=s(r),o={timestamp:new Date().toISOString(),level:t,message:e,...i,context:s({bucketName:this.bucketName,region:this.region,endpoint:this.endpoint,accessKeyId:this.accessKeyId?`${this.accessKeyId.substring(0,4)}...`:void 0})};this.logger[t](o)}}async getContentLength(t){this._checkKey(t);let e={[w]:R},r=y(t),{url:s,headers:i}=await this._sign("HEAD",r,{},e,""),o=(await this._sendRequest(s,"HEAD",i)).headers.get(N);return o?parseInt(o,10):0}async bucketExists(){let t={[w]:R},{url:e,headers:r}=await this._sign("HEAD","",{},t,""),s=await this._sendRequest(e,"HEAD",r);return!!(s.ok&&s.status===200)}async fileExists(t,e={}){this._checkKey(t);let{filteredOpts:r,conditionalHeaders:s}=this._filterIfHeaders(e),i={[w]:R,...s},o=y(t),{url:n,headers:c}=await this._sign("HEAD",o,r,i,"");try{let a=await this._sendRequest(n,"HEAD",c,"",[200,404,412,304]);return a.status===404?!1:a.status===412||a.status===304?null:a.ok&&a.status===200?!0:(this._handleErrorResponse(a),!1)}catch(a){let u=a instanceof Error?a.message:String(a);throw this._log("error",`${_}Failed to check if file exists: ${u}`),new Error(`${_}Failed to check if file exists: ${u}`)}}async _sign(t,e,r,s,i){let o=new Date().toISOString().replace(/[:-]|\.\d{3}/g,""),n=typeof e=="string"&&e.length>0?new URL(e,this.endpoint):new URL(this.endpoint);n.pathname=`/${encodeURI(this.bucketName)}${n.pathname}`,s[w]=i?await F(i):R,s[pe]=o,s[Ee]=n.host;let c=this._buildCanonicalHeaders(s),a=Object.keys(s).map($=>$.toLowerCase()).sort().join(";"),u=await this._buildCanonicalRequest(t,n,r,c,a,i),f=await this._buildStringToSign(o,u),g=await this._calculateSignature(o,f),E=this._buildAuthorizationHeader(o,a,g);return s[Re]=E,{url:n.toString(),headers:s}}_buildCanonicalHeaders(t){return Object.entries(t).map(([e,r])=>`${e.toLowerCase()}:${String(r).trim()}`).sort().join(` `)}async _buildCanonicalRequest(t,e,r,s,i,o){return[t,e.pathname,this._buildCanonicalQueryString(r),`${s} -`,i,o?await k(o):R].join(` -`)}async _buildStringToSign(t,e){let r=[t.slice(0,8),this.region,H,j].join("/");return[W,t,r,await k(e)].join(` -`)}async _calculateSignature(t,e){let r=await this._getSignatureKey(t.slice(0,8));return U(r,e,"hex")}_buildAuthorizationHeader(t,e,r){let s=[t.slice(0,8),this.region,H,j].join("/");return[`${W} Credential=${this.accessKeyId}/${s}`,`SignedHeaders=${e}`,`Signature=${r}`].join(", ")}_filterIfHeaders(t){let e={},r={},s=["if-match","if-none-match","if-modified-since","if-unmodified-since"];for(let[i,o]of Object.entries(t))s.includes(i)?r[i]=o:e[i]=o;return{filteredOpts:e,conditionalHeaders:r}}async list(t="/",e="",r=1e3,s="GET",i={}){this._checkDelimiter(t),this._checkPrefix(e),this._checkMaxKeys(r),this._checkMethodHeadnGet(s),this._checkOpts(i),this._log("info",`Listing objects in ${e}`);let o={"list-type":de,"max-keys":String(r),...i};e.length>0&&(o.prefix=e);let n={[O]:I,[w]:R},c=t==="/"?t:K(t),{url:a,headers:u}=await this._sign("GET",c,o,n,""),f=`${a}?${new URLSearchParams(o)}`,g=await this._sendRequest(f,"GET",u),E=await g.text();if(s==="HEAD"){let b=g.headers.get(S),D=g.headers.get(Y),ue=g.headers.get(X);return{size:b?+b:void 0,mtime:D?new Date(D):void 0,ETag:ue||void 0}}let m=x(E),M=m.listBucketResult||m.error||m;return M.contents||M}async listMultiPartUploads(t="/",e="",r="GET",s={}){var i,o,n;this._checkDelimiter(t),this._checkPrefix(e),this._checkMethodHeadnGet(r),this._checkOpts(s),this._log("info",`Listing multipart uploads in ${e}`);let c={uploads:"",...s},a={[O]:I,[w]:R},u=t==="/"?t:K(t),{url:f,headers:g}=await this._sign("GET",u,c,a,""),E=`${f}?${new URLSearchParams(c)}`,m=await this._sendRequest(E,"GET",g),M=await m.text();if(r==="HEAD")return{size:+((i=m.headers.get(S))!==null&&i!==void 0?i:"0"),mtime:new Date((o=m.headers.get(Y))!==null&&o!==void 0?o:""),ETag:(n=m.headers.get(X))!==null&&n!==void 0?n:""};let b=x(M),D=b.listMultipartUploadsResult||b.error||b;return D.uploads||D}async get(t,e={}){this._checkKey(t),this._log("info",`Getting object ${t}`);let{filteredOpts:r,conditionalHeaders:s}=this._filterIfHeaders(e),i={[O]:I,[w]:R,...s},o=y(t),{url:n,headers:c}=await this._sign("GET",o,r,i,""),a=await this._sendRequest(n,"GET",c,"",[200,404,412,304]);if(a.status===404||a.status===412||a.status===304)return this._log("error",`Failed to get object. Status: ${a.status}`),null;if(!a.ok)throw this._log("error",`Failed to get object. Status: ${a.status}`),new Error(`Failed to get object. Status: ${a.status}`);return a.text()}async getObjectWithETag(t,e={}){this._checkKey(t),this._log("info",`Getting object ${t}`);let{filteredOpts:r,conditionalHeaders:s}=this._filterIfHeaders(e),i={[O]:I,[w]:R,...s},o=y(t),{url:n,headers:c}=await this._sign("GET",o,r,i,"");try{let a=await this._sendRequest(n,"GET",c,"",[200,404,412,304]);if(a.status===404||a.status===412||a.status===304)return this._log("error",`Failed to get object. Status: ${a.status}`),{etag:null,data:null};if(!a.ok)throw this._log("error",`Failed to get object. Status: ${a.status}`),new Error(`Failed to get object. Status: ${a.status}`);let u=a.headers.get("etag");if(!u)throw new Error("ETag not found in response headers");let f=await a.text();return{etag:L(u),data:f}}catch(a){throw this._log("error",`Error getting object ${t} with ETag: ${a}`),a}}async getEtag(t,e={}){this._checkKey(t),this._log("info",`Getting etag object ${t}`);let{filteredOpts:r,conditionalHeaders:s}=this._filterIfHeaders(e),i={[O]:I,[w]:R,...s},o=y(t),{url:n,headers:c}=await this._sign("HEAD",o,r,i,""),a=await this._sendRequest(n,"HEAD",c,"",[200,412,304]);if(this._log("info",`Response status: ${a.status,a.statusText}`),a.status===412||a.status===304)return null;let u=a.headers.get("etag");if(!u)throw this._log("error","ETag not found in response headers"),new Error("ETag not found in response headers");return L(u)}async getResponse(t,e=!0,r=0,s=this.maxRequestSizeInBytes,i={}){this._checkKey(t);let{filteredOpts:o,conditionalHeaders:n}=this._filterIfHeaders({...i}),c={[O]:I,[w]:R,...e?{}:{range:`bytes=${r}-${s-1}`},...n},a=y(t),{url:u,headers:f}=await this._sign("GET",a,o,c,""),g=`${u}?${new URLSearchParams(o)}`;return this._sendRequest(g,"GET",f)}async put(t,e){if(this._checkKey(t),!(e instanceof Buffer||typeof e=="string"))throw this._log("error",P),new TypeError(P);this._log("info",`Uploading object ${t}`);let r=typeof e=="string"?Buffer.byteLength(e):e.length,s={[S]:r},i=y(t),{url:o,headers:n}=await this._sign("PUT",i,{},s,e);return await this._sendRequest(o,"PUT",n,e)}async getMultipartUploadId(t,e=_e){if(this._checkKey(t),typeof e!="string")throw this._log("error",`${_}fileType must be a string`),new TypeError(`${_}fileType must be a string`);this._log("info",`Initiating multipart upload for object ${t}`);let r={uploads:""},s={[O]:e,[w]:R},i=y(t),{url:o,headers:n}=await this._sign("POST",i,r,s,""),c=`${o}?${new URLSearchParams(r)}`,a=await(await this._sendRequest(c,"POST",n)).text(),u=x(a);if(typeof u=="object"&&u!==null&&"error"in u&&typeof u.error=="object"&&u.error!==null&&"message"in u.error){let f=String(u.error.message);throw this._log("error",`${_}Failed to abort multipart upload: ${f}`),new Error(`${_}Failed to abort multipart upload: ${f}`)}if(typeof u=="object"&&u!==null){if(!u.initiateMultipartUploadResult||!u.initiateMultipartUploadResult.uploadId)throw this._log("error",`${_}Failed to create multipart upload: no uploadId in response`),new Error(`${_}Failed to create multipart upload: Missing upload ID in response`);return u.initiateMultipartUploadResult.uploadId}else throw this._log("error",`${_}Failed to create multipart upload: unexpected response format`),new Error(`${_}Failed to create multipart upload: Unexpected response format`)}async uploadPart(t,e,r,s,i={}){this._validateUploadPartParams(t,e,r,s,i);let o={uploadId:r,partNumber:s,...i},n={[S]:e.length},c=y(t),{url:a,headers:u}=await this._sign("PUT",c,o,n,e),f=`${a}?${new URLSearchParams(o)}`,g=await this._sendRequest(f,"PUT",u,e),E=L(g.headers.get("etag")||"");return{partNumber:s,ETag:E}}_validateUploadPartParams(t,e,r,s,i){if(this._checkKey(t),!(e instanceof Buffer||typeof e=="string"))throw this._log("error",P),new TypeError(P);if(typeof r!="string"||r.trim().length===0)throw this._log("error",C),new TypeError(C);if(!Number.isInteger(s)||s<=0)throw this._log("error",`${_}partNumber must be a positive integer`),new TypeError(`${_}partNumber must be a positive integer`);this._checkOpts(i)}async completeMultipartUpload(t,e,r){if(this._checkKey(t),typeof e!="string"||e.trim().length===0)throw this._log("error",C),new TypeError(C);if(!Array.isArray(r)||r.length===0)throw this._log("error",Z),new TypeError(Z);if(!r.every(E=>typeof E.partNumber=="number"&&typeof E.ETag=="string"))throw this._log("error",ee),new TypeError(ee);this._log("info",`Complete multipart upload ${e} for object ${t}`);let s={uploadId:e},i=this._buildCompleteMultipartUploadXml(r),o={[O]:Q,[S]:Buffer.byteLength(i).toString(),[w]:await k(i)},n=y(t),{url:c,headers:a}=await this._sign("POST",n,s,o,i),u=`${c}?${new URLSearchParams(s)}`,f=await(await this._sendRequest(u,"POST",a,i)).text(),g=x(f);if(typeof g=="object"&&g!==null&&"error"in g&&typeof g.error=="object"&&g.error!==null&&"message"in g.error){let E=String(g.error.message);throw this._log("error",`${_}Failed to abort multipart upload: ${E}`),new Error(`${_}Failed to abort multipart upload: ${E}`)}return g.completeMultipartUploadResult}async abortMultipartUpload(t,e){if(this._checkKey(t),typeof e!="string"||e.trim().length===0)throw this._log("error",C),new TypeError(C);this._log("info",`Aborting multipart upload ${e} for object ${t}`);let r={uploadId:e},s={[O]:Q,[w]:R};try{let i=y(t),{url:o,headers:n}=await this._sign("DELETE",i,r,s,""),c=`${o}?${new URLSearchParams(r)}`,a=await this._sendRequest(c,"DELETE",n);if(a.ok){let u=await a.text(),f=x(u);if(typeof f=="object"&&f!==null&&"error"in f&&typeof f.error=="object"&&f.error!==null&&"message"in f.error){let g=String(f.error.message);throw this._log("error",`${_}Failed to abort multipart upload: ${g}`),new Error(`${_}Failed to abort multipart upload: ${g}`)}return{status:"Aborted",key:t,uploadId:e,response:f}}else throw this._log("error",`${_}Abort request failed with status ${a.status}`),new Error(`${_}Abort request failed with status ${a.status}`)}catch(i){let o=i instanceof Error?i.message:String(i);throw this._log("error",`${_}Failed to abort multipart upload for key ${t}: ${o}`),new Error(`${_}Failed to abort multipart upload for key ${t}: ${o}`)}}_buildCompleteMultipartUploadXml(t){return` +`,i,o?await F(o):R].join(` +`)}async _buildStringToSign(t,e){let r=[t.slice(0,8),this.region,H,j].join("/");return[Q,t,r,await F(e)].join(` +`)}async _calculateSignature(t,e){let r=await this._getSignatureKey(t.slice(0,8));return U(r,e,"hex")}_buildAuthorizationHeader(t,e,r){let s=[t.slice(0,8),this.region,H,j].join("/");return[`${Q} Credential=${this.accessKeyId}/${s}`,`SignedHeaders=${e}`,`Signature=${r}`].join(", ")}_filterIfHeaders(t){let e={},r={},s=["if-match","if-none-match","if-modified-since","if-unmodified-since"];for(let[i,o]of Object.entries(t))s.includes(i)?r[i]=o:e[i]=o;return{filteredOpts:e,conditionalHeaders:r}}async list(t="/",e="",r=1e3,s="GET",i={}){this._checkDelimiter(t),this._checkPrefix(e),this._checkMaxKeys(r),this._checkMethodHeadnGet(s),this._checkOpts(i),this._log("info",`Listing objects in ${e}`);let o={"list-type":_e,"max-keys":String(r),...i};e.length>0&&(o.prefix=e);let n={[T]:b,[w]:R},c=t==="/"?t:K(t),{url:a,headers:u}=await this._sign("GET",c,o,n,""),f=`${a}?${new URLSearchParams(o)}`,g=await this._sendRequest(f,"GET",u),E=await g.text();if(s==="HEAD"){let S=g.headers.get(N),D=g.headers.get(J),de=g.headers.get(Y);return{size:S?+S:void 0,mtime:D?new Date(D):void 0,ETag:de||void 0}}let $=C(E),M=$.listBucketResult||$.error||$;return M.contents||M}async listMultiPartUploads(t="/",e="",r="GET",s={}){var i,o,n;this._checkDelimiter(t),this._checkPrefix(e),this._checkMethodHeadnGet(r),this._checkOpts(s),this._log("info",`Listing multipart uploads in ${e}`);let c={uploads:"",...s},a={[T]:b,[w]:R},u=t==="/"?t:K(t),{url:f,headers:g}=await this._sign("GET",u,c,a,""),E=`${f}?${new URLSearchParams(c)}`,$=await this._sendRequest(E,"GET",g),M=await $.text();if(r==="HEAD")return{size:+((i=$.headers.get(N))!==null&&i!==void 0?i:"0"),mtime:new Date((o=$.headers.get(J))!==null&&o!==void 0?o:""),ETag:(n=$.headers.get(Y))!==null&&n!==void 0?n:""};let S=C(M),D=S.listMultipartUploadsResult||S.error||S;return D.uploads||D}async get(t,e={}){this._checkKey(t),this._log("info",`Getting object ${t}`);let{filteredOpts:r,conditionalHeaders:s}=this._filterIfHeaders(e),i={[T]:b,[w]:R,...s},o=y(t),{url:n,headers:c}=await this._sign("GET",o,r,i,""),a=await this._sendRequest(n,"GET",c,"",[200,404,412,304]);if(a.status===404||a.status===412||a.status===304)return this._log("error",`Failed to get object. Status: ${a.status}`),null;if(!a.ok)throw this._log("error",`Failed to get object. Status: ${a.status}`),new Error(`Failed to get object. Status: ${a.status}`);return a.text()}async getObjectWithETag(t,e={}){this._checkKey(t),this._log("info",`Getting object ${t}`);let{filteredOpts:r,conditionalHeaders:s}=this._filterIfHeaders(e),i={[T]:b,[w]:R,...s},o=y(t),{url:n,headers:c}=await this._sign("GET",o,r,i,"");try{let a=await this._sendRequest(n,"GET",c,"",[200,404,412,304]);if(a.status===404||a.status===412||a.status===304)return this._log("error",`Failed to get object. Status: ${a.status}`),{etag:null,data:null};if(!a.ok)throw this._log("error",`Failed to get object. Status: ${a.status}`),new Error(`Failed to get object. Status: ${a.status}`);let u=a.headers.get("etag");if(!u)throw new Error("ETag not found in response headers");let f=await a.text();return{etag:L(u),data:f}}catch(a){throw this._log("error",`Error getting object ${t} with ETag: ${a}`),a}}async getEtag(t,e={}){this._checkKey(t),this._log("info",`Getting etag object ${t}`);let{filteredOpts:r,conditionalHeaders:s}=this._filterIfHeaders(e),i={[T]:b,[w]:R,...s},o=y(t),{url:n,headers:c}=await this._sign("HEAD",o,r,i,""),a=await this._sendRequest(n,"HEAD",c,"",[200,412,304]);if(this._log("info",`Response status: ${a.status,a.statusText}`),a.status===412||a.status===304)return null;let u=a.headers.get("etag");if(!u)throw this._log("error","ETag not found in response headers"),new Error("ETag not found in response headers");return L(u)}async getResponse(t,e=!0,r=0,s=this.maxRequestSizeInBytes,i={}){this._checkKey(t);let{filteredOpts:o,conditionalHeaders:n}=this._filterIfHeaders({...i}),c={[T]:b,[w]:R,...e?{}:{range:`bytes=${r}-${s-1}`},...n},a=y(t),{url:u,headers:f}=await this._sign("GET",a,o,c,""),g=`${u}?${new URLSearchParams(o)}`;return this._sendRequest(g,"GET",f)}async put(t,e){if(this._checkKey(t),!(e instanceof Buffer||typeof e=="string"))throw this._log("error",k),new TypeError(k);this._log("info",`Uploading object ${t}`);let r=typeof e=="string"?Buffer.byteLength(e):e.length,s={[N]:r},i=y(t),{url:o,headers:n}=await this._sign("PUT",i,{},s,e);return await this._sendRequest(o,"PUT",n,e)}async getMultipartUploadId(t,e=fe){if(this._checkKey(t),typeof e!="string")throw this._log("error",`${_}fileType must be a string`),new TypeError(`${_}fileType must be a string`);this._log("info",`Initiating multipart upload for object ${t}`);let r={uploads:""},s={[T]:e,[w]:R},i=y(t),{url:o,headers:n}=await this._sign("POST",i,r,s,""),c=`${o}?${new URLSearchParams(r)}`,a=await(await this._sendRequest(c,"POST",n)).text(),u=C(a);if(typeof u=="object"&&u!==null&&"error"in u&&typeof u.error=="object"&&u.error!==null&&"message"in u.error){let f=String(u.error.message);throw this._log("error",`${_}Failed to abort multipart upload: ${f}`),new Error(`${_}Failed to abort multipart upload: ${f}`)}if(typeof u=="object"&&u!==null){if(!u.initiateMultipartUploadResult||!u.initiateMultipartUploadResult.uploadId)throw this._log("error",`${_}Failed to create multipart upload: no uploadId in response`),new Error(`${_}Failed to create multipart upload: Missing upload ID in response`);return u.initiateMultipartUploadResult.uploadId}else throw this._log("error",`${_}Failed to create multipart upload: unexpected response format`),new Error(`${_}Failed to create multipart upload: Unexpected response format`)}async uploadPart(t,e,r,s,i={}){this._validateUploadPartParams(t,e,r,s,i);let o={uploadId:r,partNumber:s,...i},n={[N]:e.length},c=y(t),{url:a,headers:u}=await this._sign("PUT",c,o,n,e),f=`${a}?${new URLSearchParams(o)}`,g=await this._sendRequest(f,"PUT",u,e),E=L(g.headers.get("etag")||"");return{partNumber:s,ETag:E}}_validateUploadPartParams(t,e,r,s,i){if(this._checkKey(t),!(e instanceof Buffer||typeof e=="string"))throw this._log("error",k),new TypeError(k);if(typeof r!="string"||r.trim().length===0)throw this._log("error",x),new TypeError(x);if(!Number.isInteger(s)||s<=0)throw this._log("error",`${_}partNumber must be a positive integer`),new TypeError(`${_}partNumber must be a positive integer`);this._checkOpts(i)}async completeMultipartUpload(t,e,r){if(this._checkKey(t),typeof e!="string"||e.trim().length===0)throw this._log("error",x),new TypeError(x);if(!Array.isArray(r)||r.length===0)throw this._log("error",ee),new TypeError(ee);if(!r.every(E=>typeof E.partNumber=="number"&&typeof E.ETag=="string"))throw this._log("error",te),new TypeError(te);this._log("info",`Complete multipart upload ${e} for object ${t}`);let s={uploadId:e},i=this._buildCompleteMultipartUploadXml(r),o={[T]:X,[N]:Buffer.byteLength(i).toString(),[w]:await F(i)},n=y(t),{url:c,headers:a}=await this._sign("POST",n,s,o,i),u=`${c}?${new URLSearchParams(s)}`,f=await(await this._sendRequest(u,"POST",a,i)).text(),g=C(f);if(typeof g=="object"&&g!==null&&"error"in g&&typeof g.error=="object"&&g.error!==null&&"message"in g.error){let E=String(g.error.message);throw this._log("error",`${_}Failed to abort multipart upload: ${E}`),new Error(`${_}Failed to abort multipart upload: ${E}`)}return g.completeMultipartUploadResult}async abortMultipartUpload(t,e){if(this._checkKey(t),typeof e!="string"||e.trim().length===0)throw this._log("error",x),new TypeError(x);this._log("info",`Aborting multipart upload ${e} for object ${t}`);let r={uploadId:e},s={[T]:X,[w]:R};try{let i=y(t),{url:o,headers:n}=await this._sign("DELETE",i,r,s,""),c=`${o}?${new URLSearchParams(r)}`,a=await this._sendRequest(c,"DELETE",n);if(a.ok){let u=await a.text(),f=C(u);if(typeof f=="object"&&f!==null&&"error"in f&&typeof f.error=="object"&&f.error!==null&&"message"in f.error){let g=String(f.error.message);throw this._log("error",`${_}Failed to abort multipart upload: ${g}`),new Error(`${_}Failed to abort multipart upload: ${g}`)}return{status:"Aborted",key:t,uploadId:e,response:f}}else throw this._log("error",`${_}Abort request failed with status ${a.status}`),new Error(`${_}Abort request failed with status ${a.status}`)}catch(i){let o=i instanceof Error?i.message:String(i);throw this._log("error",`${_}Failed to abort multipart upload for key ${t}: ${o}`),new Error(`${_}Failed to abort multipart upload for key ${t}: ${o}`)}}_buildCompleteMultipartUploadXml(t){return` ${t.map(e=>` @@ -11,5 +11,5 @@ var W="AWS4-HMAC-SHA256",j="aws4_request",H="s3",de="2",R="UNSIGNED-PAYLOAD",_e= `).join("")} - `}async delete(t){this._checkKey(t),this._log("info",`Deleting object ${t}`);let e={[O]:I,[w]:R},r=y(t),{url:s,headers:i}=await this._sign("DELETE",r,{},e,""),o=await this._sendRequest(s,"DELETE",i);return o.status===204||o.status===200}async _sendRequest(t,e,r,s,i=[]){this._log("info",`Sending ${e} request to ${t}, headers: ${JSON.stringify(r)}`);let o=await fetch(t,{method:e,headers:r,body:["GET","HEAD"].includes(e)?void 0:s,signal:this.requestAbortTimeout!==void 0?AbortSignal.timeout(this.requestAbortTimeout):void 0});return!o.ok&&!i.includes(o.status)&&await this._handleErrorResponse(o),o}async _handleErrorResponse(t){let e=await t.text(),r=t.headers.get("x-amz-error-code")||"Unknown",s=t.headers.get("x-amz-error-message")||t.statusText;throw this._log("error",`${_}Request failed with status ${t.status}: ${r} - ${s},err body: ${e}`),new Error(`${_}Request failed with status ${t.status}: ${r} - ${s}, err body: ${e}`)}_buildCanonicalQueryString(t){return Object.keys(t).length<1?"":Object.keys(t).sort().map(e=>`${encodeURIComponent(e)}=${encodeURIComponent(t[e])}`).join("&")}async _getSignatureKey(t){let e=await U(`AWS4${this.secretAccessKey}`,t),r=await U(e,this.region),s=await U(r,H);return U(s,j)}},k=async t=>{let e=ae("sha256");return e.update(t),e.digest("hex")},U=async(t,e,r)=>{let s=ie("sha256",t);return s.update(e),s.digest(r)},L=t=>{let e={'"':"",""":"",""":"",""":"",""":""};return t.replace(/^("|"|")|("|"|")$/g,r=>e[r])},x=t=>{let e=o=>o.replace(/"/g,'"').replace(/'/g,"'").replace(/</g,"<").replace(/>/g,">").replace(/&/g,"&"),r={},s=/<(\w)([-\w]+)(?:\/|[^>]*>((?:(?!<\1)[\s\S])*)<\/\1\2)>/gm,i;for(;i=s.exec(t);){let[,o,n,c]=i,a=o.toLowerCase()+n,u=c!=null?x(c):!0;typeof u=="string"?r[a]=L(e(u)):Array.isArray(r[a])?r[a].push(u):r[a]=r[a]!=null?[r[a],u]:Oe[a]?[u]:u}return Object.keys(r).length?r:e(t)};import ce from"avro-js";var l={MISSING_ARGUMENT:"MISSING_ARGUMENT",COLLECTION_EXISTS:"COLLECTION_EXISTS",CREATE_COLLECTION_ERROR:"CREATE_COLLECTION_ERROR",RENAME_COLLECTION_ERROR:"RENAME_COLLECTION_ERROR",REMOVE_COLLECTION_ERROR:"REMOVE_COLLECTION_ERROR",UPDATE_COLLECTION_SCHEMA_ERROR:"UPDATE_COLLECTION_SCHEMA_ERROR",COLLECTION_NOT_FOUND:"COLLECTION_NOT_FOUND",SCHEMA_VALIDATION_ERROR:"SCHEMA_VALIDATION_ERROR",DOCUMENT_VALIDATION_ERROR:"DOCUMENT_VALIDATION_ERROR",S3_OPERATION_ERROR:"S3_OPERATION_ERROR",FIND_ERROR:"FIND_ERROR",FIND_ONE_ERROR:"FIND_ONE_ERROR",SAVE_DATA_ERROR:"SAVE_DATA_ERROR",INSERT_ERROR:"INSERT_ERROR",UPDATE_ERROR:"UPDATE_ERROR",UPDATE_ONE_ERROR:"UPDATE_ONE_ERROR",DELETE_ERROR:"DELETE_ERROR",COUNT_ERROR:"COUNT_ERROR",UNKNOWN_ERROR:"UNKNOWN_ERROR"},d=class extends Error{constructor(e,r=l.UNKNOWN_ERROR){super(`lowstorageError: ${e} :: code: ${r}`),this.name=this.constructor.name,this.code=r,Error.captureStackTrace(this,this.constructor)}},F=class extends d{constructor(e){super(`Collection ${e} not found`,l.COLLECTION_NOT_FOUND)}},$=class extends d{constructor(e){super(e,l.SCHEMA_VALIDATION_ERROR)}},T=class extends d{constructor(e){super(e,l.DOCUMENT_VALIDATION_ERROR)}},p=class extends d{constructor(e,r){super(`S3 ${r} operation failed: ${e}`,l.S3_OPERATION_ERROR)}};import{randomUUID as q}from"node:crypto";var v=(t,e)=>Object.keys(e).every(r=>t[r]===e[r]),ne=async()=>typeof q<"u"&&typeof q=="function"?q():typeof crypto<"u"&&typeof crypto=="object"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(t){var e=Math.random()*16|0,r=t==="x"?e:e&3|8;return r.toString(16)}),le=(t,e="SubAutoGenerated")=>{switch(typeof t){case"string":return Ie(t)?{type:"string",name:"_id",size:16,logicalType:"UUID"}:"string";case"number":return Number.isInteger(t)?"int":"float";case"boolean":return"boolean";case"object":return t===null?"null":Array.isArray(t)?{type:"array",items:le(t[0])}:G(t,e);default:return"string"}},$e=t=>{let e={name:"_id",type:"string",size:16,logicalType:"UUID"};return t.type==="record"?t.fields.some(s=>s.name==="_id")||t.fields.unshift(e):t.type==="array"&&t.items.type==="record"&&(t.items.fields.some(s=>s.name==="_id")||t.items.fields.unshift(e)),t},G=(t,e="AutoGenerated")=>{Array.isArray(t)&&(t=t[0]);let r=Object.entries(t).map(([i,o])=>({name:i,type:le(o,`${e}.${i}`)}));return $e({type:"record",name:e,fields:r})},Ie=t=>/^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i.test(t);var h="lowstorage",A="/",B="lowstorage",N=".avro",Ae=1024*1024,Ne=5*Ae,V=(t=l.DOCUMENT_VALIDATION_ERROR)=>{throw new T(`${h}: Invalid document or schema`,t)},he=class{constructor(e={accessKeyId:void 0,secretAccessKey:void 0,endpoint:void 0,bucketName:void 0,region:"auto",logger:null,dirPrefix:B}){this._checkArgs(e),this._schemas=new Map,this._s3=new oe(e),this._dirPrefix=e.dirPrefix||B,this._avro=ce}_checkArgs=e=>{let r=["accessKeyId","secretAccessKey","endpoint","bucketName"];for(let s of r)if(!e[s])throw new d(`${h}: ${s} is required`,l.MISSING_ARGUMENT)};_hasColName=e=>{if(e.trim()===""||e===null||typeof e>"u")throw new d(`${h}: Collection name is required`,l.MISSING_ARGUMENT)};async listCollections(){try{let e=await this._s3.list(A,this._dirPrefix);return typeof e=="object"&&e!==null&&e.keyCount==="0"?[]:e.map(r=>r.key.slice(this._dirPrefix.length+1,-N.length))}catch(e){throw new p(`${h}: ${e.message}`,l.S3_OPERATION_ERROR)}}async collectionExists(e){try{return this._hasColName(e),await this._s3.fileExists(`${this._dirPrefix}${A}${e}${N}`)}catch(r){if(r.message.includes("Not Found"))return!1;throw new d(`${h}: ${r.message}`,l.COLLECTION_NOT_FOUND)}}async createCollection(e,r,s=[]){try{if(this._hasColName(e),!await this.collectionExists(e))return await this._s3.put(`${this._dirPrefix}${A}${e}${N}`,s.length>0?s:""),this.collection(e,r);throw new d(`${h}: Collection ${e} already exists`,l.COLLECTION_EXISTS)}catch(i){throw i instanceof d?i:new d(`${h}: ${i.message}`,l.CREATE_COLLECTION_ERROR)}}async removeCollection(e){try{this._hasColName(e);let r=`${this._dirPrefix}${A}${e}${N}`;if(await this.collectionExists(e)){await this._s3.delete(r);let i=await this.collectionExists(e);if(typeof i=="boolean"){if(!i)return this._schemas.delete(e),!0;throw new d(`${h}: Failed to delete collection ${e}`,l.S3_OPERATION_ERROR)}throw new p(`${h}: Failed to delete collection ${e}`,l.S3_OPERATION_ERROR)}throw new d(`${h}: Collection ${e} does not exist`,l.REMOVE_COLLECTION_ERROR)}catch(r){throw r instanceof p?r:new d(`${h}: Failed to remove collection: ${r.message}`,l.REMOVE_COLLECTION_ERROR)}}async renameCollection(e,r){try{if(this._hasColName(e),this._hasColName(r),!await this.collectionExists(e))throw new F(`${h}: Collection ${e} does not exist`,l.COLLECTION_NOT_FOUND);let i=await this.collection(e),o=await i._loadData();if(!await this.removeCollection(e))throw new d(`${h}: Failed to rename collection`,l.RENAME_COLLECTION_ERROR);return await this.createCollection(r,i._avroType,o)}catch(s){throw s instanceof d?s:new d(`${h}: Rename collection failed: ${s.message}`,l.RENAME_COLLECTION_ERROR)}}async collection(e,r,s=!0){try{this._hasColName(e);let i=`${this._dirPrefix}${A}${e}${N}`,o;if(!await this._s3.fileExists(i)){if(!s)throw new d(`${h}: Collection ${e} does not exist`,l.COLLECTION_NOT_FOUND);let c=Buffer.from("","utf8");await this._s3.put(i,c)}return r?(o=this._avro.parse(r),this._schemas.set(e,o)):this._schemas.has(e)&&(o=this._schemas.get(e)),new z(e,this._s3,o,this._dirPrefix)}catch(i){throw i.message.includes("unknown type")?new $(`${h}: Schema input is invalid: ${i.message}`,l.SCHEMA_VALIDATION_ERROR):new d(`${h}: ${i.message}`,l.COLLECTION_NOT_FOUND)}}s3=()=>this._s3},z=class{constructor(e,r,s,i=B,o=!1){this._colName=e,this._s3=r,this._avro=ce,this._lastETag="",this._dataCache=[],this._avroType=s,this._dirPrefix=i,this._safeWrite=o}getProps=()=>({colName:this._colName,s3:this._s3,avro:this._avro,avroType:this._avroType,dirPrefix:this._dirPrefix,safeWrite:this._safeWrite});setProps=e=>{this._colName=e.colName,this._s3=e.s3,this._avro=e.avro,this._avroType=e.avroType,this._dirPrefix=e.dirPrefix,this._safeWrite=e.safeWrite};setSafeWrite=e=>{this._safeWrite=e};getSafeWrite=()=>this._safeWrite;getAvroSchema=()=>this._avroType;setAvroSchema=e=>{this._avroType=this._avro.parse(e)};async _loadData(){try{let e=`${this._dirPrefix}${A}${this._colName}${N}`,r=this._s3.getMaxRequestSizeInBytes()||Ne;if(this._avroType===null||typeof this._avroType>"u")throw new d(`${h}: Missing type definition. Configure before operations `,l.SCHEMA_VALIDATION_ERROR);console.log("Getting object:",e,this._lastETag);let{etag:s,data:i}=await this._s3.getObjectWithETag(e,{"if-none-match":this._lastETag});if(console.log("data :::::::::::::::::::::::::",i,s,this._dataCache),i===null)return this._dataCache;this._lastETag=s===null?this._lastETag:s;let o=this._avro.parse({type:"array",items:this._avroType});if(i.length0?o.fromBuffer(i):[],this._dataCache;let n=r,c=[Buffer.from(i,"utf8")],a=!0;for(;a;){let f=await this._s3.getResponse(e,!1,n,n+r),g=await f.text();c.push(Buffer.from(g,"utf8")),n+=r,(f.headers.get("content-length")||g.length)-1)return this._dataCache=[],this._dataCache;throw new p(`${h}: Failed to load data: ${e.message}`,l.S3_OPERATION_ERROR)}}async _saveData(e){try{if(this._avroType===null||typeof this._avroType>"u")throw new d(`${h}: Missing type definition. Configure before operations `,l.SCHEMA_VALIDATION_ERROR);let r=this._avro.parse({type:"array",items:this._avroType}),s=e.length>0?r.toBuffer(e):Buffer.from("","utf8"),i=`${this._dirPrefix}${A}${this._colName}${N}`;if(this._safeWrite&&this._lastETag!==""){let c=await this._s3.getEtag(i);if(c!==null&&c!==this._lastETag)return!1}let o=await this._s3.put(i,s);if(o.status!==200)throw new p(`${h}: Failed to save data`,l.S3_OPERATION_ERROR);let n=o.headers.get("etag");return n&&(this._lastETag=this._s3.sanitizeETag(n),this._dataCache=e),!0}catch(r){throw r instanceof p?r:new d(`${h}: ${r.message}`,l.SAVE_DATA_ERROR)}}async insert(e,r=void 0){try{if(e==null)throw new d(`${h}: Document is required for insert`,l.INSERT_ERROR);if(typeof e!="object"&&!Array.isArray(e))throw new T(`${h}: Document must be an object or an array`,l.DOCUMENT_VALIDATION_ERROR);let s=Array.isArray(e)?e:[e],i=r||this._avroType||G(s[0]),o=this._avro.parse(i);if(!o)throw new $(`${h}: Schema is required - Pass a schema to the insert method`,l.SCHEMA_VALIDATION_ERROR);this._avroType=o;let n=await this._loadData();for(let a of s){if(typeof a!="object"||a===null)throw new T(`${h}: Invalid input: input must be an object or an array of objects`,l.DOCUMENT_VALIDATION_ERROR);if(a._id=a._id||await ne(),this._avroType.isValid(a,{errorHook:V,noUndeclaredFields:!0})===!0)n.push(a);else throw new T(`${h}: Invalid document or schema`,l.DOCUMENT_VALIDATION_ERROR)}if(!await this._saveData(n))throw new p(`${h}: Failed to insert document`,l.S3_OPERATION_ERROR);return s}catch(s){throw s.message.includes("unknown type")?new $(`${h}: Schema input is invalid: ${s.message}`,l.SCHEMA_VALIDATION_ERROR):s instanceof d?s:new d(`${h} Insert operation failed: ${s.message}`,l.INSERT_ERROR)}}async find(e={},r={}){try{if(e==null)throw new d(`${h}: Query is required for update`,l.MISSING_ARGUMENT);let s=await this._loadData(),i=parseInt(r.skip,10)||0,o=parseInt(r.limit,10)?i+parseInt(r.limit,10):void 0;return s.filter(c=>v(c,e)).slice(i,o)}catch(s){throw new d(`${h}: Find operation failed: ${s.message}`,l.FIND_ERROR)}}async findOne(e={}){try{if(e===null)throw new d(`${h}: Query cannot be null`,l.INVALID_ARGUMENT);return(await this.find(e,{limit:1}))[0]||null}catch(r){throw r instanceof d?r:new d(`${h}: FindOne operation failed: ${r.message}`,l.FIND_ONE_ERROR)}}async update(e={},r={},s={}){try{if(e==null||r===void 0||r===null)throw new d(`${h}: Query and update values are required for update`,l.MISSING_ARGUMENT);if(!this._avroType)throw new $(`${h}: Schema is not defined for this collection`,l.SCHEMA_VALIDATION_ERROR);let i=await this._loadData();if(i.length===0)return 0;let o=0;for(let n=0;n0){if(!await this._saveData(i))throw new p(`${h}: Failed to update document`,l.S3_OPERATION_ERROR)}else if(s.upsert){if(!await this.insert(r))throw new p(`${h}: Failed to update document`,l.S3_OPERATION_ERROR);o=1}return o}catch(i){throw i instanceof p?i:new d(`${h}: Update operation failed: ${i.message}`,l.UPDATE_ERROR)}}async updateOne(e={},r={},s={}){try{if(e==null||r===void 0||r===null)throw new d(`${h}: Query is required`,l.MISSING_ARGUMENT);if(!this._avroType)throw new $(`${h}: Schema is not defined for this collection`,l.SCHEMA_VALIDATION_ERROR);let i=await this._loadData();if(i.length===0)return 0;let o=i.findIndex(n=>v(n,e));if(o!==-1){let n={...i[o],...r};if(this._avroType.isValid(n,{errorHook:V,noUndeclaredFields:!0})===!0){if(i[o]=n,!await this._saveData(i))throw new p(`${h}: Failed to update document`,l.S3_OPERATION_ERROR);return 1}else throw new T(`${h}: Invalid document or schema`,l.DOCUMENT_VALIDATION_ERROR)}if(s.upsert){if(!await this.insert(r))throw new p(`${h}: Failed to update document`,l.S3_OPERATION_ERROR);return 1}return 0}catch(i){throw i instanceof d?i:new d(`${h}: UpdateOne operation failed: ${i.message}`,l.UPDATE_ONE_ERROR)}}async delete(e={}){try{if(e==null)throw new d(`${h}: Query is required`,l.MISSING_ARGUMENT);let r=await this._loadData();if(r.length===0)return 0;let s=r.length,i=r.filter(n=>!v(n,e));if(!await this._saveData(i))throw new p(`${h}: Failed to delete document`,l.S3_OPERATION_ERROR);return s-i.length}catch(r){throw r instanceof p?r:new d(`${h}: Delete operation failed: ${r.message}`,l.DELETE_ERROR)}}async deleteAll(){try{let r=(await this._loadData()).length;if(!await this._saveData([]))throw new p(`${h}: Failed to delete document`,l.S3_OPERATION_ERROR);return r}catch(e){throw e instanceof p?e:new d(`${h}: Delete operation failed: ${e.message}`,l.DELETE_ERROR)}}async count(e={}){try{return(await this.find(e)).length}catch(r){throw new d(`${h}: Count operation failed: ${r.message}`,l.COUNT_ERROR)}}};export{he as lowstorage,d as lowstorageError,l as lowstorage_ERROR_CODES}; + `}async delete(t){this._checkKey(t),this._log("info",`Deleting object ${t}`);let e={[T]:b,[w]:R},r=y(t),{url:s,headers:i}=await this._sign("DELETE",r,{},e,""),o=await this._sendRequest(s,"DELETE",i);return o.status===204||o.status===200}async _sendRequest(t,e,r,s,i=[]){this._log("info",`Sending ${e} request to ${t}, headers: ${JSON.stringify(r)}`);let o=await fetch(t,{method:e,headers:r,body:["GET","HEAD"].includes(e)?void 0:s,signal:this.requestAbortTimeout!==void 0?AbortSignal.timeout(this.requestAbortTimeout):void 0});return!o.ok&&!i.includes(o.status)&&await this._handleErrorResponse(o),o}async _handleErrorResponse(t){let e=await t.text(),r=t.headers.get("x-amz-error-code")||"Unknown",s=t.headers.get("x-amz-error-message")||t.statusText;throw this._log("error",`${_}Request failed with status ${t.status}: ${r} - ${s},err body: ${e}`),new Error(`${_}Request failed with status ${t.status}: ${r} - ${s}, err body: ${e}`)}_buildCanonicalQueryString(t){return Object.keys(t).length<1?"":Object.keys(t).sort().map(e=>`${encodeURIComponent(e)}=${encodeURIComponent(t[e])}`).join("&")}async _getSignatureKey(t){let e=await U(`AWS4${this.secretAccessKey}`,t),r=await U(e,this.region),s=await U(r,H);return U(s,j)}},F=async t=>{let e=oe("sha256");return e.update(t),e.digest("hex")},U=async(t,e,r)=>{let s=ae("sha256",t);return s.update(e),s.digest(r)},L=t=>{let e={'"':"",""":"",""":"",""":"",""":""};return t.replace(/^("|"|")|("|"|")$/g,r=>e[r])},C=t=>{let e=o=>o.replace(/"/g,'"').replace(/'/g,"'").replace(/</g,"<").replace(/>/g,">").replace(/&/g,"&"),r={},s=/<(\w)([-\w]+)(?:\/|[^>]*>((?:(?!<\1)[\s\S])*)<\/\1\2)>/gm,i;for(;i=s.exec(t);){let[,o,n,c]=i,a=o.toLowerCase()+n,u=c!=null?C(c):!0;typeof u=="string"?r[a]=L(e(u)):Array.isArray(r[a])?r[a].push(u):r[a]=r[a]!=null?[r[a],u]:$e[a]?[u]:u}return Object.keys(r).length?r:e(t)};import ue from"avro-js";var l={MISSING_ARGUMENT:"MISSING_ARGUMENT",COLLECTION_EXISTS:"COLLECTION_EXISTS",CREATE_COLLECTION_ERROR:"CREATE_COLLECTION_ERROR",RENAME_COLLECTION_ERROR:"RENAME_COLLECTION_ERROR",REMOVE_COLLECTION_ERROR:"REMOVE_COLLECTION_ERROR",UPDATE_COLLECTION_SCHEMA_ERROR:"UPDATE_COLLECTION_SCHEMA_ERROR",COLLECTION_NOT_FOUND:"COLLECTION_NOT_FOUND",SCHEMA_VALIDATION_ERROR:"SCHEMA_VALIDATION_ERROR",DOCUMENT_VALIDATION_ERROR:"DOCUMENT_VALIDATION_ERROR",S3_OPERATION_ERROR:"S3_OPERATION_ERROR",FIND_ERROR:"FIND_ERROR",FIND_ONE_ERROR:"FIND_ONE_ERROR",SAVE_DATA_ERROR:"SAVE_DATA_ERROR",INSERT_ERROR:"INSERT_ERROR",UPDATE_ERROR:"UPDATE_ERROR",UPDATE_ONE_ERROR:"UPDATE_ONE_ERROR",DELETE_ERROR:"DELETE_ERROR",COUNT_ERROR:"COUNT_ERROR",UNKNOWN_ERROR:"UNKNOWN_ERROR"},d=class extends Error{constructor(e,r=l.UNKNOWN_ERROR){super(`lowstorageError: ${e} :: code: ${r}`),this.name=this.constructor.name,this.code=r,Error.captureStackTrace(this,this.constructor)}};var A=class extends d{constructor(e){super(e,l.SCHEMA_VALIDATION_ERROR)}},I=class extends d{constructor(e){super(e,l.DOCUMENT_VALIDATION_ERROR)}},p=class extends d{constructor(e,r){super(`S3 ${r} operation failed: ${e}`,l.S3_OPERATION_ERROR)}};import{randomUUID as q}from"node:crypto";var v=(t,e)=>Object.keys(e).every(r=>t[r]===e[r]),le=async()=>typeof q<"u"&&typeof q=="function"?q():typeof crypto<"u"&&typeof crypto=="object"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(t){var e=Math.random()*16|0,r=t==="x"?e:e&3|8;return r.toString(16)}),he=(t,e="SubAutoGenerated")=>{switch(typeof t){case"string":return Ae(t)?{type:"string",name:"_id",size:16,logicalType:"UUID"}:"string";case"number":return Number.isInteger(t)?"int":"float";case"boolean":return"boolean";case"object":return t===null?"null":Array.isArray(t)?{type:"array",items:he(t[0])}:G(t,e);default:return"string"}},Ie=t=>{let e={name:"_id",type:"string",size:16,logicalType:"UUID"};return t.type==="record"?t.fields.some(s=>s.name==="_id")||t.fields.unshift(e):t.type==="array"&&t.items.type==="record"&&(t.items.fields.some(s=>s.name==="_id")||t.items.fields.unshift(e)),t},G=(t,e="AutoGenerated")=>{Array.isArray(t)&&(t=t[0]);let r=Object.entries(t).map(([i,o])=>({name:i,type:he(o,`${e}.${i}`)}));return Ie({type:"record",name:e,fields:r})},Ae=t=>/^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i.test(t);var h="lowstorage",m="/",B="lowstorage",O=".avro",be=1024*1024,Se=5*be,z=Buffer.from("","utf8"),V=(t=l.DOCUMENT_VALIDATION_ERROR)=>{throw new I(`${h}: Invalid document or schema`,t)},P=t=>{if(t.trim()===""||t===null||typeof t>"u"||t.length>255||t===null)throw new d(`${h}: Collection name is required, null or too long`,l.MISSING_ARGUMENT)},ce=class{constructor(e={accessKeyId:void 0,secretAccessKey:void 0,endpoint:void 0,bucketName:void 0,region:"auto",logger:null,dirPrefix:B}){this._checkArgs(e),this._schemas=new Map,this._s3=new ne(e),this._dirPrefix=e.dirPrefix||B,this._avro=ue}_checkArgs=e=>{let r=["accessKeyId","secretAccessKey","endpoint","bucketName"];for(let s of r)if(!e[s])throw new d(`${h}: ${s} is required`,l.MISSING_ARGUMENT)};async listCollections(){try{let e=await this._s3.list(m,this._dirPrefix);return typeof e=="object"&&e!==null&&e.keyCount==="0"?[]:e.map(r=>r.key.slice(this._dirPrefix.length+1,-O.length))}catch(e){throw new p(`${h}: ${e.message}`,l.S3_OPERATION_ERROR)}}async collectionExists(e){try{P(e);let r=await this._s3.fileExists(`${this._dirPrefix}${m}${e}${O}`);return console.log("collectionExists::2 ",`${this._dirPrefix}${m}${e}${O}`,r),!!r}catch(r){if(r.message.includes("Not Found"))return!1;throw console.log("collectionExists::3 ",e,r),new d(`${h}: ${r.message}`,l.COLLECTION_NOT_FOUND)}}async createCollection(e,r,s=[]){try{if(P(e),!await this.collectionExists(e)){if(s.length>0&&r){let o=this._avro.parse({type:"array",items:r});await this._s3.put(`${this._dirPrefix}${m}${e}${O}`,o.toBuffer(s))}else await this._s3.put(`${this._dirPrefix}${m}${e}${O}`,z);return this.collection(e,r,!1)}throw new d(`${h}: Collection ${e} already exists`,l.COLLECTION_EXISTS)}catch(i){throw i instanceof d?i:new d(`${h}: ${i.message}`,l.CREATE_COLLECTION_ERROR)}}async removeCollection(e){try{P(e);let r=`${this._dirPrefix}${m}${e}${O}`;if(await this.collectionExists(e)){await this._s3.delete(r);let i=await this.collectionExists(e);if(typeof i=="boolean"){if(!i)return this._schemas.delete(e),!0;throw new d(`${h}: Failed to delete collection ${e}`,l.S3_OPERATION_ERROR)}throw new p(`${h}: Failed to delete collection ${e}`,l.S3_OPERATION_ERROR)}throw new d(`${h}: Collection ${e} does not exist`,l.REMOVE_COLLECTION_ERROR)}catch(r){throw r instanceof p?r:new d(`${h}: Failed to remove collection: ${r.message}`,l.REMOVE_COLLECTION_ERROR)}}async collection(e,r,s=!0){try{P(e);let i=`${this._dirPrefix}${m}${e}${O}`;if(!await this._s3.fileExists(i)){if(!s)throw new d(`${h}: Collection ${e} does not exist`,l.COLLECTION_NOT_FOUND);await this._s3.put(i,z)}let n=r||this._schemas.get(e)||void 0;return new W(e,n,this._s3,this._dirPrefix)}catch(i){throw i.message.includes("unknown type")?new A(`${h}: Schema input is invalid: ${i.message}`,l.SCHEMA_VALIDATION_ERROR):new d(`${h}: ${i.message}`,l.COLLECTION_NOT_FOUND)}}s3=()=>this._s3},W=class t{constructor(e,r,s,i=B,o=!1){this._colName=e,this._s3=s,this._avro=ue,this._lastETag="",this._dataCache=[],this._schema=r,this._avroType=typeof r>"u"?null:this._avro.parse(r),this._dirPrefix=i,this._safeWrite=o}getProps=()=>({colName:this._colName,s3:this._s3,avro:this._avro,avroType:this._avroType,dirPrefix:this._dirPrefix,safeWrite:this._safeWrite});setProps=e=>{this._colName=e.colName,this._s3=e.s3,this._avro=e.avro,this._schema=e.schema,this._avroType=e.avroType,this._dirPrefix=e.dirPrefix,this._safeWrite=e.safeWrite};setSafeWrite=e=>{this._safeWrite=e};getSafeWrite=()=>this._safeWrite;getAvroSchema=()=>this._avroType;setAvroSchema=e=>{this._schema=e,this._avroType=typeof e>"u"?null:this._avro.parse(e)};async _loadData(){try{let e=`${this._dirPrefix}${m}${this._colName}${O}`,r=this._s3.getMaxRequestSizeInBytes()||Se;if(this._avroType===null||typeof this._avroType>"u")throw new d(`${h}: Missing type definition. Configure before operations `,l.SCHEMA_VALIDATION_ERROR);console.log("Getting object:",e,this._lastETag);let{etag:s,data:i}=await this._s3.getObjectWithETag(e,{"if-none-match":this._lastETag});if(console.log("data :::::::::::::::::::::::::",i,s,this._dataCache),i===null)return this._dataCache;this._lastETag=s===null?this._lastETag:s;let o=this._avro.parse({type:"array",items:this._avroType});if(i.length0?o.fromBuffer(i):[],this._dataCache;let n=r,c=[Buffer.from(i,"utf8")],a=!0;for(;a;){let f=await this._s3.getResponse(e,!1,n,n+r),g=await f.text();c.push(Buffer.from(g,"utf8")),n+=r,(f.headers.get("content-length")||g.length)-1)return this._dataCache=[],this._dataCache;throw new p(`${h}: Failed to load data: ${e.message}`,l.S3_OPERATION_ERROR)}}async _saveData(e){try{if(this._avroType===null||typeof this._avroType>"u")throw new d(`${h}: Missing type definition. Configure before operations `,l.SCHEMA_VALIDATION_ERROR);let r=this._avro.parse({type:"array",items:this._avroType}),s=e.length>0?r.toBuffer(e):z,i=`${this._dirPrefix}${m}${this._colName}${O}`;if(this._safeWrite&&this._lastETag!==""){let c=await this._s3.getEtag(i);if(c!==null&&c!==this._lastETag)return!1}let o=await this._s3.put(i,s);if(o.status!==200)throw new p(`${h}: Failed to save data`,l.S3_OPERATION_ERROR);let n=o.headers.get("etag");return n&&(this._lastETag=this._s3.sanitizeETag(n),this._dataCache=e),!0}catch(r){throw r instanceof p?r:new d(`${h}: ${r.message}`,l.SAVE_DATA_ERROR)}}async insert(e,r=void 0){try{if(e==null)throw new d(`${h}: Document is required for insert`,l.INSERT_ERROR);if(typeof e!="object"&&!Array.isArray(e))throw new I(`${h}: Document must be an object or an array`,l.DOCUMENT_VALIDATION_ERROR);let s=Array.isArray(e)?e:[e],i=r||this._avroType||G(s[0]),o=this._avro.parse(i);if(!o)throw new A(`${h}: Schema is required - Pass a schema to the insert method`,l.SCHEMA_VALIDATION_ERROR);this._avroType=o;let n=await this._loadData();for(let a of s){if(typeof a!="object"||a===null)throw new I(`${h}: Invalid input: input must be an object or an array of objects`,l.DOCUMENT_VALIDATION_ERROR);if(a._id=a._id||await le(),this._avroType.isValid(a,{errorHook:V,noUndeclaredFields:!0})===!0)n.push(a);else throw new I(`${h}: Invalid document or schema`,l.DOCUMENT_VALIDATION_ERROR)}if(!await this._saveData(n))throw new p(`${h}: Failed to insert document`,l.S3_OPERATION_ERROR);return s}catch(s){throw s.message.includes("unknown type")?new A(`${h}: Schema input is invalid: ${s.message}`,l.SCHEMA_VALIDATION_ERROR):s instanceof d?s:new d(`${h} Insert operation failed: ${s.message}`,l.INSERT_ERROR)}}async find(e={},r={}){try{if(e==null)throw new d(`${h}: Query is required for update`,l.MISSING_ARGUMENT);let s=await this._loadData(),i=parseInt(r.skip,10)||0,o=parseInt(r.limit,10)?i+parseInt(r.limit,10):void 0;return s.filter(c=>v(c,e)).slice(i,o)}catch(s){throw new d(`${h}: Find operation failed: ${s.message}`,l.FIND_ERROR)}}async findOne(e={}){try{if(e===null)throw new d(`${h}: Query cannot be null`,l.INVALID_ARGUMENT);return(await this.find(e,{limit:1}))[0]||null}catch(r){throw r instanceof d?r:new d(`${h}: FindOne operation failed: ${r.message}`,l.FIND_ONE_ERROR)}}async update(e={},r={},s={}){try{if(e==null||r===void 0||r===null)throw new d(`${h}: Query and update values are required for update`,l.MISSING_ARGUMENT);if(!this._avroType)throw new A(`${h}: Schema is not defined for this collection`,l.SCHEMA_VALIDATION_ERROR);let i=await this._loadData();if(i.length===0)return 0;let o=0;for(let n=0;n0){if(!await this._saveData(i))throw new p(`${h}: Failed to update document`,l.S3_OPERATION_ERROR)}else if(s.upsert){if(!await this.insert(r))throw new p(`${h}: Failed to update document`,l.S3_OPERATION_ERROR);o=1}return o}catch(i){throw i instanceof p?i:new d(`${h}: Update operation failed: ${i.message}`,l.UPDATE_ERROR)}}async updateOne(e={},r={},s={}){try{if(e==null||r===void 0||r===null)throw new d(`${h}: Query is required`,l.MISSING_ARGUMENT);if(!this._avroType)throw new A(`${h}: Schema is not defined for this collection`,l.SCHEMA_VALIDATION_ERROR);let i=await this._loadData();if(i.length===0)return 0;let o=i.findIndex(n=>v(n,e));if(o!==-1){let n={...i[o],...r};if(this._avroType.isValid(n,{errorHook:V,noUndeclaredFields:!0})===!0){if(i[o]=n,!await this._saveData(i))throw new p(`${h}: Failed to update document`,l.S3_OPERATION_ERROR);return 1}else throw new I(`${h}: Invalid document or schema`,l.DOCUMENT_VALIDATION_ERROR)}if(s.upsert){if(!await this.insert(r))throw new p(`${h}: Failed to update document`,l.S3_OPERATION_ERROR);return 1}return 0}catch(i){throw i instanceof d?i:new d(`${h}: UpdateOne operation failed: ${i.message}`,l.UPDATE_ONE_ERROR)}}async delete(e={}){try{if(e==null)throw new d(`${h}: Query is required`,l.MISSING_ARGUMENT);let r=await this._loadData();if(r.length===0)return 0;let s=r.length,i=r.filter(n=>!v(n,e));if(!await this._saveData(i))throw new p(`${h}: Failed to delete document`,l.S3_OPERATION_ERROR);return s-i.length}catch(r){throw r instanceof p?r:new d(`${h}: Delete operation failed: ${r.message}`,l.DELETE_ERROR)}}async deleteAll(){try{let r=(await this._loadData()).length;if(!await this._saveData([]))throw new p(`${h}: Failed to delete document`,l.S3_OPERATION_ERROR);return r}catch(e){throw e instanceof p?e:new d(`${h}: Delete operation failed: ${e.message}`,l.DELETE_ERROR)}}async count(e={}){try{return(await this.find(e)).length}catch(r){throw new d(`${h}: Count operation failed: ${r.message}`,l.COUNT_ERROR)}}async renameCollection(e,r=this._schema){try{if(P(e),await this._s3.fileExists(`${this._dirPrefix}${m}${e}${O}`))throw new d(`${h}: Collection ${e} already exists`,l.COLLECTION_EXISTS);let i=r||this.getAvroSchema(),o=await this._loadData(),n=new t(e,i,this._s3,this._dirPrefix);return await n._saveData(o),await this._s3.delete(`${this._dirPrefix}${m}${this._colName}${O}`),n}catch(s){throw s instanceof d?s:new d(`${h}: Rename collection failed: ${s.message}`,l.RENAME_COLLECTION_ERROR)}}};export{ce as lowstorage,d as lowstorageError,l as lowstorage_ERROR_CODES}; //# sourceMappingURL=lowstorage.js.map diff --git a/lib/lowstorage.js.map b/lib/lowstorage.js.map index bad45c2..14fb0a2 100644 --- a/lib/lowstorage.js.map +++ b/lib/lowstorage.js.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["../node_modules/ultralight-s3/src/index.ts", "../src/lowstorage.js", "../src/errors.js", "../src/helpers.js"], - "sourcesContent": ["'use strict';\n\n// Constants\nconst AWS_ALGORITHM = 'AWS4-HMAC-SHA256';\nconst AWS_REQUEST_TYPE = 'aws4_request';\nconst S3_SERVICE = 's3';\nconst LIST_TYPE = '2';\nconst UNSIGNED_PAYLOAD = 'UNSIGNED-PAYLOAD';\nconst DEFAULT_STREAM_CONTENT_TYPE = 'application/octet-stream';\nconst XML_CONTENT_TYPE = 'application/xml';\nconst JSON_CONTENT_TYPE = 'application/json';\n// List of keys that might contain sensitive information\nconst SENSITIVE_KEYS_REDACTED = ['accessKeyId', 'secretAccessKey', 'sessionToken', 'password'];\nconst MIN_MAX_REQUEST_SIZE_IN_BYTES = 5 * 1024 * 1024;\n\n// Headers\nconst HEADER_AMZ_CONTENT_SHA256 = 'x-amz-content-sha256';\nconst HEADER_AMZ_DATE = 'x-amz-date';\nconst HEADER_HOST = 'host';\nconst HEADER_AUTHORIZATION = 'Authorization';\nconst HEADER_CONTENT_TYPE = 'Content-Type';\nconst HEADER_CONTENT_LENGTH = 'Content-Length';\nconst HEADER_ETAG = 'etag';\nconst HEADER_LAST_MODIFIED = 'last-modified';\n\n// Error messages\nconst ERROR_PREFIX = 'ultralight-s3 Module: ';\nconst ERROR_ACCESS_KEY_REQUIRED = `${ERROR_PREFIX}accessKeyId must be a non-empty string`;\nconst ERROR_SECRET_KEY_REQUIRED = `${ERROR_PREFIX}secretAccessKey must be a non-empty string`;\nconst ERROR_ENDPOINT_REQUIRED = `${ERROR_PREFIX}endpoint must be a non-empty string`;\nconst ERROR_BUCKET_NAME_REQUIRED = `${ERROR_PREFIX}bucketName must be a non-empty string`;\nconst ERROR_KEY_REQUIRED = `${ERROR_PREFIX}key must be a non-empty string`;\nconst ERROR_UPLOAD_ID_REQUIRED = `${ERROR_PREFIX}uploadId must be a non-empty string`;\nconst ERROR_PARTS_REQUIRED = `${ERROR_PREFIX}parts must be a non-empty array`;\nconst ERROR_INVALID_PART = `${ERROR_PREFIX}Each part must have a partNumber (number) and ETag (string)`;\nconst ERROR_DATA_BUFFER_REQUIRED = `${ERROR_PREFIX}data must be a Buffer or string`;\n// const ERROR_PATH_REQUIRED = `${ERROR_PREFIX}path must be a string`;\nconst ERROR_PREFIX_TYPE = `${ERROR_PREFIX}prefix must be a string`;\nconst ERROR_MAX_KEYS_TYPE = `${ERROR_PREFIX}maxKeys must be a positive integer`;\nconst ERROR_DELIMITER_REQUIRED = `${ERROR_PREFIX}delimiter must be a string`;\n\n// const STATUS_CODES: Record = {\n// 200: 'OK',\n// 204: 'No Content',\n// 205: 'Reset Content',\n// 206: 'Partial Content',\n// 301: 'Moved Permanently',\n// 302: 'Found',\n// 400: 'Bad Request',\n// 401: 'Unauthorized',\n// 403: 'Forbidden',\n// 404: 'Not Found',\n// 418: \"I'm a Teapot\",\n// 428: 'Precondition Required',\n// 429: 'Too Many Requests',\n// 500: 'Internal Server Error',\n// 501: 'Not Implemented',\n// };\n\ninterface S3Config {\n accessKeyId: string;\n secretAccessKey: string;\n endpoint: string;\n bucketName: string;\n region?: string;\n maxRequestSizeInBytes?: number;\n requestAbortTimeout?: number;\n logger?: Logger;\n}\n\ndeclare global {\n interface Crypto {\n createHmac: (\n algorithm: string,\n key: string | Buffer,\n ) => {\n update: (data: string | Buffer) => void;\n digest: (encoding?: 'hex' | 'base64' | 'latin1') => string;\n };\n createHash: (algorithm: string) => {\n update: (data: string | Buffer) => void;\n digest: (encoding?: 'hex' | 'base64' | 'latin1') => string;\n };\n }\n}\n\ninterface Logger {\n info: (message: string, ...args: any[]) => void;\n warn: (message: string, ...args: any[]) => void;\n error: (message: string, ...args: any[]) => void;\n}\n\ninterface UploadPart {\n partNumber: number;\n ETag: string;\n}\n\ninterface CompleteMultipartUploadResult {\n Location: string;\n Bucket: string;\n Key: string;\n ETag: string;\n}\n\ntype HttpMethod = 'POST' | 'GET' | 'HEAD' | 'PUT' | 'DELETE';\n\n// false - Not found (404)\n// true - Found (200)\n// null - ETag mismatch (412)\ntype ExistResponseCode = false | true | null;\n\nlet _createHmac = crypto.createHmac || (await import('node:crypto')).createHmac;\nlet _createHash = crypto.createHash || (await import('node:crypto')).createHash;\n\nif (typeof _createHmac === 'undefined' && typeof _createHash === 'undefined') {\n console.error(\n 'ultralight-S3 Module: Crypto functions are not available, please report the issue with necessary description: https://github.com/sentienhq/ultralight-s3/issues',\n );\n}\n\nconst expectArray: { [key: string]: boolean } = {\n contents: true,\n};\n\nconst encodeAsHex = (c: string): string => `%${c.charCodeAt(0).toString(16).toUpperCase()}`;\n\nconst uriEscape = (uriStr: string): string => {\n return encodeURIComponent(uriStr).replace(/[!'()*]/g, encodeAsHex);\n};\n\nconst uriResourceEscape = (string: string): string => {\n return uriEscape(string).replace(/%2F/g, '/');\n};\n\n/**\n * S3 class for interacting with S3-compatible object storage services.\n * This class provides methods for common S3 operations such as uploading, downloading,\n * and deleting objects, as well as multipart uploads.\n *\n * @class\n * @example\n * const s3 = new S3({\n * accessKeyId: 'your-access-key',\n * secretAccessKey: 'your-secret-key',\n * endpoint: 'https://your-s3-endpoint.com',\n * bucketName: 'your-bucket-name',\n * region: 'us-east-1' // by default is auto\n * });\n *\n * // Upload a file\n * await s3.put('example.txt', 'Hello, World!');\n *\n * // Download a file\n * const content = await s3.get('example.txt');\n *\n * // Delete a file\n * await s3.delete('example.txt');\n */\nclass S3 {\n /**\n * Creates an instance of the S3 class.\n *\n * @constructor\n * @param {Object} config - Configuration options for the S3 instance.\n * @param {string} config.accessKeyId - The access key ID for authentication.\n * @param {string} config.secretAccessKey - The secret access key for authentication.\n * @param {string} config.endpoint - The endpoint URL of the S3-compatible service.\n * @param {string} [config.bucketName=''] - The name of the bucket to operate on.\n * @param {string} [config.region='auto'] - The region of the S3 service.\n * @param {number} [config.maxRequestSizeInBytes=5242880] - The maximum size of a single request in bytes (minimum for AWS S3 is 5MB).\n * @param {number} [config.requestAbortTimeout=undefined] - The timeout in milliseconds after which a request should be aborted (careful on streamed requests).\n * @param {Object} [config.logger=null] - A logger object with methods like info, warn, error.\n * @throws {TypeError} Will throw an error if required parameters are missing or of incorrect type.\n */\n private accessKeyId: string;\n private secretAccessKey: string;\n private endpoint: string;\n private bucketName: string;\n private region: string;\n private maxRequestSizeInBytes: number;\n private requestAbortTimeout?: number;\n private logger?: Logger;\n\n constructor({\n accessKeyId,\n secretAccessKey,\n endpoint,\n bucketName,\n region = 'auto',\n maxRequestSizeInBytes = MIN_MAX_REQUEST_SIZE_IN_BYTES,\n requestAbortTimeout = undefined,\n logger = undefined,\n }: S3Config) {\n this._validateConstructorParams(accessKeyId, secretAccessKey, endpoint, bucketName);\n this.accessKeyId = accessKeyId;\n this.secretAccessKey = secretAccessKey;\n this.endpoint = endpoint;\n this.bucketName = bucketName;\n this.region = region;\n this.maxRequestSizeInBytes = maxRequestSizeInBytes;\n this.requestAbortTimeout = requestAbortTimeout;\n this.logger = logger;\n }\n\n private _validateConstructorParams(\n accessKeyId: string,\n secretAccessKey: string,\n endpoint: string,\n bucketName: string,\n ): void {\n if (typeof accessKeyId !== 'string' || accessKeyId.trim().length === 0)\n throw new TypeError(ERROR_ACCESS_KEY_REQUIRED);\n if (typeof secretAccessKey !== 'string' || secretAccessKey.trim().length === 0)\n throw new TypeError(ERROR_SECRET_KEY_REQUIRED);\n if (typeof endpoint !== 'string' || endpoint.trim().length === 0) throw new TypeError(ERROR_ENDPOINT_REQUIRED);\n if (typeof bucketName !== 'string' || bucketName.trim().length === 0)\n throw new TypeError(ERROR_BUCKET_NAME_REQUIRED);\n }\n\n private _checkMethodHeadnGet(method: string): void {\n if (method !== 'GET' && method !== 'HEAD') {\n this._log('error', `${ERROR_PREFIX}method must be either GET or HEAD`);\n throw new Error('method must be either GET or HEAD');\n }\n }\n\n private _checkKey(key: string): void {\n if (typeof key !== 'string' || key.trim().length === 0) {\n this._log('error', ERROR_KEY_REQUIRED);\n throw new TypeError(ERROR_KEY_REQUIRED);\n }\n }\n\n private _checkDelimiter(delimiter: string): void {\n if (typeof delimiter !== 'string' || delimiter.trim().length === 0) {\n this._log('error', ERROR_DELIMITER_REQUIRED);\n throw new TypeError(ERROR_DELIMITER_REQUIRED);\n }\n }\n\n private _checkPrefix(prefix: string): void {\n if (typeof prefix !== 'string') {\n this._log('error', ERROR_PREFIX_TYPE);\n throw new TypeError(ERROR_PREFIX_TYPE);\n }\n }\n\n private _checkMaxKeys(maxKeys: number): void {\n if (typeof maxKeys !== 'number' || maxKeys <= 0) {\n this._log('error', ERROR_MAX_KEYS_TYPE);\n throw new TypeError(ERROR_MAX_KEYS_TYPE);\n }\n }\n\n private _checkOpts(opts: Record): void {\n if (typeof opts !== 'object') {\n this._log('error', `${ERROR_PREFIX}opts must be an object`);\n throw new TypeError(`${ERROR_PREFIX}opts must be an object`);\n }\n }\n\n /**\n * Internal method to log messages with sanitized sensitive information.\n * @param {string} level - The log level (e.g., 'info', 'warn', 'error').\n * @param {string} message - The message to log.\n * @param {Object} [additionalData={}] - Additional data to include in the log.\n * @private\n */\n private _log(\n level: 'info' | 'warn' | 'error',\n message: string,\n additionalData: Record | string = {},\n ): void {\n if (this.logger && typeof this.logger[level] === 'function') {\n // Function to recursively sanitize an object\n const sanitize = (obj: any): any => {\n if (typeof obj !== 'object' || obj === null) {\n return obj;\n }\n return Object.keys(obj).reduce(\n (acc: any, key) => {\n if (SENSITIVE_KEYS_REDACTED.includes(key.toLowerCase())) {\n acc[key] = '[REDACTED]';\n } else if (typeof obj[key] === 'object' && obj[key] !== null) {\n acc[key] = sanitize(obj[key]);\n } else {\n acc[key] = obj[key];\n }\n return acc;\n },\n Array.isArray(obj) ? [] : {},\n );\n };\n\n // Sanitize the additional data\n const sanitizedData = sanitize(additionalData);\n // Prepare the log entry\n const logEntry = {\n timestamp: new Date().toISOString(),\n level,\n message,\n ...sanitizedData,\n // Include some general context, but sanitize sensitive parts\n context: sanitize({\n bucketName: this.bucketName,\n region: this.region,\n endpoint: this.endpoint,\n // Only include the first few characters of the access key, if it exists\n accessKeyId: this.accessKeyId ? `${this.accessKeyId.substring(0, 4)}...` : undefined,\n }),\n };\n\n // Log the sanitized entry\n this.logger[level](logEntry);\n }\n }\n\n getBucketName = () => this.bucketName;\n setBucketName = (bucketName: string) => {\n this.bucketName = bucketName;\n };\n getRegion = () => this.region;\n setRegion = (region: string) => {\n this.region = region;\n };\n getEndpoint = () => this.endpoint;\n setEndpoint = (endpoint: string) => {\n this.endpoint = endpoint;\n };\n getMaxRequestSizeInBytes = () => this.maxRequestSizeInBytes;\n setMaxRequestSizeInBytes = (maxRequestSizeInBytes: number) => {\n this.maxRequestSizeInBytes = maxRequestSizeInBytes;\n };\n sanitizeETag = (etag: string): string => sanitizeETag(etag);\n\n getProps = () => ({\n accessKeyId: this.accessKeyId,\n secretAccessKey: this.secretAccessKey,\n region: this.region,\n bucket: this.bucketName,\n endpoint: this.endpoint,\n maxRequestSizeInBytes: this.maxRequestSizeInBytes,\n requestAbortTimeout: this.requestAbortTimeout,\n logger: this.logger,\n });\n setProps = (props: S3Config) => {\n this._validateConstructorParams(props.accessKeyId, props.secretAccessKey, props.bucketName, props.endpoint);\n this.accessKeyId = props.accessKeyId;\n this.secretAccessKey = props.secretAccessKey;\n this.region = props.region || 'auto';\n this.bucketName = props.bucketName;\n this.endpoint = props.endpoint;\n this.maxRequestSizeInBytes = props.maxRequestSizeInBytes || MIN_MAX_REQUEST_SIZE_IN_BYTES;\n this.requestAbortTimeout = props.requestAbortTimeout;\n this.logger = props.logger;\n };\n\n /**\n * Get the content length of an object.\n * @param {string} key - The key of the object.\n * @returns {Promise} The content length of the object in bytes.\n * @throws {TypeError} If the key is not a non-empty string.\n */\n async getContentLength(key: string): Promise {\n this._checkKey(key);\n const headers = {\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('HEAD', encodedKey, {}, headers, '');\n const res = await this._sendRequest(url, 'HEAD', signedHeaders);\n const contentLength = res.headers.get(HEADER_CONTENT_LENGTH);\n return contentLength ? parseInt(contentLength, 10) : 0;\n }\n\n /**\n * Check if a bucket exists.\n * @returns {Promise} True if the bucket exists, false otherwise.\n */\n async bucketExists(): Promise {\n const headers = {\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n const { url, headers: signedHeaders } = await this._sign('HEAD', '', {}, headers, '');\n const res = await this._sendRequest(url, 'HEAD', signedHeaders);\n if (res.ok && res.status === 200) {\n return true;\n }\n return false;\n }\n\n // TBD\n // async createBucket(bucketName) {\n // const xmlBody = `\n // \n // \n // ${this.region}\n // \n // `;\n // const headers = {\n // [HEADER_CONTENT_TYPE]: XML_CONTENT_TYPE,\n // [HEADER_CONTENT_LENGTH]: Buffer.byteLength(xmlBody).toString(),\n // [HEADER_AMZ_CONTENT_SHA256]: await _hash(xmlBody),\n // };\n // const encodedKey = encodeURI(bucketName);\n // const { url, headers: signedHeaders } = await this._sign('PUT', encodedKey, {}, headers, '');\n // const res = await this._sendRequest(url, 'PUT', signedHeaders);\n // if (res.ok && res.status === 200) {\n // return true;\n // }\n // return false;\n // }\n\n /**\n * Check if a file exists in the bucket.\n * @param {string} key - The key of the object.\n * @param {Object} [opts={}] - Additional options for the fileExists operation.\n * @returns {Promise} True if the file exists, false otherwise. 0 - Not found (404), 1 - Found (200), 2 - ETag mismatch (412).\n * @throws {TypeError} If the key is not a non-empty string.\n */\n async fileExists(key: string, opts: Record = {}): Promise {\n this._checkKey(key);\n const { filteredOpts, conditionalHeaders } = this._filterIfHeaders(opts);\n const headers = { [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD, ...conditionalHeaders };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('HEAD', encodedKey, filteredOpts, headers, '');\n try {\n const res = await this._sendRequest(url, 'HEAD', signedHeaders, '', [200, 404, 412, 304]);\n if (res.status === 404) {\n return false;\n }\n if (res.status === 412 || res.status === 304) {\n return null;\n }\n if (res.ok && res.status === 200) return true;\n else this._handleErrorResponse(res);\n return false; // should never happen\n } catch (error: unknown) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n this._log('error', `${ERROR_PREFIX}Failed to check if file exists: ${errorMessage}`);\n throw new Error(`${ERROR_PREFIX}Failed to check if file exists: ${errorMessage}`);\n }\n }\n private async _sign(\n method: HttpMethod,\n keyPath: string,\n query: Object,\n headers: Record,\n body: string | Buffer,\n ): Promise<{ url: string; headers: Record }> {\n const datetime = new Date().toISOString().replace(/[:-]|\\.\\d{3}/g, '');\n const url =\n typeof keyPath === 'string' && keyPath.length > 0 ? new URL(keyPath, this.endpoint) : new URL(this.endpoint);\n url.pathname = `/${encodeURI(this.bucketName)}${url.pathname}`;\n headers[HEADER_AMZ_CONTENT_SHA256] = body ? await _hash(body) : UNSIGNED_PAYLOAD;\n headers[HEADER_AMZ_DATE] = datetime;\n headers[HEADER_HOST] = url.host;\n const canonicalHeaders = this._buildCanonicalHeaders(headers);\n const signedHeaders = Object.keys(headers)\n .map(key => key.toLowerCase())\n .sort()\n .join(';');\n\n const canonicalRequest = await this._buildCanonicalRequest(\n method,\n url,\n query,\n canonicalHeaders,\n signedHeaders,\n body,\n );\n const stringToSign = await this._buildStringToSign(datetime, canonicalRequest);\n const signature = await this._calculateSignature(datetime, stringToSign);\n const authorizationHeader = this._buildAuthorizationHeader(datetime, signedHeaders, signature);\n headers[HEADER_AUTHORIZATION] = authorizationHeader;\n return { url: url.toString(), headers };\n }\n\n private _buildCanonicalHeaders(headers: Record): string {\n return Object.entries(headers)\n .map(([key, value]) => `${key.toLowerCase()}:${String(value).trim()}`)\n .sort()\n .join('\\n');\n }\n\n async _buildCanonicalRequest(\n method: HttpMethod,\n url: URL,\n query: Object,\n canonicalHeaders: string,\n signedHeaders: string,\n body: string | Buffer,\n ): Promise {\n return [\n method,\n url.pathname,\n this._buildCanonicalQueryString(query),\n `${canonicalHeaders}\\n`,\n signedHeaders,\n body ? await _hash(body) : UNSIGNED_PAYLOAD,\n ].join('\\n');\n }\n\n async _buildStringToSign(datetime: string, canonicalRequest: string): Promise {\n const credentialScope = [datetime.slice(0, 8), this.region, S3_SERVICE, AWS_REQUEST_TYPE].join('/');\n return [AWS_ALGORITHM, datetime, credentialScope, await _hash(canonicalRequest)].join('\\n');\n }\n\n async _calculateSignature(datetime: string, stringToSign: string): Promise {\n const signingKey = await this._getSignatureKey(datetime.slice(0, 8));\n return _hmac(signingKey, stringToSign, 'hex');\n }\n\n private _buildAuthorizationHeader(datetime: string, signedHeaders: string, signature: string): string {\n const credentialScope = [datetime.slice(0, 8), this.region, S3_SERVICE, AWS_REQUEST_TYPE].join('/');\n return [\n `${AWS_ALGORITHM} Credential=${this.accessKeyId}/${credentialScope}`,\n `SignedHeaders=${signedHeaders}`,\n `Signature=${signature}`,\n ].join(', ');\n }\n\n private _filterIfHeaders(opts: Record): {\n filteredOpts: Record;\n conditionalHeaders: Record;\n } {\n const filteredOpts: Record = {};\n const conditionalHeaders: Record = {};\n const ifHeaders = ['if-match', 'if-none-match', 'if-modified-since', 'if-unmodified-since'];\n\n for (const [key, value] of Object.entries(opts)) {\n if (ifHeaders.includes(key)) {\n conditionalHeaders[key] = value;\n } else {\n filteredOpts[key] = value;\n }\n }\n\n return { filteredOpts, conditionalHeaders };\n }\n /**\n * List objects in the bucket.\n * @param {string} [delimiter='/'] - The delimiter to use for grouping objects in specific path.\n * @param {string} [prefix=''] - The prefix to filter objects in specific path.\n * @param {number} [maxKeys=1000] - The maximum number of keys to return.\n * @param {string} [method='GET'] - The HTTP method to use (GET or HEAD).\n * @param {Object} [opts={}] - Additional options for the list operation.\n * @returns {Promise} The list of objects or object metadata.\n * @throws {TypeError} If any of the parameters are of incorrect type.\n */\n async list(\n delimiter: string = '/',\n prefix: string = '',\n maxKeys: number = 1000,\n method: HttpMethod = 'GET',\n opts: Object = {},\n ): Promise> {\n this._checkDelimiter(delimiter);\n this._checkPrefix(prefix);\n this._checkMaxKeys(maxKeys);\n this._checkMethodHeadnGet(method);\n this._checkOpts(opts);\n this._log('info', `Listing objects in ${prefix}`);\n\n const query = {\n 'list-type': LIST_TYPE,\n 'max-keys': String(maxKeys),\n ...opts,\n } as { [key: string]: any };\n if (prefix.length > 0) {\n query['prefix'] = prefix;\n }\n const headers = {\n [HEADER_CONTENT_TYPE]: JSON_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n const encodedKey = delimiter === '/' ? delimiter : uriEscape(delimiter);\n const { url, headers: signedHeaders } = await this._sign('GET', encodedKey, query, headers, '');\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n const res = await this._sendRequest(urlWithQuery, 'GET', signedHeaders);\n const responseBody = await res.text();\n\n if (method === 'HEAD') {\n const contentLength = res.headers.get(HEADER_CONTENT_LENGTH);\n const lastModified = res.headers.get(HEADER_LAST_MODIFIED);\n const etag = res.headers.get(HEADER_ETAG);\n\n return {\n size: contentLength ? +contentLength : undefined,\n mtime: lastModified ? new Date(lastModified) : undefined,\n ETag: etag || undefined,\n };\n }\n\n const data = _parseXml(responseBody);\n const output = data.listBucketResult || data.error || data;\n return output.contents || output;\n }\n\n /**\n * List multipart uploads in the bucket.\n * @param {string} [delimiter='/'] - The delimiter to use for grouping objects in specific path.\n * @param {string} [prefix=''] - The prefix to filter objects in specific path.\n * @param {string} [method='GET'] - The HTTP method to use (GET or HEAD).\n * @param {Object} [opts={}] - Additional options for the list operation.\n * @returns {Promise} The list of objects or object metadata.\n * @throws {TypeError} If any of the parameters are of incorrect type.\n */\n async listMultiPartUploads(\n delimiter: string = '/',\n prefix: string = '',\n method: HttpMethod = 'GET',\n opts: Object = {},\n ): Promise {\n this._checkDelimiter(delimiter);\n this._checkPrefix(prefix);\n this._checkMethodHeadnGet(method);\n this._checkOpts(opts);\n this._log('info', `Listing multipart uploads in ${prefix}`);\n\n const query = {\n uploads: '',\n ...opts,\n } as Record;\n const headers = {\n [HEADER_CONTENT_TYPE]: JSON_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n const encodedKey = delimiter === '/' ? delimiter : uriEscape(delimiter);\n const { url, headers: signedHeaders } = await this._sign('GET', encodedKey, query, headers, '');\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n const res = await this._sendRequest(urlWithQuery, 'GET', signedHeaders);\n const responseBody = await res.text();\n\n if (method === 'HEAD') {\n return {\n size: +(res.headers.get(HEADER_CONTENT_LENGTH) ?? '0'),\n mtime: new Date(res.headers.get(HEADER_LAST_MODIFIED) ?? ''),\n ETag: res.headers.get(HEADER_ETAG) ?? '',\n };\n }\n\n const data = _parseXml(responseBody);\n const output = data.listMultipartUploadsResult || data.error || data;\n return output.uploads || output;\n }\n\n /**\n * Get an object from the bucket.\n * @param {string} key - The key of the object to get.\n * @param {Object} [opts={}] - Additional options for the get operation.\n * @returns {Promise} The content of the object. If the object does not exist, null will be returned.\n */\n async get(key: string, opts: Record = {}): Promise {\n this._checkKey(key);\n this._log('info', `Getting object ${key}`);\n const { filteredOpts, conditionalHeaders } = this._filterIfHeaders(opts);\n const headers = {\n [HEADER_CONTENT_TYPE]: JSON_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n ...conditionalHeaders,\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('GET', encodedKey, filteredOpts, headers, '');\n const res = await this._sendRequest(url, 'GET', signedHeaders, '', [200, 404, 412, 304]);\n if (res.status === 404 || res.status === 412 || res.status === 304) {\n this._log('error', `Failed to get object. Status: ${res.status}`);\n return null;\n }\n if (!res.ok) {\n this._log('error', `Failed to get object. Status: ${res.status}`);\n throw new Error(`Failed to get object. Status: ${res.status}`);\n }\n return res.text();\n }\n\n /**\n *\n * @param {string} key - The key of the object to get.\n * @param {Object} [opts={}] - Additional options for the get operation.\n * @returns {Promise<{ etag: string|null; data: string|null }>} The content of the object. If the object does not exist, etag and data will be null.\n */\n async getObjectWithETag(\n key: string,\n opts: Record = {},\n ): Promise<{ etag: string | null; data: string | null }> {\n this._checkKey(key);\n this._log('info', `Getting object ${key}`);\n const { filteredOpts, conditionalHeaders } = this._filterIfHeaders(opts);\n const headers = {\n [HEADER_CONTENT_TYPE]: JSON_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n ...conditionalHeaders,\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('GET', encodedKey, filteredOpts, headers, '');\n try {\n const res = await this._sendRequest(url, 'GET', signedHeaders, '', [200, 404, 412, 304]);\n if (res.status === 404 || res.status === 412 || res.status === 304) {\n this._log('error', `Failed to get object. Status: ${res.status}`);\n return { etag: null, data: null };\n }\n if (!res.ok) {\n this._log('error', `Failed to get object. Status: ${res.status}`);\n throw new Error(`Failed to get object. Status: ${res.status}`);\n }\n\n const etag = res.headers.get('etag');\n if (!etag) {\n throw new Error('ETag not found in response headers');\n }\n const data = await res.text();\n return { etag: sanitizeETag(etag), data };\n } catch (error) {\n this._log('error', `Error getting object ${key} with ETag: ${error}`);\n throw error;\n }\n }\n\n /**\n * Get the ETag of an object.\n * @param {string} key - The key of the object to get.\n * @param {Object} [opts={}] - Additional options for the get operation.\n * @returns {Promise} The ETag of the object or null if the object etag does not match.\n */\n async getEtag(key: string, opts: Record = {}): Promise {\n this._checkKey(key);\n this._log('info', `Getting etag object ${key}`);\n const { filteredOpts, conditionalHeaders } = this._filterIfHeaders(opts);\n const headers = {\n [HEADER_CONTENT_TYPE]: JSON_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n ...conditionalHeaders,\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('HEAD', encodedKey, filteredOpts, headers, '');\n\n const res = await this._sendRequest(url, 'HEAD', signedHeaders, '', [200, 412, 304]);\n this._log('info', `Response status: ${(res.status, res.statusText)}`);\n // etag does not match\n if (res.status === 412 || res.status === 304) {\n return null;\n }\n\n const etag = res.headers.get('etag');\n if (!etag) {\n this._log('error', `ETag not found in response headers`);\n throw new Error(`ETag not found in response headers`);\n }\n return sanitizeETag(etag);\n }\n\n /**\n * Get a response of an object from the bucket.\n * @param {string} key - The key of the object to get.\n * @param {boolean} [wholeFile=true] - Whether to get the whole file or a part.\n * @param {number} [rangeFrom=0] - The range from to get if not getting the whole file.\n * @param {number} [rangeTo=this.maxRequestSizeInBytes] - The range to to get if not getting the whole file. Note: rangeTo is inclusive.\n * @param {Object} [opts={}] - Additional options for the get operation.\n * @returns {Promise} Response of the object content. Use readableStream() to get the stream from .body.\n */\n async getResponse(\n key: string,\n wholeFile: boolean = true,\n rangeFrom: number = 0,\n rangeTo: number = this.maxRequestSizeInBytes,\n opts: Record = {},\n ): Promise {\n this._checkKey(key);\n const { filteredOpts, conditionalHeaders } = this._filterIfHeaders({ ...opts });\n const headers = {\n [HEADER_CONTENT_TYPE]: JSON_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n ...(wholeFile ? {} : { range: `bytes=${rangeFrom}-${rangeTo - 1}` }),\n ...conditionalHeaders,\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('GET', encodedKey, filteredOpts, headers, '');\n const urlWithQuery = `${url}?${new URLSearchParams(filteredOpts)}`;\n\n return this._sendRequest(urlWithQuery, 'GET', signedHeaders);\n }\n\n /**\n * Put an object into the bucket.\n * @param {string} key - The key of the object to put. To create a folder, include a trailing slash.\n * @param {Buffer|string} data - The content of the object to put.\n * @returns {Promise} The response from the put operation.\n * @throws {TypeError} If the key is not a non-empty string or data is not a Buffer or string.\n */\n async put(key: string, data: string | Buffer): Promise {\n this._checkKey(key);\n if (!(data instanceof Buffer || typeof data === 'string')) {\n this._log('error', ERROR_DATA_BUFFER_REQUIRED);\n throw new TypeError(ERROR_DATA_BUFFER_REQUIRED);\n }\n // const encodedKey = encodeURIComponent(key);\n this._log('info', `Uploading object ${key}`);\n const contentLength = typeof data === 'string' ? Buffer.byteLength(data) : data.length;\n const headers = {\n [HEADER_CONTENT_LENGTH]: contentLength,\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('PUT', encodedKey, {}, headers, data);\n const res = await this._sendRequest(url, 'PUT', signedHeaders, data);\n return res;\n }\n\n /**\n * Initiate a multipart upload.\n * @param {string} key - The key of the object to upload.\n * @param {string} [fileType='application/octet-stream'] - The MIME type of the file.\n * @returns {Promise} The upload ID for the multipart upload.\n * @throws {TypeError} If the key is not a non-empty string or fileType is not a string.\n * @throws {Error} If the multipart upload initiation fails.\n */\n async getMultipartUploadId(key: string, fileType: string = DEFAULT_STREAM_CONTENT_TYPE): Promise {\n this._checkKey(key);\n if (typeof fileType !== 'string') {\n this._log('error', `${ERROR_PREFIX}fileType must be a string`);\n throw new TypeError(`${ERROR_PREFIX}fileType must be a string`);\n }\n this._log('info', `Initiating multipart upload for object ${key}`);\n const query = { uploads: '' };\n const headers = {\n [HEADER_CONTENT_TYPE]: fileType,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('POST', encodedKey, query, headers, '');\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n\n const res = await this._sendRequest(urlWithQuery, 'POST', signedHeaders);\n const responseBody = await res.text();\n const parsedResponse = _parseXml(responseBody);\n\n if (\n typeof parsedResponse === 'object' &&\n parsedResponse !== null &&\n 'error' in parsedResponse &&\n typeof parsedResponse.error === 'object' &&\n parsedResponse.error !== null &&\n 'message' in parsedResponse.error\n ) {\n const errorMessage = String(parsedResponse.error.message);\n this._log('error', `${ERROR_PREFIX}Failed to abort multipart upload: ${errorMessage}`);\n throw new Error(`${ERROR_PREFIX}Failed to abort multipart upload: ${errorMessage}`);\n }\n\n if (typeof parsedResponse === 'object' && parsedResponse !== null) {\n if (!parsedResponse.initiateMultipartUploadResult || !parsedResponse.initiateMultipartUploadResult.uploadId) {\n this._log('error', `${ERROR_PREFIX}Failed to create multipart upload: no uploadId in response`);\n throw new Error(`${ERROR_PREFIX}Failed to create multipart upload: Missing upload ID in response`);\n }\n\n return parsedResponse.initiateMultipartUploadResult.uploadId;\n } else {\n this._log('error', `${ERROR_PREFIX}Failed to create multipart upload: unexpected response format`);\n throw new Error(`${ERROR_PREFIX}Failed to create multipart upload: Unexpected response format`);\n }\n }\n\n /**\n * Upload a part in a multipart upload.\n * @param {string} key - The key of the object being uploaded.\n * @param {Buffer|string} data - The content of the part.\n * @param {string} uploadId - The upload ID of the multipart upload.\n * @param {number} partNumber - The part number.\n * @param {Object} [opts={}] - Additional options for the upload.\n * @returns {Promise} The ETag and part number of the uploaded part.\n * @throws {TypeError} If any of the parameters are of incorrect type.\n */\n async uploadPart(\n key: string,\n data: Buffer | string,\n uploadId: string,\n partNumber: number,\n opts: Object = {},\n ): Promise {\n this._validateUploadPartParams(key, data, uploadId, partNumber, opts);\n const query = { uploadId, partNumber, ...opts } as { [key: string]: any };\n const headers = {\n [HEADER_CONTENT_LENGTH]: data.length,\n } as { [key: string]: any };\n\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('PUT', encodedKey, query, headers, data);\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n\n const res = await this._sendRequest(urlWithQuery, 'PUT', signedHeaders, data);\n const ETag = sanitizeETag(res.headers.get('etag') || '');\n return { partNumber, ETag };\n }\n\n private _validateUploadPartParams(\n key: string,\n data: Buffer | string,\n uploadId: string,\n partNumber: number,\n opts: Object,\n ) {\n this._checkKey(key);\n if (!(data instanceof Buffer || typeof data === 'string')) {\n this._log('error', ERROR_DATA_BUFFER_REQUIRED);\n throw new TypeError(ERROR_DATA_BUFFER_REQUIRED);\n }\n if (typeof uploadId !== 'string' || uploadId.trim().length === 0) {\n this._log('error', ERROR_UPLOAD_ID_REQUIRED);\n throw new TypeError(ERROR_UPLOAD_ID_REQUIRED);\n }\n if (!Number.isInteger(partNumber) || partNumber <= 0) {\n this._log('error', `${ERROR_PREFIX}partNumber must be a positive integer`);\n throw new TypeError(`${ERROR_PREFIX}partNumber must be a positive integer`);\n }\n this._checkOpts(opts);\n }\n\n /**\n * Complete a multipart upload.\n * @param {string} key - The key of the object being uploaded.\n * @param {string} uploadId - The upload ID of the multipart upload.\n * @param {Array} parts - An array of objects containing PartNumber and ETag for each part.\n * @returns {Promise} The result of the complete multipart upload operation.\n * @throws {TypeError} If any of the parameters are of incorrect type.\n * @throws {Error} If the complete multipart upload operation fails.\n */\n async completeMultipartUpload(\n key: string,\n uploadId: string,\n parts: Array,\n ): Promise {\n this._checkKey(key);\n if (typeof uploadId !== 'string' || uploadId.trim().length === 0) {\n this._log('error', ERROR_UPLOAD_ID_REQUIRED);\n throw new TypeError(ERROR_UPLOAD_ID_REQUIRED);\n }\n if (!Array.isArray(parts) || parts.length === 0) {\n this._log('error', ERROR_PARTS_REQUIRED);\n throw new TypeError(ERROR_PARTS_REQUIRED);\n }\n if (!parts.every(part => typeof part.partNumber === 'number' && typeof part.ETag === 'string')) {\n this._log('error', ERROR_INVALID_PART);\n throw new TypeError(ERROR_INVALID_PART);\n }\n this._log('info', `Complete multipart upload ${uploadId} for object ${key}`);\n const query = { uploadId };\n const xmlBody = this._buildCompleteMultipartUploadXml(parts);\n const headers = {\n [HEADER_CONTENT_TYPE]: XML_CONTENT_TYPE,\n [HEADER_CONTENT_LENGTH]: Buffer.byteLength(xmlBody).toString(),\n [HEADER_AMZ_CONTENT_SHA256]: await _hash(xmlBody),\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('POST', encodedKey, query, headers, xmlBody);\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n\n const res = await this._sendRequest(urlWithQuery, 'POST', signedHeaders, xmlBody);\n const responseBody = await res.text();\n const parsedResponse = _parseXml(responseBody);\n\n if (\n typeof parsedResponse === 'object' &&\n parsedResponse !== null &&\n 'error' in parsedResponse &&\n typeof parsedResponse.error === 'object' &&\n parsedResponse.error !== null &&\n 'message' in parsedResponse.error\n ) {\n const errorMessage = String(parsedResponse.error.message);\n this._log('error', `${ERROR_PREFIX}Failed to abort multipart upload: ${errorMessage}`);\n throw new Error(`${ERROR_PREFIX}Failed to abort multipart upload: ${errorMessage}`);\n }\n\n return parsedResponse.completeMultipartUploadResult;\n }\n\n /**\n * Aborts a multipart upload.\n * @param {string} key - The key of the object being uploaded.\n * @param {string} uploadId - The ID of the multipart upload to abort.\n * @returns {Promise} - A promise that resolves to the abort response.\n * @throws {Error} If the abort operation fails.\n */\n async abortMultipartUpload(key: string, uploadId: string): Promise {\n // Input validation\n this._checkKey(key);\n if (typeof uploadId !== 'string' || uploadId.trim().length === 0) {\n this._log('error', ERROR_UPLOAD_ID_REQUIRED);\n throw new TypeError(ERROR_UPLOAD_ID_REQUIRED);\n }\n\n this._log('info', `Aborting multipart upload ${uploadId} for object ${key}`);\n\n // Prepare the request\n const query = { uploadId };\n const headers = {\n [HEADER_CONTENT_TYPE]: XML_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n\n try {\n // Sign and send the request\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('DELETE', encodedKey, query, headers, '');\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n\n const res = await this._sendRequest(urlWithQuery, 'DELETE', signedHeaders);\n\n // Check for successful response\n if (res.ok) {\n const responseBody = await res.text();\n const parsedResponse = _parseXml(responseBody);\n\n if (\n typeof parsedResponse === 'object' &&\n parsedResponse !== null &&\n 'error' in parsedResponse &&\n typeof parsedResponse.error === 'object' &&\n parsedResponse.error !== null &&\n 'message' in parsedResponse.error\n ) {\n const errorMessage = String(parsedResponse.error.message);\n this._log('error', `${ERROR_PREFIX}Failed to abort multipart upload: ${errorMessage}`);\n throw new Error(`${ERROR_PREFIX}Failed to abort multipart upload: ${errorMessage}`);\n }\n\n return {\n status: 'Aborted',\n key,\n uploadId,\n response: parsedResponse,\n };\n } else {\n this._log('error', `${ERROR_PREFIX}Abort request failed with status ${res.status}`);\n throw new Error(`${ERROR_PREFIX}Abort request failed with status ${res.status}`);\n }\n } catch (error: unknown) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n this._log('error', `${ERROR_PREFIX}Failed to abort multipart upload for key ${key}: ${errorMessage}`);\n throw new Error(`${ERROR_PREFIX}Failed to abort multipart upload for key ${key}: ${errorMessage}`);\n }\n }\n\n private _buildCompleteMultipartUploadXml(parts: Array): string {\n return `\n \n ${parts\n .map(\n part => `\n \n ${part.partNumber}\n ${part.ETag}\n \n `,\n )\n .join('')}\n \n `;\n }\n\n /**\n * Delete an object from the bucket.\n * @param {string} key - The key of the object to delete.\n * @returns {Promise} The response from the delete operation. True if the delete operation was successful, false otherwise. Note: The delete operation may return a 204 status code even if the object was not found.\n */\n async delete(key: string): Promise {\n this._checkKey(key);\n this._log('info', `Deleting object ${key}`);\n const headers = {\n [HEADER_CONTENT_TYPE]: JSON_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('DELETE', encodedKey, {}, headers, '');\n const res = await this._sendRequest(url, 'DELETE', signedHeaders);\n if (res.status === 204 || res.status === 200) {\n return true;\n }\n return false;\n }\n\n async _sendRequest(\n url: string,\n method: HttpMethod,\n headers: Record,\n body?: string | Buffer,\n toleratedStatusCodes: number[] = [],\n ): Promise {\n this._log('info', `Sending ${method} request to ${url}, headers: ${JSON.stringify(headers)}`);\n const res = await fetch(url, {\n method,\n headers,\n body: ['GET', 'HEAD'].includes(method) ? undefined : body,\n signal: this.requestAbortTimeout !== undefined ? AbortSignal.timeout(this.requestAbortTimeout) : undefined,\n });\n\n if (!res.ok && !toleratedStatusCodes.includes(res.status)) {\n await this._handleErrorResponse(res);\n }\n\n return res;\n }\n\n async _handleErrorResponse(res: Response) {\n const errorBody = await res.text();\n const errorCode = res.headers.get('x-amz-error-code') || 'Unknown';\n const errorMessage = res.headers.get('x-amz-error-message') || res.statusText;\n this._log(\n 'error',\n `${ERROR_PREFIX}Request failed with status ${res.status}: ${errorCode} - ${errorMessage},err body: ${errorBody}`,\n );\n throw new Error(\n `${ERROR_PREFIX}Request failed with status ${res.status}: ${errorCode} - ${errorMessage}, err body: ${errorBody}`,\n );\n }\n\n _buildCanonicalQueryString(queryParams: Object): string {\n if (Object.keys(queryParams).length < 1) {\n return '';\n }\n\n return Object.keys(queryParams)\n .sort()\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent((queryParams as Record)[key])}`)\n .join('&');\n }\n async _getSignatureKey(dateStamp: string): Promise {\n const kDate = await _hmac(`AWS4${this.secretAccessKey}`, dateStamp);\n const kRegion = await _hmac(kDate, this.region);\n const kService = await _hmac(kRegion, S3_SERVICE);\n return _hmac(kService, AWS_REQUEST_TYPE);\n }\n}\n\nconst _hash = async (content: string | Buffer): Promise => {\n const hashSum = _createHash('sha256');\n hashSum.update(content);\n return hashSum.digest('hex');\n};\n\nconst _hmac = async (key: string | Buffer, content: string, encoding?: 'hex'): Promise => {\n const hmacSum = _createHmac('sha256', key);\n hmacSum.update(content);\n return hmacSum.digest(encoding);\n};\nexport const sanitizeETag = (etag: string): string => {\n const replaceChars: Record = {\n '\"': '',\n '"': '',\n '"': '',\n '"': '',\n '"': '',\n };\n return etag.replace(/^(\"|"|")|(\"|"|")$/g, m => replaceChars[m] as string);\n};\n\nconst _parseXml = (str: string): string | object | any => {\n const unescapeXml = (value: string): string => {\n return value\n .replace(/"/g, '\"')\n .replace(/'/g, \"'\")\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/&/g, '&');\n };\n\n const json = {};\n const re = /<(\\w)([-\\w]+)(?:\\/|[^>]*>((?:(?!<\\1)[\\s\\S])*)<\\/\\1\\2)>/gm;\n let match;\n\n while ((match = re.exec(str))) {\n const [, prefix, key, value] = match;\n const fullKey = prefix.toLowerCase() + key;\n const parsedValue = value != null ? _parseXml(value) : true;\n\n if (typeof parsedValue === 'string') {\n (json as { [key: string]: any })[fullKey] = sanitizeETag(unescapeXml(parsedValue));\n } else if (Array.isArray((json as { [key: string]: any })[fullKey])) {\n (json as { [key: string]: any })[fullKey].push(parsedValue);\n } else {\n (json as { [key: string]: any })[fullKey] =\n (json as { [key: string]: any })[fullKey] != null\n ? [(json as { [key: string]: any })[fullKey], parsedValue]\n : expectArray[fullKey]\n ? [parsedValue]\n : parsedValue;\n }\n }\n\n return Object.keys(json).length ? json : unescapeXml(str);\n};\n\nexport { S3 };\nexport default S3;\n", "'use strict';\n\nimport { S3 } from 'ultralight-s3';\nimport avro from 'avro-js'; // eslint-disable-line\nimport {\n\tlowstorage_ERROR_CODES,\n\tlowstorageError,\n\tCollectionNotFoundError,\n\tSchemaValidationError,\n\tDocumentValidationError,\n\tS3OperationError,\n} from './errors.js';\nimport { matchesQuery, generateUUID, inferAvroType } from './helpers.js';\n\nconst MODULE_NAME = 'lowstorage';\nconst DEFAULT_DELIMITER = '/';\nconst PROJECT_DIR_PREFIX = 'lowstorage';\nconst COL_SUFFIX = '.avro';\nconst CHUNG_1MB = 1024 * 1024;\nconst CHUNG_5MB = 5 * CHUNG_1MB;\n\nconst errorValidationFn = (errorCode = lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR) => {\n\tthrow new DocumentValidationError(`${MODULE_NAME}: Invalid document or schema`, errorCode);\n};\n\n// code / description\n// init of new collection is automatically creating it in the bucket\n// there is optional (opt-in) switch to create new collections in bucket\n// if the schema is not provided, it will create empty buffer and save it\n// if the schema is provided, it will save it in memory and use it for all ops\n// if the schema is updated, it will save it in memory and use it for all ops\n// exposed functions are:\n// listCollections \u2705\n// collectionExists \u2705\n// createCollection \u2705\n// removeCollection \u2705\n// renameCollection \u2705\n// updateCollectionSchema \u274C\n// collection \u2705\n// s3 \u2705\n\n// Operations over collections are:\n// insert \u2705\n// find \u2705\n// findOne \u2705\n// update \u2705\n// updateOne \u2705\n// delete \u2705\n// count \u2705\n\n// Errors:\n// lowstorageError \u2705\n// CollectionNotFoundError \u2705\n// SchemaValidationError \u2705\n// DocumentValidationError \u2705\n// S3OperationError \u2705\n\n/**\n * lowstorage class for managing collections and performing operations on top of S3-compatible storages.\n * @class\n * @example\n * const storage = new lowstorage({\n * \taccessKeyId: 'YOUR_ACCESS_KEY',\n * \tsecretAccessKey: 'YOUR_SECRET_KEY',\n * \tendpoint: 'YOUR_ENDPOINT',\n * \tbucketName: 'YOUR_BUCKET_NAME',\n * \tregion: 'YOUR_REGION',\n * });\n *\n * // Create a collection\n * const userCol = await storage.collection('users');\n *\n * // Insert a document\n * await userCol.insert({\n * \tname: 'Kevin',\n * \tgender: 'whatever',\n * \tposts: [],\n * });\n *\n * // Show all users\n * const allUsers = await userCol.find({});\n *\n * // Find users with pagination (e.g., page 2, 10 users per page)\n * const secondPageUsers = await userCol.find({}, { skip: 10, limit: 10 });\n *\n * // Find user by ID and update name\n * await userCol.update({ _id: id }, { name: 'Carlos' });\n */\nclass lowstorage {\n\t/**\n\t * Create a new lowstorage instance.\n\t * @param {Object} options - Configuration options for lowstorage.\n\t * @param {string} options.accessKeyId - S3 access key ID.\n\t * @param {string} options.secretAccessKey - S3 secret access key.\n\t * @param {string} options.endpoint - S3 endpoint URL.\n\t * @param {string} options.bucketName - S3 bucket name.\n\t * @param {string} [options.region='auto'] - S3 region.\n\t * @param {Object} [options.logger=null] - Logger object.\n\t * @param {string} [options.dirPrefix=PROJECT_DIR_PREFIX] - Directory prefix for collections.\n\t * @returns {lowstorage} A new lowstorage instance.\n\t */\n\tconstructor(\n\t\toptions = {\n\t\t\taccessKeyId: undefined,\n\t\t\tsecretAccessKey: undefined,\n\t\t\tendpoint: undefined,\n\t\t\tbucketName: undefined,\n\t\t\tregion: 'auto',\n\t\t\tlogger: null,\n\t\t\tdirPrefix: PROJECT_DIR_PREFIX,\n\t\t},\n\t) {\n\t\tthis._checkArgs(options);\n\t\tthis._schemas = new Map();\n\t\tthis._s3 = new S3(options);\n\t\tthis._dirPrefix = options.dirPrefix || PROJECT_DIR_PREFIX;\n\t\tthis._avro = avro;\n\t}\n\n\t_checkArgs = (args) => {\n\t\tconst requiredFields = ['accessKeyId', 'secretAccessKey', 'endpoint', 'bucketName'];\n\t\tfor (const field of requiredFields) {\n\t\t\tif (!args[field]) {\n\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: ${field} is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n\t\t\t}\n\t\t}\n\t};\n\n\t_hasColName = (colName) => {\n\t\tif (colName.trim() === '' || colName === null || typeof colName === 'undefined') {\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Collection name is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n\t\t}\n\t};\n\n\t/**\n\t * List all collections.\n\t * @returns {Promise} An array of collection names.\n\t * @throws {S3OperationError} If there's an error during S3 operation.\n\t */\n\tasync listCollections() {\n\t\ttry {\n\t\t\tconst listed = await this._s3.list(DEFAULT_DELIMITER, this._dirPrefix);\n\t\t\tif (typeof listed === 'object' && listed !== null && listed.keyCount === '0') return [];\n\t\t\t// remove the delimiter from the key\n\t\t\treturn listed.map((entry) => entry.key.slice(this._dirPrefix.length + 1, -COL_SUFFIX.length));\n\t\t} catch (error) {\n\t\t\tthrow new S3OperationError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t}\n\t}\n\n\t/**\n\t * Check if a collection exists.\n\t * @param {string} colName - The name of the collection.\n\t * @returns {Promise} True if the collection exists, false otherwise.\n\t * @throws {lowstorageError} If there's an error.\n\t */\n\tasync collectionExists(colName) {\n\t\ttry {\n\t\t\tthis._hasColName(colName);\n\t\t\tconst exists = await this._s3.fileExists(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`);\n\t\t\treturn exists;\n\t\t} catch (error) {\n\t\t\tif (error.message.includes('Not Found')) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND);\n\t\t}\n\t}\n\n\t/**\n\t * Create a new collection.\n\t * @param {string} colName - The name of the collection.\n\t * @param {Object} [schema] - The schema for the collection.\n\t * @param {Array} [data=[]] - The initial data for the collection.\n\t * @returns {Promise} A Promise that resolves to a Collection object.\n\t * @throws {lowstorageError} If there's an error.\n\t */\n\tasync createCollection(colName, schema, data = []) {\n\t\ttry {\n\t\t\tthis._hasColName(colName);\n\t\t\tconst exists = await this.collectionExists(colName);\n\t\t\tif (!exists) {\n\t\t\t\tawait this._s3.put(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`, data.length > 0 ? data : '');\n\t\t\t\treturn this.collection(colName, schema);\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Collection ${colName} already exists`, lowstorage_ERROR_CODES.COLLECTION_EXISTS);\n\t\t} catch (error) {\n\t\t\tif (error instanceof lowstorageError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.CREATE_COLLECTION_ERROR);\n\t\t}\n\t}\n\n\t/**\n\t * Remove a collection.\n\t * @param {string} colName - The name of the collection.\n\t * @returns {Promise} A Promise that resolves to true if the collection is removed, false otherwise.\n\t * @throws {lowstorageError} If there's an error.\n\t */\n\tasync removeCollection(colName) {\n\t\ttry {\n\t\t\tthis._hasColName(colName);\n\t\t\tconst KEY = `${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`;\n\t\t\tconst exists = await this.collectionExists(colName);\n\t\t\tif (exists) {\n\t\t\t\tawait this._s3.delete(KEY);\n\t\t\t\tconst exists2 = await this.collectionExists(colName);\n\t\t\t\tif (typeof exists2 === 'boolean') {\n\t\t\t\t\tif (!exists2) {\n\t\t\t\t\t\tthis._schemas.delete(colName);\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Failed to delete collection ${colName}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t\t}\n\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to delete collection ${colName}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Collection ${colName} does not exist`, lowstorage_ERROR_CODES.REMOVE_COLLECTION_ERROR);\n\t\t} catch (error) {\n\t\t\tif (error instanceof S3OperationError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(\n\t\t\t\t`${MODULE_NAME}: Failed to remove collection: ${error.message}`,\n\t\t\t\tlowstorage_ERROR_CODES.REMOVE_COLLECTION_ERROR,\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Rename a collection.\n\t * @param {string} oldColName - The current name of the collection.\n\t * @param {string} newColName - The new name of the collection.\n\t * @returns {Promise} A Promise that resolves to a Collection object.\n\t * @throws {lowstorageError} If there's an error.\n\t */\n\tasync renameCollection(oldColName, newColName) {\n\t\ttry {\n\t\t\tthis._hasColName(oldColName);\n\t\t\tthis._hasColName(newColName);\n\t\t\tconst exists = await this.collectionExists(oldColName);\n\t\t\tif (!exists) {\n\t\t\t\tthrow new CollectionNotFoundError(\n\t\t\t\t\t`${MODULE_NAME}: Collection ${oldColName} does not exist`,\n\t\t\t\t\tlowstorage_ERROR_CODES.COLLECTION_NOT_FOUND,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst oldCol = await this.collection(oldColName);\n\t\t\tconst oldColData = await oldCol._loadData();\n\t\t\tconst success = await this.removeCollection(oldColName);\n\t\t\tif (!success) {\n\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Failed to rename collection`, lowstorage_ERROR_CODES.RENAME_COLLECTION_ERROR);\n\t\t\t}\n\t\t\treturn await this.createCollection(newColName, oldCol._avroType, oldColData);\n\t\t} catch (error) {\n\t\t\tif (error instanceof lowstorageError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(\n\t\t\t\t`${MODULE_NAME}: Rename collection failed: ${error.message}`,\n\t\t\t\tlowstorage_ERROR_CODES.RENAME_COLLECTION_ERROR,\n\t\t\t);\n\t\t}\n\t}\n\n\t// TODO: update collection schema\n\t// async updateCollectionSchema(colName, newSchema) {\n\t// \ttry {\n\t// \t\tthis._hasColName(colName);\n\t// \t\t// Check if collection exists\n\t// \t\tconst exists = await this.collectionExists(colName);\n\t// \t\tif (!exists) {\n\t// \t\t\tthrow new CollectionNotFoundError(`${MODULE_NAME}: Collection ${colName} does not exist`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND);\n\t// \t\t}\n\t// \t\tif (typeof schema === 'undefined' || schema === null) {\n\t// \t\t\tthrow new lowstorageError(`${MODULE_NAME}: Schema is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n\t// \t\t}\n\t// \t\tconst col = this.collection(colName);\n\t// \t\tconst colData = await col._loadDataBuffer();\n\t// \t\tconst avroType = this._avro.parse(schema);\n\t// \t\tthis._schemas.set(colName, avroType);\n\n\t// \t} catch (error) {\n\t// \t\tif (error instanceof S3OperationError) {\n\t// \t\t\tthrow error;\n\t// \t\t}\n\t// \t\tthrow new lowstorageError(\n\t// \t\t\t`${MODULE_NAME}: Failed to update collection schema: ${error.message}`,\n\t// \t\t\tlowstorage_ERROR_CODES.UPDATE_COLLECTION_SCHEMA_ERROR,\n\t// \t\t);\n\t// \t}\n\t// }\n\n\t/**\n\t * Get or create a collection.\n\t * @param {string} colName - The name of the collection.\n\t * @param {Object} [schema] - The schema for the collection.\n\t * @param {boolean} [autoCreate=true] - Whether to automatically create the collection if it doesn't exist.\n\t * @returns {Promise} A Promise that resolves to a Collection object.\n\t * @throws {lowstorageError} If there's an error.\n\t */\n\tasync collection(colName, schema, autoCreate = true) {\n\t\ttry {\n\t\t\tthis._hasColName(colName);\n\t\t\tconst colPath = `${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`;\n\t\t\tlet avroType;\n\n\t\t\tconst exists = await this._s3.fileExists(colPath);\n\n\t\t\tif (!exists) {\n\t\t\t\tif (!autoCreate) {\n\t\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Collection ${colName} does not exist`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND);\n\t\t\t\t}\n\t\t\t\tconst emptyData = Buffer.from('', 'utf8');\n\t\t\t\tawait this._s3.put(colPath, emptyData);\n\t\t\t}\n\n\t\t\tif (schema) {\n\t\t\t\tavroType = this._avro.parse(schema);\n\t\t\t\tthis._schemas.set(colName, avroType);\n\t\t\t} else if (this._schemas.has(colName)) {\n\t\t\t\tavroType = this._schemas.get(colName);\n\t\t\t}\n\n\t\t\treturn new Collection(colName, this._s3, avroType, this._dirPrefix);\n\t\t} catch (error) {\n\t\t\t// check if error message contains \"unknown type\" and if so, throw a schema validation error\n\t\t\tif (error.message.includes('unknown type')) {\n\t\t\t\tthrow new SchemaValidationError(\n\t\t\t\t\t`${MODULE_NAME}: Schema input is invalid: ${error.message}`,\n\t\t\t\t\tlowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND);\n\t\t}\n\t}\n\n\t/**\n\t * Get the S3 instance associated with the lowstorage instance.\n\t * @returns {S3} The S3 instance. Use this to perform S3 operations. Check for ultralight-s3 for more details.\n\t */\n\ts3 = () => {\n\t\treturn this._s3;\n\t};\n}\n\n/**\n * Collection class for managing documents in a collection.\n * @class\n * @example\n * const storage = new lowstorage({\n * \taccessKeyId: 'YOUR_ACCESS_KEY',\n * \tsecretAccessKey: 'YOUR_SECRET_KEY',\n * \tendpoint: 'YOUR_ENDPOINT',\n * \tbucketName: 'YOUR_BUCKET_NAME',\n * \tregion: 'YOUR_REGION',\n * });\n *\n * // Create a collection\n * const userCol = await storage.collection('users');\n *\n * // Insert a document\n * await userCol.insert({\n * \tname: 'Kevin',\n * \tgender: 'whatever',\n * \tposts: [],\n * });\n *\n * // Show all users\n * const allUsers = await userCol.find({});\n *\n * // Find users with pagination (e.g., page 2, 10 users per page)\n * const secondPageUsers = await userCol.find({}, { skip: 10, limit: 10 });\n *\n * // Find user by ID and update name\n * await userCol.update({ _id: id }, { name: 'Carlos' });\n */\nclass Collection {\n\t/**\n\t * Create a new Collection instance.\n\t * @param {string} colName - The name of the collection.\n\t * @param {S3} s3 - The S3 instance.\n\t * @param {Object} [avroType] - The Avro type for the collection.\n\t * @param {string} [dirPrefix=PROJECT_DIR_PREFIX] - The directory prefix for the collection.\n\t * @param {boolean} [safeWrite=false] - Whether to perform a safe write operation. It doublechecks the ETag of the object before writing. False = overwrites the object, True = only writes if the object has not been modified.\n\t * @returns {Collection} A new Collection instance.\n\t */\n\tconstructor(colName, s3, avroType, dirPrefix = PROJECT_DIR_PREFIX, safeWrite = false) {\n\t\tthis._colName = colName;\n\t\tthis._s3 = s3;\n\t\tthis._avro = avro;\n\t\tthis._lastETag = '';\n\t\tthis._dataCache = [];\n\t\tthis._avroType = avroType;\n\t\tthis._dirPrefix = dirPrefix;\n\t\tthis._safeWrite = safeWrite;\n\t}\n\n\tgetProps = () => ({\n\t\tcolName: this._colName,\n\t\ts3: this._s3,\n\t\tavro: this._avro,\n\t\tavroType: this._avroType,\n\t\tdirPrefix: this._dirPrefix,\n\t\tsafeWrite: this._safeWrite,\n\t});\n\n\tsetProps = (props) => {\n\t\tthis._colName = props.colName;\n\t\tthis._s3 = props.s3;\n\t\tthis._avro = props.avro;\n\t\tthis._avroType = props.avroType;\n\t\tthis._dirPrefix = props.dirPrefix;\n\t\tthis._safeWrite = props.safeWrite;\n\t};\n\n\tsetSafeWrite = (safeWrite) => {\n\t\tthis._safeWrite = safeWrite;\n\t};\n\n\tgetSafeWrite = () => {\n\t\treturn this._safeWrite;\n\t};\n\n\tgetAvroSchema = () => {\n\t\treturn this._avroType;\n\t};\n\n\tsetAvroSchema = (schema) => {\n\t\tthis._avroType = this._avro.parse(schema);\n\t};\n\n\tasync _loadData() {\n\t\ttry {\n\t\t\tconst KEY = `${this._dirPrefix}${DEFAULT_DELIMITER}${this._colName}${COL_SUFFIX}`;\n\t\t\tconst CHUNK_SIZE = this._s3.getMaxRequestSizeInBytes() || CHUNG_5MB;\n\t\t\tif (this._avroType === null || typeof this._avroType === 'undefined') {\n\t\t\t\tthrow new lowstorageError(\n\t\t\t\t\t`${MODULE_NAME}: Missing type definition. Configure before operations `,\n\t\t\t\t\tlowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconsole.log('Getting object:', KEY, this._lastETag);\n\t\t\tlet { etag, data } = await this._s3.getObjectWithETag(KEY, { 'if-none-match': this._lastETag });\n\t\t\tconsole.log('data :::::::::::::::::::::::::', data, etag, this._dataCache);\n\t\t\tif (data === null) {\n\t\t\t\t// console.log('data is null, returning cache');\n\t\t\t\treturn this._dataCache;\n\t\t\t}\n\t\t\tthis._lastETag = etag === null ? this._lastETag : etag;\n\t\t\tconst wrapperType = this._avro.parse({ type: 'array', items: this._avroType });\n\t\t\tif (data.length < CHUNK_SIZE) {\n\t\t\t\tthis._dataCache = data.length > 0 ? wrapperType.fromBuffer(data) : [];\n\t\t\t\treturn this._dataCache;\n\t\t\t}\n\t\t\tlet offset = CHUNK_SIZE;\n\t\t\tlet bufferArr = [Buffer.from(data, 'utf8')];\n\t\t\tlet repeat = true;\n\t\t\twhile (repeat) {\n\t\t\t\tconst nextDataResponse = await this._s3.getResponse(KEY, false, offset, offset + CHUNK_SIZE);\n\t\t\t\tconst nextDataBody = await nextDataResponse.text();\n\t\t\t\tbufferArr.push(Buffer.from(nextDataBody, 'utf8'));\n\t\t\t\toffset += CHUNK_SIZE;\n\t\t\t\tconst contentLength = nextDataResponse.headers.get('content-length') || nextDataBody.length;\n\t\t\t\tif (contentLength < CHUNK_SIZE) {\n\t\t\t\t\trepeat = false;\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst bufferedData = Buffer.concat(bufferArr);\n\t\t\tthis._dataCache = wrapperType.fromBuffer(bufferedData);\n\t\t\treturn this._dataCache;\n\t\t} catch (error) {\n\t\t\tif (error.toString().indexOf('status 404: Unknown - Not Found') > -1) {\n\t\t\t\tthis._dataCache = [];\n\t\t\t\treturn this._dataCache;\n\t\t\t}\n\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to load data: ${error.message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t}\n\t}\n\n\tasync _saveData(data) {\n\t\ttry {\n\t\t\tif (this._avroType === null || typeof this._avroType === 'undefined') {\n\t\t\t\tthrow new lowstorageError(\n\t\t\t\t\t`${MODULE_NAME}: Missing type definition. Configure before operations `,\n\t\t\t\t\tlowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst wrapperType = this._avro.parse({ type: 'array', items: this._avroType });\n\t\t\tconst dataBuffer = data.length > 0 ? wrapperType.toBuffer(data) : Buffer.from('', 'utf8');\n\n\t\t\tconst KEY = `${this._dirPrefix}${DEFAULT_DELIMITER}${this._colName}${COL_SUFFIX}`;\n\t\t\tif (this._safeWrite && this._lastETag !== '') {\n\t\t\t\tconst currentETag = await this._s3.getEtag(KEY);\n\t\t\t\t// If we have a current ETag, check if it matches our last known ETag\n\t\t\t\tif (currentETag !== null && currentETag !== this._lastETag) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst resp = await this._s3.put(KEY, dataBuffer);\n\t\t\tif (resp.status !== 200) {\n\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to save data`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t}\n\n\t\t\t// Update the cached ETag\n\t\t\tconst newETag = resp.headers.get('etag');\n\t\t\t// console.log('saveddata newETag', this._s3.sanitizeETag(newETag));\n\t\t\tif (newETag) {\n\t\t\t\tthis._lastETag = this._s3.sanitizeETag(newETag);\n\t\t\t\t// console.log('saveddata lastETag', this._lastETag, 'data is ', data);\n\t\t\t\tthis._dataCache = data;\n\t\t\t}\n\t\t\treturn true;\n\t\t} catch (error) {\n\t\t\tif (error instanceof S3OperationError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.SAVE_DATA_ERROR);\n\t\t}\n\t}\n\n\t/**\n\t * Insert a document into the collection.\n\t * @param {Object|Array} doc - The document to insert.\n\t * @param {Object} [schema=undefined] - The schema for the document.\n\t * @returns {Promise} A Promise that resolves to the array of inserted document(s).\n\t * @throws {lowstorageError} If there's an error.\n\t */\n\tasync insert(doc, schema = undefined) {\n\t\ttry {\n\t\t\tif (doc === undefined || doc === null) {\n\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Document is required for insert`, lowstorage_ERROR_CODES.INSERT_ERROR);\n\t\t\t}\n\t\t\tif (typeof doc !== 'object' && !Array.isArray(doc)) {\n\t\t\t\tthrow new DocumentValidationError(\n\t\t\t\t\t`${MODULE_NAME}: Document must be an object or an array`,\n\t\t\t\t\tlowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst items = !Array.isArray(doc) ? [doc] : doc;\n\n\t\t\tconst schemaWithId = schema || this._avroType || inferAvroType(items[0]);\n\t\t\tconst avroType = this._avro.parse(schemaWithId);\n\t\t\tif (!avroType) {\n\t\t\t\tthrow new SchemaValidationError(\n\t\t\t\t\t`${MODULE_NAME}: Schema is required - Pass a schema to the insert method`,\n\t\t\t\t\tlowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR,\n\t\t\t\t);\n\t\t\t}\n\t\t\tthis._avroType = avroType;\n\t\t\tconst data = await this._loadData();\n\t\t\tfor (let item of items) {\n\t\t\t\tif (typeof item !== 'object' || item === null) {\n\t\t\t\t\tthrow new DocumentValidationError(\n\t\t\t\t\t\t`${MODULE_NAME}: Invalid input: input must be an object or an array of objects`,\n\t\t\t\t\t\tlowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\titem._id = item._id || (await generateUUID());\n\t\t\t\tconst validBuffer = this._avroType.isValid(item, {\n\t\t\t\t\terrorHook: errorValidationFn,\n\t\t\t\t\tnoUndeclaredFields: true,\n\t\t\t\t});\n\t\t\t\tif (validBuffer === true) {\n\t\t\t\t\tdata.push(item);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new DocumentValidationError(`${MODULE_NAME}: Invalid document or schema`, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR);\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst success = await this._saveData(data);\n\t\t\tif (!success) {\n\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to insert document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t}\n\t\t\treturn items;\n\t\t} catch (error) {\n\t\t\tif (error.message.includes('unknown type')) {\n\t\t\t\tthrow new SchemaValidationError(\n\t\t\t\t\t`${MODULE_NAME}: Schema input is invalid: ${error.message}`,\n\t\t\t\t\tlowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (error instanceof lowstorageError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME} Insert operation failed: ${error.message}`, lowstorage_ERROR_CODES.INSERT_ERROR);\n\t\t}\n\t}\n\n\t/**\n\t * Find documents in the collection.\n\t * @param {Object} [query={}] - The query to filter documents.\n\t * @param {Object} [options={}] - The options for pagination.\n\t * @param {number} [options.skip=0] - The number of documents to skip. Default is 0.\n\t * @param {number} [options.limit=undefined] - The maximum number of documents to return. Default is undefined, which means no limit.\n\t * @returns {Promise} A Promise that resolves to an array of matching documents.\n\t * @throws {lowstorageError} If there's an error.\n\t */\n\tasync find(query = {}, options = {}) {\n\t\ttry {\n\t\t\tif (query === undefined || query === null) {\n\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Query is required for update`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n\t\t\t}\n\t\t\tconst data = await this._loadData();\n\t\t\tconst start = parseInt(options.skip, 10) || 0;\n\t\t\tconst end = parseInt(options.limit, 10) ? start + parseInt(options.limit, 10) : undefined;\n\t\t\tconst filteredData = data.filter((doc) => matchesQuery(doc, query)).slice(start, end);\n\t\t\treturn filteredData;\n\t\t} catch (error) {\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Find operation failed: ${error.message}`, lowstorage_ERROR_CODES.FIND_ERROR);\n\t\t}\n\t}\n\n\t/**\n\t * Find the first document in the collection that matches the query.\n\t * @param {Object} [query={}] - The query to filter documents.\n\t * @returns {Promise} A Promise that resolves to the first matching document or null if no match is found.\n\t * @throws {lowstorageError} If there's an error.\n\t */\n\tasync findOne(query = {}) {\n\t\ttry {\n\t\t\tif (query === null) {\n\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Query cannot be null`, lowstorage_ERROR_CODES.INVALID_ARGUMENT);\n\t\t\t}\n\t\t\tconst result = await this.find(query, { limit: 1 });\n\t\t\treturn result[0] || null;\n\t\t} catch (error) {\n\t\t\tif (error instanceof lowstorageError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: FindOne operation failed: ${error.message}`, lowstorage_ERROR_CODES.FIND_ONE_ERROR);\n\t\t}\n\t}\n\n\t/**\n\t * Update a single document in the collection that matches the query.\n\t * @param {Object} [query={}] - The query to filter the document to update.\n\t * @param {Object} [update={}] - The update operations to apply to the matching document.\n\t * @returns {Promise} A Promise that resolves to number of documents updated.\n\t * @throws {lowstorageError} If the updateOne operation fails.\n\t * @throws {SchemaValidationError} If the schema is not defined for the collection.\n\t * @throws {DocumentValidationError} If the updated document is invalid.\n\t * @throws {S3OperationError} If the S3 operation fails.\n\t */\n\tasync update(query = {}, update = {}, options = {}) {\n\t\ttry {\n\t\t\tif (query === undefined || query === null || update === undefined || update === null) {\n\t\t\t\tthrow new lowstorageError(\n\t\t\t\t\t`${MODULE_NAME}: Query and update values are required for update`,\n\t\t\t\t\tlowstorage_ERROR_CODES.MISSING_ARGUMENT,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (!this._avroType) {\n\t\t\t\tthrow new SchemaValidationError(\n\t\t\t\t\t`${MODULE_NAME}: Schema is not defined for this collection`,\n\t\t\t\t\tlowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst data = await this._loadData();\n\t\t\tif (data.length === 0) return 0;\n\t\t\tlet updatedCount = 0;\n\t\t\tfor (let i = 0; i < data.length; i++) {\n\t\t\t\tif (matchesQuery(data[i], query)) {\n\t\t\t\t\tconst updatedDoc = { ...data[i], ...update };\n\t\t\t\t\tconst isValid = this._avroType.isValid(updatedDoc, {\n\t\t\t\t\t\terrorHook: errorValidationFn,\n\t\t\t\t\t\tnoUndeclaredFields: true,\n\t\t\t\t\t});\n\t\t\t\t\tif (isValid === true) {\n\t\t\t\t\t\tdata[i] = updatedDoc;\n\t\t\t\t\t\tupdatedCount++;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow new DocumentValidationError(\n\t\t\t\t\t\t\t`${MODULE_NAME}: Invalid document or schema`,\n\t\t\t\t\t\t\tlowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (updatedCount > 0) {\n\t\t\t\tconst success = await this._saveData(data);\n\t\t\t\tif (!success) {\n\t\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t\t}\n\t\t\t} else if (options.upsert) {\n\t\t\t\t// If upsert is true, we need to insert the document\n\t\t\t\tconst success = await this.insert(update);\n\t\t\t\tif (!success) {\n\t\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t\t}\n\t\t\t\tupdatedCount = 1;\n\t\t\t}\n\t\t\treturn updatedCount;\n\t\t} catch (error) {\n\t\t\tif (error instanceof S3OperationError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Update operation failed: ${error.message}`, lowstorage_ERROR_CODES.UPDATE_ERROR);\n\t\t}\n\t}\n\n\t/**\n\t * Update a single document in the collection that matches the query.\n\t * @param {Object} [query={}] - The query to filter the document to update.\n\t * @param {Object} [update={}] - The update operations to apply to the matching document.\n\t * @returns {Promise} A Promise that resolves to 1 if a document was updated, 0 otherwise.\n\t * @throws {lowstorageError} If the updateOne operation fails.\n\t * @throws {SchemaValidationError} If the schema is not defined for the collection.\n\t * @throws {DocumentValidationError} If the updated document is invalid.\n\t * @throws {S3OperationError} If the S3 operation fails.\n\t */\n\tasync updateOne(query = {}, update = {}, options = {}) {\n\t\ttry {\n\t\t\tif (query === undefined || query === null || update === undefined || update === null) {\n\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Query is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n\t\t\t}\n\t\t\tif (!this._avroType) {\n\t\t\t\tthrow new SchemaValidationError(\n\t\t\t\t\t`${MODULE_NAME}: Schema is not defined for this collection`,\n\t\t\t\t\tlowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst data = await this._loadData();\n\t\t\tif (data.length === 0) return 0;\n\t\t\tconst docIndex = data.findIndex((doc) => matchesQuery(doc, query));\n\n\t\t\tif (docIndex !== -1) {\n\t\t\t\tconst updatedDoc = { ...data[docIndex], ...update };\n\t\t\t\tconst isValid = this._avroType.isValid(updatedDoc, {\n\t\t\t\t\terrorHook: errorValidationFn,\n\t\t\t\t\tnoUndeclaredFields: true,\n\t\t\t\t});\n\t\t\t\tif (isValid === true) {\n\t\t\t\t\tdata[docIndex] = updatedDoc;\n\t\t\t\t\tconst success = await this._saveData(data);\n\t\t\t\t\tif (!success) {\n\t\t\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t\t\t}\n\t\t\t\t\treturn 1;\n\t\t\t\t} else {\n\t\t\t\t\tthrow new DocumentValidationError(`${MODULE_NAME}: Invalid document or schema`, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (options.upsert) {\n\t\t\t\t// If upsert is true, we need to insert the document\n\t\t\t\tconst success = await this.insert(update);\n\t\t\t\tif (!success) {\n\t\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t\t}\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t\treturn 0;\n\t\t} catch (error) {\n\t\t\tif (error instanceof lowstorageError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: UpdateOne operation failed: ${error.message}`, lowstorage_ERROR_CODES.UPDATE_ONE_ERROR);\n\t\t}\n\t}\n\n\t/**\n\t * Delete documents from the collection.\n\t * @param {Object} [query={}] - The query to filter documents to delete.\n\t * @returns {Promise} A Promise that resolves to the number of documents deleted.\n\t * @throws {lowstorageError} If the delete operation fails.\n\t * @throws {S3OperationError} If the S3 operation fails.\n\t */\n\tasync delete(query = {}) {\n\t\ttry {\n\t\t\tif (query === undefined || query === null) {\n\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Query is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n\t\t\t}\n\t\t\tconst data = await this._loadData();\n\t\t\tif (data.length === 0) return 0;\n\t\t\tconst initialLength = data.length;\n\n\t\t\tconst newData = data.filter((doc) => !matchesQuery(doc, query));\n\t\t\tconst success = await this._saveData(newData);\n\t\t\tif (!success) {\n\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to delete document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t}\n\t\t\treturn initialLength - newData.length;\n\t\t} catch (error) {\n\t\t\tif (error instanceof S3OperationError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Delete operation failed: ${error.message}`, lowstorage_ERROR_CODES.DELETE_ERROR);\n\t\t}\n\t}\n\n\t/**\n\t * Delete all documents from the collection.\n\t * @returns {Promise} A Promise that resolves to the number of documents deleted.\n\t * @throws {lowstorageError} If the delete operation fails.\n\t * @throws {S3OperationError} If the S3 operation fails.\n\t */\n\tasync deleteAll() {\n\t\ttry {\n\t\t\tconst data = await this._loadData();\n\t\t\tconst initialLength = data.length;\n\t\t\tconst success = await this._saveData([]);\n\t\t\tif (!success) {\n\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to delete document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t}\n\t\t\treturn initialLength;\n\t\t} catch (error) {\n\t\t\tif (error instanceof S3OperationError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Delete operation failed: ${error.message}`, lowstorage_ERROR_CODES.DELETE_ERROR);\n\t\t}\n\t}\n\n\t/**\n\t * Count the number of documents in the collection.\n\t * @param {Object} [query={}] - The query to filter documents.\n\t * @returns {Promise} A Promise that resolves to the number of documents in the collection.\n\t * @throws {lowstorageError} If the count operation fails.\n\t */\n\tasync count(query = {}) {\n\t\ttry {\n\t\t\tconst data = await this.find(query);\n\t\t\treturn data.length;\n\t\t} catch (error) {\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Count operation failed: ${error.message}`, lowstorage_ERROR_CODES.COUNT_ERROR);\n\t\t}\n\t}\n}\n\n// export default lowstorage;\nexport { lowstorage, lowstorageError, lowstorage_ERROR_CODES };\n", "'use strict';\n\nconst lowstorage_ERROR_CODES = {\n\tMISSING_ARGUMENT: 'MISSING_ARGUMENT',\n\tCOLLECTION_EXISTS: 'COLLECTION_EXISTS',\n\tCREATE_COLLECTION_ERROR: 'CREATE_COLLECTION_ERROR',\n\tRENAME_COLLECTION_ERROR: 'RENAME_COLLECTION_ERROR',\n\tREMOVE_COLLECTION_ERROR: 'REMOVE_COLLECTION_ERROR',\n\tUPDATE_COLLECTION_SCHEMA_ERROR: 'UPDATE_COLLECTION_SCHEMA_ERROR',\n\tCOLLECTION_NOT_FOUND: 'COLLECTION_NOT_FOUND',\n\tSCHEMA_VALIDATION_ERROR: 'SCHEMA_VALIDATION_ERROR',\n\tDOCUMENT_VALIDATION_ERROR: 'DOCUMENT_VALIDATION_ERROR',\n\tS3_OPERATION_ERROR: 'S3_OPERATION_ERROR',\n\tFIND_ERROR: 'FIND_ERROR',\n\tFIND_ONE_ERROR: 'FIND_ONE_ERROR',\n\tSAVE_DATA_ERROR: 'SAVE_DATA_ERROR',\n\tINSERT_ERROR: 'INSERT_ERROR',\n\tUPDATE_ERROR: 'UPDATE_ERROR',\n\tUPDATE_ONE_ERROR: 'UPDATE_ONE_ERROR',\n\tDELETE_ERROR: 'DELETE_ERROR',\n\tCOUNT_ERROR: 'COUNT_ERROR',\n\tUNKNOWN_ERROR: 'UNKNOWN_ERROR',\n};\nclass lowstorageError extends Error {\n\tconstructor(message, code = lowstorage_ERROR_CODES.UNKNOWN_ERROR) {\n\t\tsuper(`lowstorageError: ${message} :: code: ${code}`);\n\t\tthis.name = this.constructor.name;\n\t\tthis.code = code;\n\t\tError.captureStackTrace(this, this.constructor);\n\t}\n}\n\nclass CollectionNotFoundError extends lowstorageError {\n\tconstructor(collectionName) {\n\t\tsuper(`Collection ${collectionName} not found`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND);\n\t}\n}\n\nclass SchemaValidationError extends lowstorageError {\n\tconstructor(message) {\n\t\tsuper(message, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR);\n\t}\n}\n\nclass DocumentValidationError extends lowstorageError {\n\tconstructor(message) {\n\t\tsuper(message, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR);\n\t}\n}\n\nclass S3OperationError extends lowstorageError {\n\tconstructor(message, operation) {\n\t\tsuper(`S3 ${operation} operation failed: ${message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t}\n}\n\nexport {\n\tlowstorage_ERROR_CODES,\n\tlowstorageError,\n\tCollectionNotFoundError,\n\tSchemaValidationError,\n\tDocumentValidationError,\n\tS3OperationError,\n};\n", "'use strict';\n\nimport { randomUUID } from 'node:crypto';\n\nconst matchesQuery = (document, query) => {\n\treturn Object.keys(query).every((key) => document[key] === query[key]);\n};\n\nconst generateUUID = async () => {\n\tif (typeof randomUUID !== 'undefined' && typeof randomUUID === 'function') {\n\t\treturn randomUUID();\n\t}\n\tif (typeof crypto !== 'undefined' && typeof crypto === 'object' && typeof crypto.randomUUID === 'function') {\n\t\treturn crypto.randomUUID();\n\t}\n\treturn 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n\t\tvar r = (Math.random() * 16) | 0,\n\t\t\tv = c === 'x' ? r : (r & 0x3) | 0x8;\n\t\treturn v.toString(16);\n\t});\n};\n\nconst _getAvroType = (value, name = 'SubAutoGenerated') => {\n\tswitch (typeof value) {\n\t\tcase 'string':\n\t\t\tif (_isUUID(value)) {\n\t\t\t\treturn {\n\t\t\t\t\ttype: 'string',\n\t\t\t\t\tname: '_id',\n\t\t\t\t\tsize: 16,\n\t\t\t\t\tlogicalType: 'UUID',\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn 'string';\n\t\tcase 'number':\n\t\t\treturn Number.isInteger(value) ? 'int' : 'float';\n\t\tcase 'boolean':\n\t\t\treturn 'boolean';\n\t\tcase 'object':\n\t\t\tif (value === null) return 'null';\n\t\t\tif (Array.isArray(value)) return { type: 'array', items: _getAvroType(value[0]) };\n\t\t\treturn inferAvroType(value, name);\n\t\tdefault:\n\t\t\treturn 'string'; // Default to string for unknown types\n\t}\n};\n\nconst ensureIdFieldInSchema = (schema) => {\n\tconst idField = {\n\t\tname: '_id',\n\t\ttype: 'string',\n\t\tsize: 16,\n\t\tlogicalType: 'UUID',\n\t};\n\n\tif (schema.type === 'record') {\n\t\tconst hasIdField = schema.fields.some((field) => field.name === '_id');\n\t\tif (!hasIdField) {\n\t\t\tschema.fields.unshift(idField);\n\t\t}\n\t} else if (schema.type === 'array' && schema.items.type === 'record') {\n\t\tconst hasIdField = schema.items.fields.some((field) => field.name === '_id');\n\t\tif (!hasIdField) {\n\t\t\tschema.items.fields.unshift(idField);\n\t\t}\n\t}\n\treturn schema;\n};\n\nconst inferAvroType = (data, typeName = 'AutoGenerated') => {\n\tif (Array.isArray(data)) {\n\t\tdata = data[0];\n\t}\n\tconst fields = Object.entries(data).map(([name, value]) => {\n\t\treturn { name, type: _getAvroType(value, `${typeName}.${name}`) };\n\t});\n\n\tconst schema = {\n\t\ttype: 'record',\n\t\tname: typeName,\n\t\tfields: fields,\n\t};\n\n\t// Ensure the _id field is present in the schema\n\treturn ensureIdFieldInSchema(schema);\n};\n\nconst _isUUID = (str) => {\n\tconst uuidV4Regex = /^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i;\n\treturn uuidV4Regex.test(str);\n};\n\nexport { matchesQuery, generateUUID, inferAvroType, ensureIdFieldInSchema };\n"], - "mappings": "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", - "names": ["AWS_ALGORITHM", "AWS_REQUEST_TYPE", "S3_SERVICE", "LIST_TYPE", "UNSIGNED_PAYLOAD", "DEFAULT_STREAM_CONTENT_TYPE", "XML_CONTENT_TYPE", "JSON_CONTENT_TYPE", "SENSITIVE_KEYS_REDACTED", "HEADER_AMZ_CONTENT_SHA256", "HEADER_AMZ_DATE", "HEADER_HOST", "HEADER_AUTHORIZATION", "HEADER_CONTENT_TYPE", "HEADER_CONTENT_LENGTH", "HEADER_ETAG", "HEADER_LAST_MODIFIED", "ERROR_PREFIX", "ERROR_ACCESS_KEY_REQUIRED", "ERROR_SECRET_KEY_REQUIRED", "ERROR_ENDPOINT_REQUIRED", "ERROR_BUCKET_NAME_REQUIRED", "ERROR_KEY_REQUIRED", "ERROR_UPLOAD_ID_REQUIRED", "ERROR_PARTS_REQUIRED", "ERROR_INVALID_PART", "ERROR_DATA_BUFFER_REQUIRED", "ERROR_PREFIX_TYPE", "ERROR_MAX_KEYS_TYPE", "ERROR_DELIMITER_REQUIRED", "_createHmac", "_createHash", "expectArray", "encodeAsHex", "c", "uriEscape", "uriStr", "uriResourceEscape", "string", "S3", "accessKeyId", "secretAccessKey", "endpoint", "bucketName", "region", "maxRequestSizeInBytes", "requestAbortTimeout", "logger", "etag", "sanitizeETag", "props", "method", "key", "delimiter", "prefix", "maxKeys", "opts", "level", "message", "additionalData", "sanitize", "obj", "acc", "sanitizedData", "logEntry", "headers", "encodedKey", "url", "signedHeaders", "contentLength", "res", "filteredOpts", "conditionalHeaders", "error", "errorMessage", "keyPath", "query", "body", "datetime", "_hash", "canonicalHeaders", "canonicalRequest", "stringToSign", "signature", "authorizationHeader", "value", "credentialScope", "signingKey", "_hmac", "ifHeaders", "urlWithQuery", "responseBody", "lastModified", "data", "_parseXml", "output", "o", "i", "a", "_a", "_b", "_c", "wholeFile", "rangeFrom", "rangeTo", "fileType", "parsedResponse", "uploadId", "partNumber", "ETag", "parts", "part", "xmlBody", "toleratedStatusCodes", "errorBody", "errorCode", "queryParams", "dateStamp", "kDate", "kRegion", "kService", "content", "hashSum", "encoding", "hmacSum", "replaceChars", "m", "str", "unescapeXml", "json", "re", "match", "fullKey", "parsedValue", "avro", "lowstorage_ERROR_CODES", "lowstorageError", "message", "code", "CollectionNotFoundError", "collectionName", "SchemaValidationError", "DocumentValidationError", "S3OperationError", "operation", "randomUUID", "matchesQuery", "document", "query", "key", "generateUUID", "c", "r", "v", "_getAvroType", "value", "name", "_isUUID", "inferAvroType", "ensureIdFieldInSchema", "schema", "idField", "field", "data", "typeName", "fields", "str", "MODULE_NAME", "DEFAULT_DELIMITER", "PROJECT_DIR_PREFIX", "COL_SUFFIX", "CHUNG_1MB", "CHUNG_5MB", "errorValidationFn", "errorCode", "lowstorage_ERROR_CODES", "DocumentValidationError", "lowstorage", "options", "N", "avro", "args", "requiredFields", "field", "lowstorageError", "colName", "listed", "entry", "error", "S3OperationError", "schema", "data", "KEY", "exists2", "oldColName", "newColName", "CollectionNotFoundError", "oldCol", "oldColData", "autoCreate", "colPath", "avroType", "emptyData", "Collection", "SchemaValidationError", "s3", "dirPrefix", "safeWrite", "props", "CHUNK_SIZE", "etag", "wrapperType", "offset", "bufferArr", "repeat", "nextDataResponse", "nextDataBody", "bufferedData", "dataBuffer", "currentETag", "resp", "newETag", "doc", "items", "schemaWithId", "inferAvroType", "item", "generateUUID", "query", "start", "end", "matchesQuery", "update", "updatedCount", "i", "updatedDoc", "docIndex", "initialLength", "newData"] + "sourcesContent": ["'use strict';\n\n// Constants\nconst AWS_ALGORITHM = 'AWS4-HMAC-SHA256';\nconst AWS_REQUEST_TYPE = 'aws4_request';\nconst S3_SERVICE = 's3';\nconst LIST_TYPE = '2';\nconst UNSIGNED_PAYLOAD = 'UNSIGNED-PAYLOAD';\nconst DEFAULT_STREAM_CONTENT_TYPE = 'application/octet-stream';\nconst XML_CONTENT_TYPE = 'application/xml';\nconst JSON_CONTENT_TYPE = 'application/json';\n// List of keys that might contain sensitive information\nconst SENSITIVE_KEYS_REDACTED = ['accessKeyId', 'secretAccessKey', 'sessionToken', 'password'];\nconst MIN_MAX_REQUEST_SIZE_IN_BYTES = 5 * 1024 * 1024;\n\n// Headers\nconst HEADER_AMZ_CONTENT_SHA256 = 'x-amz-content-sha256';\nconst HEADER_AMZ_DATE = 'x-amz-date';\nconst HEADER_HOST = 'host';\nconst HEADER_AUTHORIZATION = 'Authorization';\nconst HEADER_CONTENT_TYPE = 'Content-Type';\nconst HEADER_CONTENT_LENGTH = 'Content-Length';\nconst HEADER_ETAG = 'etag';\nconst HEADER_LAST_MODIFIED = 'last-modified';\n\n// Error messages\nconst ERROR_PREFIX = 'ultralight-s3 Module: ';\nconst ERROR_ACCESS_KEY_REQUIRED = `${ERROR_PREFIX}accessKeyId must be a non-empty string`;\nconst ERROR_SECRET_KEY_REQUIRED = `${ERROR_PREFIX}secretAccessKey must be a non-empty string`;\nconst ERROR_ENDPOINT_REQUIRED = `${ERROR_PREFIX}endpoint must be a non-empty string`;\nconst ERROR_BUCKET_NAME_REQUIRED = `${ERROR_PREFIX}bucketName must be a non-empty string`;\nconst ERROR_KEY_REQUIRED = `${ERROR_PREFIX}key must be a non-empty string`;\nconst ERROR_UPLOAD_ID_REQUIRED = `${ERROR_PREFIX}uploadId must be a non-empty string`;\nconst ERROR_PARTS_REQUIRED = `${ERROR_PREFIX}parts must be a non-empty array`;\nconst ERROR_INVALID_PART = `${ERROR_PREFIX}Each part must have a partNumber (number) and ETag (string)`;\nconst ERROR_DATA_BUFFER_REQUIRED = `${ERROR_PREFIX}data must be a Buffer or string`;\n// const ERROR_PATH_REQUIRED = `${ERROR_PREFIX}path must be a string`;\nconst ERROR_PREFIX_TYPE = `${ERROR_PREFIX}prefix must be a string`;\nconst ERROR_MAX_KEYS_TYPE = `${ERROR_PREFIX}maxKeys must be a positive integer`;\nconst ERROR_DELIMITER_REQUIRED = `${ERROR_PREFIX}delimiter must be a string`;\n\n// const STATUS_CODES: Record = {\n// 200: 'OK',\n// 204: 'No Content',\n// 205: 'Reset Content',\n// 206: 'Partial Content',\n// 301: 'Moved Permanently',\n// 302: 'Found',\n// 400: 'Bad Request',\n// 401: 'Unauthorized',\n// 403: 'Forbidden',\n// 404: 'Not Found',\n// 418: \"I'm a Teapot\",\n// 428: 'Precondition Required',\n// 429: 'Too Many Requests',\n// 500: 'Internal Server Error',\n// 501: 'Not Implemented',\n// };\n\ninterface S3Config {\n accessKeyId: string;\n secretAccessKey: string;\n endpoint: string;\n bucketName: string;\n region?: string;\n maxRequestSizeInBytes?: number;\n requestAbortTimeout?: number;\n logger?: Logger;\n}\n\ndeclare global {\n interface Crypto {\n createHmac: (\n algorithm: string,\n key: string | Buffer,\n ) => {\n update: (data: string | Buffer) => void;\n digest: (encoding?: 'hex' | 'base64' | 'latin1') => string;\n };\n createHash: (algorithm: string) => {\n update: (data: string | Buffer) => void;\n digest: (encoding?: 'hex' | 'base64' | 'latin1') => string;\n };\n }\n}\n\ninterface Logger {\n info: (message: string, ...args: any[]) => void;\n warn: (message: string, ...args: any[]) => void;\n error: (message: string, ...args: any[]) => void;\n}\n\ninterface UploadPart {\n partNumber: number;\n ETag: string;\n}\n\ninterface CompleteMultipartUploadResult {\n Location: string;\n Bucket: string;\n Key: string;\n ETag: string;\n}\n\ntype HttpMethod = 'POST' | 'GET' | 'HEAD' | 'PUT' | 'DELETE';\n\n// false - Not found (404)\n// true - Found (200)\n// null - ETag mismatch (412)\ntype ExistResponseCode = false | true | null;\n\nlet _createHmac = crypto.createHmac || (await import('node:crypto')).createHmac;\nlet _createHash = crypto.createHash || (await import('node:crypto')).createHash;\n\nif (typeof _createHmac === 'undefined' && typeof _createHash === 'undefined') {\n console.error(\n 'ultralight-S3 Module: Crypto functions are not available, please report the issue with necessary description: https://github.com/sentienhq/ultralight-s3/issues',\n );\n}\n\nconst expectArray: { [key: string]: boolean } = {\n contents: true,\n};\n\nconst encodeAsHex = (c: string): string => `%${c.charCodeAt(0).toString(16).toUpperCase()}`;\n\nconst uriEscape = (uriStr: string): string => {\n return encodeURIComponent(uriStr).replace(/[!'()*]/g, encodeAsHex);\n};\n\nconst uriResourceEscape = (string: string): string => {\n return uriEscape(string).replace(/%2F/g, '/');\n};\n\n/**\n * S3 class for interacting with S3-compatible object storage services.\n * This class provides methods for common S3 operations such as uploading, downloading,\n * and deleting objects, as well as multipart uploads.\n *\n * @class\n * @example\n * const s3 = new S3({\n * accessKeyId: 'your-access-key',\n * secretAccessKey: 'your-secret-key',\n * endpoint: 'https://your-s3-endpoint.com',\n * bucketName: 'your-bucket-name',\n * region: 'us-east-1' // by default is auto\n * });\n *\n * // Upload a file\n * await s3.put('example.txt', 'Hello, World!');\n *\n * // Download a file\n * const content = await s3.get('example.txt');\n *\n * // Delete a file\n * await s3.delete('example.txt');\n */\nclass S3 {\n /**\n * Creates an instance of the S3 class.\n *\n * @constructor\n * @param {Object} config - Configuration options for the S3 instance.\n * @param {string} config.accessKeyId - The access key ID for authentication.\n * @param {string} config.secretAccessKey - The secret access key for authentication.\n * @param {string} config.endpoint - The endpoint URL of the S3-compatible service.\n * @param {string} [config.bucketName=''] - The name of the bucket to operate on.\n * @param {string} [config.region='auto'] - The region of the S3 service.\n * @param {number} [config.maxRequestSizeInBytes=5242880] - The maximum size of a single request in bytes (minimum for AWS S3 is 5MB).\n * @param {number} [config.requestAbortTimeout=undefined] - The timeout in milliseconds after which a request should be aborted (careful on streamed requests).\n * @param {Object} [config.logger=null] - A logger object with methods like info, warn, error.\n * @throws {TypeError} Will throw an error if required parameters are missing or of incorrect type.\n */\n private accessKeyId: string;\n private secretAccessKey: string;\n private endpoint: string;\n private bucketName: string;\n private region: string;\n private maxRequestSizeInBytes: number;\n private requestAbortTimeout?: number;\n private logger?: Logger;\n\n constructor({\n accessKeyId,\n secretAccessKey,\n endpoint,\n bucketName,\n region = 'auto',\n maxRequestSizeInBytes = MIN_MAX_REQUEST_SIZE_IN_BYTES,\n requestAbortTimeout = undefined,\n logger = undefined,\n }: S3Config) {\n this._validateConstructorParams(accessKeyId, secretAccessKey, endpoint, bucketName);\n this.accessKeyId = accessKeyId;\n this.secretAccessKey = secretAccessKey;\n this.endpoint = endpoint;\n this.bucketName = bucketName;\n this.region = region;\n this.maxRequestSizeInBytes = maxRequestSizeInBytes;\n this.requestAbortTimeout = requestAbortTimeout;\n this.logger = logger;\n }\n\n private _validateConstructorParams(\n accessKeyId: string,\n secretAccessKey: string,\n endpoint: string,\n bucketName: string,\n ): void {\n if (typeof accessKeyId !== 'string' || accessKeyId.trim().length === 0)\n throw new TypeError(ERROR_ACCESS_KEY_REQUIRED);\n if (typeof secretAccessKey !== 'string' || secretAccessKey.trim().length === 0)\n throw new TypeError(ERROR_SECRET_KEY_REQUIRED);\n if (typeof endpoint !== 'string' || endpoint.trim().length === 0) throw new TypeError(ERROR_ENDPOINT_REQUIRED);\n if (typeof bucketName !== 'string' || bucketName.trim().length === 0)\n throw new TypeError(ERROR_BUCKET_NAME_REQUIRED);\n }\n\n private _checkMethodHeadnGet(method: string): void {\n if (method !== 'GET' && method !== 'HEAD') {\n this._log('error', `${ERROR_PREFIX}method must be either GET or HEAD`);\n throw new Error('method must be either GET or HEAD');\n }\n }\n\n private _checkKey(key: string): void {\n if (typeof key !== 'string' || key.trim().length === 0) {\n this._log('error', ERROR_KEY_REQUIRED);\n throw new TypeError(ERROR_KEY_REQUIRED);\n }\n }\n\n private _checkDelimiter(delimiter: string): void {\n if (typeof delimiter !== 'string' || delimiter.trim().length === 0) {\n this._log('error', ERROR_DELIMITER_REQUIRED);\n throw new TypeError(ERROR_DELIMITER_REQUIRED);\n }\n }\n\n private _checkPrefix(prefix: string): void {\n if (typeof prefix !== 'string') {\n this._log('error', ERROR_PREFIX_TYPE);\n throw new TypeError(ERROR_PREFIX_TYPE);\n }\n }\n\n private _checkMaxKeys(maxKeys: number): void {\n if (typeof maxKeys !== 'number' || maxKeys <= 0) {\n this._log('error', ERROR_MAX_KEYS_TYPE);\n throw new TypeError(ERROR_MAX_KEYS_TYPE);\n }\n }\n\n private _checkOpts(opts: Record): void {\n if (typeof opts !== 'object') {\n this._log('error', `${ERROR_PREFIX}opts must be an object`);\n throw new TypeError(`${ERROR_PREFIX}opts must be an object`);\n }\n }\n\n /**\n * Internal method to log messages with sanitized sensitive information.\n * @param {string} level - The log level (e.g., 'info', 'warn', 'error').\n * @param {string} message - The message to log.\n * @param {Object} [additionalData={}] - Additional data to include in the log.\n * @private\n */\n private _log(\n level: 'info' | 'warn' | 'error',\n message: string,\n additionalData: Record | string = {},\n ): void {\n if (this.logger && typeof this.logger[level] === 'function') {\n // Function to recursively sanitize an object\n const sanitize = (obj: any): any => {\n if (typeof obj !== 'object' || obj === null) {\n return obj;\n }\n return Object.keys(obj).reduce(\n (acc: any, key) => {\n if (SENSITIVE_KEYS_REDACTED.includes(key.toLowerCase())) {\n acc[key] = '[REDACTED]';\n } else if (typeof obj[key] === 'object' && obj[key] !== null) {\n acc[key] = sanitize(obj[key]);\n } else {\n acc[key] = obj[key];\n }\n return acc;\n },\n Array.isArray(obj) ? [] : {},\n );\n };\n\n // Sanitize the additional data\n const sanitizedData = sanitize(additionalData);\n // Prepare the log entry\n const logEntry = {\n timestamp: new Date().toISOString(),\n level,\n message,\n ...sanitizedData,\n // Include some general context, but sanitize sensitive parts\n context: sanitize({\n bucketName: this.bucketName,\n region: this.region,\n endpoint: this.endpoint,\n // Only include the first few characters of the access key, if it exists\n accessKeyId: this.accessKeyId ? `${this.accessKeyId.substring(0, 4)}...` : undefined,\n }),\n };\n\n // Log the sanitized entry\n this.logger[level](logEntry);\n }\n }\n\n getBucketName = () => this.bucketName;\n setBucketName = (bucketName: string) => {\n this.bucketName = bucketName;\n };\n getRegion = () => this.region;\n setRegion = (region: string) => {\n this.region = region;\n };\n getEndpoint = () => this.endpoint;\n setEndpoint = (endpoint: string) => {\n this.endpoint = endpoint;\n };\n getMaxRequestSizeInBytes = () => this.maxRequestSizeInBytes;\n setMaxRequestSizeInBytes = (maxRequestSizeInBytes: number) => {\n this.maxRequestSizeInBytes = maxRequestSizeInBytes;\n };\n sanitizeETag = (etag: string): string => sanitizeETag(etag);\n\n getProps = () => ({\n accessKeyId: this.accessKeyId,\n secretAccessKey: this.secretAccessKey,\n region: this.region,\n bucket: this.bucketName,\n endpoint: this.endpoint,\n maxRequestSizeInBytes: this.maxRequestSizeInBytes,\n requestAbortTimeout: this.requestAbortTimeout,\n logger: this.logger,\n });\n setProps = (props: S3Config) => {\n this._validateConstructorParams(props.accessKeyId, props.secretAccessKey, props.bucketName, props.endpoint);\n this.accessKeyId = props.accessKeyId;\n this.secretAccessKey = props.secretAccessKey;\n this.region = props.region || 'auto';\n this.bucketName = props.bucketName;\n this.endpoint = props.endpoint;\n this.maxRequestSizeInBytes = props.maxRequestSizeInBytes || MIN_MAX_REQUEST_SIZE_IN_BYTES;\n this.requestAbortTimeout = props.requestAbortTimeout;\n this.logger = props.logger;\n };\n\n /**\n * Get the content length of an object.\n * @param {string} key - The key of the object.\n * @returns {Promise} The content length of the object in bytes.\n * @throws {TypeError} If the key is not a non-empty string.\n */\n async getContentLength(key: string): Promise {\n this._checkKey(key);\n const headers = {\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('HEAD', encodedKey, {}, headers, '');\n const res = await this._sendRequest(url, 'HEAD', signedHeaders);\n const contentLength = res.headers.get(HEADER_CONTENT_LENGTH);\n return contentLength ? parseInt(contentLength, 10) : 0;\n }\n\n /**\n * Check if a bucket exists.\n * @returns {Promise} True if the bucket exists, false otherwise.\n */\n async bucketExists(): Promise {\n const headers = {\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n const { url, headers: signedHeaders } = await this._sign('HEAD', '', {}, headers, '');\n const res = await this._sendRequest(url, 'HEAD', signedHeaders);\n if (res.ok && res.status === 200) {\n return true;\n }\n return false;\n }\n\n // TBD\n // async createBucket(bucketName) {\n // const xmlBody = `\n // \n // \n // ${this.region}\n // \n // `;\n // const headers = {\n // [HEADER_CONTENT_TYPE]: XML_CONTENT_TYPE,\n // [HEADER_CONTENT_LENGTH]: Buffer.byteLength(xmlBody).toString(),\n // [HEADER_AMZ_CONTENT_SHA256]: await _hash(xmlBody),\n // };\n // const encodedKey = encodeURI(bucketName);\n // const { url, headers: signedHeaders } = await this._sign('PUT', encodedKey, {}, headers, '');\n // const res = await this._sendRequest(url, 'PUT', signedHeaders);\n // if (res.ok && res.status === 200) {\n // return true;\n // }\n // return false;\n // }\n\n /**\n * Check if a file exists in the bucket.\n * @param {string} key - The key of the object.\n * @param {Object} [opts={}] - Additional options for the fileExists operation.\n * @returns {Promise} True if the file exists, false otherwise. 0 - Not found (404), 1 - Found (200), 2 - ETag mismatch (412).\n * @throws {TypeError} If the key is not a non-empty string.\n */\n async fileExists(key: string, opts: Record = {}): Promise {\n this._checkKey(key);\n const { filteredOpts, conditionalHeaders } = this._filterIfHeaders(opts);\n const headers = { [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD, ...conditionalHeaders };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('HEAD', encodedKey, filteredOpts, headers, '');\n try {\n const res = await this._sendRequest(url, 'HEAD', signedHeaders, '', [200, 404, 412, 304]);\n if (res.status === 404) {\n return false;\n }\n if (res.status === 412 || res.status === 304) {\n return null;\n }\n if (res.ok && res.status === 200) return true;\n else this._handleErrorResponse(res);\n return false; // should never happen\n } catch (error: unknown) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n this._log('error', `${ERROR_PREFIX}Failed to check if file exists: ${errorMessage}`);\n throw new Error(`${ERROR_PREFIX}Failed to check if file exists: ${errorMessage}`);\n }\n }\n private async _sign(\n method: HttpMethod,\n keyPath: string,\n query: Object,\n headers: Record,\n body: string | Buffer,\n ): Promise<{ url: string; headers: Record }> {\n const datetime = new Date().toISOString().replace(/[:-]|\\.\\d{3}/g, '');\n const url =\n typeof keyPath === 'string' && keyPath.length > 0 ? new URL(keyPath, this.endpoint) : new URL(this.endpoint);\n url.pathname = `/${encodeURI(this.bucketName)}${url.pathname}`;\n headers[HEADER_AMZ_CONTENT_SHA256] = body ? await _hash(body) : UNSIGNED_PAYLOAD;\n headers[HEADER_AMZ_DATE] = datetime;\n headers[HEADER_HOST] = url.host;\n const canonicalHeaders = this._buildCanonicalHeaders(headers);\n const signedHeaders = Object.keys(headers)\n .map(key => key.toLowerCase())\n .sort()\n .join(';');\n\n const canonicalRequest = await this._buildCanonicalRequest(\n method,\n url,\n query,\n canonicalHeaders,\n signedHeaders,\n body,\n );\n const stringToSign = await this._buildStringToSign(datetime, canonicalRequest);\n const signature = await this._calculateSignature(datetime, stringToSign);\n const authorizationHeader = this._buildAuthorizationHeader(datetime, signedHeaders, signature);\n headers[HEADER_AUTHORIZATION] = authorizationHeader;\n return { url: url.toString(), headers };\n }\n\n private _buildCanonicalHeaders(headers: Record): string {\n return Object.entries(headers)\n .map(([key, value]) => `${key.toLowerCase()}:${String(value).trim()}`)\n .sort()\n .join('\\n');\n }\n\n async _buildCanonicalRequest(\n method: HttpMethod,\n url: URL,\n query: Object,\n canonicalHeaders: string,\n signedHeaders: string,\n body: string | Buffer,\n ): Promise {\n return [\n method,\n url.pathname,\n this._buildCanonicalQueryString(query),\n `${canonicalHeaders}\\n`,\n signedHeaders,\n body ? await _hash(body) : UNSIGNED_PAYLOAD,\n ].join('\\n');\n }\n\n async _buildStringToSign(datetime: string, canonicalRequest: string): Promise {\n const credentialScope = [datetime.slice(0, 8), this.region, S3_SERVICE, AWS_REQUEST_TYPE].join('/');\n return [AWS_ALGORITHM, datetime, credentialScope, await _hash(canonicalRequest)].join('\\n');\n }\n\n async _calculateSignature(datetime: string, stringToSign: string): Promise {\n const signingKey = await this._getSignatureKey(datetime.slice(0, 8));\n return _hmac(signingKey, stringToSign, 'hex');\n }\n\n private _buildAuthorizationHeader(datetime: string, signedHeaders: string, signature: string): string {\n const credentialScope = [datetime.slice(0, 8), this.region, S3_SERVICE, AWS_REQUEST_TYPE].join('/');\n return [\n `${AWS_ALGORITHM} Credential=${this.accessKeyId}/${credentialScope}`,\n `SignedHeaders=${signedHeaders}`,\n `Signature=${signature}`,\n ].join(', ');\n }\n\n private _filterIfHeaders(opts: Record): {\n filteredOpts: Record;\n conditionalHeaders: Record;\n } {\n const filteredOpts: Record = {};\n const conditionalHeaders: Record = {};\n const ifHeaders = ['if-match', 'if-none-match', 'if-modified-since', 'if-unmodified-since'];\n\n for (const [key, value] of Object.entries(opts)) {\n if (ifHeaders.includes(key)) {\n conditionalHeaders[key] = value;\n } else {\n filteredOpts[key] = value;\n }\n }\n\n return { filteredOpts, conditionalHeaders };\n }\n /**\n * List objects in the bucket.\n * @param {string} [delimiter='/'] - The delimiter to use for grouping objects in specific path.\n * @param {string} [prefix=''] - The prefix to filter objects in specific path.\n * @param {number} [maxKeys=1000] - The maximum number of keys to return.\n * @param {string} [method='GET'] - The HTTP method to use (GET or HEAD).\n * @param {Object} [opts={}] - Additional options for the list operation.\n * @returns {Promise} The list of objects or object metadata.\n * @throws {TypeError} If any of the parameters are of incorrect type.\n */\n async list(\n delimiter: string = '/',\n prefix: string = '',\n maxKeys: number = 1000,\n method: HttpMethod = 'GET',\n opts: Object = {},\n ): Promise> {\n this._checkDelimiter(delimiter);\n this._checkPrefix(prefix);\n this._checkMaxKeys(maxKeys);\n this._checkMethodHeadnGet(method);\n this._checkOpts(opts);\n this._log('info', `Listing objects in ${prefix}`);\n\n const query = {\n 'list-type': LIST_TYPE,\n 'max-keys': String(maxKeys),\n ...opts,\n } as { [key: string]: any };\n if (prefix.length > 0) {\n query['prefix'] = prefix;\n }\n const headers = {\n [HEADER_CONTENT_TYPE]: JSON_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n const encodedKey = delimiter === '/' ? delimiter : uriEscape(delimiter);\n const { url, headers: signedHeaders } = await this._sign('GET', encodedKey, query, headers, '');\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n const res = await this._sendRequest(urlWithQuery, 'GET', signedHeaders);\n const responseBody = await res.text();\n\n if (method === 'HEAD') {\n const contentLength = res.headers.get(HEADER_CONTENT_LENGTH);\n const lastModified = res.headers.get(HEADER_LAST_MODIFIED);\n const etag = res.headers.get(HEADER_ETAG);\n\n return {\n size: contentLength ? +contentLength : undefined,\n mtime: lastModified ? new Date(lastModified) : undefined,\n ETag: etag || undefined,\n };\n }\n\n const data = _parseXml(responseBody);\n const output = data.listBucketResult || data.error || data;\n return output.contents || output;\n }\n\n /**\n * List multipart uploads in the bucket.\n * @param {string} [delimiter='/'] - The delimiter to use for grouping objects in specific path.\n * @param {string} [prefix=''] - The prefix to filter objects in specific path.\n * @param {string} [method='GET'] - The HTTP method to use (GET or HEAD).\n * @param {Object} [opts={}] - Additional options for the list operation.\n * @returns {Promise} The list of objects or object metadata.\n * @throws {TypeError} If any of the parameters are of incorrect type.\n */\n async listMultiPartUploads(\n delimiter: string = '/',\n prefix: string = '',\n method: HttpMethod = 'GET',\n opts: Object = {},\n ): Promise {\n this._checkDelimiter(delimiter);\n this._checkPrefix(prefix);\n this._checkMethodHeadnGet(method);\n this._checkOpts(opts);\n this._log('info', `Listing multipart uploads in ${prefix}`);\n\n const query = {\n uploads: '',\n ...opts,\n } as Record;\n const headers = {\n [HEADER_CONTENT_TYPE]: JSON_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n const encodedKey = delimiter === '/' ? delimiter : uriEscape(delimiter);\n const { url, headers: signedHeaders } = await this._sign('GET', encodedKey, query, headers, '');\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n const res = await this._sendRequest(urlWithQuery, 'GET', signedHeaders);\n const responseBody = await res.text();\n\n if (method === 'HEAD') {\n return {\n size: +(res.headers.get(HEADER_CONTENT_LENGTH) ?? '0'),\n mtime: new Date(res.headers.get(HEADER_LAST_MODIFIED) ?? ''),\n ETag: res.headers.get(HEADER_ETAG) ?? '',\n };\n }\n\n const data = _parseXml(responseBody);\n const output = data.listMultipartUploadsResult || data.error || data;\n return output.uploads || output;\n }\n\n /**\n * Get an object from the bucket.\n * @param {string} key - The key of the object to get.\n * @param {Object} [opts={}] - Additional options for the get operation.\n * @returns {Promise} The content of the object. If the object does not exist, null will be returned.\n */\n async get(key: string, opts: Record = {}): Promise {\n this._checkKey(key);\n this._log('info', `Getting object ${key}`);\n const { filteredOpts, conditionalHeaders } = this._filterIfHeaders(opts);\n const headers = {\n [HEADER_CONTENT_TYPE]: JSON_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n ...conditionalHeaders,\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('GET', encodedKey, filteredOpts, headers, '');\n const res = await this._sendRequest(url, 'GET', signedHeaders, '', [200, 404, 412, 304]);\n if (res.status === 404 || res.status === 412 || res.status === 304) {\n this._log('error', `Failed to get object. Status: ${res.status}`);\n return null;\n }\n if (!res.ok) {\n this._log('error', `Failed to get object. Status: ${res.status}`);\n throw new Error(`Failed to get object. Status: ${res.status}`);\n }\n return res.text();\n }\n\n /**\n *\n * @param {string} key - The key of the object to get.\n * @param {Object} [opts={}] - Additional options for the get operation.\n * @returns {Promise<{ etag: string|null; data: string|null }>} The content of the object. If the object does not exist, etag and data will be null.\n */\n async getObjectWithETag(\n key: string,\n opts: Record = {},\n ): Promise<{ etag: string | null; data: string | null }> {\n this._checkKey(key);\n this._log('info', `Getting object ${key}`);\n const { filteredOpts, conditionalHeaders } = this._filterIfHeaders(opts);\n const headers = {\n [HEADER_CONTENT_TYPE]: JSON_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n ...conditionalHeaders,\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('GET', encodedKey, filteredOpts, headers, '');\n try {\n const res = await this._sendRequest(url, 'GET', signedHeaders, '', [200, 404, 412, 304]);\n if (res.status === 404 || res.status === 412 || res.status === 304) {\n this._log('error', `Failed to get object. Status: ${res.status}`);\n return { etag: null, data: null };\n }\n if (!res.ok) {\n this._log('error', `Failed to get object. Status: ${res.status}`);\n throw new Error(`Failed to get object. Status: ${res.status}`);\n }\n\n const etag = res.headers.get('etag');\n if (!etag) {\n throw new Error('ETag not found in response headers');\n }\n const data = await res.text();\n return { etag: sanitizeETag(etag), data };\n } catch (error) {\n this._log('error', `Error getting object ${key} with ETag: ${error}`);\n throw error;\n }\n }\n\n /**\n * Get the ETag of an object.\n * @param {string} key - The key of the object to get.\n * @param {Object} [opts={}] - Additional options for the get operation.\n * @returns {Promise} The ETag of the object or null if the object etag does not match.\n */\n async getEtag(key: string, opts: Record = {}): Promise {\n this._checkKey(key);\n this._log('info', `Getting etag object ${key}`);\n const { filteredOpts, conditionalHeaders } = this._filterIfHeaders(opts);\n const headers = {\n [HEADER_CONTENT_TYPE]: JSON_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n ...conditionalHeaders,\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('HEAD', encodedKey, filteredOpts, headers, '');\n\n const res = await this._sendRequest(url, 'HEAD', signedHeaders, '', [200, 412, 304]);\n this._log('info', `Response status: ${(res.status, res.statusText)}`);\n // etag does not match\n if (res.status === 412 || res.status === 304) {\n return null;\n }\n\n const etag = res.headers.get('etag');\n if (!etag) {\n this._log('error', `ETag not found in response headers`);\n throw new Error(`ETag not found in response headers`);\n }\n return sanitizeETag(etag);\n }\n\n /**\n * Get a response of an object from the bucket.\n * @param {string} key - The key of the object to get.\n * @param {boolean} [wholeFile=true] - Whether to get the whole file or a part.\n * @param {number} [rangeFrom=0] - The range from to get if not getting the whole file.\n * @param {number} [rangeTo=this.maxRequestSizeInBytes] - The range to to get if not getting the whole file. Note: rangeTo is inclusive.\n * @param {Object} [opts={}] - Additional options for the get operation.\n * @returns {Promise} Response of the object content. Use readableStream() to get the stream from .body.\n */\n async getResponse(\n key: string,\n wholeFile: boolean = true,\n rangeFrom: number = 0,\n rangeTo: number = this.maxRequestSizeInBytes,\n opts: Record = {},\n ): Promise {\n this._checkKey(key);\n const { filteredOpts, conditionalHeaders } = this._filterIfHeaders({ ...opts });\n const headers = {\n [HEADER_CONTENT_TYPE]: JSON_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n ...(wholeFile ? {} : { range: `bytes=${rangeFrom}-${rangeTo - 1}` }),\n ...conditionalHeaders,\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('GET', encodedKey, filteredOpts, headers, '');\n const urlWithQuery = `${url}?${new URLSearchParams(filteredOpts)}`;\n\n return this._sendRequest(urlWithQuery, 'GET', signedHeaders);\n }\n\n /**\n * Put an object into the bucket.\n * @param {string} key - The key of the object to put. To create a folder, include a trailing slash.\n * @param {Buffer|string} data - The content of the object to put.\n * @returns {Promise} The response from the put operation.\n * @throws {TypeError} If the key is not a non-empty string or data is not a Buffer or string.\n */\n async put(key: string, data: string | Buffer): Promise {\n this._checkKey(key);\n if (!(data instanceof Buffer || typeof data === 'string')) {\n this._log('error', ERROR_DATA_BUFFER_REQUIRED);\n throw new TypeError(ERROR_DATA_BUFFER_REQUIRED);\n }\n // const encodedKey = encodeURIComponent(key);\n this._log('info', `Uploading object ${key}`);\n const contentLength = typeof data === 'string' ? Buffer.byteLength(data) : data.length;\n const headers = {\n [HEADER_CONTENT_LENGTH]: contentLength,\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('PUT', encodedKey, {}, headers, data);\n const res = await this._sendRequest(url, 'PUT', signedHeaders, data);\n return res;\n }\n\n /**\n * Initiate a multipart upload.\n * @param {string} key - The key of the object to upload.\n * @param {string} [fileType='application/octet-stream'] - The MIME type of the file.\n * @returns {Promise} The upload ID for the multipart upload.\n * @throws {TypeError} If the key is not a non-empty string or fileType is not a string.\n * @throws {Error} If the multipart upload initiation fails.\n */\n async getMultipartUploadId(key: string, fileType: string = DEFAULT_STREAM_CONTENT_TYPE): Promise {\n this._checkKey(key);\n if (typeof fileType !== 'string') {\n this._log('error', `${ERROR_PREFIX}fileType must be a string`);\n throw new TypeError(`${ERROR_PREFIX}fileType must be a string`);\n }\n this._log('info', `Initiating multipart upload for object ${key}`);\n const query = { uploads: '' };\n const headers = {\n [HEADER_CONTENT_TYPE]: fileType,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('POST', encodedKey, query, headers, '');\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n\n const res = await this._sendRequest(urlWithQuery, 'POST', signedHeaders);\n const responseBody = await res.text();\n const parsedResponse = _parseXml(responseBody);\n\n if (\n typeof parsedResponse === 'object' &&\n parsedResponse !== null &&\n 'error' in parsedResponse &&\n typeof parsedResponse.error === 'object' &&\n parsedResponse.error !== null &&\n 'message' in parsedResponse.error\n ) {\n const errorMessage = String(parsedResponse.error.message);\n this._log('error', `${ERROR_PREFIX}Failed to abort multipart upload: ${errorMessage}`);\n throw new Error(`${ERROR_PREFIX}Failed to abort multipart upload: ${errorMessage}`);\n }\n\n if (typeof parsedResponse === 'object' && parsedResponse !== null) {\n if (!parsedResponse.initiateMultipartUploadResult || !parsedResponse.initiateMultipartUploadResult.uploadId) {\n this._log('error', `${ERROR_PREFIX}Failed to create multipart upload: no uploadId in response`);\n throw new Error(`${ERROR_PREFIX}Failed to create multipart upload: Missing upload ID in response`);\n }\n\n return parsedResponse.initiateMultipartUploadResult.uploadId;\n } else {\n this._log('error', `${ERROR_PREFIX}Failed to create multipart upload: unexpected response format`);\n throw new Error(`${ERROR_PREFIX}Failed to create multipart upload: Unexpected response format`);\n }\n }\n\n /**\n * Upload a part in a multipart upload.\n * @param {string} key - The key of the object being uploaded.\n * @param {Buffer|string} data - The content of the part.\n * @param {string} uploadId - The upload ID of the multipart upload.\n * @param {number} partNumber - The part number.\n * @param {Object} [opts={}] - Additional options for the upload.\n * @returns {Promise} The ETag and part number of the uploaded part.\n * @throws {TypeError} If any of the parameters are of incorrect type.\n */\n async uploadPart(\n key: string,\n data: Buffer | string,\n uploadId: string,\n partNumber: number,\n opts: Object = {},\n ): Promise {\n this._validateUploadPartParams(key, data, uploadId, partNumber, opts);\n const query = { uploadId, partNumber, ...opts } as { [key: string]: any };\n const headers = {\n [HEADER_CONTENT_LENGTH]: data.length,\n } as { [key: string]: any };\n\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('PUT', encodedKey, query, headers, data);\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n\n const res = await this._sendRequest(urlWithQuery, 'PUT', signedHeaders, data);\n const ETag = sanitizeETag(res.headers.get('etag') || '');\n return { partNumber, ETag };\n }\n\n private _validateUploadPartParams(\n key: string,\n data: Buffer | string,\n uploadId: string,\n partNumber: number,\n opts: Object,\n ) {\n this._checkKey(key);\n if (!(data instanceof Buffer || typeof data === 'string')) {\n this._log('error', ERROR_DATA_BUFFER_REQUIRED);\n throw new TypeError(ERROR_DATA_BUFFER_REQUIRED);\n }\n if (typeof uploadId !== 'string' || uploadId.trim().length === 0) {\n this._log('error', ERROR_UPLOAD_ID_REQUIRED);\n throw new TypeError(ERROR_UPLOAD_ID_REQUIRED);\n }\n if (!Number.isInteger(partNumber) || partNumber <= 0) {\n this._log('error', `${ERROR_PREFIX}partNumber must be a positive integer`);\n throw new TypeError(`${ERROR_PREFIX}partNumber must be a positive integer`);\n }\n this._checkOpts(opts);\n }\n\n /**\n * Complete a multipart upload.\n * @param {string} key - The key of the object being uploaded.\n * @param {string} uploadId - The upload ID of the multipart upload.\n * @param {Array} parts - An array of objects containing PartNumber and ETag for each part.\n * @returns {Promise} The result of the complete multipart upload operation.\n * @throws {TypeError} If any of the parameters are of incorrect type.\n * @throws {Error} If the complete multipart upload operation fails.\n */\n async completeMultipartUpload(\n key: string,\n uploadId: string,\n parts: Array,\n ): Promise {\n this._checkKey(key);\n if (typeof uploadId !== 'string' || uploadId.trim().length === 0) {\n this._log('error', ERROR_UPLOAD_ID_REQUIRED);\n throw new TypeError(ERROR_UPLOAD_ID_REQUIRED);\n }\n if (!Array.isArray(parts) || parts.length === 0) {\n this._log('error', ERROR_PARTS_REQUIRED);\n throw new TypeError(ERROR_PARTS_REQUIRED);\n }\n if (!parts.every(part => typeof part.partNumber === 'number' && typeof part.ETag === 'string')) {\n this._log('error', ERROR_INVALID_PART);\n throw new TypeError(ERROR_INVALID_PART);\n }\n this._log('info', `Complete multipart upload ${uploadId} for object ${key}`);\n const query = { uploadId };\n const xmlBody = this._buildCompleteMultipartUploadXml(parts);\n const headers = {\n [HEADER_CONTENT_TYPE]: XML_CONTENT_TYPE,\n [HEADER_CONTENT_LENGTH]: Buffer.byteLength(xmlBody).toString(),\n [HEADER_AMZ_CONTENT_SHA256]: await _hash(xmlBody),\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('POST', encodedKey, query, headers, xmlBody);\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n\n const res = await this._sendRequest(urlWithQuery, 'POST', signedHeaders, xmlBody);\n const responseBody = await res.text();\n const parsedResponse = _parseXml(responseBody);\n\n if (\n typeof parsedResponse === 'object' &&\n parsedResponse !== null &&\n 'error' in parsedResponse &&\n typeof parsedResponse.error === 'object' &&\n parsedResponse.error !== null &&\n 'message' in parsedResponse.error\n ) {\n const errorMessage = String(parsedResponse.error.message);\n this._log('error', `${ERROR_PREFIX}Failed to abort multipart upload: ${errorMessage}`);\n throw new Error(`${ERROR_PREFIX}Failed to abort multipart upload: ${errorMessage}`);\n }\n\n return parsedResponse.completeMultipartUploadResult;\n }\n\n /**\n * Aborts a multipart upload.\n * @param {string} key - The key of the object being uploaded.\n * @param {string} uploadId - The ID of the multipart upload to abort.\n * @returns {Promise} - A promise that resolves to the abort response.\n * @throws {Error} If the abort operation fails.\n */\n async abortMultipartUpload(key: string, uploadId: string): Promise {\n // Input validation\n this._checkKey(key);\n if (typeof uploadId !== 'string' || uploadId.trim().length === 0) {\n this._log('error', ERROR_UPLOAD_ID_REQUIRED);\n throw new TypeError(ERROR_UPLOAD_ID_REQUIRED);\n }\n\n this._log('info', `Aborting multipart upload ${uploadId} for object ${key}`);\n\n // Prepare the request\n const query = { uploadId };\n const headers = {\n [HEADER_CONTENT_TYPE]: XML_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n\n try {\n // Sign and send the request\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('DELETE', encodedKey, query, headers, '');\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n\n const res = await this._sendRequest(urlWithQuery, 'DELETE', signedHeaders);\n\n // Check for successful response\n if (res.ok) {\n const responseBody = await res.text();\n const parsedResponse = _parseXml(responseBody);\n\n if (\n typeof parsedResponse === 'object' &&\n parsedResponse !== null &&\n 'error' in parsedResponse &&\n typeof parsedResponse.error === 'object' &&\n parsedResponse.error !== null &&\n 'message' in parsedResponse.error\n ) {\n const errorMessage = String(parsedResponse.error.message);\n this._log('error', `${ERROR_PREFIX}Failed to abort multipart upload: ${errorMessage}`);\n throw new Error(`${ERROR_PREFIX}Failed to abort multipart upload: ${errorMessage}`);\n }\n\n return {\n status: 'Aborted',\n key,\n uploadId,\n response: parsedResponse,\n };\n } else {\n this._log('error', `${ERROR_PREFIX}Abort request failed with status ${res.status}`);\n throw new Error(`${ERROR_PREFIX}Abort request failed with status ${res.status}`);\n }\n } catch (error: unknown) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n this._log('error', `${ERROR_PREFIX}Failed to abort multipart upload for key ${key}: ${errorMessage}`);\n throw new Error(`${ERROR_PREFIX}Failed to abort multipart upload for key ${key}: ${errorMessage}`);\n }\n }\n\n private _buildCompleteMultipartUploadXml(parts: Array): string {\n return `\n \n ${parts\n .map(\n part => `\n \n ${part.partNumber}\n ${part.ETag}\n \n `,\n )\n .join('')}\n \n `;\n }\n\n /**\n * Delete an object from the bucket.\n * @param {string} key - The key of the object to delete.\n * @returns {Promise} The response from the delete operation. True if the delete operation was successful, false otherwise. Note: The delete operation may return a 204 status code even if the object was not found.\n */\n async delete(key: string): Promise {\n this._checkKey(key);\n this._log('info', `Deleting object ${key}`);\n const headers = {\n [HEADER_CONTENT_TYPE]: JSON_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('DELETE', encodedKey, {}, headers, '');\n const res = await this._sendRequest(url, 'DELETE', signedHeaders);\n if (res.status === 204 || res.status === 200) {\n return true;\n }\n return false;\n }\n\n async _sendRequest(\n url: string,\n method: HttpMethod,\n headers: Record,\n body?: string | Buffer,\n toleratedStatusCodes: number[] = [],\n ): Promise {\n this._log('info', `Sending ${method} request to ${url}, headers: ${JSON.stringify(headers)}`);\n const res = await fetch(url, {\n method,\n headers,\n body: ['GET', 'HEAD'].includes(method) ? undefined : body,\n signal: this.requestAbortTimeout !== undefined ? AbortSignal.timeout(this.requestAbortTimeout) : undefined,\n });\n\n if (!res.ok && !toleratedStatusCodes.includes(res.status)) {\n await this._handleErrorResponse(res);\n }\n\n return res;\n }\n\n async _handleErrorResponse(res: Response) {\n const errorBody = await res.text();\n const errorCode = res.headers.get('x-amz-error-code') || 'Unknown';\n const errorMessage = res.headers.get('x-amz-error-message') || res.statusText;\n this._log(\n 'error',\n `${ERROR_PREFIX}Request failed with status ${res.status}: ${errorCode} - ${errorMessage},err body: ${errorBody}`,\n );\n throw new Error(\n `${ERROR_PREFIX}Request failed with status ${res.status}: ${errorCode} - ${errorMessage}, err body: ${errorBody}`,\n );\n }\n\n _buildCanonicalQueryString(queryParams: Object): string {\n if (Object.keys(queryParams).length < 1) {\n return '';\n }\n\n return Object.keys(queryParams)\n .sort()\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent((queryParams as Record)[key])}`)\n .join('&');\n }\n async _getSignatureKey(dateStamp: string): Promise {\n const kDate = await _hmac(`AWS4${this.secretAccessKey}`, dateStamp);\n const kRegion = await _hmac(kDate, this.region);\n const kService = await _hmac(kRegion, S3_SERVICE);\n return _hmac(kService, AWS_REQUEST_TYPE);\n }\n}\n\nconst _hash = async (content: string | Buffer): Promise => {\n const hashSum = _createHash('sha256');\n hashSum.update(content);\n return hashSum.digest('hex');\n};\n\nconst _hmac = async (key: string | Buffer, content: string, encoding?: 'hex'): Promise => {\n const hmacSum = _createHmac('sha256', key);\n hmacSum.update(content);\n return hmacSum.digest(encoding);\n};\nexport const sanitizeETag = (etag: string): string => {\n const replaceChars: Record = {\n '\"': '',\n '"': '',\n '"': '',\n '"': '',\n '"': '',\n };\n return etag.replace(/^(\"|"|")|(\"|"|")$/g, m => replaceChars[m] as string);\n};\n\nconst _parseXml = (str: string): string | object | any => {\n const unescapeXml = (value: string): string => {\n return value\n .replace(/"/g, '\"')\n .replace(/'/g, \"'\")\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/&/g, '&');\n };\n\n const json = {};\n const re = /<(\\w)([-\\w]+)(?:\\/|[^>]*>((?:(?!<\\1)[\\s\\S])*)<\\/\\1\\2)>/gm;\n let match;\n\n while ((match = re.exec(str))) {\n const [, prefix, key, value] = match;\n const fullKey = prefix.toLowerCase() + key;\n const parsedValue = value != null ? _parseXml(value) : true;\n\n if (typeof parsedValue === 'string') {\n (json as { [key: string]: any })[fullKey] = sanitizeETag(unescapeXml(parsedValue));\n } else if (Array.isArray((json as { [key: string]: any })[fullKey])) {\n (json as { [key: string]: any })[fullKey].push(parsedValue);\n } else {\n (json as { [key: string]: any })[fullKey] =\n (json as { [key: string]: any })[fullKey] != null\n ? [(json as { [key: string]: any })[fullKey], parsedValue]\n : expectArray[fullKey]\n ? [parsedValue]\n : parsedValue;\n }\n }\n\n return Object.keys(json).length ? json : unescapeXml(str);\n};\n\nexport { S3 };\nexport default S3;\n", "'use strict';\n\nimport { S3 } from 'ultralight-s3';\nimport avro from 'avro-js'; // eslint-disable-line\nimport {\n\tlowstorage_ERROR_CODES,\n\tlowstorageError,\n\tCollectionNotFoundError,\n\tSchemaValidationError,\n\tDocumentValidationError,\n\tS3OperationError,\n} from './errors.js';\nimport { matchesQuery, generateUUID, inferAvroType } from './helpers.js';\n\nconst MODULE_NAME = 'lowstorage';\nconst DEFAULT_DELIMITER = '/';\nconst PROJECT_DIR_PREFIX = 'lowstorage';\nconst COL_SUFFIX = '.avro';\nconst CHUNG_1MB = 1024 * 1024;\nconst CHUNG_5MB = 5 * CHUNG_1MB;\nconst EMPTY_DATA = Buffer.from('', 'utf8');\n\nconst errorValidationFn = (errorCode = lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR) => {\n\tthrow new DocumentValidationError(`${MODULE_NAME}: Invalid document or schema`, errorCode);\n};\n\nconst _hasColName = (colName) => {\n\tif (colName.trim() === '' || colName === null || typeof colName === 'undefined' || colName.length > 255 || colName === null) {\n\t\tthrow new lowstorageError(`${MODULE_NAME}: Collection name is required, null or too long`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n\t}\n};\n\n// code / description\n// init of new collection is automatically creating it in the bucket\n// there is optional (opt-in) switch to create new collections in bucket\n// if the schema is not provided, it will create empty buffer and save it\n// if the schema is provided, it will save it in memory and use it for all ops\n// if the schema is updated, it will save it in memory and use it for all ops\n// exposed functions are:\n// listCollections \u2705\n// collectionExists \u2705\n// createCollection \u2705\n// removeCollection \u2705\n// renameCollection \u2705\n// updateCollectionSchema \u274C\n// collection \u2705\n// s3 \u2705\n\n// Operations over collections are:\n// insert \u2705\n// find \u2705\n// findOne \u2705\n// update \u2705\n// updateOne \u2705\n// delete \u2705\n// count \u2705\n\n// Errors:\n// lowstorageError \u2705\n// CollectionNotFoundError \u2705\n// SchemaValidationError \u2705\n// DocumentValidationError \u2705\n// S3OperationError \u2705\n\n/**\n * lowstorage class for managing collections and performing operations on top of S3-compatible storages.\n * @class\n * @example\n * const storage = new lowstorage({\n * \taccessKeyId: 'YOUR_ACCESS_KEY',\n * \tsecretAccessKey: 'YOUR_SECRET_KEY',\n * \tendpoint: 'YOUR_ENDPOINT',\n * \tbucketName: 'YOUR_BUCKET_NAME',\n * \tregion: 'YOUR_REGION',\n * });\n *\n * // Create a collection\n * const userCol = await storage.collection('users');\n *\n * // Insert a document\n * await userCol.insert({\n * \tname: 'Kevin',\n * \tgender: 'whatever',\n * \tposts: [],\n * });\n *\n * // Show all users\n * const allUsers = await userCol.find({});\n *\n * // Find users with pagination (e.g., page 2, 10 users per page)\n * const secondPageUsers = await userCol.find({}, { skip: 10, limit: 10 });\n *\n * // Find user by ID and update name\n * await userCol.update({ _id: id }, { name: 'Carlos' });\n */\nclass lowstorage {\n\t/**\n\t * Create a new lowstorage instance.\n\t * @param {Object} options - Configuration options for lowstorage.\n\t * @param {string} options.accessKeyId - S3 access key ID.\n\t * @param {string} options.secretAccessKey - S3 secret access key.\n\t * @param {string} options.endpoint - S3 endpoint URL.\n\t * @param {string} options.bucketName - S3 bucket name.\n\t * @param {string} [options.region='auto'] - S3 region.\n\t * @param {Object} [options.logger=null] - Logger object.\n\t * @param {string} [options.dirPrefix=PROJECT_DIR_PREFIX] - Directory prefix for collections.\n\t * @returns {lowstorage} A new lowstorage instance.\n\t */\n\tconstructor(\n\t\toptions = {\n\t\t\taccessKeyId: undefined,\n\t\t\tsecretAccessKey: undefined,\n\t\t\tendpoint: undefined,\n\t\t\tbucketName: undefined,\n\t\t\tregion: 'auto',\n\t\t\tlogger: null,\n\t\t\tdirPrefix: PROJECT_DIR_PREFIX,\n\t\t},\n\t) {\n\t\tthis._checkArgs(options);\n\t\tthis._schemas = new Map();\n\t\tthis._s3 = new S3(options);\n\t\tthis._dirPrefix = options.dirPrefix || PROJECT_DIR_PREFIX;\n\t\tthis._avro = avro;\n\t}\n\n\t_checkArgs = (args) => {\n\t\tconst requiredFields = ['accessKeyId', 'secretAccessKey', 'endpoint', 'bucketName'];\n\t\tfor (const field of requiredFields) {\n\t\t\tif (!args[field]) {\n\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: ${field} is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n\t\t\t}\n\t\t}\n\t};\n\n\t/**\n\t * List all collections.\n\t * @returns {Promise} An array of collection names.\n\t * @throws {S3OperationError} If there's an error during S3 operation.\n\t */\n\tasync listCollections() {\n\t\ttry {\n\t\t\tconst listed = await this._s3.list(DEFAULT_DELIMITER, this._dirPrefix);\n\t\t\tif (typeof listed === 'object' && listed !== null && listed.keyCount === '0') return [];\n\t\t\t// remove the delimiter from the key\n\t\t\treturn listed.map((entry) => entry.key.slice(this._dirPrefix.length + 1, -COL_SUFFIX.length));\n\t\t} catch (error) {\n\t\t\tthrow new S3OperationError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t}\n\t}\n\n\t/**\n\t * Check if a collection exists.\n\t * @param {string} colName - The name of the collection.\n\t * @returns {Promise} True if the collection exists, false otherwise.\n\t * @throws {lowstorageError} If there's an error.\n\t */\n\tasync collectionExists(colName) {\n\t\ttry {\n\t\t\t_hasColName(colName);\n\t\t\tconst exists = await this._s3.fileExists(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`);\n\t\t\tconsole.log('collectionExists::2 ', `${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`, exists);\n\t\t\treturn !!exists;\n\t\t} catch (error) {\n\t\t\tif (error.message.includes('Not Found')) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tconsole.log('collectionExists::3 ', colName, error);\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND);\n\t\t}\n\t}\n\n\t/**\n\t * Create a new collection.\n\t * @param {string} colName - The name of the collection.\n\t * @param {Object} [schema] - The schema for the collection.\n\t * @param {Array} [data=[]] - The initial data for the collection.\n\t * @returns {Promise} A Promise that resolves to a Collection object.\n\t * @throws {lowstorageError} If there's an error.\n\t */\n\tasync createCollection(colName, schema, data = []) {\n\t\ttry {\n\t\t\t_hasColName(colName);\n\t\t\tconst exists = await this.collectionExists(colName);\n\t\t\tif (!exists) {\n\t\t\t\tif (data.length > 0 && schema) {\n\t\t\t\t\tconst wrapperType = this._avro.parse({ type: 'array', items: schema });\n\t\t\t\t\tawait this._s3.put(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`, wrapperType.toBuffer(data));\n\t\t\t\t} else {\n\t\t\t\t\tawait this._s3.put(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`, EMPTY_DATA);\n\t\t\t\t}\n\t\t\t\treturn this.collection(colName, schema, false);\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Collection ${colName} already exists`, lowstorage_ERROR_CODES.COLLECTION_EXISTS);\n\t\t} catch (error) {\n\t\t\tif (error instanceof lowstorageError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.CREATE_COLLECTION_ERROR);\n\t\t}\n\t}\n\n\t/**\n\t * Remove a collection.\n\t * @param {string} colName - The name of the collection.\n\t * @returns {Promise} A Promise that resolves to true if the collection is removed, false otherwise.\n\t * @throws {lowstorageError} If there's an error.\n\t */\n\tasync removeCollection(colName) {\n\t\ttry {\n\t\t\t_hasColName(colName);\n\t\t\tconst KEY = `${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`;\n\t\t\tconst exists = await this.collectionExists(colName);\n\t\t\tif (exists) {\n\t\t\t\tawait this._s3.delete(KEY);\n\t\t\t\tconst exists2 = await this.collectionExists(colName);\n\t\t\t\tif (typeof exists2 === 'boolean') {\n\t\t\t\t\tif (!exists2) {\n\t\t\t\t\t\tthis._schemas.delete(colName);\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Failed to delete collection ${colName}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t\t}\n\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to delete collection ${colName}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Collection ${colName} does not exist`, lowstorage_ERROR_CODES.REMOVE_COLLECTION_ERROR);\n\t\t} catch (error) {\n\t\t\tif (error instanceof S3OperationError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(\n\t\t\t\t`${MODULE_NAME}: Failed to remove collection: ${error.message}`,\n\t\t\t\tlowstorage_ERROR_CODES.REMOVE_COLLECTION_ERROR,\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Get or create a collection.\n\t * @param {string} colName - The name of the collection.\n\t * @param {Object} [schema] - The schema for the collection.\n\t * @param {boolean} [autoCreate=true] - Whether to automatically create the collection if it doesn't exist.\n\t * @returns {Promise} A Promise that resolves to a Collection object.\n\t * @throws {lowstorageError} If there's an error.\n\t */\n\tasync collection(colName, schema, autoCreate = true) {\n\t\ttry {\n\t\t\t_hasColName(colName);\n\t\t\tconst colPath = `${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`;\n\t\t\tconst exists = await this._s3.fileExists(colPath);\n\t\t\tif (!exists) {\n\t\t\t\tif (!autoCreate) {\n\t\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Collection ${colName} does not exist`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND);\n\t\t\t\t}\n\t\t\t\t// TODO: check if this is the right way to handle empty data\n\t\t\t\tawait this._s3.put(colPath, EMPTY_DATA);\n\t\t\t}\n\t\t\tconst colSchema = schema || this._schemas.get(colName) || undefined;\n\t\t\treturn new Collection(colName, colSchema, this._s3, this._dirPrefix);\n\t\t} catch (error) {\n\t\t\t// check if error message contains \"unknown type\" and if so, throw a schema validation error\n\t\t\tif (error.message.includes('unknown type')) {\n\t\t\t\tthrow new SchemaValidationError(\n\t\t\t\t\t`${MODULE_NAME}: Schema input is invalid: ${error.message}`,\n\t\t\t\t\tlowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND);\n\t\t}\n\t}\n\n\t/**\n\t * Get the S3 instance associated with the lowstorage instance.\n\t * @returns {S3} The S3 instance. Use this to perform S3 operations. Check for ultralight-s3 for more details.\n\t */\n\ts3 = () => {\n\t\treturn this._s3;\n\t};\n}\n\n/**\n * Collection class for managing documents in a collection.\n * @class\n * @example\n * const storage = new lowstorage({\n * \taccessKeyId: 'YOUR_ACCESS_KEY',\n * \tsecretAccessKey: 'YOUR_SECRET_KEY',\n * \tendpoint: 'YOUR_ENDPOINT',\n * \tbucketName: 'YOUR_BUCKET_NAME',\n * \tregion: 'YOUR_REGION',\n * });\n *\n * // Create a collection\n * const userCol = await storage.collection('users');\n *\n * // Insert a document\n * await userCol.insert({\n * \tname: 'Kevin',\n * \tgender: 'whatever',\n * \tposts: [],\n * });\n *\n * // Show all users\n * const allUsers = await userCol.find({});\n *\n * // Find users with pagination (e.g., page 2, 10 users per page)\n * const secondPageUsers = await userCol.find({}, { skip: 10, limit: 10 });\n *\n * // Find user by ID and update name\n * await userCol.update({ _id: id }, { name: 'Carlos' });\n */\nclass Collection {\n\t/**\n\t * Create a new Collection instance.\n\t * @param {string} colName - The name of the collection.\n\t * @param {S3} s3 - The S3 instance.\n\t * @param {Object} [schema] - The Avro schema for the collection.\n\t * @param {string} [dirPrefix=PROJECT_DIR_PREFIX] - The directory prefix for the collection.\n\t * @param {boolean} [safeWrite=false] - Whether to perform a safe write operation. It doublechecks the ETag of the object before writing. False = overwrites the object, True = only writes if the object has not been modified.\n\t * @returns {Collection} A new Collection instance.\n\t */\n\tconstructor(colName, schema, s3, dirPrefix = PROJECT_DIR_PREFIX, safeWrite = false) {\n\t\tthis._colName = colName;\n\t\tthis._s3 = s3;\n\t\tthis._avro = avro;\n\t\tthis._lastETag = '';\n\t\tthis._dataCache = [];\n\t\tthis._schema = schema;\n\t\tthis._avroType = typeof schema === 'undefined' ? null : this._avro.parse(schema);\n\t\tthis._dirPrefix = dirPrefix;\n\t\tthis._safeWrite = safeWrite;\n\t}\n\n\tgetProps = () => ({\n\t\tcolName: this._colName,\n\t\ts3: this._s3,\n\t\tavro: this._avro,\n\t\tavroType: this._avroType,\n\t\tdirPrefix: this._dirPrefix,\n\t\tsafeWrite: this._safeWrite,\n\t});\n\n\tsetProps = (props) => {\n\t\tthis._colName = props.colName;\n\t\tthis._s3 = props.s3;\n\t\tthis._avro = props.avro;\n\t\tthis._schema = props.schema;\n\t\tthis._avroType = props.avroType;\n\t\tthis._dirPrefix = props.dirPrefix;\n\t\tthis._safeWrite = props.safeWrite;\n\t};\n\n\tsetSafeWrite = (safeWrite) => {\n\t\tthis._safeWrite = safeWrite;\n\t};\n\n\tgetSafeWrite = () => {\n\t\treturn this._safeWrite;\n\t};\n\n\tgetAvroSchema = () => {\n\t\treturn this._avroType;\n\t};\n\n\tsetAvroSchema = (schema) => {\n\t\tthis._schema = schema;\n\t\tthis._avroType = typeof schema === 'undefined' ? null : this._avro.parse(schema);\n\t};\n\n\tasync _loadData() {\n\t\ttry {\n\t\t\tconst KEY = `${this._dirPrefix}${DEFAULT_DELIMITER}${this._colName}${COL_SUFFIX}`;\n\t\t\tconst CHUNK_SIZE = this._s3.getMaxRequestSizeInBytes() || CHUNG_5MB;\n\t\t\tif (this._avroType === null || typeof this._avroType === 'undefined') {\n\t\t\t\tthrow new lowstorageError(\n\t\t\t\t\t`${MODULE_NAME}: Missing type definition. Configure before operations `,\n\t\t\t\t\tlowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconsole.log('Getting object:', KEY, this._lastETag);\n\t\t\tlet { etag, data } = await this._s3.getObjectWithETag(KEY, { 'if-none-match': this._lastETag });\n\t\t\tconsole.log('data :::::::::::::::::::::::::', data, etag, this._dataCache);\n\t\t\tif (data === null) {\n\t\t\t\t// console.log('data is null, returning cache');\n\t\t\t\treturn this._dataCache;\n\t\t\t}\n\t\t\tthis._lastETag = etag === null ? this._lastETag : etag;\n\t\t\tconst wrapperType = this._avro.parse({ type: 'array', items: this._avroType });\n\t\t\tif (data.length < CHUNK_SIZE) {\n\t\t\t\tthis._dataCache = data.length > 0 ? wrapperType.fromBuffer(data) : [];\n\t\t\t\treturn this._dataCache;\n\t\t\t}\n\t\t\tlet offset = CHUNK_SIZE;\n\t\t\tlet bufferArr = [Buffer.from(data, 'utf8')];\n\t\t\tlet repeat = true;\n\t\t\twhile (repeat) {\n\t\t\t\tconst nextDataResponse = await this._s3.getResponse(KEY, false, offset, offset + CHUNK_SIZE);\n\t\t\t\tconst nextDataBody = await nextDataResponse.text();\n\t\t\t\tbufferArr.push(Buffer.from(nextDataBody, 'utf8'));\n\t\t\t\toffset += CHUNK_SIZE;\n\t\t\t\tconst contentLength = nextDataResponse.headers.get('content-length') || nextDataBody.length;\n\t\t\t\tif (contentLength < CHUNK_SIZE) {\n\t\t\t\t\trepeat = false;\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst bufferedData = Buffer.concat(bufferArr);\n\t\t\tthis._dataCache = wrapperType.fromBuffer(bufferedData);\n\t\t\treturn this._dataCache;\n\t\t} catch (error) {\n\t\t\tif (error.toString().indexOf('status 404: Unknown - Not Found') > -1) {\n\t\t\t\tthis._dataCache = [];\n\t\t\t\treturn this._dataCache;\n\t\t\t}\n\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to load data: ${error.message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t}\n\t}\n\n\tasync _saveData(data) {\n\t\ttry {\n\t\t\tif (this._avroType === null || typeof this._avroType === 'undefined') {\n\t\t\t\tthrow new lowstorageError(\n\t\t\t\t\t`${MODULE_NAME}: Missing type definition. Configure before operations `,\n\t\t\t\t\tlowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst wrapperType = this._avro.parse({ type: 'array', items: this._avroType });\n\t\t\tconst dataBuffer = data.length > 0 ? wrapperType.toBuffer(data) : EMPTY_DATA; // TODO: check if this is the right way to handle empty data\n\n\t\t\tconst KEY = `${this._dirPrefix}${DEFAULT_DELIMITER}${this._colName}${COL_SUFFIX}`;\n\t\t\tif (this._safeWrite && this._lastETag !== '') {\n\t\t\t\tconst currentETag = await this._s3.getEtag(KEY);\n\t\t\t\t// If we have a current ETag, check if it matches our last known ETag\n\t\t\t\tif (currentETag !== null && currentETag !== this._lastETag) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst resp = await this._s3.put(KEY, dataBuffer);\n\t\t\tif (resp.status !== 200) {\n\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to save data`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t}\n\n\t\t\t// Update the cached ETag\n\t\t\tconst newETag = resp.headers.get('etag');\n\t\t\t// console.log('saveddata newETag', this._s3.sanitizeETag(newETag));\n\t\t\tif (newETag) {\n\t\t\t\tthis._lastETag = this._s3.sanitizeETag(newETag);\n\t\t\t\t// console.log('saveddata lastETag', this._lastETag, 'data is ', data);\n\t\t\t\tthis._dataCache = data;\n\t\t\t}\n\t\t\treturn true;\n\t\t} catch (error) {\n\t\t\tif (error instanceof S3OperationError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.SAVE_DATA_ERROR);\n\t\t}\n\t}\n\n\t/**\n\t * Insert a document into the collection.\n\t * @param {Object|Array} doc - The document to insert.\n\t * @param {Object} [schema=undefined] - The schema for the document.\n\t * @returns {Promise} A Promise that resolves to the array of inserted document(s).\n\t * @throws {lowstorageError} If there's an error.\n\t */\n\tasync insert(doc, schema = undefined) {\n\t\ttry {\n\t\t\tif (doc === undefined || doc === null) {\n\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Document is required for insert`, lowstorage_ERROR_CODES.INSERT_ERROR);\n\t\t\t}\n\t\t\tif (typeof doc !== 'object' && !Array.isArray(doc)) {\n\t\t\t\tthrow new DocumentValidationError(\n\t\t\t\t\t`${MODULE_NAME}: Document must be an object or an array`,\n\t\t\t\t\tlowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst items = !Array.isArray(doc) ? [doc] : doc;\n\n\t\t\tconst schemaWithId = schema || this._avroType || inferAvroType(items[0]);\n\t\t\tconst avroType = this._avro.parse(schemaWithId);\n\t\t\tif (!avroType) {\n\t\t\t\tthrow new SchemaValidationError(\n\t\t\t\t\t`${MODULE_NAME}: Schema is required - Pass a schema to the insert method`,\n\t\t\t\t\tlowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR,\n\t\t\t\t);\n\t\t\t}\n\t\t\tthis._avroType = avroType;\n\t\t\tconst data = await this._loadData();\n\t\t\tfor (let item of items) {\n\t\t\t\tif (typeof item !== 'object' || item === null) {\n\t\t\t\t\tthrow new DocumentValidationError(\n\t\t\t\t\t\t`${MODULE_NAME}: Invalid input: input must be an object or an array of objects`,\n\t\t\t\t\t\tlowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\titem._id = item._id || (await generateUUID());\n\t\t\t\tconst validBuffer = this._avroType.isValid(item, {\n\t\t\t\t\terrorHook: errorValidationFn,\n\t\t\t\t\tnoUndeclaredFields: true,\n\t\t\t\t});\n\t\t\t\tif (validBuffer === true) {\n\t\t\t\t\tdata.push(item);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new DocumentValidationError(`${MODULE_NAME}: Invalid document or schema`, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR);\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst success = await this._saveData(data);\n\t\t\tif (!success) {\n\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to insert document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t}\n\t\t\treturn items;\n\t\t} catch (error) {\n\t\t\tif (error.message.includes('unknown type')) {\n\t\t\t\tthrow new SchemaValidationError(\n\t\t\t\t\t`${MODULE_NAME}: Schema input is invalid: ${error.message}`,\n\t\t\t\t\tlowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (error instanceof lowstorageError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME} Insert operation failed: ${error.message}`, lowstorage_ERROR_CODES.INSERT_ERROR);\n\t\t}\n\t}\n\n\t/**\n\t * Find documents in the collection.\n\t * @param {Object} [query={}] - The query to filter documents.\n\t * @param {Object} [options={}] - The options for pagination.\n\t * @param {number} [options.skip=0] - The number of documents to skip. Default is 0.\n\t * @param {number} [options.limit=undefined] - The maximum number of documents to return. Default is undefined, which means no limit.\n\t * @returns {Promise} A Promise that resolves to an array of matching documents.\n\t * @throws {lowstorageError} If there's an error.\n\t */\n\tasync find(query = {}, options = {}) {\n\t\ttry {\n\t\t\tif (query === undefined || query === null) {\n\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Query is required for update`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n\t\t\t}\n\t\t\tconst data = await this._loadData();\n\t\t\tconst start = parseInt(options.skip, 10) || 0;\n\t\t\tconst end = parseInt(options.limit, 10) ? start + parseInt(options.limit, 10) : undefined;\n\t\t\tconst filteredData = data.filter((doc) => matchesQuery(doc, query)).slice(start, end);\n\t\t\treturn filteredData;\n\t\t} catch (error) {\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Find operation failed: ${error.message}`, lowstorage_ERROR_CODES.FIND_ERROR);\n\t\t}\n\t}\n\n\t/**\n\t * Find the first document in the collection that matches the query.\n\t * @param {Object} [query={}] - The query to filter documents.\n\t * @returns {Promise} A Promise that resolves to the first matching document or null if no match is found.\n\t * @throws {lowstorageError} If there's an error.\n\t */\n\tasync findOne(query = {}) {\n\t\ttry {\n\t\t\tif (query === null) {\n\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Query cannot be null`, lowstorage_ERROR_CODES.INVALID_ARGUMENT);\n\t\t\t}\n\t\t\tconst result = await this.find(query, { limit: 1 });\n\t\t\treturn result[0] || null;\n\t\t} catch (error) {\n\t\t\tif (error instanceof lowstorageError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: FindOne operation failed: ${error.message}`, lowstorage_ERROR_CODES.FIND_ONE_ERROR);\n\t\t}\n\t}\n\n\t/**\n\t * Update a single document in the collection that matches the query.\n\t * @param {Object} [query={}] - The query to filter the document to update.\n\t * @param {Object} [update={}] - The update operations to apply to the matching document.\n\t * @returns {Promise} A Promise that resolves to number of documents updated.\n\t * @throws {lowstorageError} If the updateOne operation fails.\n\t * @throws {SchemaValidationError} If the schema is not defined for the collection.\n\t * @throws {DocumentValidationError} If the updated document is invalid.\n\t * @throws {S3OperationError} If the S3 operation fails.\n\t */\n\tasync update(query = {}, update = {}, options = {}) {\n\t\ttry {\n\t\t\tif (query === undefined || query === null || update === undefined || update === null) {\n\t\t\t\tthrow new lowstorageError(\n\t\t\t\t\t`${MODULE_NAME}: Query and update values are required for update`,\n\t\t\t\t\tlowstorage_ERROR_CODES.MISSING_ARGUMENT,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (!this._avroType) {\n\t\t\t\tthrow new SchemaValidationError(\n\t\t\t\t\t`${MODULE_NAME}: Schema is not defined for this collection`,\n\t\t\t\t\tlowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst data = await this._loadData();\n\t\t\tif (data.length === 0) return 0;\n\t\t\tlet updatedCount = 0;\n\t\t\tfor (let i = 0; i < data.length; i++) {\n\t\t\t\tif (matchesQuery(data[i], query)) {\n\t\t\t\t\tconst updatedDoc = { ...data[i], ...update };\n\t\t\t\t\tconst isValid = this._avroType.isValid(updatedDoc, {\n\t\t\t\t\t\terrorHook: errorValidationFn,\n\t\t\t\t\t\tnoUndeclaredFields: true,\n\t\t\t\t\t});\n\t\t\t\t\tif (isValid === true) {\n\t\t\t\t\t\tdata[i] = updatedDoc;\n\t\t\t\t\t\tupdatedCount++;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow new DocumentValidationError(\n\t\t\t\t\t\t\t`${MODULE_NAME}: Invalid document or schema`,\n\t\t\t\t\t\t\tlowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (updatedCount > 0) {\n\t\t\t\tconst success = await this._saveData(data);\n\t\t\t\tif (!success) {\n\t\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t\t}\n\t\t\t} else if (options.upsert) {\n\t\t\t\t// If upsert is true, we need to insert the document\n\t\t\t\tconst success = await this.insert(update);\n\t\t\t\tif (!success) {\n\t\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t\t}\n\t\t\t\tupdatedCount = 1;\n\t\t\t}\n\t\t\treturn updatedCount;\n\t\t} catch (error) {\n\t\t\tif (error instanceof S3OperationError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Update operation failed: ${error.message}`, lowstorage_ERROR_CODES.UPDATE_ERROR);\n\t\t}\n\t}\n\n\t/**\n\t * Update a single document in the collection that matches the query.\n\t * @param {Object} [query={}] - The query to filter the document to update.\n\t * @param {Object} [update={}] - The update operations to apply to the matching document.\n\t * @returns {Promise} A Promise that resolves to 1 if a document was updated, 0 otherwise.\n\t * @throws {lowstorageError} If the updateOne operation fails.\n\t * @throws {SchemaValidationError} If the schema is not defined for the collection.\n\t * @throws {DocumentValidationError} If the updated document is invalid.\n\t * @throws {S3OperationError} If the S3 operation fails.\n\t */\n\tasync updateOne(query = {}, update = {}, options = {}) {\n\t\ttry {\n\t\t\tif (query === undefined || query === null || update === undefined || update === null) {\n\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Query is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n\t\t\t}\n\t\t\tif (!this._avroType) {\n\t\t\t\tthrow new SchemaValidationError(\n\t\t\t\t\t`${MODULE_NAME}: Schema is not defined for this collection`,\n\t\t\t\t\tlowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst data = await this._loadData();\n\t\t\tif (data.length === 0) return 0;\n\t\t\tconst docIndex = data.findIndex((doc) => matchesQuery(doc, query));\n\n\t\t\tif (docIndex !== -1) {\n\t\t\t\tconst updatedDoc = { ...data[docIndex], ...update };\n\t\t\t\tconst isValid = this._avroType.isValid(updatedDoc, {\n\t\t\t\t\terrorHook: errorValidationFn,\n\t\t\t\t\tnoUndeclaredFields: true,\n\t\t\t\t});\n\t\t\t\tif (isValid === true) {\n\t\t\t\t\tdata[docIndex] = updatedDoc;\n\t\t\t\t\tconst success = await this._saveData(data);\n\t\t\t\t\tif (!success) {\n\t\t\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t\t\t}\n\t\t\t\t\treturn 1;\n\t\t\t\t} else {\n\t\t\t\t\tthrow new DocumentValidationError(`${MODULE_NAME}: Invalid document or schema`, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (options.upsert) {\n\t\t\t\t// If upsert is true, we need to insert the document\n\t\t\t\tconst success = await this.insert(update);\n\t\t\t\tif (!success) {\n\t\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t\t}\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t\treturn 0;\n\t\t} catch (error) {\n\t\t\tif (error instanceof lowstorageError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: UpdateOne operation failed: ${error.message}`, lowstorage_ERROR_CODES.UPDATE_ONE_ERROR);\n\t\t}\n\t}\n\n\t/**\n\t * Delete documents from the collection.\n\t * @param {Object} [query={}] - The query to filter documents to delete.\n\t * @returns {Promise} A Promise that resolves to the number of documents deleted.\n\t * @throws {lowstorageError} If the delete operation fails.\n\t * @throws {S3OperationError} If the S3 operation fails.\n\t */\n\tasync delete(query = {}) {\n\t\ttry {\n\t\t\tif (query === undefined || query === null) {\n\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Query is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n\t\t\t}\n\t\t\tconst data = await this._loadData();\n\t\t\tif (data.length === 0) return 0;\n\t\t\tconst initialLength = data.length;\n\n\t\t\tconst newData = data.filter((doc) => !matchesQuery(doc, query));\n\t\t\tconst success = await this._saveData(newData);\n\t\t\tif (!success) {\n\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to delete document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t}\n\t\t\treturn initialLength - newData.length;\n\t\t} catch (error) {\n\t\t\tif (error instanceof S3OperationError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Delete operation failed: ${error.message}`, lowstorage_ERROR_CODES.DELETE_ERROR);\n\t\t}\n\t}\n\n\t/**\n\t * Delete all documents from the collection.\n\t * @returns {Promise} A Promise that resolves to the number of documents deleted.\n\t * @throws {lowstorageError} If the delete operation fails.\n\t * @throws {S3OperationError} If the S3 operation fails.\n\t */\n\tasync deleteAll() {\n\t\ttry {\n\t\t\tconst data = await this._loadData();\n\t\t\tconst initialLength = data.length;\n\t\t\tconst success = await this._saveData([]);\n\t\t\tif (!success) {\n\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to delete document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t}\n\t\t\treturn initialLength;\n\t\t} catch (error) {\n\t\t\tif (error instanceof S3OperationError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Delete operation failed: ${error.message}`, lowstorage_ERROR_CODES.DELETE_ERROR);\n\t\t}\n\t}\n\n\t/**\n\t * Count the number of documents in the collection.\n\t * @param {Object} [query={}] - The query to filter documents.\n\t * @returns {Promise} A Promise that resolves to the number of documents in the collection.\n\t * @throws {lowstorageError} If the count operation fails.\n\t */\n\tasync count(query = {}) {\n\t\ttry {\n\t\t\tconst data = await this.find(query);\n\t\t\treturn data.length;\n\t\t} catch (error) {\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Count operation failed: ${error.message}`, lowstorage_ERROR_CODES.COUNT_ERROR);\n\t\t}\n\t}\n\n\tasync renameCollection(newColName, newSchema = this._schema) {\n\t\ttry {\n\t\t\t_hasColName(newColName);\n\t\t\tconst exists = await this._s3.fileExists(`${this._dirPrefix}${DEFAULT_DELIMITER}${newColName}${COL_SUFFIX}`);\n\t\t\tif (!!exists) {\n\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Collection ${newColName} already exists`, lowstorage_ERROR_CODES.COLLECTION_EXISTS);\n\t\t\t}\n\t\t\tconst schema = newSchema || this.getAvroSchema();\n\t\t\tconst data = await this._loadData();\n\t\t\tconst createNew = new Collection(newColName, schema, this._s3, this._dirPrefix);\n\t\t\tawait createNew._saveData(data);\n\t\t\tawait this._s3.delete(`${this._dirPrefix}${DEFAULT_DELIMITER}${this._colName}${COL_SUFFIX}`);\n\t\t\treturn createNew;\n\t\t} catch (error) {\n\t\t\tif (error instanceof lowstorageError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(\n\t\t\t\t`${MODULE_NAME}: Rename collection failed: ${error.message}`,\n\t\t\t\tlowstorage_ERROR_CODES.RENAME_COLLECTION_ERROR,\n\t\t\t);\n\t\t}\n\t}\n}\n\n// export default lowstorage;\nexport { lowstorage, lowstorageError, lowstorage_ERROR_CODES };\n", "'use strict';\n\nconst lowstorage_ERROR_CODES = {\n\tMISSING_ARGUMENT: 'MISSING_ARGUMENT',\n\tCOLLECTION_EXISTS: 'COLLECTION_EXISTS',\n\tCREATE_COLLECTION_ERROR: 'CREATE_COLLECTION_ERROR',\n\tRENAME_COLLECTION_ERROR: 'RENAME_COLLECTION_ERROR',\n\tREMOVE_COLLECTION_ERROR: 'REMOVE_COLLECTION_ERROR',\n\tUPDATE_COLLECTION_SCHEMA_ERROR: 'UPDATE_COLLECTION_SCHEMA_ERROR',\n\tCOLLECTION_NOT_FOUND: 'COLLECTION_NOT_FOUND',\n\tSCHEMA_VALIDATION_ERROR: 'SCHEMA_VALIDATION_ERROR',\n\tDOCUMENT_VALIDATION_ERROR: 'DOCUMENT_VALIDATION_ERROR',\n\tS3_OPERATION_ERROR: 'S3_OPERATION_ERROR',\n\tFIND_ERROR: 'FIND_ERROR',\n\tFIND_ONE_ERROR: 'FIND_ONE_ERROR',\n\tSAVE_DATA_ERROR: 'SAVE_DATA_ERROR',\n\tINSERT_ERROR: 'INSERT_ERROR',\n\tUPDATE_ERROR: 'UPDATE_ERROR',\n\tUPDATE_ONE_ERROR: 'UPDATE_ONE_ERROR',\n\tDELETE_ERROR: 'DELETE_ERROR',\n\tCOUNT_ERROR: 'COUNT_ERROR',\n\tUNKNOWN_ERROR: 'UNKNOWN_ERROR',\n};\nclass lowstorageError extends Error {\n\tconstructor(message, code = lowstorage_ERROR_CODES.UNKNOWN_ERROR) {\n\t\tsuper(`lowstorageError: ${message} :: code: ${code}`);\n\t\tthis.name = this.constructor.name;\n\t\tthis.code = code;\n\t\tError.captureStackTrace(this, this.constructor);\n\t}\n}\n\nclass CollectionNotFoundError extends lowstorageError {\n\tconstructor(collectionName) {\n\t\tsuper(`Collection ${collectionName} not found`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND);\n\t}\n}\n\nclass SchemaValidationError extends lowstorageError {\n\tconstructor(message) {\n\t\tsuper(message, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR);\n\t}\n}\n\nclass DocumentValidationError extends lowstorageError {\n\tconstructor(message) {\n\t\tsuper(message, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR);\n\t}\n}\n\nclass S3OperationError extends lowstorageError {\n\tconstructor(message, operation) {\n\t\tsuper(`S3 ${operation} operation failed: ${message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t}\n}\n\nexport {\n\tlowstorage_ERROR_CODES,\n\tlowstorageError,\n\tCollectionNotFoundError,\n\tSchemaValidationError,\n\tDocumentValidationError,\n\tS3OperationError,\n};\n", "'use strict';\n\nimport { randomUUID } from 'node:crypto';\n\nconst matchesQuery = (document, query) => {\n\treturn Object.keys(query).every((key) => document[key] === query[key]);\n};\n\nconst generateUUID = async () => {\n\tif (typeof randomUUID !== 'undefined' && typeof randomUUID === 'function') {\n\t\treturn randomUUID();\n\t}\n\tif (typeof crypto !== 'undefined' && typeof crypto === 'object' && typeof crypto.randomUUID === 'function') {\n\t\treturn crypto.randomUUID();\n\t}\n\treturn 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n\t\tvar r = (Math.random() * 16) | 0,\n\t\t\tv = c === 'x' ? r : (r & 0x3) | 0x8;\n\t\treturn v.toString(16);\n\t});\n};\n\nconst _getAvroType = (value, name = 'SubAutoGenerated') => {\n\tswitch (typeof value) {\n\t\tcase 'string':\n\t\t\tif (_isUUID(value)) {\n\t\t\t\treturn {\n\t\t\t\t\ttype: 'string',\n\t\t\t\t\tname: '_id',\n\t\t\t\t\tsize: 16,\n\t\t\t\t\tlogicalType: 'UUID',\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn 'string';\n\t\tcase 'number':\n\t\t\treturn Number.isInteger(value) ? 'int' : 'float';\n\t\tcase 'boolean':\n\t\t\treturn 'boolean';\n\t\tcase 'object':\n\t\t\tif (value === null) return 'null';\n\t\t\tif (Array.isArray(value)) return { type: 'array', items: _getAvroType(value[0]) };\n\t\t\treturn inferAvroType(value, name);\n\t\tdefault:\n\t\t\treturn 'string'; // Default to string for unknown types\n\t}\n};\n\nconst ensureIdFieldInSchema = (schema) => {\n\tconst idField = {\n\t\tname: '_id',\n\t\ttype: 'string',\n\t\tsize: 16,\n\t\tlogicalType: 'UUID',\n\t};\n\n\tif (schema.type === 'record') {\n\t\tconst hasIdField = schema.fields.some((field) => field.name === '_id');\n\t\tif (!hasIdField) {\n\t\t\tschema.fields.unshift(idField);\n\t\t}\n\t} else if (schema.type === 'array' && schema.items.type === 'record') {\n\t\tconst hasIdField = schema.items.fields.some((field) => field.name === '_id');\n\t\tif (!hasIdField) {\n\t\t\tschema.items.fields.unshift(idField);\n\t\t}\n\t}\n\treturn schema;\n};\n\nconst inferAvroType = (data, typeName = 'AutoGenerated') => {\n\tif (Array.isArray(data)) {\n\t\tdata = data[0];\n\t}\n\tconst fields = Object.entries(data).map(([name, value]) => {\n\t\treturn { name, type: _getAvroType(value, `${typeName}.${name}`) };\n\t});\n\n\tconst schema = {\n\t\ttype: 'record',\n\t\tname: typeName,\n\t\tfields: fields,\n\t};\n\n\t// Ensure the _id field is present in the schema\n\treturn ensureIdFieldInSchema(schema);\n};\n\nconst _isUUID = (str) => {\n\tconst uuidV4Regex = /^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i;\n\treturn uuidV4Regex.test(str);\n};\n\nexport { matchesQuery, generateUUID, inferAvroType, ensureIdFieldInSchema };\n"], + "mappings": "AAGA,IAAMA,EAAgB,mBAChBC,EAAmB,eACnBC,EAAa,KACbC,GAAY,IACZC,EAAmB,mBACnBC,GAA8B,2BAC9BC,EAAmB,kBACnBC,EAAoB,mBAEpBC,GAA0B,CAAC,cAAe,kBAAmB,eAAgB,UAAU,EAIvFC,EAA4B,uBAC5BC,GAAkB,aAClBC,GAAc,OACdC,GAAuB,gBACvBC,EAAsB,eACtBC,EAAwB,iBACxBC,EAAc,OACdC,EAAuB,gBAGvBC,EAAe,yBACfC,GAA4B,GAAGD,CAAY,yCAC3CE,GAA4B,GAAGF,CAAY,6CAC3CG,GAA0B,GAAGH,CAAY,sCACzCI,GAA6B,GAAGJ,CAAY,wCAC5CK,EAAqB,GAAGL,CAAY,iCACpCM,EAA2B,GAAGN,CAAY,sCAC1CO,GAAuB,GAAGP,CAAY,kCACtCQ,GAAqB,GAAGR,CAAY,8DACpCS,EAA6B,GAAGT,CAAY,kCAE5CU,GAAoB,GAAGV,CAAY,0BACnCW,GAAsB,GAAGX,CAAY,qCACrCY,GAA2B,GAAGZ,CAAY,6BAwE5Ca,GAAc,OAAO,aAAe,KAAM,QAAO,aAAa,GAAG,WACjEC,GAAc,OAAO,aAAe,KAAM,QAAO,aAAa,GAAG,WAEjE,OAAOD,GAAgB,KAAe,OAAOC,GAAgB,KAC/D,QAAQ,MACN,iKAAiK,EAIrK,IAAMC,GAA0C,CAC9C,SAAU,EAAA,EAGNC,GAAeC,GAAsB,IAAIA,EAAE,WAAW,CAAC,EAAE,SAAS,EAAE,EAAE,YAAW,CAAE,GAEnFC,EAAaC,GACV,mBAAmBA,CAAM,EAAE,QAAQ,WAAYH,EAAW,EAG7DI,EAAqBC,GAClBH,EAAUG,CAAM,EAAE,QAAQ,OAAQ,GAAG,EA2BxCC,GAAN,KAAQ,CAyBN,YAAY,CACV,YAAAC,EACA,gBAAAC,EACA,SAAAC,EACA,WAAAC,EACA,OAAAC,EAAS,OACT,sBAAAC,EAAwB,QACxB,oBAAAC,EAAsB,OACtB,OAAAC,EAAS,MAAS,EACT,CA6HX,KAAA,cAAgB,IAAM,KAAK,WAC3B,KAAA,cAAiBJ,GAAsB,CACrC,KAAK,WAAaA,CACpB,EACA,KAAA,UAAY,IAAM,KAAK,OACvB,KAAA,UAAaC,GAAkB,CAC7B,KAAK,OAASA,CAChB,EACA,KAAA,YAAc,IAAM,KAAK,SACzB,KAAA,YAAeF,GAAoB,CACjC,KAAK,SAAWA,CAClB,EACA,KAAA,yBAA2B,IAAM,KAAK,sBACtC,KAAA,yBAA4BG,GAAiC,CAC3D,KAAK,sBAAwBA,CAC/B,EACA,KAAA,aAAgBG,GAAyBC,EAAaD,CAAI,EAE1D,KAAA,SAAW,KAAO,CAChB,YAAa,KAAK,YAClB,gBAAiB,KAAK,gBACtB,OAAQ,KAAK,OACb,OAAQ,KAAK,WACb,SAAU,KAAK,SACf,sBAAuB,KAAK,sBAC5B,oBAAqB,KAAK,oBAC1B,OAAQ,KAAK,MAAA,GAEf,KAAA,SAAYE,GAAmB,CAC7B,KAAK,2BAA2BA,EAAM,YAAaA,EAAM,gBAAiBA,EAAM,WAAYA,EAAM,QAAQ,EAC1G,KAAK,YAAcA,EAAM,YACzB,KAAK,gBAAkBA,EAAM,gBAC7B,KAAK,OAASA,EAAM,QAAU,OAC9B,KAAK,WAAaA,EAAM,WACxB,KAAK,SAAWA,EAAM,SACtB,KAAK,sBAAwBA,EAAM,uBAAyB,QAC5D,KAAK,oBAAsBA,EAAM,oBACjC,KAAK,OAASA,EAAM,MACtB,EAlKE,KAAK,2BAA2BV,EAAaC,EAAiBC,EAAUC,CAAU,EAClF,KAAK,YAAcH,EACnB,KAAK,gBAAkBC,EACvB,KAAK,SAAWC,EAChB,KAAK,WAAaC,EAClB,KAAK,OAASC,EACd,KAAK,sBAAwBC,EAC7B,KAAK,oBAAsBC,EAC3B,KAAK,OAASC,CAChB,CAEQ,2BACNP,EACAC,EACAC,EACAC,EAAkB,CAElB,GAAI,OAAOH,GAAgB,UAAYA,EAAY,KAAI,EAAG,SAAW,EACnE,MAAM,IAAI,UAAUtB,EAAyB,EAC/C,GAAI,OAAOuB,GAAoB,UAAYA,EAAgB,KAAI,EAAG,SAAW,EAC3E,MAAM,IAAI,UAAUtB,EAAyB,EAC/C,GAAI,OAAOuB,GAAa,UAAYA,EAAS,KAAI,EAAG,SAAW,EAAG,MAAM,IAAI,UAAUtB,EAAuB,EAC7G,GAAI,OAAOuB,GAAe,UAAYA,EAAW,KAAI,EAAG,SAAW,EACjE,MAAM,IAAI,UAAUtB,EAA0B,CAClD,CAEQ,qBAAqB8B,EAAc,CACzC,GAAIA,IAAW,OAASA,IAAW,OACjC,MAAA,KAAK,KAAK,QAAS,GAAGlC,CAAY,mCAAmC,EAC/D,IAAI,MAAM,mCAAmC,CAEvD,CAEQ,UAAUmC,EAAW,CAC3B,GAAI,OAAOA,GAAQ,UAAYA,EAAI,KAAI,EAAG,SAAW,EACnD,MAAA,KAAK,KAAK,QAAS9B,CAAkB,EAC/B,IAAI,UAAUA,CAAkB,CAE1C,CAEQ,gBAAgB+B,EAAiB,CACvC,GAAI,OAAOA,GAAc,UAAYA,EAAU,KAAI,EAAG,SAAW,EAC/D,MAAA,KAAK,KAAK,QAASxB,EAAwB,EACrC,IAAI,UAAUA,EAAwB,CAEhD,CAEQ,aAAayB,EAAc,CACjC,GAAI,OAAOA,GAAW,SACpB,MAAA,KAAK,KAAK,QAAS3B,EAAiB,EAC9B,IAAI,UAAUA,EAAiB,CAEzC,CAEQ,cAAc4B,EAAe,CACnC,GAAI,OAAOA,GAAY,UAAYA,GAAW,EAC5C,MAAA,KAAK,KAAK,QAAS3B,EAAmB,EAChC,IAAI,UAAUA,EAAmB,CAE3C,CAEQ,WAAW4B,EAAyB,CAC1C,GAAI,OAAOA,GAAS,SAClB,MAAA,KAAK,KAAK,QAAS,GAAGvC,CAAY,wBAAwB,EACpD,IAAI,UAAU,GAAGA,CAAY,wBAAwB,CAE/D,CASQ,KACNwC,EACAC,EACAC,EAA+C,CAAA,EAAE,CAEjD,GAAI,KAAK,QAAU,OAAO,KAAK,OAAOF,CAAK,GAAM,WAAY,CAE3D,IAAMG,EAAYC,GACZ,OAAOA,GAAQ,UAAYA,IAAQ,KAC9BA,EAEF,OAAO,KAAKA,CAAG,EAAE,OACtB,CAACC,EAAUV,KACL5C,GAAwB,SAAS4C,EAAI,YAAW,CAAE,EACpDU,EAAIV,CAAG,EAAI,aACF,OAAOS,EAAIT,CAAG,GAAM,UAAYS,EAAIT,CAAG,IAAM,KACtDU,EAAIV,CAAG,EAAIQ,EAASC,EAAIT,CAAG,CAAC,EAE5BU,EAAIV,CAAG,EAAIS,EAAIT,CAAG,EAEbU,GAET,MAAM,QAAQD,CAAG,EAAI,CAAA,EAAK,CAAA,CAAE,EAK1BE,EAAgBH,EAASD,CAAc,EAEvCK,EAAW,CACf,UAAW,IAAI,KAAI,EAAG,YAAW,EACjC,MAAAP,EACA,QAAAC,EACA,GAAGK,EAEH,QAASH,EAAS,CAChB,WAAY,KAAK,WACjB,OAAQ,KAAK,OACb,SAAU,KAAK,SAEf,YAAa,KAAK,YAAc,GAAG,KAAK,YAAY,UAAU,EAAG,CAAC,CAAC,MAAQ,MAAA,CAC5E,CAAA,EAIH,KAAK,OAAOH,CAAK,EAAEO,CAAQ,CAC7B,CACF,CAgDA,MAAM,iBAAiBZ,EAAW,CAChC,KAAK,UAAUA,CAAG,EAClB,IAAMa,EAAU,CACd,CAACxD,CAAyB,EAAGL,CAAAA,EAEzB8D,EAAa7B,EAAkBe,CAAG,EAClC,CAAE,IAAAe,EAAK,QAASC,CAAa,EAAK,MAAM,KAAK,MAAM,OAAQF,EAAY,CAAA,EAAID,EAAS,EAAE,EAEtFI,GADM,MAAM,KAAK,aAAaF,EAAK,OAAQC,CAAa,GACpC,QAAQ,IAAItD,CAAqB,EAC3D,OAAOuD,EAAgB,SAASA,EAAe,EAAE,EAAI,CACvD,CAMA,MAAM,cAAY,CAChB,IAAMJ,EAAU,CACd,CAACxD,CAAyB,EAAGL,CAAAA,EAEzB,CAAE,IAAA+D,EAAK,QAASC,CAAa,EAAK,MAAM,KAAK,MAAM,OAAQ,GAAI,CAAA,EAAIH,EAAS,EAAE,EAC9EK,EAAM,MAAM,KAAK,aAAaH,EAAK,OAAQC,CAAa,EAC9D,MAAI,CAAA,EAAAE,EAAI,IAAMA,EAAI,SAAW,IAI/B,CA+BA,MAAM,WAAWlB,EAAaI,EAA4B,CAAA,EAAE,CAC1D,KAAK,UAAUJ,CAAG,EAClB,GAAM,CAAE,aAAAmB,EAAc,mBAAAC,CAAkB,EAAK,KAAK,iBAAiBhB,CAAI,EACjES,EAAU,CAAE,CAACxD,CAAyB,EAAGL,EAAkB,GAAGoE,CAAkB,EAChFN,EAAa7B,EAAkBe,CAAG,EAClC,CAAE,IAAAe,EAAK,QAASC,CAAa,EAAK,MAAM,KAAK,MAAM,OAAQF,EAAYK,EAAcN,EAAS,EAAE,EACtG,GAAI,CACF,IAAMK,EAAM,MAAM,KAAK,aAAaH,EAAK,OAAQC,EAAe,GAAI,CAAC,IAAK,IAAK,IAAK,GAAG,CAAC,EACxF,OAAIE,EAAI,SAAW,IACV,GAELA,EAAI,SAAW,KAAOA,EAAI,SAAW,IAChC,KAELA,EAAI,IAAMA,EAAI,SAAW,IAAY,IACpC,KAAK,qBAAqBA,CAAG,EAC3B,GACT,OAASG,EAAgB,CACvB,IAAMC,EAAeD,aAAiB,MAAQA,EAAM,QAAU,OAAOA,CAAK,EAC1E,MAAA,KAAK,KAAK,QAAS,GAAGxD,CAAY,mCAAmCyD,CAAY,EAAE,EAC7E,IAAI,MAAM,GAAGzD,CAAY,mCAAmCyD,CAAY,EAAE,CAClF,CACF,CACQ,MAAM,MACZvB,EACAwB,EACAC,EACAX,EACAY,EAAqB,CAErB,IAAMC,EAAW,IAAI,KAAI,EAAG,YAAW,EAAG,QAAQ,gBAAiB,EAAE,EAC/DX,EACJ,OAAOQ,GAAY,UAAYA,EAAQ,OAAS,EAAI,IAAI,IAAIA,EAAS,KAAK,QAAQ,EAAI,IAAI,IAAI,KAAK,QAAQ,EAC7GR,EAAI,SAAW,IAAI,UAAU,KAAK,UAAU,CAAC,GAAGA,EAAI,QAAQ,GAC5DF,EAAQxD,CAAyB,EAAIoE,EAAO,MAAME,EAAMF,CAAI,EAAIzE,EAChE6D,EAAQvD,EAAe,EAAIoE,EAC3Bb,EAAQtD,EAAW,EAAIwD,EAAI,KAC3B,IAAMa,EAAmB,KAAK,uBAAuBf,CAAO,EACtDG,EAAgB,OAAO,KAAKH,CAAO,EACtC,IAAIb,GAAOA,EAAI,YAAW,CAAE,EAC5B,KAAI,EACJ,KAAK,GAAG,EAEL6B,EAAmB,MAAM,KAAK,uBAClC9B,EACAgB,EACAS,EACAI,EACAZ,EACAS,CAAI,EAEAK,EAAe,MAAM,KAAK,mBAAmBJ,EAAUG,CAAgB,EACvEE,EAAY,MAAM,KAAK,oBAAoBL,EAAUI,CAAY,EACjEE,EAAsB,KAAK,0BAA0BN,EAAUV,EAAee,CAAS,EAC7F,OAAAlB,EAAQrD,EAAoB,EAAIwE,EACzB,CAAE,IAAKjB,EAAI,SAAQ,EAAI,QAAAF,CAAO,CACvC,CAEQ,uBAAuBA,EAAwC,CACrE,OAAO,OAAO,QAAQA,CAAO,EAC1B,IAAI,CAAC,CAACb,EAAKiC,CAAK,IAAM,GAAGjC,EAAI,YAAW,CAAE,IAAI,OAAOiC,CAAK,EAAE,KAAI,CAAE,EAAE,EACpE,KAAI,EACJ,KAAK;CAAI,CACd,CAEA,MAAM,uBACJlC,EACAgB,EACAS,EACAI,EACAZ,EACAS,EAAqB,CAErB,MAAO,CACL1B,EACAgB,EAAI,SACJ,KAAK,2BAA2BS,CAAK,EACrC,GAAGI,CAAgB;EACnBZ,EACAS,EAAO,MAAME,EAAMF,CAAI,EAAIzE,CAAAA,EAC3B,KAAK;CAAI,CACb,CAEA,MAAM,mBAAmB0E,EAAkBG,EAAwB,CACjE,IAAMK,EAAkB,CAACR,EAAS,MAAM,EAAG,CAAC,EAAG,KAAK,OAAQ5E,EAAYD,CAAgB,EAAE,KAAK,GAAG,EAClG,MAAO,CAACD,EAAe8E,EAAUQ,EAAiB,MAAMP,EAAME,CAAgB,CAAC,EAAE,KAAK;CAAI,CAC5F,CAEA,MAAM,oBAAoBH,EAAkBI,EAAoB,CAC9D,IAAMK,EAAa,MAAM,KAAK,iBAAiBT,EAAS,MAAM,EAAG,CAAC,CAAC,EACnE,OAAOU,EAAMD,EAAYL,EAAc,KAAK,CAC9C,CAEQ,0BAA0BJ,EAAkBV,EAAuBe,EAAiB,CAC1F,IAAMG,EAAkB,CAACR,EAAS,MAAM,EAAG,CAAC,EAAG,KAAK,OAAQ5E,EAAYD,CAAgB,EAAE,KAAK,GAAG,EAClG,MAAO,CACL,GAAGD,CAAa,eAAe,KAAK,WAAW,IAAIsF,CAAe,GAClE,iBAAiBlB,CAAa,GAC9B,aAAae,CAAS,EAAA,EACtB,KAAK,IAAI,CACb,CAEQ,iBAAiB3B,EAAyB,CAIhD,IAAMe,EAAoC,CAAA,EACpCC,EAA6C,CAAA,EAC7CiB,EAAY,CAAC,WAAY,gBAAiB,oBAAqB,qBAAqB,EAE1F,OAAW,CAACrC,EAAKiC,CAAK,IAAK,OAAO,QAAQ7B,CAAI,EACxCiC,EAAU,SAASrC,CAAG,EACxBoB,EAAmBpB,CAAG,EAAIiC,EAE1Bd,EAAanB,CAAG,EAAIiC,EAIxB,MAAO,CAAE,aAAAd,EAAc,mBAAAC,CAAkB,CAC3C,CAWA,MAAM,KACJnB,EAAoB,IACpBC,EAAiB,GACjBC,EAAkB,IAClBJ,EAAqB,MACrBK,EAAe,CAAA,EAAE,CAEjB,KAAK,gBAAgBH,CAAS,EAC9B,KAAK,aAAaC,CAAM,EACxB,KAAK,cAAcC,CAAO,EAC1B,KAAK,qBAAqBJ,CAAM,EAChC,KAAK,WAAWK,CAAI,EACpB,KAAK,KAAK,OAAQ,sBAAsBF,CAAM,EAAE,EAEhD,IAAMsB,EAAQ,CACZ,YAAazE,GACb,WAAY,OAAOoD,CAAO,EAC1B,GAAGC,CAAAA,EAEDF,EAAO,OAAS,IAClBsB,EAAM,OAAYtB,GAEpB,IAAMW,EAAU,CACd,CAACpD,CAAmB,EAAGN,EACvB,CAACE,CAAyB,EAAGL,CAAAA,EAEzB8D,EAAab,IAAc,IAAMA,EAAYlB,EAAUkB,CAAS,EAChE,CAAE,IAAAc,EAAK,QAASC,CAAa,EAAK,MAAM,KAAK,MAAM,MAAOF,EAAYU,EAAOX,EAAS,EAAE,EACxFyB,EAAe,GAAGvB,CAAG,IAAI,IAAI,gBAAgBS,CAAK,CAAC,GACnDN,EAAM,MAAM,KAAK,aAAaoB,EAAc,MAAOtB,CAAa,EAChEuB,EAAe,MAAMrB,EAAI,KAAI,EAEnC,GAAInB,IAAW,OAAQ,CACrB,IAAMkB,EAAgBC,EAAI,QAAQ,IAAIxD,CAAqB,EACrD8E,EAAetB,EAAI,QAAQ,IAAItD,CAAoB,EACnDgC,GAAOsB,EAAI,QAAQ,IAAIvD,CAAW,EAExC,MAAO,CACL,KAAMsD,EAAgB,CAACA,EAAgB,OACvC,MAAOuB,EAAe,IAAI,KAAKA,CAAY,EAAI,OAC/C,KAAM5C,IAAQ,MAAA,CAElB,CAEA,IAAM6C,EAAOC,EAAUH,CAAY,EAC7BI,EAASF,EAAK,kBAAoBA,EAAK,OAASA,EACtD,OAAOE,EAAO,UAAYA,CAC5B,CAWA,MAAM,qBACJ1C,EAAoB,IACpBC,EAAiB,GACjBH,EAAqB,MACrBK,EAAe,CAAA,EAAE,CAAA,IAAAwC,EAAAC,EAAAC,EAEjB,KAAK,gBAAgB7C,CAAS,EAC9B,KAAK,aAAaC,CAAM,EACxB,KAAK,qBAAqBH,CAAM,EAChC,KAAK,WAAWK,CAAI,EACpB,KAAK,KAAK,OAAQ,gCAAgCF,CAAM,EAAE,EAE1D,IAAMsB,EAAQ,CACZ,QAAS,GACT,GAAGpB,CAAAA,EAECS,EAAU,CACd,CAACpD,CAAmB,EAAGN,EACvB,CAACE,CAAyB,EAAGL,CAAAA,EAEzB8D,EAAab,IAAc,IAAMA,EAAYlB,EAAUkB,CAAS,EAChE,CAAE,IAAAc,EAAK,QAASC,CAAa,EAAK,MAAM,KAAK,MAAM,MAAOF,EAAYU,EAAOX,EAAS,EAAE,EACxFyB,EAAe,GAAGvB,CAAG,IAAI,IAAI,gBAAgBS,CAAK,CAAC,GACnDN,EAAM,MAAM,KAAK,aAAaoB,EAAc,MAAOtB,CAAa,EAChEuB,EAAe,MAAMrB,EAAI,KAAI,EAEnC,GAAInB,IAAW,OACb,MAAO,CACL,KAAM,GAAEgD,EAAA7B,EAAI,QAAQ,IAAIxD,CAAqB,KAAC,MAAAqF,IAAA,OAAAA,EAAI,KAClD,MAAO,IAAI,MAAKC,EAAA9B,EAAI,QAAQ,IAAItD,CAAoB,KAAC,MAAAoF,IAAA,OAAAA,EAAI,EAAE,EAC3D,MAAMC,EAAA/B,EAAI,QAAQ,IAAIvD,CAAW,KAAC,MAAAsF,IAAA,OAAAA,EAAI,EAAA,EAI1C,IAAMR,EAAOC,EAAUH,CAAY,EAC7BI,EAASF,EAAK,4BAA8BA,EAAK,OAASA,EAChE,OAAOE,EAAO,SAAWA,CAC3B,CAQA,MAAM,IAAI3C,EAAaI,EAA4B,CAAA,EAAE,CACnD,KAAK,UAAUJ,CAAG,EAClB,KAAK,KAAK,OAAQ,kBAAkBA,CAAG,EAAE,EACzC,GAAM,CAAE,aAAAmB,EAAc,mBAAAC,CAAkB,EAAK,KAAK,iBAAiBhB,CAAI,EACjES,EAAU,CACd,CAACpD,CAAmB,EAAGN,EACvB,CAACE,CAAyB,EAAGL,EAC7B,GAAGoE,CAAAA,EAECN,EAAa7B,EAAkBe,CAAG,EAClC,CAAE,IAAAe,EAAK,QAASC,CAAa,EAAK,MAAM,KAAK,MAAM,MAAOF,EAAYK,EAAcN,EAAS,EAAE,EAC/FK,EAAM,MAAM,KAAK,aAAaH,EAAK,MAAOC,EAAe,GAAI,CAAC,IAAK,IAAK,IAAK,GAAG,CAAC,EACvF,GAAIE,EAAI,SAAW,KAAOA,EAAI,SAAW,KAAOA,EAAI,SAAW,IAC7D,OAAA,KAAK,KAAK,QAAS,iCAAiCA,EAAI,MAAM,EAAE,EACzD,KAET,GAAI,CAACA,EAAI,GACP,MAAA,KAAK,KAAK,QAAS,iCAAiCA,EAAI,MAAM,EAAE,EAC1D,IAAI,MAAM,iCAAiCA,EAAI,MAAM,EAAE,EAE/D,OAAOA,EAAI,KAAI,CACjB,CAQA,MAAM,kBACJlB,EACAI,EAA4B,CAAA,EAAE,CAE9B,KAAK,UAAUJ,CAAG,EAClB,KAAK,KAAK,OAAQ,kBAAkBA,CAAG,EAAE,EACzC,GAAM,CAAE,aAAAmB,EAAc,mBAAAC,CAAkB,EAAK,KAAK,iBAAiBhB,CAAI,EACjES,EAAU,CACd,CAACpD,CAAmB,EAAGN,EACvB,CAACE,CAAyB,EAAGL,EAC7B,GAAGoE,CAAAA,EAECN,EAAa7B,EAAkBe,CAAG,EAClC,CAAE,IAAAe,EAAK,QAASC,CAAa,EAAK,MAAM,KAAK,MAAM,MAAOF,EAAYK,EAAcN,EAAS,EAAE,EACrG,GAAI,CACF,IAAMK,EAAM,MAAM,KAAK,aAAaH,EAAK,MAAOC,EAAe,GAAI,CAAC,IAAK,IAAK,IAAK,GAAG,CAAC,EACvF,GAAIE,EAAI,SAAW,KAAOA,EAAI,SAAW,KAAOA,EAAI,SAAW,IAC7D,OAAA,KAAK,KAAK,QAAS,iCAAiCA,EAAI,MAAM,EAAE,EACzD,CAAE,KAAM,KAAM,KAAM,IAAI,EAEjC,GAAI,CAACA,EAAI,GACP,MAAA,KAAK,KAAK,QAAS,iCAAiCA,EAAI,MAAM,EAAE,EAC1D,IAAI,MAAM,iCAAiCA,EAAI,MAAM,EAAE,EAG/D,IAAMtB,EAAOsB,EAAI,QAAQ,IAAI,MAAM,EACnC,GAAI,CAACtB,EACH,MAAM,IAAI,MAAM,oCAAoC,EAEtD,IAAM6C,EAAO,MAAMvB,EAAI,KAAI,EAC3B,MAAO,CAAE,KAAMrB,EAAaD,CAAI,EAAG,KAAA6C,CAAI,CACzC,OAASpB,EAAO,CACd,MAAA,KAAK,KAAK,QAAS,wBAAwBrB,CAAG,eAAeqB,CAAK,EAAE,EAC9DA,CACR,CACF,CAQA,MAAM,QAAQrB,EAAaI,EAA4B,CAAA,EAAE,CACvD,KAAK,UAAUJ,CAAG,EAClB,KAAK,KAAK,OAAQ,uBAAuBA,CAAG,EAAE,EAC9C,GAAM,CAAE,aAAAmB,EAAc,mBAAAC,CAAkB,EAAK,KAAK,iBAAiBhB,CAAI,EACjES,EAAU,CACd,CAACpD,CAAmB,EAAGN,EACvB,CAACE,CAAyB,EAAGL,EAC7B,GAAGoE,CAAAA,EAECN,EAAa7B,EAAkBe,CAAG,EAClC,CAAE,IAAAe,EAAK,QAASC,CAAa,EAAK,MAAM,KAAK,MAAM,OAAQF,EAAYK,EAAcN,EAAS,EAAE,EAEhGK,EAAM,MAAM,KAAK,aAAaH,EAAK,OAAQC,EAAe,GAAI,CAAC,IAAK,IAAK,GAAG,CAAC,EAGnF,GAFA,KAAK,KAAK,OAAQ,oBAAqBE,EAAI,OAAQA,EAAI,UAAW,EAAE,EAEhEA,EAAI,SAAW,KAAOA,EAAI,SAAW,IACvC,OAAO,KAGT,IAAMtB,EAAOsB,EAAI,QAAQ,IAAI,MAAM,EACnC,GAAI,CAACtB,EACH,MAAA,KAAK,KAAK,QAAS,oCAAoC,EACjD,IAAI,MAAM,oCAAoC,EAEtD,OAAOC,EAAaD,CAAI,CAC1B,CAWA,MAAM,YACJI,EACAkD,EAAqB,GACrBC,EAAoB,EACpBC,EAAkB,KAAK,sBACvBhD,EAA4B,CAAA,EAAE,CAE9B,KAAK,UAAUJ,CAAG,EAClB,GAAM,CAAE,aAAAmB,EAAc,mBAAAC,CAAkB,EAAK,KAAK,iBAAiB,CAAE,GAAGhB,CAAI,CAAE,EACxES,EAAU,CACd,CAACpD,CAAmB,EAAGN,EACvB,CAACE,CAAyB,EAAGL,EAC7B,GAAIkG,EAAY,CAAA,EAAK,CAAE,MAAO,SAASC,CAAS,IAAIC,EAAU,CAAC,EAAE,EACjE,GAAGhC,CAAAA,EAECN,EAAa7B,EAAkBe,CAAG,EAClC,CAAE,IAAAe,EAAK,QAASC,CAAa,EAAK,MAAM,KAAK,MAAM,MAAOF,EAAYK,EAAcN,EAAS,EAAE,EAC/FyB,EAAe,GAAGvB,CAAG,IAAI,IAAI,gBAAgBI,CAAY,CAAC,GAEhE,OAAO,KAAK,aAAamB,EAAc,MAAOtB,CAAa,CAC7D,CASA,MAAM,IAAIhB,EAAayC,EAAqB,CAE1C,GADA,KAAK,UAAUzC,CAAG,EACd,EAAEyC,aAAgB,QAAU,OAAOA,GAAS,UAC9C,MAAA,KAAK,KAAK,QAASnE,CAA0B,EACvC,IAAI,UAAUA,CAA0B,EAGhD,KAAK,KAAK,OAAQ,oBAAoB0B,CAAG,EAAE,EAC3C,IAAMiB,EAAgB,OAAOwB,GAAS,SAAW,OAAO,WAAWA,CAAI,EAAIA,EAAK,OAC1E5B,EAAU,CACd,CAACnD,CAAqB,EAAGuD,CAAAA,EAErBH,EAAa7B,EAAkBe,CAAG,EAClC,CAAE,IAAAe,EAAK,QAASC,CAAa,EAAK,MAAM,KAAK,MAAM,MAAOF,EAAY,CAAA,EAAID,EAAS4B,CAAI,EAE7F,OADY,MAAM,KAAK,aAAa1B,EAAK,MAAOC,EAAeyB,CAAI,CAErE,CAUA,MAAM,qBAAqBzC,EAAaqD,EAAmBpG,GAA2B,CAEpF,GADA,KAAK,UAAU+C,CAAG,EACd,OAAOqD,GAAa,SACtB,MAAA,KAAK,KAAK,QAAS,GAAGxF,CAAY,2BAA2B,EACvD,IAAI,UAAU,GAAGA,CAAY,2BAA2B,EAEhE,KAAK,KAAK,OAAQ,0CAA0CmC,CAAG,EAAE,EACjE,IAAMwB,EAAQ,CAAE,QAAS,EAAE,EACrBX,EAAU,CACd,CAACpD,CAAmB,EAAG4F,EACvB,CAAChG,CAAyB,EAAGL,CAAAA,EAGzB8D,EAAa7B,EAAkBe,CAAG,EAClC,CAAE,IAAAe,EAAK,QAASC,CAAa,EAAK,MAAM,KAAK,MAAM,OAAQF,EAAYU,EAAOX,EAAS,EAAE,EACzFyB,EAAe,GAAGvB,CAAG,IAAI,IAAI,gBAAgBS,CAAK,CAAC,GAGnDe,EAAe,MADT,MAAM,KAAK,aAAaD,EAAc,OAAQtB,CAAa,GACxC,KAAI,EAC7BsC,EAAiBZ,EAAUH,CAAY,EAE7C,GACE,OAAOe,GAAmB,UAC1BA,IAAmB,MACnB,UAAWA,GACX,OAAOA,EAAe,OAAU,UAChCA,EAAe,QAAU,MACzB,YAAaA,EAAe,MAC5B,CACA,IAAMhC,EAAe,OAAOgC,EAAe,MAAM,OAAO,EACxD,MAAA,KAAK,KAAK,QAAS,GAAGzF,CAAY,qCAAqCyD,CAAY,EAAE,EAC/E,IAAI,MAAM,GAAGzD,CAAY,qCAAqCyD,CAAY,EAAE,CACpF,CAEA,GAAI,OAAOgC,GAAmB,UAAYA,IAAmB,KAAM,CACjE,GAAI,CAACA,EAAe,+BAAiC,CAACA,EAAe,8BAA8B,SACjG,MAAA,KAAK,KAAK,QAAS,GAAGzF,CAAY,4DAA4D,EACxF,IAAI,MAAM,GAAGA,CAAY,kEAAkE,EAGnG,OAAOyF,EAAe,8BAA8B,QACtD,KACE,OAAA,KAAK,KAAK,QAAS,GAAGzF,CAAY,+DAA+D,EAC3F,IAAI,MAAM,GAAGA,CAAY,+DAA+D,CAElG,CAYA,MAAM,WACJmC,EACAyC,EACAc,EACAC,EACApD,EAAe,CAAA,EAAE,CAEjB,KAAK,0BAA0BJ,EAAKyC,EAAMc,EAAUC,EAAYpD,CAAI,EACpE,IAAMoB,EAAQ,CAAE,SAAA+B,EAAU,WAAAC,EAAY,GAAGpD,CAAI,EACvCS,EAAU,CACd,CAACnD,CAAqB,EAAG+E,EAAK,MAAA,EAG1B3B,EAAa7B,EAAkBe,CAAG,EAClC,CAAE,IAAAe,EAAK,QAASC,CAAa,EAAK,MAAM,KAAK,MAAM,MAAOF,EAAYU,EAAOX,EAAS4B,CAAI,EAC1FH,EAAe,GAAGvB,CAAG,IAAI,IAAI,gBAAgBS,CAAK,CAAC,GAEnDN,EAAM,MAAM,KAAK,aAAaoB,EAAc,MAAOtB,EAAeyB,CAAI,EACtEgB,EAAO5D,EAAaqB,EAAI,QAAQ,IAAI,MAAM,GAAK,EAAE,EACvD,MAAO,CAAE,WAAAsC,EAAY,KAAAC,CAAI,CAC3B,CAEQ,0BACNzD,EACAyC,EACAc,EACAC,EACApD,EAAY,CAGZ,GADA,KAAK,UAAUJ,CAAG,EACd,EAAEyC,aAAgB,QAAU,OAAOA,GAAS,UAC9C,MAAA,KAAK,KAAK,QAASnE,CAA0B,EACvC,IAAI,UAAUA,CAA0B,EAEhD,GAAI,OAAOiF,GAAa,UAAYA,EAAS,KAAI,EAAG,SAAW,EAC7D,MAAA,KAAK,KAAK,QAASpF,CAAwB,EACrC,IAAI,UAAUA,CAAwB,EAE9C,GAAI,CAAC,OAAO,UAAUqF,CAAU,GAAKA,GAAc,EACjD,MAAA,KAAK,KAAK,QAAS,GAAG3F,CAAY,uCAAuC,EACnE,IAAI,UAAU,GAAGA,CAAY,uCAAuC,EAE5E,KAAK,WAAWuC,CAAI,CACtB,CAWA,MAAM,wBACJJ,EACAuD,EACAG,EAAwB,CAGxB,GADA,KAAK,UAAU1D,CAAG,EACd,OAAOuD,GAAa,UAAYA,EAAS,KAAI,EAAG,SAAW,EAC7D,MAAA,KAAK,KAAK,QAASpF,CAAwB,EACrC,IAAI,UAAUA,CAAwB,EAE9C,GAAI,CAAC,MAAM,QAAQuF,CAAK,GAAKA,EAAM,SAAW,EAC5C,MAAA,KAAK,KAAK,QAAStF,EAAoB,EACjC,IAAI,UAAUA,EAAoB,EAE1C,GAAI,CAACsF,EAAM,MAAMC,GAAQ,OAAOA,EAAK,YAAe,UAAY,OAAOA,EAAK,MAAS,QAAQ,EAC3F,MAAA,KAAK,KAAK,QAAStF,EAAkB,EAC/B,IAAI,UAAUA,EAAkB,EAExC,KAAK,KAAK,OAAQ,6BAA6BkF,CAAQ,eAAevD,CAAG,EAAE,EAC3E,IAAMwB,EAAQ,CAAE,SAAA+B,CAAQ,EAClBK,EAAU,KAAK,iCAAiCF,CAAK,EACrD7C,EAAU,CACd,CAACpD,CAAmB,EAAGP,EACvB,CAACQ,CAAqB,EAAG,OAAO,WAAWkG,CAAO,EAAE,SAAQ,EAC5D,CAACvG,CAAyB,EAAG,MAAMsE,EAAMiC,CAAO,CAAA,EAE5C9C,EAAa7B,EAAkBe,CAAG,EAClC,CAAE,IAAAe,EAAK,QAASC,CAAa,EAAK,MAAM,KAAK,MAAM,OAAQF,EAAYU,EAAOX,EAAS+C,CAAO,EAC9FtB,EAAe,GAAGvB,CAAG,IAAI,IAAI,gBAAgBS,CAAK,CAAC,GAGnDe,EAAe,MADT,MAAM,KAAK,aAAaD,EAAc,OAAQtB,EAAe4C,CAAO,GACjD,KAAI,EAC7BN,EAAiBZ,EAAUH,CAAY,EAE7C,GACE,OAAOe,GAAmB,UAC1BA,IAAmB,MACnB,UAAWA,GACX,OAAOA,EAAe,OAAU,UAChCA,EAAe,QAAU,MACzB,YAAaA,EAAe,MAC5B,CACA,IAAMhC,EAAe,OAAOgC,EAAe,MAAM,OAAO,EACxD,MAAA,KAAK,KAAK,QAAS,GAAGzF,CAAY,qCAAqCyD,CAAY,EAAE,EAC/E,IAAI,MAAM,GAAGzD,CAAY,qCAAqCyD,CAAY,EAAE,CACpF,CAEA,OAAOgC,EAAe,6BACxB,CASA,MAAM,qBAAqBtD,EAAauD,EAAgB,CAGtD,GADA,KAAK,UAAUvD,CAAG,EACd,OAAOuD,GAAa,UAAYA,EAAS,KAAI,EAAG,SAAW,EAC7D,MAAA,KAAK,KAAK,QAASpF,CAAwB,EACrC,IAAI,UAAUA,CAAwB,EAG9C,KAAK,KAAK,OAAQ,6BAA6BoF,CAAQ,eAAevD,CAAG,EAAE,EAG3E,IAAMwB,EAAQ,CAAE,SAAA+B,CAAQ,EAClB1C,EAAU,CACd,CAACpD,CAAmB,EAAGP,EACvB,CAACG,CAAyB,EAAGL,CAAAA,EAG/B,GAAI,CAEF,IAAM8D,EAAa7B,EAAkBe,CAAG,EAClC,CAAE,IAAAe,EAAK,QAASC,CAAa,EAAK,MAAM,KAAK,MAAM,SAAUF,EAAYU,EAAOX,EAAS,EAAE,EAC3FyB,EAAe,GAAGvB,CAAG,IAAI,IAAI,gBAAgBS,CAAK,CAAC,GAEnDN,EAAM,MAAM,KAAK,aAAaoB,EAAc,SAAUtB,CAAa,EAGzE,GAAIE,EAAI,GAAI,CACV,IAAMqB,EAAe,MAAMrB,EAAI,KAAI,EAC7BoC,EAAiBZ,EAAUH,CAAY,EAE7C,GACE,OAAOe,GAAmB,UAC1BA,IAAmB,MACnB,UAAWA,GACX,OAAOA,EAAe,OAAU,UAChCA,EAAe,QAAU,MACzB,YAAaA,EAAe,MAC5B,CACA,IAAMhC,EAAe,OAAOgC,EAAe,MAAM,OAAO,EACxD,MAAA,KAAK,KAAK,QAAS,GAAGzF,CAAY,qCAAqCyD,CAAY,EAAE,EAC/E,IAAI,MAAM,GAAGzD,CAAY,qCAAqCyD,CAAY,EAAE,CACpF,CAEA,MAAO,CACL,OAAQ,UACR,IAAAtB,EACA,SAAAuD,EACA,SAAUD,CAAAA,CAEd,KACE,OAAA,KAAK,KAAK,QAAS,GAAGzF,CAAY,oCAAoCqD,EAAI,MAAM,EAAE,EAC5E,IAAI,MAAM,GAAGrD,CAAY,oCAAoCqD,EAAI,MAAM,EAAE,CAEnF,OAASG,EAAgB,CACvB,IAAMC,EAAeD,aAAiB,MAAQA,EAAM,QAAU,OAAOA,CAAK,EAC1E,MAAA,KAAK,KAAK,QAAS,GAAGxD,CAAY,4CAA4CmC,CAAG,KAAKsB,CAAY,EAAE,EAC9F,IAAI,MAAM,GAAGzD,CAAY,4CAA4CmC,CAAG,KAAKsB,CAAY,EAAE,CACnG,CACF,CAEQ,iCAAiCoC,EAAwB,CAC/D,MAAO;;UAEDA,EACC,IACCC,GAAQ;;0BAEMA,EAAK,UAAU;oBACrBA,EAAK,IAAI;;SAEpB,EAEE,KAAK,EAAE,CAAC;;KAGjB,CAOA,MAAM,OAAO3D,EAAW,CACtB,KAAK,UAAUA,CAAG,EAClB,KAAK,KAAK,OAAQ,mBAAmBA,CAAG,EAAE,EAC1C,IAAMa,EAAU,CACd,CAACpD,CAAmB,EAAGN,EACvB,CAACE,CAAyB,EAAGL,CAAAA,EAEzB8D,EAAa7B,EAAkBe,CAAG,EAClC,CAAE,IAAAe,EAAK,QAASC,CAAa,EAAK,MAAM,KAAK,MAAM,SAAUF,EAAY,CAAA,EAAID,EAAS,EAAE,EACxFK,EAAM,MAAM,KAAK,aAAaH,EAAK,SAAUC,CAAa,EAChE,OAAIE,EAAI,SAAW,KAAOA,EAAI,SAAW,GAI3C,CAEA,MAAM,aACJH,EACAhB,EACAc,EACAY,EACAoC,EAAiC,CAAA,EAAE,CAEnC,KAAK,KAAK,OAAQ,WAAW9D,CAAM,eAAegB,CAAG,cAAc,KAAK,UAAUF,CAAO,CAAC,EAAE,EAC5F,IAAMK,EAAM,MAAM,MAAMH,EAAK,CAC3B,OAAAhB,EACA,QAAAc,EACA,KAAM,CAAC,MAAO,MAAM,EAAE,SAASd,CAAM,EAAI,OAAY0B,EACrD,OAAQ,KAAK,sBAAwB,OAAY,YAAY,QAAQ,KAAK,mBAAmB,EAAI,MAAA,CAClG,EAED,MAAI,CAACP,EAAI,IAAM,CAAC2C,EAAqB,SAAS3C,EAAI,MAAM,GACtD,MAAM,KAAK,qBAAqBA,CAAG,EAG9BA,CACT,CAEA,MAAM,qBAAqBA,EAAa,CACtC,IAAM4C,EAAY,MAAM5C,EAAI,KAAI,EAC1B6C,EAAY7C,EAAI,QAAQ,IAAI,kBAAkB,GAAK,UACnDI,EAAeJ,EAAI,QAAQ,IAAI,qBAAqB,GAAKA,EAAI,WACnE,MAAA,KAAK,KACH,QACA,GAAGrD,CAAY,8BAA8BqD,EAAI,MAAM,KAAK6C,CAAS,MAAMzC,CAAY,cAAcwC,CAAS,EAAE,EAE5G,IAAI,MACR,GAAGjG,CAAY,8BAA8BqD,EAAI,MAAM,KAAK6C,CAAS,MAAMzC,CAAY,eAAewC,CAAS,EAAE,CAErH,CAEA,2BAA2BE,EAAmB,CAC5C,OAAI,OAAO,KAAKA,CAAW,EAAE,OAAS,EAC7B,GAGF,OAAO,KAAKA,CAAW,EAC3B,KAAI,EACJ,IAAIhE,GAAO,GAAG,mBAAmBA,CAAG,CAAC,IAAI,mBAAoBgE,EAAoChE,CAAG,CAAC,CAAC,EAAE,EACxG,KAAK,GAAG,CACb,CACA,MAAM,iBAAiBiE,EAAiB,CACtC,IAAMC,EAAQ,MAAM9B,EAAM,OAAO,KAAK,eAAe,GAAI6B,CAAS,EAC5DE,EAAU,MAAM/B,EAAM8B,EAAO,KAAK,MAAM,EACxCE,EAAW,MAAMhC,EAAM+B,EAASrH,CAAU,EAChD,OAAOsF,EAAMgC,EAAUvH,CAAgB,CACzC,CAAA,EAGI8E,EAAQ,MAAO0C,GAA6C,CAChE,IAAMC,EAAU3F,GAAY,QAAQ,EACpC,OAAA2F,EAAQ,OAAOD,CAAO,EACfC,EAAQ,OAAO,KAAK,CAC7B,EAEMlC,EAAQ,MAAOpC,EAAsBqE,EAAiBE,IAAqC,CAC/F,IAAMC,EAAU9F,GAAY,SAAUsB,CAAG,EACzC,OAAAwE,EAAQ,OAAOH,CAAO,EACfG,EAAQ,OAAOD,CAAQ,CAChC,EACa1E,EAAgBD,GAAwB,CACnD,IAAM6E,EAAuC,CAC3C,IAAK,GACL,SAAU,GACV,QAAS,GACT,SAAU,GACV,WAAY,EAAA,EAEd,OAAO7E,EAAK,QAAQ,uCAAwC8E,GAAKD,EAAaC,CAAC,CAAW,CAC5F,EAEMhC,EAAaiC,GAAsC,CACvD,IAAMC,EAAe3C,GACZA,EACJ,QAAQ,UAAW,GAAG,EACtB,QAAQ,UAAW,GAAG,EACtB,QAAQ,QAAS,GAAG,EACpB,QAAQ,QAAS,GAAG,EACpB,QAAQ,SAAU,GAAG,EAGpB4C,EAAO,CAAA,EACPC,EAAK,2DACPC,EAEJ,KAAQA,EAAQD,EAAG,KAAKH,CAAG,GAAI,CAC7B,GAAM,CAAC,CAAEzE,EAAQF,EAAKiC,CAAK,EAAI8C,EACzBC,EAAU9E,EAAO,YAAW,EAAKF,EACjCiF,EAAchD,GAAS,KAAOS,EAAUT,CAAK,EAAI,GAEnD,OAAOgD,GAAgB,SACxBJ,EAAgCG,CAAO,EAAInF,EAAa+E,EAAYK,CAAW,CAAC,EACxE,MAAM,QAASJ,EAAgCG,CAAO,CAAC,EAC/DH,EAAgCG,CAAO,EAAE,KAAKC,CAAW,EAEzDJ,EAAgCG,CAAO,EACrCH,EAAgCG,CAAO,GAAK,KACzC,CAAEH,EAAgCG,CAAO,EAAGC,CAAW,EACvDrG,GAAYoG,CAAO,EACjB,CAACC,CAAW,EACZA,CAEZ,CAEA,OAAO,OAAO,KAAKJ,CAAI,EAAE,OAASA,EAAOD,EAAYD,CAAG,CAC1D,ECpqCA,OAAOO,OAAU,UCDjB,IAAMC,EAAyB,CAC9B,iBAAkB,mBAClB,kBAAmB,oBACnB,wBAAyB,0BACzB,wBAAyB,0BACzB,wBAAyB,0BACzB,+BAAgC,iCAChC,qBAAsB,uBACtB,wBAAyB,0BACzB,0BAA2B,4BAC3B,mBAAoB,qBACpB,WAAY,aACZ,eAAgB,iBAChB,gBAAiB,kBACjB,aAAc,eACd,aAAc,eACd,iBAAkB,mBAClB,aAAc,eACd,YAAa,cACb,cAAe,eAChB,EACMC,EAAN,cAA8B,KAAM,CACnC,YAAYC,EAASC,EAAOH,EAAuB,cAAe,CACjE,MAAM,oBAAoBE,CAAO,aAAaC,CAAI,EAAE,EACpD,KAAK,KAAO,KAAK,YAAY,KAC7B,KAAK,KAAOA,EACZ,MAAM,kBAAkB,KAAM,KAAK,WAAW,CAC/C,CACD,EAQA,IAAMC,EAAN,cAAoCC,CAAgB,CACnD,YAAYC,EAAS,CACpB,MAAMA,EAASC,EAAuB,uBAAuB,CAC9D,CACD,EAEMC,EAAN,cAAsCH,CAAgB,CACrD,YAAYC,EAAS,CACpB,MAAMA,EAASC,EAAuB,yBAAyB,CAChE,CACD,EAEME,EAAN,cAA+BJ,CAAgB,CAC9C,YAAYC,EAASI,EAAW,CAC/B,MAAM,MAAMA,CAAS,sBAAsBJ,CAAO,GAAIC,EAAuB,kBAAkB,CAChG,CACD,ECpDA,OAAS,cAAAI,MAAkB,cAE3B,IAAMC,EAAe,CAACC,EAAUC,IACxB,OAAO,KAAKA,CAAK,EAAE,MAAOC,GAAQF,EAASE,CAAG,IAAMD,EAAMC,CAAG,CAAC,EAGhEC,GAAe,SAChB,OAAOL,EAAe,KAAe,OAAOA,GAAe,WACvDA,EAAW,EAEf,OAAO,OAAW,KAAe,OAAO,QAAW,UAAY,OAAO,OAAO,YAAe,WACxF,OAAO,WAAW,EAEnB,uCAAuC,QAAQ,QAAS,SAAUM,EAAG,CAC3E,IAAIC,EAAK,KAAK,OAAO,EAAI,GAAM,EAC9BC,EAAIF,IAAM,IAAMC,EAAKA,EAAI,EAAO,EACjC,OAAOC,EAAE,SAAS,EAAE,CACrB,CAAC,EAGIC,GAAe,CAACC,EAAOC,EAAO,qBAAuB,CAC1D,OAAQ,OAAOD,EAAO,CACrB,IAAK,SACJ,OAAIE,GAAQF,CAAK,EACT,CACN,KAAM,SACN,KAAM,MACN,KAAM,GACN,YAAa,MACd,EAEM,SACR,IAAK,SACJ,OAAO,OAAO,UAAUA,CAAK,EAAI,MAAQ,QAC1C,IAAK,UACJ,MAAO,UACR,IAAK,SACJ,OAAIA,IAAU,KAAa,OACvB,MAAM,QAAQA,CAAK,EAAU,CAAE,KAAM,QAAS,MAAOD,GAAaC,EAAM,CAAC,CAAC,CAAE,EACzEG,EAAcH,EAAOC,CAAI,EACjC,QACC,MAAO,QACT,CACD,EAEMG,GAAyBC,GAAW,CACzC,IAAMC,EAAU,CACf,KAAM,MACN,KAAM,SACN,KAAM,GACN,YAAa,MACd,EAEA,OAAID,EAAO,OAAS,SACAA,EAAO,OAAO,KAAME,GAAUA,EAAM,OAAS,KAAK,GAEpEF,EAAO,OAAO,QAAQC,CAAO,EAEpBD,EAAO,OAAS,SAAWA,EAAO,MAAM,OAAS,WACxCA,EAAO,MAAM,OAAO,KAAME,GAAUA,EAAM,OAAS,KAAK,GAE1EF,EAAO,MAAM,OAAO,QAAQC,CAAO,GAG9BD,CACR,EAEMF,EAAgB,CAACK,EAAMC,EAAW,kBAAoB,CACvD,MAAM,QAAQD,CAAI,IACrBA,EAAOA,EAAK,CAAC,GAEd,IAAME,EAAS,OAAO,QAAQF,CAAI,EAAE,IAAI,CAAC,CAACP,EAAMD,CAAK,KAC7C,CAAE,KAAAC,EAAM,KAAMF,GAAaC,EAAO,GAAGS,CAAQ,IAAIR,CAAI,EAAE,CAAE,EAChE,EASD,OAAOG,GAPQ,CACd,KAAM,SACN,KAAMK,EACN,OAAQC,CACT,CAGmC,CACpC,EAEMR,GAAWS,GACI,yEACD,KAAKA,CAAG,EF3E5B,IAAMC,EAAc,aACdC,EAAoB,IACpBC,EAAqB,aACrBC,EAAa,QACbC,GAAY,KAAO,KACnBC,GAAY,EAAID,GAChBE,EAAa,OAAO,KAAK,GAAI,MAAM,EAEnCC,EAAoB,CAACC,EAAYC,EAAuB,4BAA8B,CAC3F,MAAM,IAAIC,EAAwB,GAAGV,CAAW,+BAAgCQ,CAAS,CAC1F,EAEMG,EAAeC,GAAY,CAChC,GAAIA,EAAQ,KAAK,IAAM,IAAMA,IAAY,MAAQ,OAAOA,EAAY,KAAeA,EAAQ,OAAS,KAAOA,IAAY,KACtH,MAAM,IAAIC,EAAgB,GAAGb,CAAW,kDAAmDS,EAAuB,gBAAgB,CAEpI,EAiEMK,GAAN,KAAiB,CAahB,YACCC,EAAU,CACT,YAAa,OACb,gBAAiB,OACjB,SAAU,OACV,WAAY,OACZ,OAAQ,OACR,OAAQ,KACR,UAAWb,CACZ,EACC,CACD,KAAK,WAAWa,CAAO,EACvB,KAAK,SAAW,IAAI,IACpB,KAAK,IAAM,IAAIC,GAAGD,CAAO,EACzB,KAAK,WAAaA,EAAQ,WAAab,EACvC,KAAK,MAAQe,EACd,CAEA,WAAcC,GAAS,CACtB,IAAMC,EAAiB,CAAC,cAAe,kBAAmB,WAAY,YAAY,EAClF,QAAWC,KAASD,EACnB,GAAI,CAACD,EAAKE,CAAK,EACd,MAAM,IAAIP,EAAgB,GAAGb,CAAW,KAAKoB,CAAK,eAAgBX,EAAuB,gBAAgB,CAG5G,EAOA,MAAM,iBAAkB,CACvB,GAAI,CACH,IAAMY,EAAS,MAAM,KAAK,IAAI,KAAKpB,EAAmB,KAAK,UAAU,EACrE,OAAI,OAAOoB,GAAW,UAAYA,IAAW,MAAQA,EAAO,WAAa,IAAY,CAAC,EAE/EA,EAAO,IAAKC,GAAUA,EAAM,IAAI,MAAM,KAAK,WAAW,OAAS,EAAG,CAACnB,EAAW,MAAM,CAAC,CAC7F,OAASoB,EAAO,CACf,MAAM,IAAIC,EAAiB,GAAGxB,CAAW,KAAKuB,EAAM,OAAO,GAAId,EAAuB,kBAAkB,CACzG,CACD,CAQA,MAAM,iBAAiBG,EAAS,CAC/B,GAAI,CACHD,EAAYC,CAAO,EACnB,IAAMa,EAAS,MAAM,KAAK,IAAI,WAAW,GAAG,KAAK,UAAU,GAAGxB,CAAiB,GAAGW,CAAO,GAAGT,CAAU,EAAE,EACxG,eAAQ,IAAI,uBAAwB,GAAG,KAAK,UAAU,GAAGF,CAAiB,GAAGW,CAAO,GAAGT,CAAU,GAAIsB,CAAM,EACpG,CAAC,CAACA,CACV,OAASF,EAAO,CACf,GAAIA,EAAM,QAAQ,SAAS,WAAW,EACrC,MAAO,GAER,cAAQ,IAAI,uBAAwBX,EAASW,CAAK,EAC5C,IAAIV,EAAgB,GAAGb,CAAW,KAAKuB,EAAM,OAAO,GAAId,EAAuB,oBAAoB,CAC1G,CACD,CAUA,MAAM,iBAAiBG,EAASc,EAAQC,EAAO,CAAC,EAAG,CAClD,GAAI,CAGH,GAFAhB,EAAYC,CAAO,EAEf,CADW,MAAM,KAAK,iBAAiBA,CAAO,EACrC,CACZ,GAAIe,EAAK,OAAS,GAAKD,EAAQ,CAC9B,IAAME,EAAc,KAAK,MAAM,MAAM,CAAE,KAAM,QAAS,MAAOF,CAAO,CAAC,EACrE,MAAM,KAAK,IAAI,IAAI,GAAG,KAAK,UAAU,GAAGzB,CAAiB,GAAGW,CAAO,GAAGT,CAAU,GAAIyB,EAAY,SAASD,CAAI,CAAC,CAC/G,MACC,MAAM,KAAK,IAAI,IAAI,GAAG,KAAK,UAAU,GAAG1B,CAAiB,GAAGW,CAAO,GAAGT,CAAU,GAAIG,CAAU,EAE/F,OAAO,KAAK,WAAWM,EAASc,EAAQ,EAAK,CAC9C,CACA,MAAM,IAAIb,EAAgB,GAAGb,CAAW,gBAAgBY,CAAO,kBAAmBH,EAAuB,iBAAiB,CAC3H,OAASc,EAAO,CACf,MAAIA,aAAiBV,EACdU,EAED,IAAIV,EAAgB,GAAGb,CAAW,KAAKuB,EAAM,OAAO,GAAId,EAAuB,uBAAuB,CAC7G,CACD,CAQA,MAAM,iBAAiBG,EAAS,CAC/B,GAAI,CACHD,EAAYC,CAAO,EACnB,IAAMiB,EAAM,GAAG,KAAK,UAAU,GAAG5B,CAAiB,GAAGW,CAAO,GAAGT,CAAU,GAEzE,GADe,MAAM,KAAK,iBAAiBS,CAAO,EACtC,CACX,MAAM,KAAK,IAAI,OAAOiB,CAAG,EACzB,IAAMC,EAAU,MAAM,KAAK,iBAAiBlB,CAAO,EACnD,GAAI,OAAOkB,GAAY,UAAW,CACjC,GAAI,CAACA,EACJ,YAAK,SAAS,OAAOlB,CAAO,EACrB,GAER,MAAM,IAAIC,EAAgB,GAAGb,CAAW,iCAAiCY,CAAO,GAAIH,EAAuB,kBAAkB,CAC9H,CACA,MAAM,IAAIe,EAAiB,GAAGxB,CAAW,iCAAiCY,CAAO,GAAIH,EAAuB,kBAAkB,CAC/H,CACA,MAAM,IAAII,EAAgB,GAAGb,CAAW,gBAAgBY,CAAO,kBAAmBH,EAAuB,uBAAuB,CACjI,OAASc,EAAO,CACf,MAAIA,aAAiBC,EACdD,EAED,IAAIV,EACT,GAAGb,CAAW,kCAAkCuB,EAAM,OAAO,GAC7Dd,EAAuB,uBACxB,CACD,CACD,CAUA,MAAM,WAAWG,EAASc,EAAQK,EAAa,GAAM,CACpD,GAAI,CACHpB,EAAYC,CAAO,EACnB,IAAMoB,EAAU,GAAG,KAAK,UAAU,GAAG/B,CAAiB,GAAGW,CAAO,GAAGT,CAAU,GAE7E,GAAI,CADW,MAAM,KAAK,IAAI,WAAW6B,CAAO,EACnC,CACZ,GAAI,CAACD,EACJ,MAAM,IAAIlB,EAAgB,GAAGb,CAAW,gBAAgBY,CAAO,kBAAmBH,EAAuB,oBAAoB,EAG9H,MAAM,KAAK,IAAI,IAAIuB,EAAS1B,CAAU,CACvC,CACA,IAAM2B,EAAYP,GAAU,KAAK,SAAS,IAAId,CAAO,GAAK,OAC1D,OAAO,IAAIsB,EAAWtB,EAASqB,EAAW,KAAK,IAAK,KAAK,UAAU,CACpE,OAASV,EAAO,CAEf,MAAIA,EAAM,QAAQ,SAAS,cAAc,EAClC,IAAIY,EACT,GAAGnC,CAAW,8BAA8BuB,EAAM,OAAO,GACzDd,EAAuB,uBACxB,EAGK,IAAII,EAAgB,GAAGb,CAAW,KAAKuB,EAAM,OAAO,GAAId,EAAuB,oBAAoB,CAC1G,CACD,CAMA,GAAK,IACG,KAAK,GAEd,EAiCMyB,EAAN,MAAME,CAAW,CAUhB,YAAYxB,EAASc,EAAQW,EAAIC,EAAYpC,EAAoBqC,EAAY,GAAO,CACnF,KAAK,SAAW3B,EAChB,KAAK,IAAMyB,EACX,KAAK,MAAQpB,GACb,KAAK,UAAY,GACjB,KAAK,WAAa,CAAC,EACnB,KAAK,QAAUS,EACf,KAAK,UAAY,OAAOA,EAAW,IAAc,KAAO,KAAK,MAAM,MAAMA,CAAM,EAC/E,KAAK,WAAaY,EAClB,KAAK,WAAaC,CACnB,CAEA,SAAW,KAAO,CACjB,QAAS,KAAK,SACd,GAAI,KAAK,IACT,KAAM,KAAK,MACX,SAAU,KAAK,UACf,UAAW,KAAK,WAChB,UAAW,KAAK,UACjB,GAEA,SAAYC,GAAU,CACrB,KAAK,SAAWA,EAAM,QACtB,KAAK,IAAMA,EAAM,GACjB,KAAK,MAAQA,EAAM,KACnB,KAAK,QAAUA,EAAM,OACrB,KAAK,UAAYA,EAAM,SACvB,KAAK,WAAaA,EAAM,UACxB,KAAK,WAAaA,EAAM,SACzB,EAEA,aAAgBD,GAAc,CAC7B,KAAK,WAAaA,CACnB,EAEA,aAAe,IACP,KAAK,WAGb,cAAgB,IACR,KAAK,UAGb,cAAiBb,GAAW,CAC3B,KAAK,QAAUA,EACf,KAAK,UAAY,OAAOA,EAAW,IAAc,KAAO,KAAK,MAAM,MAAMA,CAAM,CAChF,EAEA,MAAM,WAAY,CACjB,GAAI,CACH,IAAMG,EAAM,GAAG,KAAK,UAAU,GAAG5B,CAAiB,GAAG,KAAK,QAAQ,GAAGE,CAAU,GACzEsC,EAAa,KAAK,IAAI,yBAAyB,GAAKpC,GAC1D,GAAI,KAAK,YAAc,MAAQ,OAAO,KAAK,UAAc,IACxD,MAAM,IAAIQ,EACT,GAAGb,CAAW,0DACdS,EAAuB,uBACxB,EAED,QAAQ,IAAI,kBAAmBoB,EAAK,KAAK,SAAS,EAClD,GAAI,CAAE,KAAAa,EAAM,KAAAf,CAAK,EAAI,MAAM,KAAK,IAAI,kBAAkBE,EAAK,CAAE,gBAAiB,KAAK,SAAU,CAAC,EAE9F,GADA,QAAQ,IAAI,iCAAkCF,EAAMe,EAAM,KAAK,UAAU,EACrEf,IAAS,KAEZ,OAAO,KAAK,WAEb,KAAK,UAAYe,IAAS,KAAO,KAAK,UAAYA,EAClD,IAAMd,EAAc,KAAK,MAAM,MAAM,CAAE,KAAM,QAAS,MAAO,KAAK,SAAU,CAAC,EAC7E,GAAID,EAAK,OAASc,EACjB,YAAK,WAAad,EAAK,OAAS,EAAIC,EAAY,WAAWD,CAAI,EAAI,CAAC,EAC7D,KAAK,WAEb,IAAIgB,EAASF,EACTG,EAAY,CAAC,OAAO,KAAKjB,EAAM,MAAM,CAAC,EACtCkB,EAAS,GACb,KAAOA,GAAQ,CACd,IAAMC,EAAmB,MAAM,KAAK,IAAI,YAAYjB,EAAK,GAAOc,EAAQA,EAASF,CAAU,EACrFM,EAAe,MAAMD,EAAiB,KAAK,EACjDF,EAAU,KAAK,OAAO,KAAKG,EAAc,MAAM,CAAC,EAChDJ,GAAUF,GACYK,EAAiB,QAAQ,IAAI,gBAAgB,GAAKC,EAAa,QACjEN,IACnBI,EAAS,GAEX,CACA,IAAMG,EAAe,OAAO,OAAOJ,CAAS,EAC5C,YAAK,WAAahB,EAAY,WAAWoB,CAAY,EAC9C,KAAK,UACb,OAASzB,EAAO,CACf,GAAIA,EAAM,SAAS,EAAE,QAAQ,iCAAiC,EAAI,GACjE,YAAK,WAAa,CAAC,EACZ,KAAK,WAEb,MAAM,IAAIC,EAAiB,GAAGxB,CAAW,0BAA0BuB,EAAM,OAAO,GAAId,EAAuB,kBAAkB,CAC9H,CACD,CAEA,MAAM,UAAUkB,EAAM,CACrB,GAAI,CACH,GAAI,KAAK,YAAc,MAAQ,OAAO,KAAK,UAAc,IACxD,MAAM,IAAId,EACT,GAAGb,CAAW,0DACdS,EAAuB,uBACxB,EAED,IAAMmB,EAAc,KAAK,MAAM,MAAM,CAAE,KAAM,QAAS,MAAO,KAAK,SAAU,CAAC,EACvEqB,EAAatB,EAAK,OAAS,EAAIC,EAAY,SAASD,CAAI,EAAIrB,EAE5DuB,EAAM,GAAG,KAAK,UAAU,GAAG5B,CAAiB,GAAG,KAAK,QAAQ,GAAGE,CAAU,GAC/E,GAAI,KAAK,YAAc,KAAK,YAAc,GAAI,CAC7C,IAAM+C,EAAc,MAAM,KAAK,IAAI,QAAQrB,CAAG,EAE9C,GAAIqB,IAAgB,MAAQA,IAAgB,KAAK,UAChD,MAAO,EAET,CAEA,IAAMC,EAAO,MAAM,KAAK,IAAI,IAAItB,EAAKoB,CAAU,EAC/C,GAAIE,EAAK,SAAW,IACnB,MAAM,IAAI3B,EAAiB,GAAGxB,CAAW,wBAAyBS,EAAuB,kBAAkB,EAI5G,IAAM2C,EAAUD,EAAK,QAAQ,IAAI,MAAM,EAEvC,OAAIC,IACH,KAAK,UAAY,KAAK,IAAI,aAAaA,CAAO,EAE9C,KAAK,WAAazB,GAEZ,EACR,OAASJ,EAAO,CACf,MAAIA,aAAiBC,EACdD,EAED,IAAIV,EAAgB,GAAGb,CAAW,KAAKuB,EAAM,OAAO,GAAId,EAAuB,eAAe,CACrG,CACD,CASA,MAAM,OAAO4C,EAAK3B,EAAS,OAAW,CACrC,GAAI,CACH,GAAyB2B,GAAQ,KAChC,MAAM,IAAIxC,EAAgB,GAAGb,CAAW,oCAAqCS,EAAuB,YAAY,EAEjH,GAAI,OAAO4C,GAAQ,UAAY,CAAC,MAAM,QAAQA,CAAG,EAChD,MAAM,IAAI3C,EACT,GAAGV,CAAW,2CACdS,EAAuB,yBACxB,EAED,IAAM6C,EAAS,MAAM,QAAQD,CAAG,EAAYA,EAAR,CAACA,CAAG,EAElCE,EAAe7B,GAAU,KAAK,WAAa8B,EAAcF,EAAM,CAAC,CAAC,EACjEG,EAAW,KAAK,MAAM,MAAMF,CAAY,EAC9C,GAAI,CAACE,EACJ,MAAM,IAAItB,EACT,GAAGnC,CAAW,4DACdS,EAAuB,uBACxB,EAED,KAAK,UAAYgD,EACjB,IAAM9B,EAAO,MAAM,KAAK,UAAU,EAClC,QAAS+B,KAAQJ,EAAO,CACvB,GAAI,OAAOI,GAAS,UAAYA,IAAS,KACxC,MAAM,IAAIhD,EACT,GAAGV,CAAW,kEACdS,EAAuB,yBACxB,EAOD,GALAiD,EAAK,IAAMA,EAAK,KAAQ,MAAMC,GAAa,EACvB,KAAK,UAAU,QAAQD,EAAM,CAChD,UAAWnD,EACX,mBAAoB,EACrB,CAAC,IACmB,GACnBoB,EAAK,KAAK+B,CAAI,MAEd,OAAM,IAAIhD,EAAwB,GAAGV,CAAW,+BAAgCS,EAAuB,yBAAyB,CAElI,CAEA,GAAI,CADY,MAAM,KAAK,UAAUkB,CAAI,EAExC,MAAM,IAAIH,EAAiB,GAAGxB,CAAW,8BAA+BS,EAAuB,kBAAkB,EAElH,OAAO6C,CACR,OAAS/B,EAAO,CACf,MAAIA,EAAM,QAAQ,SAAS,cAAc,EAClC,IAAIY,EACT,GAAGnC,CAAW,8BAA8BuB,EAAM,OAAO,GACzDd,EAAuB,uBACxB,EAEGc,aAAiBV,EACdU,EAED,IAAIV,EAAgB,GAAGb,CAAW,6BAA6BuB,EAAM,OAAO,GAAId,EAAuB,YAAY,CAC1H,CACD,CAWA,MAAM,KAAKmD,EAAQ,CAAC,EAAG7C,EAAU,CAAC,EAAG,CACpC,GAAI,CACH,GAA2B6C,GAAU,KACpC,MAAM,IAAI/C,EAAgB,GAAGb,CAAW,iCAAkCS,EAAuB,gBAAgB,EAElH,IAAMkB,EAAO,MAAM,KAAK,UAAU,EAC5BkC,EAAQ,SAAS9C,EAAQ,KAAM,EAAE,GAAK,EACtC+C,EAAM,SAAS/C,EAAQ,MAAO,EAAE,EAAI8C,EAAQ,SAAS9C,EAAQ,MAAO,EAAE,EAAI,OAEhF,OADqBY,EAAK,OAAQ0B,GAAQU,EAAaV,EAAKO,CAAK,CAAC,EAAE,MAAMC,EAAOC,CAAG,CAErF,OAASvC,EAAO,CACf,MAAM,IAAIV,EAAgB,GAAGb,CAAW,4BAA4BuB,EAAM,OAAO,GAAId,EAAuB,UAAU,CACvH,CACD,CAQA,MAAM,QAAQmD,EAAQ,CAAC,EAAG,CACzB,GAAI,CACH,GAAIA,IAAU,KACb,MAAM,IAAI/C,EAAgB,GAAGb,CAAW,yBAA0BS,EAAuB,gBAAgB,EAG1G,OADe,MAAM,KAAK,KAAKmD,EAAO,CAAE,MAAO,CAAE,CAAC,GACpC,CAAC,GAAK,IACrB,OAASrC,EAAO,CACf,MAAIA,aAAiBV,EACdU,EAED,IAAIV,EAAgB,GAAGb,CAAW,+BAA+BuB,EAAM,OAAO,GAAId,EAAuB,cAAc,CAC9H,CACD,CAYA,MAAM,OAAOmD,EAAQ,CAAC,EAAGI,EAAS,CAAC,EAAGjD,EAAU,CAAC,EAAG,CACnD,GAAI,CACH,GAA2B6C,GAAU,MAAQI,IAAW,QAAaA,IAAW,KAC/E,MAAM,IAAInD,EACT,GAAGb,CAAW,oDACdS,EAAuB,gBACxB,EAED,GAAI,CAAC,KAAK,UACT,MAAM,IAAI0B,EACT,GAAGnC,CAAW,8CACdS,EAAuB,uBACxB,EAED,IAAMkB,EAAO,MAAM,KAAK,UAAU,EAClC,GAAIA,EAAK,SAAW,EAAG,MAAO,GAC9B,IAAIsC,EAAe,EACnB,QAASC,EAAI,EAAGA,EAAIvC,EAAK,OAAQuC,IAChC,GAAIH,EAAapC,EAAKuC,CAAC,EAAGN,CAAK,EAAG,CACjC,IAAMO,EAAa,CAAE,GAAGxC,EAAKuC,CAAC,EAAG,GAAGF,CAAO,EAK3C,GAJgB,KAAK,UAAU,QAAQG,EAAY,CAClD,UAAW5D,EACX,mBAAoB,EACrB,CAAC,IACe,GACfoB,EAAKuC,CAAC,EAAIC,EACVF,QAEA,OAAM,IAAIvD,EACT,GAAGV,CAAW,+BACdS,EAAuB,yBACxB,CAEF,CAGD,GAAIwD,EAAe,GAElB,GAAI,CADY,MAAM,KAAK,UAAUtC,CAAI,EAExC,MAAM,IAAIH,EAAiB,GAAGxB,CAAW,8BAA+BS,EAAuB,kBAAkB,UAExGM,EAAQ,OAAQ,CAG1B,GAAI,CADY,MAAM,KAAK,OAAOiD,CAAM,EAEvC,MAAM,IAAIxC,EAAiB,GAAGxB,CAAW,8BAA+BS,EAAuB,kBAAkB,EAElHwD,EAAe,CAChB,CACA,OAAOA,CACR,OAAS1C,EAAO,CACf,MAAIA,aAAiBC,EACdD,EAED,IAAIV,EAAgB,GAAGb,CAAW,8BAA8BuB,EAAM,OAAO,GAAId,EAAuB,YAAY,CAC3H,CACD,CAYA,MAAM,UAAUmD,EAAQ,CAAC,EAAGI,EAAS,CAAC,EAAGjD,EAAU,CAAC,EAAG,CACtD,GAAI,CACH,GAA2B6C,GAAU,MAAQI,IAAW,QAAaA,IAAW,KAC/E,MAAM,IAAInD,EAAgB,GAAGb,CAAW,sBAAuBS,EAAuB,gBAAgB,EAEvG,GAAI,CAAC,KAAK,UACT,MAAM,IAAI0B,EACT,GAAGnC,CAAW,8CACdS,EAAuB,uBACxB,EAED,IAAMkB,EAAO,MAAM,KAAK,UAAU,EAClC,GAAIA,EAAK,SAAW,EAAG,MAAO,GAC9B,IAAMyC,EAAWzC,EAAK,UAAW0B,GAAQU,EAAaV,EAAKO,CAAK,CAAC,EAEjE,GAAIQ,IAAa,GAAI,CACpB,IAAMD,EAAa,CAAE,GAAGxC,EAAKyC,CAAQ,EAAG,GAAGJ,CAAO,EAKlD,GAJgB,KAAK,UAAU,QAAQG,EAAY,CAClD,UAAW5D,EACX,mBAAoB,EACrB,CAAC,IACe,GAAM,CAGrB,GAFAoB,EAAKyC,CAAQ,EAAID,EAEb,CADY,MAAM,KAAK,UAAUxC,CAAI,EAExC,MAAM,IAAIH,EAAiB,GAAGxB,CAAW,8BAA+BS,EAAuB,kBAAkB,EAElH,MAAO,EACR,KACC,OAAM,IAAIC,EAAwB,GAAGV,CAAW,+BAAgCS,EAAuB,yBAAyB,CAElI,CACA,GAAIM,EAAQ,OAAQ,CAGnB,GAAI,CADY,MAAM,KAAK,OAAOiD,CAAM,EAEvC,MAAM,IAAIxC,EAAiB,GAAGxB,CAAW,8BAA+BS,EAAuB,kBAAkB,EAElH,MAAO,EACR,CACA,MAAO,EACR,OAASc,EAAO,CACf,MAAIA,aAAiBV,EACdU,EAED,IAAIV,EAAgB,GAAGb,CAAW,iCAAiCuB,EAAM,OAAO,GAAId,EAAuB,gBAAgB,CAClI,CACD,CASA,MAAM,OAAOmD,EAAQ,CAAC,EAAG,CACxB,GAAI,CACH,GAA2BA,GAAU,KACpC,MAAM,IAAI/C,EAAgB,GAAGb,CAAW,sBAAuBS,EAAuB,gBAAgB,EAEvG,IAAMkB,EAAO,MAAM,KAAK,UAAU,EAClC,GAAIA,EAAK,SAAW,EAAG,MAAO,GAC9B,IAAM0C,EAAgB1C,EAAK,OAErB2C,EAAU3C,EAAK,OAAQ0B,GAAQ,CAACU,EAAaV,EAAKO,CAAK,CAAC,EAE9D,GAAI,CADY,MAAM,KAAK,UAAUU,CAAO,EAE3C,MAAM,IAAI9C,EAAiB,GAAGxB,CAAW,8BAA+BS,EAAuB,kBAAkB,EAElH,OAAO4D,EAAgBC,EAAQ,MAChC,OAAS/C,EAAO,CACf,MAAIA,aAAiBC,EACdD,EAED,IAAIV,EAAgB,GAAGb,CAAW,8BAA8BuB,EAAM,OAAO,GAAId,EAAuB,YAAY,CAC3H,CACD,CAQA,MAAM,WAAY,CACjB,GAAI,CAEH,IAAM4D,GADO,MAAM,KAAK,UAAU,GACP,OAE3B,GAAI,CADY,MAAM,KAAK,UAAU,CAAC,CAAC,EAEtC,MAAM,IAAI7C,EAAiB,GAAGxB,CAAW,8BAA+BS,EAAuB,kBAAkB,EAElH,OAAO4D,CACR,OAAS9C,EAAO,CACf,MAAIA,aAAiBC,EACdD,EAED,IAAIV,EAAgB,GAAGb,CAAW,8BAA8BuB,EAAM,OAAO,GAAId,EAAuB,YAAY,CAC3H,CACD,CAQA,MAAM,MAAMmD,EAAQ,CAAC,EAAG,CACvB,GAAI,CAEH,OADa,MAAM,KAAK,KAAKA,CAAK,GACtB,MACb,OAASrC,EAAO,CACf,MAAM,IAAIV,EAAgB,GAAGb,CAAW,6BAA6BuB,EAAM,OAAO,GAAId,EAAuB,WAAW,CACzH,CACD,CAEA,MAAM,iBAAiB8D,EAAYC,EAAY,KAAK,QAAS,CAC5D,GAAI,CAGH,GAFA7D,EAAY4D,CAAU,EACP,MAAM,KAAK,IAAI,WAAW,GAAG,KAAK,UAAU,GAAGtE,CAAiB,GAAGsE,CAAU,GAAGpE,CAAU,EAAE,EAE1G,MAAM,IAAIU,EAAgB,GAAGb,CAAW,gBAAgBuE,CAAU,kBAAmB9D,EAAuB,iBAAiB,EAE9H,IAAMiB,EAAS8C,GAAa,KAAK,cAAc,EACzC7C,EAAO,MAAM,KAAK,UAAU,EAC5B8C,EAAY,IAAIrC,EAAWmC,EAAY7C,EAAQ,KAAK,IAAK,KAAK,UAAU,EAC9E,aAAM+C,EAAU,UAAU9C,CAAI,EAC9B,MAAM,KAAK,IAAI,OAAO,GAAG,KAAK,UAAU,GAAG1B,CAAiB,GAAG,KAAK,QAAQ,GAAGE,CAAU,EAAE,EACpFsE,CACR,OAASlD,EAAO,CACf,MAAIA,aAAiBV,EACdU,EAED,IAAIV,EACT,GAAGb,CAAW,+BAA+BuB,EAAM,OAAO,GAC1Dd,EAAuB,uBACxB,CACD,CACD,CACD", + "names": ["AWS_ALGORITHM", "AWS_REQUEST_TYPE", "S3_SERVICE", "LIST_TYPE", "UNSIGNED_PAYLOAD", "DEFAULT_STREAM_CONTENT_TYPE", "XML_CONTENT_TYPE", "JSON_CONTENT_TYPE", "SENSITIVE_KEYS_REDACTED", "HEADER_AMZ_CONTENT_SHA256", "HEADER_AMZ_DATE", "HEADER_HOST", "HEADER_AUTHORIZATION", "HEADER_CONTENT_TYPE", "HEADER_CONTENT_LENGTH", "HEADER_ETAG", "HEADER_LAST_MODIFIED", "ERROR_PREFIX", "ERROR_ACCESS_KEY_REQUIRED", "ERROR_SECRET_KEY_REQUIRED", "ERROR_ENDPOINT_REQUIRED", "ERROR_BUCKET_NAME_REQUIRED", "ERROR_KEY_REQUIRED", "ERROR_UPLOAD_ID_REQUIRED", "ERROR_PARTS_REQUIRED", "ERROR_INVALID_PART", "ERROR_DATA_BUFFER_REQUIRED", "ERROR_PREFIX_TYPE", "ERROR_MAX_KEYS_TYPE", "ERROR_DELIMITER_REQUIRED", "_createHmac", "_createHash", "expectArray", "encodeAsHex", "c", "uriEscape", "uriStr", "uriResourceEscape", "string", "S3", "accessKeyId", "secretAccessKey", "endpoint", "bucketName", "region", "maxRequestSizeInBytes", "requestAbortTimeout", "logger", "etag", "sanitizeETag", "props", "method", "key", "delimiter", "prefix", "maxKeys", "opts", "level", "message", "additionalData", "sanitize", "obj", "acc", "sanitizedData", "logEntry", "headers", "encodedKey", "url", "signedHeaders", "contentLength", "res", "filteredOpts", "conditionalHeaders", "error", "errorMessage", "keyPath", "query", "body", "datetime", "_hash", "canonicalHeaders", "canonicalRequest", "stringToSign", "signature", "authorizationHeader", "value", "credentialScope", "signingKey", "_hmac", "ifHeaders", "urlWithQuery", "responseBody", "lastModified", "data", "_parseXml", "output", "o", "i", "a", "_a", "_b", "_c", "wholeFile", "rangeFrom", "rangeTo", "fileType", "parsedResponse", "uploadId", "partNumber", "ETag", "parts", "part", "xmlBody", "toleratedStatusCodes", "errorBody", "errorCode", "queryParams", "dateStamp", "kDate", "kRegion", "kService", "content", "hashSum", "encoding", "hmacSum", "replaceChars", "m", "str", "unescapeXml", "json", "re", "match", "fullKey", "parsedValue", "avro", "lowstorage_ERROR_CODES", "lowstorageError", "message", "code", "SchemaValidationError", "lowstorageError", "message", "lowstorage_ERROR_CODES", "DocumentValidationError", "S3OperationError", "operation", "randomUUID", "matchesQuery", "document", "query", "key", "generateUUID", "c", "r", "v", "_getAvroType", "value", "name", "_isUUID", "inferAvroType", "ensureIdFieldInSchema", "schema", "idField", "field", "data", "typeName", "fields", "str", "MODULE_NAME", "DEFAULT_DELIMITER", "PROJECT_DIR_PREFIX", "COL_SUFFIX", "CHUNG_1MB", "CHUNG_5MB", "EMPTY_DATA", "errorValidationFn", "errorCode", "lowstorage_ERROR_CODES", "DocumentValidationError", "_hasColName", "colName", "lowstorageError", "lowstorage", "options", "N", "avro", "args", "requiredFields", "field", "listed", "entry", "error", "S3OperationError", "exists", "schema", "data", "wrapperType", "KEY", "exists2", "autoCreate", "colPath", "colSchema", "Collection", "SchemaValidationError", "_Collection", "s3", "dirPrefix", "safeWrite", "props", "CHUNK_SIZE", "etag", "offset", "bufferArr", "repeat", "nextDataResponse", "nextDataBody", "bufferedData", "dataBuffer", "currentETag", "resp", "newETag", "doc", "items", "schemaWithId", "inferAvroType", "avroType", "item", "generateUUID", "query", "start", "end", "matchesQuery", "update", "updatedCount", "i", "updatedDoc", "docIndex", "initialLength", "newData", "newColName", "newSchema", "createNew"] } diff --git a/src/lowstorage.js b/src/lowstorage.js index 38b17a2..24c4fa7 100644 --- a/src/lowstorage.js +++ b/src/lowstorage.js @@ -18,11 +18,18 @@ const PROJECT_DIR_PREFIX = 'lowstorage'; const COL_SUFFIX = '.avro'; const CHUNG_1MB = 1024 * 1024; const CHUNG_5MB = 5 * CHUNG_1MB; +const EMPTY_DATA = Buffer.from('', 'utf8'); const errorValidationFn = (errorCode = lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR) => { throw new DocumentValidationError(`${MODULE_NAME}: Invalid document or schema`, errorCode); }; +const _hasColName = (colName) => { + if (colName.trim() === '' || colName === null || typeof colName === 'undefined' || colName.length > 255 || colName === null) { + throw new lowstorageError(`${MODULE_NAME}: Collection name is required, null or too long`, lowstorage_ERROR_CODES.MISSING_ARGUMENT); + } +}; + // code / description // init of new collection is automatically creating it in the bucket // there is optional (opt-in) switch to create new collections in bucket @@ -126,12 +133,6 @@ class lowstorage { } }; - _hasColName = (colName) => { - if (colName.trim() === '' || colName === null || typeof colName === 'undefined') { - throw new lowstorageError(`${MODULE_NAME}: Collection name is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT); - } - }; - /** * List all collections. * @returns {Promise} An array of collection names. @@ -156,13 +157,15 @@ class lowstorage { */ async collectionExists(colName) { try { - this._hasColName(colName); + _hasColName(colName); const exists = await this._s3.fileExists(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`); - return exists; + console.log('collectionExists::2 ', `${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`, exists); + return !!exists; } catch (error) { if (error.message.includes('Not Found')) { return false; } + console.log('collectionExists::3 ', colName, error); throw new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND); } } @@ -177,11 +180,16 @@ class lowstorage { */ async createCollection(colName, schema, data = []) { try { - this._hasColName(colName); + _hasColName(colName); const exists = await this.collectionExists(colName); if (!exists) { - await this._s3.put(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`, data.length > 0 ? data : ''); - return this.collection(colName, schema); + if (data.length > 0 && schema) { + const wrapperType = this._avro.parse({ type: 'array', items: schema }); + await this._s3.put(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`, wrapperType.toBuffer(data)); + } else { + await this._s3.put(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`, EMPTY_DATA); + } + return this.collection(colName, schema, false); } throw new lowstorageError(`${MODULE_NAME}: Collection ${colName} already exists`, lowstorage_ERROR_CODES.COLLECTION_EXISTS); } catch (error) { @@ -200,7 +208,7 @@ class lowstorage { */ async removeCollection(colName) { try { - this._hasColName(colName); + _hasColName(colName); const KEY = `${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`; const exists = await this.collectionExists(colName); if (exists) { @@ -227,70 +235,6 @@ class lowstorage { } } - /** - * Rename a collection. - * @param {string} oldColName - The current name of the collection. - * @param {string} newColName - The new name of the collection. - * @returns {Promise} A Promise that resolves to a Collection object. - * @throws {lowstorageError} If there's an error. - */ - async renameCollection(oldColName, newColName) { - try { - this._hasColName(oldColName); - this._hasColName(newColName); - const exists = await this.collectionExists(oldColName); - if (!exists) { - throw new CollectionNotFoundError( - `${MODULE_NAME}: Collection ${oldColName} does not exist`, - lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND, - ); - } - const oldCol = await this.collection(oldColName); - const oldColData = await oldCol._loadData(); - const success = await this.removeCollection(oldColName); - if (!success) { - throw new lowstorageError(`${MODULE_NAME}: Failed to rename collection`, lowstorage_ERROR_CODES.RENAME_COLLECTION_ERROR); - } - return await this.createCollection(newColName, oldCol._avroType, oldColData); - } catch (error) { - if (error instanceof lowstorageError) { - throw error; - } - throw new lowstorageError( - `${MODULE_NAME}: Rename collection failed: ${error.message}`, - lowstorage_ERROR_CODES.RENAME_COLLECTION_ERROR, - ); - } - } - - // TODO: update collection schema - // async updateCollectionSchema(colName, newSchema) { - // try { - // this._hasColName(colName); - // // Check if collection exists - // const exists = await this.collectionExists(colName); - // if (!exists) { - // throw new CollectionNotFoundError(`${MODULE_NAME}: Collection ${colName} does not exist`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND); - // } - // if (typeof schema === 'undefined' || schema === null) { - // throw new lowstorageError(`${MODULE_NAME}: Schema is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT); - // } - // const col = this.collection(colName); - // const colData = await col._loadDataBuffer(); - // const avroType = this._avro.parse(schema); - // this._schemas.set(colName, avroType); - - // } catch (error) { - // if (error instanceof S3OperationError) { - // throw error; - // } - // throw new lowstorageError( - // `${MODULE_NAME}: Failed to update collection schema: ${error.message}`, - // lowstorage_ERROR_CODES.UPDATE_COLLECTION_SCHEMA_ERROR, - // ); - // } - // } - /** * Get or create a collection. * @param {string} colName - The name of the collection. @@ -301,28 +245,18 @@ class lowstorage { */ async collection(colName, schema, autoCreate = true) { try { - this._hasColName(colName); + _hasColName(colName); const colPath = `${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`; - let avroType; - const exists = await this._s3.fileExists(colPath); - if (!exists) { if (!autoCreate) { throw new lowstorageError(`${MODULE_NAME}: Collection ${colName} does not exist`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND); } - const emptyData = Buffer.from('', 'utf8'); - await this._s3.put(colPath, emptyData); - } - - if (schema) { - avroType = this._avro.parse(schema); - this._schemas.set(colName, avroType); - } else if (this._schemas.has(colName)) { - avroType = this._schemas.get(colName); + // TODO: check if this is the right way to handle empty data + await this._s3.put(colPath, EMPTY_DATA); } - - return new Collection(colName, this._s3, avroType, this._dirPrefix); + const colSchema = schema || this._schemas.get(colName) || undefined; + return new Collection(colName, colSchema, this._s3, this._dirPrefix); } catch (error) { // check if error message contains "unknown type" and if so, throw a schema validation error if (error.message.includes('unknown type')) { @@ -381,18 +315,19 @@ class Collection { * Create a new Collection instance. * @param {string} colName - The name of the collection. * @param {S3} s3 - The S3 instance. - * @param {Object} [avroType] - The Avro type for the collection. + * @param {Object} [schema] - The Avro schema for the collection. * @param {string} [dirPrefix=PROJECT_DIR_PREFIX] - The directory prefix for the collection. * @param {boolean} [safeWrite=false] - Whether to perform a safe write operation. It doublechecks the ETag of the object before writing. False = overwrites the object, True = only writes if the object has not been modified. * @returns {Collection} A new Collection instance. */ - constructor(colName, s3, avroType, dirPrefix = PROJECT_DIR_PREFIX, safeWrite = false) { + constructor(colName, schema, s3, dirPrefix = PROJECT_DIR_PREFIX, safeWrite = false) { this._colName = colName; this._s3 = s3; this._avro = avro; this._lastETag = ''; this._dataCache = []; - this._avroType = avroType; + this._schema = schema; + this._avroType = typeof schema === 'undefined' ? null : this._avro.parse(schema); this._dirPrefix = dirPrefix; this._safeWrite = safeWrite; } @@ -410,6 +345,7 @@ class Collection { this._colName = props.colName; this._s3 = props.s3; this._avro = props.avro; + this._schema = props.schema; this._avroType = props.avroType; this._dirPrefix = props.dirPrefix; this._safeWrite = props.safeWrite; @@ -428,7 +364,8 @@ class Collection { }; setAvroSchema = (schema) => { - this._avroType = this._avro.parse(schema); + this._schema = schema; + this._avroType = typeof schema === 'undefined' ? null : this._avro.parse(schema); }; async _loadData() { @@ -488,7 +425,7 @@ class Collection { ); } const wrapperType = this._avro.parse({ type: 'array', items: this._avroType }); - const dataBuffer = data.length > 0 ? wrapperType.toBuffer(data) : Buffer.from('', 'utf8'); + const dataBuffer = data.length > 0 ? wrapperType.toBuffer(data) : EMPTY_DATA; // TODO: check if this is the right way to handle empty data const KEY = `${this._dirPrefix}${DEFAULT_DELIMITER}${this._colName}${COL_SUFFIX}`; if (this._safeWrite && this._lastETag !== '') { @@ -827,6 +764,30 @@ class Collection { throw new lowstorageError(`${MODULE_NAME}: Count operation failed: ${error.message}`, lowstorage_ERROR_CODES.COUNT_ERROR); } } + + async renameCollection(newColName, newSchema = this._schema) { + try { + _hasColName(newColName); + const exists = await this._s3.fileExists(`${this._dirPrefix}${DEFAULT_DELIMITER}${newColName}${COL_SUFFIX}`); + if (!!exists) { + throw new lowstorageError(`${MODULE_NAME}: Collection ${newColName} already exists`, lowstorage_ERROR_CODES.COLLECTION_EXISTS); + } + const schema = newSchema || this.getAvroSchema(); + const data = await this._loadData(); + const createNew = new Collection(newColName, schema, this._s3, this._dirPrefix); + await createNew._saveData(data); + await this._s3.delete(`${this._dirPrefix}${DEFAULT_DELIMITER}${this._colName}${COL_SUFFIX}`); + return createNew; + } catch (error) { + if (error instanceof lowstorageError) { + throw error; + } + throw new lowstorageError( + `${MODULE_NAME}: Rename collection failed: ${error.message}`, + lowstorage_ERROR_CODES.RENAME_COLLECTION_ERROR, + ); + } + } } // export default lowstorage; diff --git a/src/lowstorage.test.js b/src/lowstorage.test.js index 5cb3a4f..e2585b2 100644 --- a/src/lowstorage.test.js +++ b/src/lowstorage.test.js @@ -36,7 +36,7 @@ const userAvroSchema = { ], }; -const testColSchame = { +const testColSchema = { type: 'record', name: 'TestCol', fields: [ @@ -65,326 +65,331 @@ afterAll(async () => { }); // full test basic operations on collection -// test('Collections | basic CRUD operations', async () => { -// // check if collections exist -// const userColExists = await lStorage.collectionExists('userCol'); -// // expect to be bollean -// expect(typeof userColExists).toBe('boolean'); -// if (userColExists) { -// // try to create collection and get error -// await expect(lStorage.createCollection('userCol', userAvroSchema)).rejects.toThrowError(); -// // remove collection -// const removeCollection = await lStorage.removeCollection('userCol'); -// expect(removeCollection).toBe(true); -// const doubleCheckIfExists = await lStorage.collectionExists('userCol'); -// expect(doubleCheckIfExists).toBe(false); -// } -// // create collection now -// const userCol = await lStorage.createCollection('userCol', userAvroSchema); -// expect(userCol).toBeDefined(); -// const userColExists3 = await lStorage.collectionExists('userCol'); -// expect(userColExists3).toBe(true); - -// const listCollections = await lStorage.listCollections(); -// expect(listCollections).toContain('userCol'); -// await expect(lStorage.createCollection('userCol', userAvroSchema)).rejects.toThrowError(); - -// // check if collections exist -// const testColExists = await lStorage.collectionExists('testCol'); -// // expect to be bollean -// expect(typeof testColExists).toBe('boolean'); -// if (testColExists) { -// // try to create collection and get error -// await expect(lStorage.createCollection('testCol', testColSchame)).rejects.toThrowError(); -// // remove collection -// const removeCollection = await lStorage.removeCollection('testCol'); -// expect(removeCollection).toBe(true); -// const doubleCheckIfExists = await lStorage.collectionExists('testCol'); -// expect(doubleCheckIfExists).toBe(false); -// } - -// await lStorage.createCollection('testCol', testColSchame); - -// const testColExists2 = await lStorage.collectionExists('testCol'); -// expect(testColExists2).toBe(true); - -// const listCollections2 = await lStorage.listCollections(); -// console.log('listCollections', listCollections2); -// expect(listCollections2).toContain('testCol'); -// expect(listCollections2).toContain('userCol'); -// expect(listCollections2.length).toBe(2); - -// const removeCollection = await lStorage.removeCollection('testCol'); -// expect(removeCollection).toBe(true); - -// const listCollections3 = await lStorage.listCollections(); -// expect(listCollections3).not.toContain('testCol'); -// expect(listCollections3).toContain('userCol'); -// expect(listCollections3.length).toBe(1); - -// const removeCollection2 = await lStorage.removeCollection('userCol'); -// expect(removeCollection2).toBe(true); - -// const listCollections4 = await lStorage.listCollections(); -// expect(listCollections4).not.toContain('testCol'); -// expect(listCollections4).not.toContain('userCol'); -// expect(listCollections4.length).toBe(0); -// }); -// // test create collection -// test('Collections | create via createCollection', async () => { -// const preListCheck = await lStorage.listCollections(); -// expect(preListCheck.length).toBe(0); - -// const userCol = await lStorage.createCollection('userCol', userAvroSchema); -// expect(userCol).toBeDefined(); - -// const userColExists3 = await lStorage.collectionExists('userCol'); -// expect(userColExists3).toBe(true); - -// const listCollections = await lStorage.listCollections(); -// expect(listCollections).toContain('userCol'); -// expect(listCollections.length).toBe(1); - -// const removeCollection = await lStorage.removeCollection('userCol'); -// expect(removeCollection).toBe(true); - -// const listCollections2 = await lStorage.listCollections(); -// expect(listCollections2).not.toContain('userCol'); -// expect(listCollections2.length).toBe(0); -// }); -// test('Collections | create via constructor', async () => { -// const preListCheck = await lStorage.listCollections(); -// expect(preListCheck.length).toBe(0); - -// const userCol = await lStorage.collection('userCol', userAvroSchema); -// expect(userCol).toBeDefined(); - -// const userColExists = await lStorage.collectionExists('userCol'); -// expect(userColExists).toBe(true); - -// const listCollections = await lStorage.listCollections(); -// expect(listCollections).toContain('userCol'); -// expect(listCollections.length).toBe(1); -// const removeCollection = await lStorage.removeCollection('userCol'); -// expect(removeCollection).toBe(true); - -// const listCollections2 = await lStorage.listCollections(); -// expect(listCollections2).not.toContain('userCol'); -// expect(listCollections2.length).toBe(0); -// }); -// test('Collections | error cases and error codes', async () => { -// // Test create collection error -// await expect(lStorage.createCollection()).rejects.toThrow(lowstorageError); -// await expect(lStorage.createCollection()).rejects.toThrow(lowstorage_ERROR_CODES.CREATE_COLLECTION_ERROR); - -// // Test collection already exists error -// await lStorage.createCollection('testCol', testColSchame); -// await expect(lStorage.createCollection('testCol', testColSchame)).rejects.toThrow(lowstorageError); -// await expect(lStorage.createCollection('testCol', testColSchame)).rejects.toThrow(lowstorage_ERROR_CODES.COLLECTION_EXISTS); - -// const listCollections = await lStorage.listCollections(); -// console.log('listCollections::::: ', listCollections); -// expect(listCollections).toContain('testCol'); - -// // Verify the collection exists before attempting to rename -// const testColExists = await lStorage.collectionExists('testCol'); -// expect(testColExists).toBe(true); - -// // Test rename collection -// await expect(lStorage.renameCollection('testCol', 'testCol2')).resolves.not.toThrow(); -// const listCollectionsAfterRename = await lStorage.listCollections(); -// expect(listCollectionsAfterRename).not.toContain('testCol'); -// expect(listCollectionsAfterRename).toContain('testCol2'); - -// // Verify the collection exists after renaming -// const testCol2Exists = await lStorage.collectionExists('testCol2'); -// expect(testCol2Exists).toBe(true); - -// // Test rename collection error -// await expect(lStorage.renameCollection('testCol', 'testCol2')).rejects.toThrow(lowstorageError); -// await expect(lStorage.renameCollection('testCol', 'testCol2')).rejects.toThrow(lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND); - -// // // Test remove collection error -// await expect(lStorage.removeCollection('testCol')).rejects.toThrow(lowstorageError); -// await expect(lStorage.removeCollection('testCol')).rejects.toThrow(lowstorage_ERROR_CODES.REMOVE_COLLECTION_ERROR); - -// // Test update collection schema error - NOT IMPLEMENTED -// // const testColSchema = { -// // type: 'record', -// // name: 'TestCol', -// // fields: [ -// // { name: '_id', type: 'string', size: 16, logicalType: 'UUID' }, -// // { name: 'name', type: 'string' }, -// // { name: 'age', type: 'int' }, -// // ], -// // }; -// // await expect(lStorage.updateCollectionSchema('testCol', testColSchema)).rejects.toThrow(lowstorageError); -// // await expect(lStorage.updateCollectionSchema('testCol', testColSchema)).rejects.toThrow(lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND); - -// // Test schema validation error -// const invalidSchema = { type: 'invalid' }; -// await expect(lStorage.createCollection('invalidSchemaCol', invalidSchema)).rejects.toThrow( -// lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR, -// ); - -// // Test document validation error -// const col = await lStorage.collection('testCol2'); -// await expect(col.insert({ invalidField: 'value' })).rejects.toThrow(lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR); - -// // Test insert error -// await expect(col.insert(null)).rejects.toThrow(lowstorage_ERROR_CODES.INSERT_ERROR); - -// // Test update error -// await expect(col.update(null, { field: 'value' })).rejects.toThrow(lowstorage_ERROR_CODES.MISSING_ARGUMENT); - -// // Test update one error -// await expect(col.updateOne(null, { field: 'value' })).rejects.toThrow(lowstorage_ERROR_CODES.MISSING_ARGUMENT); - -// // Test delete error -// await expect(col.delete(null)).rejects.toThrow(lowstorage_ERROR_CODES.MISSING_ARGUMENT); - -// // Test count error - wrong argument -// await expect(col.count(null)).rejects.toThrow(lowstorage_ERROR_CODES.COUNT_ERROR); -// const count = await col.count(); -// await expect(count).toBe(0); - -// // Test remove collection error -// await expect(lStorage.removeCollection(null)).rejects.toThrow(lowstorage_ERROR_CODES.REMOVE_COLLECTION_ERROR); - -// // Test rename collection error -// await expect(lStorage.renameCollection(null, 'newName')).rejects.toThrow(lowstorage_ERROR_CODES.RENAME_COLLECTION_ERROR); - -// // Clean up -// await lStorage.removeCollection('testCol2'); -// }); - -// test('Document | CRUD operations', async () => { -// // Test insert -// const colName = 'testColXXXX'; -// const col = await lStorage.collection(colName); -// const insertData = await col.insert({ name: 'Carlos', age: 25 }); -// expect(insertData).toBeDefined(); -// expect(insertData).toHaveLength(1); -// expect(insertData[0]).toHaveProperty('_id'); -// expect(insertData[0]).toHaveProperty('name', 'Carlos'); -// expect(insertData[0]).toHaveProperty('age', 25); - -// // Test by find -// const findData = await col.find({ name: 'Carlos' }); -// expect(findData).toBeDefined(); -// expect(findData).toHaveLength(1); -// expect(findData[0]).toHaveProperty('_id'); -// expect(findData[0]).toHaveProperty('name', 'Carlos'); -// expect(findData[0]).toHaveProperty('age', 25); - -// // Test insert with schema -// const insertDataWithSchema = await col.insert({ name: 'Carlos', age: 25 }, userAvroSchema); -// expect(insertDataWithSchema).toBeDefined(); -// expect(insertDataWithSchema).toHaveLength(1); -// expect(insertDataWithSchema[0]).toHaveProperty('_id'); -// expect(insertDataWithSchema[0]).toHaveProperty('name', 'Carlos'); -// expect(insertDataWithSchema[0]).toHaveProperty('age', 25); - -// // Test by find -// const findDataWithSchema = await col.find({ name: 'Carlos' }); -// expect(findDataWithSchema).toBeDefined(); -// expect(findDataWithSchema).toHaveLength(2); -// expect(findDataWithSchema[0]).toHaveProperty('_id'); -// expect(findDataWithSchema[0]).toHaveProperty('name', 'Carlos'); -// expect(findDataWithSchema[0]).toHaveProperty('age', 25); - -// // test count -// const count = await col.count({ name: 'Carlos' }); -// expect(count).toBe(2); - -// const count2 = await col.count(); -// expect(count2).toBe(2); - -// const count3 = await col.count({ name: 'Carlos2' }); -// expect(count3).toBe(0); - -// // Test insert with invalid schema -// const invalidSchema = { type: 'invalid' }; -// await expect(col.insert({ name: 'Carlos', age: 25 }, invalidSchema)).rejects.toThrow(lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR); - -// // Test insert with invalid data -// await expect(col.insert(null)).rejects.toThrow(lowstorage_ERROR_CODES.INSERT_ERROR); - -// // Test insert with array -// const insertDataArray = await col.insert([ -// { name: 'Carlos', age: 25 }, -// { name: 'Bob', age: 30 }, -// ]); -// expect(insertDataArray).toBeDefined(); -// expect(insertDataArray).toHaveLength(2); -// expect(insertDataArray[0]).toHaveProperty('_id'); -// expect(insertDataArray[0]).toHaveProperty('name', 'Carlos'); -// expect(insertDataArray[0]).toHaveProperty('age', 25); -// expect(insertDataArray[1]).toHaveProperty('_id'); -// expect(insertDataArray[1]).toHaveProperty('name', 'Bob'); -// expect(insertDataArray[1]).toHaveProperty('age', 30); - -// // Test insert with array and schema -// const insertDataArrayWithSchema = await col.insert( -// [ -// { name: 'Carlos', age: 25 }, -// { name: 'Bob', age: 30 }, -// ], -// userAvroSchema, -// ); - -// expect(insertDataArrayWithSchema).toBeDefined(); -// expect(insertDataArrayWithSchema).toHaveLength(2); -// expect(insertDataArrayWithSchema[0]).toHaveProperty('_id'); -// expect(insertDataArrayWithSchema[0]).toHaveProperty('name', 'Carlos'); -// expect(insertDataArrayWithSchema[0]).toHaveProperty('age', 25); -// expect(insertDataArrayWithSchema[1]).toHaveProperty('_id'); -// expect(insertDataArrayWithSchema[1]).toHaveProperty('name', 'Bob'); -// expect(insertDataArrayWithSchema[1]).toHaveProperty('age', 30); - -// // Test insert with invalid array -// await expect(col.insert(null)).rejects.toThrow(lowstorage_ERROR_CODES.INSERT_ERROR); - -// // Test insert with invalid array and schema -// await expect( -// col.insert( -// [ -// { name: 'Carlos', age: 25 }, -// { name: 'Bob', age: 30 }, -// ], -// invalidSchema, -// ), -// ).rejects.toThrow(lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR); - -// // Test update -// const updateData = await col.update({ name: 'Carlos' }, { name: 'Carlos2' }); -// console.log('updateData', updateData); -// expect(updateData).toBeDefined(); -// expect(updateData).toBe(4); -// expect(updateData).toEqual(4); - -// // Test update with invalid array -// await expect(col.update(null, { name: 'Carlos2' })).rejects.toThrow(lowstorage_ERROR_CODES.UPDATE_ERROR); - -// // Test delete -// const deleteData = await col.delete({ name: 'Carlos2' }); -// expect(deleteData).toBeDefined(); -// expect(deleteData).toBe(4); - -// // Test delete with invalid data -// await expect(col.delete(null)).rejects.toThrow(lowstorage_ERROR_CODES.DELETE_ERROR); - -// // Test delete with array -// const deleteDataArray = await col.delete({ name: 'Bob' }); -// expect(deleteDataArray).toBeDefined(); -// expect(deleteDataArray).toBe(2); - -// // Test delete with invalid array -// await expect(col.delete(null)).rejects.toThrow(lowstorage_ERROR_CODES.DELETE_ERROR); - -// // cleanup -// await lStorage.removeCollection(colName); -// }); +test('Collections | basic CRUD operations', async () => { + // check if collections exist + const userColExists = await lStorage.collectionExists('userCol'); + // expect to be bollean + expect(typeof userColExists).toBe('boolean'); + if (userColExists) { + // try to create collection and get error + await expect(lStorage.createCollection('userCol', userAvroSchema)).rejects.toThrowError(); + // remove collection + const removeCollection = await lStorage.removeCollection('userCol'); + expect(removeCollection).toBe(true); + const doubleCheckIfExists = await lStorage.collectionExists('userCol'); + expect(doubleCheckIfExists).toBe(false); + } + // create collection now + const userCol = await lStorage.createCollection('userCol', userAvroSchema); + expect(userCol).toBeDefined(); + const userColExists3 = await lStorage.collectionExists('userCol'); + expect(userColExists3).toBe(true); + + const listCollections = await lStorage.listCollections(); + expect(listCollections).toContain('userCol'); + await expect(lStorage.createCollection('userCol', userAvroSchema)).rejects.toThrowError(); + + // check if collections exist + const testColExists = await lStorage.collectionExists('testCol'); + // expect to be bollean + expect(typeof testColExists).toBe('boolean'); + if (testColExists) { + // try to create collection and get error + await expect(lStorage.createCollection('testCol', testColSchema)).rejects.toThrowError(); + // remove collection + const removeCollection = await lStorage.removeCollection('testCol'); + expect(removeCollection).toBe(true); + const doubleCheckIfExists = await lStorage.collectionExists('testCol'); + expect(doubleCheckIfExists).toBe(false); + } + + await lStorage.createCollection('testCol', testColSchema); + + const testColExists2 = await lStorage.collectionExists('testCol'); + expect(testColExists2).toBe(true); + + const listCollections2 = await lStorage.listCollections(); + console.log('listCollections', listCollections2); + expect(listCollections2).toContain('testCol'); + expect(listCollections2).toContain('userCol'); + expect(listCollections2.length).toBe(2); + + const removeCollection = await lStorage.removeCollection('testCol'); + expect(removeCollection).toBe(true); + + const listCollections3 = await lStorage.listCollections(); + expect(listCollections3).not.toContain('testCol'); + expect(listCollections3).toContain('userCol'); + expect(listCollections3.length).toBe(1); + + const removeCollection2 = await lStorage.removeCollection('userCol'); + expect(removeCollection2).toBe(true); + + const listCollections4 = await lStorage.listCollections(); + expect(listCollections4).not.toContain('testCol'); + expect(listCollections4).not.toContain('userCol'); + expect(listCollections4.length).toBe(0); +}); +// test create collection +test('Collections | create via createCollection', async () => { + const preListCheck = await lStorage.listCollections(); + expect(preListCheck.length).toBe(0); + + const userCol = await lStorage.createCollection('userCol', userAvroSchema); + expect(userCol).toBeDefined(); + + const userColExists3 = await lStorage.collectionExists('userCol'); + expect(userColExists3).toBe(true); + + const listCollections = await lStorage.listCollections(); + expect(listCollections).toContain('userCol'); + expect(listCollections.length).toBe(1); + + const removeCollection = await lStorage.removeCollection('userCol'); + expect(removeCollection).toBe(true); + + const listCollections2 = await lStorage.listCollections(); + expect(listCollections2).not.toContain('userCol'); + expect(listCollections2.length).toBe(0); +}); +test('Collections | create via constructor', async () => { + const preListCheck = await lStorage.listCollections(); + expect(preListCheck.length).toBe(0); + + const userCol = await lStorage.collection('userCol', userAvroSchema); + expect(userCol).toBeDefined(); + + const userColExists = await lStorage.collectionExists('userCol'); + expect(userColExists).toBe(true); + + const listCollections = await lStorage.listCollections(); + expect(listCollections).toContain('userCol'); + expect(listCollections.length).toBe(1); + const removeCollection = await lStorage.removeCollection('userCol'); + expect(removeCollection).toBe(true); + + const listCollections2 = await lStorage.listCollections(); + expect(listCollections2).not.toContain('userCol'); + expect(listCollections2.length).toBe(0); +}); +test('Collections | error cases and error codes', async () => { + // Test create collection error + await expect(lStorage.createCollection()).rejects.toThrow(lowstorageError); + await expect(lStorage.createCollection()).rejects.toThrow(lowstorage_ERROR_CODES.CREATE_COLLECTION_ERROR); + + // Test collection already exists error + const testCol = await lStorage.createCollection('testCol', testColSchema); + await expect(lStorage.createCollection('testCol', testColSchema)).rejects.toThrow(lowstorageError); + await expect(lStorage.createCollection('testCol', testColSchema)).rejects.toThrow(lowstorage_ERROR_CODES.COLLECTION_EXISTS); + + const listCollections = await lStorage.listCollections(); + console.log('listCollections::::: ', listCollections); + expect(listCollections).toContain('testCol'); + + // Verify the collection exists before attempting to rename + const testColExists = await lStorage.collectionExists('testCol'); + expect(testColExists).toBe(true); + + // Test rename collection + const tesCol2 = await testCol.renameCollection('testCol2'); + await expect(tesCol2).toBeDefined(); + await expect(tesCol2).toBeInstanceOf(Object); + const tesCol2Exists = await lStorage.collectionExists('testCol2'); + expect(tesCol2Exists).toBe(true); + + const listCollectionsAfterRename = await lStorage.listCollections(); + console.log('listCollectionsAfterRename::::: ', listCollectionsAfterRename); + expect(listCollectionsAfterRename).not.toContain('testCol'); + expect(listCollectionsAfterRename).toContain('testCol2'); + + // Verify the collection exists after renaming + const testCol2Exists = await lStorage.collectionExists('testCol2'); + expect(testCol2Exists).toBe(true); + + // Test rename collection error + await expect(testCol.renameCollection('testCol2')).rejects.toThrow(lowstorageError); + await expect(testCol.renameCollection('testCol2')).rejects.toThrow(lowstorage_ERROR_CODES.COLLECTION_EXISTS); + + // // Test remove collection error + await expect(lStorage.removeCollection('testCol')).rejects.toThrow(lowstorageError); + await expect(lStorage.removeCollection('testCol')).rejects.toThrow(lowstorage_ERROR_CODES.REMOVE_COLLECTION_ERROR); + + // Test update collection schema error - NOT IMPLEMENTED + // const testColSchema = { + // type: 'record', + // name: 'TestCol', + // fields: [ + // { name: '_id', type: 'string', size: 16, logicalType: 'UUID' }, + // { name: 'name', type: 'string' }, + // { name: 'age', type: 'int' }, + // ], + // }; + // await expect(lStorage.updateCollectionSchema('testCol', testColSchema)).rejects.toThrow(lowstorageError); + // await expect(lStorage.updateCollectionSchema('testCol', testColSchema)).rejects.toThrow(lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND); + + // Test schema validation error + const invalidSchema = { type: 'invalid' }; + await expect(lStorage.createCollection('invalidSchemaCol', invalidSchema)).rejects.toThrow( + lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR, + ); + + // Test document validation error + await expect(tesCol2.insert({ invalidField: 'value' })).rejects.toThrow(lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR); + + // Test insert error + await expect(tesCol2.insert(null)).rejects.toThrow(lowstorage_ERROR_CODES.INSERT_ERROR); + + // Test update error + await expect(tesCol2.update(null, { field: 'value' })).rejects.toThrow(lowstorage_ERROR_CODES.MISSING_ARGUMENT); + + // Test update one error + await expect(tesCol2.updateOne(null, { field: 'value' })).rejects.toThrow(lowstorage_ERROR_CODES.MISSING_ARGUMENT); + + // Test delete error + await expect(tesCol2.delete(null)).rejects.toThrow(lowstorage_ERROR_CODES.MISSING_ARGUMENT); + + // Test count error - wrong argument + await expect(tesCol2.count(null)).rejects.toThrow(lowstorage_ERROR_CODES.COUNT_ERROR); + const count = await tesCol2.count(); + await expect(count).toBe(0); + + // Test remove collection error + await expect(lStorage.removeCollection(null)).rejects.toThrow(lowstorage_ERROR_CODES.REMOVE_COLLECTION_ERROR); + + // Test rename collection error + await expect(tesCol2.renameCollection(null)).rejects.toThrow(lowstorage_ERROR_CODES.RENAME_COLLECTION_ERROR); + + // Clean up + await lStorage.removeCollection('testCol2'); +}); + +test('Document | CRUD operations', async () => { + // Test insert + const colName = 'testColXXXX'; + const col = await lStorage.collection(colName); + const insertData = await col.insert({ name: 'Carlos', age: 25 }); + expect(insertData).toBeDefined(); + expect(insertData).toHaveLength(1); + expect(insertData[0]).toHaveProperty('_id'); + expect(insertData[0]).toHaveProperty('name', 'Carlos'); + expect(insertData[0]).toHaveProperty('age', 25); + + // Test by find + const findData = await col.find({ name: 'Carlos' }); + expect(findData).toBeDefined(); + expect(findData).toHaveLength(1); + expect(findData[0]).toHaveProperty('_id'); + expect(findData[0]).toHaveProperty('name', 'Carlos'); + expect(findData[0]).toHaveProperty('age', 25); + + // Test insert with schema + const insertDataWithSchema = await col.insert({ name: 'Carlos', age: 25 }, userAvroSchema); + expect(insertDataWithSchema).toBeDefined(); + expect(insertDataWithSchema).toHaveLength(1); + expect(insertDataWithSchema[0]).toHaveProperty('_id'); + expect(insertDataWithSchema[0]).toHaveProperty('name', 'Carlos'); + expect(insertDataWithSchema[0]).toHaveProperty('age', 25); + + // Test by find + const findDataWithSchema = await col.find({ name: 'Carlos' }); + expect(findDataWithSchema).toBeDefined(); + expect(findDataWithSchema).toHaveLength(2); + expect(findDataWithSchema[0]).toHaveProperty('_id'); + expect(findDataWithSchema[0]).toHaveProperty('name', 'Carlos'); + expect(findDataWithSchema[0]).toHaveProperty('age', 25); + + // test count + const count = await col.count({ name: 'Carlos' }); + expect(count).toBe(2); + + const count2 = await col.count(); + expect(count2).toBe(2); + + const count3 = await col.count({ name: 'Carlos2' }); + expect(count3).toBe(0); + + // Test insert with invalid schema + const invalidSchema = { type: 'invalid' }; + await expect(col.insert({ name: 'Carlos', age: 25 }, invalidSchema)).rejects.toThrow(lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR); + + // Test insert with invalid data + await expect(col.insert(null)).rejects.toThrow(lowstorage_ERROR_CODES.INSERT_ERROR); + + // Test insert with array + const insertDataArray = await col.insert([ + { name: 'Carlos', age: 25 }, + { name: 'Bob', age: 30 }, + ]); + expect(insertDataArray).toBeDefined(); + expect(insertDataArray).toHaveLength(2); + expect(insertDataArray[0]).toHaveProperty('_id'); + expect(insertDataArray[0]).toHaveProperty('name', 'Carlos'); + expect(insertDataArray[0]).toHaveProperty('age', 25); + expect(insertDataArray[1]).toHaveProperty('_id'); + expect(insertDataArray[1]).toHaveProperty('name', 'Bob'); + expect(insertDataArray[1]).toHaveProperty('age', 30); + + // Test insert with array and schema + const insertDataArrayWithSchema = await col.insert( + [ + { name: 'Carlos', age: 25 }, + { name: 'Bob', age: 30 }, + ], + userAvroSchema, + ); + + expect(insertDataArrayWithSchema).toBeDefined(); + expect(insertDataArrayWithSchema).toHaveLength(2); + expect(insertDataArrayWithSchema[0]).toHaveProperty('_id'); + expect(insertDataArrayWithSchema[0]).toHaveProperty('name', 'Carlos'); + expect(insertDataArrayWithSchema[0]).toHaveProperty('age', 25); + expect(insertDataArrayWithSchema[1]).toHaveProperty('_id'); + expect(insertDataArrayWithSchema[1]).toHaveProperty('name', 'Bob'); + expect(insertDataArrayWithSchema[1]).toHaveProperty('age', 30); + + // Test insert with invalid array + await expect(col.insert(null)).rejects.toThrow(lowstorage_ERROR_CODES.INSERT_ERROR); + + // Test insert with invalid array and schema + await expect( + col.insert( + [ + { name: 'Carlos', age: 25 }, + { name: 'Bob', age: 30 }, + ], + invalidSchema, + ), + ).rejects.toThrow(lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR); + + // Test update + const updateData = await col.update({ name: 'Carlos' }, { name: 'Carlos2' }); + console.log('updateData', updateData); + expect(updateData).toBeDefined(); + expect(updateData).toBe(4); + expect(updateData).toEqual(4); + + // Test update with invalid array + await expect(col.update(null, { name: 'Carlos2' })).rejects.toThrow(lowstorage_ERROR_CODES.UPDATE_ERROR); + + // Test delete + const deleteData = await col.delete({ name: 'Carlos2' }); + expect(deleteData).toBeDefined(); + expect(deleteData).toBe(4); + + // Test delete with invalid data + await expect(col.delete(null)).rejects.toThrow(lowstorage_ERROR_CODES.DELETE_ERROR); + + // Test delete with array + const deleteDataArray = await col.delete({ name: 'Bob' }); + expect(deleteDataArray).toBeDefined(); + expect(deleteDataArray).toBe(2); + + // Test delete with invalid array + await expect(col.delete(null)).rejects.toThrow(lowstorage_ERROR_CODES.DELETE_ERROR); + + // cleanup + await lStorage.removeCollection(colName); +}); test('Document | cachcing and race conditions', async () => { const colName = 'testColX1'; From b98b84bcae93104aaa46a49ea8772624c2910393 Mon Sep 17 00:00:00 2001 From: Jolly Good <1671375+good-lly@users.noreply.github.com> Date: Fri, 16 Aug 2024 15:08:48 +0200 Subject: [PATCH 10/18] fixes and improvements in testing and schema validaiton [wip] --- lib/lowstorage.js | 10 ++--- lib/lowstorage.js.map | 6 +-- src/helpers.js | 3 ++ src/lowstorage.js | 76 +++++++++++++++++++-------------- src/lowstorage.test.js | 97 ++++++++++++++++++++---------------------- 5 files changed, 102 insertions(+), 90 deletions(-) diff --git a/lib/lowstorage.js b/lib/lowstorage.js index 19b6494..5e90ba3 100644 --- a/lib/lowstorage.js +++ b/lib/lowstorage.js @@ -1,8 +1,8 @@ -var Q="AWS4-HMAC-SHA256",j="aws4_request",H="s3",_e="2",R="UNSIGNED-PAYLOAD",fe="application/octet-stream",X="application/xml",b="application/json",ge=["accessKeyId","secretAccessKey","sessionToken","password"],w="x-amz-content-sha256",pe="x-amz-date",Ee="host",Re="Authorization",T="Content-Type",N="Content-Length",Y="etag",J="last-modified",_="ultralight-s3 Module: ",we=`${_}accessKeyId must be a non-empty string`,ye=`${_}secretAccessKey must be a non-empty string`,me=`${_}endpoint must be a non-empty string`,Oe=`${_}bucketName must be a non-empty string`,Z=`${_}key must be a non-empty string`,x=`${_}uploadId must be a non-empty string`,ee=`${_}parts must be a non-empty array`,te=`${_}Each part must have a partNumber (number) and ETag (string)`,k=`${_}data must be a Buffer or string`,re=`${_}prefix must be a string`,se=`${_}maxKeys must be a positive integer`,ie=`${_}delimiter must be a string`,ae=crypto.createHmac||(await import("node:crypto")).createHmac,oe=crypto.createHash||(await import("node:crypto")).createHash;typeof ae>"u"&&typeof oe>"u"&&console.error("ultralight-S3 Module: Crypto functions are not available, please report the issue with necessary description: https://github.com/sentienhq/ultralight-s3/issues");var $e={contents:!0},Te=t=>`%${t.charCodeAt(0).toString(16).toUpperCase()}`,K=t=>encodeURIComponent(t).replace(/[!'()*]/g,Te),y=t=>K(t).replace(/%2F/g,"/"),ne=class{constructor({accessKeyId:t,secretAccessKey:e,endpoint:r,bucketName:s,region:i="auto",maxRequestSizeInBytes:o=5242880,requestAbortTimeout:n=void 0,logger:c=void 0}){this.getBucketName=()=>this.bucketName,this.setBucketName=a=>{this.bucketName=a},this.getRegion=()=>this.region,this.setRegion=a=>{this.region=a},this.getEndpoint=()=>this.endpoint,this.setEndpoint=a=>{this.endpoint=a},this.getMaxRequestSizeInBytes=()=>this.maxRequestSizeInBytes,this.setMaxRequestSizeInBytes=a=>{this.maxRequestSizeInBytes=a},this.sanitizeETag=a=>L(a),this.getProps=()=>({accessKeyId:this.accessKeyId,secretAccessKey:this.secretAccessKey,region:this.region,bucket:this.bucketName,endpoint:this.endpoint,maxRequestSizeInBytes:this.maxRequestSizeInBytes,requestAbortTimeout:this.requestAbortTimeout,logger:this.logger}),this.setProps=a=>{this._validateConstructorParams(a.accessKeyId,a.secretAccessKey,a.bucketName,a.endpoint),this.accessKeyId=a.accessKeyId,this.secretAccessKey=a.secretAccessKey,this.region=a.region||"auto",this.bucketName=a.bucketName,this.endpoint=a.endpoint,this.maxRequestSizeInBytes=a.maxRequestSizeInBytes||5242880,this.requestAbortTimeout=a.requestAbortTimeout,this.logger=a.logger},this._validateConstructorParams(t,e,r,s),this.accessKeyId=t,this.secretAccessKey=e,this.endpoint=r,this.bucketName=s,this.region=i,this.maxRequestSizeInBytes=o,this.requestAbortTimeout=n,this.logger=c}_validateConstructorParams(t,e,r,s){if(typeof t!="string"||t.trim().length===0)throw new TypeError(we);if(typeof e!="string"||e.trim().length===0)throw new TypeError(ye);if(typeof r!="string"||r.trim().length===0)throw new TypeError(me);if(typeof s!="string"||s.trim().length===0)throw new TypeError(Oe)}_checkMethodHeadnGet(t){if(t!=="GET"&&t!=="HEAD")throw this._log("error",`${_}method must be either GET or HEAD`),new Error("method must be either GET or HEAD")}_checkKey(t){if(typeof t!="string"||t.trim().length===0)throw this._log("error",Z),new TypeError(Z)}_checkDelimiter(t){if(typeof t!="string"||t.trim().length===0)throw this._log("error",ie),new TypeError(ie)}_checkPrefix(t){if(typeof t!="string")throw this._log("error",re),new TypeError(re)}_checkMaxKeys(t){if(typeof t!="number"||t<=0)throw this._log("error",se),new TypeError(se)}_checkOpts(t){if(typeof t!="object")throw this._log("error",`${_}opts must be an object`),new TypeError(`${_}opts must be an object`)}_log(t,e,r={}){if(this.logger&&typeof this.logger[t]=="function"){let s=n=>typeof n!="object"||n===null?n:Object.keys(n).reduce((c,a)=>(ge.includes(a.toLowerCase())?c[a]="[REDACTED]":typeof n[a]=="object"&&n[a]!==null?c[a]=s(n[a]):c[a]=n[a],c),Array.isArray(n)?[]:{}),i=s(r),o={timestamp:new Date().toISOString(),level:t,message:e,...i,context:s({bucketName:this.bucketName,region:this.region,endpoint:this.endpoint,accessKeyId:this.accessKeyId?`${this.accessKeyId.substring(0,4)}...`:void 0})};this.logger[t](o)}}async getContentLength(t){this._checkKey(t);let e={[w]:R},r=y(t),{url:s,headers:i}=await this._sign("HEAD",r,{},e,""),o=(await this._sendRequest(s,"HEAD",i)).headers.get(N);return o?parseInt(o,10):0}async bucketExists(){let t={[w]:R},{url:e,headers:r}=await this._sign("HEAD","",{},t,""),s=await this._sendRequest(e,"HEAD",r);return!!(s.ok&&s.status===200)}async fileExists(t,e={}){this._checkKey(t);let{filteredOpts:r,conditionalHeaders:s}=this._filterIfHeaders(e),i={[w]:R,...s},o=y(t),{url:n,headers:c}=await this._sign("HEAD",o,r,i,"");try{let a=await this._sendRequest(n,"HEAD",c,"",[200,404,412,304]);return a.status===404?!1:a.status===412||a.status===304?null:a.ok&&a.status===200?!0:(this._handleErrorResponse(a),!1)}catch(a){let u=a instanceof Error?a.message:String(a);throw this._log("error",`${_}Failed to check if file exists: ${u}`),new Error(`${_}Failed to check if file exists: ${u}`)}}async _sign(t,e,r,s,i){let o=new Date().toISOString().replace(/[:-]|\.\d{3}/g,""),n=typeof e=="string"&&e.length>0?new URL(e,this.endpoint):new URL(this.endpoint);n.pathname=`/${encodeURI(this.bucketName)}${n.pathname}`,s[w]=i?await F(i):R,s[pe]=o,s[Ee]=n.host;let c=this._buildCanonicalHeaders(s),a=Object.keys(s).map($=>$.toLowerCase()).sort().join(";"),u=await this._buildCanonicalRequest(t,n,r,c,a,i),f=await this._buildStringToSign(o,u),g=await this._calculateSignature(o,f),E=this._buildAuthorizationHeader(o,a,g);return s[Re]=E,{url:n.toString(),headers:s}}_buildCanonicalHeaders(t){return Object.entries(t).map(([e,r])=>`${e.toLowerCase()}:${String(r).trim()}`).sort().join(` +var X="AWS4-HMAC-SHA256",j="aws4_request",q="s3",ge="2",R="UNSIGNED-PAYLOAD",pe="application/octet-stream",J="application/xml",S="application/json",Re=["accessKeyId","secretAccessKey","sessionToken","password"],E="x-amz-content-sha256",Ee="x-amz-date",we="host",ye="Authorization",O="Content-Type",N="Content-Length",Y="etag",Z="last-modified",_="ultralight-s3 Module: ",me=`${_}accessKeyId must be a non-empty string`,Oe=`${_}secretAccessKey must be a non-empty string`,$e=`${_}endpoint must be a non-empty string`,Te=`${_}bucketName must be a non-empty string`,ee=`${_}key must be a non-empty string`,x=`${_}uploadId must be a non-empty string`,te=`${_}parts must be a non-empty array`,re=`${_}Each part must have a partNumber (number) and ETag (string)`,F=`${_}data must be a Buffer or string`,se=`${_}prefix must be a string`,ie=`${_}maxKeys must be a positive integer`,ae=`${_}delimiter must be a string`,oe=crypto.createHmac||(await import("node:crypto")).createHmac,ne=crypto.createHash||(await import("node:crypto")).createHash;typeof oe>"u"&&typeof ne>"u"&&console.error("ultralight-S3 Module: Crypto functions are not available, please report the issue with necessary description: https://github.com/sentienhq/ultralight-s3/issues");var Ie={contents:!0},Ae=t=>`%${t.charCodeAt(0).toString(16).toUpperCase()}`,K=t=>encodeURIComponent(t).replace(/[!'()*]/g,Ae),y=t=>K(t).replace(/%2F/g,"/"),he=class{constructor({accessKeyId:t,secretAccessKey:e,endpoint:r,bucketName:s,region:i="auto",maxRequestSizeInBytes:o=5242880,requestAbortTimeout:n=void 0,logger:u=void 0}){this.getBucketName=()=>this.bucketName,this.setBucketName=a=>{this.bucketName=a},this.getRegion=()=>this.region,this.setRegion=a=>{this.region=a},this.getEndpoint=()=>this.endpoint,this.setEndpoint=a=>{this.endpoint=a},this.getMaxRequestSizeInBytes=()=>this.maxRequestSizeInBytes,this.setMaxRequestSizeInBytes=a=>{this.maxRequestSizeInBytes=a},this.sanitizeETag=a=>L(a),this.getProps=()=>({accessKeyId:this.accessKeyId,secretAccessKey:this.secretAccessKey,region:this.region,bucket:this.bucketName,endpoint:this.endpoint,maxRequestSizeInBytes:this.maxRequestSizeInBytes,requestAbortTimeout:this.requestAbortTimeout,logger:this.logger}),this.setProps=a=>{this._validateConstructorParams(a.accessKeyId,a.secretAccessKey,a.bucketName,a.endpoint),this.accessKeyId=a.accessKeyId,this.secretAccessKey=a.secretAccessKey,this.region=a.region||"auto",this.bucketName=a.bucketName,this.endpoint=a.endpoint,this.maxRequestSizeInBytes=a.maxRequestSizeInBytes||5242880,this.requestAbortTimeout=a.requestAbortTimeout,this.logger=a.logger},this._validateConstructorParams(t,e,r,s),this.accessKeyId=t,this.secretAccessKey=e,this.endpoint=r,this.bucketName=s,this.region=i,this.maxRequestSizeInBytes=o,this.requestAbortTimeout=n,this.logger=u}_validateConstructorParams(t,e,r,s){if(typeof t!="string"||t.trim().length===0)throw new TypeError(me);if(typeof e!="string"||e.trim().length===0)throw new TypeError(Oe);if(typeof r!="string"||r.trim().length===0)throw new TypeError($e);if(typeof s!="string"||s.trim().length===0)throw new TypeError(Te)}_checkMethodHeadnGet(t){if(t!=="GET"&&t!=="HEAD")throw this._log("error",`${_}method must be either GET or HEAD`),new Error("method must be either GET or HEAD")}_checkKey(t){if(typeof t!="string"||t.trim().length===0)throw this._log("error",ee),new TypeError(ee)}_checkDelimiter(t){if(typeof t!="string"||t.trim().length===0)throw this._log("error",ae),new TypeError(ae)}_checkPrefix(t){if(typeof t!="string")throw this._log("error",se),new TypeError(se)}_checkMaxKeys(t){if(typeof t!="number"||t<=0)throw this._log("error",ie),new TypeError(ie)}_checkOpts(t){if(typeof t!="object")throw this._log("error",`${_}opts must be an object`),new TypeError(`${_}opts must be an object`)}_log(t,e,r={}){if(this.logger&&typeof this.logger[t]=="function"){let s=n=>typeof n!="object"||n===null?n:Object.keys(n).reduce((u,a)=>(Re.includes(a.toLowerCase())?u[a]="[REDACTED]":typeof n[a]=="object"&&n[a]!==null?u[a]=s(n[a]):u[a]=n[a],u),Array.isArray(n)?[]:{}),i=s(r),o={timestamp:new Date().toISOString(),level:t,message:e,...i,context:s({bucketName:this.bucketName,region:this.region,endpoint:this.endpoint,accessKeyId:this.accessKeyId?`${this.accessKeyId.substring(0,4)}...`:void 0})};this.logger[t](o)}}async getContentLength(t){this._checkKey(t);let e={[E]:R},r=y(t),{url:s,headers:i}=await this._sign("HEAD",r,{},e,""),o=(await this._sendRequest(s,"HEAD",i)).headers.get(N);return o?parseInt(o,10):0}async bucketExists(){let t={[E]:R},{url:e,headers:r}=await this._sign("HEAD","",{},t,""),s=await this._sendRequest(e,"HEAD",r);return!!(s.ok&&s.status===200)}async fileExists(t,e={}){this._checkKey(t);let{filteredOpts:r,conditionalHeaders:s}=this._filterIfHeaders(e),i={[E]:R,...s},o=y(t),{url:n,headers:u}=await this._sign("HEAD",o,r,i,"");try{let a=await this._sendRequest(n,"HEAD",u,"",[200,404,412,304]);return a.status===404?!1:a.status===412||a.status===304?null:a.ok&&a.status===200?!0:(this._handleErrorResponse(a),!1)}catch(a){let c=a instanceof Error?a.message:String(a);throw this._log("error",`${_}Failed to check if file exists: ${c}`),new Error(`${_}Failed to check if file exists: ${c}`)}}async _sign(t,e,r,s,i){let o=new Date().toISOString().replace(/[:-]|\.\d{3}/g,""),n=typeof e=="string"&&e.length>0?new URL(e,this.endpoint):new URL(this.endpoint);n.pathname=`/${encodeURI(this.bucketName)}${n.pathname}`,s[E]=i?await H(i):R,s[Ee]=o,s[we]=n.host;let u=this._buildCanonicalHeaders(s),a=Object.keys(s).map(m=>m.toLowerCase()).sort().join(";"),c=await this._buildCanonicalRequest(t,n,r,u,a,i),f=await this._buildStringToSign(o,c),g=await this._calculateSignature(o,f),w=this._buildAuthorizationHeader(o,a,g);return s[ye]=w,{url:n.toString(),headers:s}}_buildCanonicalHeaders(t){return Object.entries(t).map(([e,r])=>`${e.toLowerCase()}:${String(r).trim()}`).sort().join(` `)}async _buildCanonicalRequest(t,e,r,s,i,o){return[t,e.pathname,this._buildCanonicalQueryString(r),`${s} -`,i,o?await F(o):R].join(` -`)}async _buildStringToSign(t,e){let r=[t.slice(0,8),this.region,H,j].join("/");return[Q,t,r,await F(e)].join(` -`)}async _calculateSignature(t,e){let r=await this._getSignatureKey(t.slice(0,8));return U(r,e,"hex")}_buildAuthorizationHeader(t,e,r){let s=[t.slice(0,8),this.region,H,j].join("/");return[`${Q} Credential=${this.accessKeyId}/${s}`,`SignedHeaders=${e}`,`Signature=${r}`].join(", ")}_filterIfHeaders(t){let e={},r={},s=["if-match","if-none-match","if-modified-since","if-unmodified-since"];for(let[i,o]of Object.entries(t))s.includes(i)?r[i]=o:e[i]=o;return{filteredOpts:e,conditionalHeaders:r}}async list(t="/",e="",r=1e3,s="GET",i={}){this._checkDelimiter(t),this._checkPrefix(e),this._checkMaxKeys(r),this._checkMethodHeadnGet(s),this._checkOpts(i),this._log("info",`Listing objects in ${e}`);let o={"list-type":_e,"max-keys":String(r),...i};e.length>0&&(o.prefix=e);let n={[T]:b,[w]:R},c=t==="/"?t:K(t),{url:a,headers:u}=await this._sign("GET",c,o,n,""),f=`${a}?${new URLSearchParams(o)}`,g=await this._sendRequest(f,"GET",u),E=await g.text();if(s==="HEAD"){let S=g.headers.get(N),D=g.headers.get(J),de=g.headers.get(Y);return{size:S?+S:void 0,mtime:D?new Date(D):void 0,ETag:de||void 0}}let $=C(E),M=$.listBucketResult||$.error||$;return M.contents||M}async listMultiPartUploads(t="/",e="",r="GET",s={}){var i,o,n;this._checkDelimiter(t),this._checkPrefix(e),this._checkMethodHeadnGet(r),this._checkOpts(s),this._log("info",`Listing multipart uploads in ${e}`);let c={uploads:"",...s},a={[T]:b,[w]:R},u=t==="/"?t:K(t),{url:f,headers:g}=await this._sign("GET",u,c,a,""),E=`${f}?${new URLSearchParams(c)}`,$=await this._sendRequest(E,"GET",g),M=await $.text();if(r==="HEAD")return{size:+((i=$.headers.get(N))!==null&&i!==void 0?i:"0"),mtime:new Date((o=$.headers.get(J))!==null&&o!==void 0?o:""),ETag:(n=$.headers.get(Y))!==null&&n!==void 0?n:""};let S=C(M),D=S.listMultipartUploadsResult||S.error||S;return D.uploads||D}async get(t,e={}){this._checkKey(t),this._log("info",`Getting object ${t}`);let{filteredOpts:r,conditionalHeaders:s}=this._filterIfHeaders(e),i={[T]:b,[w]:R,...s},o=y(t),{url:n,headers:c}=await this._sign("GET",o,r,i,""),a=await this._sendRequest(n,"GET",c,"",[200,404,412,304]);if(a.status===404||a.status===412||a.status===304)return this._log("error",`Failed to get object. Status: ${a.status}`),null;if(!a.ok)throw this._log("error",`Failed to get object. Status: ${a.status}`),new Error(`Failed to get object. Status: ${a.status}`);return a.text()}async getObjectWithETag(t,e={}){this._checkKey(t),this._log("info",`Getting object ${t}`);let{filteredOpts:r,conditionalHeaders:s}=this._filterIfHeaders(e),i={[T]:b,[w]:R,...s},o=y(t),{url:n,headers:c}=await this._sign("GET",o,r,i,"");try{let a=await this._sendRequest(n,"GET",c,"",[200,404,412,304]);if(a.status===404||a.status===412||a.status===304)return this._log("error",`Failed to get object. Status: ${a.status}`),{etag:null,data:null};if(!a.ok)throw this._log("error",`Failed to get object. Status: ${a.status}`),new Error(`Failed to get object. Status: ${a.status}`);let u=a.headers.get("etag");if(!u)throw new Error("ETag not found in response headers");let f=await a.text();return{etag:L(u),data:f}}catch(a){throw this._log("error",`Error getting object ${t} with ETag: ${a}`),a}}async getEtag(t,e={}){this._checkKey(t),this._log("info",`Getting etag object ${t}`);let{filteredOpts:r,conditionalHeaders:s}=this._filterIfHeaders(e),i={[T]:b,[w]:R,...s},o=y(t),{url:n,headers:c}=await this._sign("HEAD",o,r,i,""),a=await this._sendRequest(n,"HEAD",c,"",[200,412,304]);if(this._log("info",`Response status: ${a.status,a.statusText}`),a.status===412||a.status===304)return null;let u=a.headers.get("etag");if(!u)throw this._log("error","ETag not found in response headers"),new Error("ETag not found in response headers");return L(u)}async getResponse(t,e=!0,r=0,s=this.maxRequestSizeInBytes,i={}){this._checkKey(t);let{filteredOpts:o,conditionalHeaders:n}=this._filterIfHeaders({...i}),c={[T]:b,[w]:R,...e?{}:{range:`bytes=${r}-${s-1}`},...n},a=y(t),{url:u,headers:f}=await this._sign("GET",a,o,c,""),g=`${u}?${new URLSearchParams(o)}`;return this._sendRequest(g,"GET",f)}async put(t,e){if(this._checkKey(t),!(e instanceof Buffer||typeof e=="string"))throw this._log("error",k),new TypeError(k);this._log("info",`Uploading object ${t}`);let r=typeof e=="string"?Buffer.byteLength(e):e.length,s={[N]:r},i=y(t),{url:o,headers:n}=await this._sign("PUT",i,{},s,e);return await this._sendRequest(o,"PUT",n,e)}async getMultipartUploadId(t,e=fe){if(this._checkKey(t),typeof e!="string")throw this._log("error",`${_}fileType must be a string`),new TypeError(`${_}fileType must be a string`);this._log("info",`Initiating multipart upload for object ${t}`);let r={uploads:""},s={[T]:e,[w]:R},i=y(t),{url:o,headers:n}=await this._sign("POST",i,r,s,""),c=`${o}?${new URLSearchParams(r)}`,a=await(await this._sendRequest(c,"POST",n)).text(),u=C(a);if(typeof u=="object"&&u!==null&&"error"in u&&typeof u.error=="object"&&u.error!==null&&"message"in u.error){let f=String(u.error.message);throw this._log("error",`${_}Failed to abort multipart upload: ${f}`),new Error(`${_}Failed to abort multipart upload: ${f}`)}if(typeof u=="object"&&u!==null){if(!u.initiateMultipartUploadResult||!u.initiateMultipartUploadResult.uploadId)throw this._log("error",`${_}Failed to create multipart upload: no uploadId in response`),new Error(`${_}Failed to create multipart upload: Missing upload ID in response`);return u.initiateMultipartUploadResult.uploadId}else throw this._log("error",`${_}Failed to create multipart upload: unexpected response format`),new Error(`${_}Failed to create multipart upload: Unexpected response format`)}async uploadPart(t,e,r,s,i={}){this._validateUploadPartParams(t,e,r,s,i);let o={uploadId:r,partNumber:s,...i},n={[N]:e.length},c=y(t),{url:a,headers:u}=await this._sign("PUT",c,o,n,e),f=`${a}?${new URLSearchParams(o)}`,g=await this._sendRequest(f,"PUT",u,e),E=L(g.headers.get("etag")||"");return{partNumber:s,ETag:E}}_validateUploadPartParams(t,e,r,s,i){if(this._checkKey(t),!(e instanceof Buffer||typeof e=="string"))throw this._log("error",k),new TypeError(k);if(typeof r!="string"||r.trim().length===0)throw this._log("error",x),new TypeError(x);if(!Number.isInteger(s)||s<=0)throw this._log("error",`${_}partNumber must be a positive integer`),new TypeError(`${_}partNumber must be a positive integer`);this._checkOpts(i)}async completeMultipartUpload(t,e,r){if(this._checkKey(t),typeof e!="string"||e.trim().length===0)throw this._log("error",x),new TypeError(x);if(!Array.isArray(r)||r.length===0)throw this._log("error",ee),new TypeError(ee);if(!r.every(E=>typeof E.partNumber=="number"&&typeof E.ETag=="string"))throw this._log("error",te),new TypeError(te);this._log("info",`Complete multipart upload ${e} for object ${t}`);let s={uploadId:e},i=this._buildCompleteMultipartUploadXml(r),o={[T]:X,[N]:Buffer.byteLength(i).toString(),[w]:await F(i)},n=y(t),{url:c,headers:a}=await this._sign("POST",n,s,o,i),u=`${c}?${new URLSearchParams(s)}`,f=await(await this._sendRequest(u,"POST",a,i)).text(),g=C(f);if(typeof g=="object"&&g!==null&&"error"in g&&typeof g.error=="object"&&g.error!==null&&"message"in g.error){let E=String(g.error.message);throw this._log("error",`${_}Failed to abort multipart upload: ${E}`),new Error(`${_}Failed to abort multipart upload: ${E}`)}return g.completeMultipartUploadResult}async abortMultipartUpload(t,e){if(this._checkKey(t),typeof e!="string"||e.trim().length===0)throw this._log("error",x),new TypeError(x);this._log("info",`Aborting multipart upload ${e} for object ${t}`);let r={uploadId:e},s={[T]:X,[w]:R};try{let i=y(t),{url:o,headers:n}=await this._sign("DELETE",i,r,s,""),c=`${o}?${new URLSearchParams(r)}`,a=await this._sendRequest(c,"DELETE",n);if(a.ok){let u=await a.text(),f=C(u);if(typeof f=="object"&&f!==null&&"error"in f&&typeof f.error=="object"&&f.error!==null&&"message"in f.error){let g=String(f.error.message);throw this._log("error",`${_}Failed to abort multipart upload: ${g}`),new Error(`${_}Failed to abort multipart upload: ${g}`)}return{status:"Aborted",key:t,uploadId:e,response:f}}else throw this._log("error",`${_}Abort request failed with status ${a.status}`),new Error(`${_}Abort request failed with status ${a.status}`)}catch(i){let o=i instanceof Error?i.message:String(i);throw this._log("error",`${_}Failed to abort multipart upload for key ${t}: ${o}`),new Error(`${_}Failed to abort multipart upload for key ${t}: ${o}`)}}_buildCompleteMultipartUploadXml(t){return` +`,i,o?await H(o):R].join(` +`)}async _buildStringToSign(t,e){let r=[t.slice(0,8),this.region,q,j].join("/");return[X,t,r,await H(e)].join(` +`)}async _calculateSignature(t,e){let r=await this._getSignatureKey(t.slice(0,8));return U(r,e,"hex")}_buildAuthorizationHeader(t,e,r){let s=[t.slice(0,8),this.region,q,j].join("/");return[`${X} Credential=${this.accessKeyId}/${s}`,`SignedHeaders=${e}`,`Signature=${r}`].join(", ")}_filterIfHeaders(t){let e={},r={},s=["if-match","if-none-match","if-modified-since","if-unmodified-since"];for(let[i,o]of Object.entries(t))s.includes(i)?r[i]=o:e[i]=o;return{filteredOpts:e,conditionalHeaders:r}}async list(t="/",e="",r=1e3,s="GET",i={}){this._checkDelimiter(t),this._checkPrefix(e),this._checkMaxKeys(r),this._checkMethodHeadnGet(s),this._checkOpts(i),this._log("info",`Listing objects in ${e}`);let o={"list-type":ge,"max-keys":String(r),...i};e.length>0&&(o.prefix=e);let n={[O]:S,[E]:R},u=t==="/"?t:K(t),{url:a,headers:c}=await this._sign("GET",u,o,n,""),f=`${a}?${new URLSearchParams(o)}`,g=await this._sendRequest(f,"GET",c),w=await g.text();if(s==="HEAD"){let b=g.headers.get(N),C=g.headers.get(Z),fe=g.headers.get(Y);return{size:b?+b:void 0,mtime:C?new Date(C):void 0,ETag:fe||void 0}}let m=D(w),M=m.listBucketResult||m.error||m;return M.contents||M}async listMultiPartUploads(t="/",e="",r="GET",s={}){var i,o,n;this._checkDelimiter(t),this._checkPrefix(e),this._checkMethodHeadnGet(r),this._checkOpts(s),this._log("info",`Listing multipart uploads in ${e}`);let u={uploads:"",...s},a={[O]:S,[E]:R},c=t==="/"?t:K(t),{url:f,headers:g}=await this._sign("GET",c,u,a,""),w=`${f}?${new URLSearchParams(u)}`,m=await this._sendRequest(w,"GET",g),M=await m.text();if(r==="HEAD")return{size:+((i=m.headers.get(N))!==null&&i!==void 0?i:"0"),mtime:new Date((o=m.headers.get(Z))!==null&&o!==void 0?o:""),ETag:(n=m.headers.get(Y))!==null&&n!==void 0?n:""};let b=D(M),C=b.listMultipartUploadsResult||b.error||b;return C.uploads||C}async get(t,e={}){this._checkKey(t),this._log("info",`Getting object ${t}`);let{filteredOpts:r,conditionalHeaders:s}=this._filterIfHeaders(e),i={[O]:S,[E]:R,...s},o=y(t),{url:n,headers:u}=await this._sign("GET",o,r,i,""),a=await this._sendRequest(n,"GET",u,"",[200,404,412,304]);if(a.status===404||a.status===412||a.status===304)return this._log("error",`Failed to get object. Status: ${a.status}`),null;if(!a.ok)throw this._log("error",`Failed to get object. Status: ${a.status}`),new Error(`Failed to get object. Status: ${a.status}`);return a.text()}async getObjectWithETag(t,e={}){this._checkKey(t),this._log("info",`Getting object ${t}`);let{filteredOpts:r,conditionalHeaders:s}=this._filterIfHeaders(e),i={[O]:S,[E]:R,...s},o=y(t),{url:n,headers:u}=await this._sign("GET",o,r,i,"");try{let a=await this._sendRequest(n,"GET",u,"",[200,404,412,304]);if(a.status===404||a.status===412||a.status===304)return this._log("error",`Failed to get object. Status: ${a.status}`),{etag:null,data:null};if(!a.ok)throw this._log("error",`Failed to get object. Status: ${a.status}`),new Error(`Failed to get object. Status: ${a.status}`);let c=a.headers.get("etag");if(!c)throw new Error("ETag not found in response headers");let f=await a.text();return{etag:L(c),data:f}}catch(a){throw this._log("error",`Error getting object ${t} with ETag: ${a}`),a}}async getEtag(t,e={}){this._checkKey(t),this._log("info",`Getting etag object ${t}`);let{filteredOpts:r,conditionalHeaders:s}=this._filterIfHeaders(e),i={[O]:S,[E]:R,...s},o=y(t),{url:n,headers:u}=await this._sign("HEAD",o,r,i,""),a=await this._sendRequest(n,"HEAD",u,"",[200,412,304]);if(this._log("info",`Response status: ${a.status,a.statusText}`),a.status===412||a.status===304)return null;let c=a.headers.get("etag");if(!c)throw this._log("error","ETag not found in response headers"),new Error("ETag not found in response headers");return L(c)}async getResponse(t,e=!0,r=0,s=this.maxRequestSizeInBytes,i={}){this._checkKey(t);let{filteredOpts:o,conditionalHeaders:n}=this._filterIfHeaders({...i}),u={[O]:S,[E]:R,...e?{}:{range:`bytes=${r}-${s-1}`},...n},a=y(t),{url:c,headers:f}=await this._sign("GET",a,o,u,""),g=`${c}?${new URLSearchParams(o)}`;return this._sendRequest(g,"GET",f)}async put(t,e){if(this._checkKey(t),!(e instanceof Buffer||typeof e=="string"))throw this._log("error",F),new TypeError(F);this._log("info",`Uploading object ${t}`);let r=typeof e=="string"?Buffer.byteLength(e):e.length,s={[N]:r},i=y(t),{url:o,headers:n}=await this._sign("PUT",i,{},s,e);return await this._sendRequest(o,"PUT",n,e)}async getMultipartUploadId(t,e=pe){if(this._checkKey(t),typeof e!="string")throw this._log("error",`${_}fileType must be a string`),new TypeError(`${_}fileType must be a string`);this._log("info",`Initiating multipart upload for object ${t}`);let r={uploads:""},s={[O]:e,[E]:R},i=y(t),{url:o,headers:n}=await this._sign("POST",i,r,s,""),u=`${o}?${new URLSearchParams(r)}`,a=await(await this._sendRequest(u,"POST",n)).text(),c=D(a);if(typeof c=="object"&&c!==null&&"error"in c&&typeof c.error=="object"&&c.error!==null&&"message"in c.error){let f=String(c.error.message);throw this._log("error",`${_}Failed to abort multipart upload: ${f}`),new Error(`${_}Failed to abort multipart upload: ${f}`)}if(typeof c=="object"&&c!==null){if(!c.initiateMultipartUploadResult||!c.initiateMultipartUploadResult.uploadId)throw this._log("error",`${_}Failed to create multipart upload: no uploadId in response`),new Error(`${_}Failed to create multipart upload: Missing upload ID in response`);return c.initiateMultipartUploadResult.uploadId}else throw this._log("error",`${_}Failed to create multipart upload: unexpected response format`),new Error(`${_}Failed to create multipart upload: Unexpected response format`)}async uploadPart(t,e,r,s,i={}){this._validateUploadPartParams(t,e,r,s,i);let o={uploadId:r,partNumber:s,...i},n={[N]:e.length},u=y(t),{url:a,headers:c}=await this._sign("PUT",u,o,n,e),f=`${a}?${new URLSearchParams(o)}`,g=await this._sendRequest(f,"PUT",c,e),w=L(g.headers.get("etag")||"");return{partNumber:s,ETag:w}}_validateUploadPartParams(t,e,r,s,i){if(this._checkKey(t),!(e instanceof Buffer||typeof e=="string"))throw this._log("error",F),new TypeError(F);if(typeof r!="string"||r.trim().length===0)throw this._log("error",x),new TypeError(x);if(!Number.isInteger(s)||s<=0)throw this._log("error",`${_}partNumber must be a positive integer`),new TypeError(`${_}partNumber must be a positive integer`);this._checkOpts(i)}async completeMultipartUpload(t,e,r){if(this._checkKey(t),typeof e!="string"||e.trim().length===0)throw this._log("error",x),new TypeError(x);if(!Array.isArray(r)||r.length===0)throw this._log("error",te),new TypeError(te);if(!r.every(w=>typeof w.partNumber=="number"&&typeof w.ETag=="string"))throw this._log("error",re),new TypeError(re);this._log("info",`Complete multipart upload ${e} for object ${t}`);let s={uploadId:e},i=this._buildCompleteMultipartUploadXml(r),o={[O]:J,[N]:Buffer.byteLength(i).toString(),[E]:await H(i)},n=y(t),{url:u,headers:a}=await this._sign("POST",n,s,o,i),c=`${u}?${new URLSearchParams(s)}`,f=await(await this._sendRequest(c,"POST",a,i)).text(),g=D(f);if(typeof g=="object"&&g!==null&&"error"in g&&typeof g.error=="object"&&g.error!==null&&"message"in g.error){let w=String(g.error.message);throw this._log("error",`${_}Failed to abort multipart upload: ${w}`),new Error(`${_}Failed to abort multipart upload: ${w}`)}return g.completeMultipartUploadResult}async abortMultipartUpload(t,e){if(this._checkKey(t),typeof e!="string"||e.trim().length===0)throw this._log("error",x),new TypeError(x);this._log("info",`Aborting multipart upload ${e} for object ${t}`);let r={uploadId:e},s={[O]:J,[E]:R};try{let i=y(t),{url:o,headers:n}=await this._sign("DELETE",i,r,s,""),u=`${o}?${new URLSearchParams(r)}`,a=await this._sendRequest(u,"DELETE",n);if(a.ok){let c=await a.text(),f=D(c);if(typeof f=="object"&&f!==null&&"error"in f&&typeof f.error=="object"&&f.error!==null&&"message"in f.error){let g=String(f.error.message);throw this._log("error",`${_}Failed to abort multipart upload: ${g}`),new Error(`${_}Failed to abort multipart upload: ${g}`)}return{status:"Aborted",key:t,uploadId:e,response:f}}else throw this._log("error",`${_}Abort request failed with status ${a.status}`),new Error(`${_}Abort request failed with status ${a.status}`)}catch(i){let o=i instanceof Error?i.message:String(i);throw this._log("error",`${_}Failed to abort multipart upload for key ${t}: ${o}`),new Error(`${_}Failed to abort multipart upload for key ${t}: ${o}`)}}_buildCompleteMultipartUploadXml(t){return` ${t.map(e=>` @@ -11,5 +11,5 @@ var Q="AWS4-HMAC-SHA256",j="aws4_request",H="s3",_e="2",R="UNSIGNED-PAYLOAD",fe= `).join("")} - `}async delete(t){this._checkKey(t),this._log("info",`Deleting object ${t}`);let e={[T]:b,[w]:R},r=y(t),{url:s,headers:i}=await this._sign("DELETE",r,{},e,""),o=await this._sendRequest(s,"DELETE",i);return o.status===204||o.status===200}async _sendRequest(t,e,r,s,i=[]){this._log("info",`Sending ${e} request to ${t}, headers: ${JSON.stringify(r)}`);let o=await fetch(t,{method:e,headers:r,body:["GET","HEAD"].includes(e)?void 0:s,signal:this.requestAbortTimeout!==void 0?AbortSignal.timeout(this.requestAbortTimeout):void 0});return!o.ok&&!i.includes(o.status)&&await this._handleErrorResponse(o),o}async _handleErrorResponse(t){let e=await t.text(),r=t.headers.get("x-amz-error-code")||"Unknown",s=t.headers.get("x-amz-error-message")||t.statusText;throw this._log("error",`${_}Request failed with status ${t.status}: ${r} - ${s},err body: ${e}`),new Error(`${_}Request failed with status ${t.status}: ${r} - ${s}, err body: ${e}`)}_buildCanonicalQueryString(t){return Object.keys(t).length<1?"":Object.keys(t).sort().map(e=>`${encodeURIComponent(e)}=${encodeURIComponent(t[e])}`).join("&")}async _getSignatureKey(t){let e=await U(`AWS4${this.secretAccessKey}`,t),r=await U(e,this.region),s=await U(r,H);return U(s,j)}},F=async t=>{let e=oe("sha256");return e.update(t),e.digest("hex")},U=async(t,e,r)=>{let s=ae("sha256",t);return s.update(e),s.digest(r)},L=t=>{let e={'"':"",""":"",""":"",""":"",""":""};return t.replace(/^("|"|")|("|"|")$/g,r=>e[r])},C=t=>{let e=o=>o.replace(/"/g,'"').replace(/'/g,"'").replace(/</g,"<").replace(/>/g,">").replace(/&/g,"&"),r={},s=/<(\w)([-\w]+)(?:\/|[^>]*>((?:(?!<\1)[\s\S])*)<\/\1\2)>/gm,i;for(;i=s.exec(t);){let[,o,n,c]=i,a=o.toLowerCase()+n,u=c!=null?C(c):!0;typeof u=="string"?r[a]=L(e(u)):Array.isArray(r[a])?r[a].push(u):r[a]=r[a]!=null?[r[a],u]:$e[a]?[u]:u}return Object.keys(r).length?r:e(t)};import ue from"avro-js";var l={MISSING_ARGUMENT:"MISSING_ARGUMENT",COLLECTION_EXISTS:"COLLECTION_EXISTS",CREATE_COLLECTION_ERROR:"CREATE_COLLECTION_ERROR",RENAME_COLLECTION_ERROR:"RENAME_COLLECTION_ERROR",REMOVE_COLLECTION_ERROR:"REMOVE_COLLECTION_ERROR",UPDATE_COLLECTION_SCHEMA_ERROR:"UPDATE_COLLECTION_SCHEMA_ERROR",COLLECTION_NOT_FOUND:"COLLECTION_NOT_FOUND",SCHEMA_VALIDATION_ERROR:"SCHEMA_VALIDATION_ERROR",DOCUMENT_VALIDATION_ERROR:"DOCUMENT_VALIDATION_ERROR",S3_OPERATION_ERROR:"S3_OPERATION_ERROR",FIND_ERROR:"FIND_ERROR",FIND_ONE_ERROR:"FIND_ONE_ERROR",SAVE_DATA_ERROR:"SAVE_DATA_ERROR",INSERT_ERROR:"INSERT_ERROR",UPDATE_ERROR:"UPDATE_ERROR",UPDATE_ONE_ERROR:"UPDATE_ONE_ERROR",DELETE_ERROR:"DELETE_ERROR",COUNT_ERROR:"COUNT_ERROR",UNKNOWN_ERROR:"UNKNOWN_ERROR"},d=class extends Error{constructor(e,r=l.UNKNOWN_ERROR){super(`lowstorageError: ${e} :: code: ${r}`),this.name=this.constructor.name,this.code=r,Error.captureStackTrace(this,this.constructor)}};var A=class extends d{constructor(e){super(e,l.SCHEMA_VALIDATION_ERROR)}},I=class extends d{constructor(e){super(e,l.DOCUMENT_VALIDATION_ERROR)}},p=class extends d{constructor(e,r){super(`S3 ${r} operation failed: ${e}`,l.S3_OPERATION_ERROR)}};import{randomUUID as q}from"node:crypto";var v=(t,e)=>Object.keys(e).every(r=>t[r]===e[r]),le=async()=>typeof q<"u"&&typeof q=="function"?q():typeof crypto<"u"&&typeof crypto=="object"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(t){var e=Math.random()*16|0,r=t==="x"?e:e&3|8;return r.toString(16)}),he=(t,e="SubAutoGenerated")=>{switch(typeof t){case"string":return Ae(t)?{type:"string",name:"_id",size:16,logicalType:"UUID"}:"string";case"number":return Number.isInteger(t)?"int":"float";case"boolean":return"boolean";case"object":return t===null?"null":Array.isArray(t)?{type:"array",items:he(t[0])}:G(t,e);default:return"string"}},Ie=t=>{let e={name:"_id",type:"string",size:16,logicalType:"UUID"};return t.type==="record"?t.fields.some(s=>s.name==="_id")||t.fields.unshift(e):t.type==="array"&&t.items.type==="record"&&(t.items.fields.some(s=>s.name==="_id")||t.items.fields.unshift(e)),t},G=(t,e="AutoGenerated")=>{Array.isArray(t)&&(t=t[0]);let r=Object.entries(t).map(([i,o])=>({name:i,type:he(o,`${e}.${i}`)}));return Ie({type:"record",name:e,fields:r})},Ae=t=>/^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i.test(t);var h="lowstorage",m="/",B="lowstorage",O=".avro",be=1024*1024,Se=5*be,z=Buffer.from("","utf8"),V=(t=l.DOCUMENT_VALIDATION_ERROR)=>{throw new I(`${h}: Invalid document or schema`,t)},P=t=>{if(t.trim()===""||t===null||typeof t>"u"||t.length>255||t===null)throw new d(`${h}: Collection name is required, null or too long`,l.MISSING_ARGUMENT)},ce=class{constructor(e={accessKeyId:void 0,secretAccessKey:void 0,endpoint:void 0,bucketName:void 0,region:"auto",logger:null,dirPrefix:B}){this._checkArgs(e),this._schemas=new Map,this._s3=new ne(e),this._dirPrefix=e.dirPrefix||B,this._avro=ue}_checkArgs=e=>{let r=["accessKeyId","secretAccessKey","endpoint","bucketName"];for(let s of r)if(!e[s])throw new d(`${h}: ${s} is required`,l.MISSING_ARGUMENT)};async listCollections(){try{let e=await this._s3.list(m,this._dirPrefix);return typeof e=="object"&&e!==null&&e.keyCount==="0"?[]:e.map(r=>r.key.slice(this._dirPrefix.length+1,-O.length))}catch(e){throw new p(`${h}: ${e.message}`,l.S3_OPERATION_ERROR)}}async collectionExists(e){try{P(e);let r=await this._s3.fileExists(`${this._dirPrefix}${m}${e}${O}`);return console.log("collectionExists::2 ",`${this._dirPrefix}${m}${e}${O}`,r),!!r}catch(r){if(r.message.includes("Not Found"))return!1;throw console.log("collectionExists::3 ",e,r),new d(`${h}: ${r.message}`,l.COLLECTION_NOT_FOUND)}}async createCollection(e,r,s=[]){try{if(P(e),!await this.collectionExists(e)){if(s.length>0&&r){let o=this._avro.parse({type:"array",items:r});await this._s3.put(`${this._dirPrefix}${m}${e}${O}`,o.toBuffer(s))}else await this._s3.put(`${this._dirPrefix}${m}${e}${O}`,z);return this.collection(e,r,!1)}throw new d(`${h}: Collection ${e} already exists`,l.COLLECTION_EXISTS)}catch(i){throw i instanceof d?i:new d(`${h}: ${i.message}`,l.CREATE_COLLECTION_ERROR)}}async removeCollection(e){try{P(e);let r=`${this._dirPrefix}${m}${e}${O}`;if(await this.collectionExists(e)){await this._s3.delete(r);let i=await this.collectionExists(e);if(typeof i=="boolean"){if(!i)return this._schemas.delete(e),!0;throw new d(`${h}: Failed to delete collection ${e}`,l.S3_OPERATION_ERROR)}throw new p(`${h}: Failed to delete collection ${e}`,l.S3_OPERATION_ERROR)}throw new d(`${h}: Collection ${e} does not exist`,l.REMOVE_COLLECTION_ERROR)}catch(r){throw r instanceof p?r:new d(`${h}: Failed to remove collection: ${r.message}`,l.REMOVE_COLLECTION_ERROR)}}async collection(e,r,s=!0){try{P(e);let i=`${this._dirPrefix}${m}${e}${O}`;if(!await this._s3.fileExists(i)){if(!s)throw new d(`${h}: Collection ${e} does not exist`,l.COLLECTION_NOT_FOUND);await this._s3.put(i,z)}let n=r||this._schemas.get(e)||void 0;return new W(e,n,this._s3,this._dirPrefix)}catch(i){throw i.message.includes("unknown type")?new A(`${h}: Schema input is invalid: ${i.message}`,l.SCHEMA_VALIDATION_ERROR):new d(`${h}: ${i.message}`,l.COLLECTION_NOT_FOUND)}}s3=()=>this._s3},W=class t{constructor(e,r,s,i=B,o=!1){this._colName=e,this._s3=s,this._avro=ue,this._lastETag="",this._dataCache=[],this._schema=r,this._avroType=typeof r>"u"?null:this._avro.parse(r),this._dirPrefix=i,this._safeWrite=o}getProps=()=>({colName:this._colName,s3:this._s3,avro:this._avro,avroType:this._avroType,dirPrefix:this._dirPrefix,safeWrite:this._safeWrite});setProps=e=>{this._colName=e.colName,this._s3=e.s3,this._avro=e.avro,this._schema=e.schema,this._avroType=e.avroType,this._dirPrefix=e.dirPrefix,this._safeWrite=e.safeWrite};setSafeWrite=e=>{this._safeWrite=e};getSafeWrite=()=>this._safeWrite;getAvroSchema=()=>this._avroType;setAvroSchema=e=>{this._schema=e,this._avroType=typeof e>"u"?null:this._avro.parse(e)};async _loadData(){try{let e=`${this._dirPrefix}${m}${this._colName}${O}`,r=this._s3.getMaxRequestSizeInBytes()||Se;if(this._avroType===null||typeof this._avroType>"u")throw new d(`${h}: Missing type definition. Configure before operations `,l.SCHEMA_VALIDATION_ERROR);console.log("Getting object:",e,this._lastETag);let{etag:s,data:i}=await this._s3.getObjectWithETag(e,{"if-none-match":this._lastETag});if(console.log("data :::::::::::::::::::::::::",i,s,this._dataCache),i===null)return this._dataCache;this._lastETag=s===null?this._lastETag:s;let o=this._avro.parse({type:"array",items:this._avroType});if(i.length0?o.fromBuffer(i):[],this._dataCache;let n=r,c=[Buffer.from(i,"utf8")],a=!0;for(;a;){let f=await this._s3.getResponse(e,!1,n,n+r),g=await f.text();c.push(Buffer.from(g,"utf8")),n+=r,(f.headers.get("content-length")||g.length)-1)return this._dataCache=[],this._dataCache;throw new p(`${h}: Failed to load data: ${e.message}`,l.S3_OPERATION_ERROR)}}async _saveData(e){try{if(this._avroType===null||typeof this._avroType>"u")throw new d(`${h}: Missing type definition. Configure before operations `,l.SCHEMA_VALIDATION_ERROR);let r=this._avro.parse({type:"array",items:this._avroType}),s=e.length>0?r.toBuffer(e):z,i=`${this._dirPrefix}${m}${this._colName}${O}`;if(this._safeWrite&&this._lastETag!==""){let c=await this._s3.getEtag(i);if(c!==null&&c!==this._lastETag)return!1}let o=await this._s3.put(i,s);if(o.status!==200)throw new p(`${h}: Failed to save data`,l.S3_OPERATION_ERROR);let n=o.headers.get("etag");return n&&(this._lastETag=this._s3.sanitizeETag(n),this._dataCache=e),!0}catch(r){throw r instanceof p?r:new d(`${h}: ${r.message}`,l.SAVE_DATA_ERROR)}}async insert(e,r=void 0){try{if(e==null)throw new d(`${h}: Document is required for insert`,l.INSERT_ERROR);if(typeof e!="object"&&!Array.isArray(e))throw new I(`${h}: Document must be an object or an array`,l.DOCUMENT_VALIDATION_ERROR);let s=Array.isArray(e)?e:[e],i=r||this._avroType||G(s[0]),o=this._avro.parse(i);if(!o)throw new A(`${h}: Schema is required - Pass a schema to the insert method`,l.SCHEMA_VALIDATION_ERROR);this._avroType=o;let n=await this._loadData();for(let a of s){if(typeof a!="object"||a===null)throw new I(`${h}: Invalid input: input must be an object or an array of objects`,l.DOCUMENT_VALIDATION_ERROR);if(a._id=a._id||await le(),this._avroType.isValid(a,{errorHook:V,noUndeclaredFields:!0})===!0)n.push(a);else throw new I(`${h}: Invalid document or schema`,l.DOCUMENT_VALIDATION_ERROR)}if(!await this._saveData(n))throw new p(`${h}: Failed to insert document`,l.S3_OPERATION_ERROR);return s}catch(s){throw s.message.includes("unknown type")?new A(`${h}: Schema input is invalid: ${s.message}`,l.SCHEMA_VALIDATION_ERROR):s instanceof d?s:new d(`${h} Insert operation failed: ${s.message}`,l.INSERT_ERROR)}}async find(e={},r={}){try{if(e==null)throw new d(`${h}: Query is required for update`,l.MISSING_ARGUMENT);let s=await this._loadData(),i=parseInt(r.skip,10)||0,o=parseInt(r.limit,10)?i+parseInt(r.limit,10):void 0;return s.filter(c=>v(c,e)).slice(i,o)}catch(s){throw new d(`${h}: Find operation failed: ${s.message}`,l.FIND_ERROR)}}async findOne(e={}){try{if(e===null)throw new d(`${h}: Query cannot be null`,l.INVALID_ARGUMENT);return(await this.find(e,{limit:1}))[0]||null}catch(r){throw r instanceof d?r:new d(`${h}: FindOne operation failed: ${r.message}`,l.FIND_ONE_ERROR)}}async update(e={},r={},s={}){try{if(e==null||r===void 0||r===null)throw new d(`${h}: Query and update values are required for update`,l.MISSING_ARGUMENT);if(!this._avroType)throw new A(`${h}: Schema is not defined for this collection`,l.SCHEMA_VALIDATION_ERROR);let i=await this._loadData();if(i.length===0)return 0;let o=0;for(let n=0;n0){if(!await this._saveData(i))throw new p(`${h}: Failed to update document`,l.S3_OPERATION_ERROR)}else if(s.upsert){if(!await this.insert(r))throw new p(`${h}: Failed to update document`,l.S3_OPERATION_ERROR);o=1}return o}catch(i){throw i instanceof p?i:new d(`${h}: Update operation failed: ${i.message}`,l.UPDATE_ERROR)}}async updateOne(e={},r={},s={}){try{if(e==null||r===void 0||r===null)throw new d(`${h}: Query is required`,l.MISSING_ARGUMENT);if(!this._avroType)throw new A(`${h}: Schema is not defined for this collection`,l.SCHEMA_VALIDATION_ERROR);let i=await this._loadData();if(i.length===0)return 0;let o=i.findIndex(n=>v(n,e));if(o!==-1){let n={...i[o],...r};if(this._avroType.isValid(n,{errorHook:V,noUndeclaredFields:!0})===!0){if(i[o]=n,!await this._saveData(i))throw new p(`${h}: Failed to update document`,l.S3_OPERATION_ERROR);return 1}else throw new I(`${h}: Invalid document or schema`,l.DOCUMENT_VALIDATION_ERROR)}if(s.upsert){if(!await this.insert(r))throw new p(`${h}: Failed to update document`,l.S3_OPERATION_ERROR);return 1}return 0}catch(i){throw i instanceof d?i:new d(`${h}: UpdateOne operation failed: ${i.message}`,l.UPDATE_ONE_ERROR)}}async delete(e={}){try{if(e==null)throw new d(`${h}: Query is required`,l.MISSING_ARGUMENT);let r=await this._loadData();if(r.length===0)return 0;let s=r.length,i=r.filter(n=>!v(n,e));if(!await this._saveData(i))throw new p(`${h}: Failed to delete document`,l.S3_OPERATION_ERROR);return s-i.length}catch(r){throw r instanceof p?r:new d(`${h}: Delete operation failed: ${r.message}`,l.DELETE_ERROR)}}async deleteAll(){try{let r=(await this._loadData()).length;if(!await this._saveData([]))throw new p(`${h}: Failed to delete document`,l.S3_OPERATION_ERROR);return r}catch(e){throw e instanceof p?e:new d(`${h}: Delete operation failed: ${e.message}`,l.DELETE_ERROR)}}async count(e={}){try{return(await this.find(e)).length}catch(r){throw new d(`${h}: Count operation failed: ${r.message}`,l.COUNT_ERROR)}}async renameCollection(e,r=this._schema){try{if(P(e),await this._s3.fileExists(`${this._dirPrefix}${m}${e}${O}`))throw new d(`${h}: Collection ${e} already exists`,l.COLLECTION_EXISTS);let i=r||this.getAvroSchema(),o=await this._loadData(),n=new t(e,i,this._s3,this._dirPrefix);return await n._saveData(o),await this._s3.delete(`${this._dirPrefix}${m}${this._colName}${O}`),n}catch(s){throw s instanceof d?s:new d(`${h}: Rename collection failed: ${s.message}`,l.RENAME_COLLECTION_ERROR)}}};export{ce as lowstorage,d as lowstorageError,l as lowstorage_ERROR_CODES}; + `}async delete(t){this._checkKey(t),this._log("info",`Deleting object ${t}`);let e={[O]:S,[E]:R},r=y(t),{url:s,headers:i}=await this._sign("DELETE",r,{},e,""),o=await this._sendRequest(s,"DELETE",i);return o.status===204||o.status===200}async _sendRequest(t,e,r,s,i=[]){this._log("info",`Sending ${e} request to ${t}, headers: ${JSON.stringify(r)}`);let o=await fetch(t,{method:e,headers:r,body:["GET","HEAD"].includes(e)?void 0:s,signal:this.requestAbortTimeout!==void 0?AbortSignal.timeout(this.requestAbortTimeout):void 0});return!o.ok&&!i.includes(o.status)&&await this._handleErrorResponse(o),o}async _handleErrorResponse(t){let e=await t.text(),r=t.headers.get("x-amz-error-code")||"Unknown",s=t.headers.get("x-amz-error-message")||t.statusText;throw this._log("error",`${_}Request failed with status ${t.status}: ${r} - ${s},err body: ${e}`),new Error(`${_}Request failed with status ${t.status}: ${r} - ${s}, err body: ${e}`)}_buildCanonicalQueryString(t){return Object.keys(t).length<1?"":Object.keys(t).sort().map(e=>`${encodeURIComponent(e)}=${encodeURIComponent(t[e])}`).join("&")}async _getSignatureKey(t){let e=await U(`AWS4${this.secretAccessKey}`,t),r=await U(e,this.region),s=await U(r,q);return U(s,j)}},H=async t=>{let e=ne("sha256");return e.update(t),e.digest("hex")},U=async(t,e,r)=>{let s=oe("sha256",t);return s.update(e),s.digest(r)},L=t=>{let e={'"':"",""":"",""":"",""":"",""":""};return t.replace(/^("|"|")|("|"|")$/g,r=>e[r])},D=t=>{let e=o=>o.replace(/"/g,'"').replace(/'/g,"'").replace(/</g,"<").replace(/>/g,">").replace(/&/g,"&"),r={},s=/<(\w)([-\w]+)(?:\/|[^>]*>((?:(?!<\1)[\s\S])*)<\/\1\2)>/gm,i;for(;i=s.exec(t);){let[,o,n,u]=i,a=o.toLowerCase()+n,c=u!=null?D(u):!0;typeof c=="string"?r[a]=L(e(c)):Array.isArray(r[a])?r[a].push(c):r[a]=r[a]!=null?[r[a],c]:Ie[a]?[c]:c}return Object.keys(r).length?r:e(t)};import _e from"avro-js";var h={MISSING_ARGUMENT:"MISSING_ARGUMENT",COLLECTION_EXISTS:"COLLECTION_EXISTS",CREATE_COLLECTION_ERROR:"CREATE_COLLECTION_ERROR",RENAME_COLLECTION_ERROR:"RENAME_COLLECTION_ERROR",REMOVE_COLLECTION_ERROR:"REMOVE_COLLECTION_ERROR",UPDATE_COLLECTION_SCHEMA_ERROR:"UPDATE_COLLECTION_SCHEMA_ERROR",COLLECTION_NOT_FOUND:"COLLECTION_NOT_FOUND",SCHEMA_VALIDATION_ERROR:"SCHEMA_VALIDATION_ERROR",DOCUMENT_VALIDATION_ERROR:"DOCUMENT_VALIDATION_ERROR",S3_OPERATION_ERROR:"S3_OPERATION_ERROR",FIND_ERROR:"FIND_ERROR",FIND_ONE_ERROR:"FIND_ONE_ERROR",SAVE_DATA_ERROR:"SAVE_DATA_ERROR",INSERT_ERROR:"INSERT_ERROR",UPDATE_ERROR:"UPDATE_ERROR",UPDATE_ONE_ERROR:"UPDATE_ONE_ERROR",DELETE_ERROR:"DELETE_ERROR",COUNT_ERROR:"COUNT_ERROR",UNKNOWN_ERROR:"UNKNOWN_ERROR"},d=class extends Error{constructor(e,r=h.UNKNOWN_ERROR){super(`lowstorageError: ${e} :: code: ${r}`),this.name=this.constructor.name,this.code=r,Error.captureStackTrace(this,this.constructor)}};var $=class extends d{constructor(e){super(e,h.SCHEMA_VALIDATION_ERROR)}},T=class extends d{constructor(e){super(e,h.DOCUMENT_VALIDATION_ERROR)}},p=class extends d{constructor(e,r){super(`S3 ${r} operation failed: ${e}`,h.S3_OPERATION_ERROR)}};import{randomUUID as G}from"node:crypto";var k=(t,e)=>Object.keys(e).every(r=>t[r]===e[r]),le=async()=>typeof G<"u"&&typeof G=="function"?G():typeof crypto<"u"&&typeof crypto=="object"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(t){var e=Math.random()*16|0,r=t==="x"?e:e&3|8;return r.toString(16)}),ce=(t,e="SubAutoGenerated")=>{switch(typeof t){case"string":return Se(t)?{type:"string",name:"_id",size:16,logicalType:"UUID"}:"string";case"number":return Number.isInteger(t)?"int":"float";case"boolean":return"boolean";case"object":return t===null?"null":Array.isArray(t)?{type:"array",items:ce(t[0])}:V(t,e);default:return"string"}},v=t=>{let e={name:"_id",type:"string",size:16,logicalType:"UUID"};return typeof t>"u"||t===null||(t.type==="record"?t.fields.some(s=>s.name==="_id")||t.fields.unshift(e):t.type==="array"&&t.items.type==="record"&&(t.items.fields.some(s=>s.name==="_id")||t.items.fields.unshift(e))),t},V=(t,e="AutoGenerated")=>{Array.isArray(t)&&(t=t[0]);let r=Object.entries(t).map(([i,o])=>({name:i,type:ce(o,`${e}.${i}`)}));return v({type:"record",name:e,fields:r})},Se=t=>/^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i.test(t);var l="lowstorage",I="/",B="lowstorage",A=".avro",be=1024*1024,ue=5*be,W=Buffer.from("","utf8"),z=(t=h.DOCUMENT_VALIDATION_ERROR)=>{throw new T(`${l}: Invalid document or schema`,t)},P=t=>{if(t.trim()===""||t===null||typeof t>"u"||t.length>255||t===null)throw new d(`${l}: Collection name is required, null or too long`,h.MISSING_ARGUMENT)},de=class{constructor(e={accessKeyId:void 0,secretAccessKey:void 0,endpoint:void 0,bucketName:void 0,region:"auto",logger:null,dirPrefix:B}){this._checkArgs(e),this._schemas=new Map,this._s3=new he(e),this._dirPrefix=e.dirPrefix||B,this._avro=_e}_checkArgs=e=>{let r=["accessKeyId","secretAccessKey","endpoint","bucketName"];for(let s of r)if(!e[s])throw new d(`${l}: ${s} is required`,h.MISSING_ARGUMENT)};async listCollections(){try{let e=await this._s3.list(I,this._dirPrefix);return typeof e=="object"&&e!==null&&e.keyCount==="0"?[]:e.map(r=>r.key.slice(this._dirPrefix.length+1,-A.length))}catch(e){throw new p(`${l}: ${e.message}`,h.S3_OPERATION_ERROR)}}async collectionExists(e){try{return P(e),!!await this._s3.fileExists(`${this._dirPrefix}${I}${e}${A}`)}catch(r){if(r.message.includes("Not Found"))return!1;throw new d(`${l}: ${r.message}`,h.COLLECTION_NOT_FOUND)}}async createCollection(e,r,s=[]){try{if(P(e),!await this.collectionExists(e)){if(typeof r<"u"&&r!==null)try{if(!this._avro.parse(r))throw new $(`${l}: Schema is invalid: ${r}`,h.SCHEMA_VALIDATION_ERROR)}catch{throw new $(`${l}: Schema is invalid: ${r}`,h.SCHEMA_VALIDATION_ERROR)}if(s.length>0&&r){let o=this._avro.parse({type:"array",items:r});await this._s3.put(`${this._dirPrefix}${I}${e}${A}`,o.toBuffer(s))}else await this._s3.put(`${this._dirPrefix}${I}${e}${A}`,W);return this.collection(e,r,!1)}throw new d(`${l}: Collection ${e} already exists`,h.COLLECTION_EXISTS)}catch(i){throw i instanceof d?i:new d(`${l}: ${i.message}`,h.CREATE_COLLECTION_ERROR)}}async removeCollection(e){try{if(P(e),await this.collectionExists(e)){await this._s3.delete(`${this._dirPrefix}${I}${e}${A}`);let s=await this.collectionExists(e);if(typeof s=="boolean"){if(!s)return this._schemas.delete(e),!0;throw new d(`${l}: Failed to delete collection ${e}`,h.S3_OPERATION_ERROR)}throw new p(`${l}: Failed to delete collection ${e}`,h.S3_OPERATION_ERROR)}throw new d(`${l}: Collection ${e} does not exist`,h.REMOVE_COLLECTION_ERROR)}catch(r){throw r instanceof p?r:new d(`${l}: Failed to remove collection: ${r.message}`,h.REMOVE_COLLECTION_ERROR)}}async collection(e,r,s=!0){try{P(e);let i=`${this._dirPrefix}${I}${e}${A}`;if(!await this._s3.fileExists(i)){if(!s)throw new d(`${l}: Collection ${e} does not exist`,h.COLLECTION_NOT_FOUND);await this._s3.put(i,W)}let n=r||this._schemas.get(e)||void 0;return new Q(e,n,this._s3,this._dirPrefix)}catch(i){throw i.message.includes("unknown type")?new $(`${l}: Schema input is invalid: ${i.message}`,h.SCHEMA_VALIDATION_ERROR):new d(`${l}: ${i.message}`,h.COLLECTION_NOT_FOUND)}}s3=()=>this._s3},Q=class t{constructor(e,r,s,i=B,o=!1,n=ue){this._colName=e,this._s3=s,this._schema=v(r),this._dirPrefix=i,this._safeWrite=o,this._chunkSize=n||ue,this._key=`${this._dirPrefix}${I}${this._colName}${A}`,this._s3.setMaxRequestSizeInBytes(this._chunkSize),this._avro=_e,this._lastETag="",this._dataCache=[],this._avroType=typeof r>"u"?null:this._avro.parse(r)}getProps=()=>({colName:this._colName,schema:this._schema,s3:this._s3,avro:this._avro,avroType:this._avroType,dirPrefix:this._dirPrefix,safeWrite:this._safeWrite,chunkSize:this._chunkSize});setProps=e=>{this._colName=e.colName,this._schema=e.schema,this._s3=e.s3,this._avro=e.avro,this._avroType=e.avroType,this._dirPrefix=e.dirPrefix,this._safeWrite=e.safeWrite,this._chunkSize=e.chunkSize};setSafeWrite=e=>{this._safeWrite=e};getSafeWrite=()=>this._safeWrite;getAvroSchema=()=>this._schema;setAvroSchema=e=>{this._schema=v(e),this._avroType=typeof e>"u"?null:this._avro.parse(e)};async _loadData(){try{if(this._avroType===null||typeof this._avroType>"u")throw new d(`${l}: Missing type definition. Configure before operations `,h.SCHEMA_VALIDATION_ERROR);let{etag:e,data:r}=await this._s3.getObjectWithETag(this._key,{"if-none-match":this._lastETag});if(r===null)return this._dataCache;this._lastETag=e===null?this._lastETag:e;let s=this._avro.parse({type:"array",items:this._avroType});if(r.length0?s.fromBuffer(Buffer.from(r,"utf8")):[],this._dataCache;let i=this._chunkSize,o=[Buffer.from(r,"utf8")],n=!0;for(;n;){let a=await this._s3.getResponse(this._key,!1,i,i+this._chunkSize),c=await a.text();o.push(Buffer.from(c,"utf8")),i+=this._chunkSize,(a.headers.get("content-length")||c.length)-1)return this._dataCache=[],this._dataCache;throw new p(`${l}: Failed to load data: ${e.message}`,h.S3_OPERATION_ERROR)}}async _saveData(e){try{if(this._avroType===null||typeof this._avroType>"u")throw new d(`${l}: Missing type definition. Configure before operations `,h.SCHEMA_VALIDATION_ERROR);let r=this._avro.parse({type:"array",items:this._avroType}),s=e.length>0?r.toBuffer(e):W;if(this._safeWrite&&this._lastETag!==""){let n=await this._s3.getEtag(this._key);if(n!==null&&n!==this._lastETag)return!1}let i=await this._s3.put(this._key,s);if(i.status!==200)throw new p(`${l}: Failed to save data`,h.S3_OPERATION_ERROR);let o=i.headers.get("etag");return o&&(this._lastETag=this._s3.sanitizeETag(o),this._dataCache=e),!0}catch(r){throw r instanceof p?r:new d(`${l}: ${r.message}`,h.SAVE_DATA_ERROR)}}async insert(e,r=void 0){try{if(e==null)throw new d(`${l}: Document is required for insert`,h.INSERT_ERROR);if(typeof e!="object"&&!Array.isArray(e))throw new T(`${l}: Document must be an object or an array`,h.DOCUMENT_VALIDATION_ERROR);let s=Array.isArray(e)?e:[e],i=v(r)||this._schema||V(s[0]),o=this._avro.parse(i);if(!o)throw new $(`${l}: Schema is required - Pass a schema to the insert method`,h.SCHEMA_VALIDATION_ERROR);this._avroType=o;let n=await this._loadData();for(let a of s){if(typeof a!="object"||a===null)throw new T(`${l}: Invalid input: input must be an object or an array of objects`,h.DOCUMENT_VALIDATION_ERROR);if(a._id=a._id||await le(),this._avroType.isValid(a,{errorHook:z,noUndeclaredFields:!0})===!0)n.push(a);else throw new T(`${l}: Invalid document or schema`,h.DOCUMENT_VALIDATION_ERROR)}if(!await this._saveData(n))throw new p(`${l}: Failed to insert document`,h.S3_OPERATION_ERROR);return this.setAvroSchema(i),s}catch(s){throw s.message.includes("unknown type")?new $(`${l}: Schema input is invalid: ${s.message}`,h.SCHEMA_VALIDATION_ERROR):s instanceof d?s:new d(`${l} Insert operation failed: ${s.message}`,h.INSERT_ERROR)}}async find(e={},r={}){try{if(e==null)throw new d(`${l}: Query is required for update`,h.MISSING_ARGUMENT);let s=await this._loadData(),i=parseInt(r.skip,10)||0,o=parseInt(r.limit,10)?i+parseInt(r.limit,10):void 0;return s.filter(u=>k(u,e)).slice(i,o)}catch(s){throw new d(`${l}: Find operation failed: ${s.message}`,h.FIND_ERROR)}}async findOne(e={}){try{if(e===null)throw new d(`${l}: Query cannot be null`,h.INVALID_ARGUMENT);return(await this.find(e,{limit:1}))[0]||null}catch(r){throw r instanceof d?r:new d(`${l}: FindOne operation failed: ${r.message}`,h.FIND_ONE_ERROR)}}async update(e={},r={},s={}){try{if(e==null||r===void 0||r===null)throw new d(`${l}: Query and update values are required for update`,h.MISSING_ARGUMENT);if(!this._avroType)throw new $(`${l}: Schema is not defined for this collection`,h.SCHEMA_VALIDATION_ERROR);let i=await this._loadData();if(i.length===0)return 0;let o=0;for(let n=0;n0){if(!await this._saveData(i))throw new p(`${l}: Failed to update document`,h.S3_OPERATION_ERROR)}else if(s.upsert){if(!await this.insert(r))throw new p(`${l}: Failed to update document`,h.S3_OPERATION_ERROR);o=1}return o}catch(i){throw i instanceof p?i:new d(`${l}: Update operation failed: ${i.message}`,h.UPDATE_ERROR)}}async updateOne(e={},r={},s={}){try{if(e==null||r===void 0||r===null)throw new d(`${l}: Query is required`,h.MISSING_ARGUMENT);if(!this._avroType)throw new $(`${l}: Schema is not defined for this collection`,h.SCHEMA_VALIDATION_ERROR);let i=await this._loadData();if(i.length===0)return 0;let o=i.findIndex(n=>k(n,e));if(o!==-1){let n={...i[o],...r};if(this._avroType.isValid(n,{errorHook:z,noUndeclaredFields:!0})===!0){if(i[o]=n,!await this._saveData(i))throw new p(`${l}: Failed to update document`,h.S3_OPERATION_ERROR);return 1}else throw new T(`${l}: Invalid document or schema`,h.DOCUMENT_VALIDATION_ERROR)}if(s.upsert){if(!await this.insert(r))throw new p(`${l}: Failed to update document`,h.S3_OPERATION_ERROR);return 1}return 0}catch(i){throw i instanceof d?i:new d(`${l}: UpdateOne operation failed: ${i.message}`,h.UPDATE_ONE_ERROR)}}async delete(e={}){try{if(e==null)throw new d(`${l}: Query is required`,h.MISSING_ARGUMENT);let r=await this._loadData();if(r.length===0)return 0;let s=r.length,i=r.filter(n=>!k(n,e));if(!await this._saveData(i))throw new p(`${l}: Failed to delete document`,h.S3_OPERATION_ERROR);return s-i.length}catch(r){throw r instanceof p?r:new d(`${l}: Delete operation failed: ${r.message}`,h.DELETE_ERROR)}}async deleteAll(){try{let r=(await this._loadData()).length;if(!await this._saveData([]))throw new p(`${l}: Failed to delete document`,h.S3_OPERATION_ERROR);return r}catch(e){throw e instanceof p?e:new d(`${l}: Delete operation failed: ${e.message}`,h.DELETE_ERROR)}}async count(e={}){try{return(await this.find(e)).length}catch(r){throw new d(`${l}: Count operation failed: ${r.message}`,h.COUNT_ERROR)}}async renameCollection(e,r=this._schema){try{if(P(e),await this._s3.fileExists(`${this._dirPrefix}${I}${e}${A}`))throw new d(`${l}: Collection ${e} already exists`,h.COLLECTION_EXISTS);let i=r||this.getAvroSchema(),o=await this._loadData(),n=new t(e,i,this._s3,this._dirPrefix,this._safeWrite,this._chunkSize);return await n._saveData(o),await this._s3.delete(`${this._dirPrefix}${I}${this._colName}${A}`),n}catch(s){throw s instanceof d?s:new d(`${l}: Rename collection failed: ${s.message}`,h.RENAME_COLLECTION_ERROR)}}};export{de as lowstorage,d as lowstorageError,h as lowstorage_ERROR_CODES}; //# sourceMappingURL=lowstorage.js.map diff --git a/lib/lowstorage.js.map b/lib/lowstorage.js.map index 14fb0a2..d10fceb 100644 --- a/lib/lowstorage.js.map +++ b/lib/lowstorage.js.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["../node_modules/ultralight-s3/src/index.ts", "../src/lowstorage.js", "../src/errors.js", "../src/helpers.js"], - "sourcesContent": ["'use strict';\n\n// Constants\nconst AWS_ALGORITHM = 'AWS4-HMAC-SHA256';\nconst AWS_REQUEST_TYPE = 'aws4_request';\nconst S3_SERVICE = 's3';\nconst LIST_TYPE = '2';\nconst UNSIGNED_PAYLOAD = 'UNSIGNED-PAYLOAD';\nconst DEFAULT_STREAM_CONTENT_TYPE = 'application/octet-stream';\nconst XML_CONTENT_TYPE = 'application/xml';\nconst JSON_CONTENT_TYPE = 'application/json';\n// List of keys that might contain sensitive information\nconst SENSITIVE_KEYS_REDACTED = ['accessKeyId', 'secretAccessKey', 'sessionToken', 'password'];\nconst MIN_MAX_REQUEST_SIZE_IN_BYTES = 5 * 1024 * 1024;\n\n// Headers\nconst HEADER_AMZ_CONTENT_SHA256 = 'x-amz-content-sha256';\nconst HEADER_AMZ_DATE = 'x-amz-date';\nconst HEADER_HOST = 'host';\nconst HEADER_AUTHORIZATION = 'Authorization';\nconst HEADER_CONTENT_TYPE = 'Content-Type';\nconst HEADER_CONTENT_LENGTH = 'Content-Length';\nconst HEADER_ETAG = 'etag';\nconst HEADER_LAST_MODIFIED = 'last-modified';\n\n// Error messages\nconst ERROR_PREFIX = 'ultralight-s3 Module: ';\nconst ERROR_ACCESS_KEY_REQUIRED = `${ERROR_PREFIX}accessKeyId must be a non-empty string`;\nconst ERROR_SECRET_KEY_REQUIRED = `${ERROR_PREFIX}secretAccessKey must be a non-empty string`;\nconst ERROR_ENDPOINT_REQUIRED = `${ERROR_PREFIX}endpoint must be a non-empty string`;\nconst ERROR_BUCKET_NAME_REQUIRED = `${ERROR_PREFIX}bucketName must be a non-empty string`;\nconst ERROR_KEY_REQUIRED = `${ERROR_PREFIX}key must be a non-empty string`;\nconst ERROR_UPLOAD_ID_REQUIRED = `${ERROR_PREFIX}uploadId must be a non-empty string`;\nconst ERROR_PARTS_REQUIRED = `${ERROR_PREFIX}parts must be a non-empty array`;\nconst ERROR_INVALID_PART = `${ERROR_PREFIX}Each part must have a partNumber (number) and ETag (string)`;\nconst ERROR_DATA_BUFFER_REQUIRED = `${ERROR_PREFIX}data must be a Buffer or string`;\n// const ERROR_PATH_REQUIRED = `${ERROR_PREFIX}path must be a string`;\nconst ERROR_PREFIX_TYPE = `${ERROR_PREFIX}prefix must be a string`;\nconst ERROR_MAX_KEYS_TYPE = `${ERROR_PREFIX}maxKeys must be a positive integer`;\nconst ERROR_DELIMITER_REQUIRED = `${ERROR_PREFIX}delimiter must be a string`;\n\n// const STATUS_CODES: Record = {\n// 200: 'OK',\n// 204: 'No Content',\n// 205: 'Reset Content',\n// 206: 'Partial Content',\n// 301: 'Moved Permanently',\n// 302: 'Found',\n// 400: 'Bad Request',\n// 401: 'Unauthorized',\n// 403: 'Forbidden',\n// 404: 'Not Found',\n// 418: \"I'm a Teapot\",\n// 428: 'Precondition Required',\n// 429: 'Too Many Requests',\n// 500: 'Internal Server Error',\n// 501: 'Not Implemented',\n// };\n\ninterface S3Config {\n accessKeyId: string;\n secretAccessKey: string;\n endpoint: string;\n bucketName: string;\n region?: string;\n maxRequestSizeInBytes?: number;\n requestAbortTimeout?: number;\n logger?: Logger;\n}\n\ndeclare global {\n interface Crypto {\n createHmac: (\n algorithm: string,\n key: string | Buffer,\n ) => {\n update: (data: string | Buffer) => void;\n digest: (encoding?: 'hex' | 'base64' | 'latin1') => string;\n };\n createHash: (algorithm: string) => {\n update: (data: string | Buffer) => void;\n digest: (encoding?: 'hex' | 'base64' | 'latin1') => string;\n };\n }\n}\n\ninterface Logger {\n info: (message: string, ...args: any[]) => void;\n warn: (message: string, ...args: any[]) => void;\n error: (message: string, ...args: any[]) => void;\n}\n\ninterface UploadPart {\n partNumber: number;\n ETag: string;\n}\n\ninterface CompleteMultipartUploadResult {\n Location: string;\n Bucket: string;\n Key: string;\n ETag: string;\n}\n\ntype HttpMethod = 'POST' | 'GET' | 'HEAD' | 'PUT' | 'DELETE';\n\n// false - Not found (404)\n// true - Found (200)\n// null - ETag mismatch (412)\ntype ExistResponseCode = false | true | null;\n\nlet _createHmac = crypto.createHmac || (await import('node:crypto')).createHmac;\nlet _createHash = crypto.createHash || (await import('node:crypto')).createHash;\n\nif (typeof _createHmac === 'undefined' && typeof _createHash === 'undefined') {\n console.error(\n 'ultralight-S3 Module: Crypto functions are not available, please report the issue with necessary description: https://github.com/sentienhq/ultralight-s3/issues',\n );\n}\n\nconst expectArray: { [key: string]: boolean } = {\n contents: true,\n};\n\nconst encodeAsHex = (c: string): string => `%${c.charCodeAt(0).toString(16).toUpperCase()}`;\n\nconst uriEscape = (uriStr: string): string => {\n return encodeURIComponent(uriStr).replace(/[!'()*]/g, encodeAsHex);\n};\n\nconst uriResourceEscape = (string: string): string => {\n return uriEscape(string).replace(/%2F/g, '/');\n};\n\n/**\n * S3 class for interacting with S3-compatible object storage services.\n * This class provides methods for common S3 operations such as uploading, downloading,\n * and deleting objects, as well as multipart uploads.\n *\n * @class\n * @example\n * const s3 = new S3({\n * accessKeyId: 'your-access-key',\n * secretAccessKey: 'your-secret-key',\n * endpoint: 'https://your-s3-endpoint.com',\n * bucketName: 'your-bucket-name',\n * region: 'us-east-1' // by default is auto\n * });\n *\n * // Upload a file\n * await s3.put('example.txt', 'Hello, World!');\n *\n * // Download a file\n * const content = await s3.get('example.txt');\n *\n * // Delete a file\n * await s3.delete('example.txt');\n */\nclass S3 {\n /**\n * Creates an instance of the S3 class.\n *\n * @constructor\n * @param {Object} config - Configuration options for the S3 instance.\n * @param {string} config.accessKeyId - The access key ID for authentication.\n * @param {string} config.secretAccessKey - The secret access key for authentication.\n * @param {string} config.endpoint - The endpoint URL of the S3-compatible service.\n * @param {string} [config.bucketName=''] - The name of the bucket to operate on.\n * @param {string} [config.region='auto'] - The region of the S3 service.\n * @param {number} [config.maxRequestSizeInBytes=5242880] - The maximum size of a single request in bytes (minimum for AWS S3 is 5MB).\n * @param {number} [config.requestAbortTimeout=undefined] - The timeout in milliseconds after which a request should be aborted (careful on streamed requests).\n * @param {Object} [config.logger=null] - A logger object with methods like info, warn, error.\n * @throws {TypeError} Will throw an error if required parameters are missing or of incorrect type.\n */\n private accessKeyId: string;\n private secretAccessKey: string;\n private endpoint: string;\n private bucketName: string;\n private region: string;\n private maxRequestSizeInBytes: number;\n private requestAbortTimeout?: number;\n private logger?: Logger;\n\n constructor({\n accessKeyId,\n secretAccessKey,\n endpoint,\n bucketName,\n region = 'auto',\n maxRequestSizeInBytes = MIN_MAX_REQUEST_SIZE_IN_BYTES,\n requestAbortTimeout = undefined,\n logger = undefined,\n }: S3Config) {\n this._validateConstructorParams(accessKeyId, secretAccessKey, endpoint, bucketName);\n this.accessKeyId = accessKeyId;\n this.secretAccessKey = secretAccessKey;\n this.endpoint = endpoint;\n this.bucketName = bucketName;\n this.region = region;\n this.maxRequestSizeInBytes = maxRequestSizeInBytes;\n this.requestAbortTimeout = requestAbortTimeout;\n this.logger = logger;\n }\n\n private _validateConstructorParams(\n accessKeyId: string,\n secretAccessKey: string,\n endpoint: string,\n bucketName: string,\n ): void {\n if (typeof accessKeyId !== 'string' || accessKeyId.trim().length === 0)\n throw new TypeError(ERROR_ACCESS_KEY_REQUIRED);\n if (typeof secretAccessKey !== 'string' || secretAccessKey.trim().length === 0)\n throw new TypeError(ERROR_SECRET_KEY_REQUIRED);\n if (typeof endpoint !== 'string' || endpoint.trim().length === 0) throw new TypeError(ERROR_ENDPOINT_REQUIRED);\n if (typeof bucketName !== 'string' || bucketName.trim().length === 0)\n throw new TypeError(ERROR_BUCKET_NAME_REQUIRED);\n }\n\n private _checkMethodHeadnGet(method: string): void {\n if (method !== 'GET' && method !== 'HEAD') {\n this._log('error', `${ERROR_PREFIX}method must be either GET or HEAD`);\n throw new Error('method must be either GET or HEAD');\n }\n }\n\n private _checkKey(key: string): void {\n if (typeof key !== 'string' || key.trim().length === 0) {\n this._log('error', ERROR_KEY_REQUIRED);\n throw new TypeError(ERROR_KEY_REQUIRED);\n }\n }\n\n private _checkDelimiter(delimiter: string): void {\n if (typeof delimiter !== 'string' || delimiter.trim().length === 0) {\n this._log('error', ERROR_DELIMITER_REQUIRED);\n throw new TypeError(ERROR_DELIMITER_REQUIRED);\n }\n }\n\n private _checkPrefix(prefix: string): void {\n if (typeof prefix !== 'string') {\n this._log('error', ERROR_PREFIX_TYPE);\n throw new TypeError(ERROR_PREFIX_TYPE);\n }\n }\n\n private _checkMaxKeys(maxKeys: number): void {\n if (typeof maxKeys !== 'number' || maxKeys <= 0) {\n this._log('error', ERROR_MAX_KEYS_TYPE);\n throw new TypeError(ERROR_MAX_KEYS_TYPE);\n }\n }\n\n private _checkOpts(opts: Record): void {\n if (typeof opts !== 'object') {\n this._log('error', `${ERROR_PREFIX}opts must be an object`);\n throw new TypeError(`${ERROR_PREFIX}opts must be an object`);\n }\n }\n\n /**\n * Internal method to log messages with sanitized sensitive information.\n * @param {string} level - The log level (e.g., 'info', 'warn', 'error').\n * @param {string} message - The message to log.\n * @param {Object} [additionalData={}] - Additional data to include in the log.\n * @private\n */\n private _log(\n level: 'info' | 'warn' | 'error',\n message: string,\n additionalData: Record | string = {},\n ): void {\n if (this.logger && typeof this.logger[level] === 'function') {\n // Function to recursively sanitize an object\n const sanitize = (obj: any): any => {\n if (typeof obj !== 'object' || obj === null) {\n return obj;\n }\n return Object.keys(obj).reduce(\n (acc: any, key) => {\n if (SENSITIVE_KEYS_REDACTED.includes(key.toLowerCase())) {\n acc[key] = '[REDACTED]';\n } else if (typeof obj[key] === 'object' && obj[key] !== null) {\n acc[key] = sanitize(obj[key]);\n } else {\n acc[key] = obj[key];\n }\n return acc;\n },\n Array.isArray(obj) ? [] : {},\n );\n };\n\n // Sanitize the additional data\n const sanitizedData = sanitize(additionalData);\n // Prepare the log entry\n const logEntry = {\n timestamp: new Date().toISOString(),\n level,\n message,\n ...sanitizedData,\n // Include some general context, but sanitize sensitive parts\n context: sanitize({\n bucketName: this.bucketName,\n region: this.region,\n endpoint: this.endpoint,\n // Only include the first few characters of the access key, if it exists\n accessKeyId: this.accessKeyId ? `${this.accessKeyId.substring(0, 4)}...` : undefined,\n }),\n };\n\n // Log the sanitized entry\n this.logger[level](logEntry);\n }\n }\n\n getBucketName = () => this.bucketName;\n setBucketName = (bucketName: string) => {\n this.bucketName = bucketName;\n };\n getRegion = () => this.region;\n setRegion = (region: string) => {\n this.region = region;\n };\n getEndpoint = () => this.endpoint;\n setEndpoint = (endpoint: string) => {\n this.endpoint = endpoint;\n };\n getMaxRequestSizeInBytes = () => this.maxRequestSizeInBytes;\n setMaxRequestSizeInBytes = (maxRequestSizeInBytes: number) => {\n this.maxRequestSizeInBytes = maxRequestSizeInBytes;\n };\n sanitizeETag = (etag: string): string => sanitizeETag(etag);\n\n getProps = () => ({\n accessKeyId: this.accessKeyId,\n secretAccessKey: this.secretAccessKey,\n region: this.region,\n bucket: this.bucketName,\n endpoint: this.endpoint,\n maxRequestSizeInBytes: this.maxRequestSizeInBytes,\n requestAbortTimeout: this.requestAbortTimeout,\n logger: this.logger,\n });\n setProps = (props: S3Config) => {\n this._validateConstructorParams(props.accessKeyId, props.secretAccessKey, props.bucketName, props.endpoint);\n this.accessKeyId = props.accessKeyId;\n this.secretAccessKey = props.secretAccessKey;\n this.region = props.region || 'auto';\n this.bucketName = props.bucketName;\n this.endpoint = props.endpoint;\n this.maxRequestSizeInBytes = props.maxRequestSizeInBytes || MIN_MAX_REQUEST_SIZE_IN_BYTES;\n this.requestAbortTimeout = props.requestAbortTimeout;\n this.logger = props.logger;\n };\n\n /**\n * Get the content length of an object.\n * @param {string} key - The key of the object.\n * @returns {Promise} The content length of the object in bytes.\n * @throws {TypeError} If the key is not a non-empty string.\n */\n async getContentLength(key: string): Promise {\n this._checkKey(key);\n const headers = {\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('HEAD', encodedKey, {}, headers, '');\n const res = await this._sendRequest(url, 'HEAD', signedHeaders);\n const contentLength = res.headers.get(HEADER_CONTENT_LENGTH);\n return contentLength ? parseInt(contentLength, 10) : 0;\n }\n\n /**\n * Check if a bucket exists.\n * @returns {Promise} True if the bucket exists, false otherwise.\n */\n async bucketExists(): Promise {\n const headers = {\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n const { url, headers: signedHeaders } = await this._sign('HEAD', '', {}, headers, '');\n const res = await this._sendRequest(url, 'HEAD', signedHeaders);\n if (res.ok && res.status === 200) {\n return true;\n }\n return false;\n }\n\n // TBD\n // async createBucket(bucketName) {\n // const xmlBody = `\n // \n // \n // ${this.region}\n // \n // `;\n // const headers = {\n // [HEADER_CONTENT_TYPE]: XML_CONTENT_TYPE,\n // [HEADER_CONTENT_LENGTH]: Buffer.byteLength(xmlBody).toString(),\n // [HEADER_AMZ_CONTENT_SHA256]: await _hash(xmlBody),\n // };\n // const encodedKey = encodeURI(bucketName);\n // const { url, headers: signedHeaders } = await this._sign('PUT', encodedKey, {}, headers, '');\n // const res = await this._sendRequest(url, 'PUT', signedHeaders);\n // if (res.ok && res.status === 200) {\n // return true;\n // }\n // return false;\n // }\n\n /**\n * Check if a file exists in the bucket.\n * @param {string} key - The key of the object.\n * @param {Object} [opts={}] - Additional options for the fileExists operation.\n * @returns {Promise} True if the file exists, false otherwise. 0 - Not found (404), 1 - Found (200), 2 - ETag mismatch (412).\n * @throws {TypeError} If the key is not a non-empty string.\n */\n async fileExists(key: string, opts: Record = {}): Promise {\n this._checkKey(key);\n const { filteredOpts, conditionalHeaders } = this._filterIfHeaders(opts);\n const headers = { [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD, ...conditionalHeaders };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('HEAD', encodedKey, filteredOpts, headers, '');\n try {\n const res = await this._sendRequest(url, 'HEAD', signedHeaders, '', [200, 404, 412, 304]);\n if (res.status === 404) {\n return false;\n }\n if (res.status === 412 || res.status === 304) {\n return null;\n }\n if (res.ok && res.status === 200) return true;\n else this._handleErrorResponse(res);\n return false; // should never happen\n } catch (error: unknown) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n this._log('error', `${ERROR_PREFIX}Failed to check if file exists: ${errorMessage}`);\n throw new Error(`${ERROR_PREFIX}Failed to check if file exists: ${errorMessage}`);\n }\n }\n private async _sign(\n method: HttpMethod,\n keyPath: string,\n query: Object,\n headers: Record,\n body: string | Buffer,\n ): Promise<{ url: string; headers: Record }> {\n const datetime = new Date().toISOString().replace(/[:-]|\\.\\d{3}/g, '');\n const url =\n typeof keyPath === 'string' && keyPath.length > 0 ? new URL(keyPath, this.endpoint) : new URL(this.endpoint);\n url.pathname = `/${encodeURI(this.bucketName)}${url.pathname}`;\n headers[HEADER_AMZ_CONTENT_SHA256] = body ? await _hash(body) : UNSIGNED_PAYLOAD;\n headers[HEADER_AMZ_DATE] = datetime;\n headers[HEADER_HOST] = url.host;\n const canonicalHeaders = this._buildCanonicalHeaders(headers);\n const signedHeaders = Object.keys(headers)\n .map(key => key.toLowerCase())\n .sort()\n .join(';');\n\n const canonicalRequest = await this._buildCanonicalRequest(\n method,\n url,\n query,\n canonicalHeaders,\n signedHeaders,\n body,\n );\n const stringToSign = await this._buildStringToSign(datetime, canonicalRequest);\n const signature = await this._calculateSignature(datetime, stringToSign);\n const authorizationHeader = this._buildAuthorizationHeader(datetime, signedHeaders, signature);\n headers[HEADER_AUTHORIZATION] = authorizationHeader;\n return { url: url.toString(), headers };\n }\n\n private _buildCanonicalHeaders(headers: Record): string {\n return Object.entries(headers)\n .map(([key, value]) => `${key.toLowerCase()}:${String(value).trim()}`)\n .sort()\n .join('\\n');\n }\n\n async _buildCanonicalRequest(\n method: HttpMethod,\n url: URL,\n query: Object,\n canonicalHeaders: string,\n signedHeaders: string,\n body: string | Buffer,\n ): Promise {\n return [\n method,\n url.pathname,\n this._buildCanonicalQueryString(query),\n `${canonicalHeaders}\\n`,\n signedHeaders,\n body ? await _hash(body) : UNSIGNED_PAYLOAD,\n ].join('\\n');\n }\n\n async _buildStringToSign(datetime: string, canonicalRequest: string): Promise {\n const credentialScope = [datetime.slice(0, 8), this.region, S3_SERVICE, AWS_REQUEST_TYPE].join('/');\n return [AWS_ALGORITHM, datetime, credentialScope, await _hash(canonicalRequest)].join('\\n');\n }\n\n async _calculateSignature(datetime: string, stringToSign: string): Promise {\n const signingKey = await this._getSignatureKey(datetime.slice(0, 8));\n return _hmac(signingKey, stringToSign, 'hex');\n }\n\n private _buildAuthorizationHeader(datetime: string, signedHeaders: string, signature: string): string {\n const credentialScope = [datetime.slice(0, 8), this.region, S3_SERVICE, AWS_REQUEST_TYPE].join('/');\n return [\n `${AWS_ALGORITHM} Credential=${this.accessKeyId}/${credentialScope}`,\n `SignedHeaders=${signedHeaders}`,\n `Signature=${signature}`,\n ].join(', ');\n }\n\n private _filterIfHeaders(opts: Record): {\n filteredOpts: Record;\n conditionalHeaders: Record;\n } {\n const filteredOpts: Record = {};\n const conditionalHeaders: Record = {};\n const ifHeaders = ['if-match', 'if-none-match', 'if-modified-since', 'if-unmodified-since'];\n\n for (const [key, value] of Object.entries(opts)) {\n if (ifHeaders.includes(key)) {\n conditionalHeaders[key] = value;\n } else {\n filteredOpts[key] = value;\n }\n }\n\n return { filteredOpts, conditionalHeaders };\n }\n /**\n * List objects in the bucket.\n * @param {string} [delimiter='/'] - The delimiter to use for grouping objects in specific path.\n * @param {string} [prefix=''] - The prefix to filter objects in specific path.\n * @param {number} [maxKeys=1000] - The maximum number of keys to return.\n * @param {string} [method='GET'] - The HTTP method to use (GET or HEAD).\n * @param {Object} [opts={}] - Additional options for the list operation.\n * @returns {Promise} The list of objects or object metadata.\n * @throws {TypeError} If any of the parameters are of incorrect type.\n */\n async list(\n delimiter: string = '/',\n prefix: string = '',\n maxKeys: number = 1000,\n method: HttpMethod = 'GET',\n opts: Object = {},\n ): Promise> {\n this._checkDelimiter(delimiter);\n this._checkPrefix(prefix);\n this._checkMaxKeys(maxKeys);\n this._checkMethodHeadnGet(method);\n this._checkOpts(opts);\n this._log('info', `Listing objects in ${prefix}`);\n\n const query = {\n 'list-type': LIST_TYPE,\n 'max-keys': String(maxKeys),\n ...opts,\n } as { [key: string]: any };\n if (prefix.length > 0) {\n query['prefix'] = prefix;\n }\n const headers = {\n [HEADER_CONTENT_TYPE]: JSON_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n const encodedKey = delimiter === '/' ? delimiter : uriEscape(delimiter);\n const { url, headers: signedHeaders } = await this._sign('GET', encodedKey, query, headers, '');\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n const res = await this._sendRequest(urlWithQuery, 'GET', signedHeaders);\n const responseBody = await res.text();\n\n if (method === 'HEAD') {\n const contentLength = res.headers.get(HEADER_CONTENT_LENGTH);\n const lastModified = res.headers.get(HEADER_LAST_MODIFIED);\n const etag = res.headers.get(HEADER_ETAG);\n\n return {\n size: contentLength ? +contentLength : undefined,\n mtime: lastModified ? new Date(lastModified) : undefined,\n ETag: etag || undefined,\n };\n }\n\n const data = _parseXml(responseBody);\n const output = data.listBucketResult || data.error || data;\n return output.contents || output;\n }\n\n /**\n * List multipart uploads in the bucket.\n * @param {string} [delimiter='/'] - The delimiter to use for grouping objects in specific path.\n * @param {string} [prefix=''] - The prefix to filter objects in specific path.\n * @param {string} [method='GET'] - The HTTP method to use (GET or HEAD).\n * @param {Object} [opts={}] - Additional options for the list operation.\n * @returns {Promise} The list of objects or object metadata.\n * @throws {TypeError} If any of the parameters are of incorrect type.\n */\n async listMultiPartUploads(\n delimiter: string = '/',\n prefix: string = '',\n method: HttpMethod = 'GET',\n opts: Object = {},\n ): Promise {\n this._checkDelimiter(delimiter);\n this._checkPrefix(prefix);\n this._checkMethodHeadnGet(method);\n this._checkOpts(opts);\n this._log('info', `Listing multipart uploads in ${prefix}`);\n\n const query = {\n uploads: '',\n ...opts,\n } as Record;\n const headers = {\n [HEADER_CONTENT_TYPE]: JSON_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n const encodedKey = delimiter === '/' ? delimiter : uriEscape(delimiter);\n const { url, headers: signedHeaders } = await this._sign('GET', encodedKey, query, headers, '');\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n const res = await this._sendRequest(urlWithQuery, 'GET', signedHeaders);\n const responseBody = await res.text();\n\n if (method === 'HEAD') {\n return {\n size: +(res.headers.get(HEADER_CONTENT_LENGTH) ?? '0'),\n mtime: new Date(res.headers.get(HEADER_LAST_MODIFIED) ?? ''),\n ETag: res.headers.get(HEADER_ETAG) ?? '',\n };\n }\n\n const data = _parseXml(responseBody);\n const output = data.listMultipartUploadsResult || data.error || data;\n return output.uploads || output;\n }\n\n /**\n * Get an object from the bucket.\n * @param {string} key - The key of the object to get.\n * @param {Object} [opts={}] - Additional options for the get operation.\n * @returns {Promise} The content of the object. If the object does not exist, null will be returned.\n */\n async get(key: string, opts: Record = {}): Promise {\n this._checkKey(key);\n this._log('info', `Getting object ${key}`);\n const { filteredOpts, conditionalHeaders } = this._filterIfHeaders(opts);\n const headers = {\n [HEADER_CONTENT_TYPE]: JSON_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n ...conditionalHeaders,\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('GET', encodedKey, filteredOpts, headers, '');\n const res = await this._sendRequest(url, 'GET', signedHeaders, '', [200, 404, 412, 304]);\n if (res.status === 404 || res.status === 412 || res.status === 304) {\n this._log('error', `Failed to get object. Status: ${res.status}`);\n return null;\n }\n if (!res.ok) {\n this._log('error', `Failed to get object. Status: ${res.status}`);\n throw new Error(`Failed to get object. Status: ${res.status}`);\n }\n return res.text();\n }\n\n /**\n *\n * @param {string} key - The key of the object to get.\n * @param {Object} [opts={}] - Additional options for the get operation.\n * @returns {Promise<{ etag: string|null; data: string|null }>} The content of the object. If the object does not exist, etag and data will be null.\n */\n async getObjectWithETag(\n key: string,\n opts: Record = {},\n ): Promise<{ etag: string | null; data: string | null }> {\n this._checkKey(key);\n this._log('info', `Getting object ${key}`);\n const { filteredOpts, conditionalHeaders } = this._filterIfHeaders(opts);\n const headers = {\n [HEADER_CONTENT_TYPE]: JSON_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n ...conditionalHeaders,\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('GET', encodedKey, filteredOpts, headers, '');\n try {\n const res = await this._sendRequest(url, 'GET', signedHeaders, '', [200, 404, 412, 304]);\n if (res.status === 404 || res.status === 412 || res.status === 304) {\n this._log('error', `Failed to get object. Status: ${res.status}`);\n return { etag: null, data: null };\n }\n if (!res.ok) {\n this._log('error', `Failed to get object. Status: ${res.status}`);\n throw new Error(`Failed to get object. Status: ${res.status}`);\n }\n\n const etag = res.headers.get('etag');\n if (!etag) {\n throw new Error('ETag not found in response headers');\n }\n const data = await res.text();\n return { etag: sanitizeETag(etag), data };\n } catch (error) {\n this._log('error', `Error getting object ${key} with ETag: ${error}`);\n throw error;\n }\n }\n\n /**\n * Get the ETag of an object.\n * @param {string} key - The key of the object to get.\n * @param {Object} [opts={}] - Additional options for the get operation.\n * @returns {Promise} The ETag of the object or null if the object etag does not match.\n */\n async getEtag(key: string, opts: Record = {}): Promise {\n this._checkKey(key);\n this._log('info', `Getting etag object ${key}`);\n const { filteredOpts, conditionalHeaders } = this._filterIfHeaders(opts);\n const headers = {\n [HEADER_CONTENT_TYPE]: JSON_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n ...conditionalHeaders,\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('HEAD', encodedKey, filteredOpts, headers, '');\n\n const res = await this._sendRequest(url, 'HEAD', signedHeaders, '', [200, 412, 304]);\n this._log('info', `Response status: ${(res.status, res.statusText)}`);\n // etag does not match\n if (res.status === 412 || res.status === 304) {\n return null;\n }\n\n const etag = res.headers.get('etag');\n if (!etag) {\n this._log('error', `ETag not found in response headers`);\n throw new Error(`ETag not found in response headers`);\n }\n return sanitizeETag(etag);\n }\n\n /**\n * Get a response of an object from the bucket.\n * @param {string} key - The key of the object to get.\n * @param {boolean} [wholeFile=true] - Whether to get the whole file or a part.\n * @param {number} [rangeFrom=0] - The range from to get if not getting the whole file.\n * @param {number} [rangeTo=this.maxRequestSizeInBytes] - The range to to get if not getting the whole file. Note: rangeTo is inclusive.\n * @param {Object} [opts={}] - Additional options for the get operation.\n * @returns {Promise} Response of the object content. Use readableStream() to get the stream from .body.\n */\n async getResponse(\n key: string,\n wholeFile: boolean = true,\n rangeFrom: number = 0,\n rangeTo: number = this.maxRequestSizeInBytes,\n opts: Record = {},\n ): Promise {\n this._checkKey(key);\n const { filteredOpts, conditionalHeaders } = this._filterIfHeaders({ ...opts });\n const headers = {\n [HEADER_CONTENT_TYPE]: JSON_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n ...(wholeFile ? {} : { range: `bytes=${rangeFrom}-${rangeTo - 1}` }),\n ...conditionalHeaders,\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('GET', encodedKey, filteredOpts, headers, '');\n const urlWithQuery = `${url}?${new URLSearchParams(filteredOpts)}`;\n\n return this._sendRequest(urlWithQuery, 'GET', signedHeaders);\n }\n\n /**\n * Put an object into the bucket.\n * @param {string} key - The key of the object to put. To create a folder, include a trailing slash.\n * @param {Buffer|string} data - The content of the object to put.\n * @returns {Promise} The response from the put operation.\n * @throws {TypeError} If the key is not a non-empty string or data is not a Buffer or string.\n */\n async put(key: string, data: string | Buffer): Promise {\n this._checkKey(key);\n if (!(data instanceof Buffer || typeof data === 'string')) {\n this._log('error', ERROR_DATA_BUFFER_REQUIRED);\n throw new TypeError(ERROR_DATA_BUFFER_REQUIRED);\n }\n // const encodedKey = encodeURIComponent(key);\n this._log('info', `Uploading object ${key}`);\n const contentLength = typeof data === 'string' ? Buffer.byteLength(data) : data.length;\n const headers = {\n [HEADER_CONTENT_LENGTH]: contentLength,\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('PUT', encodedKey, {}, headers, data);\n const res = await this._sendRequest(url, 'PUT', signedHeaders, data);\n return res;\n }\n\n /**\n * Initiate a multipart upload.\n * @param {string} key - The key of the object to upload.\n * @param {string} [fileType='application/octet-stream'] - The MIME type of the file.\n * @returns {Promise} The upload ID for the multipart upload.\n * @throws {TypeError} If the key is not a non-empty string or fileType is not a string.\n * @throws {Error} If the multipart upload initiation fails.\n */\n async getMultipartUploadId(key: string, fileType: string = DEFAULT_STREAM_CONTENT_TYPE): Promise {\n this._checkKey(key);\n if (typeof fileType !== 'string') {\n this._log('error', `${ERROR_PREFIX}fileType must be a string`);\n throw new TypeError(`${ERROR_PREFIX}fileType must be a string`);\n }\n this._log('info', `Initiating multipart upload for object ${key}`);\n const query = { uploads: '' };\n const headers = {\n [HEADER_CONTENT_TYPE]: fileType,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('POST', encodedKey, query, headers, '');\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n\n const res = await this._sendRequest(urlWithQuery, 'POST', signedHeaders);\n const responseBody = await res.text();\n const parsedResponse = _parseXml(responseBody);\n\n if (\n typeof parsedResponse === 'object' &&\n parsedResponse !== null &&\n 'error' in parsedResponse &&\n typeof parsedResponse.error === 'object' &&\n parsedResponse.error !== null &&\n 'message' in parsedResponse.error\n ) {\n const errorMessage = String(parsedResponse.error.message);\n this._log('error', `${ERROR_PREFIX}Failed to abort multipart upload: ${errorMessage}`);\n throw new Error(`${ERROR_PREFIX}Failed to abort multipart upload: ${errorMessage}`);\n }\n\n if (typeof parsedResponse === 'object' && parsedResponse !== null) {\n if (!parsedResponse.initiateMultipartUploadResult || !parsedResponse.initiateMultipartUploadResult.uploadId) {\n this._log('error', `${ERROR_PREFIX}Failed to create multipart upload: no uploadId in response`);\n throw new Error(`${ERROR_PREFIX}Failed to create multipart upload: Missing upload ID in response`);\n }\n\n return parsedResponse.initiateMultipartUploadResult.uploadId;\n } else {\n this._log('error', `${ERROR_PREFIX}Failed to create multipart upload: unexpected response format`);\n throw new Error(`${ERROR_PREFIX}Failed to create multipart upload: Unexpected response format`);\n }\n }\n\n /**\n * Upload a part in a multipart upload.\n * @param {string} key - The key of the object being uploaded.\n * @param {Buffer|string} data - The content of the part.\n * @param {string} uploadId - The upload ID of the multipart upload.\n * @param {number} partNumber - The part number.\n * @param {Object} [opts={}] - Additional options for the upload.\n * @returns {Promise} The ETag and part number of the uploaded part.\n * @throws {TypeError} If any of the parameters are of incorrect type.\n */\n async uploadPart(\n key: string,\n data: Buffer | string,\n uploadId: string,\n partNumber: number,\n opts: Object = {},\n ): Promise {\n this._validateUploadPartParams(key, data, uploadId, partNumber, opts);\n const query = { uploadId, partNumber, ...opts } as { [key: string]: any };\n const headers = {\n [HEADER_CONTENT_LENGTH]: data.length,\n } as { [key: string]: any };\n\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('PUT', encodedKey, query, headers, data);\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n\n const res = await this._sendRequest(urlWithQuery, 'PUT', signedHeaders, data);\n const ETag = sanitizeETag(res.headers.get('etag') || '');\n return { partNumber, ETag };\n }\n\n private _validateUploadPartParams(\n key: string,\n data: Buffer | string,\n uploadId: string,\n partNumber: number,\n opts: Object,\n ) {\n this._checkKey(key);\n if (!(data instanceof Buffer || typeof data === 'string')) {\n this._log('error', ERROR_DATA_BUFFER_REQUIRED);\n throw new TypeError(ERROR_DATA_BUFFER_REQUIRED);\n }\n if (typeof uploadId !== 'string' || uploadId.trim().length === 0) {\n this._log('error', ERROR_UPLOAD_ID_REQUIRED);\n throw new TypeError(ERROR_UPLOAD_ID_REQUIRED);\n }\n if (!Number.isInteger(partNumber) || partNumber <= 0) {\n this._log('error', `${ERROR_PREFIX}partNumber must be a positive integer`);\n throw new TypeError(`${ERROR_PREFIX}partNumber must be a positive integer`);\n }\n this._checkOpts(opts);\n }\n\n /**\n * Complete a multipart upload.\n * @param {string} key - The key of the object being uploaded.\n * @param {string} uploadId - The upload ID of the multipart upload.\n * @param {Array} parts - An array of objects containing PartNumber and ETag for each part.\n * @returns {Promise} The result of the complete multipart upload operation.\n * @throws {TypeError} If any of the parameters are of incorrect type.\n * @throws {Error} If the complete multipart upload operation fails.\n */\n async completeMultipartUpload(\n key: string,\n uploadId: string,\n parts: Array,\n ): Promise {\n this._checkKey(key);\n if (typeof uploadId !== 'string' || uploadId.trim().length === 0) {\n this._log('error', ERROR_UPLOAD_ID_REQUIRED);\n throw new TypeError(ERROR_UPLOAD_ID_REQUIRED);\n }\n if (!Array.isArray(parts) || parts.length === 0) {\n this._log('error', ERROR_PARTS_REQUIRED);\n throw new TypeError(ERROR_PARTS_REQUIRED);\n }\n if (!parts.every(part => typeof part.partNumber === 'number' && typeof part.ETag === 'string')) {\n this._log('error', ERROR_INVALID_PART);\n throw new TypeError(ERROR_INVALID_PART);\n }\n this._log('info', `Complete multipart upload ${uploadId} for object ${key}`);\n const query = { uploadId };\n const xmlBody = this._buildCompleteMultipartUploadXml(parts);\n const headers = {\n [HEADER_CONTENT_TYPE]: XML_CONTENT_TYPE,\n [HEADER_CONTENT_LENGTH]: Buffer.byteLength(xmlBody).toString(),\n [HEADER_AMZ_CONTENT_SHA256]: await _hash(xmlBody),\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('POST', encodedKey, query, headers, xmlBody);\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n\n const res = await this._sendRequest(urlWithQuery, 'POST', signedHeaders, xmlBody);\n const responseBody = await res.text();\n const parsedResponse = _parseXml(responseBody);\n\n if (\n typeof parsedResponse === 'object' &&\n parsedResponse !== null &&\n 'error' in parsedResponse &&\n typeof parsedResponse.error === 'object' &&\n parsedResponse.error !== null &&\n 'message' in parsedResponse.error\n ) {\n const errorMessage = String(parsedResponse.error.message);\n this._log('error', `${ERROR_PREFIX}Failed to abort multipart upload: ${errorMessage}`);\n throw new Error(`${ERROR_PREFIX}Failed to abort multipart upload: ${errorMessage}`);\n }\n\n return parsedResponse.completeMultipartUploadResult;\n }\n\n /**\n * Aborts a multipart upload.\n * @param {string} key - The key of the object being uploaded.\n * @param {string} uploadId - The ID of the multipart upload to abort.\n * @returns {Promise} - A promise that resolves to the abort response.\n * @throws {Error} If the abort operation fails.\n */\n async abortMultipartUpload(key: string, uploadId: string): Promise {\n // Input validation\n this._checkKey(key);\n if (typeof uploadId !== 'string' || uploadId.trim().length === 0) {\n this._log('error', ERROR_UPLOAD_ID_REQUIRED);\n throw new TypeError(ERROR_UPLOAD_ID_REQUIRED);\n }\n\n this._log('info', `Aborting multipart upload ${uploadId} for object ${key}`);\n\n // Prepare the request\n const query = { uploadId };\n const headers = {\n [HEADER_CONTENT_TYPE]: XML_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n\n try {\n // Sign and send the request\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('DELETE', encodedKey, query, headers, '');\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n\n const res = await this._sendRequest(urlWithQuery, 'DELETE', signedHeaders);\n\n // Check for successful response\n if (res.ok) {\n const responseBody = await res.text();\n const parsedResponse = _parseXml(responseBody);\n\n if (\n typeof parsedResponse === 'object' &&\n parsedResponse !== null &&\n 'error' in parsedResponse &&\n typeof parsedResponse.error === 'object' &&\n parsedResponse.error !== null &&\n 'message' in parsedResponse.error\n ) {\n const errorMessage = String(parsedResponse.error.message);\n this._log('error', `${ERROR_PREFIX}Failed to abort multipart upload: ${errorMessage}`);\n throw new Error(`${ERROR_PREFIX}Failed to abort multipart upload: ${errorMessage}`);\n }\n\n return {\n status: 'Aborted',\n key,\n uploadId,\n response: parsedResponse,\n };\n } else {\n this._log('error', `${ERROR_PREFIX}Abort request failed with status ${res.status}`);\n throw new Error(`${ERROR_PREFIX}Abort request failed with status ${res.status}`);\n }\n } catch (error: unknown) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n this._log('error', `${ERROR_PREFIX}Failed to abort multipart upload for key ${key}: ${errorMessage}`);\n throw new Error(`${ERROR_PREFIX}Failed to abort multipart upload for key ${key}: ${errorMessage}`);\n }\n }\n\n private _buildCompleteMultipartUploadXml(parts: Array): string {\n return `\n \n ${parts\n .map(\n part => `\n \n ${part.partNumber}\n ${part.ETag}\n \n `,\n )\n .join('')}\n \n `;\n }\n\n /**\n * Delete an object from the bucket.\n * @param {string} key - The key of the object to delete.\n * @returns {Promise} The response from the delete operation. True if the delete operation was successful, false otherwise. Note: The delete operation may return a 204 status code even if the object was not found.\n */\n async delete(key: string): Promise {\n this._checkKey(key);\n this._log('info', `Deleting object ${key}`);\n const headers = {\n [HEADER_CONTENT_TYPE]: JSON_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('DELETE', encodedKey, {}, headers, '');\n const res = await this._sendRequest(url, 'DELETE', signedHeaders);\n if (res.status === 204 || res.status === 200) {\n return true;\n }\n return false;\n }\n\n async _sendRequest(\n url: string,\n method: HttpMethod,\n headers: Record,\n body?: string | Buffer,\n toleratedStatusCodes: number[] = [],\n ): Promise {\n this._log('info', `Sending ${method} request to ${url}, headers: ${JSON.stringify(headers)}`);\n const res = await fetch(url, {\n method,\n headers,\n body: ['GET', 'HEAD'].includes(method) ? undefined : body,\n signal: this.requestAbortTimeout !== undefined ? AbortSignal.timeout(this.requestAbortTimeout) : undefined,\n });\n\n if (!res.ok && !toleratedStatusCodes.includes(res.status)) {\n await this._handleErrorResponse(res);\n }\n\n return res;\n }\n\n async _handleErrorResponse(res: Response) {\n const errorBody = await res.text();\n const errorCode = res.headers.get('x-amz-error-code') || 'Unknown';\n const errorMessage = res.headers.get('x-amz-error-message') || res.statusText;\n this._log(\n 'error',\n `${ERROR_PREFIX}Request failed with status ${res.status}: ${errorCode} - ${errorMessage},err body: ${errorBody}`,\n );\n throw new Error(\n `${ERROR_PREFIX}Request failed with status ${res.status}: ${errorCode} - ${errorMessage}, err body: ${errorBody}`,\n );\n }\n\n _buildCanonicalQueryString(queryParams: Object): string {\n if (Object.keys(queryParams).length < 1) {\n return '';\n }\n\n return Object.keys(queryParams)\n .sort()\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent((queryParams as Record)[key])}`)\n .join('&');\n }\n async _getSignatureKey(dateStamp: string): Promise {\n const kDate = await _hmac(`AWS4${this.secretAccessKey}`, dateStamp);\n const kRegion = await _hmac(kDate, this.region);\n const kService = await _hmac(kRegion, S3_SERVICE);\n return _hmac(kService, AWS_REQUEST_TYPE);\n }\n}\n\nconst _hash = async (content: string | Buffer): Promise => {\n const hashSum = _createHash('sha256');\n hashSum.update(content);\n return hashSum.digest('hex');\n};\n\nconst _hmac = async (key: string | Buffer, content: string, encoding?: 'hex'): Promise => {\n const hmacSum = _createHmac('sha256', key);\n hmacSum.update(content);\n return hmacSum.digest(encoding);\n};\nexport const sanitizeETag = (etag: string): string => {\n const replaceChars: Record = {\n '\"': '',\n '"': '',\n '"': '',\n '"': '',\n '"': '',\n };\n return etag.replace(/^(\"|"|")|(\"|"|")$/g, m => replaceChars[m] as string);\n};\n\nconst _parseXml = (str: string): string | object | any => {\n const unescapeXml = (value: string): string => {\n return value\n .replace(/"/g, '\"')\n .replace(/'/g, \"'\")\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/&/g, '&');\n };\n\n const json = {};\n const re = /<(\\w)([-\\w]+)(?:\\/|[^>]*>((?:(?!<\\1)[\\s\\S])*)<\\/\\1\\2)>/gm;\n let match;\n\n while ((match = re.exec(str))) {\n const [, prefix, key, value] = match;\n const fullKey = prefix.toLowerCase() + key;\n const parsedValue = value != null ? _parseXml(value) : true;\n\n if (typeof parsedValue === 'string') {\n (json as { [key: string]: any })[fullKey] = sanitizeETag(unescapeXml(parsedValue));\n } else if (Array.isArray((json as { [key: string]: any })[fullKey])) {\n (json as { [key: string]: any })[fullKey].push(parsedValue);\n } else {\n (json as { [key: string]: any })[fullKey] =\n (json as { [key: string]: any })[fullKey] != null\n ? [(json as { [key: string]: any })[fullKey], parsedValue]\n : expectArray[fullKey]\n ? [parsedValue]\n : parsedValue;\n }\n }\n\n return Object.keys(json).length ? json : unescapeXml(str);\n};\n\nexport { S3 };\nexport default S3;\n", "'use strict';\n\nimport { S3 } from 'ultralight-s3';\nimport avro from 'avro-js'; // eslint-disable-line\nimport {\n\tlowstorage_ERROR_CODES,\n\tlowstorageError,\n\tCollectionNotFoundError,\n\tSchemaValidationError,\n\tDocumentValidationError,\n\tS3OperationError,\n} from './errors.js';\nimport { matchesQuery, generateUUID, inferAvroType } from './helpers.js';\n\nconst MODULE_NAME = 'lowstorage';\nconst DEFAULT_DELIMITER = '/';\nconst PROJECT_DIR_PREFIX = 'lowstorage';\nconst COL_SUFFIX = '.avro';\nconst CHUNG_1MB = 1024 * 1024;\nconst CHUNG_5MB = 5 * CHUNG_1MB;\nconst EMPTY_DATA = Buffer.from('', 'utf8');\n\nconst errorValidationFn = (errorCode = lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR) => {\n\tthrow new DocumentValidationError(`${MODULE_NAME}: Invalid document or schema`, errorCode);\n};\n\nconst _hasColName = (colName) => {\n\tif (colName.trim() === '' || colName === null || typeof colName === 'undefined' || colName.length > 255 || colName === null) {\n\t\tthrow new lowstorageError(`${MODULE_NAME}: Collection name is required, null or too long`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n\t}\n};\n\n// code / description\n// init of new collection is automatically creating it in the bucket\n// there is optional (opt-in) switch to create new collections in bucket\n// if the schema is not provided, it will create empty buffer and save it\n// if the schema is provided, it will save it in memory and use it for all ops\n// if the schema is updated, it will save it in memory and use it for all ops\n// exposed functions are:\n// listCollections \u2705\n// collectionExists \u2705\n// createCollection \u2705\n// removeCollection \u2705\n// renameCollection \u2705\n// updateCollectionSchema \u274C\n// collection \u2705\n// s3 \u2705\n\n// Operations over collections are:\n// insert \u2705\n// find \u2705\n// findOne \u2705\n// update \u2705\n// updateOne \u2705\n// delete \u2705\n// count \u2705\n\n// Errors:\n// lowstorageError \u2705\n// CollectionNotFoundError \u2705\n// SchemaValidationError \u2705\n// DocumentValidationError \u2705\n// S3OperationError \u2705\n\n/**\n * lowstorage class for managing collections and performing operations on top of S3-compatible storages.\n * @class\n * @example\n * const storage = new lowstorage({\n * \taccessKeyId: 'YOUR_ACCESS_KEY',\n * \tsecretAccessKey: 'YOUR_SECRET_KEY',\n * \tendpoint: 'YOUR_ENDPOINT',\n * \tbucketName: 'YOUR_BUCKET_NAME',\n * \tregion: 'YOUR_REGION',\n * });\n *\n * // Create a collection\n * const userCol = await storage.collection('users');\n *\n * // Insert a document\n * await userCol.insert({\n * \tname: 'Kevin',\n * \tgender: 'whatever',\n * \tposts: [],\n * });\n *\n * // Show all users\n * const allUsers = await userCol.find({});\n *\n * // Find users with pagination (e.g., page 2, 10 users per page)\n * const secondPageUsers = await userCol.find({}, { skip: 10, limit: 10 });\n *\n * // Find user by ID and update name\n * await userCol.update({ _id: id }, { name: 'Carlos' });\n */\nclass lowstorage {\n\t/**\n\t * Create a new lowstorage instance.\n\t * @param {Object} options - Configuration options for lowstorage.\n\t * @param {string} options.accessKeyId - S3 access key ID.\n\t * @param {string} options.secretAccessKey - S3 secret access key.\n\t * @param {string} options.endpoint - S3 endpoint URL.\n\t * @param {string} options.bucketName - S3 bucket name.\n\t * @param {string} [options.region='auto'] - S3 region.\n\t * @param {Object} [options.logger=null] - Logger object.\n\t * @param {string} [options.dirPrefix=PROJECT_DIR_PREFIX] - Directory prefix for collections.\n\t * @returns {lowstorage} A new lowstorage instance.\n\t */\n\tconstructor(\n\t\toptions = {\n\t\t\taccessKeyId: undefined,\n\t\t\tsecretAccessKey: undefined,\n\t\t\tendpoint: undefined,\n\t\t\tbucketName: undefined,\n\t\t\tregion: 'auto',\n\t\t\tlogger: null,\n\t\t\tdirPrefix: PROJECT_DIR_PREFIX,\n\t\t},\n\t) {\n\t\tthis._checkArgs(options);\n\t\tthis._schemas = new Map();\n\t\tthis._s3 = new S3(options);\n\t\tthis._dirPrefix = options.dirPrefix || PROJECT_DIR_PREFIX;\n\t\tthis._avro = avro;\n\t}\n\n\t_checkArgs = (args) => {\n\t\tconst requiredFields = ['accessKeyId', 'secretAccessKey', 'endpoint', 'bucketName'];\n\t\tfor (const field of requiredFields) {\n\t\t\tif (!args[field]) {\n\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: ${field} is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n\t\t\t}\n\t\t}\n\t};\n\n\t/**\n\t * List all collections.\n\t * @returns {Promise} An array of collection names.\n\t * @throws {S3OperationError} If there's an error during S3 operation.\n\t */\n\tasync listCollections() {\n\t\ttry {\n\t\t\tconst listed = await this._s3.list(DEFAULT_DELIMITER, this._dirPrefix);\n\t\t\tif (typeof listed === 'object' && listed !== null && listed.keyCount === '0') return [];\n\t\t\t// remove the delimiter from the key\n\t\t\treturn listed.map((entry) => entry.key.slice(this._dirPrefix.length + 1, -COL_SUFFIX.length));\n\t\t} catch (error) {\n\t\t\tthrow new S3OperationError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t}\n\t}\n\n\t/**\n\t * Check if a collection exists.\n\t * @param {string} colName - The name of the collection.\n\t * @returns {Promise} True if the collection exists, false otherwise.\n\t * @throws {lowstorageError} If there's an error.\n\t */\n\tasync collectionExists(colName) {\n\t\ttry {\n\t\t\t_hasColName(colName);\n\t\t\tconst exists = await this._s3.fileExists(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`);\n\t\t\tconsole.log('collectionExists::2 ', `${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`, exists);\n\t\t\treturn !!exists;\n\t\t} catch (error) {\n\t\t\tif (error.message.includes('Not Found')) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tconsole.log('collectionExists::3 ', colName, error);\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND);\n\t\t}\n\t}\n\n\t/**\n\t * Create a new collection.\n\t * @param {string} colName - The name of the collection.\n\t * @param {Object} [schema] - The schema for the collection.\n\t * @param {Array} [data=[]] - The initial data for the collection.\n\t * @returns {Promise} A Promise that resolves to a Collection object.\n\t * @throws {lowstorageError} If there's an error.\n\t */\n\tasync createCollection(colName, schema, data = []) {\n\t\ttry {\n\t\t\t_hasColName(colName);\n\t\t\tconst exists = await this.collectionExists(colName);\n\t\t\tif (!exists) {\n\t\t\t\tif (data.length > 0 && schema) {\n\t\t\t\t\tconst wrapperType = this._avro.parse({ type: 'array', items: schema });\n\t\t\t\t\tawait this._s3.put(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`, wrapperType.toBuffer(data));\n\t\t\t\t} else {\n\t\t\t\t\tawait this._s3.put(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`, EMPTY_DATA);\n\t\t\t\t}\n\t\t\t\treturn this.collection(colName, schema, false);\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Collection ${colName} already exists`, lowstorage_ERROR_CODES.COLLECTION_EXISTS);\n\t\t} catch (error) {\n\t\t\tif (error instanceof lowstorageError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.CREATE_COLLECTION_ERROR);\n\t\t}\n\t}\n\n\t/**\n\t * Remove a collection.\n\t * @param {string} colName - The name of the collection.\n\t * @returns {Promise} A Promise that resolves to true if the collection is removed, false otherwise.\n\t * @throws {lowstorageError} If there's an error.\n\t */\n\tasync removeCollection(colName) {\n\t\ttry {\n\t\t\t_hasColName(colName);\n\t\t\tconst KEY = `${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`;\n\t\t\tconst exists = await this.collectionExists(colName);\n\t\t\tif (exists) {\n\t\t\t\tawait this._s3.delete(KEY);\n\t\t\t\tconst exists2 = await this.collectionExists(colName);\n\t\t\t\tif (typeof exists2 === 'boolean') {\n\t\t\t\t\tif (!exists2) {\n\t\t\t\t\t\tthis._schemas.delete(colName);\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Failed to delete collection ${colName}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t\t}\n\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to delete collection ${colName}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Collection ${colName} does not exist`, lowstorage_ERROR_CODES.REMOVE_COLLECTION_ERROR);\n\t\t} catch (error) {\n\t\t\tif (error instanceof S3OperationError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(\n\t\t\t\t`${MODULE_NAME}: Failed to remove collection: ${error.message}`,\n\t\t\t\tlowstorage_ERROR_CODES.REMOVE_COLLECTION_ERROR,\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Get or create a collection.\n\t * @param {string} colName - The name of the collection.\n\t * @param {Object} [schema] - The schema for the collection.\n\t * @param {boolean} [autoCreate=true] - Whether to automatically create the collection if it doesn't exist.\n\t * @returns {Promise} A Promise that resolves to a Collection object.\n\t * @throws {lowstorageError} If there's an error.\n\t */\n\tasync collection(colName, schema, autoCreate = true) {\n\t\ttry {\n\t\t\t_hasColName(colName);\n\t\t\tconst colPath = `${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`;\n\t\t\tconst exists = await this._s3.fileExists(colPath);\n\t\t\tif (!exists) {\n\t\t\t\tif (!autoCreate) {\n\t\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Collection ${colName} does not exist`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND);\n\t\t\t\t}\n\t\t\t\t// TODO: check if this is the right way to handle empty data\n\t\t\t\tawait this._s3.put(colPath, EMPTY_DATA);\n\t\t\t}\n\t\t\tconst colSchema = schema || this._schemas.get(colName) || undefined;\n\t\t\treturn new Collection(colName, colSchema, this._s3, this._dirPrefix);\n\t\t} catch (error) {\n\t\t\t// check if error message contains \"unknown type\" and if so, throw a schema validation error\n\t\t\tif (error.message.includes('unknown type')) {\n\t\t\t\tthrow new SchemaValidationError(\n\t\t\t\t\t`${MODULE_NAME}: Schema input is invalid: ${error.message}`,\n\t\t\t\t\tlowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND);\n\t\t}\n\t}\n\n\t/**\n\t * Get the S3 instance associated with the lowstorage instance.\n\t * @returns {S3} The S3 instance. Use this to perform S3 operations. Check for ultralight-s3 for more details.\n\t */\n\ts3 = () => {\n\t\treturn this._s3;\n\t};\n}\n\n/**\n * Collection class for managing documents in a collection.\n * @class\n * @example\n * const storage = new lowstorage({\n * \taccessKeyId: 'YOUR_ACCESS_KEY',\n * \tsecretAccessKey: 'YOUR_SECRET_KEY',\n * \tendpoint: 'YOUR_ENDPOINT',\n * \tbucketName: 'YOUR_BUCKET_NAME',\n * \tregion: 'YOUR_REGION',\n * });\n *\n * // Create a collection\n * const userCol = await storage.collection('users');\n *\n * // Insert a document\n * await userCol.insert({\n * \tname: 'Kevin',\n * \tgender: 'whatever',\n * \tposts: [],\n * });\n *\n * // Show all users\n * const allUsers = await userCol.find({});\n *\n * // Find users with pagination (e.g., page 2, 10 users per page)\n * const secondPageUsers = await userCol.find({}, { skip: 10, limit: 10 });\n *\n * // Find user by ID and update name\n * await userCol.update({ _id: id }, { name: 'Carlos' });\n */\nclass Collection {\n\t/**\n\t * Create a new Collection instance.\n\t * @param {string} colName - The name of the collection.\n\t * @param {S3} s3 - The S3 instance.\n\t * @param {Object} [schema] - The Avro schema for the collection.\n\t * @param {string} [dirPrefix=PROJECT_DIR_PREFIX] - The directory prefix for the collection.\n\t * @param {boolean} [safeWrite=false] - Whether to perform a safe write operation. It doublechecks the ETag of the object before writing. False = overwrites the object, True = only writes if the object has not been modified.\n\t * @returns {Collection} A new Collection instance.\n\t */\n\tconstructor(colName, schema, s3, dirPrefix = PROJECT_DIR_PREFIX, safeWrite = false) {\n\t\tthis._colName = colName;\n\t\tthis._s3 = s3;\n\t\tthis._avro = avro;\n\t\tthis._lastETag = '';\n\t\tthis._dataCache = [];\n\t\tthis._schema = schema;\n\t\tthis._avroType = typeof schema === 'undefined' ? null : this._avro.parse(schema);\n\t\tthis._dirPrefix = dirPrefix;\n\t\tthis._safeWrite = safeWrite;\n\t}\n\n\tgetProps = () => ({\n\t\tcolName: this._colName,\n\t\ts3: this._s3,\n\t\tavro: this._avro,\n\t\tavroType: this._avroType,\n\t\tdirPrefix: this._dirPrefix,\n\t\tsafeWrite: this._safeWrite,\n\t});\n\n\tsetProps = (props) => {\n\t\tthis._colName = props.colName;\n\t\tthis._s3 = props.s3;\n\t\tthis._avro = props.avro;\n\t\tthis._schema = props.schema;\n\t\tthis._avroType = props.avroType;\n\t\tthis._dirPrefix = props.dirPrefix;\n\t\tthis._safeWrite = props.safeWrite;\n\t};\n\n\tsetSafeWrite = (safeWrite) => {\n\t\tthis._safeWrite = safeWrite;\n\t};\n\n\tgetSafeWrite = () => {\n\t\treturn this._safeWrite;\n\t};\n\n\tgetAvroSchema = () => {\n\t\treturn this._avroType;\n\t};\n\n\tsetAvroSchema = (schema) => {\n\t\tthis._schema = schema;\n\t\tthis._avroType = typeof schema === 'undefined' ? null : this._avro.parse(schema);\n\t};\n\n\tasync _loadData() {\n\t\ttry {\n\t\t\tconst KEY = `${this._dirPrefix}${DEFAULT_DELIMITER}${this._colName}${COL_SUFFIX}`;\n\t\t\tconst CHUNK_SIZE = this._s3.getMaxRequestSizeInBytes() || CHUNG_5MB;\n\t\t\tif (this._avroType === null || typeof this._avroType === 'undefined') {\n\t\t\t\tthrow new lowstorageError(\n\t\t\t\t\t`${MODULE_NAME}: Missing type definition. Configure before operations `,\n\t\t\t\t\tlowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconsole.log('Getting object:', KEY, this._lastETag);\n\t\t\tlet { etag, data } = await this._s3.getObjectWithETag(KEY, { 'if-none-match': this._lastETag });\n\t\t\tconsole.log('data :::::::::::::::::::::::::', data, etag, this._dataCache);\n\t\t\tif (data === null) {\n\t\t\t\t// console.log('data is null, returning cache');\n\t\t\t\treturn this._dataCache;\n\t\t\t}\n\t\t\tthis._lastETag = etag === null ? this._lastETag : etag;\n\t\t\tconst wrapperType = this._avro.parse({ type: 'array', items: this._avroType });\n\t\t\tif (data.length < CHUNK_SIZE) {\n\t\t\t\tthis._dataCache = data.length > 0 ? wrapperType.fromBuffer(data) : [];\n\t\t\t\treturn this._dataCache;\n\t\t\t}\n\t\t\tlet offset = CHUNK_SIZE;\n\t\t\tlet bufferArr = [Buffer.from(data, 'utf8')];\n\t\t\tlet repeat = true;\n\t\t\twhile (repeat) {\n\t\t\t\tconst nextDataResponse = await this._s3.getResponse(KEY, false, offset, offset + CHUNK_SIZE);\n\t\t\t\tconst nextDataBody = await nextDataResponse.text();\n\t\t\t\tbufferArr.push(Buffer.from(nextDataBody, 'utf8'));\n\t\t\t\toffset += CHUNK_SIZE;\n\t\t\t\tconst contentLength = nextDataResponse.headers.get('content-length') || nextDataBody.length;\n\t\t\t\tif (contentLength < CHUNK_SIZE) {\n\t\t\t\t\trepeat = false;\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst bufferedData = Buffer.concat(bufferArr);\n\t\t\tthis._dataCache = wrapperType.fromBuffer(bufferedData);\n\t\t\treturn this._dataCache;\n\t\t} catch (error) {\n\t\t\tif (error.toString().indexOf('status 404: Unknown - Not Found') > -1) {\n\t\t\t\tthis._dataCache = [];\n\t\t\t\treturn this._dataCache;\n\t\t\t}\n\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to load data: ${error.message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t}\n\t}\n\n\tasync _saveData(data) {\n\t\ttry {\n\t\t\tif (this._avroType === null || typeof this._avroType === 'undefined') {\n\t\t\t\tthrow new lowstorageError(\n\t\t\t\t\t`${MODULE_NAME}: Missing type definition. Configure before operations `,\n\t\t\t\t\tlowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst wrapperType = this._avro.parse({ type: 'array', items: this._avroType });\n\t\t\tconst dataBuffer = data.length > 0 ? wrapperType.toBuffer(data) : EMPTY_DATA; // TODO: check if this is the right way to handle empty data\n\n\t\t\tconst KEY = `${this._dirPrefix}${DEFAULT_DELIMITER}${this._colName}${COL_SUFFIX}`;\n\t\t\tif (this._safeWrite && this._lastETag !== '') {\n\t\t\t\tconst currentETag = await this._s3.getEtag(KEY);\n\t\t\t\t// If we have a current ETag, check if it matches our last known ETag\n\t\t\t\tif (currentETag !== null && currentETag !== this._lastETag) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst resp = await this._s3.put(KEY, dataBuffer);\n\t\t\tif (resp.status !== 200) {\n\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to save data`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t}\n\n\t\t\t// Update the cached ETag\n\t\t\tconst newETag = resp.headers.get('etag');\n\t\t\t// console.log('saveddata newETag', this._s3.sanitizeETag(newETag));\n\t\t\tif (newETag) {\n\t\t\t\tthis._lastETag = this._s3.sanitizeETag(newETag);\n\t\t\t\t// console.log('saveddata lastETag', this._lastETag, 'data is ', data);\n\t\t\t\tthis._dataCache = data;\n\t\t\t}\n\t\t\treturn true;\n\t\t} catch (error) {\n\t\t\tif (error instanceof S3OperationError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.SAVE_DATA_ERROR);\n\t\t}\n\t}\n\n\t/**\n\t * Insert a document into the collection.\n\t * @param {Object|Array} doc - The document to insert.\n\t * @param {Object} [schema=undefined] - The schema for the document.\n\t * @returns {Promise} A Promise that resolves to the array of inserted document(s).\n\t * @throws {lowstorageError} If there's an error.\n\t */\n\tasync insert(doc, schema = undefined) {\n\t\ttry {\n\t\t\tif (doc === undefined || doc === null) {\n\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Document is required for insert`, lowstorage_ERROR_CODES.INSERT_ERROR);\n\t\t\t}\n\t\t\tif (typeof doc !== 'object' && !Array.isArray(doc)) {\n\t\t\t\tthrow new DocumentValidationError(\n\t\t\t\t\t`${MODULE_NAME}: Document must be an object or an array`,\n\t\t\t\t\tlowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst items = !Array.isArray(doc) ? [doc] : doc;\n\n\t\t\tconst schemaWithId = schema || this._avroType || inferAvroType(items[0]);\n\t\t\tconst avroType = this._avro.parse(schemaWithId);\n\t\t\tif (!avroType) {\n\t\t\t\tthrow new SchemaValidationError(\n\t\t\t\t\t`${MODULE_NAME}: Schema is required - Pass a schema to the insert method`,\n\t\t\t\t\tlowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR,\n\t\t\t\t);\n\t\t\t}\n\t\t\tthis._avroType = avroType;\n\t\t\tconst data = await this._loadData();\n\t\t\tfor (let item of items) {\n\t\t\t\tif (typeof item !== 'object' || item === null) {\n\t\t\t\t\tthrow new DocumentValidationError(\n\t\t\t\t\t\t`${MODULE_NAME}: Invalid input: input must be an object or an array of objects`,\n\t\t\t\t\t\tlowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\titem._id = item._id || (await generateUUID());\n\t\t\t\tconst validBuffer = this._avroType.isValid(item, {\n\t\t\t\t\terrorHook: errorValidationFn,\n\t\t\t\t\tnoUndeclaredFields: true,\n\t\t\t\t});\n\t\t\t\tif (validBuffer === true) {\n\t\t\t\t\tdata.push(item);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new DocumentValidationError(`${MODULE_NAME}: Invalid document or schema`, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR);\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst success = await this._saveData(data);\n\t\t\tif (!success) {\n\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to insert document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t}\n\t\t\treturn items;\n\t\t} catch (error) {\n\t\t\tif (error.message.includes('unknown type')) {\n\t\t\t\tthrow new SchemaValidationError(\n\t\t\t\t\t`${MODULE_NAME}: Schema input is invalid: ${error.message}`,\n\t\t\t\t\tlowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (error instanceof lowstorageError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME} Insert operation failed: ${error.message}`, lowstorage_ERROR_CODES.INSERT_ERROR);\n\t\t}\n\t}\n\n\t/**\n\t * Find documents in the collection.\n\t * @param {Object} [query={}] - The query to filter documents.\n\t * @param {Object} [options={}] - The options for pagination.\n\t * @param {number} [options.skip=0] - The number of documents to skip. Default is 0.\n\t * @param {number} [options.limit=undefined] - The maximum number of documents to return. Default is undefined, which means no limit.\n\t * @returns {Promise} A Promise that resolves to an array of matching documents.\n\t * @throws {lowstorageError} If there's an error.\n\t */\n\tasync find(query = {}, options = {}) {\n\t\ttry {\n\t\t\tif (query === undefined || query === null) {\n\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Query is required for update`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n\t\t\t}\n\t\t\tconst data = await this._loadData();\n\t\t\tconst start = parseInt(options.skip, 10) || 0;\n\t\t\tconst end = parseInt(options.limit, 10) ? start + parseInt(options.limit, 10) : undefined;\n\t\t\tconst filteredData = data.filter((doc) => matchesQuery(doc, query)).slice(start, end);\n\t\t\treturn filteredData;\n\t\t} catch (error) {\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Find operation failed: ${error.message}`, lowstorage_ERROR_CODES.FIND_ERROR);\n\t\t}\n\t}\n\n\t/**\n\t * Find the first document in the collection that matches the query.\n\t * @param {Object} [query={}] - The query to filter documents.\n\t * @returns {Promise} A Promise that resolves to the first matching document or null if no match is found.\n\t * @throws {lowstorageError} If there's an error.\n\t */\n\tasync findOne(query = {}) {\n\t\ttry {\n\t\t\tif (query === null) {\n\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Query cannot be null`, lowstorage_ERROR_CODES.INVALID_ARGUMENT);\n\t\t\t}\n\t\t\tconst result = await this.find(query, { limit: 1 });\n\t\t\treturn result[0] || null;\n\t\t} catch (error) {\n\t\t\tif (error instanceof lowstorageError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: FindOne operation failed: ${error.message}`, lowstorage_ERROR_CODES.FIND_ONE_ERROR);\n\t\t}\n\t}\n\n\t/**\n\t * Update a single document in the collection that matches the query.\n\t * @param {Object} [query={}] - The query to filter the document to update.\n\t * @param {Object} [update={}] - The update operations to apply to the matching document.\n\t * @returns {Promise} A Promise that resolves to number of documents updated.\n\t * @throws {lowstorageError} If the updateOne operation fails.\n\t * @throws {SchemaValidationError} If the schema is not defined for the collection.\n\t * @throws {DocumentValidationError} If the updated document is invalid.\n\t * @throws {S3OperationError} If the S3 operation fails.\n\t */\n\tasync update(query = {}, update = {}, options = {}) {\n\t\ttry {\n\t\t\tif (query === undefined || query === null || update === undefined || update === null) {\n\t\t\t\tthrow new lowstorageError(\n\t\t\t\t\t`${MODULE_NAME}: Query and update values are required for update`,\n\t\t\t\t\tlowstorage_ERROR_CODES.MISSING_ARGUMENT,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (!this._avroType) {\n\t\t\t\tthrow new SchemaValidationError(\n\t\t\t\t\t`${MODULE_NAME}: Schema is not defined for this collection`,\n\t\t\t\t\tlowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst data = await this._loadData();\n\t\t\tif (data.length === 0) return 0;\n\t\t\tlet updatedCount = 0;\n\t\t\tfor (let i = 0; i < data.length; i++) {\n\t\t\t\tif (matchesQuery(data[i], query)) {\n\t\t\t\t\tconst updatedDoc = { ...data[i], ...update };\n\t\t\t\t\tconst isValid = this._avroType.isValid(updatedDoc, {\n\t\t\t\t\t\terrorHook: errorValidationFn,\n\t\t\t\t\t\tnoUndeclaredFields: true,\n\t\t\t\t\t});\n\t\t\t\t\tif (isValid === true) {\n\t\t\t\t\t\tdata[i] = updatedDoc;\n\t\t\t\t\t\tupdatedCount++;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow new DocumentValidationError(\n\t\t\t\t\t\t\t`${MODULE_NAME}: Invalid document or schema`,\n\t\t\t\t\t\t\tlowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (updatedCount > 0) {\n\t\t\t\tconst success = await this._saveData(data);\n\t\t\t\tif (!success) {\n\t\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t\t}\n\t\t\t} else if (options.upsert) {\n\t\t\t\t// If upsert is true, we need to insert the document\n\t\t\t\tconst success = await this.insert(update);\n\t\t\t\tif (!success) {\n\t\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t\t}\n\t\t\t\tupdatedCount = 1;\n\t\t\t}\n\t\t\treturn updatedCount;\n\t\t} catch (error) {\n\t\t\tif (error instanceof S3OperationError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Update operation failed: ${error.message}`, lowstorage_ERROR_CODES.UPDATE_ERROR);\n\t\t}\n\t}\n\n\t/**\n\t * Update a single document in the collection that matches the query.\n\t * @param {Object} [query={}] - The query to filter the document to update.\n\t * @param {Object} [update={}] - The update operations to apply to the matching document.\n\t * @returns {Promise} A Promise that resolves to 1 if a document was updated, 0 otherwise.\n\t * @throws {lowstorageError} If the updateOne operation fails.\n\t * @throws {SchemaValidationError} If the schema is not defined for the collection.\n\t * @throws {DocumentValidationError} If the updated document is invalid.\n\t * @throws {S3OperationError} If the S3 operation fails.\n\t */\n\tasync updateOne(query = {}, update = {}, options = {}) {\n\t\ttry {\n\t\t\tif (query === undefined || query === null || update === undefined || update === null) {\n\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Query is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n\t\t\t}\n\t\t\tif (!this._avroType) {\n\t\t\t\tthrow new SchemaValidationError(\n\t\t\t\t\t`${MODULE_NAME}: Schema is not defined for this collection`,\n\t\t\t\t\tlowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst data = await this._loadData();\n\t\t\tif (data.length === 0) return 0;\n\t\t\tconst docIndex = data.findIndex((doc) => matchesQuery(doc, query));\n\n\t\t\tif (docIndex !== -1) {\n\t\t\t\tconst updatedDoc = { ...data[docIndex], ...update };\n\t\t\t\tconst isValid = this._avroType.isValid(updatedDoc, {\n\t\t\t\t\terrorHook: errorValidationFn,\n\t\t\t\t\tnoUndeclaredFields: true,\n\t\t\t\t});\n\t\t\t\tif (isValid === true) {\n\t\t\t\t\tdata[docIndex] = updatedDoc;\n\t\t\t\t\tconst success = await this._saveData(data);\n\t\t\t\t\tif (!success) {\n\t\t\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t\t\t}\n\t\t\t\t\treturn 1;\n\t\t\t\t} else {\n\t\t\t\t\tthrow new DocumentValidationError(`${MODULE_NAME}: Invalid document or schema`, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (options.upsert) {\n\t\t\t\t// If upsert is true, we need to insert the document\n\t\t\t\tconst success = await this.insert(update);\n\t\t\t\tif (!success) {\n\t\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t\t}\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t\treturn 0;\n\t\t} catch (error) {\n\t\t\tif (error instanceof lowstorageError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: UpdateOne operation failed: ${error.message}`, lowstorage_ERROR_CODES.UPDATE_ONE_ERROR);\n\t\t}\n\t}\n\n\t/**\n\t * Delete documents from the collection.\n\t * @param {Object} [query={}] - The query to filter documents to delete.\n\t * @returns {Promise} A Promise that resolves to the number of documents deleted.\n\t * @throws {lowstorageError} If the delete operation fails.\n\t * @throws {S3OperationError} If the S3 operation fails.\n\t */\n\tasync delete(query = {}) {\n\t\ttry {\n\t\t\tif (query === undefined || query === null) {\n\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Query is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n\t\t\t}\n\t\t\tconst data = await this._loadData();\n\t\t\tif (data.length === 0) return 0;\n\t\t\tconst initialLength = data.length;\n\n\t\t\tconst newData = data.filter((doc) => !matchesQuery(doc, query));\n\t\t\tconst success = await this._saveData(newData);\n\t\t\tif (!success) {\n\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to delete document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t}\n\t\t\treturn initialLength - newData.length;\n\t\t} catch (error) {\n\t\t\tif (error instanceof S3OperationError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Delete operation failed: ${error.message}`, lowstorage_ERROR_CODES.DELETE_ERROR);\n\t\t}\n\t}\n\n\t/**\n\t * Delete all documents from the collection.\n\t * @returns {Promise} A Promise that resolves to the number of documents deleted.\n\t * @throws {lowstorageError} If the delete operation fails.\n\t * @throws {S3OperationError} If the S3 operation fails.\n\t */\n\tasync deleteAll() {\n\t\ttry {\n\t\t\tconst data = await this._loadData();\n\t\t\tconst initialLength = data.length;\n\t\t\tconst success = await this._saveData([]);\n\t\t\tif (!success) {\n\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to delete document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t}\n\t\t\treturn initialLength;\n\t\t} catch (error) {\n\t\t\tif (error instanceof S3OperationError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Delete operation failed: ${error.message}`, lowstorage_ERROR_CODES.DELETE_ERROR);\n\t\t}\n\t}\n\n\t/**\n\t * Count the number of documents in the collection.\n\t * @param {Object} [query={}] - The query to filter documents.\n\t * @returns {Promise} A Promise that resolves to the number of documents in the collection.\n\t * @throws {lowstorageError} If the count operation fails.\n\t */\n\tasync count(query = {}) {\n\t\ttry {\n\t\t\tconst data = await this.find(query);\n\t\t\treturn data.length;\n\t\t} catch (error) {\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Count operation failed: ${error.message}`, lowstorage_ERROR_CODES.COUNT_ERROR);\n\t\t}\n\t}\n\n\tasync renameCollection(newColName, newSchema = this._schema) {\n\t\ttry {\n\t\t\t_hasColName(newColName);\n\t\t\tconst exists = await this._s3.fileExists(`${this._dirPrefix}${DEFAULT_DELIMITER}${newColName}${COL_SUFFIX}`);\n\t\t\tif (!!exists) {\n\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Collection ${newColName} already exists`, lowstorage_ERROR_CODES.COLLECTION_EXISTS);\n\t\t\t}\n\t\t\tconst schema = newSchema || this.getAvroSchema();\n\t\t\tconst data = await this._loadData();\n\t\t\tconst createNew = new Collection(newColName, schema, this._s3, this._dirPrefix);\n\t\t\tawait createNew._saveData(data);\n\t\t\tawait this._s3.delete(`${this._dirPrefix}${DEFAULT_DELIMITER}${this._colName}${COL_SUFFIX}`);\n\t\t\treturn createNew;\n\t\t} catch (error) {\n\t\t\tif (error instanceof lowstorageError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(\n\t\t\t\t`${MODULE_NAME}: Rename collection failed: ${error.message}`,\n\t\t\t\tlowstorage_ERROR_CODES.RENAME_COLLECTION_ERROR,\n\t\t\t);\n\t\t}\n\t}\n}\n\n// export default lowstorage;\nexport { lowstorage, lowstorageError, lowstorage_ERROR_CODES };\n", "'use strict';\n\nconst lowstorage_ERROR_CODES = {\n\tMISSING_ARGUMENT: 'MISSING_ARGUMENT',\n\tCOLLECTION_EXISTS: 'COLLECTION_EXISTS',\n\tCREATE_COLLECTION_ERROR: 'CREATE_COLLECTION_ERROR',\n\tRENAME_COLLECTION_ERROR: 'RENAME_COLLECTION_ERROR',\n\tREMOVE_COLLECTION_ERROR: 'REMOVE_COLLECTION_ERROR',\n\tUPDATE_COLLECTION_SCHEMA_ERROR: 'UPDATE_COLLECTION_SCHEMA_ERROR',\n\tCOLLECTION_NOT_FOUND: 'COLLECTION_NOT_FOUND',\n\tSCHEMA_VALIDATION_ERROR: 'SCHEMA_VALIDATION_ERROR',\n\tDOCUMENT_VALIDATION_ERROR: 'DOCUMENT_VALIDATION_ERROR',\n\tS3_OPERATION_ERROR: 'S3_OPERATION_ERROR',\n\tFIND_ERROR: 'FIND_ERROR',\n\tFIND_ONE_ERROR: 'FIND_ONE_ERROR',\n\tSAVE_DATA_ERROR: 'SAVE_DATA_ERROR',\n\tINSERT_ERROR: 'INSERT_ERROR',\n\tUPDATE_ERROR: 'UPDATE_ERROR',\n\tUPDATE_ONE_ERROR: 'UPDATE_ONE_ERROR',\n\tDELETE_ERROR: 'DELETE_ERROR',\n\tCOUNT_ERROR: 'COUNT_ERROR',\n\tUNKNOWN_ERROR: 'UNKNOWN_ERROR',\n};\nclass lowstorageError extends Error {\n\tconstructor(message, code = lowstorage_ERROR_CODES.UNKNOWN_ERROR) {\n\t\tsuper(`lowstorageError: ${message} :: code: ${code}`);\n\t\tthis.name = this.constructor.name;\n\t\tthis.code = code;\n\t\tError.captureStackTrace(this, this.constructor);\n\t}\n}\n\nclass CollectionNotFoundError extends lowstorageError {\n\tconstructor(collectionName) {\n\t\tsuper(`Collection ${collectionName} not found`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND);\n\t}\n}\n\nclass SchemaValidationError extends lowstorageError {\n\tconstructor(message) {\n\t\tsuper(message, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR);\n\t}\n}\n\nclass DocumentValidationError extends lowstorageError {\n\tconstructor(message) {\n\t\tsuper(message, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR);\n\t}\n}\n\nclass S3OperationError extends lowstorageError {\n\tconstructor(message, operation) {\n\t\tsuper(`S3 ${operation} operation failed: ${message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t}\n}\n\nexport {\n\tlowstorage_ERROR_CODES,\n\tlowstorageError,\n\tCollectionNotFoundError,\n\tSchemaValidationError,\n\tDocumentValidationError,\n\tS3OperationError,\n};\n", "'use strict';\n\nimport { randomUUID } from 'node:crypto';\n\nconst matchesQuery = (document, query) => {\n\treturn Object.keys(query).every((key) => document[key] === query[key]);\n};\n\nconst generateUUID = async () => {\n\tif (typeof randomUUID !== 'undefined' && typeof randomUUID === 'function') {\n\t\treturn randomUUID();\n\t}\n\tif (typeof crypto !== 'undefined' && typeof crypto === 'object' && typeof crypto.randomUUID === 'function') {\n\t\treturn crypto.randomUUID();\n\t}\n\treturn 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n\t\tvar r = (Math.random() * 16) | 0,\n\t\t\tv = c === 'x' ? r : (r & 0x3) | 0x8;\n\t\treturn v.toString(16);\n\t});\n};\n\nconst _getAvroType = (value, name = 'SubAutoGenerated') => {\n\tswitch (typeof value) {\n\t\tcase 'string':\n\t\t\tif (_isUUID(value)) {\n\t\t\t\treturn {\n\t\t\t\t\ttype: 'string',\n\t\t\t\t\tname: '_id',\n\t\t\t\t\tsize: 16,\n\t\t\t\t\tlogicalType: 'UUID',\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn 'string';\n\t\tcase 'number':\n\t\t\treturn Number.isInteger(value) ? 'int' : 'float';\n\t\tcase 'boolean':\n\t\t\treturn 'boolean';\n\t\tcase 'object':\n\t\t\tif (value === null) return 'null';\n\t\t\tif (Array.isArray(value)) return { type: 'array', items: _getAvroType(value[0]) };\n\t\t\treturn inferAvroType(value, name);\n\t\tdefault:\n\t\t\treturn 'string'; // Default to string for unknown types\n\t}\n};\n\nconst ensureIdFieldInSchema = (schema) => {\n\tconst idField = {\n\t\tname: '_id',\n\t\ttype: 'string',\n\t\tsize: 16,\n\t\tlogicalType: 'UUID',\n\t};\n\n\tif (schema.type === 'record') {\n\t\tconst hasIdField = schema.fields.some((field) => field.name === '_id');\n\t\tif (!hasIdField) {\n\t\t\tschema.fields.unshift(idField);\n\t\t}\n\t} else if (schema.type === 'array' && schema.items.type === 'record') {\n\t\tconst hasIdField = schema.items.fields.some((field) => field.name === '_id');\n\t\tif (!hasIdField) {\n\t\t\tschema.items.fields.unshift(idField);\n\t\t}\n\t}\n\treturn schema;\n};\n\nconst inferAvroType = (data, typeName = 'AutoGenerated') => {\n\tif (Array.isArray(data)) {\n\t\tdata = data[0];\n\t}\n\tconst fields = Object.entries(data).map(([name, value]) => {\n\t\treturn { name, type: _getAvroType(value, `${typeName}.${name}`) };\n\t});\n\n\tconst schema = {\n\t\ttype: 'record',\n\t\tname: typeName,\n\t\tfields: fields,\n\t};\n\n\t// Ensure the _id field is present in the schema\n\treturn ensureIdFieldInSchema(schema);\n};\n\nconst _isUUID = (str) => {\n\tconst uuidV4Regex = /^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i;\n\treturn uuidV4Regex.test(str);\n};\n\nexport { matchesQuery, generateUUID, inferAvroType, ensureIdFieldInSchema };\n"], - "mappings": "AAGA,IAAMA,EAAgB,mBAChBC,EAAmB,eACnBC,EAAa,KACbC,GAAY,IACZC,EAAmB,mBACnBC,GAA8B,2BAC9BC,EAAmB,kBACnBC,EAAoB,mBAEpBC,GAA0B,CAAC,cAAe,kBAAmB,eAAgB,UAAU,EAIvFC,EAA4B,uBAC5BC,GAAkB,aAClBC,GAAc,OACdC,GAAuB,gBACvBC,EAAsB,eACtBC,EAAwB,iBACxBC,EAAc,OACdC,EAAuB,gBAGvBC,EAAe,yBACfC,GAA4B,GAAGD,CAAY,yCAC3CE,GAA4B,GAAGF,CAAY,6CAC3CG,GAA0B,GAAGH,CAAY,sCACzCI,GAA6B,GAAGJ,CAAY,wCAC5CK,EAAqB,GAAGL,CAAY,iCACpCM,EAA2B,GAAGN,CAAY,sCAC1CO,GAAuB,GAAGP,CAAY,kCACtCQ,GAAqB,GAAGR,CAAY,8DACpCS,EAA6B,GAAGT,CAAY,kCAE5CU,GAAoB,GAAGV,CAAY,0BACnCW,GAAsB,GAAGX,CAAY,qCACrCY,GAA2B,GAAGZ,CAAY,6BAwE5Ca,GAAc,OAAO,aAAe,KAAM,QAAO,aAAa,GAAG,WACjEC,GAAc,OAAO,aAAe,KAAM,QAAO,aAAa,GAAG,WAEjE,OAAOD,GAAgB,KAAe,OAAOC,GAAgB,KAC/D,QAAQ,MACN,iKAAiK,EAIrK,IAAMC,GAA0C,CAC9C,SAAU,EAAA,EAGNC,GAAeC,GAAsB,IAAIA,EAAE,WAAW,CAAC,EAAE,SAAS,EAAE,EAAE,YAAW,CAAE,GAEnFC,EAAaC,GACV,mBAAmBA,CAAM,EAAE,QAAQ,WAAYH,EAAW,EAG7DI,EAAqBC,GAClBH,EAAUG,CAAM,EAAE,QAAQ,OAAQ,GAAG,EA2BxCC,GAAN,KAAQ,CAyBN,YAAY,CACV,YAAAC,EACA,gBAAAC,EACA,SAAAC,EACA,WAAAC,EACA,OAAAC,EAAS,OACT,sBAAAC,EAAwB,QACxB,oBAAAC,EAAsB,OACtB,OAAAC,EAAS,MAAS,EACT,CA6HX,KAAA,cAAgB,IAAM,KAAK,WAC3B,KAAA,cAAiBJ,GAAsB,CACrC,KAAK,WAAaA,CACpB,EACA,KAAA,UAAY,IAAM,KAAK,OACvB,KAAA,UAAaC,GAAkB,CAC7B,KAAK,OAASA,CAChB,EACA,KAAA,YAAc,IAAM,KAAK,SACzB,KAAA,YAAeF,GAAoB,CACjC,KAAK,SAAWA,CAClB,EACA,KAAA,yBAA2B,IAAM,KAAK,sBACtC,KAAA,yBAA4BG,GAAiC,CAC3D,KAAK,sBAAwBA,CAC/B,EACA,KAAA,aAAgBG,GAAyBC,EAAaD,CAAI,EAE1D,KAAA,SAAW,KAAO,CAChB,YAAa,KAAK,YAClB,gBAAiB,KAAK,gBACtB,OAAQ,KAAK,OACb,OAAQ,KAAK,WACb,SAAU,KAAK,SACf,sBAAuB,KAAK,sBAC5B,oBAAqB,KAAK,oBAC1B,OAAQ,KAAK,MAAA,GAEf,KAAA,SAAYE,GAAmB,CAC7B,KAAK,2BAA2BA,EAAM,YAAaA,EAAM,gBAAiBA,EAAM,WAAYA,EAAM,QAAQ,EAC1G,KAAK,YAAcA,EAAM,YACzB,KAAK,gBAAkBA,EAAM,gBAC7B,KAAK,OAASA,EAAM,QAAU,OAC9B,KAAK,WAAaA,EAAM,WACxB,KAAK,SAAWA,EAAM,SACtB,KAAK,sBAAwBA,EAAM,uBAAyB,QAC5D,KAAK,oBAAsBA,EAAM,oBACjC,KAAK,OAASA,EAAM,MACtB,EAlKE,KAAK,2BAA2BV,EAAaC,EAAiBC,EAAUC,CAAU,EAClF,KAAK,YAAcH,EACnB,KAAK,gBAAkBC,EACvB,KAAK,SAAWC,EAChB,KAAK,WAAaC,EAClB,KAAK,OAASC,EACd,KAAK,sBAAwBC,EAC7B,KAAK,oBAAsBC,EAC3B,KAAK,OAASC,CAChB,CAEQ,2BACNP,EACAC,EACAC,EACAC,EAAkB,CAElB,GAAI,OAAOH,GAAgB,UAAYA,EAAY,KAAI,EAAG,SAAW,EACnE,MAAM,IAAI,UAAUtB,EAAyB,EAC/C,GAAI,OAAOuB,GAAoB,UAAYA,EAAgB,KAAI,EAAG,SAAW,EAC3E,MAAM,IAAI,UAAUtB,EAAyB,EAC/C,GAAI,OAAOuB,GAAa,UAAYA,EAAS,KAAI,EAAG,SAAW,EAAG,MAAM,IAAI,UAAUtB,EAAuB,EAC7G,GAAI,OAAOuB,GAAe,UAAYA,EAAW,KAAI,EAAG,SAAW,EACjE,MAAM,IAAI,UAAUtB,EAA0B,CAClD,CAEQ,qBAAqB8B,EAAc,CACzC,GAAIA,IAAW,OAASA,IAAW,OACjC,MAAA,KAAK,KAAK,QAAS,GAAGlC,CAAY,mCAAmC,EAC/D,IAAI,MAAM,mCAAmC,CAEvD,CAEQ,UAAUmC,EAAW,CAC3B,GAAI,OAAOA,GAAQ,UAAYA,EAAI,KAAI,EAAG,SAAW,EACnD,MAAA,KAAK,KAAK,QAAS9B,CAAkB,EAC/B,IAAI,UAAUA,CAAkB,CAE1C,CAEQ,gBAAgB+B,EAAiB,CACvC,GAAI,OAAOA,GAAc,UAAYA,EAAU,KAAI,EAAG,SAAW,EAC/D,MAAA,KAAK,KAAK,QAASxB,EAAwB,EACrC,IAAI,UAAUA,EAAwB,CAEhD,CAEQ,aAAayB,EAAc,CACjC,GAAI,OAAOA,GAAW,SACpB,MAAA,KAAK,KAAK,QAAS3B,EAAiB,EAC9B,IAAI,UAAUA,EAAiB,CAEzC,CAEQ,cAAc4B,EAAe,CACnC,GAAI,OAAOA,GAAY,UAAYA,GAAW,EAC5C,MAAA,KAAK,KAAK,QAAS3B,EAAmB,EAChC,IAAI,UAAUA,EAAmB,CAE3C,CAEQ,WAAW4B,EAAyB,CAC1C,GAAI,OAAOA,GAAS,SAClB,MAAA,KAAK,KAAK,QAAS,GAAGvC,CAAY,wBAAwB,EACpD,IAAI,UAAU,GAAGA,CAAY,wBAAwB,CAE/D,CASQ,KACNwC,EACAC,EACAC,EAA+C,CAAA,EAAE,CAEjD,GAAI,KAAK,QAAU,OAAO,KAAK,OAAOF,CAAK,GAAM,WAAY,CAE3D,IAAMG,EAAYC,GACZ,OAAOA,GAAQ,UAAYA,IAAQ,KAC9BA,EAEF,OAAO,KAAKA,CAAG,EAAE,OACtB,CAACC,EAAUV,KACL5C,GAAwB,SAAS4C,EAAI,YAAW,CAAE,EACpDU,EAAIV,CAAG,EAAI,aACF,OAAOS,EAAIT,CAAG,GAAM,UAAYS,EAAIT,CAAG,IAAM,KACtDU,EAAIV,CAAG,EAAIQ,EAASC,EAAIT,CAAG,CAAC,EAE5BU,EAAIV,CAAG,EAAIS,EAAIT,CAAG,EAEbU,GAET,MAAM,QAAQD,CAAG,EAAI,CAAA,EAAK,CAAA,CAAE,EAK1BE,EAAgBH,EAASD,CAAc,EAEvCK,EAAW,CACf,UAAW,IAAI,KAAI,EAAG,YAAW,EACjC,MAAAP,EACA,QAAAC,EACA,GAAGK,EAEH,QAASH,EAAS,CAChB,WAAY,KAAK,WACjB,OAAQ,KAAK,OACb,SAAU,KAAK,SAEf,YAAa,KAAK,YAAc,GAAG,KAAK,YAAY,UAAU,EAAG,CAAC,CAAC,MAAQ,MAAA,CAC5E,CAAA,EAIH,KAAK,OAAOH,CAAK,EAAEO,CAAQ,CAC7B,CACF,CAgDA,MAAM,iBAAiBZ,EAAW,CAChC,KAAK,UAAUA,CAAG,EAClB,IAAMa,EAAU,CACd,CAACxD,CAAyB,EAAGL,CAAAA,EAEzB8D,EAAa7B,EAAkBe,CAAG,EAClC,CAAE,IAAAe,EAAK,QAASC,CAAa,EAAK,MAAM,KAAK,MAAM,OAAQF,EAAY,CAAA,EAAID,EAAS,EAAE,EAEtFI,GADM,MAAM,KAAK,aAAaF,EAAK,OAAQC,CAAa,GACpC,QAAQ,IAAItD,CAAqB,EAC3D,OAAOuD,EAAgB,SAASA,EAAe,EAAE,EAAI,CACvD,CAMA,MAAM,cAAY,CAChB,IAAMJ,EAAU,CACd,CAACxD,CAAyB,EAAGL,CAAAA,EAEzB,CAAE,IAAA+D,EAAK,QAASC,CAAa,EAAK,MAAM,KAAK,MAAM,OAAQ,GAAI,CAAA,EAAIH,EAAS,EAAE,EAC9EK,EAAM,MAAM,KAAK,aAAaH,EAAK,OAAQC,CAAa,EAC9D,MAAI,CAAA,EAAAE,EAAI,IAAMA,EAAI,SAAW,IAI/B,CA+BA,MAAM,WAAWlB,EAAaI,EAA4B,CAAA,EAAE,CAC1D,KAAK,UAAUJ,CAAG,EAClB,GAAM,CAAE,aAAAmB,EAAc,mBAAAC,CAAkB,EAAK,KAAK,iBAAiBhB,CAAI,EACjES,EAAU,CAAE,CAACxD,CAAyB,EAAGL,EAAkB,GAAGoE,CAAkB,EAChFN,EAAa7B,EAAkBe,CAAG,EAClC,CAAE,IAAAe,EAAK,QAASC,CAAa,EAAK,MAAM,KAAK,MAAM,OAAQF,EAAYK,EAAcN,EAAS,EAAE,EACtG,GAAI,CACF,IAAMK,EAAM,MAAM,KAAK,aAAaH,EAAK,OAAQC,EAAe,GAAI,CAAC,IAAK,IAAK,IAAK,GAAG,CAAC,EACxF,OAAIE,EAAI,SAAW,IACV,GAELA,EAAI,SAAW,KAAOA,EAAI,SAAW,IAChC,KAELA,EAAI,IAAMA,EAAI,SAAW,IAAY,IACpC,KAAK,qBAAqBA,CAAG,EAC3B,GACT,OAASG,EAAgB,CACvB,IAAMC,EAAeD,aAAiB,MAAQA,EAAM,QAAU,OAAOA,CAAK,EAC1E,MAAA,KAAK,KAAK,QAAS,GAAGxD,CAAY,mCAAmCyD,CAAY,EAAE,EAC7E,IAAI,MAAM,GAAGzD,CAAY,mCAAmCyD,CAAY,EAAE,CAClF,CACF,CACQ,MAAM,MACZvB,EACAwB,EACAC,EACAX,EACAY,EAAqB,CAErB,IAAMC,EAAW,IAAI,KAAI,EAAG,YAAW,EAAG,QAAQ,gBAAiB,EAAE,EAC/DX,EACJ,OAAOQ,GAAY,UAAYA,EAAQ,OAAS,EAAI,IAAI,IAAIA,EAAS,KAAK,QAAQ,EAAI,IAAI,IAAI,KAAK,QAAQ,EAC7GR,EAAI,SAAW,IAAI,UAAU,KAAK,UAAU,CAAC,GAAGA,EAAI,QAAQ,GAC5DF,EAAQxD,CAAyB,EAAIoE,EAAO,MAAME,EAAMF,CAAI,EAAIzE,EAChE6D,EAAQvD,EAAe,EAAIoE,EAC3Bb,EAAQtD,EAAW,EAAIwD,EAAI,KAC3B,IAAMa,EAAmB,KAAK,uBAAuBf,CAAO,EACtDG,EAAgB,OAAO,KAAKH,CAAO,EACtC,IAAIb,GAAOA,EAAI,YAAW,CAAE,EAC5B,KAAI,EACJ,KAAK,GAAG,EAEL6B,EAAmB,MAAM,KAAK,uBAClC9B,EACAgB,EACAS,EACAI,EACAZ,EACAS,CAAI,EAEAK,EAAe,MAAM,KAAK,mBAAmBJ,EAAUG,CAAgB,EACvEE,EAAY,MAAM,KAAK,oBAAoBL,EAAUI,CAAY,EACjEE,EAAsB,KAAK,0BAA0BN,EAAUV,EAAee,CAAS,EAC7F,OAAAlB,EAAQrD,EAAoB,EAAIwE,EACzB,CAAE,IAAKjB,EAAI,SAAQ,EAAI,QAAAF,CAAO,CACvC,CAEQ,uBAAuBA,EAAwC,CACrE,OAAO,OAAO,QAAQA,CAAO,EAC1B,IAAI,CAAC,CAACb,EAAKiC,CAAK,IAAM,GAAGjC,EAAI,YAAW,CAAE,IAAI,OAAOiC,CAAK,EAAE,KAAI,CAAE,EAAE,EACpE,KAAI,EACJ,KAAK;CAAI,CACd,CAEA,MAAM,uBACJlC,EACAgB,EACAS,EACAI,EACAZ,EACAS,EAAqB,CAErB,MAAO,CACL1B,EACAgB,EAAI,SACJ,KAAK,2BAA2BS,CAAK,EACrC,GAAGI,CAAgB;EACnBZ,EACAS,EAAO,MAAME,EAAMF,CAAI,EAAIzE,CAAAA,EAC3B,KAAK;CAAI,CACb,CAEA,MAAM,mBAAmB0E,EAAkBG,EAAwB,CACjE,IAAMK,EAAkB,CAACR,EAAS,MAAM,EAAG,CAAC,EAAG,KAAK,OAAQ5E,EAAYD,CAAgB,EAAE,KAAK,GAAG,EAClG,MAAO,CAACD,EAAe8E,EAAUQ,EAAiB,MAAMP,EAAME,CAAgB,CAAC,EAAE,KAAK;CAAI,CAC5F,CAEA,MAAM,oBAAoBH,EAAkBI,EAAoB,CAC9D,IAAMK,EAAa,MAAM,KAAK,iBAAiBT,EAAS,MAAM,EAAG,CAAC,CAAC,EACnE,OAAOU,EAAMD,EAAYL,EAAc,KAAK,CAC9C,CAEQ,0BAA0BJ,EAAkBV,EAAuBe,EAAiB,CAC1F,IAAMG,EAAkB,CAACR,EAAS,MAAM,EAAG,CAAC,EAAG,KAAK,OAAQ5E,EAAYD,CAAgB,EAAE,KAAK,GAAG,EAClG,MAAO,CACL,GAAGD,CAAa,eAAe,KAAK,WAAW,IAAIsF,CAAe,GAClE,iBAAiBlB,CAAa,GAC9B,aAAae,CAAS,EAAA,EACtB,KAAK,IAAI,CACb,CAEQ,iBAAiB3B,EAAyB,CAIhD,IAAMe,EAAoC,CAAA,EACpCC,EAA6C,CAAA,EAC7CiB,EAAY,CAAC,WAAY,gBAAiB,oBAAqB,qBAAqB,EAE1F,OAAW,CAACrC,EAAKiC,CAAK,IAAK,OAAO,QAAQ7B,CAAI,EACxCiC,EAAU,SAASrC,CAAG,EACxBoB,EAAmBpB,CAAG,EAAIiC,EAE1Bd,EAAanB,CAAG,EAAIiC,EAIxB,MAAO,CAAE,aAAAd,EAAc,mBAAAC,CAAkB,CAC3C,CAWA,MAAM,KACJnB,EAAoB,IACpBC,EAAiB,GACjBC,EAAkB,IAClBJ,EAAqB,MACrBK,EAAe,CAAA,EAAE,CAEjB,KAAK,gBAAgBH,CAAS,EAC9B,KAAK,aAAaC,CAAM,EACxB,KAAK,cAAcC,CAAO,EAC1B,KAAK,qBAAqBJ,CAAM,EAChC,KAAK,WAAWK,CAAI,EACpB,KAAK,KAAK,OAAQ,sBAAsBF,CAAM,EAAE,EAEhD,IAAMsB,EAAQ,CACZ,YAAazE,GACb,WAAY,OAAOoD,CAAO,EAC1B,GAAGC,CAAAA,EAEDF,EAAO,OAAS,IAClBsB,EAAM,OAAYtB,GAEpB,IAAMW,EAAU,CACd,CAACpD,CAAmB,EAAGN,EACvB,CAACE,CAAyB,EAAGL,CAAAA,EAEzB8D,EAAab,IAAc,IAAMA,EAAYlB,EAAUkB,CAAS,EAChE,CAAE,IAAAc,EAAK,QAASC,CAAa,EAAK,MAAM,KAAK,MAAM,MAAOF,EAAYU,EAAOX,EAAS,EAAE,EACxFyB,EAAe,GAAGvB,CAAG,IAAI,IAAI,gBAAgBS,CAAK,CAAC,GACnDN,EAAM,MAAM,KAAK,aAAaoB,EAAc,MAAOtB,CAAa,EAChEuB,EAAe,MAAMrB,EAAI,KAAI,EAEnC,GAAInB,IAAW,OAAQ,CACrB,IAAMkB,EAAgBC,EAAI,QAAQ,IAAIxD,CAAqB,EACrD8E,EAAetB,EAAI,QAAQ,IAAItD,CAAoB,EACnDgC,GAAOsB,EAAI,QAAQ,IAAIvD,CAAW,EAExC,MAAO,CACL,KAAMsD,EAAgB,CAACA,EAAgB,OACvC,MAAOuB,EAAe,IAAI,KAAKA,CAAY,EAAI,OAC/C,KAAM5C,IAAQ,MAAA,CAElB,CAEA,IAAM6C,EAAOC,EAAUH,CAAY,EAC7BI,EAASF,EAAK,kBAAoBA,EAAK,OAASA,EACtD,OAAOE,EAAO,UAAYA,CAC5B,CAWA,MAAM,qBACJ1C,EAAoB,IACpBC,EAAiB,GACjBH,EAAqB,MACrBK,EAAe,CAAA,EAAE,CAAA,IAAAwC,EAAAC,EAAAC,EAEjB,KAAK,gBAAgB7C,CAAS,EAC9B,KAAK,aAAaC,CAAM,EACxB,KAAK,qBAAqBH,CAAM,EAChC,KAAK,WAAWK,CAAI,EACpB,KAAK,KAAK,OAAQ,gCAAgCF,CAAM,EAAE,EAE1D,IAAMsB,EAAQ,CACZ,QAAS,GACT,GAAGpB,CAAAA,EAECS,EAAU,CACd,CAACpD,CAAmB,EAAGN,EACvB,CAACE,CAAyB,EAAGL,CAAAA,EAEzB8D,EAAab,IAAc,IAAMA,EAAYlB,EAAUkB,CAAS,EAChE,CAAE,IAAAc,EAAK,QAASC,CAAa,EAAK,MAAM,KAAK,MAAM,MAAOF,EAAYU,EAAOX,EAAS,EAAE,EACxFyB,EAAe,GAAGvB,CAAG,IAAI,IAAI,gBAAgBS,CAAK,CAAC,GACnDN,EAAM,MAAM,KAAK,aAAaoB,EAAc,MAAOtB,CAAa,EAChEuB,EAAe,MAAMrB,EAAI,KAAI,EAEnC,GAAInB,IAAW,OACb,MAAO,CACL,KAAM,GAAEgD,EAAA7B,EAAI,QAAQ,IAAIxD,CAAqB,KAAC,MAAAqF,IAAA,OAAAA,EAAI,KAClD,MAAO,IAAI,MAAKC,EAAA9B,EAAI,QAAQ,IAAItD,CAAoB,KAAC,MAAAoF,IAAA,OAAAA,EAAI,EAAE,EAC3D,MAAMC,EAAA/B,EAAI,QAAQ,IAAIvD,CAAW,KAAC,MAAAsF,IAAA,OAAAA,EAAI,EAAA,EAI1C,IAAMR,EAAOC,EAAUH,CAAY,EAC7BI,EAASF,EAAK,4BAA8BA,EAAK,OAASA,EAChE,OAAOE,EAAO,SAAWA,CAC3B,CAQA,MAAM,IAAI3C,EAAaI,EAA4B,CAAA,EAAE,CACnD,KAAK,UAAUJ,CAAG,EAClB,KAAK,KAAK,OAAQ,kBAAkBA,CAAG,EAAE,EACzC,GAAM,CAAE,aAAAmB,EAAc,mBAAAC,CAAkB,EAAK,KAAK,iBAAiBhB,CAAI,EACjES,EAAU,CACd,CAACpD,CAAmB,EAAGN,EACvB,CAACE,CAAyB,EAAGL,EAC7B,GAAGoE,CAAAA,EAECN,EAAa7B,EAAkBe,CAAG,EAClC,CAAE,IAAAe,EAAK,QAASC,CAAa,EAAK,MAAM,KAAK,MAAM,MAAOF,EAAYK,EAAcN,EAAS,EAAE,EAC/FK,EAAM,MAAM,KAAK,aAAaH,EAAK,MAAOC,EAAe,GAAI,CAAC,IAAK,IAAK,IAAK,GAAG,CAAC,EACvF,GAAIE,EAAI,SAAW,KAAOA,EAAI,SAAW,KAAOA,EAAI,SAAW,IAC7D,OAAA,KAAK,KAAK,QAAS,iCAAiCA,EAAI,MAAM,EAAE,EACzD,KAET,GAAI,CAACA,EAAI,GACP,MAAA,KAAK,KAAK,QAAS,iCAAiCA,EAAI,MAAM,EAAE,EAC1D,IAAI,MAAM,iCAAiCA,EAAI,MAAM,EAAE,EAE/D,OAAOA,EAAI,KAAI,CACjB,CAQA,MAAM,kBACJlB,EACAI,EAA4B,CAAA,EAAE,CAE9B,KAAK,UAAUJ,CAAG,EAClB,KAAK,KAAK,OAAQ,kBAAkBA,CAAG,EAAE,EACzC,GAAM,CAAE,aAAAmB,EAAc,mBAAAC,CAAkB,EAAK,KAAK,iBAAiBhB,CAAI,EACjES,EAAU,CACd,CAACpD,CAAmB,EAAGN,EACvB,CAACE,CAAyB,EAAGL,EAC7B,GAAGoE,CAAAA,EAECN,EAAa7B,EAAkBe,CAAG,EAClC,CAAE,IAAAe,EAAK,QAASC,CAAa,EAAK,MAAM,KAAK,MAAM,MAAOF,EAAYK,EAAcN,EAAS,EAAE,EACrG,GAAI,CACF,IAAMK,EAAM,MAAM,KAAK,aAAaH,EAAK,MAAOC,EAAe,GAAI,CAAC,IAAK,IAAK,IAAK,GAAG,CAAC,EACvF,GAAIE,EAAI,SAAW,KAAOA,EAAI,SAAW,KAAOA,EAAI,SAAW,IAC7D,OAAA,KAAK,KAAK,QAAS,iCAAiCA,EAAI,MAAM,EAAE,EACzD,CAAE,KAAM,KAAM,KAAM,IAAI,EAEjC,GAAI,CAACA,EAAI,GACP,MAAA,KAAK,KAAK,QAAS,iCAAiCA,EAAI,MAAM,EAAE,EAC1D,IAAI,MAAM,iCAAiCA,EAAI,MAAM,EAAE,EAG/D,IAAMtB,EAAOsB,EAAI,QAAQ,IAAI,MAAM,EACnC,GAAI,CAACtB,EACH,MAAM,IAAI,MAAM,oCAAoC,EAEtD,IAAM6C,EAAO,MAAMvB,EAAI,KAAI,EAC3B,MAAO,CAAE,KAAMrB,EAAaD,CAAI,EAAG,KAAA6C,CAAI,CACzC,OAASpB,EAAO,CACd,MAAA,KAAK,KAAK,QAAS,wBAAwBrB,CAAG,eAAeqB,CAAK,EAAE,EAC9DA,CACR,CACF,CAQA,MAAM,QAAQrB,EAAaI,EAA4B,CAAA,EAAE,CACvD,KAAK,UAAUJ,CAAG,EAClB,KAAK,KAAK,OAAQ,uBAAuBA,CAAG,EAAE,EAC9C,GAAM,CAAE,aAAAmB,EAAc,mBAAAC,CAAkB,EAAK,KAAK,iBAAiBhB,CAAI,EACjES,EAAU,CACd,CAACpD,CAAmB,EAAGN,EACvB,CAACE,CAAyB,EAAGL,EAC7B,GAAGoE,CAAAA,EAECN,EAAa7B,EAAkBe,CAAG,EAClC,CAAE,IAAAe,EAAK,QAASC,CAAa,EAAK,MAAM,KAAK,MAAM,OAAQF,EAAYK,EAAcN,EAAS,EAAE,EAEhGK,EAAM,MAAM,KAAK,aAAaH,EAAK,OAAQC,EAAe,GAAI,CAAC,IAAK,IAAK,GAAG,CAAC,EAGnF,GAFA,KAAK,KAAK,OAAQ,oBAAqBE,EAAI,OAAQA,EAAI,UAAW,EAAE,EAEhEA,EAAI,SAAW,KAAOA,EAAI,SAAW,IACvC,OAAO,KAGT,IAAMtB,EAAOsB,EAAI,QAAQ,IAAI,MAAM,EACnC,GAAI,CAACtB,EACH,MAAA,KAAK,KAAK,QAAS,oCAAoC,EACjD,IAAI,MAAM,oCAAoC,EAEtD,OAAOC,EAAaD,CAAI,CAC1B,CAWA,MAAM,YACJI,EACAkD,EAAqB,GACrBC,EAAoB,EACpBC,EAAkB,KAAK,sBACvBhD,EAA4B,CAAA,EAAE,CAE9B,KAAK,UAAUJ,CAAG,EAClB,GAAM,CAAE,aAAAmB,EAAc,mBAAAC,CAAkB,EAAK,KAAK,iBAAiB,CAAE,GAAGhB,CAAI,CAAE,EACxES,EAAU,CACd,CAACpD,CAAmB,EAAGN,EACvB,CAACE,CAAyB,EAAGL,EAC7B,GAAIkG,EAAY,CAAA,EAAK,CAAE,MAAO,SAASC,CAAS,IAAIC,EAAU,CAAC,EAAE,EACjE,GAAGhC,CAAAA,EAECN,EAAa7B,EAAkBe,CAAG,EAClC,CAAE,IAAAe,EAAK,QAASC,CAAa,EAAK,MAAM,KAAK,MAAM,MAAOF,EAAYK,EAAcN,EAAS,EAAE,EAC/FyB,EAAe,GAAGvB,CAAG,IAAI,IAAI,gBAAgBI,CAAY,CAAC,GAEhE,OAAO,KAAK,aAAamB,EAAc,MAAOtB,CAAa,CAC7D,CASA,MAAM,IAAIhB,EAAayC,EAAqB,CAE1C,GADA,KAAK,UAAUzC,CAAG,EACd,EAAEyC,aAAgB,QAAU,OAAOA,GAAS,UAC9C,MAAA,KAAK,KAAK,QAASnE,CAA0B,EACvC,IAAI,UAAUA,CAA0B,EAGhD,KAAK,KAAK,OAAQ,oBAAoB0B,CAAG,EAAE,EAC3C,IAAMiB,EAAgB,OAAOwB,GAAS,SAAW,OAAO,WAAWA,CAAI,EAAIA,EAAK,OAC1E5B,EAAU,CACd,CAACnD,CAAqB,EAAGuD,CAAAA,EAErBH,EAAa7B,EAAkBe,CAAG,EAClC,CAAE,IAAAe,EAAK,QAASC,CAAa,EAAK,MAAM,KAAK,MAAM,MAAOF,EAAY,CAAA,EAAID,EAAS4B,CAAI,EAE7F,OADY,MAAM,KAAK,aAAa1B,EAAK,MAAOC,EAAeyB,CAAI,CAErE,CAUA,MAAM,qBAAqBzC,EAAaqD,EAAmBpG,GAA2B,CAEpF,GADA,KAAK,UAAU+C,CAAG,EACd,OAAOqD,GAAa,SACtB,MAAA,KAAK,KAAK,QAAS,GAAGxF,CAAY,2BAA2B,EACvD,IAAI,UAAU,GAAGA,CAAY,2BAA2B,EAEhE,KAAK,KAAK,OAAQ,0CAA0CmC,CAAG,EAAE,EACjE,IAAMwB,EAAQ,CAAE,QAAS,EAAE,EACrBX,EAAU,CACd,CAACpD,CAAmB,EAAG4F,EACvB,CAAChG,CAAyB,EAAGL,CAAAA,EAGzB8D,EAAa7B,EAAkBe,CAAG,EAClC,CAAE,IAAAe,EAAK,QAASC,CAAa,EAAK,MAAM,KAAK,MAAM,OAAQF,EAAYU,EAAOX,EAAS,EAAE,EACzFyB,EAAe,GAAGvB,CAAG,IAAI,IAAI,gBAAgBS,CAAK,CAAC,GAGnDe,EAAe,MADT,MAAM,KAAK,aAAaD,EAAc,OAAQtB,CAAa,GACxC,KAAI,EAC7BsC,EAAiBZ,EAAUH,CAAY,EAE7C,GACE,OAAOe,GAAmB,UAC1BA,IAAmB,MACnB,UAAWA,GACX,OAAOA,EAAe,OAAU,UAChCA,EAAe,QAAU,MACzB,YAAaA,EAAe,MAC5B,CACA,IAAMhC,EAAe,OAAOgC,EAAe,MAAM,OAAO,EACxD,MAAA,KAAK,KAAK,QAAS,GAAGzF,CAAY,qCAAqCyD,CAAY,EAAE,EAC/E,IAAI,MAAM,GAAGzD,CAAY,qCAAqCyD,CAAY,EAAE,CACpF,CAEA,GAAI,OAAOgC,GAAmB,UAAYA,IAAmB,KAAM,CACjE,GAAI,CAACA,EAAe,+BAAiC,CAACA,EAAe,8BAA8B,SACjG,MAAA,KAAK,KAAK,QAAS,GAAGzF,CAAY,4DAA4D,EACxF,IAAI,MAAM,GAAGA,CAAY,kEAAkE,EAGnG,OAAOyF,EAAe,8BAA8B,QACtD,KACE,OAAA,KAAK,KAAK,QAAS,GAAGzF,CAAY,+DAA+D,EAC3F,IAAI,MAAM,GAAGA,CAAY,+DAA+D,CAElG,CAYA,MAAM,WACJmC,EACAyC,EACAc,EACAC,EACApD,EAAe,CAAA,EAAE,CAEjB,KAAK,0BAA0BJ,EAAKyC,EAAMc,EAAUC,EAAYpD,CAAI,EACpE,IAAMoB,EAAQ,CAAE,SAAA+B,EAAU,WAAAC,EAAY,GAAGpD,CAAI,EACvCS,EAAU,CACd,CAACnD,CAAqB,EAAG+E,EAAK,MAAA,EAG1B3B,EAAa7B,EAAkBe,CAAG,EAClC,CAAE,IAAAe,EAAK,QAASC,CAAa,EAAK,MAAM,KAAK,MAAM,MAAOF,EAAYU,EAAOX,EAAS4B,CAAI,EAC1FH,EAAe,GAAGvB,CAAG,IAAI,IAAI,gBAAgBS,CAAK,CAAC,GAEnDN,EAAM,MAAM,KAAK,aAAaoB,EAAc,MAAOtB,EAAeyB,CAAI,EACtEgB,EAAO5D,EAAaqB,EAAI,QAAQ,IAAI,MAAM,GAAK,EAAE,EACvD,MAAO,CAAE,WAAAsC,EAAY,KAAAC,CAAI,CAC3B,CAEQ,0BACNzD,EACAyC,EACAc,EACAC,EACApD,EAAY,CAGZ,GADA,KAAK,UAAUJ,CAAG,EACd,EAAEyC,aAAgB,QAAU,OAAOA,GAAS,UAC9C,MAAA,KAAK,KAAK,QAASnE,CAA0B,EACvC,IAAI,UAAUA,CAA0B,EAEhD,GAAI,OAAOiF,GAAa,UAAYA,EAAS,KAAI,EAAG,SAAW,EAC7D,MAAA,KAAK,KAAK,QAASpF,CAAwB,EACrC,IAAI,UAAUA,CAAwB,EAE9C,GAAI,CAAC,OAAO,UAAUqF,CAAU,GAAKA,GAAc,EACjD,MAAA,KAAK,KAAK,QAAS,GAAG3F,CAAY,uCAAuC,EACnE,IAAI,UAAU,GAAGA,CAAY,uCAAuC,EAE5E,KAAK,WAAWuC,CAAI,CACtB,CAWA,MAAM,wBACJJ,EACAuD,EACAG,EAAwB,CAGxB,GADA,KAAK,UAAU1D,CAAG,EACd,OAAOuD,GAAa,UAAYA,EAAS,KAAI,EAAG,SAAW,EAC7D,MAAA,KAAK,KAAK,QAASpF,CAAwB,EACrC,IAAI,UAAUA,CAAwB,EAE9C,GAAI,CAAC,MAAM,QAAQuF,CAAK,GAAKA,EAAM,SAAW,EAC5C,MAAA,KAAK,KAAK,QAAStF,EAAoB,EACjC,IAAI,UAAUA,EAAoB,EAE1C,GAAI,CAACsF,EAAM,MAAMC,GAAQ,OAAOA,EAAK,YAAe,UAAY,OAAOA,EAAK,MAAS,QAAQ,EAC3F,MAAA,KAAK,KAAK,QAAStF,EAAkB,EAC/B,IAAI,UAAUA,EAAkB,EAExC,KAAK,KAAK,OAAQ,6BAA6BkF,CAAQ,eAAevD,CAAG,EAAE,EAC3E,IAAMwB,EAAQ,CAAE,SAAA+B,CAAQ,EAClBK,EAAU,KAAK,iCAAiCF,CAAK,EACrD7C,EAAU,CACd,CAACpD,CAAmB,EAAGP,EACvB,CAACQ,CAAqB,EAAG,OAAO,WAAWkG,CAAO,EAAE,SAAQ,EAC5D,CAACvG,CAAyB,EAAG,MAAMsE,EAAMiC,CAAO,CAAA,EAE5C9C,EAAa7B,EAAkBe,CAAG,EAClC,CAAE,IAAAe,EAAK,QAASC,CAAa,EAAK,MAAM,KAAK,MAAM,OAAQF,EAAYU,EAAOX,EAAS+C,CAAO,EAC9FtB,EAAe,GAAGvB,CAAG,IAAI,IAAI,gBAAgBS,CAAK,CAAC,GAGnDe,EAAe,MADT,MAAM,KAAK,aAAaD,EAAc,OAAQtB,EAAe4C,CAAO,GACjD,KAAI,EAC7BN,EAAiBZ,EAAUH,CAAY,EAE7C,GACE,OAAOe,GAAmB,UAC1BA,IAAmB,MACnB,UAAWA,GACX,OAAOA,EAAe,OAAU,UAChCA,EAAe,QAAU,MACzB,YAAaA,EAAe,MAC5B,CACA,IAAMhC,EAAe,OAAOgC,EAAe,MAAM,OAAO,EACxD,MAAA,KAAK,KAAK,QAAS,GAAGzF,CAAY,qCAAqCyD,CAAY,EAAE,EAC/E,IAAI,MAAM,GAAGzD,CAAY,qCAAqCyD,CAAY,EAAE,CACpF,CAEA,OAAOgC,EAAe,6BACxB,CASA,MAAM,qBAAqBtD,EAAauD,EAAgB,CAGtD,GADA,KAAK,UAAUvD,CAAG,EACd,OAAOuD,GAAa,UAAYA,EAAS,KAAI,EAAG,SAAW,EAC7D,MAAA,KAAK,KAAK,QAASpF,CAAwB,EACrC,IAAI,UAAUA,CAAwB,EAG9C,KAAK,KAAK,OAAQ,6BAA6BoF,CAAQ,eAAevD,CAAG,EAAE,EAG3E,IAAMwB,EAAQ,CAAE,SAAA+B,CAAQ,EAClB1C,EAAU,CACd,CAACpD,CAAmB,EAAGP,EACvB,CAACG,CAAyB,EAAGL,CAAAA,EAG/B,GAAI,CAEF,IAAM8D,EAAa7B,EAAkBe,CAAG,EAClC,CAAE,IAAAe,EAAK,QAASC,CAAa,EAAK,MAAM,KAAK,MAAM,SAAUF,EAAYU,EAAOX,EAAS,EAAE,EAC3FyB,EAAe,GAAGvB,CAAG,IAAI,IAAI,gBAAgBS,CAAK,CAAC,GAEnDN,EAAM,MAAM,KAAK,aAAaoB,EAAc,SAAUtB,CAAa,EAGzE,GAAIE,EAAI,GAAI,CACV,IAAMqB,EAAe,MAAMrB,EAAI,KAAI,EAC7BoC,EAAiBZ,EAAUH,CAAY,EAE7C,GACE,OAAOe,GAAmB,UAC1BA,IAAmB,MACnB,UAAWA,GACX,OAAOA,EAAe,OAAU,UAChCA,EAAe,QAAU,MACzB,YAAaA,EAAe,MAC5B,CACA,IAAMhC,EAAe,OAAOgC,EAAe,MAAM,OAAO,EACxD,MAAA,KAAK,KAAK,QAAS,GAAGzF,CAAY,qCAAqCyD,CAAY,EAAE,EAC/E,IAAI,MAAM,GAAGzD,CAAY,qCAAqCyD,CAAY,EAAE,CACpF,CAEA,MAAO,CACL,OAAQ,UACR,IAAAtB,EACA,SAAAuD,EACA,SAAUD,CAAAA,CAEd,KACE,OAAA,KAAK,KAAK,QAAS,GAAGzF,CAAY,oCAAoCqD,EAAI,MAAM,EAAE,EAC5E,IAAI,MAAM,GAAGrD,CAAY,oCAAoCqD,EAAI,MAAM,EAAE,CAEnF,OAASG,EAAgB,CACvB,IAAMC,EAAeD,aAAiB,MAAQA,EAAM,QAAU,OAAOA,CAAK,EAC1E,MAAA,KAAK,KAAK,QAAS,GAAGxD,CAAY,4CAA4CmC,CAAG,KAAKsB,CAAY,EAAE,EAC9F,IAAI,MAAM,GAAGzD,CAAY,4CAA4CmC,CAAG,KAAKsB,CAAY,EAAE,CACnG,CACF,CAEQ,iCAAiCoC,EAAwB,CAC/D,MAAO;;UAEDA,EACC,IACCC,GAAQ;;0BAEMA,EAAK,UAAU;oBACrBA,EAAK,IAAI;;SAEpB,EAEE,KAAK,EAAE,CAAC;;KAGjB,CAOA,MAAM,OAAO3D,EAAW,CACtB,KAAK,UAAUA,CAAG,EAClB,KAAK,KAAK,OAAQ,mBAAmBA,CAAG,EAAE,EAC1C,IAAMa,EAAU,CACd,CAACpD,CAAmB,EAAGN,EACvB,CAACE,CAAyB,EAAGL,CAAAA,EAEzB8D,EAAa7B,EAAkBe,CAAG,EAClC,CAAE,IAAAe,EAAK,QAASC,CAAa,EAAK,MAAM,KAAK,MAAM,SAAUF,EAAY,CAAA,EAAID,EAAS,EAAE,EACxFK,EAAM,MAAM,KAAK,aAAaH,EAAK,SAAUC,CAAa,EAChE,OAAIE,EAAI,SAAW,KAAOA,EAAI,SAAW,GAI3C,CAEA,MAAM,aACJH,EACAhB,EACAc,EACAY,EACAoC,EAAiC,CAAA,EAAE,CAEnC,KAAK,KAAK,OAAQ,WAAW9D,CAAM,eAAegB,CAAG,cAAc,KAAK,UAAUF,CAAO,CAAC,EAAE,EAC5F,IAAMK,EAAM,MAAM,MAAMH,EAAK,CAC3B,OAAAhB,EACA,QAAAc,EACA,KAAM,CAAC,MAAO,MAAM,EAAE,SAASd,CAAM,EAAI,OAAY0B,EACrD,OAAQ,KAAK,sBAAwB,OAAY,YAAY,QAAQ,KAAK,mBAAmB,EAAI,MAAA,CAClG,EAED,MAAI,CAACP,EAAI,IAAM,CAAC2C,EAAqB,SAAS3C,EAAI,MAAM,GACtD,MAAM,KAAK,qBAAqBA,CAAG,EAG9BA,CACT,CAEA,MAAM,qBAAqBA,EAAa,CACtC,IAAM4C,EAAY,MAAM5C,EAAI,KAAI,EAC1B6C,EAAY7C,EAAI,QAAQ,IAAI,kBAAkB,GAAK,UACnDI,EAAeJ,EAAI,QAAQ,IAAI,qBAAqB,GAAKA,EAAI,WACnE,MAAA,KAAK,KACH,QACA,GAAGrD,CAAY,8BAA8BqD,EAAI,MAAM,KAAK6C,CAAS,MAAMzC,CAAY,cAAcwC,CAAS,EAAE,EAE5G,IAAI,MACR,GAAGjG,CAAY,8BAA8BqD,EAAI,MAAM,KAAK6C,CAAS,MAAMzC,CAAY,eAAewC,CAAS,EAAE,CAErH,CAEA,2BAA2BE,EAAmB,CAC5C,OAAI,OAAO,KAAKA,CAAW,EAAE,OAAS,EAC7B,GAGF,OAAO,KAAKA,CAAW,EAC3B,KAAI,EACJ,IAAIhE,GAAO,GAAG,mBAAmBA,CAAG,CAAC,IAAI,mBAAoBgE,EAAoChE,CAAG,CAAC,CAAC,EAAE,EACxG,KAAK,GAAG,CACb,CACA,MAAM,iBAAiBiE,EAAiB,CACtC,IAAMC,EAAQ,MAAM9B,EAAM,OAAO,KAAK,eAAe,GAAI6B,CAAS,EAC5DE,EAAU,MAAM/B,EAAM8B,EAAO,KAAK,MAAM,EACxCE,EAAW,MAAMhC,EAAM+B,EAASrH,CAAU,EAChD,OAAOsF,EAAMgC,EAAUvH,CAAgB,CACzC,CAAA,EAGI8E,EAAQ,MAAO0C,GAA6C,CAChE,IAAMC,EAAU3F,GAAY,QAAQ,EACpC,OAAA2F,EAAQ,OAAOD,CAAO,EACfC,EAAQ,OAAO,KAAK,CAC7B,EAEMlC,EAAQ,MAAOpC,EAAsBqE,EAAiBE,IAAqC,CAC/F,IAAMC,EAAU9F,GAAY,SAAUsB,CAAG,EACzC,OAAAwE,EAAQ,OAAOH,CAAO,EACfG,EAAQ,OAAOD,CAAQ,CAChC,EACa1E,EAAgBD,GAAwB,CACnD,IAAM6E,EAAuC,CAC3C,IAAK,GACL,SAAU,GACV,QAAS,GACT,SAAU,GACV,WAAY,EAAA,EAEd,OAAO7E,EAAK,QAAQ,uCAAwC8E,GAAKD,EAAaC,CAAC,CAAW,CAC5F,EAEMhC,EAAaiC,GAAsC,CACvD,IAAMC,EAAe3C,GACZA,EACJ,QAAQ,UAAW,GAAG,EACtB,QAAQ,UAAW,GAAG,EACtB,QAAQ,QAAS,GAAG,EACpB,QAAQ,QAAS,GAAG,EACpB,QAAQ,SAAU,GAAG,EAGpB4C,EAAO,CAAA,EACPC,EAAK,2DACPC,EAEJ,KAAQA,EAAQD,EAAG,KAAKH,CAAG,GAAI,CAC7B,GAAM,CAAC,CAAEzE,EAAQF,EAAKiC,CAAK,EAAI8C,EACzBC,EAAU9E,EAAO,YAAW,EAAKF,EACjCiF,EAAchD,GAAS,KAAOS,EAAUT,CAAK,EAAI,GAEnD,OAAOgD,GAAgB,SACxBJ,EAAgCG,CAAO,EAAInF,EAAa+E,EAAYK,CAAW,CAAC,EACxE,MAAM,QAASJ,EAAgCG,CAAO,CAAC,EAC/DH,EAAgCG,CAAO,EAAE,KAAKC,CAAW,EAEzDJ,EAAgCG,CAAO,EACrCH,EAAgCG,CAAO,GAAK,KACzC,CAAEH,EAAgCG,CAAO,EAAGC,CAAW,EACvDrG,GAAYoG,CAAO,EACjB,CAACC,CAAW,EACZA,CAEZ,CAEA,OAAO,OAAO,KAAKJ,CAAI,EAAE,OAASA,EAAOD,EAAYD,CAAG,CAC1D,ECpqCA,OAAOO,OAAU,UCDjB,IAAMC,EAAyB,CAC9B,iBAAkB,mBAClB,kBAAmB,oBACnB,wBAAyB,0BACzB,wBAAyB,0BACzB,wBAAyB,0BACzB,+BAAgC,iCAChC,qBAAsB,uBACtB,wBAAyB,0BACzB,0BAA2B,4BAC3B,mBAAoB,qBACpB,WAAY,aACZ,eAAgB,iBAChB,gBAAiB,kBACjB,aAAc,eACd,aAAc,eACd,iBAAkB,mBAClB,aAAc,eACd,YAAa,cACb,cAAe,eAChB,EACMC,EAAN,cAA8B,KAAM,CACnC,YAAYC,EAASC,EAAOH,EAAuB,cAAe,CACjE,MAAM,oBAAoBE,CAAO,aAAaC,CAAI,EAAE,EACpD,KAAK,KAAO,KAAK,YAAY,KAC7B,KAAK,KAAOA,EACZ,MAAM,kBAAkB,KAAM,KAAK,WAAW,CAC/C,CACD,EAQA,IAAMC,EAAN,cAAoCC,CAAgB,CACnD,YAAYC,EAAS,CACpB,MAAMA,EAASC,EAAuB,uBAAuB,CAC9D,CACD,EAEMC,EAAN,cAAsCH,CAAgB,CACrD,YAAYC,EAAS,CACpB,MAAMA,EAASC,EAAuB,yBAAyB,CAChE,CACD,EAEME,EAAN,cAA+BJ,CAAgB,CAC9C,YAAYC,EAASI,EAAW,CAC/B,MAAM,MAAMA,CAAS,sBAAsBJ,CAAO,GAAIC,EAAuB,kBAAkB,CAChG,CACD,ECpDA,OAAS,cAAAI,MAAkB,cAE3B,IAAMC,EAAe,CAACC,EAAUC,IACxB,OAAO,KAAKA,CAAK,EAAE,MAAOC,GAAQF,EAASE,CAAG,IAAMD,EAAMC,CAAG,CAAC,EAGhEC,GAAe,SAChB,OAAOL,EAAe,KAAe,OAAOA,GAAe,WACvDA,EAAW,EAEf,OAAO,OAAW,KAAe,OAAO,QAAW,UAAY,OAAO,OAAO,YAAe,WACxF,OAAO,WAAW,EAEnB,uCAAuC,QAAQ,QAAS,SAAUM,EAAG,CAC3E,IAAIC,EAAK,KAAK,OAAO,EAAI,GAAM,EAC9BC,EAAIF,IAAM,IAAMC,EAAKA,EAAI,EAAO,EACjC,OAAOC,EAAE,SAAS,EAAE,CACrB,CAAC,EAGIC,GAAe,CAACC,EAAOC,EAAO,qBAAuB,CAC1D,OAAQ,OAAOD,EAAO,CACrB,IAAK,SACJ,OAAIE,GAAQF,CAAK,EACT,CACN,KAAM,SACN,KAAM,MACN,KAAM,GACN,YAAa,MACd,EAEM,SACR,IAAK,SACJ,OAAO,OAAO,UAAUA,CAAK,EAAI,MAAQ,QAC1C,IAAK,UACJ,MAAO,UACR,IAAK,SACJ,OAAIA,IAAU,KAAa,OACvB,MAAM,QAAQA,CAAK,EAAU,CAAE,KAAM,QAAS,MAAOD,GAAaC,EAAM,CAAC,CAAC,CAAE,EACzEG,EAAcH,EAAOC,CAAI,EACjC,QACC,MAAO,QACT,CACD,EAEMG,GAAyBC,GAAW,CACzC,IAAMC,EAAU,CACf,KAAM,MACN,KAAM,SACN,KAAM,GACN,YAAa,MACd,EAEA,OAAID,EAAO,OAAS,SACAA,EAAO,OAAO,KAAME,GAAUA,EAAM,OAAS,KAAK,GAEpEF,EAAO,OAAO,QAAQC,CAAO,EAEpBD,EAAO,OAAS,SAAWA,EAAO,MAAM,OAAS,WACxCA,EAAO,MAAM,OAAO,KAAME,GAAUA,EAAM,OAAS,KAAK,GAE1EF,EAAO,MAAM,OAAO,QAAQC,CAAO,GAG9BD,CACR,EAEMF,EAAgB,CAACK,EAAMC,EAAW,kBAAoB,CACvD,MAAM,QAAQD,CAAI,IACrBA,EAAOA,EAAK,CAAC,GAEd,IAAME,EAAS,OAAO,QAAQF,CAAI,EAAE,IAAI,CAAC,CAACP,EAAMD,CAAK,KAC7C,CAAE,KAAAC,EAAM,KAAMF,GAAaC,EAAO,GAAGS,CAAQ,IAAIR,CAAI,EAAE,CAAE,EAChE,EASD,OAAOG,GAPQ,CACd,KAAM,SACN,KAAMK,EACN,OAAQC,CACT,CAGmC,CACpC,EAEMR,GAAWS,GACI,yEACD,KAAKA,CAAG,EF3E5B,IAAMC,EAAc,aACdC,EAAoB,IACpBC,EAAqB,aACrBC,EAAa,QACbC,GAAY,KAAO,KACnBC,GAAY,EAAID,GAChBE,EAAa,OAAO,KAAK,GAAI,MAAM,EAEnCC,EAAoB,CAACC,EAAYC,EAAuB,4BAA8B,CAC3F,MAAM,IAAIC,EAAwB,GAAGV,CAAW,+BAAgCQ,CAAS,CAC1F,EAEMG,EAAeC,GAAY,CAChC,GAAIA,EAAQ,KAAK,IAAM,IAAMA,IAAY,MAAQ,OAAOA,EAAY,KAAeA,EAAQ,OAAS,KAAOA,IAAY,KACtH,MAAM,IAAIC,EAAgB,GAAGb,CAAW,kDAAmDS,EAAuB,gBAAgB,CAEpI,EAiEMK,GAAN,KAAiB,CAahB,YACCC,EAAU,CACT,YAAa,OACb,gBAAiB,OACjB,SAAU,OACV,WAAY,OACZ,OAAQ,OACR,OAAQ,KACR,UAAWb,CACZ,EACC,CACD,KAAK,WAAWa,CAAO,EACvB,KAAK,SAAW,IAAI,IACpB,KAAK,IAAM,IAAIC,GAAGD,CAAO,EACzB,KAAK,WAAaA,EAAQ,WAAab,EACvC,KAAK,MAAQe,EACd,CAEA,WAAcC,GAAS,CACtB,IAAMC,EAAiB,CAAC,cAAe,kBAAmB,WAAY,YAAY,EAClF,QAAWC,KAASD,EACnB,GAAI,CAACD,EAAKE,CAAK,EACd,MAAM,IAAIP,EAAgB,GAAGb,CAAW,KAAKoB,CAAK,eAAgBX,EAAuB,gBAAgB,CAG5G,EAOA,MAAM,iBAAkB,CACvB,GAAI,CACH,IAAMY,EAAS,MAAM,KAAK,IAAI,KAAKpB,EAAmB,KAAK,UAAU,EACrE,OAAI,OAAOoB,GAAW,UAAYA,IAAW,MAAQA,EAAO,WAAa,IAAY,CAAC,EAE/EA,EAAO,IAAKC,GAAUA,EAAM,IAAI,MAAM,KAAK,WAAW,OAAS,EAAG,CAACnB,EAAW,MAAM,CAAC,CAC7F,OAASoB,EAAO,CACf,MAAM,IAAIC,EAAiB,GAAGxB,CAAW,KAAKuB,EAAM,OAAO,GAAId,EAAuB,kBAAkB,CACzG,CACD,CAQA,MAAM,iBAAiBG,EAAS,CAC/B,GAAI,CACHD,EAAYC,CAAO,EACnB,IAAMa,EAAS,MAAM,KAAK,IAAI,WAAW,GAAG,KAAK,UAAU,GAAGxB,CAAiB,GAAGW,CAAO,GAAGT,CAAU,EAAE,EACxG,eAAQ,IAAI,uBAAwB,GAAG,KAAK,UAAU,GAAGF,CAAiB,GAAGW,CAAO,GAAGT,CAAU,GAAIsB,CAAM,EACpG,CAAC,CAACA,CACV,OAASF,EAAO,CACf,GAAIA,EAAM,QAAQ,SAAS,WAAW,EACrC,MAAO,GAER,cAAQ,IAAI,uBAAwBX,EAASW,CAAK,EAC5C,IAAIV,EAAgB,GAAGb,CAAW,KAAKuB,EAAM,OAAO,GAAId,EAAuB,oBAAoB,CAC1G,CACD,CAUA,MAAM,iBAAiBG,EAASc,EAAQC,EAAO,CAAC,EAAG,CAClD,GAAI,CAGH,GAFAhB,EAAYC,CAAO,EAEf,CADW,MAAM,KAAK,iBAAiBA,CAAO,EACrC,CACZ,GAAIe,EAAK,OAAS,GAAKD,EAAQ,CAC9B,IAAME,EAAc,KAAK,MAAM,MAAM,CAAE,KAAM,QAAS,MAAOF,CAAO,CAAC,EACrE,MAAM,KAAK,IAAI,IAAI,GAAG,KAAK,UAAU,GAAGzB,CAAiB,GAAGW,CAAO,GAAGT,CAAU,GAAIyB,EAAY,SAASD,CAAI,CAAC,CAC/G,MACC,MAAM,KAAK,IAAI,IAAI,GAAG,KAAK,UAAU,GAAG1B,CAAiB,GAAGW,CAAO,GAAGT,CAAU,GAAIG,CAAU,EAE/F,OAAO,KAAK,WAAWM,EAASc,EAAQ,EAAK,CAC9C,CACA,MAAM,IAAIb,EAAgB,GAAGb,CAAW,gBAAgBY,CAAO,kBAAmBH,EAAuB,iBAAiB,CAC3H,OAASc,EAAO,CACf,MAAIA,aAAiBV,EACdU,EAED,IAAIV,EAAgB,GAAGb,CAAW,KAAKuB,EAAM,OAAO,GAAId,EAAuB,uBAAuB,CAC7G,CACD,CAQA,MAAM,iBAAiBG,EAAS,CAC/B,GAAI,CACHD,EAAYC,CAAO,EACnB,IAAMiB,EAAM,GAAG,KAAK,UAAU,GAAG5B,CAAiB,GAAGW,CAAO,GAAGT,CAAU,GAEzE,GADe,MAAM,KAAK,iBAAiBS,CAAO,EACtC,CACX,MAAM,KAAK,IAAI,OAAOiB,CAAG,EACzB,IAAMC,EAAU,MAAM,KAAK,iBAAiBlB,CAAO,EACnD,GAAI,OAAOkB,GAAY,UAAW,CACjC,GAAI,CAACA,EACJ,YAAK,SAAS,OAAOlB,CAAO,EACrB,GAER,MAAM,IAAIC,EAAgB,GAAGb,CAAW,iCAAiCY,CAAO,GAAIH,EAAuB,kBAAkB,CAC9H,CACA,MAAM,IAAIe,EAAiB,GAAGxB,CAAW,iCAAiCY,CAAO,GAAIH,EAAuB,kBAAkB,CAC/H,CACA,MAAM,IAAII,EAAgB,GAAGb,CAAW,gBAAgBY,CAAO,kBAAmBH,EAAuB,uBAAuB,CACjI,OAASc,EAAO,CACf,MAAIA,aAAiBC,EACdD,EAED,IAAIV,EACT,GAAGb,CAAW,kCAAkCuB,EAAM,OAAO,GAC7Dd,EAAuB,uBACxB,CACD,CACD,CAUA,MAAM,WAAWG,EAASc,EAAQK,EAAa,GAAM,CACpD,GAAI,CACHpB,EAAYC,CAAO,EACnB,IAAMoB,EAAU,GAAG,KAAK,UAAU,GAAG/B,CAAiB,GAAGW,CAAO,GAAGT,CAAU,GAE7E,GAAI,CADW,MAAM,KAAK,IAAI,WAAW6B,CAAO,EACnC,CACZ,GAAI,CAACD,EACJ,MAAM,IAAIlB,EAAgB,GAAGb,CAAW,gBAAgBY,CAAO,kBAAmBH,EAAuB,oBAAoB,EAG9H,MAAM,KAAK,IAAI,IAAIuB,EAAS1B,CAAU,CACvC,CACA,IAAM2B,EAAYP,GAAU,KAAK,SAAS,IAAId,CAAO,GAAK,OAC1D,OAAO,IAAIsB,EAAWtB,EAASqB,EAAW,KAAK,IAAK,KAAK,UAAU,CACpE,OAASV,EAAO,CAEf,MAAIA,EAAM,QAAQ,SAAS,cAAc,EAClC,IAAIY,EACT,GAAGnC,CAAW,8BAA8BuB,EAAM,OAAO,GACzDd,EAAuB,uBACxB,EAGK,IAAII,EAAgB,GAAGb,CAAW,KAAKuB,EAAM,OAAO,GAAId,EAAuB,oBAAoB,CAC1G,CACD,CAMA,GAAK,IACG,KAAK,GAEd,EAiCMyB,EAAN,MAAME,CAAW,CAUhB,YAAYxB,EAASc,EAAQW,EAAIC,EAAYpC,EAAoBqC,EAAY,GAAO,CACnF,KAAK,SAAW3B,EAChB,KAAK,IAAMyB,EACX,KAAK,MAAQpB,GACb,KAAK,UAAY,GACjB,KAAK,WAAa,CAAC,EACnB,KAAK,QAAUS,EACf,KAAK,UAAY,OAAOA,EAAW,IAAc,KAAO,KAAK,MAAM,MAAMA,CAAM,EAC/E,KAAK,WAAaY,EAClB,KAAK,WAAaC,CACnB,CAEA,SAAW,KAAO,CACjB,QAAS,KAAK,SACd,GAAI,KAAK,IACT,KAAM,KAAK,MACX,SAAU,KAAK,UACf,UAAW,KAAK,WAChB,UAAW,KAAK,UACjB,GAEA,SAAYC,GAAU,CACrB,KAAK,SAAWA,EAAM,QACtB,KAAK,IAAMA,EAAM,GACjB,KAAK,MAAQA,EAAM,KACnB,KAAK,QAAUA,EAAM,OACrB,KAAK,UAAYA,EAAM,SACvB,KAAK,WAAaA,EAAM,UACxB,KAAK,WAAaA,EAAM,SACzB,EAEA,aAAgBD,GAAc,CAC7B,KAAK,WAAaA,CACnB,EAEA,aAAe,IACP,KAAK,WAGb,cAAgB,IACR,KAAK,UAGb,cAAiBb,GAAW,CAC3B,KAAK,QAAUA,EACf,KAAK,UAAY,OAAOA,EAAW,IAAc,KAAO,KAAK,MAAM,MAAMA,CAAM,CAChF,EAEA,MAAM,WAAY,CACjB,GAAI,CACH,IAAMG,EAAM,GAAG,KAAK,UAAU,GAAG5B,CAAiB,GAAG,KAAK,QAAQ,GAAGE,CAAU,GACzEsC,EAAa,KAAK,IAAI,yBAAyB,GAAKpC,GAC1D,GAAI,KAAK,YAAc,MAAQ,OAAO,KAAK,UAAc,IACxD,MAAM,IAAIQ,EACT,GAAGb,CAAW,0DACdS,EAAuB,uBACxB,EAED,QAAQ,IAAI,kBAAmBoB,EAAK,KAAK,SAAS,EAClD,GAAI,CAAE,KAAAa,EAAM,KAAAf,CAAK,EAAI,MAAM,KAAK,IAAI,kBAAkBE,EAAK,CAAE,gBAAiB,KAAK,SAAU,CAAC,EAE9F,GADA,QAAQ,IAAI,iCAAkCF,EAAMe,EAAM,KAAK,UAAU,EACrEf,IAAS,KAEZ,OAAO,KAAK,WAEb,KAAK,UAAYe,IAAS,KAAO,KAAK,UAAYA,EAClD,IAAMd,EAAc,KAAK,MAAM,MAAM,CAAE,KAAM,QAAS,MAAO,KAAK,SAAU,CAAC,EAC7E,GAAID,EAAK,OAASc,EACjB,YAAK,WAAad,EAAK,OAAS,EAAIC,EAAY,WAAWD,CAAI,EAAI,CAAC,EAC7D,KAAK,WAEb,IAAIgB,EAASF,EACTG,EAAY,CAAC,OAAO,KAAKjB,EAAM,MAAM,CAAC,EACtCkB,EAAS,GACb,KAAOA,GAAQ,CACd,IAAMC,EAAmB,MAAM,KAAK,IAAI,YAAYjB,EAAK,GAAOc,EAAQA,EAASF,CAAU,EACrFM,EAAe,MAAMD,EAAiB,KAAK,EACjDF,EAAU,KAAK,OAAO,KAAKG,EAAc,MAAM,CAAC,EAChDJ,GAAUF,GACYK,EAAiB,QAAQ,IAAI,gBAAgB,GAAKC,EAAa,QACjEN,IACnBI,EAAS,GAEX,CACA,IAAMG,EAAe,OAAO,OAAOJ,CAAS,EAC5C,YAAK,WAAahB,EAAY,WAAWoB,CAAY,EAC9C,KAAK,UACb,OAASzB,EAAO,CACf,GAAIA,EAAM,SAAS,EAAE,QAAQ,iCAAiC,EAAI,GACjE,YAAK,WAAa,CAAC,EACZ,KAAK,WAEb,MAAM,IAAIC,EAAiB,GAAGxB,CAAW,0BAA0BuB,EAAM,OAAO,GAAId,EAAuB,kBAAkB,CAC9H,CACD,CAEA,MAAM,UAAUkB,EAAM,CACrB,GAAI,CACH,GAAI,KAAK,YAAc,MAAQ,OAAO,KAAK,UAAc,IACxD,MAAM,IAAId,EACT,GAAGb,CAAW,0DACdS,EAAuB,uBACxB,EAED,IAAMmB,EAAc,KAAK,MAAM,MAAM,CAAE,KAAM,QAAS,MAAO,KAAK,SAAU,CAAC,EACvEqB,EAAatB,EAAK,OAAS,EAAIC,EAAY,SAASD,CAAI,EAAIrB,EAE5DuB,EAAM,GAAG,KAAK,UAAU,GAAG5B,CAAiB,GAAG,KAAK,QAAQ,GAAGE,CAAU,GAC/E,GAAI,KAAK,YAAc,KAAK,YAAc,GAAI,CAC7C,IAAM+C,EAAc,MAAM,KAAK,IAAI,QAAQrB,CAAG,EAE9C,GAAIqB,IAAgB,MAAQA,IAAgB,KAAK,UAChD,MAAO,EAET,CAEA,IAAMC,EAAO,MAAM,KAAK,IAAI,IAAItB,EAAKoB,CAAU,EAC/C,GAAIE,EAAK,SAAW,IACnB,MAAM,IAAI3B,EAAiB,GAAGxB,CAAW,wBAAyBS,EAAuB,kBAAkB,EAI5G,IAAM2C,EAAUD,EAAK,QAAQ,IAAI,MAAM,EAEvC,OAAIC,IACH,KAAK,UAAY,KAAK,IAAI,aAAaA,CAAO,EAE9C,KAAK,WAAazB,GAEZ,EACR,OAASJ,EAAO,CACf,MAAIA,aAAiBC,EACdD,EAED,IAAIV,EAAgB,GAAGb,CAAW,KAAKuB,EAAM,OAAO,GAAId,EAAuB,eAAe,CACrG,CACD,CASA,MAAM,OAAO4C,EAAK3B,EAAS,OAAW,CACrC,GAAI,CACH,GAAyB2B,GAAQ,KAChC,MAAM,IAAIxC,EAAgB,GAAGb,CAAW,oCAAqCS,EAAuB,YAAY,EAEjH,GAAI,OAAO4C,GAAQ,UAAY,CAAC,MAAM,QAAQA,CAAG,EAChD,MAAM,IAAI3C,EACT,GAAGV,CAAW,2CACdS,EAAuB,yBACxB,EAED,IAAM6C,EAAS,MAAM,QAAQD,CAAG,EAAYA,EAAR,CAACA,CAAG,EAElCE,EAAe7B,GAAU,KAAK,WAAa8B,EAAcF,EAAM,CAAC,CAAC,EACjEG,EAAW,KAAK,MAAM,MAAMF,CAAY,EAC9C,GAAI,CAACE,EACJ,MAAM,IAAItB,EACT,GAAGnC,CAAW,4DACdS,EAAuB,uBACxB,EAED,KAAK,UAAYgD,EACjB,IAAM9B,EAAO,MAAM,KAAK,UAAU,EAClC,QAAS+B,KAAQJ,EAAO,CACvB,GAAI,OAAOI,GAAS,UAAYA,IAAS,KACxC,MAAM,IAAIhD,EACT,GAAGV,CAAW,kEACdS,EAAuB,yBACxB,EAOD,GALAiD,EAAK,IAAMA,EAAK,KAAQ,MAAMC,GAAa,EACvB,KAAK,UAAU,QAAQD,EAAM,CAChD,UAAWnD,EACX,mBAAoB,EACrB,CAAC,IACmB,GACnBoB,EAAK,KAAK+B,CAAI,MAEd,OAAM,IAAIhD,EAAwB,GAAGV,CAAW,+BAAgCS,EAAuB,yBAAyB,CAElI,CAEA,GAAI,CADY,MAAM,KAAK,UAAUkB,CAAI,EAExC,MAAM,IAAIH,EAAiB,GAAGxB,CAAW,8BAA+BS,EAAuB,kBAAkB,EAElH,OAAO6C,CACR,OAAS/B,EAAO,CACf,MAAIA,EAAM,QAAQ,SAAS,cAAc,EAClC,IAAIY,EACT,GAAGnC,CAAW,8BAA8BuB,EAAM,OAAO,GACzDd,EAAuB,uBACxB,EAEGc,aAAiBV,EACdU,EAED,IAAIV,EAAgB,GAAGb,CAAW,6BAA6BuB,EAAM,OAAO,GAAId,EAAuB,YAAY,CAC1H,CACD,CAWA,MAAM,KAAKmD,EAAQ,CAAC,EAAG7C,EAAU,CAAC,EAAG,CACpC,GAAI,CACH,GAA2B6C,GAAU,KACpC,MAAM,IAAI/C,EAAgB,GAAGb,CAAW,iCAAkCS,EAAuB,gBAAgB,EAElH,IAAMkB,EAAO,MAAM,KAAK,UAAU,EAC5BkC,EAAQ,SAAS9C,EAAQ,KAAM,EAAE,GAAK,EACtC+C,EAAM,SAAS/C,EAAQ,MAAO,EAAE,EAAI8C,EAAQ,SAAS9C,EAAQ,MAAO,EAAE,EAAI,OAEhF,OADqBY,EAAK,OAAQ0B,GAAQU,EAAaV,EAAKO,CAAK,CAAC,EAAE,MAAMC,EAAOC,CAAG,CAErF,OAASvC,EAAO,CACf,MAAM,IAAIV,EAAgB,GAAGb,CAAW,4BAA4BuB,EAAM,OAAO,GAAId,EAAuB,UAAU,CACvH,CACD,CAQA,MAAM,QAAQmD,EAAQ,CAAC,EAAG,CACzB,GAAI,CACH,GAAIA,IAAU,KACb,MAAM,IAAI/C,EAAgB,GAAGb,CAAW,yBAA0BS,EAAuB,gBAAgB,EAG1G,OADe,MAAM,KAAK,KAAKmD,EAAO,CAAE,MAAO,CAAE,CAAC,GACpC,CAAC,GAAK,IACrB,OAASrC,EAAO,CACf,MAAIA,aAAiBV,EACdU,EAED,IAAIV,EAAgB,GAAGb,CAAW,+BAA+BuB,EAAM,OAAO,GAAId,EAAuB,cAAc,CAC9H,CACD,CAYA,MAAM,OAAOmD,EAAQ,CAAC,EAAGI,EAAS,CAAC,EAAGjD,EAAU,CAAC,EAAG,CACnD,GAAI,CACH,GAA2B6C,GAAU,MAAQI,IAAW,QAAaA,IAAW,KAC/E,MAAM,IAAInD,EACT,GAAGb,CAAW,oDACdS,EAAuB,gBACxB,EAED,GAAI,CAAC,KAAK,UACT,MAAM,IAAI0B,EACT,GAAGnC,CAAW,8CACdS,EAAuB,uBACxB,EAED,IAAMkB,EAAO,MAAM,KAAK,UAAU,EAClC,GAAIA,EAAK,SAAW,EAAG,MAAO,GAC9B,IAAIsC,EAAe,EACnB,QAASC,EAAI,EAAGA,EAAIvC,EAAK,OAAQuC,IAChC,GAAIH,EAAapC,EAAKuC,CAAC,EAAGN,CAAK,EAAG,CACjC,IAAMO,EAAa,CAAE,GAAGxC,EAAKuC,CAAC,EAAG,GAAGF,CAAO,EAK3C,GAJgB,KAAK,UAAU,QAAQG,EAAY,CAClD,UAAW5D,EACX,mBAAoB,EACrB,CAAC,IACe,GACfoB,EAAKuC,CAAC,EAAIC,EACVF,QAEA,OAAM,IAAIvD,EACT,GAAGV,CAAW,+BACdS,EAAuB,yBACxB,CAEF,CAGD,GAAIwD,EAAe,GAElB,GAAI,CADY,MAAM,KAAK,UAAUtC,CAAI,EAExC,MAAM,IAAIH,EAAiB,GAAGxB,CAAW,8BAA+BS,EAAuB,kBAAkB,UAExGM,EAAQ,OAAQ,CAG1B,GAAI,CADY,MAAM,KAAK,OAAOiD,CAAM,EAEvC,MAAM,IAAIxC,EAAiB,GAAGxB,CAAW,8BAA+BS,EAAuB,kBAAkB,EAElHwD,EAAe,CAChB,CACA,OAAOA,CACR,OAAS1C,EAAO,CACf,MAAIA,aAAiBC,EACdD,EAED,IAAIV,EAAgB,GAAGb,CAAW,8BAA8BuB,EAAM,OAAO,GAAId,EAAuB,YAAY,CAC3H,CACD,CAYA,MAAM,UAAUmD,EAAQ,CAAC,EAAGI,EAAS,CAAC,EAAGjD,EAAU,CAAC,EAAG,CACtD,GAAI,CACH,GAA2B6C,GAAU,MAAQI,IAAW,QAAaA,IAAW,KAC/E,MAAM,IAAInD,EAAgB,GAAGb,CAAW,sBAAuBS,EAAuB,gBAAgB,EAEvG,GAAI,CAAC,KAAK,UACT,MAAM,IAAI0B,EACT,GAAGnC,CAAW,8CACdS,EAAuB,uBACxB,EAED,IAAMkB,EAAO,MAAM,KAAK,UAAU,EAClC,GAAIA,EAAK,SAAW,EAAG,MAAO,GAC9B,IAAMyC,EAAWzC,EAAK,UAAW0B,GAAQU,EAAaV,EAAKO,CAAK,CAAC,EAEjE,GAAIQ,IAAa,GAAI,CACpB,IAAMD,EAAa,CAAE,GAAGxC,EAAKyC,CAAQ,EAAG,GAAGJ,CAAO,EAKlD,GAJgB,KAAK,UAAU,QAAQG,EAAY,CAClD,UAAW5D,EACX,mBAAoB,EACrB,CAAC,IACe,GAAM,CAGrB,GAFAoB,EAAKyC,CAAQ,EAAID,EAEb,CADY,MAAM,KAAK,UAAUxC,CAAI,EAExC,MAAM,IAAIH,EAAiB,GAAGxB,CAAW,8BAA+BS,EAAuB,kBAAkB,EAElH,MAAO,EACR,KACC,OAAM,IAAIC,EAAwB,GAAGV,CAAW,+BAAgCS,EAAuB,yBAAyB,CAElI,CACA,GAAIM,EAAQ,OAAQ,CAGnB,GAAI,CADY,MAAM,KAAK,OAAOiD,CAAM,EAEvC,MAAM,IAAIxC,EAAiB,GAAGxB,CAAW,8BAA+BS,EAAuB,kBAAkB,EAElH,MAAO,EACR,CACA,MAAO,EACR,OAASc,EAAO,CACf,MAAIA,aAAiBV,EACdU,EAED,IAAIV,EAAgB,GAAGb,CAAW,iCAAiCuB,EAAM,OAAO,GAAId,EAAuB,gBAAgB,CAClI,CACD,CASA,MAAM,OAAOmD,EAAQ,CAAC,EAAG,CACxB,GAAI,CACH,GAA2BA,GAAU,KACpC,MAAM,IAAI/C,EAAgB,GAAGb,CAAW,sBAAuBS,EAAuB,gBAAgB,EAEvG,IAAMkB,EAAO,MAAM,KAAK,UAAU,EAClC,GAAIA,EAAK,SAAW,EAAG,MAAO,GAC9B,IAAM0C,EAAgB1C,EAAK,OAErB2C,EAAU3C,EAAK,OAAQ0B,GAAQ,CAACU,EAAaV,EAAKO,CAAK,CAAC,EAE9D,GAAI,CADY,MAAM,KAAK,UAAUU,CAAO,EAE3C,MAAM,IAAI9C,EAAiB,GAAGxB,CAAW,8BAA+BS,EAAuB,kBAAkB,EAElH,OAAO4D,EAAgBC,EAAQ,MAChC,OAAS/C,EAAO,CACf,MAAIA,aAAiBC,EACdD,EAED,IAAIV,EAAgB,GAAGb,CAAW,8BAA8BuB,EAAM,OAAO,GAAId,EAAuB,YAAY,CAC3H,CACD,CAQA,MAAM,WAAY,CACjB,GAAI,CAEH,IAAM4D,GADO,MAAM,KAAK,UAAU,GACP,OAE3B,GAAI,CADY,MAAM,KAAK,UAAU,CAAC,CAAC,EAEtC,MAAM,IAAI7C,EAAiB,GAAGxB,CAAW,8BAA+BS,EAAuB,kBAAkB,EAElH,OAAO4D,CACR,OAAS9C,EAAO,CACf,MAAIA,aAAiBC,EACdD,EAED,IAAIV,EAAgB,GAAGb,CAAW,8BAA8BuB,EAAM,OAAO,GAAId,EAAuB,YAAY,CAC3H,CACD,CAQA,MAAM,MAAMmD,EAAQ,CAAC,EAAG,CACvB,GAAI,CAEH,OADa,MAAM,KAAK,KAAKA,CAAK,GACtB,MACb,OAASrC,EAAO,CACf,MAAM,IAAIV,EAAgB,GAAGb,CAAW,6BAA6BuB,EAAM,OAAO,GAAId,EAAuB,WAAW,CACzH,CACD,CAEA,MAAM,iBAAiB8D,EAAYC,EAAY,KAAK,QAAS,CAC5D,GAAI,CAGH,GAFA7D,EAAY4D,CAAU,EACP,MAAM,KAAK,IAAI,WAAW,GAAG,KAAK,UAAU,GAAGtE,CAAiB,GAAGsE,CAAU,GAAGpE,CAAU,EAAE,EAE1G,MAAM,IAAIU,EAAgB,GAAGb,CAAW,gBAAgBuE,CAAU,kBAAmB9D,EAAuB,iBAAiB,EAE9H,IAAMiB,EAAS8C,GAAa,KAAK,cAAc,EACzC7C,EAAO,MAAM,KAAK,UAAU,EAC5B8C,EAAY,IAAIrC,EAAWmC,EAAY7C,EAAQ,KAAK,IAAK,KAAK,UAAU,EAC9E,aAAM+C,EAAU,UAAU9C,CAAI,EAC9B,MAAM,KAAK,IAAI,OAAO,GAAG,KAAK,UAAU,GAAG1B,CAAiB,GAAG,KAAK,QAAQ,GAAGE,CAAU,EAAE,EACpFsE,CACR,OAASlD,EAAO,CACf,MAAIA,aAAiBV,EACdU,EAED,IAAIV,EACT,GAAGb,CAAW,+BAA+BuB,EAAM,OAAO,GAC1Dd,EAAuB,uBACxB,CACD,CACD,CACD", - "names": ["AWS_ALGORITHM", "AWS_REQUEST_TYPE", "S3_SERVICE", "LIST_TYPE", "UNSIGNED_PAYLOAD", "DEFAULT_STREAM_CONTENT_TYPE", "XML_CONTENT_TYPE", "JSON_CONTENT_TYPE", "SENSITIVE_KEYS_REDACTED", "HEADER_AMZ_CONTENT_SHA256", "HEADER_AMZ_DATE", "HEADER_HOST", "HEADER_AUTHORIZATION", "HEADER_CONTENT_TYPE", "HEADER_CONTENT_LENGTH", "HEADER_ETAG", "HEADER_LAST_MODIFIED", "ERROR_PREFIX", "ERROR_ACCESS_KEY_REQUIRED", "ERROR_SECRET_KEY_REQUIRED", "ERROR_ENDPOINT_REQUIRED", "ERROR_BUCKET_NAME_REQUIRED", "ERROR_KEY_REQUIRED", "ERROR_UPLOAD_ID_REQUIRED", "ERROR_PARTS_REQUIRED", "ERROR_INVALID_PART", "ERROR_DATA_BUFFER_REQUIRED", "ERROR_PREFIX_TYPE", "ERROR_MAX_KEYS_TYPE", "ERROR_DELIMITER_REQUIRED", "_createHmac", "_createHash", "expectArray", "encodeAsHex", "c", "uriEscape", "uriStr", "uriResourceEscape", "string", "S3", "accessKeyId", "secretAccessKey", "endpoint", "bucketName", "region", "maxRequestSizeInBytes", "requestAbortTimeout", "logger", "etag", "sanitizeETag", "props", "method", "key", "delimiter", "prefix", "maxKeys", "opts", "level", "message", "additionalData", "sanitize", "obj", "acc", "sanitizedData", "logEntry", "headers", "encodedKey", "url", "signedHeaders", "contentLength", "res", "filteredOpts", "conditionalHeaders", "error", "errorMessage", "keyPath", "query", "body", "datetime", "_hash", "canonicalHeaders", "canonicalRequest", "stringToSign", "signature", "authorizationHeader", "value", "credentialScope", "signingKey", "_hmac", "ifHeaders", "urlWithQuery", "responseBody", "lastModified", "data", "_parseXml", "output", "o", "i", "a", "_a", "_b", "_c", "wholeFile", "rangeFrom", "rangeTo", "fileType", "parsedResponse", "uploadId", "partNumber", "ETag", "parts", "part", "xmlBody", "toleratedStatusCodes", "errorBody", "errorCode", "queryParams", "dateStamp", "kDate", "kRegion", "kService", "content", "hashSum", "encoding", "hmacSum", "replaceChars", "m", "str", "unescapeXml", "json", "re", "match", "fullKey", "parsedValue", "avro", "lowstorage_ERROR_CODES", "lowstorageError", "message", "code", "SchemaValidationError", "lowstorageError", "message", "lowstorage_ERROR_CODES", "DocumentValidationError", "S3OperationError", "operation", "randomUUID", "matchesQuery", "document", "query", "key", "generateUUID", "c", "r", "v", "_getAvroType", "value", "name", "_isUUID", "inferAvroType", "ensureIdFieldInSchema", "schema", "idField", "field", "data", "typeName", "fields", "str", "MODULE_NAME", "DEFAULT_DELIMITER", "PROJECT_DIR_PREFIX", "COL_SUFFIX", "CHUNG_1MB", "CHUNG_5MB", "EMPTY_DATA", "errorValidationFn", "errorCode", "lowstorage_ERROR_CODES", "DocumentValidationError", "_hasColName", "colName", "lowstorageError", "lowstorage", "options", "N", "avro", "args", "requiredFields", "field", "listed", "entry", "error", "S3OperationError", "exists", "schema", "data", "wrapperType", "KEY", "exists2", "autoCreate", "colPath", "colSchema", "Collection", "SchemaValidationError", "_Collection", "s3", "dirPrefix", "safeWrite", "props", "CHUNK_SIZE", "etag", "offset", "bufferArr", "repeat", "nextDataResponse", "nextDataBody", "bufferedData", "dataBuffer", "currentETag", "resp", "newETag", "doc", "items", "schemaWithId", "inferAvroType", "avroType", "item", "generateUUID", "query", "start", "end", "matchesQuery", "update", "updatedCount", "i", "updatedDoc", "docIndex", "initialLength", "newData", "newColName", "newSchema", "createNew"] + "sourcesContent": ["'use strict';\n\n// Constants\nconst AWS_ALGORITHM = 'AWS4-HMAC-SHA256';\nconst AWS_REQUEST_TYPE = 'aws4_request';\nconst S3_SERVICE = 's3';\nconst LIST_TYPE = '2';\nconst UNSIGNED_PAYLOAD = 'UNSIGNED-PAYLOAD';\nconst DEFAULT_STREAM_CONTENT_TYPE = 'application/octet-stream';\nconst XML_CONTENT_TYPE = 'application/xml';\nconst JSON_CONTENT_TYPE = 'application/json';\n// List of keys that might contain sensitive information\nconst SENSITIVE_KEYS_REDACTED = ['accessKeyId', 'secretAccessKey', 'sessionToken', 'password'];\nconst MIN_MAX_REQUEST_SIZE_IN_BYTES = 5 * 1024 * 1024;\n\n// Headers\nconst HEADER_AMZ_CONTENT_SHA256 = 'x-amz-content-sha256';\nconst HEADER_AMZ_DATE = 'x-amz-date';\nconst HEADER_HOST = 'host';\nconst HEADER_AUTHORIZATION = 'Authorization';\nconst HEADER_CONTENT_TYPE = 'Content-Type';\nconst HEADER_CONTENT_LENGTH = 'Content-Length';\nconst HEADER_ETAG = 'etag';\nconst HEADER_LAST_MODIFIED = 'last-modified';\n\n// Error messages\nconst ERROR_PREFIX = 'ultralight-s3 Module: ';\nconst ERROR_ACCESS_KEY_REQUIRED = `${ERROR_PREFIX}accessKeyId must be a non-empty string`;\nconst ERROR_SECRET_KEY_REQUIRED = `${ERROR_PREFIX}secretAccessKey must be a non-empty string`;\nconst ERROR_ENDPOINT_REQUIRED = `${ERROR_PREFIX}endpoint must be a non-empty string`;\nconst ERROR_BUCKET_NAME_REQUIRED = `${ERROR_PREFIX}bucketName must be a non-empty string`;\nconst ERROR_KEY_REQUIRED = `${ERROR_PREFIX}key must be a non-empty string`;\nconst ERROR_UPLOAD_ID_REQUIRED = `${ERROR_PREFIX}uploadId must be a non-empty string`;\nconst ERROR_PARTS_REQUIRED = `${ERROR_PREFIX}parts must be a non-empty array`;\nconst ERROR_INVALID_PART = `${ERROR_PREFIX}Each part must have a partNumber (number) and ETag (string)`;\nconst ERROR_DATA_BUFFER_REQUIRED = `${ERROR_PREFIX}data must be a Buffer or string`;\n// const ERROR_PATH_REQUIRED = `${ERROR_PREFIX}path must be a string`;\nconst ERROR_PREFIX_TYPE = `${ERROR_PREFIX}prefix must be a string`;\nconst ERROR_MAX_KEYS_TYPE = `${ERROR_PREFIX}maxKeys must be a positive integer`;\nconst ERROR_DELIMITER_REQUIRED = `${ERROR_PREFIX}delimiter must be a string`;\n\n// const STATUS_CODES: Record = {\n// 200: 'OK',\n// 204: 'No Content',\n// 205: 'Reset Content',\n// 206: 'Partial Content',\n// 301: 'Moved Permanently',\n// 302: 'Found',\n// 400: 'Bad Request',\n// 401: 'Unauthorized',\n// 403: 'Forbidden',\n// 404: 'Not Found',\n// 418: \"I'm a Teapot\",\n// 428: 'Precondition Required',\n// 429: 'Too Many Requests',\n// 500: 'Internal Server Error',\n// 501: 'Not Implemented',\n// };\n\ninterface S3Config {\n accessKeyId: string;\n secretAccessKey: string;\n endpoint: string;\n bucketName: string;\n region?: string;\n maxRequestSizeInBytes?: number;\n requestAbortTimeout?: number;\n logger?: Logger;\n}\n\ndeclare global {\n interface Crypto {\n createHmac: (\n algorithm: string,\n key: string | Buffer,\n ) => {\n update: (data: string | Buffer) => void;\n digest: (encoding?: 'hex' | 'base64' | 'latin1') => string;\n };\n createHash: (algorithm: string) => {\n update: (data: string | Buffer) => void;\n digest: (encoding?: 'hex' | 'base64' | 'latin1') => string;\n };\n }\n}\n\ninterface Logger {\n info: (message: string, ...args: any[]) => void;\n warn: (message: string, ...args: any[]) => void;\n error: (message: string, ...args: any[]) => void;\n}\n\ninterface UploadPart {\n partNumber: number;\n ETag: string;\n}\n\ninterface CompleteMultipartUploadResult {\n Location: string;\n Bucket: string;\n Key: string;\n ETag: string;\n}\n\ntype HttpMethod = 'POST' | 'GET' | 'HEAD' | 'PUT' | 'DELETE';\n\n// false - Not found (404)\n// true - Found (200)\n// null - ETag mismatch (412)\ntype ExistResponseCode = false | true | null;\n\nlet _createHmac = crypto.createHmac || (await import('node:crypto')).createHmac;\nlet _createHash = crypto.createHash || (await import('node:crypto')).createHash;\n\nif (typeof _createHmac === 'undefined' && typeof _createHash === 'undefined') {\n console.error(\n 'ultralight-S3 Module: Crypto functions are not available, please report the issue with necessary description: https://github.com/sentienhq/ultralight-s3/issues',\n );\n}\n\nconst expectArray: { [key: string]: boolean } = {\n contents: true,\n};\n\nconst encodeAsHex = (c: string): string => `%${c.charCodeAt(0).toString(16).toUpperCase()}`;\n\nconst uriEscape = (uriStr: string): string => {\n return encodeURIComponent(uriStr).replace(/[!'()*]/g, encodeAsHex);\n};\n\nconst uriResourceEscape = (string: string): string => {\n return uriEscape(string).replace(/%2F/g, '/');\n};\n\n/**\n * S3 class for interacting with S3-compatible object storage services.\n * This class provides methods for common S3 operations such as uploading, downloading,\n * and deleting objects, as well as multipart uploads.\n *\n * @class\n * @example\n * const s3 = new S3({\n * accessKeyId: 'your-access-key',\n * secretAccessKey: 'your-secret-key',\n * endpoint: 'https://your-s3-endpoint.com',\n * bucketName: 'your-bucket-name',\n * region: 'us-east-1' // by default is auto\n * });\n *\n * // Upload a file\n * await s3.put('example.txt', 'Hello, World!');\n *\n * // Download a file\n * const content = await s3.get('example.txt');\n *\n * // Delete a file\n * await s3.delete('example.txt');\n */\nclass S3 {\n /**\n * Creates an instance of the S3 class.\n *\n * @constructor\n * @param {Object} config - Configuration options for the S3 instance.\n * @param {string} config.accessKeyId - The access key ID for authentication.\n * @param {string} config.secretAccessKey - The secret access key for authentication.\n * @param {string} config.endpoint - The endpoint URL of the S3-compatible service.\n * @param {string} [config.bucketName=''] - The name of the bucket to operate on.\n * @param {string} [config.region='auto'] - The region of the S3 service.\n * @param {number} [config.maxRequestSizeInBytes=5242880] - The maximum size of a single request in bytes (minimum for AWS S3 is 5MB).\n * @param {number} [config.requestAbortTimeout=undefined] - The timeout in milliseconds after which a request should be aborted (careful on streamed requests).\n * @param {Object} [config.logger=null] - A logger object with methods like info, warn, error.\n * @throws {TypeError} Will throw an error if required parameters are missing or of incorrect type.\n */\n private accessKeyId: string;\n private secretAccessKey: string;\n private endpoint: string;\n private bucketName: string;\n private region: string;\n private maxRequestSizeInBytes: number;\n private requestAbortTimeout?: number;\n private logger?: Logger;\n\n constructor({\n accessKeyId,\n secretAccessKey,\n endpoint,\n bucketName,\n region = 'auto',\n maxRequestSizeInBytes = MIN_MAX_REQUEST_SIZE_IN_BYTES,\n requestAbortTimeout = undefined,\n logger = undefined,\n }: S3Config) {\n this._validateConstructorParams(accessKeyId, secretAccessKey, endpoint, bucketName);\n this.accessKeyId = accessKeyId;\n this.secretAccessKey = secretAccessKey;\n this.endpoint = endpoint;\n this.bucketName = bucketName;\n this.region = region;\n this.maxRequestSizeInBytes = maxRequestSizeInBytes;\n this.requestAbortTimeout = requestAbortTimeout;\n this.logger = logger;\n }\n\n private _validateConstructorParams(\n accessKeyId: string,\n secretAccessKey: string,\n endpoint: string,\n bucketName: string,\n ): void {\n if (typeof accessKeyId !== 'string' || accessKeyId.trim().length === 0)\n throw new TypeError(ERROR_ACCESS_KEY_REQUIRED);\n if (typeof secretAccessKey !== 'string' || secretAccessKey.trim().length === 0)\n throw new TypeError(ERROR_SECRET_KEY_REQUIRED);\n if (typeof endpoint !== 'string' || endpoint.trim().length === 0) throw new TypeError(ERROR_ENDPOINT_REQUIRED);\n if (typeof bucketName !== 'string' || bucketName.trim().length === 0)\n throw new TypeError(ERROR_BUCKET_NAME_REQUIRED);\n }\n\n private _checkMethodHeadnGet(method: string): void {\n if (method !== 'GET' && method !== 'HEAD') {\n this._log('error', `${ERROR_PREFIX}method must be either GET or HEAD`);\n throw new Error('method must be either GET or HEAD');\n }\n }\n\n private _checkKey(key: string): void {\n if (typeof key !== 'string' || key.trim().length === 0) {\n this._log('error', ERROR_KEY_REQUIRED);\n throw new TypeError(ERROR_KEY_REQUIRED);\n }\n }\n\n private _checkDelimiter(delimiter: string): void {\n if (typeof delimiter !== 'string' || delimiter.trim().length === 0) {\n this._log('error', ERROR_DELIMITER_REQUIRED);\n throw new TypeError(ERROR_DELIMITER_REQUIRED);\n }\n }\n\n private _checkPrefix(prefix: string): void {\n if (typeof prefix !== 'string') {\n this._log('error', ERROR_PREFIX_TYPE);\n throw new TypeError(ERROR_PREFIX_TYPE);\n }\n }\n\n private _checkMaxKeys(maxKeys: number): void {\n if (typeof maxKeys !== 'number' || maxKeys <= 0) {\n this._log('error', ERROR_MAX_KEYS_TYPE);\n throw new TypeError(ERROR_MAX_KEYS_TYPE);\n }\n }\n\n private _checkOpts(opts: Record): void {\n if (typeof opts !== 'object') {\n this._log('error', `${ERROR_PREFIX}opts must be an object`);\n throw new TypeError(`${ERROR_PREFIX}opts must be an object`);\n }\n }\n\n /**\n * Internal method to log messages with sanitized sensitive information.\n * @param {string} level - The log level (e.g., 'info', 'warn', 'error').\n * @param {string} message - The message to log.\n * @param {Object} [additionalData={}] - Additional data to include in the log.\n * @private\n */\n private _log(\n level: 'info' | 'warn' | 'error',\n message: string,\n additionalData: Record | string = {},\n ): void {\n if (this.logger && typeof this.logger[level] === 'function') {\n // Function to recursively sanitize an object\n const sanitize = (obj: any): any => {\n if (typeof obj !== 'object' || obj === null) {\n return obj;\n }\n return Object.keys(obj).reduce(\n (acc: any, key) => {\n if (SENSITIVE_KEYS_REDACTED.includes(key.toLowerCase())) {\n acc[key] = '[REDACTED]';\n } else if (typeof obj[key] === 'object' && obj[key] !== null) {\n acc[key] = sanitize(obj[key]);\n } else {\n acc[key] = obj[key];\n }\n return acc;\n },\n Array.isArray(obj) ? [] : {},\n );\n };\n\n // Sanitize the additional data\n const sanitizedData = sanitize(additionalData);\n // Prepare the log entry\n const logEntry = {\n timestamp: new Date().toISOString(),\n level,\n message,\n ...sanitizedData,\n // Include some general context, but sanitize sensitive parts\n context: sanitize({\n bucketName: this.bucketName,\n region: this.region,\n endpoint: this.endpoint,\n // Only include the first few characters of the access key, if it exists\n accessKeyId: this.accessKeyId ? `${this.accessKeyId.substring(0, 4)}...` : undefined,\n }),\n };\n\n // Log the sanitized entry\n this.logger[level](logEntry);\n }\n }\n\n getBucketName = () => this.bucketName;\n setBucketName = (bucketName: string) => {\n this.bucketName = bucketName;\n };\n getRegion = () => this.region;\n setRegion = (region: string) => {\n this.region = region;\n };\n getEndpoint = () => this.endpoint;\n setEndpoint = (endpoint: string) => {\n this.endpoint = endpoint;\n };\n getMaxRequestSizeInBytes = () => this.maxRequestSizeInBytes;\n setMaxRequestSizeInBytes = (maxRequestSizeInBytes: number) => {\n this.maxRequestSizeInBytes = maxRequestSizeInBytes;\n };\n sanitizeETag = (etag: string): string => sanitizeETag(etag);\n\n getProps = () => ({\n accessKeyId: this.accessKeyId,\n secretAccessKey: this.secretAccessKey,\n region: this.region,\n bucket: this.bucketName,\n endpoint: this.endpoint,\n maxRequestSizeInBytes: this.maxRequestSizeInBytes,\n requestAbortTimeout: this.requestAbortTimeout,\n logger: this.logger,\n });\n setProps = (props: S3Config) => {\n this._validateConstructorParams(props.accessKeyId, props.secretAccessKey, props.bucketName, props.endpoint);\n this.accessKeyId = props.accessKeyId;\n this.secretAccessKey = props.secretAccessKey;\n this.region = props.region || 'auto';\n this.bucketName = props.bucketName;\n this.endpoint = props.endpoint;\n this.maxRequestSizeInBytes = props.maxRequestSizeInBytes || MIN_MAX_REQUEST_SIZE_IN_BYTES;\n this.requestAbortTimeout = props.requestAbortTimeout;\n this.logger = props.logger;\n };\n\n /**\n * Get the content length of an object.\n * @param {string} key - The key of the object.\n * @returns {Promise} The content length of the object in bytes.\n * @throws {TypeError} If the key is not a non-empty string.\n */\n async getContentLength(key: string): Promise {\n this._checkKey(key);\n const headers = {\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('HEAD', encodedKey, {}, headers, '');\n const res = await this._sendRequest(url, 'HEAD', signedHeaders);\n const contentLength = res.headers.get(HEADER_CONTENT_LENGTH);\n return contentLength ? parseInt(contentLength, 10) : 0;\n }\n\n /**\n * Check if a bucket exists.\n * @returns {Promise} True if the bucket exists, false otherwise.\n */\n async bucketExists(): Promise {\n const headers = {\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n const { url, headers: signedHeaders } = await this._sign('HEAD', '', {}, headers, '');\n const res = await this._sendRequest(url, 'HEAD', signedHeaders);\n if (res.ok && res.status === 200) {\n return true;\n }\n return false;\n }\n\n // TBD\n // async createBucket(bucketName) {\n // const xmlBody = `\n // \n // \n // ${this.region}\n // \n // `;\n // const headers = {\n // [HEADER_CONTENT_TYPE]: XML_CONTENT_TYPE,\n // [HEADER_CONTENT_LENGTH]: Buffer.byteLength(xmlBody).toString(),\n // [HEADER_AMZ_CONTENT_SHA256]: await _hash(xmlBody),\n // };\n // const encodedKey = encodeURI(bucketName);\n // const { url, headers: signedHeaders } = await this._sign('PUT', encodedKey, {}, headers, '');\n // const res = await this._sendRequest(url, 'PUT', signedHeaders);\n // if (res.ok && res.status === 200) {\n // return true;\n // }\n // return false;\n // }\n\n /**\n * Check if a file exists in the bucket.\n * @param {string} key - The key of the object.\n * @param {Object} [opts={}] - Additional options for the fileExists operation.\n * @returns {Promise} True if the file exists, false otherwise. 0 - Not found (404), 1 - Found (200), 2 - ETag mismatch (412).\n * @throws {TypeError} If the key is not a non-empty string.\n */\n async fileExists(key: string, opts: Record = {}): Promise {\n this._checkKey(key);\n const { filteredOpts, conditionalHeaders } = this._filterIfHeaders(opts);\n const headers = { [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD, ...conditionalHeaders };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('HEAD', encodedKey, filteredOpts, headers, '');\n try {\n const res = await this._sendRequest(url, 'HEAD', signedHeaders, '', [200, 404, 412, 304]);\n if (res.status === 404) {\n return false;\n }\n if (res.status === 412 || res.status === 304) {\n return null;\n }\n if (res.ok && res.status === 200) return true;\n else this._handleErrorResponse(res);\n return false; // should never happen\n } catch (error: unknown) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n this._log('error', `${ERROR_PREFIX}Failed to check if file exists: ${errorMessage}`);\n throw new Error(`${ERROR_PREFIX}Failed to check if file exists: ${errorMessage}`);\n }\n }\n private async _sign(\n method: HttpMethod,\n keyPath: string,\n query: Object,\n headers: Record,\n body: string | Buffer,\n ): Promise<{ url: string; headers: Record }> {\n const datetime = new Date().toISOString().replace(/[:-]|\\.\\d{3}/g, '');\n const url =\n typeof keyPath === 'string' && keyPath.length > 0 ? new URL(keyPath, this.endpoint) : new URL(this.endpoint);\n url.pathname = `/${encodeURI(this.bucketName)}${url.pathname}`;\n headers[HEADER_AMZ_CONTENT_SHA256] = body ? await _hash(body) : UNSIGNED_PAYLOAD;\n headers[HEADER_AMZ_DATE] = datetime;\n headers[HEADER_HOST] = url.host;\n const canonicalHeaders = this._buildCanonicalHeaders(headers);\n const signedHeaders = Object.keys(headers)\n .map(key => key.toLowerCase())\n .sort()\n .join(';');\n\n const canonicalRequest = await this._buildCanonicalRequest(\n method,\n url,\n query,\n canonicalHeaders,\n signedHeaders,\n body,\n );\n const stringToSign = await this._buildStringToSign(datetime, canonicalRequest);\n const signature = await this._calculateSignature(datetime, stringToSign);\n const authorizationHeader = this._buildAuthorizationHeader(datetime, signedHeaders, signature);\n headers[HEADER_AUTHORIZATION] = authorizationHeader;\n return { url: url.toString(), headers };\n }\n\n private _buildCanonicalHeaders(headers: Record): string {\n return Object.entries(headers)\n .map(([key, value]) => `${key.toLowerCase()}:${String(value).trim()}`)\n .sort()\n .join('\\n');\n }\n\n async _buildCanonicalRequest(\n method: HttpMethod,\n url: URL,\n query: Object,\n canonicalHeaders: string,\n signedHeaders: string,\n body: string | Buffer,\n ): Promise {\n return [\n method,\n url.pathname,\n this._buildCanonicalQueryString(query),\n `${canonicalHeaders}\\n`,\n signedHeaders,\n body ? await _hash(body) : UNSIGNED_PAYLOAD,\n ].join('\\n');\n }\n\n async _buildStringToSign(datetime: string, canonicalRequest: string): Promise {\n const credentialScope = [datetime.slice(0, 8), this.region, S3_SERVICE, AWS_REQUEST_TYPE].join('/');\n return [AWS_ALGORITHM, datetime, credentialScope, await _hash(canonicalRequest)].join('\\n');\n }\n\n async _calculateSignature(datetime: string, stringToSign: string): Promise {\n const signingKey = await this._getSignatureKey(datetime.slice(0, 8));\n return _hmac(signingKey, stringToSign, 'hex');\n }\n\n private _buildAuthorizationHeader(datetime: string, signedHeaders: string, signature: string): string {\n const credentialScope = [datetime.slice(0, 8), this.region, S3_SERVICE, AWS_REQUEST_TYPE].join('/');\n return [\n `${AWS_ALGORITHM} Credential=${this.accessKeyId}/${credentialScope}`,\n `SignedHeaders=${signedHeaders}`,\n `Signature=${signature}`,\n ].join(', ');\n }\n\n private _filterIfHeaders(opts: Record): {\n filteredOpts: Record;\n conditionalHeaders: Record;\n } {\n const filteredOpts: Record = {};\n const conditionalHeaders: Record = {};\n const ifHeaders = ['if-match', 'if-none-match', 'if-modified-since', 'if-unmodified-since'];\n\n for (const [key, value] of Object.entries(opts)) {\n if (ifHeaders.includes(key)) {\n conditionalHeaders[key] = value;\n } else {\n filteredOpts[key] = value;\n }\n }\n\n return { filteredOpts, conditionalHeaders };\n }\n /**\n * List objects in the bucket.\n * @param {string} [delimiter='/'] - The delimiter to use for grouping objects in specific path.\n * @param {string} [prefix=''] - The prefix to filter objects in specific path.\n * @param {number} [maxKeys=1000] - The maximum number of keys to return.\n * @param {string} [method='GET'] - The HTTP method to use (GET or HEAD).\n * @param {Object} [opts={}] - Additional options for the list operation.\n * @returns {Promise} The list of objects or object metadata.\n * @throws {TypeError} If any of the parameters are of incorrect type.\n */\n async list(\n delimiter: string = '/',\n prefix: string = '',\n maxKeys: number = 1000,\n method: HttpMethod = 'GET',\n opts: Object = {},\n ): Promise> {\n this._checkDelimiter(delimiter);\n this._checkPrefix(prefix);\n this._checkMaxKeys(maxKeys);\n this._checkMethodHeadnGet(method);\n this._checkOpts(opts);\n this._log('info', `Listing objects in ${prefix}`);\n\n const query = {\n 'list-type': LIST_TYPE,\n 'max-keys': String(maxKeys),\n ...opts,\n } as { [key: string]: any };\n if (prefix.length > 0) {\n query['prefix'] = prefix;\n }\n const headers = {\n [HEADER_CONTENT_TYPE]: JSON_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n const encodedKey = delimiter === '/' ? delimiter : uriEscape(delimiter);\n const { url, headers: signedHeaders } = await this._sign('GET', encodedKey, query, headers, '');\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n const res = await this._sendRequest(urlWithQuery, 'GET', signedHeaders);\n const responseBody = await res.text();\n\n if (method === 'HEAD') {\n const contentLength = res.headers.get(HEADER_CONTENT_LENGTH);\n const lastModified = res.headers.get(HEADER_LAST_MODIFIED);\n const etag = res.headers.get(HEADER_ETAG);\n\n return {\n size: contentLength ? +contentLength : undefined,\n mtime: lastModified ? new Date(lastModified) : undefined,\n ETag: etag || undefined,\n };\n }\n\n const data = _parseXml(responseBody);\n const output = data.listBucketResult || data.error || data;\n return output.contents || output;\n }\n\n /**\n * List multipart uploads in the bucket.\n * @param {string} [delimiter='/'] - The delimiter to use for grouping objects in specific path.\n * @param {string} [prefix=''] - The prefix to filter objects in specific path.\n * @param {string} [method='GET'] - The HTTP method to use (GET or HEAD).\n * @param {Object} [opts={}] - Additional options for the list operation.\n * @returns {Promise} The list of objects or object metadata.\n * @throws {TypeError} If any of the parameters are of incorrect type.\n */\n async listMultiPartUploads(\n delimiter: string = '/',\n prefix: string = '',\n method: HttpMethod = 'GET',\n opts: Object = {},\n ): Promise {\n this._checkDelimiter(delimiter);\n this._checkPrefix(prefix);\n this._checkMethodHeadnGet(method);\n this._checkOpts(opts);\n this._log('info', `Listing multipart uploads in ${prefix}`);\n\n const query = {\n uploads: '',\n ...opts,\n } as Record;\n const headers = {\n [HEADER_CONTENT_TYPE]: JSON_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n const encodedKey = delimiter === '/' ? delimiter : uriEscape(delimiter);\n const { url, headers: signedHeaders } = await this._sign('GET', encodedKey, query, headers, '');\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n const res = await this._sendRequest(urlWithQuery, 'GET', signedHeaders);\n const responseBody = await res.text();\n\n if (method === 'HEAD') {\n return {\n size: +(res.headers.get(HEADER_CONTENT_LENGTH) ?? '0'),\n mtime: new Date(res.headers.get(HEADER_LAST_MODIFIED) ?? ''),\n ETag: res.headers.get(HEADER_ETAG) ?? '',\n };\n }\n\n const data = _parseXml(responseBody);\n const output = data.listMultipartUploadsResult || data.error || data;\n return output.uploads || output;\n }\n\n /**\n * Get an object from the bucket.\n * @param {string} key - The key of the object to get.\n * @param {Object} [opts={}] - Additional options for the get operation.\n * @returns {Promise} The content of the object. If the object does not exist, null will be returned.\n */\n async get(key: string, opts: Record = {}): Promise {\n this._checkKey(key);\n this._log('info', `Getting object ${key}`);\n const { filteredOpts, conditionalHeaders } = this._filterIfHeaders(opts);\n const headers = {\n [HEADER_CONTENT_TYPE]: JSON_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n ...conditionalHeaders,\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('GET', encodedKey, filteredOpts, headers, '');\n const res = await this._sendRequest(url, 'GET', signedHeaders, '', [200, 404, 412, 304]);\n if (res.status === 404 || res.status === 412 || res.status === 304) {\n this._log('error', `Failed to get object. Status: ${res.status}`);\n return null;\n }\n if (!res.ok) {\n this._log('error', `Failed to get object. Status: ${res.status}`);\n throw new Error(`Failed to get object. Status: ${res.status}`);\n }\n return res.text();\n }\n\n /**\n *\n * @param {string} key - The key of the object to get.\n * @param {Object} [opts={}] - Additional options for the get operation.\n * @returns {Promise<{ etag: string|null; data: string|null }>} The content of the object. If the object does not exist, etag and data will be null.\n */\n async getObjectWithETag(\n key: string,\n opts: Record = {},\n ): Promise<{ etag: string | null; data: string | null }> {\n this._checkKey(key);\n this._log('info', `Getting object ${key}`);\n const { filteredOpts, conditionalHeaders } = this._filterIfHeaders(opts);\n const headers = {\n [HEADER_CONTENT_TYPE]: JSON_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n ...conditionalHeaders,\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('GET', encodedKey, filteredOpts, headers, '');\n try {\n const res = await this._sendRequest(url, 'GET', signedHeaders, '', [200, 404, 412, 304]);\n if (res.status === 404 || res.status === 412 || res.status === 304) {\n this._log('error', `Failed to get object. Status: ${res.status}`);\n return { etag: null, data: null };\n }\n if (!res.ok) {\n this._log('error', `Failed to get object. Status: ${res.status}`);\n throw new Error(`Failed to get object. Status: ${res.status}`);\n }\n\n const etag = res.headers.get('etag');\n if (!etag) {\n throw new Error('ETag not found in response headers');\n }\n const data = await res.text();\n return { etag: sanitizeETag(etag), data };\n } catch (error) {\n this._log('error', `Error getting object ${key} with ETag: ${error}`);\n throw error;\n }\n }\n\n /**\n * Get the ETag of an object.\n * @param {string} key - The key of the object to get.\n * @param {Object} [opts={}] - Additional options for the get operation.\n * @returns {Promise} The ETag of the object or null if the object etag does not match.\n */\n async getEtag(key: string, opts: Record = {}): Promise {\n this._checkKey(key);\n this._log('info', `Getting etag object ${key}`);\n const { filteredOpts, conditionalHeaders } = this._filterIfHeaders(opts);\n const headers = {\n [HEADER_CONTENT_TYPE]: JSON_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n ...conditionalHeaders,\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('HEAD', encodedKey, filteredOpts, headers, '');\n\n const res = await this._sendRequest(url, 'HEAD', signedHeaders, '', [200, 412, 304]);\n this._log('info', `Response status: ${(res.status, res.statusText)}`);\n // etag does not match\n if (res.status === 412 || res.status === 304) {\n return null;\n }\n\n const etag = res.headers.get('etag');\n if (!etag) {\n this._log('error', `ETag not found in response headers`);\n throw new Error(`ETag not found in response headers`);\n }\n return sanitizeETag(etag);\n }\n\n /**\n * Get a response of an object from the bucket.\n * @param {string} key - The key of the object to get.\n * @param {boolean} [wholeFile=true] - Whether to get the whole file or a part.\n * @param {number} [rangeFrom=0] - The range from to get if not getting the whole file.\n * @param {number} [rangeTo=this.maxRequestSizeInBytes] - The range to to get if not getting the whole file. Note: rangeTo is inclusive.\n * @param {Object} [opts={}] - Additional options for the get operation.\n * @returns {Promise} Response of the object content. Use readableStream() to get the stream from .body.\n */\n async getResponse(\n key: string,\n wholeFile: boolean = true,\n rangeFrom: number = 0,\n rangeTo: number = this.maxRequestSizeInBytes,\n opts: Record = {},\n ): Promise {\n this._checkKey(key);\n const { filteredOpts, conditionalHeaders } = this._filterIfHeaders({ ...opts });\n const headers = {\n [HEADER_CONTENT_TYPE]: JSON_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n ...(wholeFile ? {} : { range: `bytes=${rangeFrom}-${rangeTo - 1}` }),\n ...conditionalHeaders,\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('GET', encodedKey, filteredOpts, headers, '');\n const urlWithQuery = `${url}?${new URLSearchParams(filteredOpts)}`;\n\n return this._sendRequest(urlWithQuery, 'GET', signedHeaders);\n }\n\n /**\n * Put an object into the bucket.\n * @param {string} key - The key of the object to put. To create a folder, include a trailing slash.\n * @param {Buffer|string} data - The content of the object to put.\n * @returns {Promise} The response from the put operation.\n * @throws {TypeError} If the key is not a non-empty string or data is not a Buffer or string.\n */\n async put(key: string, data: string | Buffer): Promise {\n this._checkKey(key);\n if (!(data instanceof Buffer || typeof data === 'string')) {\n this._log('error', ERROR_DATA_BUFFER_REQUIRED);\n throw new TypeError(ERROR_DATA_BUFFER_REQUIRED);\n }\n // const encodedKey = encodeURIComponent(key);\n this._log('info', `Uploading object ${key}`);\n const contentLength = typeof data === 'string' ? Buffer.byteLength(data) : data.length;\n const headers = {\n [HEADER_CONTENT_LENGTH]: contentLength,\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('PUT', encodedKey, {}, headers, data);\n const res = await this._sendRequest(url, 'PUT', signedHeaders, data);\n return res;\n }\n\n /**\n * Initiate a multipart upload.\n * @param {string} key - The key of the object to upload.\n * @param {string} [fileType='application/octet-stream'] - The MIME type of the file.\n * @returns {Promise} The upload ID for the multipart upload.\n * @throws {TypeError} If the key is not a non-empty string or fileType is not a string.\n * @throws {Error} If the multipart upload initiation fails.\n */\n async getMultipartUploadId(key: string, fileType: string = DEFAULT_STREAM_CONTENT_TYPE): Promise {\n this._checkKey(key);\n if (typeof fileType !== 'string') {\n this._log('error', `${ERROR_PREFIX}fileType must be a string`);\n throw new TypeError(`${ERROR_PREFIX}fileType must be a string`);\n }\n this._log('info', `Initiating multipart upload for object ${key}`);\n const query = { uploads: '' };\n const headers = {\n [HEADER_CONTENT_TYPE]: fileType,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('POST', encodedKey, query, headers, '');\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n\n const res = await this._sendRequest(urlWithQuery, 'POST', signedHeaders);\n const responseBody = await res.text();\n const parsedResponse = _parseXml(responseBody);\n\n if (\n typeof parsedResponse === 'object' &&\n parsedResponse !== null &&\n 'error' in parsedResponse &&\n typeof parsedResponse.error === 'object' &&\n parsedResponse.error !== null &&\n 'message' in parsedResponse.error\n ) {\n const errorMessage = String(parsedResponse.error.message);\n this._log('error', `${ERROR_PREFIX}Failed to abort multipart upload: ${errorMessage}`);\n throw new Error(`${ERROR_PREFIX}Failed to abort multipart upload: ${errorMessage}`);\n }\n\n if (typeof parsedResponse === 'object' && parsedResponse !== null) {\n if (!parsedResponse.initiateMultipartUploadResult || !parsedResponse.initiateMultipartUploadResult.uploadId) {\n this._log('error', `${ERROR_PREFIX}Failed to create multipart upload: no uploadId in response`);\n throw new Error(`${ERROR_PREFIX}Failed to create multipart upload: Missing upload ID in response`);\n }\n\n return parsedResponse.initiateMultipartUploadResult.uploadId;\n } else {\n this._log('error', `${ERROR_PREFIX}Failed to create multipart upload: unexpected response format`);\n throw new Error(`${ERROR_PREFIX}Failed to create multipart upload: Unexpected response format`);\n }\n }\n\n /**\n * Upload a part in a multipart upload.\n * @param {string} key - The key of the object being uploaded.\n * @param {Buffer|string} data - The content of the part.\n * @param {string} uploadId - The upload ID of the multipart upload.\n * @param {number} partNumber - The part number.\n * @param {Object} [opts={}] - Additional options for the upload.\n * @returns {Promise} The ETag and part number of the uploaded part.\n * @throws {TypeError} If any of the parameters are of incorrect type.\n */\n async uploadPart(\n key: string,\n data: Buffer | string,\n uploadId: string,\n partNumber: number,\n opts: Object = {},\n ): Promise {\n this._validateUploadPartParams(key, data, uploadId, partNumber, opts);\n const query = { uploadId, partNumber, ...opts } as { [key: string]: any };\n const headers = {\n [HEADER_CONTENT_LENGTH]: data.length,\n } as { [key: string]: any };\n\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('PUT', encodedKey, query, headers, data);\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n\n const res = await this._sendRequest(urlWithQuery, 'PUT', signedHeaders, data);\n const ETag = sanitizeETag(res.headers.get('etag') || '');\n return { partNumber, ETag };\n }\n\n private _validateUploadPartParams(\n key: string,\n data: Buffer | string,\n uploadId: string,\n partNumber: number,\n opts: Object,\n ) {\n this._checkKey(key);\n if (!(data instanceof Buffer || typeof data === 'string')) {\n this._log('error', ERROR_DATA_BUFFER_REQUIRED);\n throw new TypeError(ERROR_DATA_BUFFER_REQUIRED);\n }\n if (typeof uploadId !== 'string' || uploadId.trim().length === 0) {\n this._log('error', ERROR_UPLOAD_ID_REQUIRED);\n throw new TypeError(ERROR_UPLOAD_ID_REQUIRED);\n }\n if (!Number.isInteger(partNumber) || partNumber <= 0) {\n this._log('error', `${ERROR_PREFIX}partNumber must be a positive integer`);\n throw new TypeError(`${ERROR_PREFIX}partNumber must be a positive integer`);\n }\n this._checkOpts(opts);\n }\n\n /**\n * Complete a multipart upload.\n * @param {string} key - The key of the object being uploaded.\n * @param {string} uploadId - The upload ID of the multipart upload.\n * @param {Array} parts - An array of objects containing PartNumber and ETag for each part.\n * @returns {Promise} The result of the complete multipart upload operation.\n * @throws {TypeError} If any of the parameters are of incorrect type.\n * @throws {Error} If the complete multipart upload operation fails.\n */\n async completeMultipartUpload(\n key: string,\n uploadId: string,\n parts: Array,\n ): Promise {\n this._checkKey(key);\n if (typeof uploadId !== 'string' || uploadId.trim().length === 0) {\n this._log('error', ERROR_UPLOAD_ID_REQUIRED);\n throw new TypeError(ERROR_UPLOAD_ID_REQUIRED);\n }\n if (!Array.isArray(parts) || parts.length === 0) {\n this._log('error', ERROR_PARTS_REQUIRED);\n throw new TypeError(ERROR_PARTS_REQUIRED);\n }\n if (!parts.every(part => typeof part.partNumber === 'number' && typeof part.ETag === 'string')) {\n this._log('error', ERROR_INVALID_PART);\n throw new TypeError(ERROR_INVALID_PART);\n }\n this._log('info', `Complete multipart upload ${uploadId} for object ${key}`);\n const query = { uploadId };\n const xmlBody = this._buildCompleteMultipartUploadXml(parts);\n const headers = {\n [HEADER_CONTENT_TYPE]: XML_CONTENT_TYPE,\n [HEADER_CONTENT_LENGTH]: Buffer.byteLength(xmlBody).toString(),\n [HEADER_AMZ_CONTENT_SHA256]: await _hash(xmlBody),\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('POST', encodedKey, query, headers, xmlBody);\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n\n const res = await this._sendRequest(urlWithQuery, 'POST', signedHeaders, xmlBody);\n const responseBody = await res.text();\n const parsedResponse = _parseXml(responseBody);\n\n if (\n typeof parsedResponse === 'object' &&\n parsedResponse !== null &&\n 'error' in parsedResponse &&\n typeof parsedResponse.error === 'object' &&\n parsedResponse.error !== null &&\n 'message' in parsedResponse.error\n ) {\n const errorMessage = String(parsedResponse.error.message);\n this._log('error', `${ERROR_PREFIX}Failed to abort multipart upload: ${errorMessage}`);\n throw new Error(`${ERROR_PREFIX}Failed to abort multipart upload: ${errorMessage}`);\n }\n\n return parsedResponse.completeMultipartUploadResult;\n }\n\n /**\n * Aborts a multipart upload.\n * @param {string} key - The key of the object being uploaded.\n * @param {string} uploadId - The ID of the multipart upload to abort.\n * @returns {Promise} - A promise that resolves to the abort response.\n * @throws {Error} If the abort operation fails.\n */\n async abortMultipartUpload(key: string, uploadId: string): Promise {\n // Input validation\n this._checkKey(key);\n if (typeof uploadId !== 'string' || uploadId.trim().length === 0) {\n this._log('error', ERROR_UPLOAD_ID_REQUIRED);\n throw new TypeError(ERROR_UPLOAD_ID_REQUIRED);\n }\n\n this._log('info', `Aborting multipart upload ${uploadId} for object ${key}`);\n\n // Prepare the request\n const query = { uploadId };\n const headers = {\n [HEADER_CONTENT_TYPE]: XML_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n\n try {\n // Sign and send the request\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('DELETE', encodedKey, query, headers, '');\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n\n const res = await this._sendRequest(urlWithQuery, 'DELETE', signedHeaders);\n\n // Check for successful response\n if (res.ok) {\n const responseBody = await res.text();\n const parsedResponse = _parseXml(responseBody);\n\n if (\n typeof parsedResponse === 'object' &&\n parsedResponse !== null &&\n 'error' in parsedResponse &&\n typeof parsedResponse.error === 'object' &&\n parsedResponse.error !== null &&\n 'message' in parsedResponse.error\n ) {\n const errorMessage = String(parsedResponse.error.message);\n this._log('error', `${ERROR_PREFIX}Failed to abort multipart upload: ${errorMessage}`);\n throw new Error(`${ERROR_PREFIX}Failed to abort multipart upload: ${errorMessage}`);\n }\n\n return {\n status: 'Aborted',\n key,\n uploadId,\n response: parsedResponse,\n };\n } else {\n this._log('error', `${ERROR_PREFIX}Abort request failed with status ${res.status}`);\n throw new Error(`${ERROR_PREFIX}Abort request failed with status ${res.status}`);\n }\n } catch (error: unknown) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n this._log('error', `${ERROR_PREFIX}Failed to abort multipart upload for key ${key}: ${errorMessage}`);\n throw new Error(`${ERROR_PREFIX}Failed to abort multipart upload for key ${key}: ${errorMessage}`);\n }\n }\n\n private _buildCompleteMultipartUploadXml(parts: Array): string {\n return `\n \n ${parts\n .map(\n part => `\n \n ${part.partNumber}\n ${part.ETag}\n \n `,\n )\n .join('')}\n \n `;\n }\n\n /**\n * Delete an object from the bucket.\n * @param {string} key - The key of the object to delete.\n * @returns {Promise} The response from the delete operation. True if the delete operation was successful, false otherwise. Note: The delete operation may return a 204 status code even if the object was not found.\n */\n async delete(key: string): Promise {\n this._checkKey(key);\n this._log('info', `Deleting object ${key}`);\n const headers = {\n [HEADER_CONTENT_TYPE]: JSON_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('DELETE', encodedKey, {}, headers, '');\n const res = await this._sendRequest(url, 'DELETE', signedHeaders);\n if (res.status === 204 || res.status === 200) {\n return true;\n }\n return false;\n }\n\n async _sendRequest(\n url: string,\n method: HttpMethod,\n headers: Record,\n body?: string | Buffer,\n toleratedStatusCodes: number[] = [],\n ): Promise {\n this._log('info', `Sending ${method} request to ${url}, headers: ${JSON.stringify(headers)}`);\n const res = await fetch(url, {\n method,\n headers,\n body: ['GET', 'HEAD'].includes(method) ? undefined : body,\n signal: this.requestAbortTimeout !== undefined ? AbortSignal.timeout(this.requestAbortTimeout) : undefined,\n });\n\n if (!res.ok && !toleratedStatusCodes.includes(res.status)) {\n await this._handleErrorResponse(res);\n }\n\n return res;\n }\n\n async _handleErrorResponse(res: Response) {\n const errorBody = await res.text();\n const errorCode = res.headers.get('x-amz-error-code') || 'Unknown';\n const errorMessage = res.headers.get('x-amz-error-message') || res.statusText;\n this._log(\n 'error',\n `${ERROR_PREFIX}Request failed with status ${res.status}: ${errorCode} - ${errorMessage},err body: ${errorBody}`,\n );\n throw new Error(\n `${ERROR_PREFIX}Request failed with status ${res.status}: ${errorCode} - ${errorMessage}, err body: ${errorBody}`,\n );\n }\n\n _buildCanonicalQueryString(queryParams: Object): string {\n if (Object.keys(queryParams).length < 1) {\n return '';\n }\n\n return Object.keys(queryParams)\n .sort()\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent((queryParams as Record)[key])}`)\n .join('&');\n }\n async _getSignatureKey(dateStamp: string): Promise {\n const kDate = await _hmac(`AWS4${this.secretAccessKey}`, dateStamp);\n const kRegion = await _hmac(kDate, this.region);\n const kService = await _hmac(kRegion, S3_SERVICE);\n return _hmac(kService, AWS_REQUEST_TYPE);\n }\n}\n\nconst _hash = async (content: string | Buffer): Promise => {\n const hashSum = _createHash('sha256');\n hashSum.update(content);\n return hashSum.digest('hex');\n};\n\nconst _hmac = async (key: string | Buffer, content: string, encoding?: 'hex'): Promise => {\n const hmacSum = _createHmac('sha256', key);\n hmacSum.update(content);\n return hmacSum.digest(encoding);\n};\nexport const sanitizeETag = (etag: string): string => {\n const replaceChars: Record = {\n '\"': '',\n '"': '',\n '"': '',\n '"': '',\n '"': '',\n };\n return etag.replace(/^(\"|"|")|(\"|"|")$/g, m => replaceChars[m] as string);\n};\n\nconst _parseXml = (str: string): string | object | any => {\n const unescapeXml = (value: string): string => {\n return value\n .replace(/"/g, '\"')\n .replace(/'/g, \"'\")\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/&/g, '&');\n };\n\n const json = {};\n const re = /<(\\w)([-\\w]+)(?:\\/|[^>]*>((?:(?!<\\1)[\\s\\S])*)<\\/\\1\\2)>/gm;\n let match;\n\n while ((match = re.exec(str))) {\n const [, prefix, key, value] = match;\n const fullKey = prefix.toLowerCase() + key;\n const parsedValue = value != null ? _parseXml(value) : true;\n\n if (typeof parsedValue === 'string') {\n (json as { [key: string]: any })[fullKey] = sanitizeETag(unescapeXml(parsedValue));\n } else if (Array.isArray((json as { [key: string]: any })[fullKey])) {\n (json as { [key: string]: any })[fullKey].push(parsedValue);\n } else {\n (json as { [key: string]: any })[fullKey] =\n (json as { [key: string]: any })[fullKey] != null\n ? [(json as { [key: string]: any })[fullKey], parsedValue]\n : expectArray[fullKey]\n ? [parsedValue]\n : parsedValue;\n }\n }\n\n return Object.keys(json).length ? json : unescapeXml(str);\n};\n\nexport { S3 };\nexport default S3;\n", "'use strict';\n\nimport { S3 } from 'ultralight-s3';\nimport avro from 'avro-js'; // eslint-disable-line\nimport {\n\tlowstorage_ERROR_CODES,\n\tlowstorageError,\n\tCollectionNotFoundError,\n\tSchemaValidationError,\n\tDocumentValidationError,\n\tS3OperationError,\n} from './errors.js';\nimport { matchesQuery, generateUUID, inferAvroType, ensureIdFieldInSchema } from './helpers.js';\n\nconst MODULE_NAME = 'lowstorage';\nconst DEFAULT_DELIMITER = '/';\nconst PROJECT_DIR_PREFIX = 'lowstorage';\nconst COL_SUFFIX = '.avro';\nconst CHUNG_1MB = 1024 * 1024;\nconst CHUNG_5MB = 5 * CHUNG_1MB;\nconst EMPTY_DATA = Buffer.from('', 'utf8');\n\nconst errorValidationFn = (errorCode = lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR) => {\n\tthrow new DocumentValidationError(`${MODULE_NAME}: Invalid document or schema`, errorCode);\n};\n\nconst _hasColName = (colName) => {\n\tif (colName.trim() === '' || colName === null || typeof colName === 'undefined' || colName.length > 255 || colName === null) {\n\t\tthrow new lowstorageError(`${MODULE_NAME}: Collection name is required, null or too long`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n\t}\n};\n\n// code / description\n// init of new collection is automatically creating it in the bucket\n// there is optional (opt-in) switch to create new collections in bucket\n// if the schema is not provided, it will create empty buffer and save it\n// if the schema is provided, it will save it in memory and use it for all ops\n// if the schema is updated, it will save it in memory and use it for all ops\n// exposed functions are:\n// listCollections \u2705\n// collectionExists \u2705\n// createCollection \u2705\n// removeCollection \u2705\n// renameCollection \u2705\n// updateCollectionSchema \u274C\n// collection \u2705\n// s3 \u2705\n\n// Operations over collections are:\n// insert \u2705\n// find \u2705\n// findOne \u2705\n// update \u2705\n// updateOne \u2705\n// delete \u2705\n// count \u2705\n\n// Errors:\n// lowstorageError \u2705\n// CollectionNotFoundError \u2705\n// SchemaValidationError \u2705\n// DocumentValidationError \u2705\n// S3OperationError \u2705\n\n/**\n * lowstorage class for managing collections and performing operations on top of S3-compatible storages.\n * @class\n * @example\n * const storage = new lowstorage({\n * \taccessKeyId: 'YOUR_ACCESS_KEY',\n * \tsecretAccessKey: 'YOUR_SECRET_KEY',\n * \tendpoint: 'YOUR_ENDPOINT',\n * \tbucketName: 'YOUR_BUCKET_NAME',\n * \tregion: 'YOUR_REGION',\n * });\n *\n * // Create a collection\n * const userCol = await storage.collection('users');\n *\n * // Insert a document\n * await userCol.insert({\n * \tname: 'Kevin',\n * \tgender: 'whatever',\n * \tposts: [],\n * });\n *\n * // Show all users\n * const allUsers = await userCol.find({});\n *\n * // Find users with pagination (e.g., page 2, 10 users per page)\n * const secondPageUsers = await userCol.find({}, { skip: 10, limit: 10 });\n *\n * // Find user by ID and update name\n * await userCol.update({ _id: id }, { name: 'Carlos' });\n */\nclass lowstorage {\n\t/**\n\t * Create a new lowstorage instance.\n\t * @param {Object} options - Configuration options for lowstorage.\n\t * @param {string} options.accessKeyId - S3 access key ID.\n\t * @param {string} options.secretAccessKey - S3 secret access key.\n\t * @param {string} options.endpoint - S3 endpoint URL.\n\t * @param {string} options.bucketName - S3 bucket name.\n\t * @param {string} [options.region='auto'] - S3 region.\n\t * @param {Object} [options.logger=null] - Logger object.\n\t * @param {string} [options.dirPrefix=PROJECT_DIR_PREFIX] - Directory prefix for collections.\n\t * @param {Number} [options.maxRequestSizeInBytes=CHUNG_5MB] - Chunk size for reading and writing data. AWS S3 has a minimum of 5MB per object.\n\t * @returns {lowstorage} A new lowstorage instance.\n\t */\n\tconstructor(\n\t\toptions = {\n\t\t\taccessKeyId: undefined,\n\t\t\tsecretAccessKey: undefined,\n\t\t\tendpoint: undefined,\n\t\t\tbucketName: undefined,\n\t\t\tregion: 'auto',\n\t\t\tlogger: null,\n\t\t\tdirPrefix: PROJECT_DIR_PREFIX,\n\t\t},\n\t) {\n\t\tthis._checkArgs(options);\n\t\tthis._schemas = new Map();\n\t\tthis._s3 = new S3(options);\n\t\tthis._dirPrefix = options.dirPrefix || PROJECT_DIR_PREFIX;\n\t\tthis._avro = avro;\n\t}\n\n\t_checkArgs = (args) => {\n\t\tconst requiredFields = ['accessKeyId', 'secretAccessKey', 'endpoint', 'bucketName'];\n\t\tfor (const field of requiredFields) {\n\t\t\tif (!args[field]) {\n\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: ${field} is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n\t\t\t}\n\t\t}\n\t};\n\n\t/**\n\t * List all collections.\n\t * @returns {Promise} An array of collection names.\n\t * @throws {S3OperationError} If there's an error during S3 operation.\n\t */\n\tasync listCollections() {\n\t\ttry {\n\t\t\tconst listed = await this._s3.list(DEFAULT_DELIMITER, this._dirPrefix);\n\t\t\tif (typeof listed === 'object' && listed !== null && listed.keyCount === '0') return [];\n\t\t\t// remove the delimiter from the key\n\t\t\treturn listed.map((entry) => entry.key.slice(this._dirPrefix.length + 1, -COL_SUFFIX.length));\n\t\t} catch (error) {\n\t\t\tthrow new S3OperationError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t}\n\t}\n\n\t/**\n\t * Check if a collection exists.\n\t * @param {string} colName - The name of the collection.\n\t * @returns {Promise} True if the collection exists, false otherwise.\n\t * @throws {lowstorageError} If there's an error.\n\t */\n\tasync collectionExists(colName) {\n\t\ttry {\n\t\t\t_hasColName(colName);\n\t\t\tconst exists = await this._s3.fileExists(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`);\n\t\t\treturn !!exists;\n\t\t} catch (error) {\n\t\t\tif (error.message.includes('Not Found')) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND);\n\t\t}\n\t}\n\n\t/**\n\t * Create a new collection.\n\t * @param {string} colName - The name of the collection.\n\t * @param {Object} [schema] - The schema for the collection.\n\t * @param {Array} [data=[]] - The initial data for the collection.\n\t * @returns {Promise} A Promise that resolves to a Collection object.\n\t * @throws {lowstorageError} If there's an error.\n\t */\n\tasync createCollection(colName, schema, data = []) {\n\t\ttry {\n\t\t\t_hasColName(colName);\n\t\t\tconst exists = await this.collectionExists(colName);\n\t\t\tif (!exists) {\n\t\t\t\tif (typeof schema !== 'undefined' && schema !== null) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst isValid = this._avro.parse(schema);\n\t\t\t\t\t\tif (!isValid) {\n\t\t\t\t\t\t\tthrow new SchemaValidationError(\n\t\t\t\t\t\t\t\t`${MODULE_NAME}: Schema is invalid: ${schema}`,\n\t\t\t\t\t\t\t\tlowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tthrow new SchemaValidationError(`${MODULE_NAME}: Schema is invalid: ${schema}`, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (data.length > 0 && schema) {\n\t\t\t\t\tconst wrapperType = this._avro.parse({ type: 'array', items: schema });\n\t\t\t\t\tawait this._s3.put(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`, wrapperType.toBuffer(data));\n\t\t\t\t} else {\n\t\t\t\t\tawait this._s3.put(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`, EMPTY_DATA);\n\t\t\t\t}\n\t\t\t\treturn this.collection(colName, schema, false);\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Collection ${colName} already exists`, lowstorage_ERROR_CODES.COLLECTION_EXISTS);\n\t\t} catch (error) {\n\t\t\tif (error instanceof lowstorageError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.CREATE_COLLECTION_ERROR);\n\t\t}\n\t}\n\n\t/**\n\t * Remove a collection.\n\t * @param {string} colName - The name of the collection.\n\t * @returns {Promise} A Promise that resolves to true if the collection is removed, false otherwise.\n\t * @throws {lowstorageError} If there's an error.\n\t */\n\tasync removeCollection(colName) {\n\t\ttry {\n\t\t\t_hasColName(colName);\n\t\t\tconst exists = await this.collectionExists(colName);\n\t\t\tif (exists) {\n\t\t\t\tawait this._s3.delete(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`);\n\t\t\t\tconst exists2 = await this.collectionExists(colName);\n\t\t\t\tif (typeof exists2 === 'boolean') {\n\t\t\t\t\tif (!exists2) {\n\t\t\t\t\t\tthis._schemas.delete(colName);\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Failed to delete collection ${colName}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t\t}\n\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to delete collection ${colName}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Collection ${colName} does not exist`, lowstorage_ERROR_CODES.REMOVE_COLLECTION_ERROR);\n\t\t} catch (error) {\n\t\t\tif (error instanceof S3OperationError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(\n\t\t\t\t`${MODULE_NAME}: Failed to remove collection: ${error.message}`,\n\t\t\t\tlowstorage_ERROR_CODES.REMOVE_COLLECTION_ERROR,\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Get or create a collection.\n\t * @param {string} colName - The name of the collection.\n\t * @param {Object} [schema] - The schema for the collection.\n\t * @param {boolean} [autoCreate=true] - Whether to automatically create the collection if it doesn't exist.\n\t * @returns {Promise} A Promise that resolves to a Collection object.\n\t * @throws {lowstorageError} If there's an error.\n\t */\n\tasync collection(colName, schema, autoCreate = true) {\n\t\ttry {\n\t\t\t_hasColName(colName);\n\t\t\tconst colPath = `${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`;\n\t\t\tconst exists = await this._s3.fileExists(colPath);\n\t\t\tif (!exists) {\n\t\t\t\tif (!autoCreate) {\n\t\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Collection ${colName} does not exist`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND);\n\t\t\t\t}\n\t\t\t\t// TODO: check if this is the right way to handle empty data\n\t\t\t\tawait this._s3.put(colPath, EMPTY_DATA);\n\t\t\t}\n\t\t\tconst colSchema = schema || this._schemas.get(colName) || undefined;\n\t\t\treturn new Collection(colName, colSchema, this._s3, this._dirPrefix);\n\t\t} catch (error) {\n\t\t\t// check if error message contains \"unknown type\" and if so, throw a schema validation error\n\t\t\tif (error.message.includes('unknown type')) {\n\t\t\t\tthrow new SchemaValidationError(\n\t\t\t\t\t`${MODULE_NAME}: Schema input is invalid: ${error.message}`,\n\t\t\t\t\tlowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND);\n\t\t}\n\t}\n\n\t/**\n\t * Get the S3 instance associated with the lowstorage instance.\n\t * @returns {S3} The S3 instance. Use this to perform S3 operations. Check for ultralight-s3 for more details.\n\t */\n\ts3 = () => {\n\t\treturn this._s3;\n\t};\n}\n\n/**\n * Collection class for managing documents in a collection.\n * @class\n * @example\n * const storage = new lowstorage({\n * \taccessKeyId: 'YOUR_ACCESS_KEY',\n * \tsecretAccessKey: 'YOUR_SECRET_KEY',\n * \tendpoint: 'YOUR_ENDPOINT',\n * \tbucketName: 'YOUR_BUCKET_NAME',\n * \tregion: 'YOUR_REGION',\n * });\n *\n * // Create a collection\n * const userCol = await storage.collection('users');\n *\n * // Insert a document\n * await userCol.insert({\n * \tname: 'Kevin',\n * \tgender: 'whatever',\n * \tposts: [],\n * });\n *\n * // Show all users\n * const allUsers = await userCol.find({});\n *\n * // Find users with pagination (e.g., page 2, 10 users per page)\n * const secondPageUsers = await userCol.find({}, { skip: 10, limit: 10 });\n *\n * // Find user by ID and update name\n * await userCol.update({ _id: id }, { name: 'Carlos' });\n */\nclass Collection {\n\t/**\n\t * Create a new Collection instance.\n\t * @param {string} colName - The name of the collection.\n\t * @param {Object} [schema] - The Avro schema for the collection.\n\t * @param {S3} s3 - The S3 instance.\n\t * @param {string} [dirPrefix=PROJECT_DIR_PREFIX] - The directory prefix for the collection.\n\t * @param {boolean} [safeWrite=false] - Whether to perform a safe write operation. It doublechecks the ETag of the object before writing. False = overwrites the object, True = only writes if the object has not been modified.\n\t * @param {Number} [chunkSize=CHUNG_5MB] - The chunk size for reading and writing data. AWS S3 has a maximum of 5MB per object.\n\t * @returns {Collection} A new Collection instance.\n\t */\n\tconstructor(colName, schema, s3, dirPrefix = PROJECT_DIR_PREFIX, safeWrite = false, chunkSize = CHUNG_5MB) {\n\t\tthis._colName = colName;\n\n\t\tthis._s3 = s3;\n\t\tthis._schema = ensureIdFieldInSchema(schema);\n\t\tthis._dirPrefix = dirPrefix;\n\t\tthis._safeWrite = safeWrite;\n\t\tthis._chunkSize = chunkSize || CHUNG_5MB;\n\t\tthis._key = `${this._dirPrefix}${DEFAULT_DELIMITER}${this._colName}${COL_SUFFIX}`;\n\t\tthis._s3.setMaxRequestSizeInBytes(this._chunkSize);\n\t\tthis._avro = avro;\n\t\tthis._lastETag = '';\n\t\tthis._dataCache = [];\n\t\tthis._avroType = typeof schema === 'undefined' ? null : this._avro.parse(schema);\n\t}\n\n\tgetProps = () => ({\n\t\tcolName: this._colName,\n\t\tschema: this._schema,\n\t\ts3: this._s3,\n\t\tavro: this._avro,\n\t\tavroType: this._avroType,\n\t\tdirPrefix: this._dirPrefix,\n\t\tsafeWrite: this._safeWrite,\n\t\tchunkSize: this._chunkSize,\n\t});\n\n\tsetProps = (props) => {\n\t\tthis._colName = props.colName;\n\t\tthis._schema = props.schema;\n\t\tthis._s3 = props.s3;\n\t\tthis._avro = props.avro;\n\t\tthis._avroType = props.avroType;\n\t\tthis._dirPrefix = props.dirPrefix;\n\t\tthis._safeWrite = props.safeWrite;\n\t\tthis._chunkSize = props.chunkSize;\n\t};\n\n\tsetSafeWrite = (safeWrite) => {\n\t\tthis._safeWrite = safeWrite;\n\t};\n\n\tgetSafeWrite = () => {\n\t\treturn this._safeWrite;\n\t};\n\n\tgetAvroSchema = () => {\n\t\treturn this._schema;\n\t};\n\n\tsetAvroSchema = (schema) => {\n\t\tthis._schema = ensureIdFieldInSchema(schema);\n\t\tthis._avroType = typeof schema === 'undefined' ? null : this._avro.parse(schema);\n\t};\n\n\tasync _loadData() {\n\t\ttry {\n\t\t\tif (this._avroType === null || typeof this._avroType === 'undefined') {\n\t\t\t\tthrow new lowstorageError(\n\t\t\t\t\t`${MODULE_NAME}: Missing type definition. Configure before operations `,\n\t\t\t\t\tlowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst { etag, data } = await this._s3.getObjectWithETag(this._key, { 'if-none-match': this._lastETag });\n\t\t\tif (data === null) {\n\t\t\t\treturn this._dataCache;\n\t\t\t}\n\t\t\tthis._lastETag = etag === null ? this._lastETag : etag;\n\t\t\tconst wrapperType = this._avro.parse({ type: 'array', items: this._avroType });\n\t\t\tif (data.length < this._chunkSize) {\n\t\t\t\tthis._dataCache = data.length > 0 ? wrapperType.fromBuffer(Buffer.from(data, 'utf8')) : [];\n\t\t\t\treturn this._dataCache;\n\t\t\t}\n\t\t\tlet offset = this._chunkSize;\n\t\t\tlet bufferArr = [Buffer.from(data, 'utf8')];\n\t\t\tlet repeat = true;\n\t\t\twhile (repeat) {\n\t\t\t\tconst nextDataResponse = await this._s3.getResponse(this._key, false, offset, offset + this._chunkSize);\n\t\t\t\tconst nextDataBody = await nextDataResponse.text();\n\t\t\t\tbufferArr.push(Buffer.from(nextDataBody, 'utf8'));\n\t\t\t\toffset += this._chunkSize;\n\t\t\t\tconst contentLength = nextDataResponse.headers.get('content-length') || nextDataBody.length;\n\t\t\t\tif (contentLength < this._chunkSize) {\n\t\t\t\t\trepeat = false;\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst bufferedData = Buffer.concat(bufferArr);\n\t\t\tthis._dataCache = wrapperType.fromBuffer(bufferedData);\n\t\t\treturn this._dataCache;\n\t\t} catch (error) {\n\t\t\tif (error.toString().indexOf('status 404: Unknown - Not Found') > -1) {\n\t\t\t\tthis._dataCache = [];\n\t\t\t\treturn this._dataCache;\n\t\t\t}\n\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to load data: ${error.message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t}\n\t}\n\n\tasync _saveData(data) {\n\t\ttry {\n\t\t\tif (this._avroType === null || typeof this._avroType === 'undefined') {\n\t\t\t\tthrow new lowstorageError(\n\t\t\t\t\t`${MODULE_NAME}: Missing type definition. Configure before operations `,\n\t\t\t\t\tlowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst wrapperType = this._avro.parse({ type: 'array', items: this._avroType });\n\t\t\tconst dataBuffer = data.length > 0 ? wrapperType.toBuffer(data) : EMPTY_DATA; // TODO: check if this is the right way to handle empty data\n\n\t\t\tif (this._safeWrite && this._lastETag !== '') {\n\t\t\t\tconst currentETag = await this._s3.getEtag(this._key);\n\t\t\t\t// If we have a current ETag, check if it matches our last known ETag\n\t\t\t\tif (currentETag !== null && currentETag !== this._lastETag) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst resp = await this._s3.put(this._key, dataBuffer);\n\t\t\tif (resp.status !== 200) {\n\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to save data`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t}\n\n\t\t\t// Update the cached ETag\n\t\t\tconst newETag = resp.headers.get('etag');\n\t\t\tif (newETag) {\n\t\t\t\tthis._lastETag = this._s3.sanitizeETag(newETag);\n\t\t\t\tthis._dataCache = data;\n\t\t\t}\n\t\t\treturn true;\n\t\t} catch (error) {\n\t\t\tif (error instanceof S3OperationError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.SAVE_DATA_ERROR);\n\t\t}\n\t}\n\n\t/**\n\t * Insert a document into the collection.\n\t * @param {Object|Array} doc - The document to insert.\n\t * @param {Object} [schema=undefined] - The schema for the document.\n\t * @returns {Promise} A Promise that resolves to the array of inserted document(s).\n\t * @throws {lowstorageError} If there's an error.\n\t */\n\tasync insert(doc, schema = undefined) {\n\t\ttry {\n\t\t\tif (doc === undefined || doc === null) {\n\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Document is required for insert`, lowstorage_ERROR_CODES.INSERT_ERROR);\n\t\t\t}\n\t\t\tif (typeof doc !== 'object' && !Array.isArray(doc)) {\n\t\t\t\tthrow new DocumentValidationError(\n\t\t\t\t\t`${MODULE_NAME}: Document must be an object or an array`,\n\t\t\t\t\tlowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst items = !Array.isArray(doc) ? [doc] : doc;\n\n\t\t\tconst schemaWithId = ensureIdFieldInSchema(schema) || this._schema || inferAvroType(items[0]);\n\t\t\tconst avroType = this._avro.parse(schemaWithId);\n\t\t\tif (!avroType) {\n\t\t\t\tthrow new SchemaValidationError(\n\t\t\t\t\t`${MODULE_NAME}: Schema is required - Pass a schema to the insert method`,\n\t\t\t\t\tlowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR,\n\t\t\t\t);\n\t\t\t}\n\t\t\tthis._avroType = avroType;\n\t\t\tconst data = await this._loadData();\n\t\t\tfor (let item of items) {\n\t\t\t\tif (typeof item !== 'object' || item === null) {\n\t\t\t\t\tthrow new DocumentValidationError(\n\t\t\t\t\t\t`${MODULE_NAME}: Invalid input: input must be an object or an array of objects`,\n\t\t\t\t\t\tlowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\titem._id = item._id || (await generateUUID());\n\t\t\t\tconst validBuffer = this._avroType.isValid(item, {\n\t\t\t\t\terrorHook: errorValidationFn,\n\t\t\t\t\tnoUndeclaredFields: true,\n\t\t\t\t});\n\t\t\t\tif (validBuffer === true) {\n\t\t\t\t\tdata.push(item);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new DocumentValidationError(`${MODULE_NAME}: Invalid document or schema`, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR);\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst success = await this._saveData(data);\n\t\t\tif (!success) {\n\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to insert document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t}\n\t\t\tthis.setAvroSchema(schemaWithId);\n\t\t\treturn items;\n\t\t} catch (error) {\n\t\t\tif (error.message.includes('unknown type')) {\n\t\t\t\tthrow new SchemaValidationError(\n\t\t\t\t\t`${MODULE_NAME}: Schema input is invalid: ${error.message}`,\n\t\t\t\t\tlowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (error instanceof lowstorageError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME} Insert operation failed: ${error.message}`, lowstorage_ERROR_CODES.INSERT_ERROR);\n\t\t}\n\t}\n\n\t/**\n\t * Find documents in the collection.\n\t * @param {Object} [query={}] - The query to filter documents.\n\t * @param {Object} [options={}] - The options for pagination.\n\t * @param {number} [options.skip=0] - The number of documents to skip. Default is 0.\n\t * @param {number} [options.limit=undefined] - The maximum number of documents to return. Default is undefined, which means no limit.\n\t * @returns {Promise} A Promise that resolves to an array of matching documents.\n\t * @throws {lowstorageError} If there's an error.\n\t */\n\tasync find(query = {}, options = {}) {\n\t\ttry {\n\t\t\tif (query === undefined || query === null) {\n\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Query is required for update`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n\t\t\t}\n\t\t\tconst data = await this._loadData();\n\t\t\tconst start = parseInt(options.skip, 10) || 0;\n\t\t\tconst end = parseInt(options.limit, 10) ? start + parseInt(options.limit, 10) : undefined;\n\t\t\tconst filteredData = data.filter((doc) => matchesQuery(doc, query)).slice(start, end);\n\t\t\treturn filteredData;\n\t\t} catch (error) {\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Find operation failed: ${error.message}`, lowstorage_ERROR_CODES.FIND_ERROR);\n\t\t}\n\t}\n\n\t/**\n\t * Find the first document in the collection that matches the query.\n\t * @param {Object} [query={}] - The query to filter documents.\n\t * @returns {Promise} A Promise that resolves to the first matching document or null if no match is found.\n\t * @throws {lowstorageError} If there's an error.\n\t */\n\tasync findOne(query = {}) {\n\t\ttry {\n\t\t\tif (query === null) {\n\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Query cannot be null`, lowstorage_ERROR_CODES.INVALID_ARGUMENT);\n\t\t\t}\n\t\t\tconst result = await this.find(query, { limit: 1 });\n\t\t\treturn result[0] || null;\n\t\t} catch (error) {\n\t\t\tif (error instanceof lowstorageError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: FindOne operation failed: ${error.message}`, lowstorage_ERROR_CODES.FIND_ONE_ERROR);\n\t\t}\n\t}\n\n\t/**\n\t * Update a single document in the collection that matches the query.\n\t * @param {Object} [query={}] - The query to filter the document to update.\n\t * @param {Object} [update={}] - The update operations to apply to the matching document.\n\t * @returns {Promise} A Promise that resolves to number of documents updated.\n\t * @throws {lowstorageError} If the updateOne operation fails.\n\t * @throws {SchemaValidationError} If the schema is not defined for the collection.\n\t * @throws {DocumentValidationError} If the updated document is invalid.\n\t * @throws {S3OperationError} If the S3 operation fails.\n\t */\n\tasync update(query = {}, update = {}, options = {}) {\n\t\ttry {\n\t\t\tif (query === undefined || query === null || update === undefined || update === null) {\n\t\t\t\tthrow new lowstorageError(\n\t\t\t\t\t`${MODULE_NAME}: Query and update values are required for update`,\n\t\t\t\t\tlowstorage_ERROR_CODES.MISSING_ARGUMENT,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (!this._avroType) {\n\t\t\t\tthrow new SchemaValidationError(\n\t\t\t\t\t`${MODULE_NAME}: Schema is not defined for this collection`,\n\t\t\t\t\tlowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst data = await this._loadData();\n\t\t\tif (data.length === 0) return 0;\n\t\t\tlet updatedCount = 0;\n\t\t\tfor (let i = 0; i < data.length; i++) {\n\t\t\t\tif (matchesQuery(data[i], query)) {\n\t\t\t\t\tconst updatedDoc = { ...data[i], ...update };\n\t\t\t\t\tconst isValid = this._avroType.isValid(updatedDoc, {\n\t\t\t\t\t\terrorHook: errorValidationFn,\n\t\t\t\t\t\tnoUndeclaredFields: true,\n\t\t\t\t\t});\n\t\t\t\t\tif (isValid === true) {\n\t\t\t\t\t\tdata[i] = updatedDoc;\n\t\t\t\t\t\tupdatedCount++;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow new DocumentValidationError(\n\t\t\t\t\t\t\t`${MODULE_NAME}: Invalid document or schema`,\n\t\t\t\t\t\t\tlowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (updatedCount > 0) {\n\t\t\t\tconst success = await this._saveData(data);\n\t\t\t\tif (!success) {\n\t\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t\t}\n\t\t\t} else if (options.upsert) {\n\t\t\t\t// If upsert is true, we need to insert the document\n\t\t\t\tconst success = await this.insert(update);\n\t\t\t\tif (!success) {\n\t\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t\t}\n\t\t\t\tupdatedCount = 1;\n\t\t\t}\n\t\t\treturn updatedCount;\n\t\t} catch (error) {\n\t\t\tif (error instanceof S3OperationError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Update operation failed: ${error.message}`, lowstorage_ERROR_CODES.UPDATE_ERROR);\n\t\t}\n\t}\n\n\t/**\n\t * Update a single document in the collection that matches the query.\n\t * @param {Object} [query={}] - The query to filter the document to update.\n\t * @param {Object} [update={}] - The update operations to apply to the matching document.\n\t * @returns {Promise} A Promise that resolves to 1 if a document was updated, 0 otherwise.\n\t * @throws {lowstorageError} If the updateOne operation fails.\n\t * @throws {SchemaValidationError} If the schema is not defined for the collection.\n\t * @throws {DocumentValidationError} If the updated document is invalid.\n\t * @throws {S3OperationError} If the S3 operation fails.\n\t */\n\tasync updateOne(query = {}, update = {}, options = {}) {\n\t\ttry {\n\t\t\tif (query === undefined || query === null || update === undefined || update === null) {\n\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Query is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n\t\t\t}\n\t\t\tif (!this._avroType) {\n\t\t\t\tthrow new SchemaValidationError(\n\t\t\t\t\t`${MODULE_NAME}: Schema is not defined for this collection`,\n\t\t\t\t\tlowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst data = await this._loadData();\n\t\t\tif (data.length === 0) return 0;\n\t\t\tconst docIndex = data.findIndex((doc) => matchesQuery(doc, query));\n\n\t\t\tif (docIndex !== -1) {\n\t\t\t\tconst updatedDoc = { ...data[docIndex], ...update };\n\t\t\t\tconst isValid = this._avroType.isValid(updatedDoc, {\n\t\t\t\t\terrorHook: errorValidationFn,\n\t\t\t\t\tnoUndeclaredFields: true,\n\t\t\t\t});\n\t\t\t\tif (isValid === true) {\n\t\t\t\t\tdata[docIndex] = updatedDoc;\n\t\t\t\t\tconst success = await this._saveData(data);\n\t\t\t\t\tif (!success) {\n\t\t\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t\t\t}\n\t\t\t\t\treturn 1;\n\t\t\t\t} else {\n\t\t\t\t\tthrow new DocumentValidationError(`${MODULE_NAME}: Invalid document or schema`, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (options.upsert) {\n\t\t\t\t// If upsert is true, we need to insert the document\n\t\t\t\tconst success = await this.insert(update);\n\t\t\t\tif (!success) {\n\t\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t\t}\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t\treturn 0;\n\t\t} catch (error) {\n\t\t\tif (error instanceof lowstorageError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: UpdateOne operation failed: ${error.message}`, lowstorage_ERROR_CODES.UPDATE_ONE_ERROR);\n\t\t}\n\t}\n\n\t/**\n\t * Delete documents from the collection.\n\t * @param {Object} [query={}] - The query to filter documents to delete.\n\t * @returns {Promise} A Promise that resolves to the number of documents deleted.\n\t * @throws {lowstorageError} If the delete operation fails.\n\t * @throws {S3OperationError} If the S3 operation fails.\n\t */\n\tasync delete(query = {}) {\n\t\ttry {\n\t\t\tif (query === undefined || query === null) {\n\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Query is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n\t\t\t}\n\t\t\tconst data = await this._loadData();\n\t\t\tif (data.length === 0) return 0;\n\t\t\tconst initialLength = data.length;\n\n\t\t\tconst newData = data.filter((doc) => !matchesQuery(doc, query));\n\t\t\tconst success = await this._saveData(newData);\n\t\t\tif (!success) {\n\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to delete document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t}\n\t\t\treturn initialLength - newData.length;\n\t\t} catch (error) {\n\t\t\tif (error instanceof S3OperationError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Delete operation failed: ${error.message}`, lowstorage_ERROR_CODES.DELETE_ERROR);\n\t\t}\n\t}\n\n\t/**\n\t * Delete all documents from the collection.\n\t * @returns {Promise} A Promise that resolves to the number of documents deleted.\n\t * @throws {lowstorageError} If the delete operation fails.\n\t * @throws {S3OperationError} If the S3 operation fails.\n\t */\n\tasync deleteAll() {\n\t\ttry {\n\t\t\tconst data = await this._loadData();\n\t\t\tconst initialLength = data.length;\n\t\t\tconst success = await this._saveData([]);\n\t\t\tif (!success) {\n\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to delete document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t}\n\t\t\treturn initialLength;\n\t\t} catch (error) {\n\t\t\tif (error instanceof S3OperationError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Delete operation failed: ${error.message}`, lowstorage_ERROR_CODES.DELETE_ERROR);\n\t\t}\n\t}\n\n\t/**\n\t * Count the number of documents in the collection.\n\t * @param {Object} [query={}] - The query to filter documents.\n\t * @returns {Promise} A Promise that resolves to the number of documents in the collection.\n\t * @throws {lowstorageError} If the count operation fails.\n\t */\n\tasync count(query = {}) {\n\t\ttry {\n\t\t\tconst data = await this.find(query);\n\t\t\treturn data.length;\n\t\t} catch (error) {\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Count operation failed: ${error.message}`, lowstorage_ERROR_CODES.COUNT_ERROR);\n\t\t}\n\t}\n\n\tasync renameCollection(newColName, newSchema = this._schema) {\n\t\ttry {\n\t\t\t_hasColName(newColName);\n\t\t\tconst exists = await this._s3.fileExists(`${this._dirPrefix}${DEFAULT_DELIMITER}${newColName}${COL_SUFFIX}`);\n\t\t\tif (!!exists) {\n\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Collection ${newColName} already exists`, lowstorage_ERROR_CODES.COLLECTION_EXISTS);\n\t\t\t}\n\t\t\tconst schema = newSchema || this.getAvroSchema();\n\t\t\tconst data = await this._loadData();\n\t\t\tconst createNew = new Collection(newColName, schema, this._s3, this._dirPrefix, this._safeWrite, this._chunkSize);\n\t\t\tawait createNew._saveData(data);\n\t\t\tawait this._s3.delete(`${this._dirPrefix}${DEFAULT_DELIMITER}${this._colName}${COL_SUFFIX}`);\n\t\t\treturn createNew;\n\t\t} catch (error) {\n\t\t\tif (error instanceof lowstorageError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(\n\t\t\t\t`${MODULE_NAME}: Rename collection failed: ${error.message}`,\n\t\t\t\tlowstorage_ERROR_CODES.RENAME_COLLECTION_ERROR,\n\t\t\t);\n\t\t}\n\t}\n}\n\n// export default lowstorage;\nexport { lowstorage, lowstorageError, lowstorage_ERROR_CODES };\n", "'use strict';\n\nconst lowstorage_ERROR_CODES = {\n\tMISSING_ARGUMENT: 'MISSING_ARGUMENT',\n\tCOLLECTION_EXISTS: 'COLLECTION_EXISTS',\n\tCREATE_COLLECTION_ERROR: 'CREATE_COLLECTION_ERROR',\n\tRENAME_COLLECTION_ERROR: 'RENAME_COLLECTION_ERROR',\n\tREMOVE_COLLECTION_ERROR: 'REMOVE_COLLECTION_ERROR',\n\tUPDATE_COLLECTION_SCHEMA_ERROR: 'UPDATE_COLLECTION_SCHEMA_ERROR',\n\tCOLLECTION_NOT_FOUND: 'COLLECTION_NOT_FOUND',\n\tSCHEMA_VALIDATION_ERROR: 'SCHEMA_VALIDATION_ERROR',\n\tDOCUMENT_VALIDATION_ERROR: 'DOCUMENT_VALIDATION_ERROR',\n\tS3_OPERATION_ERROR: 'S3_OPERATION_ERROR',\n\tFIND_ERROR: 'FIND_ERROR',\n\tFIND_ONE_ERROR: 'FIND_ONE_ERROR',\n\tSAVE_DATA_ERROR: 'SAVE_DATA_ERROR',\n\tINSERT_ERROR: 'INSERT_ERROR',\n\tUPDATE_ERROR: 'UPDATE_ERROR',\n\tUPDATE_ONE_ERROR: 'UPDATE_ONE_ERROR',\n\tDELETE_ERROR: 'DELETE_ERROR',\n\tCOUNT_ERROR: 'COUNT_ERROR',\n\tUNKNOWN_ERROR: 'UNKNOWN_ERROR',\n};\nclass lowstorageError extends Error {\n\tconstructor(message, code = lowstorage_ERROR_CODES.UNKNOWN_ERROR) {\n\t\tsuper(`lowstorageError: ${message} :: code: ${code}`);\n\t\tthis.name = this.constructor.name;\n\t\tthis.code = code;\n\t\tError.captureStackTrace(this, this.constructor);\n\t}\n}\n\nclass CollectionNotFoundError extends lowstorageError {\n\tconstructor(collectionName) {\n\t\tsuper(`Collection ${collectionName} not found`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND);\n\t}\n}\n\nclass SchemaValidationError extends lowstorageError {\n\tconstructor(message) {\n\t\tsuper(message, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR);\n\t}\n}\n\nclass DocumentValidationError extends lowstorageError {\n\tconstructor(message) {\n\t\tsuper(message, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR);\n\t}\n}\n\nclass S3OperationError extends lowstorageError {\n\tconstructor(message, operation) {\n\t\tsuper(`S3 ${operation} operation failed: ${message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t}\n}\n\nexport {\n\tlowstorage_ERROR_CODES,\n\tlowstorageError,\n\tCollectionNotFoundError,\n\tSchemaValidationError,\n\tDocumentValidationError,\n\tS3OperationError,\n};\n", "'use strict';\n\nimport { randomUUID } from 'node:crypto';\n\nconst matchesQuery = (document, query) => {\n\treturn Object.keys(query).every((key) => document[key] === query[key]);\n};\n\nconst generateUUID = async () => {\n\tif (typeof randomUUID !== 'undefined' && typeof randomUUID === 'function') {\n\t\treturn randomUUID();\n\t}\n\tif (typeof crypto !== 'undefined' && typeof crypto === 'object' && typeof crypto.randomUUID === 'function') {\n\t\treturn crypto.randomUUID();\n\t}\n\treturn 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n\t\tvar r = (Math.random() * 16) | 0,\n\t\t\tv = c === 'x' ? r : (r & 0x3) | 0x8;\n\t\treturn v.toString(16);\n\t});\n};\n\nconst _getAvroType = (value, name = 'SubAutoGenerated') => {\n\tswitch (typeof value) {\n\t\tcase 'string':\n\t\t\tif (_isUUID(value)) {\n\t\t\t\treturn {\n\t\t\t\t\ttype: 'string',\n\t\t\t\t\tname: '_id',\n\t\t\t\t\tsize: 16,\n\t\t\t\t\tlogicalType: 'UUID',\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn 'string';\n\t\tcase 'number':\n\t\t\treturn Number.isInteger(value) ? 'int' : 'float';\n\t\tcase 'boolean':\n\t\t\treturn 'boolean';\n\t\tcase 'object':\n\t\t\tif (value === null) return 'null';\n\t\t\tif (Array.isArray(value)) return { type: 'array', items: _getAvroType(value[0]) };\n\t\t\treturn inferAvroType(value, name);\n\t\tdefault:\n\t\t\treturn 'string'; // Default to string for unknown types\n\t}\n};\n\nconst ensureIdFieldInSchema = (schema) => {\n\tconst idField = {\n\t\tname: '_id',\n\t\ttype: 'string',\n\t\tsize: 16,\n\t\tlogicalType: 'UUID',\n\t};\n\tif (typeof schema === 'undefined' || schema === null) {\n\t\treturn schema;\n\t}\n\n\tif (schema.type === 'record') {\n\t\tconst hasIdField = schema.fields.some((field) => field.name === '_id');\n\t\tif (!hasIdField) {\n\t\t\tschema.fields.unshift(idField);\n\t\t}\n\t} else if (schema.type === 'array' && schema.items.type === 'record') {\n\t\tconst hasIdField = schema.items.fields.some((field) => field.name === '_id');\n\t\tif (!hasIdField) {\n\t\t\tschema.items.fields.unshift(idField);\n\t\t}\n\t}\n\treturn schema;\n};\n\nconst inferAvroType = (data, typeName = 'AutoGenerated') => {\n\tif (Array.isArray(data)) {\n\t\tdata = data[0];\n\t}\n\tconst fields = Object.entries(data).map(([name, value]) => {\n\t\treturn { name, type: _getAvroType(value, `${typeName}.${name}`) };\n\t});\n\n\tconst schema = {\n\t\ttype: 'record',\n\t\tname: typeName,\n\t\tfields: fields,\n\t};\n\n\t// Ensure the _id field is present in the schema\n\treturn ensureIdFieldInSchema(schema);\n};\n\nconst _isUUID = (str) => {\n\tconst uuidV4Regex = /^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i;\n\treturn uuidV4Regex.test(str);\n};\n\nexport { matchesQuery, generateUUID, inferAvroType, ensureIdFieldInSchema };\n"], + "mappings": "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", + "names": ["AWS_ALGORITHM", "AWS_REQUEST_TYPE", "S3_SERVICE", "LIST_TYPE", "UNSIGNED_PAYLOAD", "DEFAULT_STREAM_CONTENT_TYPE", "XML_CONTENT_TYPE", "JSON_CONTENT_TYPE", "SENSITIVE_KEYS_REDACTED", "HEADER_AMZ_CONTENT_SHA256", "HEADER_AMZ_DATE", "HEADER_HOST", "HEADER_AUTHORIZATION", "HEADER_CONTENT_TYPE", "HEADER_CONTENT_LENGTH", "HEADER_ETAG", "HEADER_LAST_MODIFIED", "ERROR_PREFIX", "ERROR_ACCESS_KEY_REQUIRED", "ERROR_SECRET_KEY_REQUIRED", "ERROR_ENDPOINT_REQUIRED", "ERROR_BUCKET_NAME_REQUIRED", "ERROR_KEY_REQUIRED", "ERROR_UPLOAD_ID_REQUIRED", "ERROR_PARTS_REQUIRED", "ERROR_INVALID_PART", "ERROR_DATA_BUFFER_REQUIRED", "ERROR_PREFIX_TYPE", "ERROR_MAX_KEYS_TYPE", "ERROR_DELIMITER_REQUIRED", "_createHmac", "_createHash", "expectArray", "encodeAsHex", "c", "uriEscape", "uriStr", "uriResourceEscape", "string", "S3", "accessKeyId", "secretAccessKey", "endpoint", "bucketName", "region", "maxRequestSizeInBytes", "requestAbortTimeout", "logger", "etag", "sanitizeETag", "props", "method", "key", "delimiter", "prefix", "maxKeys", "opts", "level", "message", "additionalData", "sanitize", "obj", "acc", "sanitizedData", "logEntry", "headers", "encodedKey", "url", "signedHeaders", "contentLength", "res", "filteredOpts", "conditionalHeaders", "error", "errorMessage", "keyPath", "query", "body", "datetime", "_hash", "canonicalHeaders", "canonicalRequest", "stringToSign", "signature", "authorizationHeader", "value", "credentialScope", "signingKey", "_hmac", "ifHeaders", "urlWithQuery", "responseBody", "lastModified", "data", "_parseXml", "output", "o", "i", "a", "_a", "_b", "_c", "wholeFile", "rangeFrom", "rangeTo", "fileType", "parsedResponse", "uploadId", "partNumber", "ETag", "parts", "part", "xmlBody", "toleratedStatusCodes", "errorBody", "errorCode", "queryParams", "dateStamp", "kDate", "kRegion", "kService", "content", "hashSum", "encoding", "hmacSum", "replaceChars", "m", "str", "unescapeXml", "json", "re", "match", "fullKey", "parsedValue", "avro", "lowstorage_ERROR_CODES", "lowstorageError", "message", "code", "SchemaValidationError", "lowstorageError", "message", "lowstorage_ERROR_CODES", "DocumentValidationError", "S3OperationError", "operation", "randomUUID", "matchesQuery", "document", "query", "key", "generateUUID", "c", "r", "v", "_getAvroType", "value", "name", "_isUUID", "inferAvroType", "ensureIdFieldInSchema", "schema", "idField", "field", "data", "typeName", "fields", "str", "MODULE_NAME", "DEFAULT_DELIMITER", "PROJECT_DIR_PREFIX", "COL_SUFFIX", "CHUNG_1MB", "CHUNG_5MB", "EMPTY_DATA", "errorValidationFn", "errorCode", "lowstorage_ERROR_CODES", "DocumentValidationError", "_hasColName", "colName", "lowstorageError", "lowstorage", "options", "N", "avro", "args", "requiredFields", "field", "listed", "entry", "error", "S3OperationError", "schema", "data", "SchemaValidationError", "wrapperType", "exists2", "autoCreate", "colPath", "colSchema", "Collection", "_Collection", "s3", "dirPrefix", "safeWrite", "chunkSize", "ensureIdFieldInSchema", "props", "etag", "offset", "bufferArr", "repeat", "nextDataResponse", "nextDataBody", "bufferedData", "dataBuffer", "currentETag", "resp", "newETag", "doc", "items", "schemaWithId", "inferAvroType", "avroType", "item", "generateUUID", "query", "start", "end", "matchesQuery", "update", "updatedCount", "i", "updatedDoc", "docIndex", "initialLength", "newData", "newColName", "newSchema", "createNew"] } diff --git a/src/helpers.js b/src/helpers.js index 32ba37a..298afc8 100644 --- a/src/helpers.js +++ b/src/helpers.js @@ -52,6 +52,9 @@ const ensureIdFieldInSchema = (schema) => { size: 16, logicalType: 'UUID', }; + if (typeof schema === 'undefined' || schema === null) { + return schema; + } if (schema.type === 'record') { const hasIdField = schema.fields.some((field) => field.name === '_id'); diff --git a/src/lowstorage.js b/src/lowstorage.js index 24c4fa7..5bc50ea 100644 --- a/src/lowstorage.js +++ b/src/lowstorage.js @@ -10,7 +10,7 @@ import { DocumentValidationError, S3OperationError, } from './errors.js'; -import { matchesQuery, generateUUID, inferAvroType } from './helpers.js'; +import { matchesQuery, generateUUID, inferAvroType, ensureIdFieldInSchema } from './helpers.js'; const MODULE_NAME = 'lowstorage'; const DEFAULT_DELIMITER = '/'; @@ -104,6 +104,7 @@ class lowstorage { * @param {string} [options.region='auto'] - S3 region. * @param {Object} [options.logger=null] - Logger object. * @param {string} [options.dirPrefix=PROJECT_DIR_PREFIX] - Directory prefix for collections. + * @param {Number} [options.maxRequestSizeInBytes=CHUNG_5MB] - Chunk size for reading and writing data. AWS S3 has a minimum of 5MB per object. * @returns {lowstorage} A new lowstorage instance. */ constructor( @@ -159,13 +160,11 @@ class lowstorage { try { _hasColName(colName); const exists = await this._s3.fileExists(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`); - console.log('collectionExists::2 ', `${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`, exists); return !!exists; } catch (error) { if (error.message.includes('Not Found')) { return false; } - console.log('collectionExists::3 ', colName, error); throw new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND); } } @@ -183,6 +182,19 @@ class lowstorage { _hasColName(colName); const exists = await this.collectionExists(colName); if (!exists) { + if (typeof schema !== 'undefined' && schema !== null) { + try { + const isValid = this._avro.parse(schema); + if (!isValid) { + throw new SchemaValidationError( + `${MODULE_NAME}: Schema is invalid: ${schema}`, + lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR, + ); + } + } catch (error) { + throw new SchemaValidationError(`${MODULE_NAME}: Schema is invalid: ${schema}`, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR); + } + } if (data.length > 0 && schema) { const wrapperType = this._avro.parse({ type: 'array', items: schema }); await this._s3.put(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`, wrapperType.toBuffer(data)); @@ -209,10 +221,9 @@ class lowstorage { async removeCollection(colName) { try { _hasColName(colName); - const KEY = `${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`; const exists = await this.collectionExists(colName); if (exists) { - await this._s3.delete(KEY); + await this._s3.delete(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`); const exists2 = await this.collectionExists(colName); if (typeof exists2 === 'boolean') { if (!exists2) { @@ -314,41 +325,49 @@ class Collection { /** * Create a new Collection instance. * @param {string} colName - The name of the collection. - * @param {S3} s3 - The S3 instance. * @param {Object} [schema] - The Avro schema for the collection. + * @param {S3} s3 - The S3 instance. * @param {string} [dirPrefix=PROJECT_DIR_PREFIX] - The directory prefix for the collection. * @param {boolean} [safeWrite=false] - Whether to perform a safe write operation. It doublechecks the ETag of the object before writing. False = overwrites the object, True = only writes if the object has not been modified. + * @param {Number} [chunkSize=CHUNG_5MB] - The chunk size for reading and writing data. AWS S3 has a maximum of 5MB per object. * @returns {Collection} A new Collection instance. */ - constructor(colName, schema, s3, dirPrefix = PROJECT_DIR_PREFIX, safeWrite = false) { + constructor(colName, schema, s3, dirPrefix = PROJECT_DIR_PREFIX, safeWrite = false, chunkSize = CHUNG_5MB) { this._colName = colName; + this._s3 = s3; + this._schema = ensureIdFieldInSchema(schema); + this._dirPrefix = dirPrefix; + this._safeWrite = safeWrite; + this._chunkSize = chunkSize || CHUNG_5MB; + this._key = `${this._dirPrefix}${DEFAULT_DELIMITER}${this._colName}${COL_SUFFIX}`; + this._s3.setMaxRequestSizeInBytes(this._chunkSize); this._avro = avro; this._lastETag = ''; this._dataCache = []; - this._schema = schema; this._avroType = typeof schema === 'undefined' ? null : this._avro.parse(schema); - this._dirPrefix = dirPrefix; - this._safeWrite = safeWrite; } getProps = () => ({ colName: this._colName, + schema: this._schema, s3: this._s3, avro: this._avro, avroType: this._avroType, dirPrefix: this._dirPrefix, safeWrite: this._safeWrite, + chunkSize: this._chunkSize, }); setProps = (props) => { this._colName = props.colName; + this._schema = props.schema; this._s3 = props.s3; this._avro = props.avro; - this._schema = props.schema; this._avroType = props.avroType; this._dirPrefix = props.dirPrefix; this._safeWrite = props.safeWrite; + this._chunkSize = props.chunkSize; }; setSafeWrite = (safeWrite) => { @@ -360,47 +379,42 @@ class Collection { }; getAvroSchema = () => { - return this._avroType; + return this._schema; }; setAvroSchema = (schema) => { - this._schema = schema; + this._schema = ensureIdFieldInSchema(schema); this._avroType = typeof schema === 'undefined' ? null : this._avro.parse(schema); }; async _loadData() { try { - const KEY = `${this._dirPrefix}${DEFAULT_DELIMITER}${this._colName}${COL_SUFFIX}`; - const CHUNK_SIZE = this._s3.getMaxRequestSizeInBytes() || CHUNG_5MB; if (this._avroType === null || typeof this._avroType === 'undefined') { throw new lowstorageError( `${MODULE_NAME}: Missing type definition. Configure before operations `, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR, ); } - console.log('Getting object:', KEY, this._lastETag); - let { etag, data } = await this._s3.getObjectWithETag(KEY, { 'if-none-match': this._lastETag }); - console.log('data :::::::::::::::::::::::::', data, etag, this._dataCache); + const { etag, data } = await this._s3.getObjectWithETag(this._key, { 'if-none-match': this._lastETag }); if (data === null) { - // console.log('data is null, returning cache'); return this._dataCache; } this._lastETag = etag === null ? this._lastETag : etag; const wrapperType = this._avro.parse({ type: 'array', items: this._avroType }); - if (data.length < CHUNK_SIZE) { - this._dataCache = data.length > 0 ? wrapperType.fromBuffer(data) : []; + if (data.length < this._chunkSize) { + this._dataCache = data.length > 0 ? wrapperType.fromBuffer(Buffer.from(data, 'utf8')) : []; return this._dataCache; } - let offset = CHUNK_SIZE; + let offset = this._chunkSize; let bufferArr = [Buffer.from(data, 'utf8')]; let repeat = true; while (repeat) { - const nextDataResponse = await this._s3.getResponse(KEY, false, offset, offset + CHUNK_SIZE); + const nextDataResponse = await this._s3.getResponse(this._key, false, offset, offset + this._chunkSize); const nextDataBody = await nextDataResponse.text(); bufferArr.push(Buffer.from(nextDataBody, 'utf8')); - offset += CHUNK_SIZE; + offset += this._chunkSize; const contentLength = nextDataResponse.headers.get('content-length') || nextDataBody.length; - if (contentLength < CHUNK_SIZE) { + if (contentLength < this._chunkSize) { repeat = false; } } @@ -427,26 +441,23 @@ class Collection { const wrapperType = this._avro.parse({ type: 'array', items: this._avroType }); const dataBuffer = data.length > 0 ? wrapperType.toBuffer(data) : EMPTY_DATA; // TODO: check if this is the right way to handle empty data - const KEY = `${this._dirPrefix}${DEFAULT_DELIMITER}${this._colName}${COL_SUFFIX}`; if (this._safeWrite && this._lastETag !== '') { - const currentETag = await this._s3.getEtag(KEY); + const currentETag = await this._s3.getEtag(this._key); // If we have a current ETag, check if it matches our last known ETag if (currentETag !== null && currentETag !== this._lastETag) { return false; } } - const resp = await this._s3.put(KEY, dataBuffer); + const resp = await this._s3.put(this._key, dataBuffer); if (resp.status !== 200) { throw new S3OperationError(`${MODULE_NAME}: Failed to save data`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); } // Update the cached ETag const newETag = resp.headers.get('etag'); - // console.log('saveddata newETag', this._s3.sanitizeETag(newETag)); if (newETag) { this._lastETag = this._s3.sanitizeETag(newETag); - // console.log('saveddata lastETag', this._lastETag, 'data is ', data); this._dataCache = data; } return true; @@ -478,7 +489,7 @@ class Collection { } const items = !Array.isArray(doc) ? [doc] : doc; - const schemaWithId = schema || this._avroType || inferAvroType(items[0]); + const schemaWithId = ensureIdFieldInSchema(schema) || this._schema || inferAvroType(items[0]); const avroType = this._avro.parse(schemaWithId); if (!avroType) { throw new SchemaValidationError( @@ -510,6 +521,7 @@ class Collection { if (!success) { throw new S3OperationError(`${MODULE_NAME}: Failed to insert document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); } + this.setAvroSchema(schemaWithId); return items; } catch (error) { if (error.message.includes('unknown type')) { @@ -774,7 +786,7 @@ class Collection { } const schema = newSchema || this.getAvroSchema(); const data = await this._loadData(); - const createNew = new Collection(newColName, schema, this._s3, this._dirPrefix); + const createNew = new Collection(newColName, schema, this._s3, this._dirPrefix, this._safeWrite, this._chunkSize); await createNew._saveData(data); await this._s3.delete(`${this._dirPrefix}${DEFAULT_DELIMITER}${this._colName}${COL_SUFFIX}`); return createNew; diff --git a/src/lowstorage.test.js b/src/lowstorage.test.js index e2585b2..0be851e 100644 --- a/src/lowstorage.test.js +++ b/src/lowstorage.test.js @@ -183,7 +183,6 @@ test('Collections | error cases and error codes', async () => { await expect(lStorage.createCollection('testCol', testColSchema)).rejects.toThrow(lowstorage_ERROR_CODES.COLLECTION_EXISTS); const listCollections = await lStorage.listCollections(); - console.log('listCollections::::: ', listCollections); expect(listCollections).toContain('testCol'); // Verify the collection exists before attempting to rename @@ -194,6 +193,8 @@ test('Collections | error cases and error codes', async () => { const tesCol2 = await testCol.renameCollection('testCol2'); await expect(tesCol2).toBeDefined(); await expect(tesCol2).toBeInstanceOf(Object); + + const listCollections2 = await lStorage.listCollections(); const tesCol2Exists = await lStorage.collectionExists('testCol2'); expect(tesCol2Exists).toBe(true); @@ -232,6 +233,8 @@ test('Collections | error cases and error codes', async () => { await expect(lStorage.createCollection('invalidSchemaCol', invalidSchema)).rejects.toThrow( lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR, ); + const listCollections3 = await lStorage.listCollections(); + expect(listCollections3).not.toContain('invalidSchemaCol'); // Test document validation error await expect(tesCol2.insert({ invalidField: 'value' })).rejects.toThrow(lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR); @@ -363,7 +366,6 @@ test('Document | CRUD operations', async () => { // Test update const updateData = await col.update({ name: 'Carlos' }, { name: 'Carlos2' }); - console.log('updateData', updateData); expect(updateData).toBeDefined(); expect(updateData).toBe(4); expect(updateData).toEqual(4); @@ -394,12 +396,11 @@ test('Document | CRUD operations', async () => { test('Document | cachcing and race conditions', async () => { const colName = 'testColX1'; const exsists = await lStorage.collectionExists(colName); - console.log('exsists::::::::::::::::::::::', exsists); if (exsists) { await lStorage.removeCollection(colName); } const lStorage2 = new lowstorage(configCF); - const col2 = await lStorage2.collection(colName, userAvroSchema); + const col2 = await lStorage2.collection(colName); const col = await lStorage.collection(colName); const insertData = await col.insert({ name: 'Carlos', age: 25 }, userAvroSchema); @@ -410,73 +411,69 @@ test('Document | cachcing and race conditions', async () => { expect(insertData[0]).toHaveProperty('name', 'Carlos'); expect(insertData[0]).toHaveProperty('age', 25); + const insertData2 = await col.insert({ name: 'Bob', age: 12 }); + expect(col2.find({ name: 'Carlos' })).rejects.toThrow(lowstorage_ERROR_CODES.FIND_ERROR); col2.setAvroSchema(userAvroSchema); - const schema2 = col2.getAvroSchema(); + expect(schema2).toBeDefined(); const schema1 = col.getAvroSchema(); - console.log('schema::::::::::::::::::::::', schema1); expect(schema1).toBeDefined(); - console.log('schema::::::::::::::::::::::', schema2); - expect(schema2).toBeDefined(); - const find1 = await col.find({ name: 'Carlos' }); - console.log('find1::::::::::::::::::::::', find1); expect(find1).toBeDefined(); expect(find1).toHaveLength(1); expect(find1[0]).toHaveProperty('_id'); expect(find1[0]).toHaveProperty('name', 'Carlos'); expect(find1[0]).toHaveProperty('age', 25); - // TODO - fix this const findData2 = await col2.find({ name: 'Carlos' }); - console.log('findData2::::::::::::::::::::::', findData2); + expect(findData2).toBeDefined(); expect(findData2).toHaveLength(1); expect(findData2[0]).toHaveProperty('_id'); expect(findData2[0]).toHaveProperty('name', 'Carlos'); expect(findData2[0]).toHaveProperty('age', 25); - // const insertData2 = await col2.insert({ name: 'Carlos', age: 29 }); - // expect(insertData2).toBeDefined(); - // expect(insertData2).toHaveLength(1); - // expect(insertData2[0]).toHaveProperty('_id'); - // expect(insertData2[0]).toHaveProperty('name', 'Carlos'); - // expect(insertData2[0]).toHaveProperty('age', 29); - - // const findData3 = await col.find({ name: 'Carlos' }); - // expect(findData3).toBeDefined(); - // expect(findData3).toHaveLength(1); - // expect(findData3[0]).toHaveProperty('_id'); - // expect(findData3[0]).toHaveProperty('name', 'Carlos'); - // expect(findData3[0]).toHaveProperty('age', 29); - - // // Test update - // const updateData = await col2.update({ name: 'Carlos' }, { name: 'Carlos2' }); - // console.log('updateData', updateData); - // expect(updateData).toBeDefined(); - // expect(updateData).toBe(1); - // expect(updateData).toEqual(1); - - // // Test update with invalid array - // await expect(col.update(null, { name: 'Carlos2' })).rejects.toThrow(lowstorage_ERROR_CODES.UPDATE_ERROR); - - // // Test delete - // const deleteData = await col.delete({ name: 'Carlos2' }); - // expect(deleteData).toBeDefined(); - // expect(deleteData).toBe(4); - - // // Test delete with invalid array - // await expect(col.delete(null)).rejects.toThrow(lowstorage_ERROR_CODES.DELETE_ERROR); - - // // Test update - // const updateData2 = await col.update({ name: 'Carlos' }, { name: 'Carlos2' }); - // console.log('updateData2', updateData2); - // expect(updateData2).toBeDefined(); - // expect(updateData2).toBe(4); - // expect(updateData2).toEqual(4); + const findBob = await col2.find({ name: 'Bob' }); + + expect(findBob).toBeDefined(); + expect(findBob).toHaveLength(1); + expect(findBob[0]).toHaveProperty('_id'); + expect(findBob[0]).toHaveProperty('name', 'Bob'); + expect(findBob[0]).toHaveProperty('age', 12); + + const updateData = await col2.update({ name: 'Carlos' }, { name: 'Carlos2' }); + + expect(updateData).toBeDefined(); + expect(updateData).toBe(1); + expect(updateData).toEqual(1); + + const updateData2 = await col2.update({ name: 'Bob' }, { age: 30 }); + expect(updateData2).toBeDefined(); + expect(updateData2).toBe(1); + expect(updateData2).toEqual(1); + + const checkBob = await col.find({ name: 'Bob' }); + expect(checkBob).toBeDefined(); + expect(checkBob).toHaveLength(1); + expect(checkBob[0]).toHaveProperty('_id'); + expect(checkBob[0]).toHaveProperty('name', 'Bob'); + expect(checkBob[0]).toHaveProperty('age', 30); + + // Test update with invalid schema + // TODO - fix this + await expect(col.update({ name: 'Carlos2' }, { surname: 'CarlosesSurname' })).rejects.toThrow( + lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR, + ); + const updateCheck = col2.find({ name: 'Carlos' }); + expect(updateCheck).toBeDefined(); + expect(updateCheck).toHaveLength(1); + expect(updateCheck[0]).toHaveProperty('_id'); + expect(updateCheck[0]).toHaveProperty('name', 'Carlos'); + expect(updateCheck[0]).toHaveProperty('age', 25); + expect(updateCheck[0]).not.toHaveProperty('surname', 'Carlos2'); }); From 54edfebda5e06d99acf76a6e1ea6bab23c47ecc8 Mon Sep 17 00:00:00 2001 From: Jolly Good <1671375+good-lly@users.noreply.github.com> Date: Sat, 17 Aug 2024 17:24:09 +0200 Subject: [PATCH 11/18] changing to avsc lib, fixing tests, update validation --- lib/lowstorage.js | 2 +- lib/lowstorage.js.map | 4 ++-- package-lock.json | 35 +++++++++++------------------------ package.json | 6 +++--- src/lowstorage.js | 3 +-- src/lowstorage.test.js | 10 ++++------ 6 files changed, 22 insertions(+), 38 deletions(-) diff --git a/lib/lowstorage.js b/lib/lowstorage.js index 5e90ba3..761ab44 100644 --- a/lib/lowstorage.js +++ b/lib/lowstorage.js @@ -11,5 +11,5 @@ var X="AWS4-HMAC-SHA256",j="aws4_request",q="s3",ge="2",R="UNSIGNED-PAYLOAD",pe= `).join("")} - `}async delete(t){this._checkKey(t),this._log("info",`Deleting object ${t}`);let e={[O]:S,[E]:R},r=y(t),{url:s,headers:i}=await this._sign("DELETE",r,{},e,""),o=await this._sendRequest(s,"DELETE",i);return o.status===204||o.status===200}async _sendRequest(t,e,r,s,i=[]){this._log("info",`Sending ${e} request to ${t}, headers: ${JSON.stringify(r)}`);let o=await fetch(t,{method:e,headers:r,body:["GET","HEAD"].includes(e)?void 0:s,signal:this.requestAbortTimeout!==void 0?AbortSignal.timeout(this.requestAbortTimeout):void 0});return!o.ok&&!i.includes(o.status)&&await this._handleErrorResponse(o),o}async _handleErrorResponse(t){let e=await t.text(),r=t.headers.get("x-amz-error-code")||"Unknown",s=t.headers.get("x-amz-error-message")||t.statusText;throw this._log("error",`${_}Request failed with status ${t.status}: ${r} - ${s},err body: ${e}`),new Error(`${_}Request failed with status ${t.status}: ${r} - ${s}, err body: ${e}`)}_buildCanonicalQueryString(t){return Object.keys(t).length<1?"":Object.keys(t).sort().map(e=>`${encodeURIComponent(e)}=${encodeURIComponent(t[e])}`).join("&")}async _getSignatureKey(t){let e=await U(`AWS4${this.secretAccessKey}`,t),r=await U(e,this.region),s=await U(r,q);return U(s,j)}},H=async t=>{let e=ne("sha256");return e.update(t),e.digest("hex")},U=async(t,e,r)=>{let s=oe("sha256",t);return s.update(e),s.digest(r)},L=t=>{let e={'"':"",""":"",""":"",""":"",""":""};return t.replace(/^("|"|")|("|"|")$/g,r=>e[r])},D=t=>{let e=o=>o.replace(/"/g,'"').replace(/'/g,"'").replace(/</g,"<").replace(/>/g,">").replace(/&/g,"&"),r={},s=/<(\w)([-\w]+)(?:\/|[^>]*>((?:(?!<\1)[\s\S])*)<\/\1\2)>/gm,i;for(;i=s.exec(t);){let[,o,n,u]=i,a=o.toLowerCase()+n,c=u!=null?D(u):!0;typeof c=="string"?r[a]=L(e(c)):Array.isArray(r[a])?r[a].push(c):r[a]=r[a]!=null?[r[a],c]:Ie[a]?[c]:c}return Object.keys(r).length?r:e(t)};import _e from"avro-js";var h={MISSING_ARGUMENT:"MISSING_ARGUMENT",COLLECTION_EXISTS:"COLLECTION_EXISTS",CREATE_COLLECTION_ERROR:"CREATE_COLLECTION_ERROR",RENAME_COLLECTION_ERROR:"RENAME_COLLECTION_ERROR",REMOVE_COLLECTION_ERROR:"REMOVE_COLLECTION_ERROR",UPDATE_COLLECTION_SCHEMA_ERROR:"UPDATE_COLLECTION_SCHEMA_ERROR",COLLECTION_NOT_FOUND:"COLLECTION_NOT_FOUND",SCHEMA_VALIDATION_ERROR:"SCHEMA_VALIDATION_ERROR",DOCUMENT_VALIDATION_ERROR:"DOCUMENT_VALIDATION_ERROR",S3_OPERATION_ERROR:"S3_OPERATION_ERROR",FIND_ERROR:"FIND_ERROR",FIND_ONE_ERROR:"FIND_ONE_ERROR",SAVE_DATA_ERROR:"SAVE_DATA_ERROR",INSERT_ERROR:"INSERT_ERROR",UPDATE_ERROR:"UPDATE_ERROR",UPDATE_ONE_ERROR:"UPDATE_ONE_ERROR",DELETE_ERROR:"DELETE_ERROR",COUNT_ERROR:"COUNT_ERROR",UNKNOWN_ERROR:"UNKNOWN_ERROR"},d=class extends Error{constructor(e,r=h.UNKNOWN_ERROR){super(`lowstorageError: ${e} :: code: ${r}`),this.name=this.constructor.name,this.code=r,Error.captureStackTrace(this,this.constructor)}};var $=class extends d{constructor(e){super(e,h.SCHEMA_VALIDATION_ERROR)}},T=class extends d{constructor(e){super(e,h.DOCUMENT_VALIDATION_ERROR)}},p=class extends d{constructor(e,r){super(`S3 ${r} operation failed: ${e}`,h.S3_OPERATION_ERROR)}};import{randomUUID as G}from"node:crypto";var k=(t,e)=>Object.keys(e).every(r=>t[r]===e[r]),le=async()=>typeof G<"u"&&typeof G=="function"?G():typeof crypto<"u"&&typeof crypto=="object"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(t){var e=Math.random()*16|0,r=t==="x"?e:e&3|8;return r.toString(16)}),ce=(t,e="SubAutoGenerated")=>{switch(typeof t){case"string":return Se(t)?{type:"string",name:"_id",size:16,logicalType:"UUID"}:"string";case"number":return Number.isInteger(t)?"int":"float";case"boolean":return"boolean";case"object":return t===null?"null":Array.isArray(t)?{type:"array",items:ce(t[0])}:V(t,e);default:return"string"}},v=t=>{let e={name:"_id",type:"string",size:16,logicalType:"UUID"};return typeof t>"u"||t===null||(t.type==="record"?t.fields.some(s=>s.name==="_id")||t.fields.unshift(e):t.type==="array"&&t.items.type==="record"&&(t.items.fields.some(s=>s.name==="_id")||t.items.fields.unshift(e))),t},V=(t,e="AutoGenerated")=>{Array.isArray(t)&&(t=t[0]);let r=Object.entries(t).map(([i,o])=>({name:i,type:ce(o,`${e}.${i}`)}));return v({type:"record",name:e,fields:r})},Se=t=>/^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i.test(t);var l="lowstorage",I="/",B="lowstorage",A=".avro",be=1024*1024,ue=5*be,W=Buffer.from("","utf8"),z=(t=h.DOCUMENT_VALIDATION_ERROR)=>{throw new T(`${l}: Invalid document or schema`,t)},P=t=>{if(t.trim()===""||t===null||typeof t>"u"||t.length>255||t===null)throw new d(`${l}: Collection name is required, null or too long`,h.MISSING_ARGUMENT)},de=class{constructor(e={accessKeyId:void 0,secretAccessKey:void 0,endpoint:void 0,bucketName:void 0,region:"auto",logger:null,dirPrefix:B}){this._checkArgs(e),this._schemas=new Map,this._s3=new he(e),this._dirPrefix=e.dirPrefix||B,this._avro=_e}_checkArgs=e=>{let r=["accessKeyId","secretAccessKey","endpoint","bucketName"];for(let s of r)if(!e[s])throw new d(`${l}: ${s} is required`,h.MISSING_ARGUMENT)};async listCollections(){try{let e=await this._s3.list(I,this._dirPrefix);return typeof e=="object"&&e!==null&&e.keyCount==="0"?[]:e.map(r=>r.key.slice(this._dirPrefix.length+1,-A.length))}catch(e){throw new p(`${l}: ${e.message}`,h.S3_OPERATION_ERROR)}}async collectionExists(e){try{return P(e),!!await this._s3.fileExists(`${this._dirPrefix}${I}${e}${A}`)}catch(r){if(r.message.includes("Not Found"))return!1;throw new d(`${l}: ${r.message}`,h.COLLECTION_NOT_FOUND)}}async createCollection(e,r,s=[]){try{if(P(e),!await this.collectionExists(e)){if(typeof r<"u"&&r!==null)try{if(!this._avro.parse(r))throw new $(`${l}: Schema is invalid: ${r}`,h.SCHEMA_VALIDATION_ERROR)}catch{throw new $(`${l}: Schema is invalid: ${r}`,h.SCHEMA_VALIDATION_ERROR)}if(s.length>0&&r){let o=this._avro.parse({type:"array",items:r});await this._s3.put(`${this._dirPrefix}${I}${e}${A}`,o.toBuffer(s))}else await this._s3.put(`${this._dirPrefix}${I}${e}${A}`,W);return this.collection(e,r,!1)}throw new d(`${l}: Collection ${e} already exists`,h.COLLECTION_EXISTS)}catch(i){throw i instanceof d?i:new d(`${l}: ${i.message}`,h.CREATE_COLLECTION_ERROR)}}async removeCollection(e){try{if(P(e),await this.collectionExists(e)){await this._s3.delete(`${this._dirPrefix}${I}${e}${A}`);let s=await this.collectionExists(e);if(typeof s=="boolean"){if(!s)return this._schemas.delete(e),!0;throw new d(`${l}: Failed to delete collection ${e}`,h.S3_OPERATION_ERROR)}throw new p(`${l}: Failed to delete collection ${e}`,h.S3_OPERATION_ERROR)}throw new d(`${l}: Collection ${e} does not exist`,h.REMOVE_COLLECTION_ERROR)}catch(r){throw r instanceof p?r:new d(`${l}: Failed to remove collection: ${r.message}`,h.REMOVE_COLLECTION_ERROR)}}async collection(e,r,s=!0){try{P(e);let i=`${this._dirPrefix}${I}${e}${A}`;if(!await this._s3.fileExists(i)){if(!s)throw new d(`${l}: Collection ${e} does not exist`,h.COLLECTION_NOT_FOUND);await this._s3.put(i,W)}let n=r||this._schemas.get(e)||void 0;return new Q(e,n,this._s3,this._dirPrefix)}catch(i){throw i.message.includes("unknown type")?new $(`${l}: Schema input is invalid: ${i.message}`,h.SCHEMA_VALIDATION_ERROR):new d(`${l}: ${i.message}`,h.COLLECTION_NOT_FOUND)}}s3=()=>this._s3},Q=class t{constructor(e,r,s,i=B,o=!1,n=ue){this._colName=e,this._s3=s,this._schema=v(r),this._dirPrefix=i,this._safeWrite=o,this._chunkSize=n||ue,this._key=`${this._dirPrefix}${I}${this._colName}${A}`,this._s3.setMaxRequestSizeInBytes(this._chunkSize),this._avro=_e,this._lastETag="",this._dataCache=[],this._avroType=typeof r>"u"?null:this._avro.parse(r)}getProps=()=>({colName:this._colName,schema:this._schema,s3:this._s3,avro:this._avro,avroType:this._avroType,dirPrefix:this._dirPrefix,safeWrite:this._safeWrite,chunkSize:this._chunkSize});setProps=e=>{this._colName=e.colName,this._schema=e.schema,this._s3=e.s3,this._avro=e.avro,this._avroType=e.avroType,this._dirPrefix=e.dirPrefix,this._safeWrite=e.safeWrite,this._chunkSize=e.chunkSize};setSafeWrite=e=>{this._safeWrite=e};getSafeWrite=()=>this._safeWrite;getAvroSchema=()=>this._schema;setAvroSchema=e=>{this._schema=v(e),this._avroType=typeof e>"u"?null:this._avro.parse(e)};async _loadData(){try{if(this._avroType===null||typeof this._avroType>"u")throw new d(`${l}: Missing type definition. Configure before operations `,h.SCHEMA_VALIDATION_ERROR);let{etag:e,data:r}=await this._s3.getObjectWithETag(this._key,{"if-none-match":this._lastETag});if(r===null)return this._dataCache;this._lastETag=e===null?this._lastETag:e;let s=this._avro.parse({type:"array",items:this._avroType});if(r.length0?s.fromBuffer(Buffer.from(r,"utf8")):[],this._dataCache;let i=this._chunkSize,o=[Buffer.from(r,"utf8")],n=!0;for(;n;){let a=await this._s3.getResponse(this._key,!1,i,i+this._chunkSize),c=await a.text();o.push(Buffer.from(c,"utf8")),i+=this._chunkSize,(a.headers.get("content-length")||c.length)-1)return this._dataCache=[],this._dataCache;throw new p(`${l}: Failed to load data: ${e.message}`,h.S3_OPERATION_ERROR)}}async _saveData(e){try{if(this._avroType===null||typeof this._avroType>"u")throw new d(`${l}: Missing type definition. Configure before operations `,h.SCHEMA_VALIDATION_ERROR);let r=this._avro.parse({type:"array",items:this._avroType}),s=e.length>0?r.toBuffer(e):W;if(this._safeWrite&&this._lastETag!==""){let n=await this._s3.getEtag(this._key);if(n!==null&&n!==this._lastETag)return!1}let i=await this._s3.put(this._key,s);if(i.status!==200)throw new p(`${l}: Failed to save data`,h.S3_OPERATION_ERROR);let o=i.headers.get("etag");return o&&(this._lastETag=this._s3.sanitizeETag(o),this._dataCache=e),!0}catch(r){throw r instanceof p?r:new d(`${l}: ${r.message}`,h.SAVE_DATA_ERROR)}}async insert(e,r=void 0){try{if(e==null)throw new d(`${l}: Document is required for insert`,h.INSERT_ERROR);if(typeof e!="object"&&!Array.isArray(e))throw new T(`${l}: Document must be an object or an array`,h.DOCUMENT_VALIDATION_ERROR);let s=Array.isArray(e)?e:[e],i=v(r)||this._schema||V(s[0]),o=this._avro.parse(i);if(!o)throw new $(`${l}: Schema is required - Pass a schema to the insert method`,h.SCHEMA_VALIDATION_ERROR);this._avroType=o;let n=await this._loadData();for(let a of s){if(typeof a!="object"||a===null)throw new T(`${l}: Invalid input: input must be an object or an array of objects`,h.DOCUMENT_VALIDATION_ERROR);if(a._id=a._id||await le(),this._avroType.isValid(a,{errorHook:z,noUndeclaredFields:!0})===!0)n.push(a);else throw new T(`${l}: Invalid document or schema`,h.DOCUMENT_VALIDATION_ERROR)}if(!await this._saveData(n))throw new p(`${l}: Failed to insert document`,h.S3_OPERATION_ERROR);return this.setAvroSchema(i),s}catch(s){throw s.message.includes("unknown type")?new $(`${l}: Schema input is invalid: ${s.message}`,h.SCHEMA_VALIDATION_ERROR):s instanceof d?s:new d(`${l} Insert operation failed: ${s.message}`,h.INSERT_ERROR)}}async find(e={},r={}){try{if(e==null)throw new d(`${l}: Query is required for update`,h.MISSING_ARGUMENT);let s=await this._loadData(),i=parseInt(r.skip,10)||0,o=parseInt(r.limit,10)?i+parseInt(r.limit,10):void 0;return s.filter(u=>k(u,e)).slice(i,o)}catch(s){throw new d(`${l}: Find operation failed: ${s.message}`,h.FIND_ERROR)}}async findOne(e={}){try{if(e===null)throw new d(`${l}: Query cannot be null`,h.INVALID_ARGUMENT);return(await this.find(e,{limit:1}))[0]||null}catch(r){throw r instanceof d?r:new d(`${l}: FindOne operation failed: ${r.message}`,h.FIND_ONE_ERROR)}}async update(e={},r={},s={}){try{if(e==null||r===void 0||r===null)throw new d(`${l}: Query and update values are required for update`,h.MISSING_ARGUMENT);if(!this._avroType)throw new $(`${l}: Schema is not defined for this collection`,h.SCHEMA_VALIDATION_ERROR);let i=await this._loadData();if(i.length===0)return 0;let o=0;for(let n=0;n0){if(!await this._saveData(i))throw new p(`${l}: Failed to update document`,h.S3_OPERATION_ERROR)}else if(s.upsert){if(!await this.insert(r))throw new p(`${l}: Failed to update document`,h.S3_OPERATION_ERROR);o=1}return o}catch(i){throw i instanceof p?i:new d(`${l}: Update operation failed: ${i.message}`,h.UPDATE_ERROR)}}async updateOne(e={},r={},s={}){try{if(e==null||r===void 0||r===null)throw new d(`${l}: Query is required`,h.MISSING_ARGUMENT);if(!this._avroType)throw new $(`${l}: Schema is not defined for this collection`,h.SCHEMA_VALIDATION_ERROR);let i=await this._loadData();if(i.length===0)return 0;let o=i.findIndex(n=>k(n,e));if(o!==-1){let n={...i[o],...r};if(this._avroType.isValid(n,{errorHook:z,noUndeclaredFields:!0})===!0){if(i[o]=n,!await this._saveData(i))throw new p(`${l}: Failed to update document`,h.S3_OPERATION_ERROR);return 1}else throw new T(`${l}: Invalid document or schema`,h.DOCUMENT_VALIDATION_ERROR)}if(s.upsert){if(!await this.insert(r))throw new p(`${l}: Failed to update document`,h.S3_OPERATION_ERROR);return 1}return 0}catch(i){throw i instanceof d?i:new d(`${l}: UpdateOne operation failed: ${i.message}`,h.UPDATE_ONE_ERROR)}}async delete(e={}){try{if(e==null)throw new d(`${l}: Query is required`,h.MISSING_ARGUMENT);let r=await this._loadData();if(r.length===0)return 0;let s=r.length,i=r.filter(n=>!k(n,e));if(!await this._saveData(i))throw new p(`${l}: Failed to delete document`,h.S3_OPERATION_ERROR);return s-i.length}catch(r){throw r instanceof p?r:new d(`${l}: Delete operation failed: ${r.message}`,h.DELETE_ERROR)}}async deleteAll(){try{let r=(await this._loadData()).length;if(!await this._saveData([]))throw new p(`${l}: Failed to delete document`,h.S3_OPERATION_ERROR);return r}catch(e){throw e instanceof p?e:new d(`${l}: Delete operation failed: ${e.message}`,h.DELETE_ERROR)}}async count(e={}){try{return(await this.find(e)).length}catch(r){throw new d(`${l}: Count operation failed: ${r.message}`,h.COUNT_ERROR)}}async renameCollection(e,r=this._schema){try{if(P(e),await this._s3.fileExists(`${this._dirPrefix}${I}${e}${A}`))throw new d(`${l}: Collection ${e} already exists`,h.COLLECTION_EXISTS);let i=r||this.getAvroSchema(),o=await this._loadData(),n=new t(e,i,this._s3,this._dirPrefix,this._safeWrite,this._chunkSize);return await n._saveData(o),await this._s3.delete(`${this._dirPrefix}${I}${this._colName}${A}`),n}catch(s){throw s instanceof d?s:new d(`${l}: Rename collection failed: ${s.message}`,h.RENAME_COLLECTION_ERROR)}}};export{de as lowstorage,d as lowstorageError,h as lowstorage_ERROR_CODES}; + `}async delete(t){this._checkKey(t),this._log("info",`Deleting object ${t}`);let e={[O]:S,[E]:R},r=y(t),{url:s,headers:i}=await this._sign("DELETE",r,{},e,""),o=await this._sendRequest(s,"DELETE",i);return o.status===204||o.status===200}async _sendRequest(t,e,r,s,i=[]){this._log("info",`Sending ${e} request to ${t}, headers: ${JSON.stringify(r)}`);let o=await fetch(t,{method:e,headers:r,body:["GET","HEAD"].includes(e)?void 0:s,signal:this.requestAbortTimeout!==void 0?AbortSignal.timeout(this.requestAbortTimeout):void 0});return!o.ok&&!i.includes(o.status)&&await this._handleErrorResponse(o),o}async _handleErrorResponse(t){let e=await t.text(),r=t.headers.get("x-amz-error-code")||"Unknown",s=t.headers.get("x-amz-error-message")||t.statusText;throw this._log("error",`${_}Request failed with status ${t.status}: ${r} - ${s},err body: ${e}`),new Error(`${_}Request failed with status ${t.status}: ${r} - ${s}, err body: ${e}`)}_buildCanonicalQueryString(t){return Object.keys(t).length<1?"":Object.keys(t).sort().map(e=>`${encodeURIComponent(e)}=${encodeURIComponent(t[e])}`).join("&")}async _getSignatureKey(t){let e=await U(`AWS4${this.secretAccessKey}`,t),r=await U(e,this.region),s=await U(r,q);return U(s,j)}},H=async t=>{let e=ne("sha256");return e.update(t),e.digest("hex")},U=async(t,e,r)=>{let s=oe("sha256",t);return s.update(e),s.digest(r)},L=t=>{let e={'"':"",""":"",""":"",""":"",""":""};return t.replace(/^("|"|")|("|"|")$/g,r=>e[r])},D=t=>{let e=o=>o.replace(/"/g,'"').replace(/'/g,"'").replace(/</g,"<").replace(/>/g,">").replace(/&/g,"&"),r={},s=/<(\w)([-\w]+)(?:\/|[^>]*>((?:(?!<\1)[\s\S])*)<\/\1\2)>/gm,i;for(;i=s.exec(t);){let[,o,n,u]=i,a=o.toLowerCase()+n,c=u!=null?D(u):!0;typeof c=="string"?r[a]=L(e(c)):Array.isArray(r[a])?r[a].push(c):r[a]=r[a]!=null?[r[a],c]:Ie[a]?[c]:c}return Object.keys(r).length?r:e(t)};import _e from"avsc";var h={MISSING_ARGUMENT:"MISSING_ARGUMENT",COLLECTION_EXISTS:"COLLECTION_EXISTS",CREATE_COLLECTION_ERROR:"CREATE_COLLECTION_ERROR",RENAME_COLLECTION_ERROR:"RENAME_COLLECTION_ERROR",REMOVE_COLLECTION_ERROR:"REMOVE_COLLECTION_ERROR",UPDATE_COLLECTION_SCHEMA_ERROR:"UPDATE_COLLECTION_SCHEMA_ERROR",COLLECTION_NOT_FOUND:"COLLECTION_NOT_FOUND",SCHEMA_VALIDATION_ERROR:"SCHEMA_VALIDATION_ERROR",DOCUMENT_VALIDATION_ERROR:"DOCUMENT_VALIDATION_ERROR",S3_OPERATION_ERROR:"S3_OPERATION_ERROR",FIND_ERROR:"FIND_ERROR",FIND_ONE_ERROR:"FIND_ONE_ERROR",SAVE_DATA_ERROR:"SAVE_DATA_ERROR",INSERT_ERROR:"INSERT_ERROR",UPDATE_ERROR:"UPDATE_ERROR",UPDATE_ONE_ERROR:"UPDATE_ONE_ERROR",DELETE_ERROR:"DELETE_ERROR",COUNT_ERROR:"COUNT_ERROR",UNKNOWN_ERROR:"UNKNOWN_ERROR"},d=class extends Error{constructor(e,r=h.UNKNOWN_ERROR){super(`lowstorageError: ${e} :: code: ${r}`),this.name=this.constructor.name,this.code=r,Error.captureStackTrace(this,this.constructor)}};var $=class extends d{constructor(e){super(e,h.SCHEMA_VALIDATION_ERROR)}},T=class extends d{constructor(e){super(e,h.DOCUMENT_VALIDATION_ERROR)}},p=class extends d{constructor(e,r){super(`S3 ${r} operation failed: ${e}`,h.S3_OPERATION_ERROR)}};import{randomUUID as G}from"node:crypto";var k=(t,e)=>Object.keys(e).every(r=>t[r]===e[r]),le=async()=>typeof G<"u"&&typeof G=="function"?G():typeof crypto<"u"&&typeof crypto=="object"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(t){var e=Math.random()*16|0,r=t==="x"?e:e&3|8;return r.toString(16)}),ce=(t,e="SubAutoGenerated")=>{switch(typeof t){case"string":return Se(t)?{type:"string",name:"_id",size:16,logicalType:"UUID"}:"string";case"number":return Number.isInteger(t)?"int":"float";case"boolean":return"boolean";case"object":return t===null?"null":Array.isArray(t)?{type:"array",items:ce(t[0])}:V(t,e);default:return"string"}},v=t=>{let e={name:"_id",type:"string",size:16,logicalType:"UUID"};return typeof t>"u"||t===null||(t.type==="record"?t.fields.some(s=>s.name==="_id")||t.fields.unshift(e):t.type==="array"&&t.items.type==="record"&&(t.items.fields.some(s=>s.name==="_id")||t.items.fields.unshift(e))),t},V=(t,e="AutoGenerated")=>{Array.isArray(t)&&(t=t[0]);let r=Object.entries(t).map(([i,o])=>({name:i,type:ce(o,`${e}.${i}`)}));return v({type:"record",name:e,fields:r})},Se=t=>/^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i.test(t);var l="lowstorage",I="/",B="lowstorage",A=".avro",be=1024*1024,ue=5*be,W=Buffer.from("","utf8"),z=(t=h.DOCUMENT_VALIDATION_ERROR)=>{throw new T(`${l}: Invalid document or schema`,t)},P=t=>{if(t.trim()===""||t===null||typeof t>"u"||t.length>255||t===null)throw new d(`${l}: Collection name is required, null or too long`,h.MISSING_ARGUMENT)},de=class{constructor(e={accessKeyId:void 0,secretAccessKey:void 0,endpoint:void 0,bucketName:void 0,region:"auto",logger:null,dirPrefix:B}){this._checkArgs(e),this._schemas=new Map,this._s3=new he(e),this._dirPrefix=e.dirPrefix||B,this._avro=_e}_checkArgs=e=>{let r=["accessKeyId","secretAccessKey","endpoint","bucketName"];for(let s of r)if(!e[s])throw new d(`${l}: ${s} is required`,h.MISSING_ARGUMENT)};async listCollections(){try{let e=await this._s3.list(I,this._dirPrefix);return typeof e=="object"&&e!==null&&e.keyCount==="0"?[]:e.map(r=>r.key.slice(this._dirPrefix.length+1,-A.length))}catch(e){throw new p(`${l}: ${e.message}`,h.S3_OPERATION_ERROR)}}async collectionExists(e){try{return P(e),!!await this._s3.fileExists(`${this._dirPrefix}${I}${e}${A}`)}catch(r){if(r.message.includes("Not Found"))return!1;throw new d(`${l}: ${r.message}`,h.COLLECTION_NOT_FOUND)}}async createCollection(e,r,s=[]){try{if(P(e),!await this.collectionExists(e)){if(typeof r<"u"&&r!==null)try{if(!this._avro.parse(r))throw new $(`${l}: Schema is invalid: ${r}`,h.SCHEMA_VALIDATION_ERROR)}catch{throw new $(`${l}: Schema is invalid: ${r}`,h.SCHEMA_VALIDATION_ERROR)}if(s.length>0&&r){let o=this._avro.parse({type:"array",items:r});await this._s3.put(`${this._dirPrefix}${I}${e}${A}`,o.toBuffer(s))}else await this._s3.put(`${this._dirPrefix}${I}${e}${A}`,W);return this.collection(e,r,!1)}throw new d(`${l}: Collection ${e} already exists`,h.COLLECTION_EXISTS)}catch(i){throw i instanceof d?i:new d(`${l}: ${i.message}`,h.CREATE_COLLECTION_ERROR)}}async removeCollection(e){try{if(P(e),await this.collectionExists(e)){await this._s3.delete(`${this._dirPrefix}${I}${e}${A}`);let s=await this.collectionExists(e);if(typeof s=="boolean"){if(!s)return this._schemas.delete(e),!0;throw new d(`${l}: Failed to delete collection ${e}`,h.S3_OPERATION_ERROR)}throw new p(`${l}: Failed to delete collection ${e}`,h.S3_OPERATION_ERROR)}throw new d(`${l}: Collection ${e} does not exist`,h.REMOVE_COLLECTION_ERROR)}catch(r){throw r instanceof p?r:new d(`${l}: Failed to remove collection: ${r.message}`,h.REMOVE_COLLECTION_ERROR)}}async collection(e,r,s=!0){try{P(e);let i=`${this._dirPrefix}${I}${e}${A}`;if(!await this._s3.fileExists(i)){if(!s)throw new d(`${l}: Collection ${e} does not exist`,h.COLLECTION_NOT_FOUND);await this._s3.put(i,W)}let n=r||this._schemas.get(e)||void 0;return new Q(e,n,this._s3,this._dirPrefix)}catch(i){throw i.message.includes("unknown type")?new $(`${l}: Schema input is invalid: ${i.message}`,h.SCHEMA_VALIDATION_ERROR):new d(`${l}: ${i.message}`,h.COLLECTION_NOT_FOUND)}}s3=()=>this._s3},Q=class t{constructor(e,r,s,i=B,o=!1,n=ue){this._colName=e,this._s3=s,this._schema=v(r),this._dirPrefix=i,this._safeWrite=o,this._chunkSize=n||ue,this._key=`${this._dirPrefix}${I}${this._colName}${A}`,this._s3.setMaxRequestSizeInBytes(this._chunkSize),this._avro=_e,this._lastETag="",this._dataCache=[],this._avroType=typeof r>"u"?null:this._avro.parse(r)}getProps=()=>({colName:this._colName,schema:this._schema,s3:this._s3,avro:this._avro,avroType:this._avroType,dirPrefix:this._dirPrefix,safeWrite:this._safeWrite,chunkSize:this._chunkSize});setProps=e=>{this._colName=e.colName,this._schema=e.schema,this._s3=e.s3,this._avro=e.avro,this._avroType=e.avroType,this._dirPrefix=e.dirPrefix,this._safeWrite=e.safeWrite,this._chunkSize=e.chunkSize};setSafeWrite=e=>{this._safeWrite=e};getSafeWrite=()=>this._safeWrite;getAvroSchema=()=>this._schema;setAvroSchema=e=>{this._schema=v(e),this._avroType=typeof e>"u"?null:this._avro.parse(e)};async _loadData(){try{if(this._avroType===null||typeof this._avroType>"u")throw new d(`${l}: Missing type definition. Configure before operations `,h.SCHEMA_VALIDATION_ERROR);let{etag:e,data:r}=await this._s3.getObjectWithETag(this._key,{"if-none-match":this._lastETag});if(r===null)return this._dataCache;this._lastETag=e===null?this._lastETag:e;let s=this._avro.parse({type:"array",items:this._avroType});if(r.length0?s.fromBuffer(Buffer.from(r,"utf8")):[],this._dataCache;let i=this._chunkSize,o=[Buffer.from(r,"utf8")],n=!0;for(;n;){let a=await this._s3.getResponse(this._key,!1,i,i+this._chunkSize),c=await a.text();o.push(Buffer.from(c,"utf8")),i+=this._chunkSize,(a.headers.get("content-length")||c.length)-1)return this._dataCache=[],this._dataCache;throw new p(`${l}: Failed to load data: ${e.message}`,h.S3_OPERATION_ERROR)}}async _saveData(e){try{if(this._avroType===null||typeof this._avroType>"u")throw new d(`${l}: Missing type definition. Configure before operations `,h.SCHEMA_VALIDATION_ERROR);let r=this._avro.parse({type:"array",items:this._avroType}),s=e.length>0?r.toBuffer(e):W;if(this._safeWrite&&this._lastETag!==""){let n=await this._s3.getEtag(this._key);if(n!==null&&n!==this._lastETag)return!1}let i=await this._s3.put(this._key,s);if(i.status!==200)throw new p(`${l}: Failed to save data`,h.S3_OPERATION_ERROR);let o=i.headers.get("etag");return o&&(this._lastETag=this._s3.sanitizeETag(o),this._dataCache=e),!0}catch(r){throw r instanceof p?r:new d(`${l}: ${r.message}`,h.SAVE_DATA_ERROR)}}async insert(e,r=void 0){try{if(e==null)throw new d(`${l}: Document is required for insert`,h.INSERT_ERROR);if(typeof e!="object"&&!Array.isArray(e))throw new T(`${l}: Document must be an object or an array`,h.DOCUMENT_VALIDATION_ERROR);let s=Array.isArray(e)?e:[e],i=v(r)||this._schema||V(s[0]),o=this._avro.parse(i);if(!o)throw new $(`${l}: Schema is required - Pass a schema to the insert method`,h.SCHEMA_VALIDATION_ERROR);this._avroType=o;let n=await this._loadData();for(let a of s){if(typeof a!="object"||a===null)throw new T(`${l}: Invalid input: input must be an object or an array of objects`,h.DOCUMENT_VALIDATION_ERROR);if(a._id=a._id||await le(),this._avroType.isValid(a,{errorHook:z,noUndeclaredFields:!0})===!0)n.push(a);else throw new T(`${l}: Invalid document or schema`,h.DOCUMENT_VALIDATION_ERROR)}if(!await this._saveData(n))throw new p(`${l}: Failed to insert document`,h.S3_OPERATION_ERROR);return this.setAvroSchema(i),s}catch(s){throw s.message.includes("unknown type")?new $(`${l}: Schema input is invalid: ${s.message}`,h.SCHEMA_VALIDATION_ERROR):s instanceof d?s:new d(`${l} Insert operation failed: ${s.message}`,h.INSERT_ERROR)}}async find(e={},r={}){try{if(e==null)throw new d(`${l}: Query is required for update`,h.MISSING_ARGUMENT);let s=await this._loadData(),i=parseInt(r.skip,10)||0,o=parseInt(r.limit,10)?i+parseInt(r.limit,10):void 0;return s.filter(u=>k(u,e)).slice(i,o)}catch(s){throw new d(`${l}: Find operation failed: ${s.message}`,h.FIND_ERROR)}}async findOne(e={}){try{if(e===null)throw new d(`${l}: Query cannot be null`,h.INVALID_ARGUMENT);return(await this.find(e,{limit:1}))[0]||null}catch(r){throw r instanceof d?r:new d(`${l}: FindOne operation failed: ${r.message}`,h.FIND_ONE_ERROR)}}async update(e={},r={},s={}){try{if(e==null||r===void 0||r===null)throw new d(`${l}: Query and update values are required for update`,h.MISSING_ARGUMENT);if(!this._avroType)throw new $(`${l}: Schema is not defined for this collection`,h.SCHEMA_VALIDATION_ERROR);let i=await this._loadData();if(i.length===0)return 0;let o=0;for(let n=0;n0){if(!await this._saveData(i))throw new p(`${l}: Failed to update document`,h.S3_OPERATION_ERROR)}else if(s.upsert){if(!await this.insert(r))throw new p(`${l}: Failed to update document`,h.S3_OPERATION_ERROR);o=1}return o}catch(i){throw i instanceof p?i:new d(`${l}: Update operation failed: ${i.message}`,h.UPDATE_ERROR)}}async updateOne(e={},r={},s={}){try{if(e==null||r===void 0||r===null)throw new d(`${l}: Query is required`,h.MISSING_ARGUMENT);if(!this._avroType)throw new $(`${l}: Schema is not defined for this collection`,h.SCHEMA_VALIDATION_ERROR);let i=await this._loadData();if(i.length===0)return 0;let o=i.findIndex(n=>k(n,e));if(o!==-1){let n={...i[o],...r};if(this._avroType.isValid(n,{errorHook:z,noUndeclaredFields:!0})===!0){if(i[o]=n,!await this._saveData(i))throw new p(`${l}: Failed to update document`,h.S3_OPERATION_ERROR);return 1}else throw new T(`${l}: Invalid document or schema`,h.DOCUMENT_VALIDATION_ERROR)}if(s.upsert){if(!await this.insert(r))throw new p(`${l}: Failed to update document`,h.S3_OPERATION_ERROR);return 1}return 0}catch(i){throw i instanceof d?i:new d(`${l}: UpdateOne operation failed: ${i.message}`,h.UPDATE_ONE_ERROR)}}async delete(e={}){try{if(e==null)throw new d(`${l}: Query is required`,h.MISSING_ARGUMENT);let r=await this._loadData();if(r.length===0)return 0;let s=r.length,i=r.filter(n=>!k(n,e));if(!await this._saveData(i))throw new p(`${l}: Failed to delete document`,h.S3_OPERATION_ERROR);return s-i.length}catch(r){throw r instanceof p?r:new d(`${l}: Delete operation failed: ${r.message}`,h.DELETE_ERROR)}}async deleteAll(){try{let r=(await this._loadData()).length;if(!await this._saveData([]))throw new p(`${l}: Failed to delete document`,h.S3_OPERATION_ERROR);return r}catch(e){throw e instanceof p?e:new d(`${l}: Delete operation failed: ${e.message}`,h.DELETE_ERROR)}}async count(e={}){try{return(await this.find(e)).length}catch(r){throw new d(`${l}: Count operation failed: ${r.message}`,h.COUNT_ERROR)}}async renameCollection(e,r=this._schema){try{if(P(e),await this._s3.fileExists(`${this._dirPrefix}${I}${e}${A}`))throw new d(`${l}: Collection ${e} already exists`,h.COLLECTION_EXISTS);let i=r||this.getAvroSchema(),o=await this._loadData(),n=new t(e,i,this._s3,this._dirPrefix,this._safeWrite,this._chunkSize);return await n._saveData(o),await this._s3.delete(`${this._dirPrefix}${I}${this._colName}${A}`),n}catch(s){throw s instanceof d?s:new d(`${l}: Rename collection failed: ${s.message}`,h.RENAME_COLLECTION_ERROR)}}};export{de as lowstorage,d as lowstorageError,h as lowstorage_ERROR_CODES}; //# sourceMappingURL=lowstorage.js.map diff --git a/lib/lowstorage.js.map b/lib/lowstorage.js.map index d10fceb..ae8dfcf 100644 --- a/lib/lowstorage.js.map +++ b/lib/lowstorage.js.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["../node_modules/ultralight-s3/src/index.ts", "../src/lowstorage.js", "../src/errors.js", "../src/helpers.js"], - "sourcesContent": ["'use strict';\n\n// Constants\nconst AWS_ALGORITHM = 'AWS4-HMAC-SHA256';\nconst AWS_REQUEST_TYPE = 'aws4_request';\nconst S3_SERVICE = 's3';\nconst LIST_TYPE = '2';\nconst UNSIGNED_PAYLOAD = 'UNSIGNED-PAYLOAD';\nconst DEFAULT_STREAM_CONTENT_TYPE = 'application/octet-stream';\nconst XML_CONTENT_TYPE = 'application/xml';\nconst JSON_CONTENT_TYPE = 'application/json';\n// List of keys that might contain sensitive information\nconst SENSITIVE_KEYS_REDACTED = ['accessKeyId', 'secretAccessKey', 'sessionToken', 'password'];\nconst MIN_MAX_REQUEST_SIZE_IN_BYTES = 5 * 1024 * 1024;\n\n// Headers\nconst HEADER_AMZ_CONTENT_SHA256 = 'x-amz-content-sha256';\nconst HEADER_AMZ_DATE = 'x-amz-date';\nconst HEADER_HOST = 'host';\nconst HEADER_AUTHORIZATION = 'Authorization';\nconst HEADER_CONTENT_TYPE = 'Content-Type';\nconst HEADER_CONTENT_LENGTH = 'Content-Length';\nconst HEADER_ETAG = 'etag';\nconst HEADER_LAST_MODIFIED = 'last-modified';\n\n// Error messages\nconst ERROR_PREFIX = 'ultralight-s3 Module: ';\nconst ERROR_ACCESS_KEY_REQUIRED = `${ERROR_PREFIX}accessKeyId must be a non-empty string`;\nconst ERROR_SECRET_KEY_REQUIRED = `${ERROR_PREFIX}secretAccessKey must be a non-empty string`;\nconst ERROR_ENDPOINT_REQUIRED = `${ERROR_PREFIX}endpoint must be a non-empty string`;\nconst ERROR_BUCKET_NAME_REQUIRED = `${ERROR_PREFIX}bucketName must be a non-empty string`;\nconst ERROR_KEY_REQUIRED = `${ERROR_PREFIX}key must be a non-empty string`;\nconst ERROR_UPLOAD_ID_REQUIRED = `${ERROR_PREFIX}uploadId must be a non-empty string`;\nconst ERROR_PARTS_REQUIRED = `${ERROR_PREFIX}parts must be a non-empty array`;\nconst ERROR_INVALID_PART = `${ERROR_PREFIX}Each part must have a partNumber (number) and ETag (string)`;\nconst ERROR_DATA_BUFFER_REQUIRED = `${ERROR_PREFIX}data must be a Buffer or string`;\n// const ERROR_PATH_REQUIRED = `${ERROR_PREFIX}path must be a string`;\nconst ERROR_PREFIX_TYPE = `${ERROR_PREFIX}prefix must be a string`;\nconst ERROR_MAX_KEYS_TYPE = `${ERROR_PREFIX}maxKeys must be a positive integer`;\nconst ERROR_DELIMITER_REQUIRED = `${ERROR_PREFIX}delimiter must be a string`;\n\n// const STATUS_CODES: Record = {\n// 200: 'OK',\n// 204: 'No Content',\n// 205: 'Reset Content',\n// 206: 'Partial Content',\n// 301: 'Moved Permanently',\n// 302: 'Found',\n// 400: 'Bad Request',\n// 401: 'Unauthorized',\n// 403: 'Forbidden',\n// 404: 'Not Found',\n// 418: \"I'm a Teapot\",\n// 428: 'Precondition Required',\n// 429: 'Too Many Requests',\n// 500: 'Internal Server Error',\n// 501: 'Not Implemented',\n// };\n\ninterface S3Config {\n accessKeyId: string;\n secretAccessKey: string;\n endpoint: string;\n bucketName: string;\n region?: string;\n maxRequestSizeInBytes?: number;\n requestAbortTimeout?: number;\n logger?: Logger;\n}\n\ndeclare global {\n interface Crypto {\n createHmac: (\n algorithm: string,\n key: string | Buffer,\n ) => {\n update: (data: string | Buffer) => void;\n digest: (encoding?: 'hex' | 'base64' | 'latin1') => string;\n };\n createHash: (algorithm: string) => {\n update: (data: string | Buffer) => void;\n digest: (encoding?: 'hex' | 'base64' | 'latin1') => string;\n };\n }\n}\n\ninterface Logger {\n info: (message: string, ...args: any[]) => void;\n warn: (message: string, ...args: any[]) => void;\n error: (message: string, ...args: any[]) => void;\n}\n\ninterface UploadPart {\n partNumber: number;\n ETag: string;\n}\n\ninterface CompleteMultipartUploadResult {\n Location: string;\n Bucket: string;\n Key: string;\n ETag: string;\n}\n\ntype HttpMethod = 'POST' | 'GET' | 'HEAD' | 'PUT' | 'DELETE';\n\n// false - Not found (404)\n// true - Found (200)\n// null - ETag mismatch (412)\ntype ExistResponseCode = false | true | null;\n\nlet _createHmac = crypto.createHmac || (await import('node:crypto')).createHmac;\nlet _createHash = crypto.createHash || (await import('node:crypto')).createHash;\n\nif (typeof _createHmac === 'undefined' && typeof _createHash === 'undefined') {\n console.error(\n 'ultralight-S3 Module: Crypto functions are not available, please report the issue with necessary description: https://github.com/sentienhq/ultralight-s3/issues',\n );\n}\n\nconst expectArray: { [key: string]: boolean } = {\n contents: true,\n};\n\nconst encodeAsHex = (c: string): string => `%${c.charCodeAt(0).toString(16).toUpperCase()}`;\n\nconst uriEscape = (uriStr: string): string => {\n return encodeURIComponent(uriStr).replace(/[!'()*]/g, encodeAsHex);\n};\n\nconst uriResourceEscape = (string: string): string => {\n return uriEscape(string).replace(/%2F/g, '/');\n};\n\n/**\n * S3 class for interacting with S3-compatible object storage services.\n * This class provides methods for common S3 operations such as uploading, downloading,\n * and deleting objects, as well as multipart uploads.\n *\n * @class\n * @example\n * const s3 = new S3({\n * accessKeyId: 'your-access-key',\n * secretAccessKey: 'your-secret-key',\n * endpoint: 'https://your-s3-endpoint.com',\n * bucketName: 'your-bucket-name',\n * region: 'us-east-1' // by default is auto\n * });\n *\n * // Upload a file\n * await s3.put('example.txt', 'Hello, World!');\n *\n * // Download a file\n * const content = await s3.get('example.txt');\n *\n * // Delete a file\n * await s3.delete('example.txt');\n */\nclass S3 {\n /**\n * Creates an instance of the S3 class.\n *\n * @constructor\n * @param {Object} config - Configuration options for the S3 instance.\n * @param {string} config.accessKeyId - The access key ID for authentication.\n * @param {string} config.secretAccessKey - The secret access key for authentication.\n * @param {string} config.endpoint - The endpoint URL of the S3-compatible service.\n * @param {string} [config.bucketName=''] - The name of the bucket to operate on.\n * @param {string} [config.region='auto'] - The region of the S3 service.\n * @param {number} [config.maxRequestSizeInBytes=5242880] - The maximum size of a single request in bytes (minimum for AWS S3 is 5MB).\n * @param {number} [config.requestAbortTimeout=undefined] - The timeout in milliseconds after which a request should be aborted (careful on streamed requests).\n * @param {Object} [config.logger=null] - A logger object with methods like info, warn, error.\n * @throws {TypeError} Will throw an error if required parameters are missing or of incorrect type.\n */\n private accessKeyId: string;\n private secretAccessKey: string;\n private endpoint: string;\n private bucketName: string;\n private region: string;\n private maxRequestSizeInBytes: number;\n private requestAbortTimeout?: number;\n private logger?: Logger;\n\n constructor({\n accessKeyId,\n secretAccessKey,\n endpoint,\n bucketName,\n region = 'auto',\n maxRequestSizeInBytes = MIN_MAX_REQUEST_SIZE_IN_BYTES,\n requestAbortTimeout = undefined,\n logger = undefined,\n }: S3Config) {\n this._validateConstructorParams(accessKeyId, secretAccessKey, endpoint, bucketName);\n this.accessKeyId = accessKeyId;\n this.secretAccessKey = secretAccessKey;\n this.endpoint = endpoint;\n this.bucketName = bucketName;\n this.region = region;\n this.maxRequestSizeInBytes = maxRequestSizeInBytes;\n this.requestAbortTimeout = requestAbortTimeout;\n this.logger = logger;\n }\n\n private _validateConstructorParams(\n accessKeyId: string,\n secretAccessKey: string,\n endpoint: string,\n bucketName: string,\n ): void {\n if (typeof accessKeyId !== 'string' || accessKeyId.trim().length === 0)\n throw new TypeError(ERROR_ACCESS_KEY_REQUIRED);\n if (typeof secretAccessKey !== 'string' || secretAccessKey.trim().length === 0)\n throw new TypeError(ERROR_SECRET_KEY_REQUIRED);\n if (typeof endpoint !== 'string' || endpoint.trim().length === 0) throw new TypeError(ERROR_ENDPOINT_REQUIRED);\n if (typeof bucketName !== 'string' || bucketName.trim().length === 0)\n throw new TypeError(ERROR_BUCKET_NAME_REQUIRED);\n }\n\n private _checkMethodHeadnGet(method: string): void {\n if (method !== 'GET' && method !== 'HEAD') {\n this._log('error', `${ERROR_PREFIX}method must be either GET or HEAD`);\n throw new Error('method must be either GET or HEAD');\n }\n }\n\n private _checkKey(key: string): void {\n if (typeof key !== 'string' || key.trim().length === 0) {\n this._log('error', ERROR_KEY_REQUIRED);\n throw new TypeError(ERROR_KEY_REQUIRED);\n }\n }\n\n private _checkDelimiter(delimiter: string): void {\n if (typeof delimiter !== 'string' || delimiter.trim().length === 0) {\n this._log('error', ERROR_DELIMITER_REQUIRED);\n throw new TypeError(ERROR_DELIMITER_REQUIRED);\n }\n }\n\n private _checkPrefix(prefix: string): void {\n if (typeof prefix !== 'string') {\n this._log('error', ERROR_PREFIX_TYPE);\n throw new TypeError(ERROR_PREFIX_TYPE);\n }\n }\n\n private _checkMaxKeys(maxKeys: number): void {\n if (typeof maxKeys !== 'number' || maxKeys <= 0) {\n this._log('error', ERROR_MAX_KEYS_TYPE);\n throw new TypeError(ERROR_MAX_KEYS_TYPE);\n }\n }\n\n private _checkOpts(opts: Record): void {\n if (typeof opts !== 'object') {\n this._log('error', `${ERROR_PREFIX}opts must be an object`);\n throw new TypeError(`${ERROR_PREFIX}opts must be an object`);\n }\n }\n\n /**\n * Internal method to log messages with sanitized sensitive information.\n * @param {string} level - The log level (e.g., 'info', 'warn', 'error').\n * @param {string} message - The message to log.\n * @param {Object} [additionalData={}] - Additional data to include in the log.\n * @private\n */\n private _log(\n level: 'info' | 'warn' | 'error',\n message: string,\n additionalData: Record | string = {},\n ): void {\n if (this.logger && typeof this.logger[level] === 'function') {\n // Function to recursively sanitize an object\n const sanitize = (obj: any): any => {\n if (typeof obj !== 'object' || obj === null) {\n return obj;\n }\n return Object.keys(obj).reduce(\n (acc: any, key) => {\n if (SENSITIVE_KEYS_REDACTED.includes(key.toLowerCase())) {\n acc[key] = '[REDACTED]';\n } else if (typeof obj[key] === 'object' && obj[key] !== null) {\n acc[key] = sanitize(obj[key]);\n } else {\n acc[key] = obj[key];\n }\n return acc;\n },\n Array.isArray(obj) ? [] : {},\n );\n };\n\n // Sanitize the additional data\n const sanitizedData = sanitize(additionalData);\n // Prepare the log entry\n const logEntry = {\n timestamp: new Date().toISOString(),\n level,\n message,\n ...sanitizedData,\n // Include some general context, but sanitize sensitive parts\n context: sanitize({\n bucketName: this.bucketName,\n region: this.region,\n endpoint: this.endpoint,\n // Only include the first few characters of the access key, if it exists\n accessKeyId: this.accessKeyId ? `${this.accessKeyId.substring(0, 4)}...` : undefined,\n }),\n };\n\n // Log the sanitized entry\n this.logger[level](logEntry);\n }\n }\n\n getBucketName = () => this.bucketName;\n setBucketName = (bucketName: string) => {\n this.bucketName = bucketName;\n };\n getRegion = () => this.region;\n setRegion = (region: string) => {\n this.region = region;\n };\n getEndpoint = () => this.endpoint;\n setEndpoint = (endpoint: string) => {\n this.endpoint = endpoint;\n };\n getMaxRequestSizeInBytes = () => this.maxRequestSizeInBytes;\n setMaxRequestSizeInBytes = (maxRequestSizeInBytes: number) => {\n this.maxRequestSizeInBytes = maxRequestSizeInBytes;\n };\n sanitizeETag = (etag: string): string => sanitizeETag(etag);\n\n getProps = () => ({\n accessKeyId: this.accessKeyId,\n secretAccessKey: this.secretAccessKey,\n region: this.region,\n bucket: this.bucketName,\n endpoint: this.endpoint,\n maxRequestSizeInBytes: this.maxRequestSizeInBytes,\n requestAbortTimeout: this.requestAbortTimeout,\n logger: this.logger,\n });\n setProps = (props: S3Config) => {\n this._validateConstructorParams(props.accessKeyId, props.secretAccessKey, props.bucketName, props.endpoint);\n this.accessKeyId = props.accessKeyId;\n this.secretAccessKey = props.secretAccessKey;\n this.region = props.region || 'auto';\n this.bucketName = props.bucketName;\n this.endpoint = props.endpoint;\n this.maxRequestSizeInBytes = props.maxRequestSizeInBytes || MIN_MAX_REQUEST_SIZE_IN_BYTES;\n this.requestAbortTimeout = props.requestAbortTimeout;\n this.logger = props.logger;\n };\n\n /**\n * Get the content length of an object.\n * @param {string} key - The key of the object.\n * @returns {Promise} The content length of the object in bytes.\n * @throws {TypeError} If the key is not a non-empty string.\n */\n async getContentLength(key: string): Promise {\n this._checkKey(key);\n const headers = {\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('HEAD', encodedKey, {}, headers, '');\n const res = await this._sendRequest(url, 'HEAD', signedHeaders);\n const contentLength = res.headers.get(HEADER_CONTENT_LENGTH);\n return contentLength ? parseInt(contentLength, 10) : 0;\n }\n\n /**\n * Check if a bucket exists.\n * @returns {Promise} True if the bucket exists, false otherwise.\n */\n async bucketExists(): Promise {\n const headers = {\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n const { url, headers: signedHeaders } = await this._sign('HEAD', '', {}, headers, '');\n const res = await this._sendRequest(url, 'HEAD', signedHeaders);\n if (res.ok && res.status === 200) {\n return true;\n }\n return false;\n }\n\n // TBD\n // async createBucket(bucketName) {\n // const xmlBody = `\n // \n // \n // ${this.region}\n // \n // `;\n // const headers = {\n // [HEADER_CONTENT_TYPE]: XML_CONTENT_TYPE,\n // [HEADER_CONTENT_LENGTH]: Buffer.byteLength(xmlBody).toString(),\n // [HEADER_AMZ_CONTENT_SHA256]: await _hash(xmlBody),\n // };\n // const encodedKey = encodeURI(bucketName);\n // const { url, headers: signedHeaders } = await this._sign('PUT', encodedKey, {}, headers, '');\n // const res = await this._sendRequest(url, 'PUT', signedHeaders);\n // if (res.ok && res.status === 200) {\n // return true;\n // }\n // return false;\n // }\n\n /**\n * Check if a file exists in the bucket.\n * @param {string} key - The key of the object.\n * @param {Object} [opts={}] - Additional options for the fileExists operation.\n * @returns {Promise} True if the file exists, false otherwise. 0 - Not found (404), 1 - Found (200), 2 - ETag mismatch (412).\n * @throws {TypeError} If the key is not a non-empty string.\n */\n async fileExists(key: string, opts: Record = {}): Promise {\n this._checkKey(key);\n const { filteredOpts, conditionalHeaders } = this._filterIfHeaders(opts);\n const headers = { [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD, ...conditionalHeaders };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('HEAD', encodedKey, filteredOpts, headers, '');\n try {\n const res = await this._sendRequest(url, 'HEAD', signedHeaders, '', [200, 404, 412, 304]);\n if (res.status === 404) {\n return false;\n }\n if (res.status === 412 || res.status === 304) {\n return null;\n }\n if (res.ok && res.status === 200) return true;\n else this._handleErrorResponse(res);\n return false; // should never happen\n } catch (error: unknown) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n this._log('error', `${ERROR_PREFIX}Failed to check if file exists: ${errorMessage}`);\n throw new Error(`${ERROR_PREFIX}Failed to check if file exists: ${errorMessage}`);\n }\n }\n private async _sign(\n method: HttpMethod,\n keyPath: string,\n query: Object,\n headers: Record,\n body: string | Buffer,\n ): Promise<{ url: string; headers: Record }> {\n const datetime = new Date().toISOString().replace(/[:-]|\\.\\d{3}/g, '');\n const url =\n typeof keyPath === 'string' && keyPath.length > 0 ? new URL(keyPath, this.endpoint) : new URL(this.endpoint);\n url.pathname = `/${encodeURI(this.bucketName)}${url.pathname}`;\n headers[HEADER_AMZ_CONTENT_SHA256] = body ? await _hash(body) : UNSIGNED_PAYLOAD;\n headers[HEADER_AMZ_DATE] = datetime;\n headers[HEADER_HOST] = url.host;\n const canonicalHeaders = this._buildCanonicalHeaders(headers);\n const signedHeaders = Object.keys(headers)\n .map(key => key.toLowerCase())\n .sort()\n .join(';');\n\n const canonicalRequest = await this._buildCanonicalRequest(\n method,\n url,\n query,\n canonicalHeaders,\n signedHeaders,\n body,\n );\n const stringToSign = await this._buildStringToSign(datetime, canonicalRequest);\n const signature = await this._calculateSignature(datetime, stringToSign);\n const authorizationHeader = this._buildAuthorizationHeader(datetime, signedHeaders, signature);\n headers[HEADER_AUTHORIZATION] = authorizationHeader;\n return { url: url.toString(), headers };\n }\n\n private _buildCanonicalHeaders(headers: Record): string {\n return Object.entries(headers)\n .map(([key, value]) => `${key.toLowerCase()}:${String(value).trim()}`)\n .sort()\n .join('\\n');\n }\n\n async _buildCanonicalRequest(\n method: HttpMethod,\n url: URL,\n query: Object,\n canonicalHeaders: string,\n signedHeaders: string,\n body: string | Buffer,\n ): Promise {\n return [\n method,\n url.pathname,\n this._buildCanonicalQueryString(query),\n `${canonicalHeaders}\\n`,\n signedHeaders,\n body ? await _hash(body) : UNSIGNED_PAYLOAD,\n ].join('\\n');\n }\n\n async _buildStringToSign(datetime: string, canonicalRequest: string): Promise {\n const credentialScope = [datetime.slice(0, 8), this.region, S3_SERVICE, AWS_REQUEST_TYPE].join('/');\n return [AWS_ALGORITHM, datetime, credentialScope, await _hash(canonicalRequest)].join('\\n');\n }\n\n async _calculateSignature(datetime: string, stringToSign: string): Promise {\n const signingKey = await this._getSignatureKey(datetime.slice(0, 8));\n return _hmac(signingKey, stringToSign, 'hex');\n }\n\n private _buildAuthorizationHeader(datetime: string, signedHeaders: string, signature: string): string {\n const credentialScope = [datetime.slice(0, 8), this.region, S3_SERVICE, AWS_REQUEST_TYPE].join('/');\n return [\n `${AWS_ALGORITHM} Credential=${this.accessKeyId}/${credentialScope}`,\n `SignedHeaders=${signedHeaders}`,\n `Signature=${signature}`,\n ].join(', ');\n }\n\n private _filterIfHeaders(opts: Record): {\n filteredOpts: Record;\n conditionalHeaders: Record;\n } {\n const filteredOpts: Record = {};\n const conditionalHeaders: Record = {};\n const ifHeaders = ['if-match', 'if-none-match', 'if-modified-since', 'if-unmodified-since'];\n\n for (const [key, value] of Object.entries(opts)) {\n if (ifHeaders.includes(key)) {\n conditionalHeaders[key] = value;\n } else {\n filteredOpts[key] = value;\n }\n }\n\n return { filteredOpts, conditionalHeaders };\n }\n /**\n * List objects in the bucket.\n * @param {string} [delimiter='/'] - The delimiter to use for grouping objects in specific path.\n * @param {string} [prefix=''] - The prefix to filter objects in specific path.\n * @param {number} [maxKeys=1000] - The maximum number of keys to return.\n * @param {string} [method='GET'] - The HTTP method to use (GET or HEAD).\n * @param {Object} [opts={}] - Additional options for the list operation.\n * @returns {Promise} The list of objects or object metadata.\n * @throws {TypeError} If any of the parameters are of incorrect type.\n */\n async list(\n delimiter: string = '/',\n prefix: string = '',\n maxKeys: number = 1000,\n method: HttpMethod = 'GET',\n opts: Object = {},\n ): Promise> {\n this._checkDelimiter(delimiter);\n this._checkPrefix(prefix);\n this._checkMaxKeys(maxKeys);\n this._checkMethodHeadnGet(method);\n this._checkOpts(opts);\n this._log('info', `Listing objects in ${prefix}`);\n\n const query = {\n 'list-type': LIST_TYPE,\n 'max-keys': String(maxKeys),\n ...opts,\n } as { [key: string]: any };\n if (prefix.length > 0) {\n query['prefix'] = prefix;\n }\n const headers = {\n [HEADER_CONTENT_TYPE]: JSON_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n const encodedKey = delimiter === '/' ? delimiter : uriEscape(delimiter);\n const { url, headers: signedHeaders } = await this._sign('GET', encodedKey, query, headers, '');\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n const res = await this._sendRequest(urlWithQuery, 'GET', signedHeaders);\n const responseBody = await res.text();\n\n if (method === 'HEAD') {\n const contentLength = res.headers.get(HEADER_CONTENT_LENGTH);\n const lastModified = res.headers.get(HEADER_LAST_MODIFIED);\n const etag = res.headers.get(HEADER_ETAG);\n\n return {\n size: contentLength ? +contentLength : undefined,\n mtime: lastModified ? new Date(lastModified) : undefined,\n ETag: etag || undefined,\n };\n }\n\n const data = _parseXml(responseBody);\n const output = data.listBucketResult || data.error || data;\n return output.contents || output;\n }\n\n /**\n * List multipart uploads in the bucket.\n * @param {string} [delimiter='/'] - The delimiter to use for grouping objects in specific path.\n * @param {string} [prefix=''] - The prefix to filter objects in specific path.\n * @param {string} [method='GET'] - The HTTP method to use (GET or HEAD).\n * @param {Object} [opts={}] - Additional options for the list operation.\n * @returns {Promise} The list of objects or object metadata.\n * @throws {TypeError} If any of the parameters are of incorrect type.\n */\n async listMultiPartUploads(\n delimiter: string = '/',\n prefix: string = '',\n method: HttpMethod = 'GET',\n opts: Object = {},\n ): Promise {\n this._checkDelimiter(delimiter);\n this._checkPrefix(prefix);\n this._checkMethodHeadnGet(method);\n this._checkOpts(opts);\n this._log('info', `Listing multipart uploads in ${prefix}`);\n\n const query = {\n uploads: '',\n ...opts,\n } as Record;\n const headers = {\n [HEADER_CONTENT_TYPE]: JSON_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n const encodedKey = delimiter === '/' ? delimiter : uriEscape(delimiter);\n const { url, headers: signedHeaders } = await this._sign('GET', encodedKey, query, headers, '');\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n const res = await this._sendRequest(urlWithQuery, 'GET', signedHeaders);\n const responseBody = await res.text();\n\n if (method === 'HEAD') {\n return {\n size: +(res.headers.get(HEADER_CONTENT_LENGTH) ?? '0'),\n mtime: new Date(res.headers.get(HEADER_LAST_MODIFIED) ?? ''),\n ETag: res.headers.get(HEADER_ETAG) ?? '',\n };\n }\n\n const data = _parseXml(responseBody);\n const output = data.listMultipartUploadsResult || data.error || data;\n return output.uploads || output;\n }\n\n /**\n * Get an object from the bucket.\n * @param {string} key - The key of the object to get.\n * @param {Object} [opts={}] - Additional options for the get operation.\n * @returns {Promise} The content of the object. If the object does not exist, null will be returned.\n */\n async get(key: string, opts: Record = {}): Promise {\n this._checkKey(key);\n this._log('info', `Getting object ${key}`);\n const { filteredOpts, conditionalHeaders } = this._filterIfHeaders(opts);\n const headers = {\n [HEADER_CONTENT_TYPE]: JSON_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n ...conditionalHeaders,\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('GET', encodedKey, filteredOpts, headers, '');\n const res = await this._sendRequest(url, 'GET', signedHeaders, '', [200, 404, 412, 304]);\n if (res.status === 404 || res.status === 412 || res.status === 304) {\n this._log('error', `Failed to get object. Status: ${res.status}`);\n return null;\n }\n if (!res.ok) {\n this._log('error', `Failed to get object. Status: ${res.status}`);\n throw new Error(`Failed to get object. Status: ${res.status}`);\n }\n return res.text();\n }\n\n /**\n *\n * @param {string} key - The key of the object to get.\n * @param {Object} [opts={}] - Additional options for the get operation.\n * @returns {Promise<{ etag: string|null; data: string|null }>} The content of the object. If the object does not exist, etag and data will be null.\n */\n async getObjectWithETag(\n key: string,\n opts: Record = {},\n ): Promise<{ etag: string | null; data: string | null }> {\n this._checkKey(key);\n this._log('info', `Getting object ${key}`);\n const { filteredOpts, conditionalHeaders } = this._filterIfHeaders(opts);\n const headers = {\n [HEADER_CONTENT_TYPE]: JSON_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n ...conditionalHeaders,\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('GET', encodedKey, filteredOpts, headers, '');\n try {\n const res = await this._sendRequest(url, 'GET', signedHeaders, '', [200, 404, 412, 304]);\n if (res.status === 404 || res.status === 412 || res.status === 304) {\n this._log('error', `Failed to get object. Status: ${res.status}`);\n return { etag: null, data: null };\n }\n if (!res.ok) {\n this._log('error', `Failed to get object. Status: ${res.status}`);\n throw new Error(`Failed to get object. Status: ${res.status}`);\n }\n\n const etag = res.headers.get('etag');\n if (!etag) {\n throw new Error('ETag not found in response headers');\n }\n const data = await res.text();\n return { etag: sanitizeETag(etag), data };\n } catch (error) {\n this._log('error', `Error getting object ${key} with ETag: ${error}`);\n throw error;\n }\n }\n\n /**\n * Get the ETag of an object.\n * @param {string} key - The key of the object to get.\n * @param {Object} [opts={}] - Additional options for the get operation.\n * @returns {Promise} The ETag of the object or null if the object etag does not match.\n */\n async getEtag(key: string, opts: Record = {}): Promise {\n this._checkKey(key);\n this._log('info', `Getting etag object ${key}`);\n const { filteredOpts, conditionalHeaders } = this._filterIfHeaders(opts);\n const headers = {\n [HEADER_CONTENT_TYPE]: JSON_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n ...conditionalHeaders,\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('HEAD', encodedKey, filteredOpts, headers, '');\n\n const res = await this._sendRequest(url, 'HEAD', signedHeaders, '', [200, 412, 304]);\n this._log('info', `Response status: ${(res.status, res.statusText)}`);\n // etag does not match\n if (res.status === 412 || res.status === 304) {\n return null;\n }\n\n const etag = res.headers.get('etag');\n if (!etag) {\n this._log('error', `ETag not found in response headers`);\n throw new Error(`ETag not found in response headers`);\n }\n return sanitizeETag(etag);\n }\n\n /**\n * Get a response of an object from the bucket.\n * @param {string} key - The key of the object to get.\n * @param {boolean} [wholeFile=true] - Whether to get the whole file or a part.\n * @param {number} [rangeFrom=0] - The range from to get if not getting the whole file.\n * @param {number} [rangeTo=this.maxRequestSizeInBytes] - The range to to get if not getting the whole file. Note: rangeTo is inclusive.\n * @param {Object} [opts={}] - Additional options for the get operation.\n * @returns {Promise} Response of the object content. Use readableStream() to get the stream from .body.\n */\n async getResponse(\n key: string,\n wholeFile: boolean = true,\n rangeFrom: number = 0,\n rangeTo: number = this.maxRequestSizeInBytes,\n opts: Record = {},\n ): Promise {\n this._checkKey(key);\n const { filteredOpts, conditionalHeaders } = this._filterIfHeaders({ ...opts });\n const headers = {\n [HEADER_CONTENT_TYPE]: JSON_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n ...(wholeFile ? {} : { range: `bytes=${rangeFrom}-${rangeTo - 1}` }),\n ...conditionalHeaders,\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('GET', encodedKey, filteredOpts, headers, '');\n const urlWithQuery = `${url}?${new URLSearchParams(filteredOpts)}`;\n\n return this._sendRequest(urlWithQuery, 'GET', signedHeaders);\n }\n\n /**\n * Put an object into the bucket.\n * @param {string} key - The key of the object to put. To create a folder, include a trailing slash.\n * @param {Buffer|string} data - The content of the object to put.\n * @returns {Promise} The response from the put operation.\n * @throws {TypeError} If the key is not a non-empty string or data is not a Buffer or string.\n */\n async put(key: string, data: string | Buffer): Promise {\n this._checkKey(key);\n if (!(data instanceof Buffer || typeof data === 'string')) {\n this._log('error', ERROR_DATA_BUFFER_REQUIRED);\n throw new TypeError(ERROR_DATA_BUFFER_REQUIRED);\n }\n // const encodedKey = encodeURIComponent(key);\n this._log('info', `Uploading object ${key}`);\n const contentLength = typeof data === 'string' ? Buffer.byteLength(data) : data.length;\n const headers = {\n [HEADER_CONTENT_LENGTH]: contentLength,\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('PUT', encodedKey, {}, headers, data);\n const res = await this._sendRequest(url, 'PUT', signedHeaders, data);\n return res;\n }\n\n /**\n * Initiate a multipart upload.\n * @param {string} key - The key of the object to upload.\n * @param {string} [fileType='application/octet-stream'] - The MIME type of the file.\n * @returns {Promise} The upload ID for the multipart upload.\n * @throws {TypeError} If the key is not a non-empty string or fileType is not a string.\n * @throws {Error} If the multipart upload initiation fails.\n */\n async getMultipartUploadId(key: string, fileType: string = DEFAULT_STREAM_CONTENT_TYPE): Promise {\n this._checkKey(key);\n if (typeof fileType !== 'string') {\n this._log('error', `${ERROR_PREFIX}fileType must be a string`);\n throw new TypeError(`${ERROR_PREFIX}fileType must be a string`);\n }\n this._log('info', `Initiating multipart upload for object ${key}`);\n const query = { uploads: '' };\n const headers = {\n [HEADER_CONTENT_TYPE]: fileType,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('POST', encodedKey, query, headers, '');\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n\n const res = await this._sendRequest(urlWithQuery, 'POST', signedHeaders);\n const responseBody = await res.text();\n const parsedResponse = _parseXml(responseBody);\n\n if (\n typeof parsedResponse === 'object' &&\n parsedResponse !== null &&\n 'error' in parsedResponse &&\n typeof parsedResponse.error === 'object' &&\n parsedResponse.error !== null &&\n 'message' in parsedResponse.error\n ) {\n const errorMessage = String(parsedResponse.error.message);\n this._log('error', `${ERROR_PREFIX}Failed to abort multipart upload: ${errorMessage}`);\n throw new Error(`${ERROR_PREFIX}Failed to abort multipart upload: ${errorMessage}`);\n }\n\n if (typeof parsedResponse === 'object' && parsedResponse !== null) {\n if (!parsedResponse.initiateMultipartUploadResult || !parsedResponse.initiateMultipartUploadResult.uploadId) {\n this._log('error', `${ERROR_PREFIX}Failed to create multipart upload: no uploadId in response`);\n throw new Error(`${ERROR_PREFIX}Failed to create multipart upload: Missing upload ID in response`);\n }\n\n return parsedResponse.initiateMultipartUploadResult.uploadId;\n } else {\n this._log('error', `${ERROR_PREFIX}Failed to create multipart upload: unexpected response format`);\n throw new Error(`${ERROR_PREFIX}Failed to create multipart upload: Unexpected response format`);\n }\n }\n\n /**\n * Upload a part in a multipart upload.\n * @param {string} key - The key of the object being uploaded.\n * @param {Buffer|string} data - The content of the part.\n * @param {string} uploadId - The upload ID of the multipart upload.\n * @param {number} partNumber - The part number.\n * @param {Object} [opts={}] - Additional options for the upload.\n * @returns {Promise} The ETag and part number of the uploaded part.\n * @throws {TypeError} If any of the parameters are of incorrect type.\n */\n async uploadPart(\n key: string,\n data: Buffer | string,\n uploadId: string,\n partNumber: number,\n opts: Object = {},\n ): Promise {\n this._validateUploadPartParams(key, data, uploadId, partNumber, opts);\n const query = { uploadId, partNumber, ...opts } as { [key: string]: any };\n const headers = {\n [HEADER_CONTENT_LENGTH]: data.length,\n } as { [key: string]: any };\n\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('PUT', encodedKey, query, headers, data);\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n\n const res = await this._sendRequest(urlWithQuery, 'PUT', signedHeaders, data);\n const ETag = sanitizeETag(res.headers.get('etag') || '');\n return { partNumber, ETag };\n }\n\n private _validateUploadPartParams(\n key: string,\n data: Buffer | string,\n uploadId: string,\n partNumber: number,\n opts: Object,\n ) {\n this._checkKey(key);\n if (!(data instanceof Buffer || typeof data === 'string')) {\n this._log('error', ERROR_DATA_BUFFER_REQUIRED);\n throw new TypeError(ERROR_DATA_BUFFER_REQUIRED);\n }\n if (typeof uploadId !== 'string' || uploadId.trim().length === 0) {\n this._log('error', ERROR_UPLOAD_ID_REQUIRED);\n throw new TypeError(ERROR_UPLOAD_ID_REQUIRED);\n }\n if (!Number.isInteger(partNumber) || partNumber <= 0) {\n this._log('error', `${ERROR_PREFIX}partNumber must be a positive integer`);\n throw new TypeError(`${ERROR_PREFIX}partNumber must be a positive integer`);\n }\n this._checkOpts(opts);\n }\n\n /**\n * Complete a multipart upload.\n * @param {string} key - The key of the object being uploaded.\n * @param {string} uploadId - The upload ID of the multipart upload.\n * @param {Array} parts - An array of objects containing PartNumber and ETag for each part.\n * @returns {Promise} The result of the complete multipart upload operation.\n * @throws {TypeError} If any of the parameters are of incorrect type.\n * @throws {Error} If the complete multipart upload operation fails.\n */\n async completeMultipartUpload(\n key: string,\n uploadId: string,\n parts: Array,\n ): Promise {\n this._checkKey(key);\n if (typeof uploadId !== 'string' || uploadId.trim().length === 0) {\n this._log('error', ERROR_UPLOAD_ID_REQUIRED);\n throw new TypeError(ERROR_UPLOAD_ID_REQUIRED);\n }\n if (!Array.isArray(parts) || parts.length === 0) {\n this._log('error', ERROR_PARTS_REQUIRED);\n throw new TypeError(ERROR_PARTS_REQUIRED);\n }\n if (!parts.every(part => typeof part.partNumber === 'number' && typeof part.ETag === 'string')) {\n this._log('error', ERROR_INVALID_PART);\n throw new TypeError(ERROR_INVALID_PART);\n }\n this._log('info', `Complete multipart upload ${uploadId} for object ${key}`);\n const query = { uploadId };\n const xmlBody = this._buildCompleteMultipartUploadXml(parts);\n const headers = {\n [HEADER_CONTENT_TYPE]: XML_CONTENT_TYPE,\n [HEADER_CONTENT_LENGTH]: Buffer.byteLength(xmlBody).toString(),\n [HEADER_AMZ_CONTENT_SHA256]: await _hash(xmlBody),\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('POST', encodedKey, query, headers, xmlBody);\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n\n const res = await this._sendRequest(urlWithQuery, 'POST', signedHeaders, xmlBody);\n const responseBody = await res.text();\n const parsedResponse = _parseXml(responseBody);\n\n if (\n typeof parsedResponse === 'object' &&\n parsedResponse !== null &&\n 'error' in parsedResponse &&\n typeof parsedResponse.error === 'object' &&\n parsedResponse.error !== null &&\n 'message' in parsedResponse.error\n ) {\n const errorMessage = String(parsedResponse.error.message);\n this._log('error', `${ERROR_PREFIX}Failed to abort multipart upload: ${errorMessage}`);\n throw new Error(`${ERROR_PREFIX}Failed to abort multipart upload: ${errorMessage}`);\n }\n\n return parsedResponse.completeMultipartUploadResult;\n }\n\n /**\n * Aborts a multipart upload.\n * @param {string} key - The key of the object being uploaded.\n * @param {string} uploadId - The ID of the multipart upload to abort.\n * @returns {Promise} - A promise that resolves to the abort response.\n * @throws {Error} If the abort operation fails.\n */\n async abortMultipartUpload(key: string, uploadId: string): Promise {\n // Input validation\n this._checkKey(key);\n if (typeof uploadId !== 'string' || uploadId.trim().length === 0) {\n this._log('error', ERROR_UPLOAD_ID_REQUIRED);\n throw new TypeError(ERROR_UPLOAD_ID_REQUIRED);\n }\n\n this._log('info', `Aborting multipart upload ${uploadId} for object ${key}`);\n\n // Prepare the request\n const query = { uploadId };\n const headers = {\n [HEADER_CONTENT_TYPE]: XML_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n\n try {\n // Sign and send the request\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('DELETE', encodedKey, query, headers, '');\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n\n const res = await this._sendRequest(urlWithQuery, 'DELETE', signedHeaders);\n\n // Check for successful response\n if (res.ok) {\n const responseBody = await res.text();\n const parsedResponse = _parseXml(responseBody);\n\n if (\n typeof parsedResponse === 'object' &&\n parsedResponse !== null &&\n 'error' in parsedResponse &&\n typeof parsedResponse.error === 'object' &&\n parsedResponse.error !== null &&\n 'message' in parsedResponse.error\n ) {\n const errorMessage = String(parsedResponse.error.message);\n this._log('error', `${ERROR_PREFIX}Failed to abort multipart upload: ${errorMessage}`);\n throw new Error(`${ERROR_PREFIX}Failed to abort multipart upload: ${errorMessage}`);\n }\n\n return {\n status: 'Aborted',\n key,\n uploadId,\n response: parsedResponse,\n };\n } else {\n this._log('error', `${ERROR_PREFIX}Abort request failed with status ${res.status}`);\n throw new Error(`${ERROR_PREFIX}Abort request failed with status ${res.status}`);\n }\n } catch (error: unknown) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n this._log('error', `${ERROR_PREFIX}Failed to abort multipart upload for key ${key}: ${errorMessage}`);\n throw new Error(`${ERROR_PREFIX}Failed to abort multipart upload for key ${key}: ${errorMessage}`);\n }\n }\n\n private _buildCompleteMultipartUploadXml(parts: Array): string {\n return `\n \n ${parts\n .map(\n part => `\n \n ${part.partNumber}\n ${part.ETag}\n \n `,\n )\n .join('')}\n \n `;\n }\n\n /**\n * Delete an object from the bucket.\n * @param {string} key - The key of the object to delete.\n * @returns {Promise} The response from the delete operation. True if the delete operation was successful, false otherwise. Note: The delete operation may return a 204 status code even if the object was not found.\n */\n async delete(key: string): Promise {\n this._checkKey(key);\n this._log('info', `Deleting object ${key}`);\n const headers = {\n [HEADER_CONTENT_TYPE]: JSON_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('DELETE', encodedKey, {}, headers, '');\n const res = await this._sendRequest(url, 'DELETE', signedHeaders);\n if (res.status === 204 || res.status === 200) {\n return true;\n }\n return false;\n }\n\n async _sendRequest(\n url: string,\n method: HttpMethod,\n headers: Record,\n body?: string | Buffer,\n toleratedStatusCodes: number[] = [],\n ): Promise {\n this._log('info', `Sending ${method} request to ${url}, headers: ${JSON.stringify(headers)}`);\n const res = await fetch(url, {\n method,\n headers,\n body: ['GET', 'HEAD'].includes(method) ? undefined : body,\n signal: this.requestAbortTimeout !== undefined ? AbortSignal.timeout(this.requestAbortTimeout) : undefined,\n });\n\n if (!res.ok && !toleratedStatusCodes.includes(res.status)) {\n await this._handleErrorResponse(res);\n }\n\n return res;\n }\n\n async _handleErrorResponse(res: Response) {\n const errorBody = await res.text();\n const errorCode = res.headers.get('x-amz-error-code') || 'Unknown';\n const errorMessage = res.headers.get('x-amz-error-message') || res.statusText;\n this._log(\n 'error',\n `${ERROR_PREFIX}Request failed with status ${res.status}: ${errorCode} - ${errorMessage},err body: ${errorBody}`,\n );\n throw new Error(\n `${ERROR_PREFIX}Request failed with status ${res.status}: ${errorCode} - ${errorMessage}, err body: ${errorBody}`,\n );\n }\n\n _buildCanonicalQueryString(queryParams: Object): string {\n if (Object.keys(queryParams).length < 1) {\n return '';\n }\n\n return Object.keys(queryParams)\n .sort()\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent((queryParams as Record)[key])}`)\n .join('&');\n }\n async _getSignatureKey(dateStamp: string): Promise {\n const kDate = await _hmac(`AWS4${this.secretAccessKey}`, dateStamp);\n const kRegion = await _hmac(kDate, this.region);\n const kService = await _hmac(kRegion, S3_SERVICE);\n return _hmac(kService, AWS_REQUEST_TYPE);\n }\n}\n\nconst _hash = async (content: string | Buffer): Promise => {\n const hashSum = _createHash('sha256');\n hashSum.update(content);\n return hashSum.digest('hex');\n};\n\nconst _hmac = async (key: string | Buffer, content: string, encoding?: 'hex'): Promise => {\n const hmacSum = _createHmac('sha256', key);\n hmacSum.update(content);\n return hmacSum.digest(encoding);\n};\nexport const sanitizeETag = (etag: string): string => {\n const replaceChars: Record = {\n '\"': '',\n '"': '',\n '"': '',\n '"': '',\n '"': '',\n };\n return etag.replace(/^(\"|"|")|(\"|"|")$/g, m => replaceChars[m] as string);\n};\n\nconst _parseXml = (str: string): string | object | any => {\n const unescapeXml = (value: string): string => {\n return value\n .replace(/"/g, '\"')\n .replace(/'/g, \"'\")\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/&/g, '&');\n };\n\n const json = {};\n const re = /<(\\w)([-\\w]+)(?:\\/|[^>]*>((?:(?!<\\1)[\\s\\S])*)<\\/\\1\\2)>/gm;\n let match;\n\n while ((match = re.exec(str))) {\n const [, prefix, key, value] = match;\n const fullKey = prefix.toLowerCase() + key;\n const parsedValue = value != null ? _parseXml(value) : true;\n\n if (typeof parsedValue === 'string') {\n (json as { [key: string]: any })[fullKey] = sanitizeETag(unescapeXml(parsedValue));\n } else if (Array.isArray((json as { [key: string]: any })[fullKey])) {\n (json as { [key: string]: any })[fullKey].push(parsedValue);\n } else {\n (json as { [key: string]: any })[fullKey] =\n (json as { [key: string]: any })[fullKey] != null\n ? [(json as { [key: string]: any })[fullKey], parsedValue]\n : expectArray[fullKey]\n ? [parsedValue]\n : parsedValue;\n }\n }\n\n return Object.keys(json).length ? json : unescapeXml(str);\n};\n\nexport { S3 };\nexport default S3;\n", "'use strict';\n\nimport { S3 } from 'ultralight-s3';\nimport avro from 'avro-js'; // eslint-disable-line\nimport {\n\tlowstorage_ERROR_CODES,\n\tlowstorageError,\n\tCollectionNotFoundError,\n\tSchemaValidationError,\n\tDocumentValidationError,\n\tS3OperationError,\n} from './errors.js';\nimport { matchesQuery, generateUUID, inferAvroType, ensureIdFieldInSchema } from './helpers.js';\n\nconst MODULE_NAME = 'lowstorage';\nconst DEFAULT_DELIMITER = '/';\nconst PROJECT_DIR_PREFIX = 'lowstorage';\nconst COL_SUFFIX = '.avro';\nconst CHUNG_1MB = 1024 * 1024;\nconst CHUNG_5MB = 5 * CHUNG_1MB;\nconst EMPTY_DATA = Buffer.from('', 'utf8');\n\nconst errorValidationFn = (errorCode = lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR) => {\n\tthrow new DocumentValidationError(`${MODULE_NAME}: Invalid document or schema`, errorCode);\n};\n\nconst _hasColName = (colName) => {\n\tif (colName.trim() === '' || colName === null || typeof colName === 'undefined' || colName.length > 255 || colName === null) {\n\t\tthrow new lowstorageError(`${MODULE_NAME}: Collection name is required, null or too long`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n\t}\n};\n\n// code / description\n// init of new collection is automatically creating it in the bucket\n// there is optional (opt-in) switch to create new collections in bucket\n// if the schema is not provided, it will create empty buffer and save it\n// if the schema is provided, it will save it in memory and use it for all ops\n// if the schema is updated, it will save it in memory and use it for all ops\n// exposed functions are:\n// listCollections \u2705\n// collectionExists \u2705\n// createCollection \u2705\n// removeCollection \u2705\n// renameCollection \u2705\n// updateCollectionSchema \u274C\n// collection \u2705\n// s3 \u2705\n\n// Operations over collections are:\n// insert \u2705\n// find \u2705\n// findOne \u2705\n// update \u2705\n// updateOne \u2705\n// delete \u2705\n// count \u2705\n\n// Errors:\n// lowstorageError \u2705\n// CollectionNotFoundError \u2705\n// SchemaValidationError \u2705\n// DocumentValidationError \u2705\n// S3OperationError \u2705\n\n/**\n * lowstorage class for managing collections and performing operations on top of S3-compatible storages.\n * @class\n * @example\n * const storage = new lowstorage({\n * \taccessKeyId: 'YOUR_ACCESS_KEY',\n * \tsecretAccessKey: 'YOUR_SECRET_KEY',\n * \tendpoint: 'YOUR_ENDPOINT',\n * \tbucketName: 'YOUR_BUCKET_NAME',\n * \tregion: 'YOUR_REGION',\n * });\n *\n * // Create a collection\n * const userCol = await storage.collection('users');\n *\n * // Insert a document\n * await userCol.insert({\n * \tname: 'Kevin',\n * \tgender: 'whatever',\n * \tposts: [],\n * });\n *\n * // Show all users\n * const allUsers = await userCol.find({});\n *\n * // Find users with pagination (e.g., page 2, 10 users per page)\n * const secondPageUsers = await userCol.find({}, { skip: 10, limit: 10 });\n *\n * // Find user by ID and update name\n * await userCol.update({ _id: id }, { name: 'Carlos' });\n */\nclass lowstorage {\n\t/**\n\t * Create a new lowstorage instance.\n\t * @param {Object} options - Configuration options for lowstorage.\n\t * @param {string} options.accessKeyId - S3 access key ID.\n\t * @param {string} options.secretAccessKey - S3 secret access key.\n\t * @param {string} options.endpoint - S3 endpoint URL.\n\t * @param {string} options.bucketName - S3 bucket name.\n\t * @param {string} [options.region='auto'] - S3 region.\n\t * @param {Object} [options.logger=null] - Logger object.\n\t * @param {string} [options.dirPrefix=PROJECT_DIR_PREFIX] - Directory prefix for collections.\n\t * @param {Number} [options.maxRequestSizeInBytes=CHUNG_5MB] - Chunk size for reading and writing data. AWS S3 has a minimum of 5MB per object.\n\t * @returns {lowstorage} A new lowstorage instance.\n\t */\n\tconstructor(\n\t\toptions = {\n\t\t\taccessKeyId: undefined,\n\t\t\tsecretAccessKey: undefined,\n\t\t\tendpoint: undefined,\n\t\t\tbucketName: undefined,\n\t\t\tregion: 'auto',\n\t\t\tlogger: null,\n\t\t\tdirPrefix: PROJECT_DIR_PREFIX,\n\t\t},\n\t) {\n\t\tthis._checkArgs(options);\n\t\tthis._schemas = new Map();\n\t\tthis._s3 = new S3(options);\n\t\tthis._dirPrefix = options.dirPrefix || PROJECT_DIR_PREFIX;\n\t\tthis._avro = avro;\n\t}\n\n\t_checkArgs = (args) => {\n\t\tconst requiredFields = ['accessKeyId', 'secretAccessKey', 'endpoint', 'bucketName'];\n\t\tfor (const field of requiredFields) {\n\t\t\tif (!args[field]) {\n\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: ${field} is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n\t\t\t}\n\t\t}\n\t};\n\n\t/**\n\t * List all collections.\n\t * @returns {Promise} An array of collection names.\n\t * @throws {S3OperationError} If there's an error during S3 operation.\n\t */\n\tasync listCollections() {\n\t\ttry {\n\t\t\tconst listed = await this._s3.list(DEFAULT_DELIMITER, this._dirPrefix);\n\t\t\tif (typeof listed === 'object' && listed !== null && listed.keyCount === '0') return [];\n\t\t\t// remove the delimiter from the key\n\t\t\treturn listed.map((entry) => entry.key.slice(this._dirPrefix.length + 1, -COL_SUFFIX.length));\n\t\t} catch (error) {\n\t\t\tthrow new S3OperationError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t}\n\t}\n\n\t/**\n\t * Check if a collection exists.\n\t * @param {string} colName - The name of the collection.\n\t * @returns {Promise} True if the collection exists, false otherwise.\n\t * @throws {lowstorageError} If there's an error.\n\t */\n\tasync collectionExists(colName) {\n\t\ttry {\n\t\t\t_hasColName(colName);\n\t\t\tconst exists = await this._s3.fileExists(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`);\n\t\t\treturn !!exists;\n\t\t} catch (error) {\n\t\t\tif (error.message.includes('Not Found')) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND);\n\t\t}\n\t}\n\n\t/**\n\t * Create a new collection.\n\t * @param {string} colName - The name of the collection.\n\t * @param {Object} [schema] - The schema for the collection.\n\t * @param {Array} [data=[]] - The initial data for the collection.\n\t * @returns {Promise} A Promise that resolves to a Collection object.\n\t * @throws {lowstorageError} If there's an error.\n\t */\n\tasync createCollection(colName, schema, data = []) {\n\t\ttry {\n\t\t\t_hasColName(colName);\n\t\t\tconst exists = await this.collectionExists(colName);\n\t\t\tif (!exists) {\n\t\t\t\tif (typeof schema !== 'undefined' && schema !== null) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst isValid = this._avro.parse(schema);\n\t\t\t\t\t\tif (!isValid) {\n\t\t\t\t\t\t\tthrow new SchemaValidationError(\n\t\t\t\t\t\t\t\t`${MODULE_NAME}: Schema is invalid: ${schema}`,\n\t\t\t\t\t\t\t\tlowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tthrow new SchemaValidationError(`${MODULE_NAME}: Schema is invalid: ${schema}`, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (data.length > 0 && schema) {\n\t\t\t\t\tconst wrapperType = this._avro.parse({ type: 'array', items: schema });\n\t\t\t\t\tawait this._s3.put(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`, wrapperType.toBuffer(data));\n\t\t\t\t} else {\n\t\t\t\t\tawait this._s3.put(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`, EMPTY_DATA);\n\t\t\t\t}\n\t\t\t\treturn this.collection(colName, schema, false);\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Collection ${colName} already exists`, lowstorage_ERROR_CODES.COLLECTION_EXISTS);\n\t\t} catch (error) {\n\t\t\tif (error instanceof lowstorageError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.CREATE_COLLECTION_ERROR);\n\t\t}\n\t}\n\n\t/**\n\t * Remove a collection.\n\t * @param {string} colName - The name of the collection.\n\t * @returns {Promise} A Promise that resolves to true if the collection is removed, false otherwise.\n\t * @throws {lowstorageError} If there's an error.\n\t */\n\tasync removeCollection(colName) {\n\t\ttry {\n\t\t\t_hasColName(colName);\n\t\t\tconst exists = await this.collectionExists(colName);\n\t\t\tif (exists) {\n\t\t\t\tawait this._s3.delete(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`);\n\t\t\t\tconst exists2 = await this.collectionExists(colName);\n\t\t\t\tif (typeof exists2 === 'boolean') {\n\t\t\t\t\tif (!exists2) {\n\t\t\t\t\t\tthis._schemas.delete(colName);\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Failed to delete collection ${colName}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t\t}\n\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to delete collection ${colName}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Collection ${colName} does not exist`, lowstorage_ERROR_CODES.REMOVE_COLLECTION_ERROR);\n\t\t} catch (error) {\n\t\t\tif (error instanceof S3OperationError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(\n\t\t\t\t`${MODULE_NAME}: Failed to remove collection: ${error.message}`,\n\t\t\t\tlowstorage_ERROR_CODES.REMOVE_COLLECTION_ERROR,\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Get or create a collection.\n\t * @param {string} colName - The name of the collection.\n\t * @param {Object} [schema] - The schema for the collection.\n\t * @param {boolean} [autoCreate=true] - Whether to automatically create the collection if it doesn't exist.\n\t * @returns {Promise} A Promise that resolves to a Collection object.\n\t * @throws {lowstorageError} If there's an error.\n\t */\n\tasync collection(colName, schema, autoCreate = true) {\n\t\ttry {\n\t\t\t_hasColName(colName);\n\t\t\tconst colPath = `${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`;\n\t\t\tconst exists = await this._s3.fileExists(colPath);\n\t\t\tif (!exists) {\n\t\t\t\tif (!autoCreate) {\n\t\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Collection ${colName} does not exist`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND);\n\t\t\t\t}\n\t\t\t\t// TODO: check if this is the right way to handle empty data\n\t\t\t\tawait this._s3.put(colPath, EMPTY_DATA);\n\t\t\t}\n\t\t\tconst colSchema = schema || this._schemas.get(colName) || undefined;\n\t\t\treturn new Collection(colName, colSchema, this._s3, this._dirPrefix);\n\t\t} catch (error) {\n\t\t\t// check if error message contains \"unknown type\" and if so, throw a schema validation error\n\t\t\tif (error.message.includes('unknown type')) {\n\t\t\t\tthrow new SchemaValidationError(\n\t\t\t\t\t`${MODULE_NAME}: Schema input is invalid: ${error.message}`,\n\t\t\t\t\tlowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND);\n\t\t}\n\t}\n\n\t/**\n\t * Get the S3 instance associated with the lowstorage instance.\n\t * @returns {S3} The S3 instance. Use this to perform S3 operations. Check for ultralight-s3 for more details.\n\t */\n\ts3 = () => {\n\t\treturn this._s3;\n\t};\n}\n\n/**\n * Collection class for managing documents in a collection.\n * @class\n * @example\n * const storage = new lowstorage({\n * \taccessKeyId: 'YOUR_ACCESS_KEY',\n * \tsecretAccessKey: 'YOUR_SECRET_KEY',\n * \tendpoint: 'YOUR_ENDPOINT',\n * \tbucketName: 'YOUR_BUCKET_NAME',\n * \tregion: 'YOUR_REGION',\n * });\n *\n * // Create a collection\n * const userCol = await storage.collection('users');\n *\n * // Insert a document\n * await userCol.insert({\n * \tname: 'Kevin',\n * \tgender: 'whatever',\n * \tposts: [],\n * });\n *\n * // Show all users\n * const allUsers = await userCol.find({});\n *\n * // Find users with pagination (e.g., page 2, 10 users per page)\n * const secondPageUsers = await userCol.find({}, { skip: 10, limit: 10 });\n *\n * // Find user by ID and update name\n * await userCol.update({ _id: id }, { name: 'Carlos' });\n */\nclass Collection {\n\t/**\n\t * Create a new Collection instance.\n\t * @param {string} colName - The name of the collection.\n\t * @param {Object} [schema] - The Avro schema for the collection.\n\t * @param {S3} s3 - The S3 instance.\n\t * @param {string} [dirPrefix=PROJECT_DIR_PREFIX] - The directory prefix for the collection.\n\t * @param {boolean} [safeWrite=false] - Whether to perform a safe write operation. It doublechecks the ETag of the object before writing. False = overwrites the object, True = only writes if the object has not been modified.\n\t * @param {Number} [chunkSize=CHUNG_5MB] - The chunk size for reading and writing data. AWS S3 has a maximum of 5MB per object.\n\t * @returns {Collection} A new Collection instance.\n\t */\n\tconstructor(colName, schema, s3, dirPrefix = PROJECT_DIR_PREFIX, safeWrite = false, chunkSize = CHUNG_5MB) {\n\t\tthis._colName = colName;\n\n\t\tthis._s3 = s3;\n\t\tthis._schema = ensureIdFieldInSchema(schema);\n\t\tthis._dirPrefix = dirPrefix;\n\t\tthis._safeWrite = safeWrite;\n\t\tthis._chunkSize = chunkSize || CHUNG_5MB;\n\t\tthis._key = `${this._dirPrefix}${DEFAULT_DELIMITER}${this._colName}${COL_SUFFIX}`;\n\t\tthis._s3.setMaxRequestSizeInBytes(this._chunkSize);\n\t\tthis._avro = avro;\n\t\tthis._lastETag = '';\n\t\tthis._dataCache = [];\n\t\tthis._avroType = typeof schema === 'undefined' ? null : this._avro.parse(schema);\n\t}\n\n\tgetProps = () => ({\n\t\tcolName: this._colName,\n\t\tschema: this._schema,\n\t\ts3: this._s3,\n\t\tavro: this._avro,\n\t\tavroType: this._avroType,\n\t\tdirPrefix: this._dirPrefix,\n\t\tsafeWrite: this._safeWrite,\n\t\tchunkSize: this._chunkSize,\n\t});\n\n\tsetProps = (props) => {\n\t\tthis._colName = props.colName;\n\t\tthis._schema = props.schema;\n\t\tthis._s3 = props.s3;\n\t\tthis._avro = props.avro;\n\t\tthis._avroType = props.avroType;\n\t\tthis._dirPrefix = props.dirPrefix;\n\t\tthis._safeWrite = props.safeWrite;\n\t\tthis._chunkSize = props.chunkSize;\n\t};\n\n\tsetSafeWrite = (safeWrite) => {\n\t\tthis._safeWrite = safeWrite;\n\t};\n\n\tgetSafeWrite = () => {\n\t\treturn this._safeWrite;\n\t};\n\n\tgetAvroSchema = () => {\n\t\treturn this._schema;\n\t};\n\n\tsetAvroSchema = (schema) => {\n\t\tthis._schema = ensureIdFieldInSchema(schema);\n\t\tthis._avroType = typeof schema === 'undefined' ? null : this._avro.parse(schema);\n\t};\n\n\tasync _loadData() {\n\t\ttry {\n\t\t\tif (this._avroType === null || typeof this._avroType === 'undefined') {\n\t\t\t\tthrow new lowstorageError(\n\t\t\t\t\t`${MODULE_NAME}: Missing type definition. Configure before operations `,\n\t\t\t\t\tlowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst { etag, data } = await this._s3.getObjectWithETag(this._key, { 'if-none-match': this._lastETag });\n\t\t\tif (data === null) {\n\t\t\t\treturn this._dataCache;\n\t\t\t}\n\t\t\tthis._lastETag = etag === null ? this._lastETag : etag;\n\t\t\tconst wrapperType = this._avro.parse({ type: 'array', items: this._avroType });\n\t\t\tif (data.length < this._chunkSize) {\n\t\t\t\tthis._dataCache = data.length > 0 ? wrapperType.fromBuffer(Buffer.from(data, 'utf8')) : [];\n\t\t\t\treturn this._dataCache;\n\t\t\t}\n\t\t\tlet offset = this._chunkSize;\n\t\t\tlet bufferArr = [Buffer.from(data, 'utf8')];\n\t\t\tlet repeat = true;\n\t\t\twhile (repeat) {\n\t\t\t\tconst nextDataResponse = await this._s3.getResponse(this._key, false, offset, offset + this._chunkSize);\n\t\t\t\tconst nextDataBody = await nextDataResponse.text();\n\t\t\t\tbufferArr.push(Buffer.from(nextDataBody, 'utf8'));\n\t\t\t\toffset += this._chunkSize;\n\t\t\t\tconst contentLength = nextDataResponse.headers.get('content-length') || nextDataBody.length;\n\t\t\t\tif (contentLength < this._chunkSize) {\n\t\t\t\t\trepeat = false;\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst bufferedData = Buffer.concat(bufferArr);\n\t\t\tthis._dataCache = wrapperType.fromBuffer(bufferedData);\n\t\t\treturn this._dataCache;\n\t\t} catch (error) {\n\t\t\tif (error.toString().indexOf('status 404: Unknown - Not Found') > -1) {\n\t\t\t\tthis._dataCache = [];\n\t\t\t\treturn this._dataCache;\n\t\t\t}\n\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to load data: ${error.message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t}\n\t}\n\n\tasync _saveData(data) {\n\t\ttry {\n\t\t\tif (this._avroType === null || typeof this._avroType === 'undefined') {\n\t\t\t\tthrow new lowstorageError(\n\t\t\t\t\t`${MODULE_NAME}: Missing type definition. Configure before operations `,\n\t\t\t\t\tlowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst wrapperType = this._avro.parse({ type: 'array', items: this._avroType });\n\t\t\tconst dataBuffer = data.length > 0 ? wrapperType.toBuffer(data) : EMPTY_DATA; // TODO: check if this is the right way to handle empty data\n\n\t\t\tif (this._safeWrite && this._lastETag !== '') {\n\t\t\t\tconst currentETag = await this._s3.getEtag(this._key);\n\t\t\t\t// If we have a current ETag, check if it matches our last known ETag\n\t\t\t\tif (currentETag !== null && currentETag !== this._lastETag) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst resp = await this._s3.put(this._key, dataBuffer);\n\t\t\tif (resp.status !== 200) {\n\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to save data`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t}\n\n\t\t\t// Update the cached ETag\n\t\t\tconst newETag = resp.headers.get('etag');\n\t\t\tif (newETag) {\n\t\t\t\tthis._lastETag = this._s3.sanitizeETag(newETag);\n\t\t\t\tthis._dataCache = data;\n\t\t\t}\n\t\t\treturn true;\n\t\t} catch (error) {\n\t\t\tif (error instanceof S3OperationError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.SAVE_DATA_ERROR);\n\t\t}\n\t}\n\n\t/**\n\t * Insert a document into the collection.\n\t * @param {Object|Array} doc - The document to insert.\n\t * @param {Object} [schema=undefined] - The schema for the document.\n\t * @returns {Promise} A Promise that resolves to the array of inserted document(s).\n\t * @throws {lowstorageError} If there's an error.\n\t */\n\tasync insert(doc, schema = undefined) {\n\t\ttry {\n\t\t\tif (doc === undefined || doc === null) {\n\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Document is required for insert`, lowstorage_ERROR_CODES.INSERT_ERROR);\n\t\t\t}\n\t\t\tif (typeof doc !== 'object' && !Array.isArray(doc)) {\n\t\t\t\tthrow new DocumentValidationError(\n\t\t\t\t\t`${MODULE_NAME}: Document must be an object or an array`,\n\t\t\t\t\tlowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst items = !Array.isArray(doc) ? [doc] : doc;\n\n\t\t\tconst schemaWithId = ensureIdFieldInSchema(schema) || this._schema || inferAvroType(items[0]);\n\t\t\tconst avroType = this._avro.parse(schemaWithId);\n\t\t\tif (!avroType) {\n\t\t\t\tthrow new SchemaValidationError(\n\t\t\t\t\t`${MODULE_NAME}: Schema is required - Pass a schema to the insert method`,\n\t\t\t\t\tlowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR,\n\t\t\t\t);\n\t\t\t}\n\t\t\tthis._avroType = avroType;\n\t\t\tconst data = await this._loadData();\n\t\t\tfor (let item of items) {\n\t\t\t\tif (typeof item !== 'object' || item === null) {\n\t\t\t\t\tthrow new DocumentValidationError(\n\t\t\t\t\t\t`${MODULE_NAME}: Invalid input: input must be an object or an array of objects`,\n\t\t\t\t\t\tlowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\titem._id = item._id || (await generateUUID());\n\t\t\t\tconst validBuffer = this._avroType.isValid(item, {\n\t\t\t\t\terrorHook: errorValidationFn,\n\t\t\t\t\tnoUndeclaredFields: true,\n\t\t\t\t});\n\t\t\t\tif (validBuffer === true) {\n\t\t\t\t\tdata.push(item);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new DocumentValidationError(`${MODULE_NAME}: Invalid document or schema`, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR);\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst success = await this._saveData(data);\n\t\t\tif (!success) {\n\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to insert document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t}\n\t\t\tthis.setAvroSchema(schemaWithId);\n\t\t\treturn items;\n\t\t} catch (error) {\n\t\t\tif (error.message.includes('unknown type')) {\n\t\t\t\tthrow new SchemaValidationError(\n\t\t\t\t\t`${MODULE_NAME}: Schema input is invalid: ${error.message}`,\n\t\t\t\t\tlowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (error instanceof lowstorageError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME} Insert operation failed: ${error.message}`, lowstorage_ERROR_CODES.INSERT_ERROR);\n\t\t}\n\t}\n\n\t/**\n\t * Find documents in the collection.\n\t * @param {Object} [query={}] - The query to filter documents.\n\t * @param {Object} [options={}] - The options for pagination.\n\t * @param {number} [options.skip=0] - The number of documents to skip. Default is 0.\n\t * @param {number} [options.limit=undefined] - The maximum number of documents to return. Default is undefined, which means no limit.\n\t * @returns {Promise} A Promise that resolves to an array of matching documents.\n\t * @throws {lowstorageError} If there's an error.\n\t */\n\tasync find(query = {}, options = {}) {\n\t\ttry {\n\t\t\tif (query === undefined || query === null) {\n\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Query is required for update`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n\t\t\t}\n\t\t\tconst data = await this._loadData();\n\t\t\tconst start = parseInt(options.skip, 10) || 0;\n\t\t\tconst end = parseInt(options.limit, 10) ? start + parseInt(options.limit, 10) : undefined;\n\t\t\tconst filteredData = data.filter((doc) => matchesQuery(doc, query)).slice(start, end);\n\t\t\treturn filteredData;\n\t\t} catch (error) {\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Find operation failed: ${error.message}`, lowstorage_ERROR_CODES.FIND_ERROR);\n\t\t}\n\t}\n\n\t/**\n\t * Find the first document in the collection that matches the query.\n\t * @param {Object} [query={}] - The query to filter documents.\n\t * @returns {Promise} A Promise that resolves to the first matching document or null if no match is found.\n\t * @throws {lowstorageError} If there's an error.\n\t */\n\tasync findOne(query = {}) {\n\t\ttry {\n\t\t\tif (query === null) {\n\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Query cannot be null`, lowstorage_ERROR_CODES.INVALID_ARGUMENT);\n\t\t\t}\n\t\t\tconst result = await this.find(query, { limit: 1 });\n\t\t\treturn result[0] || null;\n\t\t} catch (error) {\n\t\t\tif (error instanceof lowstorageError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: FindOne operation failed: ${error.message}`, lowstorage_ERROR_CODES.FIND_ONE_ERROR);\n\t\t}\n\t}\n\n\t/**\n\t * Update a single document in the collection that matches the query.\n\t * @param {Object} [query={}] - The query to filter the document to update.\n\t * @param {Object} [update={}] - The update operations to apply to the matching document.\n\t * @returns {Promise} A Promise that resolves to number of documents updated.\n\t * @throws {lowstorageError} If the updateOne operation fails.\n\t * @throws {SchemaValidationError} If the schema is not defined for the collection.\n\t * @throws {DocumentValidationError} If the updated document is invalid.\n\t * @throws {S3OperationError} If the S3 operation fails.\n\t */\n\tasync update(query = {}, update = {}, options = {}) {\n\t\ttry {\n\t\t\tif (query === undefined || query === null || update === undefined || update === null) {\n\t\t\t\tthrow new lowstorageError(\n\t\t\t\t\t`${MODULE_NAME}: Query and update values are required for update`,\n\t\t\t\t\tlowstorage_ERROR_CODES.MISSING_ARGUMENT,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (!this._avroType) {\n\t\t\t\tthrow new SchemaValidationError(\n\t\t\t\t\t`${MODULE_NAME}: Schema is not defined for this collection`,\n\t\t\t\t\tlowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst data = await this._loadData();\n\t\t\tif (data.length === 0) return 0;\n\t\t\tlet updatedCount = 0;\n\t\t\tfor (let i = 0; i < data.length; i++) {\n\t\t\t\tif (matchesQuery(data[i], query)) {\n\t\t\t\t\tconst updatedDoc = { ...data[i], ...update };\n\t\t\t\t\tconst isValid = this._avroType.isValid(updatedDoc, {\n\t\t\t\t\t\terrorHook: errorValidationFn,\n\t\t\t\t\t\tnoUndeclaredFields: true,\n\t\t\t\t\t});\n\t\t\t\t\tif (isValid === true) {\n\t\t\t\t\t\tdata[i] = updatedDoc;\n\t\t\t\t\t\tupdatedCount++;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow new DocumentValidationError(\n\t\t\t\t\t\t\t`${MODULE_NAME}: Invalid document or schema`,\n\t\t\t\t\t\t\tlowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (updatedCount > 0) {\n\t\t\t\tconst success = await this._saveData(data);\n\t\t\t\tif (!success) {\n\t\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t\t}\n\t\t\t} else if (options.upsert) {\n\t\t\t\t// If upsert is true, we need to insert the document\n\t\t\t\tconst success = await this.insert(update);\n\t\t\t\tif (!success) {\n\t\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t\t}\n\t\t\t\tupdatedCount = 1;\n\t\t\t}\n\t\t\treturn updatedCount;\n\t\t} catch (error) {\n\t\t\tif (error instanceof S3OperationError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Update operation failed: ${error.message}`, lowstorage_ERROR_CODES.UPDATE_ERROR);\n\t\t}\n\t}\n\n\t/**\n\t * Update a single document in the collection that matches the query.\n\t * @param {Object} [query={}] - The query to filter the document to update.\n\t * @param {Object} [update={}] - The update operations to apply to the matching document.\n\t * @returns {Promise} A Promise that resolves to 1 if a document was updated, 0 otherwise.\n\t * @throws {lowstorageError} If the updateOne operation fails.\n\t * @throws {SchemaValidationError} If the schema is not defined for the collection.\n\t * @throws {DocumentValidationError} If the updated document is invalid.\n\t * @throws {S3OperationError} If the S3 operation fails.\n\t */\n\tasync updateOne(query = {}, update = {}, options = {}) {\n\t\ttry {\n\t\t\tif (query === undefined || query === null || update === undefined || update === null) {\n\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Query is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n\t\t\t}\n\t\t\tif (!this._avroType) {\n\t\t\t\tthrow new SchemaValidationError(\n\t\t\t\t\t`${MODULE_NAME}: Schema is not defined for this collection`,\n\t\t\t\t\tlowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst data = await this._loadData();\n\t\t\tif (data.length === 0) return 0;\n\t\t\tconst docIndex = data.findIndex((doc) => matchesQuery(doc, query));\n\n\t\t\tif (docIndex !== -1) {\n\t\t\t\tconst updatedDoc = { ...data[docIndex], ...update };\n\t\t\t\tconst isValid = this._avroType.isValid(updatedDoc, {\n\t\t\t\t\terrorHook: errorValidationFn,\n\t\t\t\t\tnoUndeclaredFields: true,\n\t\t\t\t});\n\t\t\t\tif (isValid === true) {\n\t\t\t\t\tdata[docIndex] = updatedDoc;\n\t\t\t\t\tconst success = await this._saveData(data);\n\t\t\t\t\tif (!success) {\n\t\t\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t\t\t}\n\t\t\t\t\treturn 1;\n\t\t\t\t} else {\n\t\t\t\t\tthrow new DocumentValidationError(`${MODULE_NAME}: Invalid document or schema`, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (options.upsert) {\n\t\t\t\t// If upsert is true, we need to insert the document\n\t\t\t\tconst success = await this.insert(update);\n\t\t\t\tif (!success) {\n\t\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t\t}\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t\treturn 0;\n\t\t} catch (error) {\n\t\t\tif (error instanceof lowstorageError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: UpdateOne operation failed: ${error.message}`, lowstorage_ERROR_CODES.UPDATE_ONE_ERROR);\n\t\t}\n\t}\n\n\t/**\n\t * Delete documents from the collection.\n\t * @param {Object} [query={}] - The query to filter documents to delete.\n\t * @returns {Promise} A Promise that resolves to the number of documents deleted.\n\t * @throws {lowstorageError} If the delete operation fails.\n\t * @throws {S3OperationError} If the S3 operation fails.\n\t */\n\tasync delete(query = {}) {\n\t\ttry {\n\t\t\tif (query === undefined || query === null) {\n\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Query is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n\t\t\t}\n\t\t\tconst data = await this._loadData();\n\t\t\tif (data.length === 0) return 0;\n\t\t\tconst initialLength = data.length;\n\n\t\t\tconst newData = data.filter((doc) => !matchesQuery(doc, query));\n\t\t\tconst success = await this._saveData(newData);\n\t\t\tif (!success) {\n\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to delete document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t}\n\t\t\treturn initialLength - newData.length;\n\t\t} catch (error) {\n\t\t\tif (error instanceof S3OperationError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Delete operation failed: ${error.message}`, lowstorage_ERROR_CODES.DELETE_ERROR);\n\t\t}\n\t}\n\n\t/**\n\t * Delete all documents from the collection.\n\t * @returns {Promise} A Promise that resolves to the number of documents deleted.\n\t * @throws {lowstorageError} If the delete operation fails.\n\t * @throws {S3OperationError} If the S3 operation fails.\n\t */\n\tasync deleteAll() {\n\t\ttry {\n\t\t\tconst data = await this._loadData();\n\t\t\tconst initialLength = data.length;\n\t\t\tconst success = await this._saveData([]);\n\t\t\tif (!success) {\n\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to delete document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t}\n\t\t\treturn initialLength;\n\t\t} catch (error) {\n\t\t\tif (error instanceof S3OperationError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Delete operation failed: ${error.message}`, lowstorage_ERROR_CODES.DELETE_ERROR);\n\t\t}\n\t}\n\n\t/**\n\t * Count the number of documents in the collection.\n\t * @param {Object} [query={}] - The query to filter documents.\n\t * @returns {Promise} A Promise that resolves to the number of documents in the collection.\n\t * @throws {lowstorageError} If the count operation fails.\n\t */\n\tasync count(query = {}) {\n\t\ttry {\n\t\t\tconst data = await this.find(query);\n\t\t\treturn data.length;\n\t\t} catch (error) {\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Count operation failed: ${error.message}`, lowstorage_ERROR_CODES.COUNT_ERROR);\n\t\t}\n\t}\n\n\tasync renameCollection(newColName, newSchema = this._schema) {\n\t\ttry {\n\t\t\t_hasColName(newColName);\n\t\t\tconst exists = await this._s3.fileExists(`${this._dirPrefix}${DEFAULT_DELIMITER}${newColName}${COL_SUFFIX}`);\n\t\t\tif (!!exists) {\n\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Collection ${newColName} already exists`, lowstorage_ERROR_CODES.COLLECTION_EXISTS);\n\t\t\t}\n\t\t\tconst schema = newSchema || this.getAvroSchema();\n\t\t\tconst data = await this._loadData();\n\t\t\tconst createNew = new Collection(newColName, schema, this._s3, this._dirPrefix, this._safeWrite, this._chunkSize);\n\t\t\tawait createNew._saveData(data);\n\t\t\tawait this._s3.delete(`${this._dirPrefix}${DEFAULT_DELIMITER}${this._colName}${COL_SUFFIX}`);\n\t\t\treturn createNew;\n\t\t} catch (error) {\n\t\t\tif (error instanceof lowstorageError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(\n\t\t\t\t`${MODULE_NAME}: Rename collection failed: ${error.message}`,\n\t\t\t\tlowstorage_ERROR_CODES.RENAME_COLLECTION_ERROR,\n\t\t\t);\n\t\t}\n\t}\n}\n\n// export default lowstorage;\nexport { lowstorage, lowstorageError, lowstorage_ERROR_CODES };\n", "'use strict';\n\nconst lowstorage_ERROR_CODES = {\n\tMISSING_ARGUMENT: 'MISSING_ARGUMENT',\n\tCOLLECTION_EXISTS: 'COLLECTION_EXISTS',\n\tCREATE_COLLECTION_ERROR: 'CREATE_COLLECTION_ERROR',\n\tRENAME_COLLECTION_ERROR: 'RENAME_COLLECTION_ERROR',\n\tREMOVE_COLLECTION_ERROR: 'REMOVE_COLLECTION_ERROR',\n\tUPDATE_COLLECTION_SCHEMA_ERROR: 'UPDATE_COLLECTION_SCHEMA_ERROR',\n\tCOLLECTION_NOT_FOUND: 'COLLECTION_NOT_FOUND',\n\tSCHEMA_VALIDATION_ERROR: 'SCHEMA_VALIDATION_ERROR',\n\tDOCUMENT_VALIDATION_ERROR: 'DOCUMENT_VALIDATION_ERROR',\n\tS3_OPERATION_ERROR: 'S3_OPERATION_ERROR',\n\tFIND_ERROR: 'FIND_ERROR',\n\tFIND_ONE_ERROR: 'FIND_ONE_ERROR',\n\tSAVE_DATA_ERROR: 'SAVE_DATA_ERROR',\n\tINSERT_ERROR: 'INSERT_ERROR',\n\tUPDATE_ERROR: 'UPDATE_ERROR',\n\tUPDATE_ONE_ERROR: 'UPDATE_ONE_ERROR',\n\tDELETE_ERROR: 'DELETE_ERROR',\n\tCOUNT_ERROR: 'COUNT_ERROR',\n\tUNKNOWN_ERROR: 'UNKNOWN_ERROR',\n};\nclass lowstorageError extends Error {\n\tconstructor(message, code = lowstorage_ERROR_CODES.UNKNOWN_ERROR) {\n\t\tsuper(`lowstorageError: ${message} :: code: ${code}`);\n\t\tthis.name = this.constructor.name;\n\t\tthis.code = code;\n\t\tError.captureStackTrace(this, this.constructor);\n\t}\n}\n\nclass CollectionNotFoundError extends lowstorageError {\n\tconstructor(collectionName) {\n\t\tsuper(`Collection ${collectionName} not found`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND);\n\t}\n}\n\nclass SchemaValidationError extends lowstorageError {\n\tconstructor(message) {\n\t\tsuper(message, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR);\n\t}\n}\n\nclass DocumentValidationError extends lowstorageError {\n\tconstructor(message) {\n\t\tsuper(message, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR);\n\t}\n}\n\nclass S3OperationError extends lowstorageError {\n\tconstructor(message, operation) {\n\t\tsuper(`S3 ${operation} operation failed: ${message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t}\n}\n\nexport {\n\tlowstorage_ERROR_CODES,\n\tlowstorageError,\n\tCollectionNotFoundError,\n\tSchemaValidationError,\n\tDocumentValidationError,\n\tS3OperationError,\n};\n", "'use strict';\n\nimport { randomUUID } from 'node:crypto';\n\nconst matchesQuery = (document, query) => {\n\treturn Object.keys(query).every((key) => document[key] === query[key]);\n};\n\nconst generateUUID = async () => {\n\tif (typeof randomUUID !== 'undefined' && typeof randomUUID === 'function') {\n\t\treturn randomUUID();\n\t}\n\tif (typeof crypto !== 'undefined' && typeof crypto === 'object' && typeof crypto.randomUUID === 'function') {\n\t\treturn crypto.randomUUID();\n\t}\n\treturn 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n\t\tvar r = (Math.random() * 16) | 0,\n\t\t\tv = c === 'x' ? r : (r & 0x3) | 0x8;\n\t\treturn v.toString(16);\n\t});\n};\n\nconst _getAvroType = (value, name = 'SubAutoGenerated') => {\n\tswitch (typeof value) {\n\t\tcase 'string':\n\t\t\tif (_isUUID(value)) {\n\t\t\t\treturn {\n\t\t\t\t\ttype: 'string',\n\t\t\t\t\tname: '_id',\n\t\t\t\t\tsize: 16,\n\t\t\t\t\tlogicalType: 'UUID',\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn 'string';\n\t\tcase 'number':\n\t\t\treturn Number.isInteger(value) ? 'int' : 'float';\n\t\tcase 'boolean':\n\t\t\treturn 'boolean';\n\t\tcase 'object':\n\t\t\tif (value === null) return 'null';\n\t\t\tif (Array.isArray(value)) return { type: 'array', items: _getAvroType(value[0]) };\n\t\t\treturn inferAvroType(value, name);\n\t\tdefault:\n\t\t\treturn 'string'; // Default to string for unknown types\n\t}\n};\n\nconst ensureIdFieldInSchema = (schema) => {\n\tconst idField = {\n\t\tname: '_id',\n\t\ttype: 'string',\n\t\tsize: 16,\n\t\tlogicalType: 'UUID',\n\t};\n\tif (typeof schema === 'undefined' || schema === null) {\n\t\treturn schema;\n\t}\n\n\tif (schema.type === 'record') {\n\t\tconst hasIdField = schema.fields.some((field) => field.name === '_id');\n\t\tif (!hasIdField) {\n\t\t\tschema.fields.unshift(idField);\n\t\t}\n\t} else if (schema.type === 'array' && schema.items.type === 'record') {\n\t\tconst hasIdField = schema.items.fields.some((field) => field.name === '_id');\n\t\tif (!hasIdField) {\n\t\t\tschema.items.fields.unshift(idField);\n\t\t}\n\t}\n\treturn schema;\n};\n\nconst inferAvroType = (data, typeName = 'AutoGenerated') => {\n\tif (Array.isArray(data)) {\n\t\tdata = data[0];\n\t}\n\tconst fields = Object.entries(data).map(([name, value]) => {\n\t\treturn { name, type: _getAvroType(value, `${typeName}.${name}`) };\n\t});\n\n\tconst schema = {\n\t\ttype: 'record',\n\t\tname: typeName,\n\t\tfields: fields,\n\t};\n\n\t// Ensure the _id field is present in the schema\n\treturn ensureIdFieldInSchema(schema);\n};\n\nconst _isUUID = (str) => {\n\tconst uuidV4Regex = /^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i;\n\treturn uuidV4Regex.test(str);\n};\n\nexport { matchesQuery, generateUUID, inferAvroType, ensureIdFieldInSchema };\n"], - "mappings": "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", + "sourcesContent": ["'use strict';\n\n// Constants\nconst AWS_ALGORITHM = 'AWS4-HMAC-SHA256';\nconst AWS_REQUEST_TYPE = 'aws4_request';\nconst S3_SERVICE = 's3';\nconst LIST_TYPE = '2';\nconst UNSIGNED_PAYLOAD = 'UNSIGNED-PAYLOAD';\nconst DEFAULT_STREAM_CONTENT_TYPE = 'application/octet-stream';\nconst XML_CONTENT_TYPE = 'application/xml';\nconst JSON_CONTENT_TYPE = 'application/json';\n// List of keys that might contain sensitive information\nconst SENSITIVE_KEYS_REDACTED = ['accessKeyId', 'secretAccessKey', 'sessionToken', 'password'];\nconst MIN_MAX_REQUEST_SIZE_IN_BYTES = 5 * 1024 * 1024;\n\n// Headers\nconst HEADER_AMZ_CONTENT_SHA256 = 'x-amz-content-sha256';\nconst HEADER_AMZ_DATE = 'x-amz-date';\nconst HEADER_HOST = 'host';\nconst HEADER_AUTHORIZATION = 'Authorization';\nconst HEADER_CONTENT_TYPE = 'Content-Type';\nconst HEADER_CONTENT_LENGTH = 'Content-Length';\nconst HEADER_ETAG = 'etag';\nconst HEADER_LAST_MODIFIED = 'last-modified';\n\n// Error messages\nconst ERROR_PREFIX = 'ultralight-s3 Module: ';\nconst ERROR_ACCESS_KEY_REQUIRED = `${ERROR_PREFIX}accessKeyId must be a non-empty string`;\nconst ERROR_SECRET_KEY_REQUIRED = `${ERROR_PREFIX}secretAccessKey must be a non-empty string`;\nconst ERROR_ENDPOINT_REQUIRED = `${ERROR_PREFIX}endpoint must be a non-empty string`;\nconst ERROR_BUCKET_NAME_REQUIRED = `${ERROR_PREFIX}bucketName must be a non-empty string`;\nconst ERROR_KEY_REQUIRED = `${ERROR_PREFIX}key must be a non-empty string`;\nconst ERROR_UPLOAD_ID_REQUIRED = `${ERROR_PREFIX}uploadId must be a non-empty string`;\nconst ERROR_PARTS_REQUIRED = `${ERROR_PREFIX}parts must be a non-empty array`;\nconst ERROR_INVALID_PART = `${ERROR_PREFIX}Each part must have a partNumber (number) and ETag (string)`;\nconst ERROR_DATA_BUFFER_REQUIRED = `${ERROR_PREFIX}data must be a Buffer or string`;\n// const ERROR_PATH_REQUIRED = `${ERROR_PREFIX}path must be a string`;\nconst ERROR_PREFIX_TYPE = `${ERROR_PREFIX}prefix must be a string`;\nconst ERROR_MAX_KEYS_TYPE = `${ERROR_PREFIX}maxKeys must be a positive integer`;\nconst ERROR_DELIMITER_REQUIRED = `${ERROR_PREFIX}delimiter must be a string`;\n\n// const STATUS_CODES: Record = {\n// 200: 'OK',\n// 204: 'No Content',\n// 205: 'Reset Content',\n// 206: 'Partial Content',\n// 301: 'Moved Permanently',\n// 302: 'Found',\n// 400: 'Bad Request',\n// 401: 'Unauthorized',\n// 403: 'Forbidden',\n// 404: 'Not Found',\n// 418: \"I'm a Teapot\",\n// 428: 'Precondition Required',\n// 429: 'Too Many Requests',\n// 500: 'Internal Server Error',\n// 501: 'Not Implemented',\n// };\n\ninterface S3Config {\n accessKeyId: string;\n secretAccessKey: string;\n endpoint: string;\n bucketName: string;\n region?: string;\n maxRequestSizeInBytes?: number;\n requestAbortTimeout?: number;\n logger?: Logger;\n}\n\ndeclare global {\n interface Crypto {\n createHmac: (\n algorithm: string,\n key: string | Buffer,\n ) => {\n update: (data: string | Buffer) => void;\n digest: (encoding?: 'hex' | 'base64' | 'latin1') => string;\n };\n createHash: (algorithm: string) => {\n update: (data: string | Buffer) => void;\n digest: (encoding?: 'hex' | 'base64' | 'latin1') => string;\n };\n }\n}\n\ninterface Logger {\n info: (message: string, ...args: any[]) => void;\n warn: (message: string, ...args: any[]) => void;\n error: (message: string, ...args: any[]) => void;\n}\n\ninterface UploadPart {\n partNumber: number;\n ETag: string;\n}\n\ninterface CompleteMultipartUploadResult {\n Location: string;\n Bucket: string;\n Key: string;\n ETag: string;\n}\n\ntype HttpMethod = 'POST' | 'GET' | 'HEAD' | 'PUT' | 'DELETE';\n\n// false - Not found (404)\n// true - Found (200)\n// null - ETag mismatch (412)\ntype ExistResponseCode = false | true | null;\n\nlet _createHmac = crypto.createHmac || (await import('node:crypto')).createHmac;\nlet _createHash = crypto.createHash || (await import('node:crypto')).createHash;\n\nif (typeof _createHmac === 'undefined' && typeof _createHash === 'undefined') {\n console.error(\n 'ultralight-S3 Module: Crypto functions are not available, please report the issue with necessary description: https://github.com/sentienhq/ultralight-s3/issues',\n );\n}\n\nconst expectArray: { [key: string]: boolean } = {\n contents: true,\n};\n\nconst encodeAsHex = (c: string): string => `%${c.charCodeAt(0).toString(16).toUpperCase()}`;\n\nconst uriEscape = (uriStr: string): string => {\n return encodeURIComponent(uriStr).replace(/[!'()*]/g, encodeAsHex);\n};\n\nconst uriResourceEscape = (string: string): string => {\n return uriEscape(string).replace(/%2F/g, '/');\n};\n\n/**\n * S3 class for interacting with S3-compatible object storage services.\n * This class provides methods for common S3 operations such as uploading, downloading,\n * and deleting objects, as well as multipart uploads.\n *\n * @class\n * @example\n * const s3 = new S3({\n * accessKeyId: 'your-access-key',\n * secretAccessKey: 'your-secret-key',\n * endpoint: 'https://your-s3-endpoint.com',\n * bucketName: 'your-bucket-name',\n * region: 'us-east-1' // by default is auto\n * });\n *\n * // Upload a file\n * await s3.put('example.txt', 'Hello, World!');\n *\n * // Download a file\n * const content = await s3.get('example.txt');\n *\n * // Delete a file\n * await s3.delete('example.txt');\n */\nclass S3 {\n /**\n * Creates an instance of the S3 class.\n *\n * @constructor\n * @param {Object} config - Configuration options for the S3 instance.\n * @param {string} config.accessKeyId - The access key ID for authentication.\n * @param {string} config.secretAccessKey - The secret access key for authentication.\n * @param {string} config.endpoint - The endpoint URL of the S3-compatible service.\n * @param {string} [config.bucketName=''] - The name of the bucket to operate on.\n * @param {string} [config.region='auto'] - The region of the S3 service.\n * @param {number} [config.maxRequestSizeInBytes=5242880] - The maximum size of a single request in bytes (minimum for AWS S3 is 5MB).\n * @param {number} [config.requestAbortTimeout=undefined] - The timeout in milliseconds after which a request should be aborted (careful on streamed requests).\n * @param {Object} [config.logger=null] - A logger object with methods like info, warn, error.\n * @throws {TypeError} Will throw an error if required parameters are missing or of incorrect type.\n */\n private accessKeyId: string;\n private secretAccessKey: string;\n private endpoint: string;\n private bucketName: string;\n private region: string;\n private maxRequestSizeInBytes: number;\n private requestAbortTimeout?: number;\n private logger?: Logger;\n\n constructor({\n accessKeyId,\n secretAccessKey,\n endpoint,\n bucketName,\n region = 'auto',\n maxRequestSizeInBytes = MIN_MAX_REQUEST_SIZE_IN_BYTES,\n requestAbortTimeout = undefined,\n logger = undefined,\n }: S3Config) {\n this._validateConstructorParams(accessKeyId, secretAccessKey, endpoint, bucketName);\n this.accessKeyId = accessKeyId;\n this.secretAccessKey = secretAccessKey;\n this.endpoint = endpoint;\n this.bucketName = bucketName;\n this.region = region;\n this.maxRequestSizeInBytes = maxRequestSizeInBytes;\n this.requestAbortTimeout = requestAbortTimeout;\n this.logger = logger;\n }\n\n private _validateConstructorParams(\n accessKeyId: string,\n secretAccessKey: string,\n endpoint: string,\n bucketName: string,\n ): void {\n if (typeof accessKeyId !== 'string' || accessKeyId.trim().length === 0)\n throw new TypeError(ERROR_ACCESS_KEY_REQUIRED);\n if (typeof secretAccessKey !== 'string' || secretAccessKey.trim().length === 0)\n throw new TypeError(ERROR_SECRET_KEY_REQUIRED);\n if (typeof endpoint !== 'string' || endpoint.trim().length === 0) throw new TypeError(ERROR_ENDPOINT_REQUIRED);\n if (typeof bucketName !== 'string' || bucketName.trim().length === 0)\n throw new TypeError(ERROR_BUCKET_NAME_REQUIRED);\n }\n\n private _checkMethodHeadnGet(method: string): void {\n if (method !== 'GET' && method !== 'HEAD') {\n this._log('error', `${ERROR_PREFIX}method must be either GET or HEAD`);\n throw new Error('method must be either GET or HEAD');\n }\n }\n\n private _checkKey(key: string): void {\n if (typeof key !== 'string' || key.trim().length === 0) {\n this._log('error', ERROR_KEY_REQUIRED);\n throw new TypeError(ERROR_KEY_REQUIRED);\n }\n }\n\n private _checkDelimiter(delimiter: string): void {\n if (typeof delimiter !== 'string' || delimiter.trim().length === 0) {\n this._log('error', ERROR_DELIMITER_REQUIRED);\n throw new TypeError(ERROR_DELIMITER_REQUIRED);\n }\n }\n\n private _checkPrefix(prefix: string): void {\n if (typeof prefix !== 'string') {\n this._log('error', ERROR_PREFIX_TYPE);\n throw new TypeError(ERROR_PREFIX_TYPE);\n }\n }\n\n private _checkMaxKeys(maxKeys: number): void {\n if (typeof maxKeys !== 'number' || maxKeys <= 0) {\n this._log('error', ERROR_MAX_KEYS_TYPE);\n throw new TypeError(ERROR_MAX_KEYS_TYPE);\n }\n }\n\n private _checkOpts(opts: Record): void {\n if (typeof opts !== 'object') {\n this._log('error', `${ERROR_PREFIX}opts must be an object`);\n throw new TypeError(`${ERROR_PREFIX}opts must be an object`);\n }\n }\n\n /**\n * Internal method to log messages with sanitized sensitive information.\n * @param {string} level - The log level (e.g., 'info', 'warn', 'error').\n * @param {string} message - The message to log.\n * @param {Object} [additionalData={}] - Additional data to include in the log.\n * @private\n */\n private _log(\n level: 'info' | 'warn' | 'error',\n message: string,\n additionalData: Record | string = {},\n ): void {\n if (this.logger && typeof this.logger[level] === 'function') {\n // Function to recursively sanitize an object\n const sanitize = (obj: any): any => {\n if (typeof obj !== 'object' || obj === null) {\n return obj;\n }\n return Object.keys(obj).reduce(\n (acc: any, key) => {\n if (SENSITIVE_KEYS_REDACTED.includes(key.toLowerCase())) {\n acc[key] = '[REDACTED]';\n } else if (typeof obj[key] === 'object' && obj[key] !== null) {\n acc[key] = sanitize(obj[key]);\n } else {\n acc[key] = obj[key];\n }\n return acc;\n },\n Array.isArray(obj) ? [] : {},\n );\n };\n\n // Sanitize the additional data\n const sanitizedData = sanitize(additionalData);\n // Prepare the log entry\n const logEntry = {\n timestamp: new Date().toISOString(),\n level,\n message,\n ...sanitizedData,\n // Include some general context, but sanitize sensitive parts\n context: sanitize({\n bucketName: this.bucketName,\n region: this.region,\n endpoint: this.endpoint,\n // Only include the first few characters of the access key, if it exists\n accessKeyId: this.accessKeyId ? `${this.accessKeyId.substring(0, 4)}...` : undefined,\n }),\n };\n\n // Log the sanitized entry\n this.logger[level](logEntry);\n }\n }\n\n getBucketName = () => this.bucketName;\n setBucketName = (bucketName: string) => {\n this.bucketName = bucketName;\n };\n getRegion = () => this.region;\n setRegion = (region: string) => {\n this.region = region;\n };\n getEndpoint = () => this.endpoint;\n setEndpoint = (endpoint: string) => {\n this.endpoint = endpoint;\n };\n getMaxRequestSizeInBytes = () => this.maxRequestSizeInBytes;\n setMaxRequestSizeInBytes = (maxRequestSizeInBytes: number) => {\n this.maxRequestSizeInBytes = maxRequestSizeInBytes;\n };\n sanitizeETag = (etag: string): string => sanitizeETag(etag);\n\n getProps = () => ({\n accessKeyId: this.accessKeyId,\n secretAccessKey: this.secretAccessKey,\n region: this.region,\n bucket: this.bucketName,\n endpoint: this.endpoint,\n maxRequestSizeInBytes: this.maxRequestSizeInBytes,\n requestAbortTimeout: this.requestAbortTimeout,\n logger: this.logger,\n });\n setProps = (props: S3Config) => {\n this._validateConstructorParams(props.accessKeyId, props.secretAccessKey, props.bucketName, props.endpoint);\n this.accessKeyId = props.accessKeyId;\n this.secretAccessKey = props.secretAccessKey;\n this.region = props.region || 'auto';\n this.bucketName = props.bucketName;\n this.endpoint = props.endpoint;\n this.maxRequestSizeInBytes = props.maxRequestSizeInBytes || MIN_MAX_REQUEST_SIZE_IN_BYTES;\n this.requestAbortTimeout = props.requestAbortTimeout;\n this.logger = props.logger;\n };\n\n /**\n * Get the content length of an object.\n * @param {string} key - The key of the object.\n * @returns {Promise} The content length of the object in bytes.\n * @throws {TypeError} If the key is not a non-empty string.\n */\n async getContentLength(key: string): Promise {\n this._checkKey(key);\n const headers = {\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('HEAD', encodedKey, {}, headers, '');\n const res = await this._sendRequest(url, 'HEAD', signedHeaders);\n const contentLength = res.headers.get(HEADER_CONTENT_LENGTH);\n return contentLength ? parseInt(contentLength, 10) : 0;\n }\n\n /**\n * Check if a bucket exists.\n * @returns {Promise} True if the bucket exists, false otherwise.\n */\n async bucketExists(): Promise {\n const headers = {\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n const { url, headers: signedHeaders } = await this._sign('HEAD', '', {}, headers, '');\n const res = await this._sendRequest(url, 'HEAD', signedHeaders);\n if (res.ok && res.status === 200) {\n return true;\n }\n return false;\n }\n\n // TBD\n // async createBucket(bucketName) {\n // const xmlBody = `\n // \n // \n // ${this.region}\n // \n // `;\n // const headers = {\n // [HEADER_CONTENT_TYPE]: XML_CONTENT_TYPE,\n // [HEADER_CONTENT_LENGTH]: Buffer.byteLength(xmlBody).toString(),\n // [HEADER_AMZ_CONTENT_SHA256]: await _hash(xmlBody),\n // };\n // const encodedKey = encodeURI(bucketName);\n // const { url, headers: signedHeaders } = await this._sign('PUT', encodedKey, {}, headers, '');\n // const res = await this._sendRequest(url, 'PUT', signedHeaders);\n // if (res.ok && res.status === 200) {\n // return true;\n // }\n // return false;\n // }\n\n /**\n * Check if a file exists in the bucket.\n * @param {string} key - The key of the object.\n * @param {Object} [opts={}] - Additional options for the fileExists operation.\n * @returns {Promise} True if the file exists, false otherwise. 0 - Not found (404), 1 - Found (200), 2 - ETag mismatch (412).\n * @throws {TypeError} If the key is not a non-empty string.\n */\n async fileExists(key: string, opts: Record = {}): Promise {\n this._checkKey(key);\n const { filteredOpts, conditionalHeaders } = this._filterIfHeaders(opts);\n const headers = { [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD, ...conditionalHeaders };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('HEAD', encodedKey, filteredOpts, headers, '');\n try {\n const res = await this._sendRequest(url, 'HEAD', signedHeaders, '', [200, 404, 412, 304]);\n if (res.status === 404) {\n return false;\n }\n if (res.status === 412 || res.status === 304) {\n return null;\n }\n if (res.ok && res.status === 200) return true;\n else this._handleErrorResponse(res);\n return false; // should never happen\n } catch (error: unknown) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n this._log('error', `${ERROR_PREFIX}Failed to check if file exists: ${errorMessage}`);\n throw new Error(`${ERROR_PREFIX}Failed to check if file exists: ${errorMessage}`);\n }\n }\n private async _sign(\n method: HttpMethod,\n keyPath: string,\n query: Object,\n headers: Record,\n body: string | Buffer,\n ): Promise<{ url: string; headers: Record }> {\n const datetime = new Date().toISOString().replace(/[:-]|\\.\\d{3}/g, '');\n const url =\n typeof keyPath === 'string' && keyPath.length > 0 ? new URL(keyPath, this.endpoint) : new URL(this.endpoint);\n url.pathname = `/${encodeURI(this.bucketName)}${url.pathname}`;\n headers[HEADER_AMZ_CONTENT_SHA256] = body ? await _hash(body) : UNSIGNED_PAYLOAD;\n headers[HEADER_AMZ_DATE] = datetime;\n headers[HEADER_HOST] = url.host;\n const canonicalHeaders = this._buildCanonicalHeaders(headers);\n const signedHeaders = Object.keys(headers)\n .map(key => key.toLowerCase())\n .sort()\n .join(';');\n\n const canonicalRequest = await this._buildCanonicalRequest(\n method,\n url,\n query,\n canonicalHeaders,\n signedHeaders,\n body,\n );\n const stringToSign = await this._buildStringToSign(datetime, canonicalRequest);\n const signature = await this._calculateSignature(datetime, stringToSign);\n const authorizationHeader = this._buildAuthorizationHeader(datetime, signedHeaders, signature);\n headers[HEADER_AUTHORIZATION] = authorizationHeader;\n return { url: url.toString(), headers };\n }\n\n private _buildCanonicalHeaders(headers: Record): string {\n return Object.entries(headers)\n .map(([key, value]) => `${key.toLowerCase()}:${String(value).trim()}`)\n .sort()\n .join('\\n');\n }\n\n async _buildCanonicalRequest(\n method: HttpMethod,\n url: URL,\n query: Object,\n canonicalHeaders: string,\n signedHeaders: string,\n body: string | Buffer,\n ): Promise {\n return [\n method,\n url.pathname,\n this._buildCanonicalQueryString(query),\n `${canonicalHeaders}\\n`,\n signedHeaders,\n body ? await _hash(body) : UNSIGNED_PAYLOAD,\n ].join('\\n');\n }\n\n async _buildStringToSign(datetime: string, canonicalRequest: string): Promise {\n const credentialScope = [datetime.slice(0, 8), this.region, S3_SERVICE, AWS_REQUEST_TYPE].join('/');\n return [AWS_ALGORITHM, datetime, credentialScope, await _hash(canonicalRequest)].join('\\n');\n }\n\n async _calculateSignature(datetime: string, stringToSign: string): Promise {\n const signingKey = await this._getSignatureKey(datetime.slice(0, 8));\n return _hmac(signingKey, stringToSign, 'hex');\n }\n\n private _buildAuthorizationHeader(datetime: string, signedHeaders: string, signature: string): string {\n const credentialScope = [datetime.slice(0, 8), this.region, S3_SERVICE, AWS_REQUEST_TYPE].join('/');\n return [\n `${AWS_ALGORITHM} Credential=${this.accessKeyId}/${credentialScope}`,\n `SignedHeaders=${signedHeaders}`,\n `Signature=${signature}`,\n ].join(', ');\n }\n\n private _filterIfHeaders(opts: Record): {\n filteredOpts: Record;\n conditionalHeaders: Record;\n } {\n const filteredOpts: Record = {};\n const conditionalHeaders: Record = {};\n const ifHeaders = ['if-match', 'if-none-match', 'if-modified-since', 'if-unmodified-since'];\n\n for (const [key, value] of Object.entries(opts)) {\n if (ifHeaders.includes(key)) {\n conditionalHeaders[key] = value;\n } else {\n filteredOpts[key] = value;\n }\n }\n\n return { filteredOpts, conditionalHeaders };\n }\n /**\n * List objects in the bucket.\n * @param {string} [delimiter='/'] - The delimiter to use for grouping objects in specific path.\n * @param {string} [prefix=''] - The prefix to filter objects in specific path.\n * @param {number} [maxKeys=1000] - The maximum number of keys to return.\n * @param {string} [method='GET'] - The HTTP method to use (GET or HEAD).\n * @param {Object} [opts={}] - Additional options for the list operation.\n * @returns {Promise} The list of objects or object metadata.\n * @throws {TypeError} If any of the parameters are of incorrect type.\n */\n async list(\n delimiter: string = '/',\n prefix: string = '',\n maxKeys: number = 1000,\n method: HttpMethod = 'GET',\n opts: Object = {},\n ): Promise> {\n this._checkDelimiter(delimiter);\n this._checkPrefix(prefix);\n this._checkMaxKeys(maxKeys);\n this._checkMethodHeadnGet(method);\n this._checkOpts(opts);\n this._log('info', `Listing objects in ${prefix}`);\n\n const query = {\n 'list-type': LIST_TYPE,\n 'max-keys': String(maxKeys),\n ...opts,\n } as { [key: string]: any };\n if (prefix.length > 0) {\n query['prefix'] = prefix;\n }\n const headers = {\n [HEADER_CONTENT_TYPE]: JSON_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n const encodedKey = delimiter === '/' ? delimiter : uriEscape(delimiter);\n const { url, headers: signedHeaders } = await this._sign('GET', encodedKey, query, headers, '');\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n const res = await this._sendRequest(urlWithQuery, 'GET', signedHeaders);\n const responseBody = await res.text();\n\n if (method === 'HEAD') {\n const contentLength = res.headers.get(HEADER_CONTENT_LENGTH);\n const lastModified = res.headers.get(HEADER_LAST_MODIFIED);\n const etag = res.headers.get(HEADER_ETAG);\n\n return {\n size: contentLength ? +contentLength : undefined,\n mtime: lastModified ? new Date(lastModified) : undefined,\n ETag: etag || undefined,\n };\n }\n\n const data = _parseXml(responseBody);\n const output = data.listBucketResult || data.error || data;\n return output.contents || output;\n }\n\n /**\n * List multipart uploads in the bucket.\n * @param {string} [delimiter='/'] - The delimiter to use for grouping objects in specific path.\n * @param {string} [prefix=''] - The prefix to filter objects in specific path.\n * @param {string} [method='GET'] - The HTTP method to use (GET or HEAD).\n * @param {Object} [opts={}] - Additional options for the list operation.\n * @returns {Promise} The list of objects or object metadata.\n * @throws {TypeError} If any of the parameters are of incorrect type.\n */\n async listMultiPartUploads(\n delimiter: string = '/',\n prefix: string = '',\n method: HttpMethod = 'GET',\n opts: Object = {},\n ): Promise {\n this._checkDelimiter(delimiter);\n this._checkPrefix(prefix);\n this._checkMethodHeadnGet(method);\n this._checkOpts(opts);\n this._log('info', `Listing multipart uploads in ${prefix}`);\n\n const query = {\n uploads: '',\n ...opts,\n } as Record;\n const headers = {\n [HEADER_CONTENT_TYPE]: JSON_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n const encodedKey = delimiter === '/' ? delimiter : uriEscape(delimiter);\n const { url, headers: signedHeaders } = await this._sign('GET', encodedKey, query, headers, '');\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n const res = await this._sendRequest(urlWithQuery, 'GET', signedHeaders);\n const responseBody = await res.text();\n\n if (method === 'HEAD') {\n return {\n size: +(res.headers.get(HEADER_CONTENT_LENGTH) ?? '0'),\n mtime: new Date(res.headers.get(HEADER_LAST_MODIFIED) ?? ''),\n ETag: res.headers.get(HEADER_ETAG) ?? '',\n };\n }\n\n const data = _parseXml(responseBody);\n const output = data.listMultipartUploadsResult || data.error || data;\n return output.uploads || output;\n }\n\n /**\n * Get an object from the bucket.\n * @param {string} key - The key of the object to get.\n * @param {Object} [opts={}] - Additional options for the get operation.\n * @returns {Promise} The content of the object. If the object does not exist, null will be returned.\n */\n async get(key: string, opts: Record = {}): Promise {\n this._checkKey(key);\n this._log('info', `Getting object ${key}`);\n const { filteredOpts, conditionalHeaders } = this._filterIfHeaders(opts);\n const headers = {\n [HEADER_CONTENT_TYPE]: JSON_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n ...conditionalHeaders,\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('GET', encodedKey, filteredOpts, headers, '');\n const res = await this._sendRequest(url, 'GET', signedHeaders, '', [200, 404, 412, 304]);\n if (res.status === 404 || res.status === 412 || res.status === 304) {\n this._log('error', `Failed to get object. Status: ${res.status}`);\n return null;\n }\n if (!res.ok) {\n this._log('error', `Failed to get object. Status: ${res.status}`);\n throw new Error(`Failed to get object. Status: ${res.status}`);\n }\n return res.text();\n }\n\n /**\n *\n * @param {string} key - The key of the object to get.\n * @param {Object} [opts={}] - Additional options for the get operation.\n * @returns {Promise<{ etag: string|null; data: string|null }>} The content of the object. If the object does not exist, etag and data will be null.\n */\n async getObjectWithETag(\n key: string,\n opts: Record = {},\n ): Promise<{ etag: string | null; data: string | null }> {\n this._checkKey(key);\n this._log('info', `Getting object ${key}`);\n const { filteredOpts, conditionalHeaders } = this._filterIfHeaders(opts);\n const headers = {\n [HEADER_CONTENT_TYPE]: JSON_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n ...conditionalHeaders,\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('GET', encodedKey, filteredOpts, headers, '');\n try {\n const res = await this._sendRequest(url, 'GET', signedHeaders, '', [200, 404, 412, 304]);\n if (res.status === 404 || res.status === 412 || res.status === 304) {\n this._log('error', `Failed to get object. Status: ${res.status}`);\n return { etag: null, data: null };\n }\n if (!res.ok) {\n this._log('error', `Failed to get object. Status: ${res.status}`);\n throw new Error(`Failed to get object. Status: ${res.status}`);\n }\n\n const etag = res.headers.get('etag');\n if (!etag) {\n throw new Error('ETag not found in response headers');\n }\n const data = await res.text();\n return { etag: sanitizeETag(etag), data };\n } catch (error) {\n this._log('error', `Error getting object ${key} with ETag: ${error}`);\n throw error;\n }\n }\n\n /**\n * Get the ETag of an object.\n * @param {string} key - The key of the object to get.\n * @param {Object} [opts={}] - Additional options for the get operation.\n * @returns {Promise} The ETag of the object or null if the object etag does not match.\n */\n async getEtag(key: string, opts: Record = {}): Promise {\n this._checkKey(key);\n this._log('info', `Getting etag object ${key}`);\n const { filteredOpts, conditionalHeaders } = this._filterIfHeaders(opts);\n const headers = {\n [HEADER_CONTENT_TYPE]: JSON_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n ...conditionalHeaders,\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('HEAD', encodedKey, filteredOpts, headers, '');\n\n const res = await this._sendRequest(url, 'HEAD', signedHeaders, '', [200, 412, 304]);\n this._log('info', `Response status: ${(res.status, res.statusText)}`);\n // etag does not match\n if (res.status === 412 || res.status === 304) {\n return null;\n }\n\n const etag = res.headers.get('etag');\n if (!etag) {\n this._log('error', `ETag not found in response headers`);\n throw new Error(`ETag not found in response headers`);\n }\n return sanitizeETag(etag);\n }\n\n /**\n * Get a response of an object from the bucket.\n * @param {string} key - The key of the object to get.\n * @param {boolean} [wholeFile=true] - Whether to get the whole file or a part.\n * @param {number} [rangeFrom=0] - The range from to get if not getting the whole file.\n * @param {number} [rangeTo=this.maxRequestSizeInBytes] - The range to to get if not getting the whole file. Note: rangeTo is inclusive.\n * @param {Object} [opts={}] - Additional options for the get operation.\n * @returns {Promise} Response of the object content. Use readableStream() to get the stream from .body.\n */\n async getResponse(\n key: string,\n wholeFile: boolean = true,\n rangeFrom: number = 0,\n rangeTo: number = this.maxRequestSizeInBytes,\n opts: Record = {},\n ): Promise {\n this._checkKey(key);\n const { filteredOpts, conditionalHeaders } = this._filterIfHeaders({ ...opts });\n const headers = {\n [HEADER_CONTENT_TYPE]: JSON_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n ...(wholeFile ? {} : { range: `bytes=${rangeFrom}-${rangeTo - 1}` }),\n ...conditionalHeaders,\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('GET', encodedKey, filteredOpts, headers, '');\n const urlWithQuery = `${url}?${new URLSearchParams(filteredOpts)}`;\n\n return this._sendRequest(urlWithQuery, 'GET', signedHeaders);\n }\n\n /**\n * Put an object into the bucket.\n * @param {string} key - The key of the object to put. To create a folder, include a trailing slash.\n * @param {Buffer|string} data - The content of the object to put.\n * @returns {Promise} The response from the put operation.\n * @throws {TypeError} If the key is not a non-empty string or data is not a Buffer or string.\n */\n async put(key: string, data: string | Buffer): Promise {\n this._checkKey(key);\n if (!(data instanceof Buffer || typeof data === 'string')) {\n this._log('error', ERROR_DATA_BUFFER_REQUIRED);\n throw new TypeError(ERROR_DATA_BUFFER_REQUIRED);\n }\n // const encodedKey = encodeURIComponent(key);\n this._log('info', `Uploading object ${key}`);\n const contentLength = typeof data === 'string' ? Buffer.byteLength(data) : data.length;\n const headers = {\n [HEADER_CONTENT_LENGTH]: contentLength,\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('PUT', encodedKey, {}, headers, data);\n const res = await this._sendRequest(url, 'PUT', signedHeaders, data);\n return res;\n }\n\n /**\n * Initiate a multipart upload.\n * @param {string} key - The key of the object to upload.\n * @param {string} [fileType='application/octet-stream'] - The MIME type of the file.\n * @returns {Promise} The upload ID for the multipart upload.\n * @throws {TypeError} If the key is not a non-empty string or fileType is not a string.\n * @throws {Error} If the multipart upload initiation fails.\n */\n async getMultipartUploadId(key: string, fileType: string = DEFAULT_STREAM_CONTENT_TYPE): Promise {\n this._checkKey(key);\n if (typeof fileType !== 'string') {\n this._log('error', `${ERROR_PREFIX}fileType must be a string`);\n throw new TypeError(`${ERROR_PREFIX}fileType must be a string`);\n }\n this._log('info', `Initiating multipart upload for object ${key}`);\n const query = { uploads: '' };\n const headers = {\n [HEADER_CONTENT_TYPE]: fileType,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('POST', encodedKey, query, headers, '');\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n\n const res = await this._sendRequest(urlWithQuery, 'POST', signedHeaders);\n const responseBody = await res.text();\n const parsedResponse = _parseXml(responseBody);\n\n if (\n typeof parsedResponse === 'object' &&\n parsedResponse !== null &&\n 'error' in parsedResponse &&\n typeof parsedResponse.error === 'object' &&\n parsedResponse.error !== null &&\n 'message' in parsedResponse.error\n ) {\n const errorMessage = String(parsedResponse.error.message);\n this._log('error', `${ERROR_PREFIX}Failed to abort multipart upload: ${errorMessage}`);\n throw new Error(`${ERROR_PREFIX}Failed to abort multipart upload: ${errorMessage}`);\n }\n\n if (typeof parsedResponse === 'object' && parsedResponse !== null) {\n if (!parsedResponse.initiateMultipartUploadResult || !parsedResponse.initiateMultipartUploadResult.uploadId) {\n this._log('error', `${ERROR_PREFIX}Failed to create multipart upload: no uploadId in response`);\n throw new Error(`${ERROR_PREFIX}Failed to create multipart upload: Missing upload ID in response`);\n }\n\n return parsedResponse.initiateMultipartUploadResult.uploadId;\n } else {\n this._log('error', `${ERROR_PREFIX}Failed to create multipart upload: unexpected response format`);\n throw new Error(`${ERROR_PREFIX}Failed to create multipart upload: Unexpected response format`);\n }\n }\n\n /**\n * Upload a part in a multipart upload.\n * @param {string} key - The key of the object being uploaded.\n * @param {Buffer|string} data - The content of the part.\n * @param {string} uploadId - The upload ID of the multipart upload.\n * @param {number} partNumber - The part number.\n * @param {Object} [opts={}] - Additional options for the upload.\n * @returns {Promise} The ETag and part number of the uploaded part.\n * @throws {TypeError} If any of the parameters are of incorrect type.\n */\n async uploadPart(\n key: string,\n data: Buffer | string,\n uploadId: string,\n partNumber: number,\n opts: Object = {},\n ): Promise {\n this._validateUploadPartParams(key, data, uploadId, partNumber, opts);\n const query = { uploadId, partNumber, ...opts } as { [key: string]: any };\n const headers = {\n [HEADER_CONTENT_LENGTH]: data.length,\n } as { [key: string]: any };\n\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('PUT', encodedKey, query, headers, data);\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n\n const res = await this._sendRequest(urlWithQuery, 'PUT', signedHeaders, data);\n const ETag = sanitizeETag(res.headers.get('etag') || '');\n return { partNumber, ETag };\n }\n\n private _validateUploadPartParams(\n key: string,\n data: Buffer | string,\n uploadId: string,\n partNumber: number,\n opts: Object,\n ) {\n this._checkKey(key);\n if (!(data instanceof Buffer || typeof data === 'string')) {\n this._log('error', ERROR_DATA_BUFFER_REQUIRED);\n throw new TypeError(ERROR_DATA_BUFFER_REQUIRED);\n }\n if (typeof uploadId !== 'string' || uploadId.trim().length === 0) {\n this._log('error', ERROR_UPLOAD_ID_REQUIRED);\n throw new TypeError(ERROR_UPLOAD_ID_REQUIRED);\n }\n if (!Number.isInteger(partNumber) || partNumber <= 0) {\n this._log('error', `${ERROR_PREFIX}partNumber must be a positive integer`);\n throw new TypeError(`${ERROR_PREFIX}partNumber must be a positive integer`);\n }\n this._checkOpts(opts);\n }\n\n /**\n * Complete a multipart upload.\n * @param {string} key - The key of the object being uploaded.\n * @param {string} uploadId - The upload ID of the multipart upload.\n * @param {Array} parts - An array of objects containing PartNumber and ETag for each part.\n * @returns {Promise} The result of the complete multipart upload operation.\n * @throws {TypeError} If any of the parameters are of incorrect type.\n * @throws {Error} If the complete multipart upload operation fails.\n */\n async completeMultipartUpload(\n key: string,\n uploadId: string,\n parts: Array,\n ): Promise {\n this._checkKey(key);\n if (typeof uploadId !== 'string' || uploadId.trim().length === 0) {\n this._log('error', ERROR_UPLOAD_ID_REQUIRED);\n throw new TypeError(ERROR_UPLOAD_ID_REQUIRED);\n }\n if (!Array.isArray(parts) || parts.length === 0) {\n this._log('error', ERROR_PARTS_REQUIRED);\n throw new TypeError(ERROR_PARTS_REQUIRED);\n }\n if (!parts.every(part => typeof part.partNumber === 'number' && typeof part.ETag === 'string')) {\n this._log('error', ERROR_INVALID_PART);\n throw new TypeError(ERROR_INVALID_PART);\n }\n this._log('info', `Complete multipart upload ${uploadId} for object ${key}`);\n const query = { uploadId };\n const xmlBody = this._buildCompleteMultipartUploadXml(parts);\n const headers = {\n [HEADER_CONTENT_TYPE]: XML_CONTENT_TYPE,\n [HEADER_CONTENT_LENGTH]: Buffer.byteLength(xmlBody).toString(),\n [HEADER_AMZ_CONTENT_SHA256]: await _hash(xmlBody),\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('POST', encodedKey, query, headers, xmlBody);\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n\n const res = await this._sendRequest(urlWithQuery, 'POST', signedHeaders, xmlBody);\n const responseBody = await res.text();\n const parsedResponse = _parseXml(responseBody);\n\n if (\n typeof parsedResponse === 'object' &&\n parsedResponse !== null &&\n 'error' in parsedResponse &&\n typeof parsedResponse.error === 'object' &&\n parsedResponse.error !== null &&\n 'message' in parsedResponse.error\n ) {\n const errorMessage = String(parsedResponse.error.message);\n this._log('error', `${ERROR_PREFIX}Failed to abort multipart upload: ${errorMessage}`);\n throw new Error(`${ERROR_PREFIX}Failed to abort multipart upload: ${errorMessage}`);\n }\n\n return parsedResponse.completeMultipartUploadResult;\n }\n\n /**\n * Aborts a multipart upload.\n * @param {string} key - The key of the object being uploaded.\n * @param {string} uploadId - The ID of the multipart upload to abort.\n * @returns {Promise} - A promise that resolves to the abort response.\n * @throws {Error} If the abort operation fails.\n */\n async abortMultipartUpload(key: string, uploadId: string): Promise {\n // Input validation\n this._checkKey(key);\n if (typeof uploadId !== 'string' || uploadId.trim().length === 0) {\n this._log('error', ERROR_UPLOAD_ID_REQUIRED);\n throw new TypeError(ERROR_UPLOAD_ID_REQUIRED);\n }\n\n this._log('info', `Aborting multipart upload ${uploadId} for object ${key}`);\n\n // Prepare the request\n const query = { uploadId };\n const headers = {\n [HEADER_CONTENT_TYPE]: XML_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n\n try {\n // Sign and send the request\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('DELETE', encodedKey, query, headers, '');\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n\n const res = await this._sendRequest(urlWithQuery, 'DELETE', signedHeaders);\n\n // Check for successful response\n if (res.ok) {\n const responseBody = await res.text();\n const parsedResponse = _parseXml(responseBody);\n\n if (\n typeof parsedResponse === 'object' &&\n parsedResponse !== null &&\n 'error' in parsedResponse &&\n typeof parsedResponse.error === 'object' &&\n parsedResponse.error !== null &&\n 'message' in parsedResponse.error\n ) {\n const errorMessage = String(parsedResponse.error.message);\n this._log('error', `${ERROR_PREFIX}Failed to abort multipart upload: ${errorMessage}`);\n throw new Error(`${ERROR_PREFIX}Failed to abort multipart upload: ${errorMessage}`);\n }\n\n return {\n status: 'Aborted',\n key,\n uploadId,\n response: parsedResponse,\n };\n } else {\n this._log('error', `${ERROR_PREFIX}Abort request failed with status ${res.status}`);\n throw new Error(`${ERROR_PREFIX}Abort request failed with status ${res.status}`);\n }\n } catch (error: unknown) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n this._log('error', `${ERROR_PREFIX}Failed to abort multipart upload for key ${key}: ${errorMessage}`);\n throw new Error(`${ERROR_PREFIX}Failed to abort multipart upload for key ${key}: ${errorMessage}`);\n }\n }\n\n private _buildCompleteMultipartUploadXml(parts: Array): string {\n return `\n \n ${parts\n .map(\n part => `\n \n ${part.partNumber}\n ${part.ETag}\n \n `,\n )\n .join('')}\n \n `;\n }\n\n /**\n * Delete an object from the bucket.\n * @param {string} key - The key of the object to delete.\n * @returns {Promise} The response from the delete operation. True if the delete operation was successful, false otherwise. Note: The delete operation may return a 204 status code even if the object was not found.\n */\n async delete(key: string): Promise {\n this._checkKey(key);\n this._log('info', `Deleting object ${key}`);\n const headers = {\n [HEADER_CONTENT_TYPE]: JSON_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('DELETE', encodedKey, {}, headers, '');\n const res = await this._sendRequest(url, 'DELETE', signedHeaders);\n if (res.status === 204 || res.status === 200) {\n return true;\n }\n return false;\n }\n\n async _sendRequest(\n url: string,\n method: HttpMethod,\n headers: Record,\n body?: string | Buffer,\n toleratedStatusCodes: number[] = [],\n ): Promise {\n this._log('info', `Sending ${method} request to ${url}, headers: ${JSON.stringify(headers)}`);\n const res = await fetch(url, {\n method,\n headers,\n body: ['GET', 'HEAD'].includes(method) ? undefined : body,\n signal: this.requestAbortTimeout !== undefined ? AbortSignal.timeout(this.requestAbortTimeout) : undefined,\n });\n\n if (!res.ok && !toleratedStatusCodes.includes(res.status)) {\n await this._handleErrorResponse(res);\n }\n\n return res;\n }\n\n async _handleErrorResponse(res: Response) {\n const errorBody = await res.text();\n const errorCode = res.headers.get('x-amz-error-code') || 'Unknown';\n const errorMessage = res.headers.get('x-amz-error-message') || res.statusText;\n this._log(\n 'error',\n `${ERROR_PREFIX}Request failed with status ${res.status}: ${errorCode} - ${errorMessage},err body: ${errorBody}`,\n );\n throw new Error(\n `${ERROR_PREFIX}Request failed with status ${res.status}: ${errorCode} - ${errorMessage}, err body: ${errorBody}`,\n );\n }\n\n _buildCanonicalQueryString(queryParams: Object): string {\n if (Object.keys(queryParams).length < 1) {\n return '';\n }\n\n return Object.keys(queryParams)\n .sort()\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent((queryParams as Record)[key])}`)\n .join('&');\n }\n async _getSignatureKey(dateStamp: string): Promise {\n const kDate = await _hmac(`AWS4${this.secretAccessKey}`, dateStamp);\n const kRegion = await _hmac(kDate, this.region);\n const kService = await _hmac(kRegion, S3_SERVICE);\n return _hmac(kService, AWS_REQUEST_TYPE);\n }\n}\n\nconst _hash = async (content: string | Buffer): Promise => {\n const hashSum = _createHash('sha256');\n hashSum.update(content);\n return hashSum.digest('hex');\n};\n\nconst _hmac = async (key: string | Buffer, content: string, encoding?: 'hex'): Promise => {\n const hmacSum = _createHmac('sha256', key);\n hmacSum.update(content);\n return hmacSum.digest(encoding);\n};\nexport const sanitizeETag = (etag: string): string => {\n const replaceChars: Record = {\n '\"': '',\n '"': '',\n '"': '',\n '"': '',\n '"': '',\n };\n return etag.replace(/^(\"|"|")|(\"|"|")$/g, m => replaceChars[m] as string);\n};\n\nconst _parseXml = (str: string): string | object | any => {\n const unescapeXml = (value: string): string => {\n return value\n .replace(/"/g, '\"')\n .replace(/'/g, \"'\")\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/&/g, '&');\n };\n\n const json = {};\n const re = /<(\\w)([-\\w]+)(?:\\/|[^>]*>((?:(?!<\\1)[\\s\\S])*)<\\/\\1\\2)>/gm;\n let match;\n\n while ((match = re.exec(str))) {\n const [, prefix, key, value] = match;\n const fullKey = prefix.toLowerCase() + key;\n const parsedValue = value != null ? _parseXml(value) : true;\n\n if (typeof parsedValue === 'string') {\n (json as { [key: string]: any })[fullKey] = sanitizeETag(unescapeXml(parsedValue));\n } else if (Array.isArray((json as { [key: string]: any })[fullKey])) {\n (json as { [key: string]: any })[fullKey].push(parsedValue);\n } else {\n (json as { [key: string]: any })[fullKey] =\n (json as { [key: string]: any })[fullKey] != null\n ? [(json as { [key: string]: any })[fullKey], parsedValue]\n : expectArray[fullKey]\n ? [parsedValue]\n : parsedValue;\n }\n }\n\n return Object.keys(json).length ? json : unescapeXml(str);\n};\n\nexport { S3 };\nexport default S3;\n", "'use strict';\n\nimport { S3 } from 'ultralight-s3';\nimport avro from 'avsc'; // eslint-disable-line\nimport {\n\tlowstorage_ERROR_CODES,\n\tlowstorageError,\n\tCollectionNotFoundError,\n\tSchemaValidationError,\n\tDocumentValidationError,\n\tS3OperationError,\n} from './errors.js';\nimport { matchesQuery, generateUUID, inferAvroType, ensureIdFieldInSchema } from './helpers.js';\n\nconst MODULE_NAME = 'lowstorage';\nconst DEFAULT_DELIMITER = '/';\nconst PROJECT_DIR_PREFIX = 'lowstorage';\nconst COL_SUFFIX = '.avro';\nconst CHUNG_1MB = 1024 * 1024;\nconst CHUNG_5MB = 5 * CHUNG_1MB;\nconst EMPTY_DATA = Buffer.from('', 'utf8');\n\nconst errorValidationFn = (errorCode = lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR) => {\n\tthrow new DocumentValidationError(`${MODULE_NAME}: Invalid document or schema`, errorCode);\n};\n\nconst _hasColName = (colName) => {\n\tif (colName.trim() === '' || colName === null || typeof colName === 'undefined' || colName.length > 255 || colName === null) {\n\t\tthrow new lowstorageError(`${MODULE_NAME}: Collection name is required, null or too long`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n\t}\n};\n\n// code / description\n// init of new collection is automatically creating it in the bucket\n// there is optional (opt-in) switch to create new collections in bucket\n// if the schema is not provided, it will create empty buffer and save it\n// if the schema is provided, it will save it in memory and use it for all ops\n// if the schema is updated, it will save it in memory and use it for all ops\n// exposed functions are:\n// listCollections \u2705\n// collectionExists \u2705\n// createCollection \u2705\n// removeCollection \u2705\n// renameCollection \u2705\n// updateCollectionSchema \u274C\n// collection \u2705\n// s3 \u2705\n\n// Operations over collections are:\n// insert \u2705\n// find \u2705\n// findOne \u2705\n// update \u2705\n// updateOne \u2705\n// delete \u2705\n// count \u2705\n\n// Errors:\n// lowstorageError \u2705\n// CollectionNotFoundError \u2705\n// SchemaValidationError \u2705\n// DocumentValidationError \u2705\n// S3OperationError \u2705\n\n/**\n * lowstorage class for managing collections and performing operations on top of S3-compatible storages.\n * @class\n * @example\n * const storage = new lowstorage({\n * \taccessKeyId: 'YOUR_ACCESS_KEY',\n * \tsecretAccessKey: 'YOUR_SECRET_KEY',\n * \tendpoint: 'YOUR_ENDPOINT',\n * \tbucketName: 'YOUR_BUCKET_NAME',\n * \tregion: 'YOUR_REGION',\n * });\n *\n * // Create a collection\n * const userCol = await storage.collection('users');\n *\n * // Insert a document\n * await userCol.insert({\n * \tname: 'Kevin',\n * \tgender: 'whatever',\n * \tposts: [],\n * });\n *\n * // Show all users\n * const allUsers = await userCol.find({});\n *\n * // Find users with pagination (e.g., page 2, 10 users per page)\n * const secondPageUsers = await userCol.find({}, { skip: 10, limit: 10 });\n *\n * // Find user by ID and update name\n * await userCol.update({ _id: id }, { name: 'Carlos' });\n */\nclass lowstorage {\n\t/**\n\t * Create a new lowstorage instance.\n\t * @param {Object} options - Configuration options for lowstorage.\n\t * @param {string} options.accessKeyId - S3 access key ID.\n\t * @param {string} options.secretAccessKey - S3 secret access key.\n\t * @param {string} options.endpoint - S3 endpoint URL.\n\t * @param {string} options.bucketName - S3 bucket name.\n\t * @param {string} [options.region='auto'] - S3 region.\n\t * @param {Object} [options.logger=null] - Logger object.\n\t * @param {string} [options.dirPrefix=PROJECT_DIR_PREFIX] - Directory prefix for collections.\n\t * @param {Number} [options.maxRequestSizeInBytes=CHUNG_5MB] - Chunk size for reading and writing data. AWS S3 has a minimum of 5MB per object.\n\t * @returns {lowstorage} A new lowstorage instance.\n\t */\n\tconstructor(\n\t\toptions = {\n\t\t\taccessKeyId: undefined,\n\t\t\tsecretAccessKey: undefined,\n\t\t\tendpoint: undefined,\n\t\t\tbucketName: undefined,\n\t\t\tregion: 'auto',\n\t\t\tlogger: null,\n\t\t\tdirPrefix: PROJECT_DIR_PREFIX,\n\t\t},\n\t) {\n\t\tthis._checkArgs(options);\n\t\tthis._schemas = new Map();\n\t\tthis._s3 = new S3(options);\n\t\tthis._dirPrefix = options.dirPrefix || PROJECT_DIR_PREFIX;\n\t\tthis._avro = avro;\n\t}\n\n\t_checkArgs = (args) => {\n\t\tconst requiredFields = ['accessKeyId', 'secretAccessKey', 'endpoint', 'bucketName'];\n\t\tfor (const field of requiredFields) {\n\t\t\tif (!args[field]) {\n\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: ${field} is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n\t\t\t}\n\t\t}\n\t};\n\n\t/**\n\t * List all collections.\n\t * @returns {Promise} An array of collection names.\n\t * @throws {S3OperationError} If there's an error during S3 operation.\n\t */\n\tasync listCollections() {\n\t\ttry {\n\t\t\tconst listed = await this._s3.list(DEFAULT_DELIMITER, this._dirPrefix);\n\t\t\tif (typeof listed === 'object' && listed !== null && listed.keyCount === '0') return [];\n\t\t\t// remove the delimiter from the key\n\t\t\treturn listed.map((entry) => entry.key.slice(this._dirPrefix.length + 1, -COL_SUFFIX.length));\n\t\t} catch (error) {\n\t\t\tthrow new S3OperationError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t}\n\t}\n\n\t/**\n\t * Check if a collection exists.\n\t * @param {string} colName - The name of the collection.\n\t * @returns {Promise} True if the collection exists, false otherwise.\n\t * @throws {lowstorageError} If there's an error.\n\t */\n\tasync collectionExists(colName) {\n\t\ttry {\n\t\t\t_hasColName(colName);\n\t\t\tconst exists = await this._s3.fileExists(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`);\n\t\t\treturn !!exists;\n\t\t} catch (error) {\n\t\t\tif (error.message.includes('Not Found')) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND);\n\t\t}\n\t}\n\n\t/**\n\t * Create a new collection.\n\t * @param {string} colName - The name of the collection.\n\t * @param {Object} [schema] - The schema for the collection.\n\t * @param {Array} [data=[]] - The initial data for the collection.\n\t * @returns {Promise} A Promise that resolves to a Collection object.\n\t * @throws {lowstorageError} If there's an error.\n\t */\n\tasync createCollection(colName, schema, data = []) {\n\t\ttry {\n\t\t\t_hasColName(colName);\n\t\t\tconst exists = await this.collectionExists(colName);\n\t\t\tif (!exists) {\n\t\t\t\tif (typeof schema !== 'undefined' && schema !== null) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst isValid = this._avro.parse(schema);\n\t\t\t\t\t\tif (!isValid) {\n\t\t\t\t\t\t\tthrow new SchemaValidationError(\n\t\t\t\t\t\t\t\t`${MODULE_NAME}: Schema is invalid: ${schema}`,\n\t\t\t\t\t\t\t\tlowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tthrow new SchemaValidationError(`${MODULE_NAME}: Schema is invalid: ${schema}`, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (data.length > 0 && schema) {\n\t\t\t\t\tconst wrapperType = this._avro.parse({ type: 'array', items: schema });\n\t\t\t\t\tawait this._s3.put(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`, wrapperType.toBuffer(data));\n\t\t\t\t} else {\n\t\t\t\t\tawait this._s3.put(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`, EMPTY_DATA);\n\t\t\t\t}\n\t\t\t\treturn this.collection(colName, schema, false);\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Collection ${colName} already exists`, lowstorage_ERROR_CODES.COLLECTION_EXISTS);\n\t\t} catch (error) {\n\t\t\tif (error instanceof lowstorageError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.CREATE_COLLECTION_ERROR);\n\t\t}\n\t}\n\n\t/**\n\t * Remove a collection.\n\t * @param {string} colName - The name of the collection.\n\t * @returns {Promise} A Promise that resolves to true if the collection is removed, false otherwise.\n\t * @throws {lowstorageError} If there's an error.\n\t */\n\tasync removeCollection(colName) {\n\t\ttry {\n\t\t\t_hasColName(colName);\n\t\t\tconst exists = await this.collectionExists(colName);\n\t\t\tif (exists) {\n\t\t\t\tawait this._s3.delete(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`);\n\t\t\t\tconst exists2 = await this.collectionExists(colName);\n\t\t\t\tif (typeof exists2 === 'boolean') {\n\t\t\t\t\tif (!exists2) {\n\t\t\t\t\t\tthis._schemas.delete(colName);\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Failed to delete collection ${colName}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t\t}\n\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to delete collection ${colName}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Collection ${colName} does not exist`, lowstorage_ERROR_CODES.REMOVE_COLLECTION_ERROR);\n\t\t} catch (error) {\n\t\t\tif (error instanceof S3OperationError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(\n\t\t\t\t`${MODULE_NAME}: Failed to remove collection: ${error.message}`,\n\t\t\t\tlowstorage_ERROR_CODES.REMOVE_COLLECTION_ERROR,\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Get or create a collection.\n\t * @param {string} colName - The name of the collection.\n\t * @param {Object} [schema] - The schema for the collection.\n\t * @param {boolean} [autoCreate=true] - Whether to automatically create the collection if it doesn't exist.\n\t * @returns {Promise} A Promise that resolves to a Collection object.\n\t * @throws {lowstorageError} If there's an error.\n\t */\n\tasync collection(colName, schema, autoCreate = true) {\n\t\ttry {\n\t\t\t_hasColName(colName);\n\t\t\tconst colPath = `${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`;\n\t\t\tconst exists = await this._s3.fileExists(colPath);\n\t\t\tif (!exists) {\n\t\t\t\tif (!autoCreate) {\n\t\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Collection ${colName} does not exist`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND);\n\t\t\t\t}\n\t\t\t\t// TODO: check if this is the right way to handle empty data\n\t\t\t\tawait this._s3.put(colPath, EMPTY_DATA);\n\t\t\t}\n\t\t\tconst colSchema = schema || this._schemas.get(colName) || undefined;\n\t\t\treturn new Collection(colName, colSchema, this._s3, this._dirPrefix);\n\t\t} catch (error) {\n\t\t\t// check if error message contains \"unknown type\" and if so, throw a schema validation error\n\t\t\tif (error.message.includes('unknown type')) {\n\t\t\t\tthrow new SchemaValidationError(\n\t\t\t\t\t`${MODULE_NAME}: Schema input is invalid: ${error.message}`,\n\t\t\t\t\tlowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND);\n\t\t}\n\t}\n\n\t/**\n\t * Get the S3 instance associated with the lowstorage instance.\n\t * @returns {S3} The S3 instance. Use this to perform S3 operations. Check for ultralight-s3 for more details.\n\t */\n\ts3 = () => {\n\t\treturn this._s3;\n\t};\n}\n\n/**\n * Collection class for managing documents in a collection.\n * @class\n * @example\n * const storage = new lowstorage({\n * \taccessKeyId: 'YOUR_ACCESS_KEY',\n * \tsecretAccessKey: 'YOUR_SECRET_KEY',\n * \tendpoint: 'YOUR_ENDPOINT',\n * \tbucketName: 'YOUR_BUCKET_NAME',\n * \tregion: 'YOUR_REGION',\n * });\n *\n * // Create a collection\n * const userCol = await storage.collection('users');\n *\n * // Insert a document\n * await userCol.insert({\n * \tname: 'Kevin',\n * \tgender: 'whatever',\n * \tposts: [],\n * });\n *\n * // Show all users\n * const allUsers = await userCol.find({});\n *\n * // Find users with pagination (e.g., page 2, 10 users per page)\n * const secondPageUsers = await userCol.find({}, { skip: 10, limit: 10 });\n *\n * // Find user by ID and update name\n * await userCol.update({ _id: id }, { name: 'Carlos' });\n */\nclass Collection {\n\t/**\n\t * Create a new Collection instance.\n\t * @param {string} colName - The name of the collection.\n\t * @param {Object} [schema] - The Avro schema for the collection.\n\t * @param {S3} s3 - The S3 instance.\n\t * @param {string} [dirPrefix=PROJECT_DIR_PREFIX] - The directory prefix for the collection.\n\t * @param {boolean} [safeWrite=false] - Whether to perform a safe write operation. It doublechecks the ETag of the object before writing. False = overwrites the object, True = only writes if the object has not been modified.\n\t * @param {Number} [chunkSize=CHUNG_5MB] - The chunk size for reading and writing data. AWS S3 has a maximum of 5MB per object.\n\t * @returns {Collection} A new Collection instance.\n\t */\n\tconstructor(colName, schema, s3, dirPrefix = PROJECT_DIR_PREFIX, safeWrite = false, chunkSize = CHUNG_5MB) {\n\t\tthis._colName = colName;\n\t\tthis._s3 = s3;\n\t\tthis._schema = ensureIdFieldInSchema(schema);\n\t\tthis._dirPrefix = dirPrefix;\n\t\tthis._safeWrite = safeWrite;\n\t\tthis._chunkSize = chunkSize || CHUNG_5MB;\n\t\tthis._key = `${this._dirPrefix}${DEFAULT_DELIMITER}${this._colName}${COL_SUFFIX}`;\n\t\tthis._s3.setMaxRequestSizeInBytes(this._chunkSize);\n\t\tthis._avro = avro;\n\t\tthis._lastETag = '';\n\t\tthis._dataCache = [];\n\t\tthis._avroType = typeof schema === 'undefined' ? null : this._avro.parse(schema);\n\t}\n\n\tgetProps = () => ({\n\t\tcolName: this._colName,\n\t\tschema: this._schema,\n\t\ts3: this._s3,\n\t\tavro: this._avro,\n\t\tavroType: this._avroType,\n\t\tdirPrefix: this._dirPrefix,\n\t\tsafeWrite: this._safeWrite,\n\t\tchunkSize: this._chunkSize,\n\t});\n\n\tsetProps = (props) => {\n\t\tthis._colName = props.colName;\n\t\tthis._schema = props.schema;\n\t\tthis._s3 = props.s3;\n\t\tthis._avro = props.avro;\n\t\tthis._avroType = props.avroType;\n\t\tthis._dirPrefix = props.dirPrefix;\n\t\tthis._safeWrite = props.safeWrite;\n\t\tthis._chunkSize = props.chunkSize;\n\t};\n\n\tsetSafeWrite = (safeWrite) => {\n\t\tthis._safeWrite = safeWrite;\n\t};\n\n\tgetSafeWrite = () => {\n\t\treturn this._safeWrite;\n\t};\n\n\tgetAvroSchema = () => {\n\t\treturn this._schema;\n\t};\n\n\tsetAvroSchema = (schema) => {\n\t\tthis._schema = ensureIdFieldInSchema(schema);\n\t\tthis._avroType = typeof schema === 'undefined' ? null : this._avro.parse(schema);\n\t};\n\n\tasync _loadData() {\n\t\ttry {\n\t\t\tif (this._avroType === null || typeof this._avroType === 'undefined') {\n\t\t\t\tthrow new lowstorageError(\n\t\t\t\t\t`${MODULE_NAME}: Missing type definition. Configure before operations `,\n\t\t\t\t\tlowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst { etag, data } = await this._s3.getObjectWithETag(this._key, { 'if-none-match': this._lastETag });\n\t\t\tif (data === null) {\n\t\t\t\treturn this._dataCache;\n\t\t\t}\n\t\t\tthis._lastETag = etag === null ? this._lastETag : etag;\n\t\t\tconst wrapperType = this._avro.parse({ type: 'array', items: this._avroType });\n\t\t\tif (data.length < this._chunkSize) {\n\t\t\t\tthis._dataCache = data.length > 0 ? wrapperType.fromBuffer(Buffer.from(data, 'utf8')) : [];\n\t\t\t\treturn this._dataCache;\n\t\t\t}\n\t\t\tlet offset = this._chunkSize;\n\t\t\tlet bufferArr = [Buffer.from(data, 'utf8')];\n\t\t\tlet repeat = true;\n\t\t\twhile (repeat) {\n\t\t\t\tconst nextDataResponse = await this._s3.getResponse(this._key, false, offset, offset + this._chunkSize);\n\t\t\t\tconst nextDataBody = await nextDataResponse.text();\n\t\t\t\tbufferArr.push(Buffer.from(nextDataBody, 'utf8'));\n\t\t\t\toffset += this._chunkSize;\n\t\t\t\tconst contentLength = nextDataResponse.headers.get('content-length') || nextDataBody.length;\n\t\t\t\tif (contentLength < this._chunkSize) {\n\t\t\t\t\trepeat = false;\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst bufferedData = Buffer.concat(bufferArr);\n\t\t\tthis._dataCache = wrapperType.fromBuffer(bufferedData);\n\t\t\treturn this._dataCache;\n\t\t} catch (error) {\n\t\t\tif (error.toString().indexOf('status 404: Unknown - Not Found') > -1) {\n\t\t\t\tthis._dataCache = [];\n\t\t\t\treturn this._dataCache;\n\t\t\t}\n\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to load data: ${error.message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t}\n\t}\n\n\tasync _saveData(data) {\n\t\ttry {\n\t\t\tif (this._avroType === null || typeof this._avroType === 'undefined') {\n\t\t\t\tthrow new lowstorageError(\n\t\t\t\t\t`${MODULE_NAME}: Missing type definition. Configure before operations `,\n\t\t\t\t\tlowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst wrapperType = this._avro.parse({ type: 'array', items: this._avroType });\n\t\t\tconst dataBuffer = data.length > 0 ? wrapperType.toBuffer(data) : EMPTY_DATA; // TODO: check if this is the right way to handle empty data\n\n\t\t\tif (this._safeWrite && this._lastETag !== '') {\n\t\t\t\tconst currentETag = await this._s3.getEtag(this._key);\n\t\t\t\t// If we have a current ETag, check if it matches our last known ETag\n\t\t\t\tif (currentETag !== null && currentETag !== this._lastETag) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst resp = await this._s3.put(this._key, dataBuffer);\n\t\t\tif (resp.status !== 200) {\n\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to save data`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t}\n\n\t\t\t// Update the cached ETag\n\t\t\tconst newETag = resp.headers.get('etag');\n\t\t\tif (newETag) {\n\t\t\t\tthis._lastETag = this._s3.sanitizeETag(newETag);\n\t\t\t\tthis._dataCache = data;\n\t\t\t}\n\t\t\treturn true;\n\t\t} catch (error) {\n\t\t\tif (error instanceof S3OperationError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.SAVE_DATA_ERROR);\n\t\t}\n\t}\n\n\t/**\n\t * Insert a document into the collection.\n\t * @param {Object|Array} doc - The document to insert.\n\t * @param {Object} [schema=undefined] - The schema for the document.\n\t * @returns {Promise} A Promise that resolves to the array of inserted document(s).\n\t * @throws {lowstorageError} If there's an error.\n\t */\n\tasync insert(doc, schema = undefined) {\n\t\ttry {\n\t\t\tif (doc === undefined || doc === null) {\n\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Document is required for insert`, lowstorage_ERROR_CODES.INSERT_ERROR);\n\t\t\t}\n\t\t\tif (typeof doc !== 'object' && !Array.isArray(doc)) {\n\t\t\t\tthrow new DocumentValidationError(\n\t\t\t\t\t`${MODULE_NAME}: Document must be an object or an array`,\n\t\t\t\t\tlowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst items = !Array.isArray(doc) ? [doc] : doc;\n\n\t\t\tconst schemaWithId = ensureIdFieldInSchema(schema) || this._schema || inferAvroType(items[0]);\n\t\t\tconst avroType = this._avro.parse(schemaWithId);\n\t\t\tif (!avroType) {\n\t\t\t\tthrow new SchemaValidationError(\n\t\t\t\t\t`${MODULE_NAME}: Schema is required - Pass a schema to the insert method`,\n\t\t\t\t\tlowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR,\n\t\t\t\t);\n\t\t\t}\n\t\t\tthis._avroType = avroType;\n\t\t\tconst data = await this._loadData();\n\t\t\tfor (let item of items) {\n\t\t\t\tif (typeof item !== 'object' || item === null) {\n\t\t\t\t\tthrow new DocumentValidationError(\n\t\t\t\t\t\t`${MODULE_NAME}: Invalid input: input must be an object or an array of objects`,\n\t\t\t\t\t\tlowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\titem._id = item._id || (await generateUUID());\n\t\t\t\tconst validBuffer = this._avroType.isValid(item, {\n\t\t\t\t\terrorHook: errorValidationFn,\n\t\t\t\t\tnoUndeclaredFields: true,\n\t\t\t\t});\n\t\t\t\tif (validBuffer === true) {\n\t\t\t\t\tdata.push(item);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new DocumentValidationError(`${MODULE_NAME}: Invalid document or schema`, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR);\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst success = await this._saveData(data);\n\t\t\tif (!success) {\n\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to insert document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t}\n\t\t\tthis.setAvroSchema(schemaWithId);\n\t\t\treturn items;\n\t\t} catch (error) {\n\t\t\tif (error.message.includes('unknown type')) {\n\t\t\t\tthrow new SchemaValidationError(\n\t\t\t\t\t`${MODULE_NAME}: Schema input is invalid: ${error.message}`,\n\t\t\t\t\tlowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (error instanceof lowstorageError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME} Insert operation failed: ${error.message}`, lowstorage_ERROR_CODES.INSERT_ERROR);\n\t\t}\n\t}\n\n\t/**\n\t * Find documents in the collection.\n\t * @param {Object} [query={}] - The query to filter documents.\n\t * @param {Object} [options={}] - The options for pagination.\n\t * @param {number} [options.skip=0] - The number of documents to skip. Default is 0.\n\t * @param {number} [options.limit=undefined] - The maximum number of documents to return. Default is undefined, which means no limit.\n\t * @returns {Promise} A Promise that resolves to an array of matching documents.\n\t * @throws {lowstorageError} If there's an error.\n\t */\n\tasync find(query = {}, options = {}) {\n\t\ttry {\n\t\t\tif (query === undefined || query === null) {\n\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Query is required for update`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n\t\t\t}\n\t\t\tconst data = await this._loadData();\n\t\t\tconst start = parseInt(options.skip, 10) || 0;\n\t\t\tconst end = parseInt(options.limit, 10) ? start + parseInt(options.limit, 10) : undefined;\n\t\t\tconst filteredData = data.filter((doc) => matchesQuery(doc, query)).slice(start, end);\n\t\t\treturn filteredData;\n\t\t} catch (error) {\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Find operation failed: ${error.message}`, lowstorage_ERROR_CODES.FIND_ERROR);\n\t\t}\n\t}\n\n\t/**\n\t * Find the first document in the collection that matches the query.\n\t * @param {Object} [query={}] - The query to filter documents.\n\t * @returns {Promise} A Promise that resolves to the first matching document or null if no match is found.\n\t * @throws {lowstorageError} If there's an error.\n\t */\n\tasync findOne(query = {}) {\n\t\ttry {\n\t\t\tif (query === null) {\n\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Query cannot be null`, lowstorage_ERROR_CODES.INVALID_ARGUMENT);\n\t\t\t}\n\t\t\tconst result = await this.find(query, { limit: 1 });\n\t\t\treturn result[0] || null;\n\t\t} catch (error) {\n\t\t\tif (error instanceof lowstorageError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: FindOne operation failed: ${error.message}`, lowstorage_ERROR_CODES.FIND_ONE_ERROR);\n\t\t}\n\t}\n\n\t/**\n\t * Update a single document in the collection that matches the query.\n\t * @param {Object} [query={}] - The query to filter the document to update.\n\t * @param {Object} [update={}] - The update operations to apply to the matching document.\n\t * @returns {Promise} A Promise that resolves to number of documents updated.\n\t * @throws {lowstorageError} If the updateOne operation fails.\n\t * @throws {SchemaValidationError} If the schema is not defined for the collection.\n\t * @throws {DocumentValidationError} If the updated document is invalid.\n\t * @throws {S3OperationError} If the S3 operation fails.\n\t */\n\tasync update(query = {}, update = {}, options = {}) {\n\t\ttry {\n\t\t\tif (query === undefined || query === null || update === undefined || update === null) {\n\t\t\t\tthrow new lowstorageError(\n\t\t\t\t\t`${MODULE_NAME}: Query and update values are required for update`,\n\t\t\t\t\tlowstorage_ERROR_CODES.MISSING_ARGUMENT,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (!this._avroType) {\n\t\t\t\tthrow new SchemaValidationError(\n\t\t\t\t\t`${MODULE_NAME}: Schema is not defined for this collection`,\n\t\t\t\t\tlowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst data = await this._loadData();\n\t\t\tif (data.length === 0) return 0;\n\t\t\tlet updatedCount = 0;\n\t\t\tfor (let i = 0; i < data.length; i++) {\n\t\t\t\tif (matchesQuery(data[i], query)) {\n\t\t\t\t\tconst updatedDoc = { ...data[i], ...update };\n\t\t\t\t\tconst isValid = this._avroType.isValid(updatedDoc, {\n\t\t\t\t\t\terrorHook: errorValidationFn,\n\t\t\t\t\t\tnoUndeclaredFields: true,\n\t\t\t\t\t});\n\t\t\t\t\tif (isValid === true) {\n\t\t\t\t\t\tdata[i] = updatedDoc;\n\t\t\t\t\t\tupdatedCount++;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow new DocumentValidationError(\n\t\t\t\t\t\t\t`${MODULE_NAME}: Invalid document or schema`,\n\t\t\t\t\t\t\tlowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (updatedCount > 0) {\n\t\t\t\tconst success = await this._saveData(data);\n\t\t\t\tif (!success) {\n\t\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t\t}\n\t\t\t} else if (options.upsert) {\n\t\t\t\t// If upsert is true, we need to insert the document\n\t\t\t\tconst success = await this.insert(update);\n\t\t\t\tif (!success) {\n\t\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t\t}\n\t\t\t\tupdatedCount = 1;\n\t\t\t}\n\t\t\treturn updatedCount;\n\t\t} catch (error) {\n\t\t\tif (error instanceof S3OperationError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Update operation failed: ${error.message}`, lowstorage_ERROR_CODES.UPDATE_ERROR);\n\t\t}\n\t}\n\n\t/**\n\t * Update a single document in the collection that matches the query.\n\t * @param {Object} [query={}] - The query to filter the document to update.\n\t * @param {Object} [update={}] - The update operations to apply to the matching document.\n\t * @returns {Promise} A Promise that resolves to 1 if a document was updated, 0 otherwise.\n\t * @throws {lowstorageError} If the updateOne operation fails.\n\t * @throws {SchemaValidationError} If the schema is not defined for the collection.\n\t * @throws {DocumentValidationError} If the updated document is invalid.\n\t * @throws {S3OperationError} If the S3 operation fails.\n\t */\n\tasync updateOne(query = {}, update = {}, options = {}) {\n\t\ttry {\n\t\t\tif (query === undefined || query === null || update === undefined || update === null) {\n\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Query is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n\t\t\t}\n\t\t\tif (!this._avroType) {\n\t\t\t\tthrow new SchemaValidationError(\n\t\t\t\t\t`${MODULE_NAME}: Schema is not defined for this collection`,\n\t\t\t\t\tlowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst data = await this._loadData();\n\t\t\tif (data.length === 0) return 0;\n\t\t\tconst docIndex = data.findIndex((doc) => matchesQuery(doc, query));\n\n\t\t\tif (docIndex !== -1) {\n\t\t\t\tconst updatedDoc = { ...data[docIndex], ...update };\n\t\t\t\tconst isValid = this._avroType.isValid(updatedDoc, {\n\t\t\t\t\terrorHook: errorValidationFn,\n\t\t\t\t\tnoUndeclaredFields: true,\n\t\t\t\t});\n\t\t\t\tif (isValid === true) {\n\t\t\t\t\tdata[docIndex] = updatedDoc;\n\t\t\t\t\tconst success = await this._saveData(data);\n\t\t\t\t\tif (!success) {\n\t\t\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t\t\t}\n\t\t\t\t\treturn 1;\n\t\t\t\t} else {\n\t\t\t\t\tthrow new DocumentValidationError(`${MODULE_NAME}: Invalid document or schema`, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (options.upsert) {\n\t\t\t\t// If upsert is true, we need to insert the document\n\t\t\t\tconst success = await this.insert(update);\n\t\t\t\tif (!success) {\n\t\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t\t}\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t\treturn 0;\n\t\t} catch (error) {\n\t\t\tif (error instanceof lowstorageError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: UpdateOne operation failed: ${error.message}`, lowstorage_ERROR_CODES.UPDATE_ONE_ERROR);\n\t\t}\n\t}\n\n\t/**\n\t * Delete documents from the collection.\n\t * @param {Object} [query={}] - The query to filter documents to delete.\n\t * @returns {Promise} A Promise that resolves to the number of documents deleted.\n\t * @throws {lowstorageError} If the delete operation fails.\n\t * @throws {S3OperationError} If the S3 operation fails.\n\t */\n\tasync delete(query = {}) {\n\t\ttry {\n\t\t\tif (query === undefined || query === null) {\n\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Query is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n\t\t\t}\n\t\t\tconst data = await this._loadData();\n\t\t\tif (data.length === 0) return 0;\n\t\t\tconst initialLength = data.length;\n\n\t\t\tconst newData = data.filter((doc) => !matchesQuery(doc, query));\n\t\t\tconst success = await this._saveData(newData);\n\t\t\tif (!success) {\n\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to delete document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t}\n\t\t\treturn initialLength - newData.length;\n\t\t} catch (error) {\n\t\t\tif (error instanceof S3OperationError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Delete operation failed: ${error.message}`, lowstorage_ERROR_CODES.DELETE_ERROR);\n\t\t}\n\t}\n\n\t/**\n\t * Delete all documents from the collection.\n\t * @returns {Promise} A Promise that resolves to the number of documents deleted.\n\t * @throws {lowstorageError} If the delete operation fails.\n\t * @throws {S3OperationError} If the S3 operation fails.\n\t */\n\tasync deleteAll() {\n\t\ttry {\n\t\t\tconst data = await this._loadData();\n\t\t\tconst initialLength = data.length;\n\t\t\tconst success = await this._saveData([]);\n\t\t\tif (!success) {\n\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to delete document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t}\n\t\t\treturn initialLength;\n\t\t} catch (error) {\n\t\t\tif (error instanceof S3OperationError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Delete operation failed: ${error.message}`, lowstorage_ERROR_CODES.DELETE_ERROR);\n\t\t}\n\t}\n\n\t/**\n\t * Count the number of documents in the collection.\n\t * @param {Object} [query={}] - The query to filter documents.\n\t * @returns {Promise} A Promise that resolves to the number of documents in the collection.\n\t * @throws {lowstorageError} If the count operation fails.\n\t */\n\tasync count(query = {}) {\n\t\ttry {\n\t\t\tconst data = await this.find(query);\n\t\t\treturn data.length;\n\t\t} catch (error) {\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Count operation failed: ${error.message}`, lowstorage_ERROR_CODES.COUNT_ERROR);\n\t\t}\n\t}\n\n\tasync renameCollection(newColName, newSchema = this._schema) {\n\t\ttry {\n\t\t\t_hasColName(newColName);\n\t\t\tconst exists = await this._s3.fileExists(`${this._dirPrefix}${DEFAULT_DELIMITER}${newColName}${COL_SUFFIX}`);\n\t\t\tif (!!exists) {\n\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Collection ${newColName} already exists`, lowstorage_ERROR_CODES.COLLECTION_EXISTS);\n\t\t\t}\n\t\t\tconst schema = newSchema || this.getAvroSchema();\n\t\t\tconst data = await this._loadData();\n\t\t\tconst createNew = new Collection(newColName, schema, this._s3, this._dirPrefix, this._safeWrite, this._chunkSize);\n\t\t\tawait createNew._saveData(data);\n\t\t\tawait this._s3.delete(`${this._dirPrefix}${DEFAULT_DELIMITER}${this._colName}${COL_SUFFIX}`);\n\t\t\treturn createNew;\n\t\t} catch (error) {\n\t\t\tif (error instanceof lowstorageError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(\n\t\t\t\t`${MODULE_NAME}: Rename collection failed: ${error.message}`,\n\t\t\t\tlowstorage_ERROR_CODES.RENAME_COLLECTION_ERROR,\n\t\t\t);\n\t\t}\n\t}\n}\n\n// export default lowstorage;\nexport { lowstorage, lowstorageError, lowstorage_ERROR_CODES };\n", "'use strict';\n\nconst lowstorage_ERROR_CODES = {\n\tMISSING_ARGUMENT: 'MISSING_ARGUMENT',\n\tCOLLECTION_EXISTS: 'COLLECTION_EXISTS',\n\tCREATE_COLLECTION_ERROR: 'CREATE_COLLECTION_ERROR',\n\tRENAME_COLLECTION_ERROR: 'RENAME_COLLECTION_ERROR',\n\tREMOVE_COLLECTION_ERROR: 'REMOVE_COLLECTION_ERROR',\n\tUPDATE_COLLECTION_SCHEMA_ERROR: 'UPDATE_COLLECTION_SCHEMA_ERROR',\n\tCOLLECTION_NOT_FOUND: 'COLLECTION_NOT_FOUND',\n\tSCHEMA_VALIDATION_ERROR: 'SCHEMA_VALIDATION_ERROR',\n\tDOCUMENT_VALIDATION_ERROR: 'DOCUMENT_VALIDATION_ERROR',\n\tS3_OPERATION_ERROR: 'S3_OPERATION_ERROR',\n\tFIND_ERROR: 'FIND_ERROR',\n\tFIND_ONE_ERROR: 'FIND_ONE_ERROR',\n\tSAVE_DATA_ERROR: 'SAVE_DATA_ERROR',\n\tINSERT_ERROR: 'INSERT_ERROR',\n\tUPDATE_ERROR: 'UPDATE_ERROR',\n\tUPDATE_ONE_ERROR: 'UPDATE_ONE_ERROR',\n\tDELETE_ERROR: 'DELETE_ERROR',\n\tCOUNT_ERROR: 'COUNT_ERROR',\n\tUNKNOWN_ERROR: 'UNKNOWN_ERROR',\n};\nclass lowstorageError extends Error {\n\tconstructor(message, code = lowstorage_ERROR_CODES.UNKNOWN_ERROR) {\n\t\tsuper(`lowstorageError: ${message} :: code: ${code}`);\n\t\tthis.name = this.constructor.name;\n\t\tthis.code = code;\n\t\tError.captureStackTrace(this, this.constructor);\n\t}\n}\n\nclass CollectionNotFoundError extends lowstorageError {\n\tconstructor(collectionName) {\n\t\tsuper(`Collection ${collectionName} not found`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND);\n\t}\n}\n\nclass SchemaValidationError extends lowstorageError {\n\tconstructor(message) {\n\t\tsuper(message, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR);\n\t}\n}\n\nclass DocumentValidationError extends lowstorageError {\n\tconstructor(message) {\n\t\tsuper(message, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR);\n\t}\n}\n\nclass S3OperationError extends lowstorageError {\n\tconstructor(message, operation) {\n\t\tsuper(`S3 ${operation} operation failed: ${message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t}\n}\n\nexport {\n\tlowstorage_ERROR_CODES,\n\tlowstorageError,\n\tCollectionNotFoundError,\n\tSchemaValidationError,\n\tDocumentValidationError,\n\tS3OperationError,\n};\n", "'use strict';\n\nimport { randomUUID } from 'node:crypto';\n\nconst matchesQuery = (document, query) => {\n\treturn Object.keys(query).every((key) => document[key] === query[key]);\n};\n\nconst generateUUID = async () => {\n\tif (typeof randomUUID !== 'undefined' && typeof randomUUID === 'function') {\n\t\treturn randomUUID();\n\t}\n\tif (typeof crypto !== 'undefined' && typeof crypto === 'object' && typeof crypto.randomUUID === 'function') {\n\t\treturn crypto.randomUUID();\n\t}\n\treturn 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n\t\tvar r = (Math.random() * 16) | 0,\n\t\t\tv = c === 'x' ? r : (r & 0x3) | 0x8;\n\t\treturn v.toString(16);\n\t});\n};\n\nconst _getAvroType = (value, name = 'SubAutoGenerated') => {\n\tswitch (typeof value) {\n\t\tcase 'string':\n\t\t\tif (_isUUID(value)) {\n\t\t\t\treturn {\n\t\t\t\t\ttype: 'string',\n\t\t\t\t\tname: '_id',\n\t\t\t\t\tsize: 16,\n\t\t\t\t\tlogicalType: 'UUID',\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn 'string';\n\t\tcase 'number':\n\t\t\treturn Number.isInteger(value) ? 'int' : 'float';\n\t\tcase 'boolean':\n\t\t\treturn 'boolean';\n\t\tcase 'object':\n\t\t\tif (value === null) return 'null';\n\t\t\tif (Array.isArray(value)) return { type: 'array', items: _getAvroType(value[0]) };\n\t\t\treturn inferAvroType(value, name);\n\t\tdefault:\n\t\t\treturn 'string'; // Default to string for unknown types\n\t}\n};\n\nconst ensureIdFieldInSchema = (schema) => {\n\tconst idField = {\n\t\tname: '_id',\n\t\ttype: 'string',\n\t\tsize: 16,\n\t\tlogicalType: 'UUID',\n\t};\n\tif (typeof schema === 'undefined' || schema === null) {\n\t\treturn schema;\n\t}\n\n\tif (schema.type === 'record') {\n\t\tconst hasIdField = schema.fields.some((field) => field.name === '_id');\n\t\tif (!hasIdField) {\n\t\t\tschema.fields.unshift(idField);\n\t\t}\n\t} else if (schema.type === 'array' && schema.items.type === 'record') {\n\t\tconst hasIdField = schema.items.fields.some((field) => field.name === '_id');\n\t\tif (!hasIdField) {\n\t\t\tschema.items.fields.unshift(idField);\n\t\t}\n\t}\n\treturn schema;\n};\n\nconst inferAvroType = (data, typeName = 'AutoGenerated') => {\n\tif (Array.isArray(data)) {\n\t\tdata = data[0];\n\t}\n\tconst fields = Object.entries(data).map(([name, value]) => {\n\t\treturn { name, type: _getAvroType(value, `${typeName}.${name}`) };\n\t});\n\n\tconst schema = {\n\t\ttype: 'record',\n\t\tname: typeName,\n\t\tfields: fields,\n\t};\n\n\t// Ensure the _id field is present in the schema\n\treturn ensureIdFieldInSchema(schema);\n};\n\nconst _isUUID = (str) => {\n\tconst uuidV4Regex = /^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i;\n\treturn uuidV4Regex.test(str);\n};\n\nexport { matchesQuery, generateUUID, inferAvroType, ensureIdFieldInSchema };\n"], + "mappings": "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", "names": ["AWS_ALGORITHM", "AWS_REQUEST_TYPE", "S3_SERVICE", "LIST_TYPE", "UNSIGNED_PAYLOAD", "DEFAULT_STREAM_CONTENT_TYPE", "XML_CONTENT_TYPE", "JSON_CONTENT_TYPE", "SENSITIVE_KEYS_REDACTED", "HEADER_AMZ_CONTENT_SHA256", "HEADER_AMZ_DATE", "HEADER_HOST", "HEADER_AUTHORIZATION", "HEADER_CONTENT_TYPE", "HEADER_CONTENT_LENGTH", "HEADER_ETAG", "HEADER_LAST_MODIFIED", "ERROR_PREFIX", "ERROR_ACCESS_KEY_REQUIRED", "ERROR_SECRET_KEY_REQUIRED", "ERROR_ENDPOINT_REQUIRED", "ERROR_BUCKET_NAME_REQUIRED", "ERROR_KEY_REQUIRED", "ERROR_UPLOAD_ID_REQUIRED", "ERROR_PARTS_REQUIRED", "ERROR_INVALID_PART", "ERROR_DATA_BUFFER_REQUIRED", "ERROR_PREFIX_TYPE", "ERROR_MAX_KEYS_TYPE", "ERROR_DELIMITER_REQUIRED", "_createHmac", "_createHash", "expectArray", "encodeAsHex", "c", "uriEscape", "uriStr", "uriResourceEscape", "string", "S3", "accessKeyId", "secretAccessKey", "endpoint", "bucketName", "region", "maxRequestSizeInBytes", "requestAbortTimeout", "logger", "etag", "sanitizeETag", "props", "method", "key", "delimiter", "prefix", "maxKeys", "opts", "level", "message", "additionalData", "sanitize", "obj", "acc", "sanitizedData", "logEntry", "headers", "encodedKey", "url", "signedHeaders", "contentLength", "res", "filteredOpts", "conditionalHeaders", "error", "errorMessage", "keyPath", "query", "body", "datetime", "_hash", "canonicalHeaders", "canonicalRequest", "stringToSign", "signature", "authorizationHeader", "value", "credentialScope", "signingKey", "_hmac", "ifHeaders", "urlWithQuery", "responseBody", "lastModified", "data", "_parseXml", "output", "o", "i", "a", "_a", "_b", "_c", "wholeFile", "rangeFrom", "rangeTo", "fileType", "parsedResponse", "uploadId", "partNumber", "ETag", "parts", "part", "xmlBody", "toleratedStatusCodes", "errorBody", "errorCode", "queryParams", "dateStamp", "kDate", "kRegion", "kService", "content", "hashSum", "encoding", "hmacSum", "replaceChars", "m", "str", "unescapeXml", "json", "re", "match", "fullKey", "parsedValue", "avro", "lowstorage_ERROR_CODES", "lowstorageError", "message", "code", "SchemaValidationError", "lowstorageError", "message", "lowstorage_ERROR_CODES", "DocumentValidationError", "S3OperationError", "operation", "randomUUID", "matchesQuery", "document", "query", "key", "generateUUID", "c", "r", "v", "_getAvroType", "value", "name", "_isUUID", "inferAvroType", "ensureIdFieldInSchema", "schema", "idField", "field", "data", "typeName", "fields", "str", "MODULE_NAME", "DEFAULT_DELIMITER", "PROJECT_DIR_PREFIX", "COL_SUFFIX", "CHUNG_1MB", "CHUNG_5MB", "EMPTY_DATA", "errorValidationFn", "errorCode", "lowstorage_ERROR_CODES", "DocumentValidationError", "_hasColName", "colName", "lowstorageError", "lowstorage", "options", "N", "avro", "args", "requiredFields", "field", "listed", "entry", "error", "S3OperationError", "schema", "data", "SchemaValidationError", "wrapperType", "exists2", "autoCreate", "colPath", "colSchema", "Collection", "_Collection", "s3", "dirPrefix", "safeWrite", "chunkSize", "ensureIdFieldInSchema", "props", "etag", "offset", "bufferArr", "repeat", "nextDataResponse", "nextDataBody", "bufferedData", "dataBuffer", "currentETag", "resp", "newETag", "doc", "items", "schemaWithId", "inferAvroType", "avroType", "item", "generateUUID", "query", "start", "end", "matchesQuery", "update", "updatedCount", "i", "updatedDoc", "docIndex", "initialLength", "newData", "newColName", "newSchema", "createNew"] } diff --git a/package-lock.json b/package-lock.json index 9600b1a..0327fbf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,7 @@ "version": "2.0.0", "license": "MIT", "dependencies": { - "avro-js": "^1.11.3", + "avsc": "^5.7.7", "ultralight-s3": "^0.0.5" }, "devDependencies": { @@ -1716,12 +1716,12 @@ "printable-characters": "^1.0.42" } }, - "node_modules/avro-js": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/avro-js/-/avro-js-1.12.0.tgz", - "integrity": "sha512-mBhOjtHHua2MHrrgQ71YKKTGfZpS1sPvgL+QcCQ5SkUyp6qLkeTsCnQXUmATfpiOvoXB6CczzFEqn5UKbPUn3Q==", - "dependencies": { - "underscore": "^1.13.2" + "node_modules/avsc": { + "version": "5.7.7", + "resolved": "https://registry.npmjs.org/avsc/-/avsc-5.7.7.tgz", + "integrity": "sha512-9cYNccliXZDByFsFliVwk5GvTq058Fj513CiR4E60ndDwmuXzTJEp/Bp8FyuRmGyYupLjHLs+JA9/CBoVS4/NQ==", + "engines": { + "node": ">=0.11" } }, "node_modules/babel-jest": { @@ -4381,11 +4381,6 @@ "node": ">=16" } }, - "node_modules/underscore": { - "version": "1.13.7", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.7.tgz", - "integrity": "sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g==" - }, "node_modules/undici": { "version": "5.28.4", "resolved": "https://registry.npmjs.org/undici/-/undici-5.28.4.tgz", @@ -6246,13 +6241,10 @@ "printable-characters": "^1.0.42" } }, - "avro-js": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/avro-js/-/avro-js-1.12.0.tgz", - "integrity": "sha512-mBhOjtHHua2MHrrgQ71YKKTGfZpS1sPvgL+QcCQ5SkUyp6qLkeTsCnQXUmATfpiOvoXB6CczzFEqn5UKbPUn3Q==", - "requires": { - "underscore": "^1.13.2" - } + "avsc": { + "version": "5.7.7", + "resolved": "https://registry.npmjs.org/avsc/-/avsc-5.7.7.tgz", + "integrity": "sha512-9cYNccliXZDByFsFliVwk5GvTq058Fj513CiR4E60ndDwmuXzTJEp/Bp8FyuRmGyYupLjHLs+JA9/CBoVS4/NQ==" }, "babel-jest": { "version": "29.7.0", @@ -8206,11 +8198,6 @@ "resolved": "https://registry.npmjs.org/ultralight-s3/-/ultralight-s3-0.0.5.tgz", "integrity": "sha512-rCjL5ZJq2lgmWlofm8ShLNzShSB61dOTJ3IaRObDGjbaye8HVX6jxaxfx0UyVQlMS1tpochBxpynKumk+IZ5vw==" }, - "underscore": { - "version": "1.13.7", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.7.tgz", - "integrity": "sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g==" - }, "undici": { "version": "5.28.4", "resolved": "https://registry.npmjs.org/undici/-/undici-5.28.4.tgz", diff --git a/package.json b/package.json index f6b5455..43fc683 100644 --- a/package.json +++ b/package.json @@ -14,8 +14,8 @@ }, "scripts": { "test": "node --env-file ./.env --experimental-vm-modules node_modules/jest/bin/jest.js --config=jest.config.json --no-cache", - "build": "esbuild --bundle --minify --sourcemap --platform=node --target=node20 --format=esm --outfile=lib/lowstorage.js src/lowstorage.js --external:avro-js", - "dev": "esbuild --bundle --platform=node --target=node20 --format=esm --outfile=lib/lowstorage.js src/lowstorage.js --external:avro-js && node --env-file ./.env ./dev/dev-index.js" + "build": "esbuild --bundle --minify --sourcemap --platform=node --target=node20 --format=esm --outfile=lib/lowstorage.js src/lowstorage.js --external:avsc", + "dev": "esbuild --bundle --platform=node --target=node20 --format=esm --outfile=lib/lowstorage.js src/lowstorage.js --external:avsc && node --env-file ./.env ./dev/dev-index.js" }, "license": "MIT", "author": "Peter Jensen ", @@ -35,7 +35,7 @@ "wrangler": "^3.62.0" }, "dependencies": { - "avro-js": "^1.11.3", + "avsc": "^5.7.7", "ultralight-s3": "^0.0.5" }, "keywords": [ diff --git a/src/lowstorage.js b/src/lowstorage.js index 5bc50ea..902c49f 100644 --- a/src/lowstorage.js +++ b/src/lowstorage.js @@ -1,7 +1,7 @@ 'use strict'; import { S3 } from 'ultralight-s3'; -import avro from 'avro-js'; // eslint-disable-line +import avro from 'avsc'; // eslint-disable-line import { lowstorage_ERROR_CODES, lowstorageError, @@ -334,7 +334,6 @@ class Collection { */ constructor(colName, schema, s3, dirPrefix = PROJECT_DIR_PREFIX, safeWrite = false, chunkSize = CHUNG_5MB) { this._colName = colName; - this._s3 = s3; this._schema = ensureIdFieldInSchema(schema); this._dirPrefix = dirPrefix; diff --git a/src/lowstorage.test.js b/src/lowstorage.test.js index 0be851e..ad95db4 100644 --- a/src/lowstorage.test.js +++ b/src/lowstorage.test.js @@ -466,14 +466,12 @@ test('Document | cachcing and race conditions', async () => { // Test update with invalid schema // TODO - fix this - await expect(col.update({ name: 'Carlos2' }, { surname: 'CarlosesSurname' })).rejects.toThrow( - lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR, - ); - const updateCheck = col2.find({ name: 'Carlos' }); + await expect(col.update({ name: 'Carlos2' }, { surname: 'CarlosesSurname' })).rejects.toThrow(lowstorage_ERROR_CODES.UPDATE_ERROR); + const updateCheck = await col2.find({ name: 'Carlos2' }); expect(updateCheck).toBeDefined(); expect(updateCheck).toHaveLength(1); expect(updateCheck[0]).toHaveProperty('_id'); - expect(updateCheck[0]).toHaveProperty('name', 'Carlos'); + expect(updateCheck[0]).toHaveProperty('name', 'Carlos2'); expect(updateCheck[0]).toHaveProperty('age', 25); - expect(updateCheck[0]).not.toHaveProperty('surname', 'Carlos2'); + expect(updateCheck[0]).not.toHaveProperty('surname', 'CarlosesSurname'); }); From 5dd1a861767cb6e882d02743c8c16644c052e878 Mon Sep 17 00:00:00 2001 From: Jolly Good <1671375+good-lly@users.noreply.github.com> Date: Tue, 20 Aug 2024 11:12:04 +0200 Subject: [PATCH 12/18] rewrite to typescript --- build/lowstorage.js | 75 +++ build/lowstorage.js.map | 7 + esbuild.config.js | 26 + importify-esbuild-output.js | 15 + lib/errors.d.ts | 19 + lib/errors.js | 55 +++ lib/errors.js.map | 1 + lib/helpers.d.ts | 7 + lib/helpers.js | 96 ++++ lib/helpers.js.map | 1 + lib/lowstorage.d.ts | 251 ++++++++++ lib/lowstorage.js | 699 ++++++++++++++++++++++++++- lib/lowstorage.js.map | 8 +- package-lock.json | 80 ++- package.json | 6 +- src/errors.js | 64 --- src/errors.ts | 71 +++ src/{helpers.js => helpers.ts} | 34 +- src/lowstorage.test.js | 2 +- src/{lowstorage.js => lowstorage.ts} | 274 ++++++----- tsconfig.json | 134 ++--- 21 files changed, 1571 insertions(+), 354 deletions(-) create mode 100644 build/lowstorage.js create mode 100644 build/lowstorage.js.map create mode 100644 esbuild.config.js create mode 100644 importify-esbuild-output.js create mode 100644 lib/errors.d.ts create mode 100644 lib/errors.js create mode 100644 lib/errors.js.map create mode 100644 lib/helpers.d.ts create mode 100644 lib/helpers.js create mode 100644 lib/helpers.js.map create mode 100644 lib/lowstorage.d.ts delete mode 100644 src/errors.js create mode 100644 src/errors.ts rename src/{helpers.js => helpers.ts} (65%) rename src/{lowstorage.js => lowstorage.ts} (82%) diff --git a/build/lowstorage.js b/build/lowstorage.js new file mode 100644 index 0000000..7492a02 --- /dev/null +++ b/build/lowstorage.js @@ -0,0 +1,75 @@ +import ct from"util";import St from"buffer";import{randomUUID as ze}from"node:crypto";var At=Object.create,ft=Object.defineProperty,kt=Object.getOwnPropertyDescriptor,ht=Object.getOwnPropertyNames,Nt=Object.getPrototypeOf,$t=Object.prototype.hasOwnProperty;var De=(n,u)=>function(){return u||(0,n[ht(n)[0]])((u={exports:{}}).exports,u),u.exports},It=(n,u,o,p)=>{if(u&&typeof u=="object"||typeof u=="function")for(let d of ht(u))!$t.call(n,d)&&d!==o&&ft(n,d,{get:()=>u[d],enumerable:!(p=kt(u,d))||p.enumerable});return n},xt=(n,u,o)=>(o=n!=null?At(Nt(n)):{},It(u||!n||!n.__esModule?ft(o,"default",{value:n,enumerable:!0}):o,n)),lt=De({"node_modules/@avro/types/lib/utils.js"(n,u){"use strict";var o=new v(4096);function p(a){return typeof Buffer.alloc=="function"?Buffer.alloc(a):new Buffer(a)}function d(a,f){return typeof Buffer.from=="function"?Buffer.from(a,f):new Buffer(a,f)}function g(a){return a.charAt(0).toUpperCase()+a.slice(1)}function b(a,f){return a===f?0:af?p(a):(this._pos+a>f&&(this._slab=p(f),this._pos=0),this._slab.slice(this._pos,this._pos+=a))};function s(a,f){if(this.buf=a,this.pos=f|0,this.pos<0)throw new Error("negative offset")}s.prototype.isValid=function(){return this.pos<=this.buf.length},s.prototype.readBoolean=function(){return!!this.buf[this.pos++]},s.prototype.skipBoolean=function(){this.pos++},s.prototype.writeBoolean=function(a){this.buf[this.pos++]=!!a},s.prototype.readInt=s.prototype.readLong=function(){var a=0,f=0,_=this.buf,m,S,$,R;do m=_[this.pos++],S=m&128,a|=(m&127)<>1^-(a&1)},s.prototype.skipInt=s.prototype.skipLong=function(){for(var a=this.buf;a[this.pos++]&128;);},s.prototype.writeInt=s.prototype.writeLong=function(a){var f=this.buf,_,m;if(a>=-1073741824&&a<1073741824){m=a>=0?a<<1:~a<<1|1;do f[this.pos]=m&127,m>>=7;while(m&&(f[this.pos++]|=128))}else{_=a>=0?a*2:-a*2-1;do f[this.pos]=_&127,_/=128;while(_>=1&&(f[this.pos++]|=128))}this.pos++},s.prototype.readFloat=function(){var a=this.buf,f=this.pos;if(this.pos+=4,!(this.pos>a.length))return this.buf.readFloatLE(f)},s.prototype.skipFloat=function(){this.pos+=4},s.prototype.writeFloat=function(a){var f=this.buf,_=this.pos;if(this.pos+=4,!(this.pos>f.length))return this.buf.writeFloatLE(a,_)},s.prototype.readDouble=function(){var a=this.buf,f=this.pos;if(this.pos+=8,!(this.pos>a.length))return this.buf.readDoubleLE(f)},s.prototype.skipDouble=function(){this.pos+=8},s.prototype.writeDouble=function(a){var f=this.buf,_=this.pos;if(this.pos+=8,!(this.pos>f.length))return this.buf.writeDoubleLE(a,_)},s.prototype.readFixed=function(a){var f=this.pos;if(this.pos+=a,!(this.pos>this.buf.length)){var _=o.alloc(a);return this.buf.copy(_,0,f,f+a),_}},s.prototype.skipFixed=function(a){this.pos+=a},s.prototype.writeFixed=function(a,f){f=f||a.length;var _=this.pos;this.pos+=f,!(this.pos>this.buf.length)&&a.copy(this.buf,_,0,f)},s.prototype.readBytes=function(){return this.readFixed(this.readLong())},s.prototype.skipBytes=function(){var a=this.readLong();this.pos+=a},s.prototype.writeBytes=function(a){var f=a.length;this.writeLong(f),this.writeFixed(a,f)},typeof Buffer.prototype.utf8Slice=="function"?s.prototype.readString=function(){var a=this.readLong(),f=this.pos,_=this.buf;if(this.pos+=a,!(this.pos>_.length))return this.buf.utf8Slice(f,f+a)}:s.prototype.readString=function(){var a=this.readLong(),f=this.pos,_=this.buf;if(this.pos+=a,!(this.pos>_.length))return this.buf.slice(f,f+a).toString()},s.prototype.skipString=function(){var a=this.readLong();this.pos+=a},s.prototype.writeString=function(a){var f=Buffer.byteLength(a),_=this.buf;this.writeLong(f);var m=this.pos;if(this.pos+=f,!(this.pos>_.length))if(f>64)this._writeUtf8(a,f);else{var S,$,R,B;for(S=0,$=f;S<$;S++)R=a.charCodeAt(S),R<128?_[m++]=R:R<2048?(_[m++]=R>>6|192,_[m++]=R&63|128):(R&64512)===55296&&((B=a.charCodeAt(S+1))&64512)===56320?(R=65536+((R&1023)<<10)+(B&1023),S++,_[m++]=R>>18|240,_[m++]=R>>12&63|128,_[m++]=R>>6&63|128,_[m++]=R&63|128):(_[m++]=R>>12|224,_[m++]=R>>6&63|128,_[m++]=R&63|128)}},typeof Buffer.prototype.utf8Write=="function"?s.prototype._writeUtf8=function(a,f){this.buf.utf8Write(a,this.pos-f,f)}:s.prototype._writeUtf8=function(a,f){this.buf.write(a,this.pos-f,f,"utf8")},typeof Buffer.prototype.latin1Write=="function"?s.prototype.writeBinary=function(a,f){var _=this.pos;this.pos+=f,!(this.pos>this.buf.length)&&this.buf.latin1Write(a,_,f)}:typeof Buffer.prototype.binaryWrite=="function"?s.prototype.writeBinary=function(a,f){var _=this.pos;this.pos+=f,!(this.pos>this.buf.length)&&this.buf.binaryWrite(a,_,f)}:s.prototype.writeBinary=function(a,f){var _=this.pos;this.pos+=f,!(this.pos>this.buf.length)&&this.buf.write(a,_,f,"binary")},s.prototype.matchBoolean=function(a){return this.buf[this.pos++]-a.buf[a.pos++]},s.prototype.matchInt=s.prototype.matchLong=function(a){var f=this.readLong(),_=a.readLong();return f===_?0:f<_?-1:1},s.prototype.matchFloat=function(a){var f=this.readFloat(),_=a.readFloat();return f===_?0:f<_?-1:1},s.prototype.matchDouble=function(a){var f=this.readDouble(),_=a.readDouble();return f===_?0:f<_?-1:1},s.prototype.matchFixed=function(a,f){return this.readFixed(f).compare(a.readFixed(f))},s.prototype.matchBytes=s.prototype.matchString=function(a){var f=this.readLong(),_=this.pos;this.pos+=f;var m=a.readLong(),S=a.pos;a.pos+=m;var $=this.buf.slice(_,this.pos),R=a.buf.slice(S,a.pos);return $.compare(R)},s.prototype.unpackLongBytes=function(){var a=p(8),f=0,_=0,m=6,S=this.buf,$,R;for($=S[this.pos++],R=$&1,a.fill(0),f|=($&127)>>1;$&128;)$=S[this.pos++],f|=($&127)<=8&&(m-=8,a[_++]=f,f>>=8);return a[_]=f,R&&w(a,8),a},s.prototype.packLongBytes=function(a){var f=(a[7]&128)>>7,_=this.buf,m=1,S=0,$=3,R;f?(w(a,8),R=1):R=0;for(var B=[a.readUIntLE(0,3),a.readUIntLE(3,3),a.readUIntLE(6,2)];$&&!B[--$];);for(;S<$;)for(R|=B[S++]<7;)_[this.pos++]=R&127|128,R>>=7,m-=7;R|=B[$]<>=7;while(R&&(_[this.pos++]|=128));this.pos++,f&&w(a,8)};function w(a,f){for(;f--;)a[f]=~a[f]}u.exports={Tap:s,abstractFunction:V,bufferFrom:d,capitalize:g,compare:b,hasDuplicates:T,isType:F,jsonEquals:O,newBuffer:p,toMap:l,unqualifyName:x}}}),jt=De({"node_modules/@avro/types/lib/values.js"(n,u){"use strict";var o=lt(),p=ct,d=p.format;function g(v,s,w){return l("FROM_JSON",v,s,w)}function b(v,s,w){return l("FROM_DEFAULT_JSON",v,s,w)}function O(v,s,w){return l("TO_JSON",v,s,w)}function l(v,s,w,a){return new x(v,a).clone(s,w,[]).build(w)}function T(){this.value=void 0,this.errors=[]}T.prototype.isOk=function(){return!this.errors.length},T.prototype.build=function(v){if(!this.errors.length)return this.value;var s=[],w,a;for(w=0,a=this.errors.length;w",Qe(this.typeName))},s.prototype._attrs=function(e){e.derefed=e.derefed||{};var t=this.name;if(t!==void 0){if(e.noDeref||e.derefed[t])return t;e.derefed[t]=!0}var r={};this.name!==void 0&&(r.name=t),r.type=this.typeName;var i=this._deref(r,e);return i!==void 0&&(r=i),e.exportAttrs&&(this.aliases&&this.aliases.length&&(r.aliases=this.aliases),this.doc!==void 0&&(r.doc=this.doc)),r},s.prototype._createBranchConstructor=function(){var e=this.branchName;if(e==="null")return null;var t=~e.indexOf(".")?"this['"+e+"']":"this."+e,r="return function Branch$(val) { "+t+" = val; };",i=new Function(r)(),c=new Function("return ''");Object.defineProperty(i.prototype,"toString",{get:function(){return c}});var h=this;i.type=h,Object.defineProperty(i.prototype,"type",{get:function(){return h}});var y=new Function("return "+t+";");return Object.defineProperty(i.prototype,"unwrap",{get:function(){return y}}),i},s.prototype._peek=function(e){var t=e.pos,r=this._read(e);return e.pos=t,r},s.prototype._check=o.abstractFunction,s.prototype._deref=o.abstractFunction,s.prototype._match=o.abstractFunction,s.prototype._read=o.abstractFunction,s.prototype._skip=o.abstractFunction,s.prototype._update=o.abstractFunction,s.prototype._write=o.abstractFunction,s.prototype.decode=s.prototype.binaryDecodeAt,s.prototype.encode=s.prototype.binaryEncodeAt,s.prototype.fromBuffer=s.prototype.binaryDecode,s.prototype.toBuffer=s.prototype.binaryEncode,s.prototype.compareBuffers=s.prototype.binaryCompare;function w(e){s.call(this),this._branchConstructor=this._createBranchConstructor(),e||Object.freeze(this)}g.inherits(w,s),w.prototype._update=function(e,t){t.typeName===this.typeName&&(e._read=this._read)},w.prototype._deref=function(){return this.typeName},w.prototype.compare=o.compare;function a(){w.call(this)}g.inherits(a,w),a.prototype._check=function(e,t,r){var i=e===null;return!i&&r&&r(e,this),i},a.prototype._read=function(){return null},a.prototype._skip=function(){},a.prototype._write=function(e,t){t!==null&&X(t,this)},a.prototype._match=function(){return 0},a.prototype.compare=a.prototype._match,a.prototype.typeName="null";function f(){w.call(this)}g.inherits(f,w),f.prototype._check=function(e,t,r){var i=typeof e=="boolean";return!i&&r&&r(e,this),i},f.prototype._read=function(e){return e.readBoolean()},f.prototype._skip=function(e){e.skipBoolean()},f.prototype._write=function(e,t){typeof t!="boolean"&&X(t,this),e.writeBoolean(t)},f.prototype._match=function(e,t){return e.matchBoolean(t)},f.prototype.typeName="boolean";function _(){w.call(this)}g.inherits(_,w),_.prototype._check=function(e,t,r){var i=e===(e|0);return!i&&r&&r(e,this),i},_.prototype._read=function(e){return e.readInt()},_.prototype._skip=function(e){e.skipInt()},_.prototype._write=function(e,t){t!==(t|0)&&X(t,this),e.writeInt(t)},_.prototype._match=function(e,t){return e.matchInt(t)},_.prototype.typeName="int";function m(){w.call(this)}g.inherits(m,w),m.prototype._check=function(e,t,r){var i=typeof e=="number"&&e%1===0&&Be(e);return!i&&r&&r(e,this),i},m.prototype._read=function(e){var t=e.readLong();if(!Be(t))throw new Error("potential precision loss");return t},m.prototype._skip=function(e){e.skipLong()},m.prototype._write=function(e,t){(typeof t!="number"||t%1||!Be(t))&&X(t,this),e.writeLong(t)},m.prototype._match=function(e,t){return e.matchLong(t)},m.prototype._update=function(e,t){switch(t.typeName){case"int":e._read=t._read;break;case"abstract:long":case"long":e._read=this._read}},m.prototype.typeName="long",m.__with=function(e,t){e=e||{};var r={toBuffer:"_toBuffer",fromBuffer:"_fromBuffer",fromJSON:"_fromJSON",toJSON:"_toJSON",isValid:"_isValid",compare:"compare"},i=new ie(t);return Object.keys(r).forEach(function(c){if(e[c]===void 0)throw new Error(l("missing method implementation: %s",c));i[r[c]]=e[c]}),Object.freeze(i)};function S(){w.call(this)}g.inherits(S,w),S.prototype._check=function(e,t,r){var i=typeof e=="number";return!i&&r&&r(e,this),i},S.prototype._read=function(e){return e.readFloat()},S.prototype._skip=function(e){e.skipFloat()},S.prototype._write=function(e,t){typeof t!="number"&&X(t,this),e.writeFloat(t)},S.prototype._match=function(e,t){return e.matchFloat(t)},S.prototype._update=function(e,t){switch(t.typeName){case"float":case"int":e._read=t._read;break;case"abstract:long":case"long":e._read=function(r){return r.readLong()}}},S.prototype.typeName="float";function $(){w.call(this)}g.inherits($,w),$.prototype._check=function(e,t,r){var i=typeof e=="number";return!i&&r&&r(e,this),i},$.prototype._read=function(e){return e.readDouble()},$.prototype._skip=function(e){e.skipDouble()},$.prototype._write=function(e,t){typeof t!="number"&&X(t,this),e.writeDouble(t)},$.prototype._match=function(e,t){return e.matchDouble(t)},$.prototype._update=function(e,t){switch(t.typeName){case"double":case"float":case"int":e._read=t._read;break;case"abstract:long":case"long":e._read=function(r){return r.readLong()}}},$.prototype.typeName="double";function R(){w.call(this)}g.inherits(R,w),R.prototype._check=function(e,t,r){var i=typeof e=="string";return!i&&r&&r(e,this),i},R.prototype._read=function(e){return e.readString()},R.prototype._skip=function(e){e.skipString()},R.prototype._write=function(e,t){typeof t!="string"&&X(t,this),e.writeString(t)},R.prototype._match=function(e,t){return e.matchString(t)},R.prototype._update=function(e,t){switch(t.typeName){case"bytes":case"string":e._read=this._read}},R.prototype.typeName="string";function B(){w.call(this)}g.inherits(B,w),B.prototype._check=function(e,t,r){var i=Buffer.isBuffer(e);return!i&&r&&r(e,this),i},B.prototype._read=function(e){return e.readBytes()},B.prototype._skip=function(e){e.skipBytes()},B.prototype._write=function(e,t){Buffer.isBuffer(t)||X(t,this),e.writeBytes(t)},B.prototype._match=function(e,t){return e.matchBytes(t)},B.prototype._update=R.prototype._update,B.prototype.compare=Buffer.compare,B.prototype.typeName="bytes";function G(e,t,r){if(s.call(this),!Array.isArray(e))throw new Error(l("non-array union schema: %j",e));if(!e.length)throw new Error("empty union");this.types=Object.freeze(e.map(function(i){return s.forSchema(i,t,r)})),this._branchIndices={},this.types.forEach(function(i,c){if(o.isType(i,"union"))throw new Error("unions cannot be directly nested");var h=i.branchName;if(this._branchIndices[h]!==void 0)throw new Error(l("duplicate union branch name: %j",h));this._branchIndices[h]=c},this)}g.inherits(G,s),G.prototype._branchConstructor=function(){throw new Error("unions cannot be directly wrapped")},G.prototype._skip=function(e){this.types[e.readLong()]._skip(e)},G.prototype._match=function(e,t){var r=e.readLong(),i=t.readLong();return r===i?this.types[r]._match(e,t):r",H}function pe(){return D.wrap(this)}},W.prototype._createChecker=function(){var e=[],t=[],r=this._getConstructorName(),i="return function check"+r+`(v, f, h, p) { +`;if(i+=` if ( +`,i+=` v === null || +`,i+=` typeof v != 'object' || +`,i+=` (f && !this._checkFields(v)) +`,i+=` ) { +`,i+=` if (h) { h(v, this); } +`,i+=` return false; +`,i+=` } +`,!this.fields.length)i+=` return true; +`;else{for(c=0,h=this.fields.length;c1)throw new Error(l("ambiguous aliasing for %s.%s (%s)",t.name,U.name,P));if(P.length)q=P[0],j={resolver:U.type.createResolver(h[q].type,r),name:"_"+U.name},E[q]?E[q].push(j):E[q]=[j],y.push(j.name);else{if(U.defaultValue()===void 0)throw new Error(l("no matching field for default-less %s.%s",t.name,U.name));y.push("undefined")}}var D=-1;for(N=c.length;N&&E[c[--N].name]===void 0;)D=N;var le=this._getConstructorName(),ue=[le],ce=[this.recordConstructor],J=" return function read"+le+`(t, b) { +`,fe;for(this._sizeProp&&(J+=` var c = 0; + var p; +`),N=0;N=D?" ":" ",U=t.fields[N],q=U.name,E[q]===void 0)ue.push("r"+N),ce.push(U.type),J+=fe+"r"+N+`._skip(t); +`;else{for(A=E[q].length,this._sizeProp&&(J+=fe+`p = t.pos; +`);A--;)ue.push("r"+N+"f"+A),j=E[q][A],ce.push(j.resolver),J+=fe+"var "+j.name+" = ",J+="r"+N+"f"+A+"._"+(A?"peek":"read")+`(t); +`;this._sizeProp&&(J+=fe+`c += t.pos-p; +`)}~D&&(J+=` } +`),J+=" var v = new "+le+"("+y.join()+`); +`,this._sizeProp&&(J+=` Object.defineProperty(v, s, {value: c, writable: true}); +`,ce.push(this._sizeProp),ue.push("s")),J+=` return v; +};`,e._read=new Function(ue.join(),J).apply(void 0,ce)},W.prototype._match=function(e,t){var r=this.fields,i,c,h,y,E;for(i=0,c=r.length;i=-9007199254740990&&e<=9007199254740990}function Te(e){return F.test(e)}function X(e,t){throw new Error(l("invalid %j: %j",t.schema(),e))}function Ue(e,t){var r=o.unqualifyName(e);return me(r)?r:We(e,t)}function $e(e){var t=e.typeName;switch(t){case"double":case"float":case"int":case"long":return"number";case"bytes":case"fixed":return"buffer";case"enum":return"string";case"map":case"error":case"record":return"object";default:return t}}function Xe(e){if(e===null)return"null";var t=typeof e;if(t==="object"){if(Array.isArray(e))return"array";if(Buffer.isBuffer(e))return"buffer"}return t}function wt(e){var t={},r,i,c,h;for(r=0,i=e.length;rr&&(r=E,i=y);return i}function Et(e,t,r){var i={},c,h,y,E;for(c=0,h=e.length;c0){var Rt=pe[0];pe[0]=pe[H],pe[H]=Rt,_e=s.forSchema(pe,t,fe)}}return{name:J,type:_e,default:h[J]}})}:ce={type:"map",values:s.forTypes(i,t,r.child("*"))},s.forSchema(ce,t,r)}u.exports={constructors:function(){var e={Type:s,LogicalType:re,UnwrappedUnionType:M,WrappedUnionType:Q},t=Object.keys(T),r,i,c;for(r=0,i=t.length;r"u"&&typeof dt>"u"&&console.error("ultralight-S3 Module: Crypto functions are not available, please report the issue with necessary description: https://github.com/sentienhq/ultralight-s3/issues");var Gt={contents:!0},Kt=n=>`%${n.charCodeAt(0).toString(16).toUpperCase()}`,He=n=>encodeURIComponent(n).replace(/[!'()*]/g,Kt),ae=n=>He(n).replace(/%2F/g,"/"),Jt=class{constructor({accessKeyId:n,secretAccessKey:u,endpoint:o,bucketName:p,region:d="auto",maxRequestSizeInBytes:g=5242880,requestAbortTimeout:b=void 0,logger:O=void 0}){this.getBucketName=()=>this.bucketName,this.setBucketName=l=>{this.bucketName=l},this.getRegion=()=>this.region,this.setRegion=l=>{this.region=l},this.getEndpoint=()=>this.endpoint,this.setEndpoint=l=>{this.endpoint=l},this.getMaxRequestSizeInBytes=()=>this.maxRequestSizeInBytes,this.setMaxRequestSizeInBytes=l=>{this.maxRequestSizeInBytes=l},this.sanitizeETag=l=>Se(l),this.getProps=()=>({accessKeyId:this.accessKeyId,secretAccessKey:this.secretAccessKey,region:this.region,bucket:this.bucketName,endpoint:this.endpoint,maxRequestSizeInBytes:this.maxRequestSizeInBytes,requestAbortTimeout:this.requestAbortTimeout,logger:this.logger}),this.setProps=l=>{this._validateConstructorParams(l.accessKeyId,l.secretAccessKey,l.bucketName,l.endpoint),this.accessKeyId=l.accessKeyId,this.secretAccessKey=l.secretAccessKey,this.region=l.region||"auto",this.bucketName=l.bucketName,this.endpoint=l.endpoint,this.maxRequestSizeInBytes=l.maxRequestSizeInBytes||5242880,this.requestAbortTimeout=l.requestAbortTimeout,this.logger=l.logger},this._validateConstructorParams(n,u,o,p),this.accessKeyId=n,this.secretAccessKey=u,this.endpoint=o,this.bucketName=p,this.region=d,this.maxRequestSizeInBytes=g,this.requestAbortTimeout=b,this.logger=O}_validateConstructorParams(n,u,o,p){if(typeof n!="string"||n.trim().length===0)throw new TypeError(Mt);if(typeof u!="string"||u.trim().length===0)throw new TypeError(zt);if(typeof o!="string"||o.trim().length===0)throw new TypeError(qt);if(typeof p!="string"||p.trim().length===0)throw new TypeError(Ht)}_checkMethodHeadnGet(n){if(n!=="GET"&&n!=="HEAD")throw this._log("error",`${L}method must be either GET or HEAD`),new Error("method must be either GET or HEAD")}_checkKey(n){if(typeof n!="string"||n.trim().length===0)throw this._log("error",rt),new TypeError(rt)}_checkDelimiter(n){if(typeof n!="string"||n.trim().length===0)throw this._log("error",at),new TypeError(at)}_checkPrefix(n){if(typeof n!="string")throw this._log("error",ot),new TypeError(ot)}_checkMaxKeys(n){if(typeof n!="number"||n<=0)throw this._log("error",st),new TypeError(st)}_checkOpts(n){if(typeof n!="object")throw this._log("error",`${L}opts must be an object`),new TypeError(`${L}opts must be an object`)}_log(n,u,o={}){if(this.logger&&typeof this.logger[n]=="function"){let p=b=>typeof b!="object"||b===null?b:Object.keys(b).reduce((O,l)=>(Pt.includes(l.toLowerCase())?O[l]="[REDACTED]":typeof b[l]=="object"&&b[l]!==null?O[l]=p(b[l]):O[l]=b[l],O),Array.isArray(b)?[]:{}),d=p(o),g={timestamp:new Date().toISOString(),level:n,message:u,...d,context:p({bucketName:this.bucketName,region:this.region,endpoint:this.endpoint,accessKeyId:this.accessKeyId?`${this.accessKeyId.substring(0,4)}...`:void 0})};this.logger[n](g)}}async getContentLength(n){this._checkKey(n);let u={[oe]:ne},o=ae(n),{url:p,headers:d}=await this._sign("HEAD",o,{},u,""),g=(await this._sendRequest(p,"HEAD",d)).headers.get(we);return g?parseInt(g,10):0}async bucketExists(){let n={[oe]:ne},{url:u,headers:o}=await this._sign("HEAD","",{},n,""),p=await this._sendRequest(u,"HEAD",o);return!!(p.ok&&p.status===200)}async fileExists(n,u={}){this._checkKey(n);let{filteredOpts:o,conditionalHeaders:p}=this._filterIfHeaders(u),d={[oe]:ne,...p},g=ae(n),{url:b,headers:O}=await this._sign("HEAD",g,o,d,"");try{let l=await this._sendRequest(b,"HEAD",O,"",[200,404,412,304]);return l.status===404?!1:l.status===412||l.status===304?null:l.ok&&l.status===200?!0:(this._handleErrorResponse(l),!1)}catch(l){let T=l instanceof Error?l.message:String(l);throw this._log("error",`${L}Failed to check if file exists: ${T}`),new Error(`${L}Failed to check if file exists: ${T}`)}}async _sign(n,u,o,p,d){let g=new Date().toISOString().replace(/[:-]|\.\d{3}/g,""),b=typeof u=="string"&&u.length>0?new URL(u,this.endpoint):new URL(this.endpoint);b.pathname=`/${encodeURI(this.bucketName)}${b.pathname}`,p[oe]=d?await Le(d):ne,p[Bt]=g,p[Ut]=b.host;let O=this._buildCanonicalHeaders(p),l=Object.keys(p).map(v=>v.toLowerCase()).sort().join(";"),T=await this._buildCanonicalRequest(n,b,o,O,l,d),F=await this._buildStringToSign(g,T),x=await this._calculateSignature(g,F),V=this._buildAuthorizationHeader(g,l,x);return p[Vt]=V,{url:b.toString(),headers:p}}_buildCanonicalHeaders(n){return Object.entries(n).map(([u,o])=>`${u.toLowerCase()}:${String(o).trim()}`).sort().join(` +`)}async _buildCanonicalRequest(n,u,o,p,d,g){return[n,u.pathname,this._buildCanonicalQueryString(o),`${p} +`,d,g?await Le(g):ne].join(` +`)}async _buildStringToSign(n,u){let o=[n.slice(0,8),this.region,Me,Ve].join("/");return[Ye,n,o,await Le(u)].join(` +`)}async _calculateSignature(n,u){let o=await this._getSignatureKey(n.slice(0,8));return Re(o,u,"hex")}_buildAuthorizationHeader(n,u,o){let p=[n.slice(0,8),this.region,Me,Ve].join("/");return[`${Ye} Credential=${this.accessKeyId}/${p}`,`SignedHeaders=${u}`,`Signature=${o}`].join(", ")}_filterIfHeaders(n){let u={},o={},p=["if-match","if-none-match","if-modified-since","if-unmodified-since"];for(let[d,g]of Object.entries(n))p.includes(d)?o[d]=g:u[d]=g;return{filteredOpts:u,conditionalHeaders:o}}async list(n="/",u="",o=1e3,p="GET",d={}){this._checkDelimiter(n),this._checkPrefix(u),this._checkMaxKeys(o),this._checkMethodHeadnGet(p),this._checkOpts(d),this._log("info",`Listing objects in ${u}`);let g={"list-type":Dt,"max-keys":String(o),...d};u.length>0&&(g.prefix=u);let b={[he]:ge,[oe]:ne},O=n==="/"?n:He(n),{url:l,headers:T}=await this._sign("GET",O,g,b,""),F=`${l}?${new URLSearchParams(g)}`,x=await this._sendRequest(F,"GET",T),V=await x.text();if(p==="HEAD"){let w=x.headers.get(we),a=x.headers.get(tt),f=x.headers.get(et);return{size:w?+w:void 0,mtime:a?new Date(a):void 0,ETag:f||void 0}}let v=Ee(V),s=v.listBucketResult||v.error||v;return s.contents||s}async listMultiPartUploads(n="/",u="",o="GET",p={}){var d,g,b;this._checkDelimiter(n),this._checkPrefix(u),this._checkMethodHeadnGet(o),this._checkOpts(p),this._log("info",`Listing multipart uploads in ${u}`);let O={uploads:"",...p},l={[he]:ge,[oe]:ne},T=n==="/"?n:He(n),{url:F,headers:x}=await this._sign("GET",T,O,l,""),V=`${F}?${new URLSearchParams(O)}`,v=await this._sendRequest(V,"GET",x),s=await v.text();if(o==="HEAD")return{size:+((d=v.headers.get(we))!==null&&d!==void 0?d:"0"),mtime:new Date((g=v.headers.get(tt))!==null&&g!==void 0?g:""),ETag:(b=v.headers.get(et))!==null&&b!==void 0?b:""};let w=Ee(s),a=w.listMultipartUploadsResult||w.error||w;return a.uploads||a}async get(n,u={}){this._checkKey(n),this._log("info",`Getting object ${n}`);let{filteredOpts:o,conditionalHeaders:p}=this._filterIfHeaders(u),d={[he]:ge,[oe]:ne,...p},g=ae(n),{url:b,headers:O}=await this._sign("GET",g,o,d,""),l=await this._sendRequest(b,"GET",O,"",[200,404,412,304]);if(l.status===404||l.status===412||l.status===304)return this._log("error",`Failed to get object. Status: ${l.status}`),null;if(!l.ok)throw this._log("error",`Failed to get object. Status: ${l.status}`),new Error(`Failed to get object. Status: ${l.status}`);return l.text()}async getObjectWithETag(n,u={}){this._checkKey(n),this._log("info",`Getting object ${n}`);let{filteredOpts:o,conditionalHeaders:p}=this._filterIfHeaders(u),d={[he]:ge,[oe]:ne,...p},g=ae(n),{url:b,headers:O}=await this._sign("GET",g,o,d,"");try{let l=await this._sendRequest(b,"GET",O,"",[200,404,412,304]);if(l.status===404||l.status===412||l.status===304)return this._log("error",`Failed to get object. Status: ${l.status}`),{etag:null,data:null};if(!l.ok)throw this._log("error",`Failed to get object. Status: ${l.status}`),new Error(`Failed to get object. Status: ${l.status}`);let T=l.headers.get("etag");if(!T)throw new Error("ETag not found in response headers");let F=await l.text();return{etag:Se(T),data:F}}catch(l){throw this._log("error",`Error getting object ${n} with ETag: ${l}`),l}}async getEtag(n,u={}){this._checkKey(n),this._log("info",`Getting etag object ${n}`);let{filteredOpts:o,conditionalHeaders:p}=this._filterIfHeaders(u),d={[he]:ge,[oe]:ne,...p},g=ae(n),{url:b,headers:O}=await this._sign("HEAD",g,o,d,""),l=await this._sendRequest(b,"HEAD",O,"",[200,412,304]);if(this._log("info",`Response status: ${l.status,l.statusText}`),l.status===412||l.status===304)return null;let T=l.headers.get("etag");if(!T)throw this._log("error","ETag not found in response headers"),new Error("ETag not found in response headers");return Se(T)}async getResponse(n,u=!0,o=0,p=this.maxRequestSizeInBytes,d={}){this._checkKey(n);let{filteredOpts:g,conditionalHeaders:b}=this._filterIfHeaders({...d}),O={[he]:ge,[oe]:ne,...u?{}:{range:`bytes=${o}-${p-1}`},...b},l=ae(n),{url:T,headers:F}=await this._sign("GET",l,g,O,""),x=`${T}?${new URLSearchParams(g)}`;return this._sendRequest(x,"GET",F)}async put(n,u){if(this._checkKey(n),!(u instanceof Buffer||typeof u=="string"))throw this._log("error",je),new TypeError(je);this._log("info",`Uploading object ${n}`);let o=typeof u=="string"?Buffer.byteLength(u):u.length,p={[we]:o},d=ae(n),{url:g,headers:b}=await this._sign("PUT",d,{},p,u);return await this._sendRequest(g,"PUT",b,u)}async getMultipartUploadId(n,u=Ft){if(this._checkKey(n),typeof u!="string")throw this._log("error",`${L}fileType must be a string`),new TypeError(`${L}fileType must be a string`);this._log("info",`Initiating multipart upload for object ${n}`);let o={uploads:""},p={[he]:u,[oe]:ne},d=ae(n),{url:g,headers:b}=await this._sign("POST",d,o,p,""),O=`${g}?${new URLSearchParams(o)}`,l=await(await this._sendRequest(O,"POST",b)).text(),T=Ee(l);if(typeof T=="object"&&T!==null&&"error"in T&&typeof T.error=="object"&&T.error!==null&&"message"in T.error){let F=String(T.error.message);throw this._log("error",`${L}Failed to abort multipart upload: ${F}`),new Error(`${L}Failed to abort multipart upload: ${F}`)}if(typeof T=="object"&&T!==null){if(!T.initiateMultipartUploadResult||!T.initiateMultipartUploadResult.uploadId)throw this._log("error",`${L}Failed to create multipart upload: no uploadId in response`),new Error(`${L}Failed to create multipart upload: Missing upload ID in response`);return T.initiateMultipartUploadResult.uploadId}else throw this._log("error",`${L}Failed to create multipart upload: unexpected response format`),new Error(`${L}Failed to create multipart upload: Unexpected response format`)}async uploadPart(n,u,o,p,d={}){this._validateUploadPartParams(n,u,o,p,d);let g={uploadId:o,partNumber:p,...d},b={[we]:u.length},O=ae(n),{url:l,headers:T}=await this._sign("PUT",O,g,b,u),F=`${l}?${new URLSearchParams(g)}`,x=await this._sendRequest(F,"PUT",T,u),V=Se(x.headers.get("etag")||"");return{partNumber:p,ETag:V}}_validateUploadPartParams(n,u,o,p,d){if(this._checkKey(n),!(u instanceof Buffer||typeof u=="string"))throw this._log("error",je),new TypeError(je);if(typeof o!="string"||o.trim().length===0)throw this._log("error",be),new TypeError(be);if(!Number.isInteger(p)||p<=0)throw this._log("error",`${L}partNumber must be a positive integer`),new TypeError(`${L}partNumber must be a positive integer`);this._checkOpts(d)}async completeMultipartUpload(n,u,o){if(this._checkKey(n),typeof u!="string"||u.trim().length===0)throw this._log("error",be),new TypeError(be);if(!Array.isArray(o)||o.length===0)throw this._log("error",it),new TypeError(it);if(!o.every(V=>typeof V.partNumber=="number"&&typeof V.ETag=="string"))throw this._log("error",nt),new TypeError(nt);this._log("info",`Complete multipart upload ${u} for object ${n}`);let p={uploadId:u},d=this._buildCompleteMultipartUploadXml(o),g={[he]:Ze,[we]:Buffer.byteLength(d).toString(),[oe]:await Le(d)},b=ae(n),{url:O,headers:l}=await this._sign("POST",b,p,g,d),T=`${O}?${new URLSearchParams(p)}`,F=await(await this._sendRequest(T,"POST",l,d)).text(),x=Ee(F);if(typeof x=="object"&&x!==null&&"error"in x&&typeof x.error=="object"&&x.error!==null&&"message"in x.error){let V=String(x.error.message);throw this._log("error",`${L}Failed to abort multipart upload: ${V}`),new Error(`${L}Failed to abort multipart upload: ${V}`)}return x.completeMultipartUploadResult}async abortMultipartUpload(n,u){if(this._checkKey(n),typeof u!="string"||u.trim().length===0)throw this._log("error",be),new TypeError(be);this._log("info",`Aborting multipart upload ${u} for object ${n}`);let o={uploadId:u},p={[he]:Ze,[oe]:ne};try{let d=ae(n),{url:g,headers:b}=await this._sign("DELETE",d,o,p,""),O=`${g}?${new URLSearchParams(o)}`,l=await this._sendRequest(O,"DELETE",b);if(l.ok){let T=await l.text(),F=Ee(T);if(typeof F=="object"&&F!==null&&"error"in F&&typeof F.error=="object"&&F.error!==null&&"message"in F.error){let x=String(F.error.message);throw this._log("error",`${L}Failed to abort multipart upload: ${x}`),new Error(`${L}Failed to abort multipart upload: ${x}`)}return{status:"Aborted",key:n,uploadId:u,response:F}}else throw this._log("error",`${L}Abort request failed with status ${l.status}`),new Error(`${L}Abort request failed with status ${l.status}`)}catch(d){let g=d instanceof Error?d.message:String(d);throw this._log("error",`${L}Failed to abort multipart upload for key ${n}: ${g}`),new Error(`${L}Failed to abort multipart upload for key ${n}: ${g}`)}}_buildCompleteMultipartUploadXml(n){return` + + ${n.map(u=>` + + ${u.partNumber} + ${u.ETag} + + `).join("")} + + `}async delete(n){this._checkKey(n),this._log("info",`Deleting object ${n}`);let u={[he]:ge,[oe]:ne},o=ae(n),{url:p,headers:d}=await this._sign("DELETE",o,{},u,""),g=await this._sendRequest(p,"DELETE",d);return g.status===204||g.status===200}async _sendRequest(n,u,o,p,d=[]){this._log("info",`Sending ${u} request to ${n}, headers: ${JSON.stringify(o)}`);let g=await fetch(n,{method:u,headers:o,body:["GET","HEAD"].includes(u)?void 0:p,signal:this.requestAbortTimeout!==void 0?AbortSignal.timeout(this.requestAbortTimeout):void 0});return!g.ok&&!d.includes(g.status)&&await this._handleErrorResponse(g),g}async _handleErrorResponse(n){let u=await n.text(),o=n.headers.get("x-amz-error-code")||"Unknown",p=n.headers.get("x-amz-error-message")||n.statusText;throw this._log("error",`${L}Request failed with status ${n.status}: ${o} - ${p},err body: ${u}`),new Error(`${L}Request failed with status ${n.status}: ${o} - ${p}, err body: ${u}`)}_buildCanonicalQueryString(n){return Object.keys(n).length<1?"":Object.keys(n).sort().map(u=>`${encodeURIComponent(u)}=${encodeURIComponent(n[u])}`).join("&")}async _getSignatureKey(n){let u=await Re(`AWS4${this.secretAccessKey}`,n),o=await Re(u,this.region),p=await Re(o,Me);return Re(p,Ve)}},Le=async n=>{let u=dt("sha256");return u.update(n),u.digest("hex")},Re=async(n,u,o)=>{let p=pt("sha256",n);return p.update(u),p.digest(o)},Se=n=>{let u={'"':"",""":"",""":"",""":"",""":""};return n.replace(/^("|"|")|("|"|")$/g,o=>u[o])},Ee=n=>{let u=g=>g.replace(/"/g,'"').replace(/'/g,"'").replace(/</g,"<").replace(/>/g,">").replace(/&/g,"&"),o={},p=/<(\w)([-\w]+)(?:\/|[^>]*>((?:(?!<\1)[\s\S])*)<\/\1\2)>/gm,d;for(;d=p.exec(n);){let[,g,b,O]=d,l=g.toLowerCase()+b,T=O!=null?Ee(O):!0;typeof T=="string"?o[l]=Se(u(T)):Array.isArray(o[l])?o[l].push(T):o[l]=o[l]!=null?[o[l],T]:Gt[l]?[T]:T}return Object.keys(o).length?o:u(n)},yt=xt(Ct(),1),k={MISSING_ARGUMENT:"MISSING_ARGUMENT",COLLECTION_EXISTS:"COLLECTION_EXISTS",CREATE_COLLECTION_ERROR:"CREATE_COLLECTION_ERROR",RENAME_COLLECTION_ERROR:"RENAME_COLLECTION_ERROR",REMOVE_COLLECTION_ERROR:"REMOVE_COLLECTION_ERROR",UPDATE_COLLECTION_SCHEMA_ERROR:"UPDATE_COLLECTION_SCHEMA_ERROR",COLLECTION_NOT_FOUND:"COLLECTION_NOT_FOUND",SCHEMA_VALIDATION_ERROR:"SCHEMA_VALIDATION_ERROR",DOCUMENT_VALIDATION_ERROR:"DOCUMENT_VALIDATION_ERROR",S3_OPERATION_ERROR:"S3_OPERATION_ERROR",FIND_ERROR:"FIND_ERROR",FIND_ONE_ERROR:"FIND_ONE_ERROR",SAVE_DATA_ERROR:"SAVE_DATA_ERROR",INSERT_ERROR:"INSERT_ERROR",UPDATE_ERROR:"UPDATE_ERROR",UPDATE_ONE_ERROR:"UPDATE_ONE_ERROR",DELETE_ERROR:"DELETE_ERROR",COUNT_ERROR:"COUNT_ERROR",UNKNOWN_ERROR:"UNKNOWN_ERROR"},C=class extends Error{constructor(n,u=k.UNKNOWN_ERROR){super(`lowstorageError: ${n} :: code: ${u}`),this.name=this.constructor.name,this.code=u,Error.captureStackTrace(this,this.constructor)}},ve=class extends C{constructor(n,u=k.SCHEMA_VALIDATION_ERROR){super(n,u),super(n,k.SCHEMA_VALIDATION_ERROR)}},Oe=class extends C{constructor(n,u=k.DOCUMENT_VALIDATION_ERROR){super(n,u),super(n,k.DOCUMENT_VALIDATION_ERROR)}},te=class extends C{constructor(n,u){super(`S3 ${u} operation failed: ${n}`,k.S3_OPERATION_ERROR)}},Ce=(n,u)=>Object.keys(u).every(o=>n[o]===u[o]),Wt=async()=>typeof ze<"u"&&typeof ze=="function"?ze():typeof crypto<"u"&&typeof crypto=="object"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(n){var u=Math.random()*16|0,o=n==="x"?u:u&3|8;return o.toString(16)}),_t=(n,u="SubAutoGenerated")=>{switch(typeof n){case"string":return Qt(n)?{type:"string",name:"_id",size:16,logicalType:"UUID"}:"string";case"number":return Number.isInteger(n)?"int":"float";case"boolean":return"boolean";case"object":return n===null?"null":Array.isArray(n)?{type:"array",items:_t(n[0])}:gt(n,u);default:return"string"}},Ae=n=>{let u={name:"_id",type:"string",size:16,logicalType:"UUID"};return typeof n>"u"||n===null||("type"in n&&n.type==="record"&&"fields"in n&&Array.isArray(n.fields)?n.fields.some(p=>p.name==="_id")||n.fields.unshift(u):"type"in n&&n.type==="array"&&"items"in n&&n.items!==null&&typeof n.items=="object"&&"type"in n.items&&n.items.type==="record"&&"fields"in n.items&&Array.isArray(n.items.fields)&&(n.items.fields.some(p=>p.name==="_id")||n.items.fields.unshift(u))),n},gt=(n,u="AutoGenerated")=>{Array.isArray(n)&&(n=n[0]);let o=Object.entries(n).map(([d,g])=>({name:d,type:_t(g,`${u}.${d}`)}));return Ae({type:"record",name:u,fields:o})},Qt=n=>/^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i.test(n),I="lowstorage",de="/",vt="lowstorage",ye=".avro",Xt=1024*1024,ut=5*Xt,Ge=Buffer.from("","utf8"),qe=(n=k.DOCUMENT_VALIDATION_ERROR)=>{throw new Oe(`${I}: Invalid document or schema ${n}`)},ke=(n="")=>{if(n.trim()===""||n===null||typeof n>"u"||n.length>255||n===null)throw new C(`${I}: Collection name is required, null or too long`,k.MISSING_ARGUMENT)},nr=class{constructor(n){this._checkArgs=u=>{let o=["accessKeyId","secretAccessKey","endpoint","bucketName"];for(let p of o)if(!u[p])throw new C(`${I}: ${p} is required`,k.MISSING_ARGUMENT)},this.s3=()=>this._s3,this._checkArgs(n),this._schemas=new Map,this._s3=new Jt(n),this._dirPrefix=n.dirPrefix||vt,this._avroParse=yt.Type}async listCollections(){try{let n=await this._s3.list(de,this._dirPrefix);return Array.isArray(n)?n.map(u=>u.key.slice(this._dirPrefix.length+1,-ye.length)):typeof n=="object"&&n!==null&&"keyCount"in n&&n.keyCount==="0"?[]:[]}catch(n){throw new te(`${I}: ${n.message}`,k.S3_OPERATION_ERROR)}}async collectionExists(n=""){try{return ke(n),!!await this._s3.fileExists(`${this._dirPrefix}${de}${n}${ye}`)}catch(u){if(u.message.includes("Not Found"))return!1;throw new C(`${I}: ${u.message}`,k.COLLECTION_NOT_FOUND)}}async createCollection(n="",u,o=[]){try{if(ke(n),!await this.collectionExists(n)){if(typeof u<"u"&&u!==null)try{if(!this._avroParse.isValid(u))throw new ve(`${I}: Schema is invalid: ${u} ${k.SCHEMA_VALIDATION_ERROR}`)}catch{throw new ve(`${I}: Schema is invalid: ${u}`,k.SCHEMA_VALIDATION_ERROR)}if(o.length>0&&u){let d=this._avroParse.forSchema({type:"array",items:u});await this._s3.put(`${this._dirPrefix}${de}${n}${ye}`,d.toBuffer(o))}else await this._s3.put(`${this._dirPrefix}${de}${n}${ye}`,Ge);return this.collection(n,u,!1)}throw new C(`${I}: Collection ${n} already exists`,k.COLLECTION_EXISTS)}catch(p){throw p instanceof C?p:new C(`${I}: ${p.message}`,k.CREATE_COLLECTION_ERROR)}}async removeCollection(n=""){try{if(ke(n),await this.collectionExists(n)){await this._s3.delete(`${this._dirPrefix}${de}${n}${ye}`);let o=await this.collectionExists(n);if(typeof o=="boolean"){if(!o)return this._schemas.delete(n),!0;throw new C(`${I}: Failed to delete collection ${n}`,k.S3_OPERATION_ERROR)}throw new te(`${I}: Failed to delete collection ${n}`,k.S3_OPERATION_ERROR)}throw new C(`${I}: Collection ${n} does not exist`,k.REMOVE_COLLECTION_ERROR)}catch(u){throw u instanceof te?u:new C(`${I}: Failed to remove collection: ${u.message}`,k.REMOVE_COLLECTION_ERROR)}}async collection(n="",u,o=!0){try{ke(n);let p=`${this._dirPrefix}${de}${n}${ye}`;if(!await this._s3.fileExists(p)){if(!o)throw new C(`${I}: Collection ${n} does not exist`,k.COLLECTION_NOT_FOUND);await this._s3.put(p,Ge)}let g=u||this._schemas.get(n)||void 0;return new Yt(n,g,this._s3,this._dirPrefix)}catch(p){throw p.message.includes("unknown type")?new ve(`${I}: Schema input is invalid: ${p.message}`,k.SCHEMA_VALIDATION_ERROR):new C(`${I}: ${p.message}`,k.COLLECTION_NOT_FOUND)}}},Yt=class mt{constructor(u="",o,p,d=vt,g=!1,b=ut){this.getProps=()=>({colName:this._colName,s3:this._s3,schema:this._schema,avroParse:this._avroParse,avroType:this._avroType,dirPrefix:this._dirPrefix,safeWrite:this._safeWrite,chunkSize:this._chunkSize}),this.setProps=O=>{this._colName=O.colName,this._schema=O.schema,this._s3=O.s3,this._avroParse=O.avroParse,this._avroType=O.avroType,this._dirPrefix=O.dirPrefix,this._safeWrite=O.safeWrite,this._chunkSize=O.chunkSize},this.setSafeWrite=O=>{this._safeWrite=O},this.getSafeWrite=()=>this._safeWrite,this.getAvroSchema=()=>this._schema,this.setAvroSchema=O=>{this._schema=Ae(O),this._avroType=typeof O>"u"?null:this._avroParse.forSchema(O)},this._colName=u.trim(),this._s3=p,this._schema=Ae(o),this._dirPrefix=d,this._safeWrite=g,this._chunkSize=b||ut,this._s3.setMaxRequestSizeInBytes(this._chunkSize),this._avroParse=yt.Type,this._lastETag="",this._dataCache=[],this._avroType=typeof o>"u"?null:this._avroParse.ForSchema(o),this._key=`${this._dirPrefix}${de}${this._colName}${ye}`}async _loadData(){try{if(this._avroType===null||typeof this._avroType>"u")throw new C(`${I}: Missing type definition. Configure before operations `,k.SCHEMA_VALIDATION_ERROR);let{etag:u,data:o}=await this._s3.getObjectWithETag(this._key,{"if-none-match":this._lastETag});if(o===null)return this._dataCache;this._lastETag=u===null?this._lastETag:u;let p=this._avroParse.forSchema({type:"array",items:this._avroType});if(o.length0?p.fromBuffer(Buffer.from(o,"utf8")):[],this._dataCache;let d=this._chunkSize,g=[Buffer.from(o,"utf8")],b=!0;for(;b;){let l=await this._s3.getResponse(this._key,!1,d,d+this._chunkSize),T=await l.text();g.push(Buffer.from(T,"utf8")),d+=this._chunkSize,parseInt(l.headers.get("content-length")||T.length.toString())-1)return this._dataCache=[],this._dataCache;throw new te(`${I}: Failed to load data: ${u.message}`,k.S3_OPERATION_ERROR)}}async _saveData(u){try{if(this._avroType===null||typeof this._avroType>"u")throw new C(`${I}: Missing type definition. Configure before operations `,k.SCHEMA_VALIDATION_ERROR);let o=this._avroParse.forSchema({type:"array",items:this._avroType}),p=u.length>0?o.toBuffer(u):Ge;if(this._safeWrite&&this._lastETag!==""){let b=await this._s3.getEtag(this._key);if(b!==null&&b!==this._lastETag)return!1}let d=await this._s3.put(this._key,p);if(typeof d=="object"&&"status"in d&&d.status!==200)throw new te(`${I}: Failed to save data`,k.S3_OPERATION_ERROR);let g=d.headers?.get("etag")||"";return g&&g.length>0&&(this._lastETag=this._s3.sanitizeETag(g),this._dataCache=u),!0}catch(o){throw o instanceof te?o:new C(`${I}: ${o.message}`,k.SAVE_DATA_ERROR)}}async insert(u,o){try{if(u==null)throw new C(`${I}: Document is required for insert`,k.INSERT_ERROR);if(typeof u!="object"&&!Array.isArray(u))throw new Oe(`${I}: Document must be an object or an array`,k.DOCUMENT_VALIDATION_ERROR);let p=Array.isArray(u)?u:[u],d=o?Ae(o):this._schema||Ae(gt(p[0])),g=this._avroParse.forSchema(d);if(!g)throw new ve(`${I}: Schema is required - Pass a schema to the insert method`,k.SCHEMA_VALIDATION_ERROR);this._avroType=g;let b=await this._loadData();for(let l of p){if(typeof l!="object"||l===null)throw new Oe(`${I}: Invalid input: input must be an object or an array of objects`,k.DOCUMENT_VALIDATION_ERROR);if(l._id=l._id||await Wt(),this._avroType.isValid(l,{errorHook:qe,noUndeclaredFields:!0})===!0)b.push(l);else throw new Oe(`${I}: Invalid document or schema`,k.DOCUMENT_VALIDATION_ERROR)}if(!await this._saveData(b))throw new te(`${I}: Failed to insert document`,k.S3_OPERATION_ERROR);return this.setAvroSchema(d),p}catch(p){throw p.message.includes("unknown type")?new ve(`${I}: Schema input is invalid: ${p.message}`,k.SCHEMA_VALIDATION_ERROR):p instanceof C?p:new C(`${I} Insert operation failed: ${p.message}`,k.INSERT_ERROR)}}async find(u={},o={}){try{if(u==null)throw new C(`${I}: Query is required for update`,k.MISSING_ARGUMENT);let p=await this._loadData(),d=o.skip!==void 0?parseInt(String(o.skip),10):0,g=o.limit!==void 0?d+parseInt(String(o.limit),10):void 0;return p.filter(O=>Ce(O,u)).slice(d,g)}catch(p){throw new C(`${I}: Find operation failed: ${p.message}`,k.FIND_ERROR)}}async findOne(u={}){try{if(u===null)throw new C(`${I}: Query cannot be null`,k.INVALID_ARGUMENT);return(await this.find(u,{limit:1}))[0]||null}catch(o){throw o instanceof C?o:new C(`${I}: FindOne operation failed: ${o.message}`,k.FIND_ONE_ERROR)}}async update(u={},o={},p={}){try{if(u==null||o===void 0||o===null)throw new C(`${I}: Query and update values are required for update`,k.MISSING_ARGUMENT);if(!this._avroType)throw new ve(`${I}: Schema is not defined for this collection`,k.SCHEMA_VALIDATION_ERROR);let d=await this._loadData();if(d.length===0)return 0;let g=0;for(let b=0;b0){if(!await this._saveData(d))throw new te(`${I}: Failed to update document`,k.S3_OPERATION_ERROR)}else if(p&&"upsert"in p&&p.upsert){if(!await this.insert(o))throw new te(`${I}: Failed to update document`,k.S3_OPERATION_ERROR);g=1}return g}catch(d){throw d instanceof te?d:new C(`${I}: Update operation failed: ${d.message}`,k.UPDATE_ERROR)}}async updateOne(u={},o={},p={}){try{if(u==null||o===void 0||o===null)throw new C(`${I}: Query is required`,k.MISSING_ARGUMENT);if(!this._avroType)throw new ve(`${I}: Schema is not defined for this collection`,k.SCHEMA_VALIDATION_ERROR);let d=await this._loadData();if(d.length===0)return 0;let g=d.findIndex(b=>Ce(b,u));if(g!==-1){let b={...d[g],...o};if(this._avroType.isValid(b,{errorHook:qe,noUndeclaredFields:!0})===!0){if(d[g]=b,!await this._saveData(d))throw new te(`${I}: Failed to update document`,k.S3_OPERATION_ERROR);return 1}else throw new Oe(`${I}: Invalid document or schema`,k.DOCUMENT_VALIDATION_ERROR)}if(p&&"upsert"in p&&p.upsert){if(!await this.insert(o))throw new te(`${I}: Failed to update document`,k.S3_OPERATION_ERROR);return 1}return 0}catch(d){throw d instanceof C?d:new C(`${I}: UpdateOne operation failed: ${d.message}`,k.UPDATE_ONE_ERROR)}}async delete(u={}){try{if(u==null)throw new C(`${I}: Query is required`,k.MISSING_ARGUMENT);let o=await this._loadData();if(o.length===0)return 0;let p=o.length,d=o.filter(b=>!Ce(b,u));if(!await this._saveData(d))throw new te(`${I}: Failed to delete document`,k.S3_OPERATION_ERROR);return p-d.length}catch(o){throw o instanceof te?o:new C(`${I}: Delete operation failed: ${o.message}`,k.DELETE_ERROR)}}async deleteAll(){try{let o=(await this._loadData()).length;if(!await this._saveData([]))throw new te(`${I}: Failed to delete document`,k.S3_OPERATION_ERROR);return o}catch(u){throw u instanceof te?u:new C(`${I}: Delete operation failed: ${u.message}`,k.DELETE_ERROR)}}async count(u={}){try{return(await this.find(u)).length}catch(o){throw new C(`${I}: Count operation failed: ${o.message}`,k.COUNT_ERROR)}}async renameCollection(u,o=this._schema){try{if(ke(u),await this._s3.fileExists(`${this._dirPrefix}${de}${u}${ye}`))throw new C(`${I}: Collection ${u} already exists`,k.COLLECTION_EXISTS);let d=o||this.getAvroSchema(),g=await this._loadData(),b=new mt(u,d,this._s3,this._dirPrefix,this._safeWrite,this._chunkSize);return await b._saveData(g),await this._s3.delete(`${this._dirPrefix}${de}${this._colName}${ye}`),b}catch(p){throw p instanceof C?p:new C(`${I}: Rename collection failed: ${p.message}`,k.RENAME_COLLECTION_ERROR)}}};export{nr as lowstorage,C as lowstorageError,k as lowstorage_ERROR_CODES}; +//# sourceMappingURL=lowstorage.js.map diff --git a/build/lowstorage.js.map b/build/lowstorage.js.map new file mode 100644 index 0000000..bb89df1 --- /dev/null +++ b/build/lowstorage.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": [""], + "sourcesContent": ["import __import_UTIL from \"util\";\nimport __import_BUFFER from \"buffer\";\n\nvar __create = Object.create;\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __getProtoOf = Object.getPrototypeOf;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __require = /* @__PURE__ */ ((x2) => typeof require !== \"undefined\" ? require : typeof Proxy !== \"undefined\" ? new Proxy(x2, {\n get: (a, b2) => (typeof require !== \"undefined\" ? require : a)[b2]\n}) : x2)(function(x2) {\n if (typeof require !== \"undefined\") return require.apply(this, arguments);\n throw Error('Dynamic require of \"' + x2 + '\" is not supported');\n});\nvar __commonJS = (cb, mod) => function __require2() {\n return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(\n // If the importer is in node compatibility mode or this is not an ESM\n // file that has been converted to a CommonJS file using a Babel-\n // compatible transform (i.e. \"__esModule\" has not been set), then set\n // \"default\" to the CommonJS \"module.exports\" for node compatibility.\n isNodeMode || !mod || !mod.__esModule ? __defProp(target, \"default\", { value: mod, enumerable: true }) : target,\n mod\n));\n\n// node_modules/@avro/types/lib/utils.js\nvar require_utils = __commonJS({\n \"node_modules/@avro/types/lib/utils.js\"(exports, module) {\n \"use strict\";\n var POOL = new BufferPool(4096);\n function newBuffer(size) {\n if (typeof Buffer.alloc == \"function\") {\n return Buffer.alloc(size);\n } else {\n return new Buffer(size);\n }\n }\n function bufferFrom(data, enc) {\n if (typeof Buffer.from == \"function\") {\n return Buffer.from(data, enc);\n } else {\n return new Buffer(data, enc);\n }\n }\n function capitalize(s) {\n return s.charAt(0).toUpperCase() + s.slice(1);\n }\n function compare(n1, n2) {\n return n1 === n2 ? 0 : n1 < n2 ? -1 : 1;\n }\n function jsonEquals(val1, val2) {\n if (typeof val1 != typeof val2) {\n return false;\n }\n switch (typeof val1) {\n case \"number\":\n case \"string\":\n return val1 === val2;\n case \"object\":\n if (val1 === null || val2 === null) {\n return val1 === val2;\n }\n var i, l;\n if (Array.isArray(val1)) {\n if (!Array.isArray(val2) || val1.length !== val2.length) {\n return false;\n }\n for (i = 0, l = val1.length; i < l; i++) {\n if (!jsonEquals(val1[i], val2[i])) {\n return false;\n }\n }\n return true;\n }\n var keys1 = Object.keys(val1).sort();\n var keys2 = Object.keys(val2).sort();\n if (!jsonEquals(keys1, keys2)) {\n return false;\n }\n for (i = 0, l = keys1.length; i < l; i++) {\n var key = keys1[i];\n if (!jsonEquals(val1[key], val2[key])) {\n return false;\n }\n }\n return true;\n default:\n return false;\n }\n }\n function toMap(arr, fn) {\n var obj = {};\n var i, elem;\n for (i = 0; i < arr.length; i++) {\n elem = arr[i];\n obj[fn(elem)] = elem;\n }\n return obj;\n }\n function hasDuplicates(arr, fn) {\n var obj = {};\n var i, l, elem;\n for (i = 0, l = arr.length; i < l; i++) {\n elem = arr[i];\n if (fn) {\n elem = fn(elem);\n }\n if (obj[elem]) {\n return true;\n }\n obj[elem] = true;\n }\n return false;\n }\n function isType() {\n var l = arguments.length;\n if (!l) {\n return false;\n }\n var any = arguments[0];\n if (!any || typeof any.createResolver != \"function\" || typeof any._createBranchConstructor != \"function\") {\n return false;\n }\n if (l === 1) {\n return true;\n }\n var typeName = any.typeName;\n var i;\n for (i = 1; i < l; i++) {\n if (typeName.indexOf(arguments[i]) === 0) {\n return true;\n }\n }\n return false;\n }\n function unqualifyName(name) {\n var parts = name.split(\".\");\n return parts[parts.length - 1];\n }\n function abstractFunction() {\n throw new Error(\"abstract\");\n }\n function BufferPool(len) {\n this._len = len | 0;\n this._pos = 0;\n this._slab = newBuffer(this._len);\n }\n BufferPool.prototype.alloc = function(len) {\n var maxLen = this._len;\n if (len > maxLen) {\n return newBuffer(len);\n }\n if (this._pos + len > maxLen) {\n this._slab = newBuffer(maxLen);\n this._pos = 0;\n }\n return this._slab.slice(this._pos, this._pos += len);\n };\n function Tap(buf, pos) {\n this.buf = buf;\n this.pos = pos | 0;\n if (this.pos < 0) {\n throw new Error(\"negative offset\");\n }\n }\n Tap.prototype.isValid = function() {\n return this.pos <= this.buf.length;\n };\n Tap.prototype.readBoolean = function() {\n return !!this.buf[this.pos++];\n };\n Tap.prototype.skipBoolean = function() {\n this.pos++;\n };\n Tap.prototype.writeBoolean = function(b2) {\n this.buf[this.pos++] = !!b2;\n };\n Tap.prototype.readInt = Tap.prototype.readLong = function() {\n var n = 0;\n var k2 = 0;\n var buf = this.buf;\n var b2, h, f2, fk;\n do {\n b2 = buf[this.pos++];\n h = b2 & 128;\n n |= (b2 & 127) << k2;\n k2 += 7;\n } while (h && k2 < 28);\n if (h) {\n f2 = n;\n fk = 268435456;\n do {\n b2 = buf[this.pos++];\n f2 += (b2 & 127) * fk;\n fk *= 128;\n } while (b2 & 128);\n return (f2 % 2 ? -(f2 + 1) : f2) / 2;\n }\n return n >> 1 ^ -(n & 1);\n };\n Tap.prototype.skipInt = Tap.prototype.skipLong = function() {\n var buf = this.buf;\n while (buf[this.pos++] & 128) {\n }\n };\n Tap.prototype.writeInt = Tap.prototype.writeLong = function(n) {\n var buf = this.buf;\n var f2, m2;\n if (n >= -1073741824 && n < 1073741824) {\n m2 = n >= 0 ? n << 1 : ~n << 1 | 1;\n do {\n buf[this.pos] = m2 & 127;\n m2 >>= 7;\n } while (m2 && (buf[this.pos++] |= 128));\n } else {\n f2 = n >= 0 ? n * 2 : -n * 2 - 1;\n do {\n buf[this.pos] = f2 & 127;\n f2 /= 128;\n } while (f2 >= 1 && (buf[this.pos++] |= 128));\n }\n this.pos++;\n };\n Tap.prototype.readFloat = function() {\n var buf = this.buf;\n var pos = this.pos;\n this.pos += 4;\n if (this.pos > buf.length) {\n return;\n }\n return this.buf.readFloatLE(pos);\n };\n Tap.prototype.skipFloat = function() {\n this.pos += 4;\n };\n Tap.prototype.writeFloat = function(f2) {\n var buf = this.buf;\n var pos = this.pos;\n this.pos += 4;\n if (this.pos > buf.length) {\n return;\n }\n return this.buf.writeFloatLE(f2, pos);\n };\n Tap.prototype.readDouble = function() {\n var buf = this.buf;\n var pos = this.pos;\n this.pos += 8;\n if (this.pos > buf.length) {\n return;\n }\n return this.buf.readDoubleLE(pos);\n };\n Tap.prototype.skipDouble = function() {\n this.pos += 8;\n };\n Tap.prototype.writeDouble = function(d) {\n var buf = this.buf;\n var pos = this.pos;\n this.pos += 8;\n if (this.pos > buf.length) {\n return;\n }\n return this.buf.writeDoubleLE(d, pos);\n };\n Tap.prototype.readFixed = function(len) {\n var pos = this.pos;\n this.pos += len;\n if (this.pos > this.buf.length) {\n return;\n }\n var fixed = POOL.alloc(len);\n this.buf.copy(fixed, 0, pos, pos + len);\n return fixed;\n };\n Tap.prototype.skipFixed = function(len) {\n this.pos += len;\n };\n Tap.prototype.writeFixed = function(buf, len) {\n len = len || buf.length;\n var pos = this.pos;\n this.pos += len;\n if (this.pos > this.buf.length) {\n return;\n }\n buf.copy(this.buf, pos, 0, len);\n };\n Tap.prototype.readBytes = function() {\n return this.readFixed(this.readLong());\n };\n Tap.prototype.skipBytes = function() {\n var len = this.readLong();\n this.pos += len;\n };\n Tap.prototype.writeBytes = function(buf) {\n var len = buf.length;\n this.writeLong(len);\n this.writeFixed(buf, len);\n };\n if (typeof Buffer.prototype.utf8Slice == \"function\") {\n Tap.prototype.readString = function() {\n var len = this.readLong();\n var pos = this.pos;\n var buf = this.buf;\n this.pos += len;\n if (this.pos > buf.length) {\n return;\n }\n return this.buf.utf8Slice(pos, pos + len);\n };\n } else {\n Tap.prototype.readString = function() {\n var len = this.readLong();\n var pos = this.pos;\n var buf = this.buf;\n this.pos += len;\n if (this.pos > buf.length) {\n return;\n }\n return this.buf.slice(pos, pos + len).toString();\n };\n }\n Tap.prototype.skipString = function() {\n var len = this.readLong();\n this.pos += len;\n };\n Tap.prototype.writeString = function(s) {\n var len = Buffer.byteLength(s);\n var buf = this.buf;\n this.writeLong(len);\n var pos = this.pos;\n this.pos += len;\n if (this.pos > buf.length) {\n return;\n }\n if (len > 64) {\n this._writeUtf8(s, len);\n } else {\n var i, l, c1, c2;\n for (i = 0, l = len; i < l; i++) {\n c1 = s.charCodeAt(i);\n if (c1 < 128) {\n buf[pos++] = c1;\n } else if (c1 < 2048) {\n buf[pos++] = c1 >> 6 | 192;\n buf[pos++] = c1 & 63 | 128;\n } else if ((c1 & 64512) === 55296 && ((c2 = s.charCodeAt(i + 1)) & 64512) === 56320) {\n c1 = 65536 + ((c1 & 1023) << 10) + (c2 & 1023);\n i++;\n buf[pos++] = c1 >> 18 | 240;\n buf[pos++] = c1 >> 12 & 63 | 128;\n buf[pos++] = c1 >> 6 & 63 | 128;\n buf[pos++] = c1 & 63 | 128;\n } else {\n buf[pos++] = c1 >> 12 | 224;\n buf[pos++] = c1 >> 6 & 63 | 128;\n buf[pos++] = c1 & 63 | 128;\n }\n }\n }\n };\n if (typeof Buffer.prototype.utf8Write == \"function\") {\n Tap.prototype._writeUtf8 = function(str, len) {\n this.buf.utf8Write(str, this.pos - len, len);\n };\n } else {\n Tap.prototype._writeUtf8 = function(str, len) {\n this.buf.write(str, this.pos - len, len, \"utf8\");\n };\n }\n if (typeof Buffer.prototype.latin1Write == \"function\") {\n Tap.prototype.writeBinary = function(str, len) {\n var pos = this.pos;\n this.pos += len;\n if (this.pos > this.buf.length) {\n return;\n }\n this.buf.latin1Write(str, pos, len);\n };\n } else if (typeof Buffer.prototype.binaryWrite == \"function\") {\n Tap.prototype.writeBinary = function(str, len) {\n var pos = this.pos;\n this.pos += len;\n if (this.pos > this.buf.length) {\n return;\n }\n this.buf.binaryWrite(str, pos, len);\n };\n } else {\n Tap.prototype.writeBinary = function(s, len) {\n var pos = this.pos;\n this.pos += len;\n if (this.pos > this.buf.length) {\n return;\n }\n this.buf.write(s, pos, len, \"binary\");\n };\n }\n Tap.prototype.matchBoolean = function(tap) {\n return this.buf[this.pos++] - tap.buf[tap.pos++];\n };\n Tap.prototype.matchInt = Tap.prototype.matchLong = function(tap) {\n var n1 = this.readLong();\n var n2 = tap.readLong();\n return n1 === n2 ? 0 : n1 < n2 ? -1 : 1;\n };\n Tap.prototype.matchFloat = function(tap) {\n var n1 = this.readFloat();\n var n2 = tap.readFloat();\n return n1 === n2 ? 0 : n1 < n2 ? -1 : 1;\n };\n Tap.prototype.matchDouble = function(tap) {\n var n1 = this.readDouble();\n var n2 = tap.readDouble();\n return n1 === n2 ? 0 : n1 < n2 ? -1 : 1;\n };\n Tap.prototype.matchFixed = function(tap, len) {\n return this.readFixed(len).compare(tap.readFixed(len));\n };\n Tap.prototype.matchBytes = Tap.prototype.matchString = function(tap) {\n var l1 = this.readLong();\n var p1 = this.pos;\n this.pos += l1;\n var l2 = tap.readLong();\n var p2 = tap.pos;\n tap.pos += l2;\n var b1 = this.buf.slice(p1, this.pos);\n var b2 = tap.buf.slice(p2, tap.pos);\n return b1.compare(b2);\n };\n Tap.prototype.unpackLongBytes = function() {\n var res = newBuffer(8);\n var n = 0;\n var i = 0;\n var j2 = 6;\n var buf = this.buf;\n var b2, neg;\n b2 = buf[this.pos++];\n neg = b2 & 1;\n res.fill(0);\n n |= (b2 & 127) >> 1;\n while (b2 & 128) {\n b2 = buf[this.pos++];\n n |= (b2 & 127) << j2;\n j2 += 7;\n if (j2 >= 8) {\n j2 -= 8;\n res[i++] = n;\n n >>= 8;\n }\n }\n res[i] = n;\n if (neg) {\n invert(res, 8);\n }\n return res;\n };\n Tap.prototype.packLongBytes = function(buf) {\n var neg = (buf[7] & 128) >> 7;\n var res = this.buf;\n var j2 = 1;\n var k2 = 0;\n var m2 = 3;\n var n;\n if (neg) {\n invert(buf, 8);\n n = 1;\n } else {\n n = 0;\n }\n var parts = [\n buf.readUIntLE(0, 3),\n buf.readUIntLE(3, 3),\n buf.readUIntLE(6, 2)\n ];\n while (m2 && !parts[--m2]) {\n }\n while (k2 < m2) {\n n |= parts[k2++] << j2;\n j2 += 24;\n while (j2 > 7) {\n res[this.pos++] = n & 127 | 128;\n n >>= 7;\n j2 -= 7;\n }\n }\n n |= parts[m2] << j2;\n do {\n res[this.pos] = n & 127;\n n >>= 7;\n } while (n && (res[this.pos++] |= 128));\n this.pos++;\n if (neg) {\n invert(buf, 8);\n }\n };\n function invert(buf, len) {\n while (len--) {\n buf[len] = ~buf[len];\n }\n }\n module.exports = {\n Tap,\n abstractFunction,\n bufferFrom,\n capitalize,\n compare,\n hasDuplicates,\n isType,\n jsonEquals,\n newBuffer,\n toMap,\n unqualifyName\n };\n }\n});\n\n// node_modules/@avro/types/lib/values.js\nvar require_values = __commonJS({\n \"node_modules/@avro/types/lib/values.js\"(exports, module) {\n \"use strict\";\n var utils = require_utils();\n var util = __import_UTIL;\n var f2 = util.format;\n function fromJSON(any, type, opts) {\n return clone(\"FROM_JSON\", any, type, opts);\n }\n function fromDefaultJSON(any, type, opts) {\n return clone(\"FROM_DEFAULT_JSON\", any, type, opts);\n }\n function toJSON(any, type, opts) {\n return clone(\"TO_JSON\", any, type, opts);\n }\n function clone(mode, any, type, opts) {\n return new Cloner(mode, opts).clone(any, type, []).build(type);\n }\n function Builder() {\n this.value = void 0;\n this.errors = [];\n }\n Builder.prototype.isOk = function() {\n return !this.errors.length;\n };\n Builder.prototype.build = function(type) {\n if (!this.errors.length) {\n return this.value;\n }\n var details = [];\n var i, l;\n for (i = 0, l = this.errors.length; i < l; i++) {\n details.push(f2(\"\t%s\", this.errors[i].message));\n }\n var msg = f2(\n \"%s error(s) when expecting %s:\\n%s\",\n this.errors.length,\n typeInfo(type),\n details.join(\"\\n\")\n );\n var err = new Error(msg);\n err.code = \"ERR_AVRO_INCOMPATIBLE_VALUE\";\n err.type = type;\n err.errors = this.errors;\n throw err;\n };\n Builder.prototype.addError = function(desc, val, type, path) {\n var info = typeInfo(type);\n var msg = f2(\"$%s has %s but %s: %j\", joinPath(path), info, desc, val);\n var err = new Error(msg);\n err.value = val;\n err.expectedType = type;\n err.path = path;\n this.errors.push(err);\n };\n Builder.prototype.copyErrorsFrom = function(builder) {\n if (builder.errors.length) {\n this.errors = this.errors.concat(builder.errors);\n }\n };\n function typeInfo(type) {\n if (utils.isType(type, \"union\")) {\n var names = type.types.map(function(type2) {\n return type2.branchName;\n });\n return f2(\"a type among %s\", names.join(\", \"));\n } else if (utils.isType(type, \"logical\")) {\n return f2(\"type %s (%s)\", type.typeName, type.branchName);\n } else {\n return f2(\"type %s\", type.branchName);\n }\n }\n function Cloner(mode, opts) {\n opts = opts || {};\n this._mode = mode;\n this._allowUndeclaredFields = !!opts.allowUndeclaredFields;\n this._omitDefaultValues = !!opts.omitDefaultValues;\n if (this._omitDefaultValues && this._mode !== \"TO_JSON\") {\n throw new Error(\"invalid cloner options\");\n }\n }\n Cloner.prototype.clone = function(any, type, path) {\n if (!utils.isType(type)) {\n throw new Error(f2(\"not a type: %s\", type));\n }\n switch (type.typeName) {\n case \"array\":\n return this._onArray(any, type, path);\n case \"map\":\n return this._onMap(any, type, path);\n case \"error\":\n case \"record\":\n return this._onRecord(any, type, path);\n case \"union:unwrapped\":\n case \"union:wrapped\":\n return this._onUnion(any, type, path);\n default:\n return utils.isType(type, \"logical\") ? this._onLogical(any, type, path) : this._onPrimitive(any, type, path);\n }\n };\n Cloner.prototype._onLogical = function(any, type, path) {\n var builder = new Builder();\n var desc;\n if (this._mode === \"TO_JSON\") {\n try {\n builder.value = type._toValue(any);\n if (builder.value === void 0) {\n builder.addError(\"logical type encoding failed\", any, type, path);\n return builder;\n }\n } catch (err) {\n desc = f2(\"logical type encoding failed (%s)\", err.message);\n builder.addError(desc, any, type, path);\n return builder;\n }\n } else {\n builder.value = any;\n }\n builder = this.clone(builder.value, type.underlyingType, path);\n if (!builder.isOk()) {\n return builder;\n }\n if (this._mode !== \"TO_JSON\") {\n try {\n builder.value = type._fromValue(builder.value);\n } catch (err) {\n desc = f2(\"logical type decoding failed (%s)\", err.message);\n builder.addError(desc, any, type, path);\n }\n }\n return builder;\n };\n Cloner.prototype._onPrimitive = function(any, type, path) {\n var builder = new Builder();\n var isBufferType = utils.isType(type, \"bytes\", \"fixed\");\n var isAbstractLong = utils.isType(type, \"abstract:long\");\n var val = any;\n if (isBufferType && this._mode !== \"TO_JSON\") {\n if (typeof any != \"string\") {\n builder.addError(\"is not a string\", any, type, path);\n return builder;\n }\n val = utils.bufferFrom(any, \"binary\");\n }\n if (isAbstractLong && this._mode === \"TO_JSON\" && type.isValid(val)) {\n builder.value = type._toJSON(val);\n } else if (isAbstractLong && typeof val == \"number\") {\n builder.value = type._fromJSON(val);\n } else if (type.isValid(val)) {\n if (utils.isType(type, \"abstract:long\")) {\n if (this._mode === \"TO_JSON\") {\n builder.value = type._toJSON(val);\n } else {\n builder.value = type._fromJSON(val);\n }\n } else {\n builder.value = isBufferType ? utils.bufferFrom(val) : val;\n }\n } else {\n builder.addError(\"invalid value\", any, type, path);\n }\n if (this._mode === \"TO_JSON\" && isBufferType) {\n builder.value = builder.value.toString(\"binary\");\n }\n return builder;\n };\n Cloner.prototype._onRecord = function(any, type, path) {\n var builder = new Builder();\n var desc;\n if (!any || typeof any != \"object\") {\n builder.addError(\"is not a valid object\", any, type, path);\n return builder;\n }\n var i, l;\n if (!this._allowUndeclaredFields) {\n var extraFields = [];\n var fieldNames = Object.keys(any);\n var fieldName;\n for (i = 0, l = fieldNames.length; i < l; i++) {\n fieldName = fieldNames[i];\n if (!type.field(fieldName)) {\n extraFields.push(fieldName);\n }\n }\n if (extraFields.length) {\n desc = f2(\n \"contains %s undeclared field(s) (%s)\",\n extraFields.length,\n extraFields.join(\", \")\n );\n builder.addError(desc, any, type, path);\n }\n }\n var missingFields = [];\n var args = [void 0];\n var field, fieldAny, fieldVal, fieldPath, fieldValBuilder, defaultVal;\n for (i = 0, l = type.fields.length; i < l; i++) {\n field = type.fields[i];\n fieldAny = any[field.name];\n fieldPath = path.slice();\n fieldPath.push(field.name);\n defaultVal = field.defaultValue();\n fieldVal = void 0;\n if (fieldAny === void 0 && defaultVal === void 0) {\n missingFields.push(field.name);\n } else if (fieldAny === void 0) {\n if (this._mode === \"TO_JSON\" && !this._omitDefaultValues) {\n fieldVal = this.clone(defaultVal, field.type, fieldPath).value;\n }\n } else {\n fieldValBuilder = this.clone(fieldAny, field.type, fieldPath);\n builder.copyErrorsFrom(fieldValBuilder);\n fieldVal = fieldValBuilder.value;\n if (this._omitDefaultValues && fieldValBuilder.isOk() && defaultVal !== void 0 && !field.type.compare(fieldAny, defaultVal, { allowMaps: true })) {\n fieldVal = void 0;\n }\n }\n args.push(fieldVal);\n }\n if (missingFields.length) {\n desc = f2(\n \"is missing %s field(s) (%s)\",\n missingFields.length,\n missingFields.join()\n );\n builder.addError(desc, any, type, path);\n }\n if (builder.isOk()) {\n if (this._mode === \"TO_JSON\") {\n builder.value = {};\n for (i = 0, l = type.fields.length; i < l; i++) {\n fieldVal = args[i + 1];\n if (fieldVal !== void 0) {\n builder.value[type.fields[i].name] = fieldVal;\n }\n }\n } else {\n var Record = type.recordConstructor;\n builder.value = new (Record.bind.apply(Record, args))();\n }\n }\n return builder;\n };\n Cloner.prototype._onArray = function(any, type, path) {\n var builder = new Builder();\n if (!Array.isArray(any)) {\n builder.addError(\"is not an array\", any, type, path);\n return builder;\n }\n var val = [];\n var i, l, item;\n for (i = 0, l = any.length; i < l; i++) {\n item = any[i];\n var itemPath = path.slice();\n itemPath.push(i);\n var itemBuilder = this.clone(item, type.itemsType, itemPath);\n builder.copyErrorsFrom(itemBuilder);\n if (builder.isOk()) {\n val.push(itemBuilder.value);\n }\n }\n if (builder.isOk()) {\n builder.value = val;\n }\n return builder;\n };\n Cloner.prototype._onMap = function(any, type, path) {\n var builder = new Builder();\n if (!any || typeof any != \"object\") {\n builder.addError(\"is not a valid object\", any, type, path);\n return builder;\n }\n var val = {};\n var keys = Object.keys(any).sort();\n var i, l;\n for (i = 0, l = keys.length; i < l; i++) {\n var key = keys[i];\n var anyValue = any[key];\n var valuePath = path.slice();\n valuePath.push(key);\n var valueBuilder = this.clone(anyValue, type.valuesType, valuePath);\n builder.copyErrorsFrom(valueBuilder);\n if (builder.isOk()) {\n val[key] = valueBuilder.value;\n }\n }\n if (builder.isOk()) {\n builder.value = val;\n }\n return builder;\n };\n Cloner.prototype._onUnion = function(any, unionType, path) {\n var isWrapped = unionType.typeName === \"union:wrapped\";\n var builder = new Builder();\n if (any === null) {\n var i, l;\n for (i = 0, l = unionType.types.length; i < l; i++) {\n if (unionType.types[i].typeName === \"null\") {\n builder.value = null;\n return builder;\n }\n }\n builder.addError(\"is null\", any, unionType, path);\n return builder;\n }\n var branchType;\n if (this._mode === \"FROM_DEFAULT_JSON\") {\n branchType = unionType.types[0];\n if (branchType.typeName === \"null\") {\n builder.addError(\"does not match first (null)\", any, unionType, path);\n return builder;\n }\n any = branchType.wrap(any);\n } else if (this._mode === \"TO_JSON\" && !isWrapped) {\n branchType = unionType.branchType(any);\n if (!branchType) {\n builder.addError(\"is not a valid branch\", any, unionType, path);\n return builder;\n }\n any = branchType.wrap(any);\n }\n if (typeof any != \"object\") {\n builder.addError(\"is not an object\", any, unionType, path);\n return builder;\n }\n var keys = Object.keys(any);\n var reason;\n if (keys.length !== 1) {\n reason = f2(\"has %s keys (%s)\", keys.length, keys);\n builder.addError(reason, any, unionType, path);\n return builder;\n }\n var key = keys[0];\n branchType = unionType.type(key);\n if (!branchType) {\n reason = f2(\"contains an unknown branch (%s)\", key);\n builder.addError(reason, any, unionType, path);\n return builder;\n }\n var branchPath = path.slice();\n branchPath.push(key);\n var branchBuilder = this.clone(any[key], branchType, branchPath);\n builder.copyErrorsFrom(branchBuilder);\n if (branchBuilder.isOk()) {\n if (this._mode === \"TO_JSON\") {\n builder.value = {};\n builder.value[branchType.branchName] = branchBuilder.value;\n } else if (!isWrapped) {\n builder.value = branchBuilder.value;\n } else {\n builder.value = branchType.wrap(branchBuilder.value);\n }\n }\n return builder;\n };\n function joinPath(parts) {\n var strs = [];\n var i, l, part;\n for (i = 0, l = parts.length; i < l; i++) {\n part = parts[i];\n if (isNaN(part)) {\n strs.push(\".\" + part);\n } else {\n strs.push(\"[\" + part + \"]\");\n }\n }\n return strs.join(\"\");\n }\n module.exports = {\n fromJSON,\n fromDefaultJSON,\n toJSON\n };\n }\n});\n\n// node_modules/@avro/types/lib/types.js\nvar require_types = __commonJS({\n \"node_modules/@avro/types/lib/types.js\"(exports, module) {\n \"use strict\";\n var utils = require_utils();\n var values = require_values();\n var buffer = __import_BUFFER;\n var util = __import_UTIL;\n var Tap = utils.Tap;\n var debug = util.debuglog(\"avro:types\");\n var f2 = util.format;\n var TYPES = {\n \"array\": ArrayType,\n \"boolean\": BooleanType,\n \"bytes\": BytesType,\n \"double\": DoubleType,\n \"enum\": EnumType,\n \"error\": RecordType,\n \"fixed\": FixedType,\n \"float\": FloatType,\n \"int\": IntType,\n \"long\": LongType,\n \"map\": MapType,\n \"null\": NullType,\n \"record\": RecordType,\n \"string\": StringType\n };\n var NAME_PATTERN = /^[A-Za-z_][A-Za-z0-9_]*$/;\n var TAP = new Tap(new buffer.SlowBuffer(1024));\n var LOGICAL_TYPE = null;\n var UNDERLYING_TYPES = [];\n function Type(schema, opts, scope) {\n var type;\n if (LOGICAL_TYPE) {\n type = LOGICAL_TYPE;\n UNDERLYING_TYPES.push([LOGICAL_TYPE, this]);\n LOGICAL_TYPE = null;\n } else {\n type = this;\n }\n this.name = void 0;\n this.aliases = void 0;\n this.doc = schema && schema.doc ? \"\" + schema.doc : void 0;\n if (schema) {\n var name = schema.name;\n var namespace = schema.namespace === void 0 ? scope && scope.namespace : schema.namespace;\n if (name !== void 0) {\n name = maybeQualify(name, namespace);\n if (isPrimitive(name)) {\n throw new Error(f2(\"cannot rename primitive type: %j\", name));\n }\n var registry = opts && opts.registry;\n if (registry) {\n if (registry[name] !== void 0) {\n throw new Error(f2(\"duplicate type name: %s\", name));\n }\n registry[name] = type;\n }\n } else if (opts && opts.noAnonymousTypes) {\n throw new Error(f2(\"missing name property in schema: %j\", schema));\n }\n this.name = name;\n this.aliases = schema.aliases ? schema.aliases.map(function(s) {\n return maybeQualify(s, namespace);\n }) : [];\n }\n }\n Type.forSchema = function(schema, opts, scope) {\n opts = opts || {};\n opts.registry = opts.registry || {};\n scope = scope || Scope.forOptions(opts);\n var UnionType2 = function(wrapUnions) {\n if (wrapUnions === true) {\n wrapUnions = \"always\";\n } else if (wrapUnions === false) {\n wrapUnions = \"never\";\n } else if (wrapUnions === void 0) {\n wrapUnions = \"auto\";\n } else if (typeof wrapUnions == \"string\") {\n wrapUnions = wrapUnions.toLowerCase();\n }\n switch (wrapUnions) {\n case \"always\":\n return WrappedUnionType;\n case \"never\":\n return UnwrappedUnionType;\n case \"auto\":\n return void 0;\n default:\n throw new Error(f2(\"invalid wrap unions option: %j\", wrapUnions));\n }\n }(opts.wrapUnions);\n if (schema === null) {\n throw new Error('invalid type: null (did you mean \"null\"?)');\n }\n if (utils.isType(schema)) {\n return schema;\n }\n var type;\n if (opts.typeHook && (type = opts.typeHook(schema, opts, scope))) {\n if (!utils.isType(type)) {\n throw new Error(f2(\"invalid typehook return value: %j\", type));\n }\n return type;\n }\n if (typeof schema == \"string\") {\n schema = maybeQualify(schema, scope.namespace);\n type = opts.registry[schema];\n if (type) {\n return type;\n }\n if (isPrimitive(schema)) {\n return opts.registry[schema] = Type.forSchema({ type: schema }, opts);\n }\n throw new Error(f2(\"undefined type name: %s\", schema));\n }\n if (schema.logicalType && opts.logicalTypes && !LOGICAL_TYPE) {\n var DerivedType = opts.logicalTypes[schema.logicalType];\n if (DerivedType) {\n var registry = {};\n Object.keys(opts.registry).forEach(function(key) {\n registry[key] = opts.registry[key];\n });\n try {\n debug(\"instantiating logical type for %s\", schema.logicalType);\n return new DerivedType(schema, opts);\n } catch (err) {\n debug(\"failed to instantiate logical type for %s\", schema.logicalType);\n if (opts.assertLogicalTypes) {\n throw err;\n }\n LOGICAL_TYPE = null;\n opts.registry = registry;\n }\n }\n }\n if (Array.isArray(schema)) {\n var logicalType = LOGICAL_TYPE;\n LOGICAL_TYPE = null;\n var types = schema.map(function(obj, i) {\n return Type.forSchema(obj, opts, scope.child(i));\n });\n if (!UnionType2) {\n UnionType2 = isAmbiguous(types) ? WrappedUnionType : UnwrappedUnionType;\n }\n LOGICAL_TYPE = logicalType;\n type = new UnionType2(types, opts);\n } else {\n type = function(typeName) {\n var Type2 = TYPES[typeName];\n if (Type2 === void 0) {\n throw new Error(f2(\"unknown type: %j\", typeName));\n }\n return new Type2(schema, opts, scope);\n }(schema.type);\n }\n return type;\n };\n Type.forValue = function(val, opts, scope) {\n opts = opts || {};\n scope = scope || Scope.forOptions(opts);\n opts.emptyArrayType = opts.emptyArrayType || Type.forSchema({\n type: \"array\",\n items: \"null\"\n });\n if (opts.valueHook) {\n var type = opts.valueHook(val, opts, scope);\n if (type !== void 0) {\n if (!utils.isType(type)) {\n throw new Error(f2(\"invalid value hook return value: %j\", type));\n }\n return type;\n }\n }\n switch (typeof val) {\n case \"string\":\n return Type.forSchema(\"string\", opts, scope);\n case \"boolean\":\n return Type.forSchema(\"boolean\", opts, scope);\n case \"number\":\n if ((val | 0) === val) {\n return Type.forSchema(\"int\", opts, scope);\n } else if (Math.abs(val) < 9007199254740991) {\n return Type.forSchema(\"float\", opts, scope);\n }\n return Type.forSchema(\"double\", opts, scope);\n case \"object\":\n if (val === null) {\n return Type.forSchema(\"null\", opts, scope);\n } else if (Array.isArray(val)) {\n if (!val.length) {\n return opts.emptyArrayType;\n }\n return Type.forSchema({\n type: \"array\",\n items: Type.forTypes(\n val.map(function(v2, i) {\n return Type.forValue(v2, opts, scope.child(i));\n }),\n opts,\n scope.child(\"*\")\n )\n }, opts, scope);\n } else if (Buffer.isBuffer(val)) {\n return Type.forSchema(\"bytes\", opts, scope);\n }\n var fieldNames = Object.keys(val);\n if (fieldNames.some(function(s) {\n return !isValidName(s);\n })) {\n return Type.forSchema({\n type: \"map\",\n values: Type.forTypes(fieldNames.map(function(s) {\n return Type.forValue(val[s], opts, scope.child(s));\n }), opts, scope.child(\"*\"))\n }, opts, scope);\n }\n return Type.forSchema({\n type: \"record\",\n fields: fieldNames.map(function(s) {\n return { name: s, type: Type.forValue(val[s], opts, scope.child(s)) };\n })\n }, opts, scope);\n default:\n throw new Error(f2(\"cannot infer type from: %j\", val));\n }\n };\n Type.forTypes = function(types, opts, scope) {\n if (!types.length) {\n throw new Error(\"no types to combine\");\n }\n if (types.length === 1) {\n return types[0];\n }\n opts = opts || {};\n scope = scope || Scope.forOptions(opts);\n var expanded = [];\n var numWrappedUnions = 0;\n var isValidWrappedUnion = true;\n types.forEach(function(type) {\n switch (type.typeName) {\n case \"union:unwrapped\":\n isValidWrappedUnion = false;\n expanded = expanded.concat(type.types);\n break;\n case \"union:wrapped\":\n numWrappedUnions++;\n expanded = expanded.concat(type.types);\n break;\n case \"null\":\n expanded.push(type);\n break;\n default:\n isValidWrappedUnion = false;\n expanded.push(type);\n }\n });\n if (numWrappedUnions) {\n if (!isValidWrappedUnion) {\n throw new Error(\"cannot combine wrapped union\");\n }\n var branchTypes = {};\n expanded.forEach(function(type) {\n var name = type.branchName;\n var branchType = branchTypes[name];\n if (!branchType) {\n branchTypes[name] = type;\n } else if (!type.equals(branchType)) {\n throw new Error(\"inconsistent branch type\");\n }\n });\n var wrapUnions = opts.wrapUnions;\n var unionType;\n opts.wrapUnions = true;\n try {\n unionType = Type.forSchema(Object.keys(branchTypes).map(function(name) {\n return branchTypes[name];\n }), opts, scope);\n } catch (err) {\n opts.wrapUnions = wrapUnions;\n throw err;\n }\n opts.wrapUnions = wrapUnions;\n return unionType;\n }\n var bucketized = {};\n expanded.forEach(function(type) {\n var bucket = getTypeBucket(type);\n var bucketTypes = bucketized[bucket];\n if (!bucketTypes) {\n bucketized[bucket] = bucketTypes = [];\n }\n bucketTypes.push(type);\n });\n var buckets = Object.keys(bucketized);\n var augmented = buckets.map(function(bucket) {\n var bucketTypes = bucketized[bucket];\n if (bucketTypes.length === 1) {\n return bucketTypes[0];\n } else {\n switch (bucket) {\n case \"null\":\n case \"boolean\":\n return bucketTypes[0];\n case \"number\":\n return combineNumbers(bucketTypes);\n case \"string\":\n return combineStrings(bucketTypes, opts, scope);\n case \"buffer\":\n return combineBuffers(bucketTypes, opts, scope);\n case \"array\":\n bucketTypes = bucketTypes.filter(function(t) {\n return t !== opts.emptyArrayType;\n });\n if (!bucketTypes.length) {\n return opts.emptyArrayType;\n }\n return Type.forSchema({\n type: \"array\",\n items: Type.forTypes(bucketTypes.map(function(t) {\n return t.itemsType;\n }), opts, scope.child(\"*\"))\n }, opts, scope);\n default:\n return combineObjects(bucketTypes, opts, scope);\n }\n }\n });\n if (augmented.length === 1) {\n return augmented[0];\n } else {\n return Type.forSchema(augmented, opts, scope);\n }\n };\n Type.isType = utils.isType;\n Type.__reset = function(size) {\n debug(\"resetting type buffer to %d\", size);\n TAP.buf = new buffer.SlowBuffer(size);\n };\n Object.defineProperty(Type.prototype, \"branchName\", {\n enumerable: true,\n get: function() {\n var type = Type.isType(this, \"logical\") ? this.underlyingType : this;\n if (type.name) {\n return type.name;\n }\n if (utils.isType(type, \"abstract\")) {\n return type._concreteTypeName;\n }\n return utils.isType(type, \"union\") ? void 0 : type.typeName;\n }\n });\n Type.prototype.compare = utils.abstractFunction;\n Type.prototype.binaryCompare = function(buf1, buf2) {\n return this._match(new Tap(buf1), new Tap(buf2));\n };\n Type.prototype.createResolver = function(type, opts) {\n if (!utils.isType(type)) {\n throw new Error(f2(\"not a type: %j\", type));\n }\n if (!utils.isType(this, \"union\", \"logical\") && utils.isType(type, \"logical\")) {\n return this.createResolver(type.underlyingType, opts);\n }\n opts = opts || {};\n opts.registry = opts.registry || {};\n var resolver, key;\n if (utils.isType(this, \"record\", \"error\") && utils.isType(type, \"record\", \"error\")) {\n key = this.name + \":\" + type.name;\n resolver = opts.registry[key];\n if (resolver) {\n return resolver;\n }\n }\n resolver = new Resolver(type, this);\n if (key) {\n opts.registry[key] = resolver;\n }\n if (utils.isType(type, \"union\")) {\n var resolvers = type.types.map(function(t) {\n return this.createResolver(t, opts);\n }, this);\n resolver._read = function(tap) {\n var index = tap.readLong();\n var resolver2 = resolvers[index];\n if (resolver2 === void 0) {\n throw new Error(f2(\"invalid union index: %s\", index));\n }\n return resolvers[index]._read(tap);\n };\n } else {\n this._update(resolver, type, opts);\n }\n if (!resolver._read) {\n throw new Error(f2(\"cannot read %s as %s\", type, this));\n }\n return Object.freeze(resolver);\n };\n Type.prototype.binaryDecode = function(buf, resolver, noCheck) {\n var tap = new Tap(buf);\n var val = readValue(this, tap, resolver, noCheck);\n if (!tap.isValid()) {\n throw new Error(\"truncated buffer\");\n }\n if (!noCheck && tap.pos < buf.length) {\n throw new Error(\"trailing data\");\n }\n return val;\n };\n Type.prototype.binaryEncode = function(val) {\n TAP.pos = 0;\n this._write(TAP, val);\n var buf = utils.newBuffer(TAP.pos);\n if (TAP.isValid()) {\n TAP.buf.copy(buf, 0, 0, TAP.pos);\n } else {\n this._write(new Tap(buf), val);\n }\n return buf;\n };\n Type.prototype.binaryDecodeAt = function(buf, pos, resolver) {\n var tap = new Tap(buf, pos);\n var val = readValue(this, tap, resolver);\n if (!tap.isValid()) {\n return { value: void 0, offset: -1 };\n }\n return { value: val, offset: tap.pos };\n };\n Type.prototype.binaryEncodeAt = function(val, buf, pos) {\n var tap = new Tap(buf, pos);\n this._write(tap, val);\n if (!tap.isValid()) {\n return buf.length - tap.pos;\n }\n return tap.pos;\n };\n Type.prototype.jsonDecode = function(any, resolver, allowUndeclaredFields) {\n var opts = { allowUndeclaredFields };\n if (!resolver) {\n return values.fromJSON(any, this, opts);\n }\n var type = resolver._writerType;\n var val = values.fromJSON(any, type, opts);\n return this.binaryDecode(type.binaryEncode(val), resolver);\n };\n Type.prototype.jsonEncode = function(val, opts) {\n return values.toJSON(val, this, opts);\n };\n Type.prototype.clone = function(val) {\n return this.binaryDecode(this.binaryEncode(val));\n };\n Type.prototype.wrap = function(val) {\n var Branch = this._branchConstructor;\n return Branch === null ? null : new Branch(val);\n };\n Type.prototype.checkValid = function(val, opts) {\n opts = { allowUndeclaredFields: opts && opts.allowUndeclaredFields };\n if (this.isValid(val, opts)) {\n return;\n }\n values.toJSON(val, this, opts);\n };\n Type.prototype.isValid = function(val, opts) {\n var flags = !(opts && opts.allowUndeclaredFields) | 0;\n var errorHook = opts && opts.errorHook;\n var hook, path;\n if (errorHook) {\n path = [];\n hook = function(any, type) {\n errorHook.call(this, path.slice(), any, type, val);\n };\n }\n return this._check(val, flags, hook, path);\n };\n Type.prototype.equals = function(type) {\n return utils.isType(type) && utils.jsonEquals(this.schema(), type.schema());\n };\n Type.prototype.schema = function(opts) {\n return this._attrs({\n exportAttrs: !!(opts && opts.exportAttrs),\n noDeref: !!(opts && opts.noDeref)\n });\n };\n Type.prototype.toJSON = function() {\n return this.schema({ exportAttrs: true });\n };\n Type.prototype.toString = function() {\n return f2(\"<%s>\", getClassName(this.typeName));\n };\n Type.prototype._attrs = function(opts) {\n opts.derefed = opts.derefed || {};\n var name = this.name;\n if (name !== void 0) {\n if (opts.noDeref || opts.derefed[name]) {\n return name;\n }\n opts.derefed[name] = true;\n }\n var schema = {};\n if (this.name !== void 0) {\n schema.name = name;\n }\n schema.type = this.typeName;\n var derefedSchema = this._deref(schema, opts);\n if (derefedSchema !== void 0) {\n schema = derefedSchema;\n }\n if (opts.exportAttrs) {\n if (this.aliases && this.aliases.length) {\n schema.aliases = this.aliases;\n }\n if (this.doc !== void 0) {\n schema.doc = this.doc;\n }\n }\n return schema;\n };\n Type.prototype._createBranchConstructor = function() {\n var name = this.branchName;\n if (name === \"null\") {\n return null;\n }\n var attr = ~name.indexOf(\".\") ? \"this['\" + name + \"']\" : \"this.\" + name;\n var body = \"return function Branch$(val) { \" + attr + \" = val; };\";\n var Branch = new Function(body)();\n var toString = new Function(\"return ''\");\n Object.defineProperty(Branch.prototype, \"toString\", {\n get: function() {\n return toString;\n }\n });\n var self = this;\n Branch.type = self;\n Object.defineProperty(Branch.prototype, \"type\", {\n get: function() {\n return self;\n }\n });\n var unwrap = new Function(\"return \" + attr + \";\");\n Object.defineProperty(Branch.prototype, \"unwrap\", {\n get: function() {\n return unwrap;\n }\n });\n return Branch;\n };\n Type.prototype._peek = function(tap) {\n var pos = tap.pos;\n var val = this._read(tap);\n tap.pos = pos;\n return val;\n };\n Type.prototype._check = utils.abstractFunction;\n Type.prototype._deref = utils.abstractFunction;\n Type.prototype._match = utils.abstractFunction;\n Type.prototype._read = utils.abstractFunction;\n Type.prototype._skip = utils.abstractFunction;\n Type.prototype._update = utils.abstractFunction;\n Type.prototype._write = utils.abstractFunction;\n Type.prototype.decode = Type.prototype.binaryDecodeAt;\n Type.prototype.encode = Type.prototype.binaryEncodeAt;\n Type.prototype.fromBuffer = Type.prototype.binaryDecode;\n Type.prototype.toBuffer = Type.prototype.binaryEncode;\n Type.prototype.compareBuffers = Type.prototype.binaryCompare;\n function PrimitiveType(noFreeze) {\n Type.call(this);\n this._branchConstructor = this._createBranchConstructor();\n if (!noFreeze) {\n Object.freeze(this);\n }\n }\n util.inherits(PrimitiveType, Type);\n PrimitiveType.prototype._update = function(resolver, type) {\n if (type.typeName === this.typeName) {\n resolver._read = this._read;\n }\n };\n PrimitiveType.prototype._deref = function() {\n return this.typeName;\n };\n PrimitiveType.prototype.compare = utils.compare;\n function NullType() {\n PrimitiveType.call(this);\n }\n util.inherits(NullType, PrimitiveType);\n NullType.prototype._check = function(val, flags, hook) {\n var b2 = val === null;\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n NullType.prototype._read = function() {\n return null;\n };\n NullType.prototype._skip = function() {\n };\n NullType.prototype._write = function(tap, val) {\n if (val !== null) {\n throwInvalidError(val, this);\n }\n };\n NullType.prototype._match = function() {\n return 0;\n };\n NullType.prototype.compare = NullType.prototype._match;\n NullType.prototype.typeName = \"null\";\n function BooleanType() {\n PrimitiveType.call(this);\n }\n util.inherits(BooleanType, PrimitiveType);\n BooleanType.prototype._check = function(val, flags, hook) {\n var b2 = typeof val == \"boolean\";\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n BooleanType.prototype._read = function(tap) {\n return tap.readBoolean();\n };\n BooleanType.prototype._skip = function(tap) {\n tap.skipBoolean();\n };\n BooleanType.prototype._write = function(tap, val) {\n if (typeof val != \"boolean\") {\n throwInvalidError(val, this);\n }\n tap.writeBoolean(val);\n };\n BooleanType.prototype._match = function(tap1, tap2) {\n return tap1.matchBoolean(tap2);\n };\n BooleanType.prototype.typeName = \"boolean\";\n function IntType() {\n PrimitiveType.call(this);\n }\n util.inherits(IntType, PrimitiveType);\n IntType.prototype._check = function(val, flags, hook) {\n var b2 = val === (val | 0);\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n IntType.prototype._read = function(tap) {\n return tap.readInt();\n };\n IntType.prototype._skip = function(tap) {\n tap.skipInt();\n };\n IntType.prototype._write = function(tap, val) {\n if (val !== (val | 0)) {\n throwInvalidError(val, this);\n }\n tap.writeInt(val);\n };\n IntType.prototype._match = function(tap1, tap2) {\n return tap1.matchInt(tap2);\n };\n IntType.prototype.typeName = \"int\";\n function LongType() {\n PrimitiveType.call(this);\n }\n util.inherits(LongType, PrimitiveType);\n LongType.prototype._check = function(val, flags, hook) {\n var b2 = typeof val == \"number\" && val % 1 === 0 && isSafeLong(val);\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n LongType.prototype._read = function(tap) {\n var n = tap.readLong();\n if (!isSafeLong(n)) {\n throw new Error(\"potential precision loss\");\n }\n return n;\n };\n LongType.prototype._skip = function(tap) {\n tap.skipLong();\n };\n LongType.prototype._write = function(tap, val) {\n if (typeof val != \"number\" || val % 1 || !isSafeLong(val)) {\n throwInvalidError(val, this);\n }\n tap.writeLong(val);\n };\n LongType.prototype._match = function(tap1, tap2) {\n return tap1.matchLong(tap2);\n };\n LongType.prototype._update = function(resolver, type) {\n switch (type.typeName) {\n case \"int\":\n resolver._read = type._read;\n break;\n case \"abstract:long\":\n case \"long\":\n resolver._read = this._read;\n }\n };\n LongType.prototype.typeName = \"long\";\n LongType.__with = function(methods, noUnpack) {\n methods = methods || {};\n var mapping = {\n toBuffer: \"_toBuffer\",\n fromBuffer: \"_fromBuffer\",\n fromJSON: \"_fromJSON\",\n toJSON: \"_toJSON\",\n isValid: \"_isValid\",\n compare: \"compare\"\n };\n var type = new AbstractLongType(noUnpack);\n Object.keys(mapping).forEach(function(name) {\n if (methods[name] === void 0) {\n throw new Error(f2(\"missing method implementation: %s\", name));\n }\n type[mapping[name]] = methods[name];\n });\n return Object.freeze(type);\n };\n function FloatType() {\n PrimitiveType.call(this);\n }\n util.inherits(FloatType, PrimitiveType);\n FloatType.prototype._check = function(val, flags, hook) {\n var b2 = typeof val == \"number\";\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n FloatType.prototype._read = function(tap) {\n return tap.readFloat();\n };\n FloatType.prototype._skip = function(tap) {\n tap.skipFloat();\n };\n FloatType.prototype._write = function(tap, val) {\n if (typeof val != \"number\") {\n throwInvalidError(val, this);\n }\n tap.writeFloat(val);\n };\n FloatType.prototype._match = function(tap1, tap2) {\n return tap1.matchFloat(tap2);\n };\n FloatType.prototype._update = function(resolver, type) {\n switch (type.typeName) {\n case \"float\":\n case \"int\":\n resolver._read = type._read;\n break;\n case \"abstract:long\":\n case \"long\":\n resolver._read = function(tap) {\n return tap.readLong();\n };\n }\n };\n FloatType.prototype.typeName = \"float\";\n function DoubleType() {\n PrimitiveType.call(this);\n }\n util.inherits(DoubleType, PrimitiveType);\n DoubleType.prototype._check = function(val, flags, hook) {\n var b2 = typeof val == \"number\";\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n DoubleType.prototype._read = function(tap) {\n return tap.readDouble();\n };\n DoubleType.prototype._skip = function(tap) {\n tap.skipDouble();\n };\n DoubleType.prototype._write = function(tap, val) {\n if (typeof val != \"number\") {\n throwInvalidError(val, this);\n }\n tap.writeDouble(val);\n };\n DoubleType.prototype._match = function(tap1, tap2) {\n return tap1.matchDouble(tap2);\n };\n DoubleType.prototype._update = function(resolver, type) {\n switch (type.typeName) {\n case \"double\":\n case \"float\":\n case \"int\":\n resolver._read = type._read;\n break;\n case \"abstract:long\":\n case \"long\":\n resolver._read = function(tap) {\n return tap.readLong();\n };\n }\n };\n DoubleType.prototype.typeName = \"double\";\n function StringType() {\n PrimitiveType.call(this);\n }\n util.inherits(StringType, PrimitiveType);\n StringType.prototype._check = function(val, flags, hook) {\n var b2 = typeof val == \"string\";\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n StringType.prototype._read = function(tap) {\n return tap.readString();\n };\n StringType.prototype._skip = function(tap) {\n tap.skipString();\n };\n StringType.prototype._write = function(tap, val) {\n if (typeof val != \"string\") {\n throwInvalidError(val, this);\n }\n tap.writeString(val);\n };\n StringType.prototype._match = function(tap1, tap2) {\n return tap1.matchString(tap2);\n };\n StringType.prototype._update = function(resolver, type) {\n switch (type.typeName) {\n case \"bytes\":\n case \"string\":\n resolver._read = this._read;\n }\n };\n StringType.prototype.typeName = \"string\";\n function BytesType() {\n PrimitiveType.call(this);\n }\n util.inherits(BytesType, PrimitiveType);\n BytesType.prototype._check = function(val, flags, hook) {\n var b2 = Buffer.isBuffer(val);\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n BytesType.prototype._read = function(tap) {\n return tap.readBytes();\n };\n BytesType.prototype._skip = function(tap) {\n tap.skipBytes();\n };\n BytesType.prototype._write = function(tap, val) {\n if (!Buffer.isBuffer(val)) {\n throwInvalidError(val, this);\n }\n tap.writeBytes(val);\n };\n BytesType.prototype._match = function(tap1, tap2) {\n return tap1.matchBytes(tap2);\n };\n BytesType.prototype._update = StringType.prototype._update;\n BytesType.prototype.compare = Buffer.compare;\n BytesType.prototype.typeName = \"bytes\";\n function UnionType(schema, opts, scope) {\n Type.call(this);\n if (!Array.isArray(schema)) {\n throw new Error(f2(\"non-array union schema: %j\", schema));\n }\n if (!schema.length) {\n throw new Error(\"empty union\");\n }\n this.types = Object.freeze(schema.map(function(obj) {\n return Type.forSchema(obj, opts, scope);\n }));\n this._branchIndices = {};\n this.types.forEach(function(type, i) {\n if (utils.isType(type, \"union\")) {\n throw new Error(\"unions cannot be directly nested\");\n }\n var branch = type.branchName;\n if (this._branchIndices[branch] !== void 0) {\n throw new Error(f2(\"duplicate union branch name: %j\", branch));\n }\n this._branchIndices[branch] = i;\n }, this);\n }\n util.inherits(UnionType, Type);\n UnionType.prototype._branchConstructor = function() {\n throw new Error(\"unions cannot be directly wrapped\");\n };\n UnionType.prototype._skip = function(tap) {\n this.types[tap.readLong()]._skip(tap);\n };\n UnionType.prototype._match = function(tap1, tap2) {\n var n1 = tap1.readLong();\n var n2 = tap2.readLong();\n if (n1 === n2) {\n return this.types[n1]._match(tap1, tap2);\n } else {\n return n1 < n2 ? -1 : 1;\n }\n };\n UnionType.prototype._deref = function(schema, opts) {\n return this.types.map(function(t) {\n return t._attrs(opts);\n });\n };\n UnionType.prototype.type = function(branchName) {\n var index = this._branchIndices[branchName];\n if (index !== void 0) {\n return this.types[index];\n }\n };\n function UnwrappedUnionType(schema, opts) {\n UnionType.call(this, schema, opts);\n this._dynamicBranches = null;\n this._bucketIndices = {};\n this.types.forEach(function(type, index) {\n if (utils.isType(type, \"abstract\", \"logical\")) {\n if (!this._dynamicBranches) {\n this._dynamicBranches = [];\n }\n this._dynamicBranches.push({ index, type });\n } else {\n var bucket = getTypeBucket(type);\n if (this._bucketIndices[bucket] !== void 0) {\n throw new Error(f2(\"ambiguous unwrapped union: %j\", this));\n }\n this._bucketIndices[bucket] = index;\n }\n }, this);\n Object.freeze(this);\n }\n util.inherits(UnwrappedUnionType, UnionType);\n UnwrappedUnionType.prototype._getIndex = function(val) {\n var index = this._bucketIndices[getValueBucket(val)];\n if (this._dynamicBranches) {\n index = this._getBranchIndex(val, index);\n }\n return index;\n };\n UnwrappedUnionType.prototype._getBranchIndex = function(any, index) {\n var logicalBranches = this._dynamicBranches;\n var i, l, branch;\n for (i = 0, l = logicalBranches.length; i < l; i++) {\n branch = logicalBranches[i];\n if (branch.type._check(any)) {\n if (index === void 0) {\n index = branch.index;\n } else {\n throw new Error(\"ambiguous conversion\");\n }\n }\n }\n return index;\n };\n UnwrappedUnionType.prototype._check = function(val, flags, hook, path) {\n var index = this._getIndex(val);\n var b2 = index !== void 0;\n if (b2) {\n return this.types[index]._check(val, flags, hook, path);\n }\n if (hook) {\n hook(val, this);\n }\n return b2;\n };\n UnwrappedUnionType.prototype._read = function(tap) {\n var index = tap.readLong();\n var branchType = this.types[index];\n if (branchType) {\n return branchType._read(tap);\n } else {\n throw new Error(f2(\"invalid union index: %s\", index));\n }\n };\n UnwrappedUnionType.prototype._write = function(tap, val) {\n var index = this._getIndex(val);\n if (index === void 0) {\n throwInvalidError(val, this);\n }\n tap.writeLong(index);\n if (val !== null) {\n this.types[index]._write(tap, val);\n }\n };\n UnwrappedUnionType.prototype._update = function(resolver, type, opts) {\n var i, l, typeResolver;\n for (i = 0, l = this.types.length; i < l; i++) {\n try {\n typeResolver = this.types[i].createResolver(type, opts);\n } catch (err) {\n continue;\n }\n resolver._read = function(tap) {\n return typeResolver._read(tap);\n };\n return;\n }\n };\n UnwrappedUnionType.prototype.branchType = function(val) {\n var index = this._getIndex(val);\n return index === void 0 ? void 0 : this.types[index];\n };\n UnwrappedUnionType.prototype.branchValue = function(val) {\n return val;\n };\n UnwrappedUnionType.prototype.compare = function(val1, val2, opts) {\n var index1 = this._getIndex(val1);\n var index2 = this._getIndex(val2);\n if (index1 === void 0) {\n throwInvalidError(val1, this);\n } else if (index2 === void 0) {\n throwInvalidError(val2, this);\n } else if (index1 === index2) {\n return this.types[index1].compare(val1, val2, opts);\n } else {\n return utils.compare(index1, index2);\n }\n };\n UnwrappedUnionType.prototype.typeName = \"union:unwrapped\";\n function WrappedUnionType(schema, opts) {\n UnionType.call(this, schema, opts);\n Object.freeze(this);\n }\n util.inherits(WrappedUnionType, UnionType);\n WrappedUnionType.prototype._check = function(val, flags, hook, path) {\n var b2 = false;\n if (val === null) {\n b2 = this._branchIndices[\"null\"] !== void 0;\n } else if (typeof val == \"object\") {\n var keys = Object.keys(val);\n if (keys.length === 1) {\n var name = keys[0];\n var index = this._branchIndices[name];\n if (index !== void 0) {\n if (hook) {\n path.push(name);\n b2 = this.types[index]._check(val[name], flags, hook, path);\n path.pop();\n return b2;\n } else {\n return this.types[index]._check(val[name], flags);\n }\n }\n }\n }\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n WrappedUnionType.prototype._read = function(tap) {\n var type = this.types[tap.readLong()];\n if (!type) {\n throw new Error(f2(\"invalid union index\"));\n }\n var Branch = type._branchConstructor;\n if (Branch === null) {\n return null;\n } else {\n return new Branch(type._read(tap));\n }\n };\n WrappedUnionType.prototype._write = function(tap, val) {\n var index, keys, name;\n if (val === null) {\n index = this._branchIndices[\"null\"];\n if (index === void 0) {\n throwInvalidError(val, this);\n }\n tap.writeLong(index);\n } else {\n keys = Object.keys(val);\n if (keys.length === 1) {\n name = keys[0];\n index = this._branchIndices[name];\n }\n if (index === void 0) {\n throwInvalidError(val, this);\n }\n tap.writeLong(index);\n this.types[index]._write(tap, val[name]);\n }\n };\n WrappedUnionType.prototype._update = function(resolver, type, opts) {\n var i, l, typeResolver, Branch;\n for (i = 0, l = this.types.length; i < l; i++) {\n try {\n typeResolver = this.types[i].createResolver(type, opts);\n } catch (err) {\n continue;\n }\n Branch = this.types[i]._branchConstructor;\n if (Branch) {\n resolver._read = function(tap) {\n return new Branch(typeResolver._read(tap));\n };\n } else {\n resolver._read = function() {\n return null;\n };\n }\n return;\n }\n };\n WrappedUnionType.prototype.branchType = function(val) {\n if (typeof val != \"object\") {\n return void 0;\n }\n var name = val === null ? \"null\" : Object.keys(val)[0];\n var index = this._branchIndices[name];\n return index === void 0 ? void 0 : this.types[index];\n };\n WrappedUnionType.prototype.branchValue = function(val) {\n if (val === null) {\n return null;\n }\n return val[Object.keys(val)[0]];\n };\n WrappedUnionType.prototype.compare = function(val1, val2, opts) {\n var name1 = val1 === null ? \"null\" : Object.keys(val1)[0];\n var name2 = val2 === null ? \"null\" : Object.keys(val2)[0];\n var index = this._branchIndices[name1];\n if (name1 === name2) {\n return name1 === \"null\" ? 0 : this.types[index].compare(val1[name1], val2[name1], opts);\n } else {\n return utils.compare(index, this._branchIndices[name2]);\n }\n };\n WrappedUnionType.prototype.typeName = \"union:wrapped\";\n function EnumType(schema, opts, scope) {\n Type.call(this, schema, opts, scope);\n if (!Array.isArray(schema.symbols) || !schema.symbols.length) {\n throw new Error(f2(\"invalid enum symbols: %j\", schema.symbols));\n }\n this.symbols = Object.freeze(schema.symbols.slice());\n this._indices = {};\n this.symbols.forEach(function(symbol, i) {\n if (!isValidName(symbol)) {\n throw new Error(f2(\"invalid %s symbol: %j\", this, symbol));\n }\n if (this._indices[symbol] !== void 0) {\n throw new Error(f2(\"duplicate %s symbol: %j\", this, symbol));\n }\n this._indices[symbol] = i;\n }, this);\n this._branchConstructor = this._createBranchConstructor();\n Object.freeze(this);\n }\n util.inherits(EnumType, Type);\n EnumType.prototype._check = function(val, flags, hook) {\n var b2 = this._indices[val] !== void 0;\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n EnumType.prototype._read = function(tap) {\n var index = tap.readLong();\n var symbol = this.symbols[index];\n if (symbol === void 0) {\n throw new Error(f2(\"invalid %s enum index: %s\", this.name, index));\n }\n return symbol;\n };\n EnumType.prototype._skip = function(tap) {\n tap.skipLong();\n };\n EnumType.prototype._write = function(tap, val) {\n var index = this._indices[val];\n if (index === void 0) {\n throwInvalidError(val, this);\n }\n tap.writeLong(index);\n };\n EnumType.prototype._match = function(tap1, tap2) {\n return tap1.matchLong(tap2);\n };\n EnumType.prototype.compare = function(val1, val2) {\n return utils.compare(this._indices[val1], this._indices[val2]);\n };\n EnumType.prototype._update = function(resolver, type) {\n var symbols = this.symbols;\n if (type.typeName === \"enum\" && (!type.name || ~getAliases(this).indexOf(type.name)) && type.symbols.every(function(s) {\n return ~symbols.indexOf(s);\n })) {\n resolver.symbols = type.symbols;\n resolver._read = type._read;\n }\n };\n EnumType.prototype._deref = function(schema) {\n schema.symbols = this.symbols;\n };\n EnumType.prototype.typeName = \"enum\";\n function FixedType(schema, opts, scope) {\n Type.call(this, schema, opts, scope);\n if (schema.size !== (schema.size | 0) || schema.size < 0) {\n throw new Error(f2(\"invalid %s size\", this.branchName));\n }\n this.size = schema.size | 0;\n this._branchConstructor = this._createBranchConstructor();\n Object.freeze(this);\n }\n util.inherits(FixedType, Type);\n FixedType.prototype._check = function(val, flags, hook) {\n var b2 = Buffer.isBuffer(val) && val.length === this.size;\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n FixedType.prototype._read = function(tap) {\n return tap.readFixed(this.size);\n };\n FixedType.prototype._skip = function(tap) {\n tap.skipFixed(this.size);\n };\n FixedType.prototype._write = function(tap, val) {\n if (!Buffer.isBuffer(val) || val.length !== this.size) {\n throwInvalidError(val, this);\n }\n tap.writeFixed(val, this.size);\n };\n FixedType.prototype._match = function(tap1, tap2) {\n return tap1.matchFixed(tap2, this.size);\n };\n FixedType.prototype.compare = Buffer.compare;\n FixedType.prototype._update = function(resolver, type) {\n if (type.typeName === \"fixed\" && this.size === type.size && (!type.name || ~getAliases(this).indexOf(type.name))) {\n resolver.size = this.size;\n resolver._read = this._read;\n }\n };\n FixedType.prototype._deref = function(schema) {\n schema.size = this.size;\n };\n FixedType.prototype.typeName = \"fixed\";\n function MapType(schema, opts, scope) {\n Type.call(this);\n if (!schema.values) {\n throw new Error(f2(\"missing map values: %j\", schema));\n }\n scope = scope || Scope.forOptions(opts);\n this.valuesType = Type.forSchema(schema.values, opts, scope.child(\"*\"));\n this._branchConstructor = this._createBranchConstructor();\n Object.freeze(this);\n }\n util.inherits(MapType, Type);\n MapType.prototype._check = function(val, flags, hook, path) {\n if (!val || typeof val != \"object\" || Array.isArray(val)) {\n if (hook) {\n hook(val, this);\n }\n return false;\n }\n var keys = Object.keys(val);\n var b2 = true;\n var i, l, j2, key;\n if (hook) {\n j2 = path.length;\n path.push(\"\");\n for (i = 0, l = keys.length; i < l; i++) {\n key = path[j2] = keys[i];\n if (!this.valuesType._check(val[key], flags, hook, path)) {\n b2 = false;\n }\n }\n path.pop();\n } else {\n for (i = 0, l = keys.length; i < l; i++) {\n if (!this.valuesType._check(val[keys[i]], flags)) {\n return false;\n }\n }\n }\n return b2;\n };\n MapType.prototype._read = function(tap) {\n var values2 = this.valuesType;\n var val = {};\n var n;\n while (n = readArraySize(tap)) {\n while (n--) {\n var key = tap.readString();\n val[key] = values2._read(tap);\n }\n }\n return val;\n };\n MapType.prototype._skip = function(tap) {\n var values2 = this.valuesType;\n var len, n;\n while (n = tap.readLong()) {\n if (n < 0) {\n len = tap.readLong();\n tap.pos += len;\n } else {\n while (n--) {\n tap.skipString();\n values2._skip(tap);\n }\n }\n }\n };\n MapType.prototype._write = function(tap, val) {\n if (!val || typeof val != \"object\" || Array.isArray(val)) {\n throwInvalidError(val, this);\n }\n var values2 = this.valuesType;\n var keys = Object.keys(val);\n var n = keys.length;\n var i, key;\n if (n) {\n tap.writeLong(n);\n for (i = 0; i < n; i++) {\n key = keys[i];\n tap.writeString(key);\n values2._write(tap, val[key]);\n }\n }\n tap.writeLong(0);\n };\n MapType.prototype._match = function() {\n throw new Error(\"maps cannot be compared\");\n };\n MapType.prototype._update = function(rsv, type, opts) {\n if (type.typeName === \"map\") {\n rsv.valuesType = this.valuesType.createResolver(type.valuesType, opts);\n rsv._read = this._read;\n }\n };\n MapType.prototype.compare = function(val1, val2, opts) {\n if (!opts || !opts.allowMaps) {\n return this._match();\n }\n var keys1 = Object.keys(val1).sort();\n var keys2 = Object.keys(val2).sort();\n var n1 = keys1.length;\n var n2 = keys2.length;\n var i, l, k2, f3;\n for (i = 0, l = Math.min(n1, n2); i < l; i++) {\n k2 = keys1[i];\n if (f3 = utils.compare(k2, keys2[i])) {\n return f3;\n }\n if (f3 = this.valuesType.compare(val1[k2], val2[k2], opts)) {\n return f3;\n }\n }\n return utils.compare(n1, n2);\n };\n MapType.prototype.typeName = \"map\";\n MapType.prototype._deref = function(schema, opts) {\n schema.values = this.valuesType._attrs(opts);\n };\n function ArrayType(schema, opts, scope) {\n Type.call(this);\n if (!schema.items) {\n throw new Error(f2(\"missing array items: %j\", schema));\n }\n scope = scope || Scope.forOptions(opts);\n this.itemsType = Type.forSchema(schema.items, opts, scope.child(\"*\"));\n this._branchConstructor = this._createBranchConstructor();\n Object.freeze(this);\n }\n util.inherits(ArrayType, Type);\n ArrayType.prototype._check = function(val, flags, hook, path) {\n if (!Array.isArray(val)) {\n if (hook) {\n hook(val, this);\n }\n return false;\n }\n var b2 = true;\n var i, l, j2;\n if (hook) {\n j2 = path.length;\n path.push(\"\");\n for (i = 0, l = val.length; i < l; i++) {\n path[j2] = \"\" + i;\n if (!this.itemsType._check(val[i], flags, hook, path)) {\n b2 = false;\n }\n }\n path.pop();\n } else {\n for (i = 0, l = val.length; i < l; i++) {\n if (!this.itemsType._check(val[i], flags)) {\n return false;\n }\n }\n }\n return b2;\n };\n ArrayType.prototype._read = function(tap) {\n var items = this.itemsType;\n var val = [];\n var n;\n while (n = tap.readLong()) {\n if (n < 0) {\n n = -n;\n tap.skipLong();\n }\n while (n--) {\n val.push(items._read(tap));\n }\n }\n return val;\n };\n ArrayType.prototype._skip = function(tap) {\n var len, n;\n while (n = tap.readLong()) {\n if (n < 0) {\n len = tap.readLong();\n tap.pos += len;\n } else {\n while (n--) {\n this.itemsType._skip(tap);\n }\n }\n }\n };\n ArrayType.prototype._write = function(tap, val) {\n if (!Array.isArray(val)) {\n throwInvalidError(val, this);\n }\n var n = val.length;\n var i;\n if (n) {\n tap.writeLong(n);\n for (i = 0; i < n; i++) {\n this.itemsType._write(tap, val[i]);\n }\n }\n tap.writeLong(0);\n };\n ArrayType.prototype._match = function(tap1, tap2) {\n var n1 = tap1.readLong();\n var n2 = tap2.readLong();\n var f3;\n while (n1 && n2) {\n f3 = this.itemsType._match(tap1, tap2);\n if (f3) {\n return f3;\n }\n if (!--n1) {\n n1 = readArraySize(tap1);\n }\n if (!--n2) {\n n2 = readArraySize(tap2);\n }\n }\n return utils.compare(n1, n2);\n };\n ArrayType.prototype._update = function(resolver, type, opts) {\n if (type.typeName === \"array\") {\n resolver.itemsType = this.itemsType.createResolver(type.itemsType, opts);\n resolver._read = this._read;\n }\n };\n ArrayType.prototype._deref = function(schema, opts) {\n schema.items = this.itemsType._attrs(opts);\n };\n ArrayType.prototype.compare = function(val1, val2, opts) {\n var n1 = val1.length;\n var n2 = val2.length;\n var i, l, f3;\n for (i = 0, l = Math.min(n1, n2); i < l; i++) {\n if (f3 = this.itemsType.compare(val1[i], val2[i], opts)) {\n return f3;\n }\n }\n return utils.compare(n1, n2);\n };\n ArrayType.prototype.typeName = \"array\";\n function RecordType(schema, opts, scope) {\n opts = opts || {};\n scope = scope ? scope.clone() : Scope.forOptions(opts);\n if (schema.namespace !== void 0) {\n scope.namespace = schema.namespace;\n } else if (schema.name) {\n var match = /^(.*)\\.[^.]+$/.exec(schema.name);\n if (match) {\n scope.namespace = match[1];\n }\n }\n Type.call(this, schema, opts, scope);\n if (!Array.isArray(schema.fields)) {\n throw new Error(f2(\"non-array record fields: %j\", schema.fields));\n }\n if (utils.hasDuplicates(schema.fields, function(f3) {\n return f3.name;\n })) {\n throw new Error(f2(\"duplicate field name: %j\", schema.fields));\n }\n this._fieldsByName = {};\n this.fields = Object.freeze(schema.fields.map(function(f3) {\n var field = new Field(f3, opts, scope);\n this._fieldsByName[field.name] = field;\n return field;\n }, this));\n this._sizeProp = opts.recordSizeProperty;\n this._isError = schema.type === \"error\";\n this._branchConstructor = this._createBranchConstructor();\n this.recordConstructor = this._createConstructor(\n opts.errorStackTraces,\n opts.omitRecordMethods\n );\n this._read = this._createReader();\n this._skip = this._createSkipper();\n this._write = this._createWriter();\n this._check = this._createChecker();\n Object.freeze(this);\n }\n util.inherits(RecordType, Type);\n RecordType.prototype._getConstructorName = function() {\n return this.name ? utils.capitalize(utils.unqualifyName(this.name)) : this._isError ? \"Error$\" : \"Record$\";\n };\n RecordType.prototype._createConstructor = function(errorStack, plainRecord) {\n var outerArgs = [];\n var innerArgs = [];\n var ds = [];\n var innerBody = \"\";\n var i, l, field, name, defaultValue, hasDefault, stackField;\n for (i = 0, l = this.fields.length; i < l; i++) {\n field = this.fields[i];\n defaultValue = field.defaultValue;\n hasDefault = defaultValue() !== void 0;\n name = field.name;\n if (errorStack && this._isError && name === \"stack\" && utils.isType(field.type, \"string\") && !hasDefault) {\n stackField = field;\n }\n innerArgs.push(\"v\" + i);\n innerBody += \" \";\n if (!hasDefault) {\n innerBody += \"this.\" + name + \" = v\" + i + \";\\n\";\n } else {\n innerBody += \"if (v\" + i + \" === undefined) { \";\n innerBody += \"this.\" + name + \" = d\" + ds.length + \"(); \";\n innerBody += \"} else { this.\" + name + \" = v\" + i + \"; }\\n\";\n outerArgs.push(\"d\" + ds.length);\n ds.push(defaultValue);\n }\n }\n if (stackField) {\n innerBody += \" if (this.stack === undefined) { \";\n if (typeof Error.captureStackTrace == \"function\") {\n innerBody += \"Error.captureStackTrace(this, this.constructor);\";\n } else {\n innerBody += \"this.stack = Error().stack;\";\n }\n innerBody += \" }\\n\";\n }\n var outerBody = \"return function \" + this._getConstructorName() + \"(\";\n outerBody += innerArgs.join() + \") {\\n\" + innerBody + \"};\";\n var Record = new Function(outerArgs.join(), outerBody).apply(void 0, ds);\n if (plainRecord) {\n return Record;\n }\n var self = this;\n Record.type = self;\n Record.fromBuffer = function() {\n return self.binaryDecode.apply(self, arguments);\n };\n Record.fromObject = function() {\n return self.jsonDecode.apply(self, arguments);\n };\n if (this._isError) {\n util.inherits(Record, Error);\n Record.prototype.name = self.name;\n }\n Object.defineProperty(Record.prototype, \"clone\", {\n get: function() {\n return clone;\n }\n });\n Object.defineProperty(Record.prototype, \"compare\", {\n get: function() {\n return compare;\n }\n });\n Object.defineProperty(Record.prototype, \"checkValid\", {\n get: function() {\n return checkValid;\n }\n });\n Object.defineProperty(Record.prototype, \"isValid\", {\n get: function() {\n return isValid;\n }\n });\n Object.defineProperty(Record.prototype, \"toBuffer\", {\n get: function() {\n return toBuffer;\n }\n });\n Object.defineProperty(Record.prototype, \"toObject\", {\n get: function() {\n return toObject;\n }\n });\n Object.defineProperty(Record.prototype, \"toString\", {\n get: function() {\n return toString;\n }\n });\n Object.defineProperty(Record.prototype, \"wrap\", {\n get: function() {\n return wrap;\n }\n });\n return Record;\n function clone() {\n return self.clone(this);\n }\n function compare(val, opts) {\n return self.compare(this, val, opts);\n }\n function checkValid(opts) {\n return self.checkValid(this, opts);\n }\n function isValid(opts) {\n return self.isValid(this, opts);\n }\n function toBuffer() {\n return self.binaryEncode(this);\n }\n function toObject(opts) {\n return self.jsonEncode(this, opts);\n }\n function toString() {\n var str;\n if (self._isError) {\n str = self._getConstructorName();\n if (this.code !== void 0) {\n str += \" [\" + this.code + \"]\";\n }\n if (this.message) {\n str += \": \" + this.message;\n }\n } else {\n str = \"<\" + self._getConstructorName() + \">\";\n }\n return str;\n }\n function wrap() {\n return self.wrap(this);\n }\n };\n RecordType.prototype._createChecker = function() {\n var names = [];\n var values2 = [];\n var name = this._getConstructorName();\n var body = \"return function check\" + name + \"(v, f, h, p) {\\n\";\n body += \" if (\\n\";\n body += \" v === null ||\\n\";\n body += \" typeof v != 'object' ||\\n\";\n body += \" (f && !this._checkFields(v))\\n\";\n body += \" ) {\\n\";\n body += \" if (h) { h(v, this); }\\n\";\n body += \" return false;\\n\";\n body += \" }\\n\";\n if (!this.fields.length) {\n body += \" return true;\\n\";\n } else {\n for (i = 0, l = this.fields.length; i < l; i++) {\n field = this.fields[i];\n names.push(\"t\" + i);\n values2.push(field.type);\n if (field.defaultValue() !== void 0) {\n body += \" var v\" + i + \" = v.\" + field.name + \";\\n\";\n }\n }\n body += \" if (h) {\\n\";\n body += \" var b = 1;\\n\";\n body += \" var j = p.length;\\n\";\n body += \" p.push('');\\n\";\n var i, l, field;\n for (i = 0, l = this.fields.length; i < l; i++) {\n field = this.fields[i];\n body += \" p[j] = '\" + field.name + \"';\\n\";\n body += \" b &= \";\n if (field.defaultValue() === void 0) {\n body += \"t\" + i + \"._check(v.\" + field.name + \", f, h, p);\\n\";\n } else {\n body += \"v\" + i + \" === undefined || \";\n body += \"t\" + i + \"._check(v\" + i + \", f, h, p);\\n\";\n }\n }\n body += \" p.pop();\\n\";\n body += \" return !!b;\\n\";\n body += \" } else {\\n return (\\n \";\n body += this.fields.map(function(field2, i2) {\n return field2.defaultValue() === void 0 ? \"t\" + i2 + \"._check(v.\" + field2.name + \", f)\" : \"(v\" + i2 + \" === undefined || t\" + i2 + \"._check(v\" + i2 + \", f))\";\n }).join(\" &&\\n \");\n body += \"\\n );\\n }\\n\";\n }\n body += \"};\";\n return new Function(names.join(), body).apply(void 0, values2);\n };\n RecordType.prototype._createReader = function() {\n var names = [];\n var values2 = [this.recordConstructor];\n var i, l;\n for (i = 0, l = this.fields.length; i < l; i++) {\n names.push(\"t\" + i);\n values2.push(this.fields[i].type);\n }\n var name = this._getConstructorName();\n var body = \"return function read\" + name + \"(t) {\\n \";\n if (this._sizeProp) {\n body += \"var p = t.pos;\\n var v = new \" + name + \"(\";\n body += names.map(function(s) {\n return s + \"._read(t)\";\n }).join(\", \");\n body += \");\\n \";\n body += \"Object.defineProperty(v, s, {value: t.pos-p, writable: true});\\n\";\n body += \" return v;\\n};\";\n names.push(\"s\");\n values2.push(this._sizeProp);\n } else {\n body += \"return new \" + name + \"(\";\n body += names.map(function(s) {\n return s + \"._read(t)\";\n }).join(\", \");\n body += \");\\n};\";\n }\n names.unshift(name);\n return new Function(names.join(), body).apply(void 0, values2);\n };\n RecordType.prototype._createSkipper = function() {\n var args = [];\n var body = \"return function skip\" + this._getConstructorName() + \"(t) {\\n\";\n var values2 = [];\n var i, l;\n for (i = 0, l = this.fields.length; i < l; i++) {\n args.push(\"t\" + i);\n values2.push(this.fields[i].type);\n body += \" t\" + i + \"._skip(t);\\n\";\n }\n body += \"}\";\n return new Function(args.join(), body).apply(void 0, values2);\n };\n RecordType.prototype._createWriter = function() {\n var args = [];\n var name = this._getConstructorName();\n var body = \"return function write\" + name + \"(t, v) {\\n\";\n var values2 = [];\n var i, l, field, value;\n for (i = 0, l = this.fields.length; i < l; i++) {\n field = this.fields[i];\n args.push(\"t\" + i);\n values2.push(field.type);\n body += \" \";\n if (field.defaultValue() === void 0) {\n body += \"t\" + i + \"._write(t, v.\" + field.name + \");\\n\";\n } else {\n value = field.type.binaryEncode(field.defaultValue()).toString(\"binary\");\n args.push(\"d\" + i);\n values2.push(value);\n body += \"var v\" + i + \" = v.\" + field.name + \";\\n\";\n body += \"if (v\" + i + \" === undefined) {\\n\";\n body += \" t.writeBinary(d\" + i + \", \" + value.length + \");\\n\";\n body += \" } else {\\n t\" + i + \"._write(t, v\" + i + \");\\n }\\n\";\n }\n }\n body += \"}\";\n return new Function(args.join(), body).apply(void 0, values2);\n };\n RecordType.prototype._update = function(resolver, type, opts) {\n if (type.name && !~getAliases(this).indexOf(type.name)) {\n throw new Error(f2(\"no alias found for %s\", type.name));\n }\n var rFields = this.fields;\n var wFields = type.fields;\n var wFieldsMap = utils.toMap(wFields, function(f3) {\n return f3.name;\n });\n var innerArgs = [];\n var resolvers = {};\n var i, j2, field, name, names, matches, fieldResolver;\n for (i = 0; i < rFields.length; i++) {\n field = rFields[i];\n names = getAliases(field);\n matches = [];\n for (j2 = 0; j2 < names.length; j2++) {\n name = names[j2];\n if (wFieldsMap[name]) {\n matches.push(name);\n }\n }\n if (matches.length > 1) {\n throw new Error(\n f2(\"ambiguous aliasing for %s.%s (%s)\", type.name, field.name, matches)\n );\n }\n if (!matches.length) {\n if (field.defaultValue() === void 0) {\n throw new Error(\n f2(\"no matching field for default-less %s.%s\", type.name, field.name)\n );\n }\n innerArgs.push(\"undefined\");\n } else {\n name = matches[0];\n fieldResolver = {\n resolver: field.type.createResolver(wFieldsMap[name].type, opts),\n name: \"_\" + field.name\n // Reader field name.\n };\n if (!resolvers[name]) {\n resolvers[name] = [fieldResolver];\n } else {\n resolvers[name].push(fieldResolver);\n }\n innerArgs.push(fieldResolver.name);\n }\n }\n var lazyIndex = -1;\n i = wFields.length;\n while (i && resolvers[wFields[--i].name] === void 0) {\n lazyIndex = i;\n }\n var uname = this._getConstructorName();\n var args = [uname];\n var values2 = [this.recordConstructor];\n var body = \" return function read\" + uname + \"(t, b) {\\n\";\n var indent;\n if (this._sizeProp) {\n body += \" var c = 0;\\n var p;\\n\";\n }\n for (i = 0; i < wFields.length; i++) {\n if (i === lazyIndex) {\n body += \" if (!b) {\\n\";\n }\n indent = ~lazyIndex && i >= lazyIndex ? \" \" : \" \";\n field = type.fields[i];\n name = field.name;\n if (resolvers[name] === void 0) {\n args.push(\"r\" + i);\n values2.push(field.type);\n body += indent + \"r\" + i + \"._skip(t);\\n\";\n } else {\n j2 = resolvers[name].length;\n if (this._sizeProp) {\n body += indent + \"p = t.pos;\\n\";\n }\n while (j2--) {\n args.push(\"r\" + i + \"f\" + j2);\n fieldResolver = resolvers[name][j2];\n values2.push(fieldResolver.resolver);\n body += indent + \"var \" + fieldResolver.name + \" = \";\n body += \"r\" + i + \"f\" + j2 + \"._\" + (j2 ? \"peek\" : \"read\") + \"(t);\\n\";\n }\n if (this._sizeProp) {\n body += indent + \"c += t.pos-p;\\n\";\n }\n }\n }\n if (~lazyIndex) {\n body += \" }\\n\";\n }\n body += \" var v = new \" + uname + \"(\" + innerArgs.join() + \");\\n\";\n if (this._sizeProp) {\n body += \" Object.defineProperty(v, s, {value: c, writable: true});\\n\";\n values2.push(this._sizeProp);\n args.push(\"s\");\n }\n body += \" return v;\\n};\";\n resolver._read = new Function(args.join(), body).apply(void 0, values2);\n };\n RecordType.prototype._match = function(tap1, tap2) {\n var fields = this.fields;\n var i, l, field, order, type;\n for (i = 0, l = fields.length; i < l; i++) {\n field = fields[i];\n order = field._order;\n type = field.type;\n if (order) {\n order *= type._match(tap1, tap2);\n if (order) {\n return order;\n }\n } else {\n type._skip(tap1);\n type._skip(tap2);\n }\n }\n return 0;\n };\n RecordType.prototype._checkFields = function(obj) {\n var keys = Object.keys(obj);\n var i, l;\n for (i = 0, l = keys.length; i < l; i++) {\n if (!this._fieldsByName[keys[i]]) {\n return false;\n }\n }\n return true;\n };\n RecordType.prototype._deref = function(schema, opts) {\n schema.fields = this.fields.map(function(field) {\n var fieldType = field.type;\n var fieldSchema = {\n name: field.name,\n type: fieldType._attrs(opts)\n };\n if (opts.exportAttrs) {\n if (field._defaultValue !== void 0) {\n fieldSchema[\"default\"] = field._defaultValue;\n }\n var fieldOrder = field.order;\n if (fieldOrder !== \"ascending\") {\n fieldSchema.order = fieldOrder;\n }\n var fieldAliases = field.aliases;\n if (fieldAliases.length) {\n fieldSchema.aliases = fieldAliases;\n }\n var fieldDoc = field.doc;\n if (fieldDoc !== void 0) {\n fieldSchema.doc = fieldDoc;\n }\n }\n return fieldSchema;\n });\n };\n RecordType.prototype.compare = function(val1, val2, opts) {\n var fields = this.fields;\n var i, l, field, name, order, type;\n for (i = 0, l = fields.length; i < l; i++) {\n field = fields[i];\n name = field.name;\n order = field._order;\n type = field.type;\n if (order) {\n order *= type.compare(val1[name], val2[name], opts);\n if (order) {\n return order;\n }\n }\n }\n return 0;\n };\n RecordType.prototype.field = function(name) {\n return this._fieldsByName[name];\n };\n Object.defineProperty(RecordType.prototype, \"typeName\", {\n enumerable: true,\n get: function() {\n return this._isError ? \"error\" : \"record\";\n }\n });\n function LogicalType(schema, opts, scope) {\n this._logicalTypeName = schema.logicalType;\n Type.call(this);\n LOGICAL_TYPE = this;\n try {\n this._underlyingType = Type.forSchema(schema, opts, scope);\n } finally {\n LOGICAL_TYPE = null;\n var l = UNDERLYING_TYPES.length;\n if (l && UNDERLYING_TYPES[l - 1][0] === this) {\n UNDERLYING_TYPES.pop();\n }\n }\n if (utils.isType(this.underlyingType, \"union\")) {\n this._branchConstructor = this.underlyingType._branchConstructor;\n } else {\n this._branchConstructor = this.underlyingType._createBranchConstructor();\n }\n }\n util.inherits(LogicalType, Type);\n Object.defineProperty(LogicalType.prototype, \"typeName\", {\n enumerable: true,\n get: function() {\n return \"logical:\" + this._logicalTypeName;\n }\n });\n Object.defineProperty(LogicalType.prototype, \"underlyingType\", {\n enumerable: true,\n get: function() {\n if (this._underlyingType) {\n return this._underlyingType;\n }\n var i, l, arr;\n for (i = 0, l = UNDERLYING_TYPES.length; i < l; i++) {\n arr = UNDERLYING_TYPES[i];\n if (arr[0] === this) {\n return arr[1];\n }\n }\n }\n });\n LogicalType.prototype._read = function(tap) {\n return this._fromValue(this.underlyingType._read(tap));\n };\n LogicalType.prototype._write = function(tap, any) {\n this.underlyingType._write(tap, this._toValue(any));\n };\n LogicalType.prototype._check = function(any, flags, hook, path) {\n try {\n var val = this._toValue(any);\n } catch (err) {\n }\n if (val === void 0) {\n if (hook) {\n hook(any, this);\n }\n return false;\n }\n return this.underlyingType._check(val, flags, hook, path);\n };\n LogicalType.prototype._update = function(resolver, type, opts) {\n var ret = this._resolve(type, opts);\n var map, rsv;\n if (Array.isArray(ret)) {\n map = ret[0];\n rsv = ret[1];\n } else {\n map = ret;\n rsv = type;\n }\n if (map) {\n resolver._read = function(tap) {\n return map(rsv._read(tap));\n };\n }\n };\n LogicalType.prototype.compare = function(obj1, obj2, opts) {\n var val1 = this._toValue(obj1);\n var val2 = this._toValue(obj2);\n return this.underlyingType.compare(val1, val2, opts);\n };\n LogicalType.prototype._deref = function(schema, opts) {\n var type = this.underlyingType;\n var isVisited = type.name !== void 0 && opts.derefed[type.name];\n schema = type._attrs(opts);\n if (!isVisited && opts.exportAttrs) {\n if (typeof schema == \"string\") {\n schema = { type: schema };\n }\n schema.logicalType = this._logicalTypeName;\n this._export(schema);\n }\n return schema;\n };\n LogicalType.prototype._skip = function(tap) {\n this.underlyingType._skip(tap);\n };\n LogicalType.prototype._export = function() {\n };\n LogicalType.prototype._fromValue = utils.abstractFunction;\n LogicalType.prototype._toValue = utils.abstractFunction;\n LogicalType.prototype._resolve = utils.abstractFunction;\n function AbstractLongType(noUnpack) {\n this._concreteTypeName = \"long\";\n PrimitiveType.call(this, true);\n this._noUnpack = !!noUnpack;\n }\n util.inherits(AbstractLongType, LongType);\n AbstractLongType.prototype.typeName = \"abstract:long\";\n AbstractLongType.prototype._check = function(val, flags, hook) {\n var b2 = this._isValid(val);\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n AbstractLongType.prototype._read = function(tap) {\n var buf, pos;\n if (this._noUnpack) {\n pos = tap.pos;\n tap.skipLong();\n buf = tap.buf.slice(pos, tap.pos);\n } else {\n buf = tap.unpackLongBytes(tap);\n }\n if (tap.isValid()) {\n return this._fromBuffer(buf);\n }\n };\n AbstractLongType.prototype._write = function(tap, val) {\n if (!this._isValid(val)) {\n throwInvalidError(val, this);\n }\n var buf = this._toBuffer(val);\n if (this._noUnpack) {\n tap.writeFixed(buf);\n } else {\n tap.packLongBytes(buf);\n }\n };\n AbstractLongType.prototype._deref = function() {\n return \"long\";\n };\n AbstractLongType.prototype._update = function(resolver, type) {\n var self = this;\n switch (type.typeName) {\n case \"int\":\n resolver._read = function(tap) {\n return self._fromJSON(type._read(tap));\n };\n break;\n case \"abstract:long\":\n case \"long\":\n resolver._read = function(tap) {\n return self._read(tap);\n };\n }\n };\n AbstractLongType.prototype._fromBuffer = utils.abstractFunction;\n AbstractLongType.prototype._toBuffer = utils.abstractFunction;\n AbstractLongType.prototype._fromJSON = utils.abstractFunction;\n AbstractLongType.prototype._toJSON = utils.abstractFunction;\n AbstractLongType.prototype._isValid = utils.abstractFunction;\n AbstractLongType.prototype.compare = utils.abstractFunction;\n function Field(schema, opts, scope) {\n var name = schema.name;\n if (typeof name != \"string\" || !isValidName(name)) {\n throw new Error(f2(\"invalid field name: %s\", name));\n }\n this.name = name;\n this.type = Type.forSchema(schema.type, opts, scope.child(name));\n this.aliases = schema.aliases || [];\n this.doc = schema.doc !== void 0 ? \"\" + schema.doc : void 0;\n this._order = function(order) {\n switch (order) {\n case \"ascending\":\n return 1;\n case \"descending\":\n return -1;\n case \"ignore\":\n return 0;\n default:\n throw new Error(f2(\"invalid order: %j\", order));\n }\n }(schema.order === void 0 ? \"ascending\" : schema.order);\n this._defaultValue = schema[\"default\"];\n var value = this._defaultValue;\n if (value !== void 0) {\n var type = this.type;\n try {\n var val = values.fromDefaultJSON(value, type);\n } catch (err) {\n throw new Error(f2(\"bad default in field %s: %s\", name, err));\n }\n if (isPrimitive(type.typeName) && type.typeName !== \"bytes\") {\n this.defaultValue = function() {\n return val;\n };\n } else {\n this.defaultValue = function() {\n return values.fromDefaultJSON(value, type);\n };\n }\n }\n Object.freeze(this);\n }\n Field.prototype.defaultValue = function() {\n };\n Object.defineProperty(Field.prototype, \"order\", {\n enumerable: true,\n get: function() {\n return [\"descending\", \"ignore\", \"ascending\"][this._order + 1];\n }\n });\n function Resolver(writerType, readerType) {\n this._writerType = writerType;\n this._readerType = readerType;\n this._read = null;\n this.itemsType = null;\n this.size = 0;\n this.symbols = null;\n this.valuesType = null;\n }\n Resolver.prototype._peek = Type.prototype._peek;\n function Scope(namespace, path) {\n this.namespace = namespace;\n this.path = path || [];\n }\n Scope.forOptions = function(opts) {\n return new Scope(opts ? opts.namespace : void 0);\n };\n Scope.prototype.clone = function() {\n return new Scope(this.namespace, this.path);\n };\n Scope.prototype.child = function(step) {\n return new Scope(this.namespace, this.path.concat(\"\" + step));\n };\n function readValue(type, tap, resolver, lazy) {\n if (resolver) {\n if (resolver._readerType !== type) {\n throw new Error(\"invalid resolver\");\n }\n return resolver._read(tap, lazy);\n } else {\n return type._read(tap);\n }\n }\n function qualifyName(name, namespace) {\n if (~name.indexOf(\".\")) {\n name = name.replace(/^\\./, \"\");\n } else if (namespace) {\n name = namespace + \".\" + name;\n }\n name.split(\".\").forEach(function(part) {\n if (!isValidName(part)) {\n throw new Error(f2(\"invalid name: %j\", name));\n }\n });\n var tail = utils.unqualifyName(name);\n return isPrimitive(tail) ? tail : name;\n }\n function getAliases(obj) {\n var names = {};\n if (obj.name) {\n names[obj.name] = true;\n }\n var aliases = obj.aliases;\n var i, l;\n for (i = 0, l = aliases.length; i < l; i++) {\n names[aliases[i]] = true;\n }\n return Object.keys(names);\n }\n function isPrimitive(typeName) {\n var type = TYPES[typeName];\n return type && type.prototype instanceof PrimitiveType;\n }\n function getClassName(typeName) {\n if (typeName === \"error\") {\n typeName = \"record\";\n } else {\n var match = /^([^:]+):(.*)$/.exec(typeName);\n if (match) {\n if (match[1] === \"union\") {\n typeName = match[2] + \"Union\";\n } else {\n typeName = match[1];\n }\n }\n }\n return utils.capitalize(typeName) + \"Type\";\n }\n function readArraySize(tap) {\n var n = tap.readLong();\n if (n < 0) {\n n = -n;\n tap.skipLong();\n }\n return n;\n }\n function isSafeLong(n) {\n return n >= -9007199254740990 && n <= 9007199254740990;\n }\n function isValidName(str) {\n return NAME_PATTERN.test(str);\n }\n function throwInvalidError(val, type) {\n throw new Error(f2(\"invalid %j: %j\", type.schema(), val));\n }\n function maybeQualify(name, ns) {\n var unqualified = utils.unqualifyName(name);\n return isPrimitive(unqualified) ? unqualified : qualifyName(name, ns);\n }\n function getTypeBucket(type) {\n var typeName = type.typeName;\n switch (typeName) {\n case \"double\":\n case \"float\":\n case \"int\":\n case \"long\":\n return \"number\";\n case \"bytes\":\n case \"fixed\":\n return \"buffer\";\n case \"enum\":\n return \"string\";\n case \"map\":\n case \"error\":\n case \"record\":\n return \"object\";\n default:\n return typeName;\n }\n }\n function getValueBucket(val) {\n if (val === null) {\n return \"null\";\n }\n var bucket = typeof val;\n if (bucket === \"object\") {\n if (Array.isArray(val)) {\n return \"array\";\n } else if (Buffer.isBuffer(val)) {\n return \"buffer\";\n }\n }\n return bucket;\n }\n function isAmbiguous(types) {\n var buckets = {};\n var i, l, bucket, type;\n for (i = 0, l = types.length; i < l; i++) {\n type = types[i];\n if (!utils.isType(type, \"logical\")) {\n bucket = getTypeBucket(type);\n if (buckets[bucket]) {\n return true;\n }\n buckets[bucket] = true;\n }\n }\n return false;\n }\n function combineNumbers(types) {\n var typeNames = [\"int\", \"long\", \"float\", \"double\"];\n var superIndex = -1;\n var superType = null;\n var i, l, type, index;\n for (i = 0, l = types.length; i < l; i++) {\n type = types[i];\n index = typeNames.indexOf(type.typeName);\n if (index > superIndex) {\n superIndex = index;\n superType = type;\n }\n }\n return superType;\n }\n function combineStrings(types, opts, scope) {\n var symbols = {};\n var i, l, type, typeSymbols;\n for (i = 0, l = types.length; i < l; i++) {\n type = types[i];\n if (type.typeName === \"string\") {\n return type;\n }\n typeSymbols = type.symbols;\n var j2, m2;\n for (j2 = 0, m2 = typeSymbols.length; j2 < m2; j2++) {\n symbols[typeSymbols[j2]] = true;\n }\n }\n return Type.forSchema({\n type: \"enum\",\n symbols: Object.keys(symbols)\n }, opts, scope);\n }\n function combineBuffers(types, opts, scope) {\n var size = -1;\n var i, l, type;\n for (i = 0, l = types.length; i < l; i++) {\n type = types[i];\n if (type.typeName === \"bytes\") {\n return type;\n }\n if (size === -1) {\n size = type.size;\n } else if (type.size !== size) {\n size = -2;\n }\n }\n return size < 0 ? Type.forSchema(\"bytes\", opts, scope) : types[0];\n }\n function combineObjects(types, opts, scope) {\n var allTypes = [];\n var fieldTypes = {};\n var fieldDefaults = {};\n var isValidRecord = true;\n var i, l, type, fields;\n for (i = 0, l = types.length; i < l; i++) {\n type = types[i];\n if (type.typeName === \"map\") {\n isValidRecord = false;\n allTypes.push(type.valuesType);\n } else {\n fields = type.fields;\n var j2, m2, field, fieldDefault, fieldName, fieldType;\n for (j2 = 0, m2 = fields.length; j2 < m2; j2++) {\n field = fields[j2];\n fieldName = field.name;\n fieldType = field.type;\n allTypes.push(fieldType);\n if (isValidRecord) {\n if (!fieldTypes[fieldName]) {\n fieldTypes[fieldName] = [];\n }\n fieldTypes[fieldName].push(fieldType);\n fieldDefault = field.defaultValue();\n if (fieldDefault !== void 0) {\n fieldDefaults[fieldName] = fieldDefault;\n }\n }\n }\n }\n }\n if (isValidRecord) {\n var fieldNames = Object.keys(fieldTypes);\n for (i = 0, l = fieldNames.length; i < l; i++) {\n fieldName = fieldNames[i];\n if (fieldTypes[fieldName].length < types.length && fieldDefaults[fieldName] === void 0) {\n if (opts && opts.strictDefaults) {\n isValidRecord = false;\n } else {\n fieldTypes[fieldName].unshift(\n Type.forSchema(\"null\", opts, scope.child(fieldName))\n );\n fieldDefaults[fieldName] = null;\n }\n }\n }\n }\n var schema;\n if (isValidRecord) {\n schema = {\n type: \"record\",\n fields: fieldNames.map(function(s) {\n var childScope = scope.child(s);\n var fieldType2 = Type.forTypes(fieldTypes[s], opts, childScope);\n var fieldDefault2 = fieldDefaults[s];\n if (fieldDefault2 !== void 0 && ~fieldType2.typeName.indexOf(\"union\")) {\n var unionTypes = fieldType2.types.slice();\n var i2, l2;\n for (i2 = 0, l2 = unionTypes.length; i2 < l2; i2++) {\n if (unionTypes[i2].isValid(fieldDefault2)) {\n break;\n }\n }\n if (i2 > 0) {\n var unionType = unionTypes[0];\n unionTypes[0] = unionTypes[i2];\n unionTypes[i2] = unionType;\n fieldType2 = Type.forSchema(unionTypes, opts, childScope);\n }\n }\n return {\n name: s,\n type: fieldType2,\n \"default\": fieldDefaults[s]\n };\n })\n };\n } else {\n schema = {\n type: \"map\",\n values: Type.forTypes(allTypes, opts, scope.child(\"*\"))\n };\n }\n return Type.forSchema(schema, opts, scope);\n }\n module.exports = {\n constructors: function() {\n var types = {\n Type,\n LogicalType,\n UnwrappedUnionType,\n WrappedUnionType\n };\n var typeNames = Object.keys(TYPES);\n var i, l, typeName;\n for (i = 0, l = typeNames.length; i < l; i++) {\n typeName = typeNames[i];\n types[getClassName(typeName)] = TYPES[typeName];\n }\n return types;\n }(),\n getTypeBucket,\n getValueBucket,\n isPrimitive,\n isValidName,\n qualifyName\n };\n }\n});\n\n// node_modules/@avro/types/lib/index.js\nvar require_lib = __commonJS({\n \"node_modules/@avro/types/lib/index.js\"(exports, module) {\n \"use strict\";\n module.exports = require_types().constructors;\n }\n});\n\n// node_modules/ultralight-s3/lib/index.min.js\nvar x = \"AWS4-HMAC-SHA256\";\nvar K = \"aws4_request\";\nvar O = \"s3\";\nvar v = \"2\";\nvar E = \"UNSIGNED-PAYLOAD\";\nvar W = \"application/octet-stream\";\nvar M = \"application/xml\";\nvar w = \"application/json\";\nvar X = [\"accessKeyId\", \"secretAccessKey\", \"sessionToken\", \"password\"];\nvar f = \"x-amz-content-sha256\";\nvar Z = \"x-amz-date\";\nvar V = \"host\";\nvar J = \"Authorization\";\nvar m = \"Content-Type\";\nvar T = \"Content-Length\";\nvar P = \"etag\";\nvar C = \"last-modified\";\nvar u = \"ultralight-s3 Module: \";\nvar ee = `${u}accessKeyId must be a non-empty string`;\nvar te = `${u}secretAccessKey must be a non-empty string`;\nvar se = `${u}endpoint must be a non-empty string`;\nvar re = `${u}bucketName must be a non-empty string`;\nvar j = `${u}key must be a non-empty string`;\nvar $ = `${u}uploadId must be a non-empty string`;\nvar L = `${u}parts must be a non-empty array`;\nvar k = `${u}Each part must have a partNumber (number) and ETag (string)`;\nvar D = `${u}data must be a Buffer or string`;\nvar B = `${u}prefix must be a string`;\nvar F = `${u}maxKeys must be a positive integer`;\nvar G = `${u}delimiter must be a string`;\nvar z = crypto.createHmac || (await import(\"node:crypto\")).createHmac;\nvar Q = crypto.createHash || (await import(\"node:crypto\")).createHash;\ntypeof z > \"u\" && typeof Q > \"u\" && console.error(\"ultralight-S3 Module: Crypto functions are not available, please report the issue with necessary description: https://github.com/sentienhq/ultralight-s3/issues\");\nvar ne = { contents: true };\nvar oe = (p) => `%${p.charCodeAt(0).toString(16).toUpperCase()}`;\nvar q = (p) => encodeURIComponent(p).replace(/[!'()*]/g, oe);\nvar y = (p) => q(p).replace(/%2F/g, \"/\");\nvar N = class {\n constructor({ accessKeyId: e, secretAccessKey: t, endpoint: r, bucketName: n, region: o = \"auto\", maxRequestSizeInBytes: i = 5242880, requestAbortTimeout: a = void 0, logger: c = void 0 }) {\n this.getBucketName = () => this.bucketName, this.setBucketName = (s) => {\n this.bucketName = s;\n }, this.getRegion = () => this.region, this.setRegion = (s) => {\n this.region = s;\n }, this.getEndpoint = () => this.endpoint, this.setEndpoint = (s) => {\n this.endpoint = s;\n }, this.getMaxRequestSizeInBytes = () => this.maxRequestSizeInBytes, this.setMaxRequestSizeInBytes = (s) => {\n this.maxRequestSizeInBytes = s;\n }, this.sanitizeETag = (s) => H(s), this.getProps = () => ({ accessKeyId: this.accessKeyId, secretAccessKey: this.secretAccessKey, region: this.region, bucket: this.bucketName, endpoint: this.endpoint, maxRequestSizeInBytes: this.maxRequestSizeInBytes, requestAbortTimeout: this.requestAbortTimeout, logger: this.logger }), this.setProps = (s) => {\n this._validateConstructorParams(s.accessKeyId, s.secretAccessKey, s.bucketName, s.endpoint), this.accessKeyId = s.accessKeyId, this.secretAccessKey = s.secretAccessKey, this.region = s.region || \"auto\", this.bucketName = s.bucketName, this.endpoint = s.endpoint, this.maxRequestSizeInBytes = s.maxRequestSizeInBytes || 5242880, this.requestAbortTimeout = s.requestAbortTimeout, this.logger = s.logger;\n }, this._validateConstructorParams(e, t, r, n), this.accessKeyId = e, this.secretAccessKey = t, this.endpoint = r, this.bucketName = n, this.region = o, this.maxRequestSizeInBytes = i, this.requestAbortTimeout = a, this.logger = c;\n }\n _validateConstructorParams(e, t, r, n) {\n if (typeof e != \"string\" || e.trim().length === 0) throw new TypeError(ee);\n if (typeof t != \"string\" || t.trim().length === 0) throw new TypeError(te);\n if (typeof r != \"string\" || r.trim().length === 0) throw new TypeError(se);\n if (typeof n != \"string\" || n.trim().length === 0) throw new TypeError(re);\n }\n _checkMethodHeadnGet(e) {\n if (e !== \"GET\" && e !== \"HEAD\") throw this._log(\"error\", `${u}method must be either GET or HEAD`), new Error(\"method must be either GET or HEAD\");\n }\n _checkKey(e) {\n if (typeof e != \"string\" || e.trim().length === 0) throw this._log(\"error\", j), new TypeError(j);\n }\n _checkDelimiter(e) {\n if (typeof e != \"string\" || e.trim().length === 0) throw this._log(\"error\", G), new TypeError(G);\n }\n _checkPrefix(e) {\n if (typeof e != \"string\") throw this._log(\"error\", B), new TypeError(B);\n }\n _checkMaxKeys(e) {\n if (typeof e != \"number\" || e <= 0) throw this._log(\"error\", F), new TypeError(F);\n }\n _checkOpts(e) {\n if (typeof e != \"object\") throw this._log(\"error\", `${u}opts must be an object`), new TypeError(`${u}opts must be an object`);\n }\n _log(e, t, r = {}) {\n if (this.logger && typeof this.logger[e] == \"function\") {\n let n = (a) => typeof a != \"object\" || a === null ? a : Object.keys(a).reduce((c, s) => (X.includes(s.toLowerCase()) ? c[s] = \"[REDACTED]\" : typeof a[s] == \"object\" && a[s] !== null ? c[s] = n(a[s]) : c[s] = a[s], c), Array.isArray(a) ? [] : {}), o = n(r), i = { timestamp: (/* @__PURE__ */ new Date()).toISOString(), level: e, message: t, ...o, context: n({ bucketName: this.bucketName, region: this.region, endpoint: this.endpoint, accessKeyId: this.accessKeyId ? `${this.accessKeyId.substring(0, 4)}...` : void 0 }) };\n this.logger[e](i);\n }\n }\n async getContentLength(e) {\n this._checkKey(e);\n let t = { [f]: E }, r = y(e), { url: n, headers: o } = await this._sign(\"HEAD\", r, {}, t, \"\"), a = (await this._sendRequest(n, \"HEAD\", o)).headers.get(T);\n return a ? parseInt(a, 10) : 0;\n }\n async bucketExists() {\n let e = { [f]: E }, { url: t, headers: r } = await this._sign(\"HEAD\", \"\", {}, e, \"\"), n = await this._sendRequest(t, \"HEAD\", r);\n return !!(n.ok && n.status === 200);\n }\n async fileExists(e, t = {}) {\n this._checkKey(e);\n let { filteredOpts: r, conditionalHeaders: n } = this._filterIfHeaders(t), o = { [f]: E, ...n }, i = y(e), { url: a, headers: c } = await this._sign(\"HEAD\", i, r, o, \"\");\n try {\n let s = await this._sendRequest(a, \"HEAD\", c, \"\", [200, 404, 412, 304]);\n return s.status === 404 ? false : s.status === 412 || s.status === 304 ? null : s.ok && s.status === 200 ? true : (this._handleErrorResponse(s), false);\n } catch (s) {\n let l = s instanceof Error ? s.message : String(s);\n throw this._log(\"error\", `${u}Failed to check if file exists: ${l}`), new Error(`${u}Failed to check if file exists: ${l}`);\n }\n }\n async _sign(e, t, r, n, o) {\n let i = (/* @__PURE__ */ new Date()).toISOString().replace(/[:-]|\\.\\d{3}/g, \"\"), a = typeof t == \"string\" && t.length > 0 ? new URL(t, this.endpoint) : new URL(this.endpoint);\n a.pathname = `/${encodeURI(this.bucketName)}${a.pathname}`, n[f] = o ? await U(o) : E, n[Z] = i, n[V] = a.host;\n let c = this._buildCanonicalHeaders(n), s = Object.keys(n).map((_) => _.toLowerCase()).sort().join(\";\"), l = await this._buildCanonicalRequest(e, a, r, c, s, o), h = await this._buildStringToSign(i, l), d = await this._calculateSignature(i, h), g = this._buildAuthorizationHeader(i, s, d);\n return n[J] = g, { url: a.toString(), headers: n };\n }\n _buildCanonicalHeaders(e) {\n return Object.entries(e).map(([t, r]) => `${t.toLowerCase()}:${String(r).trim()}`).sort().join(`\n`);\n }\n async _buildCanonicalRequest(e, t, r, n, o, i) {\n return [e, t.pathname, this._buildCanonicalQueryString(r), `${n}\n`, o, i ? await U(i) : E].join(`\n`);\n }\n async _buildStringToSign(e, t) {\n let r = [e.slice(0, 8), this.region, O, K].join(\"/\");\n return [x, e, r, await U(t)].join(`\n`);\n }\n async _calculateSignature(e, t) {\n let r = await this._getSignatureKey(e.slice(0, 8));\n return A(r, t, \"hex\");\n }\n _buildAuthorizationHeader(e, t, r) {\n let n = [e.slice(0, 8), this.region, O, K].join(\"/\");\n return [`${x} Credential=${this.accessKeyId}/${n}`, `SignedHeaders=${t}`, `Signature=${r}`].join(\", \");\n }\n _filterIfHeaders(e) {\n let t = {}, r = {}, n = [\"if-match\", \"if-none-match\", \"if-modified-since\", \"if-unmodified-since\"];\n for (let [o, i] of Object.entries(e)) n.includes(o) ? r[o] = i : t[o] = i;\n return { filteredOpts: t, conditionalHeaders: r };\n }\n async list(e = \"/\", t = \"\", r = 1e3, n = \"GET\", o = {}) {\n this._checkDelimiter(e), this._checkPrefix(t), this._checkMaxKeys(r), this._checkMethodHeadnGet(n), this._checkOpts(o), this._log(\"info\", `Listing objects in ${t}`);\n let i = { \"list-type\": v, \"max-keys\": String(r), ...o };\n t.length > 0 && (i.prefix = t);\n let a = { [m]: w, [f]: E }, c = e === \"/\" ? e : q(e), { url: s, headers: l } = await this._sign(\"GET\", c, i, a, \"\"), h = `${s}?${new URLSearchParams(i)}`, d = await this._sendRequest(h, \"GET\", l), g = await d.text();\n if (n === \"HEAD\") {\n let R = d.headers.get(T), S = d.headers.get(C), Y = d.headers.get(P);\n return { size: R ? +R : void 0, mtime: S ? new Date(S) : void 0, ETag: Y || void 0 };\n }\n let _ = b(g), I = _.listBucketResult || _.error || _;\n return I.contents || I;\n }\n async listMultiPartUploads(e = \"/\", t = \"\", r = \"GET\", n = {}) {\n var o, i, a;\n this._checkDelimiter(e), this._checkPrefix(t), this._checkMethodHeadnGet(r), this._checkOpts(n), this._log(\"info\", `Listing multipart uploads in ${t}`);\n let c = { uploads: \"\", ...n }, s = { [m]: w, [f]: E }, l = e === \"/\" ? e : q(e), { url: h, headers: d } = await this._sign(\"GET\", l, c, s, \"\"), g = `${h}?${new URLSearchParams(c)}`, _ = await this._sendRequest(g, \"GET\", d), I = await _.text();\n if (r === \"HEAD\") return { size: +((o = _.headers.get(T)) !== null && o !== void 0 ? o : \"0\"), mtime: new Date((i = _.headers.get(C)) !== null && i !== void 0 ? i : \"\"), ETag: (a = _.headers.get(P)) !== null && a !== void 0 ? a : \"\" };\n let R = b(I), S = R.listMultipartUploadsResult || R.error || R;\n return S.uploads || S;\n }\n async get(e, t = {}) {\n this._checkKey(e), this._log(\"info\", `Getting object ${e}`);\n let { filteredOpts: r, conditionalHeaders: n } = this._filterIfHeaders(t), o = { [m]: w, [f]: E, ...n }, i = y(e), { url: a, headers: c } = await this._sign(\"GET\", i, r, o, \"\"), s = await this._sendRequest(a, \"GET\", c, \"\", [200, 404, 412, 304]);\n if (s.status === 404 || s.status === 412 || s.status === 304) return this._log(\"error\", `Failed to get object. Status: ${s.status}`), null;\n if (!s.ok) throw this._log(\"error\", `Failed to get object. Status: ${s.status}`), new Error(`Failed to get object. Status: ${s.status}`);\n return s.text();\n }\n async getObjectWithETag(e, t = {}) {\n this._checkKey(e), this._log(\"info\", `Getting object ${e}`);\n let { filteredOpts: r, conditionalHeaders: n } = this._filterIfHeaders(t), o = { [m]: w, [f]: E, ...n }, i = y(e), { url: a, headers: c } = await this._sign(\"GET\", i, r, o, \"\");\n try {\n let s = await this._sendRequest(a, \"GET\", c, \"\", [200, 404, 412, 304]);\n if (s.status === 404 || s.status === 412 || s.status === 304) return this._log(\"error\", `Failed to get object. Status: ${s.status}`), { etag: null, data: null };\n if (!s.ok) throw this._log(\"error\", `Failed to get object. Status: ${s.status}`), new Error(`Failed to get object. Status: ${s.status}`);\n let l = s.headers.get(\"etag\");\n if (!l) throw new Error(\"ETag not found in response headers\");\n let h = await s.text();\n return { etag: H(l), data: h };\n } catch (s) {\n throw this._log(\"error\", `Error getting object ${e} with ETag: ${s}`), s;\n }\n }\n async getEtag(e, t = {}) {\n this._checkKey(e), this._log(\"info\", `Getting etag object ${e}`);\n let { filteredOpts: r, conditionalHeaders: n } = this._filterIfHeaders(t), o = { [m]: w, [f]: E, ...n }, i = y(e), { url: a, headers: c } = await this._sign(\"HEAD\", i, r, o, \"\"), s = await this._sendRequest(a, \"HEAD\", c, \"\", [200, 412, 304]);\n if (this._log(\"info\", `Response status: ${s.status, s.statusText}`), s.status === 412 || s.status === 304) return null;\n let l = s.headers.get(\"etag\");\n if (!l) throw this._log(\"error\", \"ETag not found in response headers\"), new Error(\"ETag not found in response headers\");\n return H(l);\n }\n async getResponse(e, t = true, r = 0, n = this.maxRequestSizeInBytes, o = {}) {\n this._checkKey(e);\n let { filteredOpts: i, conditionalHeaders: a } = this._filterIfHeaders({ ...o }), c = { [m]: w, [f]: E, ...t ? {} : { range: `bytes=${r}-${n - 1}` }, ...a }, s = y(e), { url: l, headers: h } = await this._sign(\"GET\", s, i, c, \"\"), d = `${l}?${new URLSearchParams(i)}`;\n return this._sendRequest(d, \"GET\", h);\n }\n async put(e, t) {\n if (this._checkKey(e), !(t instanceof Buffer || typeof t == \"string\")) throw this._log(\"error\", D), new TypeError(D);\n this._log(\"info\", `Uploading object ${e}`);\n let r = typeof t == \"string\" ? Buffer.byteLength(t) : t.length, n = { [T]: r }, o = y(e), { url: i, headers: a } = await this._sign(\"PUT\", o, {}, n, t);\n return await this._sendRequest(i, \"PUT\", a, t);\n }\n async getMultipartUploadId(e, t = W) {\n if (this._checkKey(e), typeof t != \"string\") throw this._log(\"error\", `${u}fileType must be a string`), new TypeError(`${u}fileType must be a string`);\n this._log(\"info\", `Initiating multipart upload for object ${e}`);\n let r = { uploads: \"\" }, n = { [m]: t, [f]: E }, o = y(e), { url: i, headers: a } = await this._sign(\"POST\", o, r, n, \"\"), c = `${i}?${new URLSearchParams(r)}`, l = await (await this._sendRequest(c, \"POST\", a)).text(), h = b(l);\n if (typeof h == \"object\" && h !== null && \"error\" in h && typeof h.error == \"object\" && h.error !== null && \"message\" in h.error) {\n let d = String(h.error.message);\n throw this._log(\"error\", `${u}Failed to abort multipart upload: ${d}`), new Error(`${u}Failed to abort multipart upload: ${d}`);\n }\n if (typeof h == \"object\" && h !== null) {\n if (!h.initiateMultipartUploadResult || !h.initiateMultipartUploadResult.uploadId) throw this._log(\"error\", `${u}Failed to create multipart upload: no uploadId in response`), new Error(`${u}Failed to create multipart upload: Missing upload ID in response`);\n return h.initiateMultipartUploadResult.uploadId;\n } else throw this._log(\"error\", `${u}Failed to create multipart upload: unexpected response format`), new Error(`${u}Failed to create multipart upload: Unexpected response format`);\n }\n async uploadPart(e, t, r, n, o = {}) {\n this._validateUploadPartParams(e, t, r, n, o);\n let i = { uploadId: r, partNumber: n, ...o }, a = { [T]: t.length }, c = y(e), { url: s, headers: l } = await this._sign(\"PUT\", c, i, a, t), h = `${s}?${new URLSearchParams(i)}`, d = await this._sendRequest(h, \"PUT\", l, t), g = H(d.headers.get(\"etag\") || \"\");\n return { partNumber: n, ETag: g };\n }\n _validateUploadPartParams(e, t, r, n, o) {\n if (this._checkKey(e), !(t instanceof Buffer || typeof t == \"string\")) throw this._log(\"error\", D), new TypeError(D);\n if (typeof r != \"string\" || r.trim().length === 0) throw this._log(\"error\", $), new TypeError($);\n if (!Number.isInteger(n) || n <= 0) throw this._log(\"error\", `${u}partNumber must be a positive integer`), new TypeError(`${u}partNumber must be a positive integer`);\n this._checkOpts(o);\n }\n async completeMultipartUpload(e, t, r) {\n if (this._checkKey(e), typeof t != \"string\" || t.trim().length === 0) throw this._log(\"error\", $), new TypeError($);\n if (!Array.isArray(r) || r.length === 0) throw this._log(\"error\", L), new TypeError(L);\n if (!r.every((_) => typeof _.partNumber == \"number\" && typeof _.ETag == \"string\")) throw this._log(\"error\", k), new TypeError(k);\n this._log(\"info\", `Complete multipart upload ${t} for object ${e}`);\n let n = { uploadId: t }, o = this._buildCompleteMultipartUploadXml(r), i = { [m]: M, [T]: Buffer.byteLength(o).toString(), [f]: await U(o) }, a = y(e), { url: c, headers: s } = await this._sign(\"POST\", a, n, i, o), l = `${c}?${new URLSearchParams(n)}`, d = await (await this._sendRequest(l, \"POST\", s, o)).text(), g = b(d);\n if (typeof g == \"object\" && g !== null && \"error\" in g && typeof g.error == \"object\" && g.error !== null && \"message\" in g.error) {\n let _ = String(g.error.message);\n throw this._log(\"error\", `${u}Failed to abort multipart upload: ${_}`), new Error(`${u}Failed to abort multipart upload: ${_}`);\n }\n return g.completeMultipartUploadResult;\n }\n async abortMultipartUpload(e, t) {\n if (this._checkKey(e), typeof t != \"string\" || t.trim().length === 0) throw this._log(\"error\", $), new TypeError($);\n this._log(\"info\", `Aborting multipart upload ${t} for object ${e}`);\n let r = { uploadId: t }, n = { [m]: M, [f]: E };\n try {\n let o = y(e), { url: i, headers: a } = await this._sign(\"DELETE\", o, r, n, \"\"), c = `${i}?${new URLSearchParams(r)}`, s = await this._sendRequest(c, \"DELETE\", a);\n if (s.ok) {\n let l = await s.text(), h = b(l);\n if (typeof h == \"object\" && h !== null && \"error\" in h && typeof h.error == \"object\" && h.error !== null && \"message\" in h.error) {\n let d = String(h.error.message);\n throw this._log(\"error\", `${u}Failed to abort multipart upload: ${d}`), new Error(`${u}Failed to abort multipart upload: ${d}`);\n }\n return { status: \"Aborted\", key: e, uploadId: t, response: h };\n } else throw this._log(\"error\", `${u}Abort request failed with status ${s.status}`), new Error(`${u}Abort request failed with status ${s.status}`);\n } catch (o) {\n let i = o instanceof Error ? o.message : String(o);\n throw this._log(\"error\", `${u}Failed to abort multipart upload for key ${e}: ${i}`), new Error(`${u}Failed to abort multipart upload for key ${e}: ${i}`);\n }\n }\n _buildCompleteMultipartUploadXml(e) {\n return `\n \n ${e.map((t) => `\n \n ${t.partNumber}\n ${t.ETag}\n \n `).join(\"\")}\n \n `;\n }\n async delete(e) {\n this._checkKey(e), this._log(\"info\", `Deleting object ${e}`);\n let t = { [m]: w, [f]: E }, r = y(e), { url: n, headers: o } = await this._sign(\"DELETE\", r, {}, t, \"\"), i = await this._sendRequest(n, \"DELETE\", o);\n return i.status === 204 || i.status === 200;\n }\n async _sendRequest(e, t, r, n, o = []) {\n this._log(\"info\", `Sending ${t} request to ${e}, headers: ${JSON.stringify(r)}`);\n let i = await fetch(e, { method: t, headers: r, body: [\"GET\", \"HEAD\"].includes(t) ? void 0 : n, signal: this.requestAbortTimeout !== void 0 ? AbortSignal.timeout(this.requestAbortTimeout) : void 0 });\n return !i.ok && !o.includes(i.status) && await this._handleErrorResponse(i), i;\n }\n async _handleErrorResponse(e) {\n let t = await e.text(), r = e.headers.get(\"x-amz-error-code\") || \"Unknown\", n = e.headers.get(\"x-amz-error-message\") || e.statusText;\n throw this._log(\"error\", `${u}Request failed with status ${e.status}: ${r} - ${n},err body: ${t}`), new Error(`${u}Request failed with status ${e.status}: ${r} - ${n}, err body: ${t}`);\n }\n _buildCanonicalQueryString(e) {\n return Object.keys(e).length < 1 ? \"\" : Object.keys(e).sort().map((t) => `${encodeURIComponent(t)}=${encodeURIComponent(e[t])}`).join(\"&\");\n }\n async _getSignatureKey(e) {\n let t = await A(`AWS4${this.secretAccessKey}`, e), r = await A(t, this.region), n = await A(r, O);\n return A(n, K);\n }\n};\nvar U = async (p) => {\n let e = Q(\"sha256\");\n return e.update(p), e.digest(\"hex\");\n};\nvar A = async (p, e, t) => {\n let r = z(\"sha256\", p);\n return r.update(e), r.digest(t);\n};\nvar H = (p) => {\n let e = { '\"': \"\", \""\": \"\", \""\": \"\", \""\": \"\", \""\": \"\" };\n return p.replace(/^(\"|"|")|(\"|"|")$/g, (t) => e[t]);\n};\nvar b = (p) => {\n let e = (o) => o.replace(/"/g, '\"').replace(/'/g, \"'\").replace(/</g, \"<\").replace(/>/g, \">\").replace(/&/g, \"&\"), t = {}, r = /<(\\w)([-\\w]+)(?:\\/|[^>]*>((?:(?!<\\1)[\\s\\S])*)<\\/\\1\\2)>/gm, n;\n for (; n = r.exec(p); ) {\n let [, o, i, a] = n, c = o.toLowerCase() + i, s = a != null ? b(a) : true;\n typeof s == \"string\" ? t[c] = H(e(s)) : Array.isArray(t[c]) ? t[c].push(s) : t[c] = t[c] != null ? [t[c], s] : ne[c] ? [s] : s;\n }\n return Object.keys(t).length ? t : e(p);\n};\n\n// src/lowstorage.ts\nvar import_types = __toESM(require_lib(), 1);\n\n// src/errors.ts\nvar lowstorage_ERROR_CODES = {\n MISSING_ARGUMENT: \"MISSING_ARGUMENT\",\n COLLECTION_EXISTS: \"COLLECTION_EXISTS\",\n CREATE_COLLECTION_ERROR: \"CREATE_COLLECTION_ERROR\",\n RENAME_COLLECTION_ERROR: \"RENAME_COLLECTION_ERROR\",\n REMOVE_COLLECTION_ERROR: \"REMOVE_COLLECTION_ERROR\",\n UPDATE_COLLECTION_SCHEMA_ERROR: \"UPDATE_COLLECTION_SCHEMA_ERROR\",\n COLLECTION_NOT_FOUND: \"COLLECTION_NOT_FOUND\",\n SCHEMA_VALIDATION_ERROR: \"SCHEMA_VALIDATION_ERROR\",\n DOCUMENT_VALIDATION_ERROR: \"DOCUMENT_VALIDATION_ERROR\",\n S3_OPERATION_ERROR: \"S3_OPERATION_ERROR\",\n FIND_ERROR: \"FIND_ERROR\",\n FIND_ONE_ERROR: \"FIND_ONE_ERROR\",\n SAVE_DATA_ERROR: \"SAVE_DATA_ERROR\",\n INSERT_ERROR: \"INSERT_ERROR\",\n UPDATE_ERROR: \"UPDATE_ERROR\",\n UPDATE_ONE_ERROR: \"UPDATE_ONE_ERROR\",\n DELETE_ERROR: \"DELETE_ERROR\",\n COUNT_ERROR: \"COUNT_ERROR\",\n UNKNOWN_ERROR: \"UNKNOWN_ERROR\"\n};\nvar lowstorageError = class extends Error {\n constructor(message, code = lowstorage_ERROR_CODES.UNKNOWN_ERROR) {\n super(`lowstorageError: ${message} :: code: ${code}`);\n this.name = this.constructor.name;\n this.code = code;\n Error.captureStackTrace(this, this.constructor);\n }\n};\nvar SchemaValidationError = class extends lowstorageError {\n constructor(message, code = lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR) {\n super(message, code);\n super(message, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR);\n }\n};\nvar DocumentValidationError = class extends lowstorageError {\n constructor(message, code = lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR) {\n super(message, code);\n super(message, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR);\n }\n};\nvar S3OperationError = class extends lowstorageError {\n constructor(message, operation) {\n super(`S3 ${operation} operation failed: ${message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n};\n\n// src/helpers.ts\nimport { randomUUID } from \"node:crypto\";\nvar matchesQuery = (document, query) => {\n return Object.keys(query).every((key) => document[key] === query[key]);\n};\nvar generateUUID = async () => {\n if (typeof randomUUID !== \"undefined\" && typeof randomUUID === \"function\") {\n return randomUUID();\n }\n if (typeof crypto !== \"undefined\" && typeof crypto === \"object\" && typeof crypto.randomUUID === \"function\") {\n return crypto.randomUUID();\n }\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, function(c) {\n var r = Math.random() * 16 | 0, v2 = c === \"x\" ? r : r & 3 | 8;\n return v2.toString(16);\n });\n};\nvar _getAvroSchema = (value, name = \"SubAutoGenerated\") => {\n switch (typeof value) {\n case \"string\":\n if (_isUUID(value)) {\n return {\n type: \"string\",\n name: \"_id\",\n size: 16,\n logicalType: \"UUID\"\n };\n }\n return \"string\";\n case \"number\":\n return Number.isInteger(value) ? \"int\" : \"float\";\n case \"boolean\":\n return \"boolean\";\n case \"object\":\n if (value === null) return \"null\";\n if (Array.isArray(value)) return { type: \"array\", items: _getAvroSchema(value[0]) };\n return inferAvroSchema(value, name);\n default:\n return \"string\";\n }\n};\nvar ensureIdFieldInSchema = (schema) => {\n const idField = {\n name: \"_id\",\n type: \"string\",\n size: 16,\n logicalType: \"UUID\"\n };\n if (typeof schema === \"undefined\" || schema === null) {\n return schema;\n }\n if (\"type\" in schema && schema.type === \"record\" && \"fields\" in schema && Array.isArray(schema.fields)) {\n const hasIdField = schema.fields.some((field) => field.name === \"_id\");\n if (!hasIdField) {\n schema.fields.unshift(idField);\n }\n } else if (\"type\" in schema && schema.type === \"array\" && \"items\" in schema && schema.items !== null && typeof schema.items === \"object\" && \"type\" in schema.items && schema.items.type === \"record\" && \"fields\" in schema.items && Array.isArray(schema.items.fields)) {\n const hasIdField = schema.items.fields.some((field) => field.name === \"_id\");\n if (!hasIdField) {\n schema.items.fields.unshift(idField);\n }\n }\n return schema;\n};\nvar inferAvroSchema = (data, typeName = \"AutoGenerated\") => {\n if (Array.isArray(data)) {\n data = data[0];\n }\n const fields = Object.entries(data).map(([name, value]) => {\n return { name, type: _getAvroSchema(value, `${typeName}.${name}`) };\n });\n const schema = {\n type: \"record\",\n name: typeName,\n fields\n };\n return ensureIdFieldInSchema(schema);\n};\nvar _isUUID = (str) => {\n const uuidV4Regex = /^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i;\n return uuidV4Regex.test(str);\n};\n\n// src/lowstorage.ts\nvar MODULE_NAME = \"lowstorage\";\nvar DEFAULT_DELIMITER = \"/\";\nvar PROJECT_DIR_PREFIX = \"lowstorage\";\nvar COL_SUFFIX = \".avro\";\nvar CHUNG_1MB = 1024 * 1024;\nvar CHUNG_5MB = 5 * CHUNG_1MB;\nvar EMPTY_DATA = Buffer.from(\"\", \"utf8\");\nvar errorValidationFn = (errorCode = lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR) => {\n throw new DocumentValidationError(`${MODULE_NAME}: Invalid document or schema ${errorCode}`);\n};\nvar _hasColName = (colName = \"\") => {\n if (colName.trim() === \"\" || colName === null || typeof colName === \"undefined\" || colName.length > 255 || colName === null) {\n throw new lowstorageError(`${MODULE_NAME}: Collection name is required, null or too long`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n }\n};\nvar lowstorage = class {\n constructor(options) {\n this._checkArgs = (args) => {\n const requiredFields = [\"accessKeyId\", \"secretAccessKey\", \"endpoint\", \"bucketName\"];\n for (const field of requiredFields) {\n if (!args[field]) {\n throw new lowstorageError(`${MODULE_NAME}: ${field} is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n }\n }\n };\n /**\n * Get the S3 instance associated with the lowstorage instance.\n * @returns {S3} The S3 instance. Use this to perform S3 operations. Check for ultralight-s3 for more details.\n */\n this.s3 = () => {\n return this._s3;\n };\n this._checkArgs(options);\n this._schemas = /* @__PURE__ */ new Map();\n this._s3 = new N(options);\n this._dirPrefix = options.dirPrefix || PROJECT_DIR_PREFIX;\n this._avroParse = import_types.Type;\n }\n /**\n * List all collections.\n * @returns {Promise} An array of collection names.\n * @throws {S3OperationError} If there's an error during S3 operation.\n */\n async listCollections() {\n try {\n const listed = await this._s3.list(DEFAULT_DELIMITER, this._dirPrefix);\n if (Array.isArray(listed)) {\n return listed.map((entry) => entry.key.slice(this._dirPrefix.length + 1, -COL_SUFFIX.length));\n } else if (typeof listed === \"object\" && listed !== null && \"keyCount\" in listed && listed.keyCount === \"0\") {\n return [];\n }\n return [];\n } catch (error) {\n throw new S3OperationError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n }\n /**\n * Check if a collection exists.\n * @param {string} colName - The name of the collection.\n * @returns {Promise} True if the collection exists, false otherwise.\n * @throws {lowstorageError} If there's an error.\n */\n async collectionExists(colName = \"\") {\n try {\n _hasColName(colName);\n const exists = await this._s3.fileExists(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`);\n return !!exists;\n } catch (error) {\n if (error.message.includes(\"Not Found\")) {\n return false;\n }\n throw new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND);\n }\n }\n /**\n * Create a new collection.\n * @param {string} colName - The name of the collection.\n * @param {Object} [schema] - The schema for the collection.\n * @param {Array} [data=[]] - The initial data for the collection.\n * @returns {Promise} A Promise that resolves to a Collection object.\n * @throws {lowstorageError} If there's an error.\n */\n async createCollection(colName = \"\", schema, data = []) {\n try {\n _hasColName(colName);\n const exists = await this.collectionExists(colName);\n if (!exists) {\n if (typeof schema !== \"undefined\" && schema !== null) {\n try {\n const isValid = this._avroParse.isValid(schema);\n if (!isValid) {\n throw new SchemaValidationError(\n `${MODULE_NAME}: Schema is invalid: ${schema} ${lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR}`\n );\n }\n } catch (error) {\n throw new SchemaValidationError(`${MODULE_NAME}: Schema is invalid: ${schema}`, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR);\n }\n }\n if (data.length > 0 && schema) {\n const wrapperType = this._avroParse.forSchema({ type: \"array\", items: schema });\n await this._s3.put(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`, wrapperType.toBuffer(data));\n } else {\n await this._s3.put(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`, EMPTY_DATA);\n }\n return this.collection(colName, schema, false);\n }\n throw new lowstorageError(`${MODULE_NAME}: Collection ${colName} already exists`, lowstorage_ERROR_CODES.COLLECTION_EXISTS);\n } catch (error) {\n if (error instanceof lowstorageError) {\n throw error;\n }\n throw new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.CREATE_COLLECTION_ERROR);\n }\n }\n /**\n * Remove a collection.\n * @param {string} colName - The name of the collection.\n * @returns {Promise} A Promise that resolves to true if the collection is removed, false otherwise.\n * @throws {lowstorageError} If there's an error.\n */\n async removeCollection(colName = \"\") {\n try {\n _hasColName(colName);\n const exists = await this.collectionExists(colName);\n if (exists) {\n await this._s3.delete(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`);\n const exists2 = await this.collectionExists(colName);\n if (typeof exists2 === \"boolean\") {\n if (!exists2) {\n this._schemas.delete(colName);\n return true;\n }\n throw new lowstorageError(`${MODULE_NAME}: Failed to delete collection ${colName}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n throw new S3OperationError(`${MODULE_NAME}: Failed to delete collection ${colName}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n throw new lowstorageError(`${MODULE_NAME}: Collection ${colName} does not exist`, lowstorage_ERROR_CODES.REMOVE_COLLECTION_ERROR);\n } catch (error) {\n if (error instanceof S3OperationError) {\n throw error;\n }\n throw new lowstorageError(\n `${MODULE_NAME}: Failed to remove collection: ${error.message}`,\n lowstorage_ERROR_CODES.REMOVE_COLLECTION_ERROR\n );\n }\n }\n /**\n * Get or create a collection.\n * @param {string} colName - The name of the collection.\n * @param {Object} [schema] - The schema for the collection.\n * @param {boolean} [autoCreate=true] - Whether to automatically create the collection if it doesn't exist.\n * @returns {Promise} A Promise that resolves to a Collection object.\n * @throws {lowstorageError} If there's an error.\n */\n async collection(colName = \"\", schema, autoCreate = true) {\n try {\n _hasColName(colName);\n const colPath = `${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`;\n const exists = await this._s3.fileExists(colPath);\n if (!exists) {\n if (!autoCreate) {\n throw new lowstorageError(`${MODULE_NAME}: Collection ${colName} does not exist`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND);\n }\n await this._s3.put(colPath, EMPTY_DATA);\n }\n const colSchema = schema || this._schemas.get(colName) || void 0;\n return new Collection(colName, colSchema, this._s3, this._dirPrefix);\n } catch (error) {\n if (error.message.includes(\"unknown type\")) {\n throw new SchemaValidationError(\n `${MODULE_NAME}: Schema input is invalid: ${error.message}`,\n lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR\n );\n }\n throw new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND);\n }\n }\n};\nvar Collection = class _Collection {\n constructor(colName = \"\", schema, s3, dirPrefix = PROJECT_DIR_PREFIX, safeWrite = false, chunkSize = CHUNG_5MB) {\n this.getProps = () => ({\n colName: this._colName,\n s3: this._s3,\n schema: this._schema,\n avroParse: this._avroParse,\n avroType: this._avroType,\n dirPrefix: this._dirPrefix,\n safeWrite: this._safeWrite,\n chunkSize: this._chunkSize\n });\n this.setProps = (props) => {\n this._colName = props.colName;\n this._schema = props.schema;\n this._s3 = props.s3;\n this._avroParse = props.avroParse;\n this._avroType = props.avroType;\n this._dirPrefix = props.dirPrefix;\n this._safeWrite = props.safeWrite;\n this._chunkSize = props.chunkSize;\n };\n this.setSafeWrite = (safeWrite) => {\n this._safeWrite = safeWrite;\n };\n this.getSafeWrite = () => {\n return this._safeWrite;\n };\n this.getAvroSchema = () => {\n return this._schema;\n };\n this.setAvroSchema = (schema) => {\n this._schema = ensureIdFieldInSchema(schema);\n this._avroType = typeof schema === \"undefined\" ? null : this._avroParse.forSchema(schema);\n };\n this._colName = colName.trim();\n this._s3 = s3;\n this._schema = ensureIdFieldInSchema(schema);\n this._dirPrefix = dirPrefix;\n this._safeWrite = safeWrite;\n this._chunkSize = chunkSize || CHUNG_5MB;\n this._s3.setMaxRequestSizeInBytes(this._chunkSize);\n this._avroParse = import_types.Type;\n this._lastETag = \"\";\n this._dataCache = [];\n this._avroType = typeof schema === \"undefined\" ? null : this._avroParse.ForSchema(schema);\n this._key = `${this._dirPrefix}${DEFAULT_DELIMITER}${this._colName}${COL_SUFFIX}`;\n }\n async _loadData() {\n try {\n if (this._avroType === null || typeof this._avroType === \"undefined\") {\n throw new lowstorageError(\n `${MODULE_NAME}: Missing type definition. Configure before operations `,\n lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR\n );\n }\n const { etag, data } = await this._s3.getObjectWithETag(this._key, { \"if-none-match\": this._lastETag });\n if (data === null) {\n return this._dataCache;\n }\n this._lastETag = etag === null ? this._lastETag : etag;\n const wrapperType = this._avroParse.forSchema({ type: \"array\", items: this._avroType });\n if (data.length < this._chunkSize) {\n this._dataCache = data.length > 0 ? wrapperType.fromBuffer(Buffer.from(data, \"utf8\")) : [];\n return this._dataCache;\n }\n let offset = this._chunkSize;\n let bufferArr = [Buffer.from(data, \"utf8\")];\n let repeat = true;\n while (repeat) {\n const nextDataResponse = await this._s3.getResponse(this._key, false, offset, offset + this._chunkSize);\n const nextDataBody = await nextDataResponse.text();\n bufferArr.push(Buffer.from(nextDataBody, \"utf8\"));\n offset += this._chunkSize;\n const contentLength = parseInt(nextDataResponse.headers.get(\"content-length\") || nextDataBody.length.toString());\n if (contentLength < this._chunkSize) {\n repeat = false;\n }\n }\n const bufferedData = Buffer.concat(bufferArr);\n this._dataCache = wrapperType.fromBuffer(bufferedData);\n return this._dataCache;\n } catch (error) {\n if (error.toString().indexOf(\"status 404: Unknown - Not Found\") > -1) {\n this._dataCache = [];\n return this._dataCache;\n }\n throw new S3OperationError(`${MODULE_NAME}: Failed to load data: ${error.message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n }\n async _saveData(data) {\n try {\n if (this._avroType === null || typeof this._avroType === \"undefined\") {\n throw new lowstorageError(\n `${MODULE_NAME}: Missing type definition. Configure before operations `,\n lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR\n );\n }\n const wrapperType = this._avroParse.forSchema({ type: \"array\", items: this._avroType });\n const dataBuffer = data.length > 0 ? wrapperType.toBuffer(data) : EMPTY_DATA;\n if (this._safeWrite && this._lastETag !== \"\") {\n const currentETag = await this._s3.getEtag(this._key);\n if (currentETag !== null && currentETag !== this._lastETag) {\n return false;\n }\n }\n const resp = await this._s3.put(this._key, dataBuffer);\n if (typeof resp === \"object\" && \"status\" in resp && resp.status !== 200) {\n throw new S3OperationError(`${MODULE_NAME}: Failed to save data`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n const newETag = resp.headers?.get(\"etag\") || \"\";\n if (newETag && newETag.length > 0) {\n this._lastETag = this._s3.sanitizeETag(newETag);\n this._dataCache = data;\n }\n return true;\n } catch (error) {\n if (error instanceof S3OperationError) {\n throw error;\n }\n throw new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.SAVE_DATA_ERROR);\n }\n }\n /**\n * Insert a document into the collection.\n * @param {Object|Array} doc - The document to insert.\n * @param {Object} [schema=undefined] - The schema for the document.\n * @returns {Promise} A Promise that resolves to the array of inserted document(s).\n * @throws {lowstorageError} If there's an error.\n */\n async insert(doc, schema) {\n try {\n if (doc === void 0 || doc === null) {\n throw new lowstorageError(`${MODULE_NAME}: Document is required for insert`, lowstorage_ERROR_CODES.INSERT_ERROR);\n }\n if (typeof doc !== \"object\" && !Array.isArray(doc)) {\n throw new DocumentValidationError(\n `${MODULE_NAME}: Document must be an object or an array`,\n lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR\n );\n }\n const items = !Array.isArray(doc) ? [doc] : doc;\n const schemaWithId = schema ? ensureIdFieldInSchema(schema) : this._schema || ensureIdFieldInSchema(inferAvroSchema(items[0]));\n const avroType = this._avroParse.forSchema(schemaWithId);\n if (!avroType) {\n throw new SchemaValidationError(\n `${MODULE_NAME}: Schema is required - Pass a schema to the insert method`,\n lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR\n );\n }\n this._avroType = avroType;\n const data = await this._loadData();\n for (let item of items) {\n if (typeof item !== \"object\" || item === null) {\n throw new DocumentValidationError(\n `${MODULE_NAME}: Invalid input: input must be an object or an array of objects`,\n lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR\n );\n }\n item._id = item._id || await generateUUID();\n const validBuffer = this._avroType.isValid(item, {\n errorHook: errorValidationFn,\n noUndeclaredFields: true\n });\n if (validBuffer === true) {\n data.push(item);\n } else {\n throw new DocumentValidationError(`${MODULE_NAME}: Invalid document or schema`, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR);\n }\n }\n const success = await this._saveData(data);\n if (!success) {\n throw new S3OperationError(`${MODULE_NAME}: Failed to insert document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n this.setAvroSchema(schemaWithId);\n return items;\n } catch (error) {\n if (error.message.includes(\"unknown type\")) {\n throw new SchemaValidationError(\n `${MODULE_NAME}: Schema input is invalid: ${error.message}`,\n lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR\n );\n }\n if (error instanceof lowstorageError) {\n throw error;\n }\n throw new lowstorageError(`${MODULE_NAME} Insert operation failed: ${error.message}`, lowstorage_ERROR_CODES.INSERT_ERROR);\n }\n }\n /**\n * Find documents in the collection.\n * @param {Object} [query={}] - The query to filter documents.\n * @param {Object} [options={}] - The options for pagination.\n * @param {number} [options.skip=0] - The number of documents to skip. Default is 0.\n * @param {number} [options.limit=undefined] - The maximum number of documents to return. Default is undefined, which means no limit.\n * @returns {Promise} A Promise that resolves to an array of matching documents.\n * @throws {lowstorageError} If there's an error.\n */\n async find(query = {}, options = {}) {\n try {\n if (query === void 0 || query === null) {\n throw new lowstorageError(`${MODULE_NAME}: Query is required for update`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n }\n const data = await this._loadData();\n const start = options.skip !== void 0 ? parseInt(String(options.skip), 10) : 0;\n const end = options.limit !== void 0 ? start + parseInt(String(options.limit), 10) : void 0;\n const filteredData = data.filter((doc) => matchesQuery(doc, query)).slice(start, end);\n return filteredData;\n } catch (error) {\n throw new lowstorageError(`${MODULE_NAME}: Find operation failed: ${error.message}`, lowstorage_ERROR_CODES.FIND_ERROR);\n }\n }\n /**\n * Find the first document in the collection that matches the query.\n * @param {Object} [query={}] - The query to filter documents.\n * @returns {Promise} A Promise that resolves to the first matching document or null if no match is found.\n * @throws {lowstorageError} If there's an error.\n */\n async findOne(query = {}) {\n try {\n if (query === null) {\n throw new lowstorageError(`${MODULE_NAME}: Query cannot be null`, lowstorage_ERROR_CODES.INVALID_ARGUMENT);\n }\n const result = await this.find(query, { limit: 1 });\n return result[0] || null;\n } catch (error) {\n if (error instanceof lowstorageError) {\n throw error;\n }\n throw new lowstorageError(`${MODULE_NAME}: FindOne operation failed: ${error.message}`, lowstorage_ERROR_CODES.FIND_ONE_ERROR);\n }\n }\n /**\n * Update a single document in the collection that matches the query.\n * @param {Object} [query={}] - The query to filter the document to update.\n * @param {Object} [update={}] - The update operations to apply to the matching document.\n * @returns {Promise} A Promise that resolves to number of documents updated.\n * @throws {lowstorageError} If the updateOne operation fails.\n * @throws {SchemaValidationError} If the schema is not defined for the collection.\n * @throws {DocumentValidationError} If the updated document is invalid.\n * @throws {S3OperationError} If the S3 operation fails.\n */\n async update(query = {}, update = {}, options = {}) {\n try {\n if (query === void 0 || query === null || update === void 0 || update === null) {\n throw new lowstorageError(\n `${MODULE_NAME}: Query and update values are required for update`,\n lowstorage_ERROR_CODES.MISSING_ARGUMENT\n );\n }\n if (!this._avroType) {\n throw new SchemaValidationError(\n `${MODULE_NAME}: Schema is not defined for this collection`,\n lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR\n );\n }\n const data = await this._loadData();\n if (data.length === 0) return 0;\n let updatedCount = 0;\n for (let i = 0; i < data.length; i++) {\n if (matchesQuery(data[i], query)) {\n const updatedDoc = { ...data[i], ...update };\n const isValid = this._avroType.isValid(updatedDoc, {\n errorHook: errorValidationFn,\n noUndeclaredFields: true\n });\n if (isValid === true) {\n data[i] = updatedDoc;\n updatedCount++;\n } else {\n throw new DocumentValidationError(\n `${MODULE_NAME}: Invalid document or schema`,\n lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR\n );\n }\n }\n }\n if (updatedCount > 0) {\n const success = await this._saveData(data);\n if (!success) {\n throw new S3OperationError(`${MODULE_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n } else if (options && \"upsert\" in options && options.upsert) {\n const success = await this.insert(update);\n if (!success) {\n throw new S3OperationError(`${MODULE_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n updatedCount = 1;\n }\n return updatedCount;\n } catch (error) {\n if (error instanceof S3OperationError) {\n throw error;\n }\n throw new lowstorageError(`${MODULE_NAME}: Update operation failed: ${error.message}`, lowstorage_ERROR_CODES.UPDATE_ERROR);\n }\n }\n /**\n * Update a single document in the collection that matches the query.\n * @param {Object} [query={}] - The query to filter the document to update.\n * @param {Object} [update={}] - The update operations to apply to the matching document.\n * @returns {Promise} A Promise that resolves to 1 if a document was updated, 0 otherwise.\n * @throws {lowstorageError} If the updateOne operation fails.\n * @throws {SchemaValidationError} If the schema is not defined for the collection.\n * @throws {DocumentValidationError} If the updated document is invalid.\n * @throws {S3OperationError} If the S3 operation fails.\n */\n async updateOne(query = {}, update = {}, options = {}) {\n try {\n if (query === void 0 || query === null || update === void 0 || update === null) {\n throw new lowstorageError(`${MODULE_NAME}: Query is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n }\n if (!this._avroType) {\n throw new SchemaValidationError(\n `${MODULE_NAME}: Schema is not defined for this collection`,\n lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR\n );\n }\n const data = await this._loadData();\n if (data.length === 0) return 0;\n const docIndex = data.findIndex((doc) => matchesQuery(doc, query));\n if (docIndex !== -1) {\n const updatedDoc = { ...data[docIndex], ...update };\n const isValid = this._avroType.isValid(updatedDoc, {\n errorHook: errorValidationFn,\n noUndeclaredFields: true\n });\n if (isValid === true) {\n data[docIndex] = updatedDoc;\n const success = await this._saveData(data);\n if (!success) {\n throw new S3OperationError(`${MODULE_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n return 1;\n } else {\n throw new DocumentValidationError(`${MODULE_NAME}: Invalid document or schema`, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR);\n }\n }\n if (options && \"upsert\" in options && options.upsert) {\n const success = await this.insert(update);\n if (!success) {\n throw new S3OperationError(`${MODULE_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n return 1;\n }\n return 0;\n } catch (error) {\n if (error instanceof lowstorageError) {\n throw error;\n }\n throw new lowstorageError(`${MODULE_NAME}: UpdateOne operation failed: ${error.message}`, lowstorage_ERROR_CODES.UPDATE_ONE_ERROR);\n }\n }\n /**\n * Delete documents from the collection.\n * @param {Object} [query={}] - The query to filter documents to delete.\n * @returns {Promise} A Promise that resolves to the number of documents deleted.\n * @throws {lowstorageError} If the delete operation fails.\n * @throws {S3OperationError} If the S3 operation fails.\n */\n async delete(query = {}) {\n try {\n if (query === void 0 || query === null) {\n throw new lowstorageError(`${MODULE_NAME}: Query is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n }\n const data = await this._loadData();\n if (data.length === 0) return 0;\n const initialLength = data.length;\n const newData = data.filter((doc) => !matchesQuery(doc, query));\n const success = await this._saveData(newData);\n if (!success) {\n throw new S3OperationError(`${MODULE_NAME}: Failed to delete document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n return initialLength - newData.length;\n } catch (error) {\n if (error instanceof S3OperationError) {\n throw error;\n }\n throw new lowstorageError(`${MODULE_NAME}: Delete operation failed: ${error.message}`, lowstorage_ERROR_CODES.DELETE_ERROR);\n }\n }\n /**\n * Delete all documents from the collection.\n * @returns {Promise} A Promise that resolves to the number of documents deleted.\n * @throws {lowstorageError} If the delete operation fails.\n * @throws {S3OperationError} If the S3 operation fails.\n */\n async deleteAll() {\n try {\n const data = await this._loadData();\n const initialLength = data.length;\n const success = await this._saveData([]);\n if (!success) {\n throw new S3OperationError(`${MODULE_NAME}: Failed to delete document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n return initialLength;\n } catch (error) {\n if (error instanceof S3OperationError) {\n throw error;\n }\n throw new lowstorageError(`${MODULE_NAME}: Delete operation failed: ${error.message}`, lowstorage_ERROR_CODES.DELETE_ERROR);\n }\n }\n /**\n * Count the number of documents in the collection.\n * @param {Object} [query={}] - The query to filter documents.\n * @returns {Promise} A Promise that resolves to the number of documents in the collection.\n * @throws {lowstorageError} If the count operation fails.\n */\n async count(query = {}) {\n try {\n const data = await this.find(query);\n return data.length;\n } catch (error) {\n throw new lowstorageError(`${MODULE_NAME}: Count operation failed: ${error.message}`, lowstorage_ERROR_CODES.COUNT_ERROR);\n }\n }\n async renameCollection(newColName, newSchema = this._schema) {\n try {\n _hasColName(newColName);\n const exists = await this._s3.fileExists(`${this._dirPrefix}${DEFAULT_DELIMITER}${newColName}${COL_SUFFIX}`);\n if (!!exists) {\n throw new lowstorageError(`${MODULE_NAME}: Collection ${newColName} already exists`, lowstorage_ERROR_CODES.COLLECTION_EXISTS);\n }\n const schema = newSchema || this.getAvroSchema();\n const data = await this._loadData();\n const createNew = new _Collection(newColName, schema, this._s3, this._dirPrefix, this._safeWrite, this._chunkSize);\n await createNew._saveData(data);\n await this._s3.delete(`${this._dirPrefix}${DEFAULT_DELIMITER}${this._colName}${COL_SUFFIX}`);\n return createNew;\n } catch (error) {\n if (error instanceof lowstorageError) {\n throw error;\n }\n throw new lowstorageError(\n `${MODULE_NAME}: Rename collection failed: ${error.message}`,\n lowstorage_ERROR_CODES.RENAME_COLLECTION_ERROR\n );\n }\n }\n};\nexport {\n lowstorage,\n lowstorageError,\n lowstorage_ERROR_CODES\n};\n\n"], + "mappings": "AAAA,OAAOA,OAAmB,OAC1B,OAAOC,OAAqB,SAoqH5B,OAAS,cAAAC,OAAkB,cAlqH3B,IAAIC,GAAW,OAAO,OAClBC,GAAY,OAAO,eACnBC,GAAmB,OAAO,yBAC1BC,GAAoB,OAAO,oBAC3BC,GAAe,OAAO,eACtBC,GAAe,OAAO,UAAU,eAOpC,IAAIC,GAAa,CAACC,EAAIC,IAAQ,UAAsB,CAClD,OAAOA,MAAWD,EAAGE,GAAkBF,CAAE,EAAE,CAAC,CAAC,IAAIC,EAAM,CAAE,QAAS,CAAC,CAAE,GAAG,QAASA,CAAG,EAAGA,EAAI,OAC7F,EACIE,GAAc,CAACC,EAAIC,EAAMC,EAAQC,IAAS,CAC5C,GAAIF,GAAQ,OAAOA,GAAS,UAAY,OAAOA,GAAS,WACtD,QAASG,KAAON,GAAkBG,CAAI,EAChC,CAACI,GAAa,KAAKL,EAAII,CAAG,GAAKA,IAAQF,GACzCI,GAAUN,EAAII,EAAK,CAAE,IAAK,IAAMH,EAAKG,CAAG,EAAG,WAAY,EAAED,EAAOI,GAAiBN,EAAMG,CAAG,IAAMD,EAAK,UAAW,CAAC,EAEvH,OAAOH,CACT,EACIQ,GAAU,CAACX,EAAKY,EAAYC,KAAYA,EAASb,GAAO,KAAOc,GAASC,GAAaf,CAAG,CAAC,EAAI,CAAC,EAAGE,GAKnGU,GAAc,CAACZ,GAAO,CAACA,EAAI,WAAaS,GAAUI,EAAQ,UAAW,CAAE,MAAOb,EAAK,WAAY,EAAK,CAAC,EAAIa,EACzGb,CACF,GAGIgB,GAAgBlB,GAAW,CAC7B,wCAAwCmB,EAASC,EAAQ,CACvD,aACA,IAAIC,EAAO,IAAIC,EAAW,IAAI,EAC9B,SAASC,EAAUC,EAAM,CACvB,OAAI,OAAO,OAAO,OAAS,WAClB,OAAO,MAAMA,CAAI,EAEjB,IAAI,OAAOA,CAAI,CAE1B,CACA,SAASC,EAAWC,EAAMC,EAAK,CAC7B,OAAI,OAAO,OAAO,MAAQ,WACjB,OAAO,KAAKD,EAAMC,CAAG,EAErB,IAAI,OAAOD,EAAMC,CAAG,CAE/B,CACA,SAASC,EAAWC,EAAG,CACrB,OAAOA,EAAE,OAAO,CAAC,EAAE,YAAY,EAAIA,EAAE,MAAM,CAAC,CAC9C,CACA,SAASC,EAAQC,EAAIC,EAAI,CACvB,OAAOD,IAAOC,EAAK,EAAID,EAAKC,EAAK,GAAK,CACxC,CACA,SAASC,EAAWC,EAAMC,EAAM,CAC9B,GAAI,OAAOD,GAAQ,OAAOC,EACxB,MAAO,GAET,OAAQ,OAAOD,EAAM,CACnB,IAAK,SACL,IAAK,SACH,OAAOA,IAASC,EAClB,IAAK,SACH,GAAID,IAAS,MAAQC,IAAS,KAC5B,OAAOD,IAASC,EAElB,IAAIC,EAAGC,EACP,GAAI,MAAM,QAAQH,CAAI,EAAG,CACvB,GAAI,CAAC,MAAM,QAAQC,CAAI,GAAKD,EAAK,SAAWC,EAAK,OAC/C,MAAO,GAET,IAAKC,EAAI,EAAGC,EAAIH,EAAK,OAAQE,EAAIC,EAAGD,IAClC,GAAI,CAACH,EAAWC,EAAKE,CAAC,EAAGD,EAAKC,CAAC,CAAC,EAC9B,MAAO,GAGX,MAAO,EACT,CACA,IAAIE,EAAQ,OAAO,KAAKJ,CAAI,EAAE,KAAK,EAC/BK,EAAQ,OAAO,KAAKJ,CAAI,EAAE,KAAK,EACnC,GAAI,CAACF,EAAWK,EAAOC,CAAK,EAC1B,MAAO,GAET,IAAKH,EAAI,EAAGC,EAAIC,EAAM,OAAQF,EAAIC,EAAGD,IAAK,CACxC,IAAI3B,EAAM6B,EAAMF,CAAC,EACjB,GAAI,CAACH,EAAWC,EAAKzB,CAAG,EAAG0B,EAAK1B,CAAG,CAAC,EAClC,MAAO,EAEX,CACA,MAAO,GACT,QACE,MAAO,EACX,CACF,CACA,SAAS+B,EAAMC,EAAKC,EAAI,CACtB,IAAIC,EAAM,CAAC,EACPP,EAAGQ,EACP,IAAKR,EAAI,EAAGA,EAAIK,EAAI,OAAQL,IAC1BQ,EAAOH,EAAIL,CAAC,EACZO,EAAID,EAAGE,CAAI,CAAC,EAAIA,EAElB,OAAOD,CACT,CACA,SAASE,EAAcJ,EAAKC,EAAI,CAC9B,IAAIC,EAAM,CAAC,EACPP,EAAGC,EAAGO,EACV,IAAKR,EAAI,EAAGC,EAAII,EAAI,OAAQL,EAAIC,EAAGD,IAAK,CAKtC,GAJAQ,EAAOH,EAAIL,CAAC,EACRM,IACFE,EAAOF,EAAGE,CAAI,GAEZD,EAAIC,CAAI,EACV,MAAO,GAETD,EAAIC,CAAI,EAAI,EACd,CACA,MAAO,EACT,CACA,SAASE,GAAS,CAChB,IAAIT,EAAI,UAAU,OAClB,GAAI,CAACA,EACH,MAAO,GAET,IAAIU,EAAM,UAAU,CAAC,EACrB,GAAI,CAACA,GAAO,OAAOA,EAAI,gBAAkB,YAAc,OAAOA,EAAI,0BAA4B,WAC5F,MAAO,GAET,GAAIV,IAAM,EACR,MAAO,GAET,IAAIW,EAAWD,EAAI,SACfX,EACJ,IAAKA,EAAI,EAAGA,EAAIC,EAAGD,IACjB,GAAIY,EAAS,QAAQ,UAAUZ,CAAC,CAAC,IAAM,EACrC,MAAO,GAGX,MAAO,EACT,CACA,SAASa,EAAcC,EAAM,CAC3B,IAAIC,EAAQD,EAAK,MAAM,GAAG,EAC1B,OAAOC,EAAMA,EAAM,OAAS,CAAC,CAC/B,CACA,SAASC,GAAmB,CAC1B,MAAM,IAAI,MAAM,UAAU,CAC5B,CACA,SAAS9B,EAAW+B,EAAK,CACvB,KAAK,KAAOA,EAAM,EAClB,KAAK,KAAO,EACZ,KAAK,MAAQ9B,EAAU,KAAK,IAAI,CAClC,CACAD,EAAW,UAAU,MAAQ,SAAS+B,EAAK,CACzC,IAAIC,EAAS,KAAK,KAClB,OAAID,EAAMC,EACD/B,EAAU8B,CAAG,GAElB,KAAK,KAAOA,EAAMC,IACpB,KAAK,MAAQ/B,EAAU+B,CAAM,EAC7B,KAAK,KAAO,GAEP,KAAK,MAAM,MAAM,KAAK,KAAM,KAAK,MAAQD,CAAG,EACrD,EACA,SAASE,EAAIC,EAAKC,EAAK,CAGrB,GAFA,KAAK,IAAMD,EACX,KAAK,IAAMC,EAAM,EACb,KAAK,IAAM,EACb,MAAM,IAAI,MAAM,iBAAiB,CAErC,CACAF,EAAI,UAAU,QAAU,UAAW,CACjC,OAAO,KAAK,KAAO,KAAK,IAAI,MAC9B,EACAA,EAAI,UAAU,YAAc,UAAW,CACrC,MAAO,CAAC,CAAC,KAAK,IAAI,KAAK,KAAK,CAC9B,EACAA,EAAI,UAAU,YAAc,UAAW,CACrC,KAAK,KACP,EACAA,EAAI,UAAU,aAAe,SAASG,EAAI,CACxC,KAAK,IAAI,KAAK,KAAK,EAAI,CAAC,CAACA,CAC3B,EACAH,EAAI,UAAU,QAAUA,EAAI,UAAU,SAAW,UAAW,CAC1D,IAAII,EAAI,EACJC,EAAK,EACLJ,EAAM,KAAK,IACXE,EAAIG,EAAGC,EAAIC,EACf,GACEL,EAAKF,EAAI,KAAK,KAAK,EACnBK,EAAIH,EAAK,IACTC,IAAMD,EAAK,MAAQE,EACnBA,GAAM,QACCC,GAAKD,EAAK,IACnB,GAAIC,EAAG,CACLC,EAAKH,EACLI,EAAK,UACL,GACEL,EAAKF,EAAI,KAAK,KAAK,EACnBM,IAAOJ,EAAK,KAAOK,EACnBA,GAAM,UACCL,EAAK,KACd,OAAQI,EAAK,EAAI,EAAEA,EAAK,GAAKA,GAAM,CACrC,CACA,OAAOH,GAAK,EAAI,EAAEA,EAAI,EACxB,EACAJ,EAAI,UAAU,QAAUA,EAAI,UAAU,SAAW,UAAW,CAE1D,QADIC,EAAM,KAAK,IACRA,EAAI,KAAK,KAAK,EAAI,KAAK,CAEhC,EACAD,EAAI,UAAU,SAAWA,EAAI,UAAU,UAAY,SAASI,EAAG,CAC7D,IAAIH,EAAM,KAAK,IACXM,EAAIE,EACR,GAAIL,GAAK,aAAeA,EAAI,WAAY,CACtCK,EAAKL,GAAK,EAAIA,GAAK,EAAI,CAACA,GAAK,EAAI,EACjC,GACEH,EAAI,KAAK,GAAG,EAAIQ,EAAK,IACrBA,IAAO,QACAA,IAAOR,EAAI,KAAK,KAAK,GAAK,KACrC,KAAO,CACLM,EAAKH,GAAK,EAAIA,EAAI,EAAI,CAACA,EAAI,EAAI,EAC/B,GACEH,EAAI,KAAK,GAAG,EAAIM,EAAK,IACrBA,GAAM,UACCA,GAAM,IAAMN,EAAI,KAAK,KAAK,GAAK,KAC1C,CACA,KAAK,KACP,EACAD,EAAI,UAAU,UAAY,UAAW,CACnC,IAAIC,EAAM,KAAK,IACXC,EAAM,KAAK,IAEf,GADA,KAAK,KAAO,EACR,OAAK,IAAMD,EAAI,QAGnB,OAAO,KAAK,IAAI,YAAYC,CAAG,CACjC,EACAF,EAAI,UAAU,UAAY,UAAW,CACnC,KAAK,KAAO,CACd,EACAA,EAAI,UAAU,WAAa,SAASO,EAAI,CACtC,IAAIN,EAAM,KAAK,IACXC,EAAM,KAAK,IAEf,GADA,KAAK,KAAO,EACR,OAAK,IAAMD,EAAI,QAGnB,OAAO,KAAK,IAAI,aAAaM,EAAIL,CAAG,CACtC,EACAF,EAAI,UAAU,WAAa,UAAW,CACpC,IAAIC,EAAM,KAAK,IACXC,EAAM,KAAK,IAEf,GADA,KAAK,KAAO,EACR,OAAK,IAAMD,EAAI,QAGnB,OAAO,KAAK,IAAI,aAAaC,CAAG,CAClC,EACAF,EAAI,UAAU,WAAa,UAAW,CACpC,KAAK,KAAO,CACd,EACAA,EAAI,UAAU,YAAc,SAASU,EAAG,CACtC,IAAIT,EAAM,KAAK,IACXC,EAAM,KAAK,IAEf,GADA,KAAK,KAAO,EACR,OAAK,IAAMD,EAAI,QAGnB,OAAO,KAAK,IAAI,cAAcS,EAAGR,CAAG,CACtC,EACAF,EAAI,UAAU,UAAY,SAASF,EAAK,CACtC,IAAII,EAAM,KAAK,IAEf,GADA,KAAK,KAAOJ,EACR,OAAK,IAAM,KAAK,IAAI,QAGxB,KAAIa,EAAQ7C,EAAK,MAAMgC,CAAG,EAC1B,YAAK,IAAI,KAAKa,EAAO,EAAGT,EAAKA,EAAMJ,CAAG,EAC/Ba,EACT,EACAX,EAAI,UAAU,UAAY,SAASF,EAAK,CACtC,KAAK,KAAOA,CACd,EACAE,EAAI,UAAU,WAAa,SAASC,EAAKH,EAAK,CAC5CA,EAAMA,GAAOG,EAAI,OACjB,IAAIC,EAAM,KAAK,IACf,KAAK,KAAOJ,EACR,OAAK,IAAM,KAAK,IAAI,SAGxBG,EAAI,KAAK,KAAK,IAAKC,EAAK,EAAGJ,CAAG,CAChC,EACAE,EAAI,UAAU,UAAY,UAAW,CACnC,OAAO,KAAK,UAAU,KAAK,SAAS,CAAC,CACvC,EACAA,EAAI,UAAU,UAAY,UAAW,CACnC,IAAIF,EAAM,KAAK,SAAS,EACxB,KAAK,KAAOA,CACd,EACAE,EAAI,UAAU,WAAa,SAASC,EAAK,CACvC,IAAIH,EAAMG,EAAI,OACd,KAAK,UAAUH,CAAG,EAClB,KAAK,WAAWG,EAAKH,CAAG,CAC1B,EACI,OAAO,OAAO,UAAU,WAAa,WACvCE,EAAI,UAAU,WAAa,UAAW,CACpC,IAAIF,EAAM,KAAK,SAAS,EACpBI,EAAM,KAAK,IACXD,EAAM,KAAK,IAEf,GADA,KAAK,KAAOH,EACR,OAAK,IAAMG,EAAI,QAGnB,OAAO,KAAK,IAAI,UAAUC,EAAKA,EAAMJ,CAAG,CAC1C,EAEAE,EAAI,UAAU,WAAa,UAAW,CACpC,IAAIF,EAAM,KAAK,SAAS,EACpBI,EAAM,KAAK,IACXD,EAAM,KAAK,IAEf,GADA,KAAK,KAAOH,EACR,OAAK,IAAMG,EAAI,QAGnB,OAAO,KAAK,IAAI,MAAMC,EAAKA,EAAMJ,CAAG,EAAE,SAAS,CACjD,EAEFE,EAAI,UAAU,WAAa,UAAW,CACpC,IAAIF,EAAM,KAAK,SAAS,EACxB,KAAK,KAAOA,CACd,EACAE,EAAI,UAAU,YAAc,SAAS1B,EAAG,CACtC,IAAIwB,EAAM,OAAO,WAAWxB,CAAC,EACzB2B,EAAM,KAAK,IACf,KAAK,UAAUH,CAAG,EAClB,IAAII,EAAM,KAAK,IAEf,GADA,KAAK,KAAOJ,EACR,OAAK,IAAMG,EAAI,QAGnB,GAAIH,EAAM,GACR,KAAK,WAAWxB,EAAGwB,CAAG,MACjB,CACL,IAAIjB,EAAGC,EAAG8B,EAAIC,EACd,IAAKhC,EAAI,EAAGC,EAAIgB,EAAKjB,EAAIC,EAAGD,IAC1B+B,EAAKtC,EAAE,WAAWO,CAAC,EACf+B,EAAK,IACPX,EAAIC,GAAK,EAAIU,EACJA,EAAK,MACdX,EAAIC,GAAK,EAAIU,GAAM,EAAI,IACvBX,EAAIC,GAAK,EAAIU,EAAK,GAAK,MACbA,EAAK,SAAW,SAAWC,EAAKvC,EAAE,WAAWO,EAAI,CAAC,GAAK,SAAW,OAC5E+B,EAAK,QAAUA,EAAK,OAAS,KAAOC,EAAK,MACzChC,IACAoB,EAAIC,GAAK,EAAIU,GAAM,GAAK,IACxBX,EAAIC,GAAK,EAAIU,GAAM,GAAK,GAAK,IAC7BX,EAAIC,GAAK,EAAIU,GAAM,EAAI,GAAK,IAC5BX,EAAIC,GAAK,EAAIU,EAAK,GAAK,MAEvBX,EAAIC,GAAK,EAAIU,GAAM,GAAK,IACxBX,EAAIC,GAAK,EAAIU,GAAM,EAAI,GAAK,IAC5BX,EAAIC,GAAK,EAAIU,EAAK,GAAK,IAG7B,CACF,EACI,OAAO,OAAO,UAAU,WAAa,WACvCZ,EAAI,UAAU,WAAa,SAASc,EAAKhB,EAAK,CAC5C,KAAK,IAAI,UAAUgB,EAAK,KAAK,IAAMhB,EAAKA,CAAG,CAC7C,EAEAE,EAAI,UAAU,WAAa,SAASc,EAAKhB,EAAK,CAC5C,KAAK,IAAI,MAAMgB,EAAK,KAAK,IAAMhB,EAAKA,EAAK,MAAM,CACjD,EAEE,OAAO,OAAO,UAAU,aAAe,WACzCE,EAAI,UAAU,YAAc,SAASc,EAAKhB,EAAK,CAC7C,IAAII,EAAM,KAAK,IACf,KAAK,KAAOJ,EACR,OAAK,IAAM,KAAK,IAAI,SAGxB,KAAK,IAAI,YAAYgB,EAAKZ,EAAKJ,CAAG,CACpC,EACS,OAAO,OAAO,UAAU,aAAe,WAChDE,EAAI,UAAU,YAAc,SAASc,EAAKhB,EAAK,CAC7C,IAAII,EAAM,KAAK,IACf,KAAK,KAAOJ,EACR,OAAK,IAAM,KAAK,IAAI,SAGxB,KAAK,IAAI,YAAYgB,EAAKZ,EAAKJ,CAAG,CACpC,EAEAE,EAAI,UAAU,YAAc,SAAS1B,EAAGwB,EAAK,CAC3C,IAAII,EAAM,KAAK,IACf,KAAK,KAAOJ,EACR,OAAK,IAAM,KAAK,IAAI,SAGxB,KAAK,IAAI,MAAMxB,EAAG4B,EAAKJ,EAAK,QAAQ,CACtC,EAEFE,EAAI,UAAU,aAAe,SAASe,EAAK,CACzC,OAAO,KAAK,IAAI,KAAK,KAAK,EAAIA,EAAI,IAAIA,EAAI,KAAK,CACjD,EACAf,EAAI,UAAU,SAAWA,EAAI,UAAU,UAAY,SAASe,EAAK,CAC/D,IAAIvC,EAAK,KAAK,SAAS,EACnBC,EAAKsC,EAAI,SAAS,EACtB,OAAOvC,IAAOC,EAAK,EAAID,EAAKC,EAAK,GAAK,CACxC,EACAuB,EAAI,UAAU,WAAa,SAASe,EAAK,CACvC,IAAIvC,EAAK,KAAK,UAAU,EACpBC,EAAKsC,EAAI,UAAU,EACvB,OAAOvC,IAAOC,EAAK,EAAID,EAAKC,EAAK,GAAK,CACxC,EACAuB,EAAI,UAAU,YAAc,SAASe,EAAK,CACxC,IAAIvC,EAAK,KAAK,WAAW,EACrBC,EAAKsC,EAAI,WAAW,EACxB,OAAOvC,IAAOC,EAAK,EAAID,EAAKC,EAAK,GAAK,CACxC,EACAuB,EAAI,UAAU,WAAa,SAASe,EAAKjB,EAAK,CAC5C,OAAO,KAAK,UAAUA,CAAG,EAAE,QAAQiB,EAAI,UAAUjB,CAAG,CAAC,CACvD,EACAE,EAAI,UAAU,WAAaA,EAAI,UAAU,YAAc,SAASe,EAAK,CACnE,IAAIC,EAAK,KAAK,SAAS,EACnBC,EAAK,KAAK,IACd,KAAK,KAAOD,EACZ,IAAIE,EAAKH,EAAI,SAAS,EAClBI,EAAKJ,EAAI,IACbA,EAAI,KAAOG,EACX,IAAIE,EAAK,KAAK,IAAI,MAAMH,EAAI,KAAK,GAAG,EAChCd,EAAKY,EAAI,IAAI,MAAMI,EAAIJ,EAAI,GAAG,EAClC,OAAOK,EAAG,QAAQjB,CAAE,CACtB,EACAH,EAAI,UAAU,gBAAkB,UAAW,CACzC,IAAIqB,EAAMrD,EAAU,CAAC,EACjBoC,EAAI,EACJvB,EAAI,EACJyC,EAAK,EACLrB,EAAM,KAAK,IACXE,EAAIoB,EAKR,IAJApB,EAAKF,EAAI,KAAK,KAAK,EACnBsB,EAAMpB,EAAK,EACXkB,EAAI,KAAK,CAAC,EACVjB,IAAMD,EAAK,MAAQ,EACZA,EAAK,KACVA,EAAKF,EAAI,KAAK,KAAK,EACnBG,IAAMD,EAAK,MAAQmB,EACnBA,GAAM,EACFA,GAAM,IACRA,GAAM,EACND,EAAIxC,GAAG,EAAIuB,EACXA,IAAM,GAGV,OAAAiB,EAAIxC,CAAC,EAAIuB,EACLmB,GACFC,EAAOH,EAAK,CAAC,EAERA,CACT,EACArB,EAAI,UAAU,cAAgB,SAASC,EAAK,CAC1C,IAAIsB,GAAOtB,EAAI,CAAC,EAAI,MAAQ,EACxBoB,EAAM,KAAK,IACXC,EAAK,EACLjB,EAAK,EACLI,EAAK,EACLL,EACAmB,GACFC,EAAOvB,EAAK,CAAC,EACbG,EAAI,GAEJA,EAAI,EAON,QALIR,EAAQ,CACVK,EAAI,WAAW,EAAG,CAAC,EACnBA,EAAI,WAAW,EAAG,CAAC,EACnBA,EAAI,WAAW,EAAG,CAAC,CACrB,EACOQ,GAAM,CAACb,EAAM,EAAEa,CAAE,GAAG,CAE3B,KAAOJ,EAAKI,GAGV,IAFAL,GAAKR,EAAMS,GAAI,GAAKiB,EACpBA,GAAM,GACCA,EAAK,GACVD,EAAI,KAAK,KAAK,EAAIjB,EAAI,IAAM,IAC5BA,IAAM,EACNkB,GAAM,EAGVlB,GAAKR,EAAMa,CAAE,GAAKa,EAClB,GACED,EAAI,KAAK,GAAG,EAAIjB,EAAI,IACpBA,IAAM,QACCA,IAAMiB,EAAI,KAAK,KAAK,GAAK,MAClC,KAAK,MACDE,GACFC,EAAOvB,EAAK,CAAC,CAEjB,EACA,SAASuB,EAAOvB,EAAKH,EAAK,CACxB,KAAOA,KACLG,EAAIH,CAAG,EAAI,CAACG,EAAIH,CAAG,CAEvB,CACAjC,EAAO,QAAU,CACf,IAAAmC,EACA,iBAAAH,EACA,WAAA3B,EACA,WAAAG,EACA,QAAAE,EACA,cAAAe,EACA,OAAAC,EACA,WAAAb,EACA,UAAAV,EACA,MAAAiB,EACA,cAAAS,CACF,CACF,CACF,CAAC,EAGG+B,GAAiBhF,GAAW,CAC9B,yCAAyCmB,EAASC,EAAQ,CACxD,aACA,IAAI6D,EAAQ/D,GAAc,EACtBgE,EAAOC,GACPrB,EAAKoB,EAAK,OACd,SAASE,EAASrC,EAAKsC,EAAMC,EAAM,CACjC,OAAOC,EAAM,YAAaxC,EAAKsC,EAAMC,CAAI,CAC3C,CACA,SAASE,EAAgBzC,EAAKsC,EAAMC,EAAM,CACxC,OAAOC,EAAM,oBAAqBxC,EAAKsC,EAAMC,CAAI,CACnD,CACA,SAASG,EAAO1C,EAAKsC,EAAMC,EAAM,CAC/B,OAAOC,EAAM,UAAWxC,EAAKsC,EAAMC,CAAI,CACzC,CACA,SAASC,EAAMG,EAAM3C,EAAKsC,EAAMC,EAAM,CACpC,OAAO,IAAIK,EAAOD,EAAMJ,CAAI,EAAE,MAAMvC,EAAKsC,EAAM,CAAC,CAAC,EAAE,MAAMA,CAAI,CAC/D,CACA,SAASO,GAAU,CACjB,KAAK,MAAQ,OACb,KAAK,OAAS,CAAC,CACjB,CACAA,EAAQ,UAAU,KAAO,UAAW,CAClC,MAAO,CAAC,KAAK,OAAO,MACtB,EACAA,EAAQ,UAAU,MAAQ,SAASP,EAAM,CACvC,GAAI,CAAC,KAAK,OAAO,OACf,OAAO,KAAK,MAEd,IAAIQ,EAAU,CAAC,EACXzD,EAAGC,EACP,IAAKD,EAAI,EAAGC,EAAI,KAAK,OAAO,OAAQD,EAAIC,EAAGD,IACzCyD,EAAQ,KAAK/B,EAAG,MAAO,KAAK,OAAO1B,CAAC,EAAE,OAAO,CAAC,EAEhD,IAAI0D,EAAMhC,EACR;AAAA,IACA,KAAK,OAAO,OACZiC,EAASV,CAAI,EACbQ,EAAQ,KAAK;AAAA,CAAI,CACnB,EACIG,EAAM,IAAI,MAAMF,CAAG,EACvB,MAAAE,EAAI,KAAO,8BACXA,EAAI,KAAOX,EACXW,EAAI,OAAS,KAAK,OACZA,CACR,EACAJ,EAAQ,UAAU,SAAW,SAASpF,EAAMyF,EAAKZ,EAAMa,EAAM,CAC3D,IAAIC,EAAOJ,EAASV,CAAI,EACpBS,EAAMhC,EAAG,wBAAyBsC,EAASF,CAAI,EAAGC,EAAM3F,EAAMyF,CAAG,EACjED,EAAM,IAAI,MAAMF,CAAG,EACvBE,EAAI,MAAQC,EACZD,EAAI,aAAeX,EACnBW,EAAI,KAAOE,EACX,KAAK,OAAO,KAAKF,CAAG,CACtB,EACAJ,EAAQ,UAAU,eAAiB,SAASS,EAAS,CAC/CA,EAAQ,OAAO,SACjB,KAAK,OAAS,KAAK,OAAO,OAAOA,EAAQ,MAAM,EAEnD,EACA,SAASN,EAASV,EAAM,CACtB,GAAIJ,EAAM,OAAOI,EAAM,OAAO,EAAG,CAC/B,IAAIiB,EAAQjB,EAAK,MAAM,IAAI,SAASkB,EAAO,CACzC,OAAOA,EAAM,UACf,CAAC,EACD,OAAOzC,EAAG,kBAAmBwC,EAAM,KAAK,IAAI,CAAC,CAC/C,KAAO,QAAIrB,EAAM,OAAOI,EAAM,SAAS,EAC9BvB,EAAG,eAAgBuB,EAAK,SAAUA,EAAK,UAAU,EAEjDvB,EAAG,UAAWuB,EAAK,UAAU,CAExC,CACA,SAASM,EAAOD,EAAMJ,EAAM,CAK1B,GAJAA,EAAOA,GAAQ,CAAC,EAChB,KAAK,MAAQI,EACb,KAAK,uBAAyB,CAAC,CAACJ,EAAK,sBACrC,KAAK,mBAAqB,CAAC,CAACA,EAAK,kBAC7B,KAAK,oBAAsB,KAAK,QAAU,UAC5C,MAAM,IAAI,MAAM,wBAAwB,CAE5C,CACAK,EAAO,UAAU,MAAQ,SAAS5C,EAAKsC,EAAMa,EAAM,CACjD,GAAI,CAACjB,EAAM,OAAOI,CAAI,EACpB,MAAM,IAAI,MAAMvB,EAAG,iBAAkBuB,CAAI,CAAC,EAE5C,OAAQA,EAAK,SAAU,CACrB,IAAK,QACH,OAAO,KAAK,SAAStC,EAAKsC,EAAMa,CAAI,EACtC,IAAK,MACH,OAAO,KAAK,OAAOnD,EAAKsC,EAAMa,CAAI,EACpC,IAAK,QACL,IAAK,SACH,OAAO,KAAK,UAAUnD,EAAKsC,EAAMa,CAAI,EACvC,IAAK,kBACL,IAAK,gBACH,OAAO,KAAK,SAASnD,EAAKsC,EAAMa,CAAI,EACtC,QACE,OAAOjB,EAAM,OAAOI,EAAM,SAAS,EAAI,KAAK,WAAWtC,EAAKsC,EAAMa,CAAI,EAAI,KAAK,aAAanD,EAAKsC,EAAMa,CAAI,CAC/G,CACF,EACAP,EAAO,UAAU,WAAa,SAAS5C,EAAKsC,EAAMa,EAAM,CACtD,IAAIG,EAAU,IAAIT,EACdpF,EACJ,GAAI,KAAK,QAAU,UACjB,GAAI,CAEF,GADA6F,EAAQ,MAAQhB,EAAK,SAAStC,CAAG,EAC7BsD,EAAQ,QAAU,OACpB,OAAAA,EAAQ,SAAS,+BAAgCtD,EAAKsC,EAAMa,CAAI,EACzDG,CAEX,OAASL,EAAK,CACZ,OAAAxF,EAAOsD,EAAG,oCAAqCkC,EAAI,OAAO,EAC1DK,EAAQ,SAAS7F,EAAMuC,EAAKsC,EAAMa,CAAI,EAC/BG,CACT,MAEAA,EAAQ,MAAQtD,EAGlB,GADAsD,EAAU,KAAK,MAAMA,EAAQ,MAAOhB,EAAK,eAAgBa,CAAI,EACzD,CAACG,EAAQ,KAAK,EAChB,OAAOA,EAET,GAAI,KAAK,QAAU,UACjB,GAAI,CACFA,EAAQ,MAAQhB,EAAK,WAAWgB,EAAQ,KAAK,CAC/C,OAASL,EAAK,CACZxF,EAAOsD,EAAG,oCAAqCkC,EAAI,OAAO,EAC1DK,EAAQ,SAAS7F,EAAMuC,EAAKsC,EAAMa,CAAI,CACxC,CAEF,OAAOG,CACT,EACAV,EAAO,UAAU,aAAe,SAAS5C,EAAKsC,EAAMa,EAAM,CACxD,IAAIG,EAAU,IAAIT,EACdY,EAAevB,EAAM,OAAOI,EAAM,QAAS,OAAO,EAClDoB,EAAiBxB,EAAM,OAAOI,EAAM,eAAe,EACnDY,EAAMlD,EACV,GAAIyD,GAAgB,KAAK,QAAU,UAAW,CAC5C,GAAI,OAAOzD,GAAO,SAChB,OAAAsD,EAAQ,SAAS,kBAAmBtD,EAAKsC,EAAMa,CAAI,EAC5CG,EAETJ,EAAMhB,EAAM,WAAWlC,EAAK,QAAQ,CACtC,CACA,OAAI0D,GAAkB,KAAK,QAAU,WAAapB,EAAK,QAAQY,CAAG,EAChEI,EAAQ,MAAQhB,EAAK,QAAQY,CAAG,EACvBQ,GAAkB,OAAOR,GAAO,SACzCI,EAAQ,MAAQhB,EAAK,UAAUY,CAAG,EACzBZ,EAAK,QAAQY,CAAG,EACrBhB,EAAM,OAAOI,EAAM,eAAe,EAChC,KAAK,QAAU,UACjBgB,EAAQ,MAAQhB,EAAK,QAAQY,CAAG,EAEhCI,EAAQ,MAAQhB,EAAK,UAAUY,CAAG,EAGpCI,EAAQ,MAAQG,EAAevB,EAAM,WAAWgB,CAAG,EAAIA,EAGzDI,EAAQ,SAAS,gBAAiBtD,EAAKsC,EAAMa,CAAI,EAE/C,KAAK,QAAU,WAAaM,IAC9BH,EAAQ,MAAQA,EAAQ,MAAM,SAAS,QAAQ,GAE1CA,CACT,EACAV,EAAO,UAAU,UAAY,SAAS5C,EAAKsC,EAAMa,EAAM,CACrD,IAAIG,EAAU,IAAIT,EACdpF,EACJ,GAAI,CAACuC,GAAO,OAAOA,GAAO,SACxB,OAAAsD,EAAQ,SAAS,wBAAyBtD,EAAKsC,EAAMa,CAAI,EAClDG,EAET,IAAIjE,EAAGC,EACP,GAAI,CAAC,KAAK,uBAAwB,CAChC,IAAIqE,EAAc,CAAC,EACfC,EAAa,OAAO,KAAK5D,CAAG,EAC5B6D,EACJ,IAAKxE,EAAI,EAAGC,EAAIsE,EAAW,OAAQvE,EAAIC,EAAGD,IACxCwE,EAAYD,EAAWvE,CAAC,EACnBiD,EAAK,MAAMuB,CAAS,GACvBF,EAAY,KAAKE,CAAS,EAG1BF,EAAY,SACdlG,EAAOsD,EACL,uCACA4C,EAAY,OACZA,EAAY,KAAK,IAAI,CACvB,EACAL,EAAQ,SAAS7F,EAAMuC,EAAKsC,EAAMa,CAAI,EAE1C,CACA,IAAIW,EAAgB,CAAC,EACjBC,EAAO,CAAC,MAAM,EACdC,EAAOC,EAAUC,EAAUC,EAAWC,GAAiBC,EAC3D,IAAKhF,EAAI,EAAGC,EAAIgD,EAAK,OAAO,OAAQjD,EAAIC,EAAGD,IACzC2E,EAAQ1B,EAAK,OAAOjD,CAAC,EACrB4E,EAAWjE,EAAIgE,EAAM,IAAI,EACzBG,EAAYhB,EAAK,MAAM,EACvBgB,EAAU,KAAKH,EAAM,IAAI,EACzBK,EAAaL,EAAM,aAAa,EAChCE,EAAW,OACPD,IAAa,QAAUI,IAAe,OACxCP,EAAc,KAAKE,EAAM,IAAI,EACpBC,IAAa,OAClB,KAAK,QAAU,WAAa,CAAC,KAAK,qBACpCC,EAAW,KAAK,MAAMG,EAAYL,EAAM,KAAMG,CAAS,EAAE,QAG3DC,GAAkB,KAAK,MAAMH,EAAUD,EAAM,KAAMG,CAAS,EAC5Db,EAAQ,eAAec,EAAe,EACtCF,EAAWE,GAAgB,MACvB,KAAK,oBAAsBA,GAAgB,KAAK,GAAKC,IAAe,QAAU,CAACL,EAAM,KAAK,QAAQC,EAAUI,EAAY,CAAE,UAAW,EAAK,CAAC,IAC7IH,EAAW,SAGfH,EAAK,KAAKG,CAAQ,EAUpB,GARIJ,EAAc,SAChBrG,EAAOsD,EACL,8BACA+C,EAAc,OACdA,EAAc,KAAK,CACrB,EACAR,EAAQ,SAAS7F,EAAMuC,EAAKsC,EAAMa,CAAI,GAEpCG,EAAQ,KAAK,EACf,GAAI,KAAK,QAAU,UAEjB,IADAA,EAAQ,MAAQ,CAAC,EACZjE,EAAI,EAAGC,EAAIgD,EAAK,OAAO,OAAQjD,EAAIC,EAAGD,IACzC6E,EAAWH,EAAK1E,EAAI,CAAC,EACjB6E,IAAa,SACfZ,EAAQ,MAAMhB,EAAK,OAAOjD,CAAC,EAAE,IAAI,EAAI6E,OAGpC,CACL,IAAII,EAAShC,EAAK,kBAClBgB,EAAQ,MAAQ,IAAKgB,EAAO,KAAK,MAAMA,EAAQP,CAAI,EACrD,CAEF,OAAOT,CACT,EACAV,EAAO,UAAU,SAAW,SAAS5C,EAAKsC,EAAMa,EAAM,CACpD,IAAIG,EAAU,IAAIT,EAClB,GAAI,CAAC,MAAM,QAAQ7C,CAAG,EACpB,OAAAsD,EAAQ,SAAS,kBAAmBtD,EAAKsC,EAAMa,CAAI,EAC5CG,EAET,IAAIJ,EAAM,CAAC,EACP7D,EAAGC,EAAGiF,EACV,IAAKlF,EAAI,EAAGC,EAAIU,EAAI,OAAQX,EAAIC,EAAGD,IAAK,CACtCkF,EAAOvE,EAAIX,CAAC,EACZ,IAAImF,EAAWrB,EAAK,MAAM,EAC1BqB,EAAS,KAAKnF,CAAC,EACf,IAAIoF,EAAc,KAAK,MAAMF,EAAMjC,EAAK,UAAWkC,CAAQ,EAC3DlB,EAAQ,eAAemB,CAAW,EAC9BnB,EAAQ,KAAK,GACfJ,EAAI,KAAKuB,EAAY,KAAK,CAE9B,CACA,OAAInB,EAAQ,KAAK,IACfA,EAAQ,MAAQJ,GAEXI,CACT,EACAV,EAAO,UAAU,OAAS,SAAS5C,EAAKsC,EAAMa,EAAM,CAClD,IAAIG,EAAU,IAAIT,EAClB,GAAI,CAAC7C,GAAO,OAAOA,GAAO,SACxB,OAAAsD,EAAQ,SAAS,wBAAyBtD,EAAKsC,EAAMa,CAAI,EAClDG,EAET,IAAIJ,EAAM,CAAC,EACPwB,EAAO,OAAO,KAAK1E,CAAG,EAAE,KAAK,EAC7BX,EAAGC,EACP,IAAKD,EAAI,EAAGC,EAAIoF,EAAK,OAAQrF,EAAIC,EAAGD,IAAK,CACvC,IAAI3B,EAAMgH,EAAKrF,CAAC,EACZsF,EAAW3E,EAAItC,CAAG,EAClBkH,EAAYzB,EAAK,MAAM,EAC3ByB,EAAU,KAAKlH,CAAG,EAClB,IAAImH,EAAe,KAAK,MAAMF,EAAUrC,EAAK,WAAYsC,CAAS,EAClEtB,EAAQ,eAAeuB,CAAY,EAC/BvB,EAAQ,KAAK,IACfJ,EAAIxF,CAAG,EAAImH,EAAa,MAE5B,CACA,OAAIvB,EAAQ,KAAK,IACfA,EAAQ,MAAQJ,GAEXI,CACT,EACAV,EAAO,UAAU,SAAW,SAAS5C,EAAK8E,EAAW3B,EAAM,CACzD,IAAI4B,EAAYD,EAAU,WAAa,gBACnCxB,EAAU,IAAIT,EAClB,GAAI7C,IAAQ,KAAM,CAChB,IAAIX,EAAGC,EACP,IAAKD,EAAI,EAAGC,EAAIwF,EAAU,MAAM,OAAQzF,EAAIC,EAAGD,IAC7C,GAAIyF,EAAU,MAAMzF,CAAC,EAAE,WAAa,OAClC,OAAAiE,EAAQ,MAAQ,KACTA,EAGX,OAAAA,EAAQ,SAAS,UAAWtD,EAAK8E,EAAW3B,CAAI,EACzCG,CACT,CACA,IAAI0B,EACJ,GAAI,KAAK,QAAU,oBAAqB,CAEtC,GADAA,EAAaF,EAAU,MAAM,CAAC,EAC1BE,EAAW,WAAa,OAC1B,OAAA1B,EAAQ,SAAS,8BAA+BtD,EAAK8E,EAAW3B,CAAI,EAC7DG,EAETtD,EAAMgF,EAAW,KAAKhF,CAAG,CAC3B,SAAW,KAAK,QAAU,WAAa,CAAC+E,EAAW,CAEjD,GADAC,EAAaF,EAAU,WAAW9E,CAAG,EACjC,CAACgF,EACH,OAAA1B,EAAQ,SAAS,wBAAyBtD,EAAK8E,EAAW3B,CAAI,EACvDG,EAETtD,EAAMgF,EAAW,KAAKhF,CAAG,CAC3B,CACA,GAAI,OAAOA,GAAO,SAChB,OAAAsD,EAAQ,SAAS,mBAAoBtD,EAAK8E,EAAW3B,CAAI,EAClDG,EAET,IAAIoB,EAAO,OAAO,KAAK1E,CAAG,EACtBiF,EACJ,GAAIP,EAAK,SAAW,EAClB,OAAAO,EAASlE,EAAG,mBAAoB2D,EAAK,OAAQA,CAAI,EACjDpB,EAAQ,SAAS2B,EAAQjF,EAAK8E,EAAW3B,CAAI,EACtCG,EAET,IAAI5F,EAAMgH,EAAK,CAAC,EAEhB,GADAM,EAAaF,EAAU,KAAKpH,CAAG,EAC3B,CAACsH,EACH,OAAAC,EAASlE,EAAG,kCAAmCrD,CAAG,EAClD4F,EAAQ,SAAS2B,EAAQjF,EAAK8E,EAAW3B,CAAI,EACtCG,EAET,IAAI4B,EAAa/B,EAAK,MAAM,EAC5B+B,EAAW,KAAKxH,CAAG,EACnB,IAAIyH,EAAgB,KAAK,MAAMnF,EAAItC,CAAG,EAAGsH,EAAYE,CAAU,EAC/D,OAAA5B,EAAQ,eAAe6B,CAAa,EAChCA,EAAc,KAAK,IACjB,KAAK,QAAU,WACjB7B,EAAQ,MAAQ,CAAC,EACjBA,EAAQ,MAAM0B,EAAW,UAAU,EAAIG,EAAc,OAC3CJ,EAGVzB,EAAQ,MAAQ0B,EAAW,KAAKG,EAAc,KAAK,EAFnD7B,EAAQ,MAAQ6B,EAAc,OAK3B7B,CACT,EACA,SAASD,EAASjD,EAAO,CACvB,IAAIgF,EAAO,CAAC,EACR/F,EAAGC,EAAG+F,EACV,IAAKhG,EAAI,EAAGC,EAAIc,EAAM,OAAQf,EAAIC,EAAGD,IACnCgG,EAAOjF,EAAMf,CAAC,EACV,MAAMgG,CAAI,EACZD,EAAK,KAAK,IAAMC,CAAI,EAEpBD,EAAK,KAAK,IAAMC,EAAO,GAAG,EAG9B,OAAOD,EAAK,KAAK,EAAE,CACrB,CACA/G,EAAO,QAAU,CACf,SAAAgE,EACA,gBAAAI,EACA,OAAAC,CACF,CACF,CACF,CAAC,EAGG4C,GAAgBrI,GAAW,CAC7B,wCAAwCmB,EAASC,EAAQ,CACvD,aACA,IAAI6D,EAAQ/D,GAAc,EACtBoH,EAAStD,GAAe,EACxBuD,EAASC,GACTtD,EAAOC,GACP5B,EAAM0B,EAAM,IACZwD,EAAQvD,EAAK,SAAS,YAAY,EAClCpB,EAAKoB,EAAK,OACVwD,EAAQ,CACV,MAASC,EACT,QAAWC,EACX,MAASC,EACT,OAAUC,EACV,KAAQC,EACR,MAASC,EACT,MAASC,EACT,MAASC,EACT,IAAOC,EACP,KAAQC,EACR,IAAOC,GACP,KAAQC,EACR,OAAUN,EACV,OAAUO,CACZ,EACIC,EAAe,2BACfC,EAAM,IAAIlG,EAAI,IAAIgF,EAAO,WAAW,IAAI,CAAC,EACzCmB,EAAe,KACfC,EAAmB,CAAC,EACxB,SAASC,EAAKC,EAAQvE,EAAMwE,EAAO,CACjC,IAAIzE,EAWJ,GAVIqE,GACFrE,EAAOqE,EACPC,EAAiB,KAAK,CAACD,EAAc,IAAI,CAAC,EAC1CA,EAAe,MAEfrE,EAAO,KAET,KAAK,KAAO,OACZ,KAAK,QAAU,OACf,KAAK,IAAMwE,GAAUA,EAAO,IAAM,GAAKA,EAAO,IAAM,OAChDA,EAAQ,CACV,IAAI3G,EAAO2G,EAAO,KACdE,EAAYF,EAAO,YAAc,OAASC,GAASA,EAAM,UAAYD,EAAO,UAChF,GAAI3G,IAAS,OAAQ,CAEnB,GADAA,EAAO8G,GAAa9G,EAAM6G,CAAS,EAC/BE,GAAY/G,CAAI,EAClB,MAAM,IAAI,MAAMY,EAAG,mCAAoCZ,CAAI,CAAC,EAE9D,IAAIgH,EAAW5E,GAAQA,EAAK,SAC5B,GAAI4E,EAAU,CACZ,GAAIA,EAAShH,CAAI,IAAM,OACrB,MAAM,IAAI,MAAMY,EAAG,0BAA2BZ,CAAI,CAAC,EAErDgH,EAAShH,CAAI,EAAImC,CACnB,CACF,SAAWC,GAAQA,EAAK,iBACtB,MAAM,IAAI,MAAMxB,EAAG,sCAAuC+F,CAAM,CAAC,EAEnE,KAAK,KAAO3G,EACZ,KAAK,QAAU2G,EAAO,QAAUA,EAAO,QAAQ,IAAI,SAAShI,EAAG,CAC7D,OAAOmI,GAAanI,EAAGkI,CAAS,CAClC,CAAC,EAAI,CAAC,CACR,CACF,CACAH,EAAK,UAAY,SAASC,EAAQvE,EAAMwE,EAAO,CAC7CxE,EAAOA,GAAQ,CAAC,EAChBA,EAAK,SAAWA,EAAK,UAAY,CAAC,EAClCwE,EAAQA,GAASK,GAAM,WAAW7E,CAAI,EACtC,IAAI8E,EAAa,SAASC,EAAY,CAUpC,OATIA,IAAe,GACjBA,EAAa,SACJA,IAAe,GACxBA,EAAa,QACJA,IAAe,OACxBA,EAAa,OACJ,OAAOA,GAAc,WAC9BA,EAAaA,EAAW,YAAY,GAE9BA,EAAY,CAClB,IAAK,SACH,OAAOC,EACT,IAAK,QACH,OAAOC,EACT,IAAK,OACH,OACF,QACE,MAAM,IAAI,MAAMzG,EAAG,iCAAkCuG,CAAU,CAAC,CACpE,CACF,EAAE/E,EAAK,UAAU,EACjB,GAAIuE,IAAW,KACb,MAAM,IAAI,MAAM,2CAA2C,EAE7D,GAAI5E,EAAM,OAAO4E,CAAM,EACrB,OAAOA,EAET,IAAIxE,EACJ,GAAIC,EAAK,WAAaD,EAAOC,EAAK,SAASuE,EAAQvE,EAAMwE,CAAK,GAAI,CAChE,GAAI,CAAC7E,EAAM,OAAOI,CAAI,EACpB,MAAM,IAAI,MAAMvB,EAAG,oCAAqCuB,CAAI,CAAC,EAE/D,OAAOA,CACT,CACA,GAAI,OAAOwE,GAAU,SAAU,CAG7B,GAFAA,EAASG,GAAaH,EAAQC,EAAM,SAAS,EAC7CzE,EAAOC,EAAK,SAASuE,CAAM,EACvBxE,EACF,OAAOA,EAET,GAAI4E,GAAYJ,CAAM,EACpB,OAAOvE,EAAK,SAASuE,CAAM,EAAID,EAAK,UAAU,CAAE,KAAMC,CAAO,EAAGvE,CAAI,EAEtE,MAAM,IAAI,MAAMxB,EAAG,0BAA2B+F,CAAM,CAAC,CACvD,CACA,GAAIA,EAAO,aAAevE,EAAK,cAAgB,CAACoE,EAAc,CAC5D,IAAIc,EAAclF,EAAK,aAAauE,EAAO,WAAW,EACtD,GAAIW,EAAa,CACf,IAAIN,EAAW,CAAC,EAChB,OAAO,KAAK5E,EAAK,QAAQ,EAAE,QAAQ,SAAS7E,EAAK,CAC/CyJ,EAASzJ,CAAG,EAAI6E,EAAK,SAAS7E,CAAG,CACnC,CAAC,EACD,GAAI,CACF,OAAAgI,EAAM,oCAAqCoB,EAAO,WAAW,EACtD,IAAIW,EAAYX,EAAQvE,CAAI,CACrC,OAASU,EAAK,CAEZ,GADAyC,EAAM,4CAA6CoB,EAAO,WAAW,EACjEvE,EAAK,mBACP,MAAMU,EAER0D,EAAe,KACfpE,EAAK,SAAW4E,CAClB,CACF,CACF,CACA,GAAI,MAAM,QAAQL,CAAM,EAAG,CACzB,IAAIY,EAAcf,EAClBA,EAAe,KACf,IAAIgB,EAAQb,EAAO,IAAI,SAASlH,EAAKP,EAAG,CACtC,OAAOwH,EAAK,UAAUjH,EAAK2C,EAAMwE,EAAM,MAAM1H,CAAC,CAAC,CACjD,CAAC,EACIgI,IACHA,EAAaO,GAAYD,CAAK,EAAIJ,EAAmBC,GAEvDb,EAAee,EACfpF,EAAO,IAAI+E,EAAWM,EAAOpF,CAAI,CACnC,MACED,EAAO,SAASrC,EAAU,CACxB,IAAI4H,EAAQlC,EAAM1F,CAAQ,EAC1B,GAAI4H,IAAU,OACZ,MAAM,IAAI,MAAM9G,EAAG,mBAAoBd,CAAQ,CAAC,EAElD,OAAO,IAAI4H,EAAMf,EAAQvE,EAAMwE,CAAK,CACtC,EAAED,EAAO,IAAI,EAEf,OAAOxE,CACT,EACAuE,EAAK,SAAW,SAAS3D,EAAKX,EAAMwE,EAAO,CAOzC,GANAxE,EAAOA,GAAQ,CAAC,EAChBwE,EAAQA,GAASK,GAAM,WAAW7E,CAAI,EACtCA,EAAK,eAAiBA,EAAK,gBAAkBsE,EAAK,UAAU,CAC1D,KAAM,QACN,MAAO,MACT,CAAC,EACGtE,EAAK,UAAW,CAClB,IAAID,EAAOC,EAAK,UAAUW,EAAKX,EAAMwE,CAAK,EAC1C,GAAIzE,IAAS,OAAQ,CACnB,GAAI,CAACJ,EAAM,OAAOI,CAAI,EACpB,MAAM,IAAI,MAAMvB,EAAG,sCAAuCuB,CAAI,CAAC,EAEjE,OAAOA,CACT,CACF,CACA,OAAQ,OAAOY,EAAK,CAClB,IAAK,SACH,OAAO2D,EAAK,UAAU,SAAUtE,EAAMwE,CAAK,EAC7C,IAAK,UACH,OAAOF,EAAK,UAAU,UAAWtE,EAAMwE,CAAK,EAC9C,IAAK,SACH,OAAK7D,EAAM,KAAOA,EACT2D,EAAK,UAAU,MAAOtE,EAAMwE,CAAK,EAC/B,KAAK,IAAI7D,CAAG,EAAI,iBAClB2D,EAAK,UAAU,QAAStE,EAAMwE,CAAK,EAErCF,EAAK,UAAU,SAAUtE,EAAMwE,CAAK,EAC7C,IAAK,SACH,GAAI7D,IAAQ,KACV,OAAO2D,EAAK,UAAU,OAAQtE,EAAMwE,CAAK,EACpC,GAAI,MAAM,QAAQ7D,CAAG,EAC1B,OAAKA,EAAI,OAGF2D,EAAK,UAAU,CACpB,KAAM,QACN,MAAOA,EAAK,SACV3D,EAAI,IAAI,SAAS4E,EAAIzI,EAAG,CACtB,OAAOwH,EAAK,SAASiB,EAAIvF,EAAMwE,EAAM,MAAM1H,CAAC,CAAC,CAC/C,CAAC,EACDkD,EACAwE,EAAM,MAAM,GAAG,CACjB,CACF,EAAGxE,EAAMwE,CAAK,EAXLxE,EAAK,eAYT,GAAI,OAAO,SAASW,CAAG,EAC5B,OAAO2D,EAAK,UAAU,QAAStE,EAAMwE,CAAK,EAE5C,IAAInD,EAAa,OAAO,KAAKV,CAAG,EAChC,OAAIU,EAAW,KAAK,SAAS9E,EAAG,CAC9B,MAAO,CAACiJ,GAAYjJ,CAAC,CACvB,CAAC,EACQ+H,EAAK,UAAU,CACpB,KAAM,MACN,OAAQA,EAAK,SAASjD,EAAW,IAAI,SAAS9E,EAAG,CAC/C,OAAO+H,EAAK,SAAS3D,EAAIpE,CAAC,EAAGyD,EAAMwE,EAAM,MAAMjI,CAAC,CAAC,CACnD,CAAC,EAAGyD,EAAMwE,EAAM,MAAM,GAAG,CAAC,CAC5B,EAAGxE,EAAMwE,CAAK,EAETF,EAAK,UAAU,CACpB,KAAM,SACN,OAAQjD,EAAW,IAAI,SAAS9E,EAAG,CACjC,MAAO,CAAE,KAAMA,EAAG,KAAM+H,EAAK,SAAS3D,EAAIpE,CAAC,EAAGyD,EAAMwE,EAAM,MAAMjI,CAAC,CAAC,CAAE,CACtE,CAAC,CACH,EAAGyD,EAAMwE,CAAK,EAChB,QACE,MAAM,IAAI,MAAMhG,EAAG,6BAA8BmC,CAAG,CAAC,CACzD,CACF,EACA2D,EAAK,SAAW,SAASc,EAAOpF,EAAMwE,EAAO,CAC3C,GAAI,CAACY,EAAM,OACT,MAAM,IAAI,MAAM,qBAAqB,EAEvC,GAAIA,EAAM,SAAW,EACnB,OAAOA,EAAM,CAAC,EAEhBpF,EAAOA,GAAQ,CAAC,EAChBwE,EAAQA,GAASK,GAAM,WAAW7E,CAAI,EACtC,IAAIyF,EAAW,CAAC,EACZC,EAAmB,EACnBC,EAAsB,GAmB1B,GAlBAP,EAAM,QAAQ,SAASrF,EAAM,CAC3B,OAAQA,EAAK,SAAU,CACrB,IAAK,kBACH4F,EAAsB,GACtBF,EAAWA,EAAS,OAAO1F,EAAK,KAAK,EACrC,MACF,IAAK,gBACH2F,IACAD,EAAWA,EAAS,OAAO1F,EAAK,KAAK,EACrC,MACF,IAAK,OACH0F,EAAS,KAAK1F,CAAI,EAClB,MACF,QACE4F,EAAsB,GACtBF,EAAS,KAAK1F,CAAI,CACtB,CACF,CAAC,EACG2F,EAAkB,CACpB,GAAI,CAACC,EACH,MAAM,IAAI,MAAM,8BAA8B,EAEhD,IAAIC,EAAc,CAAC,EACnBH,EAAS,QAAQ,SAAS1F,EAAM,CAC9B,IAAInC,EAAOmC,EAAK,WACZ0C,EAAamD,EAAYhI,CAAI,EACjC,GAAI,CAAC6E,EACHmD,EAAYhI,CAAI,EAAImC,UACX,CAACA,EAAK,OAAO0C,CAAU,EAChC,MAAM,IAAI,MAAM,0BAA0B,CAE9C,CAAC,EACD,IAAIsC,EAAa/E,EAAK,WAClBuC,EACJvC,EAAK,WAAa,GAClB,GAAI,CACFuC,EAAY+B,EAAK,UAAU,OAAO,KAAKsB,CAAW,EAAE,IAAI,SAAShI,EAAM,CACrE,OAAOgI,EAAYhI,CAAI,CACzB,CAAC,EAAGoC,EAAMwE,CAAK,CACjB,OAAS9D,EAAK,CACZ,MAAAV,EAAK,WAAa+E,EACZrE,CACR,CACA,OAAAV,EAAK,WAAa+E,EACXxC,CACT,CACA,IAAIsD,EAAa,CAAC,EAClBJ,EAAS,QAAQ,SAAS1F,EAAM,CAC9B,IAAI+F,EAASC,GAAchG,CAAI,EAC3BiG,EAAcH,EAAWC,CAAM,EAC9BE,IACHH,EAAWC,CAAM,EAAIE,EAAc,CAAC,GAEtCA,EAAY,KAAKjG,CAAI,CACvB,CAAC,EACD,IAAIkG,EAAU,OAAO,KAAKJ,CAAU,EAChCK,EAAYD,EAAQ,IAAI,SAASH,EAAQ,CAC3C,IAAIE,EAAcH,EAAWC,CAAM,EACnC,GAAIE,EAAY,SAAW,EACzB,OAAOA,EAAY,CAAC,EAEpB,OAAQF,EAAQ,CACd,IAAK,OACL,IAAK,UACH,OAAOE,EAAY,CAAC,EACtB,IAAK,SACH,OAAOG,GAAeH,CAAW,EACnC,IAAK,SACH,OAAOI,GAAeJ,EAAahG,EAAMwE,CAAK,EAChD,IAAK,SACH,OAAO6B,GAAeL,EAAahG,EAAMwE,CAAK,EAChD,IAAK,QAIH,OAHAwB,EAAcA,EAAY,OAAO,SAASM,EAAG,CAC3C,OAAOA,IAAMtG,EAAK,cACpB,CAAC,EACIgG,EAAY,OAGV1B,EAAK,UAAU,CACpB,KAAM,QACN,MAAOA,EAAK,SAAS0B,EAAY,IAAI,SAASM,EAAG,CAC/C,OAAOA,EAAE,SACX,CAAC,EAAGtG,EAAMwE,EAAM,MAAM,GAAG,CAAC,CAC5B,EAAGxE,EAAMwE,CAAK,EAPLxE,EAAK,eAQhB,QACE,OAAOuG,GAAeP,EAAahG,EAAMwE,CAAK,CAClD,CAEJ,CAAC,EACD,OAAI0B,EAAU,SAAW,EAChBA,EAAU,CAAC,EAEX5B,EAAK,UAAU4B,EAAWlG,EAAMwE,CAAK,CAEhD,EACAF,EAAK,OAAS3E,EAAM,OACpB2E,EAAK,QAAU,SAASpI,EAAM,CAC5BiH,EAAM,8BAA+BjH,CAAI,EACzCiI,EAAI,IAAM,IAAIlB,EAAO,WAAW/G,CAAI,CACtC,EACA,OAAO,eAAeoI,EAAK,UAAW,aAAc,CAClD,WAAY,GACZ,IAAK,UAAW,CACd,IAAIvE,EAAOuE,EAAK,OAAO,KAAM,SAAS,EAAI,KAAK,eAAiB,KAChE,OAAIvE,EAAK,KACAA,EAAK,KAEVJ,EAAM,OAAOI,EAAM,UAAU,EACxBA,EAAK,kBAEPJ,EAAM,OAAOI,EAAM,OAAO,EAAI,OAASA,EAAK,QACrD,CACF,CAAC,EACDuE,EAAK,UAAU,QAAU3E,EAAM,iBAC/B2E,EAAK,UAAU,cAAgB,SAASkC,EAAMC,EAAM,CAClD,OAAO,KAAK,OAAO,IAAIxI,EAAIuI,CAAI,EAAG,IAAIvI,EAAIwI,CAAI,CAAC,CACjD,EACAnC,EAAK,UAAU,eAAiB,SAASvE,EAAMC,EAAM,CACnD,GAAI,CAACL,EAAM,OAAOI,CAAI,EACpB,MAAM,IAAI,MAAMvB,EAAG,iBAAkBuB,CAAI,CAAC,EAE5C,GAAI,CAACJ,EAAM,OAAO,KAAM,QAAS,SAAS,GAAKA,EAAM,OAAOI,EAAM,SAAS,EACzE,OAAO,KAAK,eAAeA,EAAK,eAAgBC,CAAI,EAEtDA,EAAOA,GAAQ,CAAC,EAChBA,EAAK,SAAWA,EAAK,UAAY,CAAC,EAClC,IAAI0G,EAAUvL,EACd,GAAIwE,EAAM,OAAO,KAAM,SAAU,OAAO,GAAKA,EAAM,OAAOI,EAAM,SAAU,OAAO,IAC/E5E,EAAM,KAAK,KAAO,IAAM4E,EAAK,KAC7B2G,EAAW1G,EAAK,SAAS7E,CAAG,EACxBuL,GACF,OAAOA,EAOX,GAJAA,EAAW,IAAIC,GAAS5G,EAAM,IAAI,EAC9B5E,IACF6E,EAAK,SAAS7E,CAAG,EAAIuL,GAEnB/G,EAAM,OAAOI,EAAM,OAAO,EAAG,CAC/B,IAAI6G,EAAY7G,EAAK,MAAM,IAAI,SAASuG,EAAG,CACzC,OAAO,KAAK,eAAeA,EAAGtG,CAAI,CACpC,EAAG,IAAI,EACP0G,EAAS,MAAQ,SAAS1H,EAAK,CAC7B,IAAI6H,EAAQ7H,EAAI,SAAS,EACrB8H,EAAYF,EAAUC,CAAK,EAC/B,GAAIC,IAAc,OAChB,MAAM,IAAI,MAAMtI,EAAG,0BAA2BqI,CAAK,CAAC,EAEtD,OAAOD,EAAUC,CAAK,EAAE,MAAM7H,CAAG,CACnC,CACF,MACE,KAAK,QAAQ0H,EAAU3G,EAAMC,CAAI,EAEnC,GAAI,CAAC0G,EAAS,MACZ,MAAM,IAAI,MAAMlI,EAAG,uBAAwBuB,EAAM,IAAI,CAAC,EAExD,OAAO,OAAO,OAAO2G,CAAQ,CAC/B,EACApC,EAAK,UAAU,aAAe,SAASpG,EAAKwI,EAAUK,EAAS,CAC7D,IAAI/H,EAAM,IAAIf,EAAIC,CAAG,EACjByC,EAAMqG,GAAU,KAAMhI,EAAK0H,EAAUK,CAAO,EAChD,GAAI,CAAC/H,EAAI,QAAQ,EACf,MAAM,IAAI,MAAM,kBAAkB,EAEpC,GAAI,CAAC+H,GAAW/H,EAAI,IAAMd,EAAI,OAC5B,MAAM,IAAI,MAAM,eAAe,EAEjC,OAAOyC,CACT,EACA2D,EAAK,UAAU,aAAe,SAAS3D,EAAK,CAC1CwD,EAAI,IAAM,EACV,KAAK,OAAOA,EAAKxD,CAAG,EACpB,IAAIzC,EAAMyB,EAAM,UAAUwE,EAAI,GAAG,EACjC,OAAIA,EAAI,QAAQ,EACdA,EAAI,IAAI,KAAKjG,EAAK,EAAG,EAAGiG,EAAI,GAAG,EAE/B,KAAK,OAAO,IAAIlG,EAAIC,CAAG,EAAGyC,CAAG,EAExBzC,CACT,EACAoG,EAAK,UAAU,eAAiB,SAASpG,EAAKC,EAAKuI,EAAU,CAC3D,IAAI1H,EAAM,IAAIf,EAAIC,EAAKC,CAAG,EACtBwC,EAAMqG,GAAU,KAAMhI,EAAK0H,CAAQ,EACvC,OAAK1H,EAAI,QAAQ,EAGV,CAAE,MAAO2B,EAAK,OAAQ3B,EAAI,GAAI,EAF5B,CAAE,MAAO,OAAQ,OAAQ,EAAG,CAGvC,EACAsF,EAAK,UAAU,eAAiB,SAAS3D,EAAKzC,EAAKC,EAAK,CACtD,IAAIa,EAAM,IAAIf,EAAIC,EAAKC,CAAG,EAE1B,OADA,KAAK,OAAOa,EAAK2B,CAAG,EACf3B,EAAI,QAAQ,EAGVA,EAAI,IAFFd,EAAI,OAASc,EAAI,GAG5B,EACAsF,EAAK,UAAU,WAAa,SAAS7G,EAAKiJ,EAAUO,EAAuB,CACzE,IAAIjH,EAAO,CAAE,sBAAAiH,CAAsB,EACnC,GAAI,CAACP,EACH,OAAO1D,EAAO,SAASvF,EAAK,KAAMuC,CAAI,EAExC,IAAID,EAAO2G,EAAS,YAChB/F,EAAMqC,EAAO,SAASvF,EAAKsC,EAAMC,CAAI,EACzC,OAAO,KAAK,aAAaD,EAAK,aAAaY,CAAG,EAAG+F,CAAQ,CAC3D,EACApC,EAAK,UAAU,WAAa,SAAS3D,EAAKX,EAAM,CAC9C,OAAOgD,EAAO,OAAOrC,EAAK,KAAMX,CAAI,CACtC,EACAsE,EAAK,UAAU,MAAQ,SAAS3D,EAAK,CACnC,OAAO,KAAK,aAAa,KAAK,aAAaA,CAAG,CAAC,CACjD,EACA2D,EAAK,UAAU,KAAO,SAAS3D,EAAK,CAClC,IAAIuG,EAAS,KAAK,mBAClB,OAAOA,IAAW,KAAO,KAAO,IAAIA,EAAOvG,CAAG,CAChD,EACA2D,EAAK,UAAU,WAAa,SAAS3D,EAAKX,EAAM,CAC9CA,EAAO,CAAE,sBAAuBA,GAAQA,EAAK,qBAAsB,EAC/D,MAAK,QAAQW,EAAKX,CAAI,GAG1BgD,EAAO,OAAOrC,EAAK,KAAMX,CAAI,CAC/B,EACAsE,EAAK,UAAU,QAAU,SAAS3D,EAAKX,EAAM,CAC3C,IAAImH,EAAQ,EAAEnH,GAAQA,EAAK,uBAAyB,EAChDoH,EAAYpH,GAAQA,EAAK,UACzBqH,EAAMzG,EACV,OAAIwG,IACFxG,EAAO,CAAC,EACRyG,EAAO,SAAS5J,EAAKsC,EAAM,CACzBqH,EAAU,KAAK,KAAMxG,EAAK,MAAM,EAAGnD,EAAKsC,EAAMY,CAAG,CACnD,GAEK,KAAK,OAAOA,EAAKwG,EAAOE,EAAMzG,CAAI,CAC3C,EACA0D,EAAK,UAAU,OAAS,SAASvE,EAAM,CACrC,OAAOJ,EAAM,OAAOI,CAAI,GAAKJ,EAAM,WAAW,KAAK,OAAO,EAAGI,EAAK,OAAO,CAAC,CAC5E,EACAuE,EAAK,UAAU,OAAS,SAAStE,EAAM,CACrC,OAAO,KAAK,OAAO,CACjB,YAAa,CAAC,EAAEA,GAAQA,EAAK,aAC7B,QAAS,CAAC,EAAEA,GAAQA,EAAK,QAC3B,CAAC,CACH,EACAsE,EAAK,UAAU,OAAS,UAAW,CACjC,OAAO,KAAK,OAAO,CAAE,YAAa,EAAK,CAAC,CAC1C,EACAA,EAAK,UAAU,SAAW,UAAW,CACnC,OAAO9F,EAAG,OAAQ8I,GAAa,KAAK,QAAQ,CAAC,CAC/C,EACAhD,EAAK,UAAU,OAAS,SAAStE,EAAM,CACrCA,EAAK,QAAUA,EAAK,SAAW,CAAC,EAChC,IAAIpC,EAAO,KAAK,KAChB,GAAIA,IAAS,OAAQ,CACnB,GAAIoC,EAAK,SAAWA,EAAK,QAAQpC,CAAI,EACnC,OAAOA,EAEToC,EAAK,QAAQpC,CAAI,EAAI,EACvB,CACA,IAAI2G,EAAS,CAAC,EACV,KAAK,OAAS,SAChBA,EAAO,KAAO3G,GAEhB2G,EAAO,KAAO,KAAK,SACnB,IAAIgD,EAAgB,KAAK,OAAOhD,EAAQvE,CAAI,EAC5C,OAAIuH,IAAkB,SACpBhD,EAASgD,GAEPvH,EAAK,cACH,KAAK,SAAW,KAAK,QAAQ,SAC/BuE,EAAO,QAAU,KAAK,SAEpB,KAAK,MAAQ,SACfA,EAAO,IAAM,KAAK,MAGfA,CACT,EACAD,EAAK,UAAU,yBAA2B,UAAW,CACnD,IAAI1G,EAAO,KAAK,WAChB,GAAIA,IAAS,OACX,OAAO,KAET,IAAI4J,EAAO,CAAC5J,EAAK,QAAQ,GAAG,EAAI,SAAWA,EAAO,KAAO,QAAUA,EAC/D6J,EAAO,kCAAoCD,EAAO,aAClDN,EAAS,IAAI,SAASO,CAAI,EAAE,EAC5BC,EAAW,IAAI,SAAS,oBAAsB9J,EAAO,IAAI,EAC7D,OAAO,eAAesJ,EAAO,UAAW,WAAY,CAClD,IAAK,UAAW,CACd,OAAOQ,CACT,CACF,CAAC,EACD,IAAIC,EAAO,KACXT,EAAO,KAAOS,EACd,OAAO,eAAeT,EAAO,UAAW,OAAQ,CAC9C,IAAK,UAAW,CACd,OAAOS,CACT,CACF,CAAC,EACD,IAAIC,EAAS,IAAI,SAAS,UAAYJ,EAAO,GAAG,EAChD,cAAO,eAAeN,EAAO,UAAW,SAAU,CAChD,IAAK,UAAW,CACd,OAAOU,CACT,CACF,CAAC,EACMV,CACT,EACA5C,EAAK,UAAU,MAAQ,SAAStF,EAAK,CACnC,IAAIb,EAAMa,EAAI,IACV2B,EAAM,KAAK,MAAM3B,CAAG,EACxB,OAAAA,EAAI,IAAMb,EACHwC,CACT,EACA2D,EAAK,UAAU,OAAS3E,EAAM,iBAC9B2E,EAAK,UAAU,OAAS3E,EAAM,iBAC9B2E,EAAK,UAAU,OAAS3E,EAAM,iBAC9B2E,EAAK,UAAU,MAAQ3E,EAAM,iBAC7B2E,EAAK,UAAU,MAAQ3E,EAAM,iBAC7B2E,EAAK,UAAU,QAAU3E,EAAM,iBAC/B2E,EAAK,UAAU,OAAS3E,EAAM,iBAC9B2E,EAAK,UAAU,OAASA,EAAK,UAAU,eACvCA,EAAK,UAAU,OAASA,EAAK,UAAU,eACvCA,EAAK,UAAU,WAAaA,EAAK,UAAU,aAC3CA,EAAK,UAAU,SAAWA,EAAK,UAAU,aACzCA,EAAK,UAAU,eAAiBA,EAAK,UAAU,cAC/C,SAASuD,EAAcC,EAAU,CAC/BxD,EAAK,KAAK,IAAI,EACd,KAAK,mBAAqB,KAAK,yBAAyB,EACnDwD,GACH,OAAO,OAAO,IAAI,CAEtB,CACAlI,EAAK,SAASiI,EAAevD,CAAI,EACjCuD,EAAc,UAAU,QAAU,SAASnB,EAAU3G,EAAM,CACrDA,EAAK,WAAa,KAAK,WACzB2G,EAAS,MAAQ,KAAK,MAE1B,EACAmB,EAAc,UAAU,OAAS,UAAW,CAC1C,OAAO,KAAK,QACd,EACAA,EAAc,UAAU,QAAUlI,EAAM,QACxC,SAASqE,GAAW,CAClB6D,EAAc,KAAK,IAAI,CACzB,CACAjI,EAAK,SAASoE,EAAU6D,CAAa,EACrC7D,EAAS,UAAU,OAAS,SAASrD,EAAKwG,EAAOE,EAAM,CACrD,IAAIjJ,EAAKuC,IAAQ,KACjB,MAAI,CAACvC,GAAMiJ,GACTA,EAAK1G,EAAK,IAAI,EAETvC,CACT,EACA4F,EAAS,UAAU,MAAQ,UAAW,CACpC,OAAO,IACT,EACAA,EAAS,UAAU,MAAQ,UAAW,CACtC,EACAA,EAAS,UAAU,OAAS,SAAShF,EAAK2B,EAAK,CACzCA,IAAQ,MACVoH,EAAkBpH,EAAK,IAAI,CAE/B,EACAqD,EAAS,UAAU,OAAS,UAAW,CACrC,MAAO,EACT,EACAA,EAAS,UAAU,QAAUA,EAAS,UAAU,OAChDA,EAAS,UAAU,SAAW,OAC9B,SAASV,GAAc,CACrBuE,EAAc,KAAK,IAAI,CACzB,CACAjI,EAAK,SAAS0D,EAAauE,CAAa,EACxCvE,EAAY,UAAU,OAAS,SAAS3C,EAAKwG,EAAOE,EAAM,CACxD,IAAIjJ,EAAK,OAAOuC,GAAO,UACvB,MAAI,CAACvC,GAAMiJ,GACTA,EAAK1G,EAAK,IAAI,EAETvC,CACT,EACAkF,EAAY,UAAU,MAAQ,SAAStE,EAAK,CAC1C,OAAOA,EAAI,YAAY,CACzB,EACAsE,EAAY,UAAU,MAAQ,SAAStE,EAAK,CAC1CA,EAAI,YAAY,CAClB,EACAsE,EAAY,UAAU,OAAS,SAAStE,EAAK2B,EAAK,CAC5C,OAAOA,GAAO,WAChBoH,EAAkBpH,EAAK,IAAI,EAE7B3B,EAAI,aAAa2B,CAAG,CACtB,EACA2C,EAAY,UAAU,OAAS,SAAS0E,EAAMC,EAAM,CAClD,OAAOD,EAAK,aAAaC,CAAI,CAC/B,EACA3E,EAAY,UAAU,SAAW,UACjC,SAASO,GAAU,CACjBgE,EAAc,KAAK,IAAI,CACzB,CACAjI,EAAK,SAASiE,EAASgE,CAAa,EACpChE,EAAQ,UAAU,OAAS,SAASlD,EAAKwG,EAAOE,EAAM,CACpD,IAAIjJ,EAAKuC,KAASA,EAAM,GACxB,MAAI,CAACvC,GAAMiJ,GACTA,EAAK1G,EAAK,IAAI,EAETvC,CACT,EACAyF,EAAQ,UAAU,MAAQ,SAAS7E,EAAK,CACtC,OAAOA,EAAI,QAAQ,CACrB,EACA6E,EAAQ,UAAU,MAAQ,SAAS7E,EAAK,CACtCA,EAAI,QAAQ,CACd,EACA6E,EAAQ,UAAU,OAAS,SAAS7E,EAAK2B,EAAK,CACxCA,KAASA,EAAM,IACjBoH,EAAkBpH,EAAK,IAAI,EAE7B3B,EAAI,SAAS2B,CAAG,CAClB,EACAkD,EAAQ,UAAU,OAAS,SAASmE,EAAMC,EAAM,CAC9C,OAAOD,EAAK,SAASC,CAAI,CAC3B,EACApE,EAAQ,UAAU,SAAW,MAC7B,SAASC,GAAW,CAClB+D,EAAc,KAAK,IAAI,CACzB,CACAjI,EAAK,SAASkE,EAAU+D,CAAa,EACrC/D,EAAS,UAAU,OAAS,SAASnD,EAAKwG,EAAOE,EAAM,CACrD,IAAIjJ,EAAK,OAAOuC,GAAO,UAAYA,EAAM,IAAM,GAAKuH,GAAWvH,CAAG,EAClE,MAAI,CAACvC,GAAMiJ,GACTA,EAAK1G,EAAK,IAAI,EAETvC,CACT,EACA0F,EAAS,UAAU,MAAQ,SAAS9E,EAAK,CACvC,IAAIX,EAAIW,EAAI,SAAS,EACrB,GAAI,CAACkJ,GAAW7J,CAAC,EACf,MAAM,IAAI,MAAM,0BAA0B,EAE5C,OAAOA,CACT,EACAyF,EAAS,UAAU,MAAQ,SAAS9E,EAAK,CACvCA,EAAI,SAAS,CACf,EACA8E,EAAS,UAAU,OAAS,SAAS9E,EAAK2B,EAAK,EACzC,OAAOA,GAAO,UAAYA,EAAM,GAAK,CAACuH,GAAWvH,CAAG,IACtDoH,EAAkBpH,EAAK,IAAI,EAE7B3B,EAAI,UAAU2B,CAAG,CACnB,EACAmD,EAAS,UAAU,OAAS,SAASkE,EAAMC,EAAM,CAC/C,OAAOD,EAAK,UAAUC,CAAI,CAC5B,EACAnE,EAAS,UAAU,QAAU,SAAS4C,EAAU3G,EAAM,CACpD,OAAQA,EAAK,SAAU,CACrB,IAAK,MACH2G,EAAS,MAAQ3G,EAAK,MACtB,MACF,IAAK,gBACL,IAAK,OACH2G,EAAS,MAAQ,KAAK,KAC1B,CACF,EACA5C,EAAS,UAAU,SAAW,OAC9BA,EAAS,OAAS,SAASqE,EAASC,EAAU,CAC5CD,EAAUA,GAAW,CAAC,EACtB,IAAIE,EAAU,CACZ,SAAU,YACV,WAAY,cACZ,SAAU,YACV,OAAQ,UACR,QAAS,WACT,QAAS,SACX,EACItI,EAAO,IAAIuI,GAAiBF,CAAQ,EACxC,cAAO,KAAKC,CAAO,EAAE,QAAQ,SAASzK,EAAM,CAC1C,GAAIuK,EAAQvK,CAAI,IAAM,OACpB,MAAM,IAAI,MAAMY,EAAG,oCAAqCZ,CAAI,CAAC,EAE/DmC,EAAKsI,EAAQzK,CAAI,CAAC,EAAIuK,EAAQvK,CAAI,CACpC,CAAC,EACM,OAAO,OAAOmC,CAAI,CAC3B,EACA,SAAS6D,GAAY,CACnBiE,EAAc,KAAK,IAAI,CACzB,CACAjI,EAAK,SAASgE,EAAWiE,CAAa,EACtCjE,EAAU,UAAU,OAAS,SAASjD,EAAKwG,EAAOE,EAAM,CACtD,IAAIjJ,EAAK,OAAOuC,GAAO,SACvB,MAAI,CAACvC,GAAMiJ,GACTA,EAAK1G,EAAK,IAAI,EAETvC,CACT,EACAwF,EAAU,UAAU,MAAQ,SAAS5E,EAAK,CACxC,OAAOA,EAAI,UAAU,CACvB,EACA4E,EAAU,UAAU,MAAQ,SAAS5E,EAAK,CACxCA,EAAI,UAAU,CAChB,EACA4E,EAAU,UAAU,OAAS,SAAS5E,EAAK2B,EAAK,CAC1C,OAAOA,GAAO,UAChBoH,EAAkBpH,EAAK,IAAI,EAE7B3B,EAAI,WAAW2B,CAAG,CACpB,EACAiD,EAAU,UAAU,OAAS,SAASoE,EAAMC,EAAM,CAChD,OAAOD,EAAK,WAAWC,CAAI,CAC7B,EACArE,EAAU,UAAU,QAAU,SAAS8C,EAAU3G,EAAM,CACrD,OAAQA,EAAK,SAAU,CACrB,IAAK,QACL,IAAK,MACH2G,EAAS,MAAQ3G,EAAK,MACtB,MACF,IAAK,gBACL,IAAK,OACH2G,EAAS,MAAQ,SAAS1H,EAAK,CAC7B,OAAOA,EAAI,SAAS,CACtB,CACJ,CACF,EACA4E,EAAU,UAAU,SAAW,QAC/B,SAASJ,GAAa,CACpBqE,EAAc,KAAK,IAAI,CACzB,CACAjI,EAAK,SAAS4D,EAAYqE,CAAa,EACvCrE,EAAW,UAAU,OAAS,SAAS7C,EAAKwG,EAAOE,EAAM,CACvD,IAAIjJ,EAAK,OAAOuC,GAAO,SACvB,MAAI,CAACvC,GAAMiJ,GACTA,EAAK1G,EAAK,IAAI,EAETvC,CACT,EACAoF,EAAW,UAAU,MAAQ,SAASxE,EAAK,CACzC,OAAOA,EAAI,WAAW,CACxB,EACAwE,EAAW,UAAU,MAAQ,SAASxE,EAAK,CACzCA,EAAI,WAAW,CACjB,EACAwE,EAAW,UAAU,OAAS,SAASxE,EAAK2B,EAAK,CAC3C,OAAOA,GAAO,UAChBoH,EAAkBpH,EAAK,IAAI,EAE7B3B,EAAI,YAAY2B,CAAG,CACrB,EACA6C,EAAW,UAAU,OAAS,SAASwE,EAAMC,EAAM,CACjD,OAAOD,EAAK,YAAYC,CAAI,CAC9B,EACAzE,EAAW,UAAU,QAAU,SAASkD,EAAU3G,EAAM,CACtD,OAAQA,EAAK,SAAU,CACrB,IAAK,SACL,IAAK,QACL,IAAK,MACH2G,EAAS,MAAQ3G,EAAK,MACtB,MACF,IAAK,gBACL,IAAK,OACH2G,EAAS,MAAQ,SAAS1H,EAAK,CAC7B,OAAOA,EAAI,SAAS,CACtB,CACJ,CACF,EACAwE,EAAW,UAAU,SAAW,SAChC,SAASS,GAAa,CACpB4D,EAAc,KAAK,IAAI,CACzB,CACAjI,EAAK,SAASqE,EAAY4D,CAAa,EACvC5D,EAAW,UAAU,OAAS,SAAStD,EAAKwG,EAAOE,EAAM,CACvD,IAAIjJ,EAAK,OAAOuC,GAAO,SACvB,MAAI,CAACvC,GAAMiJ,GACTA,EAAK1G,EAAK,IAAI,EAETvC,CACT,EACA6F,EAAW,UAAU,MAAQ,SAASjF,EAAK,CACzC,OAAOA,EAAI,WAAW,CACxB,EACAiF,EAAW,UAAU,MAAQ,SAASjF,EAAK,CACzCA,EAAI,WAAW,CACjB,EACAiF,EAAW,UAAU,OAAS,SAASjF,EAAK2B,EAAK,CAC3C,OAAOA,GAAO,UAChBoH,EAAkBpH,EAAK,IAAI,EAE7B3B,EAAI,YAAY2B,CAAG,CACrB,EACAsD,EAAW,UAAU,OAAS,SAAS+D,EAAMC,EAAM,CACjD,OAAOD,EAAK,YAAYC,CAAI,CAC9B,EACAhE,EAAW,UAAU,QAAU,SAASyC,EAAU3G,EAAM,CACtD,OAAQA,EAAK,SAAU,CACrB,IAAK,QACL,IAAK,SACH2G,EAAS,MAAQ,KAAK,KAC1B,CACF,EACAzC,EAAW,UAAU,SAAW,SAChC,SAASV,GAAY,CACnBsE,EAAc,KAAK,IAAI,CACzB,CACAjI,EAAK,SAAS2D,EAAWsE,CAAa,EACtCtE,EAAU,UAAU,OAAS,SAAS5C,EAAKwG,EAAOE,EAAM,CACtD,IAAIjJ,EAAK,OAAO,SAASuC,CAAG,EAC5B,MAAI,CAACvC,GAAMiJ,GACTA,EAAK1G,EAAK,IAAI,EAETvC,CACT,EACAmF,EAAU,UAAU,MAAQ,SAASvE,EAAK,CACxC,OAAOA,EAAI,UAAU,CACvB,EACAuE,EAAU,UAAU,MAAQ,SAASvE,EAAK,CACxCA,EAAI,UAAU,CAChB,EACAuE,EAAU,UAAU,OAAS,SAASvE,EAAK2B,EAAK,CACzC,OAAO,SAASA,CAAG,GACtBoH,EAAkBpH,EAAK,IAAI,EAE7B3B,EAAI,WAAW2B,CAAG,CACpB,EACA4C,EAAU,UAAU,OAAS,SAASyE,EAAMC,EAAM,CAChD,OAAOD,EAAK,WAAWC,CAAI,CAC7B,EACA1E,EAAU,UAAU,QAAUU,EAAW,UAAU,QACnDV,EAAU,UAAU,QAAU,OAAO,QACrCA,EAAU,UAAU,SAAW,QAC/B,SAASgF,EAAUhE,EAAQvE,EAAMwE,EAAO,CAEtC,GADAF,EAAK,KAAK,IAAI,EACV,CAAC,MAAM,QAAQC,CAAM,EACvB,MAAM,IAAI,MAAM/F,EAAG,6BAA8B+F,CAAM,CAAC,EAE1D,GAAI,CAACA,EAAO,OACV,MAAM,IAAI,MAAM,aAAa,EAE/B,KAAK,MAAQ,OAAO,OAAOA,EAAO,IAAI,SAASlH,EAAK,CAClD,OAAOiH,EAAK,UAAUjH,EAAK2C,EAAMwE,CAAK,CACxC,CAAC,CAAC,EACF,KAAK,eAAiB,CAAC,EACvB,KAAK,MAAM,QAAQ,SAASzE,EAAMjD,EAAG,CACnC,GAAI6C,EAAM,OAAOI,EAAM,OAAO,EAC5B,MAAM,IAAI,MAAM,kCAAkC,EAEpD,IAAIyI,EAASzI,EAAK,WAClB,GAAI,KAAK,eAAeyI,CAAM,IAAM,OAClC,MAAM,IAAI,MAAMhK,EAAG,kCAAmCgK,CAAM,CAAC,EAE/D,KAAK,eAAeA,CAAM,EAAI1L,CAChC,EAAG,IAAI,CACT,CACA8C,EAAK,SAAS2I,EAAWjE,CAAI,EAC7BiE,EAAU,UAAU,mBAAqB,UAAW,CAClD,MAAM,IAAI,MAAM,mCAAmC,CACrD,EACAA,EAAU,UAAU,MAAQ,SAASvJ,EAAK,CACxC,KAAK,MAAMA,EAAI,SAAS,CAAC,EAAE,MAAMA,CAAG,CACtC,EACAuJ,EAAU,UAAU,OAAS,SAASP,EAAMC,EAAM,CAChD,IAAIxL,EAAKuL,EAAK,SAAS,EACnBtL,EAAKuL,EAAK,SAAS,EACvB,OAAIxL,IAAOC,EACF,KAAK,MAAMD,CAAE,EAAE,OAAOuL,EAAMC,CAAI,EAEhCxL,EAAKC,EAAK,GAAK,CAE1B,EACA6L,EAAU,UAAU,OAAS,SAAShE,EAAQvE,EAAM,CAClD,OAAO,KAAK,MAAM,IAAI,SAASsG,EAAG,CAChC,OAAOA,EAAE,OAAOtG,CAAI,CACtB,CAAC,CACH,EACAuI,EAAU,UAAU,KAAO,SAASE,EAAY,CAC9C,IAAI5B,EAAQ,KAAK,eAAe4B,CAAU,EAC1C,GAAI5B,IAAU,OACZ,OAAO,KAAK,MAAMA,CAAK,CAE3B,EACA,SAAS5B,EAAmBV,EAAQvE,EAAM,CACxCuI,EAAU,KAAK,KAAMhE,EAAQvE,CAAI,EACjC,KAAK,iBAAmB,KACxB,KAAK,eAAiB,CAAC,EACvB,KAAK,MAAM,QAAQ,SAASD,EAAM8G,EAAO,CACvC,GAAIlH,EAAM,OAAOI,EAAM,WAAY,SAAS,EACrC,KAAK,mBACR,KAAK,iBAAmB,CAAC,GAE3B,KAAK,iBAAiB,KAAK,CAAE,MAAA8G,EAAO,KAAA9G,CAAK,CAAC,MACrC,CACL,IAAI+F,EAASC,GAAchG,CAAI,EAC/B,GAAI,KAAK,eAAe+F,CAAM,IAAM,OAClC,MAAM,IAAI,MAAMtH,EAAG,gCAAiC,IAAI,CAAC,EAE3D,KAAK,eAAesH,CAAM,EAAIe,CAChC,CACF,EAAG,IAAI,EACP,OAAO,OAAO,IAAI,CACpB,CACAjH,EAAK,SAASqF,EAAoBsD,CAAS,EAC3CtD,EAAmB,UAAU,UAAY,SAAStE,EAAK,CACrD,IAAIkG,EAAQ,KAAK,eAAe6B,GAAe/H,CAAG,CAAC,EACnD,OAAI,KAAK,mBACPkG,EAAQ,KAAK,gBAAgBlG,EAAKkG,CAAK,GAElCA,CACT,EACA5B,EAAmB,UAAU,gBAAkB,SAASxH,EAAKoJ,EAAO,CAClE,IAAI8B,EAAkB,KAAK,iBACvB,EAAG5L,EAAGyL,EACV,IAAK,EAAI,EAAGzL,EAAI4L,EAAgB,OAAQ,EAAI5L,EAAG,IAE7C,GADAyL,EAASG,EAAgB,CAAC,EACtBH,EAAO,KAAK,OAAO/K,CAAG,EACxB,GAAIoJ,IAAU,OACZA,EAAQ2B,EAAO,UAEf,OAAM,IAAI,MAAM,sBAAsB,EAI5C,OAAO3B,CACT,EACA5B,EAAmB,UAAU,OAAS,SAAStE,EAAKwG,EAAOE,EAAMzG,EAAM,CACrE,IAAIiG,EAAQ,KAAK,UAAUlG,CAAG,EAC1BvC,EAAKyI,IAAU,OACnB,OAAIzI,EACK,KAAK,MAAMyI,CAAK,EAAE,OAAOlG,EAAKwG,EAAOE,EAAMzG,CAAI,GAEpDyG,GACFA,EAAK1G,EAAK,IAAI,EAETvC,EACT,EACA6G,EAAmB,UAAU,MAAQ,SAASjG,EAAK,CACjD,IAAI6H,EAAQ7H,EAAI,SAAS,EACrByD,EAAa,KAAK,MAAMoE,CAAK,EACjC,GAAIpE,EACF,OAAOA,EAAW,MAAMzD,CAAG,EAE3B,MAAM,IAAI,MAAMR,EAAG,0BAA2BqI,CAAK,CAAC,CAExD,EACA5B,EAAmB,UAAU,OAAS,SAASjG,EAAK2B,EAAK,CACvD,IAAIkG,EAAQ,KAAK,UAAUlG,CAAG,EAC1BkG,IAAU,QACZkB,EAAkBpH,EAAK,IAAI,EAE7B3B,EAAI,UAAU6H,CAAK,EACflG,IAAQ,MACV,KAAK,MAAMkG,CAAK,EAAE,OAAO7H,EAAK2B,CAAG,CAErC,EACAsE,EAAmB,UAAU,QAAU,SAASyB,EAAU3G,EAAMC,EAAM,CACpE,IAAI,EAAGjD,EAAG6L,EACV,IAAK,EAAI,EAAG7L,EAAI,KAAK,MAAM,OAAQ,EAAIA,EAAG,IAAK,CAC7C,GAAI,CACF6L,EAAe,KAAK,MAAM,CAAC,EAAE,eAAe7I,EAAMC,CAAI,CACxD,MAAc,CACZ,QACF,CACA0G,EAAS,MAAQ,SAAS1H,EAAK,CAC7B,OAAO4J,EAAa,MAAM5J,CAAG,CAC/B,EACA,MACF,CACF,EACAiG,EAAmB,UAAU,WAAa,SAAStE,EAAK,CACtD,IAAIkG,EAAQ,KAAK,UAAUlG,CAAG,EAC9B,OAAOkG,IAAU,OAAS,OAAS,KAAK,MAAMA,CAAK,CACrD,EACA5B,EAAmB,UAAU,YAAc,SAAStE,EAAK,CACvD,OAAOA,CACT,EACAsE,EAAmB,UAAU,QAAU,SAASrI,EAAMC,EAAMmD,EAAM,CAChE,IAAI6I,EAAS,KAAK,UAAUjM,CAAI,EAC5BkM,EAAS,KAAK,UAAUjM,CAAI,EAChC,GAAIgM,IAAW,OACbd,EAAkBnL,EAAM,IAAI,UACnBkM,IAAW,OACpBf,EAAkBlL,EAAM,IAAI,MACvB,QAAIgM,IAAWC,EACb,KAAK,MAAMD,CAAM,EAAE,QAAQjM,EAAMC,EAAMmD,CAAI,EAE3CL,EAAM,QAAQkJ,EAAQC,CAAM,CAEvC,EACA7D,EAAmB,UAAU,SAAW,kBACxC,SAASD,EAAiBT,EAAQvE,EAAM,CACtCuI,EAAU,KAAK,KAAMhE,EAAQvE,CAAI,EACjC,OAAO,OAAO,IAAI,CACpB,CACAJ,EAAK,SAASoF,EAAkBuD,CAAS,EACzCvD,EAAiB,UAAU,OAAS,SAASrE,EAAKwG,EAAOE,EAAMzG,EAAM,CACnE,IAAIxC,EAAK,GACT,GAAIuC,IAAQ,KACVvC,EAAK,KAAK,eAAe,OAAY,eAC5B,OAAOuC,GAAO,SAAU,CACjC,IAAIwB,EAAO,OAAO,KAAKxB,CAAG,EAC1B,GAAIwB,EAAK,SAAW,EAAG,CACrB,IAAIvE,EAAOuE,EAAK,CAAC,EACb0E,EAAQ,KAAK,eAAejJ,CAAI,EACpC,GAAIiJ,IAAU,OACZ,OAAIQ,GACFzG,EAAK,KAAKhD,CAAI,EACdQ,EAAK,KAAK,MAAMyI,CAAK,EAAE,OAAOlG,EAAI/C,CAAI,EAAGuJ,EAAOE,EAAMzG,CAAI,EAC1DA,EAAK,IAAI,EACFxC,GAEA,KAAK,MAAMyI,CAAK,EAAE,OAAOlG,EAAI/C,CAAI,EAAGuJ,CAAK,CAGtD,CACF,CACA,MAAI,CAAC/I,GAAMiJ,GACTA,EAAK1G,EAAK,IAAI,EAETvC,CACT,EACA4G,EAAiB,UAAU,MAAQ,SAAShG,EAAK,CAC/C,IAAIe,EAAO,KAAK,MAAMf,EAAI,SAAS,CAAC,EACpC,GAAI,CAACe,EACH,MAAM,IAAI,MAAMvB,EAAG,qBAAqB,CAAC,EAE3C,IAAI0I,EAASnH,EAAK,mBAClB,OAAImH,IAAW,KACN,KAEA,IAAIA,EAAOnH,EAAK,MAAMf,CAAG,CAAC,CAErC,EACAgG,EAAiB,UAAU,OAAS,SAAShG,EAAK2B,EAAK,CACrD,IAAIkG,EAAO1E,EAAMvE,EACb+C,IAAQ,MACVkG,EAAQ,KAAK,eAAe,KACxBA,IAAU,QACZkB,EAAkBpH,EAAK,IAAI,EAE7B3B,EAAI,UAAU6H,CAAK,IAEnB1E,EAAO,OAAO,KAAKxB,CAAG,EAClBwB,EAAK,SAAW,IAClBvE,EAAOuE,EAAK,CAAC,EACb0E,EAAQ,KAAK,eAAejJ,CAAI,GAE9BiJ,IAAU,QACZkB,EAAkBpH,EAAK,IAAI,EAE7B3B,EAAI,UAAU6H,CAAK,EACnB,KAAK,MAAMA,CAAK,EAAE,OAAO7H,EAAK2B,EAAI/C,CAAI,CAAC,EAE3C,EACAoH,EAAiB,UAAU,QAAU,SAAS0B,EAAU3G,EAAMC,EAAM,CAClE,IAAI,EAAGjD,EAAG6L,EAAc1B,EACxB,IAAK,EAAI,EAAGnK,EAAI,KAAK,MAAM,OAAQ,EAAIA,EAAG,IAAK,CAC7C,GAAI,CACF6L,EAAe,KAAK,MAAM,CAAC,EAAE,eAAe7I,EAAMC,CAAI,CACxD,MAAc,CACZ,QACF,CACAkH,EAAS,KAAK,MAAM,CAAC,EAAE,mBACnBA,EACFR,EAAS,MAAQ,SAAS1H,EAAK,CAC7B,OAAO,IAAIkI,EAAO0B,EAAa,MAAM5J,CAAG,CAAC,CAC3C,EAEA0H,EAAS,MAAQ,UAAW,CAC1B,OAAO,IACT,EAEF,MACF,CACF,EACA1B,EAAiB,UAAU,WAAa,SAASrE,EAAK,CACpD,GAAI,OAAOA,GAAO,SAGlB,KAAI/C,EAAO+C,IAAQ,KAAO,OAAS,OAAO,KAAKA,CAAG,EAAE,CAAC,EACjDkG,EAAQ,KAAK,eAAejJ,CAAI,EACpC,OAAOiJ,IAAU,OAAS,OAAS,KAAK,MAAMA,CAAK,EACrD,EACA7B,EAAiB,UAAU,YAAc,SAASrE,EAAK,CACrD,OAAIA,IAAQ,KACH,KAEFA,EAAI,OAAO,KAAKA,CAAG,EAAE,CAAC,CAAC,CAChC,EACAqE,EAAiB,UAAU,QAAU,SAASpI,EAAMC,EAAMmD,EAAM,CAC9D,IAAI+I,EAAQnM,IAAS,KAAO,OAAS,OAAO,KAAKA,CAAI,EAAE,CAAC,EACpDoM,EAAQnM,IAAS,KAAO,OAAS,OAAO,KAAKA,CAAI,EAAE,CAAC,EACpDgK,EAAQ,KAAK,eAAekC,CAAK,EACrC,OAAIA,IAAUC,EACLD,IAAU,OAAS,EAAI,KAAK,MAAMlC,CAAK,EAAE,QAAQjK,EAAKmM,CAAK,EAAGlM,EAAKkM,CAAK,EAAG/I,CAAI,EAE/EL,EAAM,QAAQkH,EAAO,KAAK,eAAemC,CAAK,CAAC,CAE1D,EACAhE,EAAiB,UAAU,SAAW,gBACtC,SAASvB,EAASc,EAAQvE,EAAMwE,EAAO,CAErC,GADAF,EAAK,KAAK,KAAMC,EAAQvE,EAAMwE,CAAK,EAC/B,CAAC,MAAM,QAAQD,EAAO,OAAO,GAAK,CAACA,EAAO,QAAQ,OACpD,MAAM,IAAI,MAAM/F,EAAG,2BAA4B+F,EAAO,OAAO,CAAC,EAEhE,KAAK,QAAU,OAAO,OAAOA,EAAO,QAAQ,MAAM,CAAC,EACnD,KAAK,SAAW,CAAC,EACjB,KAAK,QAAQ,QAAQ,SAAS0E,EAAQnM,EAAG,CACvC,GAAI,CAAC0I,GAAYyD,CAAM,EACrB,MAAM,IAAI,MAAMzK,EAAG,wBAAyB,KAAMyK,CAAM,CAAC,EAE3D,GAAI,KAAK,SAASA,CAAM,IAAM,OAC5B,MAAM,IAAI,MAAMzK,EAAG,0BAA2B,KAAMyK,CAAM,CAAC,EAE7D,KAAK,SAASA,CAAM,EAAInM,CAC1B,EAAG,IAAI,EACP,KAAK,mBAAqB,KAAK,yBAAyB,EACxD,OAAO,OAAO,IAAI,CACpB,CACA8C,EAAK,SAAS6D,EAAUa,CAAI,EAC5Bb,EAAS,UAAU,OAAS,SAAS9C,EAAKwG,EAAOE,EAAM,CACrD,IAAIjJ,EAAK,KAAK,SAASuC,CAAG,IAAM,OAChC,MAAI,CAACvC,GAAMiJ,GACTA,EAAK1G,EAAK,IAAI,EAETvC,CACT,EACAqF,EAAS,UAAU,MAAQ,SAASzE,EAAK,CACvC,IAAI6H,EAAQ7H,EAAI,SAAS,EACrBiK,EAAS,KAAK,QAAQpC,CAAK,EAC/B,GAAIoC,IAAW,OACb,MAAM,IAAI,MAAMzK,EAAG,4BAA6B,KAAK,KAAMqI,CAAK,CAAC,EAEnE,OAAOoC,CACT,EACAxF,EAAS,UAAU,MAAQ,SAASzE,EAAK,CACvCA,EAAI,SAAS,CACf,EACAyE,EAAS,UAAU,OAAS,SAASzE,EAAK2B,EAAK,CAC7C,IAAIkG,EAAQ,KAAK,SAASlG,CAAG,EACzBkG,IAAU,QACZkB,EAAkBpH,EAAK,IAAI,EAE7B3B,EAAI,UAAU6H,CAAK,CACrB,EACApD,EAAS,UAAU,OAAS,SAASuE,EAAMC,EAAM,CAC/C,OAAOD,EAAK,UAAUC,CAAI,CAC5B,EACAxE,EAAS,UAAU,QAAU,SAAS7G,EAAMC,EAAM,CAChD,OAAO8C,EAAM,QAAQ,KAAK,SAAS/C,CAAI,EAAG,KAAK,SAASC,CAAI,CAAC,CAC/D,EACA4G,EAAS,UAAU,QAAU,SAASiD,EAAU3G,EAAM,CACpD,IAAImJ,EAAU,KAAK,QACfnJ,EAAK,WAAa,SAAW,CAACA,EAAK,MAAQ,CAACoJ,GAAW,IAAI,EAAE,QAAQpJ,EAAK,IAAI,IAAMA,EAAK,QAAQ,MAAM,SAASxD,EAAG,CACrH,MAAO,CAAC2M,EAAQ,QAAQ3M,CAAC,CAC3B,CAAC,IACCmK,EAAS,QAAU3G,EAAK,QACxB2G,EAAS,MAAQ3G,EAAK,MAE1B,EACA0D,EAAS,UAAU,OAAS,SAASc,EAAQ,CAC3CA,EAAO,QAAU,KAAK,OACxB,EACAd,EAAS,UAAU,SAAW,OAC9B,SAASE,EAAUY,EAAQvE,EAAMwE,EAAO,CAEtC,GADAF,EAAK,KAAK,KAAMC,EAAQvE,EAAMwE,CAAK,EAC/BD,EAAO,QAAUA,EAAO,KAAO,IAAMA,EAAO,KAAO,EACrD,MAAM,IAAI,MAAM/F,EAAG,kBAAmB,KAAK,UAAU,CAAC,EAExD,KAAK,KAAO+F,EAAO,KAAO,EAC1B,KAAK,mBAAqB,KAAK,yBAAyB,EACxD,OAAO,OAAO,IAAI,CACpB,CACA3E,EAAK,SAAS+D,EAAWW,CAAI,EAC7BX,EAAU,UAAU,OAAS,SAAShD,EAAKwG,EAAOE,EAAM,CACtD,IAAIjJ,EAAK,OAAO,SAASuC,CAAG,GAAKA,EAAI,SAAW,KAAK,KACrD,MAAI,CAACvC,GAAMiJ,GACTA,EAAK1G,EAAK,IAAI,EAETvC,CACT,EACAuF,EAAU,UAAU,MAAQ,SAAS3E,EAAK,CACxC,OAAOA,EAAI,UAAU,KAAK,IAAI,CAChC,EACA2E,EAAU,UAAU,MAAQ,SAAS3E,EAAK,CACxCA,EAAI,UAAU,KAAK,IAAI,CACzB,EACA2E,EAAU,UAAU,OAAS,SAAS3E,EAAK2B,EAAK,EAC1C,CAAC,OAAO,SAASA,CAAG,GAAKA,EAAI,SAAW,KAAK,OAC/CoH,EAAkBpH,EAAK,IAAI,EAE7B3B,EAAI,WAAW2B,EAAK,KAAK,IAAI,CAC/B,EACAgD,EAAU,UAAU,OAAS,SAASqE,EAAMC,EAAM,CAChD,OAAOD,EAAK,WAAWC,EAAM,KAAK,IAAI,CACxC,EACAtE,EAAU,UAAU,QAAU,OAAO,QACrCA,EAAU,UAAU,QAAU,SAAS+C,EAAU3G,EAAM,CACjDA,EAAK,WAAa,SAAW,KAAK,OAASA,EAAK,OAAS,CAACA,EAAK,MAAQ,CAACoJ,GAAW,IAAI,EAAE,QAAQpJ,EAAK,IAAI,KAC5G2G,EAAS,KAAO,KAAK,KACrBA,EAAS,MAAQ,KAAK,MAE1B,EACA/C,EAAU,UAAU,OAAS,SAASY,EAAQ,CAC5CA,EAAO,KAAO,KAAK,IACrB,EACAZ,EAAU,UAAU,SAAW,QAC/B,SAASI,GAAQQ,EAAQvE,EAAMwE,EAAO,CAEpC,GADAF,EAAK,KAAK,IAAI,EACV,CAACC,EAAO,OACV,MAAM,IAAI,MAAM/F,EAAG,yBAA0B+F,CAAM,CAAC,EAEtDC,EAAQA,GAASK,GAAM,WAAW7E,CAAI,EACtC,KAAK,WAAasE,EAAK,UAAUC,EAAO,OAAQvE,EAAMwE,EAAM,MAAM,GAAG,CAAC,EACtE,KAAK,mBAAqB,KAAK,yBAAyB,EACxD,OAAO,OAAO,IAAI,CACpB,CACA5E,EAAK,SAASmE,GAASO,CAAI,EAC3BP,GAAQ,UAAU,OAAS,SAASpD,EAAKwG,EAAOE,EAAMzG,EAAM,CAC1D,GAAI,CAACD,GAAO,OAAOA,GAAO,UAAY,MAAM,QAAQA,CAAG,EACrD,OAAI0G,GACFA,EAAK1G,EAAK,IAAI,EAET,GAET,IAAIwB,EAAO,OAAO,KAAKxB,CAAG,EACtBvC,EAAK,GACLtB,EAAGC,EAAGwC,EAAIpE,EACd,GAAIkM,EAAM,CAGR,IAFA9H,EAAKqB,EAAK,OACVA,EAAK,KAAK,EAAE,EACP9D,EAAI,EAAGC,EAAIoF,EAAK,OAAQrF,EAAIC,EAAGD,IAClC3B,EAAMyF,EAAKrB,CAAE,EAAI4C,EAAKrF,CAAC,EAClB,KAAK,WAAW,OAAO6D,EAAIxF,CAAG,EAAGgM,EAAOE,EAAMzG,CAAI,IACrDxC,EAAK,IAGTwC,EAAK,IAAI,CACX,KACE,KAAK9D,EAAI,EAAGC,EAAIoF,EAAK,OAAQrF,EAAIC,EAAGD,IAClC,GAAI,CAAC,KAAK,WAAW,OAAO6D,EAAIwB,EAAKrF,CAAC,CAAC,EAAGqK,CAAK,EAC7C,MAAO,GAIb,OAAO/I,CACT,EACA2F,GAAQ,UAAU,MAAQ,SAAS/E,EAAK,CAItC,QAHIoK,EAAU,KAAK,WACfzI,EAAM,CAAC,EACPtC,EACGA,EAAIgL,GAAcrK,CAAG,GAC1B,KAAOX,KAAK,CACV,IAAIlD,EAAM6D,EAAI,WAAW,EACzB2B,EAAIxF,CAAG,EAAIiO,EAAQ,MAAMpK,CAAG,CAC9B,CAEF,OAAO2B,CACT,EACAoD,GAAQ,UAAU,MAAQ,SAAS/E,EAAK,CAGtC,QAFIoK,EAAU,KAAK,WACfrL,EAAKM,EACFA,EAAIW,EAAI,SAAS,GACtB,GAAIX,EAAI,EACNN,EAAMiB,EAAI,SAAS,EACnBA,EAAI,KAAOjB,MAEX,MAAOM,KACLW,EAAI,WAAW,EACfoK,EAAQ,MAAMpK,CAAG,CAIzB,EACA+E,GAAQ,UAAU,OAAS,SAAS/E,EAAK2B,EAAK,EACxC,CAACA,GAAO,OAAOA,GAAO,UAAY,MAAM,QAAQA,CAAG,IACrDoH,EAAkBpH,EAAK,IAAI,EAE7B,IAAIyI,EAAU,KAAK,WACfjH,EAAO,OAAO,KAAKxB,CAAG,EACtBtC,EAAI8D,EAAK,OACTrF,EAAG3B,EACP,GAAIkD,EAEF,IADAW,EAAI,UAAUX,CAAC,EACVvB,EAAI,EAAGA,EAAIuB,EAAGvB,IACjB3B,EAAMgH,EAAKrF,CAAC,EACZkC,EAAI,YAAY7D,CAAG,EACnBiO,EAAQ,OAAOpK,EAAK2B,EAAIxF,CAAG,CAAC,EAGhC6D,EAAI,UAAU,CAAC,CACjB,EACA+E,GAAQ,UAAU,OAAS,UAAW,CACpC,MAAM,IAAI,MAAM,yBAAyB,CAC3C,EACAA,GAAQ,UAAU,QAAU,SAASuF,EAAKvJ,EAAMC,EAAM,CAChDD,EAAK,WAAa,QACpBuJ,EAAI,WAAa,KAAK,WAAW,eAAevJ,EAAK,WAAYC,CAAI,EACrEsJ,EAAI,MAAQ,KAAK,MAErB,EACAvF,GAAQ,UAAU,QAAU,SAASnH,EAAMC,EAAMmD,EAAM,CACrD,GAAI,CAACA,GAAQ,CAACA,EAAK,UACjB,OAAO,KAAK,OAAO,EAErB,IAAIhD,EAAQ,OAAO,KAAKJ,CAAI,EAAE,KAAK,EAC/BK,EAAQ,OAAO,KAAKJ,CAAI,EAAE,KAAK,EAC/BJ,EAAKO,EAAM,OACXN,EAAKO,EAAM,OACXH,EAAGC,EAAGuB,EAAIiL,EACd,IAAKzM,EAAI,EAAGC,EAAI,KAAK,IAAIN,EAAIC,CAAE,EAAGI,EAAIC,EAAGD,IAKvC,GAJAwB,EAAKtB,EAAMF,CAAC,GACRyM,EAAK5J,EAAM,QAAQrB,EAAIrB,EAAMH,CAAC,CAAC,KAG/ByM,EAAK,KAAK,WAAW,QAAQ3M,EAAK0B,CAAE,EAAGzB,EAAKyB,CAAE,EAAG0B,CAAI,GACvD,OAAOuJ,EAGX,OAAO5J,EAAM,QAAQlD,EAAIC,CAAE,CAC7B,EACAqH,GAAQ,UAAU,SAAW,MAC7BA,GAAQ,UAAU,OAAS,SAASQ,EAAQvE,EAAM,CAChDuE,EAAO,OAAS,KAAK,WAAW,OAAOvE,CAAI,CAC7C,EACA,SAASqD,EAAUkB,EAAQvE,EAAMwE,EAAO,CAEtC,GADAF,EAAK,KAAK,IAAI,EACV,CAACC,EAAO,MACV,MAAM,IAAI,MAAM/F,EAAG,0BAA2B+F,CAAM,CAAC,EAEvDC,EAAQA,GAASK,GAAM,WAAW7E,CAAI,EACtC,KAAK,UAAYsE,EAAK,UAAUC,EAAO,MAAOvE,EAAMwE,EAAM,MAAM,GAAG,CAAC,EACpE,KAAK,mBAAqB,KAAK,yBAAyB,EACxD,OAAO,OAAO,IAAI,CACpB,CACA5E,EAAK,SAASyD,EAAWiB,CAAI,EAC7BjB,EAAU,UAAU,OAAS,SAAS1C,EAAKwG,EAAOE,EAAMzG,EAAM,CAC5D,GAAI,CAAC,MAAM,QAAQD,CAAG,EACpB,OAAI0G,GACFA,EAAK1G,EAAK,IAAI,EAET,GAET,IAAIvC,EAAK,GACLtB,EAAGC,EAAGwC,EACV,GAAI8H,EAAM,CAGR,IAFA9H,EAAKqB,EAAK,OACVA,EAAK,KAAK,EAAE,EACP9D,EAAI,EAAGC,EAAI4D,EAAI,OAAQ7D,EAAIC,EAAGD,IACjC8D,EAAKrB,CAAE,EAAI,GAAKzC,EACX,KAAK,UAAU,OAAO6D,EAAI7D,CAAC,EAAGqK,EAAOE,EAAMzG,CAAI,IAClDxC,EAAK,IAGTwC,EAAK,IAAI,CACX,KACE,KAAK9D,EAAI,EAAGC,EAAI4D,EAAI,OAAQ7D,EAAIC,EAAGD,IACjC,GAAI,CAAC,KAAK,UAAU,OAAO6D,EAAI7D,CAAC,EAAGqK,CAAK,EACtC,MAAO,GAIb,OAAO/I,CACT,EACAiF,EAAU,UAAU,MAAQ,SAASrE,EAAK,CAIxC,QAHIwK,EAAQ,KAAK,UACb7I,EAAM,CAAC,EACPtC,EACGA,EAAIW,EAAI,SAAS,GAKtB,IAJIX,EAAI,IACNA,EAAI,CAACA,EACLW,EAAI,SAAS,GAERX,KACLsC,EAAI,KAAK6I,EAAM,MAAMxK,CAAG,CAAC,EAG7B,OAAO2B,CACT,EACA0C,EAAU,UAAU,MAAQ,SAASrE,EAAK,CAExC,QADIjB,EAAKM,EACFA,EAAIW,EAAI,SAAS,GACtB,GAAIX,EAAI,EACNN,EAAMiB,EAAI,SAAS,EACnBA,EAAI,KAAOjB,MAEX,MAAOM,KACL,KAAK,UAAU,MAAMW,CAAG,CAIhC,EACAqE,EAAU,UAAU,OAAS,SAASrE,EAAK2B,EAAK,CACzC,MAAM,QAAQA,CAAG,GACpBoH,EAAkBpH,EAAK,IAAI,EAE7B,IAAItC,EAAIsC,EAAI,OACR,EACJ,GAAItC,EAEF,IADAW,EAAI,UAAUX,CAAC,EACV,EAAI,EAAG,EAAIA,EAAG,IACjB,KAAK,UAAU,OAAOW,EAAK2B,EAAI,CAAC,CAAC,EAGrC3B,EAAI,UAAU,CAAC,CACjB,EACAqE,EAAU,UAAU,OAAS,SAAS2E,EAAMC,EAAM,CAIhD,QAHIxL,EAAKuL,EAAK,SAAS,EACnBtL,EAAKuL,EAAK,SAAS,EACnBsB,EACG9M,GAAMC,GAAI,CAEf,GADA6M,EAAK,KAAK,UAAU,OAAOvB,EAAMC,CAAI,EACjCsB,EACF,OAAOA,EAEJ,EAAE9M,IACLA,EAAK4M,GAAcrB,CAAI,GAEpB,EAAEtL,IACLA,EAAK2M,GAAcpB,CAAI,EAE3B,CACA,OAAOtI,EAAM,QAAQlD,EAAIC,CAAE,CAC7B,EACA2G,EAAU,UAAU,QAAU,SAASqD,EAAU3G,EAAMC,EAAM,CACvDD,EAAK,WAAa,UACpB2G,EAAS,UAAY,KAAK,UAAU,eAAe3G,EAAK,UAAWC,CAAI,EACvE0G,EAAS,MAAQ,KAAK,MAE1B,EACArD,EAAU,UAAU,OAAS,SAASkB,EAAQvE,EAAM,CAClDuE,EAAO,MAAQ,KAAK,UAAU,OAAOvE,CAAI,CAC3C,EACAqD,EAAU,UAAU,QAAU,SAASzG,EAAMC,EAAMmD,EAAM,CACvD,IAAIvD,EAAKG,EAAK,OACVF,EAAKG,EAAK,OACVC,EAAGC,EAAGwM,EACV,IAAKzM,EAAI,EAAGC,EAAI,KAAK,IAAIN,EAAIC,CAAE,EAAGI,EAAIC,EAAGD,IACvC,GAAIyM,EAAK,KAAK,UAAU,QAAQ3M,EAAKE,CAAC,EAAGD,EAAKC,CAAC,EAAGkD,CAAI,EACpD,OAAOuJ,EAGX,OAAO5J,EAAM,QAAQlD,EAAIC,CAAE,CAC7B,EACA2G,EAAU,UAAU,SAAW,QAC/B,SAASK,EAAWa,EAAQvE,EAAMwE,EAAO,CAGvC,GAFAxE,EAAOA,GAAQ,CAAC,EAChBwE,EAAQA,EAAQA,EAAM,MAAM,EAAIK,GAAM,WAAW7E,CAAI,EACjDuE,EAAO,YAAc,OACvBC,EAAM,UAAYD,EAAO,kBAChBA,EAAO,KAAM,CACtB,IAAIkF,EAAQ,gBAAgB,KAAKlF,EAAO,IAAI,EACxCkF,IACFjF,EAAM,UAAYiF,EAAM,CAAC,EAE7B,CAEA,GADAnF,EAAK,KAAK,KAAMC,EAAQvE,EAAMwE,CAAK,EAC/B,CAAC,MAAM,QAAQD,EAAO,MAAM,EAC9B,MAAM,IAAI,MAAM/F,EAAG,8BAA+B+F,EAAO,MAAM,CAAC,EAElE,GAAI5E,EAAM,cAAc4E,EAAO,OAAQ,SAASgF,EAAI,CAClD,OAAOA,EAAG,IACZ,CAAC,EACC,MAAM,IAAI,MAAM/K,EAAG,2BAA4B+F,EAAO,MAAM,CAAC,EAE/D,KAAK,cAAgB,CAAC,EACtB,KAAK,OAAS,OAAO,OAAOA,EAAO,OAAO,IAAI,SAASgF,EAAI,CACzD,IAAI9H,EAAQ,IAAIiI,GAAMH,EAAIvJ,EAAMwE,CAAK,EACrC,YAAK,cAAc/C,EAAM,IAAI,EAAIA,EAC1BA,CACT,EAAG,IAAI,CAAC,EACR,KAAK,UAAYzB,EAAK,mBACtB,KAAK,SAAWuE,EAAO,OAAS,QAChC,KAAK,mBAAqB,KAAK,yBAAyB,EACxD,KAAK,kBAAoB,KAAK,mBAC5BvE,EAAK,iBACLA,EAAK,iBACP,EACA,KAAK,MAAQ,KAAK,cAAc,EAChC,KAAK,MAAQ,KAAK,eAAe,EACjC,KAAK,OAAS,KAAK,cAAc,EACjC,KAAK,OAAS,KAAK,eAAe,EAClC,OAAO,OAAO,IAAI,CACpB,CACAJ,EAAK,SAAS8D,EAAYY,CAAI,EAC9BZ,EAAW,UAAU,oBAAsB,UAAW,CACpD,OAAO,KAAK,KAAO/D,EAAM,WAAWA,EAAM,cAAc,KAAK,IAAI,CAAC,EAAI,KAAK,SAAW,SAAW,SACnG,EACA+D,EAAW,UAAU,mBAAqB,SAASiG,EAAYC,EAAa,CAC1E,IAAIC,EAAY,CAAC,EACbC,EAAY,CAAC,EACbC,EAAK,CAAC,EACNC,EAAY,GACZlN,EAAGC,EAAG0E,EAAO7D,EAAMqM,EAAcC,EAAYC,EACjD,IAAKrN,EAAI,EAAGC,EAAI,KAAK,OAAO,OAAQD,EAAIC,EAAGD,IACzC2E,EAAQ,KAAK,OAAO3E,CAAC,EACrBmN,EAAexI,EAAM,aACrByI,EAAaD,EAAa,IAAM,OAChCrM,EAAO6D,EAAM,KACTkI,GAAc,KAAK,UAAY/L,IAAS,SAAW+B,EAAM,OAAO8B,EAAM,KAAM,QAAQ,GAAK,CAACyI,IAC5FC,EAAa1I,GAEfqI,EAAU,KAAK,IAAMhN,CAAC,EACtBkN,GAAa,KACRE,GAGHF,GAAa,QAAUlN,EAAI,qBAC3BkN,GAAa,QAAUpM,EAAO,OAASmM,EAAG,OAAS,OACnDC,GAAa,iBAAmBpM,EAAO,OAASd,EAAI;AAAA,EACpD+M,EAAU,KAAK,IAAME,EAAG,MAAM,EAC9BA,EAAG,KAAKE,CAAY,GANpBD,GAAa,QAAUpM,EAAO,OAASd,EAAI;AAAA,EAS3CqN,IACFH,GAAa,qCACT,OAAO,MAAM,mBAAqB,WACpCA,GAAa,mDAEbA,GAAa,8BAEfA,GAAa;AAAA,GAEf,IAAII,EAAY,mBAAqB,KAAK,oBAAoB,EAAI,IAClEA,GAAaN,EAAU,KAAK,EAAI;AAAA,EAAUE,EAAY,KACtD,IAAIjI,EAAS,IAAI,SAAS8H,EAAU,KAAK,EAAGO,CAAS,EAAE,MAAM,OAAQL,CAAE,EACvE,GAAIH,EACF,OAAO7H,EAET,IAAI4F,EAAO,KACX,OAAA5F,EAAO,KAAO4F,EACd5F,EAAO,WAAa,UAAW,CAC7B,OAAO4F,EAAK,aAAa,MAAMA,EAAM,SAAS,CAChD,EACA5F,EAAO,WAAa,UAAW,CAC7B,OAAO4F,EAAK,WAAW,MAAMA,EAAM,SAAS,CAC9C,EACI,KAAK,WACP/H,EAAK,SAASmC,EAAQ,KAAK,EAC3BA,EAAO,UAAU,KAAO4F,EAAK,MAE/B,OAAO,eAAe5F,EAAO,UAAW,QAAS,CAC/C,IAAK,UAAW,CACd,OAAO9B,EACT,CACF,CAAC,EACD,OAAO,eAAe8B,EAAO,UAAW,UAAW,CACjD,IAAK,UAAW,CACd,OAAOvF,EACT,CACF,CAAC,EACD,OAAO,eAAeuF,EAAO,UAAW,aAAc,CACpD,IAAK,UAAW,CACd,OAAOsI,EACT,CACF,CAAC,EACD,OAAO,eAAetI,EAAO,UAAW,UAAW,CACjD,IAAK,UAAW,CACd,OAAOuI,CACT,CACF,CAAC,EACD,OAAO,eAAevI,EAAO,UAAW,WAAY,CAClD,IAAK,UAAW,CACd,OAAOwI,EACT,CACF,CAAC,EACD,OAAO,eAAexI,EAAO,UAAW,WAAY,CAClD,IAAK,UAAW,CACd,OAAOyI,EACT,CACF,CAAC,EACD,OAAO,eAAezI,EAAO,UAAW,WAAY,CAClD,IAAK,UAAW,CACd,OAAO2F,EACT,CACF,CAAC,EACD,OAAO,eAAe3F,EAAO,UAAW,OAAQ,CAC9C,IAAK,UAAW,CACd,OAAO0I,EACT,CACF,CAAC,EACM1I,EACP,SAAS9B,IAAQ,CACf,OAAO0H,EAAK,MAAM,IAAI,CACxB,CACA,SAASnL,GAAQmE,EAAKX,GAAM,CAC1B,OAAO2H,EAAK,QAAQ,KAAMhH,EAAKX,EAAI,CACrC,CACA,SAASqK,GAAWrK,EAAM,CACxB,OAAO2H,EAAK,WAAW,KAAM3H,CAAI,CACnC,CACA,SAASsK,EAAQtK,EAAM,CACrB,OAAO2H,EAAK,QAAQ,KAAM3H,CAAI,CAChC,CACA,SAASuK,IAAW,CAClB,OAAO5C,EAAK,aAAa,IAAI,CAC/B,CACA,SAAS6C,GAASxK,EAAM,CACtB,OAAO2H,EAAK,WAAW,KAAM3H,CAAI,CACnC,CACA,SAAS0H,IAAW,CAClB,IAAI3I,EACJ,OAAI4I,EAAK,UACP5I,EAAM4I,EAAK,oBAAoB,EAC3B,KAAK,OAAS,SAChB5I,GAAO,KAAO,KAAK,KAAO,KAExB,KAAK,UACPA,GAAO,KAAO,KAAK,UAGrBA,EAAM,IAAM4I,EAAK,oBAAoB,EAAI,IAEpC5I,CACT,CACA,SAAS0L,IAAO,CACd,OAAO9C,EAAK,KAAK,IAAI,CACvB,CACF,EACAjE,EAAW,UAAU,eAAiB,UAAW,CAC/C,IAAI1C,EAAQ,CAAC,EACToI,EAAU,CAAC,EACXxL,EAAO,KAAK,oBAAoB,EAChC6J,EAAO,wBAA0B7J,EAAO;AAAA,EAS5C,GARA6J,GAAQ;AAAA,EACRA,GAAQ;AAAA,EACRA,GAAQ;AAAA,EACRA,GAAQ;AAAA,EACRA,GAAQ;AAAA,EACRA,GAAQ;AAAA,EACRA,GAAQ;AAAA,EACRA,GAAQ;AAAA,EACJ,CAAC,KAAK,OAAO,OACfA,GAAQ;AAAA,MACH,CACL,IAAK3K,EAAI,EAAGC,EAAI,KAAK,OAAO,OAAQD,EAAIC,EAAGD,IACzC2E,EAAQ,KAAK,OAAO3E,CAAC,EACrBkE,EAAM,KAAK,IAAMlE,CAAC,EAClBsM,EAAQ,KAAK3H,EAAM,IAAI,EACnBA,EAAM,aAAa,IAAM,SAC3BgG,GAAQ,UAAY3K,EAAI,QAAU2E,EAAM,KAAO;AAAA,GAGnDgG,GAAQ;AAAA,EACRA,GAAQ;AAAA,EACRA,GAAQ;AAAA,EACRA,GAAQ;AAAA,EACR,IAAI3K,EAAGC,EAAG0E,EACV,IAAK3E,EAAI,EAAGC,EAAI,KAAK,OAAO,OAAQD,EAAIC,EAAGD,IACzC2E,EAAQ,KAAK,OAAO3E,CAAC,EACrB2K,GAAQ,eAAiBhG,EAAM,KAAO;AAAA,EACtCgG,GAAQ,YACJhG,EAAM,aAAa,IAAM,OAC3BgG,GAAQ,IAAM3K,EAAI,aAAe2E,EAAM,KAAO;AAAA,GAE9CgG,GAAQ,IAAM3K,EAAI,qBAClB2K,GAAQ,IAAM3K,EAAI,YAAcA,EAAI;AAAA,GAGxC2K,GAAQ;AAAA,EACRA,GAAQ;AAAA,EACRA,GAAQ;AAAA;AAAA,QACRA,GAAQ,KAAK,OAAO,IAAI,SAASiD,EAAQC,EAAI,CAC3C,OAAOD,EAAO,aAAa,IAAM,OAAS,IAAMC,EAAK,aAAeD,EAAO,KAAO,OAAS,KAAOC,EAAK,sBAAwBA,EAAK,YAAcA,EAAK,OACzJ,CAAC,EAAE,KAAK;AAAA,OAAa,EACrBlD,GAAQ;AAAA;AAAA;AAAA,CACV,CACA,OAAAA,GAAQ,KACD,IAAI,SAASzG,EAAM,KAAK,EAAGyG,CAAI,EAAE,MAAM,OAAQ2B,CAAO,CAC/D,EACA1F,EAAW,UAAU,cAAgB,UAAW,CAC9C,IAAI1C,EAAQ,CAAC,EACToI,EAAU,CAAC,KAAK,iBAAiB,EACjCtM,EAAGC,EACP,IAAKD,EAAI,EAAGC,EAAI,KAAK,OAAO,OAAQD,EAAIC,EAAGD,IACzCkE,EAAM,KAAK,IAAMlE,CAAC,EAClBsM,EAAQ,KAAK,KAAK,OAAOtM,CAAC,EAAE,IAAI,EAElC,IAAIc,EAAO,KAAK,oBAAoB,EAChC6J,EAAO,uBAAyB7J,EAAO;AAAA,IAC3C,OAAI,KAAK,WACP6J,GAAQ;AAAA,gBAAmC7J,EAAO,IAClD6J,GAAQzG,EAAM,IAAI,SAASzE,EAAG,CAC5B,OAAOA,EAAI,WACb,CAAC,EAAE,KAAK,IAAI,EACZkL,GAAQ;AAAA,IACRA,GAAQ;AAAA,EACRA,GAAQ;AAAA,IACRzG,EAAM,KAAK,GAAG,EACdoI,EAAQ,KAAK,KAAK,SAAS,IAE3B3B,GAAQ,cAAgB7J,EAAO,IAC/B6J,GAAQzG,EAAM,IAAI,SAASzE,EAAG,CAC5B,OAAOA,EAAI,WACb,CAAC,EAAE,KAAK,IAAI,EACZkL,GAAQ;AAAA,KAEVzG,EAAM,QAAQpD,CAAI,EACX,IAAI,SAASoD,EAAM,KAAK,EAAGyG,CAAI,EAAE,MAAM,OAAQ2B,CAAO,CAC/D,EACA1F,EAAW,UAAU,eAAiB,UAAW,CAC/C,IAAIlC,EAAO,CAAC,EACRiG,EAAO,uBAAyB,KAAK,oBAAoB,EAAI;AAAA,EAC7D2B,EAAU,CAAC,EACX,EAAGrM,EACP,IAAK,EAAI,EAAGA,EAAI,KAAK,OAAO,OAAQ,EAAIA,EAAG,IACzCyE,EAAK,KAAK,IAAM,CAAC,EACjB4H,EAAQ,KAAK,KAAK,OAAO,CAAC,EAAE,IAAI,EAChC3B,GAAQ,MAAQ,EAAI;AAAA,EAEtB,OAAAA,GAAQ,IACD,IAAI,SAASjG,EAAK,KAAK,EAAGiG,CAAI,EAAE,MAAM,OAAQ2B,CAAO,CAC9D,EACA1F,EAAW,UAAU,cAAgB,UAAW,CAC9C,IAAIlC,EAAO,CAAC,EACR5D,EAAO,KAAK,oBAAoB,EAChC6J,EAAO,wBAA0B7J,EAAO;AAAA,EACxCwL,EAAU,CAAC,EACXtM,EAAGC,EAAG0E,EAAOmJ,EACjB,IAAK9N,EAAI,EAAGC,EAAI,KAAK,OAAO,OAAQD,EAAIC,EAAGD,IACzC2E,EAAQ,KAAK,OAAO3E,CAAC,EACrB0E,EAAK,KAAK,IAAM1E,CAAC,EACjBsM,EAAQ,KAAK3H,EAAM,IAAI,EACvBgG,GAAQ,KACJhG,EAAM,aAAa,IAAM,OAC3BgG,GAAQ,IAAM3K,EAAI,gBAAkB2E,EAAM,KAAO;AAAA,GAEjDmJ,EAAQnJ,EAAM,KAAK,aAAaA,EAAM,aAAa,CAAC,EAAE,SAAS,QAAQ,EACvED,EAAK,KAAK,IAAM1E,CAAC,EACjBsM,EAAQ,KAAKwB,CAAK,EAClBnD,GAAQ,QAAU3K,EAAI,QAAU2E,EAAM,KAAO;AAAA,EAC7CgG,GAAQ,QAAU3K,EAAI;AAAA,EACtB2K,GAAQ,sBAAwB3K,EAAI,KAAO8N,EAAM,OAAS;AAAA,EAC1DnD,GAAQ;AAAA,OAAsB3K,EAAI,eAAiBA,EAAI;AAAA;AAAA,GAG3D,OAAA2K,GAAQ,IACD,IAAI,SAASjG,EAAK,KAAK,EAAGiG,CAAI,EAAE,MAAM,OAAQ2B,CAAO,CAC9D,EACA1F,EAAW,UAAU,QAAU,SAASgD,EAAU3G,EAAMC,EAAM,CAC5D,GAAID,EAAK,MAAQ,CAAC,CAACoJ,GAAW,IAAI,EAAE,QAAQpJ,EAAK,IAAI,EACnD,MAAM,IAAI,MAAMvB,EAAG,wBAAyBuB,EAAK,IAAI,CAAC,EAExD,IAAI8K,EAAU,KAAK,OACfC,EAAU/K,EAAK,OACfgL,EAAapL,EAAM,MAAMmL,EAAS,SAASvB,GAAI,CACjD,OAAOA,GAAG,IACZ,CAAC,EACGO,EAAY,CAAC,EACblD,EAAY,CAAC,EACb9J,EAAGyC,EAAIkC,EAAO7D,EAAMoD,EAAOgK,EAASC,EACxC,IAAKnO,EAAI,EAAGA,EAAI+N,EAAQ,OAAQ/N,IAAK,CAInC,IAHA2E,EAAQoJ,EAAQ/N,CAAC,EACjBkE,EAAQmI,GAAW1H,CAAK,EACxBuJ,EAAU,CAAC,EACNzL,EAAK,EAAGA,EAAKyB,EAAM,OAAQzB,IAC9B3B,EAAOoD,EAAMzB,CAAE,EACXwL,EAAWnN,CAAI,GACjBoN,EAAQ,KAAKpN,CAAI,EAGrB,GAAIoN,EAAQ,OAAS,EACnB,MAAM,IAAI,MACRxM,EAAG,oCAAqCuB,EAAK,KAAM0B,EAAM,KAAMuJ,CAAO,CACxE,EAEF,GAAKA,EAAQ,OAQXpN,EAAOoN,EAAQ,CAAC,EAChBC,EAAgB,CACd,SAAUxJ,EAAM,KAAK,eAAesJ,EAAWnN,CAAI,EAAE,KAAMoC,CAAI,EAC/D,KAAM,IAAMyB,EAAM,IAEpB,EACKmF,EAAUhJ,CAAI,EAGjBgJ,EAAUhJ,CAAI,EAAE,KAAKqN,CAAa,EAFlCrE,EAAUhJ,CAAI,EAAI,CAACqN,CAAa,EAIlCnB,EAAU,KAAKmB,EAAc,IAAI,MAnBd,CACnB,GAAIxJ,EAAM,aAAa,IAAM,OAC3B,MAAM,IAAI,MACRjD,EAAG,2CAA4CuB,EAAK,KAAM0B,EAAM,IAAI,CACtE,EAEFqI,EAAU,KAAK,WAAW,CAC5B,CAcF,CACA,IAAIoB,EAAY,GAEhB,IADApO,EAAIgO,EAAQ,OACLhO,GAAK8J,EAAUkE,EAAQ,EAAEhO,CAAC,EAAE,IAAI,IAAM,QAC3CoO,EAAYpO,EAEd,IAAIqO,GAAQ,KAAK,oBAAoB,EACjC3J,GAAO,CAAC2J,EAAK,EACb/B,GAAU,CAAC,KAAK,iBAAiB,EACjC3B,EAAO,yBAA2B0D,GAAQ;AAAA,EAC1CC,GAIJ,IAHI,KAAK,YACP3D,GAAQ;AAAA;AAAA,GAEL3K,EAAI,EAAGA,EAAIgO,EAAQ,OAAQhO,IAO9B,GANIA,IAAMoO,IACRzD,GAAQ;AAAA,GAEV2D,GAAS,CAACF,GAAapO,GAAKoO,EAAY,OAAS,KACjDzJ,EAAQ1B,EAAK,OAAOjD,CAAC,EACrBc,EAAO6D,EAAM,KACTmF,EAAUhJ,CAAI,IAAM,OACtB4D,GAAK,KAAK,IAAM1E,CAAC,EACjBsM,GAAQ,KAAK3H,EAAM,IAAI,EACvBgG,GAAQ2D,GAAS,IAAMtO,EAAI;AAAA,MACtB,CAKL,IAJAyC,EAAKqH,EAAUhJ,CAAI,EAAE,OACjB,KAAK,YACP6J,GAAQ2D,GAAS;AAAA,GAEZ7L,KACLiC,GAAK,KAAK,IAAM1E,EAAI,IAAMyC,CAAE,EAC5B0L,EAAgBrE,EAAUhJ,CAAI,EAAE2B,CAAE,EAClC6J,GAAQ,KAAK6B,EAAc,QAAQ,EACnCxD,GAAQ2D,GAAS,OAASH,EAAc,KAAO,MAC/CxD,GAAQ,IAAM3K,EAAI,IAAMyC,EAAK,MAAQA,EAAK,OAAS,QAAU;AAAA,EAE3D,KAAK,YACPkI,GAAQ2D,GAAS;AAAA,EAErB,CAEE,CAACF,IACHzD,GAAQ;AAAA,GAEVA,GAAQ,iBAAmB0D,GAAQ,IAAMrB,EAAU,KAAK,EAAI;AAAA,EACxD,KAAK,YACPrC,GAAQ;AAAA,EACR2B,GAAQ,KAAK,KAAK,SAAS,EAC3B5H,GAAK,KAAK,GAAG,GAEfiG,GAAQ;AAAA,IACRf,EAAS,MAAQ,IAAI,SAASlF,GAAK,KAAK,EAAGiG,CAAI,EAAE,MAAM,OAAQ2B,EAAO,CACxE,EACA1F,EAAW,UAAU,OAAS,SAASsE,EAAMC,EAAM,CACjD,IAAIoD,EAAS,KAAK,OACd,EAAGtO,EAAG0E,EAAO6J,EAAOvL,EACxB,IAAK,EAAI,EAAGhD,EAAIsO,EAAO,OAAQ,EAAItO,EAAG,IAIpC,GAHA0E,EAAQ4J,EAAO,CAAC,EAChBC,EAAQ7J,EAAM,OACd1B,EAAO0B,EAAM,KACT6J,GAEF,GADAA,GAASvL,EAAK,OAAOiI,EAAMC,CAAI,EAC3BqD,EACF,OAAOA,OAGTvL,EAAK,MAAMiI,CAAI,EACfjI,EAAK,MAAMkI,CAAI,EAGnB,MAAO,EACT,EACAvE,EAAW,UAAU,aAAe,SAASrG,EAAK,CAChD,IAAI8E,EAAO,OAAO,KAAK9E,CAAG,EACtBP,EAAGC,EACP,IAAKD,EAAI,EAAGC,EAAIoF,EAAK,OAAQrF,EAAIC,EAAGD,IAClC,GAAI,CAAC,KAAK,cAAcqF,EAAKrF,CAAC,CAAC,EAC7B,MAAO,GAGX,MAAO,EACT,EACA4G,EAAW,UAAU,OAAS,SAASa,EAAQvE,EAAM,CACnDuE,EAAO,OAAS,KAAK,OAAO,IAAI,SAAS9C,EAAO,CAC9C,IAAI8J,EAAY9J,EAAM,KAClB+J,EAAc,CAChB,KAAM/J,EAAM,KACZ,KAAM8J,EAAU,OAAOvL,CAAI,CAC7B,EACA,GAAIA,EAAK,YAAa,CAChByB,EAAM,gBAAkB,SAC1B+J,EAAY,QAAa/J,EAAM,eAEjC,IAAIgK,EAAahK,EAAM,MACnBgK,IAAe,cACjBD,EAAY,MAAQC,GAEtB,IAAIC,EAAejK,EAAM,QACrBiK,EAAa,SACfF,EAAY,QAAUE,GAExB,IAAIC,EAAWlK,EAAM,IACjBkK,IAAa,SACfH,EAAY,IAAMG,EAEtB,CACA,OAAOH,CACT,CAAC,CACH,EACA9H,EAAW,UAAU,QAAU,SAAS9G,EAAMC,EAAMmD,EAAM,CACxD,IAAIqL,EAAS,KAAK,OACdvO,EAAGC,EAAG0E,EAAO7D,EAAM0N,EAAOvL,EAC9B,IAAKjD,EAAI,EAAGC,EAAIsO,EAAO,OAAQvO,EAAIC,EAAGD,IAKpC,GAJA2E,EAAQ4J,EAAOvO,CAAC,EAChBc,EAAO6D,EAAM,KACb6J,EAAQ7J,EAAM,OACd1B,EAAO0B,EAAM,KACT6J,IACFA,GAASvL,EAAK,QAAQnD,EAAKgB,CAAI,EAAGf,EAAKe,CAAI,EAAGoC,CAAI,EAC9CsL,GACF,OAAOA,EAIb,MAAO,EACT,EACA5H,EAAW,UAAU,MAAQ,SAAS9F,EAAM,CAC1C,OAAO,KAAK,cAAcA,CAAI,CAChC,EACA,OAAO,eAAe8F,EAAW,UAAW,WAAY,CACtD,WAAY,GACZ,IAAK,UAAW,CACd,OAAO,KAAK,SAAW,QAAU,QACnC,CACF,CAAC,EACD,SAASkI,GAAYrH,EAAQvE,EAAMwE,EAAO,CACxC,KAAK,iBAAmBD,EAAO,YAC/BD,EAAK,KAAK,IAAI,EACdF,EAAe,KACf,GAAI,CACF,KAAK,gBAAkBE,EAAK,UAAUC,EAAQvE,EAAMwE,CAAK,CAC3D,QAAE,CACAJ,EAAe,KACf,IAAIrH,EAAIsH,EAAiB,OACrBtH,GAAKsH,EAAiBtH,EAAI,CAAC,EAAE,CAAC,IAAM,MACtCsH,EAAiB,IAAI,CAEzB,CACI1E,EAAM,OAAO,KAAK,eAAgB,OAAO,EAC3C,KAAK,mBAAqB,KAAK,eAAe,mBAE9C,KAAK,mBAAqB,KAAK,eAAe,yBAAyB,CAE3E,CACAC,EAAK,SAASgM,GAAatH,CAAI,EAC/B,OAAO,eAAesH,GAAY,UAAW,WAAY,CACvD,WAAY,GACZ,IAAK,UAAW,CACd,MAAO,WAAa,KAAK,gBAC3B,CACF,CAAC,EACD,OAAO,eAAeA,GAAY,UAAW,iBAAkB,CAC7D,WAAY,GACZ,IAAK,UAAW,CACd,GAAI,KAAK,gBACP,OAAO,KAAK,gBAEd,IAAI9O,EAAGC,EAAGI,EACV,IAAKL,EAAI,EAAGC,EAAIsH,EAAiB,OAAQvH,EAAIC,EAAGD,IAE9C,GADAK,EAAMkH,EAAiBvH,CAAC,EACpBK,EAAI,CAAC,IAAM,KACb,OAAOA,EAAI,CAAC,CAGlB,CACF,CAAC,EACDyO,GAAY,UAAU,MAAQ,SAAS5M,EAAK,CAC1C,OAAO,KAAK,WAAW,KAAK,eAAe,MAAMA,CAAG,CAAC,CACvD,EACA4M,GAAY,UAAU,OAAS,SAAS5M,EAAKvB,EAAK,CAChD,KAAK,eAAe,OAAOuB,EAAK,KAAK,SAASvB,CAAG,CAAC,CACpD,EACAmO,GAAY,UAAU,OAAS,SAASnO,EAAK0J,EAAOE,EAAMzG,EAAM,CAC9D,GAAI,CACF,IAAID,EAAM,KAAK,SAASlD,CAAG,CAC7B,MAAc,CACd,CACA,OAAIkD,IAAQ,QACN0G,GACFA,EAAK5J,EAAK,IAAI,EAET,IAEF,KAAK,eAAe,OAAOkD,EAAKwG,EAAOE,EAAMzG,CAAI,CAC1D,EACAgL,GAAY,UAAU,QAAU,SAASlF,EAAU3G,EAAMC,EAAM,CAC7D,IAAI6L,EAAM,KAAK,SAAS9L,EAAMC,CAAI,EAC9B8L,EAAKxC,EACL,MAAM,QAAQuC,CAAG,GACnBC,EAAMD,EAAI,CAAC,EACXvC,EAAMuC,EAAI,CAAC,IAEXC,EAAMD,EACNvC,EAAMvJ,GAEJ+L,IACFpF,EAAS,MAAQ,SAAS1H,EAAK,CAC7B,OAAO8M,EAAIxC,EAAI,MAAMtK,CAAG,CAAC,CAC3B,EAEJ,EACA4M,GAAY,UAAU,QAAU,SAASG,EAAMC,EAAMhM,EAAM,CACzD,IAAIpD,EAAO,KAAK,SAASmP,CAAI,EACzBlP,EAAO,KAAK,SAASmP,CAAI,EAC7B,OAAO,KAAK,eAAe,QAAQpP,EAAMC,EAAMmD,CAAI,CACrD,EACA4L,GAAY,UAAU,OAAS,SAASrH,EAAQvE,EAAM,CACpD,IAAID,EAAO,KAAK,eACZkM,EAAYlM,EAAK,OAAS,QAAUC,EAAK,QAAQD,EAAK,IAAI,EAC9D,OAAAwE,EAASxE,EAAK,OAAOC,CAAI,EACrB,CAACiM,GAAajM,EAAK,cACjB,OAAOuE,GAAU,WACnBA,EAAS,CAAE,KAAMA,CAAO,GAE1BA,EAAO,YAAc,KAAK,iBAC1B,KAAK,QAAQA,CAAM,GAEdA,CACT,EACAqH,GAAY,UAAU,MAAQ,SAAS5M,EAAK,CAC1C,KAAK,eAAe,MAAMA,CAAG,CAC/B,EACA4M,GAAY,UAAU,QAAU,UAAW,CAC3C,EACAA,GAAY,UAAU,WAAajM,EAAM,iBACzCiM,GAAY,UAAU,SAAWjM,EAAM,iBACvCiM,GAAY,UAAU,SAAWjM,EAAM,iBACvC,SAAS2I,GAAiBF,EAAU,CAClC,KAAK,kBAAoB,OACzBP,EAAc,KAAK,KAAM,EAAI,EAC7B,KAAK,UAAY,CAAC,CAACO,CACrB,CACAxI,EAAK,SAAS0I,GAAkBxE,CAAQ,EACxCwE,GAAiB,UAAU,SAAW,gBACtCA,GAAiB,UAAU,OAAS,SAAS3H,EAAKwG,EAAOE,EAAM,CAC7D,IAAIjJ,EAAK,KAAK,SAASuC,CAAG,EAC1B,MAAI,CAACvC,GAAMiJ,GACTA,EAAK1G,EAAK,IAAI,EAETvC,CACT,EACAkK,GAAiB,UAAU,MAAQ,SAAStJ,EAAK,CAC/C,IAAId,EAAKC,EAQT,GAPI,KAAK,WACPA,EAAMa,EAAI,IACVA,EAAI,SAAS,EACbd,EAAMc,EAAI,IAAI,MAAMb,EAAKa,EAAI,GAAG,GAEhCd,EAAMc,EAAI,gBAAgBA,CAAG,EAE3BA,EAAI,QAAQ,EACd,OAAO,KAAK,YAAYd,CAAG,CAE/B,EACAoK,GAAiB,UAAU,OAAS,SAAStJ,EAAK2B,EAAK,CAChD,KAAK,SAASA,CAAG,GACpBoH,EAAkBpH,EAAK,IAAI,EAE7B,IAAIzC,EAAM,KAAK,UAAUyC,CAAG,EACxB,KAAK,UACP3B,EAAI,WAAWd,CAAG,EAElBc,EAAI,cAAcd,CAAG,CAEzB,EACAoK,GAAiB,UAAU,OAAS,UAAW,CAC7C,MAAO,MACT,EACAA,GAAiB,UAAU,QAAU,SAAS5B,EAAU3G,EAAM,CAC5D,IAAI4H,EAAO,KACX,OAAQ5H,EAAK,SAAU,CACrB,IAAK,MACH2G,EAAS,MAAQ,SAAS1H,EAAK,CAC7B,OAAO2I,EAAK,UAAU5H,EAAK,MAAMf,CAAG,CAAC,CACvC,EACA,MACF,IAAK,gBACL,IAAK,OACH0H,EAAS,MAAQ,SAAS1H,EAAK,CAC7B,OAAO2I,EAAK,MAAM3I,CAAG,CACvB,CACJ,CACF,EACAsJ,GAAiB,UAAU,YAAc3I,EAAM,iBAC/C2I,GAAiB,UAAU,UAAY3I,EAAM,iBAC7C2I,GAAiB,UAAU,UAAY3I,EAAM,iBAC7C2I,GAAiB,UAAU,QAAU3I,EAAM,iBAC3C2I,GAAiB,UAAU,SAAW3I,EAAM,iBAC5C2I,GAAiB,UAAU,QAAU3I,EAAM,iBAC3C,SAAS+J,GAAMnF,EAAQvE,EAAMwE,EAAO,CAClC,IAAI5G,EAAO2G,EAAO,KAClB,GAAI,OAAO3G,GAAQ,UAAY,CAAC4H,GAAY5H,CAAI,EAC9C,MAAM,IAAI,MAAMY,EAAG,yBAA0BZ,CAAI,CAAC,EAEpD,KAAK,KAAOA,EACZ,KAAK,KAAO0G,EAAK,UAAUC,EAAO,KAAMvE,EAAMwE,EAAM,MAAM5G,CAAI,CAAC,EAC/D,KAAK,QAAU2G,EAAO,SAAW,CAAC,EAClC,KAAK,IAAMA,EAAO,MAAQ,OAAS,GAAKA,EAAO,IAAM,OACrD,KAAK,OAAS,SAAS+G,EAAO,CAC5B,OAAQA,EAAO,CACb,IAAK,YACH,MAAO,GACT,IAAK,aACH,MAAO,GACT,IAAK,SACH,MAAO,GACT,QACE,MAAM,IAAI,MAAM9M,EAAG,oBAAqB8M,CAAK,CAAC,CAClD,CACF,EAAE/G,EAAO,QAAU,OAAS,YAAcA,EAAO,KAAK,EACtD,KAAK,cAAgBA,EAAO,QAC5B,IAAIqG,EAAQ,KAAK,cACjB,GAAIA,IAAU,OAAQ,CACpB,IAAI7K,EAAO,KAAK,KAChB,GAAI,CACF,IAAIY,EAAMqC,EAAO,gBAAgB4H,EAAO7K,CAAI,CAC9C,OAASW,EAAK,CACZ,MAAM,IAAI,MAAMlC,EAAG,8BAA+BZ,EAAM8C,CAAG,CAAC,CAC9D,CACIiE,GAAY5E,EAAK,QAAQ,GAAKA,EAAK,WAAa,QAClD,KAAK,aAAe,UAAW,CAC7B,OAAOY,CACT,EAEA,KAAK,aAAe,UAAW,CAC7B,OAAOqC,EAAO,gBAAgB4H,EAAO7K,CAAI,CAC3C,CAEJ,CACA,OAAO,OAAO,IAAI,CACpB,CACA2J,GAAM,UAAU,aAAe,UAAW,CAC1C,EACA,OAAO,eAAeA,GAAM,UAAW,QAAS,CAC9C,WAAY,GACZ,IAAK,UAAW,CACd,MAAO,CAAC,aAAc,SAAU,WAAW,EAAE,KAAK,OAAS,CAAC,CAC9D,CACF,CAAC,EACD,SAAS/C,GAASuF,EAAYC,EAAY,CACxC,KAAK,YAAcD,EACnB,KAAK,YAAcC,EACnB,KAAK,MAAQ,KACb,KAAK,UAAY,KACjB,KAAK,KAAO,EACZ,KAAK,QAAU,KACf,KAAK,WAAa,IACpB,CACAxF,GAAS,UAAU,MAAQrC,EAAK,UAAU,MAC1C,SAASO,GAAMJ,EAAW7D,EAAM,CAC9B,KAAK,UAAY6D,EACjB,KAAK,KAAO7D,GAAQ,CAAC,CACvB,CACAiE,GAAM,WAAa,SAAS7E,EAAM,CAChC,OAAO,IAAI6E,GAAM7E,EAAOA,EAAK,UAAY,MAAM,CACjD,EACA6E,GAAM,UAAU,MAAQ,UAAW,CACjC,OAAO,IAAIA,GAAM,KAAK,UAAW,KAAK,IAAI,CAC5C,EACAA,GAAM,UAAU,MAAQ,SAASuH,EAAM,CACrC,OAAO,IAAIvH,GAAM,KAAK,UAAW,KAAK,KAAK,OAAO,GAAKuH,CAAI,CAAC,CAC9D,EACA,SAASpF,GAAUjH,EAAMf,EAAK0H,EAAU2F,EAAM,CAC5C,GAAI3F,EAAU,CACZ,GAAIA,EAAS,cAAgB3G,EAC3B,MAAM,IAAI,MAAM,kBAAkB,EAEpC,OAAO2G,EAAS,MAAM1H,EAAKqN,CAAI,CACjC,KACE,QAAOtM,EAAK,MAAMf,CAAG,CAEzB,CACA,SAASsN,GAAY1O,EAAM6G,EAAW,CAChC,CAAC7G,EAAK,QAAQ,GAAG,EACnBA,EAAOA,EAAK,QAAQ,MAAO,EAAE,EACpB6G,IACT7G,EAAO6G,EAAY,IAAM7G,GAE3BA,EAAK,MAAM,GAAG,EAAE,QAAQ,SAASkF,EAAM,CACrC,GAAI,CAAC0C,GAAY1C,CAAI,EACnB,MAAM,IAAI,MAAMtE,EAAG,mBAAoBZ,CAAI,CAAC,CAEhD,CAAC,EACD,IAAI2O,EAAO5M,EAAM,cAAc/B,CAAI,EACnC,OAAO+G,GAAY4H,CAAI,EAAIA,EAAO3O,CACpC,CACA,SAASuL,GAAW9L,EAAK,CACvB,IAAI2D,EAAQ,CAAC,EACT3D,EAAI,OACN2D,EAAM3D,EAAI,IAAI,EAAI,IAEpB,IAAImP,EAAUnP,EAAI,QACd,EAAGN,EACP,IAAK,EAAI,EAAGA,EAAIyP,EAAQ,OAAQ,EAAIzP,EAAG,IACrCiE,EAAMwL,EAAQ,CAAC,CAAC,EAAI,GAEtB,OAAO,OAAO,KAAKxL,CAAK,CAC1B,CACA,SAAS2D,GAAYjH,EAAU,CAC7B,IAAIqC,EAAOqD,EAAM1F,CAAQ,EACzB,OAAOqC,GAAQA,EAAK,qBAAqB8H,CAC3C,CACA,SAASP,GAAa5J,EAAU,CAC9B,GAAIA,IAAa,QACfA,EAAW,aACN,CACL,IAAI+L,EAAQ,iBAAiB,KAAK/L,CAAQ,EACtC+L,IACEA,EAAM,CAAC,IAAM,QACf/L,EAAW+L,EAAM,CAAC,EAAI,QAEtB/L,EAAW+L,EAAM,CAAC,EAGxB,CACA,OAAO9J,EAAM,WAAWjC,CAAQ,EAAI,MACtC,CACA,SAAS2L,GAAcrK,EAAK,CAC1B,IAAIX,EAAIW,EAAI,SAAS,EACrB,OAAIX,EAAI,IACNA,EAAI,CAACA,EACLW,EAAI,SAAS,GAERX,CACT,CACA,SAAS6J,GAAW7J,EAAG,CACrB,OAAOA,GAAK,mBAAqBA,GAAK,gBACxC,CACA,SAASmH,GAAYzG,EAAK,CACxB,OAAOmF,EAAa,KAAKnF,CAAG,CAC9B,CACA,SAASgJ,EAAkBpH,EAAKZ,EAAM,CACpC,MAAM,IAAI,MAAMvB,EAAG,iBAAkBuB,EAAK,OAAO,EAAGY,CAAG,CAAC,CAC1D,CACA,SAAS+D,GAAa9G,EAAM6O,EAAI,CAC9B,IAAIC,EAAc/M,EAAM,cAAc/B,CAAI,EAC1C,OAAO+G,GAAY+H,CAAW,EAAIA,EAAcJ,GAAY1O,EAAM6O,CAAE,CACtE,CACA,SAAS1G,GAAchG,EAAM,CAC3B,IAAIrC,EAAWqC,EAAK,SACpB,OAAQrC,EAAU,CAChB,IAAK,SACL,IAAK,QACL,IAAK,MACL,IAAK,OACH,MAAO,SACT,IAAK,QACL,IAAK,QACH,MAAO,SACT,IAAK,OACH,MAAO,SACT,IAAK,MACL,IAAK,QACL,IAAK,SACH,MAAO,SACT,QACE,OAAOA,CACX,CACF,CACA,SAASgL,GAAe/H,EAAK,CAC3B,GAAIA,IAAQ,KACV,MAAO,OAET,IAAImF,EAAS,OAAOnF,EACpB,GAAImF,IAAW,SAAU,CACvB,GAAI,MAAM,QAAQnF,CAAG,EACnB,MAAO,QACF,GAAI,OAAO,SAASA,CAAG,EAC5B,MAAO,QAEX,CACA,OAAOmF,CACT,CACA,SAAST,GAAYD,EAAO,CAC1B,IAAIa,EAAU,CAAC,EACXnJ,EAAGC,EAAG+I,EAAQ/F,EAClB,IAAKjD,EAAI,EAAGC,EAAIqI,EAAM,OAAQtI,EAAIC,EAAGD,IAEnC,GADAiD,EAAOqF,EAAMtI,CAAC,EACV,CAAC6C,EAAM,OAAOI,EAAM,SAAS,EAAG,CAElC,GADA+F,EAASC,GAAchG,CAAI,EACvBkG,EAAQH,CAAM,EAChB,MAAO,GAETG,EAAQH,CAAM,EAAI,EACpB,CAEF,MAAO,EACT,CACA,SAASK,GAAef,EAAO,CAC7B,IAAIuH,EAAY,CAAC,MAAO,OAAQ,QAAS,QAAQ,EAC7CC,EAAa,GACbC,EAAY,KACZ/P,EAAGC,EAAGgD,EAAM8G,EAChB,IAAK/J,EAAI,EAAGC,EAAIqI,EAAM,OAAQtI,EAAIC,EAAGD,IACnCiD,EAAOqF,EAAMtI,CAAC,EACd+J,EAAQ8F,EAAU,QAAQ5M,EAAK,QAAQ,EACnC8G,EAAQ+F,IACVA,EAAa/F,EACbgG,EAAY9M,GAGhB,OAAO8M,CACT,CACA,SAASzG,GAAehB,EAAOpF,EAAMwE,EAAO,CAC1C,IAAI0E,EAAU,CAAC,EACXpM,EAAGC,EAAGgD,EAAM+M,EAChB,IAAKhQ,EAAI,EAAGC,EAAIqI,EAAM,OAAQtI,EAAIC,EAAGD,IAAK,CAExC,GADAiD,EAAOqF,EAAMtI,CAAC,EACViD,EAAK,WAAa,SACpB,OAAOA,EAET+M,EAAc/M,EAAK,QACnB,IAAIR,EAAIb,EACR,IAAKa,EAAK,EAAGb,EAAKoO,EAAY,OAAQvN,EAAKb,EAAIa,IAC7C2J,EAAQ4D,EAAYvN,CAAE,CAAC,EAAI,EAE/B,CACA,OAAO+E,EAAK,UAAU,CACpB,KAAM,OACN,QAAS,OAAO,KAAK4E,CAAO,CAC9B,EAAGlJ,EAAMwE,CAAK,CAChB,CACA,SAAS6B,GAAejB,EAAOpF,EAAMwE,EAAO,CAC1C,IAAItI,EAAO,GACPY,EAAGC,EAAGgD,EACV,IAAKjD,EAAI,EAAGC,EAAIqI,EAAM,OAAQtI,EAAIC,EAAGD,IAAK,CAExC,GADAiD,EAAOqF,EAAMtI,CAAC,EACViD,EAAK,WAAa,QACpB,OAAOA,EAEL7D,IAAS,GACXA,EAAO6D,EAAK,KACHA,EAAK,OAAS7D,IACvBA,EAAO,GAEX,CACA,OAAOA,EAAO,EAAIoI,EAAK,UAAU,QAAStE,EAAMwE,CAAK,EAAIY,EAAM,CAAC,CAClE,CACA,SAASmB,GAAenB,EAAOpF,EAAMwE,EAAO,CAC1C,IAAIuI,EAAW,CAAC,EACZC,EAAa,CAAC,EACdC,EAAgB,CAAC,EACjBC,EAAgB,GAChBpQ,EAAGC,EAAGgD,EAAMsL,EAChB,IAAKvO,EAAI,EAAGC,EAAIqI,EAAM,OAAQtI,EAAIC,EAAGD,IAEnC,GADAiD,EAAOqF,EAAMtI,CAAC,EACViD,EAAK,WAAa,MACpBmN,EAAgB,GAChBH,EAAS,KAAKhN,EAAK,UAAU,MACxB,CACLsL,EAAStL,EAAK,OACd,IAAIR,EAAIb,EAAI+C,EAAO0L,EAAc7L,EAAWiK,GAC5C,IAAKhM,EAAK,EAAGb,EAAK2M,EAAO,OAAQ9L,EAAKb,EAAIa,IACxCkC,EAAQ4J,EAAO9L,CAAE,EACjB+B,EAAYG,EAAM,KAClB8J,GAAY9J,EAAM,KAClBsL,EAAS,KAAKxB,EAAS,EACnB2B,IACGF,EAAW1L,CAAS,IACvB0L,EAAW1L,CAAS,EAAI,CAAC,GAE3B0L,EAAW1L,CAAS,EAAE,KAAKiK,EAAS,EACpC4B,EAAe1L,EAAM,aAAa,EAC9B0L,IAAiB,SACnBF,EAAc3L,CAAS,EAAI6L,GAInC,CAEF,GAAID,EAAe,CACjB,IAAI7L,GAAa,OAAO,KAAK2L,CAAU,EACvC,IAAKlQ,EAAI,EAAGC,EAAIsE,GAAW,OAAQvE,EAAIC,EAAGD,IACxCwE,EAAYD,GAAWvE,CAAC,EACpBkQ,EAAW1L,CAAS,EAAE,OAAS8D,EAAM,QAAU6H,EAAc3L,CAAS,IAAM,SAC1EtB,GAAQA,EAAK,eACfkN,EAAgB,IAEhBF,EAAW1L,CAAS,EAAE,QACpBgD,EAAK,UAAU,OAAQtE,EAAMwE,EAAM,MAAMlD,CAAS,CAAC,CACrD,EACA2L,EAAc3L,CAAS,EAAI,MAInC,CACA,IAAIiD,GACJ,OAAI2I,EACF3I,GAAS,CACP,KAAM,SACN,OAAQlD,GAAW,IAAI,SAAS9E,EAAG,CACjC,IAAI6Q,GAAa5I,EAAM,MAAMjI,CAAC,EAC1B8Q,GAAa/I,EAAK,SAAS0I,EAAWzQ,CAAC,EAAGyD,EAAMoN,EAAU,EAC1DE,GAAgBL,EAAc1Q,CAAC,EACnC,GAAI+Q,KAAkB,QAAU,CAACD,GAAW,SAAS,QAAQ,OAAO,EAAG,CACrE,IAAIE,GAAaF,GAAW,MAAM,MAAM,EACpC1C,EAAIxL,GACR,IAAKwL,EAAK,EAAGxL,GAAKoO,GAAW,OAAQ5C,EAAKxL,IACpC,CAAAoO,GAAW5C,CAAE,EAAE,QAAQ2C,EAAa,EADI3C,IAC5C,CAIF,GAAIA,EAAK,EAAG,CACV,IAAIpI,GAAYgL,GAAW,CAAC,EAC5BA,GAAW,CAAC,EAAIA,GAAW5C,CAAE,EAC7B4C,GAAW5C,CAAE,EAAIpI,GACjB8K,GAAa/I,EAAK,UAAUiJ,GAAYvN,EAAMoN,EAAU,CAC1D,CACF,CACA,MAAO,CACL,KAAM7Q,EACN,KAAM8Q,GACN,QAAWJ,EAAc1Q,CAAC,CAC5B,CACF,CAAC,CACH,EAEAgI,GAAS,CACP,KAAM,MACN,OAAQD,EAAK,SAASyI,EAAU/M,EAAMwE,EAAM,MAAM,GAAG,CAAC,CACxD,EAEKF,EAAK,UAAUC,GAAQvE,EAAMwE,CAAK,CAC3C,CACA1I,EAAO,QAAU,CACf,aAAc,UAAW,CACvB,IAAIsJ,EAAQ,CACV,KAAAd,EACA,YAAAsH,GACA,mBAAA3G,EACA,iBAAAD,CACF,EACI2H,EAAY,OAAO,KAAKvJ,CAAK,EAC7BtG,EAAGC,EAAGW,EACV,IAAKZ,EAAI,EAAGC,EAAI4P,EAAU,OAAQ7P,EAAIC,EAAGD,IACvCY,EAAWiP,EAAU7P,CAAC,EACtBsI,EAAMkC,GAAa5J,CAAQ,CAAC,EAAI0F,EAAM1F,CAAQ,EAEhD,OAAO0H,CACT,EAAE,EACF,cAAAW,GACA,eAAA2C,GACA,YAAA/D,GACA,YAAAa,GACA,YAAA8G,EACF,CACF,CACF,CAAC,EAGGkB,GAAc9S,GAAW,CAC3B,wCAAwCmB,EAASC,EAAQ,CACvD,aACAA,EAAO,QAAUiH,GAAc,EAAE,YACnC,CACF,CAAC,EAGG0K,GAAI,mBACJC,GAAI,eACJC,GAAI,KACJC,GAAI,IACJC,GAAI,mBACJC,GAAI,2BACJC,GAAI,kBACJC,GAAI,mBACJC,GAAI,CAAC,cAAe,kBAAmB,eAAgB,UAAU,EACjEC,GAAI,uBACJC,GAAI,aACJC,GAAI,OACJC,GAAI,gBACJC,GAAI,eACJC,GAAI,iBACJC,GAAI,OACJC,GAAI,gBACJC,EAAI,yBACJC,GAAK,GAAGD,CAAC,yCACTE,GAAK,GAAGF,CAAC,6CACTG,GAAK,GAAGH,CAAC,sCACTI,GAAK,GAAGJ,CAAC,wCACTK,GAAI,GAAGL,CAAC,iCACRM,GAAI,GAAGN,CAAC,sCACRO,GAAI,GAAGP,CAAC,kCACRQ,GAAI,GAAGR,CAAC,8DACRS,GAAI,GAAGT,CAAC,kCACRU,GAAI,GAAGV,CAAC,0BACRW,GAAI,GAAGX,CAAC,qCACRY,GAAI,GAAGZ,CAAC,6BACRa,GAAI,OAAO,aAAe,KAAM,QAAO,aAAa,GAAG,WACvDC,GAAI,OAAO,aAAe,KAAM,QAAO,aAAa,GAAG,WAC3D,OAAOD,GAAI,KAAO,OAAOC,GAAI,KAAO,QAAQ,MAAM,iKAAiK,EACnN,IAAIC,GAAK,CAAE,SAAU,EAAK,EACtBC,GAAMC,GAAM,IAAIA,EAAE,WAAW,CAAC,EAAE,SAAS,EAAE,EAAE,YAAY,CAAC,GAC1DC,GAAKD,GAAM,mBAAmBA,CAAC,EAAE,QAAQ,WAAYD,EAAE,EACvDG,GAAKF,GAAMC,GAAED,CAAC,EAAE,QAAQ,OAAQ,GAAG,EACnCG,GAAI,KAAM,CACZ,YAAY,CAAE,YAAaC,EAAG,gBAAiBzJ,EAAG,SAAU0J,EAAG,WAAY3R,EAAG,OAAQ4R,EAAI,OAAQ,sBAAuBnT,EAAI,QAAS,oBAAqBoT,EAAI,OAAQ,OAAQC,EAAI,MAAO,EAAG,CAC3L,KAAK,cAAgB,IAAM,KAAK,WAAY,KAAK,cAAiB5T,GAAM,CACtE,KAAK,WAAaA,CACpB,EAAG,KAAK,UAAY,IAAM,KAAK,OAAQ,KAAK,UAAaA,GAAM,CAC7D,KAAK,OAASA,CAChB,EAAG,KAAK,YAAc,IAAM,KAAK,SAAU,KAAK,YAAeA,GAAM,CACnE,KAAK,SAAWA,CAClB,EAAG,KAAK,yBAA2B,IAAM,KAAK,sBAAuB,KAAK,yBAA4BA,GAAM,CAC1G,KAAK,sBAAwBA,CAC/B,EAAG,KAAK,aAAgBA,GAAM6T,GAAE7T,CAAC,EAAG,KAAK,SAAW,KAAO,CAAE,YAAa,KAAK,YAAa,gBAAiB,KAAK,gBAAiB,OAAQ,KAAK,OAAQ,OAAQ,KAAK,WAAY,SAAU,KAAK,SAAU,sBAAuB,KAAK,sBAAuB,oBAAqB,KAAK,oBAAqB,OAAQ,KAAK,MAAO,GAAI,KAAK,SAAYA,GAAM,CACzV,KAAK,2BAA2BA,EAAE,YAAaA,EAAE,gBAAiBA,EAAE,WAAYA,EAAE,QAAQ,EAAG,KAAK,YAAcA,EAAE,YAAa,KAAK,gBAAkBA,EAAE,gBAAiB,KAAK,OAASA,EAAE,QAAU,OAAQ,KAAK,WAAaA,EAAE,WAAY,KAAK,SAAWA,EAAE,SAAU,KAAK,sBAAwBA,EAAE,uBAAyB,QAAS,KAAK,oBAAsBA,EAAE,oBAAqB,KAAK,OAASA,EAAE,MAC5Y,EAAG,KAAK,2BAA2BwT,EAAGzJ,EAAG0J,EAAG3R,CAAC,EAAG,KAAK,YAAc0R,EAAG,KAAK,gBAAkBzJ,EAAG,KAAK,SAAW0J,EAAG,KAAK,WAAa3R,EAAG,KAAK,OAAS4R,EAAG,KAAK,sBAAwBnT,EAAG,KAAK,oBAAsBoT,EAAG,KAAK,OAASC,CACvO,CACA,2BAA2BJ,EAAGzJ,EAAG0J,EAAG3R,EAAG,CACrC,GAAI,OAAO0R,GAAK,UAAYA,EAAE,KAAK,EAAE,SAAW,EAAG,MAAM,IAAI,UAAUpB,EAAE,EACzE,GAAI,OAAOrI,GAAK,UAAYA,EAAE,KAAK,EAAE,SAAW,EAAG,MAAM,IAAI,UAAUsI,EAAE,EACzE,GAAI,OAAOoB,GAAK,UAAYA,EAAE,KAAK,EAAE,SAAW,EAAG,MAAM,IAAI,UAAUnB,EAAE,EACzE,GAAI,OAAOxQ,GAAK,UAAYA,EAAE,KAAK,EAAE,SAAW,EAAG,MAAM,IAAI,UAAUyQ,EAAE,CAC3E,CACA,qBAAqBiB,EAAG,CACtB,GAAIA,IAAM,OAASA,IAAM,OAAQ,MAAM,KAAK,KAAK,QAAS,GAAGrB,CAAC,mCAAmC,EAAG,IAAI,MAAM,mCAAmC,CACnJ,CACA,UAAUqB,EAAG,CACX,GAAI,OAAOA,GAAK,UAAYA,EAAE,KAAK,EAAE,SAAW,EAAG,MAAM,KAAK,KAAK,QAAShB,EAAC,EAAG,IAAI,UAAUA,EAAC,CACjG,CACA,gBAAgBgB,EAAG,CACjB,GAAI,OAAOA,GAAK,UAAYA,EAAE,KAAK,EAAE,SAAW,EAAG,MAAM,KAAK,KAAK,QAAST,EAAC,EAAG,IAAI,UAAUA,EAAC,CACjG,CACA,aAAaS,EAAG,CACd,GAAI,OAAOA,GAAK,SAAU,MAAM,KAAK,KAAK,QAASX,EAAC,EAAG,IAAI,UAAUA,EAAC,CACxE,CACA,cAAcW,EAAG,CACf,GAAI,OAAOA,GAAK,UAAYA,GAAK,EAAG,MAAM,KAAK,KAAK,QAASV,EAAC,EAAG,IAAI,UAAUA,EAAC,CAClF,CACA,WAAWU,EAAG,CACZ,GAAI,OAAOA,GAAK,SAAU,MAAM,KAAK,KAAK,QAAS,GAAGrB,CAAC,wBAAwB,EAAG,IAAI,UAAU,GAAGA,CAAC,wBAAwB,CAC9H,CACA,KAAKqB,EAAGzJ,EAAG0J,EAAI,CAAC,EAAG,CACjB,GAAI,KAAK,QAAU,OAAO,KAAK,OAAOD,CAAC,GAAK,WAAY,CACtD,IAAI1R,EAAK6R,GAAM,OAAOA,GAAK,UAAYA,IAAM,KAAOA,EAAI,OAAO,KAAKA,CAAC,EAAE,OAAO,CAACC,EAAG5T,KAAO0R,GAAE,SAAS1R,EAAE,YAAY,CAAC,EAAI4T,EAAE5T,CAAC,EAAI,aAAe,OAAO2T,EAAE3T,CAAC,GAAK,UAAY2T,EAAE3T,CAAC,IAAM,KAAO4T,EAAE5T,CAAC,EAAI8B,EAAE6R,EAAE3T,CAAC,CAAC,EAAI4T,EAAE5T,CAAC,EAAI2T,EAAE3T,CAAC,EAAG4T,GAAI,MAAM,QAAQD,CAAC,EAAI,CAAC,EAAI,CAAC,CAAC,EAAGD,EAAI5R,EAAE2R,CAAC,EAAGlT,EAAI,CAAE,UAA4B,IAAI,KAAK,EAAG,YAAY,EAAG,MAAOiT,EAAG,QAASzJ,EAAG,GAAG2J,EAAG,QAAS5R,EAAE,CAAE,WAAY,KAAK,WAAY,OAAQ,KAAK,OAAQ,SAAU,KAAK,SAAU,YAAa,KAAK,YAAc,GAAG,KAAK,YAAY,UAAU,EAAG,CAAC,CAAC,MAAQ,MAAO,CAAC,CAAE,EACvgB,KAAK,OAAO0R,CAAC,EAAEjT,CAAC,CAClB,CACF,CACA,MAAM,iBAAiBiT,EAAG,CACxB,KAAK,UAAUA,CAAC,EAChB,IAAIzJ,EAAI,CAAE,CAAC4H,EAAC,EAAGL,EAAE,EAAGmC,EAAIH,GAAEE,CAAC,EAAG,CAAE,IAAK1R,EAAG,QAAS4R,CAAE,EAAI,MAAM,KAAK,MAAM,OAAQD,EAAG,CAAC,EAAG1J,EAAG,EAAE,EAAG4J,GAAK,MAAM,KAAK,aAAa7R,EAAG,OAAQ4R,CAAC,GAAG,QAAQ,IAAI1B,EAAC,EACxJ,OAAO2B,EAAI,SAASA,EAAG,EAAE,EAAI,CAC/B,CACA,MAAM,cAAe,CACnB,IAAIH,EAAI,CAAE,CAAC7B,EAAC,EAAGL,EAAE,EAAG,CAAE,IAAKvH,EAAG,QAAS0J,CAAE,EAAI,MAAM,KAAK,MAAM,OAAQ,GAAI,CAAC,EAAGD,EAAG,EAAE,EAAG1R,EAAI,MAAM,KAAK,aAAaiI,EAAG,OAAQ0J,CAAC,EAC9H,MAAO,CAAC,EAAE3R,EAAE,IAAMA,EAAE,SAAW,IACjC,CACA,MAAM,WAAW0R,EAAGzJ,EAAI,CAAC,EAAG,CAC1B,KAAK,UAAUyJ,CAAC,EAChB,GAAI,CAAE,aAAcC,EAAG,mBAAoB3R,CAAE,EAAI,KAAK,iBAAiBiI,CAAC,EAAG2J,EAAI,CAAE,CAAC/B,EAAC,EAAGL,GAAG,GAAGxP,CAAE,EAAGvB,EAAI+S,GAAEE,CAAC,EAAG,CAAE,IAAKG,EAAG,QAASC,CAAE,EAAI,MAAM,KAAK,MAAM,OAAQrT,EAAGkT,EAAGC,EAAG,EAAE,EACxK,GAAI,CACF,IAAI1T,EAAI,MAAM,KAAK,aAAa2T,EAAG,OAAQC,EAAG,GAAI,CAAC,IAAK,IAAK,IAAK,GAAG,CAAC,EACtE,OAAO5T,EAAE,SAAW,IAAM,GAAQA,EAAE,SAAW,KAAOA,EAAE,SAAW,IAAM,KAAOA,EAAE,IAAMA,EAAE,SAAW,IAAM,IAAQ,KAAK,qBAAqBA,CAAC,EAAG,GACnJ,OAASA,EAAG,CACV,IAAIQ,EAAIR,aAAa,MAAQA,EAAE,QAAU,OAAOA,CAAC,EACjD,MAAM,KAAK,KAAK,QAAS,GAAGmS,CAAC,mCAAmC3R,CAAC,EAAE,EAAG,IAAI,MAAM,GAAG2R,CAAC,mCAAmC3R,CAAC,EAAE,CAC5H,CACF,CACA,MAAM,MAAMgT,EAAGzJ,EAAG0J,EAAG3R,EAAG4R,EAAG,CACzB,IAAInT,EAAqB,IAAI,KAAK,EAAG,YAAY,EAAE,QAAQ,gBAAiB,EAAE,EAAGoT,EAAI,OAAO5J,GAAK,UAAYA,EAAE,OAAS,EAAI,IAAI,IAAIA,EAAG,KAAK,QAAQ,EAAI,IAAI,IAAI,KAAK,QAAQ,EAC7K4J,EAAE,SAAW,IAAI,UAAU,KAAK,UAAU,CAAC,GAAGA,EAAE,QAAQ,GAAI7R,EAAE6P,EAAC,EAAI+B,EAAI,MAAMI,GAAEJ,CAAC,EAAIpC,GAAGxP,EAAE8P,EAAC,EAAIrR,EAAGuB,EAAE+P,EAAC,EAAI8B,EAAE,KAC1G,IAAIC,EAAI,KAAK,uBAAuB9R,CAAC,EAAG9B,EAAI,OAAO,KAAK8B,CAAC,EAAE,IAAKiS,GAAMA,EAAE,YAAY,CAAC,EAAE,KAAK,EAAE,KAAK,GAAG,EAAGvT,EAAI,MAAM,KAAK,uBAAuBgT,EAAGG,EAAGF,EAAGG,EAAG5T,EAAG0T,CAAC,EAAG1R,EAAI,MAAM,KAAK,mBAAmBzB,EAAGC,CAAC,EAAG4B,EAAI,MAAM,KAAK,oBAAoB7B,EAAGyB,CAAC,EAAGgS,EAAI,KAAK,0BAA0BzT,EAAGP,EAAGoC,CAAC,EAC/R,OAAON,EAAEgQ,EAAC,EAAIkC,EAAG,CAAE,IAAKL,EAAE,SAAS,EAAG,QAAS7R,CAAE,CACnD,CACA,uBAAuB0R,EAAG,CACxB,OAAO,OAAO,QAAQA,CAAC,EAAE,IAAI,CAAC,CAACzJ,EAAG0J,CAAC,IAAM,GAAG1J,EAAE,YAAY,CAAC,IAAI,OAAO0J,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK;AAAA,CAClG,CACC,CACA,MAAM,uBAAuBD,EAAGzJ,EAAG0J,EAAG3R,EAAG4R,EAAGnT,EAAG,CAC7C,MAAO,CAACiT,EAAGzJ,EAAE,SAAU,KAAK,2BAA2B0J,CAAC,EAAG,GAAG3R,CAAC;AAAA,EAChE4R,EAAGnT,EAAI,MAAMuT,GAAEvT,CAAC,EAAI+Q,EAAC,EAAE,KAAK;AAAA,CAC9B,CACC,CACA,MAAM,mBAAmBkC,EAAGzJ,EAAG,CAC7B,IAAI0J,EAAI,CAACD,EAAE,MAAM,EAAG,CAAC,EAAG,KAAK,OAAQpC,GAAGD,EAAC,EAAE,KAAK,GAAG,EACnD,MAAO,CAACD,GAAGsC,EAAGC,EAAG,MAAMK,GAAE/J,CAAC,CAAC,EAAE,KAAK;AAAA,CACrC,CACC,CACA,MAAM,oBAAoByJ,EAAGzJ,EAAG,CAC9B,IAAI0J,EAAI,MAAM,KAAK,iBAAiBD,EAAE,MAAM,EAAG,CAAC,CAAC,EACjD,OAAOS,GAAER,EAAG1J,EAAG,KAAK,CACtB,CACA,0BAA0ByJ,EAAGzJ,EAAG0J,EAAG,CACjC,IAAI3R,EAAI,CAAC0R,EAAE,MAAM,EAAG,CAAC,EAAG,KAAK,OAAQpC,GAAGD,EAAC,EAAE,KAAK,GAAG,EACnD,MAAO,CAAC,GAAGD,EAAC,eAAe,KAAK,WAAW,IAAIpP,CAAC,GAAI,iBAAiBiI,CAAC,GAAI,aAAa0J,CAAC,EAAE,EAAE,KAAK,IAAI,CACvG,CACA,iBAAiBD,EAAG,CAClB,IAAIzJ,EAAI,CAAC,EAAG0J,EAAI,CAAC,EAAG3R,EAAI,CAAC,WAAY,gBAAiB,oBAAqB,qBAAqB,EAChG,OAAS,CAAC4R,EAAGnT,CAAC,IAAK,OAAO,QAAQiT,CAAC,EAAG1R,EAAE,SAAS4R,CAAC,EAAID,EAAEC,CAAC,EAAInT,EAAIwJ,EAAE2J,CAAC,EAAInT,EACxE,MAAO,CAAE,aAAcwJ,EAAG,mBAAoB0J,CAAE,CAClD,CACA,MAAM,KAAKD,EAAI,IAAKzJ,EAAI,GAAI0J,EAAI,IAAK3R,EAAI,MAAO4R,EAAI,CAAC,EAAG,CACtD,KAAK,gBAAgBF,CAAC,EAAG,KAAK,aAAazJ,CAAC,EAAG,KAAK,cAAc0J,CAAC,EAAG,KAAK,qBAAqB3R,CAAC,EAAG,KAAK,WAAW4R,CAAC,EAAG,KAAK,KAAK,OAAQ,sBAAsB3J,CAAC,EAAE,EACnK,IAAIxJ,EAAI,CAAE,YAAa8Q,GAAG,WAAY,OAAOoC,CAAC,EAAG,GAAGC,CAAE,EACtD3J,EAAE,OAAS,IAAMxJ,EAAE,OAASwJ,GAC5B,IAAI4J,EAAI,CAAE,CAAC5B,EAAC,EAAGN,GAAG,CAACE,EAAC,EAAGL,EAAE,EAAGsC,EAAIJ,IAAM,IAAMA,EAAIH,GAAEG,CAAC,EAAG,CAAE,IAAKxT,EAAG,QAASQ,CAAE,EAAI,MAAM,KAAK,MAAM,MAAOoT,EAAGrT,EAAGoT,EAAG,EAAE,EAAG3R,EAAI,GAAGhC,CAAC,IAAI,IAAI,gBAAgBO,CAAC,CAAC,GAAI6B,EAAI,MAAM,KAAK,aAAaJ,EAAG,MAAOxB,CAAC,EAAGwT,EAAI,MAAM5R,EAAE,KAAK,EACtN,GAAIN,IAAM,OAAQ,CAChB,IAAIoS,EAAI9R,EAAE,QAAQ,IAAI4P,EAAC,EAAGmC,EAAI/R,EAAE,QAAQ,IAAI8P,EAAC,EAAGkC,EAAIhS,EAAE,QAAQ,IAAI6P,EAAC,EACnE,MAAO,CAAE,KAAMiC,EAAI,CAACA,EAAI,OAAQ,MAAOC,EAAI,IAAI,KAAKA,CAAC,EAAI,OAAQ,KAAMC,GAAK,MAAO,CACrF,CACA,IAAIL,EAAIM,GAAEL,CAAC,EAAGM,EAAIP,EAAE,kBAAoBA,EAAE,OAASA,EACnD,OAAOO,EAAE,UAAYA,CACvB,CACA,MAAM,qBAAqBd,EAAI,IAAKzJ,EAAI,GAAI0J,EAAI,MAAO3R,EAAI,CAAC,EAAG,CAC7D,IAAI4R,EAAGnT,EAAGoT,EACV,KAAK,gBAAgBH,CAAC,EAAG,KAAK,aAAazJ,CAAC,EAAG,KAAK,qBAAqB0J,CAAC,EAAG,KAAK,WAAW3R,CAAC,EAAG,KAAK,KAAK,OAAQ,gCAAgCiI,CAAC,EAAE,EACtJ,IAAI6J,EAAI,CAAE,QAAS,GAAI,GAAG9R,CAAE,EAAG9B,EAAI,CAAE,CAAC+R,EAAC,EAAGN,GAAG,CAACE,EAAC,EAAGL,EAAE,EAAG9Q,EAAIgT,IAAM,IAAMA,EAAIH,GAAEG,CAAC,EAAG,CAAE,IAAKxR,EAAG,QAASI,CAAE,EAAI,MAAM,KAAK,MAAM,MAAO5B,EAAGoT,EAAG5T,EAAG,EAAE,EAAGgU,EAAI,GAAGhS,CAAC,IAAI,IAAI,gBAAgB4R,CAAC,CAAC,GAAIG,EAAI,MAAM,KAAK,aAAaC,EAAG,MAAO5R,CAAC,EAAGkS,EAAI,MAAMP,EAAE,KAAK,EACjP,GAAIN,IAAM,OAAQ,MAAO,CAAE,KAAM,GAAGC,EAAIK,EAAE,QAAQ,IAAI/B,EAAC,KAAO,MAAQ0B,IAAM,OAASA,EAAI,KAAM,MAAO,IAAI,MAAMnT,EAAIwT,EAAE,QAAQ,IAAI7B,EAAC,KAAO,MAAQ3R,IAAM,OAASA,EAAI,EAAE,EAAG,MAAOoT,EAAII,EAAE,QAAQ,IAAI9B,EAAC,KAAO,MAAQ0B,IAAM,OAASA,EAAI,EAAG,EACzO,IAAIO,EAAIG,GAAEC,CAAC,EAAGH,EAAID,EAAE,4BAA8BA,EAAE,OAASA,EAC7D,OAAOC,EAAE,SAAWA,CACtB,CACA,MAAM,IAAIX,EAAGzJ,EAAI,CAAC,EAAG,CACnB,KAAK,UAAUyJ,CAAC,EAAG,KAAK,KAAK,OAAQ,kBAAkBA,CAAC,EAAE,EAC1D,GAAI,CAAE,aAAcC,EAAG,mBAAoB3R,CAAE,EAAI,KAAK,iBAAiBiI,CAAC,EAAG2J,EAAI,CAAE,CAAC3B,EAAC,EAAGN,GAAG,CAACE,EAAC,EAAGL,GAAG,GAAGxP,CAAE,EAAGvB,EAAI+S,GAAEE,CAAC,EAAG,CAAE,IAAKG,EAAG,QAASC,CAAE,EAAI,MAAM,KAAK,MAAM,MAAOrT,EAAGkT,EAAGC,EAAG,EAAE,EAAG1T,EAAI,MAAM,KAAK,aAAa2T,EAAG,MAAOC,EAAG,GAAI,CAAC,IAAK,IAAK,IAAK,GAAG,CAAC,EACnP,GAAI5T,EAAE,SAAW,KAAOA,EAAE,SAAW,KAAOA,EAAE,SAAW,IAAK,OAAO,KAAK,KAAK,QAAS,iCAAiCA,EAAE,MAAM,EAAE,EAAG,KACtI,GAAI,CAACA,EAAE,GAAI,MAAM,KAAK,KAAK,QAAS,iCAAiCA,EAAE,MAAM,EAAE,EAAG,IAAI,MAAM,iCAAiCA,EAAE,MAAM,EAAE,EACvI,OAAOA,EAAE,KAAK,CAChB,CACA,MAAM,kBAAkBwT,EAAGzJ,EAAI,CAAC,EAAG,CACjC,KAAK,UAAUyJ,CAAC,EAAG,KAAK,KAAK,OAAQ,kBAAkBA,CAAC,EAAE,EAC1D,GAAI,CAAE,aAAcC,EAAG,mBAAoB3R,CAAE,EAAI,KAAK,iBAAiBiI,CAAC,EAAG2J,EAAI,CAAE,CAAC3B,EAAC,EAAGN,GAAG,CAACE,EAAC,EAAGL,GAAG,GAAGxP,CAAE,EAAGvB,EAAI+S,GAAEE,CAAC,EAAG,CAAE,IAAKG,EAAG,QAASC,CAAE,EAAI,MAAM,KAAK,MAAM,MAAOrT,EAAGkT,EAAGC,EAAG,EAAE,EAC/K,GAAI,CACF,IAAI1T,EAAI,MAAM,KAAK,aAAa2T,EAAG,MAAOC,EAAG,GAAI,CAAC,IAAK,IAAK,IAAK,GAAG,CAAC,EACrE,GAAI5T,EAAE,SAAW,KAAOA,EAAE,SAAW,KAAOA,EAAE,SAAW,IAAK,OAAO,KAAK,KAAK,QAAS,iCAAiCA,EAAE,MAAM,EAAE,EAAG,CAAE,KAAM,KAAM,KAAM,IAAK,EAC/J,GAAI,CAACA,EAAE,GAAI,MAAM,KAAK,KAAK,QAAS,iCAAiCA,EAAE,MAAM,EAAE,EAAG,IAAI,MAAM,iCAAiCA,EAAE,MAAM,EAAE,EACvI,IAAIQ,EAAIR,EAAE,QAAQ,IAAI,MAAM,EAC5B,GAAI,CAACQ,EAAG,MAAM,IAAI,MAAM,oCAAoC,EAC5D,IAAIwB,EAAI,MAAMhC,EAAE,KAAK,EACrB,MAAO,CAAE,KAAM6T,GAAErT,CAAC,EAAG,KAAMwB,CAAE,CAC/B,OAAShC,EAAG,CACV,MAAM,KAAK,KAAK,QAAS,wBAAwBwT,CAAC,eAAexT,CAAC,EAAE,EAAGA,CACzE,CACF,CACA,MAAM,QAAQwT,EAAGzJ,EAAI,CAAC,EAAG,CACvB,KAAK,UAAUyJ,CAAC,EAAG,KAAK,KAAK,OAAQ,uBAAuBA,CAAC,EAAE,EAC/D,GAAI,CAAE,aAAcC,EAAG,mBAAoB3R,CAAE,EAAI,KAAK,iBAAiBiI,CAAC,EAAG2J,EAAI,CAAE,CAAC3B,EAAC,EAAGN,GAAG,CAACE,EAAC,EAAGL,GAAG,GAAGxP,CAAE,EAAGvB,EAAI+S,GAAEE,CAAC,EAAG,CAAE,IAAKG,EAAG,QAASC,CAAE,EAAI,MAAM,KAAK,MAAM,OAAQrT,EAAGkT,EAAGC,EAAG,EAAE,EAAG1T,EAAI,MAAM,KAAK,aAAa2T,EAAG,OAAQC,EAAG,GAAI,CAAC,IAAK,IAAK,GAAG,CAAC,EAChP,GAAI,KAAK,KAAK,OAAQ,oBAAoB5T,EAAE,OAAQA,EAAE,UAAU,EAAE,EAAGA,EAAE,SAAW,KAAOA,EAAE,SAAW,IAAK,OAAO,KAClH,IAAIQ,EAAIR,EAAE,QAAQ,IAAI,MAAM,EAC5B,GAAI,CAACQ,EAAG,MAAM,KAAK,KAAK,QAAS,oCAAoC,EAAG,IAAI,MAAM,oCAAoC,EACtH,OAAOqT,GAAErT,CAAC,CACZ,CACA,MAAM,YAAYgT,EAAGzJ,EAAI,GAAM0J,EAAI,EAAG3R,EAAI,KAAK,sBAAuB4R,EAAI,CAAC,EAAG,CAC5E,KAAK,UAAUF,CAAC,EAChB,GAAI,CAAE,aAAcjT,EAAG,mBAAoBoT,CAAE,EAAI,KAAK,iBAAiB,CAAE,GAAGD,CAAE,CAAC,EAAGE,EAAI,CAAE,CAAC7B,EAAC,EAAGN,GAAG,CAACE,EAAC,EAAGL,GAAG,GAAGvH,EAAI,CAAC,EAAI,CAAE,MAAO,SAAS0J,CAAC,IAAI3R,EAAI,CAAC,EAAG,EAAG,GAAG6R,CAAE,EAAG3T,EAAIsT,GAAEE,CAAC,EAAG,CAAE,IAAKhT,EAAG,QAASwB,CAAE,EAAI,MAAM,KAAK,MAAM,MAAOhC,EAAGO,EAAGqT,EAAG,EAAE,EAAGxR,EAAI,GAAG5B,CAAC,IAAI,IAAI,gBAAgBD,CAAC,CAAC,GACzQ,OAAO,KAAK,aAAa6B,EAAG,MAAOJ,CAAC,CACtC,CACA,MAAM,IAAIwR,EAAGzJ,EAAG,CACd,GAAI,KAAK,UAAUyJ,CAAC,EAAG,EAAEzJ,aAAa,QAAU,OAAOA,GAAK,UAAW,MAAM,KAAK,KAAK,QAAS6I,EAAC,EAAG,IAAI,UAAUA,EAAC,EACnH,KAAK,KAAK,OAAQ,oBAAoBY,CAAC,EAAE,EACzC,IAAIC,EAAI,OAAO1J,GAAK,SAAW,OAAO,WAAWA,CAAC,EAAIA,EAAE,OAAQjI,EAAI,CAAE,CAACkQ,EAAC,EAAGyB,CAAE,EAAGC,EAAIJ,GAAEE,CAAC,EAAG,CAAE,IAAKjT,EAAG,QAASoT,CAAE,EAAI,MAAM,KAAK,MAAM,MAAOD,EAAG,CAAC,EAAG5R,EAAGiI,CAAC,EACtJ,OAAO,MAAM,KAAK,aAAaxJ,EAAG,MAAOoT,EAAG5J,CAAC,CAC/C,CACA,MAAM,qBAAqByJ,EAAGzJ,EAAIwH,GAAG,CACnC,GAAI,KAAK,UAAUiC,CAAC,EAAG,OAAOzJ,GAAK,SAAU,MAAM,KAAK,KAAK,QAAS,GAAGoI,CAAC,2BAA2B,EAAG,IAAI,UAAU,GAAGA,CAAC,2BAA2B,EACrJ,KAAK,KAAK,OAAQ,0CAA0CqB,CAAC,EAAE,EAC/D,IAAIC,EAAI,CAAE,QAAS,EAAG,EAAG3R,EAAI,CAAE,CAACiQ,EAAC,EAAGhI,EAAG,CAAC4H,EAAC,EAAGL,EAAE,EAAGoC,EAAIJ,GAAEE,CAAC,EAAG,CAAE,IAAKjT,EAAG,QAASoT,CAAE,EAAI,MAAM,KAAK,MAAM,OAAQD,EAAGD,EAAG3R,EAAG,EAAE,EAAG8R,EAAI,GAAGrT,CAAC,IAAI,IAAI,gBAAgBkT,CAAC,CAAC,GAAI,EAAI,MAAO,MAAM,KAAK,aAAaG,EAAG,OAAQD,CAAC,GAAG,KAAK,EAAG3R,EAAIqS,GAAE,CAAC,EAClO,GAAI,OAAOrS,GAAK,UAAYA,IAAM,MAAQ,UAAWA,GAAK,OAAOA,EAAE,OAAS,UAAYA,EAAE,QAAU,MAAQ,YAAaA,EAAE,MAAO,CAChI,IAAII,EAAI,OAAOJ,EAAE,MAAM,OAAO,EAC9B,MAAM,KAAK,KAAK,QAAS,GAAGmQ,CAAC,qCAAqC/P,CAAC,EAAE,EAAG,IAAI,MAAM,GAAG+P,CAAC,qCAAqC/P,CAAC,EAAE,CAChI,CACA,GAAI,OAAOJ,GAAK,UAAYA,IAAM,KAAM,CACtC,GAAI,CAACA,EAAE,+BAAiC,CAACA,EAAE,8BAA8B,SAAU,MAAM,KAAK,KAAK,QAAS,GAAGmQ,CAAC,4DAA4D,EAAG,IAAI,MAAM,GAAGA,CAAC,kEAAkE,EAC/P,OAAOnQ,EAAE,8BAA8B,QACzC,KAAO,OAAM,KAAK,KAAK,QAAS,GAAGmQ,CAAC,+DAA+D,EAAG,IAAI,MAAM,GAAGA,CAAC,+DAA+D,CACrL,CACA,MAAM,WAAWqB,EAAGzJ,EAAG0J,EAAG3R,EAAG4R,EAAI,CAAC,EAAG,CACnC,KAAK,0BAA0BF,EAAGzJ,EAAG0J,EAAG3R,EAAG4R,CAAC,EAC5C,IAAInT,EAAI,CAAE,SAAUkT,EAAG,WAAY3R,EAAG,GAAG4R,CAAE,EAAGC,EAAI,CAAE,CAAC3B,EAAC,EAAGjI,EAAE,MAAO,EAAG6J,EAAIN,GAAEE,CAAC,EAAG,CAAE,IAAKxT,EAAG,QAASQ,CAAE,EAAI,MAAM,KAAK,MAAM,MAAOoT,EAAGrT,EAAGoT,EAAG5J,CAAC,EAAG/H,EAAI,GAAGhC,CAAC,IAAI,IAAI,gBAAgBO,CAAC,CAAC,GAAI6B,EAAI,MAAM,KAAK,aAAaJ,EAAG,MAAOxB,EAAGuJ,CAAC,EAAGiK,EAAIH,GAAEzR,EAAE,QAAQ,IAAI,MAAM,GAAK,EAAE,EACjQ,MAAO,CAAE,WAAYN,EAAG,KAAMkS,CAAE,CAClC,CACA,0BAA0BR,EAAGzJ,EAAG0J,EAAG3R,EAAG4R,EAAG,CACvC,GAAI,KAAK,UAAUF,CAAC,EAAG,EAAEzJ,aAAa,QAAU,OAAOA,GAAK,UAAW,MAAM,KAAK,KAAK,QAAS6I,EAAC,EAAG,IAAI,UAAUA,EAAC,EACnH,GAAI,OAAOa,GAAK,UAAYA,EAAE,KAAK,EAAE,SAAW,EAAG,MAAM,KAAK,KAAK,QAAShB,EAAC,EAAG,IAAI,UAAUA,EAAC,EAC/F,GAAI,CAAC,OAAO,UAAU3Q,CAAC,GAAKA,GAAK,EAAG,MAAM,KAAK,KAAK,QAAS,GAAGqQ,CAAC,uCAAuC,EAAG,IAAI,UAAU,GAAGA,CAAC,uCAAuC,EACpK,KAAK,WAAWuB,CAAC,CACnB,CACA,MAAM,wBAAwBF,EAAGzJ,EAAG0J,EAAG,CACrC,GAAI,KAAK,UAAUD,CAAC,EAAG,OAAOzJ,GAAK,UAAYA,EAAE,KAAK,EAAE,SAAW,EAAG,MAAM,KAAK,KAAK,QAAS0I,EAAC,EAAG,IAAI,UAAUA,EAAC,EAClH,GAAI,CAAC,MAAM,QAAQgB,CAAC,GAAKA,EAAE,SAAW,EAAG,MAAM,KAAK,KAAK,QAASf,EAAC,EAAG,IAAI,UAAUA,EAAC,EACrF,GAAI,CAACe,EAAE,MAAOM,GAAM,OAAOA,EAAE,YAAc,UAAY,OAAOA,EAAE,MAAQ,QAAQ,EAAG,MAAM,KAAK,KAAK,QAASpB,EAAC,EAAG,IAAI,UAAUA,EAAC,EAC/H,KAAK,KAAK,OAAQ,6BAA6B5I,CAAC,eAAeyJ,CAAC,EAAE,EAClE,IAAI1R,EAAI,CAAE,SAAUiI,CAAE,EAAG2J,EAAI,KAAK,iCAAiCD,CAAC,EAAGlT,EAAI,CAAE,CAACwR,EAAC,EAAGP,GAAG,CAACQ,EAAC,EAAG,OAAO,WAAW0B,CAAC,EAAE,SAAS,EAAG,CAAC/B,EAAC,EAAG,MAAMmC,GAAEJ,CAAC,CAAE,EAAGC,EAAIL,GAAEE,CAAC,EAAG,CAAE,IAAKI,EAAG,QAAS5T,CAAE,EAAI,MAAM,KAAK,MAAM,OAAQ2T,EAAG7R,EAAGvB,EAAGmT,CAAC,EAAGlT,EAAI,GAAGoT,CAAC,IAAI,IAAI,gBAAgB9R,CAAC,CAAC,GAAIM,EAAI,MAAO,MAAM,KAAK,aAAa5B,EAAG,OAAQR,EAAG0T,CAAC,GAAG,KAAK,EAAGM,EAAIK,GAAEjS,CAAC,EACjU,GAAI,OAAO4R,GAAK,UAAYA,IAAM,MAAQ,UAAWA,GAAK,OAAOA,EAAE,OAAS,UAAYA,EAAE,QAAU,MAAQ,YAAaA,EAAE,MAAO,CAChI,IAAID,EAAI,OAAOC,EAAE,MAAM,OAAO,EAC9B,MAAM,KAAK,KAAK,QAAS,GAAG7B,CAAC,qCAAqC4B,CAAC,EAAE,EAAG,IAAI,MAAM,GAAG5B,CAAC,qCAAqC4B,CAAC,EAAE,CAChI,CACA,OAAOC,EAAE,6BACX,CACA,MAAM,qBAAqBR,EAAGzJ,EAAG,CAC/B,GAAI,KAAK,UAAUyJ,CAAC,EAAG,OAAOzJ,GAAK,UAAYA,EAAE,KAAK,EAAE,SAAW,EAAG,MAAM,KAAK,KAAK,QAAS0I,EAAC,EAAG,IAAI,UAAUA,EAAC,EAClH,KAAK,KAAK,OAAQ,6BAA6B1I,CAAC,eAAeyJ,CAAC,EAAE,EAClE,IAAIC,EAAI,CAAE,SAAU1J,CAAE,EAAGjI,EAAI,CAAE,CAACiQ,EAAC,EAAGP,GAAG,CAACG,EAAC,EAAGL,EAAE,EAC9C,GAAI,CACF,IAAIoC,EAAIJ,GAAEE,CAAC,EAAG,CAAE,IAAKjT,EAAG,QAASoT,CAAE,EAAI,MAAM,KAAK,MAAM,SAAUD,EAAGD,EAAG3R,EAAG,EAAE,EAAG8R,EAAI,GAAGrT,CAAC,IAAI,IAAI,gBAAgBkT,CAAC,CAAC,GAAIzT,EAAI,MAAM,KAAK,aAAa4T,EAAG,SAAUD,CAAC,EAChK,GAAI3T,EAAE,GAAI,CACR,IAAIQ,EAAI,MAAMR,EAAE,KAAK,EAAGgC,EAAIqS,GAAE7T,CAAC,EAC/B,GAAI,OAAOwB,GAAK,UAAYA,IAAM,MAAQ,UAAWA,GAAK,OAAOA,EAAE,OAAS,UAAYA,EAAE,QAAU,MAAQ,YAAaA,EAAE,MAAO,CAChI,IAAII,EAAI,OAAOJ,EAAE,MAAM,OAAO,EAC9B,MAAM,KAAK,KAAK,QAAS,GAAGmQ,CAAC,qCAAqC/P,CAAC,EAAE,EAAG,IAAI,MAAM,GAAG+P,CAAC,qCAAqC/P,CAAC,EAAE,CAChI,CACA,MAAO,CAAE,OAAQ,UAAW,IAAKoR,EAAG,SAAUzJ,EAAG,SAAU/H,CAAE,CAC/D,KAAO,OAAM,KAAK,KAAK,QAAS,GAAGmQ,CAAC,oCAAoCnS,EAAE,MAAM,EAAE,EAAG,IAAI,MAAM,GAAGmS,CAAC,oCAAoCnS,EAAE,MAAM,EAAE,CACnJ,OAAS0T,EAAG,CACV,IAAInT,EAAImT,aAAa,MAAQA,EAAE,QAAU,OAAOA,CAAC,EACjD,MAAM,KAAK,KAAK,QAAS,GAAGvB,CAAC,4CAA4CqB,CAAC,KAAKjT,CAAC,EAAE,EAAG,IAAI,MAAM,GAAG4R,CAAC,4CAA4CqB,CAAC,KAAKjT,CAAC,EAAE,CAC1J,CACF,CACA,iCAAiCiT,EAAG,CAClC,MAAO;AAAA;AAAA,UAEDA,EAAE,IAAKzJ,GAAM;AAAA;AAAA,0BAEGA,EAAE,UAAU;AAAA,oBAClBA,EAAE,IAAI;AAAA;AAAA,SAEjB,EAAE,KAAK,EAAE,CAAC;AAAA;AAAA,KAGjB,CACA,MAAM,OAAOyJ,EAAG,CACd,KAAK,UAAUA,CAAC,EAAG,KAAK,KAAK,OAAQ,mBAAmBA,CAAC,EAAE,EAC3D,IAAIzJ,EAAI,CAAE,CAACgI,EAAC,EAAGN,GAAG,CAACE,EAAC,EAAGL,EAAE,EAAGmC,EAAIH,GAAEE,CAAC,EAAG,CAAE,IAAK1R,EAAG,QAAS4R,CAAE,EAAI,MAAM,KAAK,MAAM,SAAUD,EAAG,CAAC,EAAG1J,EAAG,EAAE,EAAGxJ,EAAI,MAAM,KAAK,aAAauB,EAAG,SAAU4R,CAAC,EACnJ,OAAOnT,EAAE,SAAW,KAAOA,EAAE,SAAW,GAC1C,CACA,MAAM,aAAaiT,EAAGzJ,EAAG0J,EAAG3R,EAAG4R,EAAI,CAAC,EAAG,CACrC,KAAK,KAAK,OAAQ,WAAW3J,CAAC,eAAeyJ,CAAC,cAAc,KAAK,UAAUC,CAAC,CAAC,EAAE,EAC/E,IAAIlT,EAAI,MAAM,MAAMiT,EAAG,CAAE,OAAQzJ,EAAG,QAAS0J,EAAG,KAAM,CAAC,MAAO,MAAM,EAAE,SAAS1J,CAAC,EAAI,OAASjI,EAAG,OAAQ,KAAK,sBAAwB,OAAS,YAAY,QAAQ,KAAK,mBAAmB,EAAI,MAAO,CAAC,EACtM,MAAO,CAACvB,EAAE,IAAM,CAACmT,EAAE,SAASnT,EAAE,MAAM,GAAK,MAAM,KAAK,qBAAqBA,CAAC,EAAGA,CAC/E,CACA,MAAM,qBAAqBiT,EAAG,CAC5B,IAAIzJ,EAAI,MAAMyJ,EAAE,KAAK,EAAGC,EAAID,EAAE,QAAQ,IAAI,kBAAkB,GAAK,UAAW1R,EAAI0R,EAAE,QAAQ,IAAI,qBAAqB,GAAKA,EAAE,WAC1H,MAAM,KAAK,KAAK,QAAS,GAAGrB,CAAC,8BAA8BqB,EAAE,MAAM,KAAKC,CAAC,MAAM3R,CAAC,cAAciI,CAAC,EAAE,EAAG,IAAI,MAAM,GAAGoI,CAAC,8BAA8BqB,EAAE,MAAM,KAAKC,CAAC,MAAM3R,CAAC,eAAeiI,CAAC,EAAE,CACzL,CACA,2BAA2ByJ,EAAG,CAC5B,OAAO,OAAO,KAAKA,CAAC,EAAE,OAAS,EAAI,GAAK,OAAO,KAAKA,CAAC,EAAE,KAAK,EAAE,IAAKzJ,GAAM,GAAG,mBAAmBA,CAAC,CAAC,IAAI,mBAAmByJ,EAAEzJ,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,GAAG,CAC3I,CACA,MAAM,iBAAiByJ,EAAG,CACxB,IAAIzJ,EAAI,MAAMkK,GAAE,OAAO,KAAK,eAAe,GAAIT,CAAC,EAAGC,EAAI,MAAMQ,GAAElK,EAAG,KAAK,MAAM,EAAGjI,EAAI,MAAMmS,GAAER,EAAGrC,EAAC,EAChG,OAAO6C,GAAEnS,EAAGqP,EAAC,CACf,CACF,EACI2C,GAAI,MAAOV,GAAM,CACnB,IAAII,EAAIP,GAAE,QAAQ,EAClB,OAAOO,EAAE,OAAOJ,CAAC,EAAGI,EAAE,OAAO,KAAK,CACpC,EACIS,GAAI,MAAOb,EAAGI,EAAGzJ,IAAM,CACzB,IAAI0J,EAAIT,GAAE,SAAUI,CAAC,EACrB,OAAOK,EAAE,OAAOD,CAAC,EAAGC,EAAE,OAAO1J,CAAC,CAChC,EACI8J,GAAKT,GAAM,CACb,IAAII,EAAI,CAAE,IAAK,GAAI,SAAU,GAAI,QAAS,GAAI,SAAU,GAAI,WAAY,EAAG,EAC3E,OAAOJ,EAAE,QAAQ,uCAAyCrJ,GAAMyJ,EAAEzJ,CAAC,CAAC,CACtE,EACIsK,GAAKjB,GAAM,CACb,IAAII,EAAKE,GAAMA,EAAE,QAAQ,UAAW,GAAG,EAAE,QAAQ,UAAW,GAAG,EAAE,QAAQ,QAAS,GAAG,EAAE,QAAQ,QAAS,GAAG,EAAE,QAAQ,SAAU,GAAG,EAAG3J,EAAI,CAAC,EAAG0J,EAAI,2DAA4D3R,EAC7M,KAAOA,EAAI2R,EAAE,KAAKL,CAAC,GAAK,CACtB,GAAI,CAAC,CAAEM,EAAGnT,EAAGoT,CAAC,EAAI7R,EAAG8R,EAAIF,EAAE,YAAY,EAAInT,EAAGP,EAAI2T,GAAK,KAAOU,GAAEV,CAAC,EAAI,GACrE,OAAO3T,GAAK,SAAW+J,EAAE6J,CAAC,EAAIC,GAAEL,EAAExT,CAAC,CAAC,EAAI,MAAM,QAAQ+J,EAAE6J,CAAC,CAAC,EAAI7J,EAAE6J,CAAC,EAAE,KAAK5T,CAAC,EAAI+J,EAAE6J,CAAC,EAAI7J,EAAE6J,CAAC,GAAK,KAAO,CAAC7J,EAAE6J,CAAC,EAAG5T,CAAC,EAAIkT,GAAGU,CAAC,EAAI,CAAC5T,CAAC,EAAIA,CAC/H,CACA,OAAO,OAAO,KAAK+J,CAAC,EAAE,OAASA,EAAIyJ,EAAEJ,CAAC,CACxC,EAGImB,GAAevV,GAAQiS,GAAY,EAAG,CAAC,EAGvCuD,EAAyB,CAC3B,iBAAkB,mBAClB,kBAAmB,oBACnB,wBAAyB,0BACzB,wBAAyB,0BACzB,wBAAyB,0BACzB,+BAAgC,iCAChC,qBAAsB,uBACtB,wBAAyB,0BACzB,0BAA2B,4BAC3B,mBAAoB,qBACpB,WAAY,aACZ,eAAgB,iBAChB,gBAAiB,kBACjB,aAAc,eACd,aAAc,eACd,iBAAkB,mBAClB,aAAc,eACd,YAAa,cACb,cAAe,eACjB,EACIC,EAAkB,cAAc,KAAM,CACxC,YAAYC,EAASC,EAAOH,EAAuB,cAAe,CAChE,MAAM,oBAAoBE,CAAO,aAAaC,CAAI,EAAE,EACpD,KAAK,KAAO,KAAK,YAAY,KAC7B,KAAK,KAAOA,EACZ,MAAM,kBAAkB,KAAM,KAAK,WAAW,CAChD,CACF,EACIC,GAAwB,cAAcH,CAAgB,CACxD,YAAYC,EAASC,EAAOH,EAAuB,wBAAyB,CAC1E,MAAME,EAASC,CAAI,EACnB,MAAMD,EAASF,EAAuB,uBAAuB,CAC/D,CACF,EACIK,GAA0B,cAAcJ,CAAgB,CAC1D,YAAYC,EAASC,EAAOH,EAAuB,0BAA2B,CAC5E,MAAME,EAASC,CAAI,EACnB,MAAMD,EAASF,EAAuB,yBAAyB,CACjE,CACF,EACIM,GAAmB,cAAcL,CAAgB,CACnD,YAAYC,EAASK,EAAW,CAC9B,MAAM,MAAMA,CAAS,sBAAsBL,CAAO,GAAIF,EAAuB,kBAAkB,CACjG,CACF,EAIIQ,GAAe,CAACC,EAAUC,IACrB,OAAO,KAAKA,CAAK,EAAE,MAAOtW,GAAQqW,EAASrW,CAAG,IAAMsW,EAAMtW,CAAG,CAAC,EAEnEuW,GAAe,SACb,OAAOC,GAAe,KAAe,OAAOA,IAAe,WACtDA,GAAW,EAEhB,OAAO,OAAW,KAAe,OAAO,QAAW,UAAY,OAAO,OAAO,YAAe,WACvF,OAAO,WAAW,EAEpB,uCAAuC,QAAQ,QAAS,SAASxB,EAAG,CACzE,IAAIH,EAAI,KAAK,OAAO,EAAI,GAAK,EAAGzK,EAAK4K,IAAM,IAAMH,EAAIA,EAAI,EAAI,EAC7D,OAAOzK,EAAG,SAAS,EAAE,CACvB,CAAC,EAECqM,GAAiB,CAAChH,EAAOhN,EAAO,qBAAuB,CACzD,OAAQ,OAAOgN,EAAO,CACpB,IAAK,SACH,OAAIiH,GAAQjH,CAAK,EACR,CACL,KAAM,SACN,KAAM,MACN,KAAM,GACN,YAAa,MACf,EAEK,SACT,IAAK,SACH,OAAO,OAAO,UAAUA,CAAK,EAAI,MAAQ,QAC3C,IAAK,UACH,MAAO,UACT,IAAK,SACH,OAAIA,IAAU,KAAa,OACvB,MAAM,QAAQA,CAAK,EAAU,CAAE,KAAM,QAAS,MAAOgH,GAAehH,EAAM,CAAC,CAAC,CAAE,EAC3EkH,GAAgBlH,EAAOhN,CAAI,EACpC,QACE,MAAO,QACX,CACF,EACImU,GAAyBxN,GAAW,CACtC,IAAMyN,EAAU,CACd,KAAM,MACN,KAAM,SACN,KAAM,GACN,YAAa,MACf,EACA,OAAI,OAAOzN,EAAW,KAAeA,IAAW,OAG5C,SAAUA,GAAUA,EAAO,OAAS,UAAY,WAAYA,GAAU,MAAM,QAAQA,EAAO,MAAM,EAChFA,EAAO,OAAO,KAAM9C,GAAUA,EAAM,OAAS,KAAK,GAEnE8C,EAAO,OAAO,QAAQyN,CAAO,EAEtB,SAAUzN,GAAUA,EAAO,OAAS,SAAW,UAAWA,GAAUA,EAAO,QAAU,MAAQ,OAAOA,EAAO,OAAU,UAAY,SAAUA,EAAO,OAASA,EAAO,MAAM,OAAS,UAAY,WAAYA,EAAO,OAAS,MAAM,QAAQA,EAAO,MAAM,MAAM,IAChPA,EAAO,MAAM,OAAO,KAAM9C,GAAUA,EAAM,OAAS,KAAK,GAEzE8C,EAAO,MAAM,OAAO,QAAQyN,CAAO,IAGhCzN,CACT,EACIuN,GAAkB,CAAC1V,EAAMsB,EAAW,kBAAoB,CACtD,MAAM,QAAQtB,CAAI,IACpBA,EAAOA,EAAK,CAAC,GAEf,IAAMiP,EAAS,OAAO,QAAQjP,CAAI,EAAE,IAAI,CAAC,CAACwB,EAAMgN,CAAK,KAC5C,CAAE,KAAAhN,EAAM,KAAMgU,GAAehH,EAAO,GAAGlN,CAAQ,IAAIE,CAAI,EAAE,CAAE,EACnE,EAMD,OAAOmU,GALQ,CACb,KAAM,SACN,KAAMrU,EACN,OAAA2N,CACF,CACmC,CACrC,EACIwG,GAAW9S,GACO,yEACD,KAAKA,CAAG,EAIzBkT,EAAc,aACdC,GAAoB,IACpBC,GAAqB,aACrBC,GAAa,QACbC,GAAY,KAAO,KACnBC,GAAY,EAAID,GAChBE,GAAa,OAAO,KAAK,GAAI,MAAM,EACnCC,GAAoB,CAACC,EAAY1B,EAAuB,4BAA8B,CACxF,MAAM,IAAIK,GAAwB,GAAGa,CAAW,gCAAgCQ,CAAS,EAAE,CAC7F,EACIC,GAAc,CAACC,EAAU,KAAO,CAClC,GAAIA,EAAQ,KAAK,IAAM,IAAMA,IAAY,MAAQ,OAAOA,EAAY,KAAeA,EAAQ,OAAS,KAAOA,IAAY,KACrH,MAAM,IAAI3B,EAAgB,GAAGiB,CAAW,kDAAmDlB,EAAuB,gBAAgB,CAEtI,EACI6B,GAAa,KAAM,CACrB,YAAYC,EAAS,CACnB,KAAK,WAAcrR,GAAS,CAC1B,IAAMsR,EAAiB,CAAC,cAAe,kBAAmB,WAAY,YAAY,EAClF,QAAWrR,KAASqR,EAClB,GAAI,CAACtR,EAAKC,CAAK,EACb,MAAM,IAAIuP,EAAgB,GAAGiB,CAAW,KAAKxQ,CAAK,eAAgBsP,EAAuB,gBAAgB,CAG/G,EAKA,KAAK,GAAK,IACD,KAAK,IAEd,KAAK,WAAW8B,CAAO,EACvB,KAAK,SAA2B,IAAI,IACpC,KAAK,IAAM,IAAI/C,GAAE+C,CAAO,EACxB,KAAK,WAAaA,EAAQ,WAAaV,GACvC,KAAK,WAAarB,GAAa,IACjC,CAMA,MAAM,iBAAkB,CACtB,GAAI,CACF,IAAMiC,EAAS,MAAM,KAAK,IAAI,KAAKb,GAAmB,KAAK,UAAU,EACrE,OAAI,MAAM,QAAQa,CAAM,EACfA,EAAO,IAAKC,GAAUA,EAAM,IAAI,MAAM,KAAK,WAAW,OAAS,EAAG,CAACZ,GAAW,MAAM,CAAC,EACnF,OAAOW,GAAW,UAAYA,IAAW,MAAQ,aAAcA,GAAUA,EAAO,WAAa,IAC/F,CAAC,EAEH,CAAC,CACV,OAASE,EAAO,CACd,MAAM,IAAI5B,GAAiB,GAAGY,CAAW,KAAKgB,EAAM,OAAO,GAAIlC,EAAuB,kBAAkB,CAC1G,CACF,CAOA,MAAM,iBAAiB4B,EAAU,GAAI,CACnC,GAAI,CACF,OAAAD,GAAYC,CAAO,EAEZ,CAAC,CADO,MAAM,KAAK,IAAI,WAAW,GAAG,KAAK,UAAU,GAAGT,EAAiB,GAAGS,CAAO,GAAGP,EAAU,EAAE,CAE1G,OAASa,EAAO,CACd,GAAIA,EAAM,QAAQ,SAAS,WAAW,EACpC,MAAO,GAET,MAAM,IAAIjC,EAAgB,GAAGiB,CAAW,KAAKgB,EAAM,OAAO,GAAIlC,EAAuB,oBAAoB,CAC3G,CACF,CASA,MAAM,iBAAiB4B,EAAU,GAAIpO,EAAQnI,EAAO,CAAC,EAAG,CACtD,GAAI,CAGF,GAFAsW,GAAYC,CAAO,EAEf,CADW,MAAM,KAAK,iBAAiBA,CAAO,EACrC,CACX,GAAI,OAAOpO,EAAW,KAAeA,IAAW,KAC9C,GAAI,CAEF,GAAI,CADY,KAAK,WAAW,QAAQA,CAAM,EAE5C,MAAM,IAAI4M,GACR,GAAGc,CAAW,wBAAwB1N,CAAM,IAAIwM,EAAuB,uBAAuB,EAChG,CAEJ,MAAgB,CACd,MAAM,IAAII,GAAsB,GAAGc,CAAW,wBAAwB1N,CAAM,GAAIwM,EAAuB,uBAAuB,CAChI,CAEF,GAAI3U,EAAK,OAAS,GAAKmI,EAAQ,CAC7B,IAAM2O,EAAc,KAAK,WAAW,UAAU,CAAE,KAAM,QAAS,MAAO3O,CAAO,CAAC,EAC9E,MAAM,KAAK,IAAI,IAAI,GAAG,KAAK,UAAU,GAAG2N,EAAiB,GAAGS,CAAO,GAAGP,EAAU,GAAIc,EAAY,SAAS9W,CAAI,CAAC,CAChH,MACE,MAAM,KAAK,IAAI,IAAI,GAAG,KAAK,UAAU,GAAG8V,EAAiB,GAAGS,CAAO,GAAGP,EAAU,GAAIG,EAAU,EAEhG,OAAO,KAAK,WAAWI,EAASpO,EAAQ,EAAK,CAC/C,CACA,MAAM,IAAIyM,EAAgB,GAAGiB,CAAW,gBAAgBU,CAAO,kBAAmB5B,EAAuB,iBAAiB,CAC5H,OAASkC,EAAO,CACd,MAAIA,aAAiBjC,EACbiC,EAEF,IAAIjC,EAAgB,GAAGiB,CAAW,KAAKgB,EAAM,OAAO,GAAIlC,EAAuB,uBAAuB,CAC9G,CACF,CAOA,MAAM,iBAAiB4B,EAAU,GAAI,CACnC,GAAI,CAGF,GAFAD,GAAYC,CAAO,EACJ,MAAM,KAAK,iBAAiBA,CAAO,EACtC,CACV,MAAM,KAAK,IAAI,OAAO,GAAG,KAAK,UAAU,GAAGT,EAAiB,GAAGS,CAAO,GAAGP,EAAU,EAAE,EACrF,IAAMe,EAAU,MAAM,KAAK,iBAAiBR,CAAO,EACnD,GAAI,OAAOQ,GAAY,UAAW,CAChC,GAAI,CAACA,EACH,YAAK,SAAS,OAAOR,CAAO,EACrB,GAET,MAAM,IAAI3B,EAAgB,GAAGiB,CAAW,iCAAiCU,CAAO,GAAI5B,EAAuB,kBAAkB,CAC/H,CACA,MAAM,IAAIM,GAAiB,GAAGY,CAAW,iCAAiCU,CAAO,GAAI5B,EAAuB,kBAAkB,CAChI,CACA,MAAM,IAAIC,EAAgB,GAAGiB,CAAW,gBAAgBU,CAAO,kBAAmB5B,EAAuB,uBAAuB,CAClI,OAASkC,EAAO,CACd,MAAIA,aAAiB5B,GACb4B,EAEF,IAAIjC,EACR,GAAGiB,CAAW,kCAAkCgB,EAAM,OAAO,GAC7DlC,EAAuB,uBACzB,CACF,CACF,CASA,MAAM,WAAW4B,EAAU,GAAIpO,EAAQ6O,EAAa,GAAM,CACxD,GAAI,CACFV,GAAYC,CAAO,EACnB,IAAMU,EAAU,GAAG,KAAK,UAAU,GAAGnB,EAAiB,GAAGS,CAAO,GAAGP,EAAU,GAE7E,GAAI,CADW,MAAM,KAAK,IAAI,WAAWiB,CAAO,EACnC,CACX,GAAI,CAACD,EACH,MAAM,IAAIpC,EAAgB,GAAGiB,CAAW,gBAAgBU,CAAO,kBAAmB5B,EAAuB,oBAAoB,EAE/H,MAAM,KAAK,IAAI,IAAIsC,EAASd,EAAU,CACxC,CACA,IAAMe,EAAY/O,GAAU,KAAK,SAAS,IAAIoO,CAAO,GAAK,OAC1D,OAAO,IAAIY,GAAWZ,EAASW,EAAW,KAAK,IAAK,KAAK,UAAU,CACrE,OAASL,EAAO,CACd,MAAIA,EAAM,QAAQ,SAAS,cAAc,EACjC,IAAI9B,GACR,GAAGc,CAAW,8BAA8BgB,EAAM,OAAO,GACzDlC,EAAuB,uBACzB,EAEI,IAAIC,EAAgB,GAAGiB,CAAW,KAAKgB,EAAM,OAAO,GAAIlC,EAAuB,oBAAoB,CAC3G,CACF,CACF,EACIwC,GAAa,MAAMC,EAAY,CACjC,YAAYb,EAAU,GAAIpO,EAAQkP,EAAIC,EAAYvB,GAAoBwB,EAAY,GAAOC,EAAYtB,GAAW,CAC9G,KAAK,SAAW,KAAO,CACrB,QAAS,KAAK,SACd,GAAI,KAAK,IACT,OAAQ,KAAK,QACb,UAAW,KAAK,WAChB,SAAU,KAAK,UACf,UAAW,KAAK,WAChB,UAAW,KAAK,WAChB,UAAW,KAAK,UAClB,GACA,KAAK,SAAYuB,GAAU,CACzB,KAAK,SAAWA,EAAM,QACtB,KAAK,QAAUA,EAAM,OACrB,KAAK,IAAMA,EAAM,GACjB,KAAK,WAAaA,EAAM,UACxB,KAAK,UAAYA,EAAM,SACvB,KAAK,WAAaA,EAAM,UACxB,KAAK,WAAaA,EAAM,UACxB,KAAK,WAAaA,EAAM,SAC1B,EACA,KAAK,aAAgBF,GAAc,CACjC,KAAK,WAAaA,CACpB,EACA,KAAK,aAAe,IACX,KAAK,WAEd,KAAK,cAAgB,IACZ,KAAK,QAEd,KAAK,cAAiBpP,GAAW,CAC/B,KAAK,QAAUwN,GAAsBxN,CAAM,EAC3C,KAAK,UAAY,OAAOA,EAAW,IAAc,KAAO,KAAK,WAAW,UAAUA,CAAM,CAC1F,EACA,KAAK,SAAWoO,EAAQ,KAAK,EAC7B,KAAK,IAAMc,EACX,KAAK,QAAU1B,GAAsBxN,CAAM,EAC3C,KAAK,WAAamP,EAClB,KAAK,WAAaC,EAClB,KAAK,WAAaC,GAAatB,GAC/B,KAAK,IAAI,yBAAyB,KAAK,UAAU,EACjD,KAAK,WAAaxB,GAAa,KAC/B,KAAK,UAAY,GACjB,KAAK,WAAa,CAAC,EACnB,KAAK,UAAY,OAAOvM,EAAW,IAAc,KAAO,KAAK,WAAW,UAAUA,CAAM,EACxF,KAAK,KAAO,GAAG,KAAK,UAAU,GAAG2N,EAAiB,GAAG,KAAK,QAAQ,GAAGE,EAAU,EACjF,CACA,MAAM,WAAY,CAChB,GAAI,CACF,GAAI,KAAK,YAAc,MAAQ,OAAO,KAAK,UAAc,IACvD,MAAM,IAAIpB,EACR,GAAGiB,CAAW,0DACdlB,EAAuB,uBACzB,EAEF,GAAM,CAAE,KAAA+C,EAAM,KAAA1X,CAAK,EAAI,MAAM,KAAK,IAAI,kBAAkB,KAAK,KAAM,CAAE,gBAAiB,KAAK,SAAU,CAAC,EACtG,GAAIA,IAAS,KACX,OAAO,KAAK,WAEd,KAAK,UAAY0X,IAAS,KAAO,KAAK,UAAYA,EAClD,IAAMZ,EAAc,KAAK,WAAW,UAAU,CAAE,KAAM,QAAS,MAAO,KAAK,SAAU,CAAC,EACtF,GAAI9W,EAAK,OAAS,KAAK,WACrB,YAAK,WAAaA,EAAK,OAAS,EAAI8W,EAAY,WAAW,OAAO,KAAK9W,EAAM,MAAM,CAAC,EAAI,CAAC,EAClF,KAAK,WAEd,IAAI2X,EAAS,KAAK,WACdC,EAAY,CAAC,OAAO,KAAK5X,EAAM,MAAM,CAAC,EACtC6X,EAAS,GACb,KAAOA,GAAQ,CACb,IAAMC,EAAmB,MAAM,KAAK,IAAI,YAAY,KAAK,KAAM,GAAOH,EAAQA,EAAS,KAAK,UAAU,EAChGI,EAAe,MAAMD,EAAiB,KAAK,EACjDF,EAAU,KAAK,OAAO,KAAKG,EAAc,MAAM,CAAC,EAChDJ,GAAU,KAAK,WACO,SAASG,EAAiB,QAAQ,IAAI,gBAAgB,GAAKC,EAAa,OAAO,SAAS,CAAC,EAC3F,KAAK,aACvBF,EAAS,GAEb,CACA,IAAMG,EAAe,OAAO,OAAOJ,CAAS,EAC5C,YAAK,WAAad,EAAY,WAAWkB,CAAY,EAC9C,KAAK,UACd,OAASnB,EAAO,CACd,GAAIA,EAAM,SAAS,EAAE,QAAQ,iCAAiC,EAAI,GAChE,YAAK,WAAa,CAAC,EACZ,KAAK,WAEd,MAAM,IAAI5B,GAAiB,GAAGY,CAAW,0BAA0BgB,EAAM,OAAO,GAAIlC,EAAuB,kBAAkB,CAC/H,CACF,CACA,MAAM,UAAU3U,EAAM,CACpB,GAAI,CACF,GAAI,KAAK,YAAc,MAAQ,OAAO,KAAK,UAAc,IACvD,MAAM,IAAI4U,EACR,GAAGiB,CAAW,0DACdlB,EAAuB,uBACzB,EAEF,IAAMmC,EAAc,KAAK,WAAW,UAAU,CAAE,KAAM,QAAS,MAAO,KAAK,SAAU,CAAC,EAChFmB,EAAajY,EAAK,OAAS,EAAI8W,EAAY,SAAS9W,CAAI,EAAImW,GAClE,GAAI,KAAK,YAAc,KAAK,YAAc,GAAI,CAC5C,IAAM+B,EAAc,MAAM,KAAK,IAAI,QAAQ,KAAK,IAAI,EACpD,GAAIA,IAAgB,MAAQA,IAAgB,KAAK,UAC/C,MAAO,EAEX,CACA,IAAMC,EAAO,MAAM,KAAK,IAAI,IAAI,KAAK,KAAMF,CAAU,EACrD,GAAI,OAAOE,GAAS,UAAY,WAAYA,GAAQA,EAAK,SAAW,IAClE,MAAM,IAAIlD,GAAiB,GAAGY,CAAW,wBAAyBlB,EAAuB,kBAAkB,EAE7G,IAAMyD,EAAUD,EAAK,SAAS,IAAI,MAAM,GAAK,GAC7C,OAAIC,GAAWA,EAAQ,OAAS,IAC9B,KAAK,UAAY,KAAK,IAAI,aAAaA,CAAO,EAC9C,KAAK,WAAapY,GAEb,EACT,OAAS6W,EAAO,CACd,MAAIA,aAAiB5B,GACb4B,EAEF,IAAIjC,EAAgB,GAAGiB,CAAW,KAAKgB,EAAM,OAAO,GAAIlC,EAAuB,eAAe,CACtG,CACF,CAQA,MAAM,OAAO0D,EAAKlQ,EAAQ,CACxB,GAAI,CACF,GAAsBkQ,GAAQ,KAC5B,MAAM,IAAIzD,EAAgB,GAAGiB,CAAW,oCAAqClB,EAAuB,YAAY,EAElH,GAAI,OAAO0D,GAAQ,UAAY,CAAC,MAAM,QAAQA,CAAG,EAC/C,MAAM,IAAIrD,GACR,GAAGa,CAAW,2CACdlB,EAAuB,yBACzB,EAEF,IAAMvH,EAAS,MAAM,QAAQiL,CAAG,EAAYA,EAAR,CAACA,CAAG,EAClCC,EAAenQ,EAASwN,GAAsBxN,CAAM,EAAI,KAAK,SAAWwN,GAAsBD,GAAgBtI,EAAM,CAAC,CAAC,CAAC,EACvHmL,EAAW,KAAK,WAAW,UAAUD,CAAY,EACvD,GAAI,CAACC,EACH,MAAM,IAAIxD,GACR,GAAGc,CAAW,4DACdlB,EAAuB,uBACzB,EAEF,KAAK,UAAY4D,EACjB,IAAMvY,EAAO,MAAM,KAAK,UAAU,EAClC,QAAS4F,KAAQwH,EAAO,CACtB,GAAI,OAAOxH,GAAS,UAAYA,IAAS,KACvC,MAAM,IAAIoP,GACR,GAAGa,CAAW,kEACdlB,EAAuB,yBACzB,EAOF,GALA/O,EAAK,IAAMA,EAAK,KAAO,MAAM0P,GAAa,EACtB,KAAK,UAAU,QAAQ1P,EAAM,CAC/C,UAAWwQ,GACX,mBAAoB,EACtB,CAAC,IACmB,GAClBpW,EAAK,KAAK4F,CAAI,MAEd,OAAM,IAAIoP,GAAwB,GAAGa,CAAW,+BAAgClB,EAAuB,yBAAyB,CAEpI,CAEA,GAAI,CADY,MAAM,KAAK,UAAU3U,CAAI,EAEvC,MAAM,IAAIiV,GAAiB,GAAGY,CAAW,8BAA+BlB,EAAuB,kBAAkB,EAEnH,YAAK,cAAc2D,CAAY,EACxBlL,CACT,OAASyJ,EAAO,CACd,MAAIA,EAAM,QAAQ,SAAS,cAAc,EACjC,IAAI9B,GACR,GAAGc,CAAW,8BAA8BgB,EAAM,OAAO,GACzDlC,EAAuB,uBACzB,EAEEkC,aAAiBjC,EACbiC,EAEF,IAAIjC,EAAgB,GAAGiB,CAAW,6BAA6BgB,EAAM,OAAO,GAAIlC,EAAuB,YAAY,CAC3H,CACF,CAUA,MAAM,KAAKU,EAAQ,CAAC,EAAGoB,EAAU,CAAC,EAAG,CACnC,GAAI,CACF,GAAwBpB,GAAU,KAChC,MAAM,IAAIT,EAAgB,GAAGiB,CAAW,iCAAkClB,EAAuB,gBAAgB,EAEnH,IAAM3U,EAAO,MAAM,KAAK,UAAU,EAC5BwY,EAAQ/B,EAAQ,OAAS,OAAS,SAAS,OAAOA,EAAQ,IAAI,EAAG,EAAE,EAAI,EACvEgC,EAAMhC,EAAQ,QAAU,OAAS+B,EAAQ,SAAS,OAAO/B,EAAQ,KAAK,EAAG,EAAE,EAAI,OAErF,OADqBzW,EAAK,OAAQqY,GAAQlD,GAAakD,EAAKhD,CAAK,CAAC,EAAE,MAAMmD,EAAOC,CAAG,CAEtF,OAAS5B,EAAO,CACd,MAAM,IAAIjC,EAAgB,GAAGiB,CAAW,4BAA4BgB,EAAM,OAAO,GAAIlC,EAAuB,UAAU,CACxH,CACF,CAOA,MAAM,QAAQU,EAAQ,CAAC,EAAG,CACxB,GAAI,CACF,GAAIA,IAAU,KACZ,MAAM,IAAIT,EAAgB,GAAGiB,CAAW,yBAA0BlB,EAAuB,gBAAgB,EAG3G,OADe,MAAM,KAAK,KAAKU,EAAO,CAAE,MAAO,CAAE,CAAC,GACpC,CAAC,GAAK,IACtB,OAASwB,EAAO,CACd,MAAIA,aAAiBjC,EACbiC,EAEF,IAAIjC,EAAgB,GAAGiB,CAAW,+BAA+BgB,EAAM,OAAO,GAAIlC,EAAuB,cAAc,CAC/H,CACF,CAWA,MAAM,OAAOU,EAAQ,CAAC,EAAGqD,EAAS,CAAC,EAAGjC,EAAU,CAAC,EAAG,CAClD,GAAI,CACF,GAAwBpB,GAAU,MAAQqD,IAAW,QAAUA,IAAW,KACxE,MAAM,IAAI9D,EACR,GAAGiB,CAAW,oDACdlB,EAAuB,gBACzB,EAEF,GAAI,CAAC,KAAK,UACR,MAAM,IAAII,GACR,GAAGc,CAAW,8CACdlB,EAAuB,uBACzB,EAEF,IAAM3U,EAAO,MAAM,KAAK,UAAU,EAClC,GAAIA,EAAK,SAAW,EAAG,MAAO,GAC9B,IAAI2Y,EAAe,EACnB,QAASjY,EAAI,EAAGA,EAAIV,EAAK,OAAQU,IAC/B,GAAIyU,GAAanV,EAAKU,CAAC,EAAG2U,CAAK,EAAG,CAChC,IAAMuD,EAAa,CAAE,GAAG5Y,EAAKU,CAAC,EAAG,GAAGgY,CAAO,EAK3C,GAJgB,KAAK,UAAU,QAAQE,EAAY,CACjD,UAAWxC,GACX,mBAAoB,EACtB,CAAC,IACe,GACdpW,EAAKU,CAAC,EAAIkY,EACVD,QAEA,OAAM,IAAI3D,GACR,GAAGa,CAAW,+BACdlB,EAAuB,yBACzB,CAEJ,CAEF,GAAIgE,EAAe,GAEjB,GAAI,CADY,MAAM,KAAK,UAAU3Y,CAAI,EAEvC,MAAM,IAAIiV,GAAiB,GAAGY,CAAW,8BAA+BlB,EAAuB,kBAAkB,UAE1G8B,GAAW,WAAYA,GAAWA,EAAQ,OAAQ,CAE3D,GAAI,CADY,MAAM,KAAK,OAAOiC,CAAM,EAEtC,MAAM,IAAIzD,GAAiB,GAAGY,CAAW,8BAA+BlB,EAAuB,kBAAkB,EAEnHgE,EAAe,CACjB,CACA,OAAOA,CACT,OAAS9B,EAAO,CACd,MAAIA,aAAiB5B,GACb4B,EAEF,IAAIjC,EAAgB,GAAGiB,CAAW,8BAA8BgB,EAAM,OAAO,GAAIlC,EAAuB,YAAY,CAC5H,CACF,CAWA,MAAM,UAAUU,EAAQ,CAAC,EAAGqD,EAAS,CAAC,EAAGjC,EAAU,CAAC,EAAG,CACrD,GAAI,CACF,GAAwBpB,GAAU,MAAQqD,IAAW,QAAUA,IAAW,KACxE,MAAM,IAAI9D,EAAgB,GAAGiB,CAAW,sBAAuBlB,EAAuB,gBAAgB,EAExG,GAAI,CAAC,KAAK,UACR,MAAM,IAAII,GACR,GAAGc,CAAW,8CACdlB,EAAuB,uBACzB,EAEF,IAAM3U,EAAO,MAAM,KAAK,UAAU,EAClC,GAAIA,EAAK,SAAW,EAAG,MAAO,GAC9B,IAAM6Y,EAAW7Y,EAAK,UAAWqY,GAAQlD,GAAakD,EAAKhD,CAAK,CAAC,EACjE,GAAIwD,IAAa,GAAI,CACnB,IAAMD,EAAa,CAAE,GAAG5Y,EAAK6Y,CAAQ,EAAG,GAAGH,CAAO,EAKlD,GAJgB,KAAK,UAAU,QAAQE,EAAY,CACjD,UAAWxC,GACX,mBAAoB,EACtB,CAAC,IACe,GAAM,CAGpB,GAFApW,EAAK6Y,CAAQ,EAAID,EAEb,CADY,MAAM,KAAK,UAAU5Y,CAAI,EAEvC,MAAM,IAAIiV,GAAiB,GAAGY,CAAW,8BAA+BlB,EAAuB,kBAAkB,EAEnH,MAAO,EACT,KACE,OAAM,IAAIK,GAAwB,GAAGa,CAAW,+BAAgClB,EAAuB,yBAAyB,CAEpI,CACA,GAAI8B,GAAW,WAAYA,GAAWA,EAAQ,OAAQ,CAEpD,GAAI,CADY,MAAM,KAAK,OAAOiC,CAAM,EAEtC,MAAM,IAAIzD,GAAiB,GAAGY,CAAW,8BAA+BlB,EAAuB,kBAAkB,EAEnH,MAAO,EACT,CACA,MAAO,EACT,OAASkC,EAAO,CACd,MAAIA,aAAiBjC,EACbiC,EAEF,IAAIjC,EAAgB,GAAGiB,CAAW,iCAAiCgB,EAAM,OAAO,GAAIlC,EAAuB,gBAAgB,CACnI,CACF,CAQA,MAAM,OAAOU,EAAQ,CAAC,EAAG,CACvB,GAAI,CACF,GAAwBA,GAAU,KAChC,MAAM,IAAIT,EAAgB,GAAGiB,CAAW,sBAAuBlB,EAAuB,gBAAgB,EAExG,IAAM3U,EAAO,MAAM,KAAK,UAAU,EAClC,GAAIA,EAAK,SAAW,EAAG,MAAO,GAC9B,IAAM8Y,EAAgB9Y,EAAK,OACrB+Y,EAAU/Y,EAAK,OAAQqY,GAAQ,CAAClD,GAAakD,EAAKhD,CAAK,CAAC,EAE9D,GAAI,CADY,MAAM,KAAK,UAAU0D,CAAO,EAE1C,MAAM,IAAI9D,GAAiB,GAAGY,CAAW,8BAA+BlB,EAAuB,kBAAkB,EAEnH,OAAOmE,EAAgBC,EAAQ,MACjC,OAASlC,EAAO,CACd,MAAIA,aAAiB5B,GACb4B,EAEF,IAAIjC,EAAgB,GAAGiB,CAAW,8BAA8BgB,EAAM,OAAO,GAAIlC,EAAuB,YAAY,CAC5H,CACF,CAOA,MAAM,WAAY,CAChB,GAAI,CAEF,IAAMmE,GADO,MAAM,KAAK,UAAU,GACP,OAE3B,GAAI,CADY,MAAM,KAAK,UAAU,CAAC,CAAC,EAErC,MAAM,IAAI7D,GAAiB,GAAGY,CAAW,8BAA+BlB,EAAuB,kBAAkB,EAEnH,OAAOmE,CACT,OAASjC,EAAO,CACd,MAAIA,aAAiB5B,GACb4B,EAEF,IAAIjC,EAAgB,GAAGiB,CAAW,8BAA8BgB,EAAM,OAAO,GAAIlC,EAAuB,YAAY,CAC5H,CACF,CAOA,MAAM,MAAMU,EAAQ,CAAC,EAAG,CACtB,GAAI,CAEF,OADa,MAAM,KAAK,KAAKA,CAAK,GACtB,MACd,OAASwB,EAAO,CACd,MAAM,IAAIjC,EAAgB,GAAGiB,CAAW,6BAA6BgB,EAAM,OAAO,GAAIlC,EAAuB,WAAW,CAC1H,CACF,CACA,MAAM,iBAAiBqE,EAAYC,EAAY,KAAK,QAAS,CAC3D,GAAI,CAGF,GAFA3C,GAAY0C,CAAU,EACP,MAAM,KAAK,IAAI,WAAW,GAAG,KAAK,UAAU,GAAGlD,EAAiB,GAAGkD,CAAU,GAAGhD,EAAU,EAAE,EAEzG,MAAM,IAAIpB,EAAgB,GAAGiB,CAAW,gBAAgBmD,CAAU,kBAAmBrE,EAAuB,iBAAiB,EAE/H,IAAMxM,EAAS8Q,GAAa,KAAK,cAAc,EACzCjZ,EAAO,MAAM,KAAK,UAAU,EAC5BkZ,EAAY,IAAI9B,GAAY4B,EAAY7Q,EAAQ,KAAK,IAAK,KAAK,WAAY,KAAK,WAAY,KAAK,UAAU,EACjH,aAAM+Q,EAAU,UAAUlZ,CAAI,EAC9B,MAAM,KAAK,IAAI,OAAO,GAAG,KAAK,UAAU,GAAG8V,EAAiB,GAAG,KAAK,QAAQ,GAAGE,EAAU,EAAE,EACpFkD,CACT,OAASrC,EAAO,CACd,MAAIA,aAAiBjC,EACbiC,EAEF,IAAIjC,EACR,GAAGiB,CAAW,+BAA+BgB,EAAM,OAAO,GAC1DlC,EAAuB,uBACzB,CACF,CACF,CACF", + "names": ["__import_UTIL", "__import_BUFFER", "randomUUID", "__create", "__defProp", "__getOwnPropDesc", "__getOwnPropNames", "__getProtoOf", "__hasOwnProp", "__commonJS", "cb", "mod", "__getOwnPropNames", "__copyProps", "to", "from", "except", "desc", "key", "__hasOwnProp", "__defProp", "__getOwnPropDesc", "__toESM", "isNodeMode", "target", "__create", "__getProtoOf", "require_utils", "exports", "module", "POOL", "BufferPool", "newBuffer", "size", "bufferFrom", "data", "enc", "capitalize", "s", "compare", "n1", "n2", "jsonEquals", "val1", "val2", "i", "l", "keys1", "keys2", "toMap", "arr", "fn", "obj", "elem", "hasDuplicates", "isType", "any", "typeName", "unqualifyName", "name", "parts", "abstractFunction", "len", "maxLen", "Tap", "buf", "pos", "b2", "n", "k2", "h", "f2", "fk", "m2", "d", "fixed", "c1", "c2", "str", "tap", "l1", "p1", "l2", "p2", "b1", "res", "j2", "neg", "invert", "require_values", "utils", "util", "__import_UTIL", "fromJSON", "type", "opts", "clone", "fromDefaultJSON", "toJSON", "mode", "Cloner", "Builder", "details", "msg", "typeInfo", "err", "val", "path", "info", "joinPath", "builder", "names", "type2", "isBufferType", "isAbstractLong", "extraFields", "fieldNames", "fieldName", "missingFields", "args", "field", "fieldAny", "fieldVal", "fieldPath", "fieldValBuilder", "defaultVal", "Record", "item", "itemPath", "itemBuilder", "keys", "anyValue", "valuePath", "valueBuilder", "unionType", "isWrapped", "branchType", "reason", "branchPath", "branchBuilder", "strs", "part", "require_types", "values", "buffer", "__import_BUFFER", "debug", "TYPES", "ArrayType", "BooleanType", "BytesType", "DoubleType", "EnumType", "RecordType", "FixedType", "FloatType", "IntType", "LongType", "MapType", "NullType", "StringType", "NAME_PATTERN", "TAP", "LOGICAL_TYPE", "UNDERLYING_TYPES", "Type", "schema", "scope", "namespace", "maybeQualify", "isPrimitive", "registry", "Scope", "UnionType2", "wrapUnions", "WrappedUnionType", "UnwrappedUnionType", "DerivedType", "logicalType", "types", "isAmbiguous", "Type2", "v2", "isValidName", "expanded", "numWrappedUnions", "isValidWrappedUnion", "branchTypes", "bucketized", "bucket", "getTypeBucket", "bucketTypes", "buckets", "augmented", "combineNumbers", "combineStrings", "combineBuffers", "t", "combineObjects", "buf1", "buf2", "resolver", "Resolver", "resolvers", "index", "resolver2", "noCheck", "readValue", "allowUndeclaredFields", "Branch", "flags", "errorHook", "hook", "getClassName", "derefedSchema", "attr", "body", "toString", "self", "unwrap", "PrimitiveType", "noFreeze", "throwInvalidError", "tap1", "tap2", "isSafeLong", "methods", "noUnpack", "mapping", "AbstractLongType", "UnionType", "branch", "branchName", "getValueBucket", "logicalBranches", "typeResolver", "index1", "index2", "name1", "name2", "symbol", "symbols", "getAliases", "values2", "readArraySize", "rsv", "f3", "items", "match", "Field", "errorStack", "plainRecord", "outerArgs", "innerArgs", "ds", "innerBody", "defaultValue", "hasDefault", "stackField", "outerBody", "checkValid", "isValid", "toBuffer", "toObject", "wrap", "field2", "i2", "value", "rFields", "wFields", "wFieldsMap", "matches", "fieldResolver", "lazyIndex", "uname", "indent", "fields", "order", "fieldType", "fieldSchema", "fieldOrder", "fieldAliases", "fieldDoc", "LogicalType", "ret", "map", "obj1", "obj2", "isVisited", "writerType", "readerType", "step", "lazy", "qualifyName", "tail", "aliases", "ns", "unqualified", "typeNames", "superIndex", "superType", "typeSymbols", "allTypes", "fieldTypes", "fieldDefaults", "isValidRecord", "fieldDefault", "childScope", "fieldType2", "fieldDefault2", "unionTypes", "require_lib", "x", "K", "O", "v", "E", "W", "M", "w", "X", "f", "Z", "V", "J", "m", "T", "P", "C", "u", "ee", "te", "se", "re", "j", "$", "L", "k", "D", "B", "F", "G", "z", "Q", "ne", "oe", "p", "q", "y", "N", "e", "r", "o", "a", "c", "H", "U", "_", "g", "A", "R", "S", "Y", "b", "I", "import_types", "lowstorage_ERROR_CODES", "lowstorageError", "message", "code", "SchemaValidationError", "DocumentValidationError", "S3OperationError", "operation", "matchesQuery", "document", "query", "generateUUID", "randomUUID", "_getAvroSchema", "_isUUID", "inferAvroSchema", "ensureIdFieldInSchema", "idField", "MODULE_NAME", "DEFAULT_DELIMITER", "PROJECT_DIR_PREFIX", "COL_SUFFIX", "CHUNG_1MB", "CHUNG_5MB", "EMPTY_DATA", "errorValidationFn", "errorCode", "_hasColName", "colName", "lowstorage", "options", "requiredFields", "listed", "entry", "error", "wrapperType", "exists2", "autoCreate", "colPath", "colSchema", "Collection", "_Collection", "s3", "dirPrefix", "safeWrite", "chunkSize", "props", "etag", "offset", "bufferArr", "repeat", "nextDataResponse", "nextDataBody", "bufferedData", "dataBuffer", "currentETag", "resp", "newETag", "doc", "schemaWithId", "avroType", "start", "end", "update", "updatedCount", "updatedDoc", "docIndex", "initialLength", "newData", "newColName", "newSchema", "createNew"] +} diff --git a/esbuild.config.js b/esbuild.config.js new file mode 100644 index 0000000..1f1afa1 --- /dev/null +++ b/esbuild.config.js @@ -0,0 +1,26 @@ +// import { build as _build } from 'esbuild'; +// // import { polyfillNode } from 'esbuild-plugin-polyfill-node'; + +// _build({ +// entryPoints: ['lib/lowstorage.js'], +// bundle: true, +// minify: true, +// sourcemap: true, +// platform: 'node', +// target: 'node16', +// format: 'esm', +// treeShaking: true, +// outfile: 'build/lowstorage.js', +// // plugins: [ +// // polyfillNode({ +// // buffer: true, +// // process: false, +// // crypto: false, +// // }), +// // ], +// }) +// .then((value) => console.log('Build complete', value)) +// .catch((err) => { +// console.error(err); +// process.exit(1); +// }); diff --git a/importify-esbuild-output.js b/importify-esbuild-output.js new file mode 100644 index 0000000..f60f0de --- /dev/null +++ b/importify-esbuild-output.js @@ -0,0 +1,15 @@ +import { readFileSync } from 'fs'; +var arg = process.argv[2]; +var data = !arg || arg == '-' ? readFileSync(0, 'utf-8') : readFileSync(arg, 'utf-8'); +var rx = + /\b__require\("(_http_agent|_http_client|_http_common|_http_incoming|_http_outgoing|_http_server|_stream_duplex|_stream_passthrough|_stream_readable|_stream_transform|_stream_wrap|_stream_writable|_tls_common|_tls_wrap|assert|async_hooks|buffer|child_process|cluster|console|constants|crypto|dgram|diagnostics_channel|dns|domain|events|fs|http|http2|https|inspector|module|net|os|path|perf_hooks|process|punycode|querystring|readline|repl|stream|string_decoder|sys|timers|tls|trace_events|tty|url|util|v8|vm|wasi|worker_threads|zlib)"\)/gm; +var modules = new Map(); +var out = data.replace(rx, function (req, mod) { + var id = '__import_' + mod.toUpperCase(); + modules.set(mod, id); + return id; +}); +modules.forEach(function (val, key) { + console.log('import %s from %s;', val, JSON.stringify(key)); +}); +console.log('\n%s', out); diff --git a/lib/errors.d.ts b/lib/errors.d.ts new file mode 100644 index 0000000..ad1416e --- /dev/null +++ b/lib/errors.d.ts @@ -0,0 +1,19 @@ +declare const lowstorage_ERROR_CODES: Record; +export type errorCode = (typeof lowstorage_ERROR_CODES)[keyof typeof lowstorage_ERROR_CODES]; +declare class lowstorageError extends Error { + code: errorCode; + constructor(message: string, code?: errorCode); +} +declare class CollectionNotFoundError extends lowstorageError { + constructor(collectionName: any, code?: errorCode); +} +declare class SchemaValidationError extends lowstorageError { + constructor(message: string, code?: errorCode); +} +declare class DocumentValidationError extends lowstorageError { + constructor(message: string, code?: errorCode); +} +declare class S3OperationError extends lowstorageError { + constructor(message: string, operation: string); +} +export { lowstorage_ERROR_CODES, lowstorageError, CollectionNotFoundError, SchemaValidationError, DocumentValidationError, S3OperationError, }; diff --git a/lib/errors.js b/lib/errors.js new file mode 100644 index 0000000..9b4e51b --- /dev/null +++ b/lib/errors.js @@ -0,0 +1,55 @@ +'use strict'; +const lowstorage_ERROR_CODES = { + MISSING_ARGUMENT: 'MISSING_ARGUMENT', + COLLECTION_EXISTS: 'COLLECTION_EXISTS', + CREATE_COLLECTION_ERROR: 'CREATE_COLLECTION_ERROR', + RENAME_COLLECTION_ERROR: 'RENAME_COLLECTION_ERROR', + REMOVE_COLLECTION_ERROR: 'REMOVE_COLLECTION_ERROR', + UPDATE_COLLECTION_SCHEMA_ERROR: 'UPDATE_COLLECTION_SCHEMA_ERROR', + COLLECTION_NOT_FOUND: 'COLLECTION_NOT_FOUND', + SCHEMA_VALIDATION_ERROR: 'SCHEMA_VALIDATION_ERROR', + DOCUMENT_VALIDATION_ERROR: 'DOCUMENT_VALIDATION_ERROR', + S3_OPERATION_ERROR: 'S3_OPERATION_ERROR', + FIND_ERROR: 'FIND_ERROR', + FIND_ONE_ERROR: 'FIND_ONE_ERROR', + SAVE_DATA_ERROR: 'SAVE_DATA_ERROR', + INSERT_ERROR: 'INSERT_ERROR', + UPDATE_ERROR: 'UPDATE_ERROR', + UPDATE_ONE_ERROR: 'UPDATE_ONE_ERROR', + DELETE_ERROR: 'DELETE_ERROR', + COUNT_ERROR: 'COUNT_ERROR', + UNKNOWN_ERROR: 'UNKNOWN_ERROR', +}; +class lowstorageError extends Error { + constructor(message, code = lowstorage_ERROR_CODES.UNKNOWN_ERROR) { + super(`lowstorageError: ${message} :: code: ${code}`); + this.name = this.constructor.name; + this.code = code; + Error.captureStackTrace(this, this.constructor); + } +} +class CollectionNotFoundError extends lowstorageError { + constructor(collectionName, code = lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND) { + super(`Collection ${collectionName} not found`, code); + super(`Collection ${collectionName} not found`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND); + } +} +class SchemaValidationError extends lowstorageError { + constructor(message, code = lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR) { + super(message, code); + super(message, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR); + } +} +class DocumentValidationError extends lowstorageError { + constructor(message, code = lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR) { + super(message, code); + super(message, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR); + } +} +class S3OperationError extends lowstorageError { + constructor(message, operation) { + super(`S3 ${operation} operation failed: ${message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); + } +} +export { lowstorage_ERROR_CODES, lowstorageError, CollectionNotFoundError, SchemaValidationError, DocumentValidationError, S3OperationError, }; +//# sourceMappingURL=errors.js.map \ No newline at end of file diff --git a/lib/errors.js.map b/lib/errors.js.map new file mode 100644 index 0000000..ba0fee3 --- /dev/null +++ b/lib/errors.js.map @@ -0,0 +1 @@ +{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,MAAM,sBAAsB,GAA2B;IACtD,gBAAgB,EAAE,kBAA2B;IAC7C,iBAAiB,EAAE,mBAA4B;IAC/C,uBAAuB,EAAE,yBAAkC;IAC3D,uBAAuB,EAAE,yBAAkC;IAC3D,uBAAuB,EAAE,yBAAkC;IAC3D,8BAA8B,EAAE,gCAAyC;IACzE,oBAAoB,EAAE,sBAA+B;IACrD,uBAAuB,EAAE,yBAAkC;IAC3D,yBAAyB,EAAE,2BAAoC;IAC/D,kBAAkB,EAAE,oBAA6B;IACjD,UAAU,EAAE,YAAqB;IACjC,cAAc,EAAE,gBAAyB;IACzC,eAAe,EAAE,iBAA0B;IAC3C,YAAY,EAAE,cAAuB;IACrC,YAAY,EAAE,cAAuB;IACrC,gBAAgB,EAAE,kBAA2B;IAC7C,YAAY,EAAE,cAAuB;IACrC,WAAW,EAAE,aAAsB;IACnC,aAAa,EAAE,eAAwB;CACvC,CAAC;AAIF,MAAM,eAAgB,SAAQ,KAAK;IAElC,YAAY,OAAe,EAAE,OAAkB,sBAAsB,CAAC,aAAa;QAClF,KAAK,CAAC,oBAAoB,OAAO,aAAa,IAAI,EAAE,CAAC,CAAC;QACtD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;QAClC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IACjD,CAAC;CACD;AAED,MAAM,uBAAwB,SAAQ,eAAe;IACpD,YAAY,cAAmB,EAAE,OAAkB,sBAAsB,CAAC,oBAAoB;QAC7F,KAAK,CAAC,cAAc,cAAc,YAAY,EAAE,IAAI,CAAC,CAAC;QACtD,KAAK,CAAC,cAAc,cAAc,YAAY,EAAE,sBAAsB,CAAC,oBAAoB,CAAC,CAAC;IAC9F,CAAC;CACD;AAED,MAAM,qBAAsB,SAAQ,eAAe;IAClD,YAAY,OAAe,EAAE,OAAkB,sBAAsB,CAAC,uBAAuB;QAC5F,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACrB,KAAK,CAAC,OAAO,EAAE,sBAAsB,CAAC,uBAAuB,CAAC,CAAC;IAChE,CAAC;CACD;AAED,MAAM,uBAAwB,SAAQ,eAAe;IACpD,YAAY,OAAe,EAAE,OAAkB,sBAAsB,CAAC,yBAAyB;QAC9F,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACrB,KAAK,CAAC,OAAO,EAAE,sBAAsB,CAAC,yBAAyB,CAAC,CAAC;IAClE,CAAC;CACD;AAED,MAAM,gBAAiB,SAAQ,eAAe;IAC7C,YAAY,OAAe,EAAE,SAAiB;QAC7C,KAAK,CAAC,MAAM,SAAS,sBAAsB,OAAO,EAAE,EAAE,sBAAsB,CAAC,kBAAkB,CAAC,CAAC;IAClG,CAAC;CACD;AAED,OAAO,EACN,sBAAsB,EACtB,eAAe,EACf,uBAAuB,EACvB,qBAAqB,EACrB,uBAAuB,EACvB,gBAAgB,GAChB,CAAC"} \ No newline at end of file diff --git a/lib/helpers.d.ts b/lib/helpers.d.ts new file mode 100644 index 0000000..4f78cb2 --- /dev/null +++ b/lib/helpers.d.ts @@ -0,0 +1,7 @@ +declare const matchesQuery: (document: Record, query: Record) => boolean; +declare const generateUUID: () => Promise; +declare const ensureIdFieldInSchema: (schema: Object) => Object; +declare const inferAvroSchema: (data: any[] | { + [s: string]: unknown; +} | ArrayLike, typeName?: string) => Object; +export { matchesQuery, generateUUID, inferAvroSchema, ensureIdFieldInSchema }; diff --git a/lib/helpers.js b/lib/helpers.js new file mode 100644 index 0000000..38acbe0 --- /dev/null +++ b/lib/helpers.js @@ -0,0 +1,96 @@ +'use strict'; +import { randomUUID } from 'node:crypto'; +const matchesQuery = (document, query) => { + return Object.keys(query).every((key) => document[key] === query[key]); +}; +const generateUUID = async () => { + if (typeof randomUUID !== 'undefined' && typeof randomUUID === 'function') { + return randomUUID(); + } + if (typeof crypto !== 'undefined' && typeof crypto === 'object' && typeof crypto.randomUUID === 'function') { + return crypto.randomUUID(); + } + return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) { + var r = (Math.random() * 16) | 0, v = c === 'x' ? r : (r & 0x3) | 0x8; + return v.toString(16); + }); +}; +const _getAvroSchema = (value, name = 'SubAutoGenerated') => { + switch (typeof value) { + case 'string': + if (_isUUID(value)) { + return { + type: 'string', + name: '_id', + size: 16, + logicalType: 'UUID', + }; + } + return 'string'; + case 'number': + return Number.isInteger(value) ? 'int' : 'float'; + case 'boolean': + return 'boolean'; + case 'object': + if (value === null) + return 'null'; + if (Array.isArray(value)) + return { type: 'array', items: _getAvroSchema(value[0]) }; + return inferAvroSchema(value, name); + default: + return 'string'; // Default to string for unknown types + } +}; +const ensureIdFieldInSchema = (schema) => { + const idField = { + name: '_id', + type: 'string', + size: 16, + logicalType: 'UUID', + }; + if (typeof schema === 'undefined' || schema === null) { + return schema; + } + if ('type' in schema && schema.type === 'record' && 'fields' in schema && Array.isArray(schema.fields)) { + const hasIdField = schema.fields.some((field) => field.name === '_id'); + if (!hasIdField) { + schema.fields.unshift(idField); + } + } + else if ('type' in schema && + schema.type === 'array' && + 'items' in schema && + schema.items !== null && + typeof schema.items === 'object' && + 'type' in schema.items && + schema.items.type === 'record' && + 'fields' in schema.items && + Array.isArray(schema.items.fields)) { + const hasIdField = schema.items.fields.some((field) => field.name === '_id'); + if (!hasIdField) { + schema.items.fields.unshift(idField); + } + } + return schema; +}; +const inferAvroSchema = (data, typeName = 'AutoGenerated') => { + if (Array.isArray(data)) { + data = data[0]; + } + const fields = Object.entries(data).map(([name, value]) => { + return { name, type: _getAvroSchema(value, `${typeName}.${name}`) }; + }); + const schema = { + type: 'record', + name: typeName, + fields: fields, + }; + // Ensure the _id field is present in the schema + return ensureIdFieldInSchema(schema); +}; +const _isUUID = (str) => { + const uuidV4Regex = /^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i; + return uuidV4Regex.test(str); +}; +export { matchesQuery, generateUUID, inferAvroSchema, ensureIdFieldInSchema }; +//# sourceMappingURL=helpers.js.map \ No newline at end of file diff --git a/lib/helpers.js.map b/lib/helpers.js.map new file mode 100644 index 0000000..464474b --- /dev/null +++ b/lib/helpers.js.map @@ -0,0 +1 @@ +{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/lib/lowstorage.d.ts b/lib/lowstorage.d.ts new file mode 100644 index 0000000..1a7b2e3 --- /dev/null +++ b/lib/lowstorage.d.ts @@ -0,0 +1,251 @@ +type S3Options = { + accessKeyId: string; + secretAccessKey: string; + endpoint: string; + bucketName: string; + region?: string; + logger?: any; + dirPrefix?: string; + maxRequestSizeInBytes?: number; +}; +type CollectionProps = { + colName: string; + schema: any; + s3: S3; + dirPrefix: string; + safeWrite: boolean; + chunkSize: number; + avroParse: any; + avroType: any; +}; +import { S3 } from 'ultralight-s3'; +import { lowstorage_ERROR_CODES, lowstorageError } from 'errors'; +/** + * lowstorage class for managing collections and performing operations on top of S3-compatible storages. + * @class + * @example + * const storage = new lowstorage({ + * accessKeyId: 'YOUR_ACCESS_KEY', + * secretAccessKey: 'YOUR_SECRET_KEY', + * endpoint: 'YOUR_ENDPOINT', + * bucketName: 'YOUR_BUCKET_NAME', + * region: 'YOUR_REGION', + * }); + * + * // Create a collection + * const userCol = await storage.collection('users'); + * + * // Insert a document + * await userCol.insert({ + * name: 'Kevin', + * gender: 'whatever', + * posts: [], + * }); + * + * // Show all users + * const allUsers = await userCol.find({}); + * + * // Find users with pagination (e.g., page 2, 10 users per page) + * const secondPageUsers = await userCol.find({}, { skip: 10, limit: 10 }); + * + * // Find user by ID and update name + * await userCol.update({ _id: id }, { name: 'Carlos' }); + */ +declare class lowstorage { + /** + * Create a new lowstorage instance. + * @param {Object} options - Configuration options for lowstorage. + * @param {string} options.accessKeyId - S3 access key ID. + * @param {string} options.secretAccessKey - S3 secret access key. + * @param {string} options.endpoint - S3 endpoint URL. + * @param {string} options.bucketName - S3 bucket name. + * @param {string} [options.region='auto'] - S3 region. + * @param {Object} [options.logger=null] - Logger object. + * @param {string} [options.dirPrefix=PROJECT_DIR_PREFIX] - Directory prefix for collections. + * @param {Number} [options.maxRequestSizeInBytes=CHUNG_5MB] - Chunk size for reading and writing data. AWS S3 has a minimum of 5MB per object. + * @returns {lowstorage} A new lowstorage instance. + */ + private _schemas; + private _s3; + private _dirPrefix; + private _avroParse; + constructor(options: S3Options); + _checkArgs: (args: S3Options) => void; + /** + * List all collections. + * @returns {Promise} An array of collection names. + * @throws {S3OperationError} If there's an error during S3 operation. + */ + listCollections(): Promise; + /** + * Check if a collection exists. + * @param {string} colName - The name of the collection. + * @returns {Promise} True if the collection exists, false otherwise. + * @throws {lowstorageError} If there's an error. + */ + collectionExists(colName?: string): Promise; + /** + * Create a new collection. + * @param {string} colName - The name of the collection. + * @param {Object} [schema] - The schema for the collection. + * @param {Array} [data=[]] - The initial data for the collection. + * @returns {Promise} A Promise that resolves to a Collection object. + * @throws {lowstorageError} If there's an error. + */ + createCollection(colName?: string, schema?: Object, data?: any[]): Promise; + /** + * Remove a collection. + * @param {string} colName - The name of the collection. + * @returns {Promise} A Promise that resolves to true if the collection is removed, false otherwise. + * @throws {lowstorageError} If there's an error. + */ + removeCollection(colName?: string): Promise; + /** + * Get or create a collection. + * @param {string} colName - The name of the collection. + * @param {Object} [schema] - The schema for the collection. + * @param {boolean} [autoCreate=true] - Whether to automatically create the collection if it doesn't exist. + * @returns {Promise} A Promise that resolves to a Collection object. + * @throws {lowstorageError} If there's an error. + */ + collection(colName?: string, schema?: object, autoCreate?: boolean): Promise; + /** + * Get the S3 instance associated with the lowstorage instance. + * @returns {S3} The S3 instance. Use this to perform S3 operations. Check for ultralight-s3 for more details. + */ + s3: () => S3; +} +/** + * Collection class for managing documents in a collection. + * @class + * @example + * const storage = new lowstorage({ + * accessKeyId: 'YOUR_ACCESS_KEY', + * secretAccessKey: 'YOUR_SECRET_KEY', + * endpoint: 'YOUR_ENDPOINT', + * bucketName: 'YOUR_BUCKET_NAME', + * region: 'YOUR_REGION', + * }); + * + * // Create a collection + * const userCol = await storage.collection('users'); + * + * // Insert a document + * await userCol.insert({ + * name: 'Kevin', + * gender: 'whatever', + * posts: [], + * }); + * + * // Show all users + * const allUsers = await userCol.find({}); + * + * // Find users with pagination (e.g., page 2, 10 users per page) + * const secondPageUsers = await userCol.find({}, { skip: 10, limit: 10 }); + * + * // Find user by ID and update name + * await userCol.update({ _id: id }, { name: 'Carlos' }); + */ +declare class Collection { + /** + * Create a new Collection instance. + * @param {string} colName - The name of the collection. + * @param {Object} [schema] - The Avro schema for the collection. + * @param {S3} s3 - The S3 instance. + * @param {string} [dirPrefix=PROJECT_DIR_PREFIX] - The directory prefix for the collection. + * @param {boolean} [safeWrite=false] - Whether to perform a safe write operation. It doublechecks the ETag of the object before writing. False = overwrites the object, True = only writes if the object has not been modified. + * @param {Number} [chunkSize=CHUNG_5MB] - The chunk size for reading and writing data. AWS S3 has a maximum of 5MB per object. + * @returns {Collection} A new Collection instance. + */ + private _colName; + private _schema; + private _s3; + private _dirPrefix; + private _safeWrite; + private _chunkSize; + private _avroParse; + private _lastETag; + private _dataCache; + private _avroType; + private _key; + constructor(colName: string | undefined, schema: any, s3: S3, dirPrefix?: string, safeWrite?: boolean, chunkSize?: number); + getProps: () => CollectionProps; + setProps: (props: CollectionProps) => void; + setSafeWrite: (safeWrite: boolean) => void; + getSafeWrite: () => boolean; + getAvroSchema: () => Object; + setAvroSchema: (schema: Object) => void; + _loadData(): Promise; + _saveData(data: Object[]): Promise; + /** + * Insert a document into the collection. + * @param {Object|Array} doc - The document to insert. + * @param {Object} [schema=undefined] - The schema for the document. + * @returns {Promise} A Promise that resolves to the array of inserted document(s). + * @throws {lowstorageError} If there's an error. + */ + insert(doc: Object | Array, schema?: Object): Promise; + /** + * Find documents in the collection. + * @param {Object} [query={}] - The query to filter documents. + * @param {Object} [options={}] - The options for pagination. + * @param {number} [options.skip=0] - The number of documents to skip. Default is 0. + * @param {number} [options.limit=undefined] - The maximum number of documents to return. Default is undefined, which means no limit. + * @returns {Promise} A Promise that resolves to an array of matching documents. + * @throws {lowstorageError} If there's an error. + */ + find(query?: Object, options?: Object): Promise; + /** + * Find the first document in the collection that matches the query. + * @param {Object} [query={}] - The query to filter documents. + * @returns {Promise} A Promise that resolves to the first matching document or null if no match is found. + * @throws {lowstorageError} If there's an error. + */ + findOne(query?: Object): Promise; + /** + * Update a single document in the collection that matches the query. + * @param {Object} [query={}] - The query to filter the document to update. + * @param {Object} [update={}] - The update operations to apply to the matching document. + * @returns {Promise} A Promise that resolves to number of documents updated. + * @throws {lowstorageError} If the updateOne operation fails. + * @throws {SchemaValidationError} If the schema is not defined for the collection. + * @throws {DocumentValidationError} If the updated document is invalid. + * @throws {S3OperationError} If the S3 operation fails. + */ + update(query?: Object, update?: Object, options?: Object): Promise; + /** + * Update a single document in the collection that matches the query. + * @param {Object} [query={}] - The query to filter the document to update. + * @param {Object} [update={}] - The update operations to apply to the matching document. + * @returns {Promise} A Promise that resolves to 1 if a document was updated, 0 otherwise. + * @throws {lowstorageError} If the updateOne operation fails. + * @throws {SchemaValidationError} If the schema is not defined for the collection. + * @throws {DocumentValidationError} If the updated document is invalid. + * @throws {S3OperationError} If the S3 operation fails. + */ + updateOne(query?: {}, update?: {}, options?: {}): Promise<0 | 1>; + /** + * Delete documents from the collection. + * @param {Object} [query={}] - The query to filter documents to delete. + * @returns {Promise} A Promise that resolves to the number of documents deleted. + * @throws {lowstorageError} If the delete operation fails. + * @throws {S3OperationError} If the S3 operation fails. + */ + delete(query?: Object): Promise; + /** + * Delete all documents from the collection. + * @returns {Promise} A Promise that resolves to the number of documents deleted. + * @throws {lowstorageError} If the delete operation fails. + * @throws {S3OperationError} If the S3 operation fails. + */ + deleteAll(): Promise; + /** + * Count the number of documents in the collection. + * @param {Object} [query={}] - The query to filter documents. + * @returns {Promise} A Promise that resolves to the number of documents in the collection. + * @throws {lowstorageError} If the count operation fails. + */ + count(query?: Object): Promise; + renameCollection(newColName: string, newSchema?: Object): Promise; +} +export { lowstorage, lowstorageError, lowstorage_ERROR_CODES }; diff --git a/lib/lowstorage.js b/lib/lowstorage.js index 761ab44..621ff64 100644 --- a/lib/lowstorage.js +++ b/lib/lowstorage.js @@ -1,15 +1,684 @@ -var X="AWS4-HMAC-SHA256",j="aws4_request",q="s3",ge="2",R="UNSIGNED-PAYLOAD",pe="application/octet-stream",J="application/xml",S="application/json",Re=["accessKeyId","secretAccessKey","sessionToken","password"],E="x-amz-content-sha256",Ee="x-amz-date",we="host",ye="Authorization",O="Content-Type",N="Content-Length",Y="etag",Z="last-modified",_="ultralight-s3 Module: ",me=`${_}accessKeyId must be a non-empty string`,Oe=`${_}secretAccessKey must be a non-empty string`,$e=`${_}endpoint must be a non-empty string`,Te=`${_}bucketName must be a non-empty string`,ee=`${_}key must be a non-empty string`,x=`${_}uploadId must be a non-empty string`,te=`${_}parts must be a non-empty array`,re=`${_}Each part must have a partNumber (number) and ETag (string)`,F=`${_}data must be a Buffer or string`,se=`${_}prefix must be a string`,ie=`${_}maxKeys must be a positive integer`,ae=`${_}delimiter must be a string`,oe=crypto.createHmac||(await import("node:crypto")).createHmac,ne=crypto.createHash||(await import("node:crypto")).createHash;typeof oe>"u"&&typeof ne>"u"&&console.error("ultralight-S3 Module: Crypto functions are not available, please report the issue with necessary description: https://github.com/sentienhq/ultralight-s3/issues");var Ie={contents:!0},Ae=t=>`%${t.charCodeAt(0).toString(16).toUpperCase()}`,K=t=>encodeURIComponent(t).replace(/[!'()*]/g,Ae),y=t=>K(t).replace(/%2F/g,"/"),he=class{constructor({accessKeyId:t,secretAccessKey:e,endpoint:r,bucketName:s,region:i="auto",maxRequestSizeInBytes:o=5242880,requestAbortTimeout:n=void 0,logger:u=void 0}){this.getBucketName=()=>this.bucketName,this.setBucketName=a=>{this.bucketName=a},this.getRegion=()=>this.region,this.setRegion=a=>{this.region=a},this.getEndpoint=()=>this.endpoint,this.setEndpoint=a=>{this.endpoint=a},this.getMaxRequestSizeInBytes=()=>this.maxRequestSizeInBytes,this.setMaxRequestSizeInBytes=a=>{this.maxRequestSizeInBytes=a},this.sanitizeETag=a=>L(a),this.getProps=()=>({accessKeyId:this.accessKeyId,secretAccessKey:this.secretAccessKey,region:this.region,bucket:this.bucketName,endpoint:this.endpoint,maxRequestSizeInBytes:this.maxRequestSizeInBytes,requestAbortTimeout:this.requestAbortTimeout,logger:this.logger}),this.setProps=a=>{this._validateConstructorParams(a.accessKeyId,a.secretAccessKey,a.bucketName,a.endpoint),this.accessKeyId=a.accessKeyId,this.secretAccessKey=a.secretAccessKey,this.region=a.region||"auto",this.bucketName=a.bucketName,this.endpoint=a.endpoint,this.maxRequestSizeInBytes=a.maxRequestSizeInBytes||5242880,this.requestAbortTimeout=a.requestAbortTimeout,this.logger=a.logger},this._validateConstructorParams(t,e,r,s),this.accessKeyId=t,this.secretAccessKey=e,this.endpoint=r,this.bucketName=s,this.region=i,this.maxRequestSizeInBytes=o,this.requestAbortTimeout=n,this.logger=u}_validateConstructorParams(t,e,r,s){if(typeof t!="string"||t.trim().length===0)throw new TypeError(me);if(typeof e!="string"||e.trim().length===0)throw new TypeError(Oe);if(typeof r!="string"||r.trim().length===0)throw new TypeError($e);if(typeof s!="string"||s.trim().length===0)throw new TypeError(Te)}_checkMethodHeadnGet(t){if(t!=="GET"&&t!=="HEAD")throw this._log("error",`${_}method must be either GET or HEAD`),new Error("method must be either GET or HEAD")}_checkKey(t){if(typeof t!="string"||t.trim().length===0)throw this._log("error",ee),new TypeError(ee)}_checkDelimiter(t){if(typeof t!="string"||t.trim().length===0)throw this._log("error",ae),new TypeError(ae)}_checkPrefix(t){if(typeof t!="string")throw this._log("error",se),new TypeError(se)}_checkMaxKeys(t){if(typeof t!="number"||t<=0)throw this._log("error",ie),new TypeError(ie)}_checkOpts(t){if(typeof t!="object")throw this._log("error",`${_}opts must be an object`),new TypeError(`${_}opts must be an object`)}_log(t,e,r={}){if(this.logger&&typeof this.logger[t]=="function"){let s=n=>typeof n!="object"||n===null?n:Object.keys(n).reduce((u,a)=>(Re.includes(a.toLowerCase())?u[a]="[REDACTED]":typeof n[a]=="object"&&n[a]!==null?u[a]=s(n[a]):u[a]=n[a],u),Array.isArray(n)?[]:{}),i=s(r),o={timestamp:new Date().toISOString(),level:t,message:e,...i,context:s({bucketName:this.bucketName,region:this.region,endpoint:this.endpoint,accessKeyId:this.accessKeyId?`${this.accessKeyId.substring(0,4)}...`:void 0})};this.logger[t](o)}}async getContentLength(t){this._checkKey(t);let e={[E]:R},r=y(t),{url:s,headers:i}=await this._sign("HEAD",r,{},e,""),o=(await this._sendRequest(s,"HEAD",i)).headers.get(N);return o?parseInt(o,10):0}async bucketExists(){let t={[E]:R},{url:e,headers:r}=await this._sign("HEAD","",{},t,""),s=await this._sendRequest(e,"HEAD",r);return!!(s.ok&&s.status===200)}async fileExists(t,e={}){this._checkKey(t);let{filteredOpts:r,conditionalHeaders:s}=this._filterIfHeaders(e),i={[E]:R,...s},o=y(t),{url:n,headers:u}=await this._sign("HEAD",o,r,i,"");try{let a=await this._sendRequest(n,"HEAD",u,"",[200,404,412,304]);return a.status===404?!1:a.status===412||a.status===304?null:a.ok&&a.status===200?!0:(this._handleErrorResponse(a),!1)}catch(a){let c=a instanceof Error?a.message:String(a);throw this._log("error",`${_}Failed to check if file exists: ${c}`),new Error(`${_}Failed to check if file exists: ${c}`)}}async _sign(t,e,r,s,i){let o=new Date().toISOString().replace(/[:-]|\.\d{3}/g,""),n=typeof e=="string"&&e.length>0?new URL(e,this.endpoint):new URL(this.endpoint);n.pathname=`/${encodeURI(this.bucketName)}${n.pathname}`,s[E]=i?await H(i):R,s[Ee]=o,s[we]=n.host;let u=this._buildCanonicalHeaders(s),a=Object.keys(s).map(m=>m.toLowerCase()).sort().join(";"),c=await this._buildCanonicalRequest(t,n,r,u,a,i),f=await this._buildStringToSign(o,c),g=await this._calculateSignature(o,f),w=this._buildAuthorizationHeader(o,a,g);return s[ye]=w,{url:n.toString(),headers:s}}_buildCanonicalHeaders(t){return Object.entries(t).map(([e,r])=>`${e.toLowerCase()}:${String(r).trim()}`).sort().join(` -`)}async _buildCanonicalRequest(t,e,r,s,i,o){return[t,e.pathname,this._buildCanonicalQueryString(r),`${s} -`,i,o?await H(o):R].join(` -`)}async _buildStringToSign(t,e){let r=[t.slice(0,8),this.region,q,j].join("/");return[X,t,r,await H(e)].join(` -`)}async _calculateSignature(t,e){let r=await this._getSignatureKey(t.slice(0,8));return U(r,e,"hex")}_buildAuthorizationHeader(t,e,r){let s=[t.slice(0,8),this.region,q,j].join("/");return[`${X} Credential=${this.accessKeyId}/${s}`,`SignedHeaders=${e}`,`Signature=${r}`].join(", ")}_filterIfHeaders(t){let e={},r={},s=["if-match","if-none-match","if-modified-since","if-unmodified-since"];for(let[i,o]of Object.entries(t))s.includes(i)?r[i]=o:e[i]=o;return{filteredOpts:e,conditionalHeaders:r}}async list(t="/",e="",r=1e3,s="GET",i={}){this._checkDelimiter(t),this._checkPrefix(e),this._checkMaxKeys(r),this._checkMethodHeadnGet(s),this._checkOpts(i),this._log("info",`Listing objects in ${e}`);let o={"list-type":ge,"max-keys":String(r),...i};e.length>0&&(o.prefix=e);let n={[O]:S,[E]:R},u=t==="/"?t:K(t),{url:a,headers:c}=await this._sign("GET",u,o,n,""),f=`${a}?${new URLSearchParams(o)}`,g=await this._sendRequest(f,"GET",c),w=await g.text();if(s==="HEAD"){let b=g.headers.get(N),C=g.headers.get(Z),fe=g.headers.get(Y);return{size:b?+b:void 0,mtime:C?new Date(C):void 0,ETag:fe||void 0}}let m=D(w),M=m.listBucketResult||m.error||m;return M.contents||M}async listMultiPartUploads(t="/",e="",r="GET",s={}){var i,o,n;this._checkDelimiter(t),this._checkPrefix(e),this._checkMethodHeadnGet(r),this._checkOpts(s),this._log("info",`Listing multipart uploads in ${e}`);let u={uploads:"",...s},a={[O]:S,[E]:R},c=t==="/"?t:K(t),{url:f,headers:g}=await this._sign("GET",c,u,a,""),w=`${f}?${new URLSearchParams(u)}`,m=await this._sendRequest(w,"GET",g),M=await m.text();if(r==="HEAD")return{size:+((i=m.headers.get(N))!==null&&i!==void 0?i:"0"),mtime:new Date((o=m.headers.get(Z))!==null&&o!==void 0?o:""),ETag:(n=m.headers.get(Y))!==null&&n!==void 0?n:""};let b=D(M),C=b.listMultipartUploadsResult||b.error||b;return C.uploads||C}async get(t,e={}){this._checkKey(t),this._log("info",`Getting object ${t}`);let{filteredOpts:r,conditionalHeaders:s}=this._filterIfHeaders(e),i={[O]:S,[E]:R,...s},o=y(t),{url:n,headers:u}=await this._sign("GET",o,r,i,""),a=await this._sendRequest(n,"GET",u,"",[200,404,412,304]);if(a.status===404||a.status===412||a.status===304)return this._log("error",`Failed to get object. Status: ${a.status}`),null;if(!a.ok)throw this._log("error",`Failed to get object. Status: ${a.status}`),new Error(`Failed to get object. Status: ${a.status}`);return a.text()}async getObjectWithETag(t,e={}){this._checkKey(t),this._log("info",`Getting object ${t}`);let{filteredOpts:r,conditionalHeaders:s}=this._filterIfHeaders(e),i={[O]:S,[E]:R,...s},o=y(t),{url:n,headers:u}=await this._sign("GET",o,r,i,"");try{let a=await this._sendRequest(n,"GET",u,"",[200,404,412,304]);if(a.status===404||a.status===412||a.status===304)return this._log("error",`Failed to get object. Status: ${a.status}`),{etag:null,data:null};if(!a.ok)throw this._log("error",`Failed to get object. Status: ${a.status}`),new Error(`Failed to get object. Status: ${a.status}`);let c=a.headers.get("etag");if(!c)throw new Error("ETag not found in response headers");let f=await a.text();return{etag:L(c),data:f}}catch(a){throw this._log("error",`Error getting object ${t} with ETag: ${a}`),a}}async getEtag(t,e={}){this._checkKey(t),this._log("info",`Getting etag object ${t}`);let{filteredOpts:r,conditionalHeaders:s}=this._filterIfHeaders(e),i={[O]:S,[E]:R,...s},o=y(t),{url:n,headers:u}=await this._sign("HEAD",o,r,i,""),a=await this._sendRequest(n,"HEAD",u,"",[200,412,304]);if(this._log("info",`Response status: ${a.status,a.statusText}`),a.status===412||a.status===304)return null;let c=a.headers.get("etag");if(!c)throw this._log("error","ETag not found in response headers"),new Error("ETag not found in response headers");return L(c)}async getResponse(t,e=!0,r=0,s=this.maxRequestSizeInBytes,i={}){this._checkKey(t);let{filteredOpts:o,conditionalHeaders:n}=this._filterIfHeaders({...i}),u={[O]:S,[E]:R,...e?{}:{range:`bytes=${r}-${s-1}`},...n},a=y(t),{url:c,headers:f}=await this._sign("GET",a,o,u,""),g=`${c}?${new URLSearchParams(o)}`;return this._sendRequest(g,"GET",f)}async put(t,e){if(this._checkKey(t),!(e instanceof Buffer||typeof e=="string"))throw this._log("error",F),new TypeError(F);this._log("info",`Uploading object ${t}`);let r=typeof e=="string"?Buffer.byteLength(e):e.length,s={[N]:r},i=y(t),{url:o,headers:n}=await this._sign("PUT",i,{},s,e);return await this._sendRequest(o,"PUT",n,e)}async getMultipartUploadId(t,e=pe){if(this._checkKey(t),typeof e!="string")throw this._log("error",`${_}fileType must be a string`),new TypeError(`${_}fileType must be a string`);this._log("info",`Initiating multipart upload for object ${t}`);let r={uploads:""},s={[O]:e,[E]:R},i=y(t),{url:o,headers:n}=await this._sign("POST",i,r,s,""),u=`${o}?${new URLSearchParams(r)}`,a=await(await this._sendRequest(u,"POST",n)).text(),c=D(a);if(typeof c=="object"&&c!==null&&"error"in c&&typeof c.error=="object"&&c.error!==null&&"message"in c.error){let f=String(c.error.message);throw this._log("error",`${_}Failed to abort multipart upload: ${f}`),new Error(`${_}Failed to abort multipart upload: ${f}`)}if(typeof c=="object"&&c!==null){if(!c.initiateMultipartUploadResult||!c.initiateMultipartUploadResult.uploadId)throw this._log("error",`${_}Failed to create multipart upload: no uploadId in response`),new Error(`${_}Failed to create multipart upload: Missing upload ID in response`);return c.initiateMultipartUploadResult.uploadId}else throw this._log("error",`${_}Failed to create multipart upload: unexpected response format`),new Error(`${_}Failed to create multipart upload: Unexpected response format`)}async uploadPart(t,e,r,s,i={}){this._validateUploadPartParams(t,e,r,s,i);let o={uploadId:r,partNumber:s,...i},n={[N]:e.length},u=y(t),{url:a,headers:c}=await this._sign("PUT",u,o,n,e),f=`${a}?${new URLSearchParams(o)}`,g=await this._sendRequest(f,"PUT",c,e),w=L(g.headers.get("etag")||"");return{partNumber:s,ETag:w}}_validateUploadPartParams(t,e,r,s,i){if(this._checkKey(t),!(e instanceof Buffer||typeof e=="string"))throw this._log("error",F),new TypeError(F);if(typeof r!="string"||r.trim().length===0)throw this._log("error",x),new TypeError(x);if(!Number.isInteger(s)||s<=0)throw this._log("error",`${_}partNumber must be a positive integer`),new TypeError(`${_}partNumber must be a positive integer`);this._checkOpts(i)}async completeMultipartUpload(t,e,r){if(this._checkKey(t),typeof e!="string"||e.trim().length===0)throw this._log("error",x),new TypeError(x);if(!Array.isArray(r)||r.length===0)throw this._log("error",te),new TypeError(te);if(!r.every(w=>typeof w.partNumber=="number"&&typeof w.ETag=="string"))throw this._log("error",re),new TypeError(re);this._log("info",`Complete multipart upload ${e} for object ${t}`);let s={uploadId:e},i=this._buildCompleteMultipartUploadXml(r),o={[O]:J,[N]:Buffer.byteLength(i).toString(),[E]:await H(i)},n=y(t),{url:u,headers:a}=await this._sign("POST",n,s,o,i),c=`${u}?${new URLSearchParams(s)}`,f=await(await this._sendRequest(c,"POST",a,i)).text(),g=D(f);if(typeof g=="object"&&g!==null&&"error"in g&&typeof g.error=="object"&&g.error!==null&&"message"in g.error){let w=String(g.error.message);throw this._log("error",`${_}Failed to abort multipart upload: ${w}`),new Error(`${_}Failed to abort multipart upload: ${w}`)}return g.completeMultipartUploadResult}async abortMultipartUpload(t,e){if(this._checkKey(t),typeof e!="string"||e.trim().length===0)throw this._log("error",x),new TypeError(x);this._log("info",`Aborting multipart upload ${e} for object ${t}`);let r={uploadId:e},s={[O]:J,[E]:R};try{let i=y(t),{url:o,headers:n}=await this._sign("DELETE",i,r,s,""),u=`${o}?${new URLSearchParams(r)}`,a=await this._sendRequest(u,"DELETE",n);if(a.ok){let c=await a.text(),f=D(c);if(typeof f=="object"&&f!==null&&"error"in f&&typeof f.error=="object"&&f.error!==null&&"message"in f.error){let g=String(f.error.message);throw this._log("error",`${_}Failed to abort multipart upload: ${g}`),new Error(`${_}Failed to abort multipart upload: ${g}`)}return{status:"Aborted",key:t,uploadId:e,response:f}}else throw this._log("error",`${_}Abort request failed with status ${a.status}`),new Error(`${_}Abort request failed with status ${a.status}`)}catch(i){let o=i instanceof Error?i.message:String(i);throw this._log("error",`${_}Failed to abort multipart upload for key ${t}: ${o}`),new Error(`${_}Failed to abort multipart upload for key ${t}: ${o}`)}}_buildCompleteMultipartUploadXml(t){return` - - ${t.map(e=>` - - ${e.partNumber} - ${e.ETag} - - `).join("")} - - `}async delete(t){this._checkKey(t),this._log("info",`Deleting object ${t}`);let e={[O]:S,[E]:R},r=y(t),{url:s,headers:i}=await this._sign("DELETE",r,{},e,""),o=await this._sendRequest(s,"DELETE",i);return o.status===204||o.status===200}async _sendRequest(t,e,r,s,i=[]){this._log("info",`Sending ${e} request to ${t}, headers: ${JSON.stringify(r)}`);let o=await fetch(t,{method:e,headers:r,body:["GET","HEAD"].includes(e)?void 0:s,signal:this.requestAbortTimeout!==void 0?AbortSignal.timeout(this.requestAbortTimeout):void 0});return!o.ok&&!i.includes(o.status)&&await this._handleErrorResponse(o),o}async _handleErrorResponse(t){let e=await t.text(),r=t.headers.get("x-amz-error-code")||"Unknown",s=t.headers.get("x-amz-error-message")||t.statusText;throw this._log("error",`${_}Request failed with status ${t.status}: ${r} - ${s},err body: ${e}`),new Error(`${_}Request failed with status ${t.status}: ${r} - ${s}, err body: ${e}`)}_buildCanonicalQueryString(t){return Object.keys(t).length<1?"":Object.keys(t).sort().map(e=>`${encodeURIComponent(e)}=${encodeURIComponent(t[e])}`).join("&")}async _getSignatureKey(t){let e=await U(`AWS4${this.secretAccessKey}`,t),r=await U(e,this.region),s=await U(r,q);return U(s,j)}},H=async t=>{let e=ne("sha256");return e.update(t),e.digest("hex")},U=async(t,e,r)=>{let s=oe("sha256",t);return s.update(e),s.digest(r)},L=t=>{let e={'"':"",""":"",""":"",""":"",""":""};return t.replace(/^("|"|")|("|"|")$/g,r=>e[r])},D=t=>{let e=o=>o.replace(/"/g,'"').replace(/'/g,"'").replace(/</g,"<").replace(/>/g,">").replace(/&/g,"&"),r={},s=/<(\w)([-\w]+)(?:\/|[^>]*>((?:(?!<\1)[\s\S])*)<\/\1\2)>/gm,i;for(;i=s.exec(t);){let[,o,n,u]=i,a=o.toLowerCase()+n,c=u!=null?D(u):!0;typeof c=="string"?r[a]=L(e(c)):Array.isArray(r[a])?r[a].push(c):r[a]=r[a]!=null?[r[a],c]:Ie[a]?[c]:c}return Object.keys(r).length?r:e(t)};import _e from"avsc";var h={MISSING_ARGUMENT:"MISSING_ARGUMENT",COLLECTION_EXISTS:"COLLECTION_EXISTS",CREATE_COLLECTION_ERROR:"CREATE_COLLECTION_ERROR",RENAME_COLLECTION_ERROR:"RENAME_COLLECTION_ERROR",REMOVE_COLLECTION_ERROR:"REMOVE_COLLECTION_ERROR",UPDATE_COLLECTION_SCHEMA_ERROR:"UPDATE_COLLECTION_SCHEMA_ERROR",COLLECTION_NOT_FOUND:"COLLECTION_NOT_FOUND",SCHEMA_VALIDATION_ERROR:"SCHEMA_VALIDATION_ERROR",DOCUMENT_VALIDATION_ERROR:"DOCUMENT_VALIDATION_ERROR",S3_OPERATION_ERROR:"S3_OPERATION_ERROR",FIND_ERROR:"FIND_ERROR",FIND_ONE_ERROR:"FIND_ONE_ERROR",SAVE_DATA_ERROR:"SAVE_DATA_ERROR",INSERT_ERROR:"INSERT_ERROR",UPDATE_ERROR:"UPDATE_ERROR",UPDATE_ONE_ERROR:"UPDATE_ONE_ERROR",DELETE_ERROR:"DELETE_ERROR",COUNT_ERROR:"COUNT_ERROR",UNKNOWN_ERROR:"UNKNOWN_ERROR"},d=class extends Error{constructor(e,r=h.UNKNOWN_ERROR){super(`lowstorageError: ${e} :: code: ${r}`),this.name=this.constructor.name,this.code=r,Error.captureStackTrace(this,this.constructor)}};var $=class extends d{constructor(e){super(e,h.SCHEMA_VALIDATION_ERROR)}},T=class extends d{constructor(e){super(e,h.DOCUMENT_VALIDATION_ERROR)}},p=class extends d{constructor(e,r){super(`S3 ${r} operation failed: ${e}`,h.S3_OPERATION_ERROR)}};import{randomUUID as G}from"node:crypto";var k=(t,e)=>Object.keys(e).every(r=>t[r]===e[r]),le=async()=>typeof G<"u"&&typeof G=="function"?G():typeof crypto<"u"&&typeof crypto=="object"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(t){var e=Math.random()*16|0,r=t==="x"?e:e&3|8;return r.toString(16)}),ce=(t,e="SubAutoGenerated")=>{switch(typeof t){case"string":return Se(t)?{type:"string",name:"_id",size:16,logicalType:"UUID"}:"string";case"number":return Number.isInteger(t)?"int":"float";case"boolean":return"boolean";case"object":return t===null?"null":Array.isArray(t)?{type:"array",items:ce(t[0])}:V(t,e);default:return"string"}},v=t=>{let e={name:"_id",type:"string",size:16,logicalType:"UUID"};return typeof t>"u"||t===null||(t.type==="record"?t.fields.some(s=>s.name==="_id")||t.fields.unshift(e):t.type==="array"&&t.items.type==="record"&&(t.items.fields.some(s=>s.name==="_id")||t.items.fields.unshift(e))),t},V=(t,e="AutoGenerated")=>{Array.isArray(t)&&(t=t[0]);let r=Object.entries(t).map(([i,o])=>({name:i,type:ce(o,`${e}.${i}`)}));return v({type:"record",name:e,fields:r})},Se=t=>/^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i.test(t);var l="lowstorage",I="/",B="lowstorage",A=".avro",be=1024*1024,ue=5*be,W=Buffer.from("","utf8"),z=(t=h.DOCUMENT_VALIDATION_ERROR)=>{throw new T(`${l}: Invalid document or schema`,t)},P=t=>{if(t.trim()===""||t===null||typeof t>"u"||t.length>255||t===null)throw new d(`${l}: Collection name is required, null or too long`,h.MISSING_ARGUMENT)},de=class{constructor(e={accessKeyId:void 0,secretAccessKey:void 0,endpoint:void 0,bucketName:void 0,region:"auto",logger:null,dirPrefix:B}){this._checkArgs(e),this._schemas=new Map,this._s3=new he(e),this._dirPrefix=e.dirPrefix||B,this._avro=_e}_checkArgs=e=>{let r=["accessKeyId","secretAccessKey","endpoint","bucketName"];for(let s of r)if(!e[s])throw new d(`${l}: ${s} is required`,h.MISSING_ARGUMENT)};async listCollections(){try{let e=await this._s3.list(I,this._dirPrefix);return typeof e=="object"&&e!==null&&e.keyCount==="0"?[]:e.map(r=>r.key.slice(this._dirPrefix.length+1,-A.length))}catch(e){throw new p(`${l}: ${e.message}`,h.S3_OPERATION_ERROR)}}async collectionExists(e){try{return P(e),!!await this._s3.fileExists(`${this._dirPrefix}${I}${e}${A}`)}catch(r){if(r.message.includes("Not Found"))return!1;throw new d(`${l}: ${r.message}`,h.COLLECTION_NOT_FOUND)}}async createCollection(e,r,s=[]){try{if(P(e),!await this.collectionExists(e)){if(typeof r<"u"&&r!==null)try{if(!this._avro.parse(r))throw new $(`${l}: Schema is invalid: ${r}`,h.SCHEMA_VALIDATION_ERROR)}catch{throw new $(`${l}: Schema is invalid: ${r}`,h.SCHEMA_VALIDATION_ERROR)}if(s.length>0&&r){let o=this._avro.parse({type:"array",items:r});await this._s3.put(`${this._dirPrefix}${I}${e}${A}`,o.toBuffer(s))}else await this._s3.put(`${this._dirPrefix}${I}${e}${A}`,W);return this.collection(e,r,!1)}throw new d(`${l}: Collection ${e} already exists`,h.COLLECTION_EXISTS)}catch(i){throw i instanceof d?i:new d(`${l}: ${i.message}`,h.CREATE_COLLECTION_ERROR)}}async removeCollection(e){try{if(P(e),await this.collectionExists(e)){await this._s3.delete(`${this._dirPrefix}${I}${e}${A}`);let s=await this.collectionExists(e);if(typeof s=="boolean"){if(!s)return this._schemas.delete(e),!0;throw new d(`${l}: Failed to delete collection ${e}`,h.S3_OPERATION_ERROR)}throw new p(`${l}: Failed to delete collection ${e}`,h.S3_OPERATION_ERROR)}throw new d(`${l}: Collection ${e} does not exist`,h.REMOVE_COLLECTION_ERROR)}catch(r){throw r instanceof p?r:new d(`${l}: Failed to remove collection: ${r.message}`,h.REMOVE_COLLECTION_ERROR)}}async collection(e,r,s=!0){try{P(e);let i=`${this._dirPrefix}${I}${e}${A}`;if(!await this._s3.fileExists(i)){if(!s)throw new d(`${l}: Collection ${e} does not exist`,h.COLLECTION_NOT_FOUND);await this._s3.put(i,W)}let n=r||this._schemas.get(e)||void 0;return new Q(e,n,this._s3,this._dirPrefix)}catch(i){throw i.message.includes("unknown type")?new $(`${l}: Schema input is invalid: ${i.message}`,h.SCHEMA_VALIDATION_ERROR):new d(`${l}: ${i.message}`,h.COLLECTION_NOT_FOUND)}}s3=()=>this._s3},Q=class t{constructor(e,r,s,i=B,o=!1,n=ue){this._colName=e,this._s3=s,this._schema=v(r),this._dirPrefix=i,this._safeWrite=o,this._chunkSize=n||ue,this._key=`${this._dirPrefix}${I}${this._colName}${A}`,this._s3.setMaxRequestSizeInBytes(this._chunkSize),this._avro=_e,this._lastETag="",this._dataCache=[],this._avroType=typeof r>"u"?null:this._avro.parse(r)}getProps=()=>({colName:this._colName,schema:this._schema,s3:this._s3,avro:this._avro,avroType:this._avroType,dirPrefix:this._dirPrefix,safeWrite:this._safeWrite,chunkSize:this._chunkSize});setProps=e=>{this._colName=e.colName,this._schema=e.schema,this._s3=e.s3,this._avro=e.avro,this._avroType=e.avroType,this._dirPrefix=e.dirPrefix,this._safeWrite=e.safeWrite,this._chunkSize=e.chunkSize};setSafeWrite=e=>{this._safeWrite=e};getSafeWrite=()=>this._safeWrite;getAvroSchema=()=>this._schema;setAvroSchema=e=>{this._schema=v(e),this._avroType=typeof e>"u"?null:this._avro.parse(e)};async _loadData(){try{if(this._avroType===null||typeof this._avroType>"u")throw new d(`${l}: Missing type definition. Configure before operations `,h.SCHEMA_VALIDATION_ERROR);let{etag:e,data:r}=await this._s3.getObjectWithETag(this._key,{"if-none-match":this._lastETag});if(r===null)return this._dataCache;this._lastETag=e===null?this._lastETag:e;let s=this._avro.parse({type:"array",items:this._avroType});if(r.length0?s.fromBuffer(Buffer.from(r,"utf8")):[],this._dataCache;let i=this._chunkSize,o=[Buffer.from(r,"utf8")],n=!0;for(;n;){let a=await this._s3.getResponse(this._key,!1,i,i+this._chunkSize),c=await a.text();o.push(Buffer.from(c,"utf8")),i+=this._chunkSize,(a.headers.get("content-length")||c.length)-1)return this._dataCache=[],this._dataCache;throw new p(`${l}: Failed to load data: ${e.message}`,h.S3_OPERATION_ERROR)}}async _saveData(e){try{if(this._avroType===null||typeof this._avroType>"u")throw new d(`${l}: Missing type definition. Configure before operations `,h.SCHEMA_VALIDATION_ERROR);let r=this._avro.parse({type:"array",items:this._avroType}),s=e.length>0?r.toBuffer(e):W;if(this._safeWrite&&this._lastETag!==""){let n=await this._s3.getEtag(this._key);if(n!==null&&n!==this._lastETag)return!1}let i=await this._s3.put(this._key,s);if(i.status!==200)throw new p(`${l}: Failed to save data`,h.S3_OPERATION_ERROR);let o=i.headers.get("etag");return o&&(this._lastETag=this._s3.sanitizeETag(o),this._dataCache=e),!0}catch(r){throw r instanceof p?r:new d(`${l}: ${r.message}`,h.SAVE_DATA_ERROR)}}async insert(e,r=void 0){try{if(e==null)throw new d(`${l}: Document is required for insert`,h.INSERT_ERROR);if(typeof e!="object"&&!Array.isArray(e))throw new T(`${l}: Document must be an object or an array`,h.DOCUMENT_VALIDATION_ERROR);let s=Array.isArray(e)?e:[e],i=v(r)||this._schema||V(s[0]),o=this._avro.parse(i);if(!o)throw new $(`${l}: Schema is required - Pass a schema to the insert method`,h.SCHEMA_VALIDATION_ERROR);this._avroType=o;let n=await this._loadData();for(let a of s){if(typeof a!="object"||a===null)throw new T(`${l}: Invalid input: input must be an object or an array of objects`,h.DOCUMENT_VALIDATION_ERROR);if(a._id=a._id||await le(),this._avroType.isValid(a,{errorHook:z,noUndeclaredFields:!0})===!0)n.push(a);else throw new T(`${l}: Invalid document or schema`,h.DOCUMENT_VALIDATION_ERROR)}if(!await this._saveData(n))throw new p(`${l}: Failed to insert document`,h.S3_OPERATION_ERROR);return this.setAvroSchema(i),s}catch(s){throw s.message.includes("unknown type")?new $(`${l}: Schema input is invalid: ${s.message}`,h.SCHEMA_VALIDATION_ERROR):s instanceof d?s:new d(`${l} Insert operation failed: ${s.message}`,h.INSERT_ERROR)}}async find(e={},r={}){try{if(e==null)throw new d(`${l}: Query is required for update`,h.MISSING_ARGUMENT);let s=await this._loadData(),i=parseInt(r.skip,10)||0,o=parseInt(r.limit,10)?i+parseInt(r.limit,10):void 0;return s.filter(u=>k(u,e)).slice(i,o)}catch(s){throw new d(`${l}: Find operation failed: ${s.message}`,h.FIND_ERROR)}}async findOne(e={}){try{if(e===null)throw new d(`${l}: Query cannot be null`,h.INVALID_ARGUMENT);return(await this.find(e,{limit:1}))[0]||null}catch(r){throw r instanceof d?r:new d(`${l}: FindOne operation failed: ${r.message}`,h.FIND_ONE_ERROR)}}async update(e={},r={},s={}){try{if(e==null||r===void 0||r===null)throw new d(`${l}: Query and update values are required for update`,h.MISSING_ARGUMENT);if(!this._avroType)throw new $(`${l}: Schema is not defined for this collection`,h.SCHEMA_VALIDATION_ERROR);let i=await this._loadData();if(i.length===0)return 0;let o=0;for(let n=0;n0){if(!await this._saveData(i))throw new p(`${l}: Failed to update document`,h.S3_OPERATION_ERROR)}else if(s.upsert){if(!await this.insert(r))throw new p(`${l}: Failed to update document`,h.S3_OPERATION_ERROR);o=1}return o}catch(i){throw i instanceof p?i:new d(`${l}: Update operation failed: ${i.message}`,h.UPDATE_ERROR)}}async updateOne(e={},r={},s={}){try{if(e==null||r===void 0||r===null)throw new d(`${l}: Query is required`,h.MISSING_ARGUMENT);if(!this._avroType)throw new $(`${l}: Schema is not defined for this collection`,h.SCHEMA_VALIDATION_ERROR);let i=await this._loadData();if(i.length===0)return 0;let o=i.findIndex(n=>k(n,e));if(o!==-1){let n={...i[o],...r};if(this._avroType.isValid(n,{errorHook:z,noUndeclaredFields:!0})===!0){if(i[o]=n,!await this._saveData(i))throw new p(`${l}: Failed to update document`,h.S3_OPERATION_ERROR);return 1}else throw new T(`${l}: Invalid document or schema`,h.DOCUMENT_VALIDATION_ERROR)}if(s.upsert){if(!await this.insert(r))throw new p(`${l}: Failed to update document`,h.S3_OPERATION_ERROR);return 1}return 0}catch(i){throw i instanceof d?i:new d(`${l}: UpdateOne operation failed: ${i.message}`,h.UPDATE_ONE_ERROR)}}async delete(e={}){try{if(e==null)throw new d(`${l}: Query is required`,h.MISSING_ARGUMENT);let r=await this._loadData();if(r.length===0)return 0;let s=r.length,i=r.filter(n=>!k(n,e));if(!await this._saveData(i))throw new p(`${l}: Failed to delete document`,h.S3_OPERATION_ERROR);return s-i.length}catch(r){throw r instanceof p?r:new d(`${l}: Delete operation failed: ${r.message}`,h.DELETE_ERROR)}}async deleteAll(){try{let r=(await this._loadData()).length;if(!await this._saveData([]))throw new p(`${l}: Failed to delete document`,h.S3_OPERATION_ERROR);return r}catch(e){throw e instanceof p?e:new d(`${l}: Delete operation failed: ${e.message}`,h.DELETE_ERROR)}}async count(e={}){try{return(await this.find(e)).length}catch(r){throw new d(`${l}: Count operation failed: ${r.message}`,h.COUNT_ERROR)}}async renameCollection(e,r=this._schema){try{if(P(e),await this._s3.fileExists(`${this._dirPrefix}${I}${e}${A}`))throw new d(`${l}: Collection ${e} already exists`,h.COLLECTION_EXISTS);let i=r||this.getAvroSchema(),o=await this._loadData(),n=new t(e,i,this._s3,this._dirPrefix,this._safeWrite,this._chunkSize);return await n._saveData(o),await this._s3.delete(`${this._dirPrefix}${I}${this._colName}${A}`),n}catch(s){throw s instanceof d?s:new d(`${l}: Rename collection failed: ${s.message}`,h.RENAME_COLLECTION_ERROR)}}};export{de as lowstorage,d as lowstorageError,h as lowstorage_ERROR_CODES}; -//# sourceMappingURL=lowstorage.js.map +'use strict'; +import { S3 } from 'ultralight-s3'; +import { Type as parse } from '@avro/types'; +import { lowstorage_ERROR_CODES, lowstorageError, SchemaValidationError, DocumentValidationError, S3OperationError } from 'errors'; +import { matchesQuery, generateUUID, inferAvroSchema, ensureIdFieldInSchema } from 'helpers'; +const MODULE_NAME = 'lowstorage'; +const DEFAULT_DELIMITER = '/'; +const PROJECT_DIR_PREFIX = 'lowstorage'; +const COL_SUFFIX = '.avro'; +const CHUNG_1MB = 1024 * 1024; +const CHUNG_5MB = 5 * CHUNG_1MB; +const EMPTY_DATA = Buffer.from('', 'utf8'); +const errorValidationFn = (errorCode = lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR) => { + throw new DocumentValidationError(`${MODULE_NAME}: Invalid document or schema ${errorCode}`); +}; +const _hasColName = (colName = '') => { + if (colName.trim() === '' || colName === null || typeof colName === 'undefined' || colName.length > 255 || colName === null) { + throw new lowstorageError(`${MODULE_NAME}: Collection name is required, null or too long`, lowstorage_ERROR_CODES.MISSING_ARGUMENT); + } +}; +/** + * lowstorage class for managing collections and performing operations on top of S3-compatible storages. + * @class + * @example + * const storage = new lowstorage({ + * accessKeyId: 'YOUR_ACCESS_KEY', + * secretAccessKey: 'YOUR_SECRET_KEY', + * endpoint: 'YOUR_ENDPOINT', + * bucketName: 'YOUR_BUCKET_NAME', + * region: 'YOUR_REGION', + * }); + * + * // Create a collection + * const userCol = await storage.collection('users'); + * + * // Insert a document + * await userCol.insert({ + * name: 'Kevin', + * gender: 'whatever', + * posts: [], + * }); + * + * // Show all users + * const allUsers = await userCol.find({}); + * + * // Find users with pagination (e.g., page 2, 10 users per page) + * const secondPageUsers = await userCol.find({}, { skip: 10, limit: 10 }); + * + * // Find user by ID and update name + * await userCol.update({ _id: id }, { name: 'Carlos' }); + */ +class lowstorage { + constructor(options) { + this._checkArgs = (args) => { + const requiredFields = ['accessKeyId', 'secretAccessKey', 'endpoint', 'bucketName']; + for (const field of requiredFields) { + if (!args[field]) { + throw new lowstorageError(`${MODULE_NAME}: ${field} is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT); + } + } + }; + /** + * Get the S3 instance associated with the lowstorage instance. + * @returns {S3} The S3 instance. Use this to perform S3 operations. Check for ultralight-s3 for more details. + */ + this.s3 = () => { + return this._s3; + }; + this._checkArgs(options); + this._schemas = new Map(); + this._s3 = new S3(options); + this._dirPrefix = options.dirPrefix || PROJECT_DIR_PREFIX; + this._avroParse = parse; + } + /** + * List all collections. + * @returns {Promise} An array of collection names. + * @throws {S3OperationError} If there's an error during S3 operation. + */ + async listCollections() { + try { + const listed = await this._s3.list(DEFAULT_DELIMITER, this._dirPrefix); + if (Array.isArray(listed)) { + return listed.map((entry) => entry.key.slice(this._dirPrefix.length + 1, -COL_SUFFIX.length)); + } + else if (typeof listed === 'object' && listed !== null && 'keyCount' in listed && listed.keyCount === '0') { + return []; + } + return []; + } + catch (error) { + throw new S3OperationError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); + } + } + /** + * Check if a collection exists. + * @param {string} colName - The name of the collection. + * @returns {Promise} True if the collection exists, false otherwise. + * @throws {lowstorageError} If there's an error. + */ + async collectionExists(colName = '') { + try { + _hasColName(colName); + const exists = await this._s3.fileExists(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`); + return !!exists; + } + catch (error) { + if (error.message.includes('Not Found')) { + return false; + } + throw new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND); + } + } + /** + * Create a new collection. + * @param {string} colName - The name of the collection. + * @param {Object} [schema] - The schema for the collection. + * @param {Array} [data=[]] - The initial data for the collection. + * @returns {Promise} A Promise that resolves to a Collection object. + * @throws {lowstorageError} If there's an error. + */ + async createCollection(colName = '', schema, data = []) { + try { + _hasColName(colName); + const exists = await this.collectionExists(colName); + if (!exists) { + if (typeof schema !== 'undefined' && schema !== null) { + try { + const isValid = this._avroParse.isValid(schema); + if (!isValid) { + throw new SchemaValidationError(`${MODULE_NAME}: Schema is invalid: ${schema} ${lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR}`); + } + } + catch (error) { + throw new SchemaValidationError(`${MODULE_NAME}: Schema is invalid: ${schema}`, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR); + } + } + if (data.length > 0 && schema) { + const wrapperType = this._avroParse.forSchema({ type: 'array', items: schema }); + await this._s3.put(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`, wrapperType.toBuffer(data)); + } + else { + await this._s3.put(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`, EMPTY_DATA); + } + return this.collection(colName, schema, false); + } + throw new lowstorageError(`${MODULE_NAME}: Collection ${colName} already exists`, lowstorage_ERROR_CODES.COLLECTION_EXISTS); + } + catch (error) { + if (error instanceof lowstorageError) { + throw error; + } + throw new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.CREATE_COLLECTION_ERROR); + } + } + /** + * Remove a collection. + * @param {string} colName - The name of the collection. + * @returns {Promise} A Promise that resolves to true if the collection is removed, false otherwise. + * @throws {lowstorageError} If there's an error. + */ + async removeCollection(colName = '') { + try { + _hasColName(colName); + const exists = await this.collectionExists(colName); + if (exists) { + await this._s3.delete(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`); + const exists2 = await this.collectionExists(colName); + if (typeof exists2 === 'boolean') { + if (!exists2) { + this._schemas.delete(colName); + return true; + } + throw new lowstorageError(`${MODULE_NAME}: Failed to delete collection ${colName}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); + } + throw new S3OperationError(`${MODULE_NAME}: Failed to delete collection ${colName}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); + } + throw new lowstorageError(`${MODULE_NAME}: Collection ${colName} does not exist`, lowstorage_ERROR_CODES.REMOVE_COLLECTION_ERROR); + } + catch (error) { + if (error instanceof S3OperationError) { + throw error; + } + throw new lowstorageError(`${MODULE_NAME}: Failed to remove collection: ${error.message}`, lowstorage_ERROR_CODES.REMOVE_COLLECTION_ERROR); + } + } + /** + * Get or create a collection. + * @param {string} colName - The name of the collection. + * @param {Object} [schema] - The schema for the collection. + * @param {boolean} [autoCreate=true] - Whether to automatically create the collection if it doesn't exist. + * @returns {Promise} A Promise that resolves to a Collection object. + * @throws {lowstorageError} If there's an error. + */ + async collection(colName = '', schema, autoCreate = true) { + try { + _hasColName(colName); + const colPath = `${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`; + const exists = await this._s3.fileExists(colPath); + if (!exists) { + if (!autoCreate) { + throw new lowstorageError(`${MODULE_NAME}: Collection ${colName} does not exist`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND); + } + // TODO: check if this is the right way to handle empty data + await this._s3.put(colPath, EMPTY_DATA); + } + const colSchema = schema || this._schemas.get(colName) || undefined; + return new Collection(colName, colSchema, this._s3, this._dirPrefix); + } + catch (error) { + // check if error message contains "unknown type" and if so, throw a schema validation error + if (error.message.includes('unknown type')) { + throw new SchemaValidationError(`${MODULE_NAME}: Schema input is invalid: ${error.message}`, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR); + } + throw new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND); + } + } +} +/** + * Collection class for managing documents in a collection. + * @class + * @example + * const storage = new lowstorage({ + * accessKeyId: 'YOUR_ACCESS_KEY', + * secretAccessKey: 'YOUR_SECRET_KEY', + * endpoint: 'YOUR_ENDPOINT', + * bucketName: 'YOUR_BUCKET_NAME', + * region: 'YOUR_REGION', + * }); + * + * // Create a collection + * const userCol = await storage.collection('users'); + * + * // Insert a document + * await userCol.insert({ + * name: 'Kevin', + * gender: 'whatever', + * posts: [], + * }); + * + * // Show all users + * const allUsers = await userCol.find({}); + * + * // Find users with pagination (e.g., page 2, 10 users per page) + * const secondPageUsers = await userCol.find({}, { skip: 10, limit: 10 }); + * + * // Find user by ID and update name + * await userCol.update({ _id: id }, { name: 'Carlos' }); + */ +class Collection { + constructor(colName = '', schema, s3, dirPrefix = PROJECT_DIR_PREFIX, safeWrite = false, chunkSize = CHUNG_5MB) { + this.getProps = () => ({ + colName: this._colName, + s3: this._s3, + schema: this._schema, + avroParse: this._avroParse, + avroType: this._avroType, + dirPrefix: this._dirPrefix, + safeWrite: this._safeWrite, + chunkSize: this._chunkSize, + }); + this.setProps = (props) => { + this._colName = props.colName; + this._schema = props.schema; + this._s3 = props.s3; + this._avroParse = props.avroParse; + this._avroType = props.avroType; + this._dirPrefix = props.dirPrefix; + this._safeWrite = props.safeWrite; + this._chunkSize = props.chunkSize; + }; + this.setSafeWrite = (safeWrite) => { + this._safeWrite = safeWrite; + }; + this.getSafeWrite = () => { + return this._safeWrite; + }; + this.getAvroSchema = () => { + return this._schema; + }; + this.setAvroSchema = (schema) => { + this._schema = ensureIdFieldInSchema(schema); + this._avroType = typeof schema === 'undefined' ? null : this._avroParse.forSchema(schema); + }; + this._colName = colName.trim(); + this._s3 = s3; + this._schema = ensureIdFieldInSchema(schema); + this._dirPrefix = dirPrefix; + this._safeWrite = safeWrite; + this._chunkSize = chunkSize || CHUNG_5MB; + this._s3.setMaxRequestSizeInBytes(this._chunkSize); + this._avroParse = parse; + this._lastETag = ''; + this._dataCache = []; + this._avroType = typeof schema === 'undefined' ? null : this._avroParse.ForSchema(schema); + this._key = `${this._dirPrefix}${DEFAULT_DELIMITER}${this._colName}${COL_SUFFIX}`; + } + async _loadData() { + try { + if (this._avroType === null || typeof this._avroType === 'undefined') { + throw new lowstorageError(`${MODULE_NAME}: Missing type definition. Configure before operations `, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR); + } + const { etag, data } = await this._s3.getObjectWithETag(this._key, { 'if-none-match': this._lastETag }); + if (data === null) { + return this._dataCache; + } + this._lastETag = etag === null ? this._lastETag : etag; + const wrapperType = this._avroParse.forSchema({ type: 'array', items: this._avroType }); + if (data.length < this._chunkSize) { + this._dataCache = data.length > 0 ? wrapperType.fromBuffer(Buffer.from(data, 'utf8')) : []; + return this._dataCache; + } + let offset = this._chunkSize; + let bufferArr = [Buffer.from(data, 'utf8')]; + let repeat = true; + while (repeat) { + const nextDataResponse = await this._s3.getResponse(this._key, false, offset, offset + this._chunkSize); + const nextDataBody = await nextDataResponse.text(); + bufferArr.push(Buffer.from(nextDataBody, 'utf8')); + offset += this._chunkSize; + const contentLength = parseInt(nextDataResponse.headers.get('content-length') || nextDataBody.length.toString()); + if (contentLength < this._chunkSize) { + repeat = false; + } + } + const bufferedData = Buffer.concat(bufferArr); + this._dataCache = wrapperType.fromBuffer(bufferedData); + return this._dataCache; + } + catch (error) { + if (error.toString().indexOf('status 404: Unknown - Not Found') > -1) { + this._dataCache = []; + return this._dataCache; + } + throw new S3OperationError(`${MODULE_NAME}: Failed to load data: ${error.message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); + } + } + async _saveData(data) { + try { + if (this._avroType === null || typeof this._avroType === 'undefined') { + throw new lowstorageError(`${MODULE_NAME}: Missing type definition. Configure before operations `, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR); + } + const wrapperType = this._avroParse.forSchema({ type: 'array', items: this._avroType }); + const dataBuffer = data.length > 0 ? wrapperType.toBuffer(data) : EMPTY_DATA; // TODO: check if this is the right way to handle empty data + if (this._safeWrite && this._lastETag !== '') { + const currentETag = await this._s3.getEtag(this._key); + // If we have a current ETag, check if it matches our last known ETag + if (currentETag !== null && currentETag !== this._lastETag) { + return false; + } + } + const resp = await this._s3.put(this._key, dataBuffer); + if (typeof resp === 'object' && 'status' in resp && resp.status !== 200) { + throw new S3OperationError(`${MODULE_NAME}: Failed to save data`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); + } + // Update the cached ETag + const newETag = resp.headers?.get('etag') || ''; + if (newETag && newETag.length > 0) { + this._lastETag = this._s3.sanitizeETag(newETag); + this._dataCache = data; + } + return true; + } + catch (error) { + if (error instanceof S3OperationError) { + throw error; + } + throw new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.SAVE_DATA_ERROR); + } + } + /** + * Insert a document into the collection. + * @param {Object|Array} doc - The document to insert. + * @param {Object} [schema=undefined] - The schema for the document. + * @returns {Promise} A Promise that resolves to the array of inserted document(s). + * @throws {lowstorageError} If there's an error. + */ + async insert(doc, schema) { + try { + if (doc === undefined || doc === null) { + throw new lowstorageError(`${MODULE_NAME}: Document is required for insert`, lowstorage_ERROR_CODES.INSERT_ERROR); + } + if (typeof doc !== 'object' && !Array.isArray(doc)) { + throw new DocumentValidationError(`${MODULE_NAME}: Document must be an object or an array`, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR); + } + const items = !Array.isArray(doc) ? [doc] : doc; + const schemaWithId = schema ? ensureIdFieldInSchema(schema) : this._schema || ensureIdFieldInSchema(inferAvroSchema(items[0])); + const avroType = this._avroParse.forSchema(schemaWithId); + if (!avroType) { + throw new SchemaValidationError(`${MODULE_NAME}: Schema is required - Pass a schema to the insert method`, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR); + } + this._avroType = avroType; + const data = await this._loadData(); + for (let item of items) { + if (typeof item !== 'object' || item === null) { + throw new DocumentValidationError(`${MODULE_NAME}: Invalid input: input must be an object or an array of objects`, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR); + } + item._id = item._id || (await generateUUID()); + const validBuffer = this._avroType.isValid(item, { + errorHook: errorValidationFn, + noUndeclaredFields: true, + }); + if (validBuffer === true) { + data.push(item); + } + else { + throw new DocumentValidationError(`${MODULE_NAME}: Invalid document or schema`, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR); + } + } + const success = await this._saveData(data); + if (!success) { + throw new S3OperationError(`${MODULE_NAME}: Failed to insert document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); + } + this.setAvroSchema(schemaWithId); + return items; + } + catch (error) { + if (error.message.includes('unknown type')) { + throw new SchemaValidationError(`${MODULE_NAME}: Schema input is invalid: ${error.message}`, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR); + } + if (error instanceof lowstorageError) { + throw error; + } + throw new lowstorageError(`${MODULE_NAME} Insert operation failed: ${error.message}`, lowstorage_ERROR_CODES.INSERT_ERROR); + } + } + /** + * Find documents in the collection. + * @param {Object} [query={}] - The query to filter documents. + * @param {Object} [options={}] - The options for pagination. + * @param {number} [options.skip=0] - The number of documents to skip. Default is 0. + * @param {number} [options.limit=undefined] - The maximum number of documents to return. Default is undefined, which means no limit. + * @returns {Promise} A Promise that resolves to an array of matching documents. + * @throws {lowstorageError} If there's an error. + */ + async find(query = {}, options = {}) { + try { + if (query === undefined || query === null) { + throw new lowstorageError(`${MODULE_NAME}: Query is required for update`, lowstorage_ERROR_CODES.MISSING_ARGUMENT); + } + const data = await this._loadData(); + const start = options.skip !== undefined ? parseInt(String(options.skip), 10) : 0; + const end = options.limit !== undefined + ? start + parseInt(String(options.limit), 10) + : undefined; + const filteredData = data.filter((doc) => matchesQuery(doc, query)).slice(start, end); + return filteredData; + } + catch (error) { + throw new lowstorageError(`${MODULE_NAME}: Find operation failed: ${error.message}`, lowstorage_ERROR_CODES.FIND_ERROR); + } + } + /** + * Find the first document in the collection that matches the query. + * @param {Object} [query={}] - The query to filter documents. + * @returns {Promise} A Promise that resolves to the first matching document or null if no match is found. + * @throws {lowstorageError} If there's an error. + */ + async findOne(query = {}) { + try { + if (query === null) { + throw new lowstorageError(`${MODULE_NAME}: Query cannot be null`, lowstorage_ERROR_CODES.INVALID_ARGUMENT); + } + const result = await this.find(query, { limit: 1 }); + return result[0] || null; + } + catch (error) { + if (error instanceof lowstorageError) { + throw error; + } + throw new lowstorageError(`${MODULE_NAME}: FindOne operation failed: ${error.message}`, lowstorage_ERROR_CODES.FIND_ONE_ERROR); + } + } + /** + * Update a single document in the collection that matches the query. + * @param {Object} [query={}] - The query to filter the document to update. + * @param {Object} [update={}] - The update operations to apply to the matching document. + * @returns {Promise} A Promise that resolves to number of documents updated. + * @throws {lowstorageError} If the updateOne operation fails. + * @throws {SchemaValidationError} If the schema is not defined for the collection. + * @throws {DocumentValidationError} If the updated document is invalid. + * @throws {S3OperationError} If the S3 operation fails. + */ + async update(query = {}, update = {}, options = {}) { + try { + if (query === undefined || query === null || update === undefined || update === null) { + throw new lowstorageError(`${MODULE_NAME}: Query and update values are required for update`, lowstorage_ERROR_CODES.MISSING_ARGUMENT); + } + if (!this._avroType) { + throw new SchemaValidationError(`${MODULE_NAME}: Schema is not defined for this collection`, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR); + } + const data = await this._loadData(); + if (data.length === 0) + return 0; + let updatedCount = 0; + for (let i = 0; i < data.length; i++) { + if (matchesQuery(data[i], query)) { + const updatedDoc = { ...data[i], ...update }; + const isValid = this._avroType.isValid(updatedDoc, { + errorHook: errorValidationFn, + noUndeclaredFields: true, + }); + if (isValid === true) { + data[i] = updatedDoc; + updatedCount++; + } + else { + throw new DocumentValidationError(`${MODULE_NAME}: Invalid document or schema`, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR); + } + } + } + if (updatedCount > 0) { + const success = await this._saveData(data); + if (!success) { + throw new S3OperationError(`${MODULE_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); + } + } + else if (options && 'upsert' in options && options.upsert) { + // If upsert is true, we need to insert the document + const success = await this.insert(update); + if (!success) { + throw new S3OperationError(`${MODULE_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); + } + updatedCount = 1; + } + return updatedCount; + } + catch (error) { + if (error instanceof S3OperationError) { + throw error; + } + throw new lowstorageError(`${MODULE_NAME}: Update operation failed: ${error.message}`, lowstorage_ERROR_CODES.UPDATE_ERROR); + } + } + /** + * Update a single document in the collection that matches the query. + * @param {Object} [query={}] - The query to filter the document to update. + * @param {Object} [update={}] - The update operations to apply to the matching document. + * @returns {Promise} A Promise that resolves to 1 if a document was updated, 0 otherwise. + * @throws {lowstorageError} If the updateOne operation fails. + * @throws {SchemaValidationError} If the schema is not defined for the collection. + * @throws {DocumentValidationError} If the updated document is invalid. + * @throws {S3OperationError} If the S3 operation fails. + */ + async updateOne(query = {}, update = {}, options = {}) { + try { + if (query === undefined || query === null || update === undefined || update === null) { + throw new lowstorageError(`${MODULE_NAME}: Query is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT); + } + if (!this._avroType) { + throw new SchemaValidationError(`${MODULE_NAME}: Schema is not defined for this collection`, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR); + } + const data = await this._loadData(); + if (data.length === 0) + return 0; + const docIndex = data.findIndex((doc) => matchesQuery(doc, query)); + if (docIndex !== -1) { + const updatedDoc = { ...data[docIndex], ...update }; + const isValid = this._avroType.isValid(updatedDoc, { + errorHook: errorValidationFn, + noUndeclaredFields: true, + }); + if (isValid === true) { + data[docIndex] = updatedDoc; + const success = await this._saveData(data); + if (!success) { + throw new S3OperationError(`${MODULE_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); + } + return 1; + } + else { + throw new DocumentValidationError(`${MODULE_NAME}: Invalid document or schema`, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR); + } + } + if (options && 'upsert' in options && options.upsert) { + // If upsert is true, we need to insert the document + const success = await this.insert(update); + if (!success) { + throw new S3OperationError(`${MODULE_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); + } + return 1; + } + return 0; + } + catch (error) { + if (error instanceof lowstorageError) { + throw error; + } + throw new lowstorageError(`${MODULE_NAME}: UpdateOne operation failed: ${error.message}`, lowstorage_ERROR_CODES.UPDATE_ONE_ERROR); + } + } + /** + * Delete documents from the collection. + * @param {Object} [query={}] - The query to filter documents to delete. + * @returns {Promise} A Promise that resolves to the number of documents deleted. + * @throws {lowstorageError} If the delete operation fails. + * @throws {S3OperationError} If the S3 operation fails. + */ + async delete(query = {}) { + try { + if (query === undefined || query === null) { + throw new lowstorageError(`${MODULE_NAME}: Query is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT); + } + const data = await this._loadData(); + if (data.length === 0) + return 0; + const initialLength = data.length; + const newData = data.filter((doc) => !matchesQuery(doc, query)); + const success = await this._saveData(newData); + if (!success) { + throw new S3OperationError(`${MODULE_NAME}: Failed to delete document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); + } + return initialLength - newData.length; + } + catch (error) { + if (error instanceof S3OperationError) { + throw error; + } + throw new lowstorageError(`${MODULE_NAME}: Delete operation failed: ${error.message}`, lowstorage_ERROR_CODES.DELETE_ERROR); + } + } + /** + * Delete all documents from the collection. + * @returns {Promise} A Promise that resolves to the number of documents deleted. + * @throws {lowstorageError} If the delete operation fails. + * @throws {S3OperationError} If the S3 operation fails. + */ + async deleteAll() { + try { + const data = await this._loadData(); + const initialLength = data.length; + const success = await this._saveData([]); + if (!success) { + throw new S3OperationError(`${MODULE_NAME}: Failed to delete document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); + } + return initialLength; + } + catch (error) { + if (error instanceof S3OperationError) { + throw error; + } + throw new lowstorageError(`${MODULE_NAME}: Delete operation failed: ${error.message}`, lowstorage_ERROR_CODES.DELETE_ERROR); + } + } + /** + * Count the number of documents in the collection. + * @param {Object} [query={}] - The query to filter documents. + * @returns {Promise} A Promise that resolves to the number of documents in the collection. + * @throws {lowstorageError} If the count operation fails. + */ + async count(query = {}) { + try { + const data = await this.find(query); + return data.length; + } + catch (error) { + throw new lowstorageError(`${MODULE_NAME}: Count operation failed: ${error.message}`, lowstorage_ERROR_CODES.COUNT_ERROR); + } + } + async renameCollection(newColName, newSchema = this._schema) { + try { + _hasColName(newColName); + const exists = await this._s3.fileExists(`${this._dirPrefix}${DEFAULT_DELIMITER}${newColName}${COL_SUFFIX}`); + if (!!exists) { + throw new lowstorageError(`${MODULE_NAME}: Collection ${newColName} already exists`, lowstorage_ERROR_CODES.COLLECTION_EXISTS); + } + const schema = newSchema || this.getAvroSchema(); + const data = await this._loadData(); + const createNew = new Collection(newColName, schema, this._s3, this._dirPrefix, this._safeWrite, this._chunkSize); + await createNew._saveData(data); + await this._s3.delete(`${this._dirPrefix}${DEFAULT_DELIMITER}${this._colName}${COL_SUFFIX}`); + return createNew; + } + catch (error) { + if (error instanceof lowstorageError) { + throw error; + } + throw new lowstorageError(`${MODULE_NAME}: Rename collection failed: ${error.message}`, lowstorage_ERROR_CODES.RENAME_COLLECTION_ERROR); + } + } +} +// export default lowstorage; +export { lowstorage, lowstorageError, lowstorage_ERROR_CODES }; +//# sourceMappingURL=lowstorage.js.map \ No newline at end of file diff --git a/lib/lowstorage.js.map b/lib/lowstorage.js.map index ae8dfcf..2026fe9 100644 --- a/lib/lowstorage.js.map +++ b/lib/lowstorage.js.map @@ -1,7 +1 @@ -{ - "version": 3, - "sources": ["../node_modules/ultralight-s3/src/index.ts", "../src/lowstorage.js", "../src/errors.js", "../src/helpers.js"], - "sourcesContent": ["'use strict';\n\n// Constants\nconst AWS_ALGORITHM = 'AWS4-HMAC-SHA256';\nconst AWS_REQUEST_TYPE = 'aws4_request';\nconst S3_SERVICE = 's3';\nconst LIST_TYPE = '2';\nconst UNSIGNED_PAYLOAD = 'UNSIGNED-PAYLOAD';\nconst DEFAULT_STREAM_CONTENT_TYPE = 'application/octet-stream';\nconst XML_CONTENT_TYPE = 'application/xml';\nconst JSON_CONTENT_TYPE = 'application/json';\n// List of keys that might contain sensitive information\nconst SENSITIVE_KEYS_REDACTED = ['accessKeyId', 'secretAccessKey', 'sessionToken', 'password'];\nconst MIN_MAX_REQUEST_SIZE_IN_BYTES = 5 * 1024 * 1024;\n\n// Headers\nconst HEADER_AMZ_CONTENT_SHA256 = 'x-amz-content-sha256';\nconst HEADER_AMZ_DATE = 'x-amz-date';\nconst HEADER_HOST = 'host';\nconst HEADER_AUTHORIZATION = 'Authorization';\nconst HEADER_CONTENT_TYPE = 'Content-Type';\nconst HEADER_CONTENT_LENGTH = 'Content-Length';\nconst HEADER_ETAG = 'etag';\nconst HEADER_LAST_MODIFIED = 'last-modified';\n\n// Error messages\nconst ERROR_PREFIX = 'ultralight-s3 Module: ';\nconst ERROR_ACCESS_KEY_REQUIRED = `${ERROR_PREFIX}accessKeyId must be a non-empty string`;\nconst ERROR_SECRET_KEY_REQUIRED = `${ERROR_PREFIX}secretAccessKey must be a non-empty string`;\nconst ERROR_ENDPOINT_REQUIRED = `${ERROR_PREFIX}endpoint must be a non-empty string`;\nconst ERROR_BUCKET_NAME_REQUIRED = `${ERROR_PREFIX}bucketName must be a non-empty string`;\nconst ERROR_KEY_REQUIRED = `${ERROR_PREFIX}key must be a non-empty string`;\nconst ERROR_UPLOAD_ID_REQUIRED = `${ERROR_PREFIX}uploadId must be a non-empty string`;\nconst ERROR_PARTS_REQUIRED = `${ERROR_PREFIX}parts must be a non-empty array`;\nconst ERROR_INVALID_PART = `${ERROR_PREFIX}Each part must have a partNumber (number) and ETag (string)`;\nconst ERROR_DATA_BUFFER_REQUIRED = `${ERROR_PREFIX}data must be a Buffer or string`;\n// const ERROR_PATH_REQUIRED = `${ERROR_PREFIX}path must be a string`;\nconst ERROR_PREFIX_TYPE = `${ERROR_PREFIX}prefix must be a string`;\nconst ERROR_MAX_KEYS_TYPE = `${ERROR_PREFIX}maxKeys must be a positive integer`;\nconst ERROR_DELIMITER_REQUIRED = `${ERROR_PREFIX}delimiter must be a string`;\n\n// const STATUS_CODES: Record = {\n// 200: 'OK',\n// 204: 'No Content',\n// 205: 'Reset Content',\n// 206: 'Partial Content',\n// 301: 'Moved Permanently',\n// 302: 'Found',\n// 400: 'Bad Request',\n// 401: 'Unauthorized',\n// 403: 'Forbidden',\n// 404: 'Not Found',\n// 418: \"I'm a Teapot\",\n// 428: 'Precondition Required',\n// 429: 'Too Many Requests',\n// 500: 'Internal Server Error',\n// 501: 'Not Implemented',\n// };\n\ninterface S3Config {\n accessKeyId: string;\n secretAccessKey: string;\n endpoint: string;\n bucketName: string;\n region?: string;\n maxRequestSizeInBytes?: number;\n requestAbortTimeout?: number;\n logger?: Logger;\n}\n\ndeclare global {\n interface Crypto {\n createHmac: (\n algorithm: string,\n key: string | Buffer,\n ) => {\n update: (data: string | Buffer) => void;\n digest: (encoding?: 'hex' | 'base64' | 'latin1') => string;\n };\n createHash: (algorithm: string) => {\n update: (data: string | Buffer) => void;\n digest: (encoding?: 'hex' | 'base64' | 'latin1') => string;\n };\n }\n}\n\ninterface Logger {\n info: (message: string, ...args: any[]) => void;\n warn: (message: string, ...args: any[]) => void;\n error: (message: string, ...args: any[]) => void;\n}\n\ninterface UploadPart {\n partNumber: number;\n ETag: string;\n}\n\ninterface CompleteMultipartUploadResult {\n Location: string;\n Bucket: string;\n Key: string;\n ETag: string;\n}\n\ntype HttpMethod = 'POST' | 'GET' | 'HEAD' | 'PUT' | 'DELETE';\n\n// false - Not found (404)\n// true - Found (200)\n// null - ETag mismatch (412)\ntype ExistResponseCode = false | true | null;\n\nlet _createHmac = crypto.createHmac || (await import('node:crypto')).createHmac;\nlet _createHash = crypto.createHash || (await import('node:crypto')).createHash;\n\nif (typeof _createHmac === 'undefined' && typeof _createHash === 'undefined') {\n console.error(\n 'ultralight-S3 Module: Crypto functions are not available, please report the issue with necessary description: https://github.com/sentienhq/ultralight-s3/issues',\n );\n}\n\nconst expectArray: { [key: string]: boolean } = {\n contents: true,\n};\n\nconst encodeAsHex = (c: string): string => `%${c.charCodeAt(0).toString(16).toUpperCase()}`;\n\nconst uriEscape = (uriStr: string): string => {\n return encodeURIComponent(uriStr).replace(/[!'()*]/g, encodeAsHex);\n};\n\nconst uriResourceEscape = (string: string): string => {\n return uriEscape(string).replace(/%2F/g, '/');\n};\n\n/**\n * S3 class for interacting with S3-compatible object storage services.\n * This class provides methods for common S3 operations such as uploading, downloading,\n * and deleting objects, as well as multipart uploads.\n *\n * @class\n * @example\n * const s3 = new S3({\n * accessKeyId: 'your-access-key',\n * secretAccessKey: 'your-secret-key',\n * endpoint: 'https://your-s3-endpoint.com',\n * bucketName: 'your-bucket-name',\n * region: 'us-east-1' // by default is auto\n * });\n *\n * // Upload a file\n * await s3.put('example.txt', 'Hello, World!');\n *\n * // Download a file\n * const content = await s3.get('example.txt');\n *\n * // Delete a file\n * await s3.delete('example.txt');\n */\nclass S3 {\n /**\n * Creates an instance of the S3 class.\n *\n * @constructor\n * @param {Object} config - Configuration options for the S3 instance.\n * @param {string} config.accessKeyId - The access key ID for authentication.\n * @param {string} config.secretAccessKey - The secret access key for authentication.\n * @param {string} config.endpoint - The endpoint URL of the S3-compatible service.\n * @param {string} [config.bucketName=''] - The name of the bucket to operate on.\n * @param {string} [config.region='auto'] - The region of the S3 service.\n * @param {number} [config.maxRequestSizeInBytes=5242880] - The maximum size of a single request in bytes (minimum for AWS S3 is 5MB).\n * @param {number} [config.requestAbortTimeout=undefined] - The timeout in milliseconds after which a request should be aborted (careful on streamed requests).\n * @param {Object} [config.logger=null] - A logger object with methods like info, warn, error.\n * @throws {TypeError} Will throw an error if required parameters are missing or of incorrect type.\n */\n private accessKeyId: string;\n private secretAccessKey: string;\n private endpoint: string;\n private bucketName: string;\n private region: string;\n private maxRequestSizeInBytes: number;\n private requestAbortTimeout?: number;\n private logger?: Logger;\n\n constructor({\n accessKeyId,\n secretAccessKey,\n endpoint,\n bucketName,\n region = 'auto',\n maxRequestSizeInBytes = MIN_MAX_REQUEST_SIZE_IN_BYTES,\n requestAbortTimeout = undefined,\n logger = undefined,\n }: S3Config) {\n this._validateConstructorParams(accessKeyId, secretAccessKey, endpoint, bucketName);\n this.accessKeyId = accessKeyId;\n this.secretAccessKey = secretAccessKey;\n this.endpoint = endpoint;\n this.bucketName = bucketName;\n this.region = region;\n this.maxRequestSizeInBytes = maxRequestSizeInBytes;\n this.requestAbortTimeout = requestAbortTimeout;\n this.logger = logger;\n }\n\n private _validateConstructorParams(\n accessKeyId: string,\n secretAccessKey: string,\n endpoint: string,\n bucketName: string,\n ): void {\n if (typeof accessKeyId !== 'string' || accessKeyId.trim().length === 0)\n throw new TypeError(ERROR_ACCESS_KEY_REQUIRED);\n if (typeof secretAccessKey !== 'string' || secretAccessKey.trim().length === 0)\n throw new TypeError(ERROR_SECRET_KEY_REQUIRED);\n if (typeof endpoint !== 'string' || endpoint.trim().length === 0) throw new TypeError(ERROR_ENDPOINT_REQUIRED);\n if (typeof bucketName !== 'string' || bucketName.trim().length === 0)\n throw new TypeError(ERROR_BUCKET_NAME_REQUIRED);\n }\n\n private _checkMethodHeadnGet(method: string): void {\n if (method !== 'GET' && method !== 'HEAD') {\n this._log('error', `${ERROR_PREFIX}method must be either GET or HEAD`);\n throw new Error('method must be either GET or HEAD');\n }\n }\n\n private _checkKey(key: string): void {\n if (typeof key !== 'string' || key.trim().length === 0) {\n this._log('error', ERROR_KEY_REQUIRED);\n throw new TypeError(ERROR_KEY_REQUIRED);\n }\n }\n\n private _checkDelimiter(delimiter: string): void {\n if (typeof delimiter !== 'string' || delimiter.trim().length === 0) {\n this._log('error', ERROR_DELIMITER_REQUIRED);\n throw new TypeError(ERROR_DELIMITER_REQUIRED);\n }\n }\n\n private _checkPrefix(prefix: string): void {\n if (typeof prefix !== 'string') {\n this._log('error', ERROR_PREFIX_TYPE);\n throw new TypeError(ERROR_PREFIX_TYPE);\n }\n }\n\n private _checkMaxKeys(maxKeys: number): void {\n if (typeof maxKeys !== 'number' || maxKeys <= 0) {\n this._log('error', ERROR_MAX_KEYS_TYPE);\n throw new TypeError(ERROR_MAX_KEYS_TYPE);\n }\n }\n\n private _checkOpts(opts: Record): void {\n if (typeof opts !== 'object') {\n this._log('error', `${ERROR_PREFIX}opts must be an object`);\n throw new TypeError(`${ERROR_PREFIX}opts must be an object`);\n }\n }\n\n /**\n * Internal method to log messages with sanitized sensitive information.\n * @param {string} level - The log level (e.g., 'info', 'warn', 'error').\n * @param {string} message - The message to log.\n * @param {Object} [additionalData={}] - Additional data to include in the log.\n * @private\n */\n private _log(\n level: 'info' | 'warn' | 'error',\n message: string,\n additionalData: Record | string = {},\n ): void {\n if (this.logger && typeof this.logger[level] === 'function') {\n // Function to recursively sanitize an object\n const sanitize = (obj: any): any => {\n if (typeof obj !== 'object' || obj === null) {\n return obj;\n }\n return Object.keys(obj).reduce(\n (acc: any, key) => {\n if (SENSITIVE_KEYS_REDACTED.includes(key.toLowerCase())) {\n acc[key] = '[REDACTED]';\n } else if (typeof obj[key] === 'object' && obj[key] !== null) {\n acc[key] = sanitize(obj[key]);\n } else {\n acc[key] = obj[key];\n }\n return acc;\n },\n Array.isArray(obj) ? [] : {},\n );\n };\n\n // Sanitize the additional data\n const sanitizedData = sanitize(additionalData);\n // Prepare the log entry\n const logEntry = {\n timestamp: new Date().toISOString(),\n level,\n message,\n ...sanitizedData,\n // Include some general context, but sanitize sensitive parts\n context: sanitize({\n bucketName: this.bucketName,\n region: this.region,\n endpoint: this.endpoint,\n // Only include the first few characters of the access key, if it exists\n accessKeyId: this.accessKeyId ? `${this.accessKeyId.substring(0, 4)}...` : undefined,\n }),\n };\n\n // Log the sanitized entry\n this.logger[level](logEntry);\n }\n }\n\n getBucketName = () => this.bucketName;\n setBucketName = (bucketName: string) => {\n this.bucketName = bucketName;\n };\n getRegion = () => this.region;\n setRegion = (region: string) => {\n this.region = region;\n };\n getEndpoint = () => this.endpoint;\n setEndpoint = (endpoint: string) => {\n this.endpoint = endpoint;\n };\n getMaxRequestSizeInBytes = () => this.maxRequestSizeInBytes;\n setMaxRequestSizeInBytes = (maxRequestSizeInBytes: number) => {\n this.maxRequestSizeInBytes = maxRequestSizeInBytes;\n };\n sanitizeETag = (etag: string): string => sanitizeETag(etag);\n\n getProps = () => ({\n accessKeyId: this.accessKeyId,\n secretAccessKey: this.secretAccessKey,\n region: this.region,\n bucket: this.bucketName,\n endpoint: this.endpoint,\n maxRequestSizeInBytes: this.maxRequestSizeInBytes,\n requestAbortTimeout: this.requestAbortTimeout,\n logger: this.logger,\n });\n setProps = (props: S3Config) => {\n this._validateConstructorParams(props.accessKeyId, props.secretAccessKey, props.bucketName, props.endpoint);\n this.accessKeyId = props.accessKeyId;\n this.secretAccessKey = props.secretAccessKey;\n this.region = props.region || 'auto';\n this.bucketName = props.bucketName;\n this.endpoint = props.endpoint;\n this.maxRequestSizeInBytes = props.maxRequestSizeInBytes || MIN_MAX_REQUEST_SIZE_IN_BYTES;\n this.requestAbortTimeout = props.requestAbortTimeout;\n this.logger = props.logger;\n };\n\n /**\n * Get the content length of an object.\n * @param {string} key - The key of the object.\n * @returns {Promise} The content length of the object in bytes.\n * @throws {TypeError} If the key is not a non-empty string.\n */\n async getContentLength(key: string): Promise {\n this._checkKey(key);\n const headers = {\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('HEAD', encodedKey, {}, headers, '');\n const res = await this._sendRequest(url, 'HEAD', signedHeaders);\n const contentLength = res.headers.get(HEADER_CONTENT_LENGTH);\n return contentLength ? parseInt(contentLength, 10) : 0;\n }\n\n /**\n * Check if a bucket exists.\n * @returns {Promise} True if the bucket exists, false otherwise.\n */\n async bucketExists(): Promise {\n const headers = {\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n const { url, headers: signedHeaders } = await this._sign('HEAD', '', {}, headers, '');\n const res = await this._sendRequest(url, 'HEAD', signedHeaders);\n if (res.ok && res.status === 200) {\n return true;\n }\n return false;\n }\n\n // TBD\n // async createBucket(bucketName) {\n // const xmlBody = `\n // \n // \n // ${this.region}\n // \n // `;\n // const headers = {\n // [HEADER_CONTENT_TYPE]: XML_CONTENT_TYPE,\n // [HEADER_CONTENT_LENGTH]: Buffer.byteLength(xmlBody).toString(),\n // [HEADER_AMZ_CONTENT_SHA256]: await _hash(xmlBody),\n // };\n // const encodedKey = encodeURI(bucketName);\n // const { url, headers: signedHeaders } = await this._sign('PUT', encodedKey, {}, headers, '');\n // const res = await this._sendRequest(url, 'PUT', signedHeaders);\n // if (res.ok && res.status === 200) {\n // return true;\n // }\n // return false;\n // }\n\n /**\n * Check if a file exists in the bucket.\n * @param {string} key - The key of the object.\n * @param {Object} [opts={}] - Additional options for the fileExists operation.\n * @returns {Promise} True if the file exists, false otherwise. 0 - Not found (404), 1 - Found (200), 2 - ETag mismatch (412).\n * @throws {TypeError} If the key is not a non-empty string.\n */\n async fileExists(key: string, opts: Record = {}): Promise {\n this._checkKey(key);\n const { filteredOpts, conditionalHeaders } = this._filterIfHeaders(opts);\n const headers = { [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD, ...conditionalHeaders };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('HEAD', encodedKey, filteredOpts, headers, '');\n try {\n const res = await this._sendRequest(url, 'HEAD', signedHeaders, '', [200, 404, 412, 304]);\n if (res.status === 404) {\n return false;\n }\n if (res.status === 412 || res.status === 304) {\n return null;\n }\n if (res.ok && res.status === 200) return true;\n else this._handleErrorResponse(res);\n return false; // should never happen\n } catch (error: unknown) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n this._log('error', `${ERROR_PREFIX}Failed to check if file exists: ${errorMessage}`);\n throw new Error(`${ERROR_PREFIX}Failed to check if file exists: ${errorMessage}`);\n }\n }\n private async _sign(\n method: HttpMethod,\n keyPath: string,\n query: Object,\n headers: Record,\n body: string | Buffer,\n ): Promise<{ url: string; headers: Record }> {\n const datetime = new Date().toISOString().replace(/[:-]|\\.\\d{3}/g, '');\n const url =\n typeof keyPath === 'string' && keyPath.length > 0 ? new URL(keyPath, this.endpoint) : new URL(this.endpoint);\n url.pathname = `/${encodeURI(this.bucketName)}${url.pathname}`;\n headers[HEADER_AMZ_CONTENT_SHA256] = body ? await _hash(body) : UNSIGNED_PAYLOAD;\n headers[HEADER_AMZ_DATE] = datetime;\n headers[HEADER_HOST] = url.host;\n const canonicalHeaders = this._buildCanonicalHeaders(headers);\n const signedHeaders = Object.keys(headers)\n .map(key => key.toLowerCase())\n .sort()\n .join(';');\n\n const canonicalRequest = await this._buildCanonicalRequest(\n method,\n url,\n query,\n canonicalHeaders,\n signedHeaders,\n body,\n );\n const stringToSign = await this._buildStringToSign(datetime, canonicalRequest);\n const signature = await this._calculateSignature(datetime, stringToSign);\n const authorizationHeader = this._buildAuthorizationHeader(datetime, signedHeaders, signature);\n headers[HEADER_AUTHORIZATION] = authorizationHeader;\n return { url: url.toString(), headers };\n }\n\n private _buildCanonicalHeaders(headers: Record): string {\n return Object.entries(headers)\n .map(([key, value]) => `${key.toLowerCase()}:${String(value).trim()}`)\n .sort()\n .join('\\n');\n }\n\n async _buildCanonicalRequest(\n method: HttpMethod,\n url: URL,\n query: Object,\n canonicalHeaders: string,\n signedHeaders: string,\n body: string | Buffer,\n ): Promise {\n return [\n method,\n url.pathname,\n this._buildCanonicalQueryString(query),\n `${canonicalHeaders}\\n`,\n signedHeaders,\n body ? await _hash(body) : UNSIGNED_PAYLOAD,\n ].join('\\n');\n }\n\n async _buildStringToSign(datetime: string, canonicalRequest: string): Promise {\n const credentialScope = [datetime.slice(0, 8), this.region, S3_SERVICE, AWS_REQUEST_TYPE].join('/');\n return [AWS_ALGORITHM, datetime, credentialScope, await _hash(canonicalRequest)].join('\\n');\n }\n\n async _calculateSignature(datetime: string, stringToSign: string): Promise {\n const signingKey = await this._getSignatureKey(datetime.slice(0, 8));\n return _hmac(signingKey, stringToSign, 'hex');\n }\n\n private _buildAuthorizationHeader(datetime: string, signedHeaders: string, signature: string): string {\n const credentialScope = [datetime.slice(0, 8), this.region, S3_SERVICE, AWS_REQUEST_TYPE].join('/');\n return [\n `${AWS_ALGORITHM} Credential=${this.accessKeyId}/${credentialScope}`,\n `SignedHeaders=${signedHeaders}`,\n `Signature=${signature}`,\n ].join(', ');\n }\n\n private _filterIfHeaders(opts: Record): {\n filteredOpts: Record;\n conditionalHeaders: Record;\n } {\n const filteredOpts: Record = {};\n const conditionalHeaders: Record = {};\n const ifHeaders = ['if-match', 'if-none-match', 'if-modified-since', 'if-unmodified-since'];\n\n for (const [key, value] of Object.entries(opts)) {\n if (ifHeaders.includes(key)) {\n conditionalHeaders[key] = value;\n } else {\n filteredOpts[key] = value;\n }\n }\n\n return { filteredOpts, conditionalHeaders };\n }\n /**\n * List objects in the bucket.\n * @param {string} [delimiter='/'] - The delimiter to use for grouping objects in specific path.\n * @param {string} [prefix=''] - The prefix to filter objects in specific path.\n * @param {number} [maxKeys=1000] - The maximum number of keys to return.\n * @param {string} [method='GET'] - The HTTP method to use (GET or HEAD).\n * @param {Object} [opts={}] - Additional options for the list operation.\n * @returns {Promise} The list of objects or object metadata.\n * @throws {TypeError} If any of the parameters are of incorrect type.\n */\n async list(\n delimiter: string = '/',\n prefix: string = '',\n maxKeys: number = 1000,\n method: HttpMethod = 'GET',\n opts: Object = {},\n ): Promise> {\n this._checkDelimiter(delimiter);\n this._checkPrefix(prefix);\n this._checkMaxKeys(maxKeys);\n this._checkMethodHeadnGet(method);\n this._checkOpts(opts);\n this._log('info', `Listing objects in ${prefix}`);\n\n const query = {\n 'list-type': LIST_TYPE,\n 'max-keys': String(maxKeys),\n ...opts,\n } as { [key: string]: any };\n if (prefix.length > 0) {\n query['prefix'] = prefix;\n }\n const headers = {\n [HEADER_CONTENT_TYPE]: JSON_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n const encodedKey = delimiter === '/' ? delimiter : uriEscape(delimiter);\n const { url, headers: signedHeaders } = await this._sign('GET', encodedKey, query, headers, '');\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n const res = await this._sendRequest(urlWithQuery, 'GET', signedHeaders);\n const responseBody = await res.text();\n\n if (method === 'HEAD') {\n const contentLength = res.headers.get(HEADER_CONTENT_LENGTH);\n const lastModified = res.headers.get(HEADER_LAST_MODIFIED);\n const etag = res.headers.get(HEADER_ETAG);\n\n return {\n size: contentLength ? +contentLength : undefined,\n mtime: lastModified ? new Date(lastModified) : undefined,\n ETag: etag || undefined,\n };\n }\n\n const data = _parseXml(responseBody);\n const output = data.listBucketResult || data.error || data;\n return output.contents || output;\n }\n\n /**\n * List multipart uploads in the bucket.\n * @param {string} [delimiter='/'] - The delimiter to use for grouping objects in specific path.\n * @param {string} [prefix=''] - The prefix to filter objects in specific path.\n * @param {string} [method='GET'] - The HTTP method to use (GET or HEAD).\n * @param {Object} [opts={}] - Additional options for the list operation.\n * @returns {Promise} The list of objects or object metadata.\n * @throws {TypeError} If any of the parameters are of incorrect type.\n */\n async listMultiPartUploads(\n delimiter: string = '/',\n prefix: string = '',\n method: HttpMethod = 'GET',\n opts: Object = {},\n ): Promise {\n this._checkDelimiter(delimiter);\n this._checkPrefix(prefix);\n this._checkMethodHeadnGet(method);\n this._checkOpts(opts);\n this._log('info', `Listing multipart uploads in ${prefix}`);\n\n const query = {\n uploads: '',\n ...opts,\n } as Record;\n const headers = {\n [HEADER_CONTENT_TYPE]: JSON_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n const encodedKey = delimiter === '/' ? delimiter : uriEscape(delimiter);\n const { url, headers: signedHeaders } = await this._sign('GET', encodedKey, query, headers, '');\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n const res = await this._sendRequest(urlWithQuery, 'GET', signedHeaders);\n const responseBody = await res.text();\n\n if (method === 'HEAD') {\n return {\n size: +(res.headers.get(HEADER_CONTENT_LENGTH) ?? '0'),\n mtime: new Date(res.headers.get(HEADER_LAST_MODIFIED) ?? ''),\n ETag: res.headers.get(HEADER_ETAG) ?? '',\n };\n }\n\n const data = _parseXml(responseBody);\n const output = data.listMultipartUploadsResult || data.error || data;\n return output.uploads || output;\n }\n\n /**\n * Get an object from the bucket.\n * @param {string} key - The key of the object to get.\n * @param {Object} [opts={}] - Additional options for the get operation.\n * @returns {Promise} The content of the object. If the object does not exist, null will be returned.\n */\n async get(key: string, opts: Record = {}): Promise {\n this._checkKey(key);\n this._log('info', `Getting object ${key}`);\n const { filteredOpts, conditionalHeaders } = this._filterIfHeaders(opts);\n const headers = {\n [HEADER_CONTENT_TYPE]: JSON_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n ...conditionalHeaders,\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('GET', encodedKey, filteredOpts, headers, '');\n const res = await this._sendRequest(url, 'GET', signedHeaders, '', [200, 404, 412, 304]);\n if (res.status === 404 || res.status === 412 || res.status === 304) {\n this._log('error', `Failed to get object. Status: ${res.status}`);\n return null;\n }\n if (!res.ok) {\n this._log('error', `Failed to get object. Status: ${res.status}`);\n throw new Error(`Failed to get object. Status: ${res.status}`);\n }\n return res.text();\n }\n\n /**\n *\n * @param {string} key - The key of the object to get.\n * @param {Object} [opts={}] - Additional options for the get operation.\n * @returns {Promise<{ etag: string|null; data: string|null }>} The content of the object. If the object does not exist, etag and data will be null.\n */\n async getObjectWithETag(\n key: string,\n opts: Record = {},\n ): Promise<{ etag: string | null; data: string | null }> {\n this._checkKey(key);\n this._log('info', `Getting object ${key}`);\n const { filteredOpts, conditionalHeaders } = this._filterIfHeaders(opts);\n const headers = {\n [HEADER_CONTENT_TYPE]: JSON_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n ...conditionalHeaders,\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('GET', encodedKey, filteredOpts, headers, '');\n try {\n const res = await this._sendRequest(url, 'GET', signedHeaders, '', [200, 404, 412, 304]);\n if (res.status === 404 || res.status === 412 || res.status === 304) {\n this._log('error', `Failed to get object. Status: ${res.status}`);\n return { etag: null, data: null };\n }\n if (!res.ok) {\n this._log('error', `Failed to get object. Status: ${res.status}`);\n throw new Error(`Failed to get object. Status: ${res.status}`);\n }\n\n const etag = res.headers.get('etag');\n if (!etag) {\n throw new Error('ETag not found in response headers');\n }\n const data = await res.text();\n return { etag: sanitizeETag(etag), data };\n } catch (error) {\n this._log('error', `Error getting object ${key} with ETag: ${error}`);\n throw error;\n }\n }\n\n /**\n * Get the ETag of an object.\n * @param {string} key - The key of the object to get.\n * @param {Object} [opts={}] - Additional options for the get operation.\n * @returns {Promise} The ETag of the object or null if the object etag does not match.\n */\n async getEtag(key: string, opts: Record = {}): Promise {\n this._checkKey(key);\n this._log('info', `Getting etag object ${key}`);\n const { filteredOpts, conditionalHeaders } = this._filterIfHeaders(opts);\n const headers = {\n [HEADER_CONTENT_TYPE]: JSON_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n ...conditionalHeaders,\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('HEAD', encodedKey, filteredOpts, headers, '');\n\n const res = await this._sendRequest(url, 'HEAD', signedHeaders, '', [200, 412, 304]);\n this._log('info', `Response status: ${(res.status, res.statusText)}`);\n // etag does not match\n if (res.status === 412 || res.status === 304) {\n return null;\n }\n\n const etag = res.headers.get('etag');\n if (!etag) {\n this._log('error', `ETag not found in response headers`);\n throw new Error(`ETag not found in response headers`);\n }\n return sanitizeETag(etag);\n }\n\n /**\n * Get a response of an object from the bucket.\n * @param {string} key - The key of the object to get.\n * @param {boolean} [wholeFile=true] - Whether to get the whole file or a part.\n * @param {number} [rangeFrom=0] - The range from to get if not getting the whole file.\n * @param {number} [rangeTo=this.maxRequestSizeInBytes] - The range to to get if not getting the whole file. Note: rangeTo is inclusive.\n * @param {Object} [opts={}] - Additional options for the get operation.\n * @returns {Promise} Response of the object content. Use readableStream() to get the stream from .body.\n */\n async getResponse(\n key: string,\n wholeFile: boolean = true,\n rangeFrom: number = 0,\n rangeTo: number = this.maxRequestSizeInBytes,\n opts: Record = {},\n ): Promise {\n this._checkKey(key);\n const { filteredOpts, conditionalHeaders } = this._filterIfHeaders({ ...opts });\n const headers = {\n [HEADER_CONTENT_TYPE]: JSON_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n ...(wholeFile ? {} : { range: `bytes=${rangeFrom}-${rangeTo - 1}` }),\n ...conditionalHeaders,\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('GET', encodedKey, filteredOpts, headers, '');\n const urlWithQuery = `${url}?${new URLSearchParams(filteredOpts)}`;\n\n return this._sendRequest(urlWithQuery, 'GET', signedHeaders);\n }\n\n /**\n * Put an object into the bucket.\n * @param {string} key - The key of the object to put. To create a folder, include a trailing slash.\n * @param {Buffer|string} data - The content of the object to put.\n * @returns {Promise} The response from the put operation.\n * @throws {TypeError} If the key is not a non-empty string or data is not a Buffer or string.\n */\n async put(key: string, data: string | Buffer): Promise {\n this._checkKey(key);\n if (!(data instanceof Buffer || typeof data === 'string')) {\n this._log('error', ERROR_DATA_BUFFER_REQUIRED);\n throw new TypeError(ERROR_DATA_BUFFER_REQUIRED);\n }\n // const encodedKey = encodeURIComponent(key);\n this._log('info', `Uploading object ${key}`);\n const contentLength = typeof data === 'string' ? Buffer.byteLength(data) : data.length;\n const headers = {\n [HEADER_CONTENT_LENGTH]: contentLength,\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('PUT', encodedKey, {}, headers, data);\n const res = await this._sendRequest(url, 'PUT', signedHeaders, data);\n return res;\n }\n\n /**\n * Initiate a multipart upload.\n * @param {string} key - The key of the object to upload.\n * @param {string} [fileType='application/octet-stream'] - The MIME type of the file.\n * @returns {Promise} The upload ID for the multipart upload.\n * @throws {TypeError} If the key is not a non-empty string or fileType is not a string.\n * @throws {Error} If the multipart upload initiation fails.\n */\n async getMultipartUploadId(key: string, fileType: string = DEFAULT_STREAM_CONTENT_TYPE): Promise {\n this._checkKey(key);\n if (typeof fileType !== 'string') {\n this._log('error', `${ERROR_PREFIX}fileType must be a string`);\n throw new TypeError(`${ERROR_PREFIX}fileType must be a string`);\n }\n this._log('info', `Initiating multipart upload for object ${key}`);\n const query = { uploads: '' };\n const headers = {\n [HEADER_CONTENT_TYPE]: fileType,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('POST', encodedKey, query, headers, '');\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n\n const res = await this._sendRequest(urlWithQuery, 'POST', signedHeaders);\n const responseBody = await res.text();\n const parsedResponse = _parseXml(responseBody);\n\n if (\n typeof parsedResponse === 'object' &&\n parsedResponse !== null &&\n 'error' in parsedResponse &&\n typeof parsedResponse.error === 'object' &&\n parsedResponse.error !== null &&\n 'message' in parsedResponse.error\n ) {\n const errorMessage = String(parsedResponse.error.message);\n this._log('error', `${ERROR_PREFIX}Failed to abort multipart upload: ${errorMessage}`);\n throw new Error(`${ERROR_PREFIX}Failed to abort multipart upload: ${errorMessage}`);\n }\n\n if (typeof parsedResponse === 'object' && parsedResponse !== null) {\n if (!parsedResponse.initiateMultipartUploadResult || !parsedResponse.initiateMultipartUploadResult.uploadId) {\n this._log('error', `${ERROR_PREFIX}Failed to create multipart upload: no uploadId in response`);\n throw new Error(`${ERROR_PREFIX}Failed to create multipart upload: Missing upload ID in response`);\n }\n\n return parsedResponse.initiateMultipartUploadResult.uploadId;\n } else {\n this._log('error', `${ERROR_PREFIX}Failed to create multipart upload: unexpected response format`);\n throw new Error(`${ERROR_PREFIX}Failed to create multipart upload: Unexpected response format`);\n }\n }\n\n /**\n * Upload a part in a multipart upload.\n * @param {string} key - The key of the object being uploaded.\n * @param {Buffer|string} data - The content of the part.\n * @param {string} uploadId - The upload ID of the multipart upload.\n * @param {number} partNumber - The part number.\n * @param {Object} [opts={}] - Additional options for the upload.\n * @returns {Promise} The ETag and part number of the uploaded part.\n * @throws {TypeError} If any of the parameters are of incorrect type.\n */\n async uploadPart(\n key: string,\n data: Buffer | string,\n uploadId: string,\n partNumber: number,\n opts: Object = {},\n ): Promise {\n this._validateUploadPartParams(key, data, uploadId, partNumber, opts);\n const query = { uploadId, partNumber, ...opts } as { [key: string]: any };\n const headers = {\n [HEADER_CONTENT_LENGTH]: data.length,\n } as { [key: string]: any };\n\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('PUT', encodedKey, query, headers, data);\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n\n const res = await this._sendRequest(urlWithQuery, 'PUT', signedHeaders, data);\n const ETag = sanitizeETag(res.headers.get('etag') || '');\n return { partNumber, ETag };\n }\n\n private _validateUploadPartParams(\n key: string,\n data: Buffer | string,\n uploadId: string,\n partNumber: number,\n opts: Object,\n ) {\n this._checkKey(key);\n if (!(data instanceof Buffer || typeof data === 'string')) {\n this._log('error', ERROR_DATA_BUFFER_REQUIRED);\n throw new TypeError(ERROR_DATA_BUFFER_REQUIRED);\n }\n if (typeof uploadId !== 'string' || uploadId.trim().length === 0) {\n this._log('error', ERROR_UPLOAD_ID_REQUIRED);\n throw new TypeError(ERROR_UPLOAD_ID_REQUIRED);\n }\n if (!Number.isInteger(partNumber) || partNumber <= 0) {\n this._log('error', `${ERROR_PREFIX}partNumber must be a positive integer`);\n throw new TypeError(`${ERROR_PREFIX}partNumber must be a positive integer`);\n }\n this._checkOpts(opts);\n }\n\n /**\n * Complete a multipart upload.\n * @param {string} key - The key of the object being uploaded.\n * @param {string} uploadId - The upload ID of the multipart upload.\n * @param {Array} parts - An array of objects containing PartNumber and ETag for each part.\n * @returns {Promise} The result of the complete multipart upload operation.\n * @throws {TypeError} If any of the parameters are of incorrect type.\n * @throws {Error} If the complete multipart upload operation fails.\n */\n async completeMultipartUpload(\n key: string,\n uploadId: string,\n parts: Array,\n ): Promise {\n this._checkKey(key);\n if (typeof uploadId !== 'string' || uploadId.trim().length === 0) {\n this._log('error', ERROR_UPLOAD_ID_REQUIRED);\n throw new TypeError(ERROR_UPLOAD_ID_REQUIRED);\n }\n if (!Array.isArray(parts) || parts.length === 0) {\n this._log('error', ERROR_PARTS_REQUIRED);\n throw new TypeError(ERROR_PARTS_REQUIRED);\n }\n if (!parts.every(part => typeof part.partNumber === 'number' && typeof part.ETag === 'string')) {\n this._log('error', ERROR_INVALID_PART);\n throw new TypeError(ERROR_INVALID_PART);\n }\n this._log('info', `Complete multipart upload ${uploadId} for object ${key}`);\n const query = { uploadId };\n const xmlBody = this._buildCompleteMultipartUploadXml(parts);\n const headers = {\n [HEADER_CONTENT_TYPE]: XML_CONTENT_TYPE,\n [HEADER_CONTENT_LENGTH]: Buffer.byteLength(xmlBody).toString(),\n [HEADER_AMZ_CONTENT_SHA256]: await _hash(xmlBody),\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('POST', encodedKey, query, headers, xmlBody);\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n\n const res = await this._sendRequest(urlWithQuery, 'POST', signedHeaders, xmlBody);\n const responseBody = await res.text();\n const parsedResponse = _parseXml(responseBody);\n\n if (\n typeof parsedResponse === 'object' &&\n parsedResponse !== null &&\n 'error' in parsedResponse &&\n typeof parsedResponse.error === 'object' &&\n parsedResponse.error !== null &&\n 'message' in parsedResponse.error\n ) {\n const errorMessage = String(parsedResponse.error.message);\n this._log('error', `${ERROR_PREFIX}Failed to abort multipart upload: ${errorMessage}`);\n throw new Error(`${ERROR_PREFIX}Failed to abort multipart upload: ${errorMessage}`);\n }\n\n return parsedResponse.completeMultipartUploadResult;\n }\n\n /**\n * Aborts a multipart upload.\n * @param {string} key - The key of the object being uploaded.\n * @param {string} uploadId - The ID of the multipart upload to abort.\n * @returns {Promise} - A promise that resolves to the abort response.\n * @throws {Error} If the abort operation fails.\n */\n async abortMultipartUpload(key: string, uploadId: string): Promise {\n // Input validation\n this._checkKey(key);\n if (typeof uploadId !== 'string' || uploadId.trim().length === 0) {\n this._log('error', ERROR_UPLOAD_ID_REQUIRED);\n throw new TypeError(ERROR_UPLOAD_ID_REQUIRED);\n }\n\n this._log('info', `Aborting multipart upload ${uploadId} for object ${key}`);\n\n // Prepare the request\n const query = { uploadId };\n const headers = {\n [HEADER_CONTENT_TYPE]: XML_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n\n try {\n // Sign and send the request\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('DELETE', encodedKey, query, headers, '');\n const urlWithQuery = `${url}?${new URLSearchParams(query)}`;\n\n const res = await this._sendRequest(urlWithQuery, 'DELETE', signedHeaders);\n\n // Check for successful response\n if (res.ok) {\n const responseBody = await res.text();\n const parsedResponse = _parseXml(responseBody);\n\n if (\n typeof parsedResponse === 'object' &&\n parsedResponse !== null &&\n 'error' in parsedResponse &&\n typeof parsedResponse.error === 'object' &&\n parsedResponse.error !== null &&\n 'message' in parsedResponse.error\n ) {\n const errorMessage = String(parsedResponse.error.message);\n this._log('error', `${ERROR_PREFIX}Failed to abort multipart upload: ${errorMessage}`);\n throw new Error(`${ERROR_PREFIX}Failed to abort multipart upload: ${errorMessage}`);\n }\n\n return {\n status: 'Aborted',\n key,\n uploadId,\n response: parsedResponse,\n };\n } else {\n this._log('error', `${ERROR_PREFIX}Abort request failed with status ${res.status}`);\n throw new Error(`${ERROR_PREFIX}Abort request failed with status ${res.status}`);\n }\n } catch (error: unknown) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n this._log('error', `${ERROR_PREFIX}Failed to abort multipart upload for key ${key}: ${errorMessage}`);\n throw new Error(`${ERROR_PREFIX}Failed to abort multipart upload for key ${key}: ${errorMessage}`);\n }\n }\n\n private _buildCompleteMultipartUploadXml(parts: Array): string {\n return `\n \n ${parts\n .map(\n part => `\n \n ${part.partNumber}\n ${part.ETag}\n \n `,\n )\n .join('')}\n \n `;\n }\n\n /**\n * Delete an object from the bucket.\n * @param {string} key - The key of the object to delete.\n * @returns {Promise} The response from the delete operation. True if the delete operation was successful, false otherwise. Note: The delete operation may return a 204 status code even if the object was not found.\n */\n async delete(key: string): Promise {\n this._checkKey(key);\n this._log('info', `Deleting object ${key}`);\n const headers = {\n [HEADER_CONTENT_TYPE]: JSON_CONTENT_TYPE,\n [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD,\n };\n const encodedKey = uriResourceEscape(key);\n const { url, headers: signedHeaders } = await this._sign('DELETE', encodedKey, {}, headers, '');\n const res = await this._sendRequest(url, 'DELETE', signedHeaders);\n if (res.status === 204 || res.status === 200) {\n return true;\n }\n return false;\n }\n\n async _sendRequest(\n url: string,\n method: HttpMethod,\n headers: Record,\n body?: string | Buffer,\n toleratedStatusCodes: number[] = [],\n ): Promise {\n this._log('info', `Sending ${method} request to ${url}, headers: ${JSON.stringify(headers)}`);\n const res = await fetch(url, {\n method,\n headers,\n body: ['GET', 'HEAD'].includes(method) ? undefined : body,\n signal: this.requestAbortTimeout !== undefined ? AbortSignal.timeout(this.requestAbortTimeout) : undefined,\n });\n\n if (!res.ok && !toleratedStatusCodes.includes(res.status)) {\n await this._handleErrorResponse(res);\n }\n\n return res;\n }\n\n async _handleErrorResponse(res: Response) {\n const errorBody = await res.text();\n const errorCode = res.headers.get('x-amz-error-code') || 'Unknown';\n const errorMessage = res.headers.get('x-amz-error-message') || res.statusText;\n this._log(\n 'error',\n `${ERROR_PREFIX}Request failed with status ${res.status}: ${errorCode} - ${errorMessage},err body: ${errorBody}`,\n );\n throw new Error(\n `${ERROR_PREFIX}Request failed with status ${res.status}: ${errorCode} - ${errorMessage}, err body: ${errorBody}`,\n );\n }\n\n _buildCanonicalQueryString(queryParams: Object): string {\n if (Object.keys(queryParams).length < 1) {\n return '';\n }\n\n return Object.keys(queryParams)\n .sort()\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent((queryParams as Record)[key])}`)\n .join('&');\n }\n async _getSignatureKey(dateStamp: string): Promise {\n const kDate = await _hmac(`AWS4${this.secretAccessKey}`, dateStamp);\n const kRegion = await _hmac(kDate, this.region);\n const kService = await _hmac(kRegion, S3_SERVICE);\n return _hmac(kService, AWS_REQUEST_TYPE);\n }\n}\n\nconst _hash = async (content: string | Buffer): Promise => {\n const hashSum = _createHash('sha256');\n hashSum.update(content);\n return hashSum.digest('hex');\n};\n\nconst _hmac = async (key: string | Buffer, content: string, encoding?: 'hex'): Promise => {\n const hmacSum = _createHmac('sha256', key);\n hmacSum.update(content);\n return hmacSum.digest(encoding);\n};\nexport const sanitizeETag = (etag: string): string => {\n const replaceChars: Record = {\n '\"': '',\n '"': '',\n '"': '',\n '"': '',\n '"': '',\n };\n return etag.replace(/^(\"|"|")|(\"|"|")$/g, m => replaceChars[m] as string);\n};\n\nconst _parseXml = (str: string): string | object | any => {\n const unescapeXml = (value: string): string => {\n return value\n .replace(/"/g, '\"')\n .replace(/'/g, \"'\")\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/&/g, '&');\n };\n\n const json = {};\n const re = /<(\\w)([-\\w]+)(?:\\/|[^>]*>((?:(?!<\\1)[\\s\\S])*)<\\/\\1\\2)>/gm;\n let match;\n\n while ((match = re.exec(str))) {\n const [, prefix, key, value] = match;\n const fullKey = prefix.toLowerCase() + key;\n const parsedValue = value != null ? _parseXml(value) : true;\n\n if (typeof parsedValue === 'string') {\n (json as { [key: string]: any })[fullKey] = sanitizeETag(unescapeXml(parsedValue));\n } else if (Array.isArray((json as { [key: string]: any })[fullKey])) {\n (json as { [key: string]: any })[fullKey].push(parsedValue);\n } else {\n (json as { [key: string]: any })[fullKey] =\n (json as { [key: string]: any })[fullKey] != null\n ? [(json as { [key: string]: any })[fullKey], parsedValue]\n : expectArray[fullKey]\n ? [parsedValue]\n : parsedValue;\n }\n }\n\n return Object.keys(json).length ? json : unescapeXml(str);\n};\n\nexport { S3 };\nexport default S3;\n", "'use strict';\n\nimport { S3 } from 'ultralight-s3';\nimport avro from 'avsc'; // eslint-disable-line\nimport {\n\tlowstorage_ERROR_CODES,\n\tlowstorageError,\n\tCollectionNotFoundError,\n\tSchemaValidationError,\n\tDocumentValidationError,\n\tS3OperationError,\n} from './errors.js';\nimport { matchesQuery, generateUUID, inferAvroType, ensureIdFieldInSchema } from './helpers.js';\n\nconst MODULE_NAME = 'lowstorage';\nconst DEFAULT_DELIMITER = '/';\nconst PROJECT_DIR_PREFIX = 'lowstorage';\nconst COL_SUFFIX = '.avro';\nconst CHUNG_1MB = 1024 * 1024;\nconst CHUNG_5MB = 5 * CHUNG_1MB;\nconst EMPTY_DATA = Buffer.from('', 'utf8');\n\nconst errorValidationFn = (errorCode = lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR) => {\n\tthrow new DocumentValidationError(`${MODULE_NAME}: Invalid document or schema`, errorCode);\n};\n\nconst _hasColName = (colName) => {\n\tif (colName.trim() === '' || colName === null || typeof colName === 'undefined' || colName.length > 255 || colName === null) {\n\t\tthrow new lowstorageError(`${MODULE_NAME}: Collection name is required, null or too long`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n\t}\n};\n\n// code / description\n// init of new collection is automatically creating it in the bucket\n// there is optional (opt-in) switch to create new collections in bucket\n// if the schema is not provided, it will create empty buffer and save it\n// if the schema is provided, it will save it in memory and use it for all ops\n// if the schema is updated, it will save it in memory and use it for all ops\n// exposed functions are:\n// listCollections \u2705\n// collectionExists \u2705\n// createCollection \u2705\n// removeCollection \u2705\n// renameCollection \u2705\n// updateCollectionSchema \u274C\n// collection \u2705\n// s3 \u2705\n\n// Operations over collections are:\n// insert \u2705\n// find \u2705\n// findOne \u2705\n// update \u2705\n// updateOne \u2705\n// delete \u2705\n// count \u2705\n\n// Errors:\n// lowstorageError \u2705\n// CollectionNotFoundError \u2705\n// SchemaValidationError \u2705\n// DocumentValidationError \u2705\n// S3OperationError \u2705\n\n/**\n * lowstorage class for managing collections and performing operations on top of S3-compatible storages.\n * @class\n * @example\n * const storage = new lowstorage({\n * \taccessKeyId: 'YOUR_ACCESS_KEY',\n * \tsecretAccessKey: 'YOUR_SECRET_KEY',\n * \tendpoint: 'YOUR_ENDPOINT',\n * \tbucketName: 'YOUR_BUCKET_NAME',\n * \tregion: 'YOUR_REGION',\n * });\n *\n * // Create a collection\n * const userCol = await storage.collection('users');\n *\n * // Insert a document\n * await userCol.insert({\n * \tname: 'Kevin',\n * \tgender: 'whatever',\n * \tposts: [],\n * });\n *\n * // Show all users\n * const allUsers = await userCol.find({});\n *\n * // Find users with pagination (e.g., page 2, 10 users per page)\n * const secondPageUsers = await userCol.find({}, { skip: 10, limit: 10 });\n *\n * // Find user by ID and update name\n * await userCol.update({ _id: id }, { name: 'Carlos' });\n */\nclass lowstorage {\n\t/**\n\t * Create a new lowstorage instance.\n\t * @param {Object} options - Configuration options for lowstorage.\n\t * @param {string} options.accessKeyId - S3 access key ID.\n\t * @param {string} options.secretAccessKey - S3 secret access key.\n\t * @param {string} options.endpoint - S3 endpoint URL.\n\t * @param {string} options.bucketName - S3 bucket name.\n\t * @param {string} [options.region='auto'] - S3 region.\n\t * @param {Object} [options.logger=null] - Logger object.\n\t * @param {string} [options.dirPrefix=PROJECT_DIR_PREFIX] - Directory prefix for collections.\n\t * @param {Number} [options.maxRequestSizeInBytes=CHUNG_5MB] - Chunk size for reading and writing data. AWS S3 has a minimum of 5MB per object.\n\t * @returns {lowstorage} A new lowstorage instance.\n\t */\n\tconstructor(\n\t\toptions = {\n\t\t\taccessKeyId: undefined,\n\t\t\tsecretAccessKey: undefined,\n\t\t\tendpoint: undefined,\n\t\t\tbucketName: undefined,\n\t\t\tregion: 'auto',\n\t\t\tlogger: null,\n\t\t\tdirPrefix: PROJECT_DIR_PREFIX,\n\t\t},\n\t) {\n\t\tthis._checkArgs(options);\n\t\tthis._schemas = new Map();\n\t\tthis._s3 = new S3(options);\n\t\tthis._dirPrefix = options.dirPrefix || PROJECT_DIR_PREFIX;\n\t\tthis._avro = avro;\n\t}\n\n\t_checkArgs = (args) => {\n\t\tconst requiredFields = ['accessKeyId', 'secretAccessKey', 'endpoint', 'bucketName'];\n\t\tfor (const field of requiredFields) {\n\t\t\tif (!args[field]) {\n\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: ${field} is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n\t\t\t}\n\t\t}\n\t};\n\n\t/**\n\t * List all collections.\n\t * @returns {Promise} An array of collection names.\n\t * @throws {S3OperationError} If there's an error during S3 operation.\n\t */\n\tasync listCollections() {\n\t\ttry {\n\t\t\tconst listed = await this._s3.list(DEFAULT_DELIMITER, this._dirPrefix);\n\t\t\tif (typeof listed === 'object' && listed !== null && listed.keyCount === '0') return [];\n\t\t\t// remove the delimiter from the key\n\t\t\treturn listed.map((entry) => entry.key.slice(this._dirPrefix.length + 1, -COL_SUFFIX.length));\n\t\t} catch (error) {\n\t\t\tthrow new S3OperationError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t}\n\t}\n\n\t/**\n\t * Check if a collection exists.\n\t * @param {string} colName - The name of the collection.\n\t * @returns {Promise} True if the collection exists, false otherwise.\n\t * @throws {lowstorageError} If there's an error.\n\t */\n\tasync collectionExists(colName) {\n\t\ttry {\n\t\t\t_hasColName(colName);\n\t\t\tconst exists = await this._s3.fileExists(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`);\n\t\t\treturn !!exists;\n\t\t} catch (error) {\n\t\t\tif (error.message.includes('Not Found')) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND);\n\t\t}\n\t}\n\n\t/**\n\t * Create a new collection.\n\t * @param {string} colName - The name of the collection.\n\t * @param {Object} [schema] - The schema for the collection.\n\t * @param {Array} [data=[]] - The initial data for the collection.\n\t * @returns {Promise} A Promise that resolves to a Collection object.\n\t * @throws {lowstorageError} If there's an error.\n\t */\n\tasync createCollection(colName, schema, data = []) {\n\t\ttry {\n\t\t\t_hasColName(colName);\n\t\t\tconst exists = await this.collectionExists(colName);\n\t\t\tif (!exists) {\n\t\t\t\tif (typeof schema !== 'undefined' && schema !== null) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst isValid = this._avro.parse(schema);\n\t\t\t\t\t\tif (!isValid) {\n\t\t\t\t\t\t\tthrow new SchemaValidationError(\n\t\t\t\t\t\t\t\t`${MODULE_NAME}: Schema is invalid: ${schema}`,\n\t\t\t\t\t\t\t\tlowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tthrow new SchemaValidationError(`${MODULE_NAME}: Schema is invalid: ${schema}`, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (data.length > 0 && schema) {\n\t\t\t\t\tconst wrapperType = this._avro.parse({ type: 'array', items: schema });\n\t\t\t\t\tawait this._s3.put(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`, wrapperType.toBuffer(data));\n\t\t\t\t} else {\n\t\t\t\t\tawait this._s3.put(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`, EMPTY_DATA);\n\t\t\t\t}\n\t\t\t\treturn this.collection(colName, schema, false);\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Collection ${colName} already exists`, lowstorage_ERROR_CODES.COLLECTION_EXISTS);\n\t\t} catch (error) {\n\t\t\tif (error instanceof lowstorageError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.CREATE_COLLECTION_ERROR);\n\t\t}\n\t}\n\n\t/**\n\t * Remove a collection.\n\t * @param {string} colName - The name of the collection.\n\t * @returns {Promise} A Promise that resolves to true if the collection is removed, false otherwise.\n\t * @throws {lowstorageError} If there's an error.\n\t */\n\tasync removeCollection(colName) {\n\t\ttry {\n\t\t\t_hasColName(colName);\n\t\t\tconst exists = await this.collectionExists(colName);\n\t\t\tif (exists) {\n\t\t\t\tawait this._s3.delete(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`);\n\t\t\t\tconst exists2 = await this.collectionExists(colName);\n\t\t\t\tif (typeof exists2 === 'boolean') {\n\t\t\t\t\tif (!exists2) {\n\t\t\t\t\t\tthis._schemas.delete(colName);\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Failed to delete collection ${colName}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t\t}\n\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to delete collection ${colName}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Collection ${colName} does not exist`, lowstorage_ERROR_CODES.REMOVE_COLLECTION_ERROR);\n\t\t} catch (error) {\n\t\t\tif (error instanceof S3OperationError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(\n\t\t\t\t`${MODULE_NAME}: Failed to remove collection: ${error.message}`,\n\t\t\t\tlowstorage_ERROR_CODES.REMOVE_COLLECTION_ERROR,\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Get or create a collection.\n\t * @param {string} colName - The name of the collection.\n\t * @param {Object} [schema] - The schema for the collection.\n\t * @param {boolean} [autoCreate=true] - Whether to automatically create the collection if it doesn't exist.\n\t * @returns {Promise} A Promise that resolves to a Collection object.\n\t * @throws {lowstorageError} If there's an error.\n\t */\n\tasync collection(colName, schema, autoCreate = true) {\n\t\ttry {\n\t\t\t_hasColName(colName);\n\t\t\tconst colPath = `${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`;\n\t\t\tconst exists = await this._s3.fileExists(colPath);\n\t\t\tif (!exists) {\n\t\t\t\tif (!autoCreate) {\n\t\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Collection ${colName} does not exist`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND);\n\t\t\t\t}\n\t\t\t\t// TODO: check if this is the right way to handle empty data\n\t\t\t\tawait this._s3.put(colPath, EMPTY_DATA);\n\t\t\t}\n\t\t\tconst colSchema = schema || this._schemas.get(colName) || undefined;\n\t\t\treturn new Collection(colName, colSchema, this._s3, this._dirPrefix);\n\t\t} catch (error) {\n\t\t\t// check if error message contains \"unknown type\" and if so, throw a schema validation error\n\t\t\tif (error.message.includes('unknown type')) {\n\t\t\t\tthrow new SchemaValidationError(\n\t\t\t\t\t`${MODULE_NAME}: Schema input is invalid: ${error.message}`,\n\t\t\t\t\tlowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND);\n\t\t}\n\t}\n\n\t/**\n\t * Get the S3 instance associated with the lowstorage instance.\n\t * @returns {S3} The S3 instance. Use this to perform S3 operations. Check for ultralight-s3 for more details.\n\t */\n\ts3 = () => {\n\t\treturn this._s3;\n\t};\n}\n\n/**\n * Collection class for managing documents in a collection.\n * @class\n * @example\n * const storage = new lowstorage({\n * \taccessKeyId: 'YOUR_ACCESS_KEY',\n * \tsecretAccessKey: 'YOUR_SECRET_KEY',\n * \tendpoint: 'YOUR_ENDPOINT',\n * \tbucketName: 'YOUR_BUCKET_NAME',\n * \tregion: 'YOUR_REGION',\n * });\n *\n * // Create a collection\n * const userCol = await storage.collection('users');\n *\n * // Insert a document\n * await userCol.insert({\n * \tname: 'Kevin',\n * \tgender: 'whatever',\n * \tposts: [],\n * });\n *\n * // Show all users\n * const allUsers = await userCol.find({});\n *\n * // Find users with pagination (e.g., page 2, 10 users per page)\n * const secondPageUsers = await userCol.find({}, { skip: 10, limit: 10 });\n *\n * // Find user by ID and update name\n * await userCol.update({ _id: id }, { name: 'Carlos' });\n */\nclass Collection {\n\t/**\n\t * Create a new Collection instance.\n\t * @param {string} colName - The name of the collection.\n\t * @param {Object} [schema] - The Avro schema for the collection.\n\t * @param {S3} s3 - The S3 instance.\n\t * @param {string} [dirPrefix=PROJECT_DIR_PREFIX] - The directory prefix for the collection.\n\t * @param {boolean} [safeWrite=false] - Whether to perform a safe write operation. It doublechecks the ETag of the object before writing. False = overwrites the object, True = only writes if the object has not been modified.\n\t * @param {Number} [chunkSize=CHUNG_5MB] - The chunk size for reading and writing data. AWS S3 has a maximum of 5MB per object.\n\t * @returns {Collection} A new Collection instance.\n\t */\n\tconstructor(colName, schema, s3, dirPrefix = PROJECT_DIR_PREFIX, safeWrite = false, chunkSize = CHUNG_5MB) {\n\t\tthis._colName = colName;\n\t\tthis._s3 = s3;\n\t\tthis._schema = ensureIdFieldInSchema(schema);\n\t\tthis._dirPrefix = dirPrefix;\n\t\tthis._safeWrite = safeWrite;\n\t\tthis._chunkSize = chunkSize || CHUNG_5MB;\n\t\tthis._key = `${this._dirPrefix}${DEFAULT_DELIMITER}${this._colName}${COL_SUFFIX}`;\n\t\tthis._s3.setMaxRequestSizeInBytes(this._chunkSize);\n\t\tthis._avro = avro;\n\t\tthis._lastETag = '';\n\t\tthis._dataCache = [];\n\t\tthis._avroType = typeof schema === 'undefined' ? null : this._avro.parse(schema);\n\t}\n\n\tgetProps = () => ({\n\t\tcolName: this._colName,\n\t\tschema: this._schema,\n\t\ts3: this._s3,\n\t\tavro: this._avro,\n\t\tavroType: this._avroType,\n\t\tdirPrefix: this._dirPrefix,\n\t\tsafeWrite: this._safeWrite,\n\t\tchunkSize: this._chunkSize,\n\t});\n\n\tsetProps = (props) => {\n\t\tthis._colName = props.colName;\n\t\tthis._schema = props.schema;\n\t\tthis._s3 = props.s3;\n\t\tthis._avro = props.avro;\n\t\tthis._avroType = props.avroType;\n\t\tthis._dirPrefix = props.dirPrefix;\n\t\tthis._safeWrite = props.safeWrite;\n\t\tthis._chunkSize = props.chunkSize;\n\t};\n\n\tsetSafeWrite = (safeWrite) => {\n\t\tthis._safeWrite = safeWrite;\n\t};\n\n\tgetSafeWrite = () => {\n\t\treturn this._safeWrite;\n\t};\n\n\tgetAvroSchema = () => {\n\t\treturn this._schema;\n\t};\n\n\tsetAvroSchema = (schema) => {\n\t\tthis._schema = ensureIdFieldInSchema(schema);\n\t\tthis._avroType = typeof schema === 'undefined' ? null : this._avro.parse(schema);\n\t};\n\n\tasync _loadData() {\n\t\ttry {\n\t\t\tif (this._avroType === null || typeof this._avroType === 'undefined') {\n\t\t\t\tthrow new lowstorageError(\n\t\t\t\t\t`${MODULE_NAME}: Missing type definition. Configure before operations `,\n\t\t\t\t\tlowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst { etag, data } = await this._s3.getObjectWithETag(this._key, { 'if-none-match': this._lastETag });\n\t\t\tif (data === null) {\n\t\t\t\treturn this._dataCache;\n\t\t\t}\n\t\t\tthis._lastETag = etag === null ? this._lastETag : etag;\n\t\t\tconst wrapperType = this._avro.parse({ type: 'array', items: this._avroType });\n\t\t\tif (data.length < this._chunkSize) {\n\t\t\t\tthis._dataCache = data.length > 0 ? wrapperType.fromBuffer(Buffer.from(data, 'utf8')) : [];\n\t\t\t\treturn this._dataCache;\n\t\t\t}\n\t\t\tlet offset = this._chunkSize;\n\t\t\tlet bufferArr = [Buffer.from(data, 'utf8')];\n\t\t\tlet repeat = true;\n\t\t\twhile (repeat) {\n\t\t\t\tconst nextDataResponse = await this._s3.getResponse(this._key, false, offset, offset + this._chunkSize);\n\t\t\t\tconst nextDataBody = await nextDataResponse.text();\n\t\t\t\tbufferArr.push(Buffer.from(nextDataBody, 'utf8'));\n\t\t\t\toffset += this._chunkSize;\n\t\t\t\tconst contentLength = nextDataResponse.headers.get('content-length') || nextDataBody.length;\n\t\t\t\tif (contentLength < this._chunkSize) {\n\t\t\t\t\trepeat = false;\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst bufferedData = Buffer.concat(bufferArr);\n\t\t\tthis._dataCache = wrapperType.fromBuffer(bufferedData);\n\t\t\treturn this._dataCache;\n\t\t} catch (error) {\n\t\t\tif (error.toString().indexOf('status 404: Unknown - Not Found') > -1) {\n\t\t\t\tthis._dataCache = [];\n\t\t\t\treturn this._dataCache;\n\t\t\t}\n\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to load data: ${error.message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t}\n\t}\n\n\tasync _saveData(data) {\n\t\ttry {\n\t\t\tif (this._avroType === null || typeof this._avroType === 'undefined') {\n\t\t\t\tthrow new lowstorageError(\n\t\t\t\t\t`${MODULE_NAME}: Missing type definition. Configure before operations `,\n\t\t\t\t\tlowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst wrapperType = this._avro.parse({ type: 'array', items: this._avroType });\n\t\t\tconst dataBuffer = data.length > 0 ? wrapperType.toBuffer(data) : EMPTY_DATA; // TODO: check if this is the right way to handle empty data\n\n\t\t\tif (this._safeWrite && this._lastETag !== '') {\n\t\t\t\tconst currentETag = await this._s3.getEtag(this._key);\n\t\t\t\t// If we have a current ETag, check if it matches our last known ETag\n\t\t\t\tif (currentETag !== null && currentETag !== this._lastETag) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst resp = await this._s3.put(this._key, dataBuffer);\n\t\t\tif (resp.status !== 200) {\n\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to save data`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t}\n\n\t\t\t// Update the cached ETag\n\t\t\tconst newETag = resp.headers.get('etag');\n\t\t\tif (newETag) {\n\t\t\t\tthis._lastETag = this._s3.sanitizeETag(newETag);\n\t\t\t\tthis._dataCache = data;\n\t\t\t}\n\t\t\treturn true;\n\t\t} catch (error) {\n\t\t\tif (error instanceof S3OperationError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.SAVE_DATA_ERROR);\n\t\t}\n\t}\n\n\t/**\n\t * Insert a document into the collection.\n\t * @param {Object|Array} doc - The document to insert.\n\t * @param {Object} [schema=undefined] - The schema for the document.\n\t * @returns {Promise} A Promise that resolves to the array of inserted document(s).\n\t * @throws {lowstorageError} If there's an error.\n\t */\n\tasync insert(doc, schema = undefined) {\n\t\ttry {\n\t\t\tif (doc === undefined || doc === null) {\n\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Document is required for insert`, lowstorage_ERROR_CODES.INSERT_ERROR);\n\t\t\t}\n\t\t\tif (typeof doc !== 'object' && !Array.isArray(doc)) {\n\t\t\t\tthrow new DocumentValidationError(\n\t\t\t\t\t`${MODULE_NAME}: Document must be an object or an array`,\n\t\t\t\t\tlowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst items = !Array.isArray(doc) ? [doc] : doc;\n\n\t\t\tconst schemaWithId = ensureIdFieldInSchema(schema) || this._schema || inferAvroType(items[0]);\n\t\t\tconst avroType = this._avro.parse(schemaWithId);\n\t\t\tif (!avroType) {\n\t\t\t\tthrow new SchemaValidationError(\n\t\t\t\t\t`${MODULE_NAME}: Schema is required - Pass a schema to the insert method`,\n\t\t\t\t\tlowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR,\n\t\t\t\t);\n\t\t\t}\n\t\t\tthis._avroType = avroType;\n\t\t\tconst data = await this._loadData();\n\t\t\tfor (let item of items) {\n\t\t\t\tif (typeof item !== 'object' || item === null) {\n\t\t\t\t\tthrow new DocumentValidationError(\n\t\t\t\t\t\t`${MODULE_NAME}: Invalid input: input must be an object or an array of objects`,\n\t\t\t\t\t\tlowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\titem._id = item._id || (await generateUUID());\n\t\t\t\tconst validBuffer = this._avroType.isValid(item, {\n\t\t\t\t\terrorHook: errorValidationFn,\n\t\t\t\t\tnoUndeclaredFields: true,\n\t\t\t\t});\n\t\t\t\tif (validBuffer === true) {\n\t\t\t\t\tdata.push(item);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new DocumentValidationError(`${MODULE_NAME}: Invalid document or schema`, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR);\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst success = await this._saveData(data);\n\t\t\tif (!success) {\n\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to insert document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t}\n\t\t\tthis.setAvroSchema(schemaWithId);\n\t\t\treturn items;\n\t\t} catch (error) {\n\t\t\tif (error.message.includes('unknown type')) {\n\t\t\t\tthrow new SchemaValidationError(\n\t\t\t\t\t`${MODULE_NAME}: Schema input is invalid: ${error.message}`,\n\t\t\t\t\tlowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (error instanceof lowstorageError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME} Insert operation failed: ${error.message}`, lowstorage_ERROR_CODES.INSERT_ERROR);\n\t\t}\n\t}\n\n\t/**\n\t * Find documents in the collection.\n\t * @param {Object} [query={}] - The query to filter documents.\n\t * @param {Object} [options={}] - The options for pagination.\n\t * @param {number} [options.skip=0] - The number of documents to skip. Default is 0.\n\t * @param {number} [options.limit=undefined] - The maximum number of documents to return. Default is undefined, which means no limit.\n\t * @returns {Promise} A Promise that resolves to an array of matching documents.\n\t * @throws {lowstorageError} If there's an error.\n\t */\n\tasync find(query = {}, options = {}) {\n\t\ttry {\n\t\t\tif (query === undefined || query === null) {\n\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Query is required for update`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n\t\t\t}\n\t\t\tconst data = await this._loadData();\n\t\t\tconst start = parseInt(options.skip, 10) || 0;\n\t\t\tconst end = parseInt(options.limit, 10) ? start + parseInt(options.limit, 10) : undefined;\n\t\t\tconst filteredData = data.filter((doc) => matchesQuery(doc, query)).slice(start, end);\n\t\t\treturn filteredData;\n\t\t} catch (error) {\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Find operation failed: ${error.message}`, lowstorage_ERROR_CODES.FIND_ERROR);\n\t\t}\n\t}\n\n\t/**\n\t * Find the first document in the collection that matches the query.\n\t * @param {Object} [query={}] - The query to filter documents.\n\t * @returns {Promise} A Promise that resolves to the first matching document or null if no match is found.\n\t * @throws {lowstorageError} If there's an error.\n\t */\n\tasync findOne(query = {}) {\n\t\ttry {\n\t\t\tif (query === null) {\n\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Query cannot be null`, lowstorage_ERROR_CODES.INVALID_ARGUMENT);\n\t\t\t}\n\t\t\tconst result = await this.find(query, { limit: 1 });\n\t\t\treturn result[0] || null;\n\t\t} catch (error) {\n\t\t\tif (error instanceof lowstorageError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: FindOne operation failed: ${error.message}`, lowstorage_ERROR_CODES.FIND_ONE_ERROR);\n\t\t}\n\t}\n\n\t/**\n\t * Update a single document in the collection that matches the query.\n\t * @param {Object} [query={}] - The query to filter the document to update.\n\t * @param {Object} [update={}] - The update operations to apply to the matching document.\n\t * @returns {Promise} A Promise that resolves to number of documents updated.\n\t * @throws {lowstorageError} If the updateOne operation fails.\n\t * @throws {SchemaValidationError} If the schema is not defined for the collection.\n\t * @throws {DocumentValidationError} If the updated document is invalid.\n\t * @throws {S3OperationError} If the S3 operation fails.\n\t */\n\tasync update(query = {}, update = {}, options = {}) {\n\t\ttry {\n\t\t\tif (query === undefined || query === null || update === undefined || update === null) {\n\t\t\t\tthrow new lowstorageError(\n\t\t\t\t\t`${MODULE_NAME}: Query and update values are required for update`,\n\t\t\t\t\tlowstorage_ERROR_CODES.MISSING_ARGUMENT,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (!this._avroType) {\n\t\t\t\tthrow new SchemaValidationError(\n\t\t\t\t\t`${MODULE_NAME}: Schema is not defined for this collection`,\n\t\t\t\t\tlowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst data = await this._loadData();\n\t\t\tif (data.length === 0) return 0;\n\t\t\tlet updatedCount = 0;\n\t\t\tfor (let i = 0; i < data.length; i++) {\n\t\t\t\tif (matchesQuery(data[i], query)) {\n\t\t\t\t\tconst updatedDoc = { ...data[i], ...update };\n\t\t\t\t\tconst isValid = this._avroType.isValid(updatedDoc, {\n\t\t\t\t\t\terrorHook: errorValidationFn,\n\t\t\t\t\t\tnoUndeclaredFields: true,\n\t\t\t\t\t});\n\t\t\t\t\tif (isValid === true) {\n\t\t\t\t\t\tdata[i] = updatedDoc;\n\t\t\t\t\t\tupdatedCount++;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow new DocumentValidationError(\n\t\t\t\t\t\t\t`${MODULE_NAME}: Invalid document or schema`,\n\t\t\t\t\t\t\tlowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (updatedCount > 0) {\n\t\t\t\tconst success = await this._saveData(data);\n\t\t\t\tif (!success) {\n\t\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t\t}\n\t\t\t} else if (options.upsert) {\n\t\t\t\t// If upsert is true, we need to insert the document\n\t\t\t\tconst success = await this.insert(update);\n\t\t\t\tif (!success) {\n\t\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t\t}\n\t\t\t\tupdatedCount = 1;\n\t\t\t}\n\t\t\treturn updatedCount;\n\t\t} catch (error) {\n\t\t\tif (error instanceof S3OperationError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Update operation failed: ${error.message}`, lowstorage_ERROR_CODES.UPDATE_ERROR);\n\t\t}\n\t}\n\n\t/**\n\t * Update a single document in the collection that matches the query.\n\t * @param {Object} [query={}] - The query to filter the document to update.\n\t * @param {Object} [update={}] - The update operations to apply to the matching document.\n\t * @returns {Promise} A Promise that resolves to 1 if a document was updated, 0 otherwise.\n\t * @throws {lowstorageError} If the updateOne operation fails.\n\t * @throws {SchemaValidationError} If the schema is not defined for the collection.\n\t * @throws {DocumentValidationError} If the updated document is invalid.\n\t * @throws {S3OperationError} If the S3 operation fails.\n\t */\n\tasync updateOne(query = {}, update = {}, options = {}) {\n\t\ttry {\n\t\t\tif (query === undefined || query === null || update === undefined || update === null) {\n\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Query is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n\t\t\t}\n\t\t\tif (!this._avroType) {\n\t\t\t\tthrow new SchemaValidationError(\n\t\t\t\t\t`${MODULE_NAME}: Schema is not defined for this collection`,\n\t\t\t\t\tlowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst data = await this._loadData();\n\t\t\tif (data.length === 0) return 0;\n\t\t\tconst docIndex = data.findIndex((doc) => matchesQuery(doc, query));\n\n\t\t\tif (docIndex !== -1) {\n\t\t\t\tconst updatedDoc = { ...data[docIndex], ...update };\n\t\t\t\tconst isValid = this._avroType.isValid(updatedDoc, {\n\t\t\t\t\terrorHook: errorValidationFn,\n\t\t\t\t\tnoUndeclaredFields: true,\n\t\t\t\t});\n\t\t\t\tif (isValid === true) {\n\t\t\t\t\tdata[docIndex] = updatedDoc;\n\t\t\t\t\tconst success = await this._saveData(data);\n\t\t\t\t\tif (!success) {\n\t\t\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t\t\t}\n\t\t\t\t\treturn 1;\n\t\t\t\t} else {\n\t\t\t\t\tthrow new DocumentValidationError(`${MODULE_NAME}: Invalid document or schema`, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (options.upsert) {\n\t\t\t\t// If upsert is true, we need to insert the document\n\t\t\t\tconst success = await this.insert(update);\n\t\t\t\tif (!success) {\n\t\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t\t}\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t\treturn 0;\n\t\t} catch (error) {\n\t\t\tif (error instanceof lowstorageError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: UpdateOne operation failed: ${error.message}`, lowstorage_ERROR_CODES.UPDATE_ONE_ERROR);\n\t\t}\n\t}\n\n\t/**\n\t * Delete documents from the collection.\n\t * @param {Object} [query={}] - The query to filter documents to delete.\n\t * @returns {Promise} A Promise that resolves to the number of documents deleted.\n\t * @throws {lowstorageError} If the delete operation fails.\n\t * @throws {S3OperationError} If the S3 operation fails.\n\t */\n\tasync delete(query = {}) {\n\t\ttry {\n\t\t\tif (query === undefined || query === null) {\n\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Query is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n\t\t\t}\n\t\t\tconst data = await this._loadData();\n\t\t\tif (data.length === 0) return 0;\n\t\t\tconst initialLength = data.length;\n\n\t\t\tconst newData = data.filter((doc) => !matchesQuery(doc, query));\n\t\t\tconst success = await this._saveData(newData);\n\t\t\tif (!success) {\n\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to delete document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t}\n\t\t\treturn initialLength - newData.length;\n\t\t} catch (error) {\n\t\t\tif (error instanceof S3OperationError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Delete operation failed: ${error.message}`, lowstorage_ERROR_CODES.DELETE_ERROR);\n\t\t}\n\t}\n\n\t/**\n\t * Delete all documents from the collection.\n\t * @returns {Promise} A Promise that resolves to the number of documents deleted.\n\t * @throws {lowstorageError} If the delete operation fails.\n\t * @throws {S3OperationError} If the S3 operation fails.\n\t */\n\tasync deleteAll() {\n\t\ttry {\n\t\t\tconst data = await this._loadData();\n\t\t\tconst initialLength = data.length;\n\t\t\tconst success = await this._saveData([]);\n\t\t\tif (!success) {\n\t\t\t\tthrow new S3OperationError(`${MODULE_NAME}: Failed to delete document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t\t\t}\n\t\t\treturn initialLength;\n\t\t} catch (error) {\n\t\t\tif (error instanceof S3OperationError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Delete operation failed: ${error.message}`, lowstorage_ERROR_CODES.DELETE_ERROR);\n\t\t}\n\t}\n\n\t/**\n\t * Count the number of documents in the collection.\n\t * @param {Object} [query={}] - The query to filter documents.\n\t * @returns {Promise} A Promise that resolves to the number of documents in the collection.\n\t * @throws {lowstorageError} If the count operation fails.\n\t */\n\tasync count(query = {}) {\n\t\ttry {\n\t\t\tconst data = await this.find(query);\n\t\t\treturn data.length;\n\t\t} catch (error) {\n\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Count operation failed: ${error.message}`, lowstorage_ERROR_CODES.COUNT_ERROR);\n\t\t}\n\t}\n\n\tasync renameCollection(newColName, newSchema = this._schema) {\n\t\ttry {\n\t\t\t_hasColName(newColName);\n\t\t\tconst exists = await this._s3.fileExists(`${this._dirPrefix}${DEFAULT_DELIMITER}${newColName}${COL_SUFFIX}`);\n\t\t\tif (!!exists) {\n\t\t\t\tthrow new lowstorageError(`${MODULE_NAME}: Collection ${newColName} already exists`, lowstorage_ERROR_CODES.COLLECTION_EXISTS);\n\t\t\t}\n\t\t\tconst schema = newSchema || this.getAvroSchema();\n\t\t\tconst data = await this._loadData();\n\t\t\tconst createNew = new Collection(newColName, schema, this._s3, this._dirPrefix, this._safeWrite, this._chunkSize);\n\t\t\tawait createNew._saveData(data);\n\t\t\tawait this._s3.delete(`${this._dirPrefix}${DEFAULT_DELIMITER}${this._colName}${COL_SUFFIX}`);\n\t\t\treturn createNew;\n\t\t} catch (error) {\n\t\t\tif (error instanceof lowstorageError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new lowstorageError(\n\t\t\t\t`${MODULE_NAME}: Rename collection failed: ${error.message}`,\n\t\t\t\tlowstorage_ERROR_CODES.RENAME_COLLECTION_ERROR,\n\t\t\t);\n\t\t}\n\t}\n}\n\n// export default lowstorage;\nexport { lowstorage, lowstorageError, lowstorage_ERROR_CODES };\n", "'use strict';\n\nconst lowstorage_ERROR_CODES = {\n\tMISSING_ARGUMENT: 'MISSING_ARGUMENT',\n\tCOLLECTION_EXISTS: 'COLLECTION_EXISTS',\n\tCREATE_COLLECTION_ERROR: 'CREATE_COLLECTION_ERROR',\n\tRENAME_COLLECTION_ERROR: 'RENAME_COLLECTION_ERROR',\n\tREMOVE_COLLECTION_ERROR: 'REMOVE_COLLECTION_ERROR',\n\tUPDATE_COLLECTION_SCHEMA_ERROR: 'UPDATE_COLLECTION_SCHEMA_ERROR',\n\tCOLLECTION_NOT_FOUND: 'COLLECTION_NOT_FOUND',\n\tSCHEMA_VALIDATION_ERROR: 'SCHEMA_VALIDATION_ERROR',\n\tDOCUMENT_VALIDATION_ERROR: 'DOCUMENT_VALIDATION_ERROR',\n\tS3_OPERATION_ERROR: 'S3_OPERATION_ERROR',\n\tFIND_ERROR: 'FIND_ERROR',\n\tFIND_ONE_ERROR: 'FIND_ONE_ERROR',\n\tSAVE_DATA_ERROR: 'SAVE_DATA_ERROR',\n\tINSERT_ERROR: 'INSERT_ERROR',\n\tUPDATE_ERROR: 'UPDATE_ERROR',\n\tUPDATE_ONE_ERROR: 'UPDATE_ONE_ERROR',\n\tDELETE_ERROR: 'DELETE_ERROR',\n\tCOUNT_ERROR: 'COUNT_ERROR',\n\tUNKNOWN_ERROR: 'UNKNOWN_ERROR',\n};\nclass lowstorageError extends Error {\n\tconstructor(message, code = lowstorage_ERROR_CODES.UNKNOWN_ERROR) {\n\t\tsuper(`lowstorageError: ${message} :: code: ${code}`);\n\t\tthis.name = this.constructor.name;\n\t\tthis.code = code;\n\t\tError.captureStackTrace(this, this.constructor);\n\t}\n}\n\nclass CollectionNotFoundError extends lowstorageError {\n\tconstructor(collectionName) {\n\t\tsuper(`Collection ${collectionName} not found`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND);\n\t}\n}\n\nclass SchemaValidationError extends lowstorageError {\n\tconstructor(message) {\n\t\tsuper(message, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR);\n\t}\n}\n\nclass DocumentValidationError extends lowstorageError {\n\tconstructor(message) {\n\t\tsuper(message, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR);\n\t}\n}\n\nclass S3OperationError extends lowstorageError {\n\tconstructor(message, operation) {\n\t\tsuper(`S3 ${operation} operation failed: ${message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n\t}\n}\n\nexport {\n\tlowstorage_ERROR_CODES,\n\tlowstorageError,\n\tCollectionNotFoundError,\n\tSchemaValidationError,\n\tDocumentValidationError,\n\tS3OperationError,\n};\n", "'use strict';\n\nimport { randomUUID } from 'node:crypto';\n\nconst matchesQuery = (document, query) => {\n\treturn Object.keys(query).every((key) => document[key] === query[key]);\n};\n\nconst generateUUID = async () => {\n\tif (typeof randomUUID !== 'undefined' && typeof randomUUID === 'function') {\n\t\treturn randomUUID();\n\t}\n\tif (typeof crypto !== 'undefined' && typeof crypto === 'object' && typeof crypto.randomUUID === 'function') {\n\t\treturn crypto.randomUUID();\n\t}\n\treturn 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n\t\tvar r = (Math.random() * 16) | 0,\n\t\t\tv = c === 'x' ? r : (r & 0x3) | 0x8;\n\t\treturn v.toString(16);\n\t});\n};\n\nconst _getAvroType = (value, name = 'SubAutoGenerated') => {\n\tswitch (typeof value) {\n\t\tcase 'string':\n\t\t\tif (_isUUID(value)) {\n\t\t\t\treturn {\n\t\t\t\t\ttype: 'string',\n\t\t\t\t\tname: '_id',\n\t\t\t\t\tsize: 16,\n\t\t\t\t\tlogicalType: 'UUID',\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn 'string';\n\t\tcase 'number':\n\t\t\treturn Number.isInteger(value) ? 'int' : 'float';\n\t\tcase 'boolean':\n\t\t\treturn 'boolean';\n\t\tcase 'object':\n\t\t\tif (value === null) return 'null';\n\t\t\tif (Array.isArray(value)) return { type: 'array', items: _getAvroType(value[0]) };\n\t\t\treturn inferAvroType(value, name);\n\t\tdefault:\n\t\t\treturn 'string'; // Default to string for unknown types\n\t}\n};\n\nconst ensureIdFieldInSchema = (schema) => {\n\tconst idField = {\n\t\tname: '_id',\n\t\ttype: 'string',\n\t\tsize: 16,\n\t\tlogicalType: 'UUID',\n\t};\n\tif (typeof schema === 'undefined' || schema === null) {\n\t\treturn schema;\n\t}\n\n\tif (schema.type === 'record') {\n\t\tconst hasIdField = schema.fields.some((field) => field.name === '_id');\n\t\tif (!hasIdField) {\n\t\t\tschema.fields.unshift(idField);\n\t\t}\n\t} else if (schema.type === 'array' && schema.items.type === 'record') {\n\t\tconst hasIdField = schema.items.fields.some((field) => field.name === '_id');\n\t\tif (!hasIdField) {\n\t\t\tschema.items.fields.unshift(idField);\n\t\t}\n\t}\n\treturn schema;\n};\n\nconst inferAvroType = (data, typeName = 'AutoGenerated') => {\n\tif (Array.isArray(data)) {\n\t\tdata = data[0];\n\t}\n\tconst fields = Object.entries(data).map(([name, value]) => {\n\t\treturn { name, type: _getAvroType(value, `${typeName}.${name}`) };\n\t});\n\n\tconst schema = {\n\t\ttype: 'record',\n\t\tname: typeName,\n\t\tfields: fields,\n\t};\n\n\t// Ensure the _id field is present in the schema\n\treturn ensureIdFieldInSchema(schema);\n};\n\nconst _isUUID = (str) => {\n\tconst uuidV4Regex = /^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i;\n\treturn uuidV4Regex.test(str);\n};\n\nexport { matchesQuery, generateUUID, inferAvroType, ensureIdFieldInSchema };\n"], - "mappings": "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", - "names": ["AWS_ALGORITHM", "AWS_REQUEST_TYPE", "S3_SERVICE", "LIST_TYPE", "UNSIGNED_PAYLOAD", "DEFAULT_STREAM_CONTENT_TYPE", "XML_CONTENT_TYPE", "JSON_CONTENT_TYPE", "SENSITIVE_KEYS_REDACTED", "HEADER_AMZ_CONTENT_SHA256", "HEADER_AMZ_DATE", "HEADER_HOST", "HEADER_AUTHORIZATION", "HEADER_CONTENT_TYPE", "HEADER_CONTENT_LENGTH", "HEADER_ETAG", "HEADER_LAST_MODIFIED", "ERROR_PREFIX", "ERROR_ACCESS_KEY_REQUIRED", "ERROR_SECRET_KEY_REQUIRED", "ERROR_ENDPOINT_REQUIRED", "ERROR_BUCKET_NAME_REQUIRED", "ERROR_KEY_REQUIRED", "ERROR_UPLOAD_ID_REQUIRED", "ERROR_PARTS_REQUIRED", "ERROR_INVALID_PART", "ERROR_DATA_BUFFER_REQUIRED", "ERROR_PREFIX_TYPE", "ERROR_MAX_KEYS_TYPE", "ERROR_DELIMITER_REQUIRED", "_createHmac", "_createHash", "expectArray", "encodeAsHex", "c", "uriEscape", "uriStr", "uriResourceEscape", "string", "S3", "accessKeyId", "secretAccessKey", "endpoint", "bucketName", "region", "maxRequestSizeInBytes", "requestAbortTimeout", "logger", "etag", "sanitizeETag", "props", "method", "key", "delimiter", "prefix", "maxKeys", "opts", "level", "message", "additionalData", "sanitize", "obj", "acc", "sanitizedData", "logEntry", "headers", "encodedKey", "url", "signedHeaders", "contentLength", "res", "filteredOpts", "conditionalHeaders", "error", "errorMessage", "keyPath", "query", "body", "datetime", "_hash", "canonicalHeaders", "canonicalRequest", "stringToSign", "signature", "authorizationHeader", "value", "credentialScope", "signingKey", "_hmac", "ifHeaders", "urlWithQuery", "responseBody", "lastModified", "data", "_parseXml", "output", "o", "i", "a", "_a", "_b", "_c", "wholeFile", "rangeFrom", "rangeTo", "fileType", "parsedResponse", "uploadId", "partNumber", "ETag", "parts", "part", "xmlBody", "toleratedStatusCodes", "errorBody", "errorCode", "queryParams", "dateStamp", "kDate", "kRegion", "kService", "content", "hashSum", "encoding", "hmacSum", "replaceChars", "m", "str", "unescapeXml", "json", "re", "match", "fullKey", "parsedValue", "avro", "lowstorage_ERROR_CODES", "lowstorageError", "message", "code", "SchemaValidationError", "lowstorageError", "message", "lowstorage_ERROR_CODES", "DocumentValidationError", "S3OperationError", "operation", "randomUUID", "matchesQuery", "document", "query", "key", "generateUUID", "c", "r", "v", "_getAvroType", "value", "name", "_isUUID", "inferAvroType", "ensureIdFieldInSchema", "schema", "idField", "field", "data", "typeName", "fields", "str", "MODULE_NAME", "DEFAULT_DELIMITER", "PROJECT_DIR_PREFIX", "COL_SUFFIX", "CHUNG_1MB", "CHUNG_5MB", "EMPTY_DATA", "errorValidationFn", "errorCode", "lowstorage_ERROR_CODES", "DocumentValidationError", "_hasColName", "colName", "lowstorageError", "lowstorage", "options", "N", "avro", "args", "requiredFields", "field", "listed", "entry", "error", "S3OperationError", "schema", "data", "SchemaValidationError", "wrapperType", "exists2", "autoCreate", "colPath", "colSchema", "Collection", "_Collection", "s3", "dirPrefix", "safeWrite", "chunkSize", "ensureIdFieldInSchema", "props", "etag", "offset", "bufferArr", "repeat", "nextDataResponse", "nextDataBody", "bufferedData", "dataBuffer", "currentETag", "resp", "newETag", "doc", "items", "schemaWithId", "inferAvroType", "avroType", "item", "generateUUID", "query", "start", "end", "matchesQuery", "update", "updatedCount", "i", "updatedDoc", "docIndex", "initialLength", "newData", "newColName", "newSchema", "createNew"] -} +{"version":3,"file":"lowstorage.js","sourceRoot":"","sources":["../src/lowstorage.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 0327fbf..77e012b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,11 +9,12 @@ "version": "2.0.0", "license": "MIT", "dependencies": { - "avsc": "^5.7.7", + "@avro/types": "^1.0.25", "ultralight-s3": "^0.0.5" }, "devDependencies": { "esbuild": "^0.23.0", + "esbuild-plugin-polyfill-node": "^0.3.0", "jest": "^29.7.0", "prettier": "^3.3.2", "typescript": "^5.5.2", @@ -36,6 +37,14 @@ "node": ">=6.0.0" } }, + "node_modules/@avro/types": { + "version": "1.0.25", + "resolved": "https://registry.npmjs.org/@avro/types/-/types-1.0.25.tgz", + "integrity": "sha512-rQmCpcsYfO1QO1R3I+T33SB21sq8d7K4PJb8uuaWGNRdWrNSQzQjcZXRqBD3g1m8Cg1RVINT1COmlqRg1uBLLA==", + "engines": { + "node": ">=0.11" + } + }, "node_modules/@babel/code-frame": { "version": "7.24.7", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", @@ -1485,6 +1494,12 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "node_modules/@jspm/core": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@jspm/core/-/core-2.0.1.tgz", + "integrity": "sha512-Lg3PnLp0QXpxwLIAuuJboLeRaIhrgJjeuh797QADg3xz8wGLugQOS5DpsE8A6i6Adgzf+bacllkKZG3J0tGfDw==", + "dev": true + }, "node_modules/@sinclair/typebox": { "version": "0.27.8", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", @@ -1716,14 +1731,6 @@ "printable-characters": "^1.0.42" } }, - "node_modules/avsc": { - "version": "5.7.7", - "resolved": "https://registry.npmjs.org/avsc/-/avsc-5.7.7.tgz", - "integrity": "sha512-9cYNccliXZDByFsFliVwk5GvTq058Fj513CiR4E60ndDwmuXzTJEp/Bp8FyuRmGyYupLjHLs+JA9/CBoVS4/NQ==", - "engines": { - "node": ">=0.11" - } - }, "node_modules/babel-jest": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", @@ -2310,6 +2317,19 @@ "@esbuild/win32-x64": "0.23.0" } }, + "node_modules/esbuild-plugin-polyfill-node": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/esbuild-plugin-polyfill-node/-/esbuild-plugin-polyfill-node-0.3.0.tgz", + "integrity": "sha512-SHG6CKUfWfYyYXGpW143NEZtcVVn8S/WHcEOxk62LuDXnY4Zpmc+WmxJKN6GMTgTClXJXhEM5KQlxKY6YjbucQ==", + "dev": true, + "dependencies": { + "@jspm/core": "^2.0.1", + "import-meta-resolve": "^3.0.0" + }, + "peerDependencies": { + "esbuild": "*" + } + }, "node_modules/escalade": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", @@ -2634,6 +2654,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/import-meta-resolve": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-3.1.1.tgz", + "integrity": "sha512-qeywsE/KC3w9Fd2ORrRDUw6nS/nLwZpXgfrOc2IILvZYnCaEMd+D56Vfg9k4G29gIeVi3XKql1RQatME8iYsiw==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", @@ -5084,6 +5114,11 @@ "@jridgewell/trace-mapping": "^0.3.24" } }, + "@avro/types": { + "version": "1.0.25", + "resolved": "https://registry.npmjs.org/@avro/types/-/types-1.0.25.tgz", + "integrity": "sha512-rQmCpcsYfO1QO1R3I+T33SB21sq8d7K4PJb8uuaWGNRdWrNSQzQjcZXRqBD3g1m8Cg1RVINT1COmlqRg1uBLLA==" + }, "@babel/code-frame": { "version": "7.24.7", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", @@ -6037,6 +6072,12 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "@jspm/core": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@jspm/core/-/core-2.0.1.tgz", + "integrity": "sha512-Lg3PnLp0QXpxwLIAuuJboLeRaIhrgJjeuh797QADg3xz8wGLugQOS5DpsE8A6i6Adgzf+bacllkKZG3J0tGfDw==", + "dev": true + }, "@sinclair/typebox": { "version": "0.27.8", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", @@ -6241,11 +6282,6 @@ "printable-characters": "^1.0.42" } }, - "avsc": { - "version": "5.7.7", - "resolved": "https://registry.npmjs.org/avsc/-/avsc-5.7.7.tgz", - "integrity": "sha512-9cYNccliXZDByFsFliVwk5GvTq058Fj513CiR4E60ndDwmuXzTJEp/Bp8FyuRmGyYupLjHLs+JA9/CBoVS4/NQ==" - }, "babel-jest": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", @@ -6669,6 +6705,16 @@ "@esbuild/win32-x64": "0.23.0" } }, + "esbuild-plugin-polyfill-node": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/esbuild-plugin-polyfill-node/-/esbuild-plugin-polyfill-node-0.3.0.tgz", + "integrity": "sha512-SHG6CKUfWfYyYXGpW143NEZtcVVn8S/WHcEOxk62LuDXnY4Zpmc+WmxJKN6GMTgTClXJXhEM5KQlxKY6YjbucQ==", + "dev": true, + "requires": { + "@jspm/core": "^2.0.1", + "import-meta-resolve": "^3.0.0" + } + }, "escalade": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", @@ -6900,6 +6946,12 @@ "resolve-cwd": "^3.0.0" } }, + "import-meta-resolve": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-3.1.1.tgz", + "integrity": "sha512-qeywsE/KC3w9Fd2ORrRDUw6nS/nLwZpXgfrOc2IILvZYnCaEMd+D56Vfg9k4G29gIeVi3XKql1RQatME8iYsiw==", + "dev": true + }, "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", diff --git a/package.json b/package.json index 43fc683..37f1df8 100644 --- a/package.json +++ b/package.json @@ -14,8 +14,7 @@ }, "scripts": { "test": "node --env-file ./.env --experimental-vm-modules node_modules/jest/bin/jest.js --config=jest.config.json --no-cache", - "build": "esbuild --bundle --minify --sourcemap --platform=node --target=node20 --format=esm --outfile=lib/lowstorage.js src/lowstorage.js --external:avsc", - "dev": "esbuild --bundle --platform=node --target=node20 --format=esm --outfile=lib/lowstorage.js src/lowstorage.js --external:avsc && node --env-file ./.env ./dev/dev-index.js" + "build": "tsc && esbuild --bundle --platform=node --target=node20 --format=esm ./src/lowstorage.js | node importify-esbuild-output.js | esbuild --bundle --minify --sourcemap --platform=node --target=node20 --format=esm --outfile=build/lowstorage.js" }, "license": "MIT", "author": "Peter Jensen ", @@ -29,13 +28,14 @@ }, "devDependencies": { "esbuild": "^0.23.0", + "esbuild-plugin-polyfill-node": "^0.3.0", "jest": "^29.7.0", "prettier": "^3.3.2", "typescript": "^5.5.2", "wrangler": "^3.62.0" }, "dependencies": { - "avsc": "^5.7.7", + "@avro/types": "^1.0.25", "ultralight-s3": "^0.0.5" }, "keywords": [ diff --git a/src/errors.js b/src/errors.js deleted file mode 100644 index 0269cc8..0000000 --- a/src/errors.js +++ /dev/null @@ -1,64 +0,0 @@ -'use strict'; - -const lowstorage_ERROR_CODES = { - MISSING_ARGUMENT: 'MISSING_ARGUMENT', - COLLECTION_EXISTS: 'COLLECTION_EXISTS', - CREATE_COLLECTION_ERROR: 'CREATE_COLLECTION_ERROR', - RENAME_COLLECTION_ERROR: 'RENAME_COLLECTION_ERROR', - REMOVE_COLLECTION_ERROR: 'REMOVE_COLLECTION_ERROR', - UPDATE_COLLECTION_SCHEMA_ERROR: 'UPDATE_COLLECTION_SCHEMA_ERROR', - COLLECTION_NOT_FOUND: 'COLLECTION_NOT_FOUND', - SCHEMA_VALIDATION_ERROR: 'SCHEMA_VALIDATION_ERROR', - DOCUMENT_VALIDATION_ERROR: 'DOCUMENT_VALIDATION_ERROR', - S3_OPERATION_ERROR: 'S3_OPERATION_ERROR', - FIND_ERROR: 'FIND_ERROR', - FIND_ONE_ERROR: 'FIND_ONE_ERROR', - SAVE_DATA_ERROR: 'SAVE_DATA_ERROR', - INSERT_ERROR: 'INSERT_ERROR', - UPDATE_ERROR: 'UPDATE_ERROR', - UPDATE_ONE_ERROR: 'UPDATE_ONE_ERROR', - DELETE_ERROR: 'DELETE_ERROR', - COUNT_ERROR: 'COUNT_ERROR', - UNKNOWN_ERROR: 'UNKNOWN_ERROR', -}; -class lowstorageError extends Error { - constructor(message, code = lowstorage_ERROR_CODES.UNKNOWN_ERROR) { - super(`lowstorageError: ${message} :: code: ${code}`); - this.name = this.constructor.name; - this.code = code; - Error.captureStackTrace(this, this.constructor); - } -} - -class CollectionNotFoundError extends lowstorageError { - constructor(collectionName) { - super(`Collection ${collectionName} not found`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND); - } -} - -class SchemaValidationError extends lowstorageError { - constructor(message) { - super(message, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR); - } -} - -class DocumentValidationError extends lowstorageError { - constructor(message) { - super(message, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR); - } -} - -class S3OperationError extends lowstorageError { - constructor(message, operation) { - super(`S3 ${operation} operation failed: ${message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); - } -} - -export { - lowstorage_ERROR_CODES, - lowstorageError, - CollectionNotFoundError, - SchemaValidationError, - DocumentValidationError, - S3OperationError, -}; diff --git a/src/errors.ts b/src/errors.ts new file mode 100644 index 0000000..3c138c1 --- /dev/null +++ b/src/errors.ts @@ -0,0 +1,71 @@ +'use strict'; + +const lowstorage_ERROR_CODES: Record = { + MISSING_ARGUMENT: 'MISSING_ARGUMENT' as const, + COLLECTION_EXISTS: 'COLLECTION_EXISTS' as const, + CREATE_COLLECTION_ERROR: 'CREATE_COLLECTION_ERROR' as const, + RENAME_COLLECTION_ERROR: 'RENAME_COLLECTION_ERROR' as const, + REMOVE_COLLECTION_ERROR: 'REMOVE_COLLECTION_ERROR' as const, + UPDATE_COLLECTION_SCHEMA_ERROR: 'UPDATE_COLLECTION_SCHEMA_ERROR' as const, + COLLECTION_NOT_FOUND: 'COLLECTION_NOT_FOUND' as const, + SCHEMA_VALIDATION_ERROR: 'SCHEMA_VALIDATION_ERROR' as const, + DOCUMENT_VALIDATION_ERROR: 'DOCUMENT_VALIDATION_ERROR' as const, + S3_OPERATION_ERROR: 'S3_OPERATION_ERROR' as const, + FIND_ERROR: 'FIND_ERROR' as const, + FIND_ONE_ERROR: 'FIND_ONE_ERROR' as const, + SAVE_DATA_ERROR: 'SAVE_DATA_ERROR' as const, + INSERT_ERROR: 'INSERT_ERROR' as const, + UPDATE_ERROR: 'UPDATE_ERROR' as const, + UPDATE_ONE_ERROR: 'UPDATE_ONE_ERROR' as const, + DELETE_ERROR: 'DELETE_ERROR' as const, + COUNT_ERROR: 'COUNT_ERROR' as const, + UNKNOWN_ERROR: 'UNKNOWN_ERROR' as const, +}; + +export type errorCode = (typeof lowstorage_ERROR_CODES)[keyof typeof lowstorage_ERROR_CODES]; + +class lowstorageError extends Error { + code: errorCode; + constructor(message: string, code: errorCode = lowstorage_ERROR_CODES.UNKNOWN_ERROR) { + super(`lowstorageError: ${message} :: code: ${code}`); + this.name = this.constructor.name; + this.code = code; + Error.captureStackTrace(this, this.constructor); + } +} + +class CollectionNotFoundError extends lowstorageError { + constructor(collectionName: any, code: errorCode = lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND) { + super(`Collection ${collectionName} not found`, code); + super(`Collection ${collectionName} not found`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND); + } +} + +class SchemaValidationError extends lowstorageError { + constructor(message: string, code: errorCode = lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR) { + super(message, code); + super(message, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR); + } +} + +class DocumentValidationError extends lowstorageError { + constructor(message: string, code: errorCode = lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR) { + super(message, code); + super(message, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR); + } +} + +class S3OperationError extends lowstorageError { + constructor(message: string, operation: string) { + super(`S3 ${operation} operation failed: ${message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); + } +} + +export { + lowstorage_ERROR_CODES, + lowstorageError, + CollectionNotFoundError, + SchemaValidationError, + DocumentValidationError, + S3OperationError, +}; diff --git a/src/helpers.js b/src/helpers.ts similarity index 65% rename from src/helpers.js rename to src/helpers.ts index 298afc8..817667c 100644 --- a/src/helpers.js +++ b/src/helpers.ts @@ -2,11 +2,11 @@ import { randomUUID } from 'node:crypto'; -const matchesQuery = (document, query) => { +const matchesQuery = (document: Record, query: Record): boolean => { return Object.keys(query).every((key) => document[key] === query[key]); }; -const generateUUID = async () => { +const generateUUID = async (): Promise => { if (typeof randomUUID !== 'undefined' && typeof randomUUID === 'function') { return randomUUID(); } @@ -20,7 +20,7 @@ const generateUUID = async () => { }); }; -const _getAvroType = (value, name = 'SubAutoGenerated') => { +const _getAvroSchema = (value: any, name = 'SubAutoGenerated'): any => { switch (typeof value) { case 'string': if (_isUUID(value)) { @@ -38,14 +38,14 @@ const _getAvroType = (value, name = 'SubAutoGenerated') => { return 'boolean'; case 'object': if (value === null) return 'null'; - if (Array.isArray(value)) return { type: 'array', items: _getAvroType(value[0]) }; - return inferAvroType(value, name); + if (Array.isArray(value)) return { type: 'array', items: _getAvroSchema(value[0]) }; + return inferAvroSchema(value, name); default: return 'string'; // Default to string for unknown types } }; -const ensureIdFieldInSchema = (schema) => { +const ensureIdFieldInSchema = (schema: Object): Object => { const idField = { name: '_id', type: 'string', @@ -56,12 +56,22 @@ const ensureIdFieldInSchema = (schema) => { return schema; } - if (schema.type === 'record') { + if ('type' in schema && schema.type === 'record' && 'fields' in schema && Array.isArray(schema.fields)) { const hasIdField = schema.fields.some((field) => field.name === '_id'); if (!hasIdField) { schema.fields.unshift(idField); } - } else if (schema.type === 'array' && schema.items.type === 'record') { + } else if ( + 'type' in schema && + schema.type === 'array' && + 'items' in schema && + schema.items !== null && + typeof schema.items === 'object' && + 'type' in schema.items && + schema.items.type === 'record' && + 'fields' in schema.items && + Array.isArray(schema.items.fields) + ) { const hasIdField = schema.items.fields.some((field) => field.name === '_id'); if (!hasIdField) { schema.items.fields.unshift(idField); @@ -70,12 +80,12 @@ const ensureIdFieldInSchema = (schema) => { return schema; }; -const inferAvroType = (data, typeName = 'AutoGenerated') => { +const inferAvroSchema = (data: any[] | { [s: string]: unknown } | ArrayLike, typeName = 'AutoGenerated') => { if (Array.isArray(data)) { data = data[0]; } const fields = Object.entries(data).map(([name, value]) => { - return { name, type: _getAvroType(value, `${typeName}.${name}`) }; + return { name, type: _getAvroSchema(value, `${typeName}.${name}`) }; }); const schema = { @@ -88,9 +98,9 @@ const inferAvroType = (data, typeName = 'AutoGenerated') => { return ensureIdFieldInSchema(schema); }; -const _isUUID = (str) => { +const _isUUID = (str: string): boolean => { const uuidV4Regex = /^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i; return uuidV4Regex.test(str); }; -export { matchesQuery, generateUUID, inferAvroType, ensureIdFieldInSchema }; +export { matchesQuery, generateUUID, inferAvroSchema, ensureIdFieldInSchema }; diff --git a/src/lowstorage.test.js b/src/lowstorage.test.js index ad95db4..c3fa1f0 100644 --- a/src/lowstorage.test.js +++ b/src/lowstorage.test.js @@ -1,5 +1,5 @@ import { env } from 'node:process'; -import { lowstorage, lowstorageError, lowstorage_ERROR_CODES } from '../lib/lowstorage.js'; +import { lowstorage, lowstorageError, lowstorage_ERROR_CODES } from '../build/lowstorage.js'; const configCF = { endpoint: env.CF_ENDPOINT, diff --git a/src/lowstorage.js b/src/lowstorage.ts similarity index 82% rename from src/lowstorage.js rename to src/lowstorage.ts index 902c49f..977a40b 100644 --- a/src/lowstorage.js +++ b/src/lowstorage.ts @@ -1,67 +1,59 @@ 'use strict'; +type S3Options = { + accessKeyId: string; + secretAccessKey: string; + endpoint: string; + bucketName: string; + region?: string; + logger?: any; + dirPrefix?: string; + maxRequestSizeInBytes?: number; +}; + +type CollectionProps = { + colName: string; + schema: any; + s3: S3; + dirPrefix: string; + safeWrite: boolean; + chunkSize: number; + avroParse: any; + avroType: any; +}; + +type CollectionOptions = { + skip?: number; + limit?: number; +}; + +type UpdateOptions = { + upsert?: boolean; +}; + import { S3 } from 'ultralight-s3'; -import avro from 'avsc'; // eslint-disable-line -import { - lowstorage_ERROR_CODES, - lowstorageError, - CollectionNotFoundError, - SchemaValidationError, - DocumentValidationError, - S3OperationError, -} from './errors.js'; -import { matchesQuery, generateUUID, inferAvroType, ensureIdFieldInSchema } from './helpers.js'; - -const MODULE_NAME = 'lowstorage'; -const DEFAULT_DELIMITER = '/'; -const PROJECT_DIR_PREFIX = 'lowstorage'; -const COL_SUFFIX = '.avro'; -const CHUNG_1MB = 1024 * 1024; -const CHUNG_5MB = 5 * CHUNG_1MB; -const EMPTY_DATA = Buffer.from('', 'utf8'); - -const errorValidationFn = (errorCode = lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR) => { - throw new DocumentValidationError(`${MODULE_NAME}: Invalid document or schema`, errorCode); +import { Type as parse } from '@avro/types'; +import { lowstorage_ERROR_CODES, lowstorageError, SchemaValidationError, DocumentValidationError, S3OperationError } from 'errors'; +import { matchesQuery, generateUUID, inferAvroSchema, ensureIdFieldInSchema } from 'helpers'; + +const MODULE_NAME: string = 'lowstorage'; +const DEFAULT_DELIMITER: string = '/'; +const PROJECT_DIR_PREFIX: string = 'lowstorage'; +const COL_SUFFIX: string = '.avro'; +const CHUNG_1MB: number = 1024 * 1024; +const CHUNG_5MB: number = 5 * CHUNG_1MB; +const EMPTY_DATA: Buffer = Buffer.from('', 'utf8'); + +const errorValidationFn = (errorCode: string = lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR): void => { + throw new DocumentValidationError(`${MODULE_NAME}: Invalid document or schema ${errorCode}`); }; -const _hasColName = (colName) => { +const _hasColName = (colName: string = ''): void => { if (colName.trim() === '' || colName === null || typeof colName === 'undefined' || colName.length > 255 || colName === null) { throw new lowstorageError(`${MODULE_NAME}: Collection name is required, null or too long`, lowstorage_ERROR_CODES.MISSING_ARGUMENT); } }; -// code / description -// init of new collection is automatically creating it in the bucket -// there is optional (opt-in) switch to create new collections in bucket -// if the schema is not provided, it will create empty buffer and save it -// if the schema is provided, it will save it in memory and use it for all ops -// if the schema is updated, it will save it in memory and use it for all ops -// exposed functions are: -// listCollections ✅ -// collectionExists ✅ -// createCollection ✅ -// removeCollection ✅ -// renameCollection ✅ -// updateCollectionSchema ❌ -// collection ✅ -// s3 ✅ - -// Operations over collections are: -// insert ✅ -// find ✅ -// findOne ✅ -// update ✅ -// updateOne ✅ -// delete ✅ -// count ✅ - -// Errors: -// lowstorageError ✅ -// CollectionNotFoundError ✅ -// SchemaValidationError ✅ -// DocumentValidationError ✅ -// S3OperationError ✅ - /** * lowstorage class for managing collections and performing operations on top of S3-compatible storages. * @class @@ -107,28 +99,23 @@ class lowstorage { * @param {Number} [options.maxRequestSizeInBytes=CHUNG_5MB] - Chunk size for reading and writing data. AWS S3 has a minimum of 5MB per object. * @returns {lowstorage} A new lowstorage instance. */ - constructor( - options = { - accessKeyId: undefined, - secretAccessKey: undefined, - endpoint: undefined, - bucketName: undefined, - region: 'auto', - logger: null, - dirPrefix: PROJECT_DIR_PREFIX, - }, - ) { + private _schemas: Map; + private _s3: S3; + private _dirPrefix: string; + private _avroParse: any; + + constructor(options: S3Options) { this._checkArgs(options); this._schemas = new Map(); this._s3 = new S3(options); this._dirPrefix = options.dirPrefix || PROJECT_DIR_PREFIX; - this._avro = avro; + this._avroParse = parse; } - _checkArgs = (args) => { + _checkArgs = (args: S3Options): void => { const requiredFields = ['accessKeyId', 'secretAccessKey', 'endpoint', 'bucketName']; for (const field of requiredFields) { - if (!args[field]) { + if (!args[field as keyof S3Options]) { throw new lowstorageError(`${MODULE_NAME}: ${field} is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT); } } @@ -139,13 +126,16 @@ class lowstorage { * @returns {Promise} An array of collection names. * @throws {S3OperationError} If there's an error during S3 operation. */ - async listCollections() { + async listCollections(): Promise { try { const listed = await this._s3.list(DEFAULT_DELIMITER, this._dirPrefix); - if (typeof listed === 'object' && listed !== null && listed.keyCount === '0') return []; - // remove the delimiter from the key - return listed.map((entry) => entry.key.slice(this._dirPrefix.length + 1, -COL_SUFFIX.length)); - } catch (error) { + if (Array.isArray(listed)) { + return listed.map((entry) => entry.key.slice(this._dirPrefix.length + 1, -COL_SUFFIX.length)); + } else if (typeof listed === 'object' && listed !== null && 'keyCount' in listed && listed.keyCount === '0') { + return []; + } + return []; + } catch (error: any) { throw new S3OperationError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); } } @@ -156,12 +146,12 @@ class lowstorage { * @returns {Promise} True if the collection exists, false otherwise. * @throws {lowstorageError} If there's an error. */ - async collectionExists(colName) { + async collectionExists(colName: string = ''): Promise { try { _hasColName(colName); const exists = await this._s3.fileExists(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`); return !!exists; - } catch (error) { + } catch (error: any) { if (error.message.includes('Not Found')) { return false; } @@ -177,18 +167,17 @@ class lowstorage { * @returns {Promise} A Promise that resolves to a Collection object. * @throws {lowstorageError} If there's an error. */ - async createCollection(colName, schema, data = []) { + async createCollection(colName: string = '', schema?: Object, data: any[] = []): Promise { try { _hasColName(colName); const exists = await this.collectionExists(colName); if (!exists) { if (typeof schema !== 'undefined' && schema !== null) { try { - const isValid = this._avro.parse(schema); + const isValid = this._avroParse.isValid(schema); if (!isValid) { throw new SchemaValidationError( - `${MODULE_NAME}: Schema is invalid: ${schema}`, - lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR, + `${MODULE_NAME}: Schema is invalid: ${schema} ${lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR}`, ); } } catch (error) { @@ -196,7 +185,7 @@ class lowstorage { } } if (data.length > 0 && schema) { - const wrapperType = this._avro.parse({ type: 'array', items: schema }); + const wrapperType = this._avroParse.forSchema({ type: 'array', items: schema }); await this._s3.put(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`, wrapperType.toBuffer(data)); } else { await this._s3.put(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`, EMPTY_DATA); @@ -204,7 +193,7 @@ class lowstorage { return this.collection(colName, schema, false); } throw new lowstorageError(`${MODULE_NAME}: Collection ${colName} already exists`, lowstorage_ERROR_CODES.COLLECTION_EXISTS); - } catch (error) { + } catch (error: any) { if (error instanceof lowstorageError) { throw error; } @@ -218,7 +207,7 @@ class lowstorage { * @returns {Promise} A Promise that resolves to true if the collection is removed, false otherwise. * @throws {lowstorageError} If there's an error. */ - async removeCollection(colName) { + async removeCollection(colName: string = ''): Promise { try { _hasColName(colName); const exists = await this.collectionExists(colName); @@ -235,7 +224,7 @@ class lowstorage { throw new S3OperationError(`${MODULE_NAME}: Failed to delete collection ${colName}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); } throw new lowstorageError(`${MODULE_NAME}: Collection ${colName} does not exist`, lowstorage_ERROR_CODES.REMOVE_COLLECTION_ERROR); - } catch (error) { + } catch (error: any) { if (error instanceof S3OperationError) { throw error; } @@ -254,7 +243,7 @@ class lowstorage { * @returns {Promise} A Promise that resolves to a Collection object. * @throws {lowstorageError} If there's an error. */ - async collection(colName, schema, autoCreate = true) { + async collection(colName: string = '', schema?: object, autoCreate: boolean = true): Promise { try { _hasColName(colName); const colPath = `${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`; @@ -268,7 +257,7 @@ class lowstorage { } const colSchema = schema || this._schemas.get(colName) || undefined; return new Collection(colName, colSchema, this._s3, this._dirPrefix); - } catch (error) { + } catch (error: any) { // check if error message contains "unknown type" and if so, throw a schema validation error if (error.message.includes('unknown type')) { throw new SchemaValidationError( @@ -332,58 +321,76 @@ class Collection { * @param {Number} [chunkSize=CHUNG_5MB] - The chunk size for reading and writing data. AWS S3 has a maximum of 5MB per object. * @returns {Collection} A new Collection instance. */ - constructor(colName, schema, s3, dirPrefix = PROJECT_DIR_PREFIX, safeWrite = false, chunkSize = CHUNG_5MB) { - this._colName = colName; + private _colName: string; + private _schema: Object; + private _s3: S3; + private _dirPrefix: string; + private _safeWrite: boolean; + private _chunkSize: number; + private _avroParse: any; + private _lastETag: string; + private _dataCache: any[]; + private _avroType: any; + private _key: string; + constructor( + colName: string = '', + schema: any, + s3: S3, + dirPrefix: string = PROJECT_DIR_PREFIX, + safeWrite: boolean = false, + chunkSize: number = CHUNG_5MB, + ) { + this._colName = colName.trim(); this._s3 = s3; this._schema = ensureIdFieldInSchema(schema); this._dirPrefix = dirPrefix; this._safeWrite = safeWrite; this._chunkSize = chunkSize || CHUNG_5MB; - this._key = `${this._dirPrefix}${DEFAULT_DELIMITER}${this._colName}${COL_SUFFIX}`; this._s3.setMaxRequestSizeInBytes(this._chunkSize); - this._avro = avro; + this._avroParse = parse; this._lastETag = ''; this._dataCache = []; - this._avroType = typeof schema === 'undefined' ? null : this._avro.parse(schema); + this._avroType = typeof schema === 'undefined' ? null : this._avroParse.ForSchema(schema); + this._key = `${this._dirPrefix}${DEFAULT_DELIMITER}${this._colName}${COL_SUFFIX}`; } - getProps = () => ({ + getProps = (): CollectionProps => ({ colName: this._colName, - schema: this._schema, s3: this._s3, - avro: this._avro, + schema: this._schema, + avroParse: this._avroParse, avroType: this._avroType, dirPrefix: this._dirPrefix, safeWrite: this._safeWrite, chunkSize: this._chunkSize, }); - setProps = (props) => { + setProps = (props: CollectionProps): void => { this._colName = props.colName; this._schema = props.schema; this._s3 = props.s3; - this._avro = props.avro; + this._avroParse = props.avroParse; this._avroType = props.avroType; this._dirPrefix = props.dirPrefix; this._safeWrite = props.safeWrite; this._chunkSize = props.chunkSize; }; - setSafeWrite = (safeWrite) => { + setSafeWrite = (safeWrite: boolean): void => { this._safeWrite = safeWrite; }; - getSafeWrite = () => { + getSafeWrite = (): boolean => { return this._safeWrite; }; - getAvroSchema = () => { + getAvroSchema = (): Object => { return this._schema; }; - setAvroSchema = (schema) => { + setAvroSchema = (schema: Object): void => { this._schema = ensureIdFieldInSchema(schema); - this._avroType = typeof schema === 'undefined' ? null : this._avro.parse(schema); + this._avroType = typeof schema === 'undefined' ? null : this._avroParse.forSchema(schema); }; async _loadData() { @@ -399,7 +406,7 @@ class Collection { return this._dataCache; } this._lastETag = etag === null ? this._lastETag : etag; - const wrapperType = this._avro.parse({ type: 'array', items: this._avroType }); + const wrapperType = this._avroParse.forSchema({ type: 'array', items: this._avroType }); if (data.length < this._chunkSize) { this._dataCache = data.length > 0 ? wrapperType.fromBuffer(Buffer.from(data, 'utf8')) : []; return this._dataCache; @@ -412,7 +419,7 @@ class Collection { const nextDataBody = await nextDataResponse.text(); bufferArr.push(Buffer.from(nextDataBody, 'utf8')); offset += this._chunkSize; - const contentLength = nextDataResponse.headers.get('content-length') || nextDataBody.length; + const contentLength = parseInt(nextDataResponse.headers.get('content-length') || nextDataBody.length.toString()); if (contentLength < this._chunkSize) { repeat = false; } @@ -420,7 +427,7 @@ class Collection { const bufferedData = Buffer.concat(bufferArr); this._dataCache = wrapperType.fromBuffer(bufferedData); return this._dataCache; - } catch (error) { + } catch (error: any) { if (error.toString().indexOf('status 404: Unknown - Not Found') > -1) { this._dataCache = []; return this._dataCache; @@ -429,7 +436,7 @@ class Collection { } } - async _saveData(data) { + async _saveData(data: Object[]): Promise { try { if (this._avroType === null || typeof this._avroType === 'undefined') { throw new lowstorageError( @@ -437,7 +444,7 @@ class Collection { lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR, ); } - const wrapperType = this._avro.parse({ type: 'array', items: this._avroType }); + const wrapperType = this._avroParse.forSchema({ type: 'array', items: this._avroType }); const dataBuffer = data.length > 0 ? wrapperType.toBuffer(data) : EMPTY_DATA; // TODO: check if this is the right way to handle empty data if (this._safeWrite && this._lastETag !== '') { @@ -449,18 +456,18 @@ class Collection { } const resp = await this._s3.put(this._key, dataBuffer); - if (resp.status !== 200) { + if (typeof resp === 'object' && 'status' in resp && resp.status !== 200) { throw new S3OperationError(`${MODULE_NAME}: Failed to save data`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); } // Update the cached ETag - const newETag = resp.headers.get('etag'); - if (newETag) { + const newETag = (resp as any).headers?.get('etag') || ''; + if (newETag && newETag.length > 0) { this._lastETag = this._s3.sanitizeETag(newETag); this._dataCache = data; } return true; - } catch (error) { + } catch (error: any) { if (error instanceof S3OperationError) { throw error; } @@ -475,7 +482,7 @@ class Collection { * @returns {Promise} A Promise that resolves to the array of inserted document(s). * @throws {lowstorageError} If there's an error. */ - async insert(doc, schema = undefined) { + async insert(doc: Object | Array, schema?: Object): Promise { try { if (doc === undefined || doc === null) { throw new lowstorageError(`${MODULE_NAME}: Document is required for insert`, lowstorage_ERROR_CODES.INSERT_ERROR); @@ -488,8 +495,8 @@ class Collection { } const items = !Array.isArray(doc) ? [doc] : doc; - const schemaWithId = ensureIdFieldInSchema(schema) || this._schema || inferAvroType(items[0]); - const avroType = this._avro.parse(schemaWithId); + const schemaWithId = schema ? ensureIdFieldInSchema(schema) : this._schema || ensureIdFieldInSchema(inferAvroSchema(items[0])); + const avroType = this._avroParse.forSchema(schemaWithId); if (!avroType) { throw new SchemaValidationError( `${MODULE_NAME}: Schema is required - Pass a schema to the insert method`, @@ -522,7 +529,7 @@ class Collection { } this.setAvroSchema(schemaWithId); return items; - } catch (error) { + } catch (error: any) { if (error.message.includes('unknown type')) { throw new SchemaValidationError( `${MODULE_NAME}: Schema input is invalid: ${error.message}`, @@ -545,17 +552,20 @@ class Collection { * @returns {Promise} A Promise that resolves to an array of matching documents. * @throws {lowstorageError} If there's an error. */ - async find(query = {}, options = {}) { + async find(query: Object = {}, options: Object = {}): Promise { try { if (query === undefined || query === null) { throw new lowstorageError(`${MODULE_NAME}: Query is required for update`, lowstorage_ERROR_CODES.MISSING_ARGUMENT); } const data = await this._loadData(); - const start = parseInt(options.skip, 10) || 0; - const end = parseInt(options.limit, 10) ? start + parseInt(options.limit, 10) : undefined; + const start = (options as { skip?: number }).skip !== undefined ? parseInt(String((options as { skip?: number }).skip), 10) : 0; + const end = + (options as { limit?: number }).limit !== undefined + ? start + parseInt(String((options as { limit?: number }).limit), 10) + : undefined; const filteredData = data.filter((doc) => matchesQuery(doc, query)).slice(start, end); return filteredData; - } catch (error) { + } catch (error: any) { throw new lowstorageError(`${MODULE_NAME}: Find operation failed: ${error.message}`, lowstorage_ERROR_CODES.FIND_ERROR); } } @@ -566,14 +576,14 @@ class Collection { * @returns {Promise} A Promise that resolves to the first matching document or null if no match is found. * @throws {lowstorageError} If there's an error. */ - async findOne(query = {}) { + async findOne(query: Object = {}): Promise { try { if (query === null) { throw new lowstorageError(`${MODULE_NAME}: Query cannot be null`, lowstorage_ERROR_CODES.INVALID_ARGUMENT); } const result = await this.find(query, { limit: 1 }); return result[0] || null; - } catch (error) { + } catch (error: any) { if (error instanceof lowstorageError) { throw error; } @@ -591,7 +601,7 @@ class Collection { * @throws {DocumentValidationError} If the updated document is invalid. * @throws {S3OperationError} If the S3 operation fails. */ - async update(query = {}, update = {}, options = {}) { + async update(query: Object = {}, update: Object = {}, options: Object = {}): Promise { try { if (query === undefined || query === null || update === undefined || update === null) { throw new lowstorageError( @@ -632,7 +642,7 @@ class Collection { if (!success) { throw new S3OperationError(`${MODULE_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); } - } else if (options.upsert) { + } else if (options && 'upsert' in options && options.upsert) { // If upsert is true, we need to insert the document const success = await this.insert(update); if (!success) { @@ -641,7 +651,7 @@ class Collection { updatedCount = 1; } return updatedCount; - } catch (error) { + } catch (error: any) { if (error instanceof S3OperationError) { throw error; } @@ -691,7 +701,7 @@ class Collection { throw new DocumentValidationError(`${MODULE_NAME}: Invalid document or schema`, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR); } } - if (options.upsert) { + if (options && 'upsert' in options && options.upsert) { // If upsert is true, we need to insert the document const success = await this.insert(update); if (!success) { @@ -700,7 +710,7 @@ class Collection { return 1; } return 0; - } catch (error) { + } catch (error: any) { if (error instanceof lowstorageError) { throw error; } @@ -715,7 +725,7 @@ class Collection { * @throws {lowstorageError} If the delete operation fails. * @throws {S3OperationError} If the S3 operation fails. */ - async delete(query = {}) { + async delete(query: Object = {}): Promise { try { if (query === undefined || query === null) { throw new lowstorageError(`${MODULE_NAME}: Query is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT); @@ -730,7 +740,7 @@ class Collection { throw new S3OperationError(`${MODULE_NAME}: Failed to delete document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); } return initialLength - newData.length; - } catch (error) { + } catch (error: any) { if (error instanceof S3OperationError) { throw error; } @@ -744,7 +754,7 @@ class Collection { * @throws {lowstorageError} If the delete operation fails. * @throws {S3OperationError} If the S3 operation fails. */ - async deleteAll() { + async deleteAll(): Promise { try { const data = await this._loadData(); const initialLength = data.length; @@ -753,7 +763,7 @@ class Collection { throw new S3OperationError(`${MODULE_NAME}: Failed to delete document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); } return initialLength; - } catch (error) { + } catch (error: any) { if (error instanceof S3OperationError) { throw error; } @@ -767,16 +777,16 @@ class Collection { * @returns {Promise} A Promise that resolves to the number of documents in the collection. * @throws {lowstorageError} If the count operation fails. */ - async count(query = {}) { + async count(query: Object = {}): Promise { try { const data = await this.find(query); return data.length; - } catch (error) { + } catch (error: any) { throw new lowstorageError(`${MODULE_NAME}: Count operation failed: ${error.message}`, lowstorage_ERROR_CODES.COUNT_ERROR); } } - async renameCollection(newColName, newSchema = this._schema) { + async renameCollection(newColName: string, newSchema: Object = this._schema): Promise { try { _hasColName(newColName); const exists = await this._s3.fileExists(`${this._dirPrefix}${DEFAULT_DELIMITER}${newColName}${COL_SUFFIX}`); @@ -789,7 +799,7 @@ class Collection { await createNew._saveData(data); await this._s3.delete(`${this._dirPrefix}${DEFAULT_DELIMITER}${this._colName}${COL_SUFFIX}`); return createNew; - } catch (error) { + } catch (error: any) { if (error instanceof lowstorageError) { throw error; } diff --git a/tsconfig.json b/tsconfig.json index cbaf9e9..45c57a2 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,109 +1,31 @@ { "compilerOptions": { - /* Visit https://aka.ms/tsconfig to read more about this file */ - - /* Projects */ - // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ - // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ - // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ - // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ - // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ - // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ - - /* Language and Environment */ - "target": "ESNext" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */, - // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ - // "jsx": "preserve", /* Specify what JSX code is generated. */ - // "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */ - // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ - // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ - // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ - // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ - // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ - // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ - // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ - // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ - - /* Modules */ - "module": "ES2020" /* Specify what module code is generated. */, - // "rootDir": "./", /* Specify the root folder within your source files. */ - // "moduleResolution": "node10", /* Specify how TypeScript looks up a file from a given module specifier. */ - // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ - // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ - // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ - // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ - // "types": [], /* Specify type package names to be included without being referenced in a source file. */ - // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ - // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ - // "allowImportingTsExtensions": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */ - // "resolvePackageJsonExports": true, /* Use the package.json 'exports' field when resolving package imports. */ - // "resolvePackageJsonImports": true, /* Use the package.json 'imports' field when resolving imports. */ - // "customConditions": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */ - // "resolveJsonModule": true, /* Enable importing .json files. */ - // "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */ - // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ - - /* JavaScript Support */ - // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ - // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ - // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ - - /* Emit */ - // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ - // "declarationMap": true, /* Create sourcemaps for d.ts files. */ - // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ - // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ - // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ - // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ - // "outDir": "./", /* Specify an output folder for all emitted files. */ - // "removeComments": true, /* Disable emitting comments. */ - // "noEmit": true, /* Disable emitting files from a compilation. */ - // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ - // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types. */ - // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ - // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ - // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ - // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ - // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ - // "newLine": "crlf", /* Set the newline character for emitting files. */ - // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ - // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ - // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ - // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ - // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ - // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ - - /* Interop Constraints */ - // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ - // "verbatimModuleSyntax": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */ - // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ - "esModuleInterop": true /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */, - // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ - "forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */, - - /* Type Checking */ - "strict": true /* Enable all strict type-checking options. */, - // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ - // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ - // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ - // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ - // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ - // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ - // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ - // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ - // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ - // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ - // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ - // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ - // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ - // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ - // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ - // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ - // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ - // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ - - /* Completeness */ - // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ - "skipLibCheck": true /* Skip type checking all .d.ts files. */ - } + "target": "ES2020", + "module": "ES2020", + "lib": ["ES2018", "ES2015", "dom", "dom.iterable", "esnext"], + "declaration": true, + "declarationDir": "./lib", + "rootDir": "./src", + "outDir": "./lib", + "strict": true, + "allowJs": false, + "noImplicitAny": true, + "noFallthroughCasesInSwitch": true, + "baseUrl": "./src", + "moduleResolution": "node", + "forceConsistentCasingInFileNames": true, + "skipLibCheck": false, + "emitDecoratorMetadata": false, + "experimentalDecorators": true, + "esModuleInterop": true, + "downlevelIteration": true, + "sourceMap": true, + "paths": { + "*": ["node_modules/*"], + "helpers": ["./helpers.ts"], + "errors": ["./errors.ts"] + } + }, + "include": ["./src/**/*.ts", "./src/*.ts"], + "exclude": ["node_modules", "dev", "examples", "lib", "**/*.json", "**/*.test.js"] } From bc786d8cf0dd99b7c1ed5c976aa4510a724b138a Mon Sep 17 00:00:00 2001 From: Jolly Good <1671375+good-lly@users.noreply.github.com> Date: Tue, 20 Aug 2024 12:19:06 +0200 Subject: [PATCH 13/18] fixed some typescript errors --- build/lowstorage.js | 139 +++++++++++++++++++++------------------- build/lowstorage.js.map | 6 +- lib/errors.js | 3 - lib/errors.js.map | 2 +- lib/helpers.d.ts | 5 +- lib/helpers.js | 47 +------------- lib/helpers.js.map | 2 +- lib/lowstorage.d.ts | 7 +- lib/lowstorage.js | 38 ++++++++--- lib/lowstorage.js.map | 2 +- package-lock.json | 80 ++++------------------- package.json | 3 +- src/errors.ts | 3 - src/helpers.ts | 50 +-------------- src/lowstorage.test.js | 2 +- src/lowstorage.ts | 47 +++++++++----- 16 files changed, 166 insertions(+), 270 deletions(-) diff --git a/build/lowstorage.js b/build/lowstorage.js index 7492a02..2354879 100644 --- a/build/lowstorage.js +++ b/build/lowstorage.js @@ -1,75 +1,84 @@ -import ct from"util";import St from"buffer";import{randomUUID as ze}from"node:crypto";var At=Object.create,ft=Object.defineProperty,kt=Object.getOwnPropertyDescriptor,ht=Object.getOwnPropertyNames,Nt=Object.getPrototypeOf,$t=Object.prototype.hasOwnProperty;var De=(n,u)=>function(){return u||(0,n[ht(n)[0]])((u={exports:{}}).exports,u),u.exports},It=(n,u,o,p)=>{if(u&&typeof u=="object"||typeof u=="function")for(let d of ht(u))!$t.call(n,d)&&d!==o&&ft(n,d,{get:()=>u[d],enumerable:!(p=kt(u,d))||p.enumerable});return n},xt=(n,u,o)=>(o=n!=null?At(Nt(n)):{},It(u||!n||!n.__esModule?ft(o,"default",{value:n,enumerable:!0}):o,n)),lt=De({"node_modules/@avro/types/lib/utils.js"(n,u){"use strict";var o=new v(4096);function p(a){return typeof Buffer.alloc=="function"?Buffer.alloc(a):new Buffer(a)}function d(a,f){return typeof Buffer.from=="function"?Buffer.from(a,f):new Buffer(a,f)}function g(a){return a.charAt(0).toUpperCase()+a.slice(1)}function b(a,f){return a===f?0:af?p(a):(this._pos+a>f&&(this._slab=p(f),this._pos=0),this._slab.slice(this._pos,this._pos+=a))};function s(a,f){if(this.buf=a,this.pos=f|0,this.pos<0)throw new Error("negative offset")}s.prototype.isValid=function(){return this.pos<=this.buf.length},s.prototype.readBoolean=function(){return!!this.buf[this.pos++]},s.prototype.skipBoolean=function(){this.pos++},s.prototype.writeBoolean=function(a){this.buf[this.pos++]=!!a},s.prototype.readInt=s.prototype.readLong=function(){var a=0,f=0,_=this.buf,m,S,$,R;do m=_[this.pos++],S=m&128,a|=(m&127)<>1^-(a&1)},s.prototype.skipInt=s.prototype.skipLong=function(){for(var a=this.buf;a[this.pos++]&128;);},s.prototype.writeInt=s.prototype.writeLong=function(a){var f=this.buf,_,m;if(a>=-1073741824&&a<1073741824){m=a>=0?a<<1:~a<<1|1;do f[this.pos]=m&127,m>>=7;while(m&&(f[this.pos++]|=128))}else{_=a>=0?a*2:-a*2-1;do f[this.pos]=_&127,_/=128;while(_>=1&&(f[this.pos++]|=128))}this.pos++},s.prototype.readFloat=function(){var a=this.buf,f=this.pos;if(this.pos+=4,!(this.pos>a.length))return this.buf.readFloatLE(f)},s.prototype.skipFloat=function(){this.pos+=4},s.prototype.writeFloat=function(a){var f=this.buf,_=this.pos;if(this.pos+=4,!(this.pos>f.length))return this.buf.writeFloatLE(a,_)},s.prototype.readDouble=function(){var a=this.buf,f=this.pos;if(this.pos+=8,!(this.pos>a.length))return this.buf.readDoubleLE(f)},s.prototype.skipDouble=function(){this.pos+=8},s.prototype.writeDouble=function(a){var f=this.buf,_=this.pos;if(this.pos+=8,!(this.pos>f.length))return this.buf.writeDoubleLE(a,_)},s.prototype.readFixed=function(a){var f=this.pos;if(this.pos+=a,!(this.pos>this.buf.length)){var _=o.alloc(a);return this.buf.copy(_,0,f,f+a),_}},s.prototype.skipFixed=function(a){this.pos+=a},s.prototype.writeFixed=function(a,f){f=f||a.length;var _=this.pos;this.pos+=f,!(this.pos>this.buf.length)&&a.copy(this.buf,_,0,f)},s.prototype.readBytes=function(){return this.readFixed(this.readLong())},s.prototype.skipBytes=function(){var a=this.readLong();this.pos+=a},s.prototype.writeBytes=function(a){var f=a.length;this.writeLong(f),this.writeFixed(a,f)},typeof Buffer.prototype.utf8Slice=="function"?s.prototype.readString=function(){var a=this.readLong(),f=this.pos,_=this.buf;if(this.pos+=a,!(this.pos>_.length))return this.buf.utf8Slice(f,f+a)}:s.prototype.readString=function(){var a=this.readLong(),f=this.pos,_=this.buf;if(this.pos+=a,!(this.pos>_.length))return this.buf.slice(f,f+a).toString()},s.prototype.skipString=function(){var a=this.readLong();this.pos+=a},s.prototype.writeString=function(a){var f=Buffer.byteLength(a),_=this.buf;this.writeLong(f);var m=this.pos;if(this.pos+=f,!(this.pos>_.length))if(f>64)this._writeUtf8(a,f);else{var S,$,R,B;for(S=0,$=f;S<$;S++)R=a.charCodeAt(S),R<128?_[m++]=R:R<2048?(_[m++]=R>>6|192,_[m++]=R&63|128):(R&64512)===55296&&((B=a.charCodeAt(S+1))&64512)===56320?(R=65536+((R&1023)<<10)+(B&1023),S++,_[m++]=R>>18|240,_[m++]=R>>12&63|128,_[m++]=R>>6&63|128,_[m++]=R&63|128):(_[m++]=R>>12|224,_[m++]=R>>6&63|128,_[m++]=R&63|128)}},typeof Buffer.prototype.utf8Write=="function"?s.prototype._writeUtf8=function(a,f){this.buf.utf8Write(a,this.pos-f,f)}:s.prototype._writeUtf8=function(a,f){this.buf.write(a,this.pos-f,f,"utf8")},typeof Buffer.prototype.latin1Write=="function"?s.prototype.writeBinary=function(a,f){var _=this.pos;this.pos+=f,!(this.pos>this.buf.length)&&this.buf.latin1Write(a,_,f)}:typeof Buffer.prototype.binaryWrite=="function"?s.prototype.writeBinary=function(a,f){var _=this.pos;this.pos+=f,!(this.pos>this.buf.length)&&this.buf.binaryWrite(a,_,f)}:s.prototype.writeBinary=function(a,f){var _=this.pos;this.pos+=f,!(this.pos>this.buf.length)&&this.buf.write(a,_,f,"binary")},s.prototype.matchBoolean=function(a){return this.buf[this.pos++]-a.buf[a.pos++]},s.prototype.matchInt=s.prototype.matchLong=function(a){var f=this.readLong(),_=a.readLong();return f===_?0:f<_?-1:1},s.prototype.matchFloat=function(a){var f=this.readFloat(),_=a.readFloat();return f===_?0:f<_?-1:1},s.prototype.matchDouble=function(a){var f=this.readDouble(),_=a.readDouble();return f===_?0:f<_?-1:1},s.prototype.matchFixed=function(a,f){return this.readFixed(f).compare(a.readFixed(f))},s.prototype.matchBytes=s.prototype.matchString=function(a){var f=this.readLong(),_=this.pos;this.pos+=f;var m=a.readLong(),S=a.pos;a.pos+=m;var $=this.buf.slice(_,this.pos),R=a.buf.slice(S,a.pos);return $.compare(R)},s.prototype.unpackLongBytes=function(){var a=p(8),f=0,_=0,m=6,S=this.buf,$,R;for($=S[this.pos++],R=$&1,a.fill(0),f|=($&127)>>1;$&128;)$=S[this.pos++],f|=($&127)<=8&&(m-=8,a[_++]=f,f>>=8);return a[_]=f,R&&w(a,8),a},s.prototype.packLongBytes=function(a){var f=(a[7]&128)>>7,_=this.buf,m=1,S=0,$=3,R;f?(w(a,8),R=1):R=0;for(var B=[a.readUIntLE(0,3),a.readUIntLE(3,3),a.readUIntLE(6,2)];$&&!B[--$];);for(;S<$;)for(R|=B[S++]<7;)_[this.pos++]=R&127|128,R>>=7,m-=7;R|=B[$]<>=7;while(R&&(_[this.pos++]|=128));this.pos++,f&&w(a,8)};function w(a,f){for(;f--;)a[f]=~a[f]}u.exports={Tap:s,abstractFunction:V,bufferFrom:d,capitalize:g,compare:b,hasDuplicates:T,isType:F,jsonEquals:O,newBuffer:p,toMap:l,unqualifyName:x}}}),jt=De({"node_modules/@avro/types/lib/values.js"(n,u){"use strict";var o=lt(),p=ct,d=p.format;function g(v,s,w){return l("FROM_JSON",v,s,w)}function b(v,s,w){return l("FROM_DEFAULT_JSON",v,s,w)}function O(v,s,w){return l("TO_JSON",v,s,w)}function l(v,s,w,a){return new x(v,a).clone(s,w,[]).build(w)}function T(){this.value=void 0,this.errors=[]}T.prototype.isOk=function(){return!this.errors.length},T.prototype.build=function(v){if(!this.errors.length)return this.value;var s=[],w,a;for(w=0,a=this.errors.length;w",Qe(this.typeName))},s.prototype._attrs=function(e){e.derefed=e.derefed||{};var t=this.name;if(t!==void 0){if(e.noDeref||e.derefed[t])return t;e.derefed[t]=!0}var r={};this.name!==void 0&&(r.name=t),r.type=this.typeName;var i=this._deref(r,e);return i!==void 0&&(r=i),e.exportAttrs&&(this.aliases&&this.aliases.length&&(r.aliases=this.aliases),this.doc!==void 0&&(r.doc=this.doc)),r},s.prototype._createBranchConstructor=function(){var e=this.branchName;if(e==="null")return null;var t=~e.indexOf(".")?"this['"+e+"']":"this."+e,r="return function Branch$(val) { "+t+" = val; };",i=new Function(r)(),c=new Function("return ''");Object.defineProperty(i.prototype,"toString",{get:function(){return c}});var h=this;i.type=h,Object.defineProperty(i.prototype,"type",{get:function(){return h}});var y=new Function("return "+t+";");return Object.defineProperty(i.prototype,"unwrap",{get:function(){return y}}),i},s.prototype._peek=function(e){var t=e.pos,r=this._read(e);return e.pos=t,r},s.prototype._check=o.abstractFunction,s.prototype._deref=o.abstractFunction,s.prototype._match=o.abstractFunction,s.prototype._read=o.abstractFunction,s.prototype._skip=o.abstractFunction,s.prototype._update=o.abstractFunction,s.prototype._write=o.abstractFunction,s.prototype.decode=s.prototype.binaryDecodeAt,s.prototype.encode=s.prototype.binaryEncodeAt,s.prototype.fromBuffer=s.prototype.binaryDecode,s.prototype.toBuffer=s.prototype.binaryEncode,s.prototype.compareBuffers=s.prototype.binaryCompare;function w(e){s.call(this),this._branchConstructor=this._createBranchConstructor(),e||Object.freeze(this)}g.inherits(w,s),w.prototype._update=function(e,t){t.typeName===this.typeName&&(e._read=this._read)},w.prototype._deref=function(){return this.typeName},w.prototype.compare=o.compare;function a(){w.call(this)}g.inherits(a,w),a.prototype._check=function(e,t,r){var i=e===null;return!i&&r&&r(e,this),i},a.prototype._read=function(){return null},a.prototype._skip=function(){},a.prototype._write=function(e,t){t!==null&&X(t,this)},a.prototype._match=function(){return 0},a.prototype.compare=a.prototype._match,a.prototype.typeName="null";function f(){w.call(this)}g.inherits(f,w),f.prototype._check=function(e,t,r){var i=typeof e=="boolean";return!i&&r&&r(e,this),i},f.prototype._read=function(e){return e.readBoolean()},f.prototype._skip=function(e){e.skipBoolean()},f.prototype._write=function(e,t){typeof t!="boolean"&&X(t,this),e.writeBoolean(t)},f.prototype._match=function(e,t){return e.matchBoolean(t)},f.prototype.typeName="boolean";function _(){w.call(this)}g.inherits(_,w),_.prototype._check=function(e,t,r){var i=e===(e|0);return!i&&r&&r(e,this),i},_.prototype._read=function(e){return e.readInt()},_.prototype._skip=function(e){e.skipInt()},_.prototype._write=function(e,t){t!==(t|0)&&X(t,this),e.writeInt(t)},_.prototype._match=function(e,t){return e.matchInt(t)},_.prototype.typeName="int";function m(){w.call(this)}g.inherits(m,w),m.prototype._check=function(e,t,r){var i=typeof e=="number"&&e%1===0&&Be(e);return!i&&r&&r(e,this),i},m.prototype._read=function(e){var t=e.readLong();if(!Be(t))throw new Error("potential precision loss");return t},m.prototype._skip=function(e){e.skipLong()},m.prototype._write=function(e,t){(typeof t!="number"||t%1||!Be(t))&&X(t,this),e.writeLong(t)},m.prototype._match=function(e,t){return e.matchLong(t)},m.prototype._update=function(e,t){switch(t.typeName){case"int":e._read=t._read;break;case"abstract:long":case"long":e._read=this._read}},m.prototype.typeName="long",m.__with=function(e,t){e=e||{};var r={toBuffer:"_toBuffer",fromBuffer:"_fromBuffer",fromJSON:"_fromJSON",toJSON:"_toJSON",isValid:"_isValid",compare:"compare"},i=new ie(t);return Object.keys(r).forEach(function(c){if(e[c]===void 0)throw new Error(l("missing method implementation: %s",c));i[r[c]]=e[c]}),Object.freeze(i)};function S(){w.call(this)}g.inherits(S,w),S.prototype._check=function(e,t,r){var i=typeof e=="number";return!i&&r&&r(e,this),i},S.prototype._read=function(e){return e.readFloat()},S.prototype._skip=function(e){e.skipFloat()},S.prototype._write=function(e,t){typeof t!="number"&&X(t,this),e.writeFloat(t)},S.prototype._match=function(e,t){return e.matchFloat(t)},S.prototype._update=function(e,t){switch(t.typeName){case"float":case"int":e._read=t._read;break;case"abstract:long":case"long":e._read=function(r){return r.readLong()}}},S.prototype.typeName="float";function $(){w.call(this)}g.inherits($,w),$.prototype._check=function(e,t,r){var i=typeof e=="number";return!i&&r&&r(e,this),i},$.prototype._read=function(e){return e.readDouble()},$.prototype._skip=function(e){e.skipDouble()},$.prototype._write=function(e,t){typeof t!="number"&&X(t,this),e.writeDouble(t)},$.prototype._match=function(e,t){return e.matchDouble(t)},$.prototype._update=function(e,t){switch(t.typeName){case"double":case"float":case"int":e._read=t._read;break;case"abstract:long":case"long":e._read=function(r){return r.readLong()}}},$.prototype.typeName="double";function R(){w.call(this)}g.inherits(R,w),R.prototype._check=function(e,t,r){var i=typeof e=="string";return!i&&r&&r(e,this),i},R.prototype._read=function(e){return e.readString()},R.prototype._skip=function(e){e.skipString()},R.prototype._write=function(e,t){typeof t!="string"&&X(t,this),e.writeString(t)},R.prototype._match=function(e,t){return e.matchString(t)},R.prototype._update=function(e,t){switch(t.typeName){case"bytes":case"string":e._read=this._read}},R.prototype.typeName="string";function B(){w.call(this)}g.inherits(B,w),B.prototype._check=function(e,t,r){var i=Buffer.isBuffer(e);return!i&&r&&r(e,this),i},B.prototype._read=function(e){return e.readBytes()},B.prototype._skip=function(e){e.skipBytes()},B.prototype._write=function(e,t){Buffer.isBuffer(t)||X(t,this),e.writeBytes(t)},B.prototype._match=function(e,t){return e.matchBytes(t)},B.prototype._update=R.prototype._update,B.prototype.compare=Buffer.compare,B.prototype.typeName="bytes";function G(e,t,r){if(s.call(this),!Array.isArray(e))throw new Error(l("non-array union schema: %j",e));if(!e.length)throw new Error("empty union");this.types=Object.freeze(e.map(function(i){return s.forSchema(i,t,r)})),this._branchIndices={},this.types.forEach(function(i,c){if(o.isType(i,"union"))throw new Error("unions cannot be directly nested");var h=i.branchName;if(this._branchIndices[h]!==void 0)throw new Error(l("duplicate union branch name: %j",h));this._branchIndices[h]=c},this)}g.inherits(G,s),G.prototype._branchConstructor=function(){throw new Error("unions cannot be directly wrapped")},G.prototype._skip=function(e){this.types[e.readLong()]._skip(e)},G.prototype._match=function(e,t){var r=e.readLong(),i=t.readLong();return r===i?this.types[r]._match(e,t):r",H}function pe(){return D.wrap(this)}},W.prototype._createChecker=function(){var e=[],t=[],r=this._getConstructorName(),i="return function check"+r+`(v, f, h, p) { -`;if(i+=` if ( -`,i+=` v === null || -`,i+=` typeof v != 'object' || -`,i+=` (f && !this._checkFields(v)) -`,i+=` ) { -`,i+=` if (h) { h(v, this); } -`,i+=` return false; -`,i+=` } -`,!this.fields.length)i+=` return true; -`;else{for(c=0,h=this.fields.length;cfunction(){return l||(0,h[bt(h)[0]])((l={exports:{}}).exports,l),l.exports},Bt=(h,l,c,d)=>{if(l&&typeof l=="object"||typeof l=="function")for(let _ of bt(l))!Pt.call(h,_)&&_!==c&&wt(h,_,{get:()=>l[_],enumerable:!(d=$t(l,_))||d.enumerable});return h},Lt=(h,l,c)=>(c=h!=null?It(Ct(h)):{},Bt(l||!h||!h.__esModule?wt(c,"default",{value:h,enumerable:!0}):c,h)),Ue=Ae({"node_modules/avsc/lib/utils.js"(h,l){"use strict";var c=qe,d=xt,_=De,g=c.Buffer,O=new S(4096),T=/^[A-Za-z_][A-Za-z0-9_]*$/,v=_.format;function R(u){return typeof g.alloc=="function"?g.alloc(u):new g(u)}function C(u,p){return typeof g.from=="function"?g.from(u,p):new g(u,p)}function P(u){return u.charAt(0).toUpperCase()+u.slice(1)}function Q(u,p){return u===p?0:u=0)return-2;b=A}return b}function w(u,p){var b={},A,V;for(A=0;Ap?R(u):(this._pos+u>p&&(this._slab=R(p),this._pos=0),this._slab.slice(this._pos,this._pos+=u))};function N(u){var p=1103515245,b=12345,A=Math.pow(2,31),V=Math.floor(u||Math.random()*(A-1));this._max=A,this._nextInt=function(){return V=(p*V+b)%A}}N.prototype.nextBoolean=function(){return!!(this._nextInt()%2)},N.prototype.nextInt=function(u,p){return p===void 0&&(p=u,u=0),p=p===void 0?this._max:p,u+Math.floor(this.nextFloat()*(p-u))},N.prototype.nextFloat=function(u,p){return p===void 0&&(p=u,u=0),p=p===void 0?1:p,u+(p-u)*this._nextInt()/this._max},N.prototype.nextString=function(u,p){u|=0,p=p||"aA";var b="";p.indexOf("a")>-1&&(b+="abcdefghijklmnopqrstuvwxyz"),p.indexOf("A")>-1&&(b+="ABCDEFGHIJKLMNOPQRSTUVWXYZ"),p.indexOf("#")>-1&&(b+="0123456789"),p.indexOf("!")>-1&&(b+="~`!@#$%^&*()_+-={}[]:\";'<>?,./|\\");for(var A=[],V=0;V0&&p[b].index>1].index;)u=p[b],p[b]=p[A],p[A]=u,b=A},x.prototype.pop=function(){var u=this._items,p=u.length-1|0,b=u[0];if(!b||b.index>this._index)return null;if(this._index++,!p)return u.pop(),b;u[0]=u.pop();for(var A=p>>1,V=0,ee,K,he,pe,fe,ge,ve;V=pe.index));)u[he]=pe,u[V]=fe,V=he;return b};function I(u,p){if(this.buf=u,this.pos=p|0,this.pos<0)throw new Error("negative offset")}I.prototype.isValid=function(){return this.pos<=this.buf.length},I.prototype._invalidate=function(){this.pos=this.buf.length+1},I.prototype.readBoolean=function(){return!!this.buf[this.pos++]},I.prototype.skipBoolean=function(){this.pos++},I.prototype.writeBoolean=function(u){this.buf[this.pos++]=!!u},I.prototype.readInt=I.prototype.readLong=function(){var u=0,p=0,b=this.buf,A,V,ee,K;do A=b[this.pos++],V=A&128,u|=(A&127)<>1^-(u&1)},I.prototype.skipInt=I.prototype.skipLong=function(){for(var u=this.buf;u[this.pos++]&128;);},I.prototype.writeInt=I.prototype.writeLong=function(u){var p=this.buf,b,A;if(u>=-1073741824&&u<1073741824){A=u>=0?u<<1:~u<<1|1;do p[this.pos]=A&127,A>>=7;while(A&&(p[this.pos++]|=128))}else{b=u>=0?u*2:-u*2-1;do p[this.pos]=b&127,b/=128;while(b>=1&&(p[this.pos++]|=128))}this.pos++},I.prototype.readFloat=function(){var u=this.buf,p=this.pos;return this.pos+=4,this.pos>u.length?0:this.buf.readFloatLE(p)},I.prototype.skipFloat=function(){this.pos+=4},I.prototype.writeFloat=function(u){var p=this.buf,b=this.pos;if(this.pos+=4,!(this.pos>p.length))return this.buf.writeFloatLE(u,b)},I.prototype.readDouble=function(){var u=this.buf,p=this.pos;return this.pos+=8,this.pos>u.length?0:this.buf.readDoubleLE(p)},I.prototype.skipDouble=function(){this.pos+=8},I.prototype.writeDouble=function(u){var p=this.buf,b=this.pos;if(this.pos+=8,!(this.pos>p.length))return this.buf.writeDoubleLE(u,b)},I.prototype.readFixed=function(u){var p=this.pos;if(this.pos+=u,!(this.pos>this.buf.length)){var b=O.alloc(u);return this.buf.copy(b,0,p,p+u),b}},I.prototype.skipFixed=function(u){this.pos+=u},I.prototype.writeFixed=function(u,p){p=p||u.length;var b=this.pos;this.pos+=p,!(this.pos>this.buf.length)&&u.copy(this.buf,b,0,p)},I.prototype.readBytes=function(){var u=this.readLong();if(u<0){this._invalidate();return}return this.readFixed(u)},I.prototype.skipBytes=function(){var u=this.readLong();if(u<0){this._invalidate();return}this.pos+=u},I.prototype.writeBytes=function(u){var p=u.length;this.writeLong(p),this.writeFixed(u,p)},typeof g.prototype.utf8Slice=="function"?I.prototype.readString=function(){var u=this.readLong();if(u<0)return this._invalidate(),"";var p=this.pos,b=this.buf;if(this.pos+=u,!(this.pos>b.length))return this.buf.utf8Slice(p,p+u)}:I.prototype.readString=function(){var u=this.readLong();if(u<0)return this._invalidate(),"";var p=this.pos,b=this.buf;if(this.pos+=u,!(this.pos>b.length))return this.buf.slice(p,p+u).toString()},I.prototype.skipString=function(){var u=this.readLong();if(u<0){this._invalidate();return}this.pos+=u},I.prototype.writeString=function(u){var p=g.byteLength(u),b=this.buf;this.writeLong(p);var A=this.pos;if(this.pos+=p,!(this.pos>b.length))if(p>64&&typeof g.prototype.utf8Write=="function")b.utf8Write(u,A,p);else{var V,ee,K,he;for(V=0,ee=p;V>6|192,b[A++]=K&63|128):(K&64512)===55296&&((he=u.charCodeAt(V+1))&64512)===56320?(K=65536+((K&1023)<<10)+(he&1023),V++,b[A++]=K>>18|240,b[A++]=K>>12&63|128,b[A++]=K>>6&63|128,b[A++]=K&63|128):(b[A++]=K>>12|224,b[A++]=K>>6&63|128,b[A++]=K&63|128)}},typeof g.prototype.latin1Write=="function"?I.prototype.writeBinary=function(u,p){var b=this.pos;this.pos+=p,!(this.pos>this.buf.length)&&this.buf.latin1Write(u,b,p)}:typeof g.prototype.binaryWrite=="function"?I.prototype.writeBinary=function(u,p){var b=this.pos;this.pos+=p,!(this.pos>this.buf.length)&&this.buf.binaryWrite(u,b,p)}:I.prototype.writeBinary=function(u,p){var b=this.pos;this.pos+=p,!(this.pos>this.buf.length)&&this.buf.write(u,b,p,"binary")},I.prototype.matchBoolean=function(u){return this.buf[this.pos++]-u.buf[u.pos++]},I.prototype.matchInt=I.prototype.matchLong=function(u){var p=this.readLong(),b=u.readLong();return p===b?0:p>1;ee&128;)ee=V[this.pos++],p|=(ee&127)<=8&&(A-=8,u[b++]=p,p>>=8);return u[b]=p,K&&Z(u,8),u},I.prototype.packLongBytes=function(u){var p=(u[7]&128)>>7,b=this.buf,A=1,V=0,ee=3,K;p?(Z(u,8),K=1):K=0;for(var he=[u.readUIntLE(0,3),u.readUIntLE(3,3),u.readUIntLE(6,2)];ee&&!he[--ee];);for(;V7;)b[this.pos++]=K&127|128,K>>=7,A-=7;K|=he[ee]<>=7;while(K&&(b[this.pos++]|=128));this.pos++,p&&Z(u,8)};function Z(u,p){for(;p--;)u[p]=~u[p]}l.exports={abstractFunction:ne,addDeprecatedGetters:E,bufferFrom:C,capitalize:P,copyOwnProperties:te,getHash:m,compare:Q,getOption:re,impliedNamespace:X,isValidName:M,jsonEnd:q,newBuffer:R,objectValues:j,qualify:G,toMap:w,singleIndexOf:a,hasDuplicates:U,unqualify:D,BufferPool:S,Lcg:N,OrderedQueue:x,Tap:I}}}),nt=Ae({"node_modules/avsc/lib/types.js"(h,l){"use strict";var c=Ue(),d=qe,_=De,g=d.Buffer,O=d.SlowBuffer,T=c.Tap,v=_.debuglog("avsc:types"),R=_.format,C={array:Z,boolean:U,bytes:q,double:D,enum:N,error:u,fixed:x,float:G,int:te,long:M,map:I,null:j,record:u,string:X},P=new c.Lcg,Q=new T(new O(1024)),re=null,m=[];function a(t,i){var e;if(re?(e=re,m.push([re,this]),re=null):e=this,this._hash=new ee,this.name=void 0,this.aliases=void 0,this.doc=t&&t.doc?""+t.doc:void 0,t){var r=t.name,n=t.namespace===void 0?i&&i.namespace:t.namespace;if(r!==void 0){if(r=Se(r,n),fe(r))throw new Error(R("cannot rename primitive type: %j",r));var o=i&&i.registry;if(o){if(o[r]!==void 0)throw new Error(R("duplicate type name: %s",r));o[r]=e}}else if(i&&i.noAnonymousTypes)throw new Error(R("missing name property in schema: %j",t));this.name=r,this.aliases=t.aliases?t.aliases.map(function(s){return Se(s,n)}):[]}}a.forSchema=function(t,i){i=i||{},i.registry=i.registry||{};var e=function(k){switch(k===!0?k="always":k===!1?k="never":k===void 0?k="auto":typeof k=="string"&&(k=k.toLowerCase()),k){case"always":return S;case"never":return E;case"auto":return;default:throw new Error(R("invalid wrap unions option: %j",k))}}(i.wrapUnions);if(t===null)throw new Error('invalid type: null (did you mean "null"?)');if(a.isType(t))return t;var r;if(i.typeHook&&(r=i.typeHook(t,i))){if(!a.isType(r))throw new Error(R("invalid typehook return value: %j",r));return r}if(typeof t=="string"){if(t=Se(t,i.namespace),r=i.registry[t],r)return r;if(fe(t))return i.registry[t]=a.forSchema({type:t},i);throw new Error(R("undefined type name: %s",t))}if(t.logicalType&&i.logicalTypes&&!re){var n=i.logicalTypes[t.logicalType];if(n){var o=i.namespace,s={};Object.keys(i.registry).forEach(function(k){s[k]=i.registry[k]});try{return v("instantiating logical type for %s",t.logicalType),new n(t,i)}catch(k){if(v("failed to instantiate logical type for %s",t.logicalType),i.assertLogicalTypes)throw k;re=null,i.namespace=o,i.registry=s}}}if(Array.isArray(t)){var f=re;re=null;var y=t.map(function(k){return a.forSchema(k,i)});e||(e=Ee(y)?S:E),re=f,r=new e(y,i)}else r=function(k){var $=C[k];if($===void 0)throw new Error(R("unknown type: %j",k));return new $(t,i)}(t.type);return r},a.forValue=function(t,i){if(i=i||{},i.emptyArrayType=i.emptyArrayType||a.forSchema({type:"array",items:"null"}),i.valueHook){var e=i.valueHook(t,i);if(e!==void 0){if(!a.isType(e))throw new Error(R("invalid value hook return value: %j",e));return e}}switch(typeof t){case"string":return a.forSchema("string",i);case"boolean":return a.forSchema("boolean",i);case"number":return(t|0)===t?a.forSchema("int",i):Math.abs(t)<9007199254740991?a.forSchema("float",i):a.forSchema("double",i);case"object":if(t===null)return a.forSchema("null",i);if(Array.isArray(t))return t.length?a.forSchema({type:"array",items:a.forTypes(t.map(function(n){return a.forValue(n,i)}),i)},i):i.emptyArrayType;if(g.isBuffer(t))return a.forSchema("bytes",i);var r=Object.keys(t);return r.some(function(n){return!c.isValidName(n)})?a.forSchema({type:"map",values:a.forTypes(r.map(function(n){return a.forValue(t[n],i)}),i)},i):a.forSchema({type:"record",fields:r.map(function(n){return{name:n,type:a.forValue(t[n],i)}})},i);default:throw new Error(R("cannot infer type from: %j",t))}},a.forTypes=function(t,i){if(!t.length)throw new Error("no types to combine");if(t.length===1)return t[0];i=i||{};var e=[],r=0,n=!0;if(t.forEach(function(L){switch(L.typeName){case"union:unwrapped":n=!1,e=e.concat(L.types);break;case"union:wrapped":r++,e=e.concat(L.types);break;case"null":e.push(L);break;default:n=!1,e.push(L)}}),r){if(!n)throw new Error("cannot combine wrapped union");var o={};e.forEach(function(L){var F=L.branchName,J=o[F];if(!J)o[F]=L;else if(!L.equals(J))throw new Error("inconsistent branch type")});var s=i.wrapUnions,f;i.wrapUnions=!0;try{f=a.forSchema(Object.keys(o).map(function(L){return o[L]}),i)}catch(L){throw i.wrapUnions=s,L}return i.wrapUnions=s,f}var y={};e.forEach(function(L){var F=$e(L),J=y[F];J||(y[F]=J=[]),J.push(L)});var k=Object.keys(y),$=k.map(function(L){var F=y[L];if(F.length===1)return F[0];switch(L){case"null":case"boolean":return F[0];case"number":return Fe(F);case"string":return ze(F,i);case"buffer":return Ge(F,i);case"array":return F=F.filter(function(J){return J!==i.emptyArrayType}),F.length?a.forSchema({type:"array",items:a.forTypes(F.map(function(J){return J.itemsType}),i)},i):i.emptyArrayType;default:return Ke(F,i)}});return $.length===1?$[0]:a.forSchema($,i)},a.isType=function(){var t=arguments.length;if(!t)return!1;var i=arguments[0];if(!i||typeof i._update!="function"||typeof i.fingerprint!="function")return!1;if(t===1)return!0;var e=i.typeName,r;for(r=1;r",i);var e=this.schema({exportAttrs:!0,noDeref:!0});return typeof e=="object"&&!a.isType(this,"logical")&&(e.type=void 0),R("<%s %j>",i,e)},a.prototype.isValid=function(t,i){var e=(i&&i.noUndeclaredFields)|0,r=i&&i.errorHook,n,o;return r&&(o=[],n=function(s,f){r.call(this,o.slice(),s,f,t)}),this._check(t,e,n,o)},a.prototype.random=c.abstractFunction,a.prototype.schema=function(t){return this._attrs({exportAttrs:!!(t&&t.exportAttrs),noDeref:!!(t&&t.noDeref)})},a.prototype.toBuffer=function(t){Q.pos=0,this._write(Q,t);var i=c.newBuffer(Q.pos);return Q.isValid()?Q.buf.copy(i,0,0,Q.pos):this._write(new T(i),t),i},a.prototype.toJSON=function(){return this.schema({exportAttrs:!0})},a.prototype.toString=function(t){return JSON.stringify(t===void 0?this.schema({noDeref:!0}):this._copy(t,{coerce:3}))},a.prototype.wrap=function(t){var i=this._branchConstructor;return i===null?null:new i(t)},a.prototype._attrs=function(t){t.derefed=t.derefed||{};var i=this.name;if(i!==void 0){if(t.noDeref||t.derefed[i])return i;t.derefed[i]=!0}var e={};this.name!==void 0&&(e.name=i),e.type=this.typeName;var r=this._deref(e,t);return r!==void 0&&(e=r),t.exportAttrs&&(this.aliases&&this.aliases.length&&(e.aliases=this.aliases),this.doc!==void 0&&(e.doc=this.doc)),e},a.prototype._createBranchConstructor=function(){var t=this.branchName;if(t==="null")return null;var i=~t.indexOf(".")?"this['"+t+"']":"this."+t,e="return function Branch$(val) { "+i+" = val; };",r=new Function(e)();return r.type=this,r.prototype.unwrap=new Function("return "+i+";"),r.prototype.unwrapped=r.prototype.unwrap,r},a.prototype._peek=function(t){var i=t.pos,e=this._read(t);return t.pos=i,e},a.prototype._check=c.abstractFunction,a.prototype._copy=c.abstractFunction,a.prototype._deref=c.abstractFunction,a.prototype._match=c.abstractFunction,a.prototype._read=c.abstractFunction,a.prototype._skip=c.abstractFunction,a.prototype._update=c.abstractFunction,a.prototype._write=c.abstractFunction,a.prototype.getAliases=function(){return this.aliases},a.prototype.getFingerprint=a.prototype.fingerprint,a.prototype.getName=function(t){return this.name||!t?this.name:this.branchName},a.prototype.getSchema=a.prototype.schema,a.prototype.getTypeName=function(){return this.typeName};function w(t){a.call(this),this._branchConstructor=this._createBranchConstructor(),t||Object.freeze(this)}_.inherits(w,a),w.prototype._update=function(t,i){i.typeName===this.typeName&&(t._read=this._read)},w.prototype._copy=function(t){return this._check(t,void 0,ue),t},w.prototype._deref=function(){return this.typeName},w.prototype.compare=c.compare;function j(){w.call(this)}_.inherits(j,w),j.prototype._check=function(t,i,e){var r=t===null;return!r&&e&&e(t,this),r},j.prototype._read=function(){return null},j.prototype._skip=function(){},j.prototype._write=function(t,i){i!==null&&ue(i,this)},j.prototype._match=function(){return 0},j.prototype.compare=j.prototype._match,j.prototype.typeName="null",j.prototype.random=j.prototype._read;function U(){w.call(this)}_.inherits(U,w),U.prototype._check=function(t,i,e){var r=typeof t=="boolean";return!r&&e&&e(t,this),r},U.prototype._read=function(t){return t.readBoolean()},U.prototype._skip=function(t){t.skipBoolean()},U.prototype._write=function(t,i){typeof i!="boolean"&&ue(i,this),t.writeBoolean(i)},U.prototype._match=function(t,i){return t.matchBoolean(i)},U.prototype.typeName="boolean",U.prototype.random=function(){return P.nextBoolean()};function te(){w.call(this)}_.inherits(te,w),te.prototype._check=function(t,i,e){var r=t===(t|0);return!r&&e&&e(t,this),r},te.prototype._read=function(t){return t.readInt()},te.prototype._skip=function(t){t.skipInt()},te.prototype._write=function(t,i){i!==(i|0)&&ue(i,this),t.writeInt(i)},te.prototype._match=function(t,i){return t.matchInt(i)},te.prototype.typeName="int",te.prototype.random=function(){return P.nextInt(1e3)|0};function M(){w.call(this)}_.inherits(M,w),M.prototype._check=function(t,i,e){var r=typeof t=="number"&&t%1===0&&Ie(t);return!r&&e&&e(t,this),r},M.prototype._read=function(t){var i=t.readLong();if(!Ie(i))throw new Error("potential precision loss");return i},M.prototype._skip=function(t){t.skipLong()},M.prototype._write=function(t,i){(typeof i!="number"||i%1||!Ie(i))&&ue(i,this),t.writeLong(i)},M.prototype._match=function(t,i){return t.matchLong(i)},M.prototype._update=function(t,i){switch(i.typeName){case"int":t._read=i._read;break;case"abstract:long":case"long":t._read=this._read}},M.prototype.typeName="long",M.prototype.random=function(){return P.nextInt()},M.__with=function(t,i){t=t||{};var e={toBuffer:"_toBuffer",fromBuffer:"_fromBuffer",fromJSON:"_fromJSON",toJSON:"_toJSON",isValid:"_isValid",compare:"compare"},r=new b(i);return Object.keys(e).forEach(function(n){if(t[n]===void 0)throw new Error(R("missing method implementation: %s",n));r[e[n]]=t[n]}),Object.freeze(r)};function G(){w.call(this)}_.inherits(G,w),G.prototype._check=function(t,i,e){var r=typeof t=="number";return!r&&e&&e(t,this),r},G.prototype._read=function(t){return t.readFloat()},G.prototype._skip=function(t){t.skipFloat()},G.prototype._write=function(t,i){typeof i!="number"&&ue(i,this),t.writeFloat(i)},G.prototype._match=function(t,i){return t.matchFloat(i)},G.prototype._update=function(t,i){switch(i.typeName){case"float":case"int":t._read=i._read;break;case"abstract:long":case"long":t._read=function(e){return e.readLong()}}},G.prototype.typeName="float",G.prototype.random=function(){return P.nextFloat(1e3)};function D(){w.call(this)}_.inherits(D,w),D.prototype._check=function(t,i,e){var r=typeof t=="number";return!r&&e&&e(t,this),r},D.prototype._read=function(t){return t.readDouble()},D.prototype._skip=function(t){t.skipDouble()},D.prototype._write=function(t,i){typeof i!="number"&&ue(i,this),t.writeDouble(i)},D.prototype._match=function(t,i){return t.matchDouble(i)},D.prototype._update=function(t,i){switch(i.typeName){case"double":case"float":case"int":t._read=i._read;break;case"abstract:long":case"long":t._read=function(e){return e.readLong()}}},D.prototype.typeName="double",D.prototype.random=function(){return P.nextFloat()};function X(){w.call(this)}_.inherits(X,w),X.prototype._check=function(t,i,e){var r=typeof t=="string";return!r&&e&&e(t,this),r},X.prototype._read=function(t){return t.readString()},X.prototype._skip=function(t){t.skipString()},X.prototype._write=function(t,i){typeof i!="string"&&ue(i,this),t.writeString(i)},X.prototype._match=function(t,i){return t.matchString(i)},X.prototype._update=function(t,i){switch(i.typeName){case"bytes":case"string":t._read=this._read}},X.prototype.typeName="string",X.prototype.random=function(){return P.nextString(P.nextInt(32))};function q(){w.call(this)}_.inherits(q,w),q.prototype._check=function(t,i,e){var r=g.isBuffer(t);return!r&&e&&e(t,this),r},q.prototype._read=function(t){return t.readBytes()},q.prototype._skip=function(t){t.skipBytes()},q.prototype._write=function(t,i){g.isBuffer(i)||ue(i,this),t.writeBytes(i)},q.prototype._match=function(t,i){return t.matchBytes(i)},q.prototype._update=X.prototype._update,q.prototype._copy=function(t,i){var e;switch((i&&i.coerce)|0){case 3:return this._check(t,void 0,ue),t.toString("binary");case 2:if(typeof t!="string")throw new Error(R("cannot coerce to buffer: %j",t));return e=c.bufferFrom(t,"binary"),this._check(e,void 0,ue),e;case 1:if(!je(t))throw new Error(R("cannot coerce to buffer: %j",t));return e=c.bufferFrom(t.data),this._check(e,void 0,ue),e;default:return this._check(t,void 0,ue),c.bufferFrom(t)}},q.prototype.compare=g.compare,q.prototype.typeName="bytes",q.prototype.random=function(){return P.nextBuffer(P.nextInt(32))};function ne(t,i){if(a.call(this),!Array.isArray(t))throw new Error(R("non-array union schema: %j",t));if(!t.length)throw new Error("empty union");this.types=Object.freeze(t.map(function(e){return a.forSchema(e,i)})),this._branchIndices={},this.types.forEach(function(e,r){if(a.isType(e,"union"))throw new Error("unions cannot be directly nested");var n=e.branchName;if(this._branchIndices[n]!==void 0)throw new Error(R("duplicate union branch name: %j",n));this._branchIndices[n]=r},this)}_.inherits(ne,a),ne.prototype._branchConstructor=function(){throw new Error("unions cannot be directly wrapped")},ne.prototype._skip=function(t){this.types[t.readLong()]._skip(t)},ne.prototype._match=function(t,i){var e=t.readLong(),r=i.readLong();return e===r?this.types[e]._match(t,i):e1)throw new Error(l("ambiguous aliasing for %s.%s (%s)",t.name,U.name,P));if(P.length)q=P[0],j={resolver:U.type.createResolver(h[q].type,r),name:"_"+U.name},E[q]?E[q].push(j):E[q]=[j],y.push(j.name);else{if(U.defaultValue()===void 0)throw new Error(l("no matching field for default-less %s.%s",t.name,U.name));y.push("undefined")}}var D=-1;for(N=c.length;N&&E[c[--N].name]===void 0;)D=N;var le=this._getConstructorName(),ue=[le],ce=[this.recordConstructor],J=" return function read"+le+`(t, b) { -`,fe;for(this._sizeProp&&(J+=` var c = 0; - var p; -`),N=0;N=D?" ":" ",U=t.fields[N],q=U.name,E[q]===void 0)ue.push("r"+N),ce.push(U.type),J+=fe+"r"+N+`._skip(t); -`;else{for(A=E[q].length,this._sizeProp&&(J+=fe+`p = t.pos; -`);A--;)ue.push("r"+N+"f"+A),j=E[q][A],ce.push(j.resolver),J+=fe+"var "+j.name+" = ",J+="r"+N+"f"+A+"._"+(A?"peek":"read")+`(t); -`;this._sizeProp&&(J+=fe+`c += t.pos-p; -`)}~D&&(J+=` } -`),J+=" var v = new "+le+"("+y.join()+`); -`,this._sizeProp&&(J+=` Object.defineProperty(v, s, {value: c, writable: true}); -`,ce.push(this._sizeProp),ue.push("s")),J+=` return v; -};`,e._read=new Function(ue.join(),J).apply(void 0,ce)},W.prototype._match=function(e,t){var r=this.fields,i,c,h,y,E;for(i=0,c=r.length;i=-9007199254740990&&e<=9007199254740990}function Te(e){return F.test(e)}function X(e,t){throw new Error(l("invalid %j: %j",t.schema(),e))}function Ue(e,t){var r=o.unqualifyName(e);return me(r)?r:We(e,t)}function $e(e){var t=e.typeName;switch(t){case"double":case"float":case"int":case"long":return"number";case"bytes":case"fixed":return"buffer";case"enum":return"string";case"map":case"error":case"record":return"object";default:return t}}function Xe(e){if(e===null)return"null";var t=typeof e;if(t==="object"){if(Array.isArray(e))return"array";if(Buffer.isBuffer(e))return"buffer"}return t}function wt(e){var t={},r,i,c,h;for(r=0,i=e.length;rr&&(r=E,i=y);return i}function Et(e,t,r){var i={},c,h,y,E;for(c=0,h=e.length;c0){var Rt=pe[0];pe[0]=pe[H],pe[H]=Rt,_e=s.forSchema(pe,t,fe)}}return{name:J,type:_e,default:h[J]}})}:ce={type:"map",values:s.forTypes(i,t,r.child("*"))},s.forSchema(ce,t,r)}u.exports={constructors:function(){var e={Type:s,LogicalType:re,UnwrappedUnionType:M,WrappedUnionType:Q},t=Object.keys(T),r,i,c;for(r=0,i=t.length;r"u"&&typeof dt>"u"&&console.error("ultralight-S3 Module: Crypto functions are not available, please report the issue with necessary description: https://github.com/sentienhq/ultralight-s3/issues");var Gt={contents:!0},Kt=n=>`%${n.charCodeAt(0).toString(16).toUpperCase()}`,He=n=>encodeURIComponent(n).replace(/[!'()*]/g,Kt),ae=n=>He(n).replace(/%2F/g,"/"),Jt=class{constructor({accessKeyId:n,secretAccessKey:u,endpoint:o,bucketName:p,region:d="auto",maxRequestSizeInBytes:g=5242880,requestAbortTimeout:b=void 0,logger:O=void 0}){this.getBucketName=()=>this.bucketName,this.setBucketName=l=>{this.bucketName=l},this.getRegion=()=>this.region,this.setRegion=l=>{this.region=l},this.getEndpoint=()=>this.endpoint,this.setEndpoint=l=>{this.endpoint=l},this.getMaxRequestSizeInBytes=()=>this.maxRequestSizeInBytes,this.setMaxRequestSizeInBytes=l=>{this.maxRequestSizeInBytes=l},this.sanitizeETag=l=>Se(l),this.getProps=()=>({accessKeyId:this.accessKeyId,secretAccessKey:this.secretAccessKey,region:this.region,bucket:this.bucketName,endpoint:this.endpoint,maxRequestSizeInBytes:this.maxRequestSizeInBytes,requestAbortTimeout:this.requestAbortTimeout,logger:this.logger}),this.setProps=l=>{this._validateConstructorParams(l.accessKeyId,l.secretAccessKey,l.bucketName,l.endpoint),this.accessKeyId=l.accessKeyId,this.secretAccessKey=l.secretAccessKey,this.region=l.region||"auto",this.bucketName=l.bucketName,this.endpoint=l.endpoint,this.maxRequestSizeInBytes=l.maxRequestSizeInBytes||5242880,this.requestAbortTimeout=l.requestAbortTimeout,this.logger=l.logger},this._validateConstructorParams(n,u,o,p),this.accessKeyId=n,this.secretAccessKey=u,this.endpoint=o,this.bucketName=p,this.region=d,this.maxRequestSizeInBytes=g,this.requestAbortTimeout=b,this.logger=O}_validateConstructorParams(n,u,o,p){if(typeof n!="string"||n.trim().length===0)throw new TypeError(Mt);if(typeof u!="string"||u.trim().length===0)throw new TypeError(zt);if(typeof o!="string"||o.trim().length===0)throw new TypeError(qt);if(typeof p!="string"||p.trim().length===0)throw new TypeError(Ht)}_checkMethodHeadnGet(n){if(n!=="GET"&&n!=="HEAD")throw this._log("error",`${L}method must be either GET or HEAD`),new Error("method must be either GET or HEAD")}_checkKey(n){if(typeof n!="string"||n.trim().length===0)throw this._log("error",rt),new TypeError(rt)}_checkDelimiter(n){if(typeof n!="string"||n.trim().length===0)throw this._log("error",at),new TypeError(at)}_checkPrefix(n){if(typeof n!="string")throw this._log("error",ot),new TypeError(ot)}_checkMaxKeys(n){if(typeof n!="number"||n<=0)throw this._log("error",st),new TypeError(st)}_checkOpts(n){if(typeof n!="object")throw this._log("error",`${L}opts must be an object`),new TypeError(`${L}opts must be an object`)}_log(n,u,o={}){if(this.logger&&typeof this.logger[n]=="function"){let p=b=>typeof b!="object"||b===null?b:Object.keys(b).reduce((O,l)=>(Pt.includes(l.toLowerCase())?O[l]="[REDACTED]":typeof b[l]=="object"&&b[l]!==null?O[l]=p(b[l]):O[l]=b[l],O),Array.isArray(b)?[]:{}),d=p(o),g={timestamp:new Date().toISOString(),level:n,message:u,...d,context:p({bucketName:this.bucketName,region:this.region,endpoint:this.endpoint,accessKeyId:this.accessKeyId?`${this.accessKeyId.substring(0,4)}...`:void 0})};this.logger[n](g)}}async getContentLength(n){this._checkKey(n);let u={[oe]:ne},o=ae(n),{url:p,headers:d}=await this._sign("HEAD",o,{},u,""),g=(await this._sendRequest(p,"HEAD",d)).headers.get(we);return g?parseInt(g,10):0}async bucketExists(){let n={[oe]:ne},{url:u,headers:o}=await this._sign("HEAD","",{},n,""),p=await this._sendRequest(u,"HEAD",o);return!!(p.ok&&p.status===200)}async fileExists(n,u={}){this._checkKey(n);let{filteredOpts:o,conditionalHeaders:p}=this._filterIfHeaders(u),d={[oe]:ne,...p},g=ae(n),{url:b,headers:O}=await this._sign("HEAD",g,o,d,"");try{let l=await this._sendRequest(b,"HEAD",O,"",[200,404,412,304]);return l.status===404?!1:l.status===412||l.status===304?null:l.ok&&l.status===200?!0:(this._handleErrorResponse(l),!1)}catch(l){let T=l instanceof Error?l.message:String(l);throw this._log("error",`${L}Failed to check if file exists: ${T}`),new Error(`${L}Failed to check if file exists: ${T}`)}}async _sign(n,u,o,p,d){let g=new Date().toISOString().replace(/[:-]|\.\d{3}/g,""),b=typeof u=="string"&&u.length>0?new URL(u,this.endpoint):new URL(this.endpoint);b.pathname=`/${encodeURI(this.bucketName)}${b.pathname}`,p[oe]=d?await Le(d):ne,p[Bt]=g,p[Ut]=b.host;let O=this._buildCanonicalHeaders(p),l=Object.keys(p).map(v=>v.toLowerCase()).sort().join(";"),T=await this._buildCanonicalRequest(n,b,o,O,l,d),F=await this._buildStringToSign(g,T),x=await this._calculateSignature(g,F),V=this._buildAuthorizationHeader(g,l,x);return p[Vt]=V,{url:b.toString(),headers:p}}_buildCanonicalHeaders(n){return Object.entries(n).map(([u,o])=>`${u.toLowerCase()}:${String(o).trim()}`).sort().join(` -`)}async _buildCanonicalRequest(n,u,o,p,d,g){return[n,u.pathname,this._buildCanonicalQueryString(o),`${p} -`,d,g?await Le(g):ne].join(` -`)}async _buildStringToSign(n,u){let o=[n.slice(0,8),this.region,Me,Ve].join("/");return[Ye,n,o,await Le(u)].join(` -`)}async _calculateSignature(n,u){let o=await this._getSignatureKey(n.slice(0,8));return Re(o,u,"hex")}_buildAuthorizationHeader(n,u,o){let p=[n.slice(0,8),this.region,Me,Ve].join("/");return[`${Ye} Credential=${this.accessKeyId}/${p}`,`SignedHeaders=${u}`,`Signature=${o}`].join(", ")}_filterIfHeaders(n){let u={},o={},p=["if-match","if-none-match","if-modified-since","if-unmodified-since"];for(let[d,g]of Object.entries(n))p.includes(d)?o[d]=g:u[d]=g;return{filteredOpts:u,conditionalHeaders:o}}async list(n="/",u="",o=1e3,p="GET",d={}){this._checkDelimiter(n),this._checkPrefix(u),this._checkMaxKeys(o),this._checkMethodHeadnGet(p),this._checkOpts(d),this._log("info",`Listing objects in ${u}`);let g={"list-type":Dt,"max-keys":String(o),...d};u.length>0&&(g.prefix=u);let b={[he]:ge,[oe]:ne},O=n==="/"?n:He(n),{url:l,headers:T}=await this._sign("GET",O,g,b,""),F=`${l}?${new URLSearchParams(g)}`,x=await this._sendRequest(F,"GET",T),V=await x.text();if(p==="HEAD"){let w=x.headers.get(we),a=x.headers.get(tt),f=x.headers.get(et);return{size:w?+w:void 0,mtime:a?new Date(a):void 0,ETag:f||void 0}}let v=Ee(V),s=v.listBucketResult||v.error||v;return s.contents||s}async listMultiPartUploads(n="/",u="",o="GET",p={}){var d,g,b;this._checkDelimiter(n),this._checkPrefix(u),this._checkMethodHeadnGet(o),this._checkOpts(p),this._log("info",`Listing multipart uploads in ${u}`);let O={uploads:"",...p},l={[he]:ge,[oe]:ne},T=n==="/"?n:He(n),{url:F,headers:x}=await this._sign("GET",T,O,l,""),V=`${F}?${new URLSearchParams(O)}`,v=await this._sendRequest(V,"GET",x),s=await v.text();if(o==="HEAD")return{size:+((d=v.headers.get(we))!==null&&d!==void 0?d:"0"),mtime:new Date((g=v.headers.get(tt))!==null&&g!==void 0?g:""),ETag:(b=v.headers.get(et))!==null&&b!==void 0?b:""};let w=Ee(s),a=w.listMultipartUploadsResult||w.error||w;return a.uploads||a}async get(n,u={}){this._checkKey(n),this._log("info",`Getting object ${n}`);let{filteredOpts:o,conditionalHeaders:p}=this._filterIfHeaders(u),d={[he]:ge,[oe]:ne,...p},g=ae(n),{url:b,headers:O}=await this._sign("GET",g,o,d,""),l=await this._sendRequest(b,"GET",O,"",[200,404,412,304]);if(l.status===404||l.status===412||l.status===304)return this._log("error",`Failed to get object. Status: ${l.status}`),null;if(!l.ok)throw this._log("error",`Failed to get object. Status: ${l.status}`),new Error(`Failed to get object. Status: ${l.status}`);return l.text()}async getObjectWithETag(n,u={}){this._checkKey(n),this._log("info",`Getting object ${n}`);let{filteredOpts:o,conditionalHeaders:p}=this._filterIfHeaders(u),d={[he]:ge,[oe]:ne,...p},g=ae(n),{url:b,headers:O}=await this._sign("GET",g,o,d,"");try{let l=await this._sendRequest(b,"GET",O,"",[200,404,412,304]);if(l.status===404||l.status===412||l.status===304)return this._log("error",`Failed to get object. Status: ${l.status}`),{etag:null,data:null};if(!l.ok)throw this._log("error",`Failed to get object. Status: ${l.status}`),new Error(`Failed to get object. Status: ${l.status}`);let T=l.headers.get("etag");if(!T)throw new Error("ETag not found in response headers");let F=await l.text();return{etag:Se(T),data:F}}catch(l){throw this._log("error",`Error getting object ${n} with ETag: ${l}`),l}}async getEtag(n,u={}){this._checkKey(n),this._log("info",`Getting etag object ${n}`);let{filteredOpts:o,conditionalHeaders:p}=this._filterIfHeaders(u),d={[he]:ge,[oe]:ne,...p},g=ae(n),{url:b,headers:O}=await this._sign("HEAD",g,o,d,""),l=await this._sendRequest(b,"HEAD",O,"",[200,412,304]);if(this._log("info",`Response status: ${l.status,l.statusText}`),l.status===412||l.status===304)return null;let T=l.headers.get("etag");if(!T)throw this._log("error","ETag not found in response headers"),new Error("ETag not found in response headers");return Se(T)}async getResponse(n,u=!0,o=0,p=this.maxRequestSizeInBytes,d={}){this._checkKey(n);let{filteredOpts:g,conditionalHeaders:b}=this._filterIfHeaders({...d}),O={[he]:ge,[oe]:ne,...u?{}:{range:`bytes=${o}-${p-1}`},...b},l=ae(n),{url:T,headers:F}=await this._sign("GET",l,g,O,""),x=`${T}?${new URLSearchParams(g)}`;return this._sendRequest(x,"GET",F)}async put(n,u){if(this._checkKey(n),!(u instanceof Buffer||typeof u=="string"))throw this._log("error",je),new TypeError(je);this._log("info",`Uploading object ${n}`);let o=typeof u=="string"?Buffer.byteLength(u):u.length,p={[we]:o},d=ae(n),{url:g,headers:b}=await this._sign("PUT",d,{},p,u);return await this._sendRequest(g,"PUT",b,u)}async getMultipartUploadId(n,u=Ft){if(this._checkKey(n),typeof u!="string")throw this._log("error",`${L}fileType must be a string`),new TypeError(`${L}fileType must be a string`);this._log("info",`Initiating multipart upload for object ${n}`);let o={uploads:""},p={[he]:u,[oe]:ne},d=ae(n),{url:g,headers:b}=await this._sign("POST",d,o,p,""),O=`${g}?${new URLSearchParams(o)}`,l=await(await this._sendRequest(O,"POST",b)).text(),T=Ee(l);if(typeof T=="object"&&T!==null&&"error"in T&&typeof T.error=="object"&&T.error!==null&&"message"in T.error){let F=String(T.error.message);throw this._log("error",`${L}Failed to abort multipart upload: ${F}`),new Error(`${L}Failed to abort multipart upload: ${F}`)}if(typeof T=="object"&&T!==null){if(!T.initiateMultipartUploadResult||!T.initiateMultipartUploadResult.uploadId)throw this._log("error",`${L}Failed to create multipart upload: no uploadId in response`),new Error(`${L}Failed to create multipart upload: Missing upload ID in response`);return T.initiateMultipartUploadResult.uploadId}else throw this._log("error",`${L}Failed to create multipart upload: unexpected response format`),new Error(`${L}Failed to create multipart upload: Unexpected response format`)}async uploadPart(n,u,o,p,d={}){this._validateUploadPartParams(n,u,o,p,d);let g={uploadId:o,partNumber:p,...d},b={[we]:u.length},O=ae(n),{url:l,headers:T}=await this._sign("PUT",O,g,b,u),F=`${l}?${new URLSearchParams(g)}`,x=await this._sendRequest(F,"PUT",T,u),V=Se(x.headers.get("etag")||"");return{partNumber:p,ETag:V}}_validateUploadPartParams(n,u,o,p,d){if(this._checkKey(n),!(u instanceof Buffer||typeof u=="string"))throw this._log("error",je),new TypeError(je);if(typeof o!="string"||o.trim().length===0)throw this._log("error",be),new TypeError(be);if(!Number.isInteger(p)||p<=0)throw this._log("error",`${L}partNumber must be a positive integer`),new TypeError(`${L}partNumber must be a positive integer`);this._checkOpts(d)}async completeMultipartUpload(n,u,o){if(this._checkKey(n),typeof u!="string"||u.trim().length===0)throw this._log("error",be),new TypeError(be);if(!Array.isArray(o)||o.length===0)throw this._log("error",it),new TypeError(it);if(!o.every(V=>typeof V.partNumber=="number"&&typeof V.ETag=="string"))throw this._log("error",nt),new TypeError(nt);this._log("info",`Complete multipart upload ${u} for object ${n}`);let p={uploadId:u},d=this._buildCompleteMultipartUploadXml(o),g={[he]:Ze,[we]:Buffer.byteLength(d).toString(),[oe]:await Le(d)},b=ae(n),{url:O,headers:l}=await this._sign("POST",b,p,g,d),T=`${O}?${new URLSearchParams(p)}`,F=await(await this._sendRequest(T,"POST",l,d)).text(),x=Ee(F);if(typeof x=="object"&&x!==null&&"error"in x&&typeof x.error=="object"&&x.error!==null&&"message"in x.error){let V=String(x.error.message);throw this._log("error",`${L}Failed to abort multipart upload: ${V}`),new Error(`${L}Failed to abort multipart upload: ${V}`)}return x.completeMultipartUploadResult}async abortMultipartUpload(n,u){if(this._checkKey(n),typeof u!="string"||u.trim().length===0)throw this._log("error",be),new TypeError(be);this._log("info",`Aborting multipart upload ${u} for object ${n}`);let o={uploadId:u},p={[he]:Ze,[oe]:ne};try{let d=ae(n),{url:g,headers:b}=await this._sign("DELETE",d,o,p,""),O=`${g}?${new URLSearchParams(o)}`,l=await this._sendRequest(O,"DELETE",b);if(l.ok){let T=await l.text(),F=Ee(T);if(typeof F=="object"&&F!==null&&"error"in F&&typeof F.error=="object"&&F.error!==null&&"message"in F.error){let x=String(F.error.message);throw this._log("error",`${L}Failed to abort multipart upload: ${x}`),new Error(`${L}Failed to abort multipart upload: ${x}`)}return{status:"Aborted",key:n,uploadId:u,response:F}}else throw this._log("error",`${L}Abort request failed with status ${l.status}`),new Error(`${L}Abort request failed with status ${l.status}`)}catch(d){let g=d instanceof Error?d.message:String(d);throw this._log("error",`${L}Failed to abort multipart upload for key ${n}: ${g}`),new Error(`${L}Failed to abort multipart upload for key ${n}: ${g}`)}}_buildCompleteMultipartUploadXml(n){return` +`);return e+="}",new Function(t.join(),e).apply(void 0,r)},u.prototype._update=function(t,i,e){if(!pe(this,i,!e.ignoreNamespaces))throw new Error(R("no alias found for %s",i.name));var r=this.fields,n=i.fields,o=c.toMap(n,function(we){return we.name}),s=[],f={},y,k,$,L,F,J,B;for(y=0;y1)throw new Error(R("ambiguous aliasing for %s.%s (%s)",i.name,$.name,J));if(J.length)L=J[0],B={resolver:$.type.createResolver(o[L].type,e),name:"_"+$.name},f[L]?f[L].push(B):f[L]=[B],s.push(B.name);else{if($.defaultValue()===void 0)throw new Error(R("no matching field for default-less %s.%s",i.name,$.name));s.push("undefined")}}var H=-1;for(y=n.length;y&&f[n[--y].name]===void 0;)H=y;var W=this._getConstructorName(),ie=[W],ae=[this.recordConstructor],ce=" return function read"+W+`(t, b) { +`;for(y=0;y=H?" ":" ",ie.push("r"+y),ae.push($.type),ce+="r"+y+`._skip(t); +`;else for(k=f[L].length;k--;)ce+=~H&&y>=H?" ":" ",ie.push("r"+y+"f"+k),B=f[L][k],ae.push(B.resolver),ce+="var "+B.name+" = ",ce+="r"+y+"f"+k+"._"+(k?"peek":"read")+`(t); +`;~H&&(ce+=` } +`),ce+=" return new "+W+"("+s.join()+`); +};`,t._read=new Function(ie.join(),ce).apply(void 0,ae)},u.prototype._match=function(t,i){var e=this.fields,r,n,o,s,f;for(r=0,n=e.length;r"};function ee(){this.str=void 0}function K(t,i,e,r){if(e){if(e._readerType!==t)throw new Error("invalid resolver");return e._read(i,r)}else return t._read(i)}function he(t){var i={};t.name&&(i[t.name]=!0);var e=t.aliases,r,n;for(r=0,n=e.length;r=-9007199254740990&&t<=9007199254740990}function je(t){return t&&t.type==="Buffer"&&Array.isArray(t.data)}function ue(t,i){throw new Error(R("invalid %j: %j",i.schema(),t))}function Se(t,i){var e=c.unqualify(t);return fe(e)?e:c.qualify(t,i)}function $e(t){var i=t.typeName;switch(i){case"double":case"float":case"int":case"long":return"number";case"bytes":case"fixed":return"buffer";case"enum":return"string";case"map":case"error":case"record":return"object";default:return i}}function ke(t){if(t===null)return"null";var i=typeof t;if(i==="object"){if(Array.isArray(t))return"array";if(g.isBuffer(t))return"buffer"}return i}function Ee(t){var i={},e,r,n,o;for(e=0,r=t.length;ee&&(e=f,r=s);return r}function ze(t,i){var e={},r,n,o,s;for(r=0,n=t.length;r0){var kt=de[0];de[0]=de[be],de[be]=kt,ce=a.forSchema(de,i)}}return{name:ae,type:ce,default:n[ae]}})}:ie={type:"map",values:a.forTypes(e,i)},a.forSchema(ie,i)}l.exports={Type:a,getTypeBucket:$e,getValueBucket:ke,isPrimitive:fe,builtins:function(){var t={LogicalType:p,UnwrappedUnionType:E,WrappedUnionType:S},i=Object.keys(C),e,r,n;for(e=0,r=i.length;eI.length&&(x.buf=d.newBuffer(2*u)),x.pos=0,this._writeValue(x,E)}N()},te.prototype._flush=function(E){var S=this._tap,N=S.pos;N&&this.push(S.buf.slice(0,N)),E()};function M(E,S){S=S||{},g.Duplex.call(this,{allowHalfOpen:!0,writableObjectMode:!0});var N;if(c.Type.isType(E)?(N=E,E=void 0):N=c.Type.forSchema(E),this._schema=E,this._type=N,this._writeValue=function(I,Z){try{this._type._write(I,Z)}catch(u){return this.emit("typeError",u,Z,this._type),!1}return!0},this._blockSize=S.blockSize||65536,this._tap=new w(d.newBuffer(this._blockSize)),this._codecs=S.codecs,this._codec=S.codec||"null",this._blockCount=0,this._syncMarker=S.syncMarker||new d.Lcg().nextBuffer(16),this._queue=new d.OrderedQueue,this._pending=0,this._finished=!1,this._needHeader=!1,this._needPush=!1,this._metadata=S.metadata||{},!P.isValid(this._metadata))throw new Error("invalid metadata");var x=this._codec;if(this._compress=(this._codecs||M.getDefaultCodecs())[x],!this._compress)throw new Error(a("unsupported codec: %s",x));switch(S.omitHeader!==void 0&&(S.writeHeader=S.omitHeader?"never":"auto"),S.writeHeader){case!1:case"never":break;case void 0:case"auto":this._needHeader=!0;break;default:this._writeHeader()}this.on("finish",function(){this._finished=!0,this._blockCount?this._flushChunk():this._finished&&this._needPush&&this.push(null)}),this.on("typeError",function(I){this.emit("error",I)})}O.inherits(M,g.Duplex),M.defaultCodecs=function(){return{null:function(E,S){S(null,E)},deflate:T.deflateRaw}},M.getDefaultCodecs=M.defaultCodecs,M.prototype._writeHeader=function(){var E=JSON.stringify(this._schema?this._schema:this._type.getSchema({exportAttrs:!0})),S=d.copyOwnProperties(this._metadata,{"avro.schema":d.bufferFrom(E),"avro.codec":d.bufferFrom(this._codec)},!0),N=Q.getRecordConstructor(),x=new N(m,S,this._syncMarker);this.push(x.toBuffer())},M.prototype._write=function(E,S,N){this._needHeader&&(this._writeHeader(),this._needHeader=!1);var x=this._tap,I=x.pos,Z=!1;if(this._writeValue(x,E)){if(!x.isValid()){I&&(this._flushChunk(I,N),Z=!0);var u=x.pos-I;u>this._blockSize&&(this._blockSize=u*2),x.buf=d.newBuffer(this._blockSize),x.pos=0,this._writeValue(x,E)}this._blockCount++}else x.pos=I;Z||N()},M.prototype._flushChunk=function(E,S){var N=this._tap;E=E||N.pos,this._compress(N.buf.slice(0,E),this._createBlockCallback(E,S)),this._blockCount=0},M.prototype._read=function(){var E=this,S=this._queue.pop();if(!S){this._finished&&!this._pending?process.nextTick(function(){E.push(null)}):this._needPush=!0;return}this.push(C.toBuffer(S.count,!0)),this.push(C.toBuffer(S.buf.length,!0)),this.push(S.buf),this.push(this._syncMarker),this._finished||S.cb()},M.prototype._createBlockCallback=function(E,S){var N=this,x=this._index++,I=this._blockCount;return this._pending++,function(Z,u){if(Z){var p=new Error(a("%s codec compression error",N._codec));p.cause=Z,N.emit("error",p);return}N._pending--,N.emit("block",new G(I,E,u.length)),N._queue.push(new D(x,u,S,I)),N._needPush&&(N._needPush=!1,N._read())}};function G(E,S,N){this.valueCount=E,this.rawDataLength=S,this.compressedDataLength=N}function D(E,S,N,x){this.index=E,this.buf=S,this.cb=N,this.count=x|0}function X(E){var S=E.pos,N=re._read(E);return E.isValid()?N:(E.pos=S,null)}function q(E,S,N){if(E)return function(I){return function(Z){var u=Z.pos;return I(Z),Z.buf.slice(u,Z.pos)}}(S._skip);if(N){var x=N.createResolver(S);return function(I){return x._read(I)}}else return function(I){return S._read(I)}}function ne(E,S,N){var x=d.newBuffer(N);return E.copy(x,0,S,S+N),x}l.exports={BLOCK_TYPE:re,HEADER_TYPE:Q,MAGIC_BYTES:m,streams:{BlockDecoder:U,BlockEncoder:M,RawDecoder:j,RawEncoder:te}}}}),jt=Ae({"node_modules/avsc/lib/services.js"(h,l){"use strict";var c=nt(),d=Ue(),_=qe,g=At,O=vt,T=De,v=_.Buffer,R=d.Tap,C=c.Type,P=T.debuglog("avsc:services"),Q=T.format,re={namespace:"org.apache.avro.ipc"},m=C.forSchema("boolean",re),a=C.forSchema({type:"map",values:"bytes"},re),w=C.forSchema("string",re),j=C.forSchema({name:"HandshakeRequest",type:"record",fields:[{name:"clientHash",type:{name:"MD5",type:"fixed",size:16}},{name:"clientProtocol",type:["null","string"],default:null},{name:"serverHash",type:"MD5"},{name:"meta",type:["null",a],default:null}]},re),U=C.forSchema({name:"HandshakeResponse",type:"record",fields:[{name:"match",type:{name:"HandshakeMatch",type:"enum",symbols:["BOTH","CLIENT","NONE"]}},{name:"serverProtocol",type:["null","string"],default:null},{name:"serverHash",type:["null","MD5"],default:null},{name:"meta",type:["null",a],default:null}]},re),te=16,M=new G("",C.forSchema({name:"PingRequest",type:"record",fields:[]},re),C.forSchema(["string"],re),C.forSchema("null",re));function G(e,r,n,o,s,f){if(this.name=e,!C.isType(r,"record"))throw new Error("invalid request type");if(this.requestType=r,!C.isType(n,"union")||!C.isType(n.getTypes()[0],"string"))throw new Error("invalid error type");if(this.errorType=n,s&&(!C.isType(o,"null")||n.getTypes().length>1))throw new Error("inapplicable one-way parameter");this.responseType=o,this.oneWay=!!s,this.doc=f!==void 0?""+f:void 0,Object.freeze(this)}G.forSchema=function(e,r,n){if(n=n||{},!d.isValidName(e))throw new Error(Q("invalid message name: %s",e));if(!Array.isArray(r.request))throw new Error(Q("invalid message request: %s",e));var o=Q("%s.%sRequest",re.namespace,d.capitalize(e)),s=C.forSchema({name:o,type:"record",namespace:n.namespace||"",fields:r.request},n);if(delete n.registry[o],!r.response)throw new Error(Q("invalid message response: %s",e));var f=C.forSchema(r.response,n);if(r.errors!==void 0&&!Array.isArray(r.errors))throw new Error(Q("invalid message errors: %s",e));var y=C.forSchema(["string"].concat(r.errors||[]),n),k=!!r["one-way"];return new G(e,s,y,f,k,r.doc)},G.prototype.schema=C.prototype.getSchema,G.prototype._attrs=function(e){var r=this.requestType._attrs(e),n={request:r.fields,response:this.responseType._attrs(e)},o=this.doc;o!==void 0&&(n.doc=o);var s=this.errorType._attrs(e);return s.length>1&&(n.errors=s.slice(1)),this.oneWay&&(n["one-way"]=!0),n},d.addDeprecatedGetters(G,["name","errorType","requestType","responseType"]),G.prototype.isOneWay=T.deprecate(function(){return this.oneWay},"use `.oneWay` directly instead of `.isOneWay()`");function D(e,r,n,o,s){if(typeof e!="string")return D.forProtocol(e,r);this.name=e,this._messagesByName=r||{},this.messages=Object.freeze(d.objectValues(this._messagesByName)),this._typesByName=n||{},this.types=Object.freeze(d.objectValues(this._typesByName)),this.protocol=o,this._hashStr=d.getHash(JSON.stringify(o)).toString("binary"),this.doc=o.doc?""+o.doc:void 0,this._server=s||this.createServer({silent:!0}),Object.freeze(this)}D.Client=q,D.Server=ne,D.compatible=function(e,r){try{Ie(e,r)}catch{return!1}return!0},D.forProtocol=function(e,r){r=r||{};var n=e.protocol;if(!n)throw new Error("missing protocol name");if(e.namespace!==void 0)r.namespace=e.namespace;else{var o=/^(.*)\.[^.]+$/.exec(n);o&&(r.namespace=o[1])}n=d.qualify(n,r.namespace),e.types&&e.types.forEach(function(f){C.forSchema(f,r)});var s;return e.messages&&(s={},Object.keys(e.messages).forEach(function(f){s[f]=G.forSchema(f,e.messages[f],r)})),new D(n,s,r.registry,e)},D.isService=function(e){return!!e&&e.hasOwnProperty("_hashStr")},D.prototype.createClient=function(e){var r=new q(this,e);return process.nextTick(function(){if(e&&e.server){var n={objectMode:!0},o=[new O.PassThrough(n),new O.PassThrough(n)];e.server.createChannel({readable:o[0],writable:o[1]},n),r.createChannel({readable:o[1],writable:o[0]},n)}else e&&e.transport&&r.createChannel(e.transport)}),r},D.prototype.createServer=function(e){return new ne(this,e)},Object.defineProperty(D.prototype,"hash",{enumerable:!0,get:function(){return d.bufferFrom(this._hashStr,"binary")}}),D.prototype.message=function(e){return this._messagesByName[e]},D.prototype.type=function(e){return this._typesByName[e]},D.prototype.inspect=function(){return Q("",this.name)},d.addDeprecatedGetters(D,["message","messages","name","type","types"]),D.prototype.createEmitter=T.deprecate(function(e,r){r=r||{};var n=this.createClient({cache:r.cache,buffering:!1,strictTypes:r.strictErrors,timeout:r.timeout}),o=n.createChannel(e,r);return $e(n,o),o},"use `.createClient()` instead of `.createEmitter()`"),D.prototype.createListener=T.deprecate(function(e,r){if(r&&r.strictErrors)throw new Error("use `.createServer()` to support strict errors");return this._server.createChannel(e,r)},"use `.createServer().createChannel()` instead of `.createListener()`"),D.prototype.emit=T.deprecate(function(e,r,n,o){if(!n||!this.equals(n.client._svc$))throw new Error("invalid emitter");var s=n.client;return q.prototype.emitMessage.call(s,e,r,o&&o.bind(this)),n.getPending()},"create a client via `.createClient()` to emit messages instead of `.emit()`"),D.prototype.equals=T.deprecate(function(e){return D.isService(e)&&this.getFingerprint().equals(e.getFingerprint())},"equality testing is deprecated, compare the `.protocol`s instead"),D.prototype.getFingerprint=T.deprecate(function(e){return d.getHash(JSON.stringify(this.protocol),e)},"use `.hash` instead of `.getFingerprint()`"),D.prototype.getSchema=T.deprecate(C.prototype.getSchema,"use `.protocol` instead of `.getSchema()`"),D.prototype.on=T.deprecate(function(e,r){var n=this;return this._server.onMessage(e,function(o,s){return r.call(n,o,this.channel,s)}),this},"use `.createServer().onMessage()` instead of `.on()`"),D.prototype.subprotocol=T.deprecate(function(){var e=this._server,r={strictTypes:e._strict,cache:e._cache},n=new ne(e.service,r);return n._handlers=Object.create(e._handlers),new D(this.name,this._messagesByName,this._typesByName,this.protocol,n)},"`.subprotocol()` will be removed in 5.1"),D.prototype._attrs=function(e){var r={protocol:this.name},n=[];this.types.forEach(function(s){if(s.getName()!==void 0){var f=s._attrs(e);typeof f!="string"&&n.push(f)}}),n.length&&(r.types=n);var o=Object.keys(this._messagesByName);return o.length&&(r.messages={},o.forEach(function(s){r.messages[s]=this._messagesByName[s]._attrs(e)},this)),e&&e.exportAttrs&&this.doc!==void 0&&(r.doc=this.doc),r};function X(e,r,n){n===void 0&&typeof r=="function"&&(n=r,r=void 0);var o=new D({protocol:"Empty"},re),s;o.createClient({timeout:r&&r.timeout}).createChannel(e,{scope:r&&r.scope,endWritable:typeof e=="function"}).once("handshake",function(f,y){s=y.serverProtocol,this.destroy(!0)}).once("eot",function(f,y){y&&!/interrupted/.test(y)?n(y):n(null,JSON.parse(s))})}function q(e,r){r=r||{},g.EventEmitter.call(this),this._svc$=e,this._channels$=[],this._fns$=[],this._buffering$=!!r.buffering,this._cache$=r.cache||{},this._policy$=r.channelPolicy,this._strict$=!!r.strictTypes,this._timeout$=d.getOption(r,"timeout",1e4),r.remoteProtocols&&je(this._cache$,r.remoteProtocols,e,!0),this._svc$.messages.forEach(function(n){this[n.name]=this._createMessageHandler$(n)},this)}T.inherits(q,g.EventEmitter),q.prototype.activeChannels=function(){return this._channels$.slice()},q.prototype.createChannel=function(e,r){var n=r&&r.objectMode,o;if(typeof e=="function"){var s;n?s=e:s=function(F){var J=new K,B=e(function(H,W){if(H){F(H);return}var ie=new ee().once("error",function(ae){o.destroy(ae)});F(null,W.pipe(ie))});if(B)return J.pipe(B),J},o=new S(this,s,r)}else{var f,y;if(Ke(e)?f=y=e:(f=e.readable,y=e.writable),!n){var k=new he;f=f.pipe(k);var $=new pe;$.pipe(y),y=$}o=new N(this,f,y,r),n||(o.once("eot",function(){f.unpipe(k),$.unpipe(y)}),k.once("error",function(F){o.destroy(F)}))}var L=this._channels$;return L.push(o),o.once("_drain",function(){L.splice(L.indexOf(this),1)}),this._buffering$=!1,this.emit("channel",o),o},q.prototype.destroyChannels=function(e){this._channels$.forEach(function(r){r.destroy(e&&e.noWait)})},q.prototype.emitMessage=function(e,r,n,o){var s=t(this._svc$,e),f=new u(s,{},r);this._emitMessage$(f,n,o)},q.prototype.remoteProtocols=function(){return ue(this._cache$,!0)},Object.defineProperty(q.prototype,"service",{enumerable:!0,get:function(){return this._svc$}}),q.prototype.use=function(){var e,r,n;for(e=0,r=arguments.length;e>>(r|0),this._id=0,this._n=0,this._cbs={}}A.prototype.get=function(e){return this._cbs[e&this._mask]},A.prototype.add=function(e,r){this._id=this._id+1&this._mask;var n=this,o=this._id,s;return e>0&&(s=setTimeout(function(){f(new Error("timeout"))},e)),this._cbs[o]=f,this._n++,o;function f(){n._cbs[o]&&(delete n._cbs[o],n._n--,s&&clearTimeout(s),r.apply(n._ctx,arguments))}},A.prototype.clear=function(){Object.keys(this._cbs).forEach(function(e){this._cbs[e](new Error("interrupted"))},this)};function V(e,r,n,o){this._clientSvc=e,this._serverSvc=r,this._hash=n,this._isRemote=!!o,this._readers=Ie(e,r)}V.prototype._decodeRequest=function(e){var r=new R(e),n=a._read(r),o=w._read(r),s,f;if(o?(s=this._serverSvc.message(o),f=this._readers[o+"?"]._read(r)):s=M,!r.isValid())throw new Error(Q("truncated %s request",o||"ping$"));return new u(s,n,f)},V.prototype._decodeResponse=function(e,r,n){var o=new R(e);d.copyOwnProperties(a._read(o),r.headers,!0);var s=m._read(o),f=n.name;if(f){var y=this._readers[f+(s?"*":"!")];if(n=this._clientSvc.message(f),s?r.error=y._read(o):r.response=y._read(o),!o.isValid())throw new Error(Q("truncated %s response",f))}else n=M};function ee(){O.Transform.call(this,{readableObjectMode:!0}),this._id=void 0,this._buf=d.newBuffer(0),this._bufs=[],this.on("finish",function(){this.push(null)})}T.inherits(ee,O.Transform),ee.prototype._transform=function(e,r,n){e=v.concat([this._buf,e]);for(var o;e.length>=4&&e.length>=(o=e.readInt32BE(0))+4;){if(o)this._bufs.push(e.slice(4,o+4));else{var s=this._bufs;this._bufs=[],this.push({id:null,payload:s})}e=e.slice(o+4)}this._buf=e,n()},ee.prototype._flush=function(e){if(this._buf.length||this._bufs.length){var r=this._bufs.slice();r.unshift(this._buf);var n=Ee("TRAILING_DATA");n.trailingData=v.concat(r).toString(),this.emit("error",n)}e()};function K(){O.Transform.call(this,{writableObjectMode:!0}),this.on("finish",function(){this.push(null)})}T.inherits(K,O.Transform),K.prototype._transform=function(e,r,n){var o=e.payload,s,f,y;for(s=0,f=o.length;s=4&&e.length>=(o=e.readInt32BE(0))+4;)this._frameCount--,this._bufs.push(e.slice(4,o+4)),e=e.slice(o+4);if(this._frameCount){this._buf=e,n();return}else{var s={id:this._id,payload:this._bufs};this._bufs=[],this._id=void 0,this.push(s)}}},he.prototype._flush=ee.prototype._flush;function pe(){O.Transform.call(this,{writableObjectMode:!0}),this.on("finish",function(){this.push(null)})}T.inherits(pe,O.Transform),pe.prototype._transform=function(e,r,n){var o=e.payload,s=o.length,f;f=d.newBuffer(8),f.writeInt32BE(e.id,0),f.writeInt32BE(s,4),this.push(f);var y;for(y=0;y>32-te===0}function Ke(e){return!!(e&&e.pipe)}function t(e,r){var n=e.message(r);if(!n)throw new Error(Q("unknown message: %s",r));return n}function i(e){var r=[e.wreq,e.wres],n=[],o;s(0);function s(y){var k=!1;y1)throw new Error("union annotations are not supported");return this._readUnion();default:var w=this._typeRefs[m.type];return w&&(delete m.type,d.copyOwnProperties(w,m)),Object.keys(m).length>1?m:m.type}},C.prototype._readFixed=function(m){var a=this._tk;return a.next({val:"(",silent:!0})||(m.name=a.next({id:"name"}).val,a.next({val:"("})),m.size=parseInt(a.next({id:"number"}).val),a.next({val:")"}),m},C.prototype._readMap=function(m){var a=this._tk,w=this._implicitTags,j=a.next({val:"<",silent:w})===void 0;return m.values=this._readType(),a.next({val:">",silent:j}),m},C.prototype._readArray=function(m){var a=this._tk,w=this._implicitTags,j=a.next({val:"<",silent:w})===void 0;return m.items=this._readType(),a.next({val:">",silent:j}),m},C.prototype._readEnum=function(m,a){var w=this._tk;w.next({val:"{",silent:!0})||(m.name=w.next({id:"name"}).val,w.next({val:"{"})),m.symbols=[];do m.symbols.push(w.next().val);while(!w.next({val:"}",silent:!0})&&w.next({val:","}));return a&&w.next({val:"=",silent:!0})&&(m.default=w.next().val,w.next({val:";"})),m},C.prototype._readUnion=function(){var m=this._tk,a=[];m.next({val:"{"});do a.push(this._readType());while(!m.next({val:"}",silent:!0})&&m.next({val:","}));return a},C.prototype._readRecord=function(m){var a=this._tk;for(a.next({val:"{",silent:!0})||(m.name=a.next({id:"name"}).val,a.next({val:"{"})),m.fields=[];!a.next({val:"}",silent:!0});)m.fields.push(this._readField()),a.next({val:";"});return m},C.prototype._readImports=function(m,a){for(var w=this._tk,j=0,U=w.pos;w.next({val:"import",silent:!0});){if(!j&&a&&w.next({val:"(",silent:!0})){w.pos=U;return}var te=w.next({id:"name"}).val,M=JSON.parse(w.next({id:"string"}).val);w.next({val:";"}),m.push({kind:te,name:M}),j++}return j};function P(m){this._str=m,this.pos=0}P.prototype.next=function(m){var a={pos:this.pos,id:void 0,val:void 0},w=this._skip(m&&m.emitJavadoc);if(typeof w=="string")a.id="javadoc",a.val=w;else{var j=this.pos,U=this._str,te=U.charAt(j);if(!te)a.id="(eof)";else if(m&&m.id==="json"?(a.id="json",this.pos=this._endOfJson()):te==='"'?(a.id="string",this.pos=this._endOfString()):/[0-9]/.test(te)?(a.id="number",this.pos=this._endOf(/[0-9]/)):/[`A-Za-z_.]/.test(te)?(a.id="name",this.pos=this._endOf(/[`A-Za-z0-9_.]/)):(a.id="operator",this.pos=j+1),a.val=U.slice(j,this.pos),a.id==="json")try{a.val=JSON.parse(a.val)}catch{throw this.error("invalid JSON",a)}else a.id==="name"&&(a.val=a.val.replace(/`/g,""))}var M;if(m&&m.id&&m.id!==a.id?M=this.error(O("expected ID %s",m.id),a):m&&m.val&&m.val!==a.val&&(M=this.error(O("expected value %s",m.val),a)),M)if(m&&m.silent){this.pos=a.pos;return}else throw M;else return a},P.prototype.error=function(m,a){var w=typeof a!="number",j=w?a.pos:a,U=this._str,te=1,M=0,G;for(G=0;G"u"&&typeof Tt>"u"&&console.error("ultralight-S3 Module: Crypto functions are not available, please report the issue with necessary description: https://github.com/sentienhq/ultralight-s3/issues");var Xt={contents:!0},Zt=h=>`%${h.charCodeAt(0).toString(16).toUpperCase()}`,rt=h=>encodeURIComponent(h).replace(/[!'()*]/g,Zt),me=h=>rt(h).replace(/%2F/g,"/"),er=class{constructor({accessKeyId:h,secretAccessKey:l,endpoint:c,bucketName:d,region:_="auto",maxRequestSizeInBytes:g=5242880,requestAbortTimeout:O=void 0,logger:T=void 0}){this.getBucketName=()=>this.bucketName,this.setBucketName=v=>{this.bucketName=v},this.getRegion=()=>this.region,this.setRegion=v=>{this.region=v},this.getEndpoint=()=>this.endpoint,this.setEndpoint=v=>{this.endpoint=v},this.getMaxRequestSizeInBytes=()=>this.maxRequestSizeInBytes,this.setMaxRequestSizeInBytes=v=>{this.maxRequestSizeInBytes=v},this.sanitizeETag=v=>He(v),this.getProps=()=>({accessKeyId:this.accessKeyId,secretAccessKey:this.secretAccessKey,region:this.region,bucket:this.bucketName,endpoint:this.endpoint,maxRequestSizeInBytes:this.maxRequestSizeInBytes,requestAbortTimeout:this.requestAbortTimeout,logger:this.logger}),this.setProps=v=>{this._validateConstructorParams(v.accessKeyId,v.secretAccessKey,v.bucketName,v.endpoint),this.accessKeyId=v.accessKeyId,this.secretAccessKey=v.secretAccessKey,this.region=v.region||"auto",this.bucketName=v.bucketName,this.endpoint=v.endpoint,this.maxRequestSizeInBytes=v.maxRequestSizeInBytes||5242880,this.requestAbortTimeout=v.requestAbortTimeout,this.logger=v.logger},this._validateConstructorParams(h,l,c,d),this.accessKeyId=h,this.secretAccessKey=l,this.endpoint=c,this.bucketName=d,this.region=_,this.maxRequestSizeInBytes=g,this.requestAbortTimeout=O,this.logger=T}_validateConstructorParams(h,l,c,d){if(typeof h!="string"||h.trim().length===0)throw new TypeError(Jt);if(typeof l!="string"||l.trim().length===0)throw new TypeError(Wt);if(typeof c!="string"||c.trim().length===0)throw new TypeError(Yt);if(typeof d!="string"||d.trim().length===0)throw new TypeError(Qt)}_checkMethodHeadnGet(h){if(h!=="GET"&&h!=="HEAD")throw this._log("error",`${se}method must be either GET or HEAD`),new Error("method must be either GET or HEAD")}_checkKey(h){if(typeof h!="string"||h.trim().length===0)throw this._log("error",ht),new TypeError(ht)}_checkDelimiter(h){if(typeof h!="string"||h.trim().length===0)throw this._log("error",yt),new TypeError(yt)}_checkPrefix(h){if(typeof h!="string")throw this._log("error",pt),new TypeError(pt)}_checkMaxKeys(h){if(typeof h!="number"||h<=0)throw this._log("error",dt),new TypeError(dt)}_checkOpts(h){if(typeof h!="object")throw this._log("error",`${se}opts must be an object`),new TypeError(`${se}opts must be an object`)}_log(h,l,c={}){if(this.logger&&typeof this.logger[h]=="function"){let d=O=>typeof O!="object"||O===null?O:Object.keys(O).reduce((T,v)=>(Ut.includes(v.toLowerCase())?T[v]="[REDACTED]":typeof O[v]=="object"&&O[v]!==null?T[v]=d(O[v]):T[v]=O[v],T),Array.isArray(O)?[]:{}),_=d(c),g={timestamp:new Date().toISOString(),level:h,message:l,..._,context:d({bucketName:this.bucketName,region:this.region,endpoint:this.endpoint,accessKeyId:this.accessKeyId?`${this.accessKeyId.substring(0,4)}...`:void 0})};this.logger[h](g)}}async getContentLength(h){this._checkKey(h);let l={[_e]:ye},c=me(h),{url:d,headers:_}=await this._sign("HEAD",c,{},l,""),g=(await this._sendRequest(d,"HEAD",_)).headers.get(Ce);return g?parseInt(g,10):0}async bucketExists(){let h={[_e]:ye},{url:l,headers:c}=await this._sign("HEAD","",{},h,""),d=await this._sendRequest(l,"HEAD",c);return!!(d.ok&&d.status===200)}async fileExists(h,l={}){this._checkKey(h);let{filteredOpts:c,conditionalHeaders:d}=this._filterIfHeaders(l),_={[_e]:ye,...d},g=me(h),{url:O,headers:T}=await this._sign("HEAD",g,c,_,"");try{let v=await this._sendRequest(O,"HEAD",T,"",[200,404,412,304]);return v.status===404?!1:v.status===412||v.status===304?null:v.ok&&v.status===200?!0:(this._handleErrorResponse(v),!1)}catch(v){let R=v instanceof Error?v.message:String(v);throw this._log("error",`${se}Failed to check if file exists: ${R}`),new Error(`${se}Failed to check if file exists: ${R}`)}}async _sign(h,l,c,d,_){let g=new Date().toISOString().replace(/[:-]|\.\d{3}/g,""),O=typeof l=="string"&&l.length>0?new URL(l,this.endpoint):new URL(this.endpoint);O.pathname=`/${encodeURI(this.bucketName)}${O.pathname}`,d[_e]=_?await We(_):ye,d[zt]=g,d[Gt]=O.host;let T=this._buildCanonicalHeaders(d),v=Object.keys(d).map(re=>re.toLowerCase()).sort().join(";"),R=await this._buildCanonicalRequest(h,O,c,T,v,_),C=await this._buildStringToSign(g,R),P=await this._calculateSignature(g,C),Q=this._buildAuthorizationHeader(g,v,P);return d[Kt]=Q,{url:O.toString(),headers:d}}_buildCanonicalHeaders(h){return Object.entries(h).map(([l,c])=>`${l.toLowerCase()}:${String(c).trim()}`).sort().join(` +`)}async _buildCanonicalRequest(h,l,c,d,_,g){return[h,l.pathname,this._buildCanonicalQueryString(c),`${d} +`,_,g?await We(g):ye].join(` +`)}async _buildStringToSign(h,l){let c=[h.slice(0,8),this.region,Ze,Xe].join("/");return[st,h,c,await We(l)].join(` +`)}async _calculateSignature(h,l){let c=await this._getSignatureKey(h.slice(0,8));return Me(c,l,"hex")}_buildAuthorizationHeader(h,l,c){let d=[h.slice(0,8),this.region,Ze,Xe].join("/");return[`${st} Credential=${this.accessKeyId}/${d}`,`SignedHeaders=${l}`,`Signature=${c}`].join(", ")}_filterIfHeaders(h){let l={},c={},d=["if-match","if-none-match","if-modified-since","if-unmodified-since"];for(let[_,g]of Object.entries(h))d.includes(_)?c[_]=g:l[_]=g;return{filteredOpts:l,conditionalHeaders:c}}async list(h="/",l="",c=1e3,d="GET",_={}){this._checkDelimiter(h),this._checkPrefix(l),this._checkMaxKeys(c),this._checkMethodHeadnGet(d),this._checkOpts(_),this._log("info",`Listing objects in ${l}`);let g={"list-type":Vt,"max-keys":String(c),..._};l.length>0&&(g.prefix=l);let O={[Te]:xe,[_e]:ye},T=h==="/"?h:rt(h),{url:v,headers:R}=await this._sign("GET",T,g,O,""),C=`${v}?${new URLSearchParams(g)}`,P=await this._sendRequest(C,"GET",R),Q=await P.text();if(d==="HEAD"){let a=P.headers.get(Ce),w=P.headers.get(ct),j=P.headers.get(ut);return{size:a?+a:void 0,mtime:w?new Date(w):void 0,ETag:j||void 0}}let re=Be(Q),m=re.listBucketResult||re.error||re;return m.contents||m}async listMultiPartUploads(h="/",l="",c="GET",d={}){var _,g,O;this._checkDelimiter(h),this._checkPrefix(l),this._checkMethodHeadnGet(c),this._checkOpts(d),this._log("info",`Listing multipart uploads in ${l}`);let T={uploads:"",...d},v={[Te]:xe,[_e]:ye},R=h==="/"?h:rt(h),{url:C,headers:P}=await this._sign("GET",R,T,v,""),Q=`${C}?${new URLSearchParams(T)}`,re=await this._sendRequest(Q,"GET",P),m=await re.text();if(c==="HEAD")return{size:+((_=re.headers.get(Ce))!==null&&_!==void 0?_:"0"),mtime:new Date((g=re.headers.get(ct))!==null&&g!==void 0?g:""),ETag:(O=re.headers.get(ut))!==null&&O!==void 0?O:""};let a=Be(m),w=a.listMultipartUploadsResult||a.error||a;return w.uploads||w}async get(h,l={}){this._checkKey(h),this._log("info",`Getting object ${h}`);let{filteredOpts:c,conditionalHeaders:d}=this._filterIfHeaders(l),_={[Te]:xe,[_e]:ye,...d},g=me(h),{url:O,headers:T}=await this._sign("GET",g,c,_,""),v=await this._sendRequest(O,"GET",T,"",[200,404,412,304]);if(v.status===404||v.status===412||v.status===304)return this._log("error",`Failed to get object. Status: ${v.status}`),null;if(!v.ok)throw this._log("error",`Failed to get object. Status: ${v.status}`),new Error(`Failed to get object. Status: ${v.status}`);return v.text()}async getObjectWithETag(h,l={}){this._checkKey(h),this._log("info",`Getting object ${h}`);let{filteredOpts:c,conditionalHeaders:d}=this._filterIfHeaders(l),_={[Te]:xe,[_e]:ye,...d},g=me(h),{url:O,headers:T}=await this._sign("GET",g,c,_,"");try{let v=await this._sendRequest(O,"GET",T,"",[200,404,412,304]);if(v.status===404||v.status===412||v.status===304)return this._log("error",`Failed to get object. Status: ${v.status}`),{etag:null,data:null};if(!v.ok)throw this._log("error",`Failed to get object. Status: ${v.status}`),new Error(`Failed to get object. Status: ${v.status}`);let R=v.headers.get("etag");if(!R)throw new Error("ETag not found in response headers");let C=await v.text();return{etag:He(R),data:C}}catch(v){throw this._log("error",`Error getting object ${h} with ETag: ${v}`),v}}async getEtag(h,l={}){this._checkKey(h),this._log("info",`Getting etag object ${h}`);let{filteredOpts:c,conditionalHeaders:d}=this._filterIfHeaders(l),_={[Te]:xe,[_e]:ye,...d},g=me(h),{url:O,headers:T}=await this._sign("HEAD",g,c,_,""),v=await this._sendRequest(O,"HEAD",T,"",[200,412,304]);if(this._log("info",`Response status: ${v.status,v.statusText}`),v.status===412||v.status===304)return null;let R=v.headers.get("etag");if(!R)throw this._log("error","ETag not found in response headers"),new Error("ETag not found in response headers");return He(R)}async getResponse(h,l=!0,c=0,d=this.maxRequestSizeInBytes,_={}){this._checkKey(h);let{filteredOpts:g,conditionalHeaders:O}=this._filterIfHeaders({..._}),T={[Te]:xe,[_e]:ye,...l?{}:{range:`bytes=${c}-${d-1}`},...O},v=me(h),{url:R,headers:C}=await this._sign("GET",v,g,T,""),P=`${R}?${new URLSearchParams(g)}`;return this._sendRequest(P,"GET",C)}async put(h,l){if(this._checkKey(h),!(l instanceof Buffer||typeof l=="string"))throw this._log("error",Je),new TypeError(Je);this._log("info",`Uploading object ${h}`);let c=typeof l=="string"?Buffer.byteLength(l):l.length,d={[Ce]:c},_=me(h),{url:g,headers:O}=await this._sign("PUT",_,{},d,l);return await this._sendRequest(g,"PUT",O,l)}async getMultipartUploadId(h,l=qt){if(this._checkKey(h),typeof l!="string")throw this._log("error",`${se}fileType must be a string`),new TypeError(`${se}fileType must be a string`);this._log("info",`Initiating multipart upload for object ${h}`);let c={uploads:""},d={[Te]:l,[_e]:ye},_=me(h),{url:g,headers:O}=await this._sign("POST",_,c,d,""),T=`${g}?${new URLSearchParams(c)}`,v=await(await this._sendRequest(T,"POST",O)).text(),R=Be(v);if(typeof R=="object"&&R!==null&&"error"in R&&typeof R.error=="object"&&R.error!==null&&"message"in R.error){let C=String(R.error.message);throw this._log("error",`${se}Failed to abort multipart upload: ${C}`),new Error(`${se}Failed to abort multipart upload: ${C}`)}if(typeof R=="object"&&R!==null){if(!R.initiateMultipartUploadResult||!R.initiateMultipartUploadResult.uploadId)throw this._log("error",`${se}Failed to create multipart upload: no uploadId in response`),new Error(`${se}Failed to create multipart upload: Missing upload ID in response`);return R.initiateMultipartUploadResult.uploadId}else throw this._log("error",`${se}Failed to create multipart upload: unexpected response format`),new Error(`${se}Failed to create multipart upload: Unexpected response format`)}async uploadPart(h,l,c,d,_={}){this._validateUploadPartParams(h,l,c,d,_);let g={uploadId:c,partNumber:d,..._},O={[Ce]:l.length},T=me(h),{url:v,headers:R}=await this._sign("PUT",T,g,O,l),C=`${v}?${new URLSearchParams(g)}`,P=await this._sendRequest(C,"PUT",R,l),Q=He(P.headers.get("etag")||"");return{partNumber:d,ETag:Q}}_validateUploadPartParams(h,l,c,d,_){if(this._checkKey(h),!(l instanceof Buffer||typeof l=="string"))throw this._log("error",Je),new TypeError(Je);if(typeof c!="string"||c.trim().length===0)throw this._log("error",Pe),new TypeError(Pe);if(!Number.isInteger(d)||d<=0)throw this._log("error",`${se}partNumber must be a positive integer`),new TypeError(`${se}partNumber must be a positive integer`);this._checkOpts(_)}async completeMultipartUpload(h,l,c){if(this._checkKey(h),typeof l!="string"||l.trim().length===0)throw this._log("error",Pe),new TypeError(Pe);if(!Array.isArray(c)||c.length===0)throw this._log("error",ft),new TypeError(ft);if(!c.every(Q=>typeof Q.partNumber=="number"&&typeof Q.ETag=="string"))throw this._log("error",lt),new TypeError(lt);this._log("info",`Complete multipart upload ${l} for object ${h}`);let d={uploadId:l},_=this._buildCompleteMultipartUploadXml(c),g={[Te]:at,[Ce]:Buffer.byteLength(_).toString(),[_e]:await We(_)},O=me(h),{url:T,headers:v}=await this._sign("POST",O,d,g,_),R=`${T}?${new URLSearchParams(d)}`,C=await(await this._sendRequest(R,"POST",v,_)).text(),P=Be(C);if(typeof P=="object"&&P!==null&&"error"in P&&typeof P.error=="object"&&P.error!==null&&"message"in P.error){let Q=String(P.error.message);throw this._log("error",`${se}Failed to abort multipart upload: ${Q}`),new Error(`${se}Failed to abort multipart upload: ${Q}`)}return P.completeMultipartUploadResult}async abortMultipartUpload(h,l){if(this._checkKey(h),typeof l!="string"||l.trim().length===0)throw this._log("error",Pe),new TypeError(Pe);this._log("info",`Aborting multipart upload ${l} for object ${h}`);let c={uploadId:l},d={[Te]:at,[_e]:ye};try{let _=me(h),{url:g,headers:O}=await this._sign("DELETE",_,c,d,""),T=`${g}?${new URLSearchParams(c)}`,v=await this._sendRequest(T,"DELETE",O);if(v.ok){let R=await v.text(),C=Be(R);if(typeof C=="object"&&C!==null&&"error"in C&&typeof C.error=="object"&&C.error!==null&&"message"in C.error){let P=String(C.error.message);throw this._log("error",`${se}Failed to abort multipart upload: ${P}`),new Error(`${se}Failed to abort multipart upload: ${P}`)}return{status:"Aborted",key:h,uploadId:l,response:C}}else throw this._log("error",`${se}Abort request failed with status ${v.status}`),new Error(`${se}Abort request failed with status ${v.status}`)}catch(_){let g=_ instanceof Error?_.message:String(_);throw this._log("error",`${se}Failed to abort multipart upload for key ${h}: ${g}`),new Error(`${se}Failed to abort multipart upload for key ${h}: ${g}`)}}_buildCompleteMultipartUploadXml(h){return` - ${n.map(u=>` + ${h.map(l=>` - ${u.partNumber} - ${u.ETag} + ${l.partNumber} + ${l.ETag} `).join("")} - `}async delete(n){this._checkKey(n),this._log("info",`Deleting object ${n}`);let u={[he]:ge,[oe]:ne},o=ae(n),{url:p,headers:d}=await this._sign("DELETE",o,{},u,""),g=await this._sendRequest(p,"DELETE",d);return g.status===204||g.status===200}async _sendRequest(n,u,o,p,d=[]){this._log("info",`Sending ${u} request to ${n}, headers: ${JSON.stringify(o)}`);let g=await fetch(n,{method:u,headers:o,body:["GET","HEAD"].includes(u)?void 0:p,signal:this.requestAbortTimeout!==void 0?AbortSignal.timeout(this.requestAbortTimeout):void 0});return!g.ok&&!d.includes(g.status)&&await this._handleErrorResponse(g),g}async _handleErrorResponse(n){let u=await n.text(),o=n.headers.get("x-amz-error-code")||"Unknown",p=n.headers.get("x-amz-error-message")||n.statusText;throw this._log("error",`${L}Request failed with status ${n.status}: ${o} - ${p},err body: ${u}`),new Error(`${L}Request failed with status ${n.status}: ${o} - ${p}, err body: ${u}`)}_buildCanonicalQueryString(n){return Object.keys(n).length<1?"":Object.keys(n).sort().map(u=>`${encodeURIComponent(u)}=${encodeURIComponent(n[u])}`).join("&")}async _getSignatureKey(n){let u=await Re(`AWS4${this.secretAccessKey}`,n),o=await Re(u,this.region),p=await Re(o,Me);return Re(p,Ve)}},Le=async n=>{let u=dt("sha256");return u.update(n),u.digest("hex")},Re=async(n,u,o)=>{let p=pt("sha256",n);return p.update(u),p.digest(o)},Se=n=>{let u={'"':"",""":"",""":"",""":"",""":""};return n.replace(/^("|"|")|("|"|")$/g,o=>u[o])},Ee=n=>{let u=g=>g.replace(/"/g,'"').replace(/'/g,"'").replace(/</g,"<").replace(/>/g,">").replace(/&/g,"&"),o={},p=/<(\w)([-\w]+)(?:\/|[^>]*>((?:(?!<\1)[\s\S])*)<\/\1\2)>/gm,d;for(;d=p.exec(n);){let[,g,b,O]=d,l=g.toLowerCase()+b,T=O!=null?Ee(O):!0;typeof T=="string"?o[l]=Se(u(T)):Array.isArray(o[l])?o[l].push(T):o[l]=o[l]!=null?[o[l],T]:Gt[l]?[T]:T}return Object.keys(o).length?o:u(n)},yt=xt(Ct(),1),k={MISSING_ARGUMENT:"MISSING_ARGUMENT",COLLECTION_EXISTS:"COLLECTION_EXISTS",CREATE_COLLECTION_ERROR:"CREATE_COLLECTION_ERROR",RENAME_COLLECTION_ERROR:"RENAME_COLLECTION_ERROR",REMOVE_COLLECTION_ERROR:"REMOVE_COLLECTION_ERROR",UPDATE_COLLECTION_SCHEMA_ERROR:"UPDATE_COLLECTION_SCHEMA_ERROR",COLLECTION_NOT_FOUND:"COLLECTION_NOT_FOUND",SCHEMA_VALIDATION_ERROR:"SCHEMA_VALIDATION_ERROR",DOCUMENT_VALIDATION_ERROR:"DOCUMENT_VALIDATION_ERROR",S3_OPERATION_ERROR:"S3_OPERATION_ERROR",FIND_ERROR:"FIND_ERROR",FIND_ONE_ERROR:"FIND_ONE_ERROR",SAVE_DATA_ERROR:"SAVE_DATA_ERROR",INSERT_ERROR:"INSERT_ERROR",UPDATE_ERROR:"UPDATE_ERROR",UPDATE_ONE_ERROR:"UPDATE_ONE_ERROR",DELETE_ERROR:"DELETE_ERROR",COUNT_ERROR:"COUNT_ERROR",UNKNOWN_ERROR:"UNKNOWN_ERROR"},C=class extends Error{constructor(n,u=k.UNKNOWN_ERROR){super(`lowstorageError: ${n} :: code: ${u}`),this.name=this.constructor.name,this.code=u,Error.captureStackTrace(this,this.constructor)}},ve=class extends C{constructor(n,u=k.SCHEMA_VALIDATION_ERROR){super(n,u),super(n,k.SCHEMA_VALIDATION_ERROR)}},Oe=class extends C{constructor(n,u=k.DOCUMENT_VALIDATION_ERROR){super(n,u),super(n,k.DOCUMENT_VALIDATION_ERROR)}},te=class extends C{constructor(n,u){super(`S3 ${u} operation failed: ${n}`,k.S3_OPERATION_ERROR)}},Ce=(n,u)=>Object.keys(u).every(o=>n[o]===u[o]),Wt=async()=>typeof ze<"u"&&typeof ze=="function"?ze():typeof crypto<"u"&&typeof crypto=="object"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(n){var u=Math.random()*16|0,o=n==="x"?u:u&3|8;return o.toString(16)}),_t=(n,u="SubAutoGenerated")=>{switch(typeof n){case"string":return Qt(n)?{type:"string",name:"_id",size:16,logicalType:"UUID"}:"string";case"number":return Number.isInteger(n)?"int":"float";case"boolean":return"boolean";case"object":return n===null?"null":Array.isArray(n)?{type:"array",items:_t(n[0])}:gt(n,u);default:return"string"}},Ae=n=>{let u={name:"_id",type:"string",size:16,logicalType:"UUID"};return typeof n>"u"||n===null||("type"in n&&n.type==="record"&&"fields"in n&&Array.isArray(n.fields)?n.fields.some(p=>p.name==="_id")||n.fields.unshift(u):"type"in n&&n.type==="array"&&"items"in n&&n.items!==null&&typeof n.items=="object"&&"type"in n.items&&n.items.type==="record"&&"fields"in n.items&&Array.isArray(n.items.fields)&&(n.items.fields.some(p=>p.name==="_id")||n.items.fields.unshift(u))),n},gt=(n,u="AutoGenerated")=>{Array.isArray(n)&&(n=n[0]);let o=Object.entries(n).map(([d,g])=>({name:d,type:_t(g,`${u}.${d}`)}));return Ae({type:"record",name:u,fields:o})},Qt=n=>/^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i.test(n),I="lowstorage",de="/",vt="lowstorage",ye=".avro",Xt=1024*1024,ut=5*Xt,Ge=Buffer.from("","utf8"),qe=(n=k.DOCUMENT_VALIDATION_ERROR)=>{throw new Oe(`${I}: Invalid document or schema ${n}`)},ke=(n="")=>{if(n.trim()===""||n===null||typeof n>"u"||n.length>255||n===null)throw new C(`${I}: Collection name is required, null or too long`,k.MISSING_ARGUMENT)},nr=class{constructor(n){this._checkArgs=u=>{let o=["accessKeyId","secretAccessKey","endpoint","bucketName"];for(let p of o)if(!u[p])throw new C(`${I}: ${p} is required`,k.MISSING_ARGUMENT)},this.s3=()=>this._s3,this._checkArgs(n),this._schemas=new Map,this._s3=new Jt(n),this._dirPrefix=n.dirPrefix||vt,this._avroParse=yt.Type}async listCollections(){try{let n=await this._s3.list(de,this._dirPrefix);return Array.isArray(n)?n.map(u=>u.key.slice(this._dirPrefix.length+1,-ye.length)):typeof n=="object"&&n!==null&&"keyCount"in n&&n.keyCount==="0"?[]:[]}catch(n){throw new te(`${I}: ${n.message}`,k.S3_OPERATION_ERROR)}}async collectionExists(n=""){try{return ke(n),!!await this._s3.fileExists(`${this._dirPrefix}${de}${n}${ye}`)}catch(u){if(u.message.includes("Not Found"))return!1;throw new C(`${I}: ${u.message}`,k.COLLECTION_NOT_FOUND)}}async createCollection(n="",u,o=[]){try{if(ke(n),!await this.collectionExists(n)){if(typeof u<"u"&&u!==null)try{if(!this._avroParse.isValid(u))throw new ve(`${I}: Schema is invalid: ${u} ${k.SCHEMA_VALIDATION_ERROR}`)}catch{throw new ve(`${I}: Schema is invalid: ${u}`,k.SCHEMA_VALIDATION_ERROR)}if(o.length>0&&u){let d=this._avroParse.forSchema({type:"array",items:u});await this._s3.put(`${this._dirPrefix}${de}${n}${ye}`,d.toBuffer(o))}else await this._s3.put(`${this._dirPrefix}${de}${n}${ye}`,Ge);return this.collection(n,u,!1)}throw new C(`${I}: Collection ${n} already exists`,k.COLLECTION_EXISTS)}catch(p){throw p instanceof C?p:new C(`${I}: ${p.message}`,k.CREATE_COLLECTION_ERROR)}}async removeCollection(n=""){try{if(ke(n),await this.collectionExists(n)){await this._s3.delete(`${this._dirPrefix}${de}${n}${ye}`);let o=await this.collectionExists(n);if(typeof o=="boolean"){if(!o)return this._schemas.delete(n),!0;throw new C(`${I}: Failed to delete collection ${n}`,k.S3_OPERATION_ERROR)}throw new te(`${I}: Failed to delete collection ${n}`,k.S3_OPERATION_ERROR)}throw new C(`${I}: Collection ${n} does not exist`,k.REMOVE_COLLECTION_ERROR)}catch(u){throw u instanceof te?u:new C(`${I}: Failed to remove collection: ${u.message}`,k.REMOVE_COLLECTION_ERROR)}}async collection(n="",u,o=!0){try{ke(n);let p=`${this._dirPrefix}${de}${n}${ye}`;if(!await this._s3.fileExists(p)){if(!o)throw new C(`${I}: Collection ${n} does not exist`,k.COLLECTION_NOT_FOUND);await this._s3.put(p,Ge)}let g=u||this._schemas.get(n)||void 0;return new Yt(n,g,this._s3,this._dirPrefix)}catch(p){throw p.message.includes("unknown type")?new ve(`${I}: Schema input is invalid: ${p.message}`,k.SCHEMA_VALIDATION_ERROR):new C(`${I}: ${p.message}`,k.COLLECTION_NOT_FOUND)}}},Yt=class mt{constructor(u="",o,p,d=vt,g=!1,b=ut){this.getProps=()=>({colName:this._colName,s3:this._s3,schema:this._schema,avroParse:this._avroParse,avroType:this._avroType,dirPrefix:this._dirPrefix,safeWrite:this._safeWrite,chunkSize:this._chunkSize}),this.setProps=O=>{this._colName=O.colName,this._schema=O.schema,this._s3=O.s3,this._avroParse=O.avroParse,this._avroType=O.avroType,this._dirPrefix=O.dirPrefix,this._safeWrite=O.safeWrite,this._chunkSize=O.chunkSize},this.setSafeWrite=O=>{this._safeWrite=O},this.getSafeWrite=()=>this._safeWrite,this.getAvroSchema=()=>this._schema,this.setAvroSchema=O=>{this._schema=Ae(O),this._avroType=typeof O>"u"?null:this._avroParse.forSchema(O)},this._colName=u.trim(),this._s3=p,this._schema=Ae(o),this._dirPrefix=d,this._safeWrite=g,this._chunkSize=b||ut,this._s3.setMaxRequestSizeInBytes(this._chunkSize),this._avroParse=yt.Type,this._lastETag="",this._dataCache=[],this._avroType=typeof o>"u"?null:this._avroParse.ForSchema(o),this._key=`${this._dirPrefix}${de}${this._colName}${ye}`}async _loadData(){try{if(this._avroType===null||typeof this._avroType>"u")throw new C(`${I}: Missing type definition. Configure before operations `,k.SCHEMA_VALIDATION_ERROR);let{etag:u,data:o}=await this._s3.getObjectWithETag(this._key,{"if-none-match":this._lastETag});if(o===null)return this._dataCache;this._lastETag=u===null?this._lastETag:u;let p=this._avroParse.forSchema({type:"array",items:this._avroType});if(o.length0?p.fromBuffer(Buffer.from(o,"utf8")):[],this._dataCache;let d=this._chunkSize,g=[Buffer.from(o,"utf8")],b=!0;for(;b;){let l=await this._s3.getResponse(this._key,!1,d,d+this._chunkSize),T=await l.text();g.push(Buffer.from(T,"utf8")),d+=this._chunkSize,parseInt(l.headers.get("content-length")||T.length.toString())-1)return this._dataCache=[],this._dataCache;throw new te(`${I}: Failed to load data: ${u.message}`,k.S3_OPERATION_ERROR)}}async _saveData(u){try{if(this._avroType===null||typeof this._avroType>"u")throw new C(`${I}: Missing type definition. Configure before operations `,k.SCHEMA_VALIDATION_ERROR);let o=this._avroParse.forSchema({type:"array",items:this._avroType}),p=u.length>0?o.toBuffer(u):Ge;if(this._safeWrite&&this._lastETag!==""){let b=await this._s3.getEtag(this._key);if(b!==null&&b!==this._lastETag)return!1}let d=await this._s3.put(this._key,p);if(typeof d=="object"&&"status"in d&&d.status!==200)throw new te(`${I}: Failed to save data`,k.S3_OPERATION_ERROR);let g=d.headers?.get("etag")||"";return g&&g.length>0&&(this._lastETag=this._s3.sanitizeETag(g),this._dataCache=u),!0}catch(o){throw o instanceof te?o:new C(`${I}: ${o.message}`,k.SAVE_DATA_ERROR)}}async insert(u,o){try{if(u==null)throw new C(`${I}: Document is required for insert`,k.INSERT_ERROR);if(typeof u!="object"&&!Array.isArray(u))throw new Oe(`${I}: Document must be an object or an array`,k.DOCUMENT_VALIDATION_ERROR);let p=Array.isArray(u)?u:[u],d=o?Ae(o):this._schema||Ae(gt(p[0])),g=this._avroParse.forSchema(d);if(!g)throw new ve(`${I}: Schema is required - Pass a schema to the insert method`,k.SCHEMA_VALIDATION_ERROR);this._avroType=g;let b=await this._loadData();for(let l of p){if(typeof l!="object"||l===null)throw new Oe(`${I}: Invalid input: input must be an object or an array of objects`,k.DOCUMENT_VALIDATION_ERROR);if(l._id=l._id||await Wt(),this._avroType.isValid(l,{errorHook:qe,noUndeclaredFields:!0})===!0)b.push(l);else throw new Oe(`${I}: Invalid document or schema`,k.DOCUMENT_VALIDATION_ERROR)}if(!await this._saveData(b))throw new te(`${I}: Failed to insert document`,k.S3_OPERATION_ERROR);return this.setAvroSchema(d),p}catch(p){throw p.message.includes("unknown type")?new ve(`${I}: Schema input is invalid: ${p.message}`,k.SCHEMA_VALIDATION_ERROR):p instanceof C?p:new C(`${I} Insert operation failed: ${p.message}`,k.INSERT_ERROR)}}async find(u={},o={}){try{if(u==null)throw new C(`${I}: Query is required for update`,k.MISSING_ARGUMENT);let p=await this._loadData(),d=o.skip!==void 0?parseInt(String(o.skip),10):0,g=o.limit!==void 0?d+parseInt(String(o.limit),10):void 0;return p.filter(O=>Ce(O,u)).slice(d,g)}catch(p){throw new C(`${I}: Find operation failed: ${p.message}`,k.FIND_ERROR)}}async findOne(u={}){try{if(u===null)throw new C(`${I}: Query cannot be null`,k.INVALID_ARGUMENT);return(await this.find(u,{limit:1}))[0]||null}catch(o){throw o instanceof C?o:new C(`${I}: FindOne operation failed: ${o.message}`,k.FIND_ONE_ERROR)}}async update(u={},o={},p={}){try{if(u==null||o===void 0||o===null)throw new C(`${I}: Query and update values are required for update`,k.MISSING_ARGUMENT);if(!this._avroType)throw new ve(`${I}: Schema is not defined for this collection`,k.SCHEMA_VALIDATION_ERROR);let d=await this._loadData();if(d.length===0)return 0;let g=0;for(let b=0;b0){if(!await this._saveData(d))throw new te(`${I}: Failed to update document`,k.S3_OPERATION_ERROR)}else if(p&&"upsert"in p&&p.upsert){if(!await this.insert(o))throw new te(`${I}: Failed to update document`,k.S3_OPERATION_ERROR);g=1}return g}catch(d){throw d instanceof te?d:new C(`${I}: Update operation failed: ${d.message}`,k.UPDATE_ERROR)}}async updateOne(u={},o={},p={}){try{if(u==null||o===void 0||o===null)throw new C(`${I}: Query is required`,k.MISSING_ARGUMENT);if(!this._avroType)throw new ve(`${I}: Schema is not defined for this collection`,k.SCHEMA_VALIDATION_ERROR);let d=await this._loadData();if(d.length===0)return 0;let g=d.findIndex(b=>Ce(b,u));if(g!==-1){let b={...d[g],...o};if(this._avroType.isValid(b,{errorHook:qe,noUndeclaredFields:!0})===!0){if(d[g]=b,!await this._saveData(d))throw new te(`${I}: Failed to update document`,k.S3_OPERATION_ERROR);return 1}else throw new Oe(`${I}: Invalid document or schema`,k.DOCUMENT_VALIDATION_ERROR)}if(p&&"upsert"in p&&p.upsert){if(!await this.insert(o))throw new te(`${I}: Failed to update document`,k.S3_OPERATION_ERROR);return 1}return 0}catch(d){throw d instanceof C?d:new C(`${I}: UpdateOne operation failed: ${d.message}`,k.UPDATE_ONE_ERROR)}}async delete(u={}){try{if(u==null)throw new C(`${I}: Query is required`,k.MISSING_ARGUMENT);let o=await this._loadData();if(o.length===0)return 0;let p=o.length,d=o.filter(b=>!Ce(b,u));if(!await this._saveData(d))throw new te(`${I}: Failed to delete document`,k.S3_OPERATION_ERROR);return p-d.length}catch(o){throw o instanceof te?o:new C(`${I}: Delete operation failed: ${o.message}`,k.DELETE_ERROR)}}async deleteAll(){try{let o=(await this._loadData()).length;if(!await this._saveData([]))throw new te(`${I}: Failed to delete document`,k.S3_OPERATION_ERROR);return o}catch(u){throw u instanceof te?u:new C(`${I}: Delete operation failed: ${u.message}`,k.DELETE_ERROR)}}async count(u={}){try{return(await this.find(u)).length}catch(o){throw new C(`${I}: Count operation failed: ${o.message}`,k.COUNT_ERROR)}}async renameCollection(u,o=this._schema){try{if(ke(u),await this._s3.fileExists(`${this._dirPrefix}${de}${u}${ye}`))throw new C(`${I}: Collection ${u} already exists`,k.COLLECTION_EXISTS);let d=o||this.getAvroSchema(),g=await this._loadData(),b=new mt(u,d,this._s3,this._dirPrefix,this._safeWrite,this._chunkSize);return await b._saveData(g),await this._s3.delete(`${this._dirPrefix}${de}${this._colName}${ye}`),b}catch(p){throw p instanceof C?p:new C(`${I}: Rename collection failed: ${p.message}`,k.RENAME_COLLECTION_ERROR)}}};export{nr as lowstorage,C as lowstorageError,k as lowstorage_ERROR_CODES}; + `}async delete(h){this._checkKey(h),this._log("info",`Deleting object ${h}`);let l={[Te]:xe,[_e]:ye},c=me(h),{url:d,headers:_}=await this._sign("DELETE",c,{},l,""),g=await this._sendRequest(d,"DELETE",_);return g.status===204||g.status===200}async _sendRequest(h,l,c,d,_=[]){this._log("info",`Sending ${l} request to ${h}, headers: ${JSON.stringify(c)}`);let g=await fetch(h,{method:l,headers:c,body:["GET","HEAD"].includes(l)?void 0:d,signal:this.requestAbortTimeout!==void 0?AbortSignal.timeout(this.requestAbortTimeout):void 0});return!g.ok&&!_.includes(g.status)&&await this._handleErrorResponse(g),g}async _handleErrorResponse(h){let l=await h.text(),c=h.headers.get("x-amz-error-code")||"Unknown",d=h.headers.get("x-amz-error-message")||h.statusText;throw this._log("error",`${se}Request failed with status ${h.status}: ${c} - ${d},err body: ${l}`),new Error(`${se}Request failed with status ${h.status}: ${c} - ${d}, err body: ${l}`)}_buildCanonicalQueryString(h){return Object.keys(h).length<1?"":Object.keys(h).sort().map(l=>`${encodeURIComponent(l)}=${encodeURIComponent(h[l])}`).join("&")}async _getSignatureKey(h){let l=await Me(`AWS4${this.secretAccessKey}`,h),c=await Me(l,this.region),d=await Me(c,Ze);return Me(d,Xe)}},We=async h=>{let l=Tt("sha256");return l.update(h),l.digest("hex")},Me=async(h,l,c)=>{let d=Et("sha256",h);return d.update(l),d.digest(c)},He=h=>{let l={'"':"",""":"",""":"",""":"",""":""};return h.replace(/^("|"|")|("|"|")$/g,c=>l[c])},Be=h=>{let l=g=>g.replace(/"/g,'"').replace(/'/g,"'").replace(/</g,"<").replace(/>/g,">").replace(/&/g,"&"),c={},d=/<(\w)([-\w]+)(?:\/|[^>]*>((?:(?!<\1)[\s\S])*)<\/\1\2)>/gm,_;for(;_=d.exec(h);){let[,g,O,T]=_,v=g.toLowerCase()+O,R=T!=null?Be(T):!0;typeof R=="string"?c[v]=He(l(R)):Array.isArray(c[v])?c[v].push(R):c[v]=c[v]!=null?[c[v],R]:Xt[v]?[R]:R}return Object.keys(c).length?c:l(h)},Ot=Lt(Ht(),1),z={MISSING_ARGUMENT:"MISSING_ARGUMENT",COLLECTION_EXISTS:"COLLECTION_EXISTS",CREATE_COLLECTION_ERROR:"CREATE_COLLECTION_ERROR",RENAME_COLLECTION_ERROR:"RENAME_COLLECTION_ERROR",REMOVE_COLLECTION_ERROR:"REMOVE_COLLECTION_ERROR",UPDATE_COLLECTION_SCHEMA_ERROR:"UPDATE_COLLECTION_SCHEMA_ERROR",COLLECTION_NOT_FOUND:"COLLECTION_NOT_FOUND",SCHEMA_VALIDATION_ERROR:"SCHEMA_VALIDATION_ERROR",DOCUMENT_VALIDATION_ERROR:"DOCUMENT_VALIDATION_ERROR",S3_OPERATION_ERROR:"S3_OPERATION_ERROR",FIND_ERROR:"FIND_ERROR",FIND_ONE_ERROR:"FIND_ONE_ERROR",SAVE_DATA_ERROR:"SAVE_DATA_ERROR",INSERT_ERROR:"INSERT_ERROR",UPDATE_ERROR:"UPDATE_ERROR",UPDATE_ONE_ERROR:"UPDATE_ONE_ERROR",DELETE_ERROR:"DELETE_ERROR",COUNT_ERROR:"COUNT_ERROR",UNKNOWN_ERROR:"UNKNOWN_ERROR"},oe=class extends Error{constructor(h,l=z.UNKNOWN_ERROR){super(`lowstorageError: ${h} :: code: ${l}`),this.name=this.constructor.name,this.code=l,Error.captureStackTrace(this,this.constructor)}},Ne=class extends oe{constructor(h,l=z.SCHEMA_VALIDATION_ERROR){super(h,z.SCHEMA_VALIDATION_ERROR)}},Le=class extends oe{constructor(h,l=z.DOCUMENT_VALIDATION_ERROR){super(h,z.DOCUMENT_VALIDATION_ERROR)}},le=class extends oe{constructor(h,l){super(`S3 ${l} operation failed: ${h}`,z.S3_OPERATION_ERROR)}},Ye=(h,l)=>Object.keys(l).every(c=>h[c]===l[c]),tr=async()=>typeof et<"u"&&typeof et=="function"?et():typeof crypto<"u"&&typeof crypto=="object"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(h){var l=Math.random()*16|0,c=h==="x"?l:l&3|8;return c.toString(16)}),Qe=h=>{let l={name:"_id",type:"string",size:16,logicalType:"UUID"};return typeof h>"u"||h===null||("type"in h&&h.type==="record"&&"fields"in h&&Array.isArray(h.fields)?h.fields.some(d=>d.name==="_id")||h.fields.unshift(l):"type"in h&&h.type==="array"&&"items"in h&&h.items!==null&&typeof h.items=="object"&&"type"in h.items&&h.items.type==="record"&&"fields"in h.items&&Array.isArray(h.items.fields)&&(h.items.fields.some(d=>d.name==="_id")||h.items.fields.unshift(l))),h},Y="lowstorage",Oe="/",Rt="lowstorage",Re=".avro",rr=1024*1024,_t=5*rr,it=Buffer.from("","utf8"),tt=(h=z.DOCUMENT_VALIDATION_ERROR)=>{throw new Le(`${Y}: Invalid document or schema ${h}`)},Ve=(h="")=>{if(h.trim()===""||h===null||typeof h>"u"||h.length>255||h===null)throw new oe(`${Y}: Collection name is required, null or too long`,z.MISSING_ARGUMENT)},yr=class{constructor(h){this._checkArgs=l=>{let c=["accessKeyId","secretAccessKey","endpoint","bucketName"];for(let d of c)if(!l[d])throw new oe(`${Y}: ${d} is required`,z.MISSING_ARGUMENT)},this.s3=()=>this._s3,this._checkArgs(h),this._schemas=new Map,this._s3=new er(h),this._dirPrefix=h.dirPrefix||Rt,this._avroParse=Ot.Type}async listCollections(){try{let h=await this._s3.list(Oe,this._dirPrefix);return Array.isArray(h)?h.map(l=>l.key.slice(this._dirPrefix.length+1,-Re.length)):typeof h=="object"&&h!==null&&"keyCount"in h&&h.keyCount==="0"?[]:[]}catch(h){throw new le(`${Y}: ${h.message}`,z.S3_OPERATION_ERROR)}}async collectionExists(h=""){try{return Ve(h),!!await this._s3.fileExists(`${this._dirPrefix}${Oe}${h}${Re}`)}catch(l){if(l.message.includes("Not Found"))return!1;throw new oe(`${Y}: ${l.message}`,z.COLLECTION_NOT_FOUND)}}async createCollection(h="",l,c=[]){try{if(Ve(h),!await this.collectionExists(h)){if(typeof l<"u"&&l!==null)try{if(!this._avroParse.forSchema(l))throw new Ne(`${Y}: Schema is invalid: ${l} ${z.SCHEMA_VALIDATION_ERROR}`)}catch{throw new Ne(`${Y}: Schema is invalid: ${l}`,z.SCHEMA_VALIDATION_ERROR)}if(c.length>0&&l){let _=this._avroParse.forSchema({type:"array",items:l});await this._s3.put(`${this._dirPrefix}${Oe}${h}${Re}`,_.toBuffer(c))}else await this._s3.put(`${this._dirPrefix}${Oe}${h}${Re}`,it);return this.collection(h,l,!1)}throw new oe(`${Y}: Collection ${h} already exists`,z.COLLECTION_EXISTS)}catch(d){throw d instanceof oe?d:new oe(`${Y}: ${d.message}`,z.CREATE_COLLECTION_ERROR)}}async removeCollection(h=""){try{if(Ve(h),await this.collectionExists(h)){await this._s3.delete(`${this._dirPrefix}${Oe}${h}${Re}`);let c=await this.collectionExists(h);if(typeof c=="boolean"){if(!c)return this._schemas.delete(h),!0;throw new oe(`${Y}: Failed to delete collection ${h}`,z.S3_OPERATION_ERROR)}throw new le(`${Y}: Failed to delete collection ${h}`,z.S3_OPERATION_ERROR)}throw new oe(`${Y}: Collection ${h} does not exist`,z.REMOVE_COLLECTION_ERROR)}catch(l){throw l instanceof le?l:new oe(`${Y}: Failed to remove collection: ${l.message}`,z.REMOVE_COLLECTION_ERROR)}}async collection(h="",l,c=!0){try{Ve(h);let d=`${this._dirPrefix}${Oe}${h}${Re}`;if(!await this._s3.fileExists(d)){if(!c)throw new oe(`${Y}: Collection ${h} does not exist`,z.COLLECTION_NOT_FOUND);await this._s3.put(d,it)}let g=l||this._schemas.get(h)||void 0;return new ir(h,g,this._s3,this._dirPrefix)}catch(d){throw d.message.includes("unknown type")?new Ne(`${Y}: Schema input is invalid: ${d.message}`,z.SCHEMA_VALIDATION_ERROR):new oe(`${Y}: ${d.message}`,z.COLLECTION_NOT_FOUND)}}},ir=class St{constructor(l="",c,d,_=Rt,g=!1,O=_t){this.getProps=()=>({colName:this._colName,s3:this._s3,schema:this._schema,avroParse:this._avroParse,avroType:this._avroType,dirPrefix:this._dirPrefix,safeWrite:this._safeWrite,chunkSize:this._chunkSize}),this.setProps=T=>{this._colName=T.colName,this._schema=T.schema,this._s3=T.s3,this._avroParse=T.avroParse,this._avroType=T.avroType,this._dirPrefix=T.dirPrefix,this._safeWrite=T.safeWrite,this._chunkSize=T.chunkSize},this.setSafeWrite=T=>{this._safeWrite=T},this.getSafeWrite=()=>this._safeWrite,this.getAvroSchema=()=>this._schema,this.setAvroSchema=T=>{try{this._schema=Qe(T),this._avroType=typeof T>"u"?null:this._avroParse.forSchema(T)}catch(v){throw new oe(`${Y}: ${v.message}`,z.SCHEMA_VALIDATION_ERROR)}},this.inferAvroSchema=(T,v="record")=>{Array.isArray(T)&&(T=T[0]);let C=this._avroParse.forValue(T).schema();return Qe(C)},this._colName=l.trim(),this._s3=d,this._schema=Qe(c),this._dirPrefix=_,this._safeWrite=g,this._chunkSize=O||_t,this._s3.setMaxRequestSizeInBytes(this._chunkSize),this._avroParse=Ot.Type,this._lastETag="",this._dataCache=[],this._avroType=typeof c>"u"?null:this._avroParse.forSchema(c),this._key=`${this._dirPrefix}${Oe}${this._colName}${Re}`}async _loadData(){try{if(this._avroType===null||typeof this._avroType>"u")throw new oe(`${Y}: Missing type definition. Configure before operations `,z.SCHEMA_VALIDATION_ERROR);let{etag:l,data:c}=await this._s3.getObjectWithETag(this._key,{"if-none-match":this._lastETag});if(c===null)return this._dataCache;this._lastETag=l===null?this._lastETag:l;let d=this._avroParse.forSchema({type:"array",items:this._avroType});if(c.length0?d.fromBuffer(Buffer.from(c,"utf8")):[],this._dataCache;let _=this._chunkSize,g=[Buffer.from(c,"utf8")],O=!0;for(;O;){let v=await this._s3.getResponse(this._key,!1,_,_+this._chunkSize),R=await v.text();g.push(Buffer.from(R,"utf8")),_+=this._chunkSize,parseInt(v.headers.get("content-length")||R.length.toString())-1)return this._dataCache=[],this._dataCache;throw new le(`${Y}: Failed to load data: ${l.message}`,z.S3_OPERATION_ERROR)}}async _saveData(l){try{if(this._avroType===null||typeof this._avroType>"u")throw new oe(`${Y}: Missing type definition. Configure before operations `,z.SCHEMA_VALIDATION_ERROR);let c=this._avroParse.forSchema({type:"array",items:this._avroType}),d=l.length>0?c.toBuffer(l):it;if(this._safeWrite&&this._lastETag!==""){let O=await this._s3.getEtag(this._key);if(O!==null&&O!==this._lastETag)return!1}let _=await this._s3.put(this._key,d);if(typeof _=="object"&&"status"in _&&_.status!==200)throw new le(`${Y}: Failed to save data`,z.S3_OPERATION_ERROR);let g=_.headers?.get("etag")||"";return g&&g.length>0&&(this._lastETag=this._s3.sanitizeETag(g),this._dataCache=l),!0}catch(c){throw c instanceof le?c:new oe(`${Y}: ${c.message}`,z.SAVE_DATA_ERROR)}}async insert(l,c){try{if(l==null)throw new oe(`${Y}: Document is required for insert`,z.INSERT_ERROR);if(typeof l!="object"&&!Array.isArray(l))throw new Le(`${Y}: Document must be an object or an array`,z.DOCUMENT_VALIDATION_ERROR);let d=Array.isArray(l)?l:[l],_=c?Qe(c):this._schema||this.inferAvroSchema(d[0]),g=this._avroParse.forSchema(_);if(!g)throw new Ne(`${Y}: Schema is required - Pass a schema to the insert method`,z.SCHEMA_VALIDATION_ERROR);this._avroType=g;let O=await this._loadData();for(let v of d){if(typeof v!="object"||v===null)throw new Le(`${Y}: Invalid input: input must be an object or an array of objects`,z.DOCUMENT_VALIDATION_ERROR);if(v._id=v._id||await tr(),this._avroType.isValid(v,{errorHook:tt,noUndeclaredFields:!0})===!0)O.push(v);else throw new Le(`${Y}: Invalid document or schema`,z.DOCUMENT_VALIDATION_ERROR)}if(!await this._saveData(O))throw new le(`${Y}: Failed to insert document`,z.S3_OPERATION_ERROR);return this.setAvroSchema(_),d}catch(d){throw d.message.includes("unknown type")?new Ne(`${Y}: Schema input is invalid: ${d.message}`,z.SCHEMA_VALIDATION_ERROR):d instanceof oe?d:new oe(`${Y} Insert operation failed: ${d.message}`,z.INSERT_ERROR)}}async find(l={},c={}){try{if(l==null)throw new oe(`${Y}: Query is required for update`,z.MISSING_ARGUMENT);let d=await this._loadData(),_=c.skip!==void 0?parseInt(String(c.skip),10):0,g=c.limit!==void 0?_+parseInt(String(c.limit),10):void 0;return d.filter(T=>Ye(T,l)).slice(_,g)}catch(d){throw new oe(`${Y}: Find operation failed: ${d.message}`,z.FIND_ERROR)}}async findOne(l={}){try{if(l===null)throw new oe(`${Y}: Query cannot be null`,z.INVALID_ARGUMENT);return(await this.find(l,{limit:1}))[0]||null}catch(c){throw c instanceof oe?c:new oe(`${Y}: FindOne operation failed: ${c.message}`,z.FIND_ONE_ERROR)}}async update(l={},c={},d={}){try{if(l==null||c===void 0||c===null)throw new oe(`${Y}: Query and update values are required for update`,z.MISSING_ARGUMENT);if(!this._avroType)throw new Ne(`${Y}: Schema is not defined for this collection`,z.SCHEMA_VALIDATION_ERROR);let _=await this._loadData();if(_.length===0)return 0;let g=0;for(let O=0;O<_.length;O++)if(Ye(_[O],l)){let T={..._[O],...c};if(this._avroType.isValid(T,{errorHook:tt,noUndeclaredFields:!0})===!0)_[O]=T,g++;else throw new Le(`${Y}: Invalid document or schema`,z.DOCUMENT_VALIDATION_ERROR)}if(g>0){if(!await this._saveData(_))throw new le(`${Y}: Failed to update document`,z.S3_OPERATION_ERROR)}else if(d&&"upsert"in d&&d.upsert){if(!await this.insert(c))throw new le(`${Y}: Failed to update document`,z.S3_OPERATION_ERROR);g=1}return g}catch(_){throw _ instanceof le?_:new oe(`${Y}: Update operation failed: ${_.message}`,z.UPDATE_ERROR)}}async updateOne(l={},c={},d={}){try{if(l==null||c===void 0||c===null)throw new oe(`${Y}: Query is required`,z.MISSING_ARGUMENT);if(!this._avroType)throw new Ne(`${Y}: Schema is not defined for this collection`,z.SCHEMA_VALIDATION_ERROR);let _=await this._loadData();if(_.length===0)return 0;let g=_.findIndex(O=>Ye(O,l));if(g!==-1){let O={..._[g],...c};if(this._avroType.isValid(O,{errorHook:tt,noUndeclaredFields:!0})===!0){if(_[g]=O,!await this._saveData(_))throw new le(`${Y}: Failed to update document`,z.S3_OPERATION_ERROR);return 1}else throw new Le(`${Y}: Invalid document or schema`,z.DOCUMENT_VALIDATION_ERROR)}if(d&&"upsert"in d&&d.upsert){if(!await this.insert(c))throw new le(`${Y}: Failed to update document`,z.S3_OPERATION_ERROR);return 1}return 0}catch(_){throw _ instanceof oe?_:new oe(`${Y}: UpdateOne operation failed: ${_.message}`,z.UPDATE_ONE_ERROR)}}async delete(l={}){try{if(l==null)throw new oe(`${Y}: Query is required`,z.MISSING_ARGUMENT);let c=await this._loadData();if(c.length===0)return 0;let d=c.length,_=c.filter(O=>!Ye(O,l));if(!await this._saveData(_))throw new le(`${Y}: Failed to delete document`,z.S3_OPERATION_ERROR);return d-_.length}catch(c){throw c instanceof le?c:new oe(`${Y}: Delete operation failed: ${c.message}`,z.DELETE_ERROR)}}async deleteAll(){try{let c=(await this._loadData()).length;if(!await this._saveData([]))throw new le(`${Y}: Failed to delete document`,z.S3_OPERATION_ERROR);return c}catch(l){throw l instanceof le?l:new oe(`${Y}: Delete operation failed: ${l.message}`,z.DELETE_ERROR)}}async count(l={}){try{return(await this.find(l)).length}catch(c){throw new oe(`${Y}: Count operation failed: ${c.message}`,z.COUNT_ERROR)}}async renameCollection(l,c=this._schema){try{if(Ve(l),await this._s3.fileExists(`${this._dirPrefix}${Oe}${l}${Re}`))throw new oe(`${Y}: Collection ${l} already exists`,z.COLLECTION_EXISTS);let _=c||this.getAvroSchema(),g=await this._loadData(),O=new St(l,_,this._s3,this._dirPrefix,this._safeWrite,this._chunkSize);return await O._saveData(g),await this._s3.delete(`${this._dirPrefix}${Oe}${this._colName}${Re}`),O}catch(d){throw d instanceof oe?d:new oe(`${Y}: Rename collection failed: ${d.message}`,z.RENAME_COLLECTION_ERROR)}}};export{yr as lowstorage,oe as lowstorageError,z as lowstorage_ERROR_CODES}; //# sourceMappingURL=lowstorage.js.map diff --git a/build/lowstorage.js.map b/build/lowstorage.js.map index bb89df1..931dd74 100644 --- a/build/lowstorage.js.map +++ b/build/lowstorage.js.map @@ -1,7 +1,7 @@ { "version": 3, "sources": [""], - "sourcesContent": ["import __import_UTIL from \"util\";\nimport __import_BUFFER from \"buffer\";\n\nvar __create = Object.create;\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __getProtoOf = Object.getPrototypeOf;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __require = /* @__PURE__ */ ((x2) => typeof require !== \"undefined\" ? require : typeof Proxy !== \"undefined\" ? new Proxy(x2, {\n get: (a, b2) => (typeof require !== \"undefined\" ? require : a)[b2]\n}) : x2)(function(x2) {\n if (typeof require !== \"undefined\") return require.apply(this, arguments);\n throw Error('Dynamic require of \"' + x2 + '\" is not supported');\n});\nvar __commonJS = (cb, mod) => function __require2() {\n return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(\n // If the importer is in node compatibility mode or this is not an ESM\n // file that has been converted to a CommonJS file using a Babel-\n // compatible transform (i.e. \"__esModule\" has not been set), then set\n // \"default\" to the CommonJS \"module.exports\" for node compatibility.\n isNodeMode || !mod || !mod.__esModule ? __defProp(target, \"default\", { value: mod, enumerable: true }) : target,\n mod\n));\n\n// node_modules/@avro/types/lib/utils.js\nvar require_utils = __commonJS({\n \"node_modules/@avro/types/lib/utils.js\"(exports, module) {\n \"use strict\";\n var POOL = new BufferPool(4096);\n function newBuffer(size) {\n if (typeof Buffer.alloc == \"function\") {\n return Buffer.alloc(size);\n } else {\n return new Buffer(size);\n }\n }\n function bufferFrom(data, enc) {\n if (typeof Buffer.from == \"function\") {\n return Buffer.from(data, enc);\n } else {\n return new Buffer(data, enc);\n }\n }\n function capitalize(s) {\n return s.charAt(0).toUpperCase() + s.slice(1);\n }\n function compare(n1, n2) {\n return n1 === n2 ? 0 : n1 < n2 ? -1 : 1;\n }\n function jsonEquals(val1, val2) {\n if (typeof val1 != typeof val2) {\n return false;\n }\n switch (typeof val1) {\n case \"number\":\n case \"string\":\n return val1 === val2;\n case \"object\":\n if (val1 === null || val2 === null) {\n return val1 === val2;\n }\n var i, l;\n if (Array.isArray(val1)) {\n if (!Array.isArray(val2) || val1.length !== val2.length) {\n return false;\n }\n for (i = 0, l = val1.length; i < l; i++) {\n if (!jsonEquals(val1[i], val2[i])) {\n return false;\n }\n }\n return true;\n }\n var keys1 = Object.keys(val1).sort();\n var keys2 = Object.keys(val2).sort();\n if (!jsonEquals(keys1, keys2)) {\n return false;\n }\n for (i = 0, l = keys1.length; i < l; i++) {\n var key = keys1[i];\n if (!jsonEquals(val1[key], val2[key])) {\n return false;\n }\n }\n return true;\n default:\n return false;\n }\n }\n function toMap(arr, fn) {\n var obj = {};\n var i, elem;\n for (i = 0; i < arr.length; i++) {\n elem = arr[i];\n obj[fn(elem)] = elem;\n }\n return obj;\n }\n function hasDuplicates(arr, fn) {\n var obj = {};\n var i, l, elem;\n for (i = 0, l = arr.length; i < l; i++) {\n elem = arr[i];\n if (fn) {\n elem = fn(elem);\n }\n if (obj[elem]) {\n return true;\n }\n obj[elem] = true;\n }\n return false;\n }\n function isType() {\n var l = arguments.length;\n if (!l) {\n return false;\n }\n var any = arguments[0];\n if (!any || typeof any.createResolver != \"function\" || typeof any._createBranchConstructor != \"function\") {\n return false;\n }\n if (l === 1) {\n return true;\n }\n var typeName = any.typeName;\n var i;\n for (i = 1; i < l; i++) {\n if (typeName.indexOf(arguments[i]) === 0) {\n return true;\n }\n }\n return false;\n }\n function unqualifyName(name) {\n var parts = name.split(\".\");\n return parts[parts.length - 1];\n }\n function abstractFunction() {\n throw new Error(\"abstract\");\n }\n function BufferPool(len) {\n this._len = len | 0;\n this._pos = 0;\n this._slab = newBuffer(this._len);\n }\n BufferPool.prototype.alloc = function(len) {\n var maxLen = this._len;\n if (len > maxLen) {\n return newBuffer(len);\n }\n if (this._pos + len > maxLen) {\n this._slab = newBuffer(maxLen);\n this._pos = 0;\n }\n return this._slab.slice(this._pos, this._pos += len);\n };\n function Tap(buf, pos) {\n this.buf = buf;\n this.pos = pos | 0;\n if (this.pos < 0) {\n throw new Error(\"negative offset\");\n }\n }\n Tap.prototype.isValid = function() {\n return this.pos <= this.buf.length;\n };\n Tap.prototype.readBoolean = function() {\n return !!this.buf[this.pos++];\n };\n Tap.prototype.skipBoolean = function() {\n this.pos++;\n };\n Tap.prototype.writeBoolean = function(b2) {\n this.buf[this.pos++] = !!b2;\n };\n Tap.prototype.readInt = Tap.prototype.readLong = function() {\n var n = 0;\n var k2 = 0;\n var buf = this.buf;\n var b2, h, f2, fk;\n do {\n b2 = buf[this.pos++];\n h = b2 & 128;\n n |= (b2 & 127) << k2;\n k2 += 7;\n } while (h && k2 < 28);\n if (h) {\n f2 = n;\n fk = 268435456;\n do {\n b2 = buf[this.pos++];\n f2 += (b2 & 127) * fk;\n fk *= 128;\n } while (b2 & 128);\n return (f2 % 2 ? -(f2 + 1) : f2) / 2;\n }\n return n >> 1 ^ -(n & 1);\n };\n Tap.prototype.skipInt = Tap.prototype.skipLong = function() {\n var buf = this.buf;\n while (buf[this.pos++] & 128) {\n }\n };\n Tap.prototype.writeInt = Tap.prototype.writeLong = function(n) {\n var buf = this.buf;\n var f2, m2;\n if (n >= -1073741824 && n < 1073741824) {\n m2 = n >= 0 ? n << 1 : ~n << 1 | 1;\n do {\n buf[this.pos] = m2 & 127;\n m2 >>= 7;\n } while (m2 && (buf[this.pos++] |= 128));\n } else {\n f2 = n >= 0 ? n * 2 : -n * 2 - 1;\n do {\n buf[this.pos] = f2 & 127;\n f2 /= 128;\n } while (f2 >= 1 && (buf[this.pos++] |= 128));\n }\n this.pos++;\n };\n Tap.prototype.readFloat = function() {\n var buf = this.buf;\n var pos = this.pos;\n this.pos += 4;\n if (this.pos > buf.length) {\n return;\n }\n return this.buf.readFloatLE(pos);\n };\n Tap.prototype.skipFloat = function() {\n this.pos += 4;\n };\n Tap.prototype.writeFloat = function(f2) {\n var buf = this.buf;\n var pos = this.pos;\n this.pos += 4;\n if (this.pos > buf.length) {\n return;\n }\n return this.buf.writeFloatLE(f2, pos);\n };\n Tap.prototype.readDouble = function() {\n var buf = this.buf;\n var pos = this.pos;\n this.pos += 8;\n if (this.pos > buf.length) {\n return;\n }\n return this.buf.readDoubleLE(pos);\n };\n Tap.prototype.skipDouble = function() {\n this.pos += 8;\n };\n Tap.prototype.writeDouble = function(d) {\n var buf = this.buf;\n var pos = this.pos;\n this.pos += 8;\n if (this.pos > buf.length) {\n return;\n }\n return this.buf.writeDoubleLE(d, pos);\n };\n Tap.prototype.readFixed = function(len) {\n var pos = this.pos;\n this.pos += len;\n if (this.pos > this.buf.length) {\n return;\n }\n var fixed = POOL.alloc(len);\n this.buf.copy(fixed, 0, pos, pos + len);\n return fixed;\n };\n Tap.prototype.skipFixed = function(len) {\n this.pos += len;\n };\n Tap.prototype.writeFixed = function(buf, len) {\n len = len || buf.length;\n var pos = this.pos;\n this.pos += len;\n if (this.pos > this.buf.length) {\n return;\n }\n buf.copy(this.buf, pos, 0, len);\n };\n Tap.prototype.readBytes = function() {\n return this.readFixed(this.readLong());\n };\n Tap.prototype.skipBytes = function() {\n var len = this.readLong();\n this.pos += len;\n };\n Tap.prototype.writeBytes = function(buf) {\n var len = buf.length;\n this.writeLong(len);\n this.writeFixed(buf, len);\n };\n if (typeof Buffer.prototype.utf8Slice == \"function\") {\n Tap.prototype.readString = function() {\n var len = this.readLong();\n var pos = this.pos;\n var buf = this.buf;\n this.pos += len;\n if (this.pos > buf.length) {\n return;\n }\n return this.buf.utf8Slice(pos, pos + len);\n };\n } else {\n Tap.prototype.readString = function() {\n var len = this.readLong();\n var pos = this.pos;\n var buf = this.buf;\n this.pos += len;\n if (this.pos > buf.length) {\n return;\n }\n return this.buf.slice(pos, pos + len).toString();\n };\n }\n Tap.prototype.skipString = function() {\n var len = this.readLong();\n this.pos += len;\n };\n Tap.prototype.writeString = function(s) {\n var len = Buffer.byteLength(s);\n var buf = this.buf;\n this.writeLong(len);\n var pos = this.pos;\n this.pos += len;\n if (this.pos > buf.length) {\n return;\n }\n if (len > 64) {\n this._writeUtf8(s, len);\n } else {\n var i, l, c1, c2;\n for (i = 0, l = len; i < l; i++) {\n c1 = s.charCodeAt(i);\n if (c1 < 128) {\n buf[pos++] = c1;\n } else if (c1 < 2048) {\n buf[pos++] = c1 >> 6 | 192;\n buf[pos++] = c1 & 63 | 128;\n } else if ((c1 & 64512) === 55296 && ((c2 = s.charCodeAt(i + 1)) & 64512) === 56320) {\n c1 = 65536 + ((c1 & 1023) << 10) + (c2 & 1023);\n i++;\n buf[pos++] = c1 >> 18 | 240;\n buf[pos++] = c1 >> 12 & 63 | 128;\n buf[pos++] = c1 >> 6 & 63 | 128;\n buf[pos++] = c1 & 63 | 128;\n } else {\n buf[pos++] = c1 >> 12 | 224;\n buf[pos++] = c1 >> 6 & 63 | 128;\n buf[pos++] = c1 & 63 | 128;\n }\n }\n }\n };\n if (typeof Buffer.prototype.utf8Write == \"function\") {\n Tap.prototype._writeUtf8 = function(str, len) {\n this.buf.utf8Write(str, this.pos - len, len);\n };\n } else {\n Tap.prototype._writeUtf8 = function(str, len) {\n this.buf.write(str, this.pos - len, len, \"utf8\");\n };\n }\n if (typeof Buffer.prototype.latin1Write == \"function\") {\n Tap.prototype.writeBinary = function(str, len) {\n var pos = this.pos;\n this.pos += len;\n if (this.pos > this.buf.length) {\n return;\n }\n this.buf.latin1Write(str, pos, len);\n };\n } else if (typeof Buffer.prototype.binaryWrite == \"function\") {\n Tap.prototype.writeBinary = function(str, len) {\n var pos = this.pos;\n this.pos += len;\n if (this.pos > this.buf.length) {\n return;\n }\n this.buf.binaryWrite(str, pos, len);\n };\n } else {\n Tap.prototype.writeBinary = function(s, len) {\n var pos = this.pos;\n this.pos += len;\n if (this.pos > this.buf.length) {\n return;\n }\n this.buf.write(s, pos, len, \"binary\");\n };\n }\n Tap.prototype.matchBoolean = function(tap) {\n return this.buf[this.pos++] - tap.buf[tap.pos++];\n };\n Tap.prototype.matchInt = Tap.prototype.matchLong = function(tap) {\n var n1 = this.readLong();\n var n2 = tap.readLong();\n return n1 === n2 ? 0 : n1 < n2 ? -1 : 1;\n };\n Tap.prototype.matchFloat = function(tap) {\n var n1 = this.readFloat();\n var n2 = tap.readFloat();\n return n1 === n2 ? 0 : n1 < n2 ? -1 : 1;\n };\n Tap.prototype.matchDouble = function(tap) {\n var n1 = this.readDouble();\n var n2 = tap.readDouble();\n return n1 === n2 ? 0 : n1 < n2 ? -1 : 1;\n };\n Tap.prototype.matchFixed = function(tap, len) {\n return this.readFixed(len).compare(tap.readFixed(len));\n };\n Tap.prototype.matchBytes = Tap.prototype.matchString = function(tap) {\n var l1 = this.readLong();\n var p1 = this.pos;\n this.pos += l1;\n var l2 = tap.readLong();\n var p2 = tap.pos;\n tap.pos += l2;\n var b1 = this.buf.slice(p1, this.pos);\n var b2 = tap.buf.slice(p2, tap.pos);\n return b1.compare(b2);\n };\n Tap.prototype.unpackLongBytes = function() {\n var res = newBuffer(8);\n var n = 0;\n var i = 0;\n var j2 = 6;\n var buf = this.buf;\n var b2, neg;\n b2 = buf[this.pos++];\n neg = b2 & 1;\n res.fill(0);\n n |= (b2 & 127) >> 1;\n while (b2 & 128) {\n b2 = buf[this.pos++];\n n |= (b2 & 127) << j2;\n j2 += 7;\n if (j2 >= 8) {\n j2 -= 8;\n res[i++] = n;\n n >>= 8;\n }\n }\n res[i] = n;\n if (neg) {\n invert(res, 8);\n }\n return res;\n };\n Tap.prototype.packLongBytes = function(buf) {\n var neg = (buf[7] & 128) >> 7;\n var res = this.buf;\n var j2 = 1;\n var k2 = 0;\n var m2 = 3;\n var n;\n if (neg) {\n invert(buf, 8);\n n = 1;\n } else {\n n = 0;\n }\n var parts = [\n buf.readUIntLE(0, 3),\n buf.readUIntLE(3, 3),\n buf.readUIntLE(6, 2)\n ];\n while (m2 && !parts[--m2]) {\n }\n while (k2 < m2) {\n n |= parts[k2++] << j2;\n j2 += 24;\n while (j2 > 7) {\n res[this.pos++] = n & 127 | 128;\n n >>= 7;\n j2 -= 7;\n }\n }\n n |= parts[m2] << j2;\n do {\n res[this.pos] = n & 127;\n n >>= 7;\n } while (n && (res[this.pos++] |= 128));\n this.pos++;\n if (neg) {\n invert(buf, 8);\n }\n };\n function invert(buf, len) {\n while (len--) {\n buf[len] = ~buf[len];\n }\n }\n module.exports = {\n Tap,\n abstractFunction,\n bufferFrom,\n capitalize,\n compare,\n hasDuplicates,\n isType,\n jsonEquals,\n newBuffer,\n toMap,\n unqualifyName\n };\n }\n});\n\n// node_modules/@avro/types/lib/values.js\nvar require_values = __commonJS({\n \"node_modules/@avro/types/lib/values.js\"(exports, module) {\n \"use strict\";\n var utils = require_utils();\n var util = __import_UTIL;\n var f2 = util.format;\n function fromJSON(any, type, opts) {\n return clone(\"FROM_JSON\", any, type, opts);\n }\n function fromDefaultJSON(any, type, opts) {\n return clone(\"FROM_DEFAULT_JSON\", any, type, opts);\n }\n function toJSON(any, type, opts) {\n return clone(\"TO_JSON\", any, type, opts);\n }\n function clone(mode, any, type, opts) {\n return new Cloner(mode, opts).clone(any, type, []).build(type);\n }\n function Builder() {\n this.value = void 0;\n this.errors = [];\n }\n Builder.prototype.isOk = function() {\n return !this.errors.length;\n };\n Builder.prototype.build = function(type) {\n if (!this.errors.length) {\n return this.value;\n }\n var details = [];\n var i, l;\n for (i = 0, l = this.errors.length; i < l; i++) {\n details.push(f2(\"\t%s\", this.errors[i].message));\n }\n var msg = f2(\n \"%s error(s) when expecting %s:\\n%s\",\n this.errors.length,\n typeInfo(type),\n details.join(\"\\n\")\n );\n var err = new Error(msg);\n err.code = \"ERR_AVRO_INCOMPATIBLE_VALUE\";\n err.type = type;\n err.errors = this.errors;\n throw err;\n };\n Builder.prototype.addError = function(desc, val, type, path) {\n var info = typeInfo(type);\n var msg = f2(\"$%s has %s but %s: %j\", joinPath(path), info, desc, val);\n var err = new Error(msg);\n err.value = val;\n err.expectedType = type;\n err.path = path;\n this.errors.push(err);\n };\n Builder.prototype.copyErrorsFrom = function(builder) {\n if (builder.errors.length) {\n this.errors = this.errors.concat(builder.errors);\n }\n };\n function typeInfo(type) {\n if (utils.isType(type, \"union\")) {\n var names = type.types.map(function(type2) {\n return type2.branchName;\n });\n return f2(\"a type among %s\", names.join(\", \"));\n } else if (utils.isType(type, \"logical\")) {\n return f2(\"type %s (%s)\", type.typeName, type.branchName);\n } else {\n return f2(\"type %s\", type.branchName);\n }\n }\n function Cloner(mode, opts) {\n opts = opts || {};\n this._mode = mode;\n this._allowUndeclaredFields = !!opts.allowUndeclaredFields;\n this._omitDefaultValues = !!opts.omitDefaultValues;\n if (this._omitDefaultValues && this._mode !== \"TO_JSON\") {\n throw new Error(\"invalid cloner options\");\n }\n }\n Cloner.prototype.clone = function(any, type, path) {\n if (!utils.isType(type)) {\n throw new Error(f2(\"not a type: %s\", type));\n }\n switch (type.typeName) {\n case \"array\":\n return this._onArray(any, type, path);\n case \"map\":\n return this._onMap(any, type, path);\n case \"error\":\n case \"record\":\n return this._onRecord(any, type, path);\n case \"union:unwrapped\":\n case \"union:wrapped\":\n return this._onUnion(any, type, path);\n default:\n return utils.isType(type, \"logical\") ? this._onLogical(any, type, path) : this._onPrimitive(any, type, path);\n }\n };\n Cloner.prototype._onLogical = function(any, type, path) {\n var builder = new Builder();\n var desc;\n if (this._mode === \"TO_JSON\") {\n try {\n builder.value = type._toValue(any);\n if (builder.value === void 0) {\n builder.addError(\"logical type encoding failed\", any, type, path);\n return builder;\n }\n } catch (err) {\n desc = f2(\"logical type encoding failed (%s)\", err.message);\n builder.addError(desc, any, type, path);\n return builder;\n }\n } else {\n builder.value = any;\n }\n builder = this.clone(builder.value, type.underlyingType, path);\n if (!builder.isOk()) {\n return builder;\n }\n if (this._mode !== \"TO_JSON\") {\n try {\n builder.value = type._fromValue(builder.value);\n } catch (err) {\n desc = f2(\"logical type decoding failed (%s)\", err.message);\n builder.addError(desc, any, type, path);\n }\n }\n return builder;\n };\n Cloner.prototype._onPrimitive = function(any, type, path) {\n var builder = new Builder();\n var isBufferType = utils.isType(type, \"bytes\", \"fixed\");\n var isAbstractLong = utils.isType(type, \"abstract:long\");\n var val = any;\n if (isBufferType && this._mode !== \"TO_JSON\") {\n if (typeof any != \"string\") {\n builder.addError(\"is not a string\", any, type, path);\n return builder;\n }\n val = utils.bufferFrom(any, \"binary\");\n }\n if (isAbstractLong && this._mode === \"TO_JSON\" && type.isValid(val)) {\n builder.value = type._toJSON(val);\n } else if (isAbstractLong && typeof val == \"number\") {\n builder.value = type._fromJSON(val);\n } else if (type.isValid(val)) {\n if (utils.isType(type, \"abstract:long\")) {\n if (this._mode === \"TO_JSON\") {\n builder.value = type._toJSON(val);\n } else {\n builder.value = type._fromJSON(val);\n }\n } else {\n builder.value = isBufferType ? utils.bufferFrom(val) : val;\n }\n } else {\n builder.addError(\"invalid value\", any, type, path);\n }\n if (this._mode === \"TO_JSON\" && isBufferType) {\n builder.value = builder.value.toString(\"binary\");\n }\n return builder;\n };\n Cloner.prototype._onRecord = function(any, type, path) {\n var builder = new Builder();\n var desc;\n if (!any || typeof any != \"object\") {\n builder.addError(\"is not a valid object\", any, type, path);\n return builder;\n }\n var i, l;\n if (!this._allowUndeclaredFields) {\n var extraFields = [];\n var fieldNames = Object.keys(any);\n var fieldName;\n for (i = 0, l = fieldNames.length; i < l; i++) {\n fieldName = fieldNames[i];\n if (!type.field(fieldName)) {\n extraFields.push(fieldName);\n }\n }\n if (extraFields.length) {\n desc = f2(\n \"contains %s undeclared field(s) (%s)\",\n extraFields.length,\n extraFields.join(\", \")\n );\n builder.addError(desc, any, type, path);\n }\n }\n var missingFields = [];\n var args = [void 0];\n var field, fieldAny, fieldVal, fieldPath, fieldValBuilder, defaultVal;\n for (i = 0, l = type.fields.length; i < l; i++) {\n field = type.fields[i];\n fieldAny = any[field.name];\n fieldPath = path.slice();\n fieldPath.push(field.name);\n defaultVal = field.defaultValue();\n fieldVal = void 0;\n if (fieldAny === void 0 && defaultVal === void 0) {\n missingFields.push(field.name);\n } else if (fieldAny === void 0) {\n if (this._mode === \"TO_JSON\" && !this._omitDefaultValues) {\n fieldVal = this.clone(defaultVal, field.type, fieldPath).value;\n }\n } else {\n fieldValBuilder = this.clone(fieldAny, field.type, fieldPath);\n builder.copyErrorsFrom(fieldValBuilder);\n fieldVal = fieldValBuilder.value;\n if (this._omitDefaultValues && fieldValBuilder.isOk() && defaultVal !== void 0 && !field.type.compare(fieldAny, defaultVal, { allowMaps: true })) {\n fieldVal = void 0;\n }\n }\n args.push(fieldVal);\n }\n if (missingFields.length) {\n desc = f2(\n \"is missing %s field(s) (%s)\",\n missingFields.length,\n missingFields.join()\n );\n builder.addError(desc, any, type, path);\n }\n if (builder.isOk()) {\n if (this._mode === \"TO_JSON\") {\n builder.value = {};\n for (i = 0, l = type.fields.length; i < l; i++) {\n fieldVal = args[i + 1];\n if (fieldVal !== void 0) {\n builder.value[type.fields[i].name] = fieldVal;\n }\n }\n } else {\n var Record = type.recordConstructor;\n builder.value = new (Record.bind.apply(Record, args))();\n }\n }\n return builder;\n };\n Cloner.prototype._onArray = function(any, type, path) {\n var builder = new Builder();\n if (!Array.isArray(any)) {\n builder.addError(\"is not an array\", any, type, path);\n return builder;\n }\n var val = [];\n var i, l, item;\n for (i = 0, l = any.length; i < l; i++) {\n item = any[i];\n var itemPath = path.slice();\n itemPath.push(i);\n var itemBuilder = this.clone(item, type.itemsType, itemPath);\n builder.copyErrorsFrom(itemBuilder);\n if (builder.isOk()) {\n val.push(itemBuilder.value);\n }\n }\n if (builder.isOk()) {\n builder.value = val;\n }\n return builder;\n };\n Cloner.prototype._onMap = function(any, type, path) {\n var builder = new Builder();\n if (!any || typeof any != \"object\") {\n builder.addError(\"is not a valid object\", any, type, path);\n return builder;\n }\n var val = {};\n var keys = Object.keys(any).sort();\n var i, l;\n for (i = 0, l = keys.length; i < l; i++) {\n var key = keys[i];\n var anyValue = any[key];\n var valuePath = path.slice();\n valuePath.push(key);\n var valueBuilder = this.clone(anyValue, type.valuesType, valuePath);\n builder.copyErrorsFrom(valueBuilder);\n if (builder.isOk()) {\n val[key] = valueBuilder.value;\n }\n }\n if (builder.isOk()) {\n builder.value = val;\n }\n return builder;\n };\n Cloner.prototype._onUnion = function(any, unionType, path) {\n var isWrapped = unionType.typeName === \"union:wrapped\";\n var builder = new Builder();\n if (any === null) {\n var i, l;\n for (i = 0, l = unionType.types.length; i < l; i++) {\n if (unionType.types[i].typeName === \"null\") {\n builder.value = null;\n return builder;\n }\n }\n builder.addError(\"is null\", any, unionType, path);\n return builder;\n }\n var branchType;\n if (this._mode === \"FROM_DEFAULT_JSON\") {\n branchType = unionType.types[0];\n if (branchType.typeName === \"null\") {\n builder.addError(\"does not match first (null)\", any, unionType, path);\n return builder;\n }\n any = branchType.wrap(any);\n } else if (this._mode === \"TO_JSON\" && !isWrapped) {\n branchType = unionType.branchType(any);\n if (!branchType) {\n builder.addError(\"is not a valid branch\", any, unionType, path);\n return builder;\n }\n any = branchType.wrap(any);\n }\n if (typeof any != \"object\") {\n builder.addError(\"is not an object\", any, unionType, path);\n return builder;\n }\n var keys = Object.keys(any);\n var reason;\n if (keys.length !== 1) {\n reason = f2(\"has %s keys (%s)\", keys.length, keys);\n builder.addError(reason, any, unionType, path);\n return builder;\n }\n var key = keys[0];\n branchType = unionType.type(key);\n if (!branchType) {\n reason = f2(\"contains an unknown branch (%s)\", key);\n builder.addError(reason, any, unionType, path);\n return builder;\n }\n var branchPath = path.slice();\n branchPath.push(key);\n var branchBuilder = this.clone(any[key], branchType, branchPath);\n builder.copyErrorsFrom(branchBuilder);\n if (branchBuilder.isOk()) {\n if (this._mode === \"TO_JSON\") {\n builder.value = {};\n builder.value[branchType.branchName] = branchBuilder.value;\n } else if (!isWrapped) {\n builder.value = branchBuilder.value;\n } else {\n builder.value = branchType.wrap(branchBuilder.value);\n }\n }\n return builder;\n };\n function joinPath(parts) {\n var strs = [];\n var i, l, part;\n for (i = 0, l = parts.length; i < l; i++) {\n part = parts[i];\n if (isNaN(part)) {\n strs.push(\".\" + part);\n } else {\n strs.push(\"[\" + part + \"]\");\n }\n }\n return strs.join(\"\");\n }\n module.exports = {\n fromJSON,\n fromDefaultJSON,\n toJSON\n };\n }\n});\n\n// node_modules/@avro/types/lib/types.js\nvar require_types = __commonJS({\n \"node_modules/@avro/types/lib/types.js\"(exports, module) {\n \"use strict\";\n var utils = require_utils();\n var values = require_values();\n var buffer = __import_BUFFER;\n var util = __import_UTIL;\n var Tap = utils.Tap;\n var debug = util.debuglog(\"avro:types\");\n var f2 = util.format;\n var TYPES = {\n \"array\": ArrayType,\n \"boolean\": BooleanType,\n \"bytes\": BytesType,\n \"double\": DoubleType,\n \"enum\": EnumType,\n \"error\": RecordType,\n \"fixed\": FixedType,\n \"float\": FloatType,\n \"int\": IntType,\n \"long\": LongType,\n \"map\": MapType,\n \"null\": NullType,\n \"record\": RecordType,\n \"string\": StringType\n };\n var NAME_PATTERN = /^[A-Za-z_][A-Za-z0-9_]*$/;\n var TAP = new Tap(new buffer.SlowBuffer(1024));\n var LOGICAL_TYPE = null;\n var UNDERLYING_TYPES = [];\n function Type(schema, opts, scope) {\n var type;\n if (LOGICAL_TYPE) {\n type = LOGICAL_TYPE;\n UNDERLYING_TYPES.push([LOGICAL_TYPE, this]);\n LOGICAL_TYPE = null;\n } else {\n type = this;\n }\n this.name = void 0;\n this.aliases = void 0;\n this.doc = schema && schema.doc ? \"\" + schema.doc : void 0;\n if (schema) {\n var name = schema.name;\n var namespace = schema.namespace === void 0 ? scope && scope.namespace : schema.namespace;\n if (name !== void 0) {\n name = maybeQualify(name, namespace);\n if (isPrimitive(name)) {\n throw new Error(f2(\"cannot rename primitive type: %j\", name));\n }\n var registry = opts && opts.registry;\n if (registry) {\n if (registry[name] !== void 0) {\n throw new Error(f2(\"duplicate type name: %s\", name));\n }\n registry[name] = type;\n }\n } else if (opts && opts.noAnonymousTypes) {\n throw new Error(f2(\"missing name property in schema: %j\", schema));\n }\n this.name = name;\n this.aliases = schema.aliases ? schema.aliases.map(function(s) {\n return maybeQualify(s, namespace);\n }) : [];\n }\n }\n Type.forSchema = function(schema, opts, scope) {\n opts = opts || {};\n opts.registry = opts.registry || {};\n scope = scope || Scope.forOptions(opts);\n var UnionType2 = function(wrapUnions) {\n if (wrapUnions === true) {\n wrapUnions = \"always\";\n } else if (wrapUnions === false) {\n wrapUnions = \"never\";\n } else if (wrapUnions === void 0) {\n wrapUnions = \"auto\";\n } else if (typeof wrapUnions == \"string\") {\n wrapUnions = wrapUnions.toLowerCase();\n }\n switch (wrapUnions) {\n case \"always\":\n return WrappedUnionType;\n case \"never\":\n return UnwrappedUnionType;\n case \"auto\":\n return void 0;\n default:\n throw new Error(f2(\"invalid wrap unions option: %j\", wrapUnions));\n }\n }(opts.wrapUnions);\n if (schema === null) {\n throw new Error('invalid type: null (did you mean \"null\"?)');\n }\n if (utils.isType(schema)) {\n return schema;\n }\n var type;\n if (opts.typeHook && (type = opts.typeHook(schema, opts, scope))) {\n if (!utils.isType(type)) {\n throw new Error(f2(\"invalid typehook return value: %j\", type));\n }\n return type;\n }\n if (typeof schema == \"string\") {\n schema = maybeQualify(schema, scope.namespace);\n type = opts.registry[schema];\n if (type) {\n return type;\n }\n if (isPrimitive(schema)) {\n return opts.registry[schema] = Type.forSchema({ type: schema }, opts);\n }\n throw new Error(f2(\"undefined type name: %s\", schema));\n }\n if (schema.logicalType && opts.logicalTypes && !LOGICAL_TYPE) {\n var DerivedType = opts.logicalTypes[schema.logicalType];\n if (DerivedType) {\n var registry = {};\n Object.keys(opts.registry).forEach(function(key) {\n registry[key] = opts.registry[key];\n });\n try {\n debug(\"instantiating logical type for %s\", schema.logicalType);\n return new DerivedType(schema, opts);\n } catch (err) {\n debug(\"failed to instantiate logical type for %s\", schema.logicalType);\n if (opts.assertLogicalTypes) {\n throw err;\n }\n LOGICAL_TYPE = null;\n opts.registry = registry;\n }\n }\n }\n if (Array.isArray(schema)) {\n var logicalType = LOGICAL_TYPE;\n LOGICAL_TYPE = null;\n var types = schema.map(function(obj, i) {\n return Type.forSchema(obj, opts, scope.child(i));\n });\n if (!UnionType2) {\n UnionType2 = isAmbiguous(types) ? WrappedUnionType : UnwrappedUnionType;\n }\n LOGICAL_TYPE = logicalType;\n type = new UnionType2(types, opts);\n } else {\n type = function(typeName) {\n var Type2 = TYPES[typeName];\n if (Type2 === void 0) {\n throw new Error(f2(\"unknown type: %j\", typeName));\n }\n return new Type2(schema, opts, scope);\n }(schema.type);\n }\n return type;\n };\n Type.forValue = function(val, opts, scope) {\n opts = opts || {};\n scope = scope || Scope.forOptions(opts);\n opts.emptyArrayType = opts.emptyArrayType || Type.forSchema({\n type: \"array\",\n items: \"null\"\n });\n if (opts.valueHook) {\n var type = opts.valueHook(val, opts, scope);\n if (type !== void 0) {\n if (!utils.isType(type)) {\n throw new Error(f2(\"invalid value hook return value: %j\", type));\n }\n return type;\n }\n }\n switch (typeof val) {\n case \"string\":\n return Type.forSchema(\"string\", opts, scope);\n case \"boolean\":\n return Type.forSchema(\"boolean\", opts, scope);\n case \"number\":\n if ((val | 0) === val) {\n return Type.forSchema(\"int\", opts, scope);\n } else if (Math.abs(val) < 9007199254740991) {\n return Type.forSchema(\"float\", opts, scope);\n }\n return Type.forSchema(\"double\", opts, scope);\n case \"object\":\n if (val === null) {\n return Type.forSchema(\"null\", opts, scope);\n } else if (Array.isArray(val)) {\n if (!val.length) {\n return opts.emptyArrayType;\n }\n return Type.forSchema({\n type: \"array\",\n items: Type.forTypes(\n val.map(function(v2, i) {\n return Type.forValue(v2, opts, scope.child(i));\n }),\n opts,\n scope.child(\"*\")\n )\n }, opts, scope);\n } else if (Buffer.isBuffer(val)) {\n return Type.forSchema(\"bytes\", opts, scope);\n }\n var fieldNames = Object.keys(val);\n if (fieldNames.some(function(s) {\n return !isValidName(s);\n })) {\n return Type.forSchema({\n type: \"map\",\n values: Type.forTypes(fieldNames.map(function(s) {\n return Type.forValue(val[s], opts, scope.child(s));\n }), opts, scope.child(\"*\"))\n }, opts, scope);\n }\n return Type.forSchema({\n type: \"record\",\n fields: fieldNames.map(function(s) {\n return { name: s, type: Type.forValue(val[s], opts, scope.child(s)) };\n })\n }, opts, scope);\n default:\n throw new Error(f2(\"cannot infer type from: %j\", val));\n }\n };\n Type.forTypes = function(types, opts, scope) {\n if (!types.length) {\n throw new Error(\"no types to combine\");\n }\n if (types.length === 1) {\n return types[0];\n }\n opts = opts || {};\n scope = scope || Scope.forOptions(opts);\n var expanded = [];\n var numWrappedUnions = 0;\n var isValidWrappedUnion = true;\n types.forEach(function(type) {\n switch (type.typeName) {\n case \"union:unwrapped\":\n isValidWrappedUnion = false;\n expanded = expanded.concat(type.types);\n break;\n case \"union:wrapped\":\n numWrappedUnions++;\n expanded = expanded.concat(type.types);\n break;\n case \"null\":\n expanded.push(type);\n break;\n default:\n isValidWrappedUnion = false;\n expanded.push(type);\n }\n });\n if (numWrappedUnions) {\n if (!isValidWrappedUnion) {\n throw new Error(\"cannot combine wrapped union\");\n }\n var branchTypes = {};\n expanded.forEach(function(type) {\n var name = type.branchName;\n var branchType = branchTypes[name];\n if (!branchType) {\n branchTypes[name] = type;\n } else if (!type.equals(branchType)) {\n throw new Error(\"inconsistent branch type\");\n }\n });\n var wrapUnions = opts.wrapUnions;\n var unionType;\n opts.wrapUnions = true;\n try {\n unionType = Type.forSchema(Object.keys(branchTypes).map(function(name) {\n return branchTypes[name];\n }), opts, scope);\n } catch (err) {\n opts.wrapUnions = wrapUnions;\n throw err;\n }\n opts.wrapUnions = wrapUnions;\n return unionType;\n }\n var bucketized = {};\n expanded.forEach(function(type) {\n var bucket = getTypeBucket(type);\n var bucketTypes = bucketized[bucket];\n if (!bucketTypes) {\n bucketized[bucket] = bucketTypes = [];\n }\n bucketTypes.push(type);\n });\n var buckets = Object.keys(bucketized);\n var augmented = buckets.map(function(bucket) {\n var bucketTypes = bucketized[bucket];\n if (bucketTypes.length === 1) {\n return bucketTypes[0];\n } else {\n switch (bucket) {\n case \"null\":\n case \"boolean\":\n return bucketTypes[0];\n case \"number\":\n return combineNumbers(bucketTypes);\n case \"string\":\n return combineStrings(bucketTypes, opts, scope);\n case \"buffer\":\n return combineBuffers(bucketTypes, opts, scope);\n case \"array\":\n bucketTypes = bucketTypes.filter(function(t) {\n return t !== opts.emptyArrayType;\n });\n if (!bucketTypes.length) {\n return opts.emptyArrayType;\n }\n return Type.forSchema({\n type: \"array\",\n items: Type.forTypes(bucketTypes.map(function(t) {\n return t.itemsType;\n }), opts, scope.child(\"*\"))\n }, opts, scope);\n default:\n return combineObjects(bucketTypes, opts, scope);\n }\n }\n });\n if (augmented.length === 1) {\n return augmented[0];\n } else {\n return Type.forSchema(augmented, opts, scope);\n }\n };\n Type.isType = utils.isType;\n Type.__reset = function(size) {\n debug(\"resetting type buffer to %d\", size);\n TAP.buf = new buffer.SlowBuffer(size);\n };\n Object.defineProperty(Type.prototype, \"branchName\", {\n enumerable: true,\n get: function() {\n var type = Type.isType(this, \"logical\") ? this.underlyingType : this;\n if (type.name) {\n return type.name;\n }\n if (utils.isType(type, \"abstract\")) {\n return type._concreteTypeName;\n }\n return utils.isType(type, \"union\") ? void 0 : type.typeName;\n }\n });\n Type.prototype.compare = utils.abstractFunction;\n Type.prototype.binaryCompare = function(buf1, buf2) {\n return this._match(new Tap(buf1), new Tap(buf2));\n };\n Type.prototype.createResolver = function(type, opts) {\n if (!utils.isType(type)) {\n throw new Error(f2(\"not a type: %j\", type));\n }\n if (!utils.isType(this, \"union\", \"logical\") && utils.isType(type, \"logical\")) {\n return this.createResolver(type.underlyingType, opts);\n }\n opts = opts || {};\n opts.registry = opts.registry || {};\n var resolver, key;\n if (utils.isType(this, \"record\", \"error\") && utils.isType(type, \"record\", \"error\")) {\n key = this.name + \":\" + type.name;\n resolver = opts.registry[key];\n if (resolver) {\n return resolver;\n }\n }\n resolver = new Resolver(type, this);\n if (key) {\n opts.registry[key] = resolver;\n }\n if (utils.isType(type, \"union\")) {\n var resolvers = type.types.map(function(t) {\n return this.createResolver(t, opts);\n }, this);\n resolver._read = function(tap) {\n var index = tap.readLong();\n var resolver2 = resolvers[index];\n if (resolver2 === void 0) {\n throw new Error(f2(\"invalid union index: %s\", index));\n }\n return resolvers[index]._read(tap);\n };\n } else {\n this._update(resolver, type, opts);\n }\n if (!resolver._read) {\n throw new Error(f2(\"cannot read %s as %s\", type, this));\n }\n return Object.freeze(resolver);\n };\n Type.prototype.binaryDecode = function(buf, resolver, noCheck) {\n var tap = new Tap(buf);\n var val = readValue(this, tap, resolver, noCheck);\n if (!tap.isValid()) {\n throw new Error(\"truncated buffer\");\n }\n if (!noCheck && tap.pos < buf.length) {\n throw new Error(\"trailing data\");\n }\n return val;\n };\n Type.prototype.binaryEncode = function(val) {\n TAP.pos = 0;\n this._write(TAP, val);\n var buf = utils.newBuffer(TAP.pos);\n if (TAP.isValid()) {\n TAP.buf.copy(buf, 0, 0, TAP.pos);\n } else {\n this._write(new Tap(buf), val);\n }\n return buf;\n };\n Type.prototype.binaryDecodeAt = function(buf, pos, resolver) {\n var tap = new Tap(buf, pos);\n var val = readValue(this, tap, resolver);\n if (!tap.isValid()) {\n return { value: void 0, offset: -1 };\n }\n return { value: val, offset: tap.pos };\n };\n Type.prototype.binaryEncodeAt = function(val, buf, pos) {\n var tap = new Tap(buf, pos);\n this._write(tap, val);\n if (!tap.isValid()) {\n return buf.length - tap.pos;\n }\n return tap.pos;\n };\n Type.prototype.jsonDecode = function(any, resolver, allowUndeclaredFields) {\n var opts = { allowUndeclaredFields };\n if (!resolver) {\n return values.fromJSON(any, this, opts);\n }\n var type = resolver._writerType;\n var val = values.fromJSON(any, type, opts);\n return this.binaryDecode(type.binaryEncode(val), resolver);\n };\n Type.prototype.jsonEncode = function(val, opts) {\n return values.toJSON(val, this, opts);\n };\n Type.prototype.clone = function(val) {\n return this.binaryDecode(this.binaryEncode(val));\n };\n Type.prototype.wrap = function(val) {\n var Branch = this._branchConstructor;\n return Branch === null ? null : new Branch(val);\n };\n Type.prototype.checkValid = function(val, opts) {\n opts = { allowUndeclaredFields: opts && opts.allowUndeclaredFields };\n if (this.isValid(val, opts)) {\n return;\n }\n values.toJSON(val, this, opts);\n };\n Type.prototype.isValid = function(val, opts) {\n var flags = !(opts && opts.allowUndeclaredFields) | 0;\n var errorHook = opts && opts.errorHook;\n var hook, path;\n if (errorHook) {\n path = [];\n hook = function(any, type) {\n errorHook.call(this, path.slice(), any, type, val);\n };\n }\n return this._check(val, flags, hook, path);\n };\n Type.prototype.equals = function(type) {\n return utils.isType(type) && utils.jsonEquals(this.schema(), type.schema());\n };\n Type.prototype.schema = function(opts) {\n return this._attrs({\n exportAttrs: !!(opts && opts.exportAttrs),\n noDeref: !!(opts && opts.noDeref)\n });\n };\n Type.prototype.toJSON = function() {\n return this.schema({ exportAttrs: true });\n };\n Type.prototype.toString = function() {\n return f2(\"<%s>\", getClassName(this.typeName));\n };\n Type.prototype._attrs = function(opts) {\n opts.derefed = opts.derefed || {};\n var name = this.name;\n if (name !== void 0) {\n if (opts.noDeref || opts.derefed[name]) {\n return name;\n }\n opts.derefed[name] = true;\n }\n var schema = {};\n if (this.name !== void 0) {\n schema.name = name;\n }\n schema.type = this.typeName;\n var derefedSchema = this._deref(schema, opts);\n if (derefedSchema !== void 0) {\n schema = derefedSchema;\n }\n if (opts.exportAttrs) {\n if (this.aliases && this.aliases.length) {\n schema.aliases = this.aliases;\n }\n if (this.doc !== void 0) {\n schema.doc = this.doc;\n }\n }\n return schema;\n };\n Type.prototype._createBranchConstructor = function() {\n var name = this.branchName;\n if (name === \"null\") {\n return null;\n }\n var attr = ~name.indexOf(\".\") ? \"this['\" + name + \"']\" : \"this.\" + name;\n var body = \"return function Branch$(val) { \" + attr + \" = val; };\";\n var Branch = new Function(body)();\n var toString = new Function(\"return ''\");\n Object.defineProperty(Branch.prototype, \"toString\", {\n get: function() {\n return toString;\n }\n });\n var self = this;\n Branch.type = self;\n Object.defineProperty(Branch.prototype, \"type\", {\n get: function() {\n return self;\n }\n });\n var unwrap = new Function(\"return \" + attr + \";\");\n Object.defineProperty(Branch.prototype, \"unwrap\", {\n get: function() {\n return unwrap;\n }\n });\n return Branch;\n };\n Type.prototype._peek = function(tap) {\n var pos = tap.pos;\n var val = this._read(tap);\n tap.pos = pos;\n return val;\n };\n Type.prototype._check = utils.abstractFunction;\n Type.prototype._deref = utils.abstractFunction;\n Type.prototype._match = utils.abstractFunction;\n Type.prototype._read = utils.abstractFunction;\n Type.prototype._skip = utils.abstractFunction;\n Type.prototype._update = utils.abstractFunction;\n Type.prototype._write = utils.abstractFunction;\n Type.prototype.decode = Type.prototype.binaryDecodeAt;\n Type.prototype.encode = Type.prototype.binaryEncodeAt;\n Type.prototype.fromBuffer = Type.prototype.binaryDecode;\n Type.prototype.toBuffer = Type.prototype.binaryEncode;\n Type.prototype.compareBuffers = Type.prototype.binaryCompare;\n function PrimitiveType(noFreeze) {\n Type.call(this);\n this._branchConstructor = this._createBranchConstructor();\n if (!noFreeze) {\n Object.freeze(this);\n }\n }\n util.inherits(PrimitiveType, Type);\n PrimitiveType.prototype._update = function(resolver, type) {\n if (type.typeName === this.typeName) {\n resolver._read = this._read;\n }\n };\n PrimitiveType.prototype._deref = function() {\n return this.typeName;\n };\n PrimitiveType.prototype.compare = utils.compare;\n function NullType() {\n PrimitiveType.call(this);\n }\n util.inherits(NullType, PrimitiveType);\n NullType.prototype._check = function(val, flags, hook) {\n var b2 = val === null;\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n NullType.prototype._read = function() {\n return null;\n };\n NullType.prototype._skip = function() {\n };\n NullType.prototype._write = function(tap, val) {\n if (val !== null) {\n throwInvalidError(val, this);\n }\n };\n NullType.prototype._match = function() {\n return 0;\n };\n NullType.prototype.compare = NullType.prototype._match;\n NullType.prototype.typeName = \"null\";\n function BooleanType() {\n PrimitiveType.call(this);\n }\n util.inherits(BooleanType, PrimitiveType);\n BooleanType.prototype._check = function(val, flags, hook) {\n var b2 = typeof val == \"boolean\";\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n BooleanType.prototype._read = function(tap) {\n return tap.readBoolean();\n };\n BooleanType.prototype._skip = function(tap) {\n tap.skipBoolean();\n };\n BooleanType.prototype._write = function(tap, val) {\n if (typeof val != \"boolean\") {\n throwInvalidError(val, this);\n }\n tap.writeBoolean(val);\n };\n BooleanType.prototype._match = function(tap1, tap2) {\n return tap1.matchBoolean(tap2);\n };\n BooleanType.prototype.typeName = \"boolean\";\n function IntType() {\n PrimitiveType.call(this);\n }\n util.inherits(IntType, PrimitiveType);\n IntType.prototype._check = function(val, flags, hook) {\n var b2 = val === (val | 0);\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n IntType.prototype._read = function(tap) {\n return tap.readInt();\n };\n IntType.prototype._skip = function(tap) {\n tap.skipInt();\n };\n IntType.prototype._write = function(tap, val) {\n if (val !== (val | 0)) {\n throwInvalidError(val, this);\n }\n tap.writeInt(val);\n };\n IntType.prototype._match = function(tap1, tap2) {\n return tap1.matchInt(tap2);\n };\n IntType.prototype.typeName = \"int\";\n function LongType() {\n PrimitiveType.call(this);\n }\n util.inherits(LongType, PrimitiveType);\n LongType.prototype._check = function(val, flags, hook) {\n var b2 = typeof val == \"number\" && val % 1 === 0 && isSafeLong(val);\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n LongType.prototype._read = function(tap) {\n var n = tap.readLong();\n if (!isSafeLong(n)) {\n throw new Error(\"potential precision loss\");\n }\n return n;\n };\n LongType.prototype._skip = function(tap) {\n tap.skipLong();\n };\n LongType.prototype._write = function(tap, val) {\n if (typeof val != \"number\" || val % 1 || !isSafeLong(val)) {\n throwInvalidError(val, this);\n }\n tap.writeLong(val);\n };\n LongType.prototype._match = function(tap1, tap2) {\n return tap1.matchLong(tap2);\n };\n LongType.prototype._update = function(resolver, type) {\n switch (type.typeName) {\n case \"int\":\n resolver._read = type._read;\n break;\n case \"abstract:long\":\n case \"long\":\n resolver._read = this._read;\n }\n };\n LongType.prototype.typeName = \"long\";\n LongType.__with = function(methods, noUnpack) {\n methods = methods || {};\n var mapping = {\n toBuffer: \"_toBuffer\",\n fromBuffer: \"_fromBuffer\",\n fromJSON: \"_fromJSON\",\n toJSON: \"_toJSON\",\n isValid: \"_isValid\",\n compare: \"compare\"\n };\n var type = new AbstractLongType(noUnpack);\n Object.keys(mapping).forEach(function(name) {\n if (methods[name] === void 0) {\n throw new Error(f2(\"missing method implementation: %s\", name));\n }\n type[mapping[name]] = methods[name];\n });\n return Object.freeze(type);\n };\n function FloatType() {\n PrimitiveType.call(this);\n }\n util.inherits(FloatType, PrimitiveType);\n FloatType.prototype._check = function(val, flags, hook) {\n var b2 = typeof val == \"number\";\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n FloatType.prototype._read = function(tap) {\n return tap.readFloat();\n };\n FloatType.prototype._skip = function(tap) {\n tap.skipFloat();\n };\n FloatType.prototype._write = function(tap, val) {\n if (typeof val != \"number\") {\n throwInvalidError(val, this);\n }\n tap.writeFloat(val);\n };\n FloatType.prototype._match = function(tap1, tap2) {\n return tap1.matchFloat(tap2);\n };\n FloatType.prototype._update = function(resolver, type) {\n switch (type.typeName) {\n case \"float\":\n case \"int\":\n resolver._read = type._read;\n break;\n case \"abstract:long\":\n case \"long\":\n resolver._read = function(tap) {\n return tap.readLong();\n };\n }\n };\n FloatType.prototype.typeName = \"float\";\n function DoubleType() {\n PrimitiveType.call(this);\n }\n util.inherits(DoubleType, PrimitiveType);\n DoubleType.prototype._check = function(val, flags, hook) {\n var b2 = typeof val == \"number\";\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n DoubleType.prototype._read = function(tap) {\n return tap.readDouble();\n };\n DoubleType.prototype._skip = function(tap) {\n tap.skipDouble();\n };\n DoubleType.prototype._write = function(tap, val) {\n if (typeof val != \"number\") {\n throwInvalidError(val, this);\n }\n tap.writeDouble(val);\n };\n DoubleType.prototype._match = function(tap1, tap2) {\n return tap1.matchDouble(tap2);\n };\n DoubleType.prototype._update = function(resolver, type) {\n switch (type.typeName) {\n case \"double\":\n case \"float\":\n case \"int\":\n resolver._read = type._read;\n break;\n case \"abstract:long\":\n case \"long\":\n resolver._read = function(tap) {\n return tap.readLong();\n };\n }\n };\n DoubleType.prototype.typeName = \"double\";\n function StringType() {\n PrimitiveType.call(this);\n }\n util.inherits(StringType, PrimitiveType);\n StringType.prototype._check = function(val, flags, hook) {\n var b2 = typeof val == \"string\";\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n StringType.prototype._read = function(tap) {\n return tap.readString();\n };\n StringType.prototype._skip = function(tap) {\n tap.skipString();\n };\n StringType.prototype._write = function(tap, val) {\n if (typeof val != \"string\") {\n throwInvalidError(val, this);\n }\n tap.writeString(val);\n };\n StringType.prototype._match = function(tap1, tap2) {\n return tap1.matchString(tap2);\n };\n StringType.prototype._update = function(resolver, type) {\n switch (type.typeName) {\n case \"bytes\":\n case \"string\":\n resolver._read = this._read;\n }\n };\n StringType.prototype.typeName = \"string\";\n function BytesType() {\n PrimitiveType.call(this);\n }\n util.inherits(BytesType, PrimitiveType);\n BytesType.prototype._check = function(val, flags, hook) {\n var b2 = Buffer.isBuffer(val);\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n BytesType.prototype._read = function(tap) {\n return tap.readBytes();\n };\n BytesType.prototype._skip = function(tap) {\n tap.skipBytes();\n };\n BytesType.prototype._write = function(tap, val) {\n if (!Buffer.isBuffer(val)) {\n throwInvalidError(val, this);\n }\n tap.writeBytes(val);\n };\n BytesType.prototype._match = function(tap1, tap2) {\n return tap1.matchBytes(tap2);\n };\n BytesType.prototype._update = StringType.prototype._update;\n BytesType.prototype.compare = Buffer.compare;\n BytesType.prototype.typeName = \"bytes\";\n function UnionType(schema, opts, scope) {\n Type.call(this);\n if (!Array.isArray(schema)) {\n throw new Error(f2(\"non-array union schema: %j\", schema));\n }\n if (!schema.length) {\n throw new Error(\"empty union\");\n }\n this.types = Object.freeze(schema.map(function(obj) {\n return Type.forSchema(obj, opts, scope);\n }));\n this._branchIndices = {};\n this.types.forEach(function(type, i) {\n if (utils.isType(type, \"union\")) {\n throw new Error(\"unions cannot be directly nested\");\n }\n var branch = type.branchName;\n if (this._branchIndices[branch] !== void 0) {\n throw new Error(f2(\"duplicate union branch name: %j\", branch));\n }\n this._branchIndices[branch] = i;\n }, this);\n }\n util.inherits(UnionType, Type);\n UnionType.prototype._branchConstructor = function() {\n throw new Error(\"unions cannot be directly wrapped\");\n };\n UnionType.prototype._skip = function(tap) {\n this.types[tap.readLong()]._skip(tap);\n };\n UnionType.prototype._match = function(tap1, tap2) {\n var n1 = tap1.readLong();\n var n2 = tap2.readLong();\n if (n1 === n2) {\n return this.types[n1]._match(tap1, tap2);\n } else {\n return n1 < n2 ? -1 : 1;\n }\n };\n UnionType.prototype._deref = function(schema, opts) {\n return this.types.map(function(t) {\n return t._attrs(opts);\n });\n };\n UnionType.prototype.type = function(branchName) {\n var index = this._branchIndices[branchName];\n if (index !== void 0) {\n return this.types[index];\n }\n };\n function UnwrappedUnionType(schema, opts) {\n UnionType.call(this, schema, opts);\n this._dynamicBranches = null;\n this._bucketIndices = {};\n this.types.forEach(function(type, index) {\n if (utils.isType(type, \"abstract\", \"logical\")) {\n if (!this._dynamicBranches) {\n this._dynamicBranches = [];\n }\n this._dynamicBranches.push({ index, type });\n } else {\n var bucket = getTypeBucket(type);\n if (this._bucketIndices[bucket] !== void 0) {\n throw new Error(f2(\"ambiguous unwrapped union: %j\", this));\n }\n this._bucketIndices[bucket] = index;\n }\n }, this);\n Object.freeze(this);\n }\n util.inherits(UnwrappedUnionType, UnionType);\n UnwrappedUnionType.prototype._getIndex = function(val) {\n var index = this._bucketIndices[getValueBucket(val)];\n if (this._dynamicBranches) {\n index = this._getBranchIndex(val, index);\n }\n return index;\n };\n UnwrappedUnionType.prototype._getBranchIndex = function(any, index) {\n var logicalBranches = this._dynamicBranches;\n var i, l, branch;\n for (i = 0, l = logicalBranches.length; i < l; i++) {\n branch = logicalBranches[i];\n if (branch.type._check(any)) {\n if (index === void 0) {\n index = branch.index;\n } else {\n throw new Error(\"ambiguous conversion\");\n }\n }\n }\n return index;\n };\n UnwrappedUnionType.prototype._check = function(val, flags, hook, path) {\n var index = this._getIndex(val);\n var b2 = index !== void 0;\n if (b2) {\n return this.types[index]._check(val, flags, hook, path);\n }\n if (hook) {\n hook(val, this);\n }\n return b2;\n };\n UnwrappedUnionType.prototype._read = function(tap) {\n var index = tap.readLong();\n var branchType = this.types[index];\n if (branchType) {\n return branchType._read(tap);\n } else {\n throw new Error(f2(\"invalid union index: %s\", index));\n }\n };\n UnwrappedUnionType.prototype._write = function(tap, val) {\n var index = this._getIndex(val);\n if (index === void 0) {\n throwInvalidError(val, this);\n }\n tap.writeLong(index);\n if (val !== null) {\n this.types[index]._write(tap, val);\n }\n };\n UnwrappedUnionType.prototype._update = function(resolver, type, opts) {\n var i, l, typeResolver;\n for (i = 0, l = this.types.length; i < l; i++) {\n try {\n typeResolver = this.types[i].createResolver(type, opts);\n } catch (err) {\n continue;\n }\n resolver._read = function(tap) {\n return typeResolver._read(tap);\n };\n return;\n }\n };\n UnwrappedUnionType.prototype.branchType = function(val) {\n var index = this._getIndex(val);\n return index === void 0 ? void 0 : this.types[index];\n };\n UnwrappedUnionType.prototype.branchValue = function(val) {\n return val;\n };\n UnwrappedUnionType.prototype.compare = function(val1, val2, opts) {\n var index1 = this._getIndex(val1);\n var index2 = this._getIndex(val2);\n if (index1 === void 0) {\n throwInvalidError(val1, this);\n } else if (index2 === void 0) {\n throwInvalidError(val2, this);\n } else if (index1 === index2) {\n return this.types[index1].compare(val1, val2, opts);\n } else {\n return utils.compare(index1, index2);\n }\n };\n UnwrappedUnionType.prototype.typeName = \"union:unwrapped\";\n function WrappedUnionType(schema, opts) {\n UnionType.call(this, schema, opts);\n Object.freeze(this);\n }\n util.inherits(WrappedUnionType, UnionType);\n WrappedUnionType.prototype._check = function(val, flags, hook, path) {\n var b2 = false;\n if (val === null) {\n b2 = this._branchIndices[\"null\"] !== void 0;\n } else if (typeof val == \"object\") {\n var keys = Object.keys(val);\n if (keys.length === 1) {\n var name = keys[0];\n var index = this._branchIndices[name];\n if (index !== void 0) {\n if (hook) {\n path.push(name);\n b2 = this.types[index]._check(val[name], flags, hook, path);\n path.pop();\n return b2;\n } else {\n return this.types[index]._check(val[name], flags);\n }\n }\n }\n }\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n WrappedUnionType.prototype._read = function(tap) {\n var type = this.types[tap.readLong()];\n if (!type) {\n throw new Error(f2(\"invalid union index\"));\n }\n var Branch = type._branchConstructor;\n if (Branch === null) {\n return null;\n } else {\n return new Branch(type._read(tap));\n }\n };\n WrappedUnionType.prototype._write = function(tap, val) {\n var index, keys, name;\n if (val === null) {\n index = this._branchIndices[\"null\"];\n if (index === void 0) {\n throwInvalidError(val, this);\n }\n tap.writeLong(index);\n } else {\n keys = Object.keys(val);\n if (keys.length === 1) {\n name = keys[0];\n index = this._branchIndices[name];\n }\n if (index === void 0) {\n throwInvalidError(val, this);\n }\n tap.writeLong(index);\n this.types[index]._write(tap, val[name]);\n }\n };\n WrappedUnionType.prototype._update = function(resolver, type, opts) {\n var i, l, typeResolver, Branch;\n for (i = 0, l = this.types.length; i < l; i++) {\n try {\n typeResolver = this.types[i].createResolver(type, opts);\n } catch (err) {\n continue;\n }\n Branch = this.types[i]._branchConstructor;\n if (Branch) {\n resolver._read = function(tap) {\n return new Branch(typeResolver._read(tap));\n };\n } else {\n resolver._read = function() {\n return null;\n };\n }\n return;\n }\n };\n WrappedUnionType.prototype.branchType = function(val) {\n if (typeof val != \"object\") {\n return void 0;\n }\n var name = val === null ? \"null\" : Object.keys(val)[0];\n var index = this._branchIndices[name];\n return index === void 0 ? void 0 : this.types[index];\n };\n WrappedUnionType.prototype.branchValue = function(val) {\n if (val === null) {\n return null;\n }\n return val[Object.keys(val)[0]];\n };\n WrappedUnionType.prototype.compare = function(val1, val2, opts) {\n var name1 = val1 === null ? \"null\" : Object.keys(val1)[0];\n var name2 = val2 === null ? \"null\" : Object.keys(val2)[0];\n var index = this._branchIndices[name1];\n if (name1 === name2) {\n return name1 === \"null\" ? 0 : this.types[index].compare(val1[name1], val2[name1], opts);\n } else {\n return utils.compare(index, this._branchIndices[name2]);\n }\n };\n WrappedUnionType.prototype.typeName = \"union:wrapped\";\n function EnumType(schema, opts, scope) {\n Type.call(this, schema, opts, scope);\n if (!Array.isArray(schema.symbols) || !schema.symbols.length) {\n throw new Error(f2(\"invalid enum symbols: %j\", schema.symbols));\n }\n this.symbols = Object.freeze(schema.symbols.slice());\n this._indices = {};\n this.symbols.forEach(function(symbol, i) {\n if (!isValidName(symbol)) {\n throw new Error(f2(\"invalid %s symbol: %j\", this, symbol));\n }\n if (this._indices[symbol] !== void 0) {\n throw new Error(f2(\"duplicate %s symbol: %j\", this, symbol));\n }\n this._indices[symbol] = i;\n }, this);\n this._branchConstructor = this._createBranchConstructor();\n Object.freeze(this);\n }\n util.inherits(EnumType, Type);\n EnumType.prototype._check = function(val, flags, hook) {\n var b2 = this._indices[val] !== void 0;\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n EnumType.prototype._read = function(tap) {\n var index = tap.readLong();\n var symbol = this.symbols[index];\n if (symbol === void 0) {\n throw new Error(f2(\"invalid %s enum index: %s\", this.name, index));\n }\n return symbol;\n };\n EnumType.prototype._skip = function(tap) {\n tap.skipLong();\n };\n EnumType.prototype._write = function(tap, val) {\n var index = this._indices[val];\n if (index === void 0) {\n throwInvalidError(val, this);\n }\n tap.writeLong(index);\n };\n EnumType.prototype._match = function(tap1, tap2) {\n return tap1.matchLong(tap2);\n };\n EnumType.prototype.compare = function(val1, val2) {\n return utils.compare(this._indices[val1], this._indices[val2]);\n };\n EnumType.prototype._update = function(resolver, type) {\n var symbols = this.symbols;\n if (type.typeName === \"enum\" && (!type.name || ~getAliases(this).indexOf(type.name)) && type.symbols.every(function(s) {\n return ~symbols.indexOf(s);\n })) {\n resolver.symbols = type.symbols;\n resolver._read = type._read;\n }\n };\n EnumType.prototype._deref = function(schema) {\n schema.symbols = this.symbols;\n };\n EnumType.prototype.typeName = \"enum\";\n function FixedType(schema, opts, scope) {\n Type.call(this, schema, opts, scope);\n if (schema.size !== (schema.size | 0) || schema.size < 0) {\n throw new Error(f2(\"invalid %s size\", this.branchName));\n }\n this.size = schema.size | 0;\n this._branchConstructor = this._createBranchConstructor();\n Object.freeze(this);\n }\n util.inherits(FixedType, Type);\n FixedType.prototype._check = function(val, flags, hook) {\n var b2 = Buffer.isBuffer(val) && val.length === this.size;\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n FixedType.prototype._read = function(tap) {\n return tap.readFixed(this.size);\n };\n FixedType.prototype._skip = function(tap) {\n tap.skipFixed(this.size);\n };\n FixedType.prototype._write = function(tap, val) {\n if (!Buffer.isBuffer(val) || val.length !== this.size) {\n throwInvalidError(val, this);\n }\n tap.writeFixed(val, this.size);\n };\n FixedType.prototype._match = function(tap1, tap2) {\n return tap1.matchFixed(tap2, this.size);\n };\n FixedType.prototype.compare = Buffer.compare;\n FixedType.prototype._update = function(resolver, type) {\n if (type.typeName === \"fixed\" && this.size === type.size && (!type.name || ~getAliases(this).indexOf(type.name))) {\n resolver.size = this.size;\n resolver._read = this._read;\n }\n };\n FixedType.prototype._deref = function(schema) {\n schema.size = this.size;\n };\n FixedType.prototype.typeName = \"fixed\";\n function MapType(schema, opts, scope) {\n Type.call(this);\n if (!schema.values) {\n throw new Error(f2(\"missing map values: %j\", schema));\n }\n scope = scope || Scope.forOptions(opts);\n this.valuesType = Type.forSchema(schema.values, opts, scope.child(\"*\"));\n this._branchConstructor = this._createBranchConstructor();\n Object.freeze(this);\n }\n util.inherits(MapType, Type);\n MapType.prototype._check = function(val, flags, hook, path) {\n if (!val || typeof val != \"object\" || Array.isArray(val)) {\n if (hook) {\n hook(val, this);\n }\n return false;\n }\n var keys = Object.keys(val);\n var b2 = true;\n var i, l, j2, key;\n if (hook) {\n j2 = path.length;\n path.push(\"\");\n for (i = 0, l = keys.length; i < l; i++) {\n key = path[j2] = keys[i];\n if (!this.valuesType._check(val[key], flags, hook, path)) {\n b2 = false;\n }\n }\n path.pop();\n } else {\n for (i = 0, l = keys.length; i < l; i++) {\n if (!this.valuesType._check(val[keys[i]], flags)) {\n return false;\n }\n }\n }\n return b2;\n };\n MapType.prototype._read = function(tap) {\n var values2 = this.valuesType;\n var val = {};\n var n;\n while (n = readArraySize(tap)) {\n while (n--) {\n var key = tap.readString();\n val[key] = values2._read(tap);\n }\n }\n return val;\n };\n MapType.prototype._skip = function(tap) {\n var values2 = this.valuesType;\n var len, n;\n while (n = tap.readLong()) {\n if (n < 0) {\n len = tap.readLong();\n tap.pos += len;\n } else {\n while (n--) {\n tap.skipString();\n values2._skip(tap);\n }\n }\n }\n };\n MapType.prototype._write = function(tap, val) {\n if (!val || typeof val != \"object\" || Array.isArray(val)) {\n throwInvalidError(val, this);\n }\n var values2 = this.valuesType;\n var keys = Object.keys(val);\n var n = keys.length;\n var i, key;\n if (n) {\n tap.writeLong(n);\n for (i = 0; i < n; i++) {\n key = keys[i];\n tap.writeString(key);\n values2._write(tap, val[key]);\n }\n }\n tap.writeLong(0);\n };\n MapType.prototype._match = function() {\n throw new Error(\"maps cannot be compared\");\n };\n MapType.prototype._update = function(rsv, type, opts) {\n if (type.typeName === \"map\") {\n rsv.valuesType = this.valuesType.createResolver(type.valuesType, opts);\n rsv._read = this._read;\n }\n };\n MapType.prototype.compare = function(val1, val2, opts) {\n if (!opts || !opts.allowMaps) {\n return this._match();\n }\n var keys1 = Object.keys(val1).sort();\n var keys2 = Object.keys(val2).sort();\n var n1 = keys1.length;\n var n2 = keys2.length;\n var i, l, k2, f3;\n for (i = 0, l = Math.min(n1, n2); i < l; i++) {\n k2 = keys1[i];\n if (f3 = utils.compare(k2, keys2[i])) {\n return f3;\n }\n if (f3 = this.valuesType.compare(val1[k2], val2[k2], opts)) {\n return f3;\n }\n }\n return utils.compare(n1, n2);\n };\n MapType.prototype.typeName = \"map\";\n MapType.prototype._deref = function(schema, opts) {\n schema.values = this.valuesType._attrs(opts);\n };\n function ArrayType(schema, opts, scope) {\n Type.call(this);\n if (!schema.items) {\n throw new Error(f2(\"missing array items: %j\", schema));\n }\n scope = scope || Scope.forOptions(opts);\n this.itemsType = Type.forSchema(schema.items, opts, scope.child(\"*\"));\n this._branchConstructor = this._createBranchConstructor();\n Object.freeze(this);\n }\n util.inherits(ArrayType, Type);\n ArrayType.prototype._check = function(val, flags, hook, path) {\n if (!Array.isArray(val)) {\n if (hook) {\n hook(val, this);\n }\n return false;\n }\n var b2 = true;\n var i, l, j2;\n if (hook) {\n j2 = path.length;\n path.push(\"\");\n for (i = 0, l = val.length; i < l; i++) {\n path[j2] = \"\" + i;\n if (!this.itemsType._check(val[i], flags, hook, path)) {\n b2 = false;\n }\n }\n path.pop();\n } else {\n for (i = 0, l = val.length; i < l; i++) {\n if (!this.itemsType._check(val[i], flags)) {\n return false;\n }\n }\n }\n return b2;\n };\n ArrayType.prototype._read = function(tap) {\n var items = this.itemsType;\n var val = [];\n var n;\n while (n = tap.readLong()) {\n if (n < 0) {\n n = -n;\n tap.skipLong();\n }\n while (n--) {\n val.push(items._read(tap));\n }\n }\n return val;\n };\n ArrayType.prototype._skip = function(tap) {\n var len, n;\n while (n = tap.readLong()) {\n if (n < 0) {\n len = tap.readLong();\n tap.pos += len;\n } else {\n while (n--) {\n this.itemsType._skip(tap);\n }\n }\n }\n };\n ArrayType.prototype._write = function(tap, val) {\n if (!Array.isArray(val)) {\n throwInvalidError(val, this);\n }\n var n = val.length;\n var i;\n if (n) {\n tap.writeLong(n);\n for (i = 0; i < n; i++) {\n this.itemsType._write(tap, val[i]);\n }\n }\n tap.writeLong(0);\n };\n ArrayType.prototype._match = function(tap1, tap2) {\n var n1 = tap1.readLong();\n var n2 = tap2.readLong();\n var f3;\n while (n1 && n2) {\n f3 = this.itemsType._match(tap1, tap2);\n if (f3) {\n return f3;\n }\n if (!--n1) {\n n1 = readArraySize(tap1);\n }\n if (!--n2) {\n n2 = readArraySize(tap2);\n }\n }\n return utils.compare(n1, n2);\n };\n ArrayType.prototype._update = function(resolver, type, opts) {\n if (type.typeName === \"array\") {\n resolver.itemsType = this.itemsType.createResolver(type.itemsType, opts);\n resolver._read = this._read;\n }\n };\n ArrayType.prototype._deref = function(schema, opts) {\n schema.items = this.itemsType._attrs(opts);\n };\n ArrayType.prototype.compare = function(val1, val2, opts) {\n var n1 = val1.length;\n var n2 = val2.length;\n var i, l, f3;\n for (i = 0, l = Math.min(n1, n2); i < l; i++) {\n if (f3 = this.itemsType.compare(val1[i], val2[i], opts)) {\n return f3;\n }\n }\n return utils.compare(n1, n2);\n };\n ArrayType.prototype.typeName = \"array\";\n function RecordType(schema, opts, scope) {\n opts = opts || {};\n scope = scope ? scope.clone() : Scope.forOptions(opts);\n if (schema.namespace !== void 0) {\n scope.namespace = schema.namespace;\n } else if (schema.name) {\n var match = /^(.*)\\.[^.]+$/.exec(schema.name);\n if (match) {\n scope.namespace = match[1];\n }\n }\n Type.call(this, schema, opts, scope);\n if (!Array.isArray(schema.fields)) {\n throw new Error(f2(\"non-array record fields: %j\", schema.fields));\n }\n if (utils.hasDuplicates(schema.fields, function(f3) {\n return f3.name;\n })) {\n throw new Error(f2(\"duplicate field name: %j\", schema.fields));\n }\n this._fieldsByName = {};\n this.fields = Object.freeze(schema.fields.map(function(f3) {\n var field = new Field(f3, opts, scope);\n this._fieldsByName[field.name] = field;\n return field;\n }, this));\n this._sizeProp = opts.recordSizeProperty;\n this._isError = schema.type === \"error\";\n this._branchConstructor = this._createBranchConstructor();\n this.recordConstructor = this._createConstructor(\n opts.errorStackTraces,\n opts.omitRecordMethods\n );\n this._read = this._createReader();\n this._skip = this._createSkipper();\n this._write = this._createWriter();\n this._check = this._createChecker();\n Object.freeze(this);\n }\n util.inherits(RecordType, Type);\n RecordType.prototype._getConstructorName = function() {\n return this.name ? utils.capitalize(utils.unqualifyName(this.name)) : this._isError ? \"Error$\" : \"Record$\";\n };\n RecordType.prototype._createConstructor = function(errorStack, plainRecord) {\n var outerArgs = [];\n var innerArgs = [];\n var ds = [];\n var innerBody = \"\";\n var i, l, field, name, defaultValue, hasDefault, stackField;\n for (i = 0, l = this.fields.length; i < l; i++) {\n field = this.fields[i];\n defaultValue = field.defaultValue;\n hasDefault = defaultValue() !== void 0;\n name = field.name;\n if (errorStack && this._isError && name === \"stack\" && utils.isType(field.type, \"string\") && !hasDefault) {\n stackField = field;\n }\n innerArgs.push(\"v\" + i);\n innerBody += \" \";\n if (!hasDefault) {\n innerBody += \"this.\" + name + \" = v\" + i + \";\\n\";\n } else {\n innerBody += \"if (v\" + i + \" === undefined) { \";\n innerBody += \"this.\" + name + \" = d\" + ds.length + \"(); \";\n innerBody += \"} else { this.\" + name + \" = v\" + i + \"; }\\n\";\n outerArgs.push(\"d\" + ds.length);\n ds.push(defaultValue);\n }\n }\n if (stackField) {\n innerBody += \" if (this.stack === undefined) { \";\n if (typeof Error.captureStackTrace == \"function\") {\n innerBody += \"Error.captureStackTrace(this, this.constructor);\";\n } else {\n innerBody += \"this.stack = Error().stack;\";\n }\n innerBody += \" }\\n\";\n }\n var outerBody = \"return function \" + this._getConstructorName() + \"(\";\n outerBody += innerArgs.join() + \") {\\n\" + innerBody + \"};\";\n var Record = new Function(outerArgs.join(), outerBody).apply(void 0, ds);\n if (plainRecord) {\n return Record;\n }\n var self = this;\n Record.type = self;\n Record.fromBuffer = function() {\n return self.binaryDecode.apply(self, arguments);\n };\n Record.fromObject = function() {\n return self.jsonDecode.apply(self, arguments);\n };\n if (this._isError) {\n util.inherits(Record, Error);\n Record.prototype.name = self.name;\n }\n Object.defineProperty(Record.prototype, \"clone\", {\n get: function() {\n return clone;\n }\n });\n Object.defineProperty(Record.prototype, \"compare\", {\n get: function() {\n return compare;\n }\n });\n Object.defineProperty(Record.prototype, \"checkValid\", {\n get: function() {\n return checkValid;\n }\n });\n Object.defineProperty(Record.prototype, \"isValid\", {\n get: function() {\n return isValid;\n }\n });\n Object.defineProperty(Record.prototype, \"toBuffer\", {\n get: function() {\n return toBuffer;\n }\n });\n Object.defineProperty(Record.prototype, \"toObject\", {\n get: function() {\n return toObject;\n }\n });\n Object.defineProperty(Record.prototype, \"toString\", {\n get: function() {\n return toString;\n }\n });\n Object.defineProperty(Record.prototype, \"wrap\", {\n get: function() {\n return wrap;\n }\n });\n return Record;\n function clone() {\n return self.clone(this);\n }\n function compare(val, opts) {\n return self.compare(this, val, opts);\n }\n function checkValid(opts) {\n return self.checkValid(this, opts);\n }\n function isValid(opts) {\n return self.isValid(this, opts);\n }\n function toBuffer() {\n return self.binaryEncode(this);\n }\n function toObject(opts) {\n return self.jsonEncode(this, opts);\n }\n function toString() {\n var str;\n if (self._isError) {\n str = self._getConstructorName();\n if (this.code !== void 0) {\n str += \" [\" + this.code + \"]\";\n }\n if (this.message) {\n str += \": \" + this.message;\n }\n } else {\n str = \"<\" + self._getConstructorName() + \">\";\n }\n return str;\n }\n function wrap() {\n return self.wrap(this);\n }\n };\n RecordType.prototype._createChecker = function() {\n var names = [];\n var values2 = [];\n var name = this._getConstructorName();\n var body = \"return function check\" + name + \"(v, f, h, p) {\\n\";\n body += \" if (\\n\";\n body += \" v === null ||\\n\";\n body += \" typeof v != 'object' ||\\n\";\n body += \" (f && !this._checkFields(v))\\n\";\n body += \" ) {\\n\";\n body += \" if (h) { h(v, this); }\\n\";\n body += \" return false;\\n\";\n body += \" }\\n\";\n if (!this.fields.length) {\n body += \" return true;\\n\";\n } else {\n for (i = 0, l = this.fields.length; i < l; i++) {\n field = this.fields[i];\n names.push(\"t\" + i);\n values2.push(field.type);\n if (field.defaultValue() !== void 0) {\n body += \" var v\" + i + \" = v.\" + field.name + \";\\n\";\n }\n }\n body += \" if (h) {\\n\";\n body += \" var b = 1;\\n\";\n body += \" var j = p.length;\\n\";\n body += \" p.push('');\\n\";\n var i, l, field;\n for (i = 0, l = this.fields.length; i < l; i++) {\n field = this.fields[i];\n body += \" p[j] = '\" + field.name + \"';\\n\";\n body += \" b &= \";\n if (field.defaultValue() === void 0) {\n body += \"t\" + i + \"._check(v.\" + field.name + \", f, h, p);\\n\";\n } else {\n body += \"v\" + i + \" === undefined || \";\n body += \"t\" + i + \"._check(v\" + i + \", f, h, p);\\n\";\n }\n }\n body += \" p.pop();\\n\";\n body += \" return !!b;\\n\";\n body += \" } else {\\n return (\\n \";\n body += this.fields.map(function(field2, i2) {\n return field2.defaultValue() === void 0 ? \"t\" + i2 + \"._check(v.\" + field2.name + \", f)\" : \"(v\" + i2 + \" === undefined || t\" + i2 + \"._check(v\" + i2 + \", f))\";\n }).join(\" &&\\n \");\n body += \"\\n );\\n }\\n\";\n }\n body += \"};\";\n return new Function(names.join(), body).apply(void 0, values2);\n };\n RecordType.prototype._createReader = function() {\n var names = [];\n var values2 = [this.recordConstructor];\n var i, l;\n for (i = 0, l = this.fields.length; i < l; i++) {\n names.push(\"t\" + i);\n values2.push(this.fields[i].type);\n }\n var name = this._getConstructorName();\n var body = \"return function read\" + name + \"(t) {\\n \";\n if (this._sizeProp) {\n body += \"var p = t.pos;\\n var v = new \" + name + \"(\";\n body += names.map(function(s) {\n return s + \"._read(t)\";\n }).join(\", \");\n body += \");\\n \";\n body += \"Object.defineProperty(v, s, {value: t.pos-p, writable: true});\\n\";\n body += \" return v;\\n};\";\n names.push(\"s\");\n values2.push(this._sizeProp);\n } else {\n body += \"return new \" + name + \"(\";\n body += names.map(function(s) {\n return s + \"._read(t)\";\n }).join(\", \");\n body += \");\\n};\";\n }\n names.unshift(name);\n return new Function(names.join(), body).apply(void 0, values2);\n };\n RecordType.prototype._createSkipper = function() {\n var args = [];\n var body = \"return function skip\" + this._getConstructorName() + \"(t) {\\n\";\n var values2 = [];\n var i, l;\n for (i = 0, l = this.fields.length; i < l; i++) {\n args.push(\"t\" + i);\n values2.push(this.fields[i].type);\n body += \" t\" + i + \"._skip(t);\\n\";\n }\n body += \"}\";\n return new Function(args.join(), body).apply(void 0, values2);\n };\n RecordType.prototype._createWriter = function() {\n var args = [];\n var name = this._getConstructorName();\n var body = \"return function write\" + name + \"(t, v) {\\n\";\n var values2 = [];\n var i, l, field, value;\n for (i = 0, l = this.fields.length; i < l; i++) {\n field = this.fields[i];\n args.push(\"t\" + i);\n values2.push(field.type);\n body += \" \";\n if (field.defaultValue() === void 0) {\n body += \"t\" + i + \"._write(t, v.\" + field.name + \");\\n\";\n } else {\n value = field.type.binaryEncode(field.defaultValue()).toString(\"binary\");\n args.push(\"d\" + i);\n values2.push(value);\n body += \"var v\" + i + \" = v.\" + field.name + \";\\n\";\n body += \"if (v\" + i + \" === undefined) {\\n\";\n body += \" t.writeBinary(d\" + i + \", \" + value.length + \");\\n\";\n body += \" } else {\\n t\" + i + \"._write(t, v\" + i + \");\\n }\\n\";\n }\n }\n body += \"}\";\n return new Function(args.join(), body).apply(void 0, values2);\n };\n RecordType.prototype._update = function(resolver, type, opts) {\n if (type.name && !~getAliases(this).indexOf(type.name)) {\n throw new Error(f2(\"no alias found for %s\", type.name));\n }\n var rFields = this.fields;\n var wFields = type.fields;\n var wFieldsMap = utils.toMap(wFields, function(f3) {\n return f3.name;\n });\n var innerArgs = [];\n var resolvers = {};\n var i, j2, field, name, names, matches, fieldResolver;\n for (i = 0; i < rFields.length; i++) {\n field = rFields[i];\n names = getAliases(field);\n matches = [];\n for (j2 = 0; j2 < names.length; j2++) {\n name = names[j2];\n if (wFieldsMap[name]) {\n matches.push(name);\n }\n }\n if (matches.length > 1) {\n throw new Error(\n f2(\"ambiguous aliasing for %s.%s (%s)\", type.name, field.name, matches)\n );\n }\n if (!matches.length) {\n if (field.defaultValue() === void 0) {\n throw new Error(\n f2(\"no matching field for default-less %s.%s\", type.name, field.name)\n );\n }\n innerArgs.push(\"undefined\");\n } else {\n name = matches[0];\n fieldResolver = {\n resolver: field.type.createResolver(wFieldsMap[name].type, opts),\n name: \"_\" + field.name\n // Reader field name.\n };\n if (!resolvers[name]) {\n resolvers[name] = [fieldResolver];\n } else {\n resolvers[name].push(fieldResolver);\n }\n innerArgs.push(fieldResolver.name);\n }\n }\n var lazyIndex = -1;\n i = wFields.length;\n while (i && resolvers[wFields[--i].name] === void 0) {\n lazyIndex = i;\n }\n var uname = this._getConstructorName();\n var args = [uname];\n var values2 = [this.recordConstructor];\n var body = \" return function read\" + uname + \"(t, b) {\\n\";\n var indent;\n if (this._sizeProp) {\n body += \" var c = 0;\\n var p;\\n\";\n }\n for (i = 0; i < wFields.length; i++) {\n if (i === lazyIndex) {\n body += \" if (!b) {\\n\";\n }\n indent = ~lazyIndex && i >= lazyIndex ? \" \" : \" \";\n field = type.fields[i];\n name = field.name;\n if (resolvers[name] === void 0) {\n args.push(\"r\" + i);\n values2.push(field.type);\n body += indent + \"r\" + i + \"._skip(t);\\n\";\n } else {\n j2 = resolvers[name].length;\n if (this._sizeProp) {\n body += indent + \"p = t.pos;\\n\";\n }\n while (j2--) {\n args.push(\"r\" + i + \"f\" + j2);\n fieldResolver = resolvers[name][j2];\n values2.push(fieldResolver.resolver);\n body += indent + \"var \" + fieldResolver.name + \" = \";\n body += \"r\" + i + \"f\" + j2 + \"._\" + (j2 ? \"peek\" : \"read\") + \"(t);\\n\";\n }\n if (this._sizeProp) {\n body += indent + \"c += t.pos-p;\\n\";\n }\n }\n }\n if (~lazyIndex) {\n body += \" }\\n\";\n }\n body += \" var v = new \" + uname + \"(\" + innerArgs.join() + \");\\n\";\n if (this._sizeProp) {\n body += \" Object.defineProperty(v, s, {value: c, writable: true});\\n\";\n values2.push(this._sizeProp);\n args.push(\"s\");\n }\n body += \" return v;\\n};\";\n resolver._read = new Function(args.join(), body).apply(void 0, values2);\n };\n RecordType.prototype._match = function(tap1, tap2) {\n var fields = this.fields;\n var i, l, field, order, type;\n for (i = 0, l = fields.length; i < l; i++) {\n field = fields[i];\n order = field._order;\n type = field.type;\n if (order) {\n order *= type._match(tap1, tap2);\n if (order) {\n return order;\n }\n } else {\n type._skip(tap1);\n type._skip(tap2);\n }\n }\n return 0;\n };\n RecordType.prototype._checkFields = function(obj) {\n var keys = Object.keys(obj);\n var i, l;\n for (i = 0, l = keys.length; i < l; i++) {\n if (!this._fieldsByName[keys[i]]) {\n return false;\n }\n }\n return true;\n };\n RecordType.prototype._deref = function(schema, opts) {\n schema.fields = this.fields.map(function(field) {\n var fieldType = field.type;\n var fieldSchema = {\n name: field.name,\n type: fieldType._attrs(opts)\n };\n if (opts.exportAttrs) {\n if (field._defaultValue !== void 0) {\n fieldSchema[\"default\"] = field._defaultValue;\n }\n var fieldOrder = field.order;\n if (fieldOrder !== \"ascending\") {\n fieldSchema.order = fieldOrder;\n }\n var fieldAliases = field.aliases;\n if (fieldAliases.length) {\n fieldSchema.aliases = fieldAliases;\n }\n var fieldDoc = field.doc;\n if (fieldDoc !== void 0) {\n fieldSchema.doc = fieldDoc;\n }\n }\n return fieldSchema;\n });\n };\n RecordType.prototype.compare = function(val1, val2, opts) {\n var fields = this.fields;\n var i, l, field, name, order, type;\n for (i = 0, l = fields.length; i < l; i++) {\n field = fields[i];\n name = field.name;\n order = field._order;\n type = field.type;\n if (order) {\n order *= type.compare(val1[name], val2[name], opts);\n if (order) {\n return order;\n }\n }\n }\n return 0;\n };\n RecordType.prototype.field = function(name) {\n return this._fieldsByName[name];\n };\n Object.defineProperty(RecordType.prototype, \"typeName\", {\n enumerable: true,\n get: function() {\n return this._isError ? \"error\" : \"record\";\n }\n });\n function LogicalType(schema, opts, scope) {\n this._logicalTypeName = schema.logicalType;\n Type.call(this);\n LOGICAL_TYPE = this;\n try {\n this._underlyingType = Type.forSchema(schema, opts, scope);\n } finally {\n LOGICAL_TYPE = null;\n var l = UNDERLYING_TYPES.length;\n if (l && UNDERLYING_TYPES[l - 1][0] === this) {\n UNDERLYING_TYPES.pop();\n }\n }\n if (utils.isType(this.underlyingType, \"union\")) {\n this._branchConstructor = this.underlyingType._branchConstructor;\n } else {\n this._branchConstructor = this.underlyingType._createBranchConstructor();\n }\n }\n util.inherits(LogicalType, Type);\n Object.defineProperty(LogicalType.prototype, \"typeName\", {\n enumerable: true,\n get: function() {\n return \"logical:\" + this._logicalTypeName;\n }\n });\n Object.defineProperty(LogicalType.prototype, \"underlyingType\", {\n enumerable: true,\n get: function() {\n if (this._underlyingType) {\n return this._underlyingType;\n }\n var i, l, arr;\n for (i = 0, l = UNDERLYING_TYPES.length; i < l; i++) {\n arr = UNDERLYING_TYPES[i];\n if (arr[0] === this) {\n return arr[1];\n }\n }\n }\n });\n LogicalType.prototype._read = function(tap) {\n return this._fromValue(this.underlyingType._read(tap));\n };\n LogicalType.prototype._write = function(tap, any) {\n this.underlyingType._write(tap, this._toValue(any));\n };\n LogicalType.prototype._check = function(any, flags, hook, path) {\n try {\n var val = this._toValue(any);\n } catch (err) {\n }\n if (val === void 0) {\n if (hook) {\n hook(any, this);\n }\n return false;\n }\n return this.underlyingType._check(val, flags, hook, path);\n };\n LogicalType.prototype._update = function(resolver, type, opts) {\n var ret = this._resolve(type, opts);\n var map, rsv;\n if (Array.isArray(ret)) {\n map = ret[0];\n rsv = ret[1];\n } else {\n map = ret;\n rsv = type;\n }\n if (map) {\n resolver._read = function(tap) {\n return map(rsv._read(tap));\n };\n }\n };\n LogicalType.prototype.compare = function(obj1, obj2, opts) {\n var val1 = this._toValue(obj1);\n var val2 = this._toValue(obj2);\n return this.underlyingType.compare(val1, val2, opts);\n };\n LogicalType.prototype._deref = function(schema, opts) {\n var type = this.underlyingType;\n var isVisited = type.name !== void 0 && opts.derefed[type.name];\n schema = type._attrs(opts);\n if (!isVisited && opts.exportAttrs) {\n if (typeof schema == \"string\") {\n schema = { type: schema };\n }\n schema.logicalType = this._logicalTypeName;\n this._export(schema);\n }\n return schema;\n };\n LogicalType.prototype._skip = function(tap) {\n this.underlyingType._skip(tap);\n };\n LogicalType.prototype._export = function() {\n };\n LogicalType.prototype._fromValue = utils.abstractFunction;\n LogicalType.prototype._toValue = utils.abstractFunction;\n LogicalType.prototype._resolve = utils.abstractFunction;\n function AbstractLongType(noUnpack) {\n this._concreteTypeName = \"long\";\n PrimitiveType.call(this, true);\n this._noUnpack = !!noUnpack;\n }\n util.inherits(AbstractLongType, LongType);\n AbstractLongType.prototype.typeName = \"abstract:long\";\n AbstractLongType.prototype._check = function(val, flags, hook) {\n var b2 = this._isValid(val);\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n AbstractLongType.prototype._read = function(tap) {\n var buf, pos;\n if (this._noUnpack) {\n pos = tap.pos;\n tap.skipLong();\n buf = tap.buf.slice(pos, tap.pos);\n } else {\n buf = tap.unpackLongBytes(tap);\n }\n if (tap.isValid()) {\n return this._fromBuffer(buf);\n }\n };\n AbstractLongType.prototype._write = function(tap, val) {\n if (!this._isValid(val)) {\n throwInvalidError(val, this);\n }\n var buf = this._toBuffer(val);\n if (this._noUnpack) {\n tap.writeFixed(buf);\n } else {\n tap.packLongBytes(buf);\n }\n };\n AbstractLongType.prototype._deref = function() {\n return \"long\";\n };\n AbstractLongType.prototype._update = function(resolver, type) {\n var self = this;\n switch (type.typeName) {\n case \"int\":\n resolver._read = function(tap) {\n return self._fromJSON(type._read(tap));\n };\n break;\n case \"abstract:long\":\n case \"long\":\n resolver._read = function(tap) {\n return self._read(tap);\n };\n }\n };\n AbstractLongType.prototype._fromBuffer = utils.abstractFunction;\n AbstractLongType.prototype._toBuffer = utils.abstractFunction;\n AbstractLongType.prototype._fromJSON = utils.abstractFunction;\n AbstractLongType.prototype._toJSON = utils.abstractFunction;\n AbstractLongType.prototype._isValid = utils.abstractFunction;\n AbstractLongType.prototype.compare = utils.abstractFunction;\n function Field(schema, opts, scope) {\n var name = schema.name;\n if (typeof name != \"string\" || !isValidName(name)) {\n throw new Error(f2(\"invalid field name: %s\", name));\n }\n this.name = name;\n this.type = Type.forSchema(schema.type, opts, scope.child(name));\n this.aliases = schema.aliases || [];\n this.doc = schema.doc !== void 0 ? \"\" + schema.doc : void 0;\n this._order = function(order) {\n switch (order) {\n case \"ascending\":\n return 1;\n case \"descending\":\n return -1;\n case \"ignore\":\n return 0;\n default:\n throw new Error(f2(\"invalid order: %j\", order));\n }\n }(schema.order === void 0 ? \"ascending\" : schema.order);\n this._defaultValue = schema[\"default\"];\n var value = this._defaultValue;\n if (value !== void 0) {\n var type = this.type;\n try {\n var val = values.fromDefaultJSON(value, type);\n } catch (err) {\n throw new Error(f2(\"bad default in field %s: %s\", name, err));\n }\n if (isPrimitive(type.typeName) && type.typeName !== \"bytes\") {\n this.defaultValue = function() {\n return val;\n };\n } else {\n this.defaultValue = function() {\n return values.fromDefaultJSON(value, type);\n };\n }\n }\n Object.freeze(this);\n }\n Field.prototype.defaultValue = function() {\n };\n Object.defineProperty(Field.prototype, \"order\", {\n enumerable: true,\n get: function() {\n return [\"descending\", \"ignore\", \"ascending\"][this._order + 1];\n }\n });\n function Resolver(writerType, readerType) {\n this._writerType = writerType;\n this._readerType = readerType;\n this._read = null;\n this.itemsType = null;\n this.size = 0;\n this.symbols = null;\n this.valuesType = null;\n }\n Resolver.prototype._peek = Type.prototype._peek;\n function Scope(namespace, path) {\n this.namespace = namespace;\n this.path = path || [];\n }\n Scope.forOptions = function(opts) {\n return new Scope(opts ? opts.namespace : void 0);\n };\n Scope.prototype.clone = function() {\n return new Scope(this.namespace, this.path);\n };\n Scope.prototype.child = function(step) {\n return new Scope(this.namespace, this.path.concat(\"\" + step));\n };\n function readValue(type, tap, resolver, lazy) {\n if (resolver) {\n if (resolver._readerType !== type) {\n throw new Error(\"invalid resolver\");\n }\n return resolver._read(tap, lazy);\n } else {\n return type._read(tap);\n }\n }\n function qualifyName(name, namespace) {\n if (~name.indexOf(\".\")) {\n name = name.replace(/^\\./, \"\");\n } else if (namespace) {\n name = namespace + \".\" + name;\n }\n name.split(\".\").forEach(function(part) {\n if (!isValidName(part)) {\n throw new Error(f2(\"invalid name: %j\", name));\n }\n });\n var tail = utils.unqualifyName(name);\n return isPrimitive(tail) ? tail : name;\n }\n function getAliases(obj) {\n var names = {};\n if (obj.name) {\n names[obj.name] = true;\n }\n var aliases = obj.aliases;\n var i, l;\n for (i = 0, l = aliases.length; i < l; i++) {\n names[aliases[i]] = true;\n }\n return Object.keys(names);\n }\n function isPrimitive(typeName) {\n var type = TYPES[typeName];\n return type && type.prototype instanceof PrimitiveType;\n }\n function getClassName(typeName) {\n if (typeName === \"error\") {\n typeName = \"record\";\n } else {\n var match = /^([^:]+):(.*)$/.exec(typeName);\n if (match) {\n if (match[1] === \"union\") {\n typeName = match[2] + \"Union\";\n } else {\n typeName = match[1];\n }\n }\n }\n return utils.capitalize(typeName) + \"Type\";\n }\n function readArraySize(tap) {\n var n = tap.readLong();\n if (n < 0) {\n n = -n;\n tap.skipLong();\n }\n return n;\n }\n function isSafeLong(n) {\n return n >= -9007199254740990 && n <= 9007199254740990;\n }\n function isValidName(str) {\n return NAME_PATTERN.test(str);\n }\n function throwInvalidError(val, type) {\n throw new Error(f2(\"invalid %j: %j\", type.schema(), val));\n }\n function maybeQualify(name, ns) {\n var unqualified = utils.unqualifyName(name);\n return isPrimitive(unqualified) ? unqualified : qualifyName(name, ns);\n }\n function getTypeBucket(type) {\n var typeName = type.typeName;\n switch (typeName) {\n case \"double\":\n case \"float\":\n case \"int\":\n case \"long\":\n return \"number\";\n case \"bytes\":\n case \"fixed\":\n return \"buffer\";\n case \"enum\":\n return \"string\";\n case \"map\":\n case \"error\":\n case \"record\":\n return \"object\";\n default:\n return typeName;\n }\n }\n function getValueBucket(val) {\n if (val === null) {\n return \"null\";\n }\n var bucket = typeof val;\n if (bucket === \"object\") {\n if (Array.isArray(val)) {\n return \"array\";\n } else if (Buffer.isBuffer(val)) {\n return \"buffer\";\n }\n }\n return bucket;\n }\n function isAmbiguous(types) {\n var buckets = {};\n var i, l, bucket, type;\n for (i = 0, l = types.length; i < l; i++) {\n type = types[i];\n if (!utils.isType(type, \"logical\")) {\n bucket = getTypeBucket(type);\n if (buckets[bucket]) {\n return true;\n }\n buckets[bucket] = true;\n }\n }\n return false;\n }\n function combineNumbers(types) {\n var typeNames = [\"int\", \"long\", \"float\", \"double\"];\n var superIndex = -1;\n var superType = null;\n var i, l, type, index;\n for (i = 0, l = types.length; i < l; i++) {\n type = types[i];\n index = typeNames.indexOf(type.typeName);\n if (index > superIndex) {\n superIndex = index;\n superType = type;\n }\n }\n return superType;\n }\n function combineStrings(types, opts, scope) {\n var symbols = {};\n var i, l, type, typeSymbols;\n for (i = 0, l = types.length; i < l; i++) {\n type = types[i];\n if (type.typeName === \"string\") {\n return type;\n }\n typeSymbols = type.symbols;\n var j2, m2;\n for (j2 = 0, m2 = typeSymbols.length; j2 < m2; j2++) {\n symbols[typeSymbols[j2]] = true;\n }\n }\n return Type.forSchema({\n type: \"enum\",\n symbols: Object.keys(symbols)\n }, opts, scope);\n }\n function combineBuffers(types, opts, scope) {\n var size = -1;\n var i, l, type;\n for (i = 0, l = types.length; i < l; i++) {\n type = types[i];\n if (type.typeName === \"bytes\") {\n return type;\n }\n if (size === -1) {\n size = type.size;\n } else if (type.size !== size) {\n size = -2;\n }\n }\n return size < 0 ? Type.forSchema(\"bytes\", opts, scope) : types[0];\n }\n function combineObjects(types, opts, scope) {\n var allTypes = [];\n var fieldTypes = {};\n var fieldDefaults = {};\n var isValidRecord = true;\n var i, l, type, fields;\n for (i = 0, l = types.length; i < l; i++) {\n type = types[i];\n if (type.typeName === \"map\") {\n isValidRecord = false;\n allTypes.push(type.valuesType);\n } else {\n fields = type.fields;\n var j2, m2, field, fieldDefault, fieldName, fieldType;\n for (j2 = 0, m2 = fields.length; j2 < m2; j2++) {\n field = fields[j2];\n fieldName = field.name;\n fieldType = field.type;\n allTypes.push(fieldType);\n if (isValidRecord) {\n if (!fieldTypes[fieldName]) {\n fieldTypes[fieldName] = [];\n }\n fieldTypes[fieldName].push(fieldType);\n fieldDefault = field.defaultValue();\n if (fieldDefault !== void 0) {\n fieldDefaults[fieldName] = fieldDefault;\n }\n }\n }\n }\n }\n if (isValidRecord) {\n var fieldNames = Object.keys(fieldTypes);\n for (i = 0, l = fieldNames.length; i < l; i++) {\n fieldName = fieldNames[i];\n if (fieldTypes[fieldName].length < types.length && fieldDefaults[fieldName] === void 0) {\n if (opts && opts.strictDefaults) {\n isValidRecord = false;\n } else {\n fieldTypes[fieldName].unshift(\n Type.forSchema(\"null\", opts, scope.child(fieldName))\n );\n fieldDefaults[fieldName] = null;\n }\n }\n }\n }\n var schema;\n if (isValidRecord) {\n schema = {\n type: \"record\",\n fields: fieldNames.map(function(s) {\n var childScope = scope.child(s);\n var fieldType2 = Type.forTypes(fieldTypes[s], opts, childScope);\n var fieldDefault2 = fieldDefaults[s];\n if (fieldDefault2 !== void 0 && ~fieldType2.typeName.indexOf(\"union\")) {\n var unionTypes = fieldType2.types.slice();\n var i2, l2;\n for (i2 = 0, l2 = unionTypes.length; i2 < l2; i2++) {\n if (unionTypes[i2].isValid(fieldDefault2)) {\n break;\n }\n }\n if (i2 > 0) {\n var unionType = unionTypes[0];\n unionTypes[0] = unionTypes[i2];\n unionTypes[i2] = unionType;\n fieldType2 = Type.forSchema(unionTypes, opts, childScope);\n }\n }\n return {\n name: s,\n type: fieldType2,\n \"default\": fieldDefaults[s]\n };\n })\n };\n } else {\n schema = {\n type: \"map\",\n values: Type.forTypes(allTypes, opts, scope.child(\"*\"))\n };\n }\n return Type.forSchema(schema, opts, scope);\n }\n module.exports = {\n constructors: function() {\n var types = {\n Type,\n LogicalType,\n UnwrappedUnionType,\n WrappedUnionType\n };\n var typeNames = Object.keys(TYPES);\n var i, l, typeName;\n for (i = 0, l = typeNames.length; i < l; i++) {\n typeName = typeNames[i];\n types[getClassName(typeName)] = TYPES[typeName];\n }\n return types;\n }(),\n getTypeBucket,\n getValueBucket,\n isPrimitive,\n isValidName,\n qualifyName\n };\n }\n});\n\n// node_modules/@avro/types/lib/index.js\nvar require_lib = __commonJS({\n \"node_modules/@avro/types/lib/index.js\"(exports, module) {\n \"use strict\";\n module.exports = require_types().constructors;\n }\n});\n\n// node_modules/ultralight-s3/lib/index.min.js\nvar x = \"AWS4-HMAC-SHA256\";\nvar K = \"aws4_request\";\nvar O = \"s3\";\nvar v = \"2\";\nvar E = \"UNSIGNED-PAYLOAD\";\nvar W = \"application/octet-stream\";\nvar M = \"application/xml\";\nvar w = \"application/json\";\nvar X = [\"accessKeyId\", \"secretAccessKey\", \"sessionToken\", \"password\"];\nvar f = \"x-amz-content-sha256\";\nvar Z = \"x-amz-date\";\nvar V = \"host\";\nvar J = \"Authorization\";\nvar m = \"Content-Type\";\nvar T = \"Content-Length\";\nvar P = \"etag\";\nvar C = \"last-modified\";\nvar u = \"ultralight-s3 Module: \";\nvar ee = `${u}accessKeyId must be a non-empty string`;\nvar te = `${u}secretAccessKey must be a non-empty string`;\nvar se = `${u}endpoint must be a non-empty string`;\nvar re = `${u}bucketName must be a non-empty string`;\nvar j = `${u}key must be a non-empty string`;\nvar $ = `${u}uploadId must be a non-empty string`;\nvar L = `${u}parts must be a non-empty array`;\nvar k = `${u}Each part must have a partNumber (number) and ETag (string)`;\nvar D = `${u}data must be a Buffer or string`;\nvar B = `${u}prefix must be a string`;\nvar F = `${u}maxKeys must be a positive integer`;\nvar G = `${u}delimiter must be a string`;\nvar z = crypto.createHmac || (await import(\"node:crypto\")).createHmac;\nvar Q = crypto.createHash || (await import(\"node:crypto\")).createHash;\ntypeof z > \"u\" && typeof Q > \"u\" && console.error(\"ultralight-S3 Module: Crypto functions are not available, please report the issue with necessary description: https://github.com/sentienhq/ultralight-s3/issues\");\nvar ne = { contents: true };\nvar oe = (p) => `%${p.charCodeAt(0).toString(16).toUpperCase()}`;\nvar q = (p) => encodeURIComponent(p).replace(/[!'()*]/g, oe);\nvar y = (p) => q(p).replace(/%2F/g, \"/\");\nvar N = class {\n constructor({ accessKeyId: e, secretAccessKey: t, endpoint: r, bucketName: n, region: o = \"auto\", maxRequestSizeInBytes: i = 5242880, requestAbortTimeout: a = void 0, logger: c = void 0 }) {\n this.getBucketName = () => this.bucketName, this.setBucketName = (s) => {\n this.bucketName = s;\n }, this.getRegion = () => this.region, this.setRegion = (s) => {\n this.region = s;\n }, this.getEndpoint = () => this.endpoint, this.setEndpoint = (s) => {\n this.endpoint = s;\n }, this.getMaxRequestSizeInBytes = () => this.maxRequestSizeInBytes, this.setMaxRequestSizeInBytes = (s) => {\n this.maxRequestSizeInBytes = s;\n }, this.sanitizeETag = (s) => H(s), this.getProps = () => ({ accessKeyId: this.accessKeyId, secretAccessKey: this.secretAccessKey, region: this.region, bucket: this.bucketName, endpoint: this.endpoint, maxRequestSizeInBytes: this.maxRequestSizeInBytes, requestAbortTimeout: this.requestAbortTimeout, logger: this.logger }), this.setProps = (s) => {\n this._validateConstructorParams(s.accessKeyId, s.secretAccessKey, s.bucketName, s.endpoint), this.accessKeyId = s.accessKeyId, this.secretAccessKey = s.secretAccessKey, this.region = s.region || \"auto\", this.bucketName = s.bucketName, this.endpoint = s.endpoint, this.maxRequestSizeInBytes = s.maxRequestSizeInBytes || 5242880, this.requestAbortTimeout = s.requestAbortTimeout, this.logger = s.logger;\n }, this._validateConstructorParams(e, t, r, n), this.accessKeyId = e, this.secretAccessKey = t, this.endpoint = r, this.bucketName = n, this.region = o, this.maxRequestSizeInBytes = i, this.requestAbortTimeout = a, this.logger = c;\n }\n _validateConstructorParams(e, t, r, n) {\n if (typeof e != \"string\" || e.trim().length === 0) throw new TypeError(ee);\n if (typeof t != \"string\" || t.trim().length === 0) throw new TypeError(te);\n if (typeof r != \"string\" || r.trim().length === 0) throw new TypeError(se);\n if (typeof n != \"string\" || n.trim().length === 0) throw new TypeError(re);\n }\n _checkMethodHeadnGet(e) {\n if (e !== \"GET\" && e !== \"HEAD\") throw this._log(\"error\", `${u}method must be either GET or HEAD`), new Error(\"method must be either GET or HEAD\");\n }\n _checkKey(e) {\n if (typeof e != \"string\" || e.trim().length === 0) throw this._log(\"error\", j), new TypeError(j);\n }\n _checkDelimiter(e) {\n if (typeof e != \"string\" || e.trim().length === 0) throw this._log(\"error\", G), new TypeError(G);\n }\n _checkPrefix(e) {\n if (typeof e != \"string\") throw this._log(\"error\", B), new TypeError(B);\n }\n _checkMaxKeys(e) {\n if (typeof e != \"number\" || e <= 0) throw this._log(\"error\", F), new TypeError(F);\n }\n _checkOpts(e) {\n if (typeof e != \"object\") throw this._log(\"error\", `${u}opts must be an object`), new TypeError(`${u}opts must be an object`);\n }\n _log(e, t, r = {}) {\n if (this.logger && typeof this.logger[e] == \"function\") {\n let n = (a) => typeof a != \"object\" || a === null ? a : Object.keys(a).reduce((c, s) => (X.includes(s.toLowerCase()) ? c[s] = \"[REDACTED]\" : typeof a[s] == \"object\" && a[s] !== null ? c[s] = n(a[s]) : c[s] = a[s], c), Array.isArray(a) ? [] : {}), o = n(r), i = { timestamp: (/* @__PURE__ */ new Date()).toISOString(), level: e, message: t, ...o, context: n({ bucketName: this.bucketName, region: this.region, endpoint: this.endpoint, accessKeyId: this.accessKeyId ? `${this.accessKeyId.substring(0, 4)}...` : void 0 }) };\n this.logger[e](i);\n }\n }\n async getContentLength(e) {\n this._checkKey(e);\n let t = { [f]: E }, r = y(e), { url: n, headers: o } = await this._sign(\"HEAD\", r, {}, t, \"\"), a = (await this._sendRequest(n, \"HEAD\", o)).headers.get(T);\n return a ? parseInt(a, 10) : 0;\n }\n async bucketExists() {\n let e = { [f]: E }, { url: t, headers: r } = await this._sign(\"HEAD\", \"\", {}, e, \"\"), n = await this._sendRequest(t, \"HEAD\", r);\n return !!(n.ok && n.status === 200);\n }\n async fileExists(e, t = {}) {\n this._checkKey(e);\n let { filteredOpts: r, conditionalHeaders: n } = this._filterIfHeaders(t), o = { [f]: E, ...n }, i = y(e), { url: a, headers: c } = await this._sign(\"HEAD\", i, r, o, \"\");\n try {\n let s = await this._sendRequest(a, \"HEAD\", c, \"\", [200, 404, 412, 304]);\n return s.status === 404 ? false : s.status === 412 || s.status === 304 ? null : s.ok && s.status === 200 ? true : (this._handleErrorResponse(s), false);\n } catch (s) {\n let l = s instanceof Error ? s.message : String(s);\n throw this._log(\"error\", `${u}Failed to check if file exists: ${l}`), new Error(`${u}Failed to check if file exists: ${l}`);\n }\n }\n async _sign(e, t, r, n, o) {\n let i = (/* @__PURE__ */ new Date()).toISOString().replace(/[:-]|\\.\\d{3}/g, \"\"), a = typeof t == \"string\" && t.length > 0 ? new URL(t, this.endpoint) : new URL(this.endpoint);\n a.pathname = `/${encodeURI(this.bucketName)}${a.pathname}`, n[f] = o ? await U(o) : E, n[Z] = i, n[V] = a.host;\n let c = this._buildCanonicalHeaders(n), s = Object.keys(n).map((_) => _.toLowerCase()).sort().join(\";\"), l = await this._buildCanonicalRequest(e, a, r, c, s, o), h = await this._buildStringToSign(i, l), d = await this._calculateSignature(i, h), g = this._buildAuthorizationHeader(i, s, d);\n return n[J] = g, { url: a.toString(), headers: n };\n }\n _buildCanonicalHeaders(e) {\n return Object.entries(e).map(([t, r]) => `${t.toLowerCase()}:${String(r).trim()}`).sort().join(`\n`);\n }\n async _buildCanonicalRequest(e, t, r, n, o, i) {\n return [e, t.pathname, this._buildCanonicalQueryString(r), `${n}\n`, o, i ? await U(i) : E].join(`\n`);\n }\n async _buildStringToSign(e, t) {\n let r = [e.slice(0, 8), this.region, O, K].join(\"/\");\n return [x, e, r, await U(t)].join(`\n`);\n }\n async _calculateSignature(e, t) {\n let r = await this._getSignatureKey(e.slice(0, 8));\n return A(r, t, \"hex\");\n }\n _buildAuthorizationHeader(e, t, r) {\n let n = [e.slice(0, 8), this.region, O, K].join(\"/\");\n return [`${x} Credential=${this.accessKeyId}/${n}`, `SignedHeaders=${t}`, `Signature=${r}`].join(\", \");\n }\n _filterIfHeaders(e) {\n let t = {}, r = {}, n = [\"if-match\", \"if-none-match\", \"if-modified-since\", \"if-unmodified-since\"];\n for (let [o, i] of Object.entries(e)) n.includes(o) ? r[o] = i : t[o] = i;\n return { filteredOpts: t, conditionalHeaders: r };\n }\n async list(e = \"/\", t = \"\", r = 1e3, n = \"GET\", o = {}) {\n this._checkDelimiter(e), this._checkPrefix(t), this._checkMaxKeys(r), this._checkMethodHeadnGet(n), this._checkOpts(o), this._log(\"info\", `Listing objects in ${t}`);\n let i = { \"list-type\": v, \"max-keys\": String(r), ...o };\n t.length > 0 && (i.prefix = t);\n let a = { [m]: w, [f]: E }, c = e === \"/\" ? e : q(e), { url: s, headers: l } = await this._sign(\"GET\", c, i, a, \"\"), h = `${s}?${new URLSearchParams(i)}`, d = await this._sendRequest(h, \"GET\", l), g = await d.text();\n if (n === \"HEAD\") {\n let R = d.headers.get(T), S = d.headers.get(C), Y = d.headers.get(P);\n return { size: R ? +R : void 0, mtime: S ? new Date(S) : void 0, ETag: Y || void 0 };\n }\n let _ = b(g), I = _.listBucketResult || _.error || _;\n return I.contents || I;\n }\n async listMultiPartUploads(e = \"/\", t = \"\", r = \"GET\", n = {}) {\n var o, i, a;\n this._checkDelimiter(e), this._checkPrefix(t), this._checkMethodHeadnGet(r), this._checkOpts(n), this._log(\"info\", `Listing multipart uploads in ${t}`);\n let c = { uploads: \"\", ...n }, s = { [m]: w, [f]: E }, l = e === \"/\" ? e : q(e), { url: h, headers: d } = await this._sign(\"GET\", l, c, s, \"\"), g = `${h}?${new URLSearchParams(c)}`, _ = await this._sendRequest(g, \"GET\", d), I = await _.text();\n if (r === \"HEAD\") return { size: +((o = _.headers.get(T)) !== null && o !== void 0 ? o : \"0\"), mtime: new Date((i = _.headers.get(C)) !== null && i !== void 0 ? i : \"\"), ETag: (a = _.headers.get(P)) !== null && a !== void 0 ? a : \"\" };\n let R = b(I), S = R.listMultipartUploadsResult || R.error || R;\n return S.uploads || S;\n }\n async get(e, t = {}) {\n this._checkKey(e), this._log(\"info\", `Getting object ${e}`);\n let { filteredOpts: r, conditionalHeaders: n } = this._filterIfHeaders(t), o = { [m]: w, [f]: E, ...n }, i = y(e), { url: a, headers: c } = await this._sign(\"GET\", i, r, o, \"\"), s = await this._sendRequest(a, \"GET\", c, \"\", [200, 404, 412, 304]);\n if (s.status === 404 || s.status === 412 || s.status === 304) return this._log(\"error\", `Failed to get object. Status: ${s.status}`), null;\n if (!s.ok) throw this._log(\"error\", `Failed to get object. Status: ${s.status}`), new Error(`Failed to get object. Status: ${s.status}`);\n return s.text();\n }\n async getObjectWithETag(e, t = {}) {\n this._checkKey(e), this._log(\"info\", `Getting object ${e}`);\n let { filteredOpts: r, conditionalHeaders: n } = this._filterIfHeaders(t), o = { [m]: w, [f]: E, ...n }, i = y(e), { url: a, headers: c } = await this._sign(\"GET\", i, r, o, \"\");\n try {\n let s = await this._sendRequest(a, \"GET\", c, \"\", [200, 404, 412, 304]);\n if (s.status === 404 || s.status === 412 || s.status === 304) return this._log(\"error\", `Failed to get object. Status: ${s.status}`), { etag: null, data: null };\n if (!s.ok) throw this._log(\"error\", `Failed to get object. Status: ${s.status}`), new Error(`Failed to get object. Status: ${s.status}`);\n let l = s.headers.get(\"etag\");\n if (!l) throw new Error(\"ETag not found in response headers\");\n let h = await s.text();\n return { etag: H(l), data: h };\n } catch (s) {\n throw this._log(\"error\", `Error getting object ${e} with ETag: ${s}`), s;\n }\n }\n async getEtag(e, t = {}) {\n this._checkKey(e), this._log(\"info\", `Getting etag object ${e}`);\n let { filteredOpts: r, conditionalHeaders: n } = this._filterIfHeaders(t), o = { [m]: w, [f]: E, ...n }, i = y(e), { url: a, headers: c } = await this._sign(\"HEAD\", i, r, o, \"\"), s = await this._sendRequest(a, \"HEAD\", c, \"\", [200, 412, 304]);\n if (this._log(\"info\", `Response status: ${s.status, s.statusText}`), s.status === 412 || s.status === 304) return null;\n let l = s.headers.get(\"etag\");\n if (!l) throw this._log(\"error\", \"ETag not found in response headers\"), new Error(\"ETag not found in response headers\");\n return H(l);\n }\n async getResponse(e, t = true, r = 0, n = this.maxRequestSizeInBytes, o = {}) {\n this._checkKey(e);\n let { filteredOpts: i, conditionalHeaders: a } = this._filterIfHeaders({ ...o }), c = { [m]: w, [f]: E, ...t ? {} : { range: `bytes=${r}-${n - 1}` }, ...a }, s = y(e), { url: l, headers: h } = await this._sign(\"GET\", s, i, c, \"\"), d = `${l}?${new URLSearchParams(i)}`;\n return this._sendRequest(d, \"GET\", h);\n }\n async put(e, t) {\n if (this._checkKey(e), !(t instanceof Buffer || typeof t == \"string\")) throw this._log(\"error\", D), new TypeError(D);\n this._log(\"info\", `Uploading object ${e}`);\n let r = typeof t == \"string\" ? Buffer.byteLength(t) : t.length, n = { [T]: r }, o = y(e), { url: i, headers: a } = await this._sign(\"PUT\", o, {}, n, t);\n return await this._sendRequest(i, \"PUT\", a, t);\n }\n async getMultipartUploadId(e, t = W) {\n if (this._checkKey(e), typeof t != \"string\") throw this._log(\"error\", `${u}fileType must be a string`), new TypeError(`${u}fileType must be a string`);\n this._log(\"info\", `Initiating multipart upload for object ${e}`);\n let r = { uploads: \"\" }, n = { [m]: t, [f]: E }, o = y(e), { url: i, headers: a } = await this._sign(\"POST\", o, r, n, \"\"), c = `${i}?${new URLSearchParams(r)}`, l = await (await this._sendRequest(c, \"POST\", a)).text(), h = b(l);\n if (typeof h == \"object\" && h !== null && \"error\" in h && typeof h.error == \"object\" && h.error !== null && \"message\" in h.error) {\n let d = String(h.error.message);\n throw this._log(\"error\", `${u}Failed to abort multipart upload: ${d}`), new Error(`${u}Failed to abort multipart upload: ${d}`);\n }\n if (typeof h == \"object\" && h !== null) {\n if (!h.initiateMultipartUploadResult || !h.initiateMultipartUploadResult.uploadId) throw this._log(\"error\", `${u}Failed to create multipart upload: no uploadId in response`), new Error(`${u}Failed to create multipart upload: Missing upload ID in response`);\n return h.initiateMultipartUploadResult.uploadId;\n } else throw this._log(\"error\", `${u}Failed to create multipart upload: unexpected response format`), new Error(`${u}Failed to create multipart upload: Unexpected response format`);\n }\n async uploadPart(e, t, r, n, o = {}) {\n this._validateUploadPartParams(e, t, r, n, o);\n let i = { uploadId: r, partNumber: n, ...o }, a = { [T]: t.length }, c = y(e), { url: s, headers: l } = await this._sign(\"PUT\", c, i, a, t), h = `${s}?${new URLSearchParams(i)}`, d = await this._sendRequest(h, \"PUT\", l, t), g = H(d.headers.get(\"etag\") || \"\");\n return { partNumber: n, ETag: g };\n }\n _validateUploadPartParams(e, t, r, n, o) {\n if (this._checkKey(e), !(t instanceof Buffer || typeof t == \"string\")) throw this._log(\"error\", D), new TypeError(D);\n if (typeof r != \"string\" || r.trim().length === 0) throw this._log(\"error\", $), new TypeError($);\n if (!Number.isInteger(n) || n <= 0) throw this._log(\"error\", `${u}partNumber must be a positive integer`), new TypeError(`${u}partNumber must be a positive integer`);\n this._checkOpts(o);\n }\n async completeMultipartUpload(e, t, r) {\n if (this._checkKey(e), typeof t != \"string\" || t.trim().length === 0) throw this._log(\"error\", $), new TypeError($);\n if (!Array.isArray(r) || r.length === 0) throw this._log(\"error\", L), new TypeError(L);\n if (!r.every((_) => typeof _.partNumber == \"number\" && typeof _.ETag == \"string\")) throw this._log(\"error\", k), new TypeError(k);\n this._log(\"info\", `Complete multipart upload ${t} for object ${e}`);\n let n = { uploadId: t }, o = this._buildCompleteMultipartUploadXml(r), i = { [m]: M, [T]: Buffer.byteLength(o).toString(), [f]: await U(o) }, a = y(e), { url: c, headers: s } = await this._sign(\"POST\", a, n, i, o), l = `${c}?${new URLSearchParams(n)}`, d = await (await this._sendRequest(l, \"POST\", s, o)).text(), g = b(d);\n if (typeof g == \"object\" && g !== null && \"error\" in g && typeof g.error == \"object\" && g.error !== null && \"message\" in g.error) {\n let _ = String(g.error.message);\n throw this._log(\"error\", `${u}Failed to abort multipart upload: ${_}`), new Error(`${u}Failed to abort multipart upload: ${_}`);\n }\n return g.completeMultipartUploadResult;\n }\n async abortMultipartUpload(e, t) {\n if (this._checkKey(e), typeof t != \"string\" || t.trim().length === 0) throw this._log(\"error\", $), new TypeError($);\n this._log(\"info\", `Aborting multipart upload ${t} for object ${e}`);\n let r = { uploadId: t }, n = { [m]: M, [f]: E };\n try {\n let o = y(e), { url: i, headers: a } = await this._sign(\"DELETE\", o, r, n, \"\"), c = `${i}?${new URLSearchParams(r)}`, s = await this._sendRequest(c, \"DELETE\", a);\n if (s.ok) {\n let l = await s.text(), h = b(l);\n if (typeof h == \"object\" && h !== null && \"error\" in h && typeof h.error == \"object\" && h.error !== null && \"message\" in h.error) {\n let d = String(h.error.message);\n throw this._log(\"error\", `${u}Failed to abort multipart upload: ${d}`), new Error(`${u}Failed to abort multipart upload: ${d}`);\n }\n return { status: \"Aborted\", key: e, uploadId: t, response: h };\n } else throw this._log(\"error\", `${u}Abort request failed with status ${s.status}`), new Error(`${u}Abort request failed with status ${s.status}`);\n } catch (o) {\n let i = o instanceof Error ? o.message : String(o);\n throw this._log(\"error\", `${u}Failed to abort multipart upload for key ${e}: ${i}`), new Error(`${u}Failed to abort multipart upload for key ${e}: ${i}`);\n }\n }\n _buildCompleteMultipartUploadXml(e) {\n return `\n \n ${e.map((t) => `\n \n ${t.partNumber}\n ${t.ETag}\n \n `).join(\"\")}\n \n `;\n }\n async delete(e) {\n this._checkKey(e), this._log(\"info\", `Deleting object ${e}`);\n let t = { [m]: w, [f]: E }, r = y(e), { url: n, headers: o } = await this._sign(\"DELETE\", r, {}, t, \"\"), i = await this._sendRequest(n, \"DELETE\", o);\n return i.status === 204 || i.status === 200;\n }\n async _sendRequest(e, t, r, n, o = []) {\n this._log(\"info\", `Sending ${t} request to ${e}, headers: ${JSON.stringify(r)}`);\n let i = await fetch(e, { method: t, headers: r, body: [\"GET\", \"HEAD\"].includes(t) ? void 0 : n, signal: this.requestAbortTimeout !== void 0 ? AbortSignal.timeout(this.requestAbortTimeout) : void 0 });\n return !i.ok && !o.includes(i.status) && await this._handleErrorResponse(i), i;\n }\n async _handleErrorResponse(e) {\n let t = await e.text(), r = e.headers.get(\"x-amz-error-code\") || \"Unknown\", n = e.headers.get(\"x-amz-error-message\") || e.statusText;\n throw this._log(\"error\", `${u}Request failed with status ${e.status}: ${r} - ${n},err body: ${t}`), new Error(`${u}Request failed with status ${e.status}: ${r} - ${n}, err body: ${t}`);\n }\n _buildCanonicalQueryString(e) {\n return Object.keys(e).length < 1 ? \"\" : Object.keys(e).sort().map((t) => `${encodeURIComponent(t)}=${encodeURIComponent(e[t])}`).join(\"&\");\n }\n async _getSignatureKey(e) {\n let t = await A(`AWS4${this.secretAccessKey}`, e), r = await A(t, this.region), n = await A(r, O);\n return A(n, K);\n }\n};\nvar U = async (p) => {\n let e = Q(\"sha256\");\n return e.update(p), e.digest(\"hex\");\n};\nvar A = async (p, e, t) => {\n let r = z(\"sha256\", p);\n return r.update(e), r.digest(t);\n};\nvar H = (p) => {\n let e = { '\"': \"\", \""\": \"\", \""\": \"\", \""\": \"\", \""\": \"\" };\n return p.replace(/^(\"|"|")|(\"|"|")$/g, (t) => e[t]);\n};\nvar b = (p) => {\n let e = (o) => o.replace(/"/g, '\"').replace(/'/g, \"'\").replace(/</g, \"<\").replace(/>/g, \">\").replace(/&/g, \"&\"), t = {}, r = /<(\\w)([-\\w]+)(?:\\/|[^>]*>((?:(?!<\\1)[\\s\\S])*)<\\/\\1\\2)>/gm, n;\n for (; n = r.exec(p); ) {\n let [, o, i, a] = n, c = o.toLowerCase() + i, s = a != null ? b(a) : true;\n typeof s == \"string\" ? t[c] = H(e(s)) : Array.isArray(t[c]) ? t[c].push(s) : t[c] = t[c] != null ? [t[c], s] : ne[c] ? [s] : s;\n }\n return Object.keys(t).length ? t : e(p);\n};\n\n// src/lowstorage.ts\nvar import_types = __toESM(require_lib(), 1);\n\n// src/errors.ts\nvar lowstorage_ERROR_CODES = {\n MISSING_ARGUMENT: \"MISSING_ARGUMENT\",\n COLLECTION_EXISTS: \"COLLECTION_EXISTS\",\n CREATE_COLLECTION_ERROR: \"CREATE_COLLECTION_ERROR\",\n RENAME_COLLECTION_ERROR: \"RENAME_COLLECTION_ERROR\",\n REMOVE_COLLECTION_ERROR: \"REMOVE_COLLECTION_ERROR\",\n UPDATE_COLLECTION_SCHEMA_ERROR: \"UPDATE_COLLECTION_SCHEMA_ERROR\",\n COLLECTION_NOT_FOUND: \"COLLECTION_NOT_FOUND\",\n SCHEMA_VALIDATION_ERROR: \"SCHEMA_VALIDATION_ERROR\",\n DOCUMENT_VALIDATION_ERROR: \"DOCUMENT_VALIDATION_ERROR\",\n S3_OPERATION_ERROR: \"S3_OPERATION_ERROR\",\n FIND_ERROR: \"FIND_ERROR\",\n FIND_ONE_ERROR: \"FIND_ONE_ERROR\",\n SAVE_DATA_ERROR: \"SAVE_DATA_ERROR\",\n INSERT_ERROR: \"INSERT_ERROR\",\n UPDATE_ERROR: \"UPDATE_ERROR\",\n UPDATE_ONE_ERROR: \"UPDATE_ONE_ERROR\",\n DELETE_ERROR: \"DELETE_ERROR\",\n COUNT_ERROR: \"COUNT_ERROR\",\n UNKNOWN_ERROR: \"UNKNOWN_ERROR\"\n};\nvar lowstorageError = class extends Error {\n constructor(message, code = lowstorage_ERROR_CODES.UNKNOWN_ERROR) {\n super(`lowstorageError: ${message} :: code: ${code}`);\n this.name = this.constructor.name;\n this.code = code;\n Error.captureStackTrace(this, this.constructor);\n }\n};\nvar SchemaValidationError = class extends lowstorageError {\n constructor(message, code = lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR) {\n super(message, code);\n super(message, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR);\n }\n};\nvar DocumentValidationError = class extends lowstorageError {\n constructor(message, code = lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR) {\n super(message, code);\n super(message, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR);\n }\n};\nvar S3OperationError = class extends lowstorageError {\n constructor(message, operation) {\n super(`S3 ${operation} operation failed: ${message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n};\n\n// src/helpers.ts\nimport { randomUUID } from \"node:crypto\";\nvar matchesQuery = (document, query) => {\n return Object.keys(query).every((key) => document[key] === query[key]);\n};\nvar generateUUID = async () => {\n if (typeof randomUUID !== \"undefined\" && typeof randomUUID === \"function\") {\n return randomUUID();\n }\n if (typeof crypto !== \"undefined\" && typeof crypto === \"object\" && typeof crypto.randomUUID === \"function\") {\n return crypto.randomUUID();\n }\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, function(c) {\n var r = Math.random() * 16 | 0, v2 = c === \"x\" ? r : r & 3 | 8;\n return v2.toString(16);\n });\n};\nvar _getAvroSchema = (value, name = \"SubAutoGenerated\") => {\n switch (typeof value) {\n case \"string\":\n if (_isUUID(value)) {\n return {\n type: \"string\",\n name: \"_id\",\n size: 16,\n logicalType: \"UUID\"\n };\n }\n return \"string\";\n case \"number\":\n return Number.isInteger(value) ? \"int\" : \"float\";\n case \"boolean\":\n return \"boolean\";\n case \"object\":\n if (value === null) return \"null\";\n if (Array.isArray(value)) return { type: \"array\", items: _getAvroSchema(value[0]) };\n return inferAvroSchema(value, name);\n default:\n return \"string\";\n }\n};\nvar ensureIdFieldInSchema = (schema) => {\n const idField = {\n name: \"_id\",\n type: \"string\",\n size: 16,\n logicalType: \"UUID\"\n };\n if (typeof schema === \"undefined\" || schema === null) {\n return schema;\n }\n if (\"type\" in schema && schema.type === \"record\" && \"fields\" in schema && Array.isArray(schema.fields)) {\n const hasIdField = schema.fields.some((field) => field.name === \"_id\");\n if (!hasIdField) {\n schema.fields.unshift(idField);\n }\n } else if (\"type\" in schema && schema.type === \"array\" && \"items\" in schema && schema.items !== null && typeof schema.items === \"object\" && \"type\" in schema.items && schema.items.type === \"record\" && \"fields\" in schema.items && Array.isArray(schema.items.fields)) {\n const hasIdField = schema.items.fields.some((field) => field.name === \"_id\");\n if (!hasIdField) {\n schema.items.fields.unshift(idField);\n }\n }\n return schema;\n};\nvar inferAvroSchema = (data, typeName = \"AutoGenerated\") => {\n if (Array.isArray(data)) {\n data = data[0];\n }\n const fields = Object.entries(data).map(([name, value]) => {\n return { name, type: _getAvroSchema(value, `${typeName}.${name}`) };\n });\n const schema = {\n type: \"record\",\n name: typeName,\n fields\n };\n return ensureIdFieldInSchema(schema);\n};\nvar _isUUID = (str) => {\n const uuidV4Regex = /^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i;\n return uuidV4Regex.test(str);\n};\n\n// src/lowstorage.ts\nvar MODULE_NAME = \"lowstorage\";\nvar DEFAULT_DELIMITER = \"/\";\nvar PROJECT_DIR_PREFIX = \"lowstorage\";\nvar COL_SUFFIX = \".avro\";\nvar CHUNG_1MB = 1024 * 1024;\nvar CHUNG_5MB = 5 * CHUNG_1MB;\nvar EMPTY_DATA = Buffer.from(\"\", \"utf8\");\nvar errorValidationFn = (errorCode = lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR) => {\n throw new DocumentValidationError(`${MODULE_NAME}: Invalid document or schema ${errorCode}`);\n};\nvar _hasColName = (colName = \"\") => {\n if (colName.trim() === \"\" || colName === null || typeof colName === \"undefined\" || colName.length > 255 || colName === null) {\n throw new lowstorageError(`${MODULE_NAME}: Collection name is required, null or too long`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n }\n};\nvar lowstorage = class {\n constructor(options) {\n this._checkArgs = (args) => {\n const requiredFields = [\"accessKeyId\", \"secretAccessKey\", \"endpoint\", \"bucketName\"];\n for (const field of requiredFields) {\n if (!args[field]) {\n throw new lowstorageError(`${MODULE_NAME}: ${field} is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n }\n }\n };\n /**\n * Get the S3 instance associated with the lowstorage instance.\n * @returns {S3} The S3 instance. Use this to perform S3 operations. Check for ultralight-s3 for more details.\n */\n this.s3 = () => {\n return this._s3;\n };\n this._checkArgs(options);\n this._schemas = /* @__PURE__ */ new Map();\n this._s3 = new N(options);\n this._dirPrefix = options.dirPrefix || PROJECT_DIR_PREFIX;\n this._avroParse = import_types.Type;\n }\n /**\n * List all collections.\n * @returns {Promise} An array of collection names.\n * @throws {S3OperationError} If there's an error during S3 operation.\n */\n async listCollections() {\n try {\n const listed = await this._s3.list(DEFAULT_DELIMITER, this._dirPrefix);\n if (Array.isArray(listed)) {\n return listed.map((entry) => entry.key.slice(this._dirPrefix.length + 1, -COL_SUFFIX.length));\n } else if (typeof listed === \"object\" && listed !== null && \"keyCount\" in listed && listed.keyCount === \"0\") {\n return [];\n }\n return [];\n } catch (error) {\n throw new S3OperationError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n }\n /**\n * Check if a collection exists.\n * @param {string} colName - The name of the collection.\n * @returns {Promise} True if the collection exists, false otherwise.\n * @throws {lowstorageError} If there's an error.\n */\n async collectionExists(colName = \"\") {\n try {\n _hasColName(colName);\n const exists = await this._s3.fileExists(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`);\n return !!exists;\n } catch (error) {\n if (error.message.includes(\"Not Found\")) {\n return false;\n }\n throw new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND);\n }\n }\n /**\n * Create a new collection.\n * @param {string} colName - The name of the collection.\n * @param {Object} [schema] - The schema for the collection.\n * @param {Array} [data=[]] - The initial data for the collection.\n * @returns {Promise} A Promise that resolves to a Collection object.\n * @throws {lowstorageError} If there's an error.\n */\n async createCollection(colName = \"\", schema, data = []) {\n try {\n _hasColName(colName);\n const exists = await this.collectionExists(colName);\n if (!exists) {\n if (typeof schema !== \"undefined\" && schema !== null) {\n try {\n const isValid = this._avroParse.isValid(schema);\n if (!isValid) {\n throw new SchemaValidationError(\n `${MODULE_NAME}: Schema is invalid: ${schema} ${lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR}`\n );\n }\n } catch (error) {\n throw new SchemaValidationError(`${MODULE_NAME}: Schema is invalid: ${schema}`, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR);\n }\n }\n if (data.length > 0 && schema) {\n const wrapperType = this._avroParse.forSchema({ type: \"array\", items: schema });\n await this._s3.put(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`, wrapperType.toBuffer(data));\n } else {\n await this._s3.put(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`, EMPTY_DATA);\n }\n return this.collection(colName, schema, false);\n }\n throw new lowstorageError(`${MODULE_NAME}: Collection ${colName} already exists`, lowstorage_ERROR_CODES.COLLECTION_EXISTS);\n } catch (error) {\n if (error instanceof lowstorageError) {\n throw error;\n }\n throw new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.CREATE_COLLECTION_ERROR);\n }\n }\n /**\n * Remove a collection.\n * @param {string} colName - The name of the collection.\n * @returns {Promise} A Promise that resolves to true if the collection is removed, false otherwise.\n * @throws {lowstorageError} If there's an error.\n */\n async removeCollection(colName = \"\") {\n try {\n _hasColName(colName);\n const exists = await this.collectionExists(colName);\n if (exists) {\n await this._s3.delete(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`);\n const exists2 = await this.collectionExists(colName);\n if (typeof exists2 === \"boolean\") {\n if (!exists2) {\n this._schemas.delete(colName);\n return true;\n }\n throw new lowstorageError(`${MODULE_NAME}: Failed to delete collection ${colName}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n throw new S3OperationError(`${MODULE_NAME}: Failed to delete collection ${colName}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n throw new lowstorageError(`${MODULE_NAME}: Collection ${colName} does not exist`, lowstorage_ERROR_CODES.REMOVE_COLLECTION_ERROR);\n } catch (error) {\n if (error instanceof S3OperationError) {\n throw error;\n }\n throw new lowstorageError(\n `${MODULE_NAME}: Failed to remove collection: ${error.message}`,\n lowstorage_ERROR_CODES.REMOVE_COLLECTION_ERROR\n );\n }\n }\n /**\n * Get or create a collection.\n * @param {string} colName - The name of the collection.\n * @param {Object} [schema] - The schema for the collection.\n * @param {boolean} [autoCreate=true] - Whether to automatically create the collection if it doesn't exist.\n * @returns {Promise} A Promise that resolves to a Collection object.\n * @throws {lowstorageError} If there's an error.\n */\n async collection(colName = \"\", schema, autoCreate = true) {\n try {\n _hasColName(colName);\n const colPath = `${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`;\n const exists = await this._s3.fileExists(colPath);\n if (!exists) {\n if (!autoCreate) {\n throw new lowstorageError(`${MODULE_NAME}: Collection ${colName} does not exist`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND);\n }\n await this._s3.put(colPath, EMPTY_DATA);\n }\n const colSchema = schema || this._schemas.get(colName) || void 0;\n return new Collection(colName, colSchema, this._s3, this._dirPrefix);\n } catch (error) {\n if (error.message.includes(\"unknown type\")) {\n throw new SchemaValidationError(\n `${MODULE_NAME}: Schema input is invalid: ${error.message}`,\n lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR\n );\n }\n throw new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND);\n }\n }\n};\nvar Collection = class _Collection {\n constructor(colName = \"\", schema, s3, dirPrefix = PROJECT_DIR_PREFIX, safeWrite = false, chunkSize = CHUNG_5MB) {\n this.getProps = () => ({\n colName: this._colName,\n s3: this._s3,\n schema: this._schema,\n avroParse: this._avroParse,\n avroType: this._avroType,\n dirPrefix: this._dirPrefix,\n safeWrite: this._safeWrite,\n chunkSize: this._chunkSize\n });\n this.setProps = (props) => {\n this._colName = props.colName;\n this._schema = props.schema;\n this._s3 = props.s3;\n this._avroParse = props.avroParse;\n this._avroType = props.avroType;\n this._dirPrefix = props.dirPrefix;\n this._safeWrite = props.safeWrite;\n this._chunkSize = props.chunkSize;\n };\n this.setSafeWrite = (safeWrite) => {\n this._safeWrite = safeWrite;\n };\n this.getSafeWrite = () => {\n return this._safeWrite;\n };\n this.getAvroSchema = () => {\n return this._schema;\n };\n this.setAvroSchema = (schema) => {\n this._schema = ensureIdFieldInSchema(schema);\n this._avroType = typeof schema === \"undefined\" ? null : this._avroParse.forSchema(schema);\n };\n this._colName = colName.trim();\n this._s3 = s3;\n this._schema = ensureIdFieldInSchema(schema);\n this._dirPrefix = dirPrefix;\n this._safeWrite = safeWrite;\n this._chunkSize = chunkSize || CHUNG_5MB;\n this._s3.setMaxRequestSizeInBytes(this._chunkSize);\n this._avroParse = import_types.Type;\n this._lastETag = \"\";\n this._dataCache = [];\n this._avroType = typeof schema === \"undefined\" ? null : this._avroParse.ForSchema(schema);\n this._key = `${this._dirPrefix}${DEFAULT_DELIMITER}${this._colName}${COL_SUFFIX}`;\n }\n async _loadData() {\n try {\n if (this._avroType === null || typeof this._avroType === \"undefined\") {\n throw new lowstorageError(\n `${MODULE_NAME}: Missing type definition. Configure before operations `,\n lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR\n );\n }\n const { etag, data } = await this._s3.getObjectWithETag(this._key, { \"if-none-match\": this._lastETag });\n if (data === null) {\n return this._dataCache;\n }\n this._lastETag = etag === null ? this._lastETag : etag;\n const wrapperType = this._avroParse.forSchema({ type: \"array\", items: this._avroType });\n if (data.length < this._chunkSize) {\n this._dataCache = data.length > 0 ? wrapperType.fromBuffer(Buffer.from(data, \"utf8\")) : [];\n return this._dataCache;\n }\n let offset = this._chunkSize;\n let bufferArr = [Buffer.from(data, \"utf8\")];\n let repeat = true;\n while (repeat) {\n const nextDataResponse = await this._s3.getResponse(this._key, false, offset, offset + this._chunkSize);\n const nextDataBody = await nextDataResponse.text();\n bufferArr.push(Buffer.from(nextDataBody, \"utf8\"));\n offset += this._chunkSize;\n const contentLength = parseInt(nextDataResponse.headers.get(\"content-length\") || nextDataBody.length.toString());\n if (contentLength < this._chunkSize) {\n repeat = false;\n }\n }\n const bufferedData = Buffer.concat(bufferArr);\n this._dataCache = wrapperType.fromBuffer(bufferedData);\n return this._dataCache;\n } catch (error) {\n if (error.toString().indexOf(\"status 404: Unknown - Not Found\") > -1) {\n this._dataCache = [];\n return this._dataCache;\n }\n throw new S3OperationError(`${MODULE_NAME}: Failed to load data: ${error.message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n }\n async _saveData(data) {\n try {\n if (this._avroType === null || typeof this._avroType === \"undefined\") {\n throw new lowstorageError(\n `${MODULE_NAME}: Missing type definition. Configure before operations `,\n lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR\n );\n }\n const wrapperType = this._avroParse.forSchema({ type: \"array\", items: this._avroType });\n const dataBuffer = data.length > 0 ? wrapperType.toBuffer(data) : EMPTY_DATA;\n if (this._safeWrite && this._lastETag !== \"\") {\n const currentETag = await this._s3.getEtag(this._key);\n if (currentETag !== null && currentETag !== this._lastETag) {\n return false;\n }\n }\n const resp = await this._s3.put(this._key, dataBuffer);\n if (typeof resp === \"object\" && \"status\" in resp && resp.status !== 200) {\n throw new S3OperationError(`${MODULE_NAME}: Failed to save data`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n const newETag = resp.headers?.get(\"etag\") || \"\";\n if (newETag && newETag.length > 0) {\n this._lastETag = this._s3.sanitizeETag(newETag);\n this._dataCache = data;\n }\n return true;\n } catch (error) {\n if (error instanceof S3OperationError) {\n throw error;\n }\n throw new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.SAVE_DATA_ERROR);\n }\n }\n /**\n * Insert a document into the collection.\n * @param {Object|Array} doc - The document to insert.\n * @param {Object} [schema=undefined] - The schema for the document.\n * @returns {Promise} A Promise that resolves to the array of inserted document(s).\n * @throws {lowstorageError} If there's an error.\n */\n async insert(doc, schema) {\n try {\n if (doc === void 0 || doc === null) {\n throw new lowstorageError(`${MODULE_NAME}: Document is required for insert`, lowstorage_ERROR_CODES.INSERT_ERROR);\n }\n if (typeof doc !== \"object\" && !Array.isArray(doc)) {\n throw new DocumentValidationError(\n `${MODULE_NAME}: Document must be an object or an array`,\n lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR\n );\n }\n const items = !Array.isArray(doc) ? [doc] : doc;\n const schemaWithId = schema ? ensureIdFieldInSchema(schema) : this._schema || ensureIdFieldInSchema(inferAvroSchema(items[0]));\n const avroType = this._avroParse.forSchema(schemaWithId);\n if (!avroType) {\n throw new SchemaValidationError(\n `${MODULE_NAME}: Schema is required - Pass a schema to the insert method`,\n lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR\n );\n }\n this._avroType = avroType;\n const data = await this._loadData();\n for (let item of items) {\n if (typeof item !== \"object\" || item === null) {\n throw new DocumentValidationError(\n `${MODULE_NAME}: Invalid input: input must be an object or an array of objects`,\n lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR\n );\n }\n item._id = item._id || await generateUUID();\n const validBuffer = this._avroType.isValid(item, {\n errorHook: errorValidationFn,\n noUndeclaredFields: true\n });\n if (validBuffer === true) {\n data.push(item);\n } else {\n throw new DocumentValidationError(`${MODULE_NAME}: Invalid document or schema`, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR);\n }\n }\n const success = await this._saveData(data);\n if (!success) {\n throw new S3OperationError(`${MODULE_NAME}: Failed to insert document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n this.setAvroSchema(schemaWithId);\n return items;\n } catch (error) {\n if (error.message.includes(\"unknown type\")) {\n throw new SchemaValidationError(\n `${MODULE_NAME}: Schema input is invalid: ${error.message}`,\n lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR\n );\n }\n if (error instanceof lowstorageError) {\n throw error;\n }\n throw new lowstorageError(`${MODULE_NAME} Insert operation failed: ${error.message}`, lowstorage_ERROR_CODES.INSERT_ERROR);\n }\n }\n /**\n * Find documents in the collection.\n * @param {Object} [query={}] - The query to filter documents.\n * @param {Object} [options={}] - The options for pagination.\n * @param {number} [options.skip=0] - The number of documents to skip. Default is 0.\n * @param {number} [options.limit=undefined] - The maximum number of documents to return. Default is undefined, which means no limit.\n * @returns {Promise} A Promise that resolves to an array of matching documents.\n * @throws {lowstorageError} If there's an error.\n */\n async find(query = {}, options = {}) {\n try {\n if (query === void 0 || query === null) {\n throw new lowstorageError(`${MODULE_NAME}: Query is required for update`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n }\n const data = await this._loadData();\n const start = options.skip !== void 0 ? parseInt(String(options.skip), 10) : 0;\n const end = options.limit !== void 0 ? start + parseInt(String(options.limit), 10) : void 0;\n const filteredData = data.filter((doc) => matchesQuery(doc, query)).slice(start, end);\n return filteredData;\n } catch (error) {\n throw new lowstorageError(`${MODULE_NAME}: Find operation failed: ${error.message}`, lowstorage_ERROR_CODES.FIND_ERROR);\n }\n }\n /**\n * Find the first document in the collection that matches the query.\n * @param {Object} [query={}] - The query to filter documents.\n * @returns {Promise} A Promise that resolves to the first matching document or null if no match is found.\n * @throws {lowstorageError} If there's an error.\n */\n async findOne(query = {}) {\n try {\n if (query === null) {\n throw new lowstorageError(`${MODULE_NAME}: Query cannot be null`, lowstorage_ERROR_CODES.INVALID_ARGUMENT);\n }\n const result = await this.find(query, { limit: 1 });\n return result[0] || null;\n } catch (error) {\n if (error instanceof lowstorageError) {\n throw error;\n }\n throw new lowstorageError(`${MODULE_NAME}: FindOne operation failed: ${error.message}`, lowstorage_ERROR_CODES.FIND_ONE_ERROR);\n }\n }\n /**\n * Update a single document in the collection that matches the query.\n * @param {Object} [query={}] - The query to filter the document to update.\n * @param {Object} [update={}] - The update operations to apply to the matching document.\n * @returns {Promise} A Promise that resolves to number of documents updated.\n * @throws {lowstorageError} If the updateOne operation fails.\n * @throws {SchemaValidationError} If the schema is not defined for the collection.\n * @throws {DocumentValidationError} If the updated document is invalid.\n * @throws {S3OperationError} If the S3 operation fails.\n */\n async update(query = {}, update = {}, options = {}) {\n try {\n if (query === void 0 || query === null || update === void 0 || update === null) {\n throw new lowstorageError(\n `${MODULE_NAME}: Query and update values are required for update`,\n lowstorage_ERROR_CODES.MISSING_ARGUMENT\n );\n }\n if (!this._avroType) {\n throw new SchemaValidationError(\n `${MODULE_NAME}: Schema is not defined for this collection`,\n lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR\n );\n }\n const data = await this._loadData();\n if (data.length === 0) return 0;\n let updatedCount = 0;\n for (let i = 0; i < data.length; i++) {\n if (matchesQuery(data[i], query)) {\n const updatedDoc = { ...data[i], ...update };\n const isValid = this._avroType.isValid(updatedDoc, {\n errorHook: errorValidationFn,\n noUndeclaredFields: true\n });\n if (isValid === true) {\n data[i] = updatedDoc;\n updatedCount++;\n } else {\n throw new DocumentValidationError(\n `${MODULE_NAME}: Invalid document or schema`,\n lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR\n );\n }\n }\n }\n if (updatedCount > 0) {\n const success = await this._saveData(data);\n if (!success) {\n throw new S3OperationError(`${MODULE_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n } else if (options && \"upsert\" in options && options.upsert) {\n const success = await this.insert(update);\n if (!success) {\n throw new S3OperationError(`${MODULE_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n updatedCount = 1;\n }\n return updatedCount;\n } catch (error) {\n if (error instanceof S3OperationError) {\n throw error;\n }\n throw new lowstorageError(`${MODULE_NAME}: Update operation failed: ${error.message}`, lowstorage_ERROR_CODES.UPDATE_ERROR);\n }\n }\n /**\n * Update a single document in the collection that matches the query.\n * @param {Object} [query={}] - The query to filter the document to update.\n * @param {Object} [update={}] - The update operations to apply to the matching document.\n * @returns {Promise} A Promise that resolves to 1 if a document was updated, 0 otherwise.\n * @throws {lowstorageError} If the updateOne operation fails.\n * @throws {SchemaValidationError} If the schema is not defined for the collection.\n * @throws {DocumentValidationError} If the updated document is invalid.\n * @throws {S3OperationError} If the S3 operation fails.\n */\n async updateOne(query = {}, update = {}, options = {}) {\n try {\n if (query === void 0 || query === null || update === void 0 || update === null) {\n throw new lowstorageError(`${MODULE_NAME}: Query is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n }\n if (!this._avroType) {\n throw new SchemaValidationError(\n `${MODULE_NAME}: Schema is not defined for this collection`,\n lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR\n );\n }\n const data = await this._loadData();\n if (data.length === 0) return 0;\n const docIndex = data.findIndex((doc) => matchesQuery(doc, query));\n if (docIndex !== -1) {\n const updatedDoc = { ...data[docIndex], ...update };\n const isValid = this._avroType.isValid(updatedDoc, {\n errorHook: errorValidationFn,\n noUndeclaredFields: true\n });\n if (isValid === true) {\n data[docIndex] = updatedDoc;\n const success = await this._saveData(data);\n if (!success) {\n throw new S3OperationError(`${MODULE_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n return 1;\n } else {\n throw new DocumentValidationError(`${MODULE_NAME}: Invalid document or schema`, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR);\n }\n }\n if (options && \"upsert\" in options && options.upsert) {\n const success = await this.insert(update);\n if (!success) {\n throw new S3OperationError(`${MODULE_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n return 1;\n }\n return 0;\n } catch (error) {\n if (error instanceof lowstorageError) {\n throw error;\n }\n throw new lowstorageError(`${MODULE_NAME}: UpdateOne operation failed: ${error.message}`, lowstorage_ERROR_CODES.UPDATE_ONE_ERROR);\n }\n }\n /**\n * Delete documents from the collection.\n * @param {Object} [query={}] - The query to filter documents to delete.\n * @returns {Promise} A Promise that resolves to the number of documents deleted.\n * @throws {lowstorageError} If the delete operation fails.\n * @throws {S3OperationError} If the S3 operation fails.\n */\n async delete(query = {}) {\n try {\n if (query === void 0 || query === null) {\n throw new lowstorageError(`${MODULE_NAME}: Query is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n }\n const data = await this._loadData();\n if (data.length === 0) return 0;\n const initialLength = data.length;\n const newData = data.filter((doc) => !matchesQuery(doc, query));\n const success = await this._saveData(newData);\n if (!success) {\n throw new S3OperationError(`${MODULE_NAME}: Failed to delete document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n return initialLength - newData.length;\n } catch (error) {\n if (error instanceof S3OperationError) {\n throw error;\n }\n throw new lowstorageError(`${MODULE_NAME}: Delete operation failed: ${error.message}`, lowstorage_ERROR_CODES.DELETE_ERROR);\n }\n }\n /**\n * Delete all documents from the collection.\n * @returns {Promise} A Promise that resolves to the number of documents deleted.\n * @throws {lowstorageError} If the delete operation fails.\n * @throws {S3OperationError} If the S3 operation fails.\n */\n async deleteAll() {\n try {\n const data = await this._loadData();\n const initialLength = data.length;\n const success = await this._saveData([]);\n if (!success) {\n throw new S3OperationError(`${MODULE_NAME}: Failed to delete document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n return initialLength;\n } catch (error) {\n if (error instanceof S3OperationError) {\n throw error;\n }\n throw new lowstorageError(`${MODULE_NAME}: Delete operation failed: ${error.message}`, lowstorage_ERROR_CODES.DELETE_ERROR);\n }\n }\n /**\n * Count the number of documents in the collection.\n * @param {Object} [query={}] - The query to filter documents.\n * @returns {Promise} A Promise that resolves to the number of documents in the collection.\n * @throws {lowstorageError} If the count operation fails.\n */\n async count(query = {}) {\n try {\n const data = await this.find(query);\n return data.length;\n } catch (error) {\n throw new lowstorageError(`${MODULE_NAME}: Count operation failed: ${error.message}`, lowstorage_ERROR_CODES.COUNT_ERROR);\n }\n }\n async renameCollection(newColName, newSchema = this._schema) {\n try {\n _hasColName(newColName);\n const exists = await this._s3.fileExists(`${this._dirPrefix}${DEFAULT_DELIMITER}${newColName}${COL_SUFFIX}`);\n if (!!exists) {\n throw new lowstorageError(`${MODULE_NAME}: Collection ${newColName} already exists`, lowstorage_ERROR_CODES.COLLECTION_EXISTS);\n }\n const schema = newSchema || this.getAvroSchema();\n const data = await this._loadData();\n const createNew = new _Collection(newColName, schema, this._s3, this._dirPrefix, this._safeWrite, this._chunkSize);\n await createNew._saveData(data);\n await this._s3.delete(`${this._dirPrefix}${DEFAULT_DELIMITER}${this._colName}${COL_SUFFIX}`);\n return createNew;\n } catch (error) {\n if (error instanceof lowstorageError) {\n throw error;\n }\n throw new lowstorageError(\n `${MODULE_NAME}: Rename collection failed: ${error.message}`,\n lowstorage_ERROR_CODES.RENAME_COLLECTION_ERROR\n );\n }\n }\n};\nexport {\n lowstorage,\n lowstorageError,\n lowstorage_ERROR_CODES\n};\n\n"], - "mappings": "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", - "names": ["__import_UTIL", "__import_BUFFER", "randomUUID", "__create", "__defProp", "__getOwnPropDesc", "__getOwnPropNames", "__getProtoOf", "__hasOwnProp", "__commonJS", "cb", "mod", "__getOwnPropNames", "__copyProps", "to", "from", "except", "desc", "key", "__hasOwnProp", "__defProp", "__getOwnPropDesc", "__toESM", "isNodeMode", "target", "__create", "__getProtoOf", "require_utils", "exports", "module", "POOL", "BufferPool", "newBuffer", "size", "bufferFrom", "data", "enc", "capitalize", "s", "compare", "n1", "n2", "jsonEquals", "val1", "val2", "i", "l", "keys1", "keys2", "toMap", "arr", "fn", "obj", "elem", "hasDuplicates", "isType", "any", "typeName", "unqualifyName", "name", "parts", "abstractFunction", "len", "maxLen", "Tap", "buf", "pos", "b2", "n", "k2", "h", "f2", "fk", "m2", "d", "fixed", "c1", "c2", "str", "tap", "l1", "p1", "l2", "p2", "b1", "res", "j2", "neg", "invert", "require_values", "utils", "util", "__import_UTIL", "fromJSON", "type", "opts", "clone", "fromDefaultJSON", "toJSON", "mode", "Cloner", "Builder", "details", "msg", "typeInfo", "err", "val", "path", "info", "joinPath", "builder", "names", "type2", "isBufferType", "isAbstractLong", "extraFields", "fieldNames", "fieldName", "missingFields", "args", "field", "fieldAny", "fieldVal", "fieldPath", "fieldValBuilder", "defaultVal", "Record", "item", "itemPath", "itemBuilder", "keys", "anyValue", "valuePath", "valueBuilder", "unionType", "isWrapped", "branchType", "reason", "branchPath", "branchBuilder", "strs", "part", "require_types", "values", "buffer", "__import_BUFFER", "debug", "TYPES", "ArrayType", "BooleanType", "BytesType", "DoubleType", "EnumType", "RecordType", "FixedType", "FloatType", "IntType", "LongType", "MapType", "NullType", "StringType", "NAME_PATTERN", "TAP", "LOGICAL_TYPE", "UNDERLYING_TYPES", "Type", "schema", "scope", "namespace", "maybeQualify", "isPrimitive", "registry", "Scope", "UnionType2", "wrapUnions", "WrappedUnionType", "UnwrappedUnionType", "DerivedType", "logicalType", "types", "isAmbiguous", "Type2", "v2", "isValidName", "expanded", "numWrappedUnions", "isValidWrappedUnion", "branchTypes", "bucketized", "bucket", "getTypeBucket", "bucketTypes", "buckets", "augmented", "combineNumbers", "combineStrings", "combineBuffers", "t", "combineObjects", "buf1", "buf2", "resolver", "Resolver", "resolvers", "index", "resolver2", "noCheck", "readValue", "allowUndeclaredFields", "Branch", "flags", "errorHook", "hook", "getClassName", "derefedSchema", "attr", "body", "toString", "self", "unwrap", "PrimitiveType", "noFreeze", "throwInvalidError", "tap1", "tap2", "isSafeLong", "methods", "noUnpack", "mapping", "AbstractLongType", "UnionType", "branch", "branchName", "getValueBucket", "logicalBranches", "typeResolver", "index1", "index2", "name1", "name2", "symbol", "symbols", "getAliases", "values2", "readArraySize", "rsv", "f3", "items", "match", "Field", "errorStack", "plainRecord", "outerArgs", "innerArgs", "ds", "innerBody", "defaultValue", "hasDefault", "stackField", "outerBody", "checkValid", "isValid", "toBuffer", "toObject", "wrap", "field2", "i2", "value", "rFields", "wFields", "wFieldsMap", "matches", "fieldResolver", "lazyIndex", "uname", "indent", "fields", "order", "fieldType", "fieldSchema", "fieldOrder", "fieldAliases", "fieldDoc", "LogicalType", "ret", "map", "obj1", "obj2", "isVisited", "writerType", "readerType", "step", "lazy", "qualifyName", "tail", "aliases", "ns", "unqualified", "typeNames", "superIndex", "superType", "typeSymbols", "allTypes", "fieldTypes", "fieldDefaults", "isValidRecord", "fieldDefault", "childScope", "fieldType2", "fieldDefault2", "unionTypes", "require_lib", "x", "K", "O", "v", "E", "W", "M", "w", "X", "f", "Z", "V", "J", "m", "T", "P", "C", "u", "ee", "te", "se", "re", "j", "$", "L", "k", "D", "B", "F", "G", "z", "Q", "ne", "oe", "p", "q", "y", "N", "e", "r", "o", "a", "c", "H", "U", "_", "g", "A", "R", "S", "Y", "b", "I", "import_types", "lowstorage_ERROR_CODES", "lowstorageError", "message", "code", "SchemaValidationError", "DocumentValidationError", "S3OperationError", "operation", "matchesQuery", "document", "query", "generateUUID", "randomUUID", "_getAvroSchema", "_isUUID", "inferAvroSchema", "ensureIdFieldInSchema", "idField", "MODULE_NAME", "DEFAULT_DELIMITER", "PROJECT_DIR_PREFIX", "COL_SUFFIX", "CHUNG_1MB", "CHUNG_5MB", "EMPTY_DATA", "errorValidationFn", "errorCode", "_hasColName", "colName", "lowstorage", "options", "requiredFields", "listed", "entry", "error", "wrapperType", "exists2", "autoCreate", "colPath", "colSchema", "Collection", "_Collection", "s3", "dirPrefix", "safeWrite", "chunkSize", "props", "etag", "offset", "bufferArr", "repeat", "nextDataResponse", "nextDataBody", "bufferedData", "dataBuffer", "currentETag", "resp", "newETag", "doc", "schemaWithId", "avroType", "start", "end", "update", "updatedCount", "updatedDoc", "docIndex", "initialLength", "newData", "newColName", "newSchema", "createNew"] + "sourcesContent": ["import __import_BUFFER from \"buffer\";\nimport __import_CRYPTO from \"crypto\";\nimport __import_UTIL from \"util\";\nimport __import_STREAM from \"stream\";\nimport __import_ZLIB from \"zlib\";\nimport __import_EVENTS from \"events\";\nimport __import_FS from \"fs\";\nimport __import_PATH from \"path\";\n\nvar __create = Object.create;\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __getProtoOf = Object.getPrototypeOf;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __require = /* @__PURE__ */ ((x2) => typeof require !== \"undefined\" ? require : typeof Proxy !== \"undefined\" ? new Proxy(x2, {\n get: (a, b2) => (typeof require !== \"undefined\" ? require : a)[b2]\n}) : x2)(function(x2) {\n if (typeof require !== \"undefined\") return require.apply(this, arguments);\n throw Error('Dynamic require of \"' + x2 + '\" is not supported');\n});\nvar __commonJS = (cb, mod) => function __require2() {\n return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(\n // If the importer is in node compatibility mode or this is not an ESM\n // file that has been converted to a CommonJS file using a Babel-\n // compatible transform (i.e. \"__esModule\" has not been set), then set\n // \"default\" to the CommonJS \"module.exports\" for node compatibility.\n isNodeMode || !mod || !mod.__esModule ? __defProp(target, \"default\", { value: mod, enumerable: true }) : target,\n mod\n));\n\n// node_modules/avsc/lib/utils.js\nvar require_utils = __commonJS({\n \"node_modules/avsc/lib/utils.js\"(exports, module) {\n \"use strict\";\n var buffer = __import_BUFFER;\n var crypto2 = __import_CRYPTO;\n var util = __import_UTIL;\n var Buffer2 = buffer.Buffer;\n var POOL = new BufferPool(4096);\n var NAME_PATTERN = /^[A-Za-z_][A-Za-z0-9_]*$/;\n var f2 = util.format;\n function newBuffer(size) {\n if (typeof Buffer2.alloc == \"function\") {\n return Buffer2.alloc(size);\n } else {\n return new Buffer2(size);\n }\n }\n function bufferFrom(data, enc) {\n if (typeof Buffer2.from == \"function\") {\n return Buffer2.from(data, enc);\n } else {\n return new Buffer2(data, enc);\n }\n }\n function capitalize(s) {\n return s.charAt(0).toUpperCase() + s.slice(1);\n }\n function compare(n1, n2) {\n return n1 === n2 ? 0 : n1 < n2 ? -1 : 1;\n }\n function getOption(opts, key, def) {\n var value = opts[key];\n return value === void 0 ? def : value;\n }\n function getHash(str, algorithm) {\n algorithm = algorithm || \"md5\";\n var hash = crypto2.createHash(algorithm);\n hash.end(str);\n return hash.read();\n }\n function singleIndexOf(arr, v2) {\n var pos = -1;\n var i, l;\n if (!arr) {\n return -1;\n }\n for (i = 0, l = arr.length; i < l; i++) {\n if (arr[i] === v2) {\n if (pos >= 0) {\n return -2;\n }\n pos = i;\n }\n }\n return pos;\n }\n function toMap(arr, fn) {\n var obj = {};\n var i, elem;\n for (i = 0; i < arr.length; i++) {\n elem = arr[i];\n obj[fn(elem)] = elem;\n }\n return obj;\n }\n function objectValues(obj) {\n return Object.keys(obj).map(function(key) {\n return obj[key];\n });\n }\n function hasDuplicates(arr, fn) {\n var obj = /* @__PURE__ */ Object.create(null);\n var i, l, elem;\n for (i = 0, l = arr.length; i < l; i++) {\n elem = arr[i];\n if (fn) {\n elem = fn(elem);\n }\n if (obj[elem]) {\n return true;\n }\n obj[elem] = true;\n }\n return false;\n }\n function copyOwnProperties(src, dst, overwrite) {\n var names = Object.getOwnPropertyNames(src);\n var i, l, name;\n for (i = 0, l = names.length; i < l; i++) {\n name = names[i];\n if (!dst.hasOwnProperty(name) || overwrite) {\n var descriptor = Object.getOwnPropertyDescriptor(src, name);\n Object.defineProperty(dst, name, descriptor);\n }\n }\n return dst;\n }\n function isValidName(str) {\n return NAME_PATTERN.test(str);\n }\n function qualify(name, namespace) {\n if (~name.indexOf(\".\")) {\n name = name.replace(/^\\./, \"\");\n } else if (namespace) {\n name = namespace + \".\" + name;\n }\n name.split(\".\").forEach(function(part) {\n if (!isValidName(part)) {\n throw new Error(f2(\"invalid name: %j\", name));\n }\n });\n return name;\n }\n function unqualify(name) {\n var parts = name.split(\".\");\n return parts[parts.length - 1];\n }\n function impliedNamespace(name) {\n var match = /^(.*)\\.[^.]+$/.exec(name);\n return match ? match[1] : void 0;\n }\n function jsonEnd(str, pos) {\n pos = pos | 0;\n var c = str.charAt(pos++);\n if (/[\\d-]/.test(c)) {\n while (/[eE\\d.+-]/.test(str.charAt(pos))) {\n pos++;\n }\n return pos;\n } else if (/true|null/.test(str.slice(pos - 1, pos + 3))) {\n return pos + 3;\n } else if (/false/.test(str.slice(pos - 1, pos + 4))) {\n return pos + 4;\n }\n var depth = 0;\n var literal = false;\n do {\n switch (c) {\n case \"{\":\n case \"[\":\n if (!literal) {\n depth++;\n }\n break;\n case \"}\":\n case \"]\":\n if (!literal && !--depth) {\n return pos;\n }\n break;\n case '\"':\n literal = !literal;\n if (!depth && !literal) {\n return pos;\n }\n break;\n case \"\\\\\":\n pos++;\n }\n } while (c = str.charAt(pos++));\n return -1;\n }\n function abstractFunction() {\n throw new Error(\"abstract\");\n }\n function addDeprecatedGetters(obj, props) {\n var proto = obj.prototype;\n var i, l, prop, getter;\n for (i = 0, l = props.length; i < l; i++) {\n prop = props[i];\n getter = \"get\" + capitalize(prop);\n proto[getter] = util.deprecate(\n createGetter(prop),\n \"use `.\" + prop + \"` instead of `.\" + getter + \"()`\"\n );\n }\n function createGetter(prop2) {\n return function() {\n var delegate = this[prop2];\n return typeof delegate == \"function\" ? delegate.apply(this, arguments) : delegate;\n };\n }\n }\n function BufferPool(len) {\n this._len = len | 0;\n this._pos = 0;\n this._slab = newBuffer(this._len);\n }\n BufferPool.prototype.alloc = function(len) {\n if (len < 0) {\n throw new Error(\"negative length\");\n }\n var maxLen = this._len;\n if (len > maxLen) {\n return newBuffer(len);\n }\n if (this._pos + len > maxLen) {\n this._slab = newBuffer(maxLen);\n this._pos = 0;\n }\n return this._slab.slice(this._pos, this._pos += len);\n };\n function Lcg(seed) {\n var a = 1103515245;\n var c = 12345;\n var m2 = Math.pow(2, 31);\n var state = Math.floor(seed || Math.random() * (m2 - 1));\n this._max = m2;\n this._nextInt = function() {\n return state = (a * state + c) % m2;\n };\n }\n Lcg.prototype.nextBoolean = function() {\n return !!(this._nextInt() % 2);\n };\n Lcg.prototype.nextInt = function(start, end) {\n if (end === void 0) {\n end = start;\n start = 0;\n }\n end = end === void 0 ? this._max : end;\n return start + Math.floor(this.nextFloat() * (end - start));\n };\n Lcg.prototype.nextFloat = function(start, end) {\n if (end === void 0) {\n end = start;\n start = 0;\n }\n end = end === void 0 ? 1 : end;\n return start + (end - start) * this._nextInt() / this._max;\n };\n Lcg.prototype.nextString = function(len, flags) {\n len |= 0;\n flags = flags || \"aA\";\n var mask = \"\";\n if (flags.indexOf(\"a\") > -1) {\n mask += \"abcdefghijklmnopqrstuvwxyz\";\n }\n if (flags.indexOf(\"A\") > -1) {\n mask += \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\";\n }\n if (flags.indexOf(\"#\") > -1) {\n mask += \"0123456789\";\n }\n if (flags.indexOf(\"!\") > -1) {\n mask += \"~`!@#$%^&*()_+-={}[]:\\\";'<>?,./|\\\\\";\n }\n var result = [];\n for (var i = 0; i < len; i++) {\n result.push(this.choice(mask));\n }\n return result.join(\"\");\n };\n Lcg.prototype.nextBuffer = function(len) {\n var arr = [];\n var i;\n for (i = 0; i < len; i++) {\n arr.push(this.nextInt(256));\n }\n return bufferFrom(arr);\n };\n Lcg.prototype.choice = function(arr) {\n var len = arr.length;\n if (!len) {\n throw new Error(\"choosing from empty array\");\n }\n return arr[this.nextInt(len)];\n };\n function OrderedQueue() {\n this._index = 0;\n this._items = [];\n }\n OrderedQueue.prototype.push = function(item) {\n var items = this._items;\n var i = items.length | 0;\n var j2;\n items.push(item);\n while (i > 0 && items[i].index < items[j2 = i - 1 >> 1].index) {\n item = items[i];\n items[i] = items[j2];\n items[j2] = item;\n i = j2;\n }\n };\n OrderedQueue.prototype.pop = function() {\n var items = this._items;\n var len = items.length - 1 | 0;\n var first = items[0];\n if (!first || first.index > this._index) {\n return null;\n }\n this._index++;\n if (!len) {\n items.pop();\n return first;\n }\n items[0] = items.pop();\n var mid = len >> 1;\n var i = 0;\n var i1, i2, j2, item, c, c1, c2;\n while (i < mid) {\n item = items[i];\n i1 = (i << 1) + 1;\n i2 = i + 1 << 1;\n c1 = items[i1];\n c2 = items[i2];\n if (!c2 || c1.index <= c2.index) {\n c = c1;\n j2 = i1;\n } else {\n c = c2;\n j2 = i2;\n }\n if (c.index >= item.index) {\n break;\n }\n items[j2] = item;\n items[i] = c;\n i = j2;\n }\n return first;\n };\n function Tap(buf, pos) {\n this.buf = buf;\n this.pos = pos | 0;\n if (this.pos < 0) {\n throw new Error(\"negative offset\");\n }\n }\n Tap.prototype.isValid = function() {\n return this.pos <= this.buf.length;\n };\n Tap.prototype._invalidate = function() {\n this.pos = this.buf.length + 1;\n };\n Tap.prototype.readBoolean = function() {\n return !!this.buf[this.pos++];\n };\n Tap.prototype.skipBoolean = function() {\n this.pos++;\n };\n Tap.prototype.writeBoolean = function(b2) {\n this.buf[this.pos++] = !!b2;\n };\n Tap.prototype.readInt = Tap.prototype.readLong = function() {\n var n = 0;\n var k2 = 0;\n var buf = this.buf;\n var b2, h, f3, fk;\n do {\n b2 = buf[this.pos++];\n h = b2 & 128;\n n |= (b2 & 127) << k2;\n k2 += 7;\n } while (h && k2 < 28);\n if (h) {\n f3 = n;\n fk = 268435456;\n do {\n b2 = buf[this.pos++];\n f3 += (b2 & 127) * fk;\n fk *= 128;\n } while (b2 & 128);\n return (f3 % 2 ? -(f3 + 1) : f3) / 2;\n }\n return n >> 1 ^ -(n & 1);\n };\n Tap.prototype.skipInt = Tap.prototype.skipLong = function() {\n var buf = this.buf;\n while (buf[this.pos++] & 128) {\n }\n };\n Tap.prototype.writeInt = Tap.prototype.writeLong = function(n) {\n var buf = this.buf;\n var f3, m2;\n if (n >= -1073741824 && n < 1073741824) {\n m2 = n >= 0 ? n << 1 : ~n << 1 | 1;\n do {\n buf[this.pos] = m2 & 127;\n m2 >>= 7;\n } while (m2 && (buf[this.pos++] |= 128));\n } else {\n f3 = n >= 0 ? n * 2 : -n * 2 - 1;\n do {\n buf[this.pos] = f3 & 127;\n f3 /= 128;\n } while (f3 >= 1 && (buf[this.pos++] |= 128));\n }\n this.pos++;\n };\n Tap.prototype.readFloat = function() {\n var buf = this.buf;\n var pos = this.pos;\n this.pos += 4;\n if (this.pos > buf.length) {\n return 0;\n }\n return this.buf.readFloatLE(pos);\n };\n Tap.prototype.skipFloat = function() {\n this.pos += 4;\n };\n Tap.prototype.writeFloat = function(f3) {\n var buf = this.buf;\n var pos = this.pos;\n this.pos += 4;\n if (this.pos > buf.length) {\n return;\n }\n return this.buf.writeFloatLE(f3, pos);\n };\n Tap.prototype.readDouble = function() {\n var buf = this.buf;\n var pos = this.pos;\n this.pos += 8;\n if (this.pos > buf.length) {\n return 0;\n }\n return this.buf.readDoubleLE(pos);\n };\n Tap.prototype.skipDouble = function() {\n this.pos += 8;\n };\n Tap.prototype.writeDouble = function(d) {\n var buf = this.buf;\n var pos = this.pos;\n this.pos += 8;\n if (this.pos > buf.length) {\n return;\n }\n return this.buf.writeDoubleLE(d, pos);\n };\n Tap.prototype.readFixed = function(len) {\n var pos = this.pos;\n this.pos += len;\n if (this.pos > this.buf.length) {\n return;\n }\n var fixed = POOL.alloc(len);\n this.buf.copy(fixed, 0, pos, pos + len);\n return fixed;\n };\n Tap.prototype.skipFixed = function(len) {\n this.pos += len;\n };\n Tap.prototype.writeFixed = function(buf, len) {\n len = len || buf.length;\n var pos = this.pos;\n this.pos += len;\n if (this.pos > this.buf.length) {\n return;\n }\n buf.copy(this.buf, pos, 0, len);\n };\n Tap.prototype.readBytes = function() {\n var len = this.readLong();\n if (len < 0) {\n this._invalidate();\n return;\n }\n return this.readFixed(len);\n };\n Tap.prototype.skipBytes = function() {\n var len = this.readLong();\n if (len < 0) {\n this._invalidate();\n return;\n }\n this.pos += len;\n };\n Tap.prototype.writeBytes = function(buf) {\n var len = buf.length;\n this.writeLong(len);\n this.writeFixed(buf, len);\n };\n if (typeof Buffer2.prototype.utf8Slice == \"function\") {\n Tap.prototype.readString = function() {\n var len = this.readLong();\n if (len < 0) {\n this._invalidate();\n return \"\";\n }\n var pos = this.pos;\n var buf = this.buf;\n this.pos += len;\n if (this.pos > buf.length) {\n return;\n }\n return this.buf.utf8Slice(pos, pos + len);\n };\n } else {\n Tap.prototype.readString = function() {\n var len = this.readLong();\n if (len < 0) {\n this._invalidate();\n return \"\";\n }\n var pos = this.pos;\n var buf = this.buf;\n this.pos += len;\n if (this.pos > buf.length) {\n return;\n }\n return this.buf.slice(pos, pos + len).toString();\n };\n }\n Tap.prototype.skipString = function() {\n var len = this.readLong();\n if (len < 0) {\n this._invalidate();\n return;\n }\n this.pos += len;\n };\n Tap.prototype.writeString = function(s) {\n var len = Buffer2.byteLength(s);\n var buf = this.buf;\n this.writeLong(len);\n var pos = this.pos;\n this.pos += len;\n if (this.pos > buf.length) {\n return;\n }\n if (len > 64 && typeof Buffer2.prototype.utf8Write == \"function\") {\n buf.utf8Write(s, pos, len);\n } else {\n var i, l, c1, c2;\n for (i = 0, l = len; i < l; i++) {\n c1 = s.charCodeAt(i);\n if (c1 < 128) {\n buf[pos++] = c1;\n } else if (c1 < 2048) {\n buf[pos++] = c1 >> 6 | 192;\n buf[pos++] = c1 & 63 | 128;\n } else if ((c1 & 64512) === 55296 && ((c2 = s.charCodeAt(i + 1)) & 64512) === 56320) {\n c1 = 65536 + ((c1 & 1023) << 10) + (c2 & 1023);\n i++;\n buf[pos++] = c1 >> 18 | 240;\n buf[pos++] = c1 >> 12 & 63 | 128;\n buf[pos++] = c1 >> 6 & 63 | 128;\n buf[pos++] = c1 & 63 | 128;\n } else {\n buf[pos++] = c1 >> 12 | 224;\n buf[pos++] = c1 >> 6 & 63 | 128;\n buf[pos++] = c1 & 63 | 128;\n }\n }\n }\n };\n if (typeof Buffer2.prototype.latin1Write == \"function\") {\n Tap.prototype.writeBinary = function(str, len) {\n var pos = this.pos;\n this.pos += len;\n if (this.pos > this.buf.length) {\n return;\n }\n this.buf.latin1Write(str, pos, len);\n };\n } else if (typeof Buffer2.prototype.binaryWrite == \"function\") {\n Tap.prototype.writeBinary = function(str, len) {\n var pos = this.pos;\n this.pos += len;\n if (this.pos > this.buf.length) {\n return;\n }\n this.buf.binaryWrite(str, pos, len);\n };\n } else {\n Tap.prototype.writeBinary = function(s, len) {\n var pos = this.pos;\n this.pos += len;\n if (this.pos > this.buf.length) {\n return;\n }\n this.buf.write(s, pos, len, \"binary\");\n };\n }\n Tap.prototype.matchBoolean = function(tap) {\n return this.buf[this.pos++] - tap.buf[tap.pos++];\n };\n Tap.prototype.matchInt = Tap.prototype.matchLong = function(tap) {\n var n1 = this.readLong();\n var n2 = tap.readLong();\n return n1 === n2 ? 0 : n1 < n2 ? -1 : 1;\n };\n Tap.prototype.matchFloat = function(tap) {\n var n1 = this.readFloat();\n var n2 = tap.readFloat();\n return n1 === n2 ? 0 : n1 < n2 ? -1 : 1;\n };\n Tap.prototype.matchDouble = function(tap) {\n var n1 = this.readDouble();\n var n2 = tap.readDouble();\n return n1 === n2 ? 0 : n1 < n2 ? -1 : 1;\n };\n Tap.prototype.matchFixed = function(tap, len) {\n return this.readFixed(len).compare(tap.readFixed(len));\n };\n Tap.prototype.matchBytes = Tap.prototype.matchString = function(tap) {\n var l1 = this.readLong();\n var p1 = this.pos;\n this.pos += l1;\n var l2 = tap.readLong();\n var p2 = tap.pos;\n tap.pos += l2;\n var b1 = this.buf.slice(p1, this.pos);\n var b2 = tap.buf.slice(p2, tap.pos);\n return b1.compare(b2);\n };\n Tap.prototype.unpackLongBytes = function() {\n var res = newBuffer(8);\n var n = 0;\n var i = 0;\n var j2 = 6;\n var buf = this.buf;\n var b2, neg;\n b2 = buf[this.pos++];\n neg = b2 & 1;\n res.fill(0);\n n |= (b2 & 127) >> 1;\n while (b2 & 128) {\n b2 = buf[this.pos++];\n n |= (b2 & 127) << j2;\n j2 += 7;\n if (j2 >= 8) {\n j2 -= 8;\n res[i++] = n;\n n >>= 8;\n }\n }\n res[i] = n;\n if (neg) {\n invert(res, 8);\n }\n return res;\n };\n Tap.prototype.packLongBytes = function(buf) {\n var neg = (buf[7] & 128) >> 7;\n var res = this.buf;\n var j2 = 1;\n var k2 = 0;\n var m2 = 3;\n var n;\n if (neg) {\n invert(buf, 8);\n n = 1;\n } else {\n n = 0;\n }\n var parts = [\n buf.readUIntLE(0, 3),\n buf.readUIntLE(3, 3),\n buf.readUIntLE(6, 2)\n ];\n while (m2 && !parts[--m2]) {\n }\n while (k2 < m2) {\n n |= parts[k2++] << j2;\n j2 += 24;\n while (j2 > 7) {\n res[this.pos++] = n & 127 | 128;\n n >>= 7;\n j2 -= 7;\n }\n }\n n |= parts[m2] << j2;\n do {\n res[this.pos] = n & 127;\n n >>= 7;\n } while (n && (res[this.pos++] |= 128));\n this.pos++;\n if (neg) {\n invert(buf, 8);\n }\n };\n function invert(buf, len) {\n while (len--) {\n buf[len] = ~buf[len];\n }\n }\n module.exports = {\n abstractFunction,\n addDeprecatedGetters,\n bufferFrom,\n capitalize,\n copyOwnProperties,\n getHash,\n compare,\n getOption,\n impliedNamespace,\n isValidName,\n jsonEnd,\n newBuffer,\n objectValues,\n qualify,\n toMap,\n singleIndexOf,\n hasDuplicates,\n unqualify,\n BufferPool,\n Lcg,\n OrderedQueue,\n Tap\n };\n }\n});\n\n// node_modules/avsc/lib/types.js\nvar require_types = __commonJS({\n \"node_modules/avsc/lib/types.js\"(exports, module) {\n \"use strict\";\n var utils = require_utils();\n var buffer = __import_BUFFER;\n var util = __import_UTIL;\n var Buffer2 = buffer.Buffer;\n var SlowBuffer = buffer.SlowBuffer;\n var Tap = utils.Tap;\n var debug = util.debuglog(\"avsc:types\");\n var f2 = util.format;\n var TYPES = {\n \"array\": ArrayType,\n \"boolean\": BooleanType,\n \"bytes\": BytesType,\n \"double\": DoubleType,\n \"enum\": EnumType,\n \"error\": RecordType,\n \"fixed\": FixedType,\n \"float\": FloatType,\n \"int\": IntType,\n \"long\": LongType,\n \"map\": MapType,\n \"null\": NullType,\n \"record\": RecordType,\n \"string\": StringType\n };\n var RANDOM = new utils.Lcg();\n var TAP = new Tap(new SlowBuffer(1024));\n var LOGICAL_TYPE = null;\n var UNDERLYING_TYPES = [];\n function Type(schema, opts) {\n var type;\n if (LOGICAL_TYPE) {\n type = LOGICAL_TYPE;\n UNDERLYING_TYPES.push([LOGICAL_TYPE, this]);\n LOGICAL_TYPE = null;\n } else {\n type = this;\n }\n this._hash = new Hash();\n this.name = void 0;\n this.aliases = void 0;\n this.doc = schema && schema.doc ? \"\" + schema.doc : void 0;\n if (schema) {\n var name = schema.name;\n var namespace = schema.namespace === void 0 ? opts && opts.namespace : schema.namespace;\n if (name !== void 0) {\n name = maybeQualify(name, namespace);\n if (isPrimitive(name)) {\n throw new Error(f2(\"cannot rename primitive type: %j\", name));\n }\n var registry = opts && opts.registry;\n if (registry) {\n if (registry[name] !== void 0) {\n throw new Error(f2(\"duplicate type name: %s\", name));\n }\n registry[name] = type;\n }\n } else if (opts && opts.noAnonymousTypes) {\n throw new Error(f2(\"missing name property in schema: %j\", schema));\n }\n this.name = name;\n this.aliases = schema.aliases ? schema.aliases.map(function(s) {\n return maybeQualify(s, namespace);\n }) : [];\n }\n }\n Type.forSchema = function(schema, opts) {\n opts = opts || {};\n opts.registry = opts.registry || {};\n var UnionType2 = function(wrapUnions) {\n if (wrapUnions === true) {\n wrapUnions = \"always\";\n } else if (wrapUnions === false) {\n wrapUnions = \"never\";\n } else if (wrapUnions === void 0) {\n wrapUnions = \"auto\";\n } else if (typeof wrapUnions == \"string\") {\n wrapUnions = wrapUnions.toLowerCase();\n }\n switch (wrapUnions) {\n case \"always\":\n return WrappedUnionType;\n case \"never\":\n return UnwrappedUnionType;\n case \"auto\":\n return void 0;\n default:\n throw new Error(f2(\"invalid wrap unions option: %j\", wrapUnions));\n }\n }(opts.wrapUnions);\n if (schema === null) {\n throw new Error('invalid type: null (did you mean \"null\"?)');\n }\n if (Type.isType(schema)) {\n return schema;\n }\n var type;\n if (opts.typeHook && (type = opts.typeHook(schema, opts))) {\n if (!Type.isType(type)) {\n throw new Error(f2(\"invalid typehook return value: %j\", type));\n }\n return type;\n }\n if (typeof schema == \"string\") {\n schema = maybeQualify(schema, opts.namespace);\n type = opts.registry[schema];\n if (type) {\n return type;\n }\n if (isPrimitive(schema)) {\n return opts.registry[schema] = Type.forSchema({ type: schema }, opts);\n }\n throw new Error(f2(\"undefined type name: %s\", schema));\n }\n if (schema.logicalType && opts.logicalTypes && !LOGICAL_TYPE) {\n var DerivedType = opts.logicalTypes[schema.logicalType];\n if (DerivedType) {\n var namespace = opts.namespace;\n var registry = {};\n Object.keys(opts.registry).forEach(function(key) {\n registry[key] = opts.registry[key];\n });\n try {\n debug(\"instantiating logical type for %s\", schema.logicalType);\n return new DerivedType(schema, opts);\n } catch (err) {\n debug(\"failed to instantiate logical type for %s\", schema.logicalType);\n if (opts.assertLogicalTypes) {\n throw err;\n }\n LOGICAL_TYPE = null;\n opts.namespace = namespace;\n opts.registry = registry;\n }\n }\n }\n if (Array.isArray(schema)) {\n var logicalType = LOGICAL_TYPE;\n LOGICAL_TYPE = null;\n var types = schema.map(function(obj) {\n return Type.forSchema(obj, opts);\n });\n if (!UnionType2) {\n UnionType2 = isAmbiguous(types) ? WrappedUnionType : UnwrappedUnionType;\n }\n LOGICAL_TYPE = logicalType;\n type = new UnionType2(types, opts);\n } else {\n type = function(typeName) {\n var Type2 = TYPES[typeName];\n if (Type2 === void 0) {\n throw new Error(f2(\"unknown type: %j\", typeName));\n }\n return new Type2(schema, opts);\n }(schema.type);\n }\n return type;\n };\n Type.forValue = function(val, opts) {\n opts = opts || {};\n opts.emptyArrayType = opts.emptyArrayType || Type.forSchema({\n type: \"array\",\n items: \"null\"\n });\n if (opts.valueHook) {\n var type = opts.valueHook(val, opts);\n if (type !== void 0) {\n if (!Type.isType(type)) {\n throw new Error(f2(\"invalid value hook return value: %j\", type));\n }\n return type;\n }\n }\n switch (typeof val) {\n case \"string\":\n return Type.forSchema(\"string\", opts);\n case \"boolean\":\n return Type.forSchema(\"boolean\", opts);\n case \"number\":\n if ((val | 0) === val) {\n return Type.forSchema(\"int\", opts);\n } else if (Math.abs(val) < 9007199254740991) {\n return Type.forSchema(\"float\", opts);\n }\n return Type.forSchema(\"double\", opts);\n case \"object\":\n if (val === null) {\n return Type.forSchema(\"null\", opts);\n } else if (Array.isArray(val)) {\n if (!val.length) {\n return opts.emptyArrayType;\n }\n return Type.forSchema({\n type: \"array\",\n items: Type.forTypes(\n val.map(function(v2) {\n return Type.forValue(v2, opts);\n }),\n opts\n )\n }, opts);\n } else if (Buffer2.isBuffer(val)) {\n return Type.forSchema(\"bytes\", opts);\n }\n var fieldNames = Object.keys(val);\n if (fieldNames.some(function(s) {\n return !utils.isValidName(s);\n })) {\n return Type.forSchema({\n type: \"map\",\n values: Type.forTypes(fieldNames.map(function(s) {\n return Type.forValue(val[s], opts);\n }), opts)\n }, opts);\n }\n return Type.forSchema({\n type: \"record\",\n fields: fieldNames.map(function(s) {\n return { name: s, type: Type.forValue(val[s], opts) };\n })\n }, opts);\n default:\n throw new Error(f2(\"cannot infer type from: %j\", val));\n }\n };\n Type.forTypes = function(types, opts) {\n if (!types.length) {\n throw new Error(\"no types to combine\");\n }\n if (types.length === 1) {\n return types[0];\n }\n opts = opts || {};\n var expanded = [];\n var numWrappedUnions = 0;\n var isValidWrappedUnion = true;\n types.forEach(function(type) {\n switch (type.typeName) {\n case \"union:unwrapped\":\n isValidWrappedUnion = false;\n expanded = expanded.concat(type.types);\n break;\n case \"union:wrapped\":\n numWrappedUnions++;\n expanded = expanded.concat(type.types);\n break;\n case \"null\":\n expanded.push(type);\n break;\n default:\n isValidWrappedUnion = false;\n expanded.push(type);\n }\n });\n if (numWrappedUnions) {\n if (!isValidWrappedUnion) {\n throw new Error(\"cannot combine wrapped union\");\n }\n var branchTypes = {};\n expanded.forEach(function(type) {\n var name = type.branchName;\n var branchType = branchTypes[name];\n if (!branchType) {\n branchTypes[name] = type;\n } else if (!type.equals(branchType)) {\n throw new Error(\"inconsistent branch type\");\n }\n });\n var wrapUnions = opts.wrapUnions;\n var unionType;\n opts.wrapUnions = true;\n try {\n unionType = Type.forSchema(Object.keys(branchTypes).map(function(name) {\n return branchTypes[name];\n }), opts);\n } catch (err) {\n opts.wrapUnions = wrapUnions;\n throw err;\n }\n opts.wrapUnions = wrapUnions;\n return unionType;\n }\n var bucketized = {};\n expanded.forEach(function(type) {\n var bucket = getTypeBucket(type);\n var bucketTypes = bucketized[bucket];\n if (!bucketTypes) {\n bucketized[bucket] = bucketTypes = [];\n }\n bucketTypes.push(type);\n });\n var buckets = Object.keys(bucketized);\n var augmented = buckets.map(function(bucket) {\n var bucketTypes = bucketized[bucket];\n if (bucketTypes.length === 1) {\n return bucketTypes[0];\n } else {\n switch (bucket) {\n case \"null\":\n case \"boolean\":\n return bucketTypes[0];\n case \"number\":\n return combineNumbers(bucketTypes);\n case \"string\":\n return combineStrings(bucketTypes, opts);\n case \"buffer\":\n return combineBuffers(bucketTypes, opts);\n case \"array\":\n bucketTypes = bucketTypes.filter(function(t) {\n return t !== opts.emptyArrayType;\n });\n if (!bucketTypes.length) {\n return opts.emptyArrayType;\n }\n return Type.forSchema({\n type: \"array\",\n items: Type.forTypes(bucketTypes.map(function(t) {\n return t.itemsType;\n }), opts)\n }, opts);\n default:\n return combineObjects(bucketTypes, opts);\n }\n }\n });\n if (augmented.length === 1) {\n return augmented[0];\n } else {\n return Type.forSchema(augmented, opts);\n }\n };\n Type.isType = function() {\n var l = arguments.length;\n if (!l) {\n return false;\n }\n var any = arguments[0];\n if (!any || typeof any._update != \"function\" || typeof any.fingerprint != \"function\") {\n return false;\n }\n if (l === 1) {\n return true;\n }\n var typeName = any.typeName;\n var i;\n for (i = 1; i < l; i++) {\n if (typeName.indexOf(arguments[i]) === 0) {\n return true;\n }\n }\n return false;\n };\n Type.__reset = function(size) {\n debug(\"resetting type buffer to %d\", size);\n TAP.buf = new SlowBuffer(size);\n };\n Object.defineProperty(Type.prototype, \"branchName\", {\n enumerable: true,\n get: function() {\n var type = Type.isType(this, \"logical\") ? this.underlyingType : this;\n if (type.name) {\n return type.name;\n }\n if (Type.isType(type, \"abstract\")) {\n return type._concreteTypeName;\n }\n return Type.isType(type, \"union\") ? void 0 : type.typeName;\n }\n });\n Type.prototype.clone = function(val, opts) {\n if (opts) {\n opts = {\n coerce: !!opts.coerceBuffers | 0,\n // Coerce JSON to Buffer.\n fieldHook: opts.fieldHook,\n qualifyNames: !!opts.qualifyNames,\n skip: !!opts.skipMissingFields,\n wrap: !!opts.wrapUnions | 0\n // Wrap first match into union.\n };\n return this._copy(val, opts);\n } else {\n return this.fromBuffer(this.toBuffer(val));\n }\n };\n Type.prototype.compare = utils.abstractFunction;\n Type.prototype.compareBuffers = function(buf1, buf2) {\n return this._match(new Tap(buf1), new Tap(buf2));\n };\n Type.prototype.createResolver = function(type, opts) {\n if (!Type.isType(type)) {\n throw new Error(f2(\"not a type: %j\", type));\n }\n if (!Type.isType(this, \"union\", \"logical\") && Type.isType(type, \"logical\")) {\n return this.createResolver(type.underlyingType, opts);\n }\n opts = opts || {};\n opts.registry = opts.registry || {};\n var resolver, key;\n if (Type.isType(this, \"record\", \"error\") && Type.isType(type, \"record\", \"error\")) {\n key = this.name + \":\" + type.name;\n resolver = opts.registry[key];\n if (resolver) {\n return resolver;\n }\n }\n resolver = new Resolver(this);\n if (key) {\n opts.registry[key] = resolver;\n }\n if (Type.isType(type, \"union\")) {\n var resolvers = type.types.map(function(t) {\n return this.createResolver(t, opts);\n }, this);\n resolver._read = function(tap) {\n var index = tap.readLong();\n var resolver2 = resolvers[index];\n if (resolver2 === void 0) {\n throw new Error(f2(\"invalid union index: %s\", index));\n }\n return resolvers[index]._read(tap);\n };\n } else {\n this._update(resolver, type, opts);\n }\n if (!resolver._read) {\n throw new Error(f2(\"cannot read %s as %s\", type, this));\n }\n return Object.freeze(resolver);\n };\n Type.prototype.decode = function(buf, pos, resolver) {\n var tap = new Tap(buf, pos);\n var val = readValue(this, tap, resolver);\n if (!tap.isValid()) {\n return { value: void 0, offset: -1 };\n }\n return { value: val, offset: tap.pos };\n };\n Type.prototype.encode = function(val, buf, pos) {\n var tap = new Tap(buf, pos);\n this._write(tap, val);\n if (!tap.isValid()) {\n return buf.length - tap.pos;\n }\n return tap.pos;\n };\n Type.prototype.equals = function(type, opts) {\n var canon = (\n // Canonical equality.\n Type.isType(type) && this.fingerprint().equals(type.fingerprint())\n );\n if (!canon || !(opts && opts.strict)) {\n return canon;\n }\n return JSON.stringify(this.schema({ exportAttrs: true })) === JSON.stringify(type.schema({ exportAttrs: true }));\n };\n Type.prototype.fingerprint = function(algorithm) {\n if (!algorithm) {\n if (!this._hash.str) {\n var schemaStr = JSON.stringify(this.schema());\n this._hash.str = utils.getHash(schemaStr).toString(\"binary\");\n }\n return utils.bufferFrom(this._hash.str, \"binary\");\n } else {\n return utils.getHash(JSON.stringify(this.schema()), algorithm);\n }\n };\n Type.prototype.fromBuffer = function(buf, resolver, noCheck) {\n var tap = new Tap(buf);\n var val = readValue(this, tap, resolver, noCheck);\n if (!tap.isValid()) {\n throw new Error(\"truncated buffer\");\n }\n if (!noCheck && tap.pos < buf.length) {\n throw new Error(\"trailing data\");\n }\n return val;\n };\n Type.prototype.fromString = function(str) {\n return this._copy(JSON.parse(str), { coerce: 2 });\n };\n Type.prototype.inspect = function() {\n var typeName = this.typeName;\n var className = getClassName(typeName);\n if (isPrimitive(typeName)) {\n return f2(\"<%s>\", className);\n } else {\n var obj = this.schema({ exportAttrs: true, noDeref: true });\n if (typeof obj == \"object\" && !Type.isType(this, \"logical\")) {\n obj.type = void 0;\n }\n return f2(\"<%s %j>\", className, obj);\n }\n };\n Type.prototype.isValid = function(val, opts) {\n var flags = (opts && opts.noUndeclaredFields) | 0;\n var errorHook = opts && opts.errorHook;\n var hook, path;\n if (errorHook) {\n path = [];\n hook = function(any, type) {\n errorHook.call(this, path.slice(), any, type, val);\n };\n }\n return this._check(val, flags, hook, path);\n };\n Type.prototype.random = utils.abstractFunction;\n Type.prototype.schema = function(opts) {\n return this._attrs({\n exportAttrs: !!(opts && opts.exportAttrs),\n noDeref: !!(opts && opts.noDeref)\n });\n };\n Type.prototype.toBuffer = function(val) {\n TAP.pos = 0;\n this._write(TAP, val);\n var buf = utils.newBuffer(TAP.pos);\n if (TAP.isValid()) {\n TAP.buf.copy(buf, 0, 0, TAP.pos);\n } else {\n this._write(new Tap(buf), val);\n }\n return buf;\n };\n Type.prototype.toJSON = function() {\n return this.schema({ exportAttrs: true });\n };\n Type.prototype.toString = function(val) {\n if (val === void 0) {\n return JSON.stringify(this.schema({ noDeref: true }));\n }\n return JSON.stringify(this._copy(val, { coerce: 3 }));\n };\n Type.prototype.wrap = function(val) {\n var Branch = this._branchConstructor;\n return Branch === null ? null : new Branch(val);\n };\n Type.prototype._attrs = function(opts) {\n opts.derefed = opts.derefed || {};\n var name = this.name;\n if (name !== void 0) {\n if (opts.noDeref || opts.derefed[name]) {\n return name;\n }\n opts.derefed[name] = true;\n }\n var schema = {};\n if (this.name !== void 0) {\n schema.name = name;\n }\n schema.type = this.typeName;\n var derefedSchema = this._deref(schema, opts);\n if (derefedSchema !== void 0) {\n schema = derefedSchema;\n }\n if (opts.exportAttrs) {\n if (this.aliases && this.aliases.length) {\n schema.aliases = this.aliases;\n }\n if (this.doc !== void 0) {\n schema.doc = this.doc;\n }\n }\n return schema;\n };\n Type.prototype._createBranchConstructor = function() {\n var name = this.branchName;\n if (name === \"null\") {\n return null;\n }\n var attr = ~name.indexOf(\".\") ? \"this['\" + name + \"']\" : \"this.\" + name;\n var body = \"return function Branch$(val) { \" + attr + \" = val; };\";\n var Branch = new Function(body)();\n Branch.type = this;\n Branch.prototype.unwrap = new Function(\"return \" + attr + \";\");\n Branch.prototype.unwrapped = Branch.prototype.unwrap;\n return Branch;\n };\n Type.prototype._peek = function(tap) {\n var pos = tap.pos;\n var val = this._read(tap);\n tap.pos = pos;\n return val;\n };\n Type.prototype._check = utils.abstractFunction;\n Type.prototype._copy = utils.abstractFunction;\n Type.prototype._deref = utils.abstractFunction;\n Type.prototype._match = utils.abstractFunction;\n Type.prototype._read = utils.abstractFunction;\n Type.prototype._skip = utils.abstractFunction;\n Type.prototype._update = utils.abstractFunction;\n Type.prototype._write = utils.abstractFunction;\n Type.prototype.getAliases = function() {\n return this.aliases;\n };\n Type.prototype.getFingerprint = Type.prototype.fingerprint;\n Type.prototype.getName = function(asBranch) {\n return this.name || !asBranch ? this.name : this.branchName;\n };\n Type.prototype.getSchema = Type.prototype.schema;\n Type.prototype.getTypeName = function() {\n return this.typeName;\n };\n function PrimitiveType(noFreeze) {\n Type.call(this);\n this._branchConstructor = this._createBranchConstructor();\n if (!noFreeze) {\n Object.freeze(this);\n }\n }\n util.inherits(PrimitiveType, Type);\n PrimitiveType.prototype._update = function(resolver, type) {\n if (type.typeName === this.typeName) {\n resolver._read = this._read;\n }\n };\n PrimitiveType.prototype._copy = function(val) {\n this._check(val, void 0, throwInvalidError);\n return val;\n };\n PrimitiveType.prototype._deref = function() {\n return this.typeName;\n };\n PrimitiveType.prototype.compare = utils.compare;\n function NullType() {\n PrimitiveType.call(this);\n }\n util.inherits(NullType, PrimitiveType);\n NullType.prototype._check = function(val, flags, hook) {\n var b2 = val === null;\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n NullType.prototype._read = function() {\n return null;\n };\n NullType.prototype._skip = function() {\n };\n NullType.prototype._write = function(tap, val) {\n if (val !== null) {\n throwInvalidError(val, this);\n }\n };\n NullType.prototype._match = function() {\n return 0;\n };\n NullType.prototype.compare = NullType.prototype._match;\n NullType.prototype.typeName = \"null\";\n NullType.prototype.random = NullType.prototype._read;\n function BooleanType() {\n PrimitiveType.call(this);\n }\n util.inherits(BooleanType, PrimitiveType);\n BooleanType.prototype._check = function(val, flags, hook) {\n var b2 = typeof val == \"boolean\";\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n BooleanType.prototype._read = function(tap) {\n return tap.readBoolean();\n };\n BooleanType.prototype._skip = function(tap) {\n tap.skipBoolean();\n };\n BooleanType.prototype._write = function(tap, val) {\n if (typeof val != \"boolean\") {\n throwInvalidError(val, this);\n }\n tap.writeBoolean(val);\n };\n BooleanType.prototype._match = function(tap1, tap2) {\n return tap1.matchBoolean(tap2);\n };\n BooleanType.prototype.typeName = \"boolean\";\n BooleanType.prototype.random = function() {\n return RANDOM.nextBoolean();\n };\n function IntType() {\n PrimitiveType.call(this);\n }\n util.inherits(IntType, PrimitiveType);\n IntType.prototype._check = function(val, flags, hook) {\n var b2 = val === (val | 0);\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n IntType.prototype._read = function(tap) {\n return tap.readInt();\n };\n IntType.prototype._skip = function(tap) {\n tap.skipInt();\n };\n IntType.prototype._write = function(tap, val) {\n if (val !== (val | 0)) {\n throwInvalidError(val, this);\n }\n tap.writeInt(val);\n };\n IntType.prototype._match = function(tap1, tap2) {\n return tap1.matchInt(tap2);\n };\n IntType.prototype.typeName = \"int\";\n IntType.prototype.random = function() {\n return RANDOM.nextInt(1e3) | 0;\n };\n function LongType() {\n PrimitiveType.call(this);\n }\n util.inherits(LongType, PrimitiveType);\n LongType.prototype._check = function(val, flags, hook) {\n var b2 = typeof val == \"number\" && val % 1 === 0 && isSafeLong(val);\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n LongType.prototype._read = function(tap) {\n var n = tap.readLong();\n if (!isSafeLong(n)) {\n throw new Error(\"potential precision loss\");\n }\n return n;\n };\n LongType.prototype._skip = function(tap) {\n tap.skipLong();\n };\n LongType.prototype._write = function(tap, val) {\n if (typeof val != \"number\" || val % 1 || !isSafeLong(val)) {\n throwInvalidError(val, this);\n }\n tap.writeLong(val);\n };\n LongType.prototype._match = function(tap1, tap2) {\n return tap1.matchLong(tap2);\n };\n LongType.prototype._update = function(resolver, type) {\n switch (type.typeName) {\n case \"int\":\n resolver._read = type._read;\n break;\n case \"abstract:long\":\n case \"long\":\n resolver._read = this._read;\n }\n };\n LongType.prototype.typeName = \"long\";\n LongType.prototype.random = function() {\n return RANDOM.nextInt();\n };\n LongType.__with = function(methods, noUnpack) {\n methods = methods || {};\n var mapping = {\n toBuffer: \"_toBuffer\",\n fromBuffer: \"_fromBuffer\",\n fromJSON: \"_fromJSON\",\n toJSON: \"_toJSON\",\n isValid: \"_isValid\",\n compare: \"compare\"\n };\n var type = new AbstractLongType(noUnpack);\n Object.keys(mapping).forEach(function(name) {\n if (methods[name] === void 0) {\n throw new Error(f2(\"missing method implementation: %s\", name));\n }\n type[mapping[name]] = methods[name];\n });\n return Object.freeze(type);\n };\n function FloatType() {\n PrimitiveType.call(this);\n }\n util.inherits(FloatType, PrimitiveType);\n FloatType.prototype._check = function(val, flags, hook) {\n var b2 = typeof val == \"number\";\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n FloatType.prototype._read = function(tap) {\n return tap.readFloat();\n };\n FloatType.prototype._skip = function(tap) {\n tap.skipFloat();\n };\n FloatType.prototype._write = function(tap, val) {\n if (typeof val != \"number\") {\n throwInvalidError(val, this);\n }\n tap.writeFloat(val);\n };\n FloatType.prototype._match = function(tap1, tap2) {\n return tap1.matchFloat(tap2);\n };\n FloatType.prototype._update = function(resolver, type) {\n switch (type.typeName) {\n case \"float\":\n case \"int\":\n resolver._read = type._read;\n break;\n case \"abstract:long\":\n case \"long\":\n resolver._read = function(tap) {\n return tap.readLong();\n };\n }\n };\n FloatType.prototype.typeName = \"float\";\n FloatType.prototype.random = function() {\n return RANDOM.nextFloat(1e3);\n };\n function DoubleType() {\n PrimitiveType.call(this);\n }\n util.inherits(DoubleType, PrimitiveType);\n DoubleType.prototype._check = function(val, flags, hook) {\n var b2 = typeof val == \"number\";\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n DoubleType.prototype._read = function(tap) {\n return tap.readDouble();\n };\n DoubleType.prototype._skip = function(tap) {\n tap.skipDouble();\n };\n DoubleType.prototype._write = function(tap, val) {\n if (typeof val != \"number\") {\n throwInvalidError(val, this);\n }\n tap.writeDouble(val);\n };\n DoubleType.prototype._match = function(tap1, tap2) {\n return tap1.matchDouble(tap2);\n };\n DoubleType.prototype._update = function(resolver, type) {\n switch (type.typeName) {\n case \"double\":\n case \"float\":\n case \"int\":\n resolver._read = type._read;\n break;\n case \"abstract:long\":\n case \"long\":\n resolver._read = function(tap) {\n return tap.readLong();\n };\n }\n };\n DoubleType.prototype.typeName = \"double\";\n DoubleType.prototype.random = function() {\n return RANDOM.nextFloat();\n };\n function StringType() {\n PrimitiveType.call(this);\n }\n util.inherits(StringType, PrimitiveType);\n StringType.prototype._check = function(val, flags, hook) {\n var b2 = typeof val == \"string\";\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n StringType.prototype._read = function(tap) {\n return tap.readString();\n };\n StringType.prototype._skip = function(tap) {\n tap.skipString();\n };\n StringType.prototype._write = function(tap, val) {\n if (typeof val != \"string\") {\n throwInvalidError(val, this);\n }\n tap.writeString(val);\n };\n StringType.prototype._match = function(tap1, tap2) {\n return tap1.matchString(tap2);\n };\n StringType.prototype._update = function(resolver, type) {\n switch (type.typeName) {\n case \"bytes\":\n case \"string\":\n resolver._read = this._read;\n }\n };\n StringType.prototype.typeName = \"string\";\n StringType.prototype.random = function() {\n return RANDOM.nextString(RANDOM.nextInt(32));\n };\n function BytesType() {\n PrimitiveType.call(this);\n }\n util.inherits(BytesType, PrimitiveType);\n BytesType.prototype._check = function(val, flags, hook) {\n var b2 = Buffer2.isBuffer(val);\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n BytesType.prototype._read = function(tap) {\n return tap.readBytes();\n };\n BytesType.prototype._skip = function(tap) {\n tap.skipBytes();\n };\n BytesType.prototype._write = function(tap, val) {\n if (!Buffer2.isBuffer(val)) {\n throwInvalidError(val, this);\n }\n tap.writeBytes(val);\n };\n BytesType.prototype._match = function(tap1, tap2) {\n return tap1.matchBytes(tap2);\n };\n BytesType.prototype._update = StringType.prototype._update;\n BytesType.prototype._copy = function(obj, opts) {\n var buf;\n switch ((opts && opts.coerce) | 0) {\n case 3:\n this._check(obj, void 0, throwInvalidError);\n return obj.toString(\"binary\");\n case 2:\n if (typeof obj != \"string\") {\n throw new Error(f2(\"cannot coerce to buffer: %j\", obj));\n }\n buf = utils.bufferFrom(obj, \"binary\");\n this._check(buf, void 0, throwInvalidError);\n return buf;\n case 1:\n if (!isJsonBuffer(obj)) {\n throw new Error(f2(\"cannot coerce to buffer: %j\", obj));\n }\n buf = utils.bufferFrom(obj.data);\n this._check(buf, void 0, throwInvalidError);\n return buf;\n default:\n this._check(obj, void 0, throwInvalidError);\n return utils.bufferFrom(obj);\n }\n };\n BytesType.prototype.compare = Buffer2.compare;\n BytesType.prototype.typeName = \"bytes\";\n BytesType.prototype.random = function() {\n return RANDOM.nextBuffer(RANDOM.nextInt(32));\n };\n function UnionType(schema, opts) {\n Type.call(this);\n if (!Array.isArray(schema)) {\n throw new Error(f2(\"non-array union schema: %j\", schema));\n }\n if (!schema.length) {\n throw new Error(\"empty union\");\n }\n this.types = Object.freeze(schema.map(function(obj) {\n return Type.forSchema(obj, opts);\n }));\n this._branchIndices = {};\n this.types.forEach(function(type, i) {\n if (Type.isType(type, \"union\")) {\n throw new Error(\"unions cannot be directly nested\");\n }\n var branch = type.branchName;\n if (this._branchIndices[branch] !== void 0) {\n throw new Error(f2(\"duplicate union branch name: %j\", branch));\n }\n this._branchIndices[branch] = i;\n }, this);\n }\n util.inherits(UnionType, Type);\n UnionType.prototype._branchConstructor = function() {\n throw new Error(\"unions cannot be directly wrapped\");\n };\n UnionType.prototype._skip = function(tap) {\n this.types[tap.readLong()]._skip(tap);\n };\n UnionType.prototype._match = function(tap1, tap2) {\n var n1 = tap1.readLong();\n var n2 = tap2.readLong();\n if (n1 === n2) {\n return this.types[n1]._match(tap1, tap2);\n } else {\n return n1 < n2 ? -1 : 1;\n }\n };\n UnionType.prototype._deref = function(schema, opts) {\n return this.types.map(function(t) {\n return t._attrs(opts);\n });\n };\n UnionType.prototype.getTypes = function() {\n return this.types;\n };\n function UnwrappedUnionType(schema, opts) {\n UnionType.call(this, schema, opts);\n this._dynamicBranches = null;\n this._bucketIndices = {};\n this.types.forEach(function(type, index) {\n if (Type.isType(type, \"abstract\", \"logical\")) {\n if (!this._dynamicBranches) {\n this._dynamicBranches = [];\n }\n this._dynamicBranches.push({ index, type });\n } else {\n var bucket = getTypeBucket(type);\n if (this._bucketIndices[bucket] !== void 0) {\n throw new Error(f2(\"ambiguous unwrapped union: %j\", this));\n }\n this._bucketIndices[bucket] = index;\n }\n }, this);\n Object.freeze(this);\n }\n util.inherits(UnwrappedUnionType, UnionType);\n UnwrappedUnionType.prototype._getIndex = function(val) {\n var index = this._bucketIndices[getValueBucket(val)];\n if (this._dynamicBranches) {\n index = this._getBranchIndex(val, index);\n }\n return index;\n };\n UnwrappedUnionType.prototype._getBranchIndex = function(any, index) {\n var logicalBranches = this._dynamicBranches;\n var i, l, branch;\n for (i = 0, l = logicalBranches.length; i < l; i++) {\n branch = logicalBranches[i];\n if (branch.type._check(any)) {\n if (index === void 0) {\n index = branch.index;\n } else {\n throw new Error(\"ambiguous conversion\");\n }\n }\n }\n return index;\n };\n UnwrappedUnionType.prototype._check = function(val, flags, hook, path) {\n var index = this._getIndex(val);\n var b2 = index !== void 0;\n if (b2) {\n return this.types[index]._check(val, flags, hook, path);\n }\n if (hook) {\n hook(val, this);\n }\n return b2;\n };\n UnwrappedUnionType.prototype._read = function(tap) {\n var index = tap.readLong();\n var branchType = this.types[index];\n if (branchType) {\n return branchType._read(tap);\n } else {\n throw new Error(f2(\"invalid union index: %s\", index));\n }\n };\n UnwrappedUnionType.prototype._write = function(tap, val) {\n var index = this._getIndex(val);\n if (index === void 0) {\n throwInvalidError(val, this);\n }\n tap.writeLong(index);\n if (val !== null) {\n this.types[index]._write(tap, val);\n }\n };\n UnwrappedUnionType.prototype._update = function(resolver, type, opts) {\n var i, l, typeResolver;\n for (i = 0, l = this.types.length; i < l; i++) {\n try {\n typeResolver = this.types[i].createResolver(type, opts);\n } catch (err) {\n continue;\n }\n resolver._read = function(tap) {\n return typeResolver._read(tap);\n };\n return;\n }\n };\n UnwrappedUnionType.prototype._copy = function(val, opts) {\n var coerce = opts && opts.coerce | 0;\n var wrap = opts && opts.wrap | 0;\n var index;\n if (wrap === 2) {\n index = 0;\n } else {\n switch (coerce) {\n case 1:\n if (isJsonBuffer(val) && this._bucketIndices.buffer !== void 0) {\n index = this._bucketIndices.buffer;\n } else {\n index = this._getIndex(val);\n }\n break;\n case 2:\n if (val === null) {\n index = this._bucketIndices[\"null\"];\n } else if (typeof val === \"object\") {\n var keys = Object.keys(val);\n if (keys.length === 1) {\n index = this._branchIndices[keys[0]];\n val = val[keys[0]];\n }\n }\n break;\n default:\n index = this._getIndex(val);\n }\n if (index === void 0) {\n throwInvalidError(val, this);\n }\n }\n var type = this.types[index];\n if (val === null || wrap === 3) {\n return type._copy(val, opts);\n } else {\n switch (coerce) {\n case 3:\n var obj = {};\n obj[type.branchName] = type._copy(val, opts);\n return obj;\n default:\n return type._copy(val, opts);\n }\n }\n };\n UnwrappedUnionType.prototype.compare = function(val1, val2) {\n var index1 = this._getIndex(val1);\n var index2 = this._getIndex(val2);\n if (index1 === void 0) {\n throwInvalidError(val1, this);\n } else if (index2 === void 0) {\n throwInvalidError(val2, this);\n } else if (index1 === index2) {\n return this.types[index1].compare(val1, val2);\n } else {\n return utils.compare(index1, index2);\n }\n };\n UnwrappedUnionType.prototype.typeName = \"union:unwrapped\";\n UnwrappedUnionType.prototype.random = function() {\n var index = RANDOM.nextInt(this.types.length);\n return this.types[index].random();\n };\n function WrappedUnionType(schema, opts) {\n UnionType.call(this, schema, opts);\n Object.freeze(this);\n }\n util.inherits(WrappedUnionType, UnionType);\n WrappedUnionType.prototype._check = function(val, flags, hook, path) {\n var b2 = false;\n if (val === null) {\n b2 = this._branchIndices[\"null\"] !== void 0;\n } else if (typeof val == \"object\") {\n var keys = Object.keys(val);\n if (keys.length === 1) {\n var name = keys[0];\n var index = this._branchIndices[name];\n if (index !== void 0) {\n if (hook) {\n path.push(name);\n b2 = this.types[index]._check(val[name], flags, hook, path);\n path.pop();\n return b2;\n } else {\n return this.types[index]._check(val[name], flags);\n }\n }\n }\n }\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n WrappedUnionType.prototype._read = function(tap) {\n var type = this.types[tap.readLong()];\n if (!type) {\n throw new Error(f2(\"invalid union index\"));\n }\n var Branch = type._branchConstructor;\n if (Branch === null) {\n return null;\n } else {\n return new Branch(type._read(tap));\n }\n };\n WrappedUnionType.prototype._write = function(tap, val) {\n var index, keys, name;\n if (val === null) {\n index = this._branchIndices[\"null\"];\n if (index === void 0) {\n throwInvalidError(val, this);\n }\n tap.writeLong(index);\n } else {\n keys = Object.keys(val);\n if (keys.length === 1) {\n name = keys[0];\n index = this._branchIndices[name];\n }\n if (index === void 0) {\n throwInvalidError(val, this);\n }\n tap.writeLong(index);\n this.types[index]._write(tap, val[name]);\n }\n };\n WrappedUnionType.prototype._update = function(resolver, type, opts) {\n var i, l, typeResolver, Branch;\n for (i = 0, l = this.types.length; i < l; i++) {\n try {\n typeResolver = this.types[i].createResolver(type, opts);\n } catch (err) {\n continue;\n }\n Branch = this.types[i]._branchConstructor;\n if (Branch) {\n resolver._read = function(tap) {\n return new Branch(typeResolver._read(tap));\n };\n } else {\n resolver._read = function() {\n return null;\n };\n }\n return;\n }\n };\n WrappedUnionType.prototype._copy = function(val, opts) {\n var wrap = opts && opts.wrap | 0;\n if (wrap === 2) {\n var firstType = this.types[0];\n if (val === null && firstType.typeName === \"null\") {\n return null;\n }\n return new firstType._branchConstructor(firstType._copy(val, opts));\n }\n if (val === null && this._branchIndices[\"null\"] !== void 0) {\n return null;\n }\n var i, l, obj;\n if (typeof val == \"object\") {\n var keys = Object.keys(val);\n if (keys.length === 1) {\n var name = keys[0];\n i = this._branchIndices[name];\n if (i === void 0 && opts.qualifyNames) {\n var j2, type;\n for (j2 = 0, l = this.types.length; j2 < l; j2++) {\n type = this.types[j2];\n if (type.name && name === utils.unqualify(type.name)) {\n i = j2;\n break;\n }\n }\n }\n if (i !== void 0) {\n obj = this.types[i]._copy(val[name], opts);\n }\n }\n }\n if (wrap === 1 && obj === void 0) {\n i = 0;\n l = this.types.length;\n while (i < l && obj === void 0) {\n try {\n obj = this.types[i]._copy(val, opts);\n } catch (err) {\n i++;\n }\n }\n }\n if (obj !== void 0) {\n return wrap === 3 ? obj : new this.types[i]._branchConstructor(obj);\n }\n throwInvalidError(val, this);\n };\n WrappedUnionType.prototype.compare = function(val1, val2) {\n var name1 = val1 === null ? \"null\" : Object.keys(val1)[0];\n var name2 = val2 === null ? \"null\" : Object.keys(val2)[0];\n var index = this._branchIndices[name1];\n if (name1 === name2) {\n return name1 === \"null\" ? 0 : this.types[index].compare(val1[name1], val2[name1]);\n } else {\n return utils.compare(index, this._branchIndices[name2]);\n }\n };\n WrappedUnionType.prototype.typeName = \"union:wrapped\";\n WrappedUnionType.prototype.random = function() {\n var index = RANDOM.nextInt(this.types.length);\n var type = this.types[index];\n var Branch = type._branchConstructor;\n if (!Branch) {\n return null;\n }\n return new Branch(type.random());\n };\n function EnumType(schema, opts) {\n Type.call(this, schema, opts);\n if (!Array.isArray(schema.symbols) || !schema.symbols.length) {\n throw new Error(f2(\"invalid enum symbols: %j\", schema.symbols));\n }\n this.symbols = Object.freeze(schema.symbols.slice());\n this._indices = {};\n this.symbols.forEach(function(symbol, i) {\n if (!utils.isValidName(symbol)) {\n throw new Error(f2(\"invalid %s symbol: %j\", this, symbol));\n }\n if (this._indices[symbol] !== void 0) {\n throw new Error(f2(\"duplicate %s symbol: %j\", this, symbol));\n }\n this._indices[symbol] = i;\n }, this);\n this.default = schema.default;\n if (this.default !== void 0 && this._indices[this.default] === void 0) {\n throw new Error(f2(\"invalid %s default: %j\", this, this.default));\n }\n this._branchConstructor = this._createBranchConstructor();\n Object.freeze(this);\n }\n util.inherits(EnumType, Type);\n EnumType.prototype._check = function(val, flags, hook) {\n var b2 = this._indices[val] !== void 0;\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n EnumType.prototype._read = function(tap) {\n var index = tap.readLong();\n var symbol = this.symbols[index];\n if (symbol === void 0) {\n throw new Error(f2(\"invalid %s enum index: %s\", this.name, index));\n }\n return symbol;\n };\n EnumType.prototype._skip = function(tap) {\n tap.skipLong();\n };\n EnumType.prototype._write = function(tap, val) {\n var index = this._indices[val];\n if (index === void 0) {\n throwInvalidError(val, this);\n }\n tap.writeLong(index);\n };\n EnumType.prototype._match = function(tap1, tap2) {\n return tap1.matchLong(tap2);\n };\n EnumType.prototype.compare = function(val1, val2) {\n return utils.compare(this._indices[val1], this._indices[val2]);\n };\n EnumType.prototype._update = function(resolver, type, opts) {\n var symbols = this.symbols;\n if (type.typeName === \"enum\" && hasCompatibleName(this, type, !opts.ignoreNamespaces) && (type.symbols.every(function(s) {\n return ~symbols.indexOf(s);\n }) || this.default !== void 0)) {\n resolver.symbols = type.symbols.map(function(s) {\n return this._indices[s] === void 0 ? this.default : s;\n }, this);\n resolver._read = type._read;\n }\n };\n EnumType.prototype._copy = function(val) {\n this._check(val, void 0, throwInvalidError);\n return val;\n };\n EnumType.prototype._deref = function(schema) {\n schema.symbols = this.symbols;\n };\n EnumType.prototype.getSymbols = function() {\n return this.symbols;\n };\n EnumType.prototype.typeName = \"enum\";\n EnumType.prototype.random = function() {\n return RANDOM.choice(this.symbols);\n };\n function FixedType(schema, opts) {\n Type.call(this, schema, opts);\n if (schema.size !== (schema.size | 0) || schema.size < 0) {\n throw new Error(f2(\"invalid %s size\", this.branchName));\n }\n this.size = schema.size | 0;\n this._branchConstructor = this._createBranchConstructor();\n Object.freeze(this);\n }\n util.inherits(FixedType, Type);\n FixedType.prototype._check = function(val, flags, hook) {\n var b2 = Buffer2.isBuffer(val) && val.length === this.size;\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n FixedType.prototype._read = function(tap) {\n return tap.readFixed(this.size);\n };\n FixedType.prototype._skip = function(tap) {\n tap.skipFixed(this.size);\n };\n FixedType.prototype._write = function(tap, val) {\n if (!Buffer2.isBuffer(val) || val.length !== this.size) {\n throwInvalidError(val, this);\n }\n tap.writeFixed(val, this.size);\n };\n FixedType.prototype._match = function(tap1, tap2) {\n return tap1.matchFixed(tap2, this.size);\n };\n FixedType.prototype.compare = Buffer2.compare;\n FixedType.prototype._update = function(resolver, type, opts) {\n if (type.typeName === \"fixed\" && this.size === type.size && hasCompatibleName(this, type, !opts.ignoreNamespaces)) {\n resolver.size = this.size;\n resolver._read = this._read;\n }\n };\n FixedType.prototype._copy = BytesType.prototype._copy;\n FixedType.prototype._deref = function(schema) {\n schema.size = this.size;\n };\n FixedType.prototype.getSize = function() {\n return this.size;\n };\n FixedType.prototype.typeName = \"fixed\";\n FixedType.prototype.random = function() {\n return RANDOM.nextBuffer(this.size);\n };\n function MapType(schema, opts) {\n Type.call(this);\n if (!schema.values) {\n throw new Error(f2(\"missing map values: %j\", schema));\n }\n this.valuesType = Type.forSchema(schema.values, opts);\n this._branchConstructor = this._createBranchConstructor();\n Object.freeze(this);\n }\n util.inherits(MapType, Type);\n MapType.prototype._check = function(val, flags, hook, path) {\n if (!val || typeof val != \"object\" || Array.isArray(val)) {\n if (hook) {\n hook(val, this);\n }\n return false;\n }\n var keys = Object.keys(val);\n var b2 = true;\n var i, l, j2, key;\n if (hook) {\n j2 = path.length;\n path.push(\"\");\n for (i = 0, l = keys.length; i < l; i++) {\n key = path[j2] = keys[i];\n if (!this.valuesType._check(val[key], flags, hook, path)) {\n b2 = false;\n }\n }\n path.pop();\n } else {\n for (i = 0, l = keys.length; i < l; i++) {\n if (!this.valuesType._check(val[keys[i]], flags)) {\n return false;\n }\n }\n }\n return b2;\n };\n MapType.prototype._read = function(tap) {\n var values = this.valuesType;\n var val = {};\n var n;\n while (n = readArraySize(tap)) {\n while (n--) {\n var key = tap.readString();\n val[key] = values._read(tap);\n }\n }\n return val;\n };\n MapType.prototype._skip = function(tap) {\n var values = this.valuesType;\n var len, n;\n while (n = tap.readLong()) {\n if (n < 0) {\n len = tap.readLong();\n tap.pos += len;\n } else {\n while (n--) {\n tap.skipString();\n values._skip(tap);\n }\n }\n }\n };\n MapType.prototype._write = function(tap, val) {\n if (!val || typeof val != \"object\" || Array.isArray(val)) {\n throwInvalidError(val, this);\n }\n var values = this.valuesType;\n var keys = Object.keys(val);\n var n = keys.length;\n var i, key;\n if (n) {\n tap.writeLong(n);\n for (i = 0; i < n; i++) {\n key = keys[i];\n tap.writeString(key);\n values._write(tap, val[key]);\n }\n }\n tap.writeLong(0);\n };\n MapType.prototype._match = function() {\n throw new Error(\"maps cannot be compared\");\n };\n MapType.prototype._update = function(rsv, type, opts) {\n if (type.typeName === \"map\") {\n rsv.valuesType = this.valuesType.createResolver(type.valuesType, opts);\n rsv._read = this._read;\n }\n };\n MapType.prototype._copy = function(val, opts) {\n if (val && typeof val == \"object\" && !Array.isArray(val)) {\n var values = this.valuesType;\n var keys = Object.keys(val);\n var i, l, key;\n var copy = {};\n for (i = 0, l = keys.length; i < l; i++) {\n key = keys[i];\n copy[key] = values._copy(val[key], opts);\n }\n return copy;\n }\n throwInvalidError(val, this);\n };\n MapType.prototype.compare = MapType.prototype._match;\n MapType.prototype.typeName = \"map\";\n MapType.prototype.getValuesType = function() {\n return this.valuesType;\n };\n MapType.prototype.random = function() {\n var val = {};\n var i, l;\n for (i = 0, l = RANDOM.nextInt(10); i < l; i++) {\n val[RANDOM.nextString(RANDOM.nextInt(20))] = this.valuesType.random();\n }\n return val;\n };\n MapType.prototype._deref = function(schema, opts) {\n schema.values = this.valuesType._attrs(opts);\n };\n function ArrayType(schema, opts) {\n Type.call(this);\n if (!schema.items) {\n throw new Error(f2(\"missing array items: %j\", schema));\n }\n this.itemsType = Type.forSchema(schema.items, opts);\n this._branchConstructor = this._createBranchConstructor();\n Object.freeze(this);\n }\n util.inherits(ArrayType, Type);\n ArrayType.prototype._check = function(val, flags, hook, path) {\n if (!Array.isArray(val)) {\n if (hook) {\n hook(val, this);\n }\n return false;\n }\n var items = this.itemsType;\n var b2 = true;\n var i, l, j2;\n if (hook) {\n j2 = path.length;\n path.push(\"\");\n for (i = 0, l = val.length; i < l; i++) {\n path[j2] = \"\" + i;\n if (!items._check(val[i], flags, hook, path)) {\n b2 = false;\n }\n }\n path.pop();\n } else {\n for (i = 0, l = val.length; i < l; i++) {\n if (!items._check(val[i], flags)) {\n return false;\n }\n }\n }\n return b2;\n };\n ArrayType.prototype._read = function(tap) {\n var items = this.itemsType;\n var i = 0;\n var val, n;\n while (n = tap.readLong()) {\n if (n < 0) {\n n = -n;\n tap.skipLong();\n }\n val = val || new Array(n);\n while (n--) {\n val[i++] = items._read(tap);\n }\n }\n return val || [];\n };\n ArrayType.prototype._skip = function(tap) {\n var items = this.itemsType;\n var len, n;\n while (n = tap.readLong()) {\n if (n < 0) {\n len = tap.readLong();\n tap.pos += len;\n } else {\n while (n--) {\n items._skip(tap);\n }\n }\n }\n };\n ArrayType.prototype._write = function(tap, val) {\n if (!Array.isArray(val)) {\n throwInvalidError(val, this);\n }\n var items = this.itemsType;\n var n = val.length;\n var i;\n if (n) {\n tap.writeLong(n);\n for (i = 0; i < n; i++) {\n items._write(tap, val[i]);\n }\n }\n tap.writeLong(0);\n };\n ArrayType.prototype._match = function(tap1, tap2) {\n var n1 = tap1.readLong();\n var n2 = tap2.readLong();\n var f3;\n while (n1 && n2) {\n f3 = this.itemsType._match(tap1, tap2);\n if (f3) {\n return f3;\n }\n if (!--n1) {\n n1 = readArraySize(tap1);\n }\n if (!--n2) {\n n2 = readArraySize(tap2);\n }\n }\n return utils.compare(n1, n2);\n };\n ArrayType.prototype._update = function(resolver, type, opts) {\n if (type.typeName === \"array\") {\n resolver.itemsType = this.itemsType.createResolver(type.itemsType, opts);\n resolver._read = this._read;\n }\n };\n ArrayType.prototype._copy = function(val, opts) {\n if (!Array.isArray(val)) {\n throwInvalidError(val, this);\n }\n var items = new Array(val.length);\n var i, l;\n for (i = 0, l = val.length; i < l; i++) {\n items[i] = this.itemsType._copy(val[i], opts);\n }\n return items;\n };\n ArrayType.prototype._deref = function(schema, opts) {\n schema.items = this.itemsType._attrs(opts);\n };\n ArrayType.prototype.compare = function(val1, val2) {\n var n1 = val1.length;\n var n2 = val2.length;\n var i, l, f3;\n for (i = 0, l = Math.min(n1, n2); i < l; i++) {\n if (f3 = this.itemsType.compare(val1[i], val2[i])) {\n return f3;\n }\n }\n return utils.compare(n1, n2);\n };\n ArrayType.prototype.getItemsType = function() {\n return this.itemsType;\n };\n ArrayType.prototype.typeName = \"array\";\n ArrayType.prototype.random = function() {\n var arr = [];\n var i, l;\n for (i = 0, l = RANDOM.nextInt(10); i < l; i++) {\n arr.push(this.itemsType.random());\n }\n return arr;\n };\n function RecordType(schema, opts) {\n opts = opts || {};\n var namespace = opts.namespace;\n if (schema.namespace !== void 0) {\n opts.namespace = schema.namespace;\n } else if (schema.name) {\n var ns = utils.impliedNamespace(schema.name);\n if (ns !== void 0) {\n opts.namespace = ns;\n }\n }\n Type.call(this, schema, opts);\n if (!Array.isArray(schema.fields)) {\n throw new Error(f2(\"non-array record fields: %j\", schema.fields));\n }\n if (utils.hasDuplicates(schema.fields, function(f3) {\n return f3.name;\n })) {\n throw new Error(f2(\"duplicate field name: %j\", schema.fields));\n }\n this._fieldsByName = {};\n this.fields = Object.freeze(schema.fields.map(function(f3) {\n var field = new Field(f3, opts);\n this._fieldsByName[field.name] = field;\n return field;\n }, this));\n this._branchConstructor = this._createBranchConstructor();\n this._isError = schema.type === \"error\";\n this.recordConstructor = this._createConstructor(\n opts.errorStackTraces,\n opts.omitRecordMethods\n );\n this._read = this._createReader();\n this._skip = this._createSkipper();\n this._write = this._createWriter();\n this._check = this._createChecker();\n opts.namespace = namespace;\n Object.freeze(this);\n }\n util.inherits(RecordType, Type);\n RecordType.prototype._getConstructorName = function() {\n return this.name ? utils.capitalize(utils.unqualify(this.name)) : this._isError ? \"Error$\" : \"Record$\";\n };\n RecordType.prototype._createConstructor = function(errorStack, plainRecords) {\n var outerArgs = [];\n var innerArgs = [];\n var ds = [];\n var innerBody = \"\";\n var i, l, field, name, defaultValue, hasDefault, stackField;\n for (i = 0, l = this.fields.length; i < l; i++) {\n field = this.fields[i];\n defaultValue = field.defaultValue;\n hasDefault = defaultValue() !== void 0;\n name = field.name;\n if (errorStack && this._isError && name === \"stack\" && Type.isType(field.type, \"string\") && !hasDefault) {\n stackField = field;\n }\n innerArgs.push(\"v\" + i);\n innerBody += \" \";\n if (!hasDefault) {\n innerBody += \"this.\" + name + \" = v\" + i + \";\\n\";\n } else {\n innerBody += \"if (v\" + i + \" === undefined) { \";\n innerBody += \"this.\" + name + \" = d\" + ds.length + \"(); \";\n innerBody += \"} else { this.\" + name + \" = v\" + i + \"; }\\n\";\n outerArgs.push(\"d\" + ds.length);\n ds.push(defaultValue);\n }\n }\n if (stackField) {\n innerBody += \" if (this.stack === undefined) { \";\n if (typeof Error.captureStackTrace == \"function\") {\n innerBody += \"Error.captureStackTrace(this, this.constructor);\";\n } else {\n innerBody += \"this.stack = Error().stack;\";\n }\n innerBody += \" }\\n\";\n }\n var outerBody = \"return function \" + this._getConstructorName() + \"(\";\n outerBody += innerArgs.join() + \") {\\n\" + innerBody + \"};\";\n var Record = new Function(outerArgs.join(), outerBody).apply(void 0, ds);\n if (plainRecords) {\n return Record;\n }\n var self = this;\n Record.getType = function() {\n return self;\n };\n Record.type = self;\n if (this._isError) {\n util.inherits(Record, Error);\n Record.prototype.name = this._getConstructorName();\n }\n Record.prototype.clone = function(o) {\n return self.clone(this, o);\n };\n Record.prototype.compare = function(v2) {\n return self.compare(this, v2);\n };\n Record.prototype.isValid = function(o) {\n return self.isValid(this, o);\n };\n Record.prototype.toBuffer = function() {\n return self.toBuffer(this);\n };\n Record.prototype.toString = function() {\n return self.toString(this);\n };\n Record.prototype.wrap = function() {\n return self.wrap(this);\n };\n Record.prototype.wrapped = Record.prototype.wrap;\n return Record;\n };\n RecordType.prototype._createChecker = function() {\n var names = [];\n var values = [];\n var name = this._getConstructorName();\n var body = \"return function check\" + name + \"(v, f, h, p) {\\n\";\n body += \" if (\\n\";\n body += \" v === null ||\\n\";\n body += \" typeof v != 'object' ||\\n\";\n body += \" (f && !this._checkFields(v))\\n\";\n body += \" ) {\\n\";\n body += \" if (h) { h(v, this); }\\n\";\n body += \" return false;\\n\";\n body += \" }\\n\";\n if (!this.fields.length) {\n body += \" return true;\\n\";\n } else {\n for (i = 0, l = this.fields.length; i < l; i++) {\n field = this.fields[i];\n names.push(\"t\" + i);\n values.push(field.type);\n if (field.defaultValue() !== void 0) {\n body += \" var v\" + i + \" = v.\" + field.name + \";\\n\";\n }\n }\n body += \" if (h) {\\n\";\n body += \" var b = 1;\\n\";\n body += \" var j = p.length;\\n\";\n body += \" p.push('');\\n\";\n var i, l, field;\n for (i = 0, l = this.fields.length; i < l; i++) {\n field = this.fields[i];\n body += \" p[j] = '\" + field.name + \"';\\n\";\n body += \" b &= \";\n if (field.defaultValue() === void 0) {\n body += \"t\" + i + \"._check(v.\" + field.name + \", f, h, p);\\n\";\n } else {\n body += \"v\" + i + \" === undefined || \";\n body += \"t\" + i + \"._check(v\" + i + \", f, h, p);\\n\";\n }\n }\n body += \" p.pop();\\n\";\n body += \" return !!b;\\n\";\n body += \" } else {\\n return (\\n \";\n body += this.fields.map(function(field2, i2) {\n return field2.defaultValue() === void 0 ? \"t\" + i2 + \"._check(v.\" + field2.name + \", f)\" : \"(v\" + i2 + \" === undefined || t\" + i2 + \"._check(v\" + i2 + \", f))\";\n }).join(\" &&\\n \");\n body += \"\\n );\\n }\\n\";\n }\n body += \"};\";\n return new Function(names.join(), body).apply(void 0, values);\n };\n RecordType.prototype._createReader = function() {\n var names = [];\n var values = [this.recordConstructor];\n var i, l;\n for (i = 0, l = this.fields.length; i < l; i++) {\n names.push(\"t\" + i);\n values.push(this.fields[i].type);\n }\n var name = this._getConstructorName();\n var body = \"return function read\" + name + \"(t) {\\n\";\n body += \" return new \" + name + \"(\\n \";\n body += names.map(function(s) {\n return s + \"._read(t)\";\n }).join(\",\\n \");\n body += \"\\n );\\n};\";\n names.unshift(name);\n return new Function(names.join(), body).apply(void 0, values);\n };\n RecordType.prototype._createSkipper = function() {\n var args = [];\n var body = \"return function skip\" + this._getConstructorName() + \"(t) {\\n\";\n var values = [];\n var i, l;\n for (i = 0, l = this.fields.length; i < l; i++) {\n args.push(\"t\" + i);\n values.push(this.fields[i].type);\n body += \" t\" + i + \"._skip(t);\\n\";\n }\n body += \"}\";\n return new Function(args.join(), body).apply(void 0, values);\n };\n RecordType.prototype._createWriter = function() {\n var args = [];\n var name = this._getConstructorName();\n var body = \"return function write\" + name + \"(t, v) {\\n\";\n var values = [];\n var i, l, field, value;\n for (i = 0, l = this.fields.length; i < l; i++) {\n field = this.fields[i];\n args.push(\"t\" + i);\n values.push(field.type);\n body += \" \";\n if (field.defaultValue() === void 0) {\n body += \"t\" + i + \"._write(t, v.\" + field.name + \");\\n\";\n } else {\n value = field.type.toBuffer(field.defaultValue()).toString(\"binary\");\n args.push(\"d\" + i);\n values.push(value);\n body += \"var v\" + i + \" = v.\" + field.name + \";\\n\";\n body += \"if (v\" + i + \" === undefined) {\\n\";\n body += \" t.writeBinary(d\" + i + \", \" + value.length + \");\\n\";\n body += \" } else {\\n t\" + i + \"._write(t, v\" + i + \");\\n }\\n\";\n }\n }\n body += \"}\";\n return new Function(args.join(), body).apply(void 0, values);\n };\n RecordType.prototype._update = function(resolver, type, opts) {\n if (!hasCompatibleName(this, type, !opts.ignoreNamespaces)) {\n throw new Error(f2(\"no alias found for %s\", type.name));\n }\n var rFields = this.fields;\n var wFields = type.fields;\n var wFieldsMap = utils.toMap(wFields, function(f3) {\n return f3.name;\n });\n var innerArgs = [];\n var resolvers = {};\n var i, j2, field, name, names, matches, fieldResolver;\n for (i = 0; i < rFields.length; i++) {\n field = rFields[i];\n names = getAliases(field);\n matches = [];\n for (j2 = 0; j2 < names.length; j2++) {\n name = names[j2];\n if (wFieldsMap[name]) {\n matches.push(name);\n }\n }\n if (matches.length > 1) {\n throw new Error(\n f2(\"ambiguous aliasing for %s.%s (%s)\", type.name, field.name, matches)\n );\n }\n if (!matches.length) {\n if (field.defaultValue() === void 0) {\n throw new Error(\n f2(\"no matching field for default-less %s.%s\", type.name, field.name)\n );\n }\n innerArgs.push(\"undefined\");\n } else {\n name = matches[0];\n fieldResolver = {\n resolver: field.type.createResolver(wFieldsMap[name].type, opts),\n name: \"_\" + field.name\n // Reader field name.\n };\n if (!resolvers[name]) {\n resolvers[name] = [fieldResolver];\n } else {\n resolvers[name].push(fieldResolver);\n }\n innerArgs.push(fieldResolver.name);\n }\n }\n var lazyIndex = -1;\n i = wFields.length;\n while (i && resolvers[wFields[--i].name] === void 0) {\n lazyIndex = i;\n }\n var uname = this._getConstructorName();\n var args = [uname];\n var values = [this.recordConstructor];\n var body = \" return function read\" + uname + \"(t, b) {\\n\";\n for (i = 0; i < wFields.length; i++) {\n if (i === lazyIndex) {\n body += \" if (!b) {\\n\";\n }\n field = type.fields[i];\n name = field.name;\n if (resolvers[name] === void 0) {\n body += ~lazyIndex && i >= lazyIndex ? \" \" : \" \";\n args.push(\"r\" + i);\n values.push(field.type);\n body += \"r\" + i + \"._skip(t);\\n\";\n } else {\n j2 = resolvers[name].length;\n while (j2--) {\n body += ~lazyIndex && i >= lazyIndex ? \" \" : \" \";\n args.push(\"r\" + i + \"f\" + j2);\n fieldResolver = resolvers[name][j2];\n values.push(fieldResolver.resolver);\n body += \"var \" + fieldResolver.name + \" = \";\n body += \"r\" + i + \"f\" + j2 + \"._\" + (j2 ? \"peek\" : \"read\") + \"(t);\\n\";\n }\n }\n }\n if (~lazyIndex) {\n body += \" }\\n\";\n }\n body += \" return new \" + uname + \"(\" + innerArgs.join() + \");\\n};\";\n resolver._read = new Function(args.join(), body).apply(void 0, values);\n };\n RecordType.prototype._match = function(tap1, tap2) {\n var fields = this.fields;\n var i, l, field, order, type;\n for (i = 0, l = fields.length; i < l; i++) {\n field = fields[i];\n order = field._order;\n type = field.type;\n if (order) {\n order *= type._match(tap1, tap2);\n if (order) {\n return order;\n }\n } else {\n type._skip(tap1);\n type._skip(tap2);\n }\n }\n return 0;\n };\n RecordType.prototype._checkFields = function(obj) {\n var keys = Object.keys(obj);\n var i, l;\n for (i = 0, l = keys.length; i < l; i++) {\n if (!this._fieldsByName[keys[i]]) {\n return false;\n }\n }\n return true;\n };\n RecordType.prototype._copy = function(val, opts) {\n var hook = opts && opts.fieldHook;\n var values = [void 0];\n var i, l, field, value;\n for (i = 0, l = this.fields.length; i < l; i++) {\n field = this.fields[i];\n value = val[field.name];\n if (value === void 0 && field.hasOwnProperty(\"defaultValue\")) {\n value = field.defaultValue();\n }\n if (opts && !opts.skip || value !== void 0) {\n value = field.type._copy(value, opts);\n }\n if (hook) {\n value = hook(field, value, this);\n }\n values.push(value);\n }\n var Record = this.recordConstructor;\n return new (Record.bind.apply(Record, values))();\n };\n RecordType.prototype._deref = function(schema, opts) {\n schema.fields = this.fields.map(function(field) {\n var fieldType = field.type;\n var fieldSchema = {\n name: field.name,\n type: fieldType._attrs(opts)\n };\n if (opts.exportAttrs) {\n var val = field.defaultValue();\n if (val !== void 0) {\n fieldSchema[\"default\"] = fieldType._copy(val, { coerce: 3, wrap: 3 });\n }\n var fieldOrder = field.order;\n if (fieldOrder !== \"ascending\") {\n fieldSchema.order = fieldOrder;\n }\n var fieldAliases = field.aliases;\n if (fieldAliases.length) {\n fieldSchema.aliases = fieldAliases;\n }\n var fieldDoc = field.doc;\n if (fieldDoc !== void 0) {\n fieldSchema.doc = fieldDoc;\n }\n }\n return fieldSchema;\n });\n };\n RecordType.prototype.compare = function(val1, val2) {\n var fields = this.fields;\n var i, l, field, name, order, type;\n for (i = 0, l = fields.length; i < l; i++) {\n field = fields[i];\n name = field.name;\n order = field._order;\n type = field.type;\n if (order) {\n order *= type.compare(val1[name], val2[name]);\n if (order) {\n return order;\n }\n }\n }\n return 0;\n };\n RecordType.prototype.random = function() {\n var fields = this.fields.map(function(f3) {\n return f3.type.random();\n });\n fields.unshift(void 0);\n var Record = this.recordConstructor;\n return new (Record.bind.apply(Record, fields))();\n };\n RecordType.prototype.field = function(name) {\n return this._fieldsByName[name];\n };\n RecordType.prototype.getField = RecordType.prototype.field;\n RecordType.prototype.getFields = function() {\n return this.fields;\n };\n RecordType.prototype.getRecordConstructor = function() {\n return this.recordConstructor;\n };\n Object.defineProperty(RecordType.prototype, \"typeName\", {\n enumerable: true,\n get: function() {\n return this._isError ? \"error\" : \"record\";\n }\n });\n function LogicalType(schema, opts) {\n this._logicalTypeName = schema.logicalType;\n Type.call(this);\n LOGICAL_TYPE = this;\n try {\n this._underlyingType = Type.forSchema(schema, opts);\n } finally {\n LOGICAL_TYPE = null;\n var l = UNDERLYING_TYPES.length;\n if (l && UNDERLYING_TYPES[l - 1][0] === this) {\n UNDERLYING_TYPES.pop();\n }\n }\n if (Type.isType(this.underlyingType, \"union\")) {\n this._branchConstructor = this.underlyingType._branchConstructor;\n } else {\n this._branchConstructor = this.underlyingType._createBranchConstructor();\n }\n }\n util.inherits(LogicalType, Type);\n Object.defineProperty(LogicalType.prototype, \"typeName\", {\n enumerable: true,\n get: function() {\n return \"logical:\" + this._logicalTypeName;\n }\n });\n Object.defineProperty(LogicalType.prototype, \"underlyingType\", {\n enumerable: true,\n get: function() {\n if (this._underlyingType) {\n return this._underlyingType;\n }\n var i, l, arr;\n for (i = 0, l = UNDERLYING_TYPES.length; i < l; i++) {\n arr = UNDERLYING_TYPES[i];\n if (arr[0] === this) {\n return arr[1];\n }\n }\n }\n });\n LogicalType.prototype.getUnderlyingType = function() {\n return this.underlyingType;\n };\n LogicalType.prototype._read = function(tap) {\n return this._fromValue(this.underlyingType._read(tap));\n };\n LogicalType.prototype._write = function(tap, any) {\n this.underlyingType._write(tap, this._toValue(any));\n };\n LogicalType.prototype._check = function(any, flags, hook, path) {\n try {\n var val = this._toValue(any);\n } catch (err) {\n }\n if (val === void 0) {\n if (hook) {\n hook(any, this);\n }\n return false;\n }\n return this.underlyingType._check(val, flags, hook, path);\n };\n LogicalType.prototype._copy = function(any, opts) {\n var type = this.underlyingType;\n switch (opts && opts.coerce) {\n case 3:\n return type._copy(this._toValue(any), opts);\n case 2:\n return this._fromValue(type._copy(any, opts));\n default:\n return this._fromValue(type._copy(this._toValue(any), opts));\n }\n };\n LogicalType.prototype._update = function(resolver, type, opts) {\n var _fromValue = this._resolve(type, opts);\n if (_fromValue) {\n resolver._read = function(tap) {\n return _fromValue(type._read(tap));\n };\n }\n };\n LogicalType.prototype.compare = function(obj1, obj2) {\n var val1 = this._toValue(obj1);\n var val2 = this._toValue(obj2);\n return this.underlyingType.compare(val1, val2);\n };\n LogicalType.prototype.random = function() {\n return this._fromValue(this.underlyingType.random());\n };\n LogicalType.prototype._deref = function(schema, opts) {\n var type = this.underlyingType;\n var isVisited = type.name !== void 0 && opts.derefed[type.name];\n schema = type._attrs(opts);\n if (!isVisited && opts.exportAttrs) {\n if (typeof schema == \"string\") {\n schema = { type: schema };\n }\n schema.logicalType = this._logicalTypeName;\n this._export(schema);\n }\n return schema;\n };\n LogicalType.prototype._skip = function(tap) {\n this.underlyingType._skip(tap);\n };\n LogicalType.prototype._export = function() {\n };\n LogicalType.prototype._fromValue = utils.abstractFunction;\n LogicalType.prototype._toValue = utils.abstractFunction;\n LogicalType.prototype._resolve = utils.abstractFunction;\n function AbstractLongType(noUnpack) {\n this._concreteTypeName = \"long\";\n PrimitiveType.call(this, true);\n this._noUnpack = !!noUnpack;\n }\n util.inherits(AbstractLongType, LongType);\n AbstractLongType.prototype.typeName = \"abstract:long\";\n AbstractLongType.prototype._check = function(val, flags, hook) {\n var b2 = this._isValid(val);\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n AbstractLongType.prototype._read = function(tap) {\n var buf, pos;\n if (this._noUnpack) {\n pos = tap.pos;\n tap.skipLong();\n buf = tap.buf.slice(pos, tap.pos);\n } else {\n buf = tap.unpackLongBytes(tap);\n }\n if (tap.isValid()) {\n return this._fromBuffer(buf);\n }\n };\n AbstractLongType.prototype._write = function(tap, val) {\n if (!this._isValid(val)) {\n throwInvalidError(val, this);\n }\n var buf = this._toBuffer(val);\n if (this._noUnpack) {\n tap.writeFixed(buf);\n } else {\n tap.packLongBytes(buf);\n }\n };\n AbstractLongType.prototype._copy = function(val, opts) {\n switch (opts && opts.coerce) {\n case 3:\n return this._toJSON(val);\n case 2:\n return this._fromJSON(val);\n default:\n return this._fromJSON(this._toJSON(val));\n }\n };\n AbstractLongType.prototype._deref = function() {\n return \"long\";\n };\n AbstractLongType.prototype._update = function(resolver, type) {\n var self = this;\n switch (type.typeName) {\n case \"int\":\n resolver._read = function(tap) {\n return self._fromJSON(type._read(tap));\n };\n break;\n case \"abstract:long\":\n case \"long\":\n resolver._read = function(tap) {\n return self._read(tap);\n };\n }\n };\n AbstractLongType.prototype.random = function() {\n return this._fromJSON(LongType.prototype.random());\n };\n AbstractLongType.prototype._fromBuffer = utils.abstractFunction;\n AbstractLongType.prototype._toBuffer = utils.abstractFunction;\n AbstractLongType.prototype._fromJSON = utils.abstractFunction;\n AbstractLongType.prototype._toJSON = utils.abstractFunction;\n AbstractLongType.prototype._isValid = utils.abstractFunction;\n AbstractLongType.prototype.compare = utils.abstractFunction;\n function Field(schema, opts) {\n var name = schema.name;\n if (typeof name != \"string\" || !utils.isValidName(name)) {\n throw new Error(f2(\"invalid field name: %s\", name));\n }\n this.name = name;\n this.type = Type.forSchema(schema.type, opts);\n this.aliases = schema.aliases || [];\n this.doc = schema.doc !== void 0 ? \"\" + schema.doc : void 0;\n this._order = function(order) {\n switch (order) {\n case \"ascending\":\n return 1;\n case \"descending\":\n return -1;\n case \"ignore\":\n return 0;\n default:\n throw new Error(f2(\"invalid order: %j\", order));\n }\n }(schema.order === void 0 ? \"ascending\" : schema.order);\n var value = schema[\"default\"];\n if (value !== void 0) {\n var type = this.type;\n var val;\n try {\n val = type._copy(value, { coerce: 2, wrap: 2 });\n } catch (err) {\n var msg = f2(\"incompatible field default %j (%s)\", value, err.message);\n if (Type.isType(type, \"union\")) {\n msg += f2(\n \", union defaults must match the first branch's type (%j)\",\n type.types[0]\n );\n }\n throw new Error(msg);\n }\n if (isPrimitive(type.typeName) && type.typeName !== \"bytes\") {\n this.defaultValue = function() {\n return val;\n };\n } else {\n this.defaultValue = function() {\n return type._copy(val);\n };\n }\n }\n Object.freeze(this);\n }\n Field.prototype.defaultValue = function() {\n };\n Object.defineProperty(Field.prototype, \"order\", {\n enumerable: true,\n get: function() {\n return [\"descending\", \"ignore\", \"ascending\"][this._order + 1];\n }\n });\n Field.prototype.getAliases = function() {\n return this.aliases;\n };\n Field.prototype.getDefault = Field.prototype.defaultValue;\n Field.prototype.getName = function() {\n return this.name;\n };\n Field.prototype.getOrder = function() {\n return this.order;\n };\n Field.prototype.getType = function() {\n return this.type;\n };\n function Resolver(readerType) {\n this._readerType = readerType;\n this._read = null;\n this.itemsType = null;\n this.size = 0;\n this.symbols = null;\n this.valuesType = null;\n }\n Resolver.prototype._peek = Type.prototype._peek;\n Resolver.prototype.inspect = function() {\n return \"\";\n };\n function Hash() {\n this.str = void 0;\n }\n function readValue(type, tap, resolver, lazy) {\n if (resolver) {\n if (resolver._readerType !== type) {\n throw new Error(\"invalid resolver\");\n }\n return resolver._read(tap, lazy);\n } else {\n return type._read(tap);\n }\n }\n function getAliases(obj) {\n var names = {};\n if (obj.name) {\n names[obj.name] = true;\n }\n var aliases = obj.aliases;\n var i, l;\n for (i = 0, l = aliases.length; i < l; i++) {\n names[aliases[i]] = true;\n }\n return Object.keys(names);\n }\n function hasCompatibleName(reader, writer, strict) {\n if (!writer.name) {\n return true;\n }\n var name = strict ? writer.name : utils.unqualify(writer.name);\n var aliases = getAliases(reader);\n var i, l, alias;\n for (i = 0, l = aliases.length; i < l; i++) {\n alias = aliases[i];\n if (!strict) {\n alias = utils.unqualify(alias);\n }\n if (alias === name) {\n return true;\n }\n }\n return false;\n }\n function isPrimitive(typeName) {\n var type = TYPES[typeName];\n return type && type.prototype instanceof PrimitiveType;\n }\n function getClassName(typeName) {\n if (typeName === \"error\") {\n typeName = \"record\";\n } else {\n var match = /^([^:]+):(.*)$/.exec(typeName);\n if (match) {\n if (match[1] === \"union\") {\n typeName = match[2] + \"Union\";\n } else {\n typeName = match[1];\n }\n }\n }\n return utils.capitalize(typeName) + \"Type\";\n }\n function readArraySize(tap) {\n var n = tap.readLong();\n if (n < 0) {\n n = -n;\n tap.skipLong();\n }\n return n;\n }\n function isSafeLong(n) {\n return n >= -9007199254740990 && n <= 9007199254740990;\n }\n function isJsonBuffer(obj) {\n return obj && obj.type === \"Buffer\" && Array.isArray(obj.data);\n }\n function throwInvalidError(val, type) {\n throw new Error(f2(\"invalid %j: %j\", type.schema(), val));\n }\n function maybeQualify(name, ns) {\n var unqualified = utils.unqualify(name);\n return isPrimitive(unqualified) ? unqualified : utils.qualify(name, ns);\n }\n function getTypeBucket(type) {\n var typeName = type.typeName;\n switch (typeName) {\n case \"double\":\n case \"float\":\n case \"int\":\n case \"long\":\n return \"number\";\n case \"bytes\":\n case \"fixed\":\n return \"buffer\";\n case \"enum\":\n return \"string\";\n case \"map\":\n case \"error\":\n case \"record\":\n return \"object\";\n default:\n return typeName;\n }\n }\n function getValueBucket(val) {\n if (val === null) {\n return \"null\";\n }\n var bucket = typeof val;\n if (bucket === \"object\") {\n if (Array.isArray(val)) {\n return \"array\";\n } else if (Buffer2.isBuffer(val)) {\n return \"buffer\";\n }\n }\n return bucket;\n }\n function isAmbiguous(types) {\n var buckets = {};\n var i, l, bucket, type;\n for (i = 0, l = types.length; i < l; i++) {\n type = types[i];\n if (!Type.isType(type, \"logical\")) {\n bucket = getTypeBucket(type);\n if (buckets[bucket]) {\n return true;\n }\n buckets[bucket] = true;\n }\n }\n return false;\n }\n function combineNumbers(types) {\n var typeNames = [\"int\", \"long\", \"float\", \"double\"];\n var superIndex = -1;\n var superType = null;\n var i, l, type, index;\n for (i = 0, l = types.length; i < l; i++) {\n type = types[i];\n index = typeNames.indexOf(type.typeName);\n if (index > superIndex) {\n superIndex = index;\n superType = type;\n }\n }\n return superType;\n }\n function combineStrings(types, opts) {\n var symbols = {};\n var i, l, type, typeSymbols;\n for (i = 0, l = types.length; i < l; i++) {\n type = types[i];\n if (type.typeName === \"string\") {\n return type;\n }\n typeSymbols = type.symbols;\n var j2, m2;\n for (j2 = 0, m2 = typeSymbols.length; j2 < m2; j2++) {\n symbols[typeSymbols[j2]] = true;\n }\n }\n return Type.forSchema({ type: \"enum\", symbols: Object.keys(symbols) }, opts);\n }\n function combineBuffers(types, opts) {\n var size = -1;\n var i, l, type;\n for (i = 0, l = types.length; i < l; i++) {\n type = types[i];\n if (type.typeName === \"bytes\") {\n return type;\n }\n if (size === -1) {\n size = type.size;\n } else if (type.size !== size) {\n size = -2;\n }\n }\n return size < 0 ? Type.forSchema(\"bytes\", opts) : types[0];\n }\n function combineObjects(types, opts) {\n var allTypes = [];\n var fieldTypes = {};\n var fieldDefaults = {};\n var isValidRecord = true;\n var i, l, type, fields;\n for (i = 0, l = types.length; i < l; i++) {\n type = types[i];\n if (type.typeName === \"map\") {\n isValidRecord = false;\n allTypes.push(type.valuesType);\n } else {\n fields = type.fields;\n var j2, m2, field, fieldDefault, fieldName, fieldType;\n for (j2 = 0, m2 = fields.length; j2 < m2; j2++) {\n field = fields[j2];\n fieldName = field.name;\n fieldType = field.type;\n allTypes.push(fieldType);\n if (isValidRecord) {\n if (!fieldTypes[fieldName]) {\n fieldTypes[fieldName] = [];\n }\n fieldTypes[fieldName].push(fieldType);\n fieldDefault = field.defaultValue();\n if (fieldDefault !== void 0) {\n fieldDefaults[fieldName] = fieldDefault;\n }\n }\n }\n }\n }\n if (isValidRecord) {\n var fieldNames = Object.keys(fieldTypes);\n for (i = 0, l = fieldNames.length; i < l; i++) {\n fieldName = fieldNames[i];\n if (fieldTypes[fieldName].length < types.length && fieldDefaults[fieldName] === void 0) {\n if (opts && opts.strictDefaults) {\n isValidRecord = false;\n } else {\n fieldTypes[fieldName].unshift(Type.forSchema(\"null\", opts));\n fieldDefaults[fieldName] = null;\n }\n }\n }\n }\n var schema;\n if (isValidRecord) {\n schema = {\n type: \"record\",\n fields: fieldNames.map(function(s) {\n var fieldType2 = Type.forTypes(fieldTypes[s], opts);\n var fieldDefault2 = fieldDefaults[s];\n if (fieldDefault2 !== void 0 && ~fieldType2.typeName.indexOf(\"union\")) {\n var unionTypes = fieldType2.types.slice();\n var i2, l2;\n for (i2 = 0, l2 = unionTypes.length; i2 < l2; i2++) {\n if (unionTypes[i2].isValid(fieldDefault2)) {\n break;\n }\n }\n if (i2 > 0) {\n var unionType = unionTypes[0];\n unionTypes[0] = unionTypes[i2];\n unionTypes[i2] = unionType;\n fieldType2 = Type.forSchema(unionTypes, opts);\n }\n }\n return {\n name: s,\n type: fieldType2,\n \"default\": fieldDefaults[s]\n };\n })\n };\n } else {\n schema = {\n type: \"map\",\n values: Type.forTypes(allTypes, opts)\n };\n }\n return Type.forSchema(schema, opts);\n }\n module.exports = {\n Type,\n getTypeBucket,\n getValueBucket,\n isPrimitive,\n builtins: function() {\n var types = {\n LogicalType,\n UnwrappedUnionType,\n WrappedUnionType\n };\n var typeNames = Object.keys(TYPES);\n var i, l, typeName;\n for (i = 0, l = typeNames.length; i < l; i++) {\n typeName = typeNames[i];\n types[getClassName(typeName)] = TYPES[typeName];\n }\n return types;\n }()\n };\n }\n});\n\n// node_modules/avsc/lib/containers.js\nvar require_containers = __commonJS({\n \"node_modules/avsc/lib/containers.js\"(exports, module) {\n \"use strict\";\n var types = require_types();\n var utils = require_utils();\n var buffer = __import_BUFFER;\n var stream = __import_STREAM;\n var util = __import_UTIL;\n var zlib = __import_ZLIB;\n var Buffer2 = buffer.Buffer;\n var OPTS = { namespace: \"org.apache.avro.file\" };\n var LONG_TYPE = types.Type.forSchema(\"long\", OPTS);\n var MAP_BYTES_TYPE = types.Type.forSchema({ type: \"map\", values: \"bytes\" }, OPTS);\n var HEADER_TYPE = types.Type.forSchema({\n name: \"Header\",\n type: \"record\",\n fields: [\n { name: \"magic\", type: { type: \"fixed\", name: \"Magic\", size: 4 } },\n { name: \"meta\", type: MAP_BYTES_TYPE },\n { name: \"sync\", type: { type: \"fixed\", name: \"Sync\", size: 16 } }\n ]\n }, OPTS);\n var BLOCK_TYPE = types.Type.forSchema({\n name: \"Block\",\n type: \"record\",\n fields: [\n { name: \"count\", type: \"long\" },\n { name: \"data\", type: \"bytes\" },\n { name: \"sync\", type: \"Sync\" }\n ]\n }, OPTS);\n var MAGIC_BYTES = utils.bufferFrom(\"Obj\u0001\");\n var f2 = util.format;\n var Tap = utils.Tap;\n function RawDecoder(schema, opts) {\n opts = opts || {};\n var noDecode = !!opts.noDecode;\n stream.Duplex.call(this, {\n readableObjectMode: !noDecode,\n allowHalfOpen: false\n });\n this._type = types.Type.forSchema(schema);\n this._tap = new Tap(utils.newBuffer(0));\n this._writeCb = null;\n this._needPush = false;\n this._readValue = createReader(noDecode, this._type);\n this._finished = false;\n this.on(\"finish\", function() {\n this._finished = true;\n this._read();\n });\n }\n util.inherits(RawDecoder, stream.Duplex);\n RawDecoder.prototype._write = function(chunk, encoding, cb) {\n this._writeCb = cb;\n var tap = this._tap;\n tap.buf = Buffer2.concat([tap.buf.slice(tap.pos), chunk]);\n tap.pos = 0;\n if (this._needPush) {\n this._needPush = false;\n this._read();\n }\n };\n RawDecoder.prototype._read = function() {\n this._needPush = false;\n var tap = this._tap;\n var pos = tap.pos;\n var val = this._readValue(tap);\n if (tap.isValid()) {\n this.push(val);\n } else if (!this._finished) {\n tap.pos = pos;\n this._needPush = true;\n if (this._writeCb) {\n this._writeCb();\n }\n } else {\n this.push(null);\n }\n };\n function BlockDecoder(opts) {\n opts = opts || {};\n var noDecode = !!opts.noDecode;\n stream.Duplex.call(this, {\n allowHalfOpen: true,\n // For async decompressors.\n readableObjectMode: !noDecode\n });\n this._rType = opts.readerSchema !== void 0 ? types.Type.forSchema(opts.readerSchema) : void 0;\n this._wType = null;\n this._codecs = opts.codecs;\n this._codec = void 0;\n this._parseHook = opts.parseHook;\n this._tap = new Tap(utils.newBuffer(0));\n this._blockTap = new Tap(utils.newBuffer(0));\n this._syncMarker = null;\n this._readValue = null;\n this._noDecode = noDecode;\n this._queue = new utils.OrderedQueue();\n this._decompress = null;\n this._index = 0;\n this._remaining = void 0;\n this._needPush = false;\n this._finished = false;\n this.on(\"finish\", function() {\n this._finished = true;\n if (this._needPush) {\n this._read();\n }\n });\n }\n util.inherits(BlockDecoder, stream.Duplex);\n BlockDecoder.defaultCodecs = function() {\n return {\n \"null\": function(buf, cb) {\n cb(null, buf);\n },\n \"deflate\": zlib.inflateRaw\n };\n };\n BlockDecoder.getDefaultCodecs = BlockDecoder.defaultCodecs;\n BlockDecoder.prototype._decodeHeader = function() {\n var tap = this._tap;\n if (tap.buf.length < MAGIC_BYTES.length) {\n return false;\n }\n if (!MAGIC_BYTES.equals(tap.buf.slice(0, MAGIC_BYTES.length))) {\n this.emit(\"error\", new Error(\"invalid magic bytes\"));\n return false;\n }\n var header = HEADER_TYPE._read(tap);\n if (!tap.isValid()) {\n return false;\n }\n this._codec = (header.meta[\"avro.codec\"] || \"null\").toString();\n var codecs = this._codecs || BlockDecoder.getDefaultCodecs();\n this._decompress = codecs[this._codec];\n if (!this._decompress) {\n this.emit(\"error\", new Error(f2(\"unknown codec: %s\", this._codec)));\n return;\n }\n try {\n var schema = JSON.parse(header.meta[\"avro.schema\"].toString());\n if (this._parseHook) {\n schema = this._parseHook(schema);\n }\n this._wType = types.Type.forSchema(schema);\n } catch (err) {\n this.emit(\"error\", err);\n return;\n }\n try {\n this._readValue = createReader(this._noDecode, this._wType, this._rType);\n } catch (err) {\n this.emit(\"error\", err);\n return;\n }\n this._syncMarker = header.sync;\n this.emit(\"metadata\", this._wType, this._codec, header);\n return true;\n };\n BlockDecoder.prototype._write = function(chunk, encoding, cb) {\n var tap = this._tap;\n tap.buf = Buffer2.concat([tap.buf, chunk]);\n tap.pos = 0;\n if (!this._decodeHeader()) {\n process.nextTick(cb);\n return;\n }\n this._write = this._writeChunk;\n this._write(utils.newBuffer(0), encoding, cb);\n };\n BlockDecoder.prototype._writeChunk = function(chunk, encoding, cb) {\n var tap = this._tap;\n tap.buf = Buffer2.concat([tap.buf.slice(tap.pos), chunk]);\n tap.pos = 0;\n var nBlocks = 1;\n var block;\n while (block = tryReadBlock(tap)) {\n if (!this._syncMarker.equals(block.sync)) {\n this.emit(\"error\", new Error(\"invalid sync marker\"));\n return;\n }\n nBlocks++;\n this._decompress(\n block.data,\n this._createBlockCallback(block.data.length, block.count, chunkCb)\n );\n }\n chunkCb();\n function chunkCb() {\n if (!--nBlocks) {\n cb();\n }\n }\n };\n BlockDecoder.prototype._createBlockCallback = function(size, count, cb) {\n var self = this;\n var index = this._index++;\n return function(cause, data) {\n if (cause) {\n var err = new Error(f2(\"%s codec decompression error\", self._codec));\n err.cause = cause;\n self.emit(\"error\", err);\n cb();\n } else {\n self.emit(\"block\", new BlockInfo(count, data.length, size));\n self._queue.push(new BlockData(index, data, cb, count));\n if (self._needPush) {\n self._read();\n }\n }\n };\n };\n BlockDecoder.prototype._read = function() {\n this._needPush = false;\n var tap = this._blockTap;\n if (!this._remaining) {\n var data = this._queue.pop();\n if (!data || !data.count) {\n if (this._finished) {\n this.push(null);\n } else {\n this._needPush = true;\n }\n if (data) {\n data.cb();\n }\n return;\n }\n data.cb();\n this._remaining = data.count;\n tap.buf = data.buf;\n tap.pos = 0;\n }\n this._remaining--;\n var val;\n try {\n val = this._readValue(tap);\n if (!tap.isValid()) {\n throw new Error(\"truncated block\");\n }\n } catch (err) {\n this._remaining = 0;\n this.emit(\"error\", err);\n return;\n }\n this.push(val);\n };\n function RawEncoder(schema, opts) {\n opts = opts || {};\n stream.Transform.call(this, {\n writableObjectMode: true,\n allowHalfOpen: false\n });\n this._type = types.Type.forSchema(schema);\n this._writeValue = function(tap, val) {\n try {\n this._type._write(tap, val);\n } catch (err) {\n this.emit(\"typeError\", err, val, this._type);\n }\n };\n this._tap = new Tap(utils.newBuffer(opts.batchSize || 65536));\n this.on(\"typeError\", function(err) {\n this.emit(\"error\", err);\n });\n }\n util.inherits(RawEncoder, stream.Transform);\n RawEncoder.prototype._transform = function(val, encoding, cb) {\n var tap = this._tap;\n var buf = tap.buf;\n var pos = tap.pos;\n this._writeValue(tap, val);\n if (!tap.isValid()) {\n if (pos) {\n this.push(copyBuffer(tap.buf, 0, pos));\n }\n var len = tap.pos - pos;\n if (len > buf.length) {\n tap.buf = utils.newBuffer(2 * len);\n }\n tap.pos = 0;\n this._writeValue(tap, val);\n }\n cb();\n };\n RawEncoder.prototype._flush = function(cb) {\n var tap = this._tap;\n var pos = tap.pos;\n if (pos) {\n this.push(tap.buf.slice(0, pos));\n }\n cb();\n };\n function BlockEncoder(schema, opts) {\n opts = opts || {};\n stream.Duplex.call(this, {\n allowHalfOpen: true,\n // To support async compressors.\n writableObjectMode: true\n });\n var type;\n if (types.Type.isType(schema)) {\n type = schema;\n schema = void 0;\n } else {\n type = types.Type.forSchema(schema);\n }\n this._schema = schema;\n this._type = type;\n this._writeValue = function(tap, val) {\n try {\n this._type._write(tap, val);\n } catch (err) {\n this.emit(\"typeError\", err, val, this._type);\n return false;\n }\n return true;\n };\n this._blockSize = opts.blockSize || 65536;\n this._tap = new Tap(utils.newBuffer(this._blockSize));\n this._codecs = opts.codecs;\n this._codec = opts.codec || \"null\";\n this._blockCount = 0;\n this._syncMarker = opts.syncMarker || new utils.Lcg().nextBuffer(16);\n this._queue = new utils.OrderedQueue();\n this._pending = 0;\n this._finished = false;\n this._needHeader = false;\n this._needPush = false;\n this._metadata = opts.metadata || {};\n if (!MAP_BYTES_TYPE.isValid(this._metadata)) {\n throw new Error(\"invalid metadata\");\n }\n var codec = this._codec;\n this._compress = (this._codecs || BlockEncoder.getDefaultCodecs())[codec];\n if (!this._compress) {\n throw new Error(f2(\"unsupported codec: %s\", codec));\n }\n if (opts.omitHeader !== void 0) {\n opts.writeHeader = opts.omitHeader ? \"never\" : \"auto\";\n }\n switch (opts.writeHeader) {\n case false:\n case \"never\":\n break;\n case void 0:\n case \"auto\":\n this._needHeader = true;\n break;\n default:\n this._writeHeader();\n }\n this.on(\"finish\", function() {\n this._finished = true;\n if (this._blockCount) {\n this._flushChunk();\n } else if (this._finished && this._needPush) {\n this.push(null);\n }\n });\n this.on(\"typeError\", function(err) {\n this.emit(\"error\", err);\n });\n }\n util.inherits(BlockEncoder, stream.Duplex);\n BlockEncoder.defaultCodecs = function() {\n return {\n \"null\": function(buf, cb) {\n cb(null, buf);\n },\n \"deflate\": zlib.deflateRaw\n };\n };\n BlockEncoder.getDefaultCodecs = BlockEncoder.defaultCodecs;\n BlockEncoder.prototype._writeHeader = function() {\n var schema = JSON.stringify(\n this._schema ? this._schema : this._type.getSchema({ exportAttrs: true })\n );\n var meta = utils.copyOwnProperties(\n this._metadata,\n { \"avro.schema\": utils.bufferFrom(schema), \"avro.codec\": utils.bufferFrom(this._codec) },\n true\n // Overwrite.\n );\n var Header = HEADER_TYPE.getRecordConstructor();\n var header = new Header(MAGIC_BYTES, meta, this._syncMarker);\n this.push(header.toBuffer());\n };\n BlockEncoder.prototype._write = function(val, encoding, cb) {\n if (this._needHeader) {\n this._writeHeader();\n this._needHeader = false;\n }\n var tap = this._tap;\n var pos = tap.pos;\n var flushing = false;\n if (this._writeValue(tap, val)) {\n if (!tap.isValid()) {\n if (pos) {\n this._flushChunk(pos, cb);\n flushing = true;\n }\n var len = tap.pos - pos;\n if (len > this._blockSize) {\n this._blockSize = len * 2;\n }\n tap.buf = utils.newBuffer(this._blockSize);\n tap.pos = 0;\n this._writeValue(tap, val);\n }\n this._blockCount++;\n } else {\n tap.pos = pos;\n }\n if (!flushing) {\n cb();\n }\n };\n BlockEncoder.prototype._flushChunk = function(pos, cb) {\n var tap = this._tap;\n pos = pos || tap.pos;\n this._compress(tap.buf.slice(0, pos), this._createBlockCallback(pos, cb));\n this._blockCount = 0;\n };\n BlockEncoder.prototype._read = function() {\n var self = this;\n var data = this._queue.pop();\n if (!data) {\n if (this._finished && !this._pending) {\n process.nextTick(function() {\n self.push(null);\n });\n } else {\n this._needPush = true;\n }\n return;\n }\n this.push(LONG_TYPE.toBuffer(data.count, true));\n this.push(LONG_TYPE.toBuffer(data.buf.length, true));\n this.push(data.buf);\n this.push(this._syncMarker);\n if (!this._finished) {\n data.cb();\n }\n };\n BlockEncoder.prototype._createBlockCallback = function(size, cb) {\n var self = this;\n var index = this._index++;\n var count = this._blockCount;\n this._pending++;\n return function(cause, data) {\n if (cause) {\n var err = new Error(f2(\"%s codec compression error\", self._codec));\n err.cause = cause;\n self.emit(\"error\", err);\n return;\n }\n self._pending--;\n self.emit(\"block\", new BlockInfo(count, size, data.length));\n self._queue.push(new BlockData(index, data, cb, count));\n if (self._needPush) {\n self._needPush = false;\n self._read();\n }\n };\n };\n function BlockInfo(count, raw, compressed) {\n this.valueCount = count;\n this.rawDataLength = raw;\n this.compressedDataLength = compressed;\n }\n function BlockData(index, buf, cb, count) {\n this.index = index;\n this.buf = buf;\n this.cb = cb;\n this.count = count | 0;\n }\n function tryReadBlock(tap) {\n var pos = tap.pos;\n var block = BLOCK_TYPE._read(tap);\n if (!tap.isValid()) {\n tap.pos = pos;\n return null;\n }\n return block;\n }\n function createReader(noDecode, writerType, readerType) {\n if (noDecode) {\n return /* @__PURE__ */ function(skipper) {\n return function(tap) {\n var pos = tap.pos;\n skipper(tap);\n return tap.buf.slice(pos, tap.pos);\n };\n }(writerType._skip);\n } else if (readerType) {\n var resolver = readerType.createResolver(writerType);\n return function(tap) {\n return resolver._read(tap);\n };\n } else {\n return function(tap) {\n return writerType._read(tap);\n };\n }\n }\n function copyBuffer(buf, pos, len) {\n var copy = utils.newBuffer(len);\n buf.copy(copy, 0, pos, pos + len);\n return copy;\n }\n module.exports = {\n BLOCK_TYPE,\n // For tests.\n HEADER_TYPE,\n // Idem.\n MAGIC_BYTES,\n // Idem.\n streams: {\n BlockDecoder,\n BlockEncoder,\n RawDecoder,\n RawEncoder\n }\n };\n }\n});\n\n// node_modules/avsc/lib/services.js\nvar require_services = __commonJS({\n \"node_modules/avsc/lib/services.js\"(exports, module) {\n \"use strict\";\n var types = require_types();\n var utils = require_utils();\n var buffer = __import_BUFFER;\n var events = __import_EVENTS;\n var stream = __import_STREAM;\n var util = __import_UTIL;\n var Buffer2 = buffer.Buffer;\n var Tap = utils.Tap;\n var Type = types.Type;\n var debug = util.debuglog(\"avsc:services\");\n var f2 = util.format;\n var OPTS = { namespace: \"org.apache.avro.ipc\" };\n var BOOLEAN_TYPE = Type.forSchema(\"boolean\", OPTS);\n var MAP_BYTES_TYPE = Type.forSchema({ type: \"map\", values: \"bytes\" }, OPTS);\n var STRING_TYPE = Type.forSchema(\"string\", OPTS);\n var HANDSHAKE_REQUEST_TYPE = Type.forSchema({\n name: \"HandshakeRequest\",\n type: \"record\",\n fields: [\n { name: \"clientHash\", type: { name: \"MD5\", type: \"fixed\", size: 16 } },\n { name: \"clientProtocol\", type: [\"null\", \"string\"], \"default\": null },\n { name: \"serverHash\", type: \"MD5\" },\n { name: \"meta\", type: [\"null\", MAP_BYTES_TYPE], \"default\": null }\n ]\n }, OPTS);\n var HANDSHAKE_RESPONSE_TYPE = Type.forSchema({\n name: \"HandshakeResponse\",\n type: \"record\",\n fields: [\n {\n name: \"match\",\n type: {\n name: \"HandshakeMatch\",\n type: \"enum\",\n symbols: [\"BOTH\", \"CLIENT\", \"NONE\"]\n }\n },\n { name: \"serverProtocol\", type: [\"null\", \"string\"], \"default\": null },\n { name: \"serverHash\", type: [\"null\", \"MD5\"], \"default\": null },\n { name: \"meta\", type: [\"null\", MAP_BYTES_TYPE], \"default\": null }\n ]\n }, OPTS);\n var PREFIX_LENGTH = 16;\n var PING_MESSAGE = new Message(\n \"\",\n // Empty name (invalid for other \"normal\" messages).\n Type.forSchema({ name: \"PingRequest\", type: \"record\", fields: [] }, OPTS),\n Type.forSchema([\"string\"], OPTS),\n Type.forSchema(\"null\", OPTS)\n );\n function Message(name, reqType, errType, resType, oneWay, doc) {\n this.name = name;\n if (!Type.isType(reqType, \"record\")) {\n throw new Error(\"invalid request type\");\n }\n this.requestType = reqType;\n if (!Type.isType(errType, \"union\") || !Type.isType(errType.getTypes()[0], \"string\")) {\n throw new Error(\"invalid error type\");\n }\n this.errorType = errType;\n if (oneWay) {\n if (!Type.isType(resType, \"null\") || errType.getTypes().length > 1) {\n throw new Error(\"inapplicable one-way parameter\");\n }\n }\n this.responseType = resType;\n this.oneWay = !!oneWay;\n this.doc = doc !== void 0 ? \"\" + doc : void 0;\n Object.freeze(this);\n }\n Message.forSchema = function(name, schema, opts) {\n opts = opts || {};\n if (!utils.isValidName(name)) {\n throw new Error(f2(\"invalid message name: %s\", name));\n }\n if (!Array.isArray(schema.request)) {\n throw new Error(f2(\"invalid message request: %s\", name));\n }\n var recordName = f2(\"%s.%sRequest\", OPTS.namespace, utils.capitalize(name));\n var reqType = Type.forSchema({\n name: recordName,\n type: \"record\",\n namespace: opts.namespace || \"\",\n // Don't leak request namespace.\n fields: schema.request\n }, opts);\n delete opts.registry[recordName];\n if (!schema.response) {\n throw new Error(f2(\"invalid message response: %s\", name));\n }\n var resType = Type.forSchema(schema.response, opts);\n if (schema.errors !== void 0 && !Array.isArray(schema.errors)) {\n throw new Error(f2(\"invalid message errors: %s\", name));\n }\n var errType = Type.forSchema([\"string\"].concat(schema.errors || []), opts);\n var oneWay = !!schema[\"one-way\"];\n return new Message(name, reqType, errType, resType, oneWay, schema.doc);\n };\n Message.prototype.schema = Type.prototype.getSchema;\n Message.prototype._attrs = function(opts) {\n var reqSchema = this.requestType._attrs(opts);\n var schema = {\n request: reqSchema.fields,\n response: this.responseType._attrs(opts)\n };\n var msgDoc = this.doc;\n if (msgDoc !== void 0) {\n schema.doc = msgDoc;\n }\n var errSchema = this.errorType._attrs(opts);\n if (errSchema.length > 1) {\n schema.errors = errSchema.slice(1);\n }\n if (this.oneWay) {\n schema[\"one-way\"] = true;\n }\n return schema;\n };\n utils.addDeprecatedGetters(\n Message,\n [\"name\", \"errorType\", \"requestType\", \"responseType\"]\n );\n Message.prototype.isOneWay = util.deprecate(\n function() {\n return this.oneWay;\n },\n \"use `.oneWay` directly instead of `.isOneWay()`\"\n );\n function Service(name, messages, types2, ptcl, server) {\n if (typeof name != \"string\") {\n return Service.forProtocol(name, messages);\n }\n this.name = name;\n this._messagesByName = messages || {};\n this.messages = Object.freeze(utils.objectValues(this._messagesByName));\n this._typesByName = types2 || {};\n this.types = Object.freeze(utils.objectValues(this._typesByName));\n this.protocol = ptcl;\n this._hashStr = utils.getHash(JSON.stringify(ptcl)).toString(\"binary\");\n this.doc = ptcl.doc ? \"\" + ptcl.doc : void 0;\n this._server = server || this.createServer({ silent: true });\n Object.freeze(this);\n }\n Service.Client = Client;\n Service.Server = Server;\n Service.compatible = function(clientSvc, serverSvc) {\n try {\n createReaders(clientSvc, serverSvc);\n } catch (err) {\n return false;\n }\n return true;\n };\n Service.forProtocol = function(ptcl, opts) {\n opts = opts || {};\n var name = ptcl.protocol;\n if (!name) {\n throw new Error(\"missing protocol name\");\n }\n if (ptcl.namespace !== void 0) {\n opts.namespace = ptcl.namespace;\n } else {\n var match = /^(.*)\\.[^.]+$/.exec(name);\n if (match) {\n opts.namespace = match[1];\n }\n }\n name = utils.qualify(name, opts.namespace);\n if (ptcl.types) {\n ptcl.types.forEach(function(obj) {\n Type.forSchema(obj, opts);\n });\n }\n var msgs;\n if (ptcl.messages) {\n msgs = {};\n Object.keys(ptcl.messages).forEach(function(key) {\n msgs[key] = Message.forSchema(key, ptcl.messages[key], opts);\n });\n }\n return new Service(name, msgs, opts.registry, ptcl);\n };\n Service.isService = function(any) {\n return !!any && any.hasOwnProperty(\"_hashStr\");\n };\n Service.prototype.createClient = function(opts) {\n var client = new Client(this, opts);\n process.nextTick(function() {\n if (opts && opts.server) {\n var obj = { objectMode: true };\n var pts = [new stream.PassThrough(obj), new stream.PassThrough(obj)];\n opts.server.createChannel({ readable: pts[0], writable: pts[1] }, obj);\n client.createChannel({ readable: pts[1], writable: pts[0] }, obj);\n } else if (opts && opts.transport) {\n client.createChannel(opts.transport);\n }\n });\n return client;\n };\n Service.prototype.createServer = function(opts) {\n return new Server(this, opts);\n };\n Object.defineProperty(Service.prototype, \"hash\", {\n enumerable: true,\n get: function() {\n return utils.bufferFrom(this._hashStr, \"binary\");\n }\n });\n Service.prototype.message = function(name) {\n return this._messagesByName[name];\n };\n Service.prototype.type = function(name) {\n return this._typesByName[name];\n };\n Service.prototype.inspect = function() {\n return f2(\"\", this.name);\n };\n utils.addDeprecatedGetters(\n Service,\n [\"message\", \"messages\", \"name\", \"type\", \"types\"]\n );\n Service.prototype.createEmitter = util.deprecate(\n function(transport, opts) {\n opts = opts || {};\n var client = this.createClient({\n cache: opts.cache,\n buffering: false,\n strictTypes: opts.strictErrors,\n timeout: opts.timeout\n });\n var channel = client.createChannel(transport, opts);\n forwardErrors(client, channel);\n return channel;\n },\n \"use `.createClient()` instead of `.createEmitter()`\"\n );\n Service.prototype.createListener = util.deprecate(\n function(transport, opts) {\n if (opts && opts.strictErrors) {\n throw new Error(\"use `.createServer()` to support strict errors\");\n }\n return this._server.createChannel(transport, opts);\n },\n \"use `.createServer().createChannel()` instead of `.createListener()`\"\n );\n Service.prototype.emit = util.deprecate(\n function(name, req, channel, cb) {\n if (!channel || !this.equals(channel.client._svc$)) {\n throw new Error(\"invalid emitter\");\n }\n var client = channel.client;\n Client.prototype.emitMessage.call(client, name, req, cb && cb.bind(this));\n return channel.getPending();\n },\n \"create a client via `.createClient()` to emit messages instead of `.emit()`\"\n );\n Service.prototype.equals = util.deprecate(\n function(any) {\n return Service.isService(any) && this.getFingerprint().equals(any.getFingerprint());\n },\n \"equality testing is deprecated, compare the `.protocol`s instead\"\n );\n Service.prototype.getFingerprint = util.deprecate(\n function(algorithm) {\n return utils.getHash(JSON.stringify(this.protocol), algorithm);\n },\n \"use `.hash` instead of `.getFingerprint()`\"\n );\n Service.prototype.getSchema = util.deprecate(\n Type.prototype.getSchema,\n \"use `.protocol` instead of `.getSchema()`\"\n );\n Service.prototype.on = util.deprecate(\n function(name, handler) {\n var self = this;\n this._server.onMessage(name, function(req, cb) {\n return handler.call(self, req, this.channel, cb);\n });\n return this;\n },\n \"use `.createServer().onMessage()` instead of `.on()`\"\n );\n Service.prototype.subprotocol = util.deprecate(\n function() {\n var parent = this._server;\n var opts = { strictTypes: parent._strict, cache: parent._cache };\n var server = new Server(parent.service, opts);\n server._handlers = Object.create(parent._handlers);\n return new Service(\n this.name,\n this._messagesByName,\n this._typesByName,\n this.protocol,\n server\n );\n },\n \"`.subprotocol()` will be removed in 5.1\"\n );\n Service.prototype._attrs = function(opts) {\n var ptcl = { protocol: this.name };\n var types2 = [];\n this.types.forEach(function(t) {\n if (t.getName() === void 0) {\n return;\n }\n var typeSchema = t._attrs(opts);\n if (typeof typeSchema != \"string\") {\n types2.push(typeSchema);\n }\n });\n if (types2.length) {\n ptcl.types = types2;\n }\n var msgNames = Object.keys(this._messagesByName);\n if (msgNames.length) {\n ptcl.messages = {};\n msgNames.forEach(function(name) {\n ptcl.messages[name] = this._messagesByName[name]._attrs(opts);\n }, this);\n }\n if (opts && opts.exportAttrs && this.doc !== void 0) {\n ptcl.doc = this.doc;\n }\n return ptcl;\n };\n function discoverProtocol(transport, opts, cb) {\n if (cb === void 0 && typeof opts == \"function\") {\n cb = opts;\n opts = void 0;\n }\n var svc = new Service({ protocol: \"Empty\" }, OPTS);\n var ptclStr;\n svc.createClient({ timeout: opts && opts.timeout }).createChannel(transport, {\n scope: opts && opts.scope,\n endWritable: typeof transport == \"function\"\n // Stateless transports only.\n }).once(\"handshake\", function(hreq, hres) {\n ptclStr = hres.serverProtocol;\n this.destroy(true);\n }).once(\"eot\", function(pending, err) {\n if (err && !/interrupted/.test(err)) {\n cb(err);\n } else {\n cb(null, JSON.parse(ptclStr));\n }\n });\n }\n function Client(svc, opts) {\n opts = opts || {};\n events.EventEmitter.call(this);\n this._svc$ = svc;\n this._channels$ = [];\n this._fns$ = [];\n this._buffering$ = !!opts.buffering;\n this._cache$ = opts.cache || {};\n this._policy$ = opts.channelPolicy;\n this._strict$ = !!opts.strictTypes;\n this._timeout$ = utils.getOption(opts, \"timeout\", 1e4);\n if (opts.remoteProtocols) {\n insertRemoteProtocols(this._cache$, opts.remoteProtocols, svc, true);\n }\n this._svc$.messages.forEach(function(msg) {\n this[msg.name] = this._createMessageHandler$(msg);\n }, this);\n }\n util.inherits(Client, events.EventEmitter);\n Client.prototype.activeChannels = function() {\n return this._channels$.slice();\n };\n Client.prototype.createChannel = function(transport, opts) {\n var objectMode = opts && opts.objectMode;\n var channel;\n if (typeof transport == \"function\") {\n var writableFactory;\n if (objectMode) {\n writableFactory = transport;\n } else {\n writableFactory = function(cb) {\n var encoder2 = new FrameEncoder();\n var writable2 = transport(function(err, readable2) {\n if (err) {\n cb(err);\n return;\n }\n var decoder2 = new FrameDecoder().once(\"error\", function(err2) {\n channel.destroy(err2);\n });\n cb(null, readable2.pipe(decoder2));\n });\n if (writable2) {\n encoder2.pipe(writable2);\n return encoder2;\n }\n };\n }\n channel = new StatelessClientChannel(this, writableFactory, opts);\n } else {\n var readable, writable;\n if (isStream(transport)) {\n readable = writable = transport;\n } else {\n readable = transport.readable;\n writable = transport.writable;\n }\n if (!objectMode) {\n var decoder = new NettyDecoder();\n readable = readable.pipe(decoder);\n var encoder = new NettyEncoder();\n encoder.pipe(writable);\n writable = encoder;\n }\n channel = new StatefulClientChannel(this, readable, writable, opts);\n if (!objectMode) {\n channel.once(\"eot\", function() {\n readable.unpipe(decoder);\n encoder.unpipe(writable);\n });\n decoder.once(\"error\", function(err) {\n channel.destroy(err);\n });\n }\n }\n var channels = this._channels$;\n channels.push(channel);\n channel.once(\"_drain\", function() {\n channels.splice(channels.indexOf(this), 1);\n });\n this._buffering$ = false;\n this.emit(\"channel\", channel);\n return channel;\n };\n Client.prototype.destroyChannels = function(opts) {\n this._channels$.forEach(function(channel) {\n channel.destroy(opts && opts.noWait);\n });\n };\n Client.prototype.emitMessage = function(name, req, opts, cb) {\n var msg = getExistingMessage(this._svc$, name);\n var wreq = new WrappedRequest(msg, {}, req);\n this._emitMessage$(wreq, opts, cb);\n };\n Client.prototype.remoteProtocols = function() {\n return getRemoteProtocols(this._cache$, true);\n };\n Object.defineProperty(Client.prototype, \"service\", {\n enumerable: true,\n get: function() {\n return this._svc$;\n }\n });\n Client.prototype.use = function() {\n var i, l, fn;\n for (i = 0, l = arguments.length; i < l; i++) {\n fn = arguments[i];\n this._fns$.push(fn.length < 3 ? fn(this) : fn);\n }\n return this;\n };\n Client.prototype._emitMessage$ = function(wreq, opts, cb) {\n if (!cb && typeof opts === \"function\") {\n cb = opts;\n opts = void 0;\n }\n var self = this;\n var channels = this._channels$;\n var numChannels = channels.length;\n if (!numChannels) {\n if (this._buffering$) {\n debug(\"no active client channels, buffering call\");\n this.once(\"channel\", function() {\n this._emitMessage$(wreq, opts, cb);\n });\n } else {\n var err = new Error(\"no active channels\");\n process.nextTick(function() {\n if (cb) {\n cb.call(new CallContext(wreq._msg), err);\n } else {\n self.emit(\"error\", err);\n }\n });\n }\n return;\n }\n opts = opts || {};\n if (opts.timeout === void 0) {\n opts.timeout = this._timeout$;\n }\n var channel;\n if (numChannels === 1) {\n channel = channels[0];\n } else if (this._policy$) {\n channel = this._policy$(this._channels$.slice());\n if (!channel) {\n debug(\"policy returned no channel, skipping call\");\n return;\n }\n } else {\n channel = channels[Math.floor(Math.random() * numChannels)];\n }\n channel._emit(wreq, opts, function(err2, wres) {\n var ctx = this;\n var errType = ctx.message.errorType;\n if (err2) {\n if (self._strict$) {\n err2 = errType.clone(err2.message, { wrapUnions: true });\n }\n done(err2);\n return;\n }\n if (!wres) {\n done();\n return;\n }\n err2 = wres.error;\n if (!self._strict$) {\n if (err2 === void 0) {\n err2 = null;\n } else {\n if (Type.isType(errType, \"union:unwrapped\")) {\n if (typeof err2 == \"string\") {\n err2 = new Error(err2);\n }\n } else if (err2 && err2.string && typeof err2.string == \"string\") {\n err2 = new Error(err2.string);\n }\n }\n }\n done(err2, wres.response);\n function done(err3, res) {\n if (cb) {\n cb.call(ctx, err3, res);\n } else if (err3) {\n self.emit(\"error\", err3);\n }\n }\n });\n };\n Client.prototype._createMessageHandler$ = function(msg) {\n var fields = msg.requestType.getFields();\n var names = fields.map(function(f3) {\n return f3.getName();\n });\n var body = \"return function \" + msg.name + \"(\";\n if (names.length) {\n body += names.join(\", \") + \", \";\n }\n body += \"opts, cb) {\\n\";\n body += \" var req = {\";\n body += names.map(function(n) {\n return n + \": \" + n;\n }).join(\", \");\n body += \"};\\n\";\n body += \" return this.emitMessage('\" + msg.name + \"', req, opts, cb);\\n\";\n body += \"};\";\n return new Function(body)();\n };\n function Server(svc, opts) {\n opts = opts || {};\n events.EventEmitter.call(this);\n this.service = svc;\n this._handlers = {};\n this._fns = [];\n this._channels = {};\n this._nextChannelId = 1;\n this._cache = opts.cache || {};\n this._defaultHandler = opts.defaultHandler;\n this._sysErrFormatter = opts.systemErrorFormatter;\n this._silent = !!opts.silent;\n this._strict = !!opts.strictTypes;\n if (opts.remoteProtocols) {\n insertRemoteProtocols(this._cache, opts.remoteProtocols, svc, false);\n }\n svc.messages.forEach(function(msg) {\n var name = msg.name;\n if (!opts.noCapitalize) {\n name = utils.capitalize(name);\n }\n this[\"on\" + name] = this._createMessageHandler(msg);\n }, this);\n }\n util.inherits(Server, events.EventEmitter);\n Server.prototype.activeChannels = function() {\n return utils.objectValues(this._channels);\n };\n Server.prototype.createChannel = function(transport, opts) {\n var objectMode = opts && opts.objectMode;\n var channel;\n if (typeof transport == \"function\") {\n var readableFactory;\n if (objectMode) {\n readableFactory = transport;\n } else {\n readableFactory = function(cb) {\n var decoder2 = new FrameDecoder().once(\"error\", function(err) {\n channel.destroy(err);\n });\n return transport(function(err, writable2) {\n if (err) {\n cb(err);\n return;\n }\n var encoder2 = new FrameEncoder();\n encoder2.pipe(writable2);\n cb(null, encoder2);\n }).pipe(decoder2);\n };\n }\n channel = new StatelessServerChannel(this, readableFactory, opts);\n } else {\n var readable, writable;\n if (isStream(transport)) {\n readable = writable = transport;\n } else {\n readable = transport.readable;\n writable = transport.writable;\n }\n if (!objectMode) {\n var decoder = new NettyDecoder();\n readable = readable.pipe(decoder);\n var encoder = new NettyEncoder();\n encoder.pipe(writable);\n writable = encoder;\n }\n channel = new StatefulServerChannel(this, readable, writable, opts);\n if (!objectMode) {\n channel.once(\"eot\", function() {\n readable.unpipe(decoder);\n encoder.unpipe(writable);\n });\n decoder.once(\"error\", function(err) {\n channel.destroy(err);\n });\n }\n }\n if (!this.listeners(\"error\").length) {\n this.on(\"error\", this._onError);\n }\n var channelId = this._nextChannelId++;\n var channels = this._channels;\n channels[channelId] = channel.once(\"eot\", function() {\n delete channels[channelId];\n });\n this.emit(\"channel\", channel);\n return channel;\n };\n Server.prototype.onMessage = function(name, handler) {\n getExistingMessage(this.service, name);\n this._handlers[name] = handler;\n return this;\n };\n Server.prototype.remoteProtocols = function() {\n return getRemoteProtocols(this._cache, false);\n };\n Server.prototype.use = function() {\n var i, l, fn;\n for (i = 0, l = arguments.length; i < l; i++) {\n fn = arguments[i];\n this._fns.push(fn.length < 3 ? fn(this) : fn);\n }\n return this;\n };\n Server.prototype._createMessageHandler = function(msg) {\n var name = msg.name;\n var fields = msg.requestType.fields;\n var numArgs = fields.length;\n var args = fields.length ? \", \" + fields.map(function(f3) {\n return \"req.\" + f3.name;\n }).join(\", \") : \"\";\n var body = \"return function (handler) {\\n\";\n body += \" if (handler.length > \" + numArgs + \") {\\n\";\n body += \" return this.onMessage('\" + name + \"', function (req, cb) {\\n\";\n body += \" return handler.call(this\" + args + \", cb);\\n\";\n body += \" });\\n\";\n body += \" } else {\\n\";\n body += \" return this.onMessage('\" + name + \"', function (req) {\\n\";\n body += \" return handler.call(this\" + args + \");\\n\";\n body += \" });\\n\";\n body += \" }\\n\";\n body += \"};\\n\";\n return new Function(body)();\n };\n Server.prototype._onError = function(err) {\n if (!this._silent && err.rpcCode !== \"UNKNOWN_PROTOCOL\") {\n console.error();\n if (err.rpcCode) {\n console.error(err.rpcCode);\n console.error(err.cause);\n } else {\n console.error(\"INTERNAL_SERVER_ERROR\");\n console.error(err);\n }\n }\n };\n function ClientChannel(client, opts) {\n opts = opts || {};\n events.EventEmitter.call(this);\n this.client = client;\n this.timeout = utils.getOption(opts, \"timeout\", client._timeout$);\n this._endWritable = !!utils.getOption(opts, \"endWritable\", true);\n this._prefix = normalizedPrefix(opts.scope);\n var cache = client._cache$;\n var clientSvc = client._svc$;\n var hash = opts.serverHash;\n if (!hash) {\n hash = clientSvc.hash;\n }\n var adapter = cache[hash];\n if (!adapter) {\n hash = clientSvc.hash;\n adapter = cache[hash] = new Adapter(clientSvc, clientSvc, hash);\n }\n this._adapter = adapter;\n this._registry = new Registry(this, PREFIX_LENGTH);\n this.pending = 0;\n this.destroyed = false;\n this.draining = false;\n this.once(\"_eot\", function(pending, err) {\n debug(\"client channel EOT\");\n this.destroyed = true;\n this.emit(\"eot\", pending, err);\n });\n }\n util.inherits(ClientChannel, events.EventEmitter);\n ClientChannel.prototype.destroy = function(noWait) {\n debug(\"destroying client channel\");\n if (!this.draining) {\n this.draining = true;\n this.emit(\"_drain\");\n }\n var registry = this._registry;\n var pending = this.pending;\n if (noWait) {\n registry.clear();\n }\n if (noWait || !pending) {\n if (isError(noWait)) {\n debug(\"fatal client channel error: %s\", noWait);\n this.emit(\"_eot\", pending, noWait);\n } else {\n this.emit(\"_eot\", pending);\n }\n } else {\n debug(\"client channel entering drain mode (%s pending)\", pending);\n }\n };\n ClientChannel.prototype.ping = function(timeout, cb) {\n if (!cb && typeof timeout == \"function\") {\n cb = timeout;\n timeout = void 0;\n }\n var self = this;\n var wreq = new WrappedRequest(PING_MESSAGE);\n this._emit(wreq, { timeout }, function(err) {\n if (cb) {\n cb.call(self, err);\n } else if (err) {\n self.destroy(err);\n }\n });\n };\n ClientChannel.prototype._createHandshakeRequest = function(adapter, noSvc) {\n var svc = this.client._svc$;\n return {\n clientHash: svc.hash,\n clientProtocol: noSvc ? null : JSON.stringify(svc.protocol),\n serverHash: adapter._hash\n };\n };\n ClientChannel.prototype._emit = function(wreq, opts, cb) {\n var msg = wreq._msg;\n var wres = msg.oneWay ? void 0 : new WrappedResponse(msg, {});\n var ctx = new CallContext(msg, this);\n var self = this;\n this.pending++;\n process.nextTick(function() {\n if (!msg.name) {\n onTransition(wreq, wres, onCompletion);\n } else {\n self.emit(\"outgoingCall\", ctx, opts);\n var fns = self.client._fns$;\n debug(\"starting client middleware chain (%s middleware)\", fns.length);\n chainMiddleware({\n fns,\n ctx,\n wreq,\n wres,\n onTransition,\n onCompletion,\n onError\n });\n }\n });\n function onTransition(wreq2, wres2, prev) {\n var err, reqBuf;\n if (self.destroyed) {\n err = new Error(\"channel destroyed\");\n } else {\n try {\n reqBuf = wreq2.toBuffer();\n } catch (cause) {\n err = serializationError(\n f2(\"invalid %j request\", msg.name),\n wreq2,\n [\n { name: \"headers\", type: MAP_BYTES_TYPE },\n { name: \"request\", type: msg.requestType }\n ]\n );\n }\n }\n if (err) {\n prev(err);\n return;\n }\n var timeout = opts && opts.timeout !== void 0 ? opts.timeout : self.timeout;\n var id = self._registry.add(timeout, function(err2, resBuf, adapter) {\n if (!err2 && !msg.oneWay) {\n try {\n adapter._decodeResponse(resBuf, wres2, msg);\n } catch (cause) {\n err2 = cause;\n }\n }\n prev(err2);\n });\n id |= self._prefix;\n debug(\"sending message %s\", id);\n self._send(id, reqBuf, !!msg && msg.oneWay);\n }\n function onCompletion(err) {\n self.pending--;\n cb.call(ctx, err, wres);\n if (self.draining && !self.destroyed && !self.pending) {\n self.destroy();\n }\n }\n function onError(err) {\n self.client.emit(\"error\", err, self);\n }\n };\n ClientChannel.prototype._getAdapter = function(hres) {\n var hash = hres.serverHash;\n var cache = this.client._cache$;\n var adapter = cache[hash];\n if (adapter) {\n return adapter;\n }\n var ptcl = JSON.parse(hres.serverProtocol);\n var serverSvc = Service.forProtocol(ptcl);\n adapter = new Adapter(this.client._svc$, serverSvc, hash, true);\n return cache[hash] = adapter;\n };\n ClientChannel.prototype._matchesPrefix = function(id) {\n return matchesPrefix(id, this._prefix);\n };\n ClientChannel.prototype._send = utils.abstractFunction;\n utils.addDeprecatedGetters(ClientChannel, [\"pending\", \"timeout\"]);\n ClientChannel.prototype.getCache = util.deprecate(\n function() {\n return this.client._cache$;\n },\n \"use `.remoteProtocols()` instead of `.getCache()`\"\n );\n ClientChannel.prototype.getProtocol = util.deprecate(\n function() {\n return this.client._svc$;\n },\n \"use `.service` instead or `.getProtocol()`\"\n );\n ClientChannel.prototype.isDestroyed = util.deprecate(\n function() {\n return this.destroyed;\n },\n \"use `.destroyed` instead of `.isDestroyed`\"\n );\n function StatelessClientChannel(client, writableFactory, opts) {\n ClientChannel.call(this, client, opts);\n this._writableFactory = writableFactory;\n if (!opts || !opts.noPing) {\n debug(\"emitting ping request\");\n this.ping();\n }\n }\n util.inherits(StatelessClientChannel, ClientChannel);\n StatelessClientChannel.prototype._send = function(id, reqBuf) {\n var cb = this._registry.get(id);\n var adapter = this._adapter;\n var self = this;\n process.nextTick(emit);\n return true;\n function emit(retry) {\n if (self.destroyed) {\n return;\n }\n var hreq = self._createHandshakeRequest(adapter, !retry);\n var writable = self._writableFactory.call(self, function(err, readable) {\n if (err) {\n cb(err);\n return;\n }\n readable.on(\"data\", function(obj) {\n debug(\"received response %s\", obj.id);\n var buf = Buffer2.concat(obj.payload);\n try {\n var parts = readHead(HANDSHAKE_RESPONSE_TYPE, buf);\n var hres = parts.head;\n if (hres.serverHash) {\n adapter = self._getAdapter(hres);\n }\n } catch (cause) {\n cb(cause);\n return;\n }\n var match = hres.match;\n debug(\"handshake match: %s\", match);\n self.emit(\"handshake\", hreq, hres);\n if (match === \"NONE\") {\n process.nextTick(function() {\n emit(true);\n });\n } else {\n self._adapter = adapter;\n cb(null, parts.tail, adapter);\n }\n });\n });\n if (!writable) {\n cb(new Error(\"invalid writable stream\"));\n return;\n }\n writable.write({\n id,\n payload: [HANDSHAKE_REQUEST_TYPE.toBuffer(hreq), reqBuf]\n });\n if (self._endWritable) {\n writable.end();\n }\n }\n };\n function StatefulClientChannel(client, readable, writable, opts) {\n ClientChannel.call(this, client, opts);\n this._readable = readable;\n this._writable = writable;\n this._connected = !!(opts && opts.noPing);\n this._readable.on(\"end\", onEnd);\n this._writable.on(\"finish\", onFinish);\n var self = this;\n var timer = null;\n this.once(\"eot\", function() {\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n if (!self._connected) {\n self.emit(\"_ready\");\n }\n this._writable.removeListener(\"finish\", onFinish);\n if (this._endWritable) {\n debug(\"ending transport\");\n this._writable.end();\n }\n this._readable.removeListener(\"data\", onPing).removeListener(\"data\", onMessage).removeListener(\"end\", onEnd);\n });\n var hreq;\n if (this._connected) {\n this._readable.on(\"data\", onMessage);\n } else {\n this._readable.on(\"data\", onPing);\n process.nextTick(ping);\n if (self.timeout) {\n timer = setTimeout(function() {\n self.destroy(new Error(\"timeout\"));\n }, self.timeout);\n }\n }\n function ping(retry) {\n if (self.destroyed) {\n return;\n }\n hreq = self._createHandshakeRequest(self._adapter, !retry);\n var payload = [\n HANDSHAKE_REQUEST_TYPE.toBuffer(hreq),\n utils.bufferFrom([0, 0])\n // No header, no data (empty message name).\n ];\n self._writable.write({ id: self._prefix, payload });\n }\n function onPing(obj) {\n if (!self._matchesPrefix(obj.id)) {\n debug(\"discarding unscoped response %s (still connecting)\", obj.id);\n return;\n }\n var buf = Buffer2.concat(obj.payload);\n try {\n var hres = readHead(HANDSHAKE_RESPONSE_TYPE, buf).head;\n if (hres.serverHash) {\n self._adapter = self._getAdapter(hres);\n }\n } catch (cause) {\n self.destroy(cause);\n return;\n }\n var match = hres.match;\n debug(\"handshake match: %s\", match);\n self.emit(\"handshake\", hreq, hres);\n if (match === \"NONE\") {\n process.nextTick(function() {\n ping(true);\n });\n } else {\n debug(\"successfully connected\");\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n self._readable.removeListener(\"data\", onPing).on(\"data\", onMessage);\n self._connected = true;\n self.emit(\"_ready\");\n hreq = null;\n }\n }\n function onMessage(obj) {\n var id = obj.id;\n if (!self._matchesPrefix(id)) {\n debug(\"discarding unscoped message %s\", id);\n return;\n }\n var cb = self._registry.get(id);\n if (cb) {\n process.nextTick(function() {\n debug(\"received message %s\", id);\n cb(null, Buffer2.concat(obj.payload), self._adapter);\n });\n }\n }\n function onEnd() {\n self.destroy(true);\n }\n function onFinish() {\n self.destroy();\n }\n }\n util.inherits(StatefulClientChannel, ClientChannel);\n StatefulClientChannel.prototype._emit = function() {\n if (this._connected || this.draining) {\n ClientChannel.prototype._emit.apply(this, arguments);\n } else {\n debug(\"queuing request\");\n var args = [];\n var i, l;\n for (i = 0, l = arguments.length; i < l; i++) {\n args.push(arguments[i]);\n }\n this.once(\"_ready\", function() {\n this._emit.apply(this, args);\n });\n }\n };\n StatefulClientChannel.prototype._send = function(id, reqBuf, oneWay) {\n if (oneWay) {\n var self = this;\n process.nextTick(function() {\n self._registry.get(id)(null, utils.bufferFrom([0, 0, 0]), self._adapter);\n });\n }\n return this._writable.write({ id, payload: [reqBuf] });\n };\n function ServerChannel(server, opts) {\n opts = opts || {};\n events.EventEmitter.call(this);\n this.server = server;\n this._endWritable = !!utils.getOption(opts, \"endWritable\", true);\n this._prefix = normalizedPrefix(opts.scope);\n var cache = server._cache;\n var svc = server.service;\n var hash = svc.hash;\n if (!cache[hash]) {\n cache[hash] = new Adapter(svc, svc, hash);\n }\n this._adapter = null;\n this.destroyed = false;\n this.draining = false;\n this.pending = 0;\n this.once(\"_eot\", function(pending, err) {\n debug(\"server channel EOT\");\n this.emit(\"eot\", pending, err);\n });\n }\n util.inherits(ServerChannel, events.EventEmitter);\n ServerChannel.prototype.destroy = function(noWait) {\n if (!this.draining) {\n this.draining = true;\n this.emit(\"_drain\");\n }\n if (noWait || !this.pending) {\n this.destroyed = true;\n if (isError(noWait)) {\n debug(\"fatal server channel error: %s\", noWait);\n this.emit(\"_eot\", this.pending, noWait);\n } else {\n this.emit(\"_eot\", this.pending);\n }\n }\n };\n ServerChannel.prototype._createHandshakeResponse = function(err, hreq) {\n var svc = this.server.service;\n var buf = svc.hash;\n var serverMatch = hreq && hreq.serverHash.equals(buf);\n return {\n match: err ? \"NONE\" : serverMatch ? \"BOTH\" : \"CLIENT\",\n serverProtocol: serverMatch ? null : JSON.stringify(svc.protocol),\n serverHash: serverMatch ? null : buf\n };\n };\n ServerChannel.prototype._getAdapter = function(hreq) {\n var hash = hreq.clientHash;\n var adapter = this.server._cache[hash];\n if (adapter) {\n return adapter;\n }\n if (!hreq.clientProtocol) {\n throw toRpcError(\"UNKNOWN_PROTOCOL\");\n }\n var ptcl = JSON.parse(hreq.clientProtocol);\n var clientSvc = Service.forProtocol(ptcl);\n adapter = new Adapter(clientSvc, this.server.service, hash, true);\n return this.server._cache[hash] = adapter;\n };\n ServerChannel.prototype._matchesPrefix = function(id) {\n return matchesPrefix(id, this._prefix);\n };\n ServerChannel.prototype._receive = function(reqBuf, adapter, cb) {\n var self = this;\n var wreq;\n try {\n wreq = adapter._decodeRequest(reqBuf);\n } catch (cause) {\n cb(self._encodeSystemError(toRpcError(\"INVALID_REQUEST\", cause)));\n return;\n }\n var msg = wreq._msg;\n var wres = new WrappedResponse(msg, {});\n if (!msg.name) {\n wres.response = null;\n cb(wres.toBuffer(), false);\n return;\n }\n var ctx = new CallContext(msg, this);\n self.emit(\"incomingCall\", ctx);\n var fns = this.server._fns;\n debug(\"starting server middleware chain (%s middleware)\", fns.length);\n self.pending++;\n chainMiddleware({\n fns,\n ctx,\n wreq,\n wres,\n onTransition,\n onCompletion,\n onError\n });\n function onTransition(wreq2, wres2, prev) {\n var handler = self.server._handlers[msg.name];\n if (!handler) {\n var defaultHandler = self.server._defaultHandler;\n if (defaultHandler) {\n defaultHandler.call(ctx, wreq2, wres2, prev);\n } else {\n var cause = new Error(f2(\"no handler for %s\", msg.name));\n prev(toRpcError(\"NOT_IMPLEMENTED\", cause));\n }\n } else {\n var pending = !msg.oneWay;\n try {\n if (pending) {\n handler.call(ctx, wreq2.request, function(err, res) {\n pending = false;\n wres2.error = err;\n wres2.response = res;\n prev();\n });\n } else {\n handler.call(ctx, wreq2.request);\n prev();\n }\n } catch (err) {\n if (pending) {\n pending = false;\n prev(err);\n } else {\n onError(err);\n }\n }\n }\n }\n function onCompletion(err) {\n self.pending--;\n var server = self.server;\n var resBuf;\n if (!err) {\n var resErr = wres.error;\n var isStrict = server._strict;\n if (!isStrict) {\n if (isError(resErr)) {\n wres.error = msg.errorType.clone(resErr.message, { wrapUnions: true });\n } else if (resErr === null) {\n resErr = wres.error = void 0;\n }\n if (resErr === void 0 && wres.response === void 0 && msg.responseType.isValid(null)) {\n wres.response = null;\n }\n }\n try {\n resBuf = wres.toBuffer();\n } catch (cause) {\n if (wres.error !== void 0) {\n err = serializationError(\n f2(\"invalid %j error\", msg.name),\n // Sic.\n wres,\n [\n { name: \"headers\", type: MAP_BYTES_TYPE },\n { name: \"error\", type: msg.errorType }\n ]\n );\n } else {\n err = serializationError(\n f2(\"invalid %j response\", msg.name),\n wres,\n [\n { name: \"headers\", type: MAP_BYTES_TYPE },\n { name: \"response\", type: msg.responseType }\n ]\n );\n }\n }\n }\n if (!resBuf) {\n resBuf = self._encodeSystemError(err, wres.headers);\n } else if (resErr !== void 0) {\n server.emit(\"error\", toRpcError(\"APPLICATION_ERROR\", resErr));\n }\n cb(resBuf, msg.oneWay);\n if (self.draining && !self.pending) {\n self.destroy();\n }\n }\n function onError(err) {\n self.server.emit(\"error\", err, self);\n }\n };\n utils.addDeprecatedGetters(ServerChannel, [\"pending\"]);\n ServerChannel.prototype.getCache = util.deprecate(\n function() {\n return this.server._cache;\n },\n \"use `.remoteProtocols()` instead of `.getCache()`\"\n );\n ServerChannel.prototype.getProtocol = util.deprecate(\n function() {\n return this.server.service;\n },\n \"use `.service` instead of `.getProtocol()`\"\n );\n ServerChannel.prototype.isDestroyed = util.deprecate(\n function() {\n return this.destroyed;\n },\n \"use `.destroyed` instead of `.isDestroyed`\"\n );\n ServerChannel.prototype._encodeSystemError = function(err, header) {\n var server = this.server;\n server.emit(\"error\", err, this);\n var errStr;\n if (server._sysErrFormatter) {\n errStr = server._sysErrFormatter.call(this, err);\n } else if (err.rpcCode) {\n errStr = err.message;\n }\n var hdrBuf;\n if (header) {\n try {\n hdrBuf = MAP_BYTES_TYPE.toBuffer(header);\n } catch (cause) {\n server.emit(\"error\", cause, this);\n }\n }\n return Buffer2.concat([\n hdrBuf || utils.bufferFrom([0]),\n utils.bufferFrom([1, 0]),\n // Error flag and first union index.\n STRING_TYPE.toBuffer(errStr || \"internal server error\")\n ]);\n };\n function StatelessServerChannel(server, readableFactory, opts) {\n ServerChannel.call(this, server, opts);\n this._writable = void 0;\n var self = this;\n var readable;\n process.nextTick(function() {\n readable = readableFactory.call(self, function(err, writable) {\n process.nextTick(function() {\n if (err) {\n onFinish(err);\n return;\n }\n self._writable = writable.on(\"finish\", onFinish);\n self.emit(\"_writable\");\n });\n }).on(\"data\", onRequest).on(\"end\", onEnd);\n });\n function onRequest(obj) {\n var id = obj.id;\n var buf = Buffer2.concat(obj.payload);\n var err;\n try {\n var parts = readHead(HANDSHAKE_REQUEST_TYPE, buf);\n var hreq = parts.head;\n var adapter = self._getAdapter(hreq);\n } catch (cause) {\n err = toRpcError(\"INVALID_HANDSHAKE_REQUEST\", cause);\n }\n var hres = self._createHandshakeResponse(err, hreq);\n self.emit(\"handshake\", hreq, hres);\n if (err) {\n done(self._encodeSystemError(err));\n } else {\n self._receive(parts.tail, adapter, done);\n }\n function done(resBuf) {\n if (!self.destroyed) {\n if (!self._writable) {\n self.once(\"_writable\", function() {\n done(resBuf);\n });\n return;\n }\n self._writable.write({\n id,\n payload: [HANDSHAKE_RESPONSE_TYPE.toBuffer(hres), resBuf]\n });\n }\n if (self._writable && self._endWritable) {\n self._writable.end();\n }\n }\n }\n function onEnd() {\n self.destroy();\n }\n function onFinish(err) {\n readable.removeListener(\"data\", onRequest).removeListener(\"end\", onEnd);\n self.destroy(err || true);\n }\n }\n util.inherits(StatelessServerChannel, ServerChannel);\n function StatefulServerChannel(server, readable, writable, opts) {\n ServerChannel.call(this, server, opts);\n this._adapter = void 0;\n this._writable = writable.on(\"finish\", onFinish);\n this._readable = readable.on(\"data\", onHandshake).on(\"end\", onEnd);\n this.once(\"_drain\", function() {\n this._readable.removeListener(\"data\", onHandshake).removeListener(\"data\", onRequest).removeListener(\"end\", onEnd);\n }).once(\"eot\", function() {\n this._writable.removeListener(\"finish\", onFinish);\n if (this._endWritable) {\n this._writable.end();\n }\n });\n var self = this;\n function onHandshake(obj) {\n var id = obj.id;\n if (!self._matchesPrefix(id)) {\n return;\n }\n var buf = Buffer2.concat(obj.payload);\n var err;\n try {\n var parts = readHead(HANDSHAKE_REQUEST_TYPE, buf);\n var hreq = parts.head;\n self._adapter = self._getAdapter(hreq);\n } catch (cause) {\n err = toRpcError(\"INVALID_HANDSHAKE_REQUEST\", cause);\n }\n var hres = self._createHandshakeResponse(err, hreq);\n self.emit(\"handshake\", hreq, hres);\n if (err) {\n done(self._encodeSystemError(err));\n } else {\n self._readable.removeListener(\"data\", onHandshake).on(\"data\", onRequest);\n self._receive(parts.tail, self._adapter, done);\n }\n function done(resBuf) {\n if (self.destroyed) {\n return;\n }\n self._writable.write({\n id,\n payload: [HANDSHAKE_RESPONSE_TYPE.toBuffer(hres), resBuf]\n });\n }\n }\n function onRequest(obj) {\n var id = obj.id;\n if (!self._matchesPrefix(id)) {\n return;\n }\n var reqBuf = Buffer2.concat(obj.payload);\n self._receive(reqBuf, self._adapter, function(resBuf, oneWay) {\n if (self.destroyed || oneWay) {\n return;\n }\n self._writable.write({ id, payload: [resBuf] });\n });\n }\n function onEnd() {\n self.destroy();\n }\n function onFinish() {\n self.destroy(true);\n }\n }\n util.inherits(StatefulServerChannel, ServerChannel);\n function WrappedRequest(msg, hdrs, req) {\n this._msg = msg;\n this.headers = hdrs || {};\n this.request = req || {};\n }\n WrappedRequest.prototype.toBuffer = function() {\n var msg = this._msg;\n return Buffer2.concat([\n MAP_BYTES_TYPE.toBuffer(this.headers),\n STRING_TYPE.toBuffer(msg.name),\n msg.requestType.toBuffer(this.request)\n ]);\n };\n function WrappedResponse(msg, hdr, err, res) {\n this._msg = msg;\n this.headers = hdr;\n this.error = err;\n this.response = res;\n }\n WrappedResponse.prototype.toBuffer = function() {\n var hdr = MAP_BYTES_TYPE.toBuffer(this.headers);\n var hasError = this.error !== void 0;\n return Buffer2.concat([\n hdr,\n BOOLEAN_TYPE.toBuffer(hasError),\n hasError ? this._msg.errorType.toBuffer(this.error) : this._msg.responseType.toBuffer(this.response)\n ]);\n };\n function CallContext(msg, channel) {\n this.channel = channel;\n this.locals = {};\n this.message = msg;\n Object.freeze(this);\n }\n function Registry(ctx, prefixLength) {\n this._ctx = ctx;\n this._mask = ~0 >>> (prefixLength | 0);\n this._id = 0;\n this._n = 0;\n this._cbs = {};\n }\n Registry.prototype.get = function(id) {\n return this._cbs[id & this._mask];\n };\n Registry.prototype.add = function(timeout, fn) {\n this._id = this._id + 1 & this._mask;\n var self = this;\n var id = this._id;\n var timer;\n if (timeout > 0) {\n timer = setTimeout(function() {\n cb(new Error(\"timeout\"));\n }, timeout);\n }\n this._cbs[id] = cb;\n this._n++;\n return id;\n function cb() {\n if (!self._cbs[id]) {\n return;\n }\n delete self._cbs[id];\n self._n--;\n if (timer) {\n clearTimeout(timer);\n }\n fn.apply(self._ctx, arguments);\n }\n };\n Registry.prototype.clear = function() {\n Object.keys(this._cbs).forEach(function(id) {\n this._cbs[id](new Error(\"interrupted\"));\n }, this);\n };\n function Adapter(clientSvc, serverSvc, hash, isRemote) {\n this._clientSvc = clientSvc;\n this._serverSvc = serverSvc;\n this._hash = hash;\n this._isRemote = !!isRemote;\n this._readers = createReaders(clientSvc, serverSvc);\n }\n Adapter.prototype._decodeRequest = function(buf) {\n var tap = new Tap(buf);\n var hdr = MAP_BYTES_TYPE._read(tap);\n var name = STRING_TYPE._read(tap);\n var msg, req;\n if (name) {\n msg = this._serverSvc.message(name);\n req = this._readers[name + \"?\"]._read(tap);\n } else {\n msg = PING_MESSAGE;\n }\n if (!tap.isValid()) {\n throw new Error(f2(\"truncated %s request\", name || \"ping$\"));\n }\n return new WrappedRequest(msg, hdr, req);\n };\n Adapter.prototype._decodeResponse = function(buf, wres, msg) {\n var tap = new Tap(buf);\n utils.copyOwnProperties(MAP_BYTES_TYPE._read(tap), wres.headers, true);\n var isError2 = BOOLEAN_TYPE._read(tap);\n var name = msg.name;\n if (name) {\n var reader = this._readers[name + (isError2 ? \"*\" : \"!\")];\n msg = this._clientSvc.message(name);\n if (isError2) {\n wres.error = reader._read(tap);\n } else {\n wres.response = reader._read(tap);\n }\n if (!tap.isValid()) {\n throw new Error(f2(\"truncated %s response\", name));\n }\n } else {\n msg = PING_MESSAGE;\n }\n };\n function FrameDecoder() {\n stream.Transform.call(this, { readableObjectMode: true });\n this._id = void 0;\n this._buf = utils.newBuffer(0);\n this._bufs = [];\n this.on(\"finish\", function() {\n this.push(null);\n });\n }\n util.inherits(FrameDecoder, stream.Transform);\n FrameDecoder.prototype._transform = function(buf, encoding, cb) {\n buf = Buffer2.concat([this._buf, buf]);\n var frameLength;\n while (buf.length >= 4 && buf.length >= (frameLength = buf.readInt32BE(0)) + 4) {\n if (frameLength) {\n this._bufs.push(buf.slice(4, frameLength + 4));\n } else {\n var bufs = this._bufs;\n this._bufs = [];\n this.push({ id: null, payload: bufs });\n }\n buf = buf.slice(frameLength + 4);\n }\n this._buf = buf;\n cb();\n };\n FrameDecoder.prototype._flush = function(cb) {\n if (this._buf.length || this._bufs.length) {\n var bufs = this._bufs.slice();\n bufs.unshift(this._buf);\n var err = toRpcError(\"TRAILING_DATA\");\n err.trailingData = Buffer2.concat(bufs).toString();\n this.emit(\"error\", err);\n }\n cb();\n };\n function FrameEncoder() {\n stream.Transform.call(this, { writableObjectMode: true });\n this.on(\"finish\", function() {\n this.push(null);\n });\n }\n util.inherits(FrameEncoder, stream.Transform);\n FrameEncoder.prototype._transform = function(obj, encoding, cb) {\n var bufs = obj.payload;\n var i, l, buf;\n for (i = 0, l = bufs.length; i < l; i++) {\n buf = bufs[i];\n this.push(intBuffer(buf.length));\n this.push(buf);\n }\n this.push(intBuffer(0));\n cb();\n };\n function NettyDecoder() {\n stream.Transform.call(this, { readableObjectMode: true });\n this._id = void 0;\n this._frameCount = 0;\n this._buf = utils.newBuffer(0);\n this._bufs = [];\n this.on(\"finish\", function() {\n this.push(null);\n });\n }\n util.inherits(NettyDecoder, stream.Transform);\n NettyDecoder.prototype._transform = function(buf, encoding, cb) {\n buf = Buffer2.concat([this._buf, buf]);\n while (true) {\n if (this._id === void 0) {\n if (buf.length < 8) {\n this._buf = buf;\n cb();\n return;\n }\n this._id = buf.readInt32BE(0);\n this._frameCount = buf.readInt32BE(4);\n buf = buf.slice(8);\n }\n var frameLength;\n while (this._frameCount && buf.length >= 4 && buf.length >= (frameLength = buf.readInt32BE(0)) + 4) {\n this._frameCount--;\n this._bufs.push(buf.slice(4, frameLength + 4));\n buf = buf.slice(frameLength + 4);\n }\n if (this._frameCount) {\n this._buf = buf;\n cb();\n return;\n } else {\n var obj = { id: this._id, payload: this._bufs };\n this._bufs = [];\n this._id = void 0;\n this.push(obj);\n }\n }\n };\n NettyDecoder.prototype._flush = FrameDecoder.prototype._flush;\n function NettyEncoder() {\n stream.Transform.call(this, { writableObjectMode: true });\n this.on(\"finish\", function() {\n this.push(null);\n });\n }\n util.inherits(NettyEncoder, stream.Transform);\n NettyEncoder.prototype._transform = function(obj, encoding, cb) {\n var bufs = obj.payload;\n var l = bufs.length;\n var buf;\n buf = utils.newBuffer(8);\n buf.writeInt32BE(obj.id, 0);\n buf.writeInt32BE(l, 4);\n this.push(buf);\n var i;\n for (i = 0; i < l; i++) {\n buf = bufs[i];\n this.push(intBuffer(buf.length));\n this.push(buf);\n }\n cb();\n };\n function intBuffer(n) {\n var buf = utils.newBuffer(4);\n buf.writeInt32BE(n);\n return buf;\n }\n function readHead(type, buf) {\n var tap = new Tap(buf);\n var head = type._read(tap);\n if (!tap.isValid()) {\n throw new Error(f2(\"truncated %j\", type.schema()));\n }\n return { head, tail: tap.buf.slice(tap.pos) };\n }\n function createReader(rtype, wtype) {\n return rtype.equals(wtype) ? rtype : rtype.createResolver(wtype);\n }\n function createReaders(clientSvc, serverSvc) {\n var obj = {};\n clientSvc.messages.forEach(function(c) {\n var n = c.name;\n var s = serverSvc.message(n);\n try {\n if (!s) {\n throw new Error(f2(\"missing server message: %s\", n));\n }\n if (s.oneWay !== c.oneWay) {\n throw new Error(f2(\"inconsistent one-way message: %s\", n));\n }\n obj[n + \"?\"] = createReader(s.requestType, c.requestType);\n obj[n + \"*\"] = createReader(c.errorType, s.errorType);\n obj[n + \"!\"] = createReader(c.responseType, s.responseType);\n } catch (cause) {\n throw toRpcError(\"INCOMPATIBLE_PROTOCOL\", cause);\n }\n });\n return obj;\n }\n function insertRemoteProtocols(cache, ptcls, svc, isClient) {\n Object.keys(ptcls).forEach(function(hash) {\n var ptcl = ptcls[hash];\n var clientSvc, serverSvc;\n if (isClient) {\n clientSvc = svc;\n serverSvc = Service.forProtocol(ptcl);\n } else {\n clientSvc = Service.forProtocol(ptcl);\n serverSvc = svc;\n }\n cache[hash] = new Adapter(clientSvc, serverSvc, hash, true);\n });\n }\n function getRemoteProtocols(cache, isClient) {\n var ptcls = {};\n Object.keys(cache).forEach(function(hs) {\n var adapter = cache[hs];\n if (adapter._isRemote) {\n var svc = isClient ? adapter._serverSvc : adapter._clientSvc;\n ptcls[hs] = svc.protocol;\n }\n });\n return ptcls;\n }\n function isError(any) {\n return !!any && Object.prototype.toString.call(any) === \"[object Error]\";\n }\n function forwardErrors(src, dst) {\n return src.on(\"error\", function(err) {\n dst.emit(\"error\", err, src);\n });\n }\n function toError(msg, cause) {\n var err = new Error(msg);\n err.cause = cause;\n return err;\n }\n function toRpcError(rpcCode, cause) {\n var err = toError(rpcCode.toLowerCase().replace(/_/g, \" \"), cause);\n err.rpcCode = cause && cause.rpcCode ? cause.rpcCode : rpcCode;\n return err;\n }\n function serializationError(msg, obj, fields) {\n var details = [];\n var i, l, field;\n for (i = 0, l = fields.length; i < l; i++) {\n field = fields[i];\n field.type.isValid(obj[field.name], { errorHook });\n }\n var detailsStr = details.map(function(obj2) {\n return f2(\"%s = %j but expected %s\", obj2.path, obj2.value, obj2.type);\n }).join(\", \");\n var err = new Error(f2(\"%s (%s)\", msg, detailsStr));\n err.details = details;\n return err;\n function errorHook(parts, any, type) {\n var strs = [];\n var i2, l2, part;\n for (i2 = 0, l2 = parts.length; i2 < l2; i2++) {\n part = parts[i2];\n if (isNaN(part)) {\n strs.push(\".\" + part);\n } else {\n strs.push(\"[\" + part + \"]\");\n }\n }\n details.push({\n path: field.name + strs.join(\"\"),\n value: any,\n type\n });\n }\n }\n function normalizedPrefix(scope) {\n return scope ? utils.getHash(scope).readInt16BE(0) << 32 - PREFIX_LENGTH : 0;\n }\n function matchesPrefix(id, prefix) {\n return (id ^ prefix) >> 32 - PREFIX_LENGTH === 0;\n }\n function isStream(any) {\n return !!(any && any.pipe);\n }\n function getExistingMessage(svc, name) {\n var msg = svc.message(name);\n if (!msg) {\n throw new Error(f2(\"unknown message: %s\", name));\n }\n return msg;\n }\n function chainMiddleware(params) {\n var args = [params.wreq, params.wres];\n var cbs = [];\n var cause;\n forward(0);\n function forward(pos) {\n var isDone = false;\n if (pos < params.fns.length) {\n params.fns[pos].apply(params.ctx, args.concat(function(err, cb) {\n if (isDone) {\n params.onError(toError(\"duplicate forward middleware call\", err));\n return;\n }\n isDone = true;\n if (err || params.wres && // Non one-way messages.\n (params.wres.error !== void 0 || params.wres.response !== void 0)) {\n cause = err;\n backward();\n return;\n }\n if (cb) {\n cbs.push(cb);\n }\n forward(++pos);\n }));\n } else {\n params.onTransition.apply(params.ctx, args.concat(function(err) {\n if (isDone) {\n params.onError(toError(\"duplicate handler call\", err));\n return;\n }\n isDone = true;\n cause = err;\n process.nextTick(backward);\n }));\n }\n }\n function backward() {\n var cb = cbs.pop();\n if (cb) {\n var isDone = false;\n cb.call(params.ctx, cause, function(err) {\n if (isDone) {\n params.onError(toError(\"duplicate backward middleware call\", err));\n return;\n }\n cause = err;\n isDone = true;\n backward();\n });\n } else {\n params.onCompletion.call(params.ctx, cause);\n }\n }\n }\n module.exports = {\n Adapter,\n HANDSHAKE_REQUEST_TYPE,\n HANDSHAKE_RESPONSE_TYPE,\n Message,\n Registry,\n Service,\n discoverProtocol,\n streams: {\n FrameDecoder,\n FrameEncoder,\n NettyDecoder,\n NettyEncoder\n }\n };\n }\n});\n\n// node_modules/avsc/lib/files.js\nvar require_files = __commonJS({\n \"node_modules/avsc/lib/files.js\"(exports, module) {\n \"use strict\";\n var fs = __import_FS;\n var path = __import_PATH;\n function createImportHook() {\n var imports = {};\n return function(fpath, kind, cb) {\n fpath = path.resolve(fpath);\n if (imports[fpath]) {\n process.nextTick(cb);\n return;\n }\n imports[fpath] = true;\n fs.readFile(fpath, { encoding: \"utf8\" }, cb);\n };\n }\n function createSyncImportHook() {\n var imports = {};\n return function(fpath, kind, cb) {\n fpath = path.resolve(fpath);\n if (imports[fpath]) {\n cb();\n } else {\n imports[fpath] = true;\n cb(null, fs.readFileSync(fpath, { encoding: \"utf8\" }));\n }\n };\n }\n module.exports = {\n createImportHook,\n createSyncImportHook,\n // Proxy a few methods to better shim them for browserify.\n existsSync: fs.existsSync,\n readFileSync: fs.readFileSync\n };\n }\n});\n\n// node_modules/avsc/lib/specs.js\nvar require_specs = __commonJS({\n \"node_modules/avsc/lib/specs.js\"(exports, module) {\n \"use strict\";\n var files = require_files();\n var utils = require_utils();\n var path = __import_PATH;\n var util = __import_UTIL;\n var f2 = util.format;\n var TYPE_REFS = {\n date: { type: \"int\", logicalType: \"date\" },\n decimal: { type: \"bytes\", logicalType: \"decimal\" },\n time_ms: { type: \"long\", logicalType: \"time-millis\" },\n timestamp_ms: { type: \"long\", logicalType: \"timestamp-millis\" }\n };\n function assembleProtocol(fpath, opts, cb) {\n if (!cb && typeof opts == \"function\") {\n cb = opts;\n opts = void 0;\n }\n opts = opts || {};\n if (!opts.importHook) {\n opts.importHook = files.createImportHook();\n }\n importFile(fpath, function(err, protocol) {\n if (err) {\n cb(err);\n return;\n }\n if (!protocol) {\n cb(new Error(\"empty root import\"));\n return;\n }\n var schemas = protocol.types;\n if (schemas) {\n var namespace = protocolNamespace(protocol) || \"\";\n schemas.forEach(function(schema) {\n if (schema.namespace === namespace) {\n delete schema.namespace;\n }\n });\n }\n cb(null, protocol);\n });\n function importFile(fpath2, cb2) {\n opts.importHook(fpath2, \"idl\", function(err, str) {\n if (err) {\n cb2(err);\n return;\n }\n if (str === void 0) {\n cb2();\n return;\n }\n try {\n var reader = new Reader(str, opts);\n var obj = reader._readProtocol(str, opts);\n } catch (err2) {\n err2.path = fpath2;\n cb2(err2);\n return;\n }\n fetchImports(obj.protocol, obj.imports, path.dirname(fpath2), cb2);\n });\n }\n function fetchImports(protocol, imports, dpath, cb2) {\n var importedProtocols = [];\n next();\n function next() {\n var info = imports.shift();\n if (!info) {\n importedProtocols.reverse();\n try {\n importedProtocols.forEach(function(imported) {\n mergeImport(protocol, imported);\n });\n } catch (err) {\n cb2(err);\n return;\n }\n cb2(null, protocol);\n return;\n }\n var importPath = path.join(dpath, info.name);\n if (info.kind === \"idl\") {\n importFile(importPath, function(err, imported) {\n if (err) {\n cb2(err);\n return;\n }\n if (imported) {\n importedProtocols.push(imported);\n }\n next();\n });\n } else {\n opts.importHook(importPath, info.kind, function(err, str) {\n if (err) {\n cb2(err);\n return;\n }\n switch (info.kind) {\n case \"protocol\":\n case \"schema\":\n if (str === void 0) {\n next();\n return;\n }\n try {\n var obj = JSON.parse(str);\n } catch (err2) {\n err2.path = importPath;\n cb2(err2);\n return;\n }\n var imported = info.kind === \"schema\" ? { types: [obj] } : obj;\n importedProtocols.push(imported);\n next();\n return;\n default:\n cb2(new Error(f2(\"invalid import kind: %s\", info.kind)));\n }\n });\n }\n }\n }\n function mergeImport(protocol, imported) {\n var schemas = imported.types || [];\n schemas.reverse();\n schemas.forEach(function(schema) {\n if (!protocol.types) {\n protocol.types = [];\n }\n if (schema.namespace === void 0) {\n schema.namespace = protocolNamespace(imported) || \"\";\n }\n protocol.types.unshift(schema);\n });\n Object.keys(imported.messages || {}).forEach(function(name) {\n if (!protocol.messages) {\n protocol.messages = {};\n }\n if (protocol.messages[name]) {\n throw new Error(f2(\"duplicate message: %s\", name));\n }\n protocol.messages[name] = imported.messages[name];\n });\n }\n }\n function read(str) {\n var schema;\n if (typeof str == \"string\" && ~str.indexOf(path.sep) && files.existsSync(str)) {\n var contents = files.readFileSync(str, { encoding: \"utf8\" });\n try {\n return JSON.parse(contents);\n } catch (err) {\n var opts = { importHook: files.createSyncImportHook() };\n assembleProtocol(str, opts, function(err2, protocolSchema) {\n schema = err2 ? contents : protocolSchema;\n });\n }\n } else {\n schema = str;\n }\n if (typeof schema != \"string\" || schema === \"null\") {\n return schema;\n }\n try {\n return JSON.parse(schema);\n } catch (err) {\n try {\n return Reader.readProtocol(schema);\n } catch (err2) {\n try {\n return Reader.readSchema(schema);\n } catch (err3) {\n return schema;\n }\n }\n }\n }\n function Reader(str, opts) {\n opts = opts || {};\n this._tk = new Tokenizer(str);\n this._ackVoidMessages = !!opts.ackVoidMessages;\n this._implicitTags = !opts.delimitedCollections;\n this._typeRefs = opts.typeRefs || TYPE_REFS;\n }\n Reader.readProtocol = function(str, opts) {\n var reader = new Reader(str, opts);\n var protocol = reader._readProtocol();\n if (protocol.imports.length) {\n throw new Error(\"unresolvable import\");\n }\n return protocol.protocol;\n };\n Reader.readSchema = function(str, opts) {\n var reader = new Reader(str, opts);\n var doc = reader._readJavadoc();\n var schema = reader._readType(doc === void 0 ? {} : { doc }, true);\n reader._tk.next({ id: \"(eof)\" });\n return schema;\n };\n Reader.prototype._readProtocol = function() {\n var tk = this._tk;\n var imports = [];\n var types = [];\n var messages = {};\n var pos;\n this._readImports(imports);\n var protocolSchema = {};\n var protocolJavadoc = this._readJavadoc();\n if (protocolJavadoc !== void 0) {\n protocolSchema.doc = protocolJavadoc;\n }\n this._readAnnotations(protocolSchema);\n tk.next({ val: \"protocol\" });\n if (!tk.next({ val: \"{\", silent: true })) {\n protocolSchema.protocol = tk.next({ id: \"name\" }).val;\n tk.next({ val: \"{\" });\n }\n while (!tk.next({ val: \"}\", silent: true })) {\n if (!this._readImports(imports)) {\n var javadoc = this._readJavadoc();\n var typeSchema = this._readType({}, true);\n var numImports = this._readImports(imports, true);\n var message = void 0;\n pos = tk.pos;\n if (!numImports && (message = this._readMessage(typeSchema))) {\n if (javadoc !== void 0 && message.schema.doc === void 0) {\n message.schema.doc = javadoc;\n }\n var oneWay = false;\n if (message.schema.response === \"void\" || message.schema.response.type === \"void\") {\n oneWay = !this._ackVoidMessages && !message.schema.errors;\n if (message.schema.response === \"void\") {\n message.schema.response = \"null\";\n } else {\n message.schema.response.type = \"null\";\n }\n }\n if (oneWay) {\n message.schema[\"one-way\"] = true;\n }\n if (messages[message.name]) {\n throw new Error(f2(\"duplicate message: %s\", message.name));\n }\n messages[message.name] = message.schema;\n } else {\n if (javadoc) {\n if (typeof typeSchema == \"string\") {\n typeSchema = { doc: javadoc, type: typeSchema };\n } else if (typeSchema.doc === void 0) {\n typeSchema.doc = javadoc;\n }\n }\n types.push(typeSchema);\n tk.pos = pos;\n tk.next({ val: \";\", silent: true });\n }\n javadoc = void 0;\n }\n }\n tk.next({ id: \"(eof)\" });\n if (types.length) {\n protocolSchema.types = types;\n }\n if (Object.keys(messages).length) {\n protocolSchema.messages = messages;\n }\n return { protocol: protocolSchema, imports };\n };\n Reader.prototype._readAnnotations = function(schema) {\n var tk = this._tk;\n while (tk.next({ val: \"@\", silent: true })) {\n var parts = [];\n while (!tk.next({ val: \"(\", silent: true })) {\n parts.push(tk.next().val);\n }\n schema[parts.join(\"\")] = tk.next({ id: \"json\" }).val;\n tk.next({ val: \")\" });\n }\n };\n Reader.prototype._readMessage = function(responseSchema) {\n var tk = this._tk;\n var schema = { request: [], response: responseSchema };\n this._readAnnotations(schema);\n var name = tk.next().val;\n if (tk.next().val !== \"(\") {\n return;\n }\n if (!tk.next({ val: \")\", silent: true })) {\n do {\n schema.request.push(this._readField());\n } while (!tk.next({ val: \")\", silent: true }) && tk.next({ val: \",\" }));\n }\n var token = tk.next();\n switch (token.val) {\n case \"throws\":\n schema.errors = [];\n do {\n schema.errors.push(this._readType());\n } while (!tk.next({ val: \";\", silent: true }) && tk.next({ val: \",\" }));\n break;\n case \"oneway\":\n schema[\"one-way\"] = true;\n tk.next({ val: \";\" });\n break;\n case \";\":\n break;\n default:\n throw tk.error(\"invalid message suffix\", token);\n }\n return { name, schema };\n };\n Reader.prototype._readJavadoc = function() {\n var token = this._tk.next({ id: \"javadoc\", emitJavadoc: true, silent: true });\n if (token) {\n return token.val;\n }\n };\n Reader.prototype._readField = function() {\n var tk = this._tk;\n var javadoc = this._readJavadoc();\n var schema = { type: this._readType() };\n if (javadoc !== void 0 && schema.doc === void 0) {\n schema.doc = javadoc;\n }\n this._readAnnotations(schema);\n schema.name = tk.next({ id: \"name\" }).val;\n if (tk.next({ val: \"=\", silent: true })) {\n schema[\"default\"] = tk.next({ id: \"json\" }).val;\n }\n return schema;\n };\n Reader.prototype._readType = function(schema, top) {\n schema = schema || {};\n this._readAnnotations(schema);\n schema.type = this._tk.next({ id: \"name\" }).val;\n switch (schema.type) {\n case \"record\":\n case \"error\":\n return this._readRecord(schema);\n case \"fixed\":\n return this._readFixed(schema);\n case \"enum\":\n return this._readEnum(schema, top);\n case \"map\":\n return this._readMap(schema);\n case \"array\":\n return this._readArray(schema);\n case \"union\":\n if (Object.keys(schema).length > 1) {\n throw new Error(\"union annotations are not supported\");\n }\n return this._readUnion();\n default:\n var ref = this._typeRefs[schema.type];\n if (ref) {\n delete schema.type;\n utils.copyOwnProperties(ref, schema);\n }\n return Object.keys(schema).length > 1 ? schema : schema.type;\n }\n };\n Reader.prototype._readFixed = function(schema) {\n var tk = this._tk;\n if (!tk.next({ val: \"(\", silent: true })) {\n schema.name = tk.next({ id: \"name\" }).val;\n tk.next({ val: \"(\" });\n }\n schema.size = parseInt(tk.next({ id: \"number\" }).val);\n tk.next({ val: \")\" });\n return schema;\n };\n Reader.prototype._readMap = function(schema) {\n var tk = this._tk;\n var silent = this._implicitTags;\n var implicitTags = tk.next({ val: \"<\", silent }) === void 0;\n schema.values = this._readType();\n tk.next({ val: \">\", silent: implicitTags });\n return schema;\n };\n Reader.prototype._readArray = function(schema) {\n var tk = this._tk;\n var silent = this._implicitTags;\n var implicitTags = tk.next({ val: \"<\", silent }) === void 0;\n schema.items = this._readType();\n tk.next({ val: \">\", silent: implicitTags });\n return schema;\n };\n Reader.prototype._readEnum = function(schema, top) {\n var tk = this._tk;\n if (!tk.next({ val: \"{\", silent: true })) {\n schema.name = tk.next({ id: \"name\" }).val;\n tk.next({ val: \"{\" });\n }\n schema.symbols = [];\n do {\n schema.symbols.push(tk.next().val);\n } while (!tk.next({ val: \"}\", silent: true }) && tk.next({ val: \",\" }));\n if (top && tk.next({ val: \"=\", silent: true })) {\n schema.default = tk.next().val;\n tk.next({ val: \";\" });\n }\n return schema;\n };\n Reader.prototype._readUnion = function() {\n var tk = this._tk;\n var arr = [];\n tk.next({ val: \"{\" });\n do {\n arr.push(this._readType());\n } while (!tk.next({ val: \"}\", silent: true }) && tk.next({ val: \",\" }));\n return arr;\n };\n Reader.prototype._readRecord = function(schema) {\n var tk = this._tk;\n if (!tk.next({ val: \"{\", silent: true })) {\n schema.name = tk.next({ id: \"name\" }).val;\n tk.next({ val: \"{\" });\n }\n schema.fields = [];\n while (!tk.next({ val: \"}\", silent: true })) {\n schema.fields.push(this._readField());\n tk.next({ val: \";\" });\n }\n return schema;\n };\n Reader.prototype._readImports = function(imports, maybeMessage) {\n var tk = this._tk;\n var numImports = 0;\n var pos = tk.pos;\n while (tk.next({ val: \"import\", silent: true })) {\n if (!numImports && maybeMessage && tk.next({ val: \"(\", silent: true })) {\n tk.pos = pos;\n return;\n }\n var kind = tk.next({ id: \"name\" }).val;\n var fname = JSON.parse(tk.next({ id: \"string\" }).val);\n tk.next({ val: \";\" });\n imports.push({ kind, name: fname });\n numImports++;\n }\n return numImports;\n };\n function Tokenizer(str) {\n this._str = str;\n this.pos = 0;\n }\n Tokenizer.prototype.next = function(opts) {\n var token = { pos: this.pos, id: void 0, val: void 0 };\n var javadoc = this._skip(opts && opts.emitJavadoc);\n if (typeof javadoc == \"string\") {\n token.id = \"javadoc\";\n token.val = javadoc;\n } else {\n var pos = this.pos;\n var str = this._str;\n var c = str.charAt(pos);\n if (!c) {\n token.id = \"(eof)\";\n } else {\n if (opts && opts.id === \"json\") {\n token.id = \"json\";\n this.pos = this._endOfJson();\n } else if (c === '\"') {\n token.id = \"string\";\n this.pos = this._endOfString();\n } else if (/[0-9]/.test(c)) {\n token.id = \"number\";\n this.pos = this._endOf(/[0-9]/);\n } else if (/[`A-Za-z_.]/.test(c)) {\n token.id = \"name\";\n this.pos = this._endOf(/[`A-Za-z0-9_.]/);\n } else {\n token.id = \"operator\";\n this.pos = pos + 1;\n }\n token.val = str.slice(pos, this.pos);\n if (token.id === \"json\") {\n try {\n token.val = JSON.parse(token.val);\n } catch (err2) {\n throw this.error(\"invalid JSON\", token);\n }\n } else if (token.id === \"name\") {\n token.val = token.val.replace(/`/g, \"\");\n }\n }\n }\n var err;\n if (opts && opts.id && opts.id !== token.id) {\n err = this.error(f2(\"expected ID %s\", opts.id), token);\n } else if (opts && opts.val && opts.val !== token.val) {\n err = this.error(f2(\"expected value %s\", opts.val), token);\n }\n if (!err) {\n return token;\n } else if (opts && opts.silent) {\n this.pos = token.pos;\n return void 0;\n } else {\n throw err;\n }\n };\n Tokenizer.prototype.error = function(reason, context) {\n var isToken = typeof context != \"number\";\n var pos = isToken ? context.pos : context;\n var str = this._str;\n var lineNum = 1;\n var lineStart = 0;\n var i;\n for (i = 0; i < pos; i++) {\n if (str.charAt(i) === \"\\n\") {\n lineNum++;\n lineStart = i;\n }\n }\n var msg = isToken ? f2(\"invalid token %j: %s\", context, reason) : reason;\n var err = new Error(msg);\n err.token = isToken ? context : void 0;\n err.lineNum = lineNum;\n err.colNum = pos - lineStart;\n return err;\n };\n Tokenizer.prototype._skip = function(emitJavadoc) {\n var str = this._str;\n var isJavadoc = false;\n var pos, c;\n while ((c = str.charAt(this.pos)) && /\\s/.test(c)) {\n this.pos++;\n }\n pos = this.pos;\n if (c === \"/\") {\n switch (str.charAt(this.pos + 1)) {\n case \"/\":\n this.pos += 2;\n while ((c = str.charAt(this.pos)) && c !== \"\\n\") {\n this.pos++;\n }\n return this._skip(emitJavadoc);\n case \"*\":\n this.pos += 2;\n if (str.charAt(this.pos) === \"*\") {\n isJavadoc = true;\n }\n while (c = str.charAt(this.pos++)) {\n if (c === \"*\" && str.charAt(this.pos) === \"/\") {\n this.pos++;\n if (isJavadoc && emitJavadoc) {\n return extractJavadoc(str.slice(pos + 3, this.pos - 2));\n }\n return this._skip(emitJavadoc);\n }\n }\n throw this.error(\"unterminated comment\", pos);\n }\n }\n };\n Tokenizer.prototype._endOf = function(pat) {\n var pos = this.pos;\n var str = this._str;\n while (pat.test(str.charAt(pos))) {\n pos++;\n }\n return pos;\n };\n Tokenizer.prototype._endOfString = function() {\n var pos = this.pos + 1;\n var str = this._str;\n var c;\n while (c = str.charAt(pos)) {\n if (c === '\"') {\n return pos + 1;\n }\n if (c === \"\\\\\") {\n pos += 2;\n } else {\n pos++;\n }\n }\n throw this.error(\"unterminated string\", pos - 1);\n };\n Tokenizer.prototype._endOfJson = function() {\n var pos = utils.jsonEnd(this._str, this.pos);\n if (pos < 0) {\n throw this.error(\"invalid JSON\", pos);\n }\n return pos;\n };\n function extractJavadoc(str) {\n var lines = str.replace(/^[ \\t]+|[ \\t]+$/g, \"\").split(\"\\n\").map(function(line, i) {\n return i ? line.replace(/^\\s*\\*\\s?/, \"\") : line;\n });\n while (lines.length && !lines[0]) {\n lines.shift();\n }\n while (lines.length && !lines[lines.length - 1]) {\n lines.pop();\n }\n return lines.join(\"\\n\");\n }\n function protocolNamespace(protocol) {\n if (protocol.namespace) {\n return protocol.namespace;\n }\n var match = /^(.*)\\.[^.]+$/.exec(protocol.protocol);\n return match ? match[1] : void 0;\n }\n module.exports = {\n Tokenizer,\n assembleProtocol,\n read,\n readProtocol: Reader.readProtocol,\n readSchema: Reader.readSchema\n };\n }\n});\n\n// node_modules/avsc/lib/index.js\nvar require_lib = __commonJS({\n \"node_modules/avsc/lib/index.js\"(exports, module) {\n \"use strict\";\n var containers = require_containers();\n var services = require_services();\n var specs = require_specs();\n var types = require_types();\n var utils = require_utils();\n var buffer = __import_BUFFER;\n var fs = __import_FS;\n var util = __import_UTIL;\n var Buffer2 = buffer.Buffer;\n function parse2(any, opts) {\n var schemaOrProtocol = specs.read(any);\n return schemaOrProtocol.protocol ? services.Service.forProtocol(schemaOrProtocol, opts) : types.Type.forSchema(schemaOrProtocol, opts);\n }\n function extractFileHeader(path, opts) {\n opts = opts || {};\n var decode = opts.decode === void 0 ? true : !!opts.decode;\n var size = Math.max(opts.size || 4096, 4);\n var buf = utils.newBuffer(size);\n var fd = fs.openSync(path, \"r\");\n try {\n var pos = fs.readSync(fd, buf, 0, size);\n if (pos < 4 || !containers.MAGIC_BYTES.equals(buf.slice(0, 4))) {\n return null;\n }\n var tap = new utils.Tap(buf);\n var header = null;\n do {\n header = containers.HEADER_TYPE._read(tap);\n } while (!isValid());\n if (decode !== false) {\n var meta = header.meta;\n meta[\"avro.schema\"] = JSON.parse(meta[\"avro.schema\"].toString());\n if (meta[\"avro.codec\"] !== void 0) {\n meta[\"avro.codec\"] = meta[\"avro.codec\"].toString();\n }\n }\n return header;\n } finally {\n fs.closeSync(fd);\n }\n function isValid() {\n if (tap.isValid()) {\n return true;\n }\n var len = 2 * tap.buf.length;\n var buf2 = utils.newBuffer(len);\n len = fs.readSync(fd, buf2, 0, len);\n tap.buf = Buffer2.concat([tap.buf, buf2]);\n tap.pos = 0;\n return false;\n }\n }\n function createFileDecoder(path, opts) {\n return fs.createReadStream(path).pipe(new containers.streams.BlockDecoder(opts));\n }\n function createFileEncoder(path, schema, opts) {\n var encoder = new containers.streams.BlockEncoder(schema, opts);\n encoder.pipe(fs.createWriteStream(path, { defaultEncoding: \"binary\" }));\n return encoder;\n }\n module.exports = {\n Service: services.Service,\n Type: types.Type,\n assembleProtocol: specs.assembleProtocol,\n createFileDecoder,\n createFileEncoder,\n discoverProtocol: services.discoverProtocol,\n extractFileHeader,\n parse: parse2,\n readProtocol: specs.readProtocol,\n readSchema: specs.readSchema,\n streams: containers.streams,\n types: types.builtins,\n // Deprecated exports.\n Protocol: services.Service,\n assemble: util.deprecate(\n specs.assembleProtocol,\n \"use `assembleProtocol` instead\"\n ),\n combine: util.deprecate(\n types.Type.forTypes,\n \"use `Type.forTypes` intead\"\n ),\n infer: util.deprecate(\n types.Type.forValue,\n \"use `Type.forValue` instead\"\n )\n };\n }\n});\n\n// node_modules/ultralight-s3/lib/index.min.js\nvar x = \"AWS4-HMAC-SHA256\";\nvar K = \"aws4_request\";\nvar O = \"s3\";\nvar v = \"2\";\nvar E = \"UNSIGNED-PAYLOAD\";\nvar W = \"application/octet-stream\";\nvar M = \"application/xml\";\nvar w = \"application/json\";\nvar X = [\"accessKeyId\", \"secretAccessKey\", \"sessionToken\", \"password\"];\nvar f = \"x-amz-content-sha256\";\nvar Z = \"x-amz-date\";\nvar V = \"host\";\nvar J = \"Authorization\";\nvar m = \"Content-Type\";\nvar T = \"Content-Length\";\nvar P = \"etag\";\nvar C = \"last-modified\";\nvar u = \"ultralight-s3 Module: \";\nvar ee = `${u}accessKeyId must be a non-empty string`;\nvar te = `${u}secretAccessKey must be a non-empty string`;\nvar se = `${u}endpoint must be a non-empty string`;\nvar re = `${u}bucketName must be a non-empty string`;\nvar j = `${u}key must be a non-empty string`;\nvar $ = `${u}uploadId must be a non-empty string`;\nvar L = `${u}parts must be a non-empty array`;\nvar k = `${u}Each part must have a partNumber (number) and ETag (string)`;\nvar D = `${u}data must be a Buffer or string`;\nvar B = `${u}prefix must be a string`;\nvar F = `${u}maxKeys must be a positive integer`;\nvar G = `${u}delimiter must be a string`;\nvar z = crypto.createHmac || (await import(\"node:crypto\")).createHmac;\nvar Q = crypto.createHash || (await import(\"node:crypto\")).createHash;\ntypeof z > \"u\" && typeof Q > \"u\" && console.error(\"ultralight-S3 Module: Crypto functions are not available, please report the issue with necessary description: https://github.com/sentienhq/ultralight-s3/issues\");\nvar ne = { contents: true };\nvar oe = (p) => `%${p.charCodeAt(0).toString(16).toUpperCase()}`;\nvar q = (p) => encodeURIComponent(p).replace(/[!'()*]/g, oe);\nvar y = (p) => q(p).replace(/%2F/g, \"/\");\nvar N = class {\n constructor({ accessKeyId: e, secretAccessKey: t, endpoint: r, bucketName: n, region: o = \"auto\", maxRequestSizeInBytes: i = 5242880, requestAbortTimeout: a = void 0, logger: c = void 0 }) {\n this.getBucketName = () => this.bucketName, this.setBucketName = (s) => {\n this.bucketName = s;\n }, this.getRegion = () => this.region, this.setRegion = (s) => {\n this.region = s;\n }, this.getEndpoint = () => this.endpoint, this.setEndpoint = (s) => {\n this.endpoint = s;\n }, this.getMaxRequestSizeInBytes = () => this.maxRequestSizeInBytes, this.setMaxRequestSizeInBytes = (s) => {\n this.maxRequestSizeInBytes = s;\n }, this.sanitizeETag = (s) => H(s), this.getProps = () => ({ accessKeyId: this.accessKeyId, secretAccessKey: this.secretAccessKey, region: this.region, bucket: this.bucketName, endpoint: this.endpoint, maxRequestSizeInBytes: this.maxRequestSizeInBytes, requestAbortTimeout: this.requestAbortTimeout, logger: this.logger }), this.setProps = (s) => {\n this._validateConstructorParams(s.accessKeyId, s.secretAccessKey, s.bucketName, s.endpoint), this.accessKeyId = s.accessKeyId, this.secretAccessKey = s.secretAccessKey, this.region = s.region || \"auto\", this.bucketName = s.bucketName, this.endpoint = s.endpoint, this.maxRequestSizeInBytes = s.maxRequestSizeInBytes || 5242880, this.requestAbortTimeout = s.requestAbortTimeout, this.logger = s.logger;\n }, this._validateConstructorParams(e, t, r, n), this.accessKeyId = e, this.secretAccessKey = t, this.endpoint = r, this.bucketName = n, this.region = o, this.maxRequestSizeInBytes = i, this.requestAbortTimeout = a, this.logger = c;\n }\n _validateConstructorParams(e, t, r, n) {\n if (typeof e != \"string\" || e.trim().length === 0) throw new TypeError(ee);\n if (typeof t != \"string\" || t.trim().length === 0) throw new TypeError(te);\n if (typeof r != \"string\" || r.trim().length === 0) throw new TypeError(se);\n if (typeof n != \"string\" || n.trim().length === 0) throw new TypeError(re);\n }\n _checkMethodHeadnGet(e) {\n if (e !== \"GET\" && e !== \"HEAD\") throw this._log(\"error\", `${u}method must be either GET or HEAD`), new Error(\"method must be either GET or HEAD\");\n }\n _checkKey(e) {\n if (typeof e != \"string\" || e.trim().length === 0) throw this._log(\"error\", j), new TypeError(j);\n }\n _checkDelimiter(e) {\n if (typeof e != \"string\" || e.trim().length === 0) throw this._log(\"error\", G), new TypeError(G);\n }\n _checkPrefix(e) {\n if (typeof e != \"string\") throw this._log(\"error\", B), new TypeError(B);\n }\n _checkMaxKeys(e) {\n if (typeof e != \"number\" || e <= 0) throw this._log(\"error\", F), new TypeError(F);\n }\n _checkOpts(e) {\n if (typeof e != \"object\") throw this._log(\"error\", `${u}opts must be an object`), new TypeError(`${u}opts must be an object`);\n }\n _log(e, t, r = {}) {\n if (this.logger && typeof this.logger[e] == \"function\") {\n let n = (a) => typeof a != \"object\" || a === null ? a : Object.keys(a).reduce((c, s) => (X.includes(s.toLowerCase()) ? c[s] = \"[REDACTED]\" : typeof a[s] == \"object\" && a[s] !== null ? c[s] = n(a[s]) : c[s] = a[s], c), Array.isArray(a) ? [] : {}), o = n(r), i = { timestamp: (/* @__PURE__ */ new Date()).toISOString(), level: e, message: t, ...o, context: n({ bucketName: this.bucketName, region: this.region, endpoint: this.endpoint, accessKeyId: this.accessKeyId ? `${this.accessKeyId.substring(0, 4)}...` : void 0 }) };\n this.logger[e](i);\n }\n }\n async getContentLength(e) {\n this._checkKey(e);\n let t = { [f]: E }, r = y(e), { url: n, headers: o } = await this._sign(\"HEAD\", r, {}, t, \"\"), a = (await this._sendRequest(n, \"HEAD\", o)).headers.get(T);\n return a ? parseInt(a, 10) : 0;\n }\n async bucketExists() {\n let e = { [f]: E }, { url: t, headers: r } = await this._sign(\"HEAD\", \"\", {}, e, \"\"), n = await this._sendRequest(t, \"HEAD\", r);\n return !!(n.ok && n.status === 200);\n }\n async fileExists(e, t = {}) {\n this._checkKey(e);\n let { filteredOpts: r, conditionalHeaders: n } = this._filterIfHeaders(t), o = { [f]: E, ...n }, i = y(e), { url: a, headers: c } = await this._sign(\"HEAD\", i, r, o, \"\");\n try {\n let s = await this._sendRequest(a, \"HEAD\", c, \"\", [200, 404, 412, 304]);\n return s.status === 404 ? false : s.status === 412 || s.status === 304 ? null : s.ok && s.status === 200 ? true : (this._handleErrorResponse(s), false);\n } catch (s) {\n let l = s instanceof Error ? s.message : String(s);\n throw this._log(\"error\", `${u}Failed to check if file exists: ${l}`), new Error(`${u}Failed to check if file exists: ${l}`);\n }\n }\n async _sign(e, t, r, n, o) {\n let i = (/* @__PURE__ */ new Date()).toISOString().replace(/[:-]|\\.\\d{3}/g, \"\"), a = typeof t == \"string\" && t.length > 0 ? new URL(t, this.endpoint) : new URL(this.endpoint);\n a.pathname = `/${encodeURI(this.bucketName)}${a.pathname}`, n[f] = o ? await U(o) : E, n[Z] = i, n[V] = a.host;\n let c = this._buildCanonicalHeaders(n), s = Object.keys(n).map((_) => _.toLowerCase()).sort().join(\";\"), l = await this._buildCanonicalRequest(e, a, r, c, s, o), h = await this._buildStringToSign(i, l), d = await this._calculateSignature(i, h), g = this._buildAuthorizationHeader(i, s, d);\n return n[J] = g, { url: a.toString(), headers: n };\n }\n _buildCanonicalHeaders(e) {\n return Object.entries(e).map(([t, r]) => `${t.toLowerCase()}:${String(r).trim()}`).sort().join(`\n`);\n }\n async _buildCanonicalRequest(e, t, r, n, o, i) {\n return [e, t.pathname, this._buildCanonicalQueryString(r), `${n}\n`, o, i ? await U(i) : E].join(`\n`);\n }\n async _buildStringToSign(e, t) {\n let r = [e.slice(0, 8), this.region, O, K].join(\"/\");\n return [x, e, r, await U(t)].join(`\n`);\n }\n async _calculateSignature(e, t) {\n let r = await this._getSignatureKey(e.slice(0, 8));\n return A(r, t, \"hex\");\n }\n _buildAuthorizationHeader(e, t, r) {\n let n = [e.slice(0, 8), this.region, O, K].join(\"/\");\n return [`${x} Credential=${this.accessKeyId}/${n}`, `SignedHeaders=${t}`, `Signature=${r}`].join(\", \");\n }\n _filterIfHeaders(e) {\n let t = {}, r = {}, n = [\"if-match\", \"if-none-match\", \"if-modified-since\", \"if-unmodified-since\"];\n for (let [o, i] of Object.entries(e)) n.includes(o) ? r[o] = i : t[o] = i;\n return { filteredOpts: t, conditionalHeaders: r };\n }\n async list(e = \"/\", t = \"\", r = 1e3, n = \"GET\", o = {}) {\n this._checkDelimiter(e), this._checkPrefix(t), this._checkMaxKeys(r), this._checkMethodHeadnGet(n), this._checkOpts(o), this._log(\"info\", `Listing objects in ${t}`);\n let i = { \"list-type\": v, \"max-keys\": String(r), ...o };\n t.length > 0 && (i.prefix = t);\n let a = { [m]: w, [f]: E }, c = e === \"/\" ? e : q(e), { url: s, headers: l } = await this._sign(\"GET\", c, i, a, \"\"), h = `${s}?${new URLSearchParams(i)}`, d = await this._sendRequest(h, \"GET\", l), g = await d.text();\n if (n === \"HEAD\") {\n let R = d.headers.get(T), S = d.headers.get(C), Y = d.headers.get(P);\n return { size: R ? +R : void 0, mtime: S ? new Date(S) : void 0, ETag: Y || void 0 };\n }\n let _ = b(g), I = _.listBucketResult || _.error || _;\n return I.contents || I;\n }\n async listMultiPartUploads(e = \"/\", t = \"\", r = \"GET\", n = {}) {\n var o, i, a;\n this._checkDelimiter(e), this._checkPrefix(t), this._checkMethodHeadnGet(r), this._checkOpts(n), this._log(\"info\", `Listing multipart uploads in ${t}`);\n let c = { uploads: \"\", ...n }, s = { [m]: w, [f]: E }, l = e === \"/\" ? e : q(e), { url: h, headers: d } = await this._sign(\"GET\", l, c, s, \"\"), g = `${h}?${new URLSearchParams(c)}`, _ = await this._sendRequest(g, \"GET\", d), I = await _.text();\n if (r === \"HEAD\") return { size: +((o = _.headers.get(T)) !== null && o !== void 0 ? o : \"0\"), mtime: new Date((i = _.headers.get(C)) !== null && i !== void 0 ? i : \"\"), ETag: (a = _.headers.get(P)) !== null && a !== void 0 ? a : \"\" };\n let R = b(I), S = R.listMultipartUploadsResult || R.error || R;\n return S.uploads || S;\n }\n async get(e, t = {}) {\n this._checkKey(e), this._log(\"info\", `Getting object ${e}`);\n let { filteredOpts: r, conditionalHeaders: n } = this._filterIfHeaders(t), o = { [m]: w, [f]: E, ...n }, i = y(e), { url: a, headers: c } = await this._sign(\"GET\", i, r, o, \"\"), s = await this._sendRequest(a, \"GET\", c, \"\", [200, 404, 412, 304]);\n if (s.status === 404 || s.status === 412 || s.status === 304) return this._log(\"error\", `Failed to get object. Status: ${s.status}`), null;\n if (!s.ok) throw this._log(\"error\", `Failed to get object. Status: ${s.status}`), new Error(`Failed to get object. Status: ${s.status}`);\n return s.text();\n }\n async getObjectWithETag(e, t = {}) {\n this._checkKey(e), this._log(\"info\", `Getting object ${e}`);\n let { filteredOpts: r, conditionalHeaders: n } = this._filterIfHeaders(t), o = { [m]: w, [f]: E, ...n }, i = y(e), { url: a, headers: c } = await this._sign(\"GET\", i, r, o, \"\");\n try {\n let s = await this._sendRequest(a, \"GET\", c, \"\", [200, 404, 412, 304]);\n if (s.status === 404 || s.status === 412 || s.status === 304) return this._log(\"error\", `Failed to get object. Status: ${s.status}`), { etag: null, data: null };\n if (!s.ok) throw this._log(\"error\", `Failed to get object. Status: ${s.status}`), new Error(`Failed to get object. Status: ${s.status}`);\n let l = s.headers.get(\"etag\");\n if (!l) throw new Error(\"ETag not found in response headers\");\n let h = await s.text();\n return { etag: H(l), data: h };\n } catch (s) {\n throw this._log(\"error\", `Error getting object ${e} with ETag: ${s}`), s;\n }\n }\n async getEtag(e, t = {}) {\n this._checkKey(e), this._log(\"info\", `Getting etag object ${e}`);\n let { filteredOpts: r, conditionalHeaders: n } = this._filterIfHeaders(t), o = { [m]: w, [f]: E, ...n }, i = y(e), { url: a, headers: c } = await this._sign(\"HEAD\", i, r, o, \"\"), s = await this._sendRequest(a, \"HEAD\", c, \"\", [200, 412, 304]);\n if (this._log(\"info\", `Response status: ${s.status, s.statusText}`), s.status === 412 || s.status === 304) return null;\n let l = s.headers.get(\"etag\");\n if (!l) throw this._log(\"error\", \"ETag not found in response headers\"), new Error(\"ETag not found in response headers\");\n return H(l);\n }\n async getResponse(e, t = true, r = 0, n = this.maxRequestSizeInBytes, o = {}) {\n this._checkKey(e);\n let { filteredOpts: i, conditionalHeaders: a } = this._filterIfHeaders({ ...o }), c = { [m]: w, [f]: E, ...t ? {} : { range: `bytes=${r}-${n - 1}` }, ...a }, s = y(e), { url: l, headers: h } = await this._sign(\"GET\", s, i, c, \"\"), d = `${l}?${new URLSearchParams(i)}`;\n return this._sendRequest(d, \"GET\", h);\n }\n async put(e, t) {\n if (this._checkKey(e), !(t instanceof Buffer || typeof t == \"string\")) throw this._log(\"error\", D), new TypeError(D);\n this._log(\"info\", `Uploading object ${e}`);\n let r = typeof t == \"string\" ? Buffer.byteLength(t) : t.length, n = { [T]: r }, o = y(e), { url: i, headers: a } = await this._sign(\"PUT\", o, {}, n, t);\n return await this._sendRequest(i, \"PUT\", a, t);\n }\n async getMultipartUploadId(e, t = W) {\n if (this._checkKey(e), typeof t != \"string\") throw this._log(\"error\", `${u}fileType must be a string`), new TypeError(`${u}fileType must be a string`);\n this._log(\"info\", `Initiating multipart upload for object ${e}`);\n let r = { uploads: \"\" }, n = { [m]: t, [f]: E }, o = y(e), { url: i, headers: a } = await this._sign(\"POST\", o, r, n, \"\"), c = `${i}?${new URLSearchParams(r)}`, l = await (await this._sendRequest(c, \"POST\", a)).text(), h = b(l);\n if (typeof h == \"object\" && h !== null && \"error\" in h && typeof h.error == \"object\" && h.error !== null && \"message\" in h.error) {\n let d = String(h.error.message);\n throw this._log(\"error\", `${u}Failed to abort multipart upload: ${d}`), new Error(`${u}Failed to abort multipart upload: ${d}`);\n }\n if (typeof h == \"object\" && h !== null) {\n if (!h.initiateMultipartUploadResult || !h.initiateMultipartUploadResult.uploadId) throw this._log(\"error\", `${u}Failed to create multipart upload: no uploadId in response`), new Error(`${u}Failed to create multipart upload: Missing upload ID in response`);\n return h.initiateMultipartUploadResult.uploadId;\n } else throw this._log(\"error\", `${u}Failed to create multipart upload: unexpected response format`), new Error(`${u}Failed to create multipart upload: Unexpected response format`);\n }\n async uploadPart(e, t, r, n, o = {}) {\n this._validateUploadPartParams(e, t, r, n, o);\n let i = { uploadId: r, partNumber: n, ...o }, a = { [T]: t.length }, c = y(e), { url: s, headers: l } = await this._sign(\"PUT\", c, i, a, t), h = `${s}?${new URLSearchParams(i)}`, d = await this._sendRequest(h, \"PUT\", l, t), g = H(d.headers.get(\"etag\") || \"\");\n return { partNumber: n, ETag: g };\n }\n _validateUploadPartParams(e, t, r, n, o) {\n if (this._checkKey(e), !(t instanceof Buffer || typeof t == \"string\")) throw this._log(\"error\", D), new TypeError(D);\n if (typeof r != \"string\" || r.trim().length === 0) throw this._log(\"error\", $), new TypeError($);\n if (!Number.isInteger(n) || n <= 0) throw this._log(\"error\", `${u}partNumber must be a positive integer`), new TypeError(`${u}partNumber must be a positive integer`);\n this._checkOpts(o);\n }\n async completeMultipartUpload(e, t, r) {\n if (this._checkKey(e), typeof t != \"string\" || t.trim().length === 0) throw this._log(\"error\", $), new TypeError($);\n if (!Array.isArray(r) || r.length === 0) throw this._log(\"error\", L), new TypeError(L);\n if (!r.every((_) => typeof _.partNumber == \"number\" && typeof _.ETag == \"string\")) throw this._log(\"error\", k), new TypeError(k);\n this._log(\"info\", `Complete multipart upload ${t} for object ${e}`);\n let n = { uploadId: t }, o = this._buildCompleteMultipartUploadXml(r), i = { [m]: M, [T]: Buffer.byteLength(o).toString(), [f]: await U(o) }, a = y(e), { url: c, headers: s } = await this._sign(\"POST\", a, n, i, o), l = `${c}?${new URLSearchParams(n)}`, d = await (await this._sendRequest(l, \"POST\", s, o)).text(), g = b(d);\n if (typeof g == \"object\" && g !== null && \"error\" in g && typeof g.error == \"object\" && g.error !== null && \"message\" in g.error) {\n let _ = String(g.error.message);\n throw this._log(\"error\", `${u}Failed to abort multipart upload: ${_}`), new Error(`${u}Failed to abort multipart upload: ${_}`);\n }\n return g.completeMultipartUploadResult;\n }\n async abortMultipartUpload(e, t) {\n if (this._checkKey(e), typeof t != \"string\" || t.trim().length === 0) throw this._log(\"error\", $), new TypeError($);\n this._log(\"info\", `Aborting multipart upload ${t} for object ${e}`);\n let r = { uploadId: t }, n = { [m]: M, [f]: E };\n try {\n let o = y(e), { url: i, headers: a } = await this._sign(\"DELETE\", o, r, n, \"\"), c = `${i}?${new URLSearchParams(r)}`, s = await this._sendRequest(c, \"DELETE\", a);\n if (s.ok) {\n let l = await s.text(), h = b(l);\n if (typeof h == \"object\" && h !== null && \"error\" in h && typeof h.error == \"object\" && h.error !== null && \"message\" in h.error) {\n let d = String(h.error.message);\n throw this._log(\"error\", `${u}Failed to abort multipart upload: ${d}`), new Error(`${u}Failed to abort multipart upload: ${d}`);\n }\n return { status: \"Aborted\", key: e, uploadId: t, response: h };\n } else throw this._log(\"error\", `${u}Abort request failed with status ${s.status}`), new Error(`${u}Abort request failed with status ${s.status}`);\n } catch (o) {\n let i = o instanceof Error ? o.message : String(o);\n throw this._log(\"error\", `${u}Failed to abort multipart upload for key ${e}: ${i}`), new Error(`${u}Failed to abort multipart upload for key ${e}: ${i}`);\n }\n }\n _buildCompleteMultipartUploadXml(e) {\n return `\n \n ${e.map((t) => `\n \n ${t.partNumber}\n ${t.ETag}\n \n `).join(\"\")}\n \n `;\n }\n async delete(e) {\n this._checkKey(e), this._log(\"info\", `Deleting object ${e}`);\n let t = { [m]: w, [f]: E }, r = y(e), { url: n, headers: o } = await this._sign(\"DELETE\", r, {}, t, \"\"), i = await this._sendRequest(n, \"DELETE\", o);\n return i.status === 204 || i.status === 200;\n }\n async _sendRequest(e, t, r, n, o = []) {\n this._log(\"info\", `Sending ${t} request to ${e}, headers: ${JSON.stringify(r)}`);\n let i = await fetch(e, { method: t, headers: r, body: [\"GET\", \"HEAD\"].includes(t) ? void 0 : n, signal: this.requestAbortTimeout !== void 0 ? AbortSignal.timeout(this.requestAbortTimeout) : void 0 });\n return !i.ok && !o.includes(i.status) && await this._handleErrorResponse(i), i;\n }\n async _handleErrorResponse(e) {\n let t = await e.text(), r = e.headers.get(\"x-amz-error-code\") || \"Unknown\", n = e.headers.get(\"x-amz-error-message\") || e.statusText;\n throw this._log(\"error\", `${u}Request failed with status ${e.status}: ${r} - ${n},err body: ${t}`), new Error(`${u}Request failed with status ${e.status}: ${r} - ${n}, err body: ${t}`);\n }\n _buildCanonicalQueryString(e) {\n return Object.keys(e).length < 1 ? \"\" : Object.keys(e).sort().map((t) => `${encodeURIComponent(t)}=${encodeURIComponent(e[t])}`).join(\"&\");\n }\n async _getSignatureKey(e) {\n let t = await A(`AWS4${this.secretAccessKey}`, e), r = await A(t, this.region), n = await A(r, O);\n return A(n, K);\n }\n};\nvar U = async (p) => {\n let e = Q(\"sha256\");\n return e.update(p), e.digest(\"hex\");\n};\nvar A = async (p, e, t) => {\n let r = z(\"sha256\", p);\n return r.update(e), r.digest(t);\n};\nvar H = (p) => {\n let e = { '\"': \"\", \""\": \"\", \""\": \"\", \""\": \"\", \""\": \"\" };\n return p.replace(/^(\"|"|")|(\"|"|")$/g, (t) => e[t]);\n};\nvar b = (p) => {\n let e = (o) => o.replace(/"/g, '\"').replace(/'/g, \"'\").replace(/</g, \"<\").replace(/>/g, \">\").replace(/&/g, \"&\"), t = {}, r = /<(\\w)([-\\w]+)(?:\\/|[^>]*>((?:(?!<\\1)[\\s\\S])*)<\\/\\1\\2)>/gm, n;\n for (; n = r.exec(p); ) {\n let [, o, i, a] = n, c = o.toLowerCase() + i, s = a != null ? b(a) : true;\n typeof s == \"string\" ? t[c] = H(e(s)) : Array.isArray(t[c]) ? t[c].push(s) : t[c] = t[c] != null ? [t[c], s] : ne[c] ? [s] : s;\n }\n return Object.keys(t).length ? t : e(p);\n};\n\n// src/lowstorage.ts\nvar import_avsc = __toESM(require_lib(), 1);\n\n// src/errors.ts\nvar lowstorage_ERROR_CODES = {\n MISSING_ARGUMENT: \"MISSING_ARGUMENT\",\n COLLECTION_EXISTS: \"COLLECTION_EXISTS\",\n CREATE_COLLECTION_ERROR: \"CREATE_COLLECTION_ERROR\",\n RENAME_COLLECTION_ERROR: \"RENAME_COLLECTION_ERROR\",\n REMOVE_COLLECTION_ERROR: \"REMOVE_COLLECTION_ERROR\",\n UPDATE_COLLECTION_SCHEMA_ERROR: \"UPDATE_COLLECTION_SCHEMA_ERROR\",\n COLLECTION_NOT_FOUND: \"COLLECTION_NOT_FOUND\",\n SCHEMA_VALIDATION_ERROR: \"SCHEMA_VALIDATION_ERROR\",\n DOCUMENT_VALIDATION_ERROR: \"DOCUMENT_VALIDATION_ERROR\",\n S3_OPERATION_ERROR: \"S3_OPERATION_ERROR\",\n FIND_ERROR: \"FIND_ERROR\",\n FIND_ONE_ERROR: \"FIND_ONE_ERROR\",\n SAVE_DATA_ERROR: \"SAVE_DATA_ERROR\",\n INSERT_ERROR: \"INSERT_ERROR\",\n UPDATE_ERROR: \"UPDATE_ERROR\",\n UPDATE_ONE_ERROR: \"UPDATE_ONE_ERROR\",\n DELETE_ERROR: \"DELETE_ERROR\",\n COUNT_ERROR: \"COUNT_ERROR\",\n UNKNOWN_ERROR: \"UNKNOWN_ERROR\"\n};\nvar lowstorageError = class extends Error {\n constructor(message, code = lowstorage_ERROR_CODES.UNKNOWN_ERROR) {\n super(`lowstorageError: ${message} :: code: ${code}`);\n this.name = this.constructor.name;\n this.code = code;\n Error.captureStackTrace(this, this.constructor);\n }\n};\nvar SchemaValidationError = class extends lowstorageError {\n constructor(message, code = lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR) {\n super(message, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR);\n }\n};\nvar DocumentValidationError = class extends lowstorageError {\n constructor(message, code = lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR) {\n super(message, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR);\n }\n};\nvar S3OperationError = class extends lowstorageError {\n constructor(message, operation) {\n super(`S3 ${operation} operation failed: ${message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n};\n\n// src/helpers.ts\nimport { randomUUID } from \"node:crypto\";\nvar matchesQuery = (document, query) => {\n return Object.keys(query).every((key) => document[key] === query[key]);\n};\nvar generateUUID = async () => {\n if (typeof randomUUID !== \"undefined\" && typeof randomUUID === \"function\") {\n return randomUUID();\n }\n if (typeof crypto !== \"undefined\" && typeof crypto === \"object\" && typeof crypto.randomUUID === \"function\") {\n return crypto.randomUUID();\n }\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, function(c) {\n var r = Math.random() * 16 | 0, v2 = c === \"x\" ? r : r & 3 | 8;\n return v2.toString(16);\n });\n};\nvar ensureIdFieldInSchema = (schema) => {\n const idField = {\n name: \"_id\",\n type: \"string\",\n size: 16,\n logicalType: \"UUID\"\n };\n if (typeof schema === \"undefined\" || schema === null) {\n return schema;\n }\n if (\"type\" in schema && schema.type === \"record\" && \"fields\" in schema && Array.isArray(schema.fields)) {\n const hasIdField = schema.fields.some((field) => field.name === \"_id\");\n if (!hasIdField) {\n schema.fields.unshift(idField);\n }\n } else if (\"type\" in schema && schema.type === \"array\" && \"items\" in schema && schema.items !== null && typeof schema.items === \"object\" && \"type\" in schema.items && schema.items.type === \"record\" && \"fields\" in schema.items && Array.isArray(schema.items.fields)) {\n const hasIdField = schema.items.fields.some((field) => field.name === \"_id\");\n if (!hasIdField) {\n schema.items.fields.unshift(idField);\n }\n }\n return schema;\n};\n\n// src/lowstorage.ts\nvar MODULE_NAME = \"lowstorage\";\nvar DEFAULT_DELIMITER = \"/\";\nvar PROJECT_DIR_PREFIX = \"lowstorage\";\nvar COL_SUFFIX = \".avro\";\nvar CHUNG_1MB = 1024 * 1024;\nvar CHUNG_5MB = 5 * CHUNG_1MB;\nvar EMPTY_DATA = Buffer.from(\"\", \"utf8\");\nvar errorValidationFn = (errorCode = lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR) => {\n throw new DocumentValidationError(`${MODULE_NAME}: Invalid document or schema ${errorCode}`);\n};\nvar _hasColName = (colName = \"\") => {\n if (colName.trim() === \"\" || colName === null || typeof colName === \"undefined\" || colName.length > 255 || colName === null) {\n throw new lowstorageError(`${MODULE_NAME}: Collection name is required, null or too long`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n }\n};\nvar lowstorage = class {\n constructor(options) {\n this._checkArgs = (args) => {\n const requiredFields = [\"accessKeyId\", \"secretAccessKey\", \"endpoint\", \"bucketName\"];\n for (const field of requiredFields) {\n if (!args[field]) {\n throw new lowstorageError(`${MODULE_NAME}: ${field} is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n }\n }\n };\n /**\n * Get the S3 instance associated with the lowstorage instance.\n * @returns {S3} The S3 instance. Use this to perform S3 operations. Check for ultralight-s3 for more details.\n */\n this.s3 = () => {\n return this._s3;\n };\n this._checkArgs(options);\n this._schemas = /* @__PURE__ */ new Map();\n this._s3 = new N(options);\n this._dirPrefix = options.dirPrefix || PROJECT_DIR_PREFIX;\n this._avroParse = import_avsc.Type;\n }\n /**\n * List all collections.\n * @returns {Promise} An array of collection names.\n * @throws {S3OperationError} If there's an error during S3 operation.\n */\n async listCollections() {\n try {\n const listed = await this._s3.list(DEFAULT_DELIMITER, this._dirPrefix);\n if (Array.isArray(listed)) {\n return listed.map((entry) => entry.key.slice(this._dirPrefix.length + 1, -COL_SUFFIX.length));\n } else if (typeof listed === \"object\" && listed !== null && \"keyCount\" in listed && listed.keyCount === \"0\") {\n return [];\n }\n return [];\n } catch (error) {\n throw new S3OperationError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n }\n /**\n * Check if a collection exists.\n * @param {string} colName - The name of the collection.\n * @returns {Promise} True if the collection exists, false otherwise.\n * @throws {lowstorageError} If there's an error.\n */\n async collectionExists(colName = \"\") {\n try {\n _hasColName(colName);\n const exists = await this._s3.fileExists(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`);\n return !!exists;\n } catch (error) {\n if (error.message.includes(\"Not Found\")) {\n return false;\n }\n throw new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND);\n }\n }\n /**\n * Create a new collection.\n * @param {string} colName - The name of the collection.\n * @param {Object} [schema] - The schema for the collection.\n * @param {Array} [data=[]] - The initial data for the collection.\n * @returns {Promise} A Promise that resolves to a Collection object.\n * @throws {lowstorageError} If there's an error.\n */\n async createCollection(colName = \"\", schema, data = []) {\n try {\n _hasColName(colName);\n const exists = await this.collectionExists(colName);\n if (!exists) {\n if (typeof schema !== \"undefined\" && schema !== null) {\n try {\n const type = this._avroParse.forSchema(schema);\n if (!type) {\n throw new SchemaValidationError(\n `${MODULE_NAME}: Schema is invalid: ${schema} ${lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR}`\n );\n }\n } catch (error) {\n throw new SchemaValidationError(`${MODULE_NAME}: Schema is invalid: ${schema}`, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR);\n }\n }\n if (data.length > 0 && schema) {\n const wrapperType = this._avroParse.forSchema({ type: \"array\", items: schema });\n await this._s3.put(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`, wrapperType.toBuffer(data));\n } else {\n await this._s3.put(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`, EMPTY_DATA);\n }\n return this.collection(colName, schema, false);\n }\n throw new lowstorageError(`${MODULE_NAME}: Collection ${colName} already exists`, lowstorage_ERROR_CODES.COLLECTION_EXISTS);\n } catch (error) {\n if (error instanceof lowstorageError) {\n throw error;\n }\n throw new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.CREATE_COLLECTION_ERROR);\n }\n }\n /**\n * Remove a collection.\n * @param {string} colName - The name of the collection.\n * @returns {Promise} A Promise that resolves to true if the collection is removed, false otherwise.\n * @throws {lowstorageError} If there's an error.\n */\n async removeCollection(colName = \"\") {\n try {\n _hasColName(colName);\n const exists = await this.collectionExists(colName);\n if (exists) {\n await this._s3.delete(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`);\n const exists2 = await this.collectionExists(colName);\n if (typeof exists2 === \"boolean\") {\n if (!exists2) {\n this._schemas.delete(colName);\n return true;\n }\n throw new lowstorageError(`${MODULE_NAME}: Failed to delete collection ${colName}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n throw new S3OperationError(`${MODULE_NAME}: Failed to delete collection ${colName}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n throw new lowstorageError(`${MODULE_NAME}: Collection ${colName} does not exist`, lowstorage_ERROR_CODES.REMOVE_COLLECTION_ERROR);\n } catch (error) {\n if (error instanceof S3OperationError) {\n throw error;\n }\n throw new lowstorageError(\n `${MODULE_NAME}: Failed to remove collection: ${error.message}`,\n lowstorage_ERROR_CODES.REMOVE_COLLECTION_ERROR\n );\n }\n }\n /**\n * Get or create a collection.\n * @param {string} colName - The name of the collection.\n * @param {Object} [schema] - The schema for the collection.\n * @param {boolean} [autoCreate=true] - Whether to automatically create the collection if it doesn't exist.\n * @returns {Promise} A Promise that resolves to a Collection object.\n * @throws {lowstorageError} If there's an error.\n */\n async collection(colName = \"\", schema, autoCreate = true) {\n try {\n _hasColName(colName);\n const colPath = `${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`;\n const exists = await this._s3.fileExists(colPath);\n if (!exists) {\n if (!autoCreate) {\n throw new lowstorageError(`${MODULE_NAME}: Collection ${colName} does not exist`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND);\n }\n await this._s3.put(colPath, EMPTY_DATA);\n }\n const colSchema = schema || this._schemas.get(colName) || void 0;\n return new Collection(colName, colSchema, this._s3, this._dirPrefix);\n } catch (error) {\n if (error.message.includes(\"unknown type\")) {\n throw new SchemaValidationError(\n `${MODULE_NAME}: Schema input is invalid: ${error.message}`,\n lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR\n );\n }\n throw new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND);\n }\n }\n};\nvar Collection = class _Collection {\n constructor(colName = \"\", schema, s3, dirPrefix = PROJECT_DIR_PREFIX, safeWrite = false, chunkSize = CHUNG_5MB) {\n this.getProps = () => ({\n colName: this._colName,\n s3: this._s3,\n schema: this._schema,\n avroParse: this._avroParse,\n avroType: this._avroType,\n dirPrefix: this._dirPrefix,\n safeWrite: this._safeWrite,\n chunkSize: this._chunkSize\n });\n this.setProps = (props) => {\n this._colName = props.colName;\n this._schema = props.schema;\n this._s3 = props.s3;\n this._avroParse = props.avroParse;\n this._avroType = props.avroType;\n this._dirPrefix = props.dirPrefix;\n this._safeWrite = props.safeWrite;\n this._chunkSize = props.chunkSize;\n };\n this.setSafeWrite = (safeWrite) => {\n this._safeWrite = safeWrite;\n };\n this.getSafeWrite = () => {\n return this._safeWrite;\n };\n this.getAvroSchema = () => {\n return this._schema;\n };\n this.setAvroSchema = (schema) => {\n try {\n this._schema = ensureIdFieldInSchema(schema);\n this._avroType = typeof schema === \"undefined\" ? null : this._avroParse.forSchema(schema);\n } catch (error) {\n throw new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR);\n }\n };\n this.inferAvroSchema = (data, type = \"record\") => {\n if (Array.isArray(data)) {\n data = data[0];\n }\n const inferedType = this._avroParse.forValue(data);\n const schema = inferedType.schema();\n return ensureIdFieldInSchema(schema);\n };\n this._colName = colName.trim();\n this._s3 = s3;\n this._schema = ensureIdFieldInSchema(schema);\n this._dirPrefix = dirPrefix;\n this._safeWrite = safeWrite;\n this._chunkSize = chunkSize || CHUNG_5MB;\n this._s3.setMaxRequestSizeInBytes(this._chunkSize);\n this._avroParse = import_avsc.Type;\n this._lastETag = \"\";\n this._dataCache = [];\n this._avroType = typeof schema === \"undefined\" ? null : this._avroParse.forSchema(schema);\n this._key = `${this._dirPrefix}${DEFAULT_DELIMITER}${this._colName}${COL_SUFFIX}`;\n }\n async _loadData() {\n try {\n if (this._avroType === null || typeof this._avroType === \"undefined\") {\n throw new lowstorageError(\n `${MODULE_NAME}: Missing type definition. Configure before operations `,\n lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR\n );\n }\n const { etag, data } = await this._s3.getObjectWithETag(this._key, { \"if-none-match\": this._lastETag });\n if (data === null) {\n return this._dataCache;\n }\n this._lastETag = etag === null ? this._lastETag : etag;\n const wrapperType = this._avroParse.forSchema({ type: \"array\", items: this._avroType });\n if (data.length < this._chunkSize) {\n this._dataCache = data.length > 0 ? wrapperType.fromBuffer(Buffer.from(data, \"utf8\")) : [];\n return this._dataCache;\n }\n let offset = this._chunkSize;\n let bufferArr = [Buffer.from(data, \"utf8\")];\n let repeat = true;\n while (repeat) {\n const nextDataResponse = await this._s3.getResponse(this._key, false, offset, offset + this._chunkSize);\n const nextDataBody = await nextDataResponse.text();\n bufferArr.push(Buffer.from(nextDataBody, \"utf8\"));\n offset += this._chunkSize;\n const contentLength = parseInt(nextDataResponse.headers.get(\"content-length\") || nextDataBody.length.toString());\n if (contentLength < this._chunkSize) {\n repeat = false;\n }\n }\n const bufferedData = Buffer.concat(bufferArr);\n this._dataCache = wrapperType.fromBuffer(bufferedData);\n return this._dataCache;\n } catch (error) {\n if (error.toString().indexOf(\"status 404: Unknown - Not Found\") > -1) {\n this._dataCache = [];\n return this._dataCache;\n }\n throw new S3OperationError(`${MODULE_NAME}: Failed to load data: ${error.message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n }\n async _saveData(data) {\n try {\n if (this._avroType === null || typeof this._avroType === \"undefined\") {\n throw new lowstorageError(\n `${MODULE_NAME}: Missing type definition. Configure before operations `,\n lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR\n );\n }\n const wrapperType = this._avroParse.forSchema({ type: \"array\", items: this._avroType });\n const dataBuffer = data.length > 0 ? wrapperType.toBuffer(data) : EMPTY_DATA;\n if (this._safeWrite && this._lastETag !== \"\") {\n const currentETag = await this._s3.getEtag(this._key);\n if (currentETag !== null && currentETag !== this._lastETag) {\n return false;\n }\n }\n const resp = await this._s3.put(this._key, dataBuffer);\n if (typeof resp === \"object\" && \"status\" in resp && resp.status !== 200) {\n throw new S3OperationError(`${MODULE_NAME}: Failed to save data`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n const newETag = resp.headers?.get(\"etag\") || \"\";\n if (newETag && newETag.length > 0) {\n this._lastETag = this._s3.sanitizeETag(newETag);\n this._dataCache = data;\n }\n return true;\n } catch (error) {\n if (error instanceof S3OperationError) {\n throw error;\n }\n throw new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.SAVE_DATA_ERROR);\n }\n }\n /**\n * Insert a document into the collection.\n * @param {Object|Array} doc - The document to insert.\n * @param {Object} [schema=undefined] - The schema for the document.\n * @returns {Promise} A Promise that resolves to the array of inserted document(s).\n * @throws {lowstorageError} If there's an error.\n */\n async insert(doc, schema) {\n try {\n if (doc === void 0 || doc === null) {\n throw new lowstorageError(`${MODULE_NAME}: Document is required for insert`, lowstorage_ERROR_CODES.INSERT_ERROR);\n }\n if (typeof doc !== \"object\" && !Array.isArray(doc)) {\n throw new DocumentValidationError(\n `${MODULE_NAME}: Document must be an object or an array`,\n lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR\n );\n }\n const items = !Array.isArray(doc) ? [doc] : doc;\n const schemaWithId = schema ? ensureIdFieldInSchema(schema) : this._schema || this.inferAvroSchema(items[0]);\n const avroType = this._avroParse.forSchema(schemaWithId);\n if (!avroType) {\n throw new SchemaValidationError(\n `${MODULE_NAME}: Schema is required - Pass a schema to the insert method`,\n lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR\n );\n }\n this._avroType = avroType;\n const data = await this._loadData();\n for (let item of items) {\n if (typeof item !== \"object\" || item === null) {\n throw new DocumentValidationError(\n `${MODULE_NAME}: Invalid input: input must be an object or an array of objects`,\n lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR\n );\n }\n item._id = item._id || await generateUUID();\n const validBuffer = this._avroType.isValid(item, {\n errorHook: errorValidationFn,\n noUndeclaredFields: true\n });\n if (validBuffer === true) {\n data.push(item);\n } else {\n throw new DocumentValidationError(`${MODULE_NAME}: Invalid document or schema`, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR);\n }\n }\n const success = await this._saveData(data);\n if (!success) {\n throw new S3OperationError(`${MODULE_NAME}: Failed to insert document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n this.setAvroSchema(schemaWithId);\n return items;\n } catch (error) {\n if (error.message.includes(\"unknown type\")) {\n throw new SchemaValidationError(\n `${MODULE_NAME}: Schema input is invalid: ${error.message}`,\n lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR\n );\n }\n if (error instanceof lowstorageError) {\n throw error;\n }\n throw new lowstorageError(`${MODULE_NAME} Insert operation failed: ${error.message}`, lowstorage_ERROR_CODES.INSERT_ERROR);\n }\n }\n /**\n * Find documents in the collection.\n * @param {Object} [query={}] - The query to filter documents.\n * @param {Object} [options={}] - The options for pagination.\n * @param {number} [options.skip=0] - The number of documents to skip. Default is 0.\n * @param {number} [options.limit=undefined] - The maximum number of documents to return. Default is undefined, which means no limit.\n * @returns {Promise} A Promise that resolves to an array of matching documents.\n * @throws {lowstorageError} If there's an error.\n */\n async find(query = {}, options = {}) {\n try {\n if (query === void 0 || query === null) {\n throw new lowstorageError(`${MODULE_NAME}: Query is required for update`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n }\n const data = await this._loadData();\n const start = options.skip !== void 0 ? parseInt(String(options.skip), 10) : 0;\n const end = options.limit !== void 0 ? start + parseInt(String(options.limit), 10) : void 0;\n const filteredData = data.filter((doc) => matchesQuery(doc, query)).slice(start, end);\n return filteredData;\n } catch (error) {\n throw new lowstorageError(`${MODULE_NAME}: Find operation failed: ${error.message}`, lowstorage_ERROR_CODES.FIND_ERROR);\n }\n }\n /**\n * Find the first document in the collection that matches the query.\n * @param {Object} [query={}] - The query to filter documents.\n * @returns {Promise} A Promise that resolves to the first matching document or null if no match is found.\n * @throws {lowstorageError} If there's an error.\n */\n async findOne(query = {}) {\n try {\n if (query === null) {\n throw new lowstorageError(`${MODULE_NAME}: Query cannot be null`, lowstorage_ERROR_CODES.INVALID_ARGUMENT);\n }\n const result = await this.find(query, { limit: 1 });\n return result[0] || null;\n } catch (error) {\n if (error instanceof lowstorageError) {\n throw error;\n }\n throw new lowstorageError(`${MODULE_NAME}: FindOne operation failed: ${error.message}`, lowstorage_ERROR_CODES.FIND_ONE_ERROR);\n }\n }\n /**\n * Update a single document in the collection that matches the query.\n * @param {Object} [query={}] - The query to filter the document to update.\n * @param {Object} [update={}] - The update operations to apply to the matching document.\n * @returns {Promise} A Promise that resolves to number of documents updated.\n * @throws {lowstorageError} If the updateOne operation fails.\n * @throws {SchemaValidationError} If the schema is not defined for the collection.\n * @throws {DocumentValidationError} If the updated document is invalid.\n * @throws {S3OperationError} If the S3 operation fails.\n */\n async update(query = {}, update = {}, options = {}) {\n try {\n if (query === void 0 || query === null || update === void 0 || update === null) {\n throw new lowstorageError(\n `${MODULE_NAME}: Query and update values are required for update`,\n lowstorage_ERROR_CODES.MISSING_ARGUMENT\n );\n }\n if (!this._avroType) {\n throw new SchemaValidationError(\n `${MODULE_NAME}: Schema is not defined for this collection`,\n lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR\n );\n }\n const data = await this._loadData();\n if (data.length === 0) return 0;\n let updatedCount = 0;\n for (let i = 0; i < data.length; i++) {\n if (matchesQuery(data[i], query)) {\n const updatedDoc = { ...data[i], ...update };\n const isValid = this._avroType.isValid(updatedDoc, {\n errorHook: errorValidationFn,\n noUndeclaredFields: true\n });\n if (isValid === true) {\n data[i] = updatedDoc;\n updatedCount++;\n } else {\n throw new DocumentValidationError(\n `${MODULE_NAME}: Invalid document or schema`,\n lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR\n );\n }\n }\n }\n if (updatedCount > 0) {\n const success = await this._saveData(data);\n if (!success) {\n throw new S3OperationError(`${MODULE_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n } else if (options && \"upsert\" in options && options.upsert) {\n const success = await this.insert(update);\n if (!success) {\n throw new S3OperationError(`${MODULE_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n updatedCount = 1;\n }\n return updatedCount;\n } catch (error) {\n if (error instanceof S3OperationError) {\n throw error;\n }\n throw new lowstorageError(`${MODULE_NAME}: Update operation failed: ${error.message}`, lowstorage_ERROR_CODES.UPDATE_ERROR);\n }\n }\n /**\n * Update a single document in the collection that matches the query.\n * @param {Object} [query={}] - The query to filter the document to update.\n * @param {Object} [update={}] - The update operations to apply to the matching document.\n * @returns {Promise} A Promise that resolves to 1 if a document was updated, 0 otherwise.\n /**\n * Update a single document in the collection that matches the query.\n * @throws {lowstorageError} If the updateOne operation fails.\n * @throws {SchemaValidationError} If the schema is not defined for the collection.\n * @throws {DocumentValidationError} If the updated document is invalid.\n * @throws {S3OperationError} If the S3 operation fails.\n */\n async updateOne(query = {}, update = {}, options = {}) {\n try {\n if (query === void 0 || query === null || update === void 0 || update === null) {\n throw new lowstorageError(`${MODULE_NAME}: Query is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n }\n if (!this._avroType) {\n throw new SchemaValidationError(\n `${MODULE_NAME}: Schema is not defined for this collection`,\n lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR\n );\n }\n const data = await this._loadData();\n if (data.length === 0) return 0;\n const docIndex = data.findIndex((doc) => matchesQuery(doc, query));\n if (docIndex !== -1) {\n const updatedDoc = { ...data[docIndex], ...update };\n const isValid = this._avroType.isValid(updatedDoc, {\n errorHook: errorValidationFn,\n noUndeclaredFields: true\n });\n if (isValid === true) {\n data[docIndex] = updatedDoc;\n const success = await this._saveData(data);\n if (!success) {\n throw new S3OperationError(`${MODULE_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n return 1;\n } else {\n throw new DocumentValidationError(`${MODULE_NAME}: Invalid document or schema`, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR);\n }\n }\n if (options && \"upsert\" in options && options.upsert) {\n const success = await this.insert(update);\n if (!success) {\n throw new S3OperationError(`${MODULE_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n return 1;\n }\n return 0;\n } catch (error) {\n if (error instanceof lowstorageError) {\n throw error;\n }\n throw new lowstorageError(`${MODULE_NAME}: UpdateOne operation failed: ${error.message}`, lowstorage_ERROR_CODES.UPDATE_ONE_ERROR);\n }\n }\n /**\n * Delete documents from the collection.\n * @param {Object} [query={}] - The query to filter documents to delete.\n * @returns {Promise} A Promise that resolves to the number of documents deleted.\n * @throws {lowstorageError} If the delete operation fails.\n * @throws {S3OperationError} If the S3 operation fails.\n */\n async delete(query = {}) {\n try {\n if (query === void 0 || query === null) {\n throw new lowstorageError(`${MODULE_NAME}: Query is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n }\n const data = await this._loadData();\n if (data.length === 0) return 0;\n const initialLength = data.length;\n const newData = data.filter((doc) => !matchesQuery(doc, query));\n const success = await this._saveData(newData);\n if (!success) {\n throw new S3OperationError(`${MODULE_NAME}: Failed to delete document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n return initialLength - newData.length;\n } catch (error) {\n if (error instanceof S3OperationError) {\n throw error;\n }\n throw new lowstorageError(`${MODULE_NAME}: Delete operation failed: ${error.message}`, lowstorage_ERROR_CODES.DELETE_ERROR);\n }\n }\n /**\n * Delete all documents from the collection.\n * @returns {Promise} A Promise that resolves to the number of documents deleted.\n * @throws {lowstorageError} If the delete operation fails.\n * @throws {S3OperationError} If the S3 operation fails.\n */\n async deleteAll() {\n try {\n const data = await this._loadData();\n const initialLength = data.length;\n const success = await this._saveData([]);\n if (!success) {\n throw new S3OperationError(`${MODULE_NAME}: Failed to delete document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n return initialLength;\n } catch (error) {\n if (error instanceof S3OperationError) {\n throw error;\n }\n throw new lowstorageError(`${MODULE_NAME}: Delete operation failed: ${error.message}`, lowstorage_ERROR_CODES.DELETE_ERROR);\n }\n }\n /**\n * Count the number of documents in the collection.\n * @param {Object} [query={}] - The query to filter documents.\n * @returns {Promise} A Promise that resolves to the number of documents in the collection.\n * @throws {lowstorageError} If the count operation fails.\n */\n async count(query = {}) {\n try {\n const data = await this.find(query);\n return data.length;\n } catch (error) {\n throw new lowstorageError(`${MODULE_NAME}: Count operation failed: ${error.message}`, lowstorage_ERROR_CODES.COUNT_ERROR);\n }\n }\n async renameCollection(newColName, newSchema = this._schema) {\n try {\n _hasColName(newColName);\n const exists = await this._s3.fileExists(`${this._dirPrefix}${DEFAULT_DELIMITER}${newColName}${COL_SUFFIX}`);\n if (!!exists) {\n throw new lowstorageError(`${MODULE_NAME}: Collection ${newColName} already exists`, lowstorage_ERROR_CODES.COLLECTION_EXISTS);\n }\n const schema = newSchema || this.getAvroSchema();\n const data = await this._loadData();\n const createNew = new _Collection(newColName, schema, this._s3, this._dirPrefix, this._safeWrite, this._chunkSize);\n await createNew._saveData(data);\n await this._s3.delete(`${this._dirPrefix}${DEFAULT_DELIMITER}${this._colName}${COL_SUFFIX}`);\n return createNew;\n } catch (error) {\n if (error instanceof lowstorageError) {\n throw error;\n }\n throw new lowstorageError(\n `${MODULE_NAME}: Rename collection failed: ${error.message}`,\n lowstorage_ERROR_CODES.RENAME_COLLECTION_ERROR\n );\n }\n }\n};\nexport {\n lowstorage,\n lowstorageError,\n lowstorage_ERROR_CODES\n};\n\n"], + "mappings": "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", + "names": ["__import_BUFFER", "__import_CRYPTO", "__import_UTIL", "__import_STREAM", "__import_ZLIB", "__import_EVENTS", "__import_FS", "__import_PATH", "randomUUID", "__create", "__defProp", "__getOwnPropDesc", "__getOwnPropNames", "__getProtoOf", "__hasOwnProp", "__commonJS", "cb", "mod", "__getOwnPropNames", "__copyProps", "to", "from", "except", "desc", "key", "__hasOwnProp", "__defProp", "__getOwnPropDesc", "__toESM", "isNodeMode", "target", "__create", "__getProtoOf", "require_utils", "exports", "module", "buffer", "__import_BUFFER", "crypto2", "__import_CRYPTO", "util", "__import_UTIL", "Buffer2", "POOL", "BufferPool", "NAME_PATTERN", "f2", "newBuffer", "size", "bufferFrom", "data", "enc", "capitalize", "s", "compare", "n1", "n2", "getOption", "opts", "def", "value", "getHash", "str", "algorithm", "hash", "singleIndexOf", "arr", "v2", "pos", "i", "l", "toMap", "fn", "obj", "elem", "objectValues", "hasDuplicates", "copyOwnProperties", "src", "dst", "overwrite", "names", "name", "descriptor", "isValidName", "qualify", "namespace", "part", "unqualify", "parts", "impliedNamespace", "match", "jsonEnd", "c", "depth", "literal", "abstractFunction", "addDeprecatedGetters", "props", "proto", "prop", "getter", "createGetter", "prop2", "delegate", "len", "maxLen", "Lcg", "seed", "a", "m2", "state", "start", "end", "flags", "mask", "result", "OrderedQueue", "item", "items", "j2", "first", "mid", "i1", "i2", "c1", "c2", "Tap", "buf", "b2", "n", "k2", "h", "f3", "fk", "d", "fixed", "tap", "l1", "p1", "l2", "p2", "b1", "res", "neg", "invert", "require_types", "utils", "SlowBuffer", "debug", "TYPES", "ArrayType", "BooleanType", "BytesType", "DoubleType", "EnumType", "RecordType", "FixedType", "FloatType", "IntType", "LongType", "MapType", "NullType", "StringType", "RANDOM", "TAP", "LOGICAL_TYPE", "UNDERLYING_TYPES", "Type", "schema", "type", "Hash", "maybeQualify", "isPrimitive", "registry", "UnionType2", "wrapUnions", "WrappedUnionType", "UnwrappedUnionType", "DerivedType", "err", "logicalType", "types", "isAmbiguous", "typeName", "Type2", "val", "fieldNames", "expanded", "numWrappedUnions", "isValidWrappedUnion", "branchTypes", "branchType", "unionType", "bucketized", "bucket", "getTypeBucket", "bucketTypes", "buckets", "augmented", "combineNumbers", "combineStrings", "combineBuffers", "t", "combineObjects", "any", "buf1", "buf2", "resolver", "Resolver", "resolvers", "index", "resolver2", "readValue", "canon", "schemaStr", "noCheck", "className", "getClassName", "errorHook", "hook", "path", "Branch", "derefedSchema", "attr", "body", "asBranch", "PrimitiveType", "noFreeze", "throwInvalidError", "tap1", "tap2", "isSafeLong", "methods", "noUnpack", "mapping", "AbstractLongType", "isJsonBuffer", "UnionType", "branch", "getValueBucket", "logicalBranches", "typeResolver", "coerce", "wrap", "keys", "val1", "val2", "index1", "index2", "firstType", "name1", "name2", "symbol", "symbols", "hasCompatibleName", "values", "readArraySize", "rsv", "copy", "ns", "field", "Field", "errorStack", "plainRecords", "outerArgs", "innerArgs", "ds", "innerBody", "defaultValue", "hasDefault", "stackField", "outerBody", "Record", "self", "o", "field2", "args", "rFields", "wFields", "wFieldsMap", "matches", "fieldResolver", "getAliases", "lazyIndex", "uname", "fields", "order", "fieldType", "fieldSchema", "fieldOrder", "fieldAliases", "fieldDoc", "LogicalType", "_fromValue", "obj1", "obj2", "isVisited", "msg", "readerType", "lazy", "aliases", "reader", "writer", "strict", "alias", "unqualified", "typeNames", "superIndex", "superType", "typeSymbols", "allTypes", "fieldTypes", "fieldDefaults", "isValidRecord", "fieldDefault", "fieldName", "fieldType2", "fieldDefault2", "unionTypes", "require_containers", "stream", "__import_STREAM", "zlib", "__import_ZLIB", "OPTS", "LONG_TYPE", "MAP_BYTES_TYPE", "HEADER_TYPE", "BLOCK_TYPE", "MAGIC_BYTES", "RawDecoder", "noDecode", "createReader", "chunk", "encoding", "BlockDecoder", "header", "codecs", "nBlocks", "block", "tryReadBlock", "chunkCb", "count", "cause", "BlockInfo", "BlockData", "RawEncoder", "copyBuffer", "BlockEncoder", "codec", "meta", "Header", "flushing", "raw", "compressed", "writerType", "skipper", "require_services", "events", "__import_EVENTS", "BOOLEAN_TYPE", "STRING_TYPE", "HANDSHAKE_REQUEST_TYPE", "HANDSHAKE_RESPONSE_TYPE", "PREFIX_LENGTH", "PING_MESSAGE", "Message", "reqType", "errType", "resType", "oneWay", "doc", "recordName", "reqSchema", "msgDoc", "errSchema", "Service", "messages", "types2", "ptcl", "server", "Client", "Server", "clientSvc", "serverSvc", "createReaders", "msgs", "client", "pts", "transport", "channel", "forwardErrors", "req", "handler", "parent", "typeSchema", "msgNames", "discoverProtocol", "svc", "ptclStr", "hreq", "hres", "pending", "insertRemoteProtocols", "objectMode", "writableFactory", "encoder2", "FrameEncoder", "writable2", "readable2", "decoder2", "FrameDecoder", "err2", "StatelessClientChannel", "readable", "writable", "isStream", "decoder", "NettyDecoder", "encoder", "NettyEncoder", "StatefulClientChannel", "channels", "getExistingMessage", "wreq", "WrappedRequest", "getRemoteProtocols", "numChannels", "CallContext", "wres", "ctx", "done", "err3", "readableFactory", "StatelessServerChannel", "StatefulServerChannel", "channelId", "numArgs", "ClientChannel", "normalizedPrefix", "cache", "adapter", "Adapter", "Registry", "noWait", "isError", "timeout", "noSvc", "WrappedResponse", "onTransition", "onCompletion", "fns", "chainMiddleware", "onError", "wreq2", "wres2", "prev", "reqBuf", "serializationError", "id", "resBuf", "matchesPrefix", "emit", "retry", "readHead", "onEnd", "onFinish", "timer", "onPing", "onMessage", "ping", "payload", "ServerChannel", "serverMatch", "toRpcError", "defaultHandler", "resErr", "isStrict", "errStr", "hdrBuf", "onRequest", "onHandshake", "hdrs", "hdr", "hasError", "prefixLength", "isRemote", "isError2", "frameLength", "bufs", "intBuffer", "head", "rtype", "wtype", "ptcls", "isClient", "hs", "toError", "rpcCode", "details", "detailsStr", "strs", "scope", "prefix", "params", "cbs", "forward", "isDone", "backward", "require_files", "fs", "__import_FS", "__import_PATH", "createImportHook", "imports", "fpath", "kind", "createSyncImportHook", "require_specs", "files", "TYPE_REFS", "assembleProtocol", "importFile", "protocol", "schemas", "protocolNamespace", "fpath2", "cb2", "Reader", "fetchImports", "dpath", "importedProtocols", "next", "info", "imported", "mergeImport", "importPath", "read", "contents", "protocolSchema", "Tokenizer", "tk", "protocolJavadoc", "javadoc", "numImports", "message", "responseSchema", "token", "top", "ref", "silent", "implicitTags", "maybeMessage", "fname", "reason", "context", "isToken", "lineNum", "lineStart", "emitJavadoc", "isJavadoc", "extractJavadoc", "pat", "lines", "line", "require_lib", "containers", "services", "specs", "parse2", "schemaOrProtocol", "extractFileHeader", "decode", "fd", "isValid", "createFileDecoder", "createFileEncoder", "x", "K", "O", "v", "E", "W", "M", "w", "X", "f", "Z", "V", "J", "m", "T", "P", "C", "u", "ee", "te", "se", "re", "j", "$", "L", "k", "D", "B", "F", "G", "z", "Q", "ne", "oe", "p", "q", "y", "N", "e", "r", "H", "U", "_", "g", "A", "R", "S", "Y", "b", "I", "import_avsc", "lowstorage_ERROR_CODES", "lowstorageError", "code", "SchemaValidationError", "DocumentValidationError", "S3OperationError", "operation", "matchesQuery", "document", "query", "generateUUID", "randomUUID", "ensureIdFieldInSchema", "idField", "MODULE_NAME", "DEFAULT_DELIMITER", "PROJECT_DIR_PREFIX", "COL_SUFFIX", "CHUNG_1MB", "CHUNG_5MB", "EMPTY_DATA", "errorValidationFn", "errorCode", "_hasColName", "colName", "lowstorage", "options", "requiredFields", "listed", "entry", "error", "wrapperType", "exists2", "autoCreate", "colPath", "colSchema", "Collection", "_Collection", "s3", "dirPrefix", "safeWrite", "chunkSize", "etag", "offset", "bufferArr", "repeat", "nextDataResponse", "nextDataBody", "bufferedData", "dataBuffer", "currentETag", "resp", "newETag", "schemaWithId", "avroType", "update", "updatedCount", "updatedDoc", "docIndex", "initialLength", "newData", "newColName", "newSchema", "createNew"] } diff --git a/lib/errors.js b/lib/errors.js index 9b4e51b..0607dfe 100644 --- a/lib/errors.js +++ b/lib/errors.js @@ -30,19 +30,16 @@ class lowstorageError extends Error { } class CollectionNotFoundError extends lowstorageError { constructor(collectionName, code = lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND) { - super(`Collection ${collectionName} not found`, code); super(`Collection ${collectionName} not found`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND); } } class SchemaValidationError extends lowstorageError { constructor(message, code = lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR) { - super(message, code); super(message, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR); } } class DocumentValidationError extends lowstorageError { constructor(message, code = lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR) { - super(message, code); super(message, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR); } } diff --git a/lib/errors.js.map b/lib/errors.js.map index ba0fee3..a61bda1 100644 --- a/lib/errors.js.map +++ b/lib/errors.js.map @@ -1 +1 @@ -{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,MAAM,sBAAsB,GAA2B;IACtD,gBAAgB,EAAE,kBAA2B;IAC7C,iBAAiB,EAAE,mBAA4B;IAC/C,uBAAuB,EAAE,yBAAkC;IAC3D,uBAAuB,EAAE,yBAAkC;IAC3D,uBAAuB,EAAE,yBAAkC;IAC3D,8BAA8B,EAAE,gCAAyC;IACzE,oBAAoB,EAAE,sBAA+B;IACrD,uBAAuB,EAAE,yBAAkC;IAC3D,yBAAyB,EAAE,2BAAoC;IAC/D,kBAAkB,EAAE,oBAA6B;IACjD,UAAU,EAAE,YAAqB;IACjC,cAAc,EAAE,gBAAyB;IACzC,eAAe,EAAE,iBAA0B;IAC3C,YAAY,EAAE,cAAuB;IACrC,YAAY,EAAE,cAAuB;IACrC,gBAAgB,EAAE,kBAA2B;IAC7C,YAAY,EAAE,cAAuB;IACrC,WAAW,EAAE,aAAsB;IACnC,aAAa,EAAE,eAAwB;CACvC,CAAC;AAIF,MAAM,eAAgB,SAAQ,KAAK;IAElC,YAAY,OAAe,EAAE,OAAkB,sBAAsB,CAAC,aAAa;QAClF,KAAK,CAAC,oBAAoB,OAAO,aAAa,IAAI,EAAE,CAAC,CAAC;QACtD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;QAClC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IACjD,CAAC;CACD;AAED,MAAM,uBAAwB,SAAQ,eAAe;IACpD,YAAY,cAAmB,EAAE,OAAkB,sBAAsB,CAAC,oBAAoB;QAC7F,KAAK,CAAC,cAAc,cAAc,YAAY,EAAE,IAAI,CAAC,CAAC;QACtD,KAAK,CAAC,cAAc,cAAc,YAAY,EAAE,sBAAsB,CAAC,oBAAoB,CAAC,CAAC;IAC9F,CAAC;CACD;AAED,MAAM,qBAAsB,SAAQ,eAAe;IAClD,YAAY,OAAe,EAAE,OAAkB,sBAAsB,CAAC,uBAAuB;QAC5F,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACrB,KAAK,CAAC,OAAO,EAAE,sBAAsB,CAAC,uBAAuB,CAAC,CAAC;IAChE,CAAC;CACD;AAED,MAAM,uBAAwB,SAAQ,eAAe;IACpD,YAAY,OAAe,EAAE,OAAkB,sBAAsB,CAAC,yBAAyB;QAC9F,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACrB,KAAK,CAAC,OAAO,EAAE,sBAAsB,CAAC,yBAAyB,CAAC,CAAC;IAClE,CAAC;CACD;AAED,MAAM,gBAAiB,SAAQ,eAAe;IAC7C,YAAY,OAAe,EAAE,SAAiB;QAC7C,KAAK,CAAC,MAAM,SAAS,sBAAsB,OAAO,EAAE,EAAE,sBAAsB,CAAC,kBAAkB,CAAC,CAAC;IAClG,CAAC;CACD;AAED,OAAO,EACN,sBAAsB,EACtB,eAAe,EACf,uBAAuB,EACvB,qBAAqB,EACrB,uBAAuB,EACvB,gBAAgB,GAChB,CAAC"} \ No newline at end of file +{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,MAAM,sBAAsB,GAA2B;IACtD,gBAAgB,EAAE,kBAA2B;IAC7C,iBAAiB,EAAE,mBAA4B;IAC/C,uBAAuB,EAAE,yBAAkC;IAC3D,uBAAuB,EAAE,yBAAkC;IAC3D,uBAAuB,EAAE,yBAAkC;IAC3D,8BAA8B,EAAE,gCAAyC;IACzE,oBAAoB,EAAE,sBAA+B;IACrD,uBAAuB,EAAE,yBAAkC;IAC3D,yBAAyB,EAAE,2BAAoC;IAC/D,kBAAkB,EAAE,oBAA6B;IACjD,UAAU,EAAE,YAAqB;IACjC,cAAc,EAAE,gBAAyB;IACzC,eAAe,EAAE,iBAA0B;IAC3C,YAAY,EAAE,cAAuB;IACrC,YAAY,EAAE,cAAuB;IACrC,gBAAgB,EAAE,kBAA2B;IAC7C,YAAY,EAAE,cAAuB;IACrC,WAAW,EAAE,aAAsB;IACnC,aAAa,EAAE,eAAwB;CACvC,CAAC;AAIF,MAAM,eAAgB,SAAQ,KAAK;IAElC,YAAY,OAAe,EAAE,OAAkB,sBAAsB,CAAC,aAAa;QAClF,KAAK,CAAC,oBAAoB,OAAO,aAAa,IAAI,EAAE,CAAC,CAAC;QACtD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;QAClC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IACjD,CAAC;CACD;AAED,MAAM,uBAAwB,SAAQ,eAAe;IACpD,YAAY,cAAmB,EAAE,OAAkB,sBAAsB,CAAC,oBAAoB;QAC7F,KAAK,CAAC,cAAc,cAAc,YAAY,EAAE,sBAAsB,CAAC,oBAAoB,CAAC,CAAC;IAC9F,CAAC;CACD;AAED,MAAM,qBAAsB,SAAQ,eAAe;IAClD,YAAY,OAAe,EAAE,OAAkB,sBAAsB,CAAC,uBAAuB;QAC5F,KAAK,CAAC,OAAO,EAAE,sBAAsB,CAAC,uBAAuB,CAAC,CAAC;IAChE,CAAC;CACD;AAED,MAAM,uBAAwB,SAAQ,eAAe;IACpD,YAAY,OAAe,EAAE,OAAkB,sBAAsB,CAAC,yBAAyB;QAC9F,KAAK,CAAC,OAAO,EAAE,sBAAsB,CAAC,yBAAyB,CAAC,CAAC;IAClE,CAAC;CACD;AAED,MAAM,gBAAiB,SAAQ,eAAe;IAC7C,YAAY,OAAe,EAAE,SAAiB;QAC7C,KAAK,CAAC,MAAM,SAAS,sBAAsB,OAAO,EAAE,EAAE,sBAAsB,CAAC,kBAAkB,CAAC,CAAC;IAClG,CAAC;CACD;AAED,OAAO,EACN,sBAAsB,EACtB,eAAe,EACf,uBAAuB,EACvB,qBAAqB,EACrB,uBAAuB,EACvB,gBAAgB,GAChB,CAAC"} \ No newline at end of file diff --git a/lib/helpers.d.ts b/lib/helpers.d.ts index 4f78cb2..2f6c643 100644 --- a/lib/helpers.d.ts +++ b/lib/helpers.d.ts @@ -1,7 +1,4 @@ declare const matchesQuery: (document: Record, query: Record) => boolean; declare const generateUUID: () => Promise; declare const ensureIdFieldInSchema: (schema: Object) => Object; -declare const inferAvroSchema: (data: any[] | { - [s: string]: unknown; -} | ArrayLike, typeName?: string) => Object; -export { matchesQuery, generateUUID, inferAvroSchema, ensureIdFieldInSchema }; +export { matchesQuery, generateUUID, ensureIdFieldInSchema }; diff --git a/lib/helpers.js b/lib/helpers.js index 38acbe0..6ff7fb3 100644 --- a/lib/helpers.js +++ b/lib/helpers.js @@ -15,32 +15,6 @@ const generateUUID = async () => { return v.toString(16); }); }; -const _getAvroSchema = (value, name = 'SubAutoGenerated') => { - switch (typeof value) { - case 'string': - if (_isUUID(value)) { - return { - type: 'string', - name: '_id', - size: 16, - logicalType: 'UUID', - }; - } - return 'string'; - case 'number': - return Number.isInteger(value) ? 'int' : 'float'; - case 'boolean': - return 'boolean'; - case 'object': - if (value === null) - return 'null'; - if (Array.isArray(value)) - return { type: 'array', items: _getAvroSchema(value[0]) }; - return inferAvroSchema(value, name); - default: - return 'string'; // Default to string for unknown types - } -}; const ensureIdFieldInSchema = (schema) => { const idField = { name: '_id', @@ -73,24 +47,5 @@ const ensureIdFieldInSchema = (schema) => { } return schema; }; -const inferAvroSchema = (data, typeName = 'AutoGenerated') => { - if (Array.isArray(data)) { - data = data[0]; - } - const fields = Object.entries(data).map(([name, value]) => { - return { name, type: _getAvroSchema(value, `${typeName}.${name}`) }; - }); - const schema = { - type: 'record', - name: typeName, - fields: fields, - }; - // Ensure the _id field is present in the schema - return ensureIdFieldInSchema(schema); -}; -const _isUUID = (str) => { - const uuidV4Regex = /^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i; - return uuidV4Regex.test(str); -}; -export { matchesQuery, generateUUID, inferAvroSchema, ensureIdFieldInSchema }; +export { matchesQuery, generateUUID, ensureIdFieldInSchema }; //# sourceMappingURL=helpers.js.map \ No newline at end of file diff --git a/lib/helpers.js.map b/lib/helpers.js.map index 464474b..693a58b 100644 --- a/lib/helpers.js.map +++ b/lib/helpers.js.map @@ -1 +1 @@ -{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/lib/lowstorage.d.ts b/lib/lowstorage.d.ts index 1a7b2e3..0b176d8 100644 --- a/lib/lowstorage.d.ts +++ b/lib/lowstorage.d.ts @@ -175,6 +175,9 @@ declare class Collection { getSafeWrite: () => boolean; getAvroSchema: () => Object; setAvroSchema: (schema: Object) => void; + inferAvroSchema: (data: any[] | { + [s: string]: unknown; + } | ArrayLike, type?: string) => Object; _loadData(): Promise; _saveData(data: Object[]): Promise; /** @@ -218,12 +221,14 @@ declare class Collection { * @param {Object} [query={}] - The query to filter the document to update. * @param {Object} [update={}] - The update operations to apply to the matching document. * @returns {Promise} A Promise that resolves to 1 if a document was updated, 0 otherwise. + /** + * Update a single document in the collection that matches the query. * @throws {lowstorageError} If the updateOne operation fails. * @throws {SchemaValidationError} If the schema is not defined for the collection. * @throws {DocumentValidationError} If the updated document is invalid. * @throws {S3OperationError} If the S3 operation fails. */ - updateOne(query?: {}, update?: {}, options?: {}): Promise<0 | 1>; + updateOne(query?: Record, update?: Record, options?: Record): Promise; /** * Delete documents from the collection. * @param {Object} [query={}] - The query to filter documents to delete. diff --git a/lib/lowstorage.js b/lib/lowstorage.js index 621ff64..46e5675 100644 --- a/lib/lowstorage.js +++ b/lib/lowstorage.js @@ -1,8 +1,15 @@ 'use strict'; +// type CollectionOptions = { +// skip?: number; +// limit?: number; +// }; +// type UpdateOptions = { +// upsert?: boolean; +// }; import { S3 } from 'ultralight-s3'; -import { Type as parse } from '@avro/types'; +import { Type as parse } from 'avsc'; import { lowstorage_ERROR_CODES, lowstorageError, SchemaValidationError, DocumentValidationError, S3OperationError } from 'errors'; -import { matchesQuery, generateUUID, inferAvroSchema, ensureIdFieldInSchema } from 'helpers'; +import { matchesQuery, generateUUID, ensureIdFieldInSchema } from 'helpers'; const MODULE_NAME = 'lowstorage'; const DEFAULT_DELIMITER = '/'; const PROJECT_DIR_PREFIX = 'lowstorage'; @@ -126,8 +133,8 @@ class lowstorage { if (!exists) { if (typeof schema !== 'undefined' && schema !== null) { try { - const isValid = this._avroParse.isValid(schema); - if (!isValid) { + const type = this._avroParse.forSchema(schema); + if (!type) { throw new SchemaValidationError(`${MODULE_NAME}: Schema is invalid: ${schema} ${lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR}`); } } @@ -279,8 +286,21 @@ class Collection { return this._schema; }; this.setAvroSchema = (schema) => { - this._schema = ensureIdFieldInSchema(schema); - this._avroType = typeof schema === 'undefined' ? null : this._avroParse.forSchema(schema); + try { + this._schema = ensureIdFieldInSchema(schema); + this._avroType = typeof schema === 'undefined' ? null : this._avroParse.forSchema(schema); + } + catch (error) { + throw new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR); + } + }; + this.inferAvroSchema = (data, type = 'record') => { + if (Array.isArray(data)) { + data = data[0]; + } + const inferedType = this._avroParse.forValue(data); + const schema = inferedType.schema(); + return ensureIdFieldInSchema(schema); }; this._colName = colName.trim(); this._s3 = s3; @@ -292,7 +312,7 @@ class Collection { this._avroParse = parse; this._lastETag = ''; this._dataCache = []; - this._avroType = typeof schema === 'undefined' ? null : this._avroParse.ForSchema(schema); + this._avroType = typeof schema === 'undefined' ? null : this._avroParse.forSchema(schema); this._key = `${this._dirPrefix}${DEFAULT_DELIMITER}${this._colName}${COL_SUFFIX}`; } async _loadData() { @@ -384,7 +404,7 @@ class Collection { throw new DocumentValidationError(`${MODULE_NAME}: Document must be an object or an array`, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR); } const items = !Array.isArray(doc) ? [doc] : doc; - const schemaWithId = schema ? ensureIdFieldInSchema(schema) : this._schema || ensureIdFieldInSchema(inferAvroSchema(items[0])); + const schemaWithId = schema ? ensureIdFieldInSchema(schema) : this._schema || this.inferAvroSchema(items[0]); const avroType = this._avroParse.forSchema(schemaWithId); if (!avroType) { throw new SchemaValidationError(`${MODULE_NAME}: Schema is required - Pass a schema to the insert method`, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR); @@ -537,6 +557,8 @@ class Collection { * @param {Object} [query={}] - The query to filter the document to update. * @param {Object} [update={}] - The update operations to apply to the matching document. * @returns {Promise} A Promise that resolves to 1 if a document was updated, 0 otherwise. + /** + * Update a single document in the collection that matches the query. * @throws {lowstorageError} If the updateOne operation fails. * @throws {SchemaValidationError} If the schema is not defined for the collection. * @throws {DocumentValidationError} If the updated document is invalid. diff --git a/lib/lowstorage.js.map b/lib/lowstorage.js.map index 2026fe9..88d8402 100644 --- a/lib/lowstorage.js.map +++ b/lib/lowstorage.js.map @@ -1 +1 @@ -{"version":3,"file":"lowstorage.js","sourceRoot":"","sources":["../src/lowstorage.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"lowstorage.js","sourceRoot":"","sources":["../src/lowstorage.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 77e012b..0327fbf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,12 +9,11 @@ "version": "2.0.0", "license": "MIT", "dependencies": { - "@avro/types": "^1.0.25", + "avsc": "^5.7.7", "ultralight-s3": "^0.0.5" }, "devDependencies": { "esbuild": "^0.23.0", - "esbuild-plugin-polyfill-node": "^0.3.0", "jest": "^29.7.0", "prettier": "^3.3.2", "typescript": "^5.5.2", @@ -37,14 +36,6 @@ "node": ">=6.0.0" } }, - "node_modules/@avro/types": { - "version": "1.0.25", - "resolved": "https://registry.npmjs.org/@avro/types/-/types-1.0.25.tgz", - "integrity": "sha512-rQmCpcsYfO1QO1R3I+T33SB21sq8d7K4PJb8uuaWGNRdWrNSQzQjcZXRqBD3g1m8Cg1RVINT1COmlqRg1uBLLA==", - "engines": { - "node": ">=0.11" - } - }, "node_modules/@babel/code-frame": { "version": "7.24.7", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", @@ -1494,12 +1485,6 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@jspm/core": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@jspm/core/-/core-2.0.1.tgz", - "integrity": "sha512-Lg3PnLp0QXpxwLIAuuJboLeRaIhrgJjeuh797QADg3xz8wGLugQOS5DpsE8A6i6Adgzf+bacllkKZG3J0tGfDw==", - "dev": true - }, "node_modules/@sinclair/typebox": { "version": "0.27.8", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", @@ -1731,6 +1716,14 @@ "printable-characters": "^1.0.42" } }, + "node_modules/avsc": { + "version": "5.7.7", + "resolved": "https://registry.npmjs.org/avsc/-/avsc-5.7.7.tgz", + "integrity": "sha512-9cYNccliXZDByFsFliVwk5GvTq058Fj513CiR4E60ndDwmuXzTJEp/Bp8FyuRmGyYupLjHLs+JA9/CBoVS4/NQ==", + "engines": { + "node": ">=0.11" + } + }, "node_modules/babel-jest": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", @@ -2317,19 +2310,6 @@ "@esbuild/win32-x64": "0.23.0" } }, - "node_modules/esbuild-plugin-polyfill-node": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/esbuild-plugin-polyfill-node/-/esbuild-plugin-polyfill-node-0.3.0.tgz", - "integrity": "sha512-SHG6CKUfWfYyYXGpW143NEZtcVVn8S/WHcEOxk62LuDXnY4Zpmc+WmxJKN6GMTgTClXJXhEM5KQlxKY6YjbucQ==", - "dev": true, - "dependencies": { - "@jspm/core": "^2.0.1", - "import-meta-resolve": "^3.0.0" - }, - "peerDependencies": { - "esbuild": "*" - } - }, "node_modules/escalade": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", @@ -2654,16 +2634,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/import-meta-resolve": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-3.1.1.tgz", - "integrity": "sha512-qeywsE/KC3w9Fd2ORrRDUw6nS/nLwZpXgfrOc2IILvZYnCaEMd+D56Vfg9k4G29gIeVi3XKql1RQatME8iYsiw==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "node_modules/imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", @@ -5114,11 +5084,6 @@ "@jridgewell/trace-mapping": "^0.3.24" } }, - "@avro/types": { - "version": "1.0.25", - "resolved": "https://registry.npmjs.org/@avro/types/-/types-1.0.25.tgz", - "integrity": "sha512-rQmCpcsYfO1QO1R3I+T33SB21sq8d7K4PJb8uuaWGNRdWrNSQzQjcZXRqBD3g1m8Cg1RVINT1COmlqRg1uBLLA==" - }, "@babel/code-frame": { "version": "7.24.7", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", @@ -6072,12 +6037,6 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "@jspm/core": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@jspm/core/-/core-2.0.1.tgz", - "integrity": "sha512-Lg3PnLp0QXpxwLIAuuJboLeRaIhrgJjeuh797QADg3xz8wGLugQOS5DpsE8A6i6Adgzf+bacllkKZG3J0tGfDw==", - "dev": true - }, "@sinclair/typebox": { "version": "0.27.8", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", @@ -6282,6 +6241,11 @@ "printable-characters": "^1.0.42" } }, + "avsc": { + "version": "5.7.7", + "resolved": "https://registry.npmjs.org/avsc/-/avsc-5.7.7.tgz", + "integrity": "sha512-9cYNccliXZDByFsFliVwk5GvTq058Fj513CiR4E60ndDwmuXzTJEp/Bp8FyuRmGyYupLjHLs+JA9/CBoVS4/NQ==" + }, "babel-jest": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", @@ -6705,16 +6669,6 @@ "@esbuild/win32-x64": "0.23.0" } }, - "esbuild-plugin-polyfill-node": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/esbuild-plugin-polyfill-node/-/esbuild-plugin-polyfill-node-0.3.0.tgz", - "integrity": "sha512-SHG6CKUfWfYyYXGpW143NEZtcVVn8S/WHcEOxk62LuDXnY4Zpmc+WmxJKN6GMTgTClXJXhEM5KQlxKY6YjbucQ==", - "dev": true, - "requires": { - "@jspm/core": "^2.0.1", - "import-meta-resolve": "^3.0.0" - } - }, "escalade": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", @@ -6946,12 +6900,6 @@ "resolve-cwd": "^3.0.0" } }, - "import-meta-resolve": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-3.1.1.tgz", - "integrity": "sha512-qeywsE/KC3w9Fd2ORrRDUw6nS/nLwZpXgfrOc2IILvZYnCaEMd+D56Vfg9k4G29gIeVi3XKql1RQatME8iYsiw==", - "dev": true - }, "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", diff --git a/package.json b/package.json index 37f1df8..b223a46 100644 --- a/package.json +++ b/package.json @@ -28,14 +28,13 @@ }, "devDependencies": { "esbuild": "^0.23.0", - "esbuild-plugin-polyfill-node": "^0.3.0", "jest": "^29.7.0", "prettier": "^3.3.2", "typescript": "^5.5.2", "wrangler": "^3.62.0" }, "dependencies": { - "@avro/types": "^1.0.25", + "avsc": "^5.7.7", "ultralight-s3": "^0.0.5" }, "keywords": [ diff --git a/src/errors.ts b/src/errors.ts index 3c138c1..436e61c 100644 --- a/src/errors.ts +++ b/src/errors.ts @@ -36,21 +36,18 @@ class lowstorageError extends Error { class CollectionNotFoundError extends lowstorageError { constructor(collectionName: any, code: errorCode = lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND) { - super(`Collection ${collectionName} not found`, code); super(`Collection ${collectionName} not found`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND); } } class SchemaValidationError extends lowstorageError { constructor(message: string, code: errorCode = lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR) { - super(message, code); super(message, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR); } } class DocumentValidationError extends lowstorageError { constructor(message: string, code: errorCode = lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR) { - super(message, code); super(message, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR); } } diff --git a/src/helpers.ts b/src/helpers.ts index 817667c..3d0d5a3 100644 --- a/src/helpers.ts +++ b/src/helpers.ts @@ -20,31 +20,6 @@ const generateUUID = async (): Promise => { }); }; -const _getAvroSchema = (value: any, name = 'SubAutoGenerated'): any => { - switch (typeof value) { - case 'string': - if (_isUUID(value)) { - return { - type: 'string', - name: '_id', - size: 16, - logicalType: 'UUID', - }; - } - return 'string'; - case 'number': - return Number.isInteger(value) ? 'int' : 'float'; - case 'boolean': - return 'boolean'; - case 'object': - if (value === null) return 'null'; - if (Array.isArray(value)) return { type: 'array', items: _getAvroSchema(value[0]) }; - return inferAvroSchema(value, name); - default: - return 'string'; // Default to string for unknown types - } -}; - const ensureIdFieldInSchema = (schema: Object): Object => { const idField = { name: '_id', @@ -80,27 +55,4 @@ const ensureIdFieldInSchema = (schema: Object): Object => { return schema; }; -const inferAvroSchema = (data: any[] | { [s: string]: unknown } | ArrayLike, typeName = 'AutoGenerated') => { - if (Array.isArray(data)) { - data = data[0]; - } - const fields = Object.entries(data).map(([name, value]) => { - return { name, type: _getAvroSchema(value, `${typeName}.${name}`) }; - }); - - const schema = { - type: 'record', - name: typeName, - fields: fields, - }; - - // Ensure the _id field is present in the schema - return ensureIdFieldInSchema(schema); -}; - -const _isUUID = (str: string): boolean => { - const uuidV4Regex = /^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i; - return uuidV4Regex.test(str); -}; - -export { matchesQuery, generateUUID, inferAvroSchema, ensureIdFieldInSchema }; +export { matchesQuery, generateUUID, ensureIdFieldInSchema }; diff --git a/src/lowstorage.test.js b/src/lowstorage.test.js index c3fa1f0..dbd7d8d 100644 --- a/src/lowstorage.test.js +++ b/src/lowstorage.test.js @@ -175,7 +175,7 @@ test('Collections | create via constructor', async () => { test('Collections | error cases and error codes', async () => { // Test create collection error await expect(lStorage.createCollection()).rejects.toThrow(lowstorageError); - await expect(lStorage.createCollection()).rejects.toThrow(lowstorage_ERROR_CODES.CREATE_COLLECTION_ERROR); + await expect(lStorage.createCollection()).rejects.toThrow(lowstorage_ERROR_CODES.MISSING_ARGUMENT); // Test collection already exists error const testCol = await lStorage.createCollection('testCol', testColSchema); diff --git a/src/lowstorage.ts b/src/lowstorage.ts index 977a40b..c346c52 100644 --- a/src/lowstorage.ts +++ b/src/lowstorage.ts @@ -22,19 +22,19 @@ type CollectionProps = { avroType: any; }; -type CollectionOptions = { - skip?: number; - limit?: number; -}; +// type CollectionOptions = { +// skip?: number; +// limit?: number; +// }; -type UpdateOptions = { - upsert?: boolean; -}; +// type UpdateOptions = { +// upsert?: boolean; +// }; import { S3 } from 'ultralight-s3'; -import { Type as parse } from '@avro/types'; +import { Type as parse } from 'avsc'; import { lowstorage_ERROR_CODES, lowstorageError, SchemaValidationError, DocumentValidationError, S3OperationError } from 'errors'; -import { matchesQuery, generateUUID, inferAvroSchema, ensureIdFieldInSchema } from 'helpers'; +import { matchesQuery, generateUUID, ensureIdFieldInSchema } from 'helpers'; const MODULE_NAME: string = 'lowstorage'; const DEFAULT_DELIMITER: string = '/'; @@ -174,8 +174,8 @@ class lowstorage { if (!exists) { if (typeof schema !== 'undefined' && schema !== null) { try { - const isValid = this._avroParse.isValid(schema); - if (!isValid) { + const type = this._avroParse.forSchema(schema); + if (!type) { throw new SchemaValidationError( `${MODULE_NAME}: Schema is invalid: ${schema} ${lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR}`, ); @@ -350,7 +350,7 @@ class Collection { this._avroParse = parse; this._lastETag = ''; this._dataCache = []; - this._avroType = typeof schema === 'undefined' ? null : this._avroParse.ForSchema(schema); + this._avroType = typeof schema === 'undefined' ? null : this._avroParse.forSchema(schema); this._key = `${this._dirPrefix}${DEFAULT_DELIMITER}${this._colName}${COL_SUFFIX}`; } @@ -389,8 +389,21 @@ class Collection { }; setAvroSchema = (schema: Object): void => { - this._schema = ensureIdFieldInSchema(schema); - this._avroType = typeof schema === 'undefined' ? null : this._avroParse.forSchema(schema); + try { + this._schema = ensureIdFieldInSchema(schema); + this._avroType = typeof schema === 'undefined' ? null : this._avroParse.forSchema(schema); + } catch (error: any) { + throw new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR); + } + }; + + inferAvroSchema = (data: any[] | { [s: string]: unknown } | ArrayLike, type = 'record') => { + if (Array.isArray(data)) { + data = data[0]; + } + const inferedType = this._avroParse.forValue(data); + const schema = inferedType.schema(); + return ensureIdFieldInSchema(schema); }; async _loadData() { @@ -495,7 +508,7 @@ class Collection { } const items = !Array.isArray(doc) ? [doc] : doc; - const schemaWithId = schema ? ensureIdFieldInSchema(schema) : this._schema || ensureIdFieldInSchema(inferAvroSchema(items[0])); + const schemaWithId = schema ? ensureIdFieldInSchema(schema) : this._schema || this.inferAvroSchema(items[0]); const avroType = this._avroParse.forSchema(schemaWithId); if (!avroType) { throw new SchemaValidationError( @@ -664,12 +677,14 @@ class Collection { * @param {Object} [query={}] - The query to filter the document to update. * @param {Object} [update={}] - The update operations to apply to the matching document. * @returns {Promise} A Promise that resolves to 1 if a document was updated, 0 otherwise. + /** + * Update a single document in the collection that matches the query. * @throws {lowstorageError} If the updateOne operation fails. * @throws {SchemaValidationError} If the schema is not defined for the collection. * @throws {DocumentValidationError} If the updated document is invalid. * @throws {S3OperationError} If the S3 operation fails. */ - async updateOne(query = {}, update = {}, options = {}) { + async updateOne(query: Record = {}, update: Record = {}, options: Record = {}): Promise { try { if (query === undefined || query === null || update === undefined || update === null) { throw new lowstorageError(`${MODULE_NAME}: Query is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT); From 24ed7cb5a6b17cced8a25b727f513a368de314f4 Mon Sep 17 00:00:00 2001 From: Jolly Good <1671375+good-lly@users.noreply.github.com> Date: Tue, 20 Aug 2024 15:19:40 +0200 Subject: [PATCH 14/18] #13 update markdown for s3 update --- README.md | 528 ++++++++++++++---- build/{lowstorage.js => lowstorage.min.js} | 4 +- ...owstorage.js.map => lowstorage.min.js.map} | 4 +- importify-esbuild-output.js | 1 + lib/lowstorage.d.ts | 10 +- lib/lowstorage.js | 13 +- lib/lowstorage.js.map | 2 +- package.json | 22 +- src/lowstorage.test.js | 4 +- src/lowstorage.ts | 12 +- 10 files changed, 459 insertions(+), 141 deletions(-) rename build/{lowstorage.js => lowstorage.min.js} (92%) rename build/{lowstorage.js.map => lowstorage.min.js.map} (92%) diff --git a/README.md b/README.md index 8154929..0ac75e7 100644 --- a/README.md +++ b/README.md @@ -3,56 +3,141 @@
-> Simple, zero-dependency, object pseudo-database for S3-compatible storages, strongly inspired by lowdb 🤗(https://github.com/typicode/lowdb/).
![AWS S3](https://img.shields.io/badge/AWS%20S3-232F3E?style=for-the-badge&logo=amazon-aws&logoColor=white) ![Cloudflare R2](https://img.shields.io/badge/Cloudflare%20R2-F38020?style=for-the-badge&logo=Cloudflare&logoColor=white) [![GitHub issues](https://img.shields.io/github/issues/good-lly/lowstorage)](https://github.com/good-lly/lowstorage/issues/) [![GitHub license](https://img.shields.io/github/license/Naereen/StrapDown.js.svg)](https://github.com/good-lly/lowstorage/blob/master/LICENSE) Contributions welcome +> 💾 Simple, lightning fast, object pseudo-database for S3-compatible storages, strongly inspired by lowdb(https://github.com/typicode/lowdb/).
![AWS S3](https://img.shields.io/badge/AWS%20S3-232F3E?style=for-the-badge&logo=amazon-aws&logoColor=white) ![Cloudflare R2](https://img.shields.io/badge/Cloudflare%20R2-F38020?style=for-the-badge&logo=Cloudflare&logoColor=white) -[[github](https://github.com/good-lly/lowstorage)] [[npm](https://www.npmjs.com/package/lowstorage)] +[![GitHub release](https://img.shields.io/github/release/good-lly/lowstorage.svg)](https://github.com/good-lly/lowstorage/releases) +![npm package version](https://img.shields.io/npm/v/lowstorage) +![npm package minimized gzipped size](https://img.shields.io/bundlejs/size/lowstorage) +[![GitHub license](https://img.shields.io/github/license/Naereen/StrapDown.js.svg)](https://github.com/good-lly/lowstorage/blob/master/LICENSE) +[![GitHub Repo stars](https://img.shields.io/github/stars/good-lly/lowstorage?style=social)](https://github.com/good-lly/lowstorage) +[![GitHub issues](https://img.shields.io/github/issues/good-lly/lowstorage)](https://github.com/good-lly/lowstorage/issues/) + Contributions welcome -## Sponsors +[[github](https://github.com/good-lly/lowstorage)] +[[npm](https://www.npmjs.com/package/lowstorage)] -[Become a sponsor and have your company logo here](https://github.com/sponsors/good-lly) 👉 [GitHub Sponsors](https://github.com/sponsors/good-lly) +## Features -### Important Notice +- **🚀 Lightweight** ~129kb minified +- **🔧 Minimalist** - only two dependencies wrapped in a single package +- **💾 Familiar API** - similar to object databases like MongoDB +- **📦 BYOS3 / S3-compatibility** - "Bring-Your-Own-S3" like Cloudflare R2, Minio, Ceph, DigitalOcean Spaces, Google Cloud Storage, etc. +- **🔁 Schema validation & serialization** - Avro schema support +- **💻 Typed** - Written in TypeScript -`lowstorage` is primarily designed for small, hobby, or personal projects. We advise extreme caution when using `lowstorage` for critical applications or production environments, as it may not offer the robustness or features required for such use cases. +## Sponsors -### Breaking Changes +[Become a sponsor and have your company logo here](https://github.com/sponsors/good-lly) 👉 [GitHub Sponsors](https://github.com/sponsors/good-lly) -#### Version 2 +#### Version 2 - Breaking Changes Since version 2.0.0, `lowstorage` has undergone significant changes: -- **Constructor Changes**: The constructor now accepts S3-compatible configuration instead of being tied to Cloudflare R2. -- **Support for Multiple Storages**: Now supports any S3-compatible storage like AWS S3, Cloudflare R2, Minio, Ceph, DigitalOcean Spaces, Google Cloud Storage, etc. (see [S3-compatible storages](#s3-compatible-storages)) +- **Support for Multiple Storages / constructor changes**: The constructor now accepts any S3-compatible configuration instead of being tied to Cloudflare R2. Like AWS S3, Cloudflare R2, Minio, Ceph, DigitalOcean Spaces, Google Cloud Storage, etc. (see [S3-compatible storages](#s3-compatible-storages)) instead of using AWS-SDK it utilize S3 via the zero-dependency [`ultralight-s3`](https://github.com/good-lly/ultralight-s3) package. +- **Avro Schemas**: The constructor now accepts Avro schemas for each collection. This allows more flexibility in defining schemas and validation. If no schema is provided, it will automatically infer the schema from the data. Check out [Avro schema](https://avro.apache.org/docs/current/spec.html) documentation for more details. If you are migrating from version 1.x.x, please review the new constructor parameters and usage examples below. -### Cloudflare R2 - S3 API Compatibility +### Cloudflare R2 vs. S3 API Compatibility R2 uses the S3 API to allow users and their applications to migrate with ease. When comparing to AWS S3, Cloudflare has removed some API operations’ features and added others. The S3 API operations are listed below with their current implementation status. Feature implementation is currently in progress. Refer back to this page for updates. The API is available via the `https://.r2.cloudflarestorage.com` endpoint. Find your account ID in the Cloudflare dashboard. -#### Bucket region +## Table of Contents + +- [Features](##features) +- [Cloudflare R2 vs. S3 API Compatibility](###cloudflare-r2-vs-s3-api-compatibility) +- [Usage & Examples](###usage--examples) +- [Installation](##installation) +- [Setup & config](###setup--config) +- [API](#api) + + - [lowstorage class](#lowstorage) + + - [constructor(options: S3Options)](#constructor) + - [collection(colName: string, schema?: Object, autoCreate?: boolean)](#lowstorage-collection) + - [listCollections(): Promise](#listcollections) + - [createCollection(colName: string, schema?: Object, data?: any[]): Promise](#createcollection) + - [removeCollection(colName: string): Promise](#removecollection) + - [collectionExists(colName: string): Promise](#collectionexistsn) + - [s3(): S3](#s3-s3) + + - [Collection class](#collection) + + - [constructor(colName: string, schema: any, s3: S3, dirPrefix?: string, safeWrite?: boolean, chunkSize?: number)](#collection-constructor) + - [getProps(): CollectionProps](#getprops) + - [setProps(props: CollectionProps): void](#setpropsprops) + - [setSafeWrite(safeWrite: boolean): void](#setsafewrite) + - [getSafeWrite(): boolean](#getsafewrite) + - [getAvroSchema(): Object](#getavroschema) + - [setAvroSchema(schema: Object): void](#setavroschemaschema) + - [inferAvroSchema(data: Object | Array\): Object](#inferavroschem) + - [insert(doc: Object | Array\, schema?: Object): Promise\](#insert) + - [find(query: Object, options: Object): Promise\](#find) + - [findOne(query: Object): Promise\](#findone) + - [update(query: Object, update: Object, options: Object): Promise\](#update) + - [updateOne(query: Record, update: Record, options: Record): Promise\](#updateone) + - [delete(query: Object): Promise\](#delete) + - [deleteAll(): Promise\](#deleteall) + - [count(query: Object): Promise\](#count) + - [renameCollection(newColName: string, newSchema?: Object): Promise\](#renamecollection) + + - [Error classes](#error-classes) -When using the S3 API, the region for an R2 bucket is `auto`. For compatibility with tools that do not allow you to specify a region, an empty value and `us-east-1` will alias to the `auto` region. + - [lowstorageError](#lowstorageerror) + - [CollectionNotFoundError](#collectionnotfounderror) + - [SchemaValidationError](#schemavalidationerror) + - [DocumentValidationError](#documentvalidationerror) + - [S3OperationError](#s3operationerror) -### lowstorage Usage + - [Error codes](#error-codes) + + - [Important Notice](##important-notice) + + - [Contributing](##contributing) + + - [License](##license) + +### Usage & Examples ```js -import lowstorage from 'lowstorage'; +import { lowstorage, lowstorage_ERROR_CODES } from 'lowstorage'; // Initialize object and get users collection const storage = new lowstorage({ - endPoint: 'play.min.io', - port: 80, - region: 'auto', - useSSL: true, - accessKey: 'Q3AM3UQ867SPQQA43P2F', - secretKey: 'zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG', - bucketName: 'mybucket', + accessKeyId: 'YOUR_ACCESS_KEY', + secretAccessKey: 'YOUR_SECRET_KEY', + endpoint: 'YOUR_ENDPOINT', + bucketName: 'YOUR_BUCKET_NAME', + region: 'YOUR_REGION', + // optional params from here + logger: console, // logger object for your tough times + dirPrefix: 'lowstorage', // folder name prefix for collections + maxRequestSizeInBytes: 50 * 1024 * 1024, // request size in bytes for S3 operations (default: 5MB) }); -const userCol = storage.collection('users'); -// Add new user +// example user schema +const userAvroSchema = { + type: 'record', + name: 'User', + fields: [ + { name: '_id', type: 'string', size: 16, logicalType: 'UUID' }, + { name: 'name', type: 'string' }, + { name: 'age', type: 'int' }, + { name: 'gender', type: 'string' }, + { name: 'posts', type: { type: 'array', items: 'string' } }, + ], +}; + +// Create a collection +const userCol = await storage.createCollection('users'); +// or +const userCol = await storage.collection('users'); // get collection +// or +const userCol = await storage.collection('users', userAvroSchema); // get collection with specificschema + +// Add new user - Avro schema is inferred from the data (_id is optional and will be autogenerated) const newUser = await userCol.insert({ name: 'Kevin', + age: 32, gender: 'whatever', posts: [], }); @@ -64,27 +149,39 @@ const allUsers = await userCol.find({}); const secondPageUsers = await userCol.find({}, { skip: 10, limit: 10 }); // Find user by ID and update name -await userCol.update({ _id: id }, { name: 'Carlos' }); -``` +const kevin = await userCol.findOne({ name: 'Kevin' }); +await userCol.update({ _id: kevin._id }, { name: 'Carlos' }); -## Features +// Delete user +await userCol.delete({ name: 'Carlos' }); -- **Lightweight** -- **Minimalist** -- **Familiar API** -- **S3-compatibility** -- **Plain JavaScript** -- **Signle-dependency ([@aws-sdk/client-s3](https://www.npmjs.com/package/@aws-sdk/client-s3))** +// Delete all users +await userCol.deleteAll(); + +// Count users +const count = await userCol.count(); + +// Rename collection +await userCol.renameCollection('usersOld'); + +// Remove collection +await userCol.removeCollection(); + +// List all collections +const listCollections = await storage.listCollections(); + +// check the API section for more details or `/examples` folder for more examples +``` -## Install +### Installation ```sh npm install lowstorage -``` -#### Why S3-Compatible Storage? +yarn add lowstorage -> S3-compatible storages provide a reliable, scalable, and widely supported option for object storage. Platforms like AWS S3, Cloudflare R2, Minio and Ceph offer robust infrastructure with various features and pricing models to suit different needs. +pnpm add lowstorage +``` ### Setup & config @@ -93,7 +190,6 @@ To set up and bind your storage, configure your storage client with the appropri ```js const storage = new lowstorage({ endPoint: 's3.amazonaws.com', - useSSL: true, region: 'YOUR-REGION', accessKey: 'YOUR-ACCESSKEYID', secretKey: 'YOUR-SECRETACCESSKEY', @@ -105,93 +201,311 @@ For Cloudflare R2, follow similar steps with your R2-specific endpoint and crede ## API -**collection(colName)** - -- **Input**: A string representing the name of the collection. -- **Behavior**: Creates or accesses a collection with the given name. -- **Returns**: An instance of the Collection class corresponding to the specified collection name. - -- **insert(doc)** - -- **insert(doc)** - - - **Input**: A single object or an array of objects to insert into the collection. - - **Behavior**: Inserts the given document(s) into the collection. If an `_id` is not provided, a unique identifier is automatically generated using `crypto.randomUUID()`. - - **Returns**: The inserted document(s), with an `_id` property assigned to each if not already present. - -- **find(query, options)** - - - **Input**: - - `query`: A query object to match documents. - - `options`: An optional object for pagination, containing `skip` and `limit` properties. - - **Behavior**: Searches for documents matching the query. Supports pagination through `options`. - - **Returns**: A promise that resolves to an array of matching documents, considering any pagination specified. - -- **findOne(query)** + - - **Input**: A query object. - - **Behavior**: Similar to `find`, but it returns only the first matching document. - - **Returns**: A promise that resolves to a single document or `null` if no match is found. +### lowstorage class -- **update(query, update)** + - - **Input**: A query object and an update object. - - **Behavior**: Updates all documents that match the query with the provided update data. - - **Returns**: A promise that resolves to the number of documents updated. +#### constructor(options: S3Options) -- **updateOne(query, update)** +- **Behavior**: Creates a new lowstorage instance. - - **Input**: A query object and an update object. - - **Behavior**: Updates the first document that matches the query with the provided update data. - - **Returns**: A promise that resolves to `1` if a document is updated, otherwise `0`. +- **Input**: An object containing the following properties: + - `accessKeyId`: The access key ID for your S3 account. + - `secretAccessKey`: The secret access key for your S3 account. + - `endpoint`: The endpoint URL for your S3 account. + - `bucketName`: The name of the bucket to use. + - `region?`: The region for your S3 bucket. Default is `auto`. + - `logger?`: An optional logger object for your tough times. + - `dirPrefix?`: An optional directory prefix for your collections. Default is `lowstorage`. + - `maxRequestSizeInBytes?`: An optional maximum request size in bytes for S3 operations. Default is 5MB. +- **Returns**: A new lowstorage instance. +- **Throws**: A lowstorageError if there's an error. -- **delete(query)** +#### collection(colName: string, schema?: Object, autoCreate?: boolean) - - **Input**: A query object to match documents for deletion. - - **Behavior**: Deletes documents matching the query. - - **Returns**: A promise that resolves to the number of documents deleted. - -- **remove()** - - - **Behavior**: Removes all documents from the collection. - - **Returns**: A promise that resolves to the number of documents removed. - -- **count(query)** - - **Input**: A query object (optional). - - **Behavior**: Counts the number of documents that match the query. If no query is provided, it counts all documents in the collection. - - **Returns**: A promise that resolves to the count of matching documents. +- **Behavior**: Creates or accesses a collection with the given name. +- **Input**: A string representing the name of the collection and an optional schema object. + - `colName`: The name of the collection. + - `schema?`: An optional schema object for the collection. + - `autoCreate?`: An optional boolean indicating whether to automatically create the collection if it doesn't exist. Default is `true`. +- **Returns**: An instance of the Collection class corresponding to the specified collection name. +- **Throws**: A lowstorageError if there's an error. -**listCollections()** +#### listCollections(): Promise -- **Behavior**: Lists all collections stored in the Cloudflare R2 bucket associated with the lowstorage instance. (All files ending with .json) +- **Behavior**: Lists all collections stored in the lowstorage instance. - **Returns**: A promise that resolves to an array of collection names. +- **Throws**: A lowstorageError if there's an error. -## Examples +#### createCollection(colName: string, schema?: Object, data?: any[]): Promise\ -Check out [dummy examples](https://github.com/good-lly/lowstorage/tree/master/examples) -Run: +- **Behavior**: Creates a new collection with the given name and schema. +- **Input**: A string representing the name of the collection and an optional schema object. + - `colName`: The name of the collection. + - `schema?`: An optional schema object for the collection. + - `data?`: An optional array of data to initialize the collection with - if not provided, an empty array will be used and empty file will be created. +- **Returns**: A promise that resolves to a Collection object. +- **Throws**: A lowstorageError if there's an error. -```javascript -cd examples -npm install -npm run dev -``` +#### removeCollection(colName: string): Promise\ -for testing: - -```javascript -npm run test -``` +- **Behavior**: Removes a collection with the given name. +- **Input**: A string representing the name of the collection. + - `colName`: The name of the collection. +- **Returns**: A promise that resolves to a boolean indicating whether the collection was removed. +- **Throws**: A lowstorageError if there's an error. -It starts local wrangler with ENV and toml config from your /examples folder to run tests. +#### collectionExists(colName: string): Promise\ -## Limitations +- **Behavior**: Checks if a collection with the given name exists. +- **Input**: A string representing the name of the collection. + - `colName`: The name of the collection. +- **Returns**: A promise that resolves to a boolean indicating whether the collection exists. +- **Throws**: A lowstorageError if there's an error. + +#### s3(): S3 + +- **Behavior**: Returns the S3 instance associated with the lowstorage instance. For more check the [ultralight-s3 package](https://github.com/sentienhq/ultralight-s3). +- **Returns**: The S3 instance. + +## Collection class + +#### constructor(colName: string, schema: any, s3: S3, dirPrefix?: string, safeWrite?: boolean, chunkSize?: number) + +- **Behavior**: Creates a new Collection instance. +- **Input**: A string representing the name of the collection, an Avro schema object, an S3 instance, an optional directory prefix, an optional boolean indicating whether to perform safe writes, and an optional chunk size. + - `colName`: The name of the collection. + - `schema`: The Avro schema for the collection. + - `s3`: The S3 instance. + - `dirPrefix?`: An optional directory prefix for the collection. Default is `lowstorage`. + - `safeWrite?`: An optional boolean indicating whether to perform safe writes. Default is `false`. Safe writes doublechecks the ETag of the object before writing. False = overwrites the object, True = only writes if the object has not been modified. (One request extra for safe writes = slower) + - `chunkSize?`: An optional chunk size for reading and writing data. Default is 5MB. +- **Returns**: A new Collection instance. +- **Throws**: A lowstorageError if there's an error. + +#### getProps(): CollectionProps + +- **Behavior**: Returns the properties of the collection. +- **Returns**: An object containing the following properties: + - `colName`: The name of the collection. + - `s3`: The S3 instance. + - `schema`: The Avro schema for the collection. + - `avroParse`: The Avro parse instance. + - `avroType`: The Avro type instance. + - `dirPrefix`: The directory prefix for the collection. + - `safeWrite`: A boolean indicating whether to perform safe writes. + - `chunkSize`: The chunk size for reading and writing data. +- **Throws**: A lowstorageError if there's an error. + +#### setProps(props: CollectionProps): void + +- **Behavior**: Sets the properties of the collection. +- **Input**: An object containing the following properties: + - `props`: An object containing the following properties: + - `colName`: The name of the collection. + - `s3`: The S3 instance. + - `schema`: The Avro schema for the collection. + - `avroParse`: The Avro parse instance. + - `avroType`: The Avro type instance. + - `dirPrefix`: The directory prefix for the collection. + - `safeWrite`: A boolean indicating whether to perform safe writes. + - `chunkSize`: The chunk size for reading and writing data. +- **Returns**: A void. +- **Throws**: A lowstorageError if there's an error. + +#### setSafeWrite(safeWrite: boolean): void + +- **Behavior**: Sets the safe write property of the collection. +- **Input**: A boolean indicating whether to perform safe writes. + - `safeWrite`: A boolean indicating whether to perform safe writes. +- **Returns**: A void. +- **Throws**: A lowstorageError if there's an error. + +#### getSafeWrite(): boolean + +- **Behavior**: Returns the safe write property of the collection. +- **Returns**: A boolean indicating whether to perform safe writes. +- **Throws**: A lowstorageError if there's an error. + +#### getAvroSchema(): Object + +- **Behavior**: Returns the Avro schema of the collection. +- **Returns**: An object representing the Avro schema. +- **Throws**: A lowstorageError if there's an error. + +#### setAvroSchema(schema: Object): void + +- **Behavior**: Sets the Avro schema of the collection. +- **Input**: An object representing the Avro schema. + - `schema`: An object representing the Avro schema. +- **Returns**: A void. +- **Throws**: A lowstorageError if there's an error. + +#### inferAvroSchema(data: Object | Array\): Object + +- **Behavior**: Infers the Avro schema from the given data. +- **Input**: An object or an array of objects representing the data to infer the schema from. + - `data`: An object or an array of objects representing the data to infer the schema from. +- **Returns**: An object representing the inferred Avro schema. +- **Throws**: A lowstorageError if there's an error. + +#### insert(doc: Object | Array\, schema?: Object): Promise\ + +- **Behavior**: Inserts the given document(s) into the collection. +- **Input**: An object or an array of objects to insert into the collection. + - `doc`: An object or an array of objects to insert into the collection. + - `schema?`: An optional schema object for the collection. +- **Returns**: A promise that resolves to an array of inserted documents. +- **Throws**: A lowstorageError if there's an error. + +#### find(query: Object, options: Object): Promise\ + +- **Behavior**: Finds documents in the collection that match the given query. +- **Input**: An object representing the query to filter documents. + - `query`: An object representing the query to filter documents. + - `options`: An object representing the options for pagination. +- **Returns**: A promise that resolves to an array of matching documents. +- **Throws**: A lowstorageError if there's an error. + +#### findOne(query: Object): Promise\ + +- **Behavior**: Finds the first document in the collection that matches the given query. +- **Input**: An object representing the query to filter documents. + - `query`: An object representing the query to filter documents. +- **Returns**: A promise that resolves to the first matching document or null if no match is found. +- **Throws**: A lowstorageError if there's an error. + +#### update(query: Object, update: Object, options: Object): Promise\ + +- **Behavior**: Updates documents in the collection that match the given query. +- **Input**: An object representing the query to filter documents and an object representing the update operations. + - `query`: An object representing the query to filter documents. + - `update`: An object representing the update operations. + - `options`: An object representing the options for pagination. +- **Returns**: A promise that resolves to the number of documents updated. +- **Throws**: A lowstorageError if there's an error. + +#### updateOne(query: Record\, update: Record\, options: Record\): Promise\ + +- **Behavior**: Updates the first document in the collection that matches the given query. +- **Input**: An object representing the query to filter the document to update and an object representing the update operations. + - `query`: An object representing the query to filter the document to update. + - `update`: An object representing the update operations. + - `options`: An object representing the options for pagination. +- **Returns**: A promise that resolves to the number of documents updated. +- **Throws**: A lowstorageError if there's an error. + +#### delete(query: Object): Promise\ + +- **Behavior**: Deletes documents in the collection that match the given query. +- **Input**: An object representing the query to filter documents. + - `query`: An object representing the query to filter documents. +- **Returns**: A promise that resolves to the number of documents deleted. +- **Throws**: A lowstorageError if there's an error. + +#### deleteAll(): Promise\ + +- **Behavior**: Deletes all documents in the collection. +- **Returns**: A promise that resolves to the number of documents deleted. +- **Throws**: A lowstorageError if there's an error. + +#### count(query: Object): Promise\ + +- **Behavior**: Counts the number of documents in the collection that match the given query. +- **Input**: An object representing the query to filter documents. + - `query`: An object representing the query to filter documents. +- **Returns**: A promise that resolves to the number of documents in the collection. +- **Throws**: A lowstorageError if there's an error. + +#### renameCollection(newColName: string, newSchema?: Object): Promise\ + +- **Behavior**: Renames the collection with the given name and schema. +- **Input**: A string representing the new name of the collection and an optional new schema object. + - `newColName`: The new name of the collection. + - `newSchema?`: An optional new schema object for the collection. +- **Returns**: A promise that resolves to a Collection object. +- **Throws**: A lowstorageError if there's an error. + +## Error classes + +#### lowstorageError + +- **Behavior**: Represents a lowstorage error. +- **Input**: An optional string representing the error message and an optional error code. + - `message?`: An optional string representing the error message. + - `code?`: An optional error code. +- **Returns**: A new lowstorageError instance. +- **Throws**: A lowstorageError if there's an error. + +#### CollectionNotFoundError + +- **Behavior**: Represents a CollectionNotFound error. +- **Input**: An optional string representing the error message and an optional error code. + - `message?`: An optional string representing the error message. + - `code?`: An optional error code. +- **Returns**: A new CollectionNotFoundError instance. +- **Throws**: A lowstorageError if there's an error. + +#### SchemaValidationError + +- **Behavior**: Represents a SchemaValidation error. +- **Input**: An optional string representing the error message and an optional error code. + - `message?`: An optional string representing the error message. + - `code?`: An optional error code. +- **Returns**: A new SchemaValidationError instance. +- **Throws**: A lowstorageError if there's an error. + +#### DocumentValidationError + +- **Behavior**: Represents a DocumentValidation error. +- **Input**: An optional string representing the error message and an optional error code. + - `message?`: An optional string representing the error message. + - `code?`: An optional error code. +- **Returns**: A new DocumentValidationError instance. +- **Throws**: A lowstorageError if there's an error. + +#### S3OperationError + +- **Behavior**: Represents an S3Operation error. +- **Input**: An optional string representing the error message and an optional error code. + - `message?`: An optional string representing the error message. + - `code?`: An optional error code. +- **Returns**: A new S3OperationError instance. +- **Throws**: A lowstorageError if there's an error. + +## Error codes + +#### lowstorage_ERROR_CODES + +- **Behavior**: Represents a lowstorage error code constants. Check the [error classes](#error-classes) and [`src/errors.ts`](https://github.com/good-lly/lowstorage/blob/master/src/errors.ts) for more details. +- **Returns**: An object containing the following properties: + - `MISSING_ARGUMENT`: A string representing the missing argument error code. + - `COLLECTION_EXISTS`: A string representing the collection exists error code. + - `CREATE_COLLECTION_ERROR`: A string representing the create collection error code. + - `RENAME_COLLECTION_ERROR`: A string representing the rename collection error code. + - `REMOVE_COLLECTION_ERROR`: A string representing the remove collection error code. + - `UPDATE_COLLECTION_SCHEMA_ERROR`: A string representing the update collection schema error code. + - `COLLECTION_NOT_FOUND`: A string representing the collection not found error code. + - `SCHEMA_VALIDATION_ERROR`: A string representing the schema validation error code. + - `DOCUMENT_VALIDATION_ERROR`: A string representing the document validation error code. + - `S3_OPERATION_ERROR`: A string representing the S3 operation error code. + - `FIND_ERROR`: A string representing the find error code. + - `FIND_ONE_ERROR`: A string representing the find one error code. + - `SAVE_DATA_ERROR`: A string representing the save data error code. + - `INSERT_ERROR`: A string representing the insert error code. + - `UPDATE_ERROR`: A string representing the update error code. + - `UPDATE_ONE_ERROR`: A string representing the update one error code. + - `DELETE_ERROR`: A string representing the delete error code. + - `COUNT_ERROR`: A string representing the count error code. + - `UNKNOWN_ERROR`: A string representing the unknown error code. + +## Important Notice -- no test coverage (wip) lowstorage is using end to end tests via its examples -- response speed (no benchmarks so far) -- use carefully! +`lowstorage` is primarily designed for small, hobby, or personal projects. We advise extreme caution when using `lowstorage` for critical applications or production environments, as it may not offer the robustness or features required for such use cases. -## Contribution +## Contributing Feel free to dive in! [Open an issue](https://github.com/good-lly/lowstorage/issues/new) or submit PRs. diff --git a/build/lowstorage.js b/build/lowstorage.min.js similarity index 92% rename from build/lowstorage.js rename to build/lowstorage.min.js index 2354879..c99c37d 100644 --- a/build/lowstorage.js +++ b/build/lowstorage.min.js @@ -80,5 +80,5 @@ import qe from"buffer";import xt from"crypto";import De from"util";import vt fro `).join("")} - `}async delete(h){this._checkKey(h),this._log("info",`Deleting object ${h}`);let l={[Te]:xe,[_e]:ye},c=me(h),{url:d,headers:_}=await this._sign("DELETE",c,{},l,""),g=await this._sendRequest(d,"DELETE",_);return g.status===204||g.status===200}async _sendRequest(h,l,c,d,_=[]){this._log("info",`Sending ${l} request to ${h}, headers: ${JSON.stringify(c)}`);let g=await fetch(h,{method:l,headers:c,body:["GET","HEAD"].includes(l)?void 0:d,signal:this.requestAbortTimeout!==void 0?AbortSignal.timeout(this.requestAbortTimeout):void 0});return!g.ok&&!_.includes(g.status)&&await this._handleErrorResponse(g),g}async _handleErrorResponse(h){let l=await h.text(),c=h.headers.get("x-amz-error-code")||"Unknown",d=h.headers.get("x-amz-error-message")||h.statusText;throw this._log("error",`${se}Request failed with status ${h.status}: ${c} - ${d},err body: ${l}`),new Error(`${se}Request failed with status ${h.status}: ${c} - ${d}, err body: ${l}`)}_buildCanonicalQueryString(h){return Object.keys(h).length<1?"":Object.keys(h).sort().map(l=>`${encodeURIComponent(l)}=${encodeURIComponent(h[l])}`).join("&")}async _getSignatureKey(h){let l=await Me(`AWS4${this.secretAccessKey}`,h),c=await Me(l,this.region),d=await Me(c,Ze);return Me(d,Xe)}},We=async h=>{let l=Tt("sha256");return l.update(h),l.digest("hex")},Me=async(h,l,c)=>{let d=Et("sha256",h);return d.update(l),d.digest(c)},He=h=>{let l={'"':"",""":"",""":"",""":"",""":""};return h.replace(/^("|"|")|("|"|")$/g,c=>l[c])},Be=h=>{let l=g=>g.replace(/"/g,'"').replace(/'/g,"'").replace(/</g,"<").replace(/>/g,">").replace(/&/g,"&"),c={},d=/<(\w)([-\w]+)(?:\/|[^>]*>((?:(?!<\1)[\s\S])*)<\/\1\2)>/gm,_;for(;_=d.exec(h);){let[,g,O,T]=_,v=g.toLowerCase()+O,R=T!=null?Be(T):!0;typeof R=="string"?c[v]=He(l(R)):Array.isArray(c[v])?c[v].push(R):c[v]=c[v]!=null?[c[v],R]:Xt[v]?[R]:R}return Object.keys(c).length?c:l(h)},Ot=Lt(Ht(),1),z={MISSING_ARGUMENT:"MISSING_ARGUMENT",COLLECTION_EXISTS:"COLLECTION_EXISTS",CREATE_COLLECTION_ERROR:"CREATE_COLLECTION_ERROR",RENAME_COLLECTION_ERROR:"RENAME_COLLECTION_ERROR",REMOVE_COLLECTION_ERROR:"REMOVE_COLLECTION_ERROR",UPDATE_COLLECTION_SCHEMA_ERROR:"UPDATE_COLLECTION_SCHEMA_ERROR",COLLECTION_NOT_FOUND:"COLLECTION_NOT_FOUND",SCHEMA_VALIDATION_ERROR:"SCHEMA_VALIDATION_ERROR",DOCUMENT_VALIDATION_ERROR:"DOCUMENT_VALIDATION_ERROR",S3_OPERATION_ERROR:"S3_OPERATION_ERROR",FIND_ERROR:"FIND_ERROR",FIND_ONE_ERROR:"FIND_ONE_ERROR",SAVE_DATA_ERROR:"SAVE_DATA_ERROR",INSERT_ERROR:"INSERT_ERROR",UPDATE_ERROR:"UPDATE_ERROR",UPDATE_ONE_ERROR:"UPDATE_ONE_ERROR",DELETE_ERROR:"DELETE_ERROR",COUNT_ERROR:"COUNT_ERROR",UNKNOWN_ERROR:"UNKNOWN_ERROR"},oe=class extends Error{constructor(h,l=z.UNKNOWN_ERROR){super(`lowstorageError: ${h} :: code: ${l}`),this.name=this.constructor.name,this.code=l,Error.captureStackTrace(this,this.constructor)}},Ne=class extends oe{constructor(h,l=z.SCHEMA_VALIDATION_ERROR){super(h,z.SCHEMA_VALIDATION_ERROR)}},Le=class extends oe{constructor(h,l=z.DOCUMENT_VALIDATION_ERROR){super(h,z.DOCUMENT_VALIDATION_ERROR)}},le=class extends oe{constructor(h,l){super(`S3 ${l} operation failed: ${h}`,z.S3_OPERATION_ERROR)}},Ye=(h,l)=>Object.keys(l).every(c=>h[c]===l[c]),tr=async()=>typeof et<"u"&&typeof et=="function"?et():typeof crypto<"u"&&typeof crypto=="object"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(h){var l=Math.random()*16|0,c=h==="x"?l:l&3|8;return c.toString(16)}),Qe=h=>{let l={name:"_id",type:"string",size:16,logicalType:"UUID"};return typeof h>"u"||h===null||("type"in h&&h.type==="record"&&"fields"in h&&Array.isArray(h.fields)?h.fields.some(d=>d.name==="_id")||h.fields.unshift(l):"type"in h&&h.type==="array"&&"items"in h&&h.items!==null&&typeof h.items=="object"&&"type"in h.items&&h.items.type==="record"&&"fields"in h.items&&Array.isArray(h.items.fields)&&(h.items.fields.some(d=>d.name==="_id")||h.items.fields.unshift(l))),h},Y="lowstorage",Oe="/",Rt="lowstorage",Re=".avro",rr=1024*1024,_t=5*rr,it=Buffer.from("","utf8"),tt=(h=z.DOCUMENT_VALIDATION_ERROR)=>{throw new Le(`${Y}: Invalid document or schema ${h}`)},Ve=(h="")=>{if(h.trim()===""||h===null||typeof h>"u"||h.length>255||h===null)throw new oe(`${Y}: Collection name is required, null or too long`,z.MISSING_ARGUMENT)},yr=class{constructor(h){this._checkArgs=l=>{let c=["accessKeyId","secretAccessKey","endpoint","bucketName"];for(let d of c)if(!l[d])throw new oe(`${Y}: ${d} is required`,z.MISSING_ARGUMENT)},this.s3=()=>this._s3,this._checkArgs(h),this._schemas=new Map,this._s3=new er(h),this._dirPrefix=h.dirPrefix||Rt,this._avroParse=Ot.Type}async listCollections(){try{let h=await this._s3.list(Oe,this._dirPrefix);return Array.isArray(h)?h.map(l=>l.key.slice(this._dirPrefix.length+1,-Re.length)):typeof h=="object"&&h!==null&&"keyCount"in h&&h.keyCount==="0"?[]:[]}catch(h){throw new le(`${Y}: ${h.message}`,z.S3_OPERATION_ERROR)}}async collectionExists(h=""){try{return Ve(h),!!await this._s3.fileExists(`${this._dirPrefix}${Oe}${h}${Re}`)}catch(l){if(l.message.includes("Not Found"))return!1;throw new oe(`${Y}: ${l.message}`,z.COLLECTION_NOT_FOUND)}}async createCollection(h="",l,c=[]){try{if(Ve(h),!await this.collectionExists(h)){if(typeof l<"u"&&l!==null)try{if(!this._avroParse.forSchema(l))throw new Ne(`${Y}: Schema is invalid: ${l} ${z.SCHEMA_VALIDATION_ERROR}`)}catch{throw new Ne(`${Y}: Schema is invalid: ${l}`,z.SCHEMA_VALIDATION_ERROR)}if(c.length>0&&l){let _=this._avroParse.forSchema({type:"array",items:l});await this._s3.put(`${this._dirPrefix}${Oe}${h}${Re}`,_.toBuffer(c))}else await this._s3.put(`${this._dirPrefix}${Oe}${h}${Re}`,it);return this.collection(h,l,!1)}throw new oe(`${Y}: Collection ${h} already exists`,z.COLLECTION_EXISTS)}catch(d){throw d instanceof oe?d:new oe(`${Y}: ${d.message}`,z.CREATE_COLLECTION_ERROR)}}async removeCollection(h=""){try{if(Ve(h),await this.collectionExists(h)){await this._s3.delete(`${this._dirPrefix}${Oe}${h}${Re}`);let c=await this.collectionExists(h);if(typeof c=="boolean"){if(!c)return this._schemas.delete(h),!0;throw new oe(`${Y}: Failed to delete collection ${h}`,z.S3_OPERATION_ERROR)}throw new le(`${Y}: Failed to delete collection ${h}`,z.S3_OPERATION_ERROR)}throw new oe(`${Y}: Collection ${h} does not exist`,z.REMOVE_COLLECTION_ERROR)}catch(l){throw l instanceof le?l:new oe(`${Y}: Failed to remove collection: ${l.message}`,z.REMOVE_COLLECTION_ERROR)}}async collection(h="",l,c=!0){try{Ve(h);let d=`${this._dirPrefix}${Oe}${h}${Re}`;if(!await this._s3.fileExists(d)){if(!c)throw new oe(`${Y}: Collection ${h} does not exist`,z.COLLECTION_NOT_FOUND);await this._s3.put(d,it)}let g=l||this._schemas.get(h)||void 0;return new ir(h,g,this._s3,this._dirPrefix)}catch(d){throw d.message.includes("unknown type")?new Ne(`${Y}: Schema input is invalid: ${d.message}`,z.SCHEMA_VALIDATION_ERROR):new oe(`${Y}: ${d.message}`,z.COLLECTION_NOT_FOUND)}}},ir=class St{constructor(l="",c,d,_=Rt,g=!1,O=_t){this.getProps=()=>({colName:this._colName,s3:this._s3,schema:this._schema,avroParse:this._avroParse,avroType:this._avroType,dirPrefix:this._dirPrefix,safeWrite:this._safeWrite,chunkSize:this._chunkSize}),this.setProps=T=>{this._colName=T.colName,this._schema=T.schema,this._s3=T.s3,this._avroParse=T.avroParse,this._avroType=T.avroType,this._dirPrefix=T.dirPrefix,this._safeWrite=T.safeWrite,this._chunkSize=T.chunkSize},this.setSafeWrite=T=>{this._safeWrite=T},this.getSafeWrite=()=>this._safeWrite,this.getAvroSchema=()=>this._schema,this.setAvroSchema=T=>{try{this._schema=Qe(T),this._avroType=typeof T>"u"?null:this._avroParse.forSchema(T)}catch(v){throw new oe(`${Y}: ${v.message}`,z.SCHEMA_VALIDATION_ERROR)}},this.inferAvroSchema=(T,v="record")=>{Array.isArray(T)&&(T=T[0]);let C=this._avroParse.forValue(T).schema();return Qe(C)},this._colName=l.trim(),this._s3=d,this._schema=Qe(c),this._dirPrefix=_,this._safeWrite=g,this._chunkSize=O||_t,this._s3.setMaxRequestSizeInBytes(this._chunkSize),this._avroParse=Ot.Type,this._lastETag="",this._dataCache=[],this._avroType=typeof c>"u"?null:this._avroParse.forSchema(c),this._key=`${this._dirPrefix}${Oe}${this._colName}${Re}`}async _loadData(){try{if(this._avroType===null||typeof this._avroType>"u")throw new oe(`${Y}: Missing type definition. Configure before operations `,z.SCHEMA_VALIDATION_ERROR);let{etag:l,data:c}=await this._s3.getObjectWithETag(this._key,{"if-none-match":this._lastETag});if(c===null)return this._dataCache;this._lastETag=l===null?this._lastETag:l;let d=this._avroParse.forSchema({type:"array",items:this._avroType});if(c.length0?d.fromBuffer(Buffer.from(c,"utf8")):[],this._dataCache;let _=this._chunkSize,g=[Buffer.from(c,"utf8")],O=!0;for(;O;){let v=await this._s3.getResponse(this._key,!1,_,_+this._chunkSize),R=await v.text();g.push(Buffer.from(R,"utf8")),_+=this._chunkSize,parseInt(v.headers.get("content-length")||R.length.toString())-1)return this._dataCache=[],this._dataCache;throw new le(`${Y}: Failed to load data: ${l.message}`,z.S3_OPERATION_ERROR)}}async _saveData(l){try{if(this._avroType===null||typeof this._avroType>"u")throw new oe(`${Y}: Missing type definition. Configure before operations `,z.SCHEMA_VALIDATION_ERROR);let c=this._avroParse.forSchema({type:"array",items:this._avroType}),d=l.length>0?c.toBuffer(l):it;if(this._safeWrite&&this._lastETag!==""){let O=await this._s3.getEtag(this._key);if(O!==null&&O!==this._lastETag)return!1}let _=await this._s3.put(this._key,d);if(typeof _=="object"&&"status"in _&&_.status!==200)throw new le(`${Y}: Failed to save data`,z.S3_OPERATION_ERROR);let g=_.headers?.get("etag")||"";return g&&g.length>0&&(this._lastETag=this._s3.sanitizeETag(g),this._dataCache=l),!0}catch(c){throw c instanceof le?c:new oe(`${Y}: ${c.message}`,z.SAVE_DATA_ERROR)}}async insert(l,c){try{if(l==null)throw new oe(`${Y}: Document is required for insert`,z.INSERT_ERROR);if(typeof l!="object"&&!Array.isArray(l))throw new Le(`${Y}: Document must be an object or an array`,z.DOCUMENT_VALIDATION_ERROR);let d=Array.isArray(l)?l:[l],_=c?Qe(c):this._schema||this.inferAvroSchema(d[0]),g=this._avroParse.forSchema(_);if(!g)throw new Ne(`${Y}: Schema is required - Pass a schema to the insert method`,z.SCHEMA_VALIDATION_ERROR);this._avroType=g;let O=await this._loadData();for(let v of d){if(typeof v!="object"||v===null)throw new Le(`${Y}: Invalid input: input must be an object or an array of objects`,z.DOCUMENT_VALIDATION_ERROR);if(v._id=v._id||await tr(),this._avroType.isValid(v,{errorHook:tt,noUndeclaredFields:!0})===!0)O.push(v);else throw new Le(`${Y}: Invalid document or schema`,z.DOCUMENT_VALIDATION_ERROR)}if(!await this._saveData(O))throw new le(`${Y}: Failed to insert document`,z.S3_OPERATION_ERROR);return this.setAvroSchema(_),d}catch(d){throw d.message.includes("unknown type")?new Ne(`${Y}: Schema input is invalid: ${d.message}`,z.SCHEMA_VALIDATION_ERROR):d instanceof oe?d:new oe(`${Y} Insert operation failed: ${d.message}`,z.INSERT_ERROR)}}async find(l={},c={}){try{if(l==null)throw new oe(`${Y}: Query is required for update`,z.MISSING_ARGUMENT);let d=await this._loadData(),_=c.skip!==void 0?parseInt(String(c.skip),10):0,g=c.limit!==void 0?_+parseInt(String(c.limit),10):void 0;return d.filter(T=>Ye(T,l)).slice(_,g)}catch(d){throw new oe(`${Y}: Find operation failed: ${d.message}`,z.FIND_ERROR)}}async findOne(l={}){try{if(l===null)throw new oe(`${Y}: Query cannot be null`,z.INVALID_ARGUMENT);return(await this.find(l,{limit:1}))[0]||null}catch(c){throw c instanceof oe?c:new oe(`${Y}: FindOne operation failed: ${c.message}`,z.FIND_ONE_ERROR)}}async update(l={},c={},d={}){try{if(l==null||c===void 0||c===null)throw new oe(`${Y}: Query and update values are required for update`,z.MISSING_ARGUMENT);if(!this._avroType)throw new Ne(`${Y}: Schema is not defined for this collection`,z.SCHEMA_VALIDATION_ERROR);let _=await this._loadData();if(_.length===0)return 0;let g=0;for(let O=0;O<_.length;O++)if(Ye(_[O],l)){let T={..._[O],...c};if(this._avroType.isValid(T,{errorHook:tt,noUndeclaredFields:!0})===!0)_[O]=T,g++;else throw new Le(`${Y}: Invalid document or schema`,z.DOCUMENT_VALIDATION_ERROR)}if(g>0){if(!await this._saveData(_))throw new le(`${Y}: Failed to update document`,z.S3_OPERATION_ERROR)}else if(d&&"upsert"in d&&d.upsert){if(!await this.insert(c))throw new le(`${Y}: Failed to update document`,z.S3_OPERATION_ERROR);g=1}return g}catch(_){throw _ instanceof le?_:new oe(`${Y}: Update operation failed: ${_.message}`,z.UPDATE_ERROR)}}async updateOne(l={},c={},d={}){try{if(l==null||c===void 0||c===null)throw new oe(`${Y}: Query is required`,z.MISSING_ARGUMENT);if(!this._avroType)throw new Ne(`${Y}: Schema is not defined for this collection`,z.SCHEMA_VALIDATION_ERROR);let _=await this._loadData();if(_.length===0)return 0;let g=_.findIndex(O=>Ye(O,l));if(g!==-1){let O={..._[g],...c};if(this._avroType.isValid(O,{errorHook:tt,noUndeclaredFields:!0})===!0){if(_[g]=O,!await this._saveData(_))throw new le(`${Y}: Failed to update document`,z.S3_OPERATION_ERROR);return 1}else throw new Le(`${Y}: Invalid document or schema`,z.DOCUMENT_VALIDATION_ERROR)}if(d&&"upsert"in d&&d.upsert){if(!await this.insert(c))throw new le(`${Y}: Failed to update document`,z.S3_OPERATION_ERROR);return 1}return 0}catch(_){throw _ instanceof oe?_:new oe(`${Y}: UpdateOne operation failed: ${_.message}`,z.UPDATE_ONE_ERROR)}}async delete(l={}){try{if(l==null)throw new oe(`${Y}: Query is required`,z.MISSING_ARGUMENT);let c=await this._loadData();if(c.length===0)return 0;let d=c.length,_=c.filter(O=>!Ye(O,l));if(!await this._saveData(_))throw new le(`${Y}: Failed to delete document`,z.S3_OPERATION_ERROR);return d-_.length}catch(c){throw c instanceof le?c:new oe(`${Y}: Delete operation failed: ${c.message}`,z.DELETE_ERROR)}}async deleteAll(){try{let c=(await this._loadData()).length;if(!await this._saveData([]))throw new le(`${Y}: Failed to delete document`,z.S3_OPERATION_ERROR);return c}catch(l){throw l instanceof le?l:new oe(`${Y}: Delete operation failed: ${l.message}`,z.DELETE_ERROR)}}async count(l={}){try{return(await this.find(l)).length}catch(c){throw new oe(`${Y}: Count operation failed: ${c.message}`,z.COUNT_ERROR)}}async renameCollection(l,c=this._schema){try{if(Ve(l),await this._s3.fileExists(`${this._dirPrefix}${Oe}${l}${Re}`))throw new oe(`${Y}: Collection ${l} already exists`,z.COLLECTION_EXISTS);let _=c||this.getAvroSchema(),g=await this._loadData(),O=new St(l,_,this._s3,this._dirPrefix,this._safeWrite,this._chunkSize);return await O._saveData(g),await this._s3.delete(`${this._dirPrefix}${Oe}${this._colName}${Re}`),O}catch(d){throw d instanceof oe?d:new oe(`${Y}: Rename collection failed: ${d.message}`,z.RENAME_COLLECTION_ERROR)}}};export{yr as lowstorage,oe as lowstorageError,z as lowstorage_ERROR_CODES}; -//# sourceMappingURL=lowstorage.js.map + `}async delete(h){this._checkKey(h),this._log("info",`Deleting object ${h}`);let l={[Te]:xe,[_e]:ye},c=me(h),{url:d,headers:_}=await this._sign("DELETE",c,{},l,""),g=await this._sendRequest(d,"DELETE",_);return g.status===204||g.status===200}async _sendRequest(h,l,c,d,_=[]){this._log("info",`Sending ${l} request to ${h}, headers: ${JSON.stringify(c)}`);let g=await fetch(h,{method:l,headers:c,body:["GET","HEAD"].includes(l)?void 0:d,signal:this.requestAbortTimeout!==void 0?AbortSignal.timeout(this.requestAbortTimeout):void 0});return!g.ok&&!_.includes(g.status)&&await this._handleErrorResponse(g),g}async _handleErrorResponse(h){let l=await h.text(),c=h.headers.get("x-amz-error-code")||"Unknown",d=h.headers.get("x-amz-error-message")||h.statusText;throw this._log("error",`${se}Request failed with status ${h.status}: ${c} - ${d},err body: ${l}`),new Error(`${se}Request failed with status ${h.status}: ${c} - ${d}, err body: ${l}`)}_buildCanonicalQueryString(h){return Object.keys(h).length<1?"":Object.keys(h).sort().map(l=>`${encodeURIComponent(l)}=${encodeURIComponent(h[l])}`).join("&")}async _getSignatureKey(h){let l=await Me(`AWS4${this.secretAccessKey}`,h),c=await Me(l,this.region),d=await Me(c,Ze);return Me(d,Xe)}},We=async h=>{let l=Tt("sha256");return l.update(h),l.digest("hex")},Me=async(h,l,c)=>{let d=Et("sha256",h);return d.update(l),d.digest(c)},He=h=>{let l={'"':"",""":"",""":"",""":"",""":""};return h.replace(/^("|"|")|("|"|")$/g,c=>l[c])},Be=h=>{let l=g=>g.replace(/"/g,'"').replace(/'/g,"'").replace(/</g,"<").replace(/>/g,">").replace(/&/g,"&"),c={},d=/<(\w)([-\w]+)(?:\/|[^>]*>((?:(?!<\1)[\s\S])*)<\/\1\2)>/gm,_;for(;_=d.exec(h);){let[,g,O,T]=_,v=g.toLowerCase()+O,R=T!=null?Be(T):!0;typeof R=="string"?c[v]=He(l(R)):Array.isArray(c[v])?c[v].push(R):c[v]=c[v]!=null?[c[v],R]:Xt[v]?[R]:R}return Object.keys(c).length?c:l(h)},Ot=Lt(Ht(),1),z={MISSING_ARGUMENT:"MISSING_ARGUMENT",COLLECTION_EXISTS:"COLLECTION_EXISTS",CREATE_COLLECTION_ERROR:"CREATE_COLLECTION_ERROR",RENAME_COLLECTION_ERROR:"RENAME_COLLECTION_ERROR",REMOVE_COLLECTION_ERROR:"REMOVE_COLLECTION_ERROR",UPDATE_COLLECTION_SCHEMA_ERROR:"UPDATE_COLLECTION_SCHEMA_ERROR",COLLECTION_NOT_FOUND:"COLLECTION_NOT_FOUND",SCHEMA_VALIDATION_ERROR:"SCHEMA_VALIDATION_ERROR",DOCUMENT_VALIDATION_ERROR:"DOCUMENT_VALIDATION_ERROR",S3_OPERATION_ERROR:"S3_OPERATION_ERROR",FIND_ERROR:"FIND_ERROR",FIND_ONE_ERROR:"FIND_ONE_ERROR",SAVE_DATA_ERROR:"SAVE_DATA_ERROR",INSERT_ERROR:"INSERT_ERROR",UPDATE_ERROR:"UPDATE_ERROR",UPDATE_ONE_ERROR:"UPDATE_ONE_ERROR",DELETE_ERROR:"DELETE_ERROR",COUNT_ERROR:"COUNT_ERROR",UNKNOWN_ERROR:"UNKNOWN_ERROR"},oe=class extends Error{constructor(h,l=z.UNKNOWN_ERROR){super(`lowstorageError: ${h} :: code: ${l}`),this.name=this.constructor.name,this.code=l,Error.captureStackTrace(this,this.constructor)}},Ne=class extends oe{constructor(h,l=z.SCHEMA_VALIDATION_ERROR){super(h,z.SCHEMA_VALIDATION_ERROR)}},Le=class extends oe{constructor(h,l=z.DOCUMENT_VALIDATION_ERROR){super(h,z.DOCUMENT_VALIDATION_ERROR)}},le=class extends oe{constructor(h,l){super(`S3 ${l} operation failed: ${h}`,z.S3_OPERATION_ERROR)}},Ye=(h,l)=>Object.keys(l).every(c=>h[c]===l[c]),tr=async()=>typeof et<"u"&&typeof et=="function"?et():typeof crypto<"u"&&typeof crypto=="object"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(h){var l=Math.random()*16|0,c=h==="x"?l:l&3|8;return c.toString(16)}),Qe=h=>{let l={name:"_id",type:"string",size:16,logicalType:"UUID"};return typeof h>"u"||h===null||("type"in h&&h.type==="record"&&"fields"in h&&Array.isArray(h.fields)?h.fields.some(d=>d.name==="_id")||h.fields.unshift(l):"type"in h&&h.type==="array"&&"items"in h&&h.items!==null&&typeof h.items=="object"&&"type"in h.items&&h.items.type==="record"&&"fields"in h.items&&Array.isArray(h.items.fields)&&(h.items.fields.some(d=>d.name==="_id")||h.items.fields.unshift(l))),h},Y="lowstorage",Oe="/",Rt="lowstorage",Re=".avro",rr=1024*1024,_t=5*rr,it=Buffer.from("","utf8"),tt=(h=z.DOCUMENT_VALIDATION_ERROR)=>{throw new Le(`${Y}: Invalid document or schema ${h}`)},Ve=(h="")=>{if(h.trim()===""||h===null||typeof h>"u"||h.length>255||h===null)throw new oe(`${Y}: Collection name is required, null or too long`,z.MISSING_ARGUMENT)},yr=class{constructor(h){this._checkArgs=l=>{let c=["accessKeyId","secretAccessKey","endpoint","bucketName"];for(let d of c)if(!l[d])throw new oe(`${Y}: ${d} is required`,z.MISSING_ARGUMENT)},this.s3=()=>this._s3,this._checkArgs(h),this._schemas=new Map,this._s3=new er(h),this._dirPrefix=h.dirPrefix||Rt,this._avroParse=Ot.Type}async listCollections(){try{let h=await this._s3.list(Oe,this._dirPrefix);return Array.isArray(h)?h.map(l=>l.key.slice(this._dirPrefix.length+1,-Re.length)):typeof h=="object"&&h!==null&&"keyCount"in h&&h.keyCount==="0"?[]:[]}catch(h){throw new le(`${Y}: ${h.message}`,z.S3_OPERATION_ERROR)}}async collectionExists(h=""){try{return Ve(h),!!await this._s3.fileExists(`${this._dirPrefix}${Oe}${h}${Re}`)}catch(l){if(l.message.includes("Not Found"))return!1;throw new oe(`${Y}: ${l.message}`,z.COLLECTION_NOT_FOUND)}}async createCollection(h="",l,c=[]){try{if(Ve(h),!await this.collectionExists(h)){if(typeof l<"u"&&l!==null)try{if(this._avroParse.forSchema(l))this._schemas.set(h,l);else throw new Ne(`${Y}: Schema is invalid: ${l} ${z.SCHEMA_VALIDATION_ERROR}`)}catch{throw new Ne(`${Y}: Schema is invalid: ${l}`,z.SCHEMA_VALIDATION_ERROR)}if(c.length>0&&l){let _=this._avroParse.forSchema({type:"array",items:l});await this._s3.put(`${this._dirPrefix}${Oe}${h}${Re}`,_.toBuffer(c))}else await this._s3.put(`${this._dirPrefix}${Oe}${h}${Re}`,it);return this.collection(h,l,!1)}throw new oe(`${Y}: Collection ${h} already exists`,z.COLLECTION_EXISTS)}catch(d){throw d instanceof oe?d:new oe(`${Y}: ${d.message}`,z.CREATE_COLLECTION_ERROR)}}async removeCollection(h=""){try{if(Ve(h),await this.collectionExists(h)){await this._s3.delete(`${this._dirPrefix}${Oe}${h}${Re}`);let c=await this.collectionExists(h);if(typeof c=="boolean"){if(!c)return this._schemas.delete(h),!0;throw new oe(`${Y}: Failed to delete collection ${h}`,z.S3_OPERATION_ERROR)}throw new le(`${Y}: Failed to delete collection ${h}`,z.S3_OPERATION_ERROR)}throw new oe(`${Y}: Collection ${h} does not exist`,z.REMOVE_COLLECTION_ERROR)}catch(l){throw l instanceof le?l:new oe(`${Y}: Failed to remove collection: ${l.message}`,z.REMOVE_COLLECTION_ERROR)}}async collection(h="",l,c=!0){try{Ve(h);let d=`${this._dirPrefix}${Oe}${h}${Re}`;if(!await this._s3.fileExists(d)){if(!c)throw new oe(`${Y}: Collection ${h} does not exist`,z.COLLECTION_NOT_FOUND);await this._s3.put(d,it)}let g=l||this._schemas.get(h)||void 0;return new ir(h,g,this._s3,this._dirPrefix)}catch(d){throw d.message.includes("unknown type")?new Ne(`${Y}: Schema input is invalid: ${d.message}`,z.SCHEMA_VALIDATION_ERROR):new oe(`${Y}: ${d.message}`,z.COLLECTION_NOT_FOUND)}}},ir=class St{constructor(l="",c,d,_=Rt,g=!1,O=_t){this.getProps=()=>({colName:this._colName,s3:this._s3,schema:this._schema,avroParse:this._avroParse,avroType:this._avroType,dirPrefix:this._dirPrefix,safeWrite:this._safeWrite,chunkSize:this._chunkSize}),this.setProps=T=>{this._colName=T.colName,this._schema=T.schema,this._s3=T.s3,this._avroParse=T.avroParse,this._avroType=T.avroType,this._dirPrefix=T.dirPrefix,this._safeWrite=T.safeWrite,this._chunkSize=T.chunkSize},this.setSafeWrite=T=>{this._safeWrite=T},this.getSafeWrite=()=>this._safeWrite,this.getAvroSchema=()=>this._schema,this.setAvroSchema=T=>{try{this._schema=Qe(T),this._avroType=typeof T>"u"?null:this._avroParse.forSchema(T)}catch(v){throw new oe(`${Y}: ${v.message}`,z.SCHEMA_VALIDATION_ERROR)}},this.inferAvroSchema=(T,v="record")=>{Array.isArray(T)&&(T=T[0]);let C=this._avroParse.forValue(T).schema();return Qe(C)},this._colName=l.trim(),this._s3=d,this._schema=Qe(c),this._dirPrefix=_,this._safeWrite=g,this._chunkSize=O||_t,this._s3.setMaxRequestSizeInBytes(this._chunkSize),this._avroParse=Ot.Type,this._lastETag="",this._dataCache=[],this._avroType=typeof c>"u"?null:this._avroParse.forSchema(c),this._key=`${this._dirPrefix}${Oe}${this._colName}${Re}`}async _loadData(){try{if(this._avroType===null||typeof this._avroType>"u")throw new oe(`${Y}: Missing type definition. Configure before operations `,z.SCHEMA_VALIDATION_ERROR);let{etag:l,data:c}=await this._s3.getObjectWithETag(this._key,{"if-none-match":this._lastETag});if(c===null)return this._dataCache;this._lastETag=l===null?this._lastETag:l;let d=this._avroParse.forSchema({type:"array",items:this._avroType});if(c.length0?d.fromBuffer(Buffer.from(c,"utf8")):[],this._dataCache;let _=this._chunkSize,g=[Buffer.from(c,"utf8")],O=!0;for(;O;){let v=await this._s3.getResponse(this._key,!1,_,_+this._chunkSize),R=await v.text();g.push(Buffer.from(R,"utf8")),_+=this._chunkSize,parseInt(v.headers.get("content-length")||R.length.toString())-1)return this._dataCache=[],this._dataCache;throw new le(`${Y}: Failed to load data: ${l.message}`,z.S3_OPERATION_ERROR)}}async _saveData(l){try{if(this._avroType===null||typeof this._avroType>"u")throw new oe(`${Y}: Missing type definition. Configure before operations `,z.SCHEMA_VALIDATION_ERROR);let c=this._avroParse.forSchema({type:"array",items:this._avroType}),d=l.length>0?c.toBuffer(l):it;if(this._safeWrite&&this._lastETag!==""){let O=await this._s3.getEtag(this._key);if(O!==null&&O!==this._lastETag)return!1}let _=await this._s3.put(this._key,d);if(typeof _=="object"&&"status"in _&&_.status!==200)throw new le(`${Y}: Failed to save data`,z.S3_OPERATION_ERROR);let g=_.headers?.get("etag")||"";return g&&g.length>0&&(this._lastETag=this._s3.sanitizeETag(g),this._dataCache=l),!0}catch(c){throw c instanceof le?c:new oe(`${Y}: ${c.message}`,z.SAVE_DATA_ERROR)}}async insert(l,c){try{if(l==null)throw new oe(`${Y}: Document is required for insert`,z.INSERT_ERROR);if(typeof l!="object"&&!Array.isArray(l))throw new Le(`${Y}: Document must be an object or an array`,z.DOCUMENT_VALIDATION_ERROR);let d=Array.isArray(l)?l:[l],_=c?Qe(c):this._schema||this.inferAvroSchema(d[0]),g=this._avroParse.forSchema(_);if(!g)throw new Ne(`${Y}: Schema is required - Pass a schema to the insert method`,z.SCHEMA_VALIDATION_ERROR);this._avroType=g;let O=await this._loadData();for(let v of d){if(typeof v!="object"||v===null)throw new Le(`${Y}: Invalid input: input must be an object or an array of objects`,z.DOCUMENT_VALIDATION_ERROR);if(v._id=v._id||await tr(),this._avroType.isValid(v,{errorHook:tt,noUndeclaredFields:!0})===!0)O.push(v);else throw new Le(`${Y}: Invalid document or schema`,z.DOCUMENT_VALIDATION_ERROR)}if(!await this._saveData(O))throw new le(`${Y}: Failed to insert document`,z.S3_OPERATION_ERROR);return this.setAvroSchema(_),d}catch(d){throw d.message.includes("unknown type")?new Ne(`${Y}: Schema input is invalid: ${d.message}`,z.SCHEMA_VALIDATION_ERROR):d instanceof oe?d:new oe(`${Y} Insert operation failed: ${d.message}`,z.INSERT_ERROR)}}async find(l={},c={}){try{if(l==null)throw new oe(`${Y}: Query is required for update`,z.MISSING_ARGUMENT);let d=await this._loadData(),_=c.skip!==void 0?parseInt(String(c.skip),10):0,g=c.limit!==void 0?_+parseInt(String(c.limit),10):void 0;return d.filter(T=>Ye(T,l)).slice(_,g)}catch(d){throw new oe(`${Y}: Find operation failed: ${d.message}`,z.FIND_ERROR)}}async findOne(l={}){try{if(l===null)throw new oe(`${Y}: Query cannot be null`,z.INVALID_ARGUMENT);return(await this.find(l,{limit:1}))[0]||null}catch(c){throw c instanceof oe?c:new oe(`${Y}: FindOne operation failed: ${c.message}`,z.FIND_ONE_ERROR)}}async update(l={},c={},d={}){try{if(l==null||c===void 0||c===null)throw new oe(`${Y}: Query and update values are required for update`,z.MISSING_ARGUMENT);if(!this._avroType)throw new Ne(`${Y}: Schema is not defined for this collection`,z.SCHEMA_VALIDATION_ERROR);let _=await this._loadData();if(_.length===0)return 0;let g=0;for(let O=0;O<_.length;O++)if(Ye(_[O],l)){let T={..._[O],...c};if(this._avroType.isValid(T,{errorHook:tt,noUndeclaredFields:!0})===!0)_[O]=T,g++;else throw new Le(`${Y}: Invalid document or schema`,z.DOCUMENT_VALIDATION_ERROR)}if(g>0){if(!await this._saveData(_))throw new le(`${Y}: Failed to update document`,z.S3_OPERATION_ERROR)}else if(d&&"upsert"in d&&d.upsert){if(!await this.insert(c))throw new le(`${Y}: Failed to update document`,z.S3_OPERATION_ERROR);g=1}return g}catch(_){throw _ instanceof le?_:new oe(`${Y}: Update operation failed: ${_.message}`,z.UPDATE_ERROR)}}async updateOne(l={},c={},d={}){try{if(l==null||c===void 0||c===null)throw new oe(`${Y}: Query is required`,z.MISSING_ARGUMENT);if(!this._avroType)throw new Ne(`${Y}: Schema is not defined for this collection`,z.SCHEMA_VALIDATION_ERROR);let _=await this._loadData();if(_.length===0)return 0;let g=_.findIndex(O=>Ye(O,l));if(g!==-1){let O={..._[g],...c};if(this._avroType.isValid(O,{errorHook:tt,noUndeclaredFields:!0})===!0){if(_[g]=O,!await this._saveData(_))throw new le(`${Y}: Failed to update document`,z.S3_OPERATION_ERROR);return 1}else throw new Le(`${Y}: Invalid document or schema`,z.DOCUMENT_VALIDATION_ERROR)}if(d&&"upsert"in d&&d.upsert){if(!await this.insert(c))throw new le(`${Y}: Failed to update document`,z.S3_OPERATION_ERROR);return 1}return 0}catch(_){throw _ instanceof oe?_:new oe(`${Y}: UpdateOne operation failed: ${_.message}`,z.UPDATE_ONE_ERROR)}}async delete(l={}){try{if(l==null)throw new oe(`${Y}: Query is required`,z.MISSING_ARGUMENT);let c=await this._loadData();if(c.length===0)return 0;let d=c.length,_=c.filter(O=>!Ye(O,l));if(!await this._saveData(_))throw new le(`${Y}: Failed to delete document`,z.S3_OPERATION_ERROR);return d-_.length}catch(c){throw c instanceof le?c:new oe(`${Y}: Delete operation failed: ${c.message}`,z.DELETE_ERROR)}}async deleteAll(){try{let c=(await this._loadData()).length;if(!await this._saveData([]))throw new le(`${Y}: Failed to delete document`,z.S3_OPERATION_ERROR);return c}catch(l){throw l instanceof le?l:new oe(`${Y}: Delete operation failed: ${l.message}`,z.DELETE_ERROR)}}async count(l={}){try{return(await this.find(l)).length}catch(c){throw new oe(`${Y}: Count operation failed: ${c.message}`,z.COUNT_ERROR)}}async renameCollection(l,c=this._schema){try{if(Ve(l),await this._s3.fileExists(`${this._dirPrefix}${Oe}${l}${Re}`))throw new oe(`${Y}: Collection ${l} already exists`,z.COLLECTION_EXISTS);let _=c||this.getAvroSchema(),g=await this._loadData(),O=new St(l,_,this._s3,this._dirPrefix,this._safeWrite,this._chunkSize);return await O._saveData(g),await this._s3.delete(`${this._dirPrefix}${Oe}${this._colName}${Re}`),O}catch(d){throw d instanceof oe?d:new oe(`${Y}: Rename collection failed: ${d.message}`,z.RENAME_COLLECTION_ERROR)}}};export{yr as lowstorage,oe as lowstorageError,z as lowstorage_ERROR_CODES}; +//# sourceMappingURL=lowstorage.min.js.map diff --git a/build/lowstorage.js.map b/build/lowstorage.min.js.map similarity index 92% rename from build/lowstorage.js.map rename to build/lowstorage.min.js.map index 931dd74..be86056 100644 --- a/build/lowstorage.js.map +++ b/build/lowstorage.min.js.map @@ -1,7 +1,7 @@ { "version": 3, "sources": [""], - "sourcesContent": ["import __import_BUFFER from \"buffer\";\nimport __import_CRYPTO from \"crypto\";\nimport __import_UTIL from \"util\";\nimport __import_STREAM from \"stream\";\nimport __import_ZLIB from \"zlib\";\nimport __import_EVENTS from \"events\";\nimport __import_FS from \"fs\";\nimport __import_PATH from \"path\";\n\nvar __create = Object.create;\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __getProtoOf = Object.getPrototypeOf;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __require = /* @__PURE__ */ ((x2) => typeof require !== \"undefined\" ? require : typeof Proxy !== \"undefined\" ? new Proxy(x2, {\n get: (a, b2) => (typeof require !== \"undefined\" ? require : a)[b2]\n}) : x2)(function(x2) {\n if (typeof require !== \"undefined\") return require.apply(this, arguments);\n throw Error('Dynamic require of \"' + x2 + '\" is not supported');\n});\nvar __commonJS = (cb, mod) => function __require2() {\n return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(\n // If the importer is in node compatibility mode or this is not an ESM\n // file that has been converted to a CommonJS file using a Babel-\n // compatible transform (i.e. \"__esModule\" has not been set), then set\n // \"default\" to the CommonJS \"module.exports\" for node compatibility.\n isNodeMode || !mod || !mod.__esModule ? __defProp(target, \"default\", { value: mod, enumerable: true }) : target,\n mod\n));\n\n// node_modules/avsc/lib/utils.js\nvar require_utils = __commonJS({\n \"node_modules/avsc/lib/utils.js\"(exports, module) {\n \"use strict\";\n var buffer = __import_BUFFER;\n var crypto2 = __import_CRYPTO;\n var util = __import_UTIL;\n var Buffer2 = buffer.Buffer;\n var POOL = new BufferPool(4096);\n var NAME_PATTERN = /^[A-Za-z_][A-Za-z0-9_]*$/;\n var f2 = util.format;\n function newBuffer(size) {\n if (typeof Buffer2.alloc == \"function\") {\n return Buffer2.alloc(size);\n } else {\n return new Buffer2(size);\n }\n }\n function bufferFrom(data, enc) {\n if (typeof Buffer2.from == \"function\") {\n return Buffer2.from(data, enc);\n } else {\n return new Buffer2(data, enc);\n }\n }\n function capitalize(s) {\n return s.charAt(0).toUpperCase() + s.slice(1);\n }\n function compare(n1, n2) {\n return n1 === n2 ? 0 : n1 < n2 ? -1 : 1;\n }\n function getOption(opts, key, def) {\n var value = opts[key];\n return value === void 0 ? def : value;\n }\n function getHash(str, algorithm) {\n algorithm = algorithm || \"md5\";\n var hash = crypto2.createHash(algorithm);\n hash.end(str);\n return hash.read();\n }\n function singleIndexOf(arr, v2) {\n var pos = -1;\n var i, l;\n if (!arr) {\n return -1;\n }\n for (i = 0, l = arr.length; i < l; i++) {\n if (arr[i] === v2) {\n if (pos >= 0) {\n return -2;\n }\n pos = i;\n }\n }\n return pos;\n }\n function toMap(arr, fn) {\n var obj = {};\n var i, elem;\n for (i = 0; i < arr.length; i++) {\n elem = arr[i];\n obj[fn(elem)] = elem;\n }\n return obj;\n }\n function objectValues(obj) {\n return Object.keys(obj).map(function(key) {\n return obj[key];\n });\n }\n function hasDuplicates(arr, fn) {\n var obj = /* @__PURE__ */ Object.create(null);\n var i, l, elem;\n for (i = 0, l = arr.length; i < l; i++) {\n elem = arr[i];\n if (fn) {\n elem = fn(elem);\n }\n if (obj[elem]) {\n return true;\n }\n obj[elem] = true;\n }\n return false;\n }\n function copyOwnProperties(src, dst, overwrite) {\n var names = Object.getOwnPropertyNames(src);\n var i, l, name;\n for (i = 0, l = names.length; i < l; i++) {\n name = names[i];\n if (!dst.hasOwnProperty(name) || overwrite) {\n var descriptor = Object.getOwnPropertyDescriptor(src, name);\n Object.defineProperty(dst, name, descriptor);\n }\n }\n return dst;\n }\n function isValidName(str) {\n return NAME_PATTERN.test(str);\n }\n function qualify(name, namespace) {\n if (~name.indexOf(\".\")) {\n name = name.replace(/^\\./, \"\");\n } else if (namespace) {\n name = namespace + \".\" + name;\n }\n name.split(\".\").forEach(function(part) {\n if (!isValidName(part)) {\n throw new Error(f2(\"invalid name: %j\", name));\n }\n });\n return name;\n }\n function unqualify(name) {\n var parts = name.split(\".\");\n return parts[parts.length - 1];\n }\n function impliedNamespace(name) {\n var match = /^(.*)\\.[^.]+$/.exec(name);\n return match ? match[1] : void 0;\n }\n function jsonEnd(str, pos) {\n pos = pos | 0;\n var c = str.charAt(pos++);\n if (/[\\d-]/.test(c)) {\n while (/[eE\\d.+-]/.test(str.charAt(pos))) {\n pos++;\n }\n return pos;\n } else if (/true|null/.test(str.slice(pos - 1, pos + 3))) {\n return pos + 3;\n } else if (/false/.test(str.slice(pos - 1, pos + 4))) {\n return pos + 4;\n }\n var depth = 0;\n var literal = false;\n do {\n switch (c) {\n case \"{\":\n case \"[\":\n if (!literal) {\n depth++;\n }\n break;\n case \"}\":\n case \"]\":\n if (!literal && !--depth) {\n return pos;\n }\n break;\n case '\"':\n literal = !literal;\n if (!depth && !literal) {\n return pos;\n }\n break;\n case \"\\\\\":\n pos++;\n }\n } while (c = str.charAt(pos++));\n return -1;\n }\n function abstractFunction() {\n throw new Error(\"abstract\");\n }\n function addDeprecatedGetters(obj, props) {\n var proto = obj.prototype;\n var i, l, prop, getter;\n for (i = 0, l = props.length; i < l; i++) {\n prop = props[i];\n getter = \"get\" + capitalize(prop);\n proto[getter] = util.deprecate(\n createGetter(prop),\n \"use `.\" + prop + \"` instead of `.\" + getter + \"()`\"\n );\n }\n function createGetter(prop2) {\n return function() {\n var delegate = this[prop2];\n return typeof delegate == \"function\" ? delegate.apply(this, arguments) : delegate;\n };\n }\n }\n function BufferPool(len) {\n this._len = len | 0;\n this._pos = 0;\n this._slab = newBuffer(this._len);\n }\n BufferPool.prototype.alloc = function(len) {\n if (len < 0) {\n throw new Error(\"negative length\");\n }\n var maxLen = this._len;\n if (len > maxLen) {\n return newBuffer(len);\n }\n if (this._pos + len > maxLen) {\n this._slab = newBuffer(maxLen);\n this._pos = 0;\n }\n return this._slab.slice(this._pos, this._pos += len);\n };\n function Lcg(seed) {\n var a = 1103515245;\n var c = 12345;\n var m2 = Math.pow(2, 31);\n var state = Math.floor(seed || Math.random() * (m2 - 1));\n this._max = m2;\n this._nextInt = function() {\n return state = (a * state + c) % m2;\n };\n }\n Lcg.prototype.nextBoolean = function() {\n return !!(this._nextInt() % 2);\n };\n Lcg.prototype.nextInt = function(start, end) {\n if (end === void 0) {\n end = start;\n start = 0;\n }\n end = end === void 0 ? this._max : end;\n return start + Math.floor(this.nextFloat() * (end - start));\n };\n Lcg.prototype.nextFloat = function(start, end) {\n if (end === void 0) {\n end = start;\n start = 0;\n }\n end = end === void 0 ? 1 : end;\n return start + (end - start) * this._nextInt() / this._max;\n };\n Lcg.prototype.nextString = function(len, flags) {\n len |= 0;\n flags = flags || \"aA\";\n var mask = \"\";\n if (flags.indexOf(\"a\") > -1) {\n mask += \"abcdefghijklmnopqrstuvwxyz\";\n }\n if (flags.indexOf(\"A\") > -1) {\n mask += \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\";\n }\n if (flags.indexOf(\"#\") > -1) {\n mask += \"0123456789\";\n }\n if (flags.indexOf(\"!\") > -1) {\n mask += \"~`!@#$%^&*()_+-={}[]:\\\";'<>?,./|\\\\\";\n }\n var result = [];\n for (var i = 0; i < len; i++) {\n result.push(this.choice(mask));\n }\n return result.join(\"\");\n };\n Lcg.prototype.nextBuffer = function(len) {\n var arr = [];\n var i;\n for (i = 0; i < len; i++) {\n arr.push(this.nextInt(256));\n }\n return bufferFrom(arr);\n };\n Lcg.prototype.choice = function(arr) {\n var len = arr.length;\n if (!len) {\n throw new Error(\"choosing from empty array\");\n }\n return arr[this.nextInt(len)];\n };\n function OrderedQueue() {\n this._index = 0;\n this._items = [];\n }\n OrderedQueue.prototype.push = function(item) {\n var items = this._items;\n var i = items.length | 0;\n var j2;\n items.push(item);\n while (i > 0 && items[i].index < items[j2 = i - 1 >> 1].index) {\n item = items[i];\n items[i] = items[j2];\n items[j2] = item;\n i = j2;\n }\n };\n OrderedQueue.prototype.pop = function() {\n var items = this._items;\n var len = items.length - 1 | 0;\n var first = items[0];\n if (!first || first.index > this._index) {\n return null;\n }\n this._index++;\n if (!len) {\n items.pop();\n return first;\n }\n items[0] = items.pop();\n var mid = len >> 1;\n var i = 0;\n var i1, i2, j2, item, c, c1, c2;\n while (i < mid) {\n item = items[i];\n i1 = (i << 1) + 1;\n i2 = i + 1 << 1;\n c1 = items[i1];\n c2 = items[i2];\n if (!c2 || c1.index <= c2.index) {\n c = c1;\n j2 = i1;\n } else {\n c = c2;\n j2 = i2;\n }\n if (c.index >= item.index) {\n break;\n }\n items[j2] = item;\n items[i] = c;\n i = j2;\n }\n return first;\n };\n function Tap(buf, pos) {\n this.buf = buf;\n this.pos = pos | 0;\n if (this.pos < 0) {\n throw new Error(\"negative offset\");\n }\n }\n Tap.prototype.isValid = function() {\n return this.pos <= this.buf.length;\n };\n Tap.prototype._invalidate = function() {\n this.pos = this.buf.length + 1;\n };\n Tap.prototype.readBoolean = function() {\n return !!this.buf[this.pos++];\n };\n Tap.prototype.skipBoolean = function() {\n this.pos++;\n };\n Tap.prototype.writeBoolean = function(b2) {\n this.buf[this.pos++] = !!b2;\n };\n Tap.prototype.readInt = Tap.prototype.readLong = function() {\n var n = 0;\n var k2 = 0;\n var buf = this.buf;\n var b2, h, f3, fk;\n do {\n b2 = buf[this.pos++];\n h = b2 & 128;\n n |= (b2 & 127) << k2;\n k2 += 7;\n } while (h && k2 < 28);\n if (h) {\n f3 = n;\n fk = 268435456;\n do {\n b2 = buf[this.pos++];\n f3 += (b2 & 127) * fk;\n fk *= 128;\n } while (b2 & 128);\n return (f3 % 2 ? -(f3 + 1) : f3) / 2;\n }\n return n >> 1 ^ -(n & 1);\n };\n Tap.prototype.skipInt = Tap.prototype.skipLong = function() {\n var buf = this.buf;\n while (buf[this.pos++] & 128) {\n }\n };\n Tap.prototype.writeInt = Tap.prototype.writeLong = function(n) {\n var buf = this.buf;\n var f3, m2;\n if (n >= -1073741824 && n < 1073741824) {\n m2 = n >= 0 ? n << 1 : ~n << 1 | 1;\n do {\n buf[this.pos] = m2 & 127;\n m2 >>= 7;\n } while (m2 && (buf[this.pos++] |= 128));\n } else {\n f3 = n >= 0 ? n * 2 : -n * 2 - 1;\n do {\n buf[this.pos] = f3 & 127;\n f3 /= 128;\n } while (f3 >= 1 && (buf[this.pos++] |= 128));\n }\n this.pos++;\n };\n Tap.prototype.readFloat = function() {\n var buf = this.buf;\n var pos = this.pos;\n this.pos += 4;\n if (this.pos > buf.length) {\n return 0;\n }\n return this.buf.readFloatLE(pos);\n };\n Tap.prototype.skipFloat = function() {\n this.pos += 4;\n };\n Tap.prototype.writeFloat = function(f3) {\n var buf = this.buf;\n var pos = this.pos;\n this.pos += 4;\n if (this.pos > buf.length) {\n return;\n }\n return this.buf.writeFloatLE(f3, pos);\n };\n Tap.prototype.readDouble = function() {\n var buf = this.buf;\n var pos = this.pos;\n this.pos += 8;\n if (this.pos > buf.length) {\n return 0;\n }\n return this.buf.readDoubleLE(pos);\n };\n Tap.prototype.skipDouble = function() {\n this.pos += 8;\n };\n Tap.prototype.writeDouble = function(d) {\n var buf = this.buf;\n var pos = this.pos;\n this.pos += 8;\n if (this.pos > buf.length) {\n return;\n }\n return this.buf.writeDoubleLE(d, pos);\n };\n Tap.prototype.readFixed = function(len) {\n var pos = this.pos;\n this.pos += len;\n if (this.pos > this.buf.length) {\n return;\n }\n var fixed = POOL.alloc(len);\n this.buf.copy(fixed, 0, pos, pos + len);\n return fixed;\n };\n Tap.prototype.skipFixed = function(len) {\n this.pos += len;\n };\n Tap.prototype.writeFixed = function(buf, len) {\n len = len || buf.length;\n var pos = this.pos;\n this.pos += len;\n if (this.pos > this.buf.length) {\n return;\n }\n buf.copy(this.buf, pos, 0, len);\n };\n Tap.prototype.readBytes = function() {\n var len = this.readLong();\n if (len < 0) {\n this._invalidate();\n return;\n }\n return this.readFixed(len);\n };\n Tap.prototype.skipBytes = function() {\n var len = this.readLong();\n if (len < 0) {\n this._invalidate();\n return;\n }\n this.pos += len;\n };\n Tap.prototype.writeBytes = function(buf) {\n var len = buf.length;\n this.writeLong(len);\n this.writeFixed(buf, len);\n };\n if (typeof Buffer2.prototype.utf8Slice == \"function\") {\n Tap.prototype.readString = function() {\n var len = this.readLong();\n if (len < 0) {\n this._invalidate();\n return \"\";\n }\n var pos = this.pos;\n var buf = this.buf;\n this.pos += len;\n if (this.pos > buf.length) {\n return;\n }\n return this.buf.utf8Slice(pos, pos + len);\n };\n } else {\n Tap.prototype.readString = function() {\n var len = this.readLong();\n if (len < 0) {\n this._invalidate();\n return \"\";\n }\n var pos = this.pos;\n var buf = this.buf;\n this.pos += len;\n if (this.pos > buf.length) {\n return;\n }\n return this.buf.slice(pos, pos + len).toString();\n };\n }\n Tap.prototype.skipString = function() {\n var len = this.readLong();\n if (len < 0) {\n this._invalidate();\n return;\n }\n this.pos += len;\n };\n Tap.prototype.writeString = function(s) {\n var len = Buffer2.byteLength(s);\n var buf = this.buf;\n this.writeLong(len);\n var pos = this.pos;\n this.pos += len;\n if (this.pos > buf.length) {\n return;\n }\n if (len > 64 && typeof Buffer2.prototype.utf8Write == \"function\") {\n buf.utf8Write(s, pos, len);\n } else {\n var i, l, c1, c2;\n for (i = 0, l = len; i < l; i++) {\n c1 = s.charCodeAt(i);\n if (c1 < 128) {\n buf[pos++] = c1;\n } else if (c1 < 2048) {\n buf[pos++] = c1 >> 6 | 192;\n buf[pos++] = c1 & 63 | 128;\n } else if ((c1 & 64512) === 55296 && ((c2 = s.charCodeAt(i + 1)) & 64512) === 56320) {\n c1 = 65536 + ((c1 & 1023) << 10) + (c2 & 1023);\n i++;\n buf[pos++] = c1 >> 18 | 240;\n buf[pos++] = c1 >> 12 & 63 | 128;\n buf[pos++] = c1 >> 6 & 63 | 128;\n buf[pos++] = c1 & 63 | 128;\n } else {\n buf[pos++] = c1 >> 12 | 224;\n buf[pos++] = c1 >> 6 & 63 | 128;\n buf[pos++] = c1 & 63 | 128;\n }\n }\n }\n };\n if (typeof Buffer2.prototype.latin1Write == \"function\") {\n Tap.prototype.writeBinary = function(str, len) {\n var pos = this.pos;\n this.pos += len;\n if (this.pos > this.buf.length) {\n return;\n }\n this.buf.latin1Write(str, pos, len);\n };\n } else if (typeof Buffer2.prototype.binaryWrite == \"function\") {\n Tap.prototype.writeBinary = function(str, len) {\n var pos = this.pos;\n this.pos += len;\n if (this.pos > this.buf.length) {\n return;\n }\n this.buf.binaryWrite(str, pos, len);\n };\n } else {\n Tap.prototype.writeBinary = function(s, len) {\n var pos = this.pos;\n this.pos += len;\n if (this.pos > this.buf.length) {\n return;\n }\n this.buf.write(s, pos, len, \"binary\");\n };\n }\n Tap.prototype.matchBoolean = function(tap) {\n return this.buf[this.pos++] - tap.buf[tap.pos++];\n };\n Tap.prototype.matchInt = Tap.prototype.matchLong = function(tap) {\n var n1 = this.readLong();\n var n2 = tap.readLong();\n return n1 === n2 ? 0 : n1 < n2 ? -1 : 1;\n };\n Tap.prototype.matchFloat = function(tap) {\n var n1 = this.readFloat();\n var n2 = tap.readFloat();\n return n1 === n2 ? 0 : n1 < n2 ? -1 : 1;\n };\n Tap.prototype.matchDouble = function(tap) {\n var n1 = this.readDouble();\n var n2 = tap.readDouble();\n return n1 === n2 ? 0 : n1 < n2 ? -1 : 1;\n };\n Tap.prototype.matchFixed = function(tap, len) {\n return this.readFixed(len).compare(tap.readFixed(len));\n };\n Tap.prototype.matchBytes = Tap.prototype.matchString = function(tap) {\n var l1 = this.readLong();\n var p1 = this.pos;\n this.pos += l1;\n var l2 = tap.readLong();\n var p2 = tap.pos;\n tap.pos += l2;\n var b1 = this.buf.slice(p1, this.pos);\n var b2 = tap.buf.slice(p2, tap.pos);\n return b1.compare(b2);\n };\n Tap.prototype.unpackLongBytes = function() {\n var res = newBuffer(8);\n var n = 0;\n var i = 0;\n var j2 = 6;\n var buf = this.buf;\n var b2, neg;\n b2 = buf[this.pos++];\n neg = b2 & 1;\n res.fill(0);\n n |= (b2 & 127) >> 1;\n while (b2 & 128) {\n b2 = buf[this.pos++];\n n |= (b2 & 127) << j2;\n j2 += 7;\n if (j2 >= 8) {\n j2 -= 8;\n res[i++] = n;\n n >>= 8;\n }\n }\n res[i] = n;\n if (neg) {\n invert(res, 8);\n }\n return res;\n };\n Tap.prototype.packLongBytes = function(buf) {\n var neg = (buf[7] & 128) >> 7;\n var res = this.buf;\n var j2 = 1;\n var k2 = 0;\n var m2 = 3;\n var n;\n if (neg) {\n invert(buf, 8);\n n = 1;\n } else {\n n = 0;\n }\n var parts = [\n buf.readUIntLE(0, 3),\n buf.readUIntLE(3, 3),\n buf.readUIntLE(6, 2)\n ];\n while (m2 && !parts[--m2]) {\n }\n while (k2 < m2) {\n n |= parts[k2++] << j2;\n j2 += 24;\n while (j2 > 7) {\n res[this.pos++] = n & 127 | 128;\n n >>= 7;\n j2 -= 7;\n }\n }\n n |= parts[m2] << j2;\n do {\n res[this.pos] = n & 127;\n n >>= 7;\n } while (n && (res[this.pos++] |= 128));\n this.pos++;\n if (neg) {\n invert(buf, 8);\n }\n };\n function invert(buf, len) {\n while (len--) {\n buf[len] = ~buf[len];\n }\n }\n module.exports = {\n abstractFunction,\n addDeprecatedGetters,\n bufferFrom,\n capitalize,\n copyOwnProperties,\n getHash,\n compare,\n getOption,\n impliedNamespace,\n isValidName,\n jsonEnd,\n newBuffer,\n objectValues,\n qualify,\n toMap,\n singleIndexOf,\n hasDuplicates,\n unqualify,\n BufferPool,\n Lcg,\n OrderedQueue,\n Tap\n };\n }\n});\n\n// node_modules/avsc/lib/types.js\nvar require_types = __commonJS({\n \"node_modules/avsc/lib/types.js\"(exports, module) {\n \"use strict\";\n var utils = require_utils();\n var buffer = __import_BUFFER;\n var util = __import_UTIL;\n var Buffer2 = buffer.Buffer;\n var SlowBuffer = buffer.SlowBuffer;\n var Tap = utils.Tap;\n var debug = util.debuglog(\"avsc:types\");\n var f2 = util.format;\n var TYPES = {\n \"array\": ArrayType,\n \"boolean\": BooleanType,\n \"bytes\": BytesType,\n \"double\": DoubleType,\n \"enum\": EnumType,\n \"error\": RecordType,\n \"fixed\": FixedType,\n \"float\": FloatType,\n \"int\": IntType,\n \"long\": LongType,\n \"map\": MapType,\n \"null\": NullType,\n \"record\": RecordType,\n \"string\": StringType\n };\n var RANDOM = new utils.Lcg();\n var TAP = new Tap(new SlowBuffer(1024));\n var LOGICAL_TYPE = null;\n var UNDERLYING_TYPES = [];\n function Type(schema, opts) {\n var type;\n if (LOGICAL_TYPE) {\n type = LOGICAL_TYPE;\n UNDERLYING_TYPES.push([LOGICAL_TYPE, this]);\n LOGICAL_TYPE = null;\n } else {\n type = this;\n }\n this._hash = new Hash();\n this.name = void 0;\n this.aliases = void 0;\n this.doc = schema && schema.doc ? \"\" + schema.doc : void 0;\n if (schema) {\n var name = schema.name;\n var namespace = schema.namespace === void 0 ? opts && opts.namespace : schema.namespace;\n if (name !== void 0) {\n name = maybeQualify(name, namespace);\n if (isPrimitive(name)) {\n throw new Error(f2(\"cannot rename primitive type: %j\", name));\n }\n var registry = opts && opts.registry;\n if (registry) {\n if (registry[name] !== void 0) {\n throw new Error(f2(\"duplicate type name: %s\", name));\n }\n registry[name] = type;\n }\n } else if (opts && opts.noAnonymousTypes) {\n throw new Error(f2(\"missing name property in schema: %j\", schema));\n }\n this.name = name;\n this.aliases = schema.aliases ? schema.aliases.map(function(s) {\n return maybeQualify(s, namespace);\n }) : [];\n }\n }\n Type.forSchema = function(schema, opts) {\n opts = opts || {};\n opts.registry = opts.registry || {};\n var UnionType2 = function(wrapUnions) {\n if (wrapUnions === true) {\n wrapUnions = \"always\";\n } else if (wrapUnions === false) {\n wrapUnions = \"never\";\n } else if (wrapUnions === void 0) {\n wrapUnions = \"auto\";\n } else if (typeof wrapUnions == \"string\") {\n wrapUnions = wrapUnions.toLowerCase();\n }\n switch (wrapUnions) {\n case \"always\":\n return WrappedUnionType;\n case \"never\":\n return UnwrappedUnionType;\n case \"auto\":\n return void 0;\n default:\n throw new Error(f2(\"invalid wrap unions option: %j\", wrapUnions));\n }\n }(opts.wrapUnions);\n if (schema === null) {\n throw new Error('invalid type: null (did you mean \"null\"?)');\n }\n if (Type.isType(schema)) {\n return schema;\n }\n var type;\n if (opts.typeHook && (type = opts.typeHook(schema, opts))) {\n if (!Type.isType(type)) {\n throw new Error(f2(\"invalid typehook return value: %j\", type));\n }\n return type;\n }\n if (typeof schema == \"string\") {\n schema = maybeQualify(schema, opts.namespace);\n type = opts.registry[schema];\n if (type) {\n return type;\n }\n if (isPrimitive(schema)) {\n return opts.registry[schema] = Type.forSchema({ type: schema }, opts);\n }\n throw new Error(f2(\"undefined type name: %s\", schema));\n }\n if (schema.logicalType && opts.logicalTypes && !LOGICAL_TYPE) {\n var DerivedType = opts.logicalTypes[schema.logicalType];\n if (DerivedType) {\n var namespace = opts.namespace;\n var registry = {};\n Object.keys(opts.registry).forEach(function(key) {\n registry[key] = opts.registry[key];\n });\n try {\n debug(\"instantiating logical type for %s\", schema.logicalType);\n return new DerivedType(schema, opts);\n } catch (err) {\n debug(\"failed to instantiate logical type for %s\", schema.logicalType);\n if (opts.assertLogicalTypes) {\n throw err;\n }\n LOGICAL_TYPE = null;\n opts.namespace = namespace;\n opts.registry = registry;\n }\n }\n }\n if (Array.isArray(schema)) {\n var logicalType = LOGICAL_TYPE;\n LOGICAL_TYPE = null;\n var types = schema.map(function(obj) {\n return Type.forSchema(obj, opts);\n });\n if (!UnionType2) {\n UnionType2 = isAmbiguous(types) ? WrappedUnionType : UnwrappedUnionType;\n }\n LOGICAL_TYPE = logicalType;\n type = new UnionType2(types, opts);\n } else {\n type = function(typeName) {\n var Type2 = TYPES[typeName];\n if (Type2 === void 0) {\n throw new Error(f2(\"unknown type: %j\", typeName));\n }\n return new Type2(schema, opts);\n }(schema.type);\n }\n return type;\n };\n Type.forValue = function(val, opts) {\n opts = opts || {};\n opts.emptyArrayType = opts.emptyArrayType || Type.forSchema({\n type: \"array\",\n items: \"null\"\n });\n if (opts.valueHook) {\n var type = opts.valueHook(val, opts);\n if (type !== void 0) {\n if (!Type.isType(type)) {\n throw new Error(f2(\"invalid value hook return value: %j\", type));\n }\n return type;\n }\n }\n switch (typeof val) {\n case \"string\":\n return Type.forSchema(\"string\", opts);\n case \"boolean\":\n return Type.forSchema(\"boolean\", opts);\n case \"number\":\n if ((val | 0) === val) {\n return Type.forSchema(\"int\", opts);\n } else if (Math.abs(val) < 9007199254740991) {\n return Type.forSchema(\"float\", opts);\n }\n return Type.forSchema(\"double\", opts);\n case \"object\":\n if (val === null) {\n return Type.forSchema(\"null\", opts);\n } else if (Array.isArray(val)) {\n if (!val.length) {\n return opts.emptyArrayType;\n }\n return Type.forSchema({\n type: \"array\",\n items: Type.forTypes(\n val.map(function(v2) {\n return Type.forValue(v2, opts);\n }),\n opts\n )\n }, opts);\n } else if (Buffer2.isBuffer(val)) {\n return Type.forSchema(\"bytes\", opts);\n }\n var fieldNames = Object.keys(val);\n if (fieldNames.some(function(s) {\n return !utils.isValidName(s);\n })) {\n return Type.forSchema({\n type: \"map\",\n values: Type.forTypes(fieldNames.map(function(s) {\n return Type.forValue(val[s], opts);\n }), opts)\n }, opts);\n }\n return Type.forSchema({\n type: \"record\",\n fields: fieldNames.map(function(s) {\n return { name: s, type: Type.forValue(val[s], opts) };\n })\n }, opts);\n default:\n throw new Error(f2(\"cannot infer type from: %j\", val));\n }\n };\n Type.forTypes = function(types, opts) {\n if (!types.length) {\n throw new Error(\"no types to combine\");\n }\n if (types.length === 1) {\n return types[0];\n }\n opts = opts || {};\n var expanded = [];\n var numWrappedUnions = 0;\n var isValidWrappedUnion = true;\n types.forEach(function(type) {\n switch (type.typeName) {\n case \"union:unwrapped\":\n isValidWrappedUnion = false;\n expanded = expanded.concat(type.types);\n break;\n case \"union:wrapped\":\n numWrappedUnions++;\n expanded = expanded.concat(type.types);\n break;\n case \"null\":\n expanded.push(type);\n break;\n default:\n isValidWrappedUnion = false;\n expanded.push(type);\n }\n });\n if (numWrappedUnions) {\n if (!isValidWrappedUnion) {\n throw new Error(\"cannot combine wrapped union\");\n }\n var branchTypes = {};\n expanded.forEach(function(type) {\n var name = type.branchName;\n var branchType = branchTypes[name];\n if (!branchType) {\n branchTypes[name] = type;\n } else if (!type.equals(branchType)) {\n throw new Error(\"inconsistent branch type\");\n }\n });\n var wrapUnions = opts.wrapUnions;\n var unionType;\n opts.wrapUnions = true;\n try {\n unionType = Type.forSchema(Object.keys(branchTypes).map(function(name) {\n return branchTypes[name];\n }), opts);\n } catch (err) {\n opts.wrapUnions = wrapUnions;\n throw err;\n }\n opts.wrapUnions = wrapUnions;\n return unionType;\n }\n var bucketized = {};\n expanded.forEach(function(type) {\n var bucket = getTypeBucket(type);\n var bucketTypes = bucketized[bucket];\n if (!bucketTypes) {\n bucketized[bucket] = bucketTypes = [];\n }\n bucketTypes.push(type);\n });\n var buckets = Object.keys(bucketized);\n var augmented = buckets.map(function(bucket) {\n var bucketTypes = bucketized[bucket];\n if (bucketTypes.length === 1) {\n return bucketTypes[0];\n } else {\n switch (bucket) {\n case \"null\":\n case \"boolean\":\n return bucketTypes[0];\n case \"number\":\n return combineNumbers(bucketTypes);\n case \"string\":\n return combineStrings(bucketTypes, opts);\n case \"buffer\":\n return combineBuffers(bucketTypes, opts);\n case \"array\":\n bucketTypes = bucketTypes.filter(function(t) {\n return t !== opts.emptyArrayType;\n });\n if (!bucketTypes.length) {\n return opts.emptyArrayType;\n }\n return Type.forSchema({\n type: \"array\",\n items: Type.forTypes(bucketTypes.map(function(t) {\n return t.itemsType;\n }), opts)\n }, opts);\n default:\n return combineObjects(bucketTypes, opts);\n }\n }\n });\n if (augmented.length === 1) {\n return augmented[0];\n } else {\n return Type.forSchema(augmented, opts);\n }\n };\n Type.isType = function() {\n var l = arguments.length;\n if (!l) {\n return false;\n }\n var any = arguments[0];\n if (!any || typeof any._update != \"function\" || typeof any.fingerprint != \"function\") {\n return false;\n }\n if (l === 1) {\n return true;\n }\n var typeName = any.typeName;\n var i;\n for (i = 1; i < l; i++) {\n if (typeName.indexOf(arguments[i]) === 0) {\n return true;\n }\n }\n return false;\n };\n Type.__reset = function(size) {\n debug(\"resetting type buffer to %d\", size);\n TAP.buf = new SlowBuffer(size);\n };\n Object.defineProperty(Type.prototype, \"branchName\", {\n enumerable: true,\n get: function() {\n var type = Type.isType(this, \"logical\") ? this.underlyingType : this;\n if (type.name) {\n return type.name;\n }\n if (Type.isType(type, \"abstract\")) {\n return type._concreteTypeName;\n }\n return Type.isType(type, \"union\") ? void 0 : type.typeName;\n }\n });\n Type.prototype.clone = function(val, opts) {\n if (opts) {\n opts = {\n coerce: !!opts.coerceBuffers | 0,\n // Coerce JSON to Buffer.\n fieldHook: opts.fieldHook,\n qualifyNames: !!opts.qualifyNames,\n skip: !!opts.skipMissingFields,\n wrap: !!opts.wrapUnions | 0\n // Wrap first match into union.\n };\n return this._copy(val, opts);\n } else {\n return this.fromBuffer(this.toBuffer(val));\n }\n };\n Type.prototype.compare = utils.abstractFunction;\n Type.prototype.compareBuffers = function(buf1, buf2) {\n return this._match(new Tap(buf1), new Tap(buf2));\n };\n Type.prototype.createResolver = function(type, opts) {\n if (!Type.isType(type)) {\n throw new Error(f2(\"not a type: %j\", type));\n }\n if (!Type.isType(this, \"union\", \"logical\") && Type.isType(type, \"logical\")) {\n return this.createResolver(type.underlyingType, opts);\n }\n opts = opts || {};\n opts.registry = opts.registry || {};\n var resolver, key;\n if (Type.isType(this, \"record\", \"error\") && Type.isType(type, \"record\", \"error\")) {\n key = this.name + \":\" + type.name;\n resolver = opts.registry[key];\n if (resolver) {\n return resolver;\n }\n }\n resolver = new Resolver(this);\n if (key) {\n opts.registry[key] = resolver;\n }\n if (Type.isType(type, \"union\")) {\n var resolvers = type.types.map(function(t) {\n return this.createResolver(t, opts);\n }, this);\n resolver._read = function(tap) {\n var index = tap.readLong();\n var resolver2 = resolvers[index];\n if (resolver2 === void 0) {\n throw new Error(f2(\"invalid union index: %s\", index));\n }\n return resolvers[index]._read(tap);\n };\n } else {\n this._update(resolver, type, opts);\n }\n if (!resolver._read) {\n throw new Error(f2(\"cannot read %s as %s\", type, this));\n }\n return Object.freeze(resolver);\n };\n Type.prototype.decode = function(buf, pos, resolver) {\n var tap = new Tap(buf, pos);\n var val = readValue(this, tap, resolver);\n if (!tap.isValid()) {\n return { value: void 0, offset: -1 };\n }\n return { value: val, offset: tap.pos };\n };\n Type.prototype.encode = function(val, buf, pos) {\n var tap = new Tap(buf, pos);\n this._write(tap, val);\n if (!tap.isValid()) {\n return buf.length - tap.pos;\n }\n return tap.pos;\n };\n Type.prototype.equals = function(type, opts) {\n var canon = (\n // Canonical equality.\n Type.isType(type) && this.fingerprint().equals(type.fingerprint())\n );\n if (!canon || !(opts && opts.strict)) {\n return canon;\n }\n return JSON.stringify(this.schema({ exportAttrs: true })) === JSON.stringify(type.schema({ exportAttrs: true }));\n };\n Type.prototype.fingerprint = function(algorithm) {\n if (!algorithm) {\n if (!this._hash.str) {\n var schemaStr = JSON.stringify(this.schema());\n this._hash.str = utils.getHash(schemaStr).toString(\"binary\");\n }\n return utils.bufferFrom(this._hash.str, \"binary\");\n } else {\n return utils.getHash(JSON.stringify(this.schema()), algorithm);\n }\n };\n Type.prototype.fromBuffer = function(buf, resolver, noCheck) {\n var tap = new Tap(buf);\n var val = readValue(this, tap, resolver, noCheck);\n if (!tap.isValid()) {\n throw new Error(\"truncated buffer\");\n }\n if (!noCheck && tap.pos < buf.length) {\n throw new Error(\"trailing data\");\n }\n return val;\n };\n Type.prototype.fromString = function(str) {\n return this._copy(JSON.parse(str), { coerce: 2 });\n };\n Type.prototype.inspect = function() {\n var typeName = this.typeName;\n var className = getClassName(typeName);\n if (isPrimitive(typeName)) {\n return f2(\"<%s>\", className);\n } else {\n var obj = this.schema({ exportAttrs: true, noDeref: true });\n if (typeof obj == \"object\" && !Type.isType(this, \"logical\")) {\n obj.type = void 0;\n }\n return f2(\"<%s %j>\", className, obj);\n }\n };\n Type.prototype.isValid = function(val, opts) {\n var flags = (opts && opts.noUndeclaredFields) | 0;\n var errorHook = opts && opts.errorHook;\n var hook, path;\n if (errorHook) {\n path = [];\n hook = function(any, type) {\n errorHook.call(this, path.slice(), any, type, val);\n };\n }\n return this._check(val, flags, hook, path);\n };\n Type.prototype.random = utils.abstractFunction;\n Type.prototype.schema = function(opts) {\n return this._attrs({\n exportAttrs: !!(opts && opts.exportAttrs),\n noDeref: !!(opts && opts.noDeref)\n });\n };\n Type.prototype.toBuffer = function(val) {\n TAP.pos = 0;\n this._write(TAP, val);\n var buf = utils.newBuffer(TAP.pos);\n if (TAP.isValid()) {\n TAP.buf.copy(buf, 0, 0, TAP.pos);\n } else {\n this._write(new Tap(buf), val);\n }\n return buf;\n };\n Type.prototype.toJSON = function() {\n return this.schema({ exportAttrs: true });\n };\n Type.prototype.toString = function(val) {\n if (val === void 0) {\n return JSON.stringify(this.schema({ noDeref: true }));\n }\n return JSON.stringify(this._copy(val, { coerce: 3 }));\n };\n Type.prototype.wrap = function(val) {\n var Branch = this._branchConstructor;\n return Branch === null ? null : new Branch(val);\n };\n Type.prototype._attrs = function(opts) {\n opts.derefed = opts.derefed || {};\n var name = this.name;\n if (name !== void 0) {\n if (opts.noDeref || opts.derefed[name]) {\n return name;\n }\n opts.derefed[name] = true;\n }\n var schema = {};\n if (this.name !== void 0) {\n schema.name = name;\n }\n schema.type = this.typeName;\n var derefedSchema = this._deref(schema, opts);\n if (derefedSchema !== void 0) {\n schema = derefedSchema;\n }\n if (opts.exportAttrs) {\n if (this.aliases && this.aliases.length) {\n schema.aliases = this.aliases;\n }\n if (this.doc !== void 0) {\n schema.doc = this.doc;\n }\n }\n return schema;\n };\n Type.prototype._createBranchConstructor = function() {\n var name = this.branchName;\n if (name === \"null\") {\n return null;\n }\n var attr = ~name.indexOf(\".\") ? \"this['\" + name + \"']\" : \"this.\" + name;\n var body = \"return function Branch$(val) { \" + attr + \" = val; };\";\n var Branch = new Function(body)();\n Branch.type = this;\n Branch.prototype.unwrap = new Function(\"return \" + attr + \";\");\n Branch.prototype.unwrapped = Branch.prototype.unwrap;\n return Branch;\n };\n Type.prototype._peek = function(tap) {\n var pos = tap.pos;\n var val = this._read(tap);\n tap.pos = pos;\n return val;\n };\n Type.prototype._check = utils.abstractFunction;\n Type.prototype._copy = utils.abstractFunction;\n Type.prototype._deref = utils.abstractFunction;\n Type.prototype._match = utils.abstractFunction;\n Type.prototype._read = utils.abstractFunction;\n Type.prototype._skip = utils.abstractFunction;\n Type.prototype._update = utils.abstractFunction;\n Type.prototype._write = utils.abstractFunction;\n Type.prototype.getAliases = function() {\n return this.aliases;\n };\n Type.prototype.getFingerprint = Type.prototype.fingerprint;\n Type.prototype.getName = function(asBranch) {\n return this.name || !asBranch ? this.name : this.branchName;\n };\n Type.prototype.getSchema = Type.prototype.schema;\n Type.prototype.getTypeName = function() {\n return this.typeName;\n };\n function PrimitiveType(noFreeze) {\n Type.call(this);\n this._branchConstructor = this._createBranchConstructor();\n if (!noFreeze) {\n Object.freeze(this);\n }\n }\n util.inherits(PrimitiveType, Type);\n PrimitiveType.prototype._update = function(resolver, type) {\n if (type.typeName === this.typeName) {\n resolver._read = this._read;\n }\n };\n PrimitiveType.prototype._copy = function(val) {\n this._check(val, void 0, throwInvalidError);\n return val;\n };\n PrimitiveType.prototype._deref = function() {\n return this.typeName;\n };\n PrimitiveType.prototype.compare = utils.compare;\n function NullType() {\n PrimitiveType.call(this);\n }\n util.inherits(NullType, PrimitiveType);\n NullType.prototype._check = function(val, flags, hook) {\n var b2 = val === null;\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n NullType.prototype._read = function() {\n return null;\n };\n NullType.prototype._skip = function() {\n };\n NullType.prototype._write = function(tap, val) {\n if (val !== null) {\n throwInvalidError(val, this);\n }\n };\n NullType.prototype._match = function() {\n return 0;\n };\n NullType.prototype.compare = NullType.prototype._match;\n NullType.prototype.typeName = \"null\";\n NullType.prototype.random = NullType.prototype._read;\n function BooleanType() {\n PrimitiveType.call(this);\n }\n util.inherits(BooleanType, PrimitiveType);\n BooleanType.prototype._check = function(val, flags, hook) {\n var b2 = typeof val == \"boolean\";\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n BooleanType.prototype._read = function(tap) {\n return tap.readBoolean();\n };\n BooleanType.prototype._skip = function(tap) {\n tap.skipBoolean();\n };\n BooleanType.prototype._write = function(tap, val) {\n if (typeof val != \"boolean\") {\n throwInvalidError(val, this);\n }\n tap.writeBoolean(val);\n };\n BooleanType.prototype._match = function(tap1, tap2) {\n return tap1.matchBoolean(tap2);\n };\n BooleanType.prototype.typeName = \"boolean\";\n BooleanType.prototype.random = function() {\n return RANDOM.nextBoolean();\n };\n function IntType() {\n PrimitiveType.call(this);\n }\n util.inherits(IntType, PrimitiveType);\n IntType.prototype._check = function(val, flags, hook) {\n var b2 = val === (val | 0);\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n IntType.prototype._read = function(tap) {\n return tap.readInt();\n };\n IntType.prototype._skip = function(tap) {\n tap.skipInt();\n };\n IntType.prototype._write = function(tap, val) {\n if (val !== (val | 0)) {\n throwInvalidError(val, this);\n }\n tap.writeInt(val);\n };\n IntType.prototype._match = function(tap1, tap2) {\n return tap1.matchInt(tap2);\n };\n IntType.prototype.typeName = \"int\";\n IntType.prototype.random = function() {\n return RANDOM.nextInt(1e3) | 0;\n };\n function LongType() {\n PrimitiveType.call(this);\n }\n util.inherits(LongType, PrimitiveType);\n LongType.prototype._check = function(val, flags, hook) {\n var b2 = typeof val == \"number\" && val % 1 === 0 && isSafeLong(val);\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n LongType.prototype._read = function(tap) {\n var n = tap.readLong();\n if (!isSafeLong(n)) {\n throw new Error(\"potential precision loss\");\n }\n return n;\n };\n LongType.prototype._skip = function(tap) {\n tap.skipLong();\n };\n LongType.prototype._write = function(tap, val) {\n if (typeof val != \"number\" || val % 1 || !isSafeLong(val)) {\n throwInvalidError(val, this);\n }\n tap.writeLong(val);\n };\n LongType.prototype._match = function(tap1, tap2) {\n return tap1.matchLong(tap2);\n };\n LongType.prototype._update = function(resolver, type) {\n switch (type.typeName) {\n case \"int\":\n resolver._read = type._read;\n break;\n case \"abstract:long\":\n case \"long\":\n resolver._read = this._read;\n }\n };\n LongType.prototype.typeName = \"long\";\n LongType.prototype.random = function() {\n return RANDOM.nextInt();\n };\n LongType.__with = function(methods, noUnpack) {\n methods = methods || {};\n var mapping = {\n toBuffer: \"_toBuffer\",\n fromBuffer: \"_fromBuffer\",\n fromJSON: \"_fromJSON\",\n toJSON: \"_toJSON\",\n isValid: \"_isValid\",\n compare: \"compare\"\n };\n var type = new AbstractLongType(noUnpack);\n Object.keys(mapping).forEach(function(name) {\n if (methods[name] === void 0) {\n throw new Error(f2(\"missing method implementation: %s\", name));\n }\n type[mapping[name]] = methods[name];\n });\n return Object.freeze(type);\n };\n function FloatType() {\n PrimitiveType.call(this);\n }\n util.inherits(FloatType, PrimitiveType);\n FloatType.prototype._check = function(val, flags, hook) {\n var b2 = typeof val == \"number\";\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n FloatType.prototype._read = function(tap) {\n return tap.readFloat();\n };\n FloatType.prototype._skip = function(tap) {\n tap.skipFloat();\n };\n FloatType.prototype._write = function(tap, val) {\n if (typeof val != \"number\") {\n throwInvalidError(val, this);\n }\n tap.writeFloat(val);\n };\n FloatType.prototype._match = function(tap1, tap2) {\n return tap1.matchFloat(tap2);\n };\n FloatType.prototype._update = function(resolver, type) {\n switch (type.typeName) {\n case \"float\":\n case \"int\":\n resolver._read = type._read;\n break;\n case \"abstract:long\":\n case \"long\":\n resolver._read = function(tap) {\n return tap.readLong();\n };\n }\n };\n FloatType.prototype.typeName = \"float\";\n FloatType.prototype.random = function() {\n return RANDOM.nextFloat(1e3);\n };\n function DoubleType() {\n PrimitiveType.call(this);\n }\n util.inherits(DoubleType, PrimitiveType);\n DoubleType.prototype._check = function(val, flags, hook) {\n var b2 = typeof val == \"number\";\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n DoubleType.prototype._read = function(tap) {\n return tap.readDouble();\n };\n DoubleType.prototype._skip = function(tap) {\n tap.skipDouble();\n };\n DoubleType.prototype._write = function(tap, val) {\n if (typeof val != \"number\") {\n throwInvalidError(val, this);\n }\n tap.writeDouble(val);\n };\n DoubleType.prototype._match = function(tap1, tap2) {\n return tap1.matchDouble(tap2);\n };\n DoubleType.prototype._update = function(resolver, type) {\n switch (type.typeName) {\n case \"double\":\n case \"float\":\n case \"int\":\n resolver._read = type._read;\n break;\n case \"abstract:long\":\n case \"long\":\n resolver._read = function(tap) {\n return tap.readLong();\n };\n }\n };\n DoubleType.prototype.typeName = \"double\";\n DoubleType.prototype.random = function() {\n return RANDOM.nextFloat();\n };\n function StringType() {\n PrimitiveType.call(this);\n }\n util.inherits(StringType, PrimitiveType);\n StringType.prototype._check = function(val, flags, hook) {\n var b2 = typeof val == \"string\";\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n StringType.prototype._read = function(tap) {\n return tap.readString();\n };\n StringType.prototype._skip = function(tap) {\n tap.skipString();\n };\n StringType.prototype._write = function(tap, val) {\n if (typeof val != \"string\") {\n throwInvalidError(val, this);\n }\n tap.writeString(val);\n };\n StringType.prototype._match = function(tap1, tap2) {\n return tap1.matchString(tap2);\n };\n StringType.prototype._update = function(resolver, type) {\n switch (type.typeName) {\n case \"bytes\":\n case \"string\":\n resolver._read = this._read;\n }\n };\n StringType.prototype.typeName = \"string\";\n StringType.prototype.random = function() {\n return RANDOM.nextString(RANDOM.nextInt(32));\n };\n function BytesType() {\n PrimitiveType.call(this);\n }\n util.inherits(BytesType, PrimitiveType);\n BytesType.prototype._check = function(val, flags, hook) {\n var b2 = Buffer2.isBuffer(val);\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n BytesType.prototype._read = function(tap) {\n return tap.readBytes();\n };\n BytesType.prototype._skip = function(tap) {\n tap.skipBytes();\n };\n BytesType.prototype._write = function(tap, val) {\n if (!Buffer2.isBuffer(val)) {\n throwInvalidError(val, this);\n }\n tap.writeBytes(val);\n };\n BytesType.prototype._match = function(tap1, tap2) {\n return tap1.matchBytes(tap2);\n };\n BytesType.prototype._update = StringType.prototype._update;\n BytesType.prototype._copy = function(obj, opts) {\n var buf;\n switch ((opts && opts.coerce) | 0) {\n case 3:\n this._check(obj, void 0, throwInvalidError);\n return obj.toString(\"binary\");\n case 2:\n if (typeof obj != \"string\") {\n throw new Error(f2(\"cannot coerce to buffer: %j\", obj));\n }\n buf = utils.bufferFrom(obj, \"binary\");\n this._check(buf, void 0, throwInvalidError);\n return buf;\n case 1:\n if (!isJsonBuffer(obj)) {\n throw new Error(f2(\"cannot coerce to buffer: %j\", obj));\n }\n buf = utils.bufferFrom(obj.data);\n this._check(buf, void 0, throwInvalidError);\n return buf;\n default:\n this._check(obj, void 0, throwInvalidError);\n return utils.bufferFrom(obj);\n }\n };\n BytesType.prototype.compare = Buffer2.compare;\n BytesType.prototype.typeName = \"bytes\";\n BytesType.prototype.random = function() {\n return RANDOM.nextBuffer(RANDOM.nextInt(32));\n };\n function UnionType(schema, opts) {\n Type.call(this);\n if (!Array.isArray(schema)) {\n throw new Error(f2(\"non-array union schema: %j\", schema));\n }\n if (!schema.length) {\n throw new Error(\"empty union\");\n }\n this.types = Object.freeze(schema.map(function(obj) {\n return Type.forSchema(obj, opts);\n }));\n this._branchIndices = {};\n this.types.forEach(function(type, i) {\n if (Type.isType(type, \"union\")) {\n throw new Error(\"unions cannot be directly nested\");\n }\n var branch = type.branchName;\n if (this._branchIndices[branch] !== void 0) {\n throw new Error(f2(\"duplicate union branch name: %j\", branch));\n }\n this._branchIndices[branch] = i;\n }, this);\n }\n util.inherits(UnionType, Type);\n UnionType.prototype._branchConstructor = function() {\n throw new Error(\"unions cannot be directly wrapped\");\n };\n UnionType.prototype._skip = function(tap) {\n this.types[tap.readLong()]._skip(tap);\n };\n UnionType.prototype._match = function(tap1, tap2) {\n var n1 = tap1.readLong();\n var n2 = tap2.readLong();\n if (n1 === n2) {\n return this.types[n1]._match(tap1, tap2);\n } else {\n return n1 < n2 ? -1 : 1;\n }\n };\n UnionType.prototype._deref = function(schema, opts) {\n return this.types.map(function(t) {\n return t._attrs(opts);\n });\n };\n UnionType.prototype.getTypes = function() {\n return this.types;\n };\n function UnwrappedUnionType(schema, opts) {\n UnionType.call(this, schema, opts);\n this._dynamicBranches = null;\n this._bucketIndices = {};\n this.types.forEach(function(type, index) {\n if (Type.isType(type, \"abstract\", \"logical\")) {\n if (!this._dynamicBranches) {\n this._dynamicBranches = [];\n }\n this._dynamicBranches.push({ index, type });\n } else {\n var bucket = getTypeBucket(type);\n if (this._bucketIndices[bucket] !== void 0) {\n throw new Error(f2(\"ambiguous unwrapped union: %j\", this));\n }\n this._bucketIndices[bucket] = index;\n }\n }, this);\n Object.freeze(this);\n }\n util.inherits(UnwrappedUnionType, UnionType);\n UnwrappedUnionType.prototype._getIndex = function(val) {\n var index = this._bucketIndices[getValueBucket(val)];\n if (this._dynamicBranches) {\n index = this._getBranchIndex(val, index);\n }\n return index;\n };\n UnwrappedUnionType.prototype._getBranchIndex = function(any, index) {\n var logicalBranches = this._dynamicBranches;\n var i, l, branch;\n for (i = 0, l = logicalBranches.length; i < l; i++) {\n branch = logicalBranches[i];\n if (branch.type._check(any)) {\n if (index === void 0) {\n index = branch.index;\n } else {\n throw new Error(\"ambiguous conversion\");\n }\n }\n }\n return index;\n };\n UnwrappedUnionType.prototype._check = function(val, flags, hook, path) {\n var index = this._getIndex(val);\n var b2 = index !== void 0;\n if (b2) {\n return this.types[index]._check(val, flags, hook, path);\n }\n if (hook) {\n hook(val, this);\n }\n return b2;\n };\n UnwrappedUnionType.prototype._read = function(tap) {\n var index = tap.readLong();\n var branchType = this.types[index];\n if (branchType) {\n return branchType._read(tap);\n } else {\n throw new Error(f2(\"invalid union index: %s\", index));\n }\n };\n UnwrappedUnionType.prototype._write = function(tap, val) {\n var index = this._getIndex(val);\n if (index === void 0) {\n throwInvalidError(val, this);\n }\n tap.writeLong(index);\n if (val !== null) {\n this.types[index]._write(tap, val);\n }\n };\n UnwrappedUnionType.prototype._update = function(resolver, type, opts) {\n var i, l, typeResolver;\n for (i = 0, l = this.types.length; i < l; i++) {\n try {\n typeResolver = this.types[i].createResolver(type, opts);\n } catch (err) {\n continue;\n }\n resolver._read = function(tap) {\n return typeResolver._read(tap);\n };\n return;\n }\n };\n UnwrappedUnionType.prototype._copy = function(val, opts) {\n var coerce = opts && opts.coerce | 0;\n var wrap = opts && opts.wrap | 0;\n var index;\n if (wrap === 2) {\n index = 0;\n } else {\n switch (coerce) {\n case 1:\n if (isJsonBuffer(val) && this._bucketIndices.buffer !== void 0) {\n index = this._bucketIndices.buffer;\n } else {\n index = this._getIndex(val);\n }\n break;\n case 2:\n if (val === null) {\n index = this._bucketIndices[\"null\"];\n } else if (typeof val === \"object\") {\n var keys = Object.keys(val);\n if (keys.length === 1) {\n index = this._branchIndices[keys[0]];\n val = val[keys[0]];\n }\n }\n break;\n default:\n index = this._getIndex(val);\n }\n if (index === void 0) {\n throwInvalidError(val, this);\n }\n }\n var type = this.types[index];\n if (val === null || wrap === 3) {\n return type._copy(val, opts);\n } else {\n switch (coerce) {\n case 3:\n var obj = {};\n obj[type.branchName] = type._copy(val, opts);\n return obj;\n default:\n return type._copy(val, opts);\n }\n }\n };\n UnwrappedUnionType.prototype.compare = function(val1, val2) {\n var index1 = this._getIndex(val1);\n var index2 = this._getIndex(val2);\n if (index1 === void 0) {\n throwInvalidError(val1, this);\n } else if (index2 === void 0) {\n throwInvalidError(val2, this);\n } else if (index1 === index2) {\n return this.types[index1].compare(val1, val2);\n } else {\n return utils.compare(index1, index2);\n }\n };\n UnwrappedUnionType.prototype.typeName = \"union:unwrapped\";\n UnwrappedUnionType.prototype.random = function() {\n var index = RANDOM.nextInt(this.types.length);\n return this.types[index].random();\n };\n function WrappedUnionType(schema, opts) {\n UnionType.call(this, schema, opts);\n Object.freeze(this);\n }\n util.inherits(WrappedUnionType, UnionType);\n WrappedUnionType.prototype._check = function(val, flags, hook, path) {\n var b2 = false;\n if (val === null) {\n b2 = this._branchIndices[\"null\"] !== void 0;\n } else if (typeof val == \"object\") {\n var keys = Object.keys(val);\n if (keys.length === 1) {\n var name = keys[0];\n var index = this._branchIndices[name];\n if (index !== void 0) {\n if (hook) {\n path.push(name);\n b2 = this.types[index]._check(val[name], flags, hook, path);\n path.pop();\n return b2;\n } else {\n return this.types[index]._check(val[name], flags);\n }\n }\n }\n }\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n WrappedUnionType.prototype._read = function(tap) {\n var type = this.types[tap.readLong()];\n if (!type) {\n throw new Error(f2(\"invalid union index\"));\n }\n var Branch = type._branchConstructor;\n if (Branch === null) {\n return null;\n } else {\n return new Branch(type._read(tap));\n }\n };\n WrappedUnionType.prototype._write = function(tap, val) {\n var index, keys, name;\n if (val === null) {\n index = this._branchIndices[\"null\"];\n if (index === void 0) {\n throwInvalidError(val, this);\n }\n tap.writeLong(index);\n } else {\n keys = Object.keys(val);\n if (keys.length === 1) {\n name = keys[0];\n index = this._branchIndices[name];\n }\n if (index === void 0) {\n throwInvalidError(val, this);\n }\n tap.writeLong(index);\n this.types[index]._write(tap, val[name]);\n }\n };\n WrappedUnionType.prototype._update = function(resolver, type, opts) {\n var i, l, typeResolver, Branch;\n for (i = 0, l = this.types.length; i < l; i++) {\n try {\n typeResolver = this.types[i].createResolver(type, opts);\n } catch (err) {\n continue;\n }\n Branch = this.types[i]._branchConstructor;\n if (Branch) {\n resolver._read = function(tap) {\n return new Branch(typeResolver._read(tap));\n };\n } else {\n resolver._read = function() {\n return null;\n };\n }\n return;\n }\n };\n WrappedUnionType.prototype._copy = function(val, opts) {\n var wrap = opts && opts.wrap | 0;\n if (wrap === 2) {\n var firstType = this.types[0];\n if (val === null && firstType.typeName === \"null\") {\n return null;\n }\n return new firstType._branchConstructor(firstType._copy(val, opts));\n }\n if (val === null && this._branchIndices[\"null\"] !== void 0) {\n return null;\n }\n var i, l, obj;\n if (typeof val == \"object\") {\n var keys = Object.keys(val);\n if (keys.length === 1) {\n var name = keys[0];\n i = this._branchIndices[name];\n if (i === void 0 && opts.qualifyNames) {\n var j2, type;\n for (j2 = 0, l = this.types.length; j2 < l; j2++) {\n type = this.types[j2];\n if (type.name && name === utils.unqualify(type.name)) {\n i = j2;\n break;\n }\n }\n }\n if (i !== void 0) {\n obj = this.types[i]._copy(val[name], opts);\n }\n }\n }\n if (wrap === 1 && obj === void 0) {\n i = 0;\n l = this.types.length;\n while (i < l && obj === void 0) {\n try {\n obj = this.types[i]._copy(val, opts);\n } catch (err) {\n i++;\n }\n }\n }\n if (obj !== void 0) {\n return wrap === 3 ? obj : new this.types[i]._branchConstructor(obj);\n }\n throwInvalidError(val, this);\n };\n WrappedUnionType.prototype.compare = function(val1, val2) {\n var name1 = val1 === null ? \"null\" : Object.keys(val1)[0];\n var name2 = val2 === null ? \"null\" : Object.keys(val2)[0];\n var index = this._branchIndices[name1];\n if (name1 === name2) {\n return name1 === \"null\" ? 0 : this.types[index].compare(val1[name1], val2[name1]);\n } else {\n return utils.compare(index, this._branchIndices[name2]);\n }\n };\n WrappedUnionType.prototype.typeName = \"union:wrapped\";\n WrappedUnionType.prototype.random = function() {\n var index = RANDOM.nextInt(this.types.length);\n var type = this.types[index];\n var Branch = type._branchConstructor;\n if (!Branch) {\n return null;\n }\n return new Branch(type.random());\n };\n function EnumType(schema, opts) {\n Type.call(this, schema, opts);\n if (!Array.isArray(schema.symbols) || !schema.symbols.length) {\n throw new Error(f2(\"invalid enum symbols: %j\", schema.symbols));\n }\n this.symbols = Object.freeze(schema.symbols.slice());\n this._indices = {};\n this.symbols.forEach(function(symbol, i) {\n if (!utils.isValidName(symbol)) {\n throw new Error(f2(\"invalid %s symbol: %j\", this, symbol));\n }\n if (this._indices[symbol] !== void 0) {\n throw new Error(f2(\"duplicate %s symbol: %j\", this, symbol));\n }\n this._indices[symbol] = i;\n }, this);\n this.default = schema.default;\n if (this.default !== void 0 && this._indices[this.default] === void 0) {\n throw new Error(f2(\"invalid %s default: %j\", this, this.default));\n }\n this._branchConstructor = this._createBranchConstructor();\n Object.freeze(this);\n }\n util.inherits(EnumType, Type);\n EnumType.prototype._check = function(val, flags, hook) {\n var b2 = this._indices[val] !== void 0;\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n EnumType.prototype._read = function(tap) {\n var index = tap.readLong();\n var symbol = this.symbols[index];\n if (symbol === void 0) {\n throw new Error(f2(\"invalid %s enum index: %s\", this.name, index));\n }\n return symbol;\n };\n EnumType.prototype._skip = function(tap) {\n tap.skipLong();\n };\n EnumType.prototype._write = function(tap, val) {\n var index = this._indices[val];\n if (index === void 0) {\n throwInvalidError(val, this);\n }\n tap.writeLong(index);\n };\n EnumType.prototype._match = function(tap1, tap2) {\n return tap1.matchLong(tap2);\n };\n EnumType.prototype.compare = function(val1, val2) {\n return utils.compare(this._indices[val1], this._indices[val2]);\n };\n EnumType.prototype._update = function(resolver, type, opts) {\n var symbols = this.symbols;\n if (type.typeName === \"enum\" && hasCompatibleName(this, type, !opts.ignoreNamespaces) && (type.symbols.every(function(s) {\n return ~symbols.indexOf(s);\n }) || this.default !== void 0)) {\n resolver.symbols = type.symbols.map(function(s) {\n return this._indices[s] === void 0 ? this.default : s;\n }, this);\n resolver._read = type._read;\n }\n };\n EnumType.prototype._copy = function(val) {\n this._check(val, void 0, throwInvalidError);\n return val;\n };\n EnumType.prototype._deref = function(schema) {\n schema.symbols = this.symbols;\n };\n EnumType.prototype.getSymbols = function() {\n return this.symbols;\n };\n EnumType.prototype.typeName = \"enum\";\n EnumType.prototype.random = function() {\n return RANDOM.choice(this.symbols);\n };\n function FixedType(schema, opts) {\n Type.call(this, schema, opts);\n if (schema.size !== (schema.size | 0) || schema.size < 0) {\n throw new Error(f2(\"invalid %s size\", this.branchName));\n }\n this.size = schema.size | 0;\n this._branchConstructor = this._createBranchConstructor();\n Object.freeze(this);\n }\n util.inherits(FixedType, Type);\n FixedType.prototype._check = function(val, flags, hook) {\n var b2 = Buffer2.isBuffer(val) && val.length === this.size;\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n FixedType.prototype._read = function(tap) {\n return tap.readFixed(this.size);\n };\n FixedType.prototype._skip = function(tap) {\n tap.skipFixed(this.size);\n };\n FixedType.prototype._write = function(tap, val) {\n if (!Buffer2.isBuffer(val) || val.length !== this.size) {\n throwInvalidError(val, this);\n }\n tap.writeFixed(val, this.size);\n };\n FixedType.prototype._match = function(tap1, tap2) {\n return tap1.matchFixed(tap2, this.size);\n };\n FixedType.prototype.compare = Buffer2.compare;\n FixedType.prototype._update = function(resolver, type, opts) {\n if (type.typeName === \"fixed\" && this.size === type.size && hasCompatibleName(this, type, !opts.ignoreNamespaces)) {\n resolver.size = this.size;\n resolver._read = this._read;\n }\n };\n FixedType.prototype._copy = BytesType.prototype._copy;\n FixedType.prototype._deref = function(schema) {\n schema.size = this.size;\n };\n FixedType.prototype.getSize = function() {\n return this.size;\n };\n FixedType.prototype.typeName = \"fixed\";\n FixedType.prototype.random = function() {\n return RANDOM.nextBuffer(this.size);\n };\n function MapType(schema, opts) {\n Type.call(this);\n if (!schema.values) {\n throw new Error(f2(\"missing map values: %j\", schema));\n }\n this.valuesType = Type.forSchema(schema.values, opts);\n this._branchConstructor = this._createBranchConstructor();\n Object.freeze(this);\n }\n util.inherits(MapType, Type);\n MapType.prototype._check = function(val, flags, hook, path) {\n if (!val || typeof val != \"object\" || Array.isArray(val)) {\n if (hook) {\n hook(val, this);\n }\n return false;\n }\n var keys = Object.keys(val);\n var b2 = true;\n var i, l, j2, key;\n if (hook) {\n j2 = path.length;\n path.push(\"\");\n for (i = 0, l = keys.length; i < l; i++) {\n key = path[j2] = keys[i];\n if (!this.valuesType._check(val[key], flags, hook, path)) {\n b2 = false;\n }\n }\n path.pop();\n } else {\n for (i = 0, l = keys.length; i < l; i++) {\n if (!this.valuesType._check(val[keys[i]], flags)) {\n return false;\n }\n }\n }\n return b2;\n };\n MapType.prototype._read = function(tap) {\n var values = this.valuesType;\n var val = {};\n var n;\n while (n = readArraySize(tap)) {\n while (n--) {\n var key = tap.readString();\n val[key] = values._read(tap);\n }\n }\n return val;\n };\n MapType.prototype._skip = function(tap) {\n var values = this.valuesType;\n var len, n;\n while (n = tap.readLong()) {\n if (n < 0) {\n len = tap.readLong();\n tap.pos += len;\n } else {\n while (n--) {\n tap.skipString();\n values._skip(tap);\n }\n }\n }\n };\n MapType.prototype._write = function(tap, val) {\n if (!val || typeof val != \"object\" || Array.isArray(val)) {\n throwInvalidError(val, this);\n }\n var values = this.valuesType;\n var keys = Object.keys(val);\n var n = keys.length;\n var i, key;\n if (n) {\n tap.writeLong(n);\n for (i = 0; i < n; i++) {\n key = keys[i];\n tap.writeString(key);\n values._write(tap, val[key]);\n }\n }\n tap.writeLong(0);\n };\n MapType.prototype._match = function() {\n throw new Error(\"maps cannot be compared\");\n };\n MapType.prototype._update = function(rsv, type, opts) {\n if (type.typeName === \"map\") {\n rsv.valuesType = this.valuesType.createResolver(type.valuesType, opts);\n rsv._read = this._read;\n }\n };\n MapType.prototype._copy = function(val, opts) {\n if (val && typeof val == \"object\" && !Array.isArray(val)) {\n var values = this.valuesType;\n var keys = Object.keys(val);\n var i, l, key;\n var copy = {};\n for (i = 0, l = keys.length; i < l; i++) {\n key = keys[i];\n copy[key] = values._copy(val[key], opts);\n }\n return copy;\n }\n throwInvalidError(val, this);\n };\n MapType.prototype.compare = MapType.prototype._match;\n MapType.prototype.typeName = \"map\";\n MapType.prototype.getValuesType = function() {\n return this.valuesType;\n };\n MapType.prototype.random = function() {\n var val = {};\n var i, l;\n for (i = 0, l = RANDOM.nextInt(10); i < l; i++) {\n val[RANDOM.nextString(RANDOM.nextInt(20))] = this.valuesType.random();\n }\n return val;\n };\n MapType.prototype._deref = function(schema, opts) {\n schema.values = this.valuesType._attrs(opts);\n };\n function ArrayType(schema, opts) {\n Type.call(this);\n if (!schema.items) {\n throw new Error(f2(\"missing array items: %j\", schema));\n }\n this.itemsType = Type.forSchema(schema.items, opts);\n this._branchConstructor = this._createBranchConstructor();\n Object.freeze(this);\n }\n util.inherits(ArrayType, Type);\n ArrayType.prototype._check = function(val, flags, hook, path) {\n if (!Array.isArray(val)) {\n if (hook) {\n hook(val, this);\n }\n return false;\n }\n var items = this.itemsType;\n var b2 = true;\n var i, l, j2;\n if (hook) {\n j2 = path.length;\n path.push(\"\");\n for (i = 0, l = val.length; i < l; i++) {\n path[j2] = \"\" + i;\n if (!items._check(val[i], flags, hook, path)) {\n b2 = false;\n }\n }\n path.pop();\n } else {\n for (i = 0, l = val.length; i < l; i++) {\n if (!items._check(val[i], flags)) {\n return false;\n }\n }\n }\n return b2;\n };\n ArrayType.prototype._read = function(tap) {\n var items = this.itemsType;\n var i = 0;\n var val, n;\n while (n = tap.readLong()) {\n if (n < 0) {\n n = -n;\n tap.skipLong();\n }\n val = val || new Array(n);\n while (n--) {\n val[i++] = items._read(tap);\n }\n }\n return val || [];\n };\n ArrayType.prototype._skip = function(tap) {\n var items = this.itemsType;\n var len, n;\n while (n = tap.readLong()) {\n if (n < 0) {\n len = tap.readLong();\n tap.pos += len;\n } else {\n while (n--) {\n items._skip(tap);\n }\n }\n }\n };\n ArrayType.prototype._write = function(tap, val) {\n if (!Array.isArray(val)) {\n throwInvalidError(val, this);\n }\n var items = this.itemsType;\n var n = val.length;\n var i;\n if (n) {\n tap.writeLong(n);\n for (i = 0; i < n; i++) {\n items._write(tap, val[i]);\n }\n }\n tap.writeLong(0);\n };\n ArrayType.prototype._match = function(tap1, tap2) {\n var n1 = tap1.readLong();\n var n2 = tap2.readLong();\n var f3;\n while (n1 && n2) {\n f3 = this.itemsType._match(tap1, tap2);\n if (f3) {\n return f3;\n }\n if (!--n1) {\n n1 = readArraySize(tap1);\n }\n if (!--n2) {\n n2 = readArraySize(tap2);\n }\n }\n return utils.compare(n1, n2);\n };\n ArrayType.prototype._update = function(resolver, type, opts) {\n if (type.typeName === \"array\") {\n resolver.itemsType = this.itemsType.createResolver(type.itemsType, opts);\n resolver._read = this._read;\n }\n };\n ArrayType.prototype._copy = function(val, opts) {\n if (!Array.isArray(val)) {\n throwInvalidError(val, this);\n }\n var items = new Array(val.length);\n var i, l;\n for (i = 0, l = val.length; i < l; i++) {\n items[i] = this.itemsType._copy(val[i], opts);\n }\n return items;\n };\n ArrayType.prototype._deref = function(schema, opts) {\n schema.items = this.itemsType._attrs(opts);\n };\n ArrayType.prototype.compare = function(val1, val2) {\n var n1 = val1.length;\n var n2 = val2.length;\n var i, l, f3;\n for (i = 0, l = Math.min(n1, n2); i < l; i++) {\n if (f3 = this.itemsType.compare(val1[i], val2[i])) {\n return f3;\n }\n }\n return utils.compare(n1, n2);\n };\n ArrayType.prototype.getItemsType = function() {\n return this.itemsType;\n };\n ArrayType.prototype.typeName = \"array\";\n ArrayType.prototype.random = function() {\n var arr = [];\n var i, l;\n for (i = 0, l = RANDOM.nextInt(10); i < l; i++) {\n arr.push(this.itemsType.random());\n }\n return arr;\n };\n function RecordType(schema, opts) {\n opts = opts || {};\n var namespace = opts.namespace;\n if (schema.namespace !== void 0) {\n opts.namespace = schema.namespace;\n } else if (schema.name) {\n var ns = utils.impliedNamespace(schema.name);\n if (ns !== void 0) {\n opts.namespace = ns;\n }\n }\n Type.call(this, schema, opts);\n if (!Array.isArray(schema.fields)) {\n throw new Error(f2(\"non-array record fields: %j\", schema.fields));\n }\n if (utils.hasDuplicates(schema.fields, function(f3) {\n return f3.name;\n })) {\n throw new Error(f2(\"duplicate field name: %j\", schema.fields));\n }\n this._fieldsByName = {};\n this.fields = Object.freeze(schema.fields.map(function(f3) {\n var field = new Field(f3, opts);\n this._fieldsByName[field.name] = field;\n return field;\n }, this));\n this._branchConstructor = this._createBranchConstructor();\n this._isError = schema.type === \"error\";\n this.recordConstructor = this._createConstructor(\n opts.errorStackTraces,\n opts.omitRecordMethods\n );\n this._read = this._createReader();\n this._skip = this._createSkipper();\n this._write = this._createWriter();\n this._check = this._createChecker();\n opts.namespace = namespace;\n Object.freeze(this);\n }\n util.inherits(RecordType, Type);\n RecordType.prototype._getConstructorName = function() {\n return this.name ? utils.capitalize(utils.unqualify(this.name)) : this._isError ? \"Error$\" : \"Record$\";\n };\n RecordType.prototype._createConstructor = function(errorStack, plainRecords) {\n var outerArgs = [];\n var innerArgs = [];\n var ds = [];\n var innerBody = \"\";\n var i, l, field, name, defaultValue, hasDefault, stackField;\n for (i = 0, l = this.fields.length; i < l; i++) {\n field = this.fields[i];\n defaultValue = field.defaultValue;\n hasDefault = defaultValue() !== void 0;\n name = field.name;\n if (errorStack && this._isError && name === \"stack\" && Type.isType(field.type, \"string\") && !hasDefault) {\n stackField = field;\n }\n innerArgs.push(\"v\" + i);\n innerBody += \" \";\n if (!hasDefault) {\n innerBody += \"this.\" + name + \" = v\" + i + \";\\n\";\n } else {\n innerBody += \"if (v\" + i + \" === undefined) { \";\n innerBody += \"this.\" + name + \" = d\" + ds.length + \"(); \";\n innerBody += \"} else { this.\" + name + \" = v\" + i + \"; }\\n\";\n outerArgs.push(\"d\" + ds.length);\n ds.push(defaultValue);\n }\n }\n if (stackField) {\n innerBody += \" if (this.stack === undefined) { \";\n if (typeof Error.captureStackTrace == \"function\") {\n innerBody += \"Error.captureStackTrace(this, this.constructor);\";\n } else {\n innerBody += \"this.stack = Error().stack;\";\n }\n innerBody += \" }\\n\";\n }\n var outerBody = \"return function \" + this._getConstructorName() + \"(\";\n outerBody += innerArgs.join() + \") {\\n\" + innerBody + \"};\";\n var Record = new Function(outerArgs.join(), outerBody).apply(void 0, ds);\n if (plainRecords) {\n return Record;\n }\n var self = this;\n Record.getType = function() {\n return self;\n };\n Record.type = self;\n if (this._isError) {\n util.inherits(Record, Error);\n Record.prototype.name = this._getConstructorName();\n }\n Record.prototype.clone = function(o) {\n return self.clone(this, o);\n };\n Record.prototype.compare = function(v2) {\n return self.compare(this, v2);\n };\n Record.prototype.isValid = function(o) {\n return self.isValid(this, o);\n };\n Record.prototype.toBuffer = function() {\n return self.toBuffer(this);\n };\n Record.prototype.toString = function() {\n return self.toString(this);\n };\n Record.prototype.wrap = function() {\n return self.wrap(this);\n };\n Record.prototype.wrapped = Record.prototype.wrap;\n return Record;\n };\n RecordType.prototype._createChecker = function() {\n var names = [];\n var values = [];\n var name = this._getConstructorName();\n var body = \"return function check\" + name + \"(v, f, h, p) {\\n\";\n body += \" if (\\n\";\n body += \" v === null ||\\n\";\n body += \" typeof v != 'object' ||\\n\";\n body += \" (f && !this._checkFields(v))\\n\";\n body += \" ) {\\n\";\n body += \" if (h) { h(v, this); }\\n\";\n body += \" return false;\\n\";\n body += \" }\\n\";\n if (!this.fields.length) {\n body += \" return true;\\n\";\n } else {\n for (i = 0, l = this.fields.length; i < l; i++) {\n field = this.fields[i];\n names.push(\"t\" + i);\n values.push(field.type);\n if (field.defaultValue() !== void 0) {\n body += \" var v\" + i + \" = v.\" + field.name + \";\\n\";\n }\n }\n body += \" if (h) {\\n\";\n body += \" var b = 1;\\n\";\n body += \" var j = p.length;\\n\";\n body += \" p.push('');\\n\";\n var i, l, field;\n for (i = 0, l = this.fields.length; i < l; i++) {\n field = this.fields[i];\n body += \" p[j] = '\" + field.name + \"';\\n\";\n body += \" b &= \";\n if (field.defaultValue() === void 0) {\n body += \"t\" + i + \"._check(v.\" + field.name + \", f, h, p);\\n\";\n } else {\n body += \"v\" + i + \" === undefined || \";\n body += \"t\" + i + \"._check(v\" + i + \", f, h, p);\\n\";\n }\n }\n body += \" p.pop();\\n\";\n body += \" return !!b;\\n\";\n body += \" } else {\\n return (\\n \";\n body += this.fields.map(function(field2, i2) {\n return field2.defaultValue() === void 0 ? \"t\" + i2 + \"._check(v.\" + field2.name + \", f)\" : \"(v\" + i2 + \" === undefined || t\" + i2 + \"._check(v\" + i2 + \", f))\";\n }).join(\" &&\\n \");\n body += \"\\n );\\n }\\n\";\n }\n body += \"};\";\n return new Function(names.join(), body).apply(void 0, values);\n };\n RecordType.prototype._createReader = function() {\n var names = [];\n var values = [this.recordConstructor];\n var i, l;\n for (i = 0, l = this.fields.length; i < l; i++) {\n names.push(\"t\" + i);\n values.push(this.fields[i].type);\n }\n var name = this._getConstructorName();\n var body = \"return function read\" + name + \"(t) {\\n\";\n body += \" return new \" + name + \"(\\n \";\n body += names.map(function(s) {\n return s + \"._read(t)\";\n }).join(\",\\n \");\n body += \"\\n );\\n};\";\n names.unshift(name);\n return new Function(names.join(), body).apply(void 0, values);\n };\n RecordType.prototype._createSkipper = function() {\n var args = [];\n var body = \"return function skip\" + this._getConstructorName() + \"(t) {\\n\";\n var values = [];\n var i, l;\n for (i = 0, l = this.fields.length; i < l; i++) {\n args.push(\"t\" + i);\n values.push(this.fields[i].type);\n body += \" t\" + i + \"._skip(t);\\n\";\n }\n body += \"}\";\n return new Function(args.join(), body).apply(void 0, values);\n };\n RecordType.prototype._createWriter = function() {\n var args = [];\n var name = this._getConstructorName();\n var body = \"return function write\" + name + \"(t, v) {\\n\";\n var values = [];\n var i, l, field, value;\n for (i = 0, l = this.fields.length; i < l; i++) {\n field = this.fields[i];\n args.push(\"t\" + i);\n values.push(field.type);\n body += \" \";\n if (field.defaultValue() === void 0) {\n body += \"t\" + i + \"._write(t, v.\" + field.name + \");\\n\";\n } else {\n value = field.type.toBuffer(field.defaultValue()).toString(\"binary\");\n args.push(\"d\" + i);\n values.push(value);\n body += \"var v\" + i + \" = v.\" + field.name + \";\\n\";\n body += \"if (v\" + i + \" === undefined) {\\n\";\n body += \" t.writeBinary(d\" + i + \", \" + value.length + \");\\n\";\n body += \" } else {\\n t\" + i + \"._write(t, v\" + i + \");\\n }\\n\";\n }\n }\n body += \"}\";\n return new Function(args.join(), body).apply(void 0, values);\n };\n RecordType.prototype._update = function(resolver, type, opts) {\n if (!hasCompatibleName(this, type, !opts.ignoreNamespaces)) {\n throw new Error(f2(\"no alias found for %s\", type.name));\n }\n var rFields = this.fields;\n var wFields = type.fields;\n var wFieldsMap = utils.toMap(wFields, function(f3) {\n return f3.name;\n });\n var innerArgs = [];\n var resolvers = {};\n var i, j2, field, name, names, matches, fieldResolver;\n for (i = 0; i < rFields.length; i++) {\n field = rFields[i];\n names = getAliases(field);\n matches = [];\n for (j2 = 0; j2 < names.length; j2++) {\n name = names[j2];\n if (wFieldsMap[name]) {\n matches.push(name);\n }\n }\n if (matches.length > 1) {\n throw new Error(\n f2(\"ambiguous aliasing for %s.%s (%s)\", type.name, field.name, matches)\n );\n }\n if (!matches.length) {\n if (field.defaultValue() === void 0) {\n throw new Error(\n f2(\"no matching field for default-less %s.%s\", type.name, field.name)\n );\n }\n innerArgs.push(\"undefined\");\n } else {\n name = matches[0];\n fieldResolver = {\n resolver: field.type.createResolver(wFieldsMap[name].type, opts),\n name: \"_\" + field.name\n // Reader field name.\n };\n if (!resolvers[name]) {\n resolvers[name] = [fieldResolver];\n } else {\n resolvers[name].push(fieldResolver);\n }\n innerArgs.push(fieldResolver.name);\n }\n }\n var lazyIndex = -1;\n i = wFields.length;\n while (i && resolvers[wFields[--i].name] === void 0) {\n lazyIndex = i;\n }\n var uname = this._getConstructorName();\n var args = [uname];\n var values = [this.recordConstructor];\n var body = \" return function read\" + uname + \"(t, b) {\\n\";\n for (i = 0; i < wFields.length; i++) {\n if (i === lazyIndex) {\n body += \" if (!b) {\\n\";\n }\n field = type.fields[i];\n name = field.name;\n if (resolvers[name] === void 0) {\n body += ~lazyIndex && i >= lazyIndex ? \" \" : \" \";\n args.push(\"r\" + i);\n values.push(field.type);\n body += \"r\" + i + \"._skip(t);\\n\";\n } else {\n j2 = resolvers[name].length;\n while (j2--) {\n body += ~lazyIndex && i >= lazyIndex ? \" \" : \" \";\n args.push(\"r\" + i + \"f\" + j2);\n fieldResolver = resolvers[name][j2];\n values.push(fieldResolver.resolver);\n body += \"var \" + fieldResolver.name + \" = \";\n body += \"r\" + i + \"f\" + j2 + \"._\" + (j2 ? \"peek\" : \"read\") + \"(t);\\n\";\n }\n }\n }\n if (~lazyIndex) {\n body += \" }\\n\";\n }\n body += \" return new \" + uname + \"(\" + innerArgs.join() + \");\\n};\";\n resolver._read = new Function(args.join(), body).apply(void 0, values);\n };\n RecordType.prototype._match = function(tap1, tap2) {\n var fields = this.fields;\n var i, l, field, order, type;\n for (i = 0, l = fields.length; i < l; i++) {\n field = fields[i];\n order = field._order;\n type = field.type;\n if (order) {\n order *= type._match(tap1, tap2);\n if (order) {\n return order;\n }\n } else {\n type._skip(tap1);\n type._skip(tap2);\n }\n }\n return 0;\n };\n RecordType.prototype._checkFields = function(obj) {\n var keys = Object.keys(obj);\n var i, l;\n for (i = 0, l = keys.length; i < l; i++) {\n if (!this._fieldsByName[keys[i]]) {\n return false;\n }\n }\n return true;\n };\n RecordType.prototype._copy = function(val, opts) {\n var hook = opts && opts.fieldHook;\n var values = [void 0];\n var i, l, field, value;\n for (i = 0, l = this.fields.length; i < l; i++) {\n field = this.fields[i];\n value = val[field.name];\n if (value === void 0 && field.hasOwnProperty(\"defaultValue\")) {\n value = field.defaultValue();\n }\n if (opts && !opts.skip || value !== void 0) {\n value = field.type._copy(value, opts);\n }\n if (hook) {\n value = hook(field, value, this);\n }\n values.push(value);\n }\n var Record = this.recordConstructor;\n return new (Record.bind.apply(Record, values))();\n };\n RecordType.prototype._deref = function(schema, opts) {\n schema.fields = this.fields.map(function(field) {\n var fieldType = field.type;\n var fieldSchema = {\n name: field.name,\n type: fieldType._attrs(opts)\n };\n if (opts.exportAttrs) {\n var val = field.defaultValue();\n if (val !== void 0) {\n fieldSchema[\"default\"] = fieldType._copy(val, { coerce: 3, wrap: 3 });\n }\n var fieldOrder = field.order;\n if (fieldOrder !== \"ascending\") {\n fieldSchema.order = fieldOrder;\n }\n var fieldAliases = field.aliases;\n if (fieldAliases.length) {\n fieldSchema.aliases = fieldAliases;\n }\n var fieldDoc = field.doc;\n if (fieldDoc !== void 0) {\n fieldSchema.doc = fieldDoc;\n }\n }\n return fieldSchema;\n });\n };\n RecordType.prototype.compare = function(val1, val2) {\n var fields = this.fields;\n var i, l, field, name, order, type;\n for (i = 0, l = fields.length; i < l; i++) {\n field = fields[i];\n name = field.name;\n order = field._order;\n type = field.type;\n if (order) {\n order *= type.compare(val1[name], val2[name]);\n if (order) {\n return order;\n }\n }\n }\n return 0;\n };\n RecordType.prototype.random = function() {\n var fields = this.fields.map(function(f3) {\n return f3.type.random();\n });\n fields.unshift(void 0);\n var Record = this.recordConstructor;\n return new (Record.bind.apply(Record, fields))();\n };\n RecordType.prototype.field = function(name) {\n return this._fieldsByName[name];\n };\n RecordType.prototype.getField = RecordType.prototype.field;\n RecordType.prototype.getFields = function() {\n return this.fields;\n };\n RecordType.prototype.getRecordConstructor = function() {\n return this.recordConstructor;\n };\n Object.defineProperty(RecordType.prototype, \"typeName\", {\n enumerable: true,\n get: function() {\n return this._isError ? \"error\" : \"record\";\n }\n });\n function LogicalType(schema, opts) {\n this._logicalTypeName = schema.logicalType;\n Type.call(this);\n LOGICAL_TYPE = this;\n try {\n this._underlyingType = Type.forSchema(schema, opts);\n } finally {\n LOGICAL_TYPE = null;\n var l = UNDERLYING_TYPES.length;\n if (l && UNDERLYING_TYPES[l - 1][0] === this) {\n UNDERLYING_TYPES.pop();\n }\n }\n if (Type.isType(this.underlyingType, \"union\")) {\n this._branchConstructor = this.underlyingType._branchConstructor;\n } else {\n this._branchConstructor = this.underlyingType._createBranchConstructor();\n }\n }\n util.inherits(LogicalType, Type);\n Object.defineProperty(LogicalType.prototype, \"typeName\", {\n enumerable: true,\n get: function() {\n return \"logical:\" + this._logicalTypeName;\n }\n });\n Object.defineProperty(LogicalType.prototype, \"underlyingType\", {\n enumerable: true,\n get: function() {\n if (this._underlyingType) {\n return this._underlyingType;\n }\n var i, l, arr;\n for (i = 0, l = UNDERLYING_TYPES.length; i < l; i++) {\n arr = UNDERLYING_TYPES[i];\n if (arr[0] === this) {\n return arr[1];\n }\n }\n }\n });\n LogicalType.prototype.getUnderlyingType = function() {\n return this.underlyingType;\n };\n LogicalType.prototype._read = function(tap) {\n return this._fromValue(this.underlyingType._read(tap));\n };\n LogicalType.prototype._write = function(tap, any) {\n this.underlyingType._write(tap, this._toValue(any));\n };\n LogicalType.prototype._check = function(any, flags, hook, path) {\n try {\n var val = this._toValue(any);\n } catch (err) {\n }\n if (val === void 0) {\n if (hook) {\n hook(any, this);\n }\n return false;\n }\n return this.underlyingType._check(val, flags, hook, path);\n };\n LogicalType.prototype._copy = function(any, opts) {\n var type = this.underlyingType;\n switch (opts && opts.coerce) {\n case 3:\n return type._copy(this._toValue(any), opts);\n case 2:\n return this._fromValue(type._copy(any, opts));\n default:\n return this._fromValue(type._copy(this._toValue(any), opts));\n }\n };\n LogicalType.prototype._update = function(resolver, type, opts) {\n var _fromValue = this._resolve(type, opts);\n if (_fromValue) {\n resolver._read = function(tap) {\n return _fromValue(type._read(tap));\n };\n }\n };\n LogicalType.prototype.compare = function(obj1, obj2) {\n var val1 = this._toValue(obj1);\n var val2 = this._toValue(obj2);\n return this.underlyingType.compare(val1, val2);\n };\n LogicalType.prototype.random = function() {\n return this._fromValue(this.underlyingType.random());\n };\n LogicalType.prototype._deref = function(schema, opts) {\n var type = this.underlyingType;\n var isVisited = type.name !== void 0 && opts.derefed[type.name];\n schema = type._attrs(opts);\n if (!isVisited && opts.exportAttrs) {\n if (typeof schema == \"string\") {\n schema = { type: schema };\n }\n schema.logicalType = this._logicalTypeName;\n this._export(schema);\n }\n return schema;\n };\n LogicalType.prototype._skip = function(tap) {\n this.underlyingType._skip(tap);\n };\n LogicalType.prototype._export = function() {\n };\n LogicalType.prototype._fromValue = utils.abstractFunction;\n LogicalType.prototype._toValue = utils.abstractFunction;\n LogicalType.prototype._resolve = utils.abstractFunction;\n function AbstractLongType(noUnpack) {\n this._concreteTypeName = \"long\";\n PrimitiveType.call(this, true);\n this._noUnpack = !!noUnpack;\n }\n util.inherits(AbstractLongType, LongType);\n AbstractLongType.prototype.typeName = \"abstract:long\";\n AbstractLongType.prototype._check = function(val, flags, hook) {\n var b2 = this._isValid(val);\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n AbstractLongType.prototype._read = function(tap) {\n var buf, pos;\n if (this._noUnpack) {\n pos = tap.pos;\n tap.skipLong();\n buf = tap.buf.slice(pos, tap.pos);\n } else {\n buf = tap.unpackLongBytes(tap);\n }\n if (tap.isValid()) {\n return this._fromBuffer(buf);\n }\n };\n AbstractLongType.prototype._write = function(tap, val) {\n if (!this._isValid(val)) {\n throwInvalidError(val, this);\n }\n var buf = this._toBuffer(val);\n if (this._noUnpack) {\n tap.writeFixed(buf);\n } else {\n tap.packLongBytes(buf);\n }\n };\n AbstractLongType.prototype._copy = function(val, opts) {\n switch (opts && opts.coerce) {\n case 3:\n return this._toJSON(val);\n case 2:\n return this._fromJSON(val);\n default:\n return this._fromJSON(this._toJSON(val));\n }\n };\n AbstractLongType.prototype._deref = function() {\n return \"long\";\n };\n AbstractLongType.prototype._update = function(resolver, type) {\n var self = this;\n switch (type.typeName) {\n case \"int\":\n resolver._read = function(tap) {\n return self._fromJSON(type._read(tap));\n };\n break;\n case \"abstract:long\":\n case \"long\":\n resolver._read = function(tap) {\n return self._read(tap);\n };\n }\n };\n AbstractLongType.prototype.random = function() {\n return this._fromJSON(LongType.prototype.random());\n };\n AbstractLongType.prototype._fromBuffer = utils.abstractFunction;\n AbstractLongType.prototype._toBuffer = utils.abstractFunction;\n AbstractLongType.prototype._fromJSON = utils.abstractFunction;\n AbstractLongType.prototype._toJSON = utils.abstractFunction;\n AbstractLongType.prototype._isValid = utils.abstractFunction;\n AbstractLongType.prototype.compare = utils.abstractFunction;\n function Field(schema, opts) {\n var name = schema.name;\n if (typeof name != \"string\" || !utils.isValidName(name)) {\n throw new Error(f2(\"invalid field name: %s\", name));\n }\n this.name = name;\n this.type = Type.forSchema(schema.type, opts);\n this.aliases = schema.aliases || [];\n this.doc = schema.doc !== void 0 ? \"\" + schema.doc : void 0;\n this._order = function(order) {\n switch (order) {\n case \"ascending\":\n return 1;\n case \"descending\":\n return -1;\n case \"ignore\":\n return 0;\n default:\n throw new Error(f2(\"invalid order: %j\", order));\n }\n }(schema.order === void 0 ? \"ascending\" : schema.order);\n var value = schema[\"default\"];\n if (value !== void 0) {\n var type = this.type;\n var val;\n try {\n val = type._copy(value, { coerce: 2, wrap: 2 });\n } catch (err) {\n var msg = f2(\"incompatible field default %j (%s)\", value, err.message);\n if (Type.isType(type, \"union\")) {\n msg += f2(\n \", union defaults must match the first branch's type (%j)\",\n type.types[0]\n );\n }\n throw new Error(msg);\n }\n if (isPrimitive(type.typeName) && type.typeName !== \"bytes\") {\n this.defaultValue = function() {\n return val;\n };\n } else {\n this.defaultValue = function() {\n return type._copy(val);\n };\n }\n }\n Object.freeze(this);\n }\n Field.prototype.defaultValue = function() {\n };\n Object.defineProperty(Field.prototype, \"order\", {\n enumerable: true,\n get: function() {\n return [\"descending\", \"ignore\", \"ascending\"][this._order + 1];\n }\n });\n Field.prototype.getAliases = function() {\n return this.aliases;\n };\n Field.prototype.getDefault = Field.prototype.defaultValue;\n Field.prototype.getName = function() {\n return this.name;\n };\n Field.prototype.getOrder = function() {\n return this.order;\n };\n Field.prototype.getType = function() {\n return this.type;\n };\n function Resolver(readerType) {\n this._readerType = readerType;\n this._read = null;\n this.itemsType = null;\n this.size = 0;\n this.symbols = null;\n this.valuesType = null;\n }\n Resolver.prototype._peek = Type.prototype._peek;\n Resolver.prototype.inspect = function() {\n return \"\";\n };\n function Hash() {\n this.str = void 0;\n }\n function readValue(type, tap, resolver, lazy) {\n if (resolver) {\n if (resolver._readerType !== type) {\n throw new Error(\"invalid resolver\");\n }\n return resolver._read(tap, lazy);\n } else {\n return type._read(tap);\n }\n }\n function getAliases(obj) {\n var names = {};\n if (obj.name) {\n names[obj.name] = true;\n }\n var aliases = obj.aliases;\n var i, l;\n for (i = 0, l = aliases.length; i < l; i++) {\n names[aliases[i]] = true;\n }\n return Object.keys(names);\n }\n function hasCompatibleName(reader, writer, strict) {\n if (!writer.name) {\n return true;\n }\n var name = strict ? writer.name : utils.unqualify(writer.name);\n var aliases = getAliases(reader);\n var i, l, alias;\n for (i = 0, l = aliases.length; i < l; i++) {\n alias = aliases[i];\n if (!strict) {\n alias = utils.unqualify(alias);\n }\n if (alias === name) {\n return true;\n }\n }\n return false;\n }\n function isPrimitive(typeName) {\n var type = TYPES[typeName];\n return type && type.prototype instanceof PrimitiveType;\n }\n function getClassName(typeName) {\n if (typeName === \"error\") {\n typeName = \"record\";\n } else {\n var match = /^([^:]+):(.*)$/.exec(typeName);\n if (match) {\n if (match[1] === \"union\") {\n typeName = match[2] + \"Union\";\n } else {\n typeName = match[1];\n }\n }\n }\n return utils.capitalize(typeName) + \"Type\";\n }\n function readArraySize(tap) {\n var n = tap.readLong();\n if (n < 0) {\n n = -n;\n tap.skipLong();\n }\n return n;\n }\n function isSafeLong(n) {\n return n >= -9007199254740990 && n <= 9007199254740990;\n }\n function isJsonBuffer(obj) {\n return obj && obj.type === \"Buffer\" && Array.isArray(obj.data);\n }\n function throwInvalidError(val, type) {\n throw new Error(f2(\"invalid %j: %j\", type.schema(), val));\n }\n function maybeQualify(name, ns) {\n var unqualified = utils.unqualify(name);\n return isPrimitive(unqualified) ? unqualified : utils.qualify(name, ns);\n }\n function getTypeBucket(type) {\n var typeName = type.typeName;\n switch (typeName) {\n case \"double\":\n case \"float\":\n case \"int\":\n case \"long\":\n return \"number\";\n case \"bytes\":\n case \"fixed\":\n return \"buffer\";\n case \"enum\":\n return \"string\";\n case \"map\":\n case \"error\":\n case \"record\":\n return \"object\";\n default:\n return typeName;\n }\n }\n function getValueBucket(val) {\n if (val === null) {\n return \"null\";\n }\n var bucket = typeof val;\n if (bucket === \"object\") {\n if (Array.isArray(val)) {\n return \"array\";\n } else if (Buffer2.isBuffer(val)) {\n return \"buffer\";\n }\n }\n return bucket;\n }\n function isAmbiguous(types) {\n var buckets = {};\n var i, l, bucket, type;\n for (i = 0, l = types.length; i < l; i++) {\n type = types[i];\n if (!Type.isType(type, \"logical\")) {\n bucket = getTypeBucket(type);\n if (buckets[bucket]) {\n return true;\n }\n buckets[bucket] = true;\n }\n }\n return false;\n }\n function combineNumbers(types) {\n var typeNames = [\"int\", \"long\", \"float\", \"double\"];\n var superIndex = -1;\n var superType = null;\n var i, l, type, index;\n for (i = 0, l = types.length; i < l; i++) {\n type = types[i];\n index = typeNames.indexOf(type.typeName);\n if (index > superIndex) {\n superIndex = index;\n superType = type;\n }\n }\n return superType;\n }\n function combineStrings(types, opts) {\n var symbols = {};\n var i, l, type, typeSymbols;\n for (i = 0, l = types.length; i < l; i++) {\n type = types[i];\n if (type.typeName === \"string\") {\n return type;\n }\n typeSymbols = type.symbols;\n var j2, m2;\n for (j2 = 0, m2 = typeSymbols.length; j2 < m2; j2++) {\n symbols[typeSymbols[j2]] = true;\n }\n }\n return Type.forSchema({ type: \"enum\", symbols: Object.keys(symbols) }, opts);\n }\n function combineBuffers(types, opts) {\n var size = -1;\n var i, l, type;\n for (i = 0, l = types.length; i < l; i++) {\n type = types[i];\n if (type.typeName === \"bytes\") {\n return type;\n }\n if (size === -1) {\n size = type.size;\n } else if (type.size !== size) {\n size = -2;\n }\n }\n return size < 0 ? Type.forSchema(\"bytes\", opts) : types[0];\n }\n function combineObjects(types, opts) {\n var allTypes = [];\n var fieldTypes = {};\n var fieldDefaults = {};\n var isValidRecord = true;\n var i, l, type, fields;\n for (i = 0, l = types.length; i < l; i++) {\n type = types[i];\n if (type.typeName === \"map\") {\n isValidRecord = false;\n allTypes.push(type.valuesType);\n } else {\n fields = type.fields;\n var j2, m2, field, fieldDefault, fieldName, fieldType;\n for (j2 = 0, m2 = fields.length; j2 < m2; j2++) {\n field = fields[j2];\n fieldName = field.name;\n fieldType = field.type;\n allTypes.push(fieldType);\n if (isValidRecord) {\n if (!fieldTypes[fieldName]) {\n fieldTypes[fieldName] = [];\n }\n fieldTypes[fieldName].push(fieldType);\n fieldDefault = field.defaultValue();\n if (fieldDefault !== void 0) {\n fieldDefaults[fieldName] = fieldDefault;\n }\n }\n }\n }\n }\n if (isValidRecord) {\n var fieldNames = Object.keys(fieldTypes);\n for (i = 0, l = fieldNames.length; i < l; i++) {\n fieldName = fieldNames[i];\n if (fieldTypes[fieldName].length < types.length && fieldDefaults[fieldName] === void 0) {\n if (opts && opts.strictDefaults) {\n isValidRecord = false;\n } else {\n fieldTypes[fieldName].unshift(Type.forSchema(\"null\", opts));\n fieldDefaults[fieldName] = null;\n }\n }\n }\n }\n var schema;\n if (isValidRecord) {\n schema = {\n type: \"record\",\n fields: fieldNames.map(function(s) {\n var fieldType2 = Type.forTypes(fieldTypes[s], opts);\n var fieldDefault2 = fieldDefaults[s];\n if (fieldDefault2 !== void 0 && ~fieldType2.typeName.indexOf(\"union\")) {\n var unionTypes = fieldType2.types.slice();\n var i2, l2;\n for (i2 = 0, l2 = unionTypes.length; i2 < l2; i2++) {\n if (unionTypes[i2].isValid(fieldDefault2)) {\n break;\n }\n }\n if (i2 > 0) {\n var unionType = unionTypes[0];\n unionTypes[0] = unionTypes[i2];\n unionTypes[i2] = unionType;\n fieldType2 = Type.forSchema(unionTypes, opts);\n }\n }\n return {\n name: s,\n type: fieldType2,\n \"default\": fieldDefaults[s]\n };\n })\n };\n } else {\n schema = {\n type: \"map\",\n values: Type.forTypes(allTypes, opts)\n };\n }\n return Type.forSchema(schema, opts);\n }\n module.exports = {\n Type,\n getTypeBucket,\n getValueBucket,\n isPrimitive,\n builtins: function() {\n var types = {\n LogicalType,\n UnwrappedUnionType,\n WrappedUnionType\n };\n var typeNames = Object.keys(TYPES);\n var i, l, typeName;\n for (i = 0, l = typeNames.length; i < l; i++) {\n typeName = typeNames[i];\n types[getClassName(typeName)] = TYPES[typeName];\n }\n return types;\n }()\n };\n }\n});\n\n// node_modules/avsc/lib/containers.js\nvar require_containers = __commonJS({\n \"node_modules/avsc/lib/containers.js\"(exports, module) {\n \"use strict\";\n var types = require_types();\n var utils = require_utils();\n var buffer = __import_BUFFER;\n var stream = __import_STREAM;\n var util = __import_UTIL;\n var zlib = __import_ZLIB;\n var Buffer2 = buffer.Buffer;\n var OPTS = { namespace: \"org.apache.avro.file\" };\n var LONG_TYPE = types.Type.forSchema(\"long\", OPTS);\n var MAP_BYTES_TYPE = types.Type.forSchema({ type: \"map\", values: \"bytes\" }, OPTS);\n var HEADER_TYPE = types.Type.forSchema({\n name: \"Header\",\n type: \"record\",\n fields: [\n { name: \"magic\", type: { type: \"fixed\", name: \"Magic\", size: 4 } },\n { name: \"meta\", type: MAP_BYTES_TYPE },\n { name: \"sync\", type: { type: \"fixed\", name: \"Sync\", size: 16 } }\n ]\n }, OPTS);\n var BLOCK_TYPE = types.Type.forSchema({\n name: \"Block\",\n type: \"record\",\n fields: [\n { name: \"count\", type: \"long\" },\n { name: \"data\", type: \"bytes\" },\n { name: \"sync\", type: \"Sync\" }\n ]\n }, OPTS);\n var MAGIC_BYTES = utils.bufferFrom(\"Obj\u0001\");\n var f2 = util.format;\n var Tap = utils.Tap;\n function RawDecoder(schema, opts) {\n opts = opts || {};\n var noDecode = !!opts.noDecode;\n stream.Duplex.call(this, {\n readableObjectMode: !noDecode,\n allowHalfOpen: false\n });\n this._type = types.Type.forSchema(schema);\n this._tap = new Tap(utils.newBuffer(0));\n this._writeCb = null;\n this._needPush = false;\n this._readValue = createReader(noDecode, this._type);\n this._finished = false;\n this.on(\"finish\", function() {\n this._finished = true;\n this._read();\n });\n }\n util.inherits(RawDecoder, stream.Duplex);\n RawDecoder.prototype._write = function(chunk, encoding, cb) {\n this._writeCb = cb;\n var tap = this._tap;\n tap.buf = Buffer2.concat([tap.buf.slice(tap.pos), chunk]);\n tap.pos = 0;\n if (this._needPush) {\n this._needPush = false;\n this._read();\n }\n };\n RawDecoder.prototype._read = function() {\n this._needPush = false;\n var tap = this._tap;\n var pos = tap.pos;\n var val = this._readValue(tap);\n if (tap.isValid()) {\n this.push(val);\n } else if (!this._finished) {\n tap.pos = pos;\n this._needPush = true;\n if (this._writeCb) {\n this._writeCb();\n }\n } else {\n this.push(null);\n }\n };\n function BlockDecoder(opts) {\n opts = opts || {};\n var noDecode = !!opts.noDecode;\n stream.Duplex.call(this, {\n allowHalfOpen: true,\n // For async decompressors.\n readableObjectMode: !noDecode\n });\n this._rType = opts.readerSchema !== void 0 ? types.Type.forSchema(opts.readerSchema) : void 0;\n this._wType = null;\n this._codecs = opts.codecs;\n this._codec = void 0;\n this._parseHook = opts.parseHook;\n this._tap = new Tap(utils.newBuffer(0));\n this._blockTap = new Tap(utils.newBuffer(0));\n this._syncMarker = null;\n this._readValue = null;\n this._noDecode = noDecode;\n this._queue = new utils.OrderedQueue();\n this._decompress = null;\n this._index = 0;\n this._remaining = void 0;\n this._needPush = false;\n this._finished = false;\n this.on(\"finish\", function() {\n this._finished = true;\n if (this._needPush) {\n this._read();\n }\n });\n }\n util.inherits(BlockDecoder, stream.Duplex);\n BlockDecoder.defaultCodecs = function() {\n return {\n \"null\": function(buf, cb) {\n cb(null, buf);\n },\n \"deflate\": zlib.inflateRaw\n };\n };\n BlockDecoder.getDefaultCodecs = BlockDecoder.defaultCodecs;\n BlockDecoder.prototype._decodeHeader = function() {\n var tap = this._tap;\n if (tap.buf.length < MAGIC_BYTES.length) {\n return false;\n }\n if (!MAGIC_BYTES.equals(tap.buf.slice(0, MAGIC_BYTES.length))) {\n this.emit(\"error\", new Error(\"invalid magic bytes\"));\n return false;\n }\n var header = HEADER_TYPE._read(tap);\n if (!tap.isValid()) {\n return false;\n }\n this._codec = (header.meta[\"avro.codec\"] || \"null\").toString();\n var codecs = this._codecs || BlockDecoder.getDefaultCodecs();\n this._decompress = codecs[this._codec];\n if (!this._decompress) {\n this.emit(\"error\", new Error(f2(\"unknown codec: %s\", this._codec)));\n return;\n }\n try {\n var schema = JSON.parse(header.meta[\"avro.schema\"].toString());\n if (this._parseHook) {\n schema = this._parseHook(schema);\n }\n this._wType = types.Type.forSchema(schema);\n } catch (err) {\n this.emit(\"error\", err);\n return;\n }\n try {\n this._readValue = createReader(this._noDecode, this._wType, this._rType);\n } catch (err) {\n this.emit(\"error\", err);\n return;\n }\n this._syncMarker = header.sync;\n this.emit(\"metadata\", this._wType, this._codec, header);\n return true;\n };\n BlockDecoder.prototype._write = function(chunk, encoding, cb) {\n var tap = this._tap;\n tap.buf = Buffer2.concat([tap.buf, chunk]);\n tap.pos = 0;\n if (!this._decodeHeader()) {\n process.nextTick(cb);\n return;\n }\n this._write = this._writeChunk;\n this._write(utils.newBuffer(0), encoding, cb);\n };\n BlockDecoder.prototype._writeChunk = function(chunk, encoding, cb) {\n var tap = this._tap;\n tap.buf = Buffer2.concat([tap.buf.slice(tap.pos), chunk]);\n tap.pos = 0;\n var nBlocks = 1;\n var block;\n while (block = tryReadBlock(tap)) {\n if (!this._syncMarker.equals(block.sync)) {\n this.emit(\"error\", new Error(\"invalid sync marker\"));\n return;\n }\n nBlocks++;\n this._decompress(\n block.data,\n this._createBlockCallback(block.data.length, block.count, chunkCb)\n );\n }\n chunkCb();\n function chunkCb() {\n if (!--nBlocks) {\n cb();\n }\n }\n };\n BlockDecoder.prototype._createBlockCallback = function(size, count, cb) {\n var self = this;\n var index = this._index++;\n return function(cause, data) {\n if (cause) {\n var err = new Error(f2(\"%s codec decompression error\", self._codec));\n err.cause = cause;\n self.emit(\"error\", err);\n cb();\n } else {\n self.emit(\"block\", new BlockInfo(count, data.length, size));\n self._queue.push(new BlockData(index, data, cb, count));\n if (self._needPush) {\n self._read();\n }\n }\n };\n };\n BlockDecoder.prototype._read = function() {\n this._needPush = false;\n var tap = this._blockTap;\n if (!this._remaining) {\n var data = this._queue.pop();\n if (!data || !data.count) {\n if (this._finished) {\n this.push(null);\n } else {\n this._needPush = true;\n }\n if (data) {\n data.cb();\n }\n return;\n }\n data.cb();\n this._remaining = data.count;\n tap.buf = data.buf;\n tap.pos = 0;\n }\n this._remaining--;\n var val;\n try {\n val = this._readValue(tap);\n if (!tap.isValid()) {\n throw new Error(\"truncated block\");\n }\n } catch (err) {\n this._remaining = 0;\n this.emit(\"error\", err);\n return;\n }\n this.push(val);\n };\n function RawEncoder(schema, opts) {\n opts = opts || {};\n stream.Transform.call(this, {\n writableObjectMode: true,\n allowHalfOpen: false\n });\n this._type = types.Type.forSchema(schema);\n this._writeValue = function(tap, val) {\n try {\n this._type._write(tap, val);\n } catch (err) {\n this.emit(\"typeError\", err, val, this._type);\n }\n };\n this._tap = new Tap(utils.newBuffer(opts.batchSize || 65536));\n this.on(\"typeError\", function(err) {\n this.emit(\"error\", err);\n });\n }\n util.inherits(RawEncoder, stream.Transform);\n RawEncoder.prototype._transform = function(val, encoding, cb) {\n var tap = this._tap;\n var buf = tap.buf;\n var pos = tap.pos;\n this._writeValue(tap, val);\n if (!tap.isValid()) {\n if (pos) {\n this.push(copyBuffer(tap.buf, 0, pos));\n }\n var len = tap.pos - pos;\n if (len > buf.length) {\n tap.buf = utils.newBuffer(2 * len);\n }\n tap.pos = 0;\n this._writeValue(tap, val);\n }\n cb();\n };\n RawEncoder.prototype._flush = function(cb) {\n var tap = this._tap;\n var pos = tap.pos;\n if (pos) {\n this.push(tap.buf.slice(0, pos));\n }\n cb();\n };\n function BlockEncoder(schema, opts) {\n opts = opts || {};\n stream.Duplex.call(this, {\n allowHalfOpen: true,\n // To support async compressors.\n writableObjectMode: true\n });\n var type;\n if (types.Type.isType(schema)) {\n type = schema;\n schema = void 0;\n } else {\n type = types.Type.forSchema(schema);\n }\n this._schema = schema;\n this._type = type;\n this._writeValue = function(tap, val) {\n try {\n this._type._write(tap, val);\n } catch (err) {\n this.emit(\"typeError\", err, val, this._type);\n return false;\n }\n return true;\n };\n this._blockSize = opts.blockSize || 65536;\n this._tap = new Tap(utils.newBuffer(this._blockSize));\n this._codecs = opts.codecs;\n this._codec = opts.codec || \"null\";\n this._blockCount = 0;\n this._syncMarker = opts.syncMarker || new utils.Lcg().nextBuffer(16);\n this._queue = new utils.OrderedQueue();\n this._pending = 0;\n this._finished = false;\n this._needHeader = false;\n this._needPush = false;\n this._metadata = opts.metadata || {};\n if (!MAP_BYTES_TYPE.isValid(this._metadata)) {\n throw new Error(\"invalid metadata\");\n }\n var codec = this._codec;\n this._compress = (this._codecs || BlockEncoder.getDefaultCodecs())[codec];\n if (!this._compress) {\n throw new Error(f2(\"unsupported codec: %s\", codec));\n }\n if (opts.omitHeader !== void 0) {\n opts.writeHeader = opts.omitHeader ? \"never\" : \"auto\";\n }\n switch (opts.writeHeader) {\n case false:\n case \"never\":\n break;\n case void 0:\n case \"auto\":\n this._needHeader = true;\n break;\n default:\n this._writeHeader();\n }\n this.on(\"finish\", function() {\n this._finished = true;\n if (this._blockCount) {\n this._flushChunk();\n } else if (this._finished && this._needPush) {\n this.push(null);\n }\n });\n this.on(\"typeError\", function(err) {\n this.emit(\"error\", err);\n });\n }\n util.inherits(BlockEncoder, stream.Duplex);\n BlockEncoder.defaultCodecs = function() {\n return {\n \"null\": function(buf, cb) {\n cb(null, buf);\n },\n \"deflate\": zlib.deflateRaw\n };\n };\n BlockEncoder.getDefaultCodecs = BlockEncoder.defaultCodecs;\n BlockEncoder.prototype._writeHeader = function() {\n var schema = JSON.stringify(\n this._schema ? this._schema : this._type.getSchema({ exportAttrs: true })\n );\n var meta = utils.copyOwnProperties(\n this._metadata,\n { \"avro.schema\": utils.bufferFrom(schema), \"avro.codec\": utils.bufferFrom(this._codec) },\n true\n // Overwrite.\n );\n var Header = HEADER_TYPE.getRecordConstructor();\n var header = new Header(MAGIC_BYTES, meta, this._syncMarker);\n this.push(header.toBuffer());\n };\n BlockEncoder.prototype._write = function(val, encoding, cb) {\n if (this._needHeader) {\n this._writeHeader();\n this._needHeader = false;\n }\n var tap = this._tap;\n var pos = tap.pos;\n var flushing = false;\n if (this._writeValue(tap, val)) {\n if (!tap.isValid()) {\n if (pos) {\n this._flushChunk(pos, cb);\n flushing = true;\n }\n var len = tap.pos - pos;\n if (len > this._blockSize) {\n this._blockSize = len * 2;\n }\n tap.buf = utils.newBuffer(this._blockSize);\n tap.pos = 0;\n this._writeValue(tap, val);\n }\n this._blockCount++;\n } else {\n tap.pos = pos;\n }\n if (!flushing) {\n cb();\n }\n };\n BlockEncoder.prototype._flushChunk = function(pos, cb) {\n var tap = this._tap;\n pos = pos || tap.pos;\n this._compress(tap.buf.slice(0, pos), this._createBlockCallback(pos, cb));\n this._blockCount = 0;\n };\n BlockEncoder.prototype._read = function() {\n var self = this;\n var data = this._queue.pop();\n if (!data) {\n if (this._finished && !this._pending) {\n process.nextTick(function() {\n self.push(null);\n });\n } else {\n this._needPush = true;\n }\n return;\n }\n this.push(LONG_TYPE.toBuffer(data.count, true));\n this.push(LONG_TYPE.toBuffer(data.buf.length, true));\n this.push(data.buf);\n this.push(this._syncMarker);\n if (!this._finished) {\n data.cb();\n }\n };\n BlockEncoder.prototype._createBlockCallback = function(size, cb) {\n var self = this;\n var index = this._index++;\n var count = this._blockCount;\n this._pending++;\n return function(cause, data) {\n if (cause) {\n var err = new Error(f2(\"%s codec compression error\", self._codec));\n err.cause = cause;\n self.emit(\"error\", err);\n return;\n }\n self._pending--;\n self.emit(\"block\", new BlockInfo(count, size, data.length));\n self._queue.push(new BlockData(index, data, cb, count));\n if (self._needPush) {\n self._needPush = false;\n self._read();\n }\n };\n };\n function BlockInfo(count, raw, compressed) {\n this.valueCount = count;\n this.rawDataLength = raw;\n this.compressedDataLength = compressed;\n }\n function BlockData(index, buf, cb, count) {\n this.index = index;\n this.buf = buf;\n this.cb = cb;\n this.count = count | 0;\n }\n function tryReadBlock(tap) {\n var pos = tap.pos;\n var block = BLOCK_TYPE._read(tap);\n if (!tap.isValid()) {\n tap.pos = pos;\n return null;\n }\n return block;\n }\n function createReader(noDecode, writerType, readerType) {\n if (noDecode) {\n return /* @__PURE__ */ function(skipper) {\n return function(tap) {\n var pos = tap.pos;\n skipper(tap);\n return tap.buf.slice(pos, tap.pos);\n };\n }(writerType._skip);\n } else if (readerType) {\n var resolver = readerType.createResolver(writerType);\n return function(tap) {\n return resolver._read(tap);\n };\n } else {\n return function(tap) {\n return writerType._read(tap);\n };\n }\n }\n function copyBuffer(buf, pos, len) {\n var copy = utils.newBuffer(len);\n buf.copy(copy, 0, pos, pos + len);\n return copy;\n }\n module.exports = {\n BLOCK_TYPE,\n // For tests.\n HEADER_TYPE,\n // Idem.\n MAGIC_BYTES,\n // Idem.\n streams: {\n BlockDecoder,\n BlockEncoder,\n RawDecoder,\n RawEncoder\n }\n };\n }\n});\n\n// node_modules/avsc/lib/services.js\nvar require_services = __commonJS({\n \"node_modules/avsc/lib/services.js\"(exports, module) {\n \"use strict\";\n var types = require_types();\n var utils = require_utils();\n var buffer = __import_BUFFER;\n var events = __import_EVENTS;\n var stream = __import_STREAM;\n var util = __import_UTIL;\n var Buffer2 = buffer.Buffer;\n var Tap = utils.Tap;\n var Type = types.Type;\n var debug = util.debuglog(\"avsc:services\");\n var f2 = util.format;\n var OPTS = { namespace: \"org.apache.avro.ipc\" };\n var BOOLEAN_TYPE = Type.forSchema(\"boolean\", OPTS);\n var MAP_BYTES_TYPE = Type.forSchema({ type: \"map\", values: \"bytes\" }, OPTS);\n var STRING_TYPE = Type.forSchema(\"string\", OPTS);\n var HANDSHAKE_REQUEST_TYPE = Type.forSchema({\n name: \"HandshakeRequest\",\n type: \"record\",\n fields: [\n { name: \"clientHash\", type: { name: \"MD5\", type: \"fixed\", size: 16 } },\n { name: \"clientProtocol\", type: [\"null\", \"string\"], \"default\": null },\n { name: \"serverHash\", type: \"MD5\" },\n { name: \"meta\", type: [\"null\", MAP_BYTES_TYPE], \"default\": null }\n ]\n }, OPTS);\n var HANDSHAKE_RESPONSE_TYPE = Type.forSchema({\n name: \"HandshakeResponse\",\n type: \"record\",\n fields: [\n {\n name: \"match\",\n type: {\n name: \"HandshakeMatch\",\n type: \"enum\",\n symbols: [\"BOTH\", \"CLIENT\", \"NONE\"]\n }\n },\n { name: \"serverProtocol\", type: [\"null\", \"string\"], \"default\": null },\n { name: \"serverHash\", type: [\"null\", \"MD5\"], \"default\": null },\n { name: \"meta\", type: [\"null\", MAP_BYTES_TYPE], \"default\": null }\n ]\n }, OPTS);\n var PREFIX_LENGTH = 16;\n var PING_MESSAGE = new Message(\n \"\",\n // Empty name (invalid for other \"normal\" messages).\n Type.forSchema({ name: \"PingRequest\", type: \"record\", fields: [] }, OPTS),\n Type.forSchema([\"string\"], OPTS),\n Type.forSchema(\"null\", OPTS)\n );\n function Message(name, reqType, errType, resType, oneWay, doc) {\n this.name = name;\n if (!Type.isType(reqType, \"record\")) {\n throw new Error(\"invalid request type\");\n }\n this.requestType = reqType;\n if (!Type.isType(errType, \"union\") || !Type.isType(errType.getTypes()[0], \"string\")) {\n throw new Error(\"invalid error type\");\n }\n this.errorType = errType;\n if (oneWay) {\n if (!Type.isType(resType, \"null\") || errType.getTypes().length > 1) {\n throw new Error(\"inapplicable one-way parameter\");\n }\n }\n this.responseType = resType;\n this.oneWay = !!oneWay;\n this.doc = doc !== void 0 ? \"\" + doc : void 0;\n Object.freeze(this);\n }\n Message.forSchema = function(name, schema, opts) {\n opts = opts || {};\n if (!utils.isValidName(name)) {\n throw new Error(f2(\"invalid message name: %s\", name));\n }\n if (!Array.isArray(schema.request)) {\n throw new Error(f2(\"invalid message request: %s\", name));\n }\n var recordName = f2(\"%s.%sRequest\", OPTS.namespace, utils.capitalize(name));\n var reqType = Type.forSchema({\n name: recordName,\n type: \"record\",\n namespace: opts.namespace || \"\",\n // Don't leak request namespace.\n fields: schema.request\n }, opts);\n delete opts.registry[recordName];\n if (!schema.response) {\n throw new Error(f2(\"invalid message response: %s\", name));\n }\n var resType = Type.forSchema(schema.response, opts);\n if (schema.errors !== void 0 && !Array.isArray(schema.errors)) {\n throw new Error(f2(\"invalid message errors: %s\", name));\n }\n var errType = Type.forSchema([\"string\"].concat(schema.errors || []), opts);\n var oneWay = !!schema[\"one-way\"];\n return new Message(name, reqType, errType, resType, oneWay, schema.doc);\n };\n Message.prototype.schema = Type.prototype.getSchema;\n Message.prototype._attrs = function(opts) {\n var reqSchema = this.requestType._attrs(opts);\n var schema = {\n request: reqSchema.fields,\n response: this.responseType._attrs(opts)\n };\n var msgDoc = this.doc;\n if (msgDoc !== void 0) {\n schema.doc = msgDoc;\n }\n var errSchema = this.errorType._attrs(opts);\n if (errSchema.length > 1) {\n schema.errors = errSchema.slice(1);\n }\n if (this.oneWay) {\n schema[\"one-way\"] = true;\n }\n return schema;\n };\n utils.addDeprecatedGetters(\n Message,\n [\"name\", \"errorType\", \"requestType\", \"responseType\"]\n );\n Message.prototype.isOneWay = util.deprecate(\n function() {\n return this.oneWay;\n },\n \"use `.oneWay` directly instead of `.isOneWay()`\"\n );\n function Service(name, messages, types2, ptcl, server) {\n if (typeof name != \"string\") {\n return Service.forProtocol(name, messages);\n }\n this.name = name;\n this._messagesByName = messages || {};\n this.messages = Object.freeze(utils.objectValues(this._messagesByName));\n this._typesByName = types2 || {};\n this.types = Object.freeze(utils.objectValues(this._typesByName));\n this.protocol = ptcl;\n this._hashStr = utils.getHash(JSON.stringify(ptcl)).toString(\"binary\");\n this.doc = ptcl.doc ? \"\" + ptcl.doc : void 0;\n this._server = server || this.createServer({ silent: true });\n Object.freeze(this);\n }\n Service.Client = Client;\n Service.Server = Server;\n Service.compatible = function(clientSvc, serverSvc) {\n try {\n createReaders(clientSvc, serverSvc);\n } catch (err) {\n return false;\n }\n return true;\n };\n Service.forProtocol = function(ptcl, opts) {\n opts = opts || {};\n var name = ptcl.protocol;\n if (!name) {\n throw new Error(\"missing protocol name\");\n }\n if (ptcl.namespace !== void 0) {\n opts.namespace = ptcl.namespace;\n } else {\n var match = /^(.*)\\.[^.]+$/.exec(name);\n if (match) {\n opts.namespace = match[1];\n }\n }\n name = utils.qualify(name, opts.namespace);\n if (ptcl.types) {\n ptcl.types.forEach(function(obj) {\n Type.forSchema(obj, opts);\n });\n }\n var msgs;\n if (ptcl.messages) {\n msgs = {};\n Object.keys(ptcl.messages).forEach(function(key) {\n msgs[key] = Message.forSchema(key, ptcl.messages[key], opts);\n });\n }\n return new Service(name, msgs, opts.registry, ptcl);\n };\n Service.isService = function(any) {\n return !!any && any.hasOwnProperty(\"_hashStr\");\n };\n Service.prototype.createClient = function(opts) {\n var client = new Client(this, opts);\n process.nextTick(function() {\n if (opts && opts.server) {\n var obj = { objectMode: true };\n var pts = [new stream.PassThrough(obj), new stream.PassThrough(obj)];\n opts.server.createChannel({ readable: pts[0], writable: pts[1] }, obj);\n client.createChannel({ readable: pts[1], writable: pts[0] }, obj);\n } else if (opts && opts.transport) {\n client.createChannel(opts.transport);\n }\n });\n return client;\n };\n Service.prototype.createServer = function(opts) {\n return new Server(this, opts);\n };\n Object.defineProperty(Service.prototype, \"hash\", {\n enumerable: true,\n get: function() {\n return utils.bufferFrom(this._hashStr, \"binary\");\n }\n });\n Service.prototype.message = function(name) {\n return this._messagesByName[name];\n };\n Service.prototype.type = function(name) {\n return this._typesByName[name];\n };\n Service.prototype.inspect = function() {\n return f2(\"\", this.name);\n };\n utils.addDeprecatedGetters(\n Service,\n [\"message\", \"messages\", \"name\", \"type\", \"types\"]\n );\n Service.prototype.createEmitter = util.deprecate(\n function(transport, opts) {\n opts = opts || {};\n var client = this.createClient({\n cache: opts.cache,\n buffering: false,\n strictTypes: opts.strictErrors,\n timeout: opts.timeout\n });\n var channel = client.createChannel(transport, opts);\n forwardErrors(client, channel);\n return channel;\n },\n \"use `.createClient()` instead of `.createEmitter()`\"\n );\n Service.prototype.createListener = util.deprecate(\n function(transport, opts) {\n if (opts && opts.strictErrors) {\n throw new Error(\"use `.createServer()` to support strict errors\");\n }\n return this._server.createChannel(transport, opts);\n },\n \"use `.createServer().createChannel()` instead of `.createListener()`\"\n );\n Service.prototype.emit = util.deprecate(\n function(name, req, channel, cb) {\n if (!channel || !this.equals(channel.client._svc$)) {\n throw new Error(\"invalid emitter\");\n }\n var client = channel.client;\n Client.prototype.emitMessage.call(client, name, req, cb && cb.bind(this));\n return channel.getPending();\n },\n \"create a client via `.createClient()` to emit messages instead of `.emit()`\"\n );\n Service.prototype.equals = util.deprecate(\n function(any) {\n return Service.isService(any) && this.getFingerprint().equals(any.getFingerprint());\n },\n \"equality testing is deprecated, compare the `.protocol`s instead\"\n );\n Service.prototype.getFingerprint = util.deprecate(\n function(algorithm) {\n return utils.getHash(JSON.stringify(this.protocol), algorithm);\n },\n \"use `.hash` instead of `.getFingerprint()`\"\n );\n Service.prototype.getSchema = util.deprecate(\n Type.prototype.getSchema,\n \"use `.protocol` instead of `.getSchema()`\"\n );\n Service.prototype.on = util.deprecate(\n function(name, handler) {\n var self = this;\n this._server.onMessage(name, function(req, cb) {\n return handler.call(self, req, this.channel, cb);\n });\n return this;\n },\n \"use `.createServer().onMessage()` instead of `.on()`\"\n );\n Service.prototype.subprotocol = util.deprecate(\n function() {\n var parent = this._server;\n var opts = { strictTypes: parent._strict, cache: parent._cache };\n var server = new Server(parent.service, opts);\n server._handlers = Object.create(parent._handlers);\n return new Service(\n this.name,\n this._messagesByName,\n this._typesByName,\n this.protocol,\n server\n );\n },\n \"`.subprotocol()` will be removed in 5.1\"\n );\n Service.prototype._attrs = function(opts) {\n var ptcl = { protocol: this.name };\n var types2 = [];\n this.types.forEach(function(t) {\n if (t.getName() === void 0) {\n return;\n }\n var typeSchema = t._attrs(opts);\n if (typeof typeSchema != \"string\") {\n types2.push(typeSchema);\n }\n });\n if (types2.length) {\n ptcl.types = types2;\n }\n var msgNames = Object.keys(this._messagesByName);\n if (msgNames.length) {\n ptcl.messages = {};\n msgNames.forEach(function(name) {\n ptcl.messages[name] = this._messagesByName[name]._attrs(opts);\n }, this);\n }\n if (opts && opts.exportAttrs && this.doc !== void 0) {\n ptcl.doc = this.doc;\n }\n return ptcl;\n };\n function discoverProtocol(transport, opts, cb) {\n if (cb === void 0 && typeof opts == \"function\") {\n cb = opts;\n opts = void 0;\n }\n var svc = new Service({ protocol: \"Empty\" }, OPTS);\n var ptclStr;\n svc.createClient({ timeout: opts && opts.timeout }).createChannel(transport, {\n scope: opts && opts.scope,\n endWritable: typeof transport == \"function\"\n // Stateless transports only.\n }).once(\"handshake\", function(hreq, hres) {\n ptclStr = hres.serverProtocol;\n this.destroy(true);\n }).once(\"eot\", function(pending, err) {\n if (err && !/interrupted/.test(err)) {\n cb(err);\n } else {\n cb(null, JSON.parse(ptclStr));\n }\n });\n }\n function Client(svc, opts) {\n opts = opts || {};\n events.EventEmitter.call(this);\n this._svc$ = svc;\n this._channels$ = [];\n this._fns$ = [];\n this._buffering$ = !!opts.buffering;\n this._cache$ = opts.cache || {};\n this._policy$ = opts.channelPolicy;\n this._strict$ = !!opts.strictTypes;\n this._timeout$ = utils.getOption(opts, \"timeout\", 1e4);\n if (opts.remoteProtocols) {\n insertRemoteProtocols(this._cache$, opts.remoteProtocols, svc, true);\n }\n this._svc$.messages.forEach(function(msg) {\n this[msg.name] = this._createMessageHandler$(msg);\n }, this);\n }\n util.inherits(Client, events.EventEmitter);\n Client.prototype.activeChannels = function() {\n return this._channels$.slice();\n };\n Client.prototype.createChannel = function(transport, opts) {\n var objectMode = opts && opts.objectMode;\n var channel;\n if (typeof transport == \"function\") {\n var writableFactory;\n if (objectMode) {\n writableFactory = transport;\n } else {\n writableFactory = function(cb) {\n var encoder2 = new FrameEncoder();\n var writable2 = transport(function(err, readable2) {\n if (err) {\n cb(err);\n return;\n }\n var decoder2 = new FrameDecoder().once(\"error\", function(err2) {\n channel.destroy(err2);\n });\n cb(null, readable2.pipe(decoder2));\n });\n if (writable2) {\n encoder2.pipe(writable2);\n return encoder2;\n }\n };\n }\n channel = new StatelessClientChannel(this, writableFactory, opts);\n } else {\n var readable, writable;\n if (isStream(transport)) {\n readable = writable = transport;\n } else {\n readable = transport.readable;\n writable = transport.writable;\n }\n if (!objectMode) {\n var decoder = new NettyDecoder();\n readable = readable.pipe(decoder);\n var encoder = new NettyEncoder();\n encoder.pipe(writable);\n writable = encoder;\n }\n channel = new StatefulClientChannel(this, readable, writable, opts);\n if (!objectMode) {\n channel.once(\"eot\", function() {\n readable.unpipe(decoder);\n encoder.unpipe(writable);\n });\n decoder.once(\"error\", function(err) {\n channel.destroy(err);\n });\n }\n }\n var channels = this._channels$;\n channels.push(channel);\n channel.once(\"_drain\", function() {\n channels.splice(channels.indexOf(this), 1);\n });\n this._buffering$ = false;\n this.emit(\"channel\", channel);\n return channel;\n };\n Client.prototype.destroyChannels = function(opts) {\n this._channels$.forEach(function(channel) {\n channel.destroy(opts && opts.noWait);\n });\n };\n Client.prototype.emitMessage = function(name, req, opts, cb) {\n var msg = getExistingMessage(this._svc$, name);\n var wreq = new WrappedRequest(msg, {}, req);\n this._emitMessage$(wreq, opts, cb);\n };\n Client.prototype.remoteProtocols = function() {\n return getRemoteProtocols(this._cache$, true);\n };\n Object.defineProperty(Client.prototype, \"service\", {\n enumerable: true,\n get: function() {\n return this._svc$;\n }\n });\n Client.prototype.use = function() {\n var i, l, fn;\n for (i = 0, l = arguments.length; i < l; i++) {\n fn = arguments[i];\n this._fns$.push(fn.length < 3 ? fn(this) : fn);\n }\n return this;\n };\n Client.prototype._emitMessage$ = function(wreq, opts, cb) {\n if (!cb && typeof opts === \"function\") {\n cb = opts;\n opts = void 0;\n }\n var self = this;\n var channels = this._channels$;\n var numChannels = channels.length;\n if (!numChannels) {\n if (this._buffering$) {\n debug(\"no active client channels, buffering call\");\n this.once(\"channel\", function() {\n this._emitMessage$(wreq, opts, cb);\n });\n } else {\n var err = new Error(\"no active channels\");\n process.nextTick(function() {\n if (cb) {\n cb.call(new CallContext(wreq._msg), err);\n } else {\n self.emit(\"error\", err);\n }\n });\n }\n return;\n }\n opts = opts || {};\n if (opts.timeout === void 0) {\n opts.timeout = this._timeout$;\n }\n var channel;\n if (numChannels === 1) {\n channel = channels[0];\n } else if (this._policy$) {\n channel = this._policy$(this._channels$.slice());\n if (!channel) {\n debug(\"policy returned no channel, skipping call\");\n return;\n }\n } else {\n channel = channels[Math.floor(Math.random() * numChannels)];\n }\n channel._emit(wreq, opts, function(err2, wres) {\n var ctx = this;\n var errType = ctx.message.errorType;\n if (err2) {\n if (self._strict$) {\n err2 = errType.clone(err2.message, { wrapUnions: true });\n }\n done(err2);\n return;\n }\n if (!wres) {\n done();\n return;\n }\n err2 = wres.error;\n if (!self._strict$) {\n if (err2 === void 0) {\n err2 = null;\n } else {\n if (Type.isType(errType, \"union:unwrapped\")) {\n if (typeof err2 == \"string\") {\n err2 = new Error(err2);\n }\n } else if (err2 && err2.string && typeof err2.string == \"string\") {\n err2 = new Error(err2.string);\n }\n }\n }\n done(err2, wres.response);\n function done(err3, res) {\n if (cb) {\n cb.call(ctx, err3, res);\n } else if (err3) {\n self.emit(\"error\", err3);\n }\n }\n });\n };\n Client.prototype._createMessageHandler$ = function(msg) {\n var fields = msg.requestType.getFields();\n var names = fields.map(function(f3) {\n return f3.getName();\n });\n var body = \"return function \" + msg.name + \"(\";\n if (names.length) {\n body += names.join(\", \") + \", \";\n }\n body += \"opts, cb) {\\n\";\n body += \" var req = {\";\n body += names.map(function(n) {\n return n + \": \" + n;\n }).join(\", \");\n body += \"};\\n\";\n body += \" return this.emitMessage('\" + msg.name + \"', req, opts, cb);\\n\";\n body += \"};\";\n return new Function(body)();\n };\n function Server(svc, opts) {\n opts = opts || {};\n events.EventEmitter.call(this);\n this.service = svc;\n this._handlers = {};\n this._fns = [];\n this._channels = {};\n this._nextChannelId = 1;\n this._cache = opts.cache || {};\n this._defaultHandler = opts.defaultHandler;\n this._sysErrFormatter = opts.systemErrorFormatter;\n this._silent = !!opts.silent;\n this._strict = !!opts.strictTypes;\n if (opts.remoteProtocols) {\n insertRemoteProtocols(this._cache, opts.remoteProtocols, svc, false);\n }\n svc.messages.forEach(function(msg) {\n var name = msg.name;\n if (!opts.noCapitalize) {\n name = utils.capitalize(name);\n }\n this[\"on\" + name] = this._createMessageHandler(msg);\n }, this);\n }\n util.inherits(Server, events.EventEmitter);\n Server.prototype.activeChannels = function() {\n return utils.objectValues(this._channels);\n };\n Server.prototype.createChannel = function(transport, opts) {\n var objectMode = opts && opts.objectMode;\n var channel;\n if (typeof transport == \"function\") {\n var readableFactory;\n if (objectMode) {\n readableFactory = transport;\n } else {\n readableFactory = function(cb) {\n var decoder2 = new FrameDecoder().once(\"error\", function(err) {\n channel.destroy(err);\n });\n return transport(function(err, writable2) {\n if (err) {\n cb(err);\n return;\n }\n var encoder2 = new FrameEncoder();\n encoder2.pipe(writable2);\n cb(null, encoder2);\n }).pipe(decoder2);\n };\n }\n channel = new StatelessServerChannel(this, readableFactory, opts);\n } else {\n var readable, writable;\n if (isStream(transport)) {\n readable = writable = transport;\n } else {\n readable = transport.readable;\n writable = transport.writable;\n }\n if (!objectMode) {\n var decoder = new NettyDecoder();\n readable = readable.pipe(decoder);\n var encoder = new NettyEncoder();\n encoder.pipe(writable);\n writable = encoder;\n }\n channel = new StatefulServerChannel(this, readable, writable, opts);\n if (!objectMode) {\n channel.once(\"eot\", function() {\n readable.unpipe(decoder);\n encoder.unpipe(writable);\n });\n decoder.once(\"error\", function(err) {\n channel.destroy(err);\n });\n }\n }\n if (!this.listeners(\"error\").length) {\n this.on(\"error\", this._onError);\n }\n var channelId = this._nextChannelId++;\n var channels = this._channels;\n channels[channelId] = channel.once(\"eot\", function() {\n delete channels[channelId];\n });\n this.emit(\"channel\", channel);\n return channel;\n };\n Server.prototype.onMessage = function(name, handler) {\n getExistingMessage(this.service, name);\n this._handlers[name] = handler;\n return this;\n };\n Server.prototype.remoteProtocols = function() {\n return getRemoteProtocols(this._cache, false);\n };\n Server.prototype.use = function() {\n var i, l, fn;\n for (i = 0, l = arguments.length; i < l; i++) {\n fn = arguments[i];\n this._fns.push(fn.length < 3 ? fn(this) : fn);\n }\n return this;\n };\n Server.prototype._createMessageHandler = function(msg) {\n var name = msg.name;\n var fields = msg.requestType.fields;\n var numArgs = fields.length;\n var args = fields.length ? \", \" + fields.map(function(f3) {\n return \"req.\" + f3.name;\n }).join(\", \") : \"\";\n var body = \"return function (handler) {\\n\";\n body += \" if (handler.length > \" + numArgs + \") {\\n\";\n body += \" return this.onMessage('\" + name + \"', function (req, cb) {\\n\";\n body += \" return handler.call(this\" + args + \", cb);\\n\";\n body += \" });\\n\";\n body += \" } else {\\n\";\n body += \" return this.onMessage('\" + name + \"', function (req) {\\n\";\n body += \" return handler.call(this\" + args + \");\\n\";\n body += \" });\\n\";\n body += \" }\\n\";\n body += \"};\\n\";\n return new Function(body)();\n };\n Server.prototype._onError = function(err) {\n if (!this._silent && err.rpcCode !== \"UNKNOWN_PROTOCOL\") {\n console.error();\n if (err.rpcCode) {\n console.error(err.rpcCode);\n console.error(err.cause);\n } else {\n console.error(\"INTERNAL_SERVER_ERROR\");\n console.error(err);\n }\n }\n };\n function ClientChannel(client, opts) {\n opts = opts || {};\n events.EventEmitter.call(this);\n this.client = client;\n this.timeout = utils.getOption(opts, \"timeout\", client._timeout$);\n this._endWritable = !!utils.getOption(opts, \"endWritable\", true);\n this._prefix = normalizedPrefix(opts.scope);\n var cache = client._cache$;\n var clientSvc = client._svc$;\n var hash = opts.serverHash;\n if (!hash) {\n hash = clientSvc.hash;\n }\n var adapter = cache[hash];\n if (!adapter) {\n hash = clientSvc.hash;\n adapter = cache[hash] = new Adapter(clientSvc, clientSvc, hash);\n }\n this._adapter = adapter;\n this._registry = new Registry(this, PREFIX_LENGTH);\n this.pending = 0;\n this.destroyed = false;\n this.draining = false;\n this.once(\"_eot\", function(pending, err) {\n debug(\"client channel EOT\");\n this.destroyed = true;\n this.emit(\"eot\", pending, err);\n });\n }\n util.inherits(ClientChannel, events.EventEmitter);\n ClientChannel.prototype.destroy = function(noWait) {\n debug(\"destroying client channel\");\n if (!this.draining) {\n this.draining = true;\n this.emit(\"_drain\");\n }\n var registry = this._registry;\n var pending = this.pending;\n if (noWait) {\n registry.clear();\n }\n if (noWait || !pending) {\n if (isError(noWait)) {\n debug(\"fatal client channel error: %s\", noWait);\n this.emit(\"_eot\", pending, noWait);\n } else {\n this.emit(\"_eot\", pending);\n }\n } else {\n debug(\"client channel entering drain mode (%s pending)\", pending);\n }\n };\n ClientChannel.prototype.ping = function(timeout, cb) {\n if (!cb && typeof timeout == \"function\") {\n cb = timeout;\n timeout = void 0;\n }\n var self = this;\n var wreq = new WrappedRequest(PING_MESSAGE);\n this._emit(wreq, { timeout }, function(err) {\n if (cb) {\n cb.call(self, err);\n } else if (err) {\n self.destroy(err);\n }\n });\n };\n ClientChannel.prototype._createHandshakeRequest = function(adapter, noSvc) {\n var svc = this.client._svc$;\n return {\n clientHash: svc.hash,\n clientProtocol: noSvc ? null : JSON.stringify(svc.protocol),\n serverHash: adapter._hash\n };\n };\n ClientChannel.prototype._emit = function(wreq, opts, cb) {\n var msg = wreq._msg;\n var wres = msg.oneWay ? void 0 : new WrappedResponse(msg, {});\n var ctx = new CallContext(msg, this);\n var self = this;\n this.pending++;\n process.nextTick(function() {\n if (!msg.name) {\n onTransition(wreq, wres, onCompletion);\n } else {\n self.emit(\"outgoingCall\", ctx, opts);\n var fns = self.client._fns$;\n debug(\"starting client middleware chain (%s middleware)\", fns.length);\n chainMiddleware({\n fns,\n ctx,\n wreq,\n wres,\n onTransition,\n onCompletion,\n onError\n });\n }\n });\n function onTransition(wreq2, wres2, prev) {\n var err, reqBuf;\n if (self.destroyed) {\n err = new Error(\"channel destroyed\");\n } else {\n try {\n reqBuf = wreq2.toBuffer();\n } catch (cause) {\n err = serializationError(\n f2(\"invalid %j request\", msg.name),\n wreq2,\n [\n { name: \"headers\", type: MAP_BYTES_TYPE },\n { name: \"request\", type: msg.requestType }\n ]\n );\n }\n }\n if (err) {\n prev(err);\n return;\n }\n var timeout = opts && opts.timeout !== void 0 ? opts.timeout : self.timeout;\n var id = self._registry.add(timeout, function(err2, resBuf, adapter) {\n if (!err2 && !msg.oneWay) {\n try {\n adapter._decodeResponse(resBuf, wres2, msg);\n } catch (cause) {\n err2 = cause;\n }\n }\n prev(err2);\n });\n id |= self._prefix;\n debug(\"sending message %s\", id);\n self._send(id, reqBuf, !!msg && msg.oneWay);\n }\n function onCompletion(err) {\n self.pending--;\n cb.call(ctx, err, wres);\n if (self.draining && !self.destroyed && !self.pending) {\n self.destroy();\n }\n }\n function onError(err) {\n self.client.emit(\"error\", err, self);\n }\n };\n ClientChannel.prototype._getAdapter = function(hres) {\n var hash = hres.serverHash;\n var cache = this.client._cache$;\n var adapter = cache[hash];\n if (adapter) {\n return adapter;\n }\n var ptcl = JSON.parse(hres.serverProtocol);\n var serverSvc = Service.forProtocol(ptcl);\n adapter = new Adapter(this.client._svc$, serverSvc, hash, true);\n return cache[hash] = adapter;\n };\n ClientChannel.prototype._matchesPrefix = function(id) {\n return matchesPrefix(id, this._prefix);\n };\n ClientChannel.prototype._send = utils.abstractFunction;\n utils.addDeprecatedGetters(ClientChannel, [\"pending\", \"timeout\"]);\n ClientChannel.prototype.getCache = util.deprecate(\n function() {\n return this.client._cache$;\n },\n \"use `.remoteProtocols()` instead of `.getCache()`\"\n );\n ClientChannel.prototype.getProtocol = util.deprecate(\n function() {\n return this.client._svc$;\n },\n \"use `.service` instead or `.getProtocol()`\"\n );\n ClientChannel.prototype.isDestroyed = util.deprecate(\n function() {\n return this.destroyed;\n },\n \"use `.destroyed` instead of `.isDestroyed`\"\n );\n function StatelessClientChannel(client, writableFactory, opts) {\n ClientChannel.call(this, client, opts);\n this._writableFactory = writableFactory;\n if (!opts || !opts.noPing) {\n debug(\"emitting ping request\");\n this.ping();\n }\n }\n util.inherits(StatelessClientChannel, ClientChannel);\n StatelessClientChannel.prototype._send = function(id, reqBuf) {\n var cb = this._registry.get(id);\n var adapter = this._adapter;\n var self = this;\n process.nextTick(emit);\n return true;\n function emit(retry) {\n if (self.destroyed) {\n return;\n }\n var hreq = self._createHandshakeRequest(adapter, !retry);\n var writable = self._writableFactory.call(self, function(err, readable) {\n if (err) {\n cb(err);\n return;\n }\n readable.on(\"data\", function(obj) {\n debug(\"received response %s\", obj.id);\n var buf = Buffer2.concat(obj.payload);\n try {\n var parts = readHead(HANDSHAKE_RESPONSE_TYPE, buf);\n var hres = parts.head;\n if (hres.serverHash) {\n adapter = self._getAdapter(hres);\n }\n } catch (cause) {\n cb(cause);\n return;\n }\n var match = hres.match;\n debug(\"handshake match: %s\", match);\n self.emit(\"handshake\", hreq, hres);\n if (match === \"NONE\") {\n process.nextTick(function() {\n emit(true);\n });\n } else {\n self._adapter = adapter;\n cb(null, parts.tail, adapter);\n }\n });\n });\n if (!writable) {\n cb(new Error(\"invalid writable stream\"));\n return;\n }\n writable.write({\n id,\n payload: [HANDSHAKE_REQUEST_TYPE.toBuffer(hreq), reqBuf]\n });\n if (self._endWritable) {\n writable.end();\n }\n }\n };\n function StatefulClientChannel(client, readable, writable, opts) {\n ClientChannel.call(this, client, opts);\n this._readable = readable;\n this._writable = writable;\n this._connected = !!(opts && opts.noPing);\n this._readable.on(\"end\", onEnd);\n this._writable.on(\"finish\", onFinish);\n var self = this;\n var timer = null;\n this.once(\"eot\", function() {\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n if (!self._connected) {\n self.emit(\"_ready\");\n }\n this._writable.removeListener(\"finish\", onFinish);\n if (this._endWritable) {\n debug(\"ending transport\");\n this._writable.end();\n }\n this._readable.removeListener(\"data\", onPing).removeListener(\"data\", onMessage).removeListener(\"end\", onEnd);\n });\n var hreq;\n if (this._connected) {\n this._readable.on(\"data\", onMessage);\n } else {\n this._readable.on(\"data\", onPing);\n process.nextTick(ping);\n if (self.timeout) {\n timer = setTimeout(function() {\n self.destroy(new Error(\"timeout\"));\n }, self.timeout);\n }\n }\n function ping(retry) {\n if (self.destroyed) {\n return;\n }\n hreq = self._createHandshakeRequest(self._adapter, !retry);\n var payload = [\n HANDSHAKE_REQUEST_TYPE.toBuffer(hreq),\n utils.bufferFrom([0, 0])\n // No header, no data (empty message name).\n ];\n self._writable.write({ id: self._prefix, payload });\n }\n function onPing(obj) {\n if (!self._matchesPrefix(obj.id)) {\n debug(\"discarding unscoped response %s (still connecting)\", obj.id);\n return;\n }\n var buf = Buffer2.concat(obj.payload);\n try {\n var hres = readHead(HANDSHAKE_RESPONSE_TYPE, buf).head;\n if (hres.serverHash) {\n self._adapter = self._getAdapter(hres);\n }\n } catch (cause) {\n self.destroy(cause);\n return;\n }\n var match = hres.match;\n debug(\"handshake match: %s\", match);\n self.emit(\"handshake\", hreq, hres);\n if (match === \"NONE\") {\n process.nextTick(function() {\n ping(true);\n });\n } else {\n debug(\"successfully connected\");\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n self._readable.removeListener(\"data\", onPing).on(\"data\", onMessage);\n self._connected = true;\n self.emit(\"_ready\");\n hreq = null;\n }\n }\n function onMessage(obj) {\n var id = obj.id;\n if (!self._matchesPrefix(id)) {\n debug(\"discarding unscoped message %s\", id);\n return;\n }\n var cb = self._registry.get(id);\n if (cb) {\n process.nextTick(function() {\n debug(\"received message %s\", id);\n cb(null, Buffer2.concat(obj.payload), self._adapter);\n });\n }\n }\n function onEnd() {\n self.destroy(true);\n }\n function onFinish() {\n self.destroy();\n }\n }\n util.inherits(StatefulClientChannel, ClientChannel);\n StatefulClientChannel.prototype._emit = function() {\n if (this._connected || this.draining) {\n ClientChannel.prototype._emit.apply(this, arguments);\n } else {\n debug(\"queuing request\");\n var args = [];\n var i, l;\n for (i = 0, l = arguments.length; i < l; i++) {\n args.push(arguments[i]);\n }\n this.once(\"_ready\", function() {\n this._emit.apply(this, args);\n });\n }\n };\n StatefulClientChannel.prototype._send = function(id, reqBuf, oneWay) {\n if (oneWay) {\n var self = this;\n process.nextTick(function() {\n self._registry.get(id)(null, utils.bufferFrom([0, 0, 0]), self._adapter);\n });\n }\n return this._writable.write({ id, payload: [reqBuf] });\n };\n function ServerChannel(server, opts) {\n opts = opts || {};\n events.EventEmitter.call(this);\n this.server = server;\n this._endWritable = !!utils.getOption(opts, \"endWritable\", true);\n this._prefix = normalizedPrefix(opts.scope);\n var cache = server._cache;\n var svc = server.service;\n var hash = svc.hash;\n if (!cache[hash]) {\n cache[hash] = new Adapter(svc, svc, hash);\n }\n this._adapter = null;\n this.destroyed = false;\n this.draining = false;\n this.pending = 0;\n this.once(\"_eot\", function(pending, err) {\n debug(\"server channel EOT\");\n this.emit(\"eot\", pending, err);\n });\n }\n util.inherits(ServerChannel, events.EventEmitter);\n ServerChannel.prototype.destroy = function(noWait) {\n if (!this.draining) {\n this.draining = true;\n this.emit(\"_drain\");\n }\n if (noWait || !this.pending) {\n this.destroyed = true;\n if (isError(noWait)) {\n debug(\"fatal server channel error: %s\", noWait);\n this.emit(\"_eot\", this.pending, noWait);\n } else {\n this.emit(\"_eot\", this.pending);\n }\n }\n };\n ServerChannel.prototype._createHandshakeResponse = function(err, hreq) {\n var svc = this.server.service;\n var buf = svc.hash;\n var serverMatch = hreq && hreq.serverHash.equals(buf);\n return {\n match: err ? \"NONE\" : serverMatch ? \"BOTH\" : \"CLIENT\",\n serverProtocol: serverMatch ? null : JSON.stringify(svc.protocol),\n serverHash: serverMatch ? null : buf\n };\n };\n ServerChannel.prototype._getAdapter = function(hreq) {\n var hash = hreq.clientHash;\n var adapter = this.server._cache[hash];\n if (adapter) {\n return adapter;\n }\n if (!hreq.clientProtocol) {\n throw toRpcError(\"UNKNOWN_PROTOCOL\");\n }\n var ptcl = JSON.parse(hreq.clientProtocol);\n var clientSvc = Service.forProtocol(ptcl);\n adapter = new Adapter(clientSvc, this.server.service, hash, true);\n return this.server._cache[hash] = adapter;\n };\n ServerChannel.prototype._matchesPrefix = function(id) {\n return matchesPrefix(id, this._prefix);\n };\n ServerChannel.prototype._receive = function(reqBuf, adapter, cb) {\n var self = this;\n var wreq;\n try {\n wreq = adapter._decodeRequest(reqBuf);\n } catch (cause) {\n cb(self._encodeSystemError(toRpcError(\"INVALID_REQUEST\", cause)));\n return;\n }\n var msg = wreq._msg;\n var wres = new WrappedResponse(msg, {});\n if (!msg.name) {\n wres.response = null;\n cb(wres.toBuffer(), false);\n return;\n }\n var ctx = new CallContext(msg, this);\n self.emit(\"incomingCall\", ctx);\n var fns = this.server._fns;\n debug(\"starting server middleware chain (%s middleware)\", fns.length);\n self.pending++;\n chainMiddleware({\n fns,\n ctx,\n wreq,\n wres,\n onTransition,\n onCompletion,\n onError\n });\n function onTransition(wreq2, wres2, prev) {\n var handler = self.server._handlers[msg.name];\n if (!handler) {\n var defaultHandler = self.server._defaultHandler;\n if (defaultHandler) {\n defaultHandler.call(ctx, wreq2, wres2, prev);\n } else {\n var cause = new Error(f2(\"no handler for %s\", msg.name));\n prev(toRpcError(\"NOT_IMPLEMENTED\", cause));\n }\n } else {\n var pending = !msg.oneWay;\n try {\n if (pending) {\n handler.call(ctx, wreq2.request, function(err, res) {\n pending = false;\n wres2.error = err;\n wres2.response = res;\n prev();\n });\n } else {\n handler.call(ctx, wreq2.request);\n prev();\n }\n } catch (err) {\n if (pending) {\n pending = false;\n prev(err);\n } else {\n onError(err);\n }\n }\n }\n }\n function onCompletion(err) {\n self.pending--;\n var server = self.server;\n var resBuf;\n if (!err) {\n var resErr = wres.error;\n var isStrict = server._strict;\n if (!isStrict) {\n if (isError(resErr)) {\n wres.error = msg.errorType.clone(resErr.message, { wrapUnions: true });\n } else if (resErr === null) {\n resErr = wres.error = void 0;\n }\n if (resErr === void 0 && wres.response === void 0 && msg.responseType.isValid(null)) {\n wres.response = null;\n }\n }\n try {\n resBuf = wres.toBuffer();\n } catch (cause) {\n if (wres.error !== void 0) {\n err = serializationError(\n f2(\"invalid %j error\", msg.name),\n // Sic.\n wres,\n [\n { name: \"headers\", type: MAP_BYTES_TYPE },\n { name: \"error\", type: msg.errorType }\n ]\n );\n } else {\n err = serializationError(\n f2(\"invalid %j response\", msg.name),\n wres,\n [\n { name: \"headers\", type: MAP_BYTES_TYPE },\n { name: \"response\", type: msg.responseType }\n ]\n );\n }\n }\n }\n if (!resBuf) {\n resBuf = self._encodeSystemError(err, wres.headers);\n } else if (resErr !== void 0) {\n server.emit(\"error\", toRpcError(\"APPLICATION_ERROR\", resErr));\n }\n cb(resBuf, msg.oneWay);\n if (self.draining && !self.pending) {\n self.destroy();\n }\n }\n function onError(err) {\n self.server.emit(\"error\", err, self);\n }\n };\n utils.addDeprecatedGetters(ServerChannel, [\"pending\"]);\n ServerChannel.prototype.getCache = util.deprecate(\n function() {\n return this.server._cache;\n },\n \"use `.remoteProtocols()` instead of `.getCache()`\"\n );\n ServerChannel.prototype.getProtocol = util.deprecate(\n function() {\n return this.server.service;\n },\n \"use `.service` instead of `.getProtocol()`\"\n );\n ServerChannel.prototype.isDestroyed = util.deprecate(\n function() {\n return this.destroyed;\n },\n \"use `.destroyed` instead of `.isDestroyed`\"\n );\n ServerChannel.prototype._encodeSystemError = function(err, header) {\n var server = this.server;\n server.emit(\"error\", err, this);\n var errStr;\n if (server._sysErrFormatter) {\n errStr = server._sysErrFormatter.call(this, err);\n } else if (err.rpcCode) {\n errStr = err.message;\n }\n var hdrBuf;\n if (header) {\n try {\n hdrBuf = MAP_BYTES_TYPE.toBuffer(header);\n } catch (cause) {\n server.emit(\"error\", cause, this);\n }\n }\n return Buffer2.concat([\n hdrBuf || utils.bufferFrom([0]),\n utils.bufferFrom([1, 0]),\n // Error flag and first union index.\n STRING_TYPE.toBuffer(errStr || \"internal server error\")\n ]);\n };\n function StatelessServerChannel(server, readableFactory, opts) {\n ServerChannel.call(this, server, opts);\n this._writable = void 0;\n var self = this;\n var readable;\n process.nextTick(function() {\n readable = readableFactory.call(self, function(err, writable) {\n process.nextTick(function() {\n if (err) {\n onFinish(err);\n return;\n }\n self._writable = writable.on(\"finish\", onFinish);\n self.emit(\"_writable\");\n });\n }).on(\"data\", onRequest).on(\"end\", onEnd);\n });\n function onRequest(obj) {\n var id = obj.id;\n var buf = Buffer2.concat(obj.payload);\n var err;\n try {\n var parts = readHead(HANDSHAKE_REQUEST_TYPE, buf);\n var hreq = parts.head;\n var adapter = self._getAdapter(hreq);\n } catch (cause) {\n err = toRpcError(\"INVALID_HANDSHAKE_REQUEST\", cause);\n }\n var hres = self._createHandshakeResponse(err, hreq);\n self.emit(\"handshake\", hreq, hres);\n if (err) {\n done(self._encodeSystemError(err));\n } else {\n self._receive(parts.tail, adapter, done);\n }\n function done(resBuf) {\n if (!self.destroyed) {\n if (!self._writable) {\n self.once(\"_writable\", function() {\n done(resBuf);\n });\n return;\n }\n self._writable.write({\n id,\n payload: [HANDSHAKE_RESPONSE_TYPE.toBuffer(hres), resBuf]\n });\n }\n if (self._writable && self._endWritable) {\n self._writable.end();\n }\n }\n }\n function onEnd() {\n self.destroy();\n }\n function onFinish(err) {\n readable.removeListener(\"data\", onRequest).removeListener(\"end\", onEnd);\n self.destroy(err || true);\n }\n }\n util.inherits(StatelessServerChannel, ServerChannel);\n function StatefulServerChannel(server, readable, writable, opts) {\n ServerChannel.call(this, server, opts);\n this._adapter = void 0;\n this._writable = writable.on(\"finish\", onFinish);\n this._readable = readable.on(\"data\", onHandshake).on(\"end\", onEnd);\n this.once(\"_drain\", function() {\n this._readable.removeListener(\"data\", onHandshake).removeListener(\"data\", onRequest).removeListener(\"end\", onEnd);\n }).once(\"eot\", function() {\n this._writable.removeListener(\"finish\", onFinish);\n if (this._endWritable) {\n this._writable.end();\n }\n });\n var self = this;\n function onHandshake(obj) {\n var id = obj.id;\n if (!self._matchesPrefix(id)) {\n return;\n }\n var buf = Buffer2.concat(obj.payload);\n var err;\n try {\n var parts = readHead(HANDSHAKE_REQUEST_TYPE, buf);\n var hreq = parts.head;\n self._adapter = self._getAdapter(hreq);\n } catch (cause) {\n err = toRpcError(\"INVALID_HANDSHAKE_REQUEST\", cause);\n }\n var hres = self._createHandshakeResponse(err, hreq);\n self.emit(\"handshake\", hreq, hres);\n if (err) {\n done(self._encodeSystemError(err));\n } else {\n self._readable.removeListener(\"data\", onHandshake).on(\"data\", onRequest);\n self._receive(parts.tail, self._adapter, done);\n }\n function done(resBuf) {\n if (self.destroyed) {\n return;\n }\n self._writable.write({\n id,\n payload: [HANDSHAKE_RESPONSE_TYPE.toBuffer(hres), resBuf]\n });\n }\n }\n function onRequest(obj) {\n var id = obj.id;\n if (!self._matchesPrefix(id)) {\n return;\n }\n var reqBuf = Buffer2.concat(obj.payload);\n self._receive(reqBuf, self._adapter, function(resBuf, oneWay) {\n if (self.destroyed || oneWay) {\n return;\n }\n self._writable.write({ id, payload: [resBuf] });\n });\n }\n function onEnd() {\n self.destroy();\n }\n function onFinish() {\n self.destroy(true);\n }\n }\n util.inherits(StatefulServerChannel, ServerChannel);\n function WrappedRequest(msg, hdrs, req) {\n this._msg = msg;\n this.headers = hdrs || {};\n this.request = req || {};\n }\n WrappedRequest.prototype.toBuffer = function() {\n var msg = this._msg;\n return Buffer2.concat([\n MAP_BYTES_TYPE.toBuffer(this.headers),\n STRING_TYPE.toBuffer(msg.name),\n msg.requestType.toBuffer(this.request)\n ]);\n };\n function WrappedResponse(msg, hdr, err, res) {\n this._msg = msg;\n this.headers = hdr;\n this.error = err;\n this.response = res;\n }\n WrappedResponse.prototype.toBuffer = function() {\n var hdr = MAP_BYTES_TYPE.toBuffer(this.headers);\n var hasError = this.error !== void 0;\n return Buffer2.concat([\n hdr,\n BOOLEAN_TYPE.toBuffer(hasError),\n hasError ? this._msg.errorType.toBuffer(this.error) : this._msg.responseType.toBuffer(this.response)\n ]);\n };\n function CallContext(msg, channel) {\n this.channel = channel;\n this.locals = {};\n this.message = msg;\n Object.freeze(this);\n }\n function Registry(ctx, prefixLength) {\n this._ctx = ctx;\n this._mask = ~0 >>> (prefixLength | 0);\n this._id = 0;\n this._n = 0;\n this._cbs = {};\n }\n Registry.prototype.get = function(id) {\n return this._cbs[id & this._mask];\n };\n Registry.prototype.add = function(timeout, fn) {\n this._id = this._id + 1 & this._mask;\n var self = this;\n var id = this._id;\n var timer;\n if (timeout > 0) {\n timer = setTimeout(function() {\n cb(new Error(\"timeout\"));\n }, timeout);\n }\n this._cbs[id] = cb;\n this._n++;\n return id;\n function cb() {\n if (!self._cbs[id]) {\n return;\n }\n delete self._cbs[id];\n self._n--;\n if (timer) {\n clearTimeout(timer);\n }\n fn.apply(self._ctx, arguments);\n }\n };\n Registry.prototype.clear = function() {\n Object.keys(this._cbs).forEach(function(id) {\n this._cbs[id](new Error(\"interrupted\"));\n }, this);\n };\n function Adapter(clientSvc, serverSvc, hash, isRemote) {\n this._clientSvc = clientSvc;\n this._serverSvc = serverSvc;\n this._hash = hash;\n this._isRemote = !!isRemote;\n this._readers = createReaders(clientSvc, serverSvc);\n }\n Adapter.prototype._decodeRequest = function(buf) {\n var tap = new Tap(buf);\n var hdr = MAP_BYTES_TYPE._read(tap);\n var name = STRING_TYPE._read(tap);\n var msg, req;\n if (name) {\n msg = this._serverSvc.message(name);\n req = this._readers[name + \"?\"]._read(tap);\n } else {\n msg = PING_MESSAGE;\n }\n if (!tap.isValid()) {\n throw new Error(f2(\"truncated %s request\", name || \"ping$\"));\n }\n return new WrappedRequest(msg, hdr, req);\n };\n Adapter.prototype._decodeResponse = function(buf, wres, msg) {\n var tap = new Tap(buf);\n utils.copyOwnProperties(MAP_BYTES_TYPE._read(tap), wres.headers, true);\n var isError2 = BOOLEAN_TYPE._read(tap);\n var name = msg.name;\n if (name) {\n var reader = this._readers[name + (isError2 ? \"*\" : \"!\")];\n msg = this._clientSvc.message(name);\n if (isError2) {\n wres.error = reader._read(tap);\n } else {\n wres.response = reader._read(tap);\n }\n if (!tap.isValid()) {\n throw new Error(f2(\"truncated %s response\", name));\n }\n } else {\n msg = PING_MESSAGE;\n }\n };\n function FrameDecoder() {\n stream.Transform.call(this, { readableObjectMode: true });\n this._id = void 0;\n this._buf = utils.newBuffer(0);\n this._bufs = [];\n this.on(\"finish\", function() {\n this.push(null);\n });\n }\n util.inherits(FrameDecoder, stream.Transform);\n FrameDecoder.prototype._transform = function(buf, encoding, cb) {\n buf = Buffer2.concat([this._buf, buf]);\n var frameLength;\n while (buf.length >= 4 && buf.length >= (frameLength = buf.readInt32BE(0)) + 4) {\n if (frameLength) {\n this._bufs.push(buf.slice(4, frameLength + 4));\n } else {\n var bufs = this._bufs;\n this._bufs = [];\n this.push({ id: null, payload: bufs });\n }\n buf = buf.slice(frameLength + 4);\n }\n this._buf = buf;\n cb();\n };\n FrameDecoder.prototype._flush = function(cb) {\n if (this._buf.length || this._bufs.length) {\n var bufs = this._bufs.slice();\n bufs.unshift(this._buf);\n var err = toRpcError(\"TRAILING_DATA\");\n err.trailingData = Buffer2.concat(bufs).toString();\n this.emit(\"error\", err);\n }\n cb();\n };\n function FrameEncoder() {\n stream.Transform.call(this, { writableObjectMode: true });\n this.on(\"finish\", function() {\n this.push(null);\n });\n }\n util.inherits(FrameEncoder, stream.Transform);\n FrameEncoder.prototype._transform = function(obj, encoding, cb) {\n var bufs = obj.payload;\n var i, l, buf;\n for (i = 0, l = bufs.length; i < l; i++) {\n buf = bufs[i];\n this.push(intBuffer(buf.length));\n this.push(buf);\n }\n this.push(intBuffer(0));\n cb();\n };\n function NettyDecoder() {\n stream.Transform.call(this, { readableObjectMode: true });\n this._id = void 0;\n this._frameCount = 0;\n this._buf = utils.newBuffer(0);\n this._bufs = [];\n this.on(\"finish\", function() {\n this.push(null);\n });\n }\n util.inherits(NettyDecoder, stream.Transform);\n NettyDecoder.prototype._transform = function(buf, encoding, cb) {\n buf = Buffer2.concat([this._buf, buf]);\n while (true) {\n if (this._id === void 0) {\n if (buf.length < 8) {\n this._buf = buf;\n cb();\n return;\n }\n this._id = buf.readInt32BE(0);\n this._frameCount = buf.readInt32BE(4);\n buf = buf.slice(8);\n }\n var frameLength;\n while (this._frameCount && buf.length >= 4 && buf.length >= (frameLength = buf.readInt32BE(0)) + 4) {\n this._frameCount--;\n this._bufs.push(buf.slice(4, frameLength + 4));\n buf = buf.slice(frameLength + 4);\n }\n if (this._frameCount) {\n this._buf = buf;\n cb();\n return;\n } else {\n var obj = { id: this._id, payload: this._bufs };\n this._bufs = [];\n this._id = void 0;\n this.push(obj);\n }\n }\n };\n NettyDecoder.prototype._flush = FrameDecoder.prototype._flush;\n function NettyEncoder() {\n stream.Transform.call(this, { writableObjectMode: true });\n this.on(\"finish\", function() {\n this.push(null);\n });\n }\n util.inherits(NettyEncoder, stream.Transform);\n NettyEncoder.prototype._transform = function(obj, encoding, cb) {\n var bufs = obj.payload;\n var l = bufs.length;\n var buf;\n buf = utils.newBuffer(8);\n buf.writeInt32BE(obj.id, 0);\n buf.writeInt32BE(l, 4);\n this.push(buf);\n var i;\n for (i = 0; i < l; i++) {\n buf = bufs[i];\n this.push(intBuffer(buf.length));\n this.push(buf);\n }\n cb();\n };\n function intBuffer(n) {\n var buf = utils.newBuffer(4);\n buf.writeInt32BE(n);\n return buf;\n }\n function readHead(type, buf) {\n var tap = new Tap(buf);\n var head = type._read(tap);\n if (!tap.isValid()) {\n throw new Error(f2(\"truncated %j\", type.schema()));\n }\n return { head, tail: tap.buf.slice(tap.pos) };\n }\n function createReader(rtype, wtype) {\n return rtype.equals(wtype) ? rtype : rtype.createResolver(wtype);\n }\n function createReaders(clientSvc, serverSvc) {\n var obj = {};\n clientSvc.messages.forEach(function(c) {\n var n = c.name;\n var s = serverSvc.message(n);\n try {\n if (!s) {\n throw new Error(f2(\"missing server message: %s\", n));\n }\n if (s.oneWay !== c.oneWay) {\n throw new Error(f2(\"inconsistent one-way message: %s\", n));\n }\n obj[n + \"?\"] = createReader(s.requestType, c.requestType);\n obj[n + \"*\"] = createReader(c.errorType, s.errorType);\n obj[n + \"!\"] = createReader(c.responseType, s.responseType);\n } catch (cause) {\n throw toRpcError(\"INCOMPATIBLE_PROTOCOL\", cause);\n }\n });\n return obj;\n }\n function insertRemoteProtocols(cache, ptcls, svc, isClient) {\n Object.keys(ptcls).forEach(function(hash) {\n var ptcl = ptcls[hash];\n var clientSvc, serverSvc;\n if (isClient) {\n clientSvc = svc;\n serverSvc = Service.forProtocol(ptcl);\n } else {\n clientSvc = Service.forProtocol(ptcl);\n serverSvc = svc;\n }\n cache[hash] = new Adapter(clientSvc, serverSvc, hash, true);\n });\n }\n function getRemoteProtocols(cache, isClient) {\n var ptcls = {};\n Object.keys(cache).forEach(function(hs) {\n var adapter = cache[hs];\n if (adapter._isRemote) {\n var svc = isClient ? adapter._serverSvc : adapter._clientSvc;\n ptcls[hs] = svc.protocol;\n }\n });\n return ptcls;\n }\n function isError(any) {\n return !!any && Object.prototype.toString.call(any) === \"[object Error]\";\n }\n function forwardErrors(src, dst) {\n return src.on(\"error\", function(err) {\n dst.emit(\"error\", err, src);\n });\n }\n function toError(msg, cause) {\n var err = new Error(msg);\n err.cause = cause;\n return err;\n }\n function toRpcError(rpcCode, cause) {\n var err = toError(rpcCode.toLowerCase().replace(/_/g, \" \"), cause);\n err.rpcCode = cause && cause.rpcCode ? cause.rpcCode : rpcCode;\n return err;\n }\n function serializationError(msg, obj, fields) {\n var details = [];\n var i, l, field;\n for (i = 0, l = fields.length; i < l; i++) {\n field = fields[i];\n field.type.isValid(obj[field.name], { errorHook });\n }\n var detailsStr = details.map(function(obj2) {\n return f2(\"%s = %j but expected %s\", obj2.path, obj2.value, obj2.type);\n }).join(\", \");\n var err = new Error(f2(\"%s (%s)\", msg, detailsStr));\n err.details = details;\n return err;\n function errorHook(parts, any, type) {\n var strs = [];\n var i2, l2, part;\n for (i2 = 0, l2 = parts.length; i2 < l2; i2++) {\n part = parts[i2];\n if (isNaN(part)) {\n strs.push(\".\" + part);\n } else {\n strs.push(\"[\" + part + \"]\");\n }\n }\n details.push({\n path: field.name + strs.join(\"\"),\n value: any,\n type\n });\n }\n }\n function normalizedPrefix(scope) {\n return scope ? utils.getHash(scope).readInt16BE(0) << 32 - PREFIX_LENGTH : 0;\n }\n function matchesPrefix(id, prefix) {\n return (id ^ prefix) >> 32 - PREFIX_LENGTH === 0;\n }\n function isStream(any) {\n return !!(any && any.pipe);\n }\n function getExistingMessage(svc, name) {\n var msg = svc.message(name);\n if (!msg) {\n throw new Error(f2(\"unknown message: %s\", name));\n }\n return msg;\n }\n function chainMiddleware(params) {\n var args = [params.wreq, params.wres];\n var cbs = [];\n var cause;\n forward(0);\n function forward(pos) {\n var isDone = false;\n if (pos < params.fns.length) {\n params.fns[pos].apply(params.ctx, args.concat(function(err, cb) {\n if (isDone) {\n params.onError(toError(\"duplicate forward middleware call\", err));\n return;\n }\n isDone = true;\n if (err || params.wres && // Non one-way messages.\n (params.wres.error !== void 0 || params.wres.response !== void 0)) {\n cause = err;\n backward();\n return;\n }\n if (cb) {\n cbs.push(cb);\n }\n forward(++pos);\n }));\n } else {\n params.onTransition.apply(params.ctx, args.concat(function(err) {\n if (isDone) {\n params.onError(toError(\"duplicate handler call\", err));\n return;\n }\n isDone = true;\n cause = err;\n process.nextTick(backward);\n }));\n }\n }\n function backward() {\n var cb = cbs.pop();\n if (cb) {\n var isDone = false;\n cb.call(params.ctx, cause, function(err) {\n if (isDone) {\n params.onError(toError(\"duplicate backward middleware call\", err));\n return;\n }\n cause = err;\n isDone = true;\n backward();\n });\n } else {\n params.onCompletion.call(params.ctx, cause);\n }\n }\n }\n module.exports = {\n Adapter,\n HANDSHAKE_REQUEST_TYPE,\n HANDSHAKE_RESPONSE_TYPE,\n Message,\n Registry,\n Service,\n discoverProtocol,\n streams: {\n FrameDecoder,\n FrameEncoder,\n NettyDecoder,\n NettyEncoder\n }\n };\n }\n});\n\n// node_modules/avsc/lib/files.js\nvar require_files = __commonJS({\n \"node_modules/avsc/lib/files.js\"(exports, module) {\n \"use strict\";\n var fs = __import_FS;\n var path = __import_PATH;\n function createImportHook() {\n var imports = {};\n return function(fpath, kind, cb) {\n fpath = path.resolve(fpath);\n if (imports[fpath]) {\n process.nextTick(cb);\n return;\n }\n imports[fpath] = true;\n fs.readFile(fpath, { encoding: \"utf8\" }, cb);\n };\n }\n function createSyncImportHook() {\n var imports = {};\n return function(fpath, kind, cb) {\n fpath = path.resolve(fpath);\n if (imports[fpath]) {\n cb();\n } else {\n imports[fpath] = true;\n cb(null, fs.readFileSync(fpath, { encoding: \"utf8\" }));\n }\n };\n }\n module.exports = {\n createImportHook,\n createSyncImportHook,\n // Proxy a few methods to better shim them for browserify.\n existsSync: fs.existsSync,\n readFileSync: fs.readFileSync\n };\n }\n});\n\n// node_modules/avsc/lib/specs.js\nvar require_specs = __commonJS({\n \"node_modules/avsc/lib/specs.js\"(exports, module) {\n \"use strict\";\n var files = require_files();\n var utils = require_utils();\n var path = __import_PATH;\n var util = __import_UTIL;\n var f2 = util.format;\n var TYPE_REFS = {\n date: { type: \"int\", logicalType: \"date\" },\n decimal: { type: \"bytes\", logicalType: \"decimal\" },\n time_ms: { type: \"long\", logicalType: \"time-millis\" },\n timestamp_ms: { type: \"long\", logicalType: \"timestamp-millis\" }\n };\n function assembleProtocol(fpath, opts, cb) {\n if (!cb && typeof opts == \"function\") {\n cb = opts;\n opts = void 0;\n }\n opts = opts || {};\n if (!opts.importHook) {\n opts.importHook = files.createImportHook();\n }\n importFile(fpath, function(err, protocol) {\n if (err) {\n cb(err);\n return;\n }\n if (!protocol) {\n cb(new Error(\"empty root import\"));\n return;\n }\n var schemas = protocol.types;\n if (schemas) {\n var namespace = protocolNamespace(protocol) || \"\";\n schemas.forEach(function(schema) {\n if (schema.namespace === namespace) {\n delete schema.namespace;\n }\n });\n }\n cb(null, protocol);\n });\n function importFile(fpath2, cb2) {\n opts.importHook(fpath2, \"idl\", function(err, str) {\n if (err) {\n cb2(err);\n return;\n }\n if (str === void 0) {\n cb2();\n return;\n }\n try {\n var reader = new Reader(str, opts);\n var obj = reader._readProtocol(str, opts);\n } catch (err2) {\n err2.path = fpath2;\n cb2(err2);\n return;\n }\n fetchImports(obj.protocol, obj.imports, path.dirname(fpath2), cb2);\n });\n }\n function fetchImports(protocol, imports, dpath, cb2) {\n var importedProtocols = [];\n next();\n function next() {\n var info = imports.shift();\n if (!info) {\n importedProtocols.reverse();\n try {\n importedProtocols.forEach(function(imported) {\n mergeImport(protocol, imported);\n });\n } catch (err) {\n cb2(err);\n return;\n }\n cb2(null, protocol);\n return;\n }\n var importPath = path.join(dpath, info.name);\n if (info.kind === \"idl\") {\n importFile(importPath, function(err, imported) {\n if (err) {\n cb2(err);\n return;\n }\n if (imported) {\n importedProtocols.push(imported);\n }\n next();\n });\n } else {\n opts.importHook(importPath, info.kind, function(err, str) {\n if (err) {\n cb2(err);\n return;\n }\n switch (info.kind) {\n case \"protocol\":\n case \"schema\":\n if (str === void 0) {\n next();\n return;\n }\n try {\n var obj = JSON.parse(str);\n } catch (err2) {\n err2.path = importPath;\n cb2(err2);\n return;\n }\n var imported = info.kind === \"schema\" ? { types: [obj] } : obj;\n importedProtocols.push(imported);\n next();\n return;\n default:\n cb2(new Error(f2(\"invalid import kind: %s\", info.kind)));\n }\n });\n }\n }\n }\n function mergeImport(protocol, imported) {\n var schemas = imported.types || [];\n schemas.reverse();\n schemas.forEach(function(schema) {\n if (!protocol.types) {\n protocol.types = [];\n }\n if (schema.namespace === void 0) {\n schema.namespace = protocolNamespace(imported) || \"\";\n }\n protocol.types.unshift(schema);\n });\n Object.keys(imported.messages || {}).forEach(function(name) {\n if (!protocol.messages) {\n protocol.messages = {};\n }\n if (protocol.messages[name]) {\n throw new Error(f2(\"duplicate message: %s\", name));\n }\n protocol.messages[name] = imported.messages[name];\n });\n }\n }\n function read(str) {\n var schema;\n if (typeof str == \"string\" && ~str.indexOf(path.sep) && files.existsSync(str)) {\n var contents = files.readFileSync(str, { encoding: \"utf8\" });\n try {\n return JSON.parse(contents);\n } catch (err) {\n var opts = { importHook: files.createSyncImportHook() };\n assembleProtocol(str, opts, function(err2, protocolSchema) {\n schema = err2 ? contents : protocolSchema;\n });\n }\n } else {\n schema = str;\n }\n if (typeof schema != \"string\" || schema === \"null\") {\n return schema;\n }\n try {\n return JSON.parse(schema);\n } catch (err) {\n try {\n return Reader.readProtocol(schema);\n } catch (err2) {\n try {\n return Reader.readSchema(schema);\n } catch (err3) {\n return schema;\n }\n }\n }\n }\n function Reader(str, opts) {\n opts = opts || {};\n this._tk = new Tokenizer(str);\n this._ackVoidMessages = !!opts.ackVoidMessages;\n this._implicitTags = !opts.delimitedCollections;\n this._typeRefs = opts.typeRefs || TYPE_REFS;\n }\n Reader.readProtocol = function(str, opts) {\n var reader = new Reader(str, opts);\n var protocol = reader._readProtocol();\n if (protocol.imports.length) {\n throw new Error(\"unresolvable import\");\n }\n return protocol.protocol;\n };\n Reader.readSchema = function(str, opts) {\n var reader = new Reader(str, opts);\n var doc = reader._readJavadoc();\n var schema = reader._readType(doc === void 0 ? {} : { doc }, true);\n reader._tk.next({ id: \"(eof)\" });\n return schema;\n };\n Reader.prototype._readProtocol = function() {\n var tk = this._tk;\n var imports = [];\n var types = [];\n var messages = {};\n var pos;\n this._readImports(imports);\n var protocolSchema = {};\n var protocolJavadoc = this._readJavadoc();\n if (protocolJavadoc !== void 0) {\n protocolSchema.doc = protocolJavadoc;\n }\n this._readAnnotations(protocolSchema);\n tk.next({ val: \"protocol\" });\n if (!tk.next({ val: \"{\", silent: true })) {\n protocolSchema.protocol = tk.next({ id: \"name\" }).val;\n tk.next({ val: \"{\" });\n }\n while (!tk.next({ val: \"}\", silent: true })) {\n if (!this._readImports(imports)) {\n var javadoc = this._readJavadoc();\n var typeSchema = this._readType({}, true);\n var numImports = this._readImports(imports, true);\n var message = void 0;\n pos = tk.pos;\n if (!numImports && (message = this._readMessage(typeSchema))) {\n if (javadoc !== void 0 && message.schema.doc === void 0) {\n message.schema.doc = javadoc;\n }\n var oneWay = false;\n if (message.schema.response === \"void\" || message.schema.response.type === \"void\") {\n oneWay = !this._ackVoidMessages && !message.schema.errors;\n if (message.schema.response === \"void\") {\n message.schema.response = \"null\";\n } else {\n message.schema.response.type = \"null\";\n }\n }\n if (oneWay) {\n message.schema[\"one-way\"] = true;\n }\n if (messages[message.name]) {\n throw new Error(f2(\"duplicate message: %s\", message.name));\n }\n messages[message.name] = message.schema;\n } else {\n if (javadoc) {\n if (typeof typeSchema == \"string\") {\n typeSchema = { doc: javadoc, type: typeSchema };\n } else if (typeSchema.doc === void 0) {\n typeSchema.doc = javadoc;\n }\n }\n types.push(typeSchema);\n tk.pos = pos;\n tk.next({ val: \";\", silent: true });\n }\n javadoc = void 0;\n }\n }\n tk.next({ id: \"(eof)\" });\n if (types.length) {\n protocolSchema.types = types;\n }\n if (Object.keys(messages).length) {\n protocolSchema.messages = messages;\n }\n return { protocol: protocolSchema, imports };\n };\n Reader.prototype._readAnnotations = function(schema) {\n var tk = this._tk;\n while (tk.next({ val: \"@\", silent: true })) {\n var parts = [];\n while (!tk.next({ val: \"(\", silent: true })) {\n parts.push(tk.next().val);\n }\n schema[parts.join(\"\")] = tk.next({ id: \"json\" }).val;\n tk.next({ val: \")\" });\n }\n };\n Reader.prototype._readMessage = function(responseSchema) {\n var tk = this._tk;\n var schema = { request: [], response: responseSchema };\n this._readAnnotations(schema);\n var name = tk.next().val;\n if (tk.next().val !== \"(\") {\n return;\n }\n if (!tk.next({ val: \")\", silent: true })) {\n do {\n schema.request.push(this._readField());\n } while (!tk.next({ val: \")\", silent: true }) && tk.next({ val: \",\" }));\n }\n var token = tk.next();\n switch (token.val) {\n case \"throws\":\n schema.errors = [];\n do {\n schema.errors.push(this._readType());\n } while (!tk.next({ val: \";\", silent: true }) && tk.next({ val: \",\" }));\n break;\n case \"oneway\":\n schema[\"one-way\"] = true;\n tk.next({ val: \";\" });\n break;\n case \";\":\n break;\n default:\n throw tk.error(\"invalid message suffix\", token);\n }\n return { name, schema };\n };\n Reader.prototype._readJavadoc = function() {\n var token = this._tk.next({ id: \"javadoc\", emitJavadoc: true, silent: true });\n if (token) {\n return token.val;\n }\n };\n Reader.prototype._readField = function() {\n var tk = this._tk;\n var javadoc = this._readJavadoc();\n var schema = { type: this._readType() };\n if (javadoc !== void 0 && schema.doc === void 0) {\n schema.doc = javadoc;\n }\n this._readAnnotations(schema);\n schema.name = tk.next({ id: \"name\" }).val;\n if (tk.next({ val: \"=\", silent: true })) {\n schema[\"default\"] = tk.next({ id: \"json\" }).val;\n }\n return schema;\n };\n Reader.prototype._readType = function(schema, top) {\n schema = schema || {};\n this._readAnnotations(schema);\n schema.type = this._tk.next({ id: \"name\" }).val;\n switch (schema.type) {\n case \"record\":\n case \"error\":\n return this._readRecord(schema);\n case \"fixed\":\n return this._readFixed(schema);\n case \"enum\":\n return this._readEnum(schema, top);\n case \"map\":\n return this._readMap(schema);\n case \"array\":\n return this._readArray(schema);\n case \"union\":\n if (Object.keys(schema).length > 1) {\n throw new Error(\"union annotations are not supported\");\n }\n return this._readUnion();\n default:\n var ref = this._typeRefs[schema.type];\n if (ref) {\n delete schema.type;\n utils.copyOwnProperties(ref, schema);\n }\n return Object.keys(schema).length > 1 ? schema : schema.type;\n }\n };\n Reader.prototype._readFixed = function(schema) {\n var tk = this._tk;\n if (!tk.next({ val: \"(\", silent: true })) {\n schema.name = tk.next({ id: \"name\" }).val;\n tk.next({ val: \"(\" });\n }\n schema.size = parseInt(tk.next({ id: \"number\" }).val);\n tk.next({ val: \")\" });\n return schema;\n };\n Reader.prototype._readMap = function(schema) {\n var tk = this._tk;\n var silent = this._implicitTags;\n var implicitTags = tk.next({ val: \"<\", silent }) === void 0;\n schema.values = this._readType();\n tk.next({ val: \">\", silent: implicitTags });\n return schema;\n };\n Reader.prototype._readArray = function(schema) {\n var tk = this._tk;\n var silent = this._implicitTags;\n var implicitTags = tk.next({ val: \"<\", silent }) === void 0;\n schema.items = this._readType();\n tk.next({ val: \">\", silent: implicitTags });\n return schema;\n };\n Reader.prototype._readEnum = function(schema, top) {\n var tk = this._tk;\n if (!tk.next({ val: \"{\", silent: true })) {\n schema.name = tk.next({ id: \"name\" }).val;\n tk.next({ val: \"{\" });\n }\n schema.symbols = [];\n do {\n schema.symbols.push(tk.next().val);\n } while (!tk.next({ val: \"}\", silent: true }) && tk.next({ val: \",\" }));\n if (top && tk.next({ val: \"=\", silent: true })) {\n schema.default = tk.next().val;\n tk.next({ val: \";\" });\n }\n return schema;\n };\n Reader.prototype._readUnion = function() {\n var tk = this._tk;\n var arr = [];\n tk.next({ val: \"{\" });\n do {\n arr.push(this._readType());\n } while (!tk.next({ val: \"}\", silent: true }) && tk.next({ val: \",\" }));\n return arr;\n };\n Reader.prototype._readRecord = function(schema) {\n var tk = this._tk;\n if (!tk.next({ val: \"{\", silent: true })) {\n schema.name = tk.next({ id: \"name\" }).val;\n tk.next({ val: \"{\" });\n }\n schema.fields = [];\n while (!tk.next({ val: \"}\", silent: true })) {\n schema.fields.push(this._readField());\n tk.next({ val: \";\" });\n }\n return schema;\n };\n Reader.prototype._readImports = function(imports, maybeMessage) {\n var tk = this._tk;\n var numImports = 0;\n var pos = tk.pos;\n while (tk.next({ val: \"import\", silent: true })) {\n if (!numImports && maybeMessage && tk.next({ val: \"(\", silent: true })) {\n tk.pos = pos;\n return;\n }\n var kind = tk.next({ id: \"name\" }).val;\n var fname = JSON.parse(tk.next({ id: \"string\" }).val);\n tk.next({ val: \";\" });\n imports.push({ kind, name: fname });\n numImports++;\n }\n return numImports;\n };\n function Tokenizer(str) {\n this._str = str;\n this.pos = 0;\n }\n Tokenizer.prototype.next = function(opts) {\n var token = { pos: this.pos, id: void 0, val: void 0 };\n var javadoc = this._skip(opts && opts.emitJavadoc);\n if (typeof javadoc == \"string\") {\n token.id = \"javadoc\";\n token.val = javadoc;\n } else {\n var pos = this.pos;\n var str = this._str;\n var c = str.charAt(pos);\n if (!c) {\n token.id = \"(eof)\";\n } else {\n if (opts && opts.id === \"json\") {\n token.id = \"json\";\n this.pos = this._endOfJson();\n } else if (c === '\"') {\n token.id = \"string\";\n this.pos = this._endOfString();\n } else if (/[0-9]/.test(c)) {\n token.id = \"number\";\n this.pos = this._endOf(/[0-9]/);\n } else if (/[`A-Za-z_.]/.test(c)) {\n token.id = \"name\";\n this.pos = this._endOf(/[`A-Za-z0-9_.]/);\n } else {\n token.id = \"operator\";\n this.pos = pos + 1;\n }\n token.val = str.slice(pos, this.pos);\n if (token.id === \"json\") {\n try {\n token.val = JSON.parse(token.val);\n } catch (err2) {\n throw this.error(\"invalid JSON\", token);\n }\n } else if (token.id === \"name\") {\n token.val = token.val.replace(/`/g, \"\");\n }\n }\n }\n var err;\n if (opts && opts.id && opts.id !== token.id) {\n err = this.error(f2(\"expected ID %s\", opts.id), token);\n } else if (opts && opts.val && opts.val !== token.val) {\n err = this.error(f2(\"expected value %s\", opts.val), token);\n }\n if (!err) {\n return token;\n } else if (opts && opts.silent) {\n this.pos = token.pos;\n return void 0;\n } else {\n throw err;\n }\n };\n Tokenizer.prototype.error = function(reason, context) {\n var isToken = typeof context != \"number\";\n var pos = isToken ? context.pos : context;\n var str = this._str;\n var lineNum = 1;\n var lineStart = 0;\n var i;\n for (i = 0; i < pos; i++) {\n if (str.charAt(i) === \"\\n\") {\n lineNum++;\n lineStart = i;\n }\n }\n var msg = isToken ? f2(\"invalid token %j: %s\", context, reason) : reason;\n var err = new Error(msg);\n err.token = isToken ? context : void 0;\n err.lineNum = lineNum;\n err.colNum = pos - lineStart;\n return err;\n };\n Tokenizer.prototype._skip = function(emitJavadoc) {\n var str = this._str;\n var isJavadoc = false;\n var pos, c;\n while ((c = str.charAt(this.pos)) && /\\s/.test(c)) {\n this.pos++;\n }\n pos = this.pos;\n if (c === \"/\") {\n switch (str.charAt(this.pos + 1)) {\n case \"/\":\n this.pos += 2;\n while ((c = str.charAt(this.pos)) && c !== \"\\n\") {\n this.pos++;\n }\n return this._skip(emitJavadoc);\n case \"*\":\n this.pos += 2;\n if (str.charAt(this.pos) === \"*\") {\n isJavadoc = true;\n }\n while (c = str.charAt(this.pos++)) {\n if (c === \"*\" && str.charAt(this.pos) === \"/\") {\n this.pos++;\n if (isJavadoc && emitJavadoc) {\n return extractJavadoc(str.slice(pos + 3, this.pos - 2));\n }\n return this._skip(emitJavadoc);\n }\n }\n throw this.error(\"unterminated comment\", pos);\n }\n }\n };\n Tokenizer.prototype._endOf = function(pat) {\n var pos = this.pos;\n var str = this._str;\n while (pat.test(str.charAt(pos))) {\n pos++;\n }\n return pos;\n };\n Tokenizer.prototype._endOfString = function() {\n var pos = this.pos + 1;\n var str = this._str;\n var c;\n while (c = str.charAt(pos)) {\n if (c === '\"') {\n return pos + 1;\n }\n if (c === \"\\\\\") {\n pos += 2;\n } else {\n pos++;\n }\n }\n throw this.error(\"unterminated string\", pos - 1);\n };\n Tokenizer.prototype._endOfJson = function() {\n var pos = utils.jsonEnd(this._str, this.pos);\n if (pos < 0) {\n throw this.error(\"invalid JSON\", pos);\n }\n return pos;\n };\n function extractJavadoc(str) {\n var lines = str.replace(/^[ \\t]+|[ \\t]+$/g, \"\").split(\"\\n\").map(function(line, i) {\n return i ? line.replace(/^\\s*\\*\\s?/, \"\") : line;\n });\n while (lines.length && !lines[0]) {\n lines.shift();\n }\n while (lines.length && !lines[lines.length - 1]) {\n lines.pop();\n }\n return lines.join(\"\\n\");\n }\n function protocolNamespace(protocol) {\n if (protocol.namespace) {\n return protocol.namespace;\n }\n var match = /^(.*)\\.[^.]+$/.exec(protocol.protocol);\n return match ? match[1] : void 0;\n }\n module.exports = {\n Tokenizer,\n assembleProtocol,\n read,\n readProtocol: Reader.readProtocol,\n readSchema: Reader.readSchema\n };\n }\n});\n\n// node_modules/avsc/lib/index.js\nvar require_lib = __commonJS({\n \"node_modules/avsc/lib/index.js\"(exports, module) {\n \"use strict\";\n var containers = require_containers();\n var services = require_services();\n var specs = require_specs();\n var types = require_types();\n var utils = require_utils();\n var buffer = __import_BUFFER;\n var fs = __import_FS;\n var util = __import_UTIL;\n var Buffer2 = buffer.Buffer;\n function parse2(any, opts) {\n var schemaOrProtocol = specs.read(any);\n return schemaOrProtocol.protocol ? services.Service.forProtocol(schemaOrProtocol, opts) : types.Type.forSchema(schemaOrProtocol, opts);\n }\n function extractFileHeader(path, opts) {\n opts = opts || {};\n var decode = opts.decode === void 0 ? true : !!opts.decode;\n var size = Math.max(opts.size || 4096, 4);\n var buf = utils.newBuffer(size);\n var fd = fs.openSync(path, \"r\");\n try {\n var pos = fs.readSync(fd, buf, 0, size);\n if (pos < 4 || !containers.MAGIC_BYTES.equals(buf.slice(0, 4))) {\n return null;\n }\n var tap = new utils.Tap(buf);\n var header = null;\n do {\n header = containers.HEADER_TYPE._read(tap);\n } while (!isValid());\n if (decode !== false) {\n var meta = header.meta;\n meta[\"avro.schema\"] = JSON.parse(meta[\"avro.schema\"].toString());\n if (meta[\"avro.codec\"] !== void 0) {\n meta[\"avro.codec\"] = meta[\"avro.codec\"].toString();\n }\n }\n return header;\n } finally {\n fs.closeSync(fd);\n }\n function isValid() {\n if (tap.isValid()) {\n return true;\n }\n var len = 2 * tap.buf.length;\n var buf2 = utils.newBuffer(len);\n len = fs.readSync(fd, buf2, 0, len);\n tap.buf = Buffer2.concat([tap.buf, buf2]);\n tap.pos = 0;\n return false;\n }\n }\n function createFileDecoder(path, opts) {\n return fs.createReadStream(path).pipe(new containers.streams.BlockDecoder(opts));\n }\n function createFileEncoder(path, schema, opts) {\n var encoder = new containers.streams.BlockEncoder(schema, opts);\n encoder.pipe(fs.createWriteStream(path, { defaultEncoding: \"binary\" }));\n return encoder;\n }\n module.exports = {\n Service: services.Service,\n Type: types.Type,\n assembleProtocol: specs.assembleProtocol,\n createFileDecoder,\n createFileEncoder,\n discoverProtocol: services.discoverProtocol,\n extractFileHeader,\n parse: parse2,\n readProtocol: specs.readProtocol,\n readSchema: specs.readSchema,\n streams: containers.streams,\n types: types.builtins,\n // Deprecated exports.\n Protocol: services.Service,\n assemble: util.deprecate(\n specs.assembleProtocol,\n \"use `assembleProtocol` instead\"\n ),\n combine: util.deprecate(\n types.Type.forTypes,\n \"use `Type.forTypes` intead\"\n ),\n infer: util.deprecate(\n types.Type.forValue,\n \"use `Type.forValue` instead\"\n )\n };\n }\n});\n\n// node_modules/ultralight-s3/lib/index.min.js\nvar x = \"AWS4-HMAC-SHA256\";\nvar K = \"aws4_request\";\nvar O = \"s3\";\nvar v = \"2\";\nvar E = \"UNSIGNED-PAYLOAD\";\nvar W = \"application/octet-stream\";\nvar M = \"application/xml\";\nvar w = \"application/json\";\nvar X = [\"accessKeyId\", \"secretAccessKey\", \"sessionToken\", \"password\"];\nvar f = \"x-amz-content-sha256\";\nvar Z = \"x-amz-date\";\nvar V = \"host\";\nvar J = \"Authorization\";\nvar m = \"Content-Type\";\nvar T = \"Content-Length\";\nvar P = \"etag\";\nvar C = \"last-modified\";\nvar u = \"ultralight-s3 Module: \";\nvar ee = `${u}accessKeyId must be a non-empty string`;\nvar te = `${u}secretAccessKey must be a non-empty string`;\nvar se = `${u}endpoint must be a non-empty string`;\nvar re = `${u}bucketName must be a non-empty string`;\nvar j = `${u}key must be a non-empty string`;\nvar $ = `${u}uploadId must be a non-empty string`;\nvar L = `${u}parts must be a non-empty array`;\nvar k = `${u}Each part must have a partNumber (number) and ETag (string)`;\nvar D = `${u}data must be a Buffer or string`;\nvar B = `${u}prefix must be a string`;\nvar F = `${u}maxKeys must be a positive integer`;\nvar G = `${u}delimiter must be a string`;\nvar z = crypto.createHmac || (await import(\"node:crypto\")).createHmac;\nvar Q = crypto.createHash || (await import(\"node:crypto\")).createHash;\ntypeof z > \"u\" && typeof Q > \"u\" && console.error(\"ultralight-S3 Module: Crypto functions are not available, please report the issue with necessary description: https://github.com/sentienhq/ultralight-s3/issues\");\nvar ne = { contents: true };\nvar oe = (p) => `%${p.charCodeAt(0).toString(16).toUpperCase()}`;\nvar q = (p) => encodeURIComponent(p).replace(/[!'()*]/g, oe);\nvar y = (p) => q(p).replace(/%2F/g, \"/\");\nvar N = class {\n constructor({ accessKeyId: e, secretAccessKey: t, endpoint: r, bucketName: n, region: o = \"auto\", maxRequestSizeInBytes: i = 5242880, requestAbortTimeout: a = void 0, logger: c = void 0 }) {\n this.getBucketName = () => this.bucketName, this.setBucketName = (s) => {\n this.bucketName = s;\n }, this.getRegion = () => this.region, this.setRegion = (s) => {\n this.region = s;\n }, this.getEndpoint = () => this.endpoint, this.setEndpoint = (s) => {\n this.endpoint = s;\n }, this.getMaxRequestSizeInBytes = () => this.maxRequestSizeInBytes, this.setMaxRequestSizeInBytes = (s) => {\n this.maxRequestSizeInBytes = s;\n }, this.sanitizeETag = (s) => H(s), this.getProps = () => ({ accessKeyId: this.accessKeyId, secretAccessKey: this.secretAccessKey, region: this.region, bucket: this.bucketName, endpoint: this.endpoint, maxRequestSizeInBytes: this.maxRequestSizeInBytes, requestAbortTimeout: this.requestAbortTimeout, logger: this.logger }), this.setProps = (s) => {\n this._validateConstructorParams(s.accessKeyId, s.secretAccessKey, s.bucketName, s.endpoint), this.accessKeyId = s.accessKeyId, this.secretAccessKey = s.secretAccessKey, this.region = s.region || \"auto\", this.bucketName = s.bucketName, this.endpoint = s.endpoint, this.maxRequestSizeInBytes = s.maxRequestSizeInBytes || 5242880, this.requestAbortTimeout = s.requestAbortTimeout, this.logger = s.logger;\n }, this._validateConstructorParams(e, t, r, n), this.accessKeyId = e, this.secretAccessKey = t, this.endpoint = r, this.bucketName = n, this.region = o, this.maxRequestSizeInBytes = i, this.requestAbortTimeout = a, this.logger = c;\n }\n _validateConstructorParams(e, t, r, n) {\n if (typeof e != \"string\" || e.trim().length === 0) throw new TypeError(ee);\n if (typeof t != \"string\" || t.trim().length === 0) throw new TypeError(te);\n if (typeof r != \"string\" || r.trim().length === 0) throw new TypeError(se);\n if (typeof n != \"string\" || n.trim().length === 0) throw new TypeError(re);\n }\n _checkMethodHeadnGet(e) {\n if (e !== \"GET\" && e !== \"HEAD\") throw this._log(\"error\", `${u}method must be either GET or HEAD`), new Error(\"method must be either GET or HEAD\");\n }\n _checkKey(e) {\n if (typeof e != \"string\" || e.trim().length === 0) throw this._log(\"error\", j), new TypeError(j);\n }\n _checkDelimiter(e) {\n if (typeof e != \"string\" || e.trim().length === 0) throw this._log(\"error\", G), new TypeError(G);\n }\n _checkPrefix(e) {\n if (typeof e != \"string\") throw this._log(\"error\", B), new TypeError(B);\n }\n _checkMaxKeys(e) {\n if (typeof e != \"number\" || e <= 0) throw this._log(\"error\", F), new TypeError(F);\n }\n _checkOpts(e) {\n if (typeof e != \"object\") throw this._log(\"error\", `${u}opts must be an object`), new TypeError(`${u}opts must be an object`);\n }\n _log(e, t, r = {}) {\n if (this.logger && typeof this.logger[e] == \"function\") {\n let n = (a) => typeof a != \"object\" || a === null ? a : Object.keys(a).reduce((c, s) => (X.includes(s.toLowerCase()) ? c[s] = \"[REDACTED]\" : typeof a[s] == \"object\" && a[s] !== null ? c[s] = n(a[s]) : c[s] = a[s], c), Array.isArray(a) ? [] : {}), o = n(r), i = { timestamp: (/* @__PURE__ */ new Date()).toISOString(), level: e, message: t, ...o, context: n({ bucketName: this.bucketName, region: this.region, endpoint: this.endpoint, accessKeyId: this.accessKeyId ? `${this.accessKeyId.substring(0, 4)}...` : void 0 }) };\n this.logger[e](i);\n }\n }\n async getContentLength(e) {\n this._checkKey(e);\n let t = { [f]: E }, r = y(e), { url: n, headers: o } = await this._sign(\"HEAD\", r, {}, t, \"\"), a = (await this._sendRequest(n, \"HEAD\", o)).headers.get(T);\n return a ? parseInt(a, 10) : 0;\n }\n async bucketExists() {\n let e = { [f]: E }, { url: t, headers: r } = await this._sign(\"HEAD\", \"\", {}, e, \"\"), n = await this._sendRequest(t, \"HEAD\", r);\n return !!(n.ok && n.status === 200);\n }\n async fileExists(e, t = {}) {\n this._checkKey(e);\n let { filteredOpts: r, conditionalHeaders: n } = this._filterIfHeaders(t), o = { [f]: E, ...n }, i = y(e), { url: a, headers: c } = await this._sign(\"HEAD\", i, r, o, \"\");\n try {\n let s = await this._sendRequest(a, \"HEAD\", c, \"\", [200, 404, 412, 304]);\n return s.status === 404 ? false : s.status === 412 || s.status === 304 ? null : s.ok && s.status === 200 ? true : (this._handleErrorResponse(s), false);\n } catch (s) {\n let l = s instanceof Error ? s.message : String(s);\n throw this._log(\"error\", `${u}Failed to check if file exists: ${l}`), new Error(`${u}Failed to check if file exists: ${l}`);\n }\n }\n async _sign(e, t, r, n, o) {\n let i = (/* @__PURE__ */ new Date()).toISOString().replace(/[:-]|\\.\\d{3}/g, \"\"), a = typeof t == \"string\" && t.length > 0 ? new URL(t, this.endpoint) : new URL(this.endpoint);\n a.pathname = `/${encodeURI(this.bucketName)}${a.pathname}`, n[f] = o ? await U(o) : E, n[Z] = i, n[V] = a.host;\n let c = this._buildCanonicalHeaders(n), s = Object.keys(n).map((_) => _.toLowerCase()).sort().join(\";\"), l = await this._buildCanonicalRequest(e, a, r, c, s, o), h = await this._buildStringToSign(i, l), d = await this._calculateSignature(i, h), g = this._buildAuthorizationHeader(i, s, d);\n return n[J] = g, { url: a.toString(), headers: n };\n }\n _buildCanonicalHeaders(e) {\n return Object.entries(e).map(([t, r]) => `${t.toLowerCase()}:${String(r).trim()}`).sort().join(`\n`);\n }\n async _buildCanonicalRequest(e, t, r, n, o, i) {\n return [e, t.pathname, this._buildCanonicalQueryString(r), `${n}\n`, o, i ? await U(i) : E].join(`\n`);\n }\n async _buildStringToSign(e, t) {\n let r = [e.slice(0, 8), this.region, O, K].join(\"/\");\n return [x, e, r, await U(t)].join(`\n`);\n }\n async _calculateSignature(e, t) {\n let r = await this._getSignatureKey(e.slice(0, 8));\n return A(r, t, \"hex\");\n }\n _buildAuthorizationHeader(e, t, r) {\n let n = [e.slice(0, 8), this.region, O, K].join(\"/\");\n return [`${x} Credential=${this.accessKeyId}/${n}`, `SignedHeaders=${t}`, `Signature=${r}`].join(\", \");\n }\n _filterIfHeaders(e) {\n let t = {}, r = {}, n = [\"if-match\", \"if-none-match\", \"if-modified-since\", \"if-unmodified-since\"];\n for (let [o, i] of Object.entries(e)) n.includes(o) ? r[o] = i : t[o] = i;\n return { filteredOpts: t, conditionalHeaders: r };\n }\n async list(e = \"/\", t = \"\", r = 1e3, n = \"GET\", o = {}) {\n this._checkDelimiter(e), this._checkPrefix(t), this._checkMaxKeys(r), this._checkMethodHeadnGet(n), this._checkOpts(o), this._log(\"info\", `Listing objects in ${t}`);\n let i = { \"list-type\": v, \"max-keys\": String(r), ...o };\n t.length > 0 && (i.prefix = t);\n let a = { [m]: w, [f]: E }, c = e === \"/\" ? e : q(e), { url: s, headers: l } = await this._sign(\"GET\", c, i, a, \"\"), h = `${s}?${new URLSearchParams(i)}`, d = await this._sendRequest(h, \"GET\", l), g = await d.text();\n if (n === \"HEAD\") {\n let R = d.headers.get(T), S = d.headers.get(C), Y = d.headers.get(P);\n return { size: R ? +R : void 0, mtime: S ? new Date(S) : void 0, ETag: Y || void 0 };\n }\n let _ = b(g), I = _.listBucketResult || _.error || _;\n return I.contents || I;\n }\n async listMultiPartUploads(e = \"/\", t = \"\", r = \"GET\", n = {}) {\n var o, i, a;\n this._checkDelimiter(e), this._checkPrefix(t), this._checkMethodHeadnGet(r), this._checkOpts(n), this._log(\"info\", `Listing multipart uploads in ${t}`);\n let c = { uploads: \"\", ...n }, s = { [m]: w, [f]: E }, l = e === \"/\" ? e : q(e), { url: h, headers: d } = await this._sign(\"GET\", l, c, s, \"\"), g = `${h}?${new URLSearchParams(c)}`, _ = await this._sendRequest(g, \"GET\", d), I = await _.text();\n if (r === \"HEAD\") return { size: +((o = _.headers.get(T)) !== null && o !== void 0 ? o : \"0\"), mtime: new Date((i = _.headers.get(C)) !== null && i !== void 0 ? i : \"\"), ETag: (a = _.headers.get(P)) !== null && a !== void 0 ? a : \"\" };\n let R = b(I), S = R.listMultipartUploadsResult || R.error || R;\n return S.uploads || S;\n }\n async get(e, t = {}) {\n this._checkKey(e), this._log(\"info\", `Getting object ${e}`);\n let { filteredOpts: r, conditionalHeaders: n } = this._filterIfHeaders(t), o = { [m]: w, [f]: E, ...n }, i = y(e), { url: a, headers: c } = await this._sign(\"GET\", i, r, o, \"\"), s = await this._sendRequest(a, \"GET\", c, \"\", [200, 404, 412, 304]);\n if (s.status === 404 || s.status === 412 || s.status === 304) return this._log(\"error\", `Failed to get object. Status: ${s.status}`), null;\n if (!s.ok) throw this._log(\"error\", `Failed to get object. Status: ${s.status}`), new Error(`Failed to get object. Status: ${s.status}`);\n return s.text();\n }\n async getObjectWithETag(e, t = {}) {\n this._checkKey(e), this._log(\"info\", `Getting object ${e}`);\n let { filteredOpts: r, conditionalHeaders: n } = this._filterIfHeaders(t), o = { [m]: w, [f]: E, ...n }, i = y(e), { url: a, headers: c } = await this._sign(\"GET\", i, r, o, \"\");\n try {\n let s = await this._sendRequest(a, \"GET\", c, \"\", [200, 404, 412, 304]);\n if (s.status === 404 || s.status === 412 || s.status === 304) return this._log(\"error\", `Failed to get object. Status: ${s.status}`), { etag: null, data: null };\n if (!s.ok) throw this._log(\"error\", `Failed to get object. Status: ${s.status}`), new Error(`Failed to get object. Status: ${s.status}`);\n let l = s.headers.get(\"etag\");\n if (!l) throw new Error(\"ETag not found in response headers\");\n let h = await s.text();\n return { etag: H(l), data: h };\n } catch (s) {\n throw this._log(\"error\", `Error getting object ${e} with ETag: ${s}`), s;\n }\n }\n async getEtag(e, t = {}) {\n this._checkKey(e), this._log(\"info\", `Getting etag object ${e}`);\n let { filteredOpts: r, conditionalHeaders: n } = this._filterIfHeaders(t), o = { [m]: w, [f]: E, ...n }, i = y(e), { url: a, headers: c } = await this._sign(\"HEAD\", i, r, o, \"\"), s = await this._sendRequest(a, \"HEAD\", c, \"\", [200, 412, 304]);\n if (this._log(\"info\", `Response status: ${s.status, s.statusText}`), s.status === 412 || s.status === 304) return null;\n let l = s.headers.get(\"etag\");\n if (!l) throw this._log(\"error\", \"ETag not found in response headers\"), new Error(\"ETag not found in response headers\");\n return H(l);\n }\n async getResponse(e, t = true, r = 0, n = this.maxRequestSizeInBytes, o = {}) {\n this._checkKey(e);\n let { filteredOpts: i, conditionalHeaders: a } = this._filterIfHeaders({ ...o }), c = { [m]: w, [f]: E, ...t ? {} : { range: `bytes=${r}-${n - 1}` }, ...a }, s = y(e), { url: l, headers: h } = await this._sign(\"GET\", s, i, c, \"\"), d = `${l}?${new URLSearchParams(i)}`;\n return this._sendRequest(d, \"GET\", h);\n }\n async put(e, t) {\n if (this._checkKey(e), !(t instanceof Buffer || typeof t == \"string\")) throw this._log(\"error\", D), new TypeError(D);\n this._log(\"info\", `Uploading object ${e}`);\n let r = typeof t == \"string\" ? Buffer.byteLength(t) : t.length, n = { [T]: r }, o = y(e), { url: i, headers: a } = await this._sign(\"PUT\", o, {}, n, t);\n return await this._sendRequest(i, \"PUT\", a, t);\n }\n async getMultipartUploadId(e, t = W) {\n if (this._checkKey(e), typeof t != \"string\") throw this._log(\"error\", `${u}fileType must be a string`), new TypeError(`${u}fileType must be a string`);\n this._log(\"info\", `Initiating multipart upload for object ${e}`);\n let r = { uploads: \"\" }, n = { [m]: t, [f]: E }, o = y(e), { url: i, headers: a } = await this._sign(\"POST\", o, r, n, \"\"), c = `${i}?${new URLSearchParams(r)}`, l = await (await this._sendRequest(c, \"POST\", a)).text(), h = b(l);\n if (typeof h == \"object\" && h !== null && \"error\" in h && typeof h.error == \"object\" && h.error !== null && \"message\" in h.error) {\n let d = String(h.error.message);\n throw this._log(\"error\", `${u}Failed to abort multipart upload: ${d}`), new Error(`${u}Failed to abort multipart upload: ${d}`);\n }\n if (typeof h == \"object\" && h !== null) {\n if (!h.initiateMultipartUploadResult || !h.initiateMultipartUploadResult.uploadId) throw this._log(\"error\", `${u}Failed to create multipart upload: no uploadId in response`), new Error(`${u}Failed to create multipart upload: Missing upload ID in response`);\n return h.initiateMultipartUploadResult.uploadId;\n } else throw this._log(\"error\", `${u}Failed to create multipart upload: unexpected response format`), new Error(`${u}Failed to create multipart upload: Unexpected response format`);\n }\n async uploadPart(e, t, r, n, o = {}) {\n this._validateUploadPartParams(e, t, r, n, o);\n let i = { uploadId: r, partNumber: n, ...o }, a = { [T]: t.length }, c = y(e), { url: s, headers: l } = await this._sign(\"PUT\", c, i, a, t), h = `${s}?${new URLSearchParams(i)}`, d = await this._sendRequest(h, \"PUT\", l, t), g = H(d.headers.get(\"etag\") || \"\");\n return { partNumber: n, ETag: g };\n }\n _validateUploadPartParams(e, t, r, n, o) {\n if (this._checkKey(e), !(t instanceof Buffer || typeof t == \"string\")) throw this._log(\"error\", D), new TypeError(D);\n if (typeof r != \"string\" || r.trim().length === 0) throw this._log(\"error\", $), new TypeError($);\n if (!Number.isInteger(n) || n <= 0) throw this._log(\"error\", `${u}partNumber must be a positive integer`), new TypeError(`${u}partNumber must be a positive integer`);\n this._checkOpts(o);\n }\n async completeMultipartUpload(e, t, r) {\n if (this._checkKey(e), typeof t != \"string\" || t.trim().length === 0) throw this._log(\"error\", $), new TypeError($);\n if (!Array.isArray(r) || r.length === 0) throw this._log(\"error\", L), new TypeError(L);\n if (!r.every((_) => typeof _.partNumber == \"number\" && typeof _.ETag == \"string\")) throw this._log(\"error\", k), new TypeError(k);\n this._log(\"info\", `Complete multipart upload ${t} for object ${e}`);\n let n = { uploadId: t }, o = this._buildCompleteMultipartUploadXml(r), i = { [m]: M, [T]: Buffer.byteLength(o).toString(), [f]: await U(o) }, a = y(e), { url: c, headers: s } = await this._sign(\"POST\", a, n, i, o), l = `${c}?${new URLSearchParams(n)}`, d = await (await this._sendRequest(l, \"POST\", s, o)).text(), g = b(d);\n if (typeof g == \"object\" && g !== null && \"error\" in g && typeof g.error == \"object\" && g.error !== null && \"message\" in g.error) {\n let _ = String(g.error.message);\n throw this._log(\"error\", `${u}Failed to abort multipart upload: ${_}`), new Error(`${u}Failed to abort multipart upload: ${_}`);\n }\n return g.completeMultipartUploadResult;\n }\n async abortMultipartUpload(e, t) {\n if (this._checkKey(e), typeof t != \"string\" || t.trim().length === 0) throw this._log(\"error\", $), new TypeError($);\n this._log(\"info\", `Aborting multipart upload ${t} for object ${e}`);\n let r = { uploadId: t }, n = { [m]: M, [f]: E };\n try {\n let o = y(e), { url: i, headers: a } = await this._sign(\"DELETE\", o, r, n, \"\"), c = `${i}?${new URLSearchParams(r)}`, s = await this._sendRequest(c, \"DELETE\", a);\n if (s.ok) {\n let l = await s.text(), h = b(l);\n if (typeof h == \"object\" && h !== null && \"error\" in h && typeof h.error == \"object\" && h.error !== null && \"message\" in h.error) {\n let d = String(h.error.message);\n throw this._log(\"error\", `${u}Failed to abort multipart upload: ${d}`), new Error(`${u}Failed to abort multipart upload: ${d}`);\n }\n return { status: \"Aborted\", key: e, uploadId: t, response: h };\n } else throw this._log(\"error\", `${u}Abort request failed with status ${s.status}`), new Error(`${u}Abort request failed with status ${s.status}`);\n } catch (o) {\n let i = o instanceof Error ? o.message : String(o);\n throw this._log(\"error\", `${u}Failed to abort multipart upload for key ${e}: ${i}`), new Error(`${u}Failed to abort multipart upload for key ${e}: ${i}`);\n }\n }\n _buildCompleteMultipartUploadXml(e) {\n return `\n \n ${e.map((t) => `\n \n ${t.partNumber}\n ${t.ETag}\n \n `).join(\"\")}\n \n `;\n }\n async delete(e) {\n this._checkKey(e), this._log(\"info\", `Deleting object ${e}`);\n let t = { [m]: w, [f]: E }, r = y(e), { url: n, headers: o } = await this._sign(\"DELETE\", r, {}, t, \"\"), i = await this._sendRequest(n, \"DELETE\", o);\n return i.status === 204 || i.status === 200;\n }\n async _sendRequest(e, t, r, n, o = []) {\n this._log(\"info\", `Sending ${t} request to ${e}, headers: ${JSON.stringify(r)}`);\n let i = await fetch(e, { method: t, headers: r, body: [\"GET\", \"HEAD\"].includes(t) ? void 0 : n, signal: this.requestAbortTimeout !== void 0 ? AbortSignal.timeout(this.requestAbortTimeout) : void 0 });\n return !i.ok && !o.includes(i.status) && await this._handleErrorResponse(i), i;\n }\n async _handleErrorResponse(e) {\n let t = await e.text(), r = e.headers.get(\"x-amz-error-code\") || \"Unknown\", n = e.headers.get(\"x-amz-error-message\") || e.statusText;\n throw this._log(\"error\", `${u}Request failed with status ${e.status}: ${r} - ${n},err body: ${t}`), new Error(`${u}Request failed with status ${e.status}: ${r} - ${n}, err body: ${t}`);\n }\n _buildCanonicalQueryString(e) {\n return Object.keys(e).length < 1 ? \"\" : Object.keys(e).sort().map((t) => `${encodeURIComponent(t)}=${encodeURIComponent(e[t])}`).join(\"&\");\n }\n async _getSignatureKey(e) {\n let t = await A(`AWS4${this.secretAccessKey}`, e), r = await A(t, this.region), n = await A(r, O);\n return A(n, K);\n }\n};\nvar U = async (p) => {\n let e = Q(\"sha256\");\n return e.update(p), e.digest(\"hex\");\n};\nvar A = async (p, e, t) => {\n let r = z(\"sha256\", p);\n return r.update(e), r.digest(t);\n};\nvar H = (p) => {\n let e = { '\"': \"\", \""\": \"\", \""\": \"\", \""\": \"\", \""\": \"\" };\n return p.replace(/^(\"|"|")|(\"|"|")$/g, (t) => e[t]);\n};\nvar b = (p) => {\n let e = (o) => o.replace(/"/g, '\"').replace(/'/g, \"'\").replace(/</g, \"<\").replace(/>/g, \">\").replace(/&/g, \"&\"), t = {}, r = /<(\\w)([-\\w]+)(?:\\/|[^>]*>((?:(?!<\\1)[\\s\\S])*)<\\/\\1\\2)>/gm, n;\n for (; n = r.exec(p); ) {\n let [, o, i, a] = n, c = o.toLowerCase() + i, s = a != null ? b(a) : true;\n typeof s == \"string\" ? t[c] = H(e(s)) : Array.isArray(t[c]) ? t[c].push(s) : t[c] = t[c] != null ? [t[c], s] : ne[c] ? [s] : s;\n }\n return Object.keys(t).length ? t : e(p);\n};\n\n// src/lowstorage.ts\nvar import_avsc = __toESM(require_lib(), 1);\n\n// src/errors.ts\nvar lowstorage_ERROR_CODES = {\n MISSING_ARGUMENT: \"MISSING_ARGUMENT\",\n COLLECTION_EXISTS: \"COLLECTION_EXISTS\",\n CREATE_COLLECTION_ERROR: \"CREATE_COLLECTION_ERROR\",\n RENAME_COLLECTION_ERROR: \"RENAME_COLLECTION_ERROR\",\n REMOVE_COLLECTION_ERROR: \"REMOVE_COLLECTION_ERROR\",\n UPDATE_COLLECTION_SCHEMA_ERROR: \"UPDATE_COLLECTION_SCHEMA_ERROR\",\n COLLECTION_NOT_FOUND: \"COLLECTION_NOT_FOUND\",\n SCHEMA_VALIDATION_ERROR: \"SCHEMA_VALIDATION_ERROR\",\n DOCUMENT_VALIDATION_ERROR: \"DOCUMENT_VALIDATION_ERROR\",\n S3_OPERATION_ERROR: \"S3_OPERATION_ERROR\",\n FIND_ERROR: \"FIND_ERROR\",\n FIND_ONE_ERROR: \"FIND_ONE_ERROR\",\n SAVE_DATA_ERROR: \"SAVE_DATA_ERROR\",\n INSERT_ERROR: \"INSERT_ERROR\",\n UPDATE_ERROR: \"UPDATE_ERROR\",\n UPDATE_ONE_ERROR: \"UPDATE_ONE_ERROR\",\n DELETE_ERROR: \"DELETE_ERROR\",\n COUNT_ERROR: \"COUNT_ERROR\",\n UNKNOWN_ERROR: \"UNKNOWN_ERROR\"\n};\nvar lowstorageError = class extends Error {\n constructor(message, code = lowstorage_ERROR_CODES.UNKNOWN_ERROR) {\n super(`lowstorageError: ${message} :: code: ${code}`);\n this.name = this.constructor.name;\n this.code = code;\n Error.captureStackTrace(this, this.constructor);\n }\n};\nvar SchemaValidationError = class extends lowstorageError {\n constructor(message, code = lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR) {\n super(message, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR);\n }\n};\nvar DocumentValidationError = class extends lowstorageError {\n constructor(message, code = lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR) {\n super(message, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR);\n }\n};\nvar S3OperationError = class extends lowstorageError {\n constructor(message, operation) {\n super(`S3 ${operation} operation failed: ${message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n};\n\n// src/helpers.ts\nimport { randomUUID } from \"node:crypto\";\nvar matchesQuery = (document, query) => {\n return Object.keys(query).every((key) => document[key] === query[key]);\n};\nvar generateUUID = async () => {\n if (typeof randomUUID !== \"undefined\" && typeof randomUUID === \"function\") {\n return randomUUID();\n }\n if (typeof crypto !== \"undefined\" && typeof crypto === \"object\" && typeof crypto.randomUUID === \"function\") {\n return crypto.randomUUID();\n }\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, function(c) {\n var r = Math.random() * 16 | 0, v2 = c === \"x\" ? r : r & 3 | 8;\n return v2.toString(16);\n });\n};\nvar ensureIdFieldInSchema = (schema) => {\n const idField = {\n name: \"_id\",\n type: \"string\",\n size: 16,\n logicalType: \"UUID\"\n };\n if (typeof schema === \"undefined\" || schema === null) {\n return schema;\n }\n if (\"type\" in schema && schema.type === \"record\" && \"fields\" in schema && Array.isArray(schema.fields)) {\n const hasIdField = schema.fields.some((field) => field.name === \"_id\");\n if (!hasIdField) {\n schema.fields.unshift(idField);\n }\n } else if (\"type\" in schema && schema.type === \"array\" && \"items\" in schema && schema.items !== null && typeof schema.items === \"object\" && \"type\" in schema.items && schema.items.type === \"record\" && \"fields\" in schema.items && Array.isArray(schema.items.fields)) {\n const hasIdField = schema.items.fields.some((field) => field.name === \"_id\");\n if (!hasIdField) {\n schema.items.fields.unshift(idField);\n }\n }\n return schema;\n};\n\n// src/lowstorage.ts\nvar MODULE_NAME = \"lowstorage\";\nvar DEFAULT_DELIMITER = \"/\";\nvar PROJECT_DIR_PREFIX = \"lowstorage\";\nvar COL_SUFFIX = \".avro\";\nvar CHUNG_1MB = 1024 * 1024;\nvar CHUNG_5MB = 5 * CHUNG_1MB;\nvar EMPTY_DATA = Buffer.from(\"\", \"utf8\");\nvar errorValidationFn = (errorCode = lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR) => {\n throw new DocumentValidationError(`${MODULE_NAME}: Invalid document or schema ${errorCode}`);\n};\nvar _hasColName = (colName = \"\") => {\n if (colName.trim() === \"\" || colName === null || typeof colName === \"undefined\" || colName.length > 255 || colName === null) {\n throw new lowstorageError(`${MODULE_NAME}: Collection name is required, null or too long`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n }\n};\nvar lowstorage = class {\n constructor(options) {\n this._checkArgs = (args) => {\n const requiredFields = [\"accessKeyId\", \"secretAccessKey\", \"endpoint\", \"bucketName\"];\n for (const field of requiredFields) {\n if (!args[field]) {\n throw new lowstorageError(`${MODULE_NAME}: ${field} is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n }\n }\n };\n /**\n * Get the S3 instance associated with the lowstorage instance.\n * @returns {S3} The S3 instance. Use this to perform S3 operations. Check for ultralight-s3 for more details.\n */\n this.s3 = () => {\n return this._s3;\n };\n this._checkArgs(options);\n this._schemas = /* @__PURE__ */ new Map();\n this._s3 = new N(options);\n this._dirPrefix = options.dirPrefix || PROJECT_DIR_PREFIX;\n this._avroParse = import_avsc.Type;\n }\n /**\n * List all collections.\n * @returns {Promise} An array of collection names.\n * @throws {S3OperationError} If there's an error during S3 operation.\n */\n async listCollections() {\n try {\n const listed = await this._s3.list(DEFAULT_DELIMITER, this._dirPrefix);\n if (Array.isArray(listed)) {\n return listed.map((entry) => entry.key.slice(this._dirPrefix.length + 1, -COL_SUFFIX.length));\n } else if (typeof listed === \"object\" && listed !== null && \"keyCount\" in listed && listed.keyCount === \"0\") {\n return [];\n }\n return [];\n } catch (error) {\n throw new S3OperationError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n }\n /**\n * Check if a collection exists.\n * @param {string} colName - The name of the collection.\n * @returns {Promise} True if the collection exists, false otherwise.\n * @throws {lowstorageError} If there's an error.\n */\n async collectionExists(colName = \"\") {\n try {\n _hasColName(colName);\n const exists = await this._s3.fileExists(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`);\n return !!exists;\n } catch (error) {\n if (error.message.includes(\"Not Found\")) {\n return false;\n }\n throw new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND);\n }\n }\n /**\n * Create a new collection.\n * @param {string} colName - The name of the collection.\n * @param {Object} [schema] - The schema for the collection.\n * @param {Array} [data=[]] - The initial data for the collection.\n * @returns {Promise} A Promise that resolves to a Collection object.\n * @throws {lowstorageError} If there's an error.\n */\n async createCollection(colName = \"\", schema, data = []) {\n try {\n _hasColName(colName);\n const exists = await this.collectionExists(colName);\n if (!exists) {\n if (typeof schema !== \"undefined\" && schema !== null) {\n try {\n const type = this._avroParse.forSchema(schema);\n if (!type) {\n throw new SchemaValidationError(\n `${MODULE_NAME}: Schema is invalid: ${schema} ${lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR}`\n );\n }\n } catch (error) {\n throw new SchemaValidationError(`${MODULE_NAME}: Schema is invalid: ${schema}`, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR);\n }\n }\n if (data.length > 0 && schema) {\n const wrapperType = this._avroParse.forSchema({ type: \"array\", items: schema });\n await this._s3.put(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`, wrapperType.toBuffer(data));\n } else {\n await this._s3.put(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`, EMPTY_DATA);\n }\n return this.collection(colName, schema, false);\n }\n throw new lowstorageError(`${MODULE_NAME}: Collection ${colName} already exists`, lowstorage_ERROR_CODES.COLLECTION_EXISTS);\n } catch (error) {\n if (error instanceof lowstorageError) {\n throw error;\n }\n throw new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.CREATE_COLLECTION_ERROR);\n }\n }\n /**\n * Remove a collection.\n * @param {string} colName - The name of the collection.\n * @returns {Promise} A Promise that resolves to true if the collection is removed, false otherwise.\n * @throws {lowstorageError} If there's an error.\n */\n async removeCollection(colName = \"\") {\n try {\n _hasColName(colName);\n const exists = await this.collectionExists(colName);\n if (exists) {\n await this._s3.delete(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`);\n const exists2 = await this.collectionExists(colName);\n if (typeof exists2 === \"boolean\") {\n if (!exists2) {\n this._schemas.delete(colName);\n return true;\n }\n throw new lowstorageError(`${MODULE_NAME}: Failed to delete collection ${colName}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n throw new S3OperationError(`${MODULE_NAME}: Failed to delete collection ${colName}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n throw new lowstorageError(`${MODULE_NAME}: Collection ${colName} does not exist`, lowstorage_ERROR_CODES.REMOVE_COLLECTION_ERROR);\n } catch (error) {\n if (error instanceof S3OperationError) {\n throw error;\n }\n throw new lowstorageError(\n `${MODULE_NAME}: Failed to remove collection: ${error.message}`,\n lowstorage_ERROR_CODES.REMOVE_COLLECTION_ERROR\n );\n }\n }\n /**\n * Get or create a collection.\n * @param {string} colName - The name of the collection.\n * @param {Object} [schema] - The schema for the collection.\n * @param {boolean} [autoCreate=true] - Whether to automatically create the collection if it doesn't exist.\n * @returns {Promise} A Promise that resolves to a Collection object.\n * @throws {lowstorageError} If there's an error.\n */\n async collection(colName = \"\", schema, autoCreate = true) {\n try {\n _hasColName(colName);\n const colPath = `${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`;\n const exists = await this._s3.fileExists(colPath);\n if (!exists) {\n if (!autoCreate) {\n throw new lowstorageError(`${MODULE_NAME}: Collection ${colName} does not exist`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND);\n }\n await this._s3.put(colPath, EMPTY_DATA);\n }\n const colSchema = schema || this._schemas.get(colName) || void 0;\n return new Collection(colName, colSchema, this._s3, this._dirPrefix);\n } catch (error) {\n if (error.message.includes(\"unknown type\")) {\n throw new SchemaValidationError(\n `${MODULE_NAME}: Schema input is invalid: ${error.message}`,\n lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR\n );\n }\n throw new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND);\n }\n }\n};\nvar Collection = class _Collection {\n constructor(colName = \"\", schema, s3, dirPrefix = PROJECT_DIR_PREFIX, safeWrite = false, chunkSize = CHUNG_5MB) {\n this.getProps = () => ({\n colName: this._colName,\n s3: this._s3,\n schema: this._schema,\n avroParse: this._avroParse,\n avroType: this._avroType,\n dirPrefix: this._dirPrefix,\n safeWrite: this._safeWrite,\n chunkSize: this._chunkSize\n });\n this.setProps = (props) => {\n this._colName = props.colName;\n this._schema = props.schema;\n this._s3 = props.s3;\n this._avroParse = props.avroParse;\n this._avroType = props.avroType;\n this._dirPrefix = props.dirPrefix;\n this._safeWrite = props.safeWrite;\n this._chunkSize = props.chunkSize;\n };\n this.setSafeWrite = (safeWrite) => {\n this._safeWrite = safeWrite;\n };\n this.getSafeWrite = () => {\n return this._safeWrite;\n };\n this.getAvroSchema = () => {\n return this._schema;\n };\n this.setAvroSchema = (schema) => {\n try {\n this._schema = ensureIdFieldInSchema(schema);\n this._avroType = typeof schema === \"undefined\" ? null : this._avroParse.forSchema(schema);\n } catch (error) {\n throw new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR);\n }\n };\n this.inferAvroSchema = (data, type = \"record\") => {\n if (Array.isArray(data)) {\n data = data[0];\n }\n const inferedType = this._avroParse.forValue(data);\n const schema = inferedType.schema();\n return ensureIdFieldInSchema(schema);\n };\n this._colName = colName.trim();\n this._s3 = s3;\n this._schema = ensureIdFieldInSchema(schema);\n this._dirPrefix = dirPrefix;\n this._safeWrite = safeWrite;\n this._chunkSize = chunkSize || CHUNG_5MB;\n this._s3.setMaxRequestSizeInBytes(this._chunkSize);\n this._avroParse = import_avsc.Type;\n this._lastETag = \"\";\n this._dataCache = [];\n this._avroType = typeof schema === \"undefined\" ? null : this._avroParse.forSchema(schema);\n this._key = `${this._dirPrefix}${DEFAULT_DELIMITER}${this._colName}${COL_SUFFIX}`;\n }\n async _loadData() {\n try {\n if (this._avroType === null || typeof this._avroType === \"undefined\") {\n throw new lowstorageError(\n `${MODULE_NAME}: Missing type definition. Configure before operations `,\n lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR\n );\n }\n const { etag, data } = await this._s3.getObjectWithETag(this._key, { \"if-none-match\": this._lastETag });\n if (data === null) {\n return this._dataCache;\n }\n this._lastETag = etag === null ? this._lastETag : etag;\n const wrapperType = this._avroParse.forSchema({ type: \"array\", items: this._avroType });\n if (data.length < this._chunkSize) {\n this._dataCache = data.length > 0 ? wrapperType.fromBuffer(Buffer.from(data, \"utf8\")) : [];\n return this._dataCache;\n }\n let offset = this._chunkSize;\n let bufferArr = [Buffer.from(data, \"utf8\")];\n let repeat = true;\n while (repeat) {\n const nextDataResponse = await this._s3.getResponse(this._key, false, offset, offset + this._chunkSize);\n const nextDataBody = await nextDataResponse.text();\n bufferArr.push(Buffer.from(nextDataBody, \"utf8\"));\n offset += this._chunkSize;\n const contentLength = parseInt(nextDataResponse.headers.get(\"content-length\") || nextDataBody.length.toString());\n if (contentLength < this._chunkSize) {\n repeat = false;\n }\n }\n const bufferedData = Buffer.concat(bufferArr);\n this._dataCache = wrapperType.fromBuffer(bufferedData);\n return this._dataCache;\n } catch (error) {\n if (error.toString().indexOf(\"status 404: Unknown - Not Found\") > -1) {\n this._dataCache = [];\n return this._dataCache;\n }\n throw new S3OperationError(`${MODULE_NAME}: Failed to load data: ${error.message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n }\n async _saveData(data) {\n try {\n if (this._avroType === null || typeof this._avroType === \"undefined\") {\n throw new lowstorageError(\n `${MODULE_NAME}: Missing type definition. Configure before operations `,\n lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR\n );\n }\n const wrapperType = this._avroParse.forSchema({ type: \"array\", items: this._avroType });\n const dataBuffer = data.length > 0 ? wrapperType.toBuffer(data) : EMPTY_DATA;\n if (this._safeWrite && this._lastETag !== \"\") {\n const currentETag = await this._s3.getEtag(this._key);\n if (currentETag !== null && currentETag !== this._lastETag) {\n return false;\n }\n }\n const resp = await this._s3.put(this._key, dataBuffer);\n if (typeof resp === \"object\" && \"status\" in resp && resp.status !== 200) {\n throw new S3OperationError(`${MODULE_NAME}: Failed to save data`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n const newETag = resp.headers?.get(\"etag\") || \"\";\n if (newETag && newETag.length > 0) {\n this._lastETag = this._s3.sanitizeETag(newETag);\n this._dataCache = data;\n }\n return true;\n } catch (error) {\n if (error instanceof S3OperationError) {\n throw error;\n }\n throw new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.SAVE_DATA_ERROR);\n }\n }\n /**\n * Insert a document into the collection.\n * @param {Object|Array} doc - The document to insert.\n * @param {Object} [schema=undefined] - The schema for the document.\n * @returns {Promise} A Promise that resolves to the array of inserted document(s).\n * @throws {lowstorageError} If there's an error.\n */\n async insert(doc, schema) {\n try {\n if (doc === void 0 || doc === null) {\n throw new lowstorageError(`${MODULE_NAME}: Document is required for insert`, lowstorage_ERROR_CODES.INSERT_ERROR);\n }\n if (typeof doc !== \"object\" && !Array.isArray(doc)) {\n throw new DocumentValidationError(\n `${MODULE_NAME}: Document must be an object or an array`,\n lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR\n );\n }\n const items = !Array.isArray(doc) ? [doc] : doc;\n const schemaWithId = schema ? ensureIdFieldInSchema(schema) : this._schema || this.inferAvroSchema(items[0]);\n const avroType = this._avroParse.forSchema(schemaWithId);\n if (!avroType) {\n throw new SchemaValidationError(\n `${MODULE_NAME}: Schema is required - Pass a schema to the insert method`,\n lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR\n );\n }\n this._avroType = avroType;\n const data = await this._loadData();\n for (let item of items) {\n if (typeof item !== \"object\" || item === null) {\n throw new DocumentValidationError(\n `${MODULE_NAME}: Invalid input: input must be an object or an array of objects`,\n lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR\n );\n }\n item._id = item._id || await generateUUID();\n const validBuffer = this._avroType.isValid(item, {\n errorHook: errorValidationFn,\n noUndeclaredFields: true\n });\n if (validBuffer === true) {\n data.push(item);\n } else {\n throw new DocumentValidationError(`${MODULE_NAME}: Invalid document or schema`, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR);\n }\n }\n const success = await this._saveData(data);\n if (!success) {\n throw new S3OperationError(`${MODULE_NAME}: Failed to insert document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n this.setAvroSchema(schemaWithId);\n return items;\n } catch (error) {\n if (error.message.includes(\"unknown type\")) {\n throw new SchemaValidationError(\n `${MODULE_NAME}: Schema input is invalid: ${error.message}`,\n lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR\n );\n }\n if (error instanceof lowstorageError) {\n throw error;\n }\n throw new lowstorageError(`${MODULE_NAME} Insert operation failed: ${error.message}`, lowstorage_ERROR_CODES.INSERT_ERROR);\n }\n }\n /**\n * Find documents in the collection.\n * @param {Object} [query={}] - The query to filter documents.\n * @param {Object} [options={}] - The options for pagination.\n * @param {number} [options.skip=0] - The number of documents to skip. Default is 0.\n * @param {number} [options.limit=undefined] - The maximum number of documents to return. Default is undefined, which means no limit.\n * @returns {Promise} A Promise that resolves to an array of matching documents.\n * @throws {lowstorageError} If there's an error.\n */\n async find(query = {}, options = {}) {\n try {\n if (query === void 0 || query === null) {\n throw new lowstorageError(`${MODULE_NAME}: Query is required for update`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n }\n const data = await this._loadData();\n const start = options.skip !== void 0 ? parseInt(String(options.skip), 10) : 0;\n const end = options.limit !== void 0 ? start + parseInt(String(options.limit), 10) : void 0;\n const filteredData = data.filter((doc) => matchesQuery(doc, query)).slice(start, end);\n return filteredData;\n } catch (error) {\n throw new lowstorageError(`${MODULE_NAME}: Find operation failed: ${error.message}`, lowstorage_ERROR_CODES.FIND_ERROR);\n }\n }\n /**\n * Find the first document in the collection that matches the query.\n * @param {Object} [query={}] - The query to filter documents.\n * @returns {Promise} A Promise that resolves to the first matching document or null if no match is found.\n * @throws {lowstorageError} If there's an error.\n */\n async findOne(query = {}) {\n try {\n if (query === null) {\n throw new lowstorageError(`${MODULE_NAME}: Query cannot be null`, lowstorage_ERROR_CODES.INVALID_ARGUMENT);\n }\n const result = await this.find(query, { limit: 1 });\n return result[0] || null;\n } catch (error) {\n if (error instanceof lowstorageError) {\n throw error;\n }\n throw new lowstorageError(`${MODULE_NAME}: FindOne operation failed: ${error.message}`, lowstorage_ERROR_CODES.FIND_ONE_ERROR);\n }\n }\n /**\n * Update a single document in the collection that matches the query.\n * @param {Object} [query={}] - The query to filter the document to update.\n * @param {Object} [update={}] - The update operations to apply to the matching document.\n * @returns {Promise} A Promise that resolves to number of documents updated.\n * @throws {lowstorageError} If the updateOne operation fails.\n * @throws {SchemaValidationError} If the schema is not defined for the collection.\n * @throws {DocumentValidationError} If the updated document is invalid.\n * @throws {S3OperationError} If the S3 operation fails.\n */\n async update(query = {}, update = {}, options = {}) {\n try {\n if (query === void 0 || query === null || update === void 0 || update === null) {\n throw new lowstorageError(\n `${MODULE_NAME}: Query and update values are required for update`,\n lowstorage_ERROR_CODES.MISSING_ARGUMENT\n );\n }\n if (!this._avroType) {\n throw new SchemaValidationError(\n `${MODULE_NAME}: Schema is not defined for this collection`,\n lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR\n );\n }\n const data = await this._loadData();\n if (data.length === 0) return 0;\n let updatedCount = 0;\n for (let i = 0; i < data.length; i++) {\n if (matchesQuery(data[i], query)) {\n const updatedDoc = { ...data[i], ...update };\n const isValid = this._avroType.isValid(updatedDoc, {\n errorHook: errorValidationFn,\n noUndeclaredFields: true\n });\n if (isValid === true) {\n data[i] = updatedDoc;\n updatedCount++;\n } else {\n throw new DocumentValidationError(\n `${MODULE_NAME}: Invalid document or schema`,\n lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR\n );\n }\n }\n }\n if (updatedCount > 0) {\n const success = await this._saveData(data);\n if (!success) {\n throw new S3OperationError(`${MODULE_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n } else if (options && \"upsert\" in options && options.upsert) {\n const success = await this.insert(update);\n if (!success) {\n throw new S3OperationError(`${MODULE_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n updatedCount = 1;\n }\n return updatedCount;\n } catch (error) {\n if (error instanceof S3OperationError) {\n throw error;\n }\n throw new lowstorageError(`${MODULE_NAME}: Update operation failed: ${error.message}`, lowstorage_ERROR_CODES.UPDATE_ERROR);\n }\n }\n /**\n * Update a single document in the collection that matches the query.\n * @param {Object} [query={}] - The query to filter the document to update.\n * @param {Object} [update={}] - The update operations to apply to the matching document.\n * @returns {Promise} A Promise that resolves to 1 if a document was updated, 0 otherwise.\n /**\n * Update a single document in the collection that matches the query.\n * @throws {lowstorageError} If the updateOne operation fails.\n * @throws {SchemaValidationError} If the schema is not defined for the collection.\n * @throws {DocumentValidationError} If the updated document is invalid.\n * @throws {S3OperationError} If the S3 operation fails.\n */\n async updateOne(query = {}, update = {}, options = {}) {\n try {\n if (query === void 0 || query === null || update === void 0 || update === null) {\n throw new lowstorageError(`${MODULE_NAME}: Query is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n }\n if (!this._avroType) {\n throw new SchemaValidationError(\n `${MODULE_NAME}: Schema is not defined for this collection`,\n lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR\n );\n }\n const data = await this._loadData();\n if (data.length === 0) return 0;\n const docIndex = data.findIndex((doc) => matchesQuery(doc, query));\n if (docIndex !== -1) {\n const updatedDoc = { ...data[docIndex], ...update };\n const isValid = this._avroType.isValid(updatedDoc, {\n errorHook: errorValidationFn,\n noUndeclaredFields: true\n });\n if (isValid === true) {\n data[docIndex] = updatedDoc;\n const success = await this._saveData(data);\n if (!success) {\n throw new S3OperationError(`${MODULE_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n return 1;\n } else {\n throw new DocumentValidationError(`${MODULE_NAME}: Invalid document or schema`, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR);\n }\n }\n if (options && \"upsert\" in options && options.upsert) {\n const success = await this.insert(update);\n if (!success) {\n throw new S3OperationError(`${MODULE_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n return 1;\n }\n return 0;\n } catch (error) {\n if (error instanceof lowstorageError) {\n throw error;\n }\n throw new lowstorageError(`${MODULE_NAME}: UpdateOne operation failed: ${error.message}`, lowstorage_ERROR_CODES.UPDATE_ONE_ERROR);\n }\n }\n /**\n * Delete documents from the collection.\n * @param {Object} [query={}] - The query to filter documents to delete.\n * @returns {Promise} A Promise that resolves to the number of documents deleted.\n * @throws {lowstorageError} If the delete operation fails.\n * @throws {S3OperationError} If the S3 operation fails.\n */\n async delete(query = {}) {\n try {\n if (query === void 0 || query === null) {\n throw new lowstorageError(`${MODULE_NAME}: Query is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n }\n const data = await this._loadData();\n if (data.length === 0) return 0;\n const initialLength = data.length;\n const newData = data.filter((doc) => !matchesQuery(doc, query));\n const success = await this._saveData(newData);\n if (!success) {\n throw new S3OperationError(`${MODULE_NAME}: Failed to delete document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n return initialLength - newData.length;\n } catch (error) {\n if (error instanceof S3OperationError) {\n throw error;\n }\n throw new lowstorageError(`${MODULE_NAME}: Delete operation failed: ${error.message}`, lowstorage_ERROR_CODES.DELETE_ERROR);\n }\n }\n /**\n * Delete all documents from the collection.\n * @returns {Promise} A Promise that resolves to the number of documents deleted.\n * @throws {lowstorageError} If the delete operation fails.\n * @throws {S3OperationError} If the S3 operation fails.\n */\n async deleteAll() {\n try {\n const data = await this._loadData();\n const initialLength = data.length;\n const success = await this._saveData([]);\n if (!success) {\n throw new S3OperationError(`${MODULE_NAME}: Failed to delete document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n return initialLength;\n } catch (error) {\n if (error instanceof S3OperationError) {\n throw error;\n }\n throw new lowstorageError(`${MODULE_NAME}: Delete operation failed: ${error.message}`, lowstorage_ERROR_CODES.DELETE_ERROR);\n }\n }\n /**\n * Count the number of documents in the collection.\n * @param {Object} [query={}] - The query to filter documents.\n * @returns {Promise} A Promise that resolves to the number of documents in the collection.\n * @throws {lowstorageError} If the count operation fails.\n */\n async count(query = {}) {\n try {\n const data = await this.find(query);\n return data.length;\n } catch (error) {\n throw new lowstorageError(`${MODULE_NAME}: Count operation failed: ${error.message}`, lowstorage_ERROR_CODES.COUNT_ERROR);\n }\n }\n async renameCollection(newColName, newSchema = this._schema) {\n try {\n _hasColName(newColName);\n const exists = await this._s3.fileExists(`${this._dirPrefix}${DEFAULT_DELIMITER}${newColName}${COL_SUFFIX}`);\n if (!!exists) {\n throw new lowstorageError(`${MODULE_NAME}: Collection ${newColName} already exists`, lowstorage_ERROR_CODES.COLLECTION_EXISTS);\n }\n const schema = newSchema || this.getAvroSchema();\n const data = await this._loadData();\n const createNew = new _Collection(newColName, schema, this._s3, this._dirPrefix, this._safeWrite, this._chunkSize);\n await createNew._saveData(data);\n await this._s3.delete(`${this._dirPrefix}${DEFAULT_DELIMITER}${this._colName}${COL_SUFFIX}`);\n return createNew;\n } catch (error) {\n if (error instanceof lowstorageError) {\n throw error;\n }\n throw new lowstorageError(\n `${MODULE_NAME}: Rename collection failed: ${error.message}`,\n lowstorage_ERROR_CODES.RENAME_COLLECTION_ERROR\n );\n }\n }\n};\nexport {\n lowstorage,\n lowstorageError,\n lowstorage_ERROR_CODES\n};\n\n"], - "mappings": "AAAA,OAAOA,OAAqB,SAC5B,OAAOC,OAAqB,SAC5B,OAAOC,OAAmB,OAC1B,OAAOC,OAAqB,SAC5B,OAAOC,OAAmB,OAC1B,OAAOC,OAAqB,SAC5B,OAAOC,OAAiB,KACxB,OAAOC,OAAmB,OA4xN1B,OAAS,cAAAC,OAAkB,cA1xN3B,IAAIC,GAAW,OAAO,OAClBC,GAAY,OAAO,eACnBC,GAAmB,OAAO,yBAC1BC,GAAoB,OAAO,oBAC3BC,GAAe,OAAO,eACtBC,GAAe,OAAO,UAAU,eAOpC,IAAIC,GAAa,CAACC,EAAIC,IAAQ,UAAsB,CAClD,OAAOA,MAAWD,EAAGE,GAAkBF,CAAE,EAAE,CAAC,CAAC,IAAIC,EAAM,CAAE,QAAS,CAAC,CAAE,GAAG,QAASA,CAAG,EAAGA,EAAI,OAC7F,EACIE,GAAc,CAACC,EAAIC,EAAMC,EAAQC,IAAS,CAC5C,GAAIF,GAAQ,OAAOA,GAAS,UAAY,OAAOA,GAAS,WACtD,QAASG,KAAON,GAAkBG,CAAI,EAChC,CAACI,GAAa,KAAKL,EAAII,CAAG,GAAKA,IAAQF,GACzCI,GAAUN,EAAII,EAAK,CAAE,IAAK,IAAMH,EAAKG,CAAG,EAAG,WAAY,EAAED,EAAOI,GAAiBN,EAAMG,CAAG,IAAMD,EAAK,UAAW,CAAC,EAEvH,OAAOH,CACT,EACIQ,GAAU,CAACX,EAAKY,EAAYC,KAAYA,EAASb,GAAO,KAAOc,GAASC,GAAaf,CAAG,CAAC,EAAI,CAAC,EAAGE,GAKnGU,GAAc,CAACZ,GAAO,CAACA,EAAI,WAAaS,GAAUI,EAAQ,UAAW,CAAE,MAAOb,EAAK,WAAY,EAAK,CAAC,EAAIa,EACzGb,CACF,GAGIgB,GAAgBlB,GAAW,CAC7B,iCAAiCmB,EAASC,EAAQ,CAChD,aACA,IAAIC,EAASC,GACTC,EAAUC,GACVC,EAAOC,GACPC,EAAUN,EAAO,OACjBO,EAAO,IAAIC,EAAW,IAAI,EAC1BC,EAAe,2BACfC,EAAKN,EAAK,OACd,SAASO,EAAUC,EAAM,CACvB,OAAI,OAAON,EAAQ,OAAS,WACnBA,EAAQ,MAAMM,CAAI,EAElB,IAAIN,EAAQM,CAAI,CAE3B,CACA,SAASC,EAAWC,EAAMC,EAAK,CAC7B,OAAI,OAAOT,EAAQ,MAAQ,WAClBA,EAAQ,KAAKQ,EAAMC,CAAG,EAEtB,IAAIT,EAAQQ,EAAMC,CAAG,CAEhC,CACA,SAASC,EAAWC,EAAG,CACrB,OAAOA,EAAE,OAAO,CAAC,EAAE,YAAY,EAAIA,EAAE,MAAM,CAAC,CAC9C,CACA,SAASC,EAAQC,EAAIC,EAAI,CACvB,OAAOD,IAAOC,EAAK,EAAID,EAAKC,EAAK,GAAK,CACxC,CACA,SAASC,GAAUC,EAAMlC,EAAKmC,EAAK,CACjC,IAAIC,EAAQF,EAAKlC,CAAG,EACpB,OAAOoC,IAAU,OAASD,EAAMC,CAClC,CACA,SAASC,EAAQC,EAAKC,EAAW,CAC/BA,EAAYA,GAAa,MACzB,IAAIC,EAAO1B,EAAQ,WAAWyB,CAAS,EACvC,OAAAC,EAAK,IAAIF,CAAG,EACLE,EAAK,KAAK,CACnB,CACA,SAASC,EAAcC,EAAKC,EAAI,CAC9B,IAAIC,EAAM,GACNC,EAAGC,EACP,GAAI,CAACJ,EACH,MAAO,GAET,IAAKG,EAAI,EAAGC,EAAIJ,EAAI,OAAQG,EAAIC,EAAGD,IACjC,GAAIH,EAAIG,CAAC,IAAMF,EAAI,CACjB,GAAIC,GAAO,EACT,MAAO,GAETA,EAAMC,CACR,CAEF,OAAOD,CACT,CACA,SAASG,EAAML,EAAKM,EAAI,CACtB,IAAIC,EAAM,CAAC,EACPJ,EAAGK,EACP,IAAKL,EAAI,EAAGA,EAAIH,EAAI,OAAQG,IAC1BK,EAAOR,EAAIG,CAAC,EACZI,EAAID,EAAGE,CAAI,CAAC,EAAIA,EAElB,OAAOD,CACT,CACA,SAASE,EAAaF,EAAK,CACzB,OAAO,OAAO,KAAKA,CAAG,EAAE,IAAI,SAASjD,EAAK,CACxC,OAAOiD,EAAIjD,CAAG,CAChB,CAAC,CACH,CACA,SAASoD,EAAcV,EAAKM,EAAI,CAC9B,IAAIC,EAAsB,OAAO,OAAO,IAAI,EACxCJ,EAAGC,EAAGI,GACV,IAAKL,EAAI,EAAGC,EAAIJ,EAAI,OAAQG,EAAIC,EAAGD,IAAK,CAKtC,GAJAK,GAAOR,EAAIG,CAAC,EACRG,IACFE,GAAOF,EAAGE,EAAI,GAEZD,EAAIC,EAAI,EACV,MAAO,GAETD,EAAIC,EAAI,EAAI,EACd,CACA,MAAO,EACT,CACA,SAASG,GAAkBC,EAAKC,EAAKC,EAAW,CAC9C,IAAIC,EAAQ,OAAO,oBAAoBH,CAAG,EACtCT,EAAGC,GAAGY,EACV,IAAKb,EAAI,EAAGC,GAAIW,EAAM,OAAQZ,EAAIC,GAAGD,IAEnC,GADAa,EAAOD,EAAMZ,CAAC,EACV,CAACU,EAAI,eAAeG,CAAI,GAAKF,EAAW,CAC1C,IAAIG,GAAa,OAAO,yBAAyBL,EAAKI,CAAI,EAC1D,OAAO,eAAeH,EAAKG,EAAMC,EAAU,CAC7C,CAEF,OAAOJ,CACT,CACA,SAASK,EAAYtB,EAAK,CACxB,OAAOjB,EAAa,KAAKiB,CAAG,CAC9B,CACA,SAASuB,EAAQH,EAAMI,EAAW,CAChC,MAAI,CAACJ,EAAK,QAAQ,GAAG,EACnBA,EAAOA,EAAK,QAAQ,MAAO,EAAE,EACpBI,IACTJ,EAAOI,EAAY,IAAMJ,GAE3BA,EAAK,MAAM,GAAG,EAAE,QAAQ,SAASK,EAAM,CACrC,GAAI,CAACH,EAAYG,CAAI,EACnB,MAAM,IAAI,MAAMzC,EAAG,mBAAoBoC,CAAI,CAAC,CAEhD,CAAC,EACMA,CACT,CACA,SAASM,EAAUN,EAAM,CACvB,IAAIO,EAAQP,EAAK,MAAM,GAAG,EAC1B,OAAOO,EAAMA,EAAM,OAAS,CAAC,CAC/B,CACA,SAASC,EAAiBR,EAAM,CAC9B,IAAIS,EAAQ,gBAAgB,KAAKT,CAAI,EACrC,OAAOS,EAAQA,EAAM,CAAC,EAAI,MAC5B,CACA,SAASC,EAAQ9B,EAAKM,EAAK,CACzBA,EAAMA,EAAM,EACZ,IAAIyB,EAAI/B,EAAI,OAAOM,GAAK,EACxB,GAAI,QAAQ,KAAKyB,CAAC,EAAG,CACnB,KAAO,YAAY,KAAK/B,EAAI,OAAOM,CAAG,CAAC,GACrCA,IAEF,OAAOA,CACT,KAAO,IAAI,YAAY,KAAKN,EAAI,MAAMM,EAAM,EAAGA,EAAM,CAAC,CAAC,EACrD,OAAOA,EAAM,EACR,GAAI,QAAQ,KAAKN,EAAI,MAAMM,EAAM,EAAGA,EAAM,CAAC,CAAC,EACjD,OAAOA,EAAM,EAEf,IAAI0B,EAAQ,EACRC,EAAU,GACd,EACE,QAAQF,EAAG,CACT,IAAK,IACL,IAAK,IACEE,GACHD,IAEF,MACF,IAAK,IACL,IAAK,IACH,GAAI,CAACC,GAAW,CAAC,EAAED,EACjB,OAAO1B,EAET,MACF,IAAK,IAEH,GADA2B,EAAU,CAACA,EACP,CAACD,GAAS,CAACC,EACb,OAAO3B,EAET,MACF,IAAK,KACHA,GACJ,OACOyB,EAAI/B,EAAI,OAAOM,GAAK,GAC7B,MAAO,EACT,CACA,SAAS4B,IAAmB,CAC1B,MAAM,IAAI,MAAM,UAAU,CAC5B,CACA,SAASC,EAAqBxB,EAAKyB,EAAO,CACxC,IAAIC,EAAQ1B,EAAI,UACZJ,EAAGC,EAAG8B,GAAMC,EAChB,IAAKhC,EAAI,EAAGC,EAAI4B,EAAM,OAAQ7B,EAAIC,EAAGD,IACnC+B,GAAOF,EAAM7B,CAAC,EACdgC,EAAS,MAAQjD,EAAWgD,EAAI,EAChCD,EAAME,CAAM,EAAI7D,EAAK,UACnB8D,GAAaF,EAAI,EACjB,SAAWA,GAAO,kBAAoBC,EAAS,KACjD,EAEF,SAASC,GAAaC,GAAO,CAC3B,OAAO,UAAW,CAChB,IAAIC,GAAW,KAAKD,EAAK,EACzB,OAAO,OAAOC,IAAY,WAAaA,GAAS,MAAM,KAAM,SAAS,EAAIA,EAC3E,CACF,CACF,CACA,SAAS5D,EAAW6D,EAAK,CACvB,KAAK,KAAOA,EAAM,EAClB,KAAK,KAAO,EACZ,KAAK,MAAQ1D,EAAU,KAAK,IAAI,CAClC,CACAH,EAAW,UAAU,MAAQ,SAAS6D,EAAK,CACzC,GAAIA,EAAM,EACR,MAAM,IAAI,MAAM,iBAAiB,EAEnC,IAAIC,EAAS,KAAK,KAClB,OAAID,EAAMC,EACD3D,EAAU0D,CAAG,GAElB,KAAK,KAAOA,EAAMC,IACpB,KAAK,MAAQ3D,EAAU2D,CAAM,EAC7B,KAAK,KAAO,GAEP,KAAK,MAAM,MAAM,KAAK,KAAM,KAAK,MAAQD,CAAG,EACrD,EACA,SAASE,EAAIC,EAAM,CACjB,IAAIC,EAAI,WACJhB,EAAI,MACJiB,EAAK,KAAK,IAAI,EAAG,EAAE,EACnBC,EAAQ,KAAK,MAAMH,GAAQ,KAAK,OAAO,GAAKE,EAAK,EAAE,EACvD,KAAK,KAAOA,EACZ,KAAK,SAAW,UAAW,CACzB,OAAOC,GAASF,EAAIE,EAAQlB,GAAKiB,CACnC,CACF,CACAH,EAAI,UAAU,YAAc,UAAW,CACrC,MAAO,CAAC,EAAE,KAAK,SAAS,EAAI,EAC9B,EACAA,EAAI,UAAU,QAAU,SAASK,EAAOC,EAAK,CAC3C,OAAIA,IAAQ,SACVA,EAAMD,EACNA,EAAQ,GAEVC,EAAMA,IAAQ,OAAS,KAAK,KAAOA,EAC5BD,EAAQ,KAAK,MAAM,KAAK,UAAU,GAAKC,EAAMD,EAAM,CAC5D,EACAL,EAAI,UAAU,UAAY,SAASK,EAAOC,EAAK,CAC7C,OAAIA,IAAQ,SACVA,EAAMD,EACNA,EAAQ,GAEVC,EAAMA,IAAQ,OAAS,EAAIA,EACpBD,GAASC,EAAMD,GAAS,KAAK,SAAS,EAAI,KAAK,IACxD,EACAL,EAAI,UAAU,WAAa,SAASF,EAAKS,EAAO,CAC9CT,GAAO,EACPS,EAAQA,GAAS,KACjB,IAAIC,EAAO,GACPD,EAAM,QAAQ,GAAG,EAAI,KACvBC,GAAQ,8BAEND,EAAM,QAAQ,GAAG,EAAI,KACvBC,GAAQ,8BAEND,EAAM,QAAQ,GAAG,EAAI,KACvBC,GAAQ,cAEND,EAAM,QAAQ,GAAG,EAAI,KACvBC,GAAQ,sCAGV,QADIC,EAAS,CAAC,EACL/C,EAAI,EAAGA,EAAIoC,EAAKpC,IACvB+C,EAAO,KAAK,KAAK,OAAOD,CAAI,CAAC,EAE/B,OAAOC,EAAO,KAAK,EAAE,CACvB,EACAT,EAAI,UAAU,WAAa,SAASF,EAAK,CACvC,IAAIvC,EAAM,CAAC,EACPG,EACJ,IAAKA,EAAI,EAAGA,EAAIoC,EAAKpC,IACnBH,EAAI,KAAK,KAAK,QAAQ,GAAG,CAAC,EAE5B,OAAOjB,EAAWiB,CAAG,CACvB,EACAyC,EAAI,UAAU,OAAS,SAASzC,EAAK,CACnC,IAAIuC,EAAMvC,EAAI,OACd,GAAI,CAACuC,EACH,MAAM,IAAI,MAAM,2BAA2B,EAE7C,OAAOvC,EAAI,KAAK,QAAQuC,CAAG,CAAC,CAC9B,EACA,SAASY,GAAe,CACtB,KAAK,OAAS,EACd,KAAK,OAAS,CAAC,CACjB,CACAA,EAAa,UAAU,KAAO,SAASC,EAAM,CAC3C,IAAIC,EAAQ,KAAK,OACblD,EAAIkD,EAAM,OAAS,EACnBC,EAEJ,IADAD,EAAM,KAAKD,CAAI,EACRjD,EAAI,GAAKkD,EAAMlD,CAAC,EAAE,MAAQkD,EAAMC,EAAKnD,EAAI,GAAK,CAAC,EAAE,OACtDiD,EAAOC,EAAMlD,CAAC,EACdkD,EAAMlD,CAAC,EAAIkD,EAAMC,CAAE,EACnBD,EAAMC,CAAE,EAAIF,EACZjD,EAAImD,CAER,EACAH,EAAa,UAAU,IAAM,UAAW,CACtC,IAAIE,EAAQ,KAAK,OACbd,EAAMc,EAAM,OAAS,EAAI,EACzBE,EAAQF,EAAM,CAAC,EACnB,GAAI,CAACE,GAASA,EAAM,MAAQ,KAAK,OAC/B,OAAO,KAGT,GADA,KAAK,SACD,CAAChB,EACH,OAAAc,EAAM,IAAI,EACHE,EAETF,EAAM,CAAC,EAAIA,EAAM,IAAI,EAIrB,QAHIG,EAAMjB,GAAO,EACbpC,EAAI,EACJsD,GAAIC,EAAIJ,GAAIF,GAAMzB,GAAGgC,GAAIC,GACtBzD,EAAIqD,IACTJ,GAAOC,EAAMlD,CAAC,EACdsD,IAAMtD,GAAK,GAAK,EAChBuD,EAAKvD,EAAI,GAAK,EACdwD,GAAKN,EAAMI,EAAE,EACbG,GAAKP,EAAMK,CAAE,EACT,CAACE,IAAMD,GAAG,OAASC,GAAG,OACxBjC,GAAIgC,GACJL,GAAKG,KAEL9B,GAAIiC,GACJN,GAAKI,GAEH,EAAA/B,GAAE,OAASyB,GAAK,SAGpBC,EAAMC,EAAE,EAAIF,GACZC,EAAMlD,CAAC,EAAIwB,GACXxB,EAAImD,GAEN,OAAOC,CACT,EACA,SAASM,EAAIC,EAAK5D,EAAK,CAGrB,GAFA,KAAK,IAAM4D,EACX,KAAK,IAAM5D,EAAM,EACb,KAAK,IAAM,EACb,MAAM,IAAI,MAAM,iBAAiB,CAErC,CACA2D,EAAI,UAAU,QAAU,UAAW,CACjC,OAAO,KAAK,KAAO,KAAK,IAAI,MAC9B,EACAA,EAAI,UAAU,YAAc,UAAW,CACrC,KAAK,IAAM,KAAK,IAAI,OAAS,CAC/B,EACAA,EAAI,UAAU,YAAc,UAAW,CACrC,MAAO,CAAC,CAAC,KAAK,IAAI,KAAK,KAAK,CAC9B,EACAA,EAAI,UAAU,YAAc,UAAW,CACrC,KAAK,KACP,EACAA,EAAI,UAAU,aAAe,SAASE,EAAI,CACxC,KAAK,IAAI,KAAK,KAAK,EAAI,CAAC,CAACA,CAC3B,EACAF,EAAI,UAAU,QAAUA,EAAI,UAAU,SAAW,UAAW,CAC1D,IAAIG,EAAI,EACJC,EAAK,EACLH,EAAM,KAAK,IACXC,EAAIG,EAAGC,GAAIC,EACf,GACEL,EAAKD,EAAI,KAAK,KAAK,EACnBI,EAAIH,EAAK,IACTC,IAAMD,EAAK,MAAQE,EACnBA,GAAM,QACCC,GAAKD,EAAK,IACnB,GAAIC,EAAG,CACLC,GAAKH,EACLI,EAAK,UACL,GACEL,EAAKD,EAAI,KAAK,KAAK,EACnBK,KAAOJ,EAAK,KAAOK,EACnBA,GAAM,UACCL,EAAK,KACd,OAAQI,GAAK,EAAI,EAAEA,GAAK,GAAKA,IAAM,CACrC,CACA,OAAOH,GAAK,EAAI,EAAEA,EAAI,EACxB,EACAH,EAAI,UAAU,QAAUA,EAAI,UAAU,SAAW,UAAW,CAE1D,QADIC,EAAM,KAAK,IACRA,EAAI,KAAK,KAAK,EAAI,KAAK,CAEhC,EACAD,EAAI,UAAU,SAAWA,EAAI,UAAU,UAAY,SAASG,EAAG,CAC7D,IAAIF,EAAM,KAAK,IACXK,EAAIvB,EACR,GAAIoB,GAAK,aAAeA,EAAI,WAAY,CACtCpB,EAAKoB,GAAK,EAAIA,GAAK,EAAI,CAACA,GAAK,EAAI,EACjC,GACEF,EAAI,KAAK,GAAG,EAAIlB,EAAK,IACrBA,IAAO,QACAA,IAAOkB,EAAI,KAAK,KAAK,GAAK,KACrC,KAAO,CACLK,EAAKH,GAAK,EAAIA,EAAI,EAAI,CAACA,EAAI,EAAI,EAC/B,GACEF,EAAI,KAAK,GAAG,EAAIK,EAAK,IACrBA,GAAM,UACCA,GAAM,IAAML,EAAI,KAAK,KAAK,GAAK,KAC1C,CACA,KAAK,KACP,EACAD,EAAI,UAAU,UAAY,UAAW,CACnC,IAAIC,EAAM,KAAK,IACX5D,EAAM,KAAK,IAEf,OADA,KAAK,KAAO,EACR,KAAK,IAAM4D,EAAI,OACV,EAEF,KAAK,IAAI,YAAY5D,CAAG,CACjC,EACA2D,EAAI,UAAU,UAAY,UAAW,CACnC,KAAK,KAAO,CACd,EACAA,EAAI,UAAU,WAAa,SAASM,EAAI,CACtC,IAAIL,EAAM,KAAK,IACX5D,EAAM,KAAK,IAEf,GADA,KAAK,KAAO,EACR,OAAK,IAAM4D,EAAI,QAGnB,OAAO,KAAK,IAAI,aAAaK,EAAIjE,CAAG,CACtC,EACA2D,EAAI,UAAU,WAAa,UAAW,CACpC,IAAIC,EAAM,KAAK,IACX5D,EAAM,KAAK,IAEf,OADA,KAAK,KAAO,EACR,KAAK,IAAM4D,EAAI,OACV,EAEF,KAAK,IAAI,aAAa5D,CAAG,CAClC,EACA2D,EAAI,UAAU,WAAa,UAAW,CACpC,KAAK,KAAO,CACd,EACAA,EAAI,UAAU,YAAc,SAASQ,EAAG,CACtC,IAAIP,EAAM,KAAK,IACX5D,EAAM,KAAK,IAEf,GADA,KAAK,KAAO,EACR,OAAK,IAAM4D,EAAI,QAGnB,OAAO,KAAK,IAAI,cAAcO,EAAGnE,CAAG,CACtC,EACA2D,EAAI,UAAU,UAAY,SAAStB,EAAK,CACtC,IAAIrC,EAAM,KAAK,IAEf,GADA,KAAK,KAAOqC,EACR,OAAK,IAAM,KAAK,IAAI,QAGxB,KAAI+B,EAAQ7F,EAAK,MAAM8D,CAAG,EAC1B,YAAK,IAAI,KAAK+B,EAAO,EAAGpE,EAAKA,EAAMqC,CAAG,EAC/B+B,EACT,EACAT,EAAI,UAAU,UAAY,SAAStB,EAAK,CACtC,KAAK,KAAOA,CACd,EACAsB,EAAI,UAAU,WAAa,SAASC,EAAKvB,EAAK,CAC5CA,EAAMA,GAAOuB,EAAI,OACjB,IAAI5D,EAAM,KAAK,IACf,KAAK,KAAOqC,EACR,OAAK,IAAM,KAAK,IAAI,SAGxBuB,EAAI,KAAK,KAAK,IAAK5D,EAAK,EAAGqC,CAAG,CAChC,EACAsB,EAAI,UAAU,UAAY,UAAW,CACnC,IAAItB,EAAM,KAAK,SAAS,EACxB,GAAIA,EAAM,EAAG,CACX,KAAK,YAAY,EACjB,MACF,CACA,OAAO,KAAK,UAAUA,CAAG,CAC3B,EACAsB,EAAI,UAAU,UAAY,UAAW,CACnC,IAAItB,EAAM,KAAK,SAAS,EACxB,GAAIA,EAAM,EAAG,CACX,KAAK,YAAY,EACjB,MACF,CACA,KAAK,KAAOA,CACd,EACAsB,EAAI,UAAU,WAAa,SAASC,EAAK,CACvC,IAAIvB,EAAMuB,EAAI,OACd,KAAK,UAAUvB,CAAG,EAClB,KAAK,WAAWuB,EAAKvB,CAAG,CAC1B,EACI,OAAO/D,EAAQ,UAAU,WAAa,WACxCqF,EAAI,UAAU,WAAa,UAAW,CACpC,IAAItB,EAAM,KAAK,SAAS,EACxB,GAAIA,EAAM,EACR,YAAK,YAAY,EACV,GAET,IAAIrC,EAAM,KAAK,IACX4D,EAAM,KAAK,IAEf,GADA,KAAK,KAAOvB,EACR,OAAK,IAAMuB,EAAI,QAGnB,OAAO,KAAK,IAAI,UAAU5D,EAAKA,EAAMqC,CAAG,CAC1C,EAEAsB,EAAI,UAAU,WAAa,UAAW,CACpC,IAAItB,EAAM,KAAK,SAAS,EACxB,GAAIA,EAAM,EACR,YAAK,YAAY,EACV,GAET,IAAIrC,EAAM,KAAK,IACX4D,EAAM,KAAK,IAEf,GADA,KAAK,KAAOvB,EACR,OAAK,IAAMuB,EAAI,QAGnB,OAAO,KAAK,IAAI,MAAM5D,EAAKA,EAAMqC,CAAG,EAAE,SAAS,CACjD,EAEFsB,EAAI,UAAU,WAAa,UAAW,CACpC,IAAItB,EAAM,KAAK,SAAS,EACxB,GAAIA,EAAM,EAAG,CACX,KAAK,YAAY,EACjB,MACF,CACA,KAAK,KAAOA,CACd,EACAsB,EAAI,UAAU,YAAc,SAAS1E,EAAG,CACtC,IAAIoD,EAAM/D,EAAQ,WAAWW,CAAC,EAC1B2E,EAAM,KAAK,IACf,KAAK,UAAUvB,CAAG,EAClB,IAAIrC,EAAM,KAAK,IAEf,GADA,KAAK,KAAOqC,EACR,OAAK,IAAMuB,EAAI,QAGnB,GAAIvB,EAAM,IAAM,OAAO/D,EAAQ,UAAU,WAAa,WACpDsF,EAAI,UAAU3E,EAAGe,EAAKqC,CAAG,MACpB,CACL,IAAIpC,EAAGC,GAAGuD,EAAIC,GACd,IAAKzD,EAAI,EAAGC,GAAImC,EAAKpC,EAAIC,GAAGD,IAC1BwD,EAAKxE,EAAE,WAAWgB,CAAC,EACfwD,EAAK,IACPG,EAAI5D,GAAK,EAAIyD,EACJA,EAAK,MACdG,EAAI5D,GAAK,EAAIyD,GAAM,EAAI,IACvBG,EAAI5D,GAAK,EAAIyD,EAAK,GAAK,MACbA,EAAK,SAAW,SAAWC,GAAKzE,EAAE,WAAWgB,EAAI,CAAC,GAAK,SAAW,OAC5EwD,EAAK,QAAUA,EAAK,OAAS,KAAOC,GAAK,MACzCzD,IACA2D,EAAI5D,GAAK,EAAIyD,GAAM,GAAK,IACxBG,EAAI5D,GAAK,EAAIyD,GAAM,GAAK,GAAK,IAC7BG,EAAI5D,GAAK,EAAIyD,GAAM,EAAI,GAAK,IAC5BG,EAAI5D,GAAK,EAAIyD,EAAK,GAAK,MAEvBG,EAAI5D,GAAK,EAAIyD,GAAM,GAAK,IACxBG,EAAI5D,GAAK,EAAIyD,GAAM,EAAI,GAAK,IAC5BG,EAAI5D,GAAK,EAAIyD,EAAK,GAAK,IAG7B,CACF,EACI,OAAOnF,EAAQ,UAAU,aAAe,WAC1CqF,EAAI,UAAU,YAAc,SAASjE,EAAK2C,EAAK,CAC7C,IAAIrC,EAAM,KAAK,IACf,KAAK,KAAOqC,EACR,OAAK,IAAM,KAAK,IAAI,SAGxB,KAAK,IAAI,YAAY3C,EAAKM,EAAKqC,CAAG,CACpC,EACS,OAAO/D,EAAQ,UAAU,aAAe,WACjDqF,EAAI,UAAU,YAAc,SAASjE,EAAK2C,EAAK,CAC7C,IAAIrC,EAAM,KAAK,IACf,KAAK,KAAOqC,EACR,OAAK,IAAM,KAAK,IAAI,SAGxB,KAAK,IAAI,YAAY3C,EAAKM,EAAKqC,CAAG,CACpC,EAEAsB,EAAI,UAAU,YAAc,SAAS1E,EAAGoD,EAAK,CAC3C,IAAIrC,EAAM,KAAK,IACf,KAAK,KAAOqC,EACR,OAAK,IAAM,KAAK,IAAI,SAGxB,KAAK,IAAI,MAAMpD,EAAGe,EAAKqC,EAAK,QAAQ,CACtC,EAEFsB,EAAI,UAAU,aAAe,SAASU,EAAK,CACzC,OAAO,KAAK,IAAI,KAAK,KAAK,EAAIA,EAAI,IAAIA,EAAI,KAAK,CACjD,EACAV,EAAI,UAAU,SAAWA,EAAI,UAAU,UAAY,SAASU,EAAK,CAC/D,IAAIlF,EAAK,KAAK,SAAS,EACnBC,EAAKiF,EAAI,SAAS,EACtB,OAAOlF,IAAOC,EAAK,EAAID,EAAKC,EAAK,GAAK,CACxC,EACAuE,EAAI,UAAU,WAAa,SAASU,EAAK,CACvC,IAAIlF,EAAK,KAAK,UAAU,EACpBC,EAAKiF,EAAI,UAAU,EACvB,OAAOlF,IAAOC,EAAK,EAAID,EAAKC,EAAK,GAAK,CACxC,EACAuE,EAAI,UAAU,YAAc,SAASU,EAAK,CACxC,IAAIlF,EAAK,KAAK,WAAW,EACrBC,EAAKiF,EAAI,WAAW,EACxB,OAAOlF,IAAOC,EAAK,EAAID,EAAKC,EAAK,GAAK,CACxC,EACAuE,EAAI,UAAU,WAAa,SAASU,EAAKhC,EAAK,CAC5C,OAAO,KAAK,UAAUA,CAAG,EAAE,QAAQgC,EAAI,UAAUhC,CAAG,CAAC,CACvD,EACAsB,EAAI,UAAU,WAAaA,EAAI,UAAU,YAAc,SAASU,EAAK,CACnE,IAAIC,EAAK,KAAK,SAAS,EACnBC,EAAK,KAAK,IACd,KAAK,KAAOD,EACZ,IAAIE,EAAKH,EAAI,SAAS,EAClBI,EAAKJ,EAAI,IACbA,EAAI,KAAOG,EACX,IAAIE,GAAK,KAAK,IAAI,MAAMH,EAAI,KAAK,GAAG,EAChCV,EAAKQ,EAAI,IAAI,MAAMI,EAAIJ,EAAI,GAAG,EAClC,OAAOK,GAAG,QAAQb,CAAE,CACtB,EACAF,EAAI,UAAU,gBAAkB,UAAW,CACzC,IAAIgB,EAAMhG,EAAU,CAAC,EACjBmF,EAAI,EACJ7D,EAAI,EACJmD,EAAK,EACLQ,EAAM,KAAK,IACXC,GAAIe,EAKR,IAJAf,GAAKD,EAAI,KAAK,KAAK,EACnBgB,EAAMf,GAAK,EACXc,EAAI,KAAK,CAAC,EACVb,IAAMD,GAAK,MAAQ,EACZA,GAAK,KACVA,GAAKD,EAAI,KAAK,KAAK,EACnBE,IAAMD,GAAK,MAAQT,EACnBA,GAAM,EACFA,GAAM,IACRA,GAAM,EACNuB,EAAI1E,GAAG,EAAI6D,EACXA,IAAM,GAGV,OAAAa,EAAI1E,CAAC,EAAI6D,EACLc,GACFC,EAAOF,EAAK,CAAC,EAERA,CACT,EACAhB,EAAI,UAAU,cAAgB,SAASC,EAAK,CAC1C,IAAIgB,GAAOhB,EAAI,CAAC,EAAI,MAAQ,EACxBe,EAAM,KAAK,IACXvB,EAAK,EACLW,EAAK,EACLrB,GAAK,EACLoB,EACAc,GACFC,EAAOjB,EAAK,CAAC,EACbE,EAAI,GAEJA,EAAI,EAON,QALIzC,GAAQ,CACVuC,EAAI,WAAW,EAAG,CAAC,EACnBA,EAAI,WAAW,EAAG,CAAC,EACnBA,EAAI,WAAW,EAAG,CAAC,CACrB,EACOlB,IAAM,CAACrB,GAAM,EAAEqB,EAAE,GAAG,CAE3B,KAAOqB,EAAKrB,IAGV,IAFAoB,GAAKzC,GAAM0C,GAAI,GAAKX,EACpBA,GAAM,GACCA,EAAK,GACVuB,EAAI,KAAK,KAAK,EAAIb,EAAI,IAAM,IAC5BA,IAAM,EACNV,GAAM,EAGVU,GAAKzC,GAAMqB,EAAE,GAAKU,EAClB,GACEuB,EAAI,KAAK,GAAG,EAAIb,EAAI,IACpBA,IAAM,QACCA,IAAMa,EAAI,KAAK,KAAK,GAAK,MAClC,KAAK,MACDC,GACFC,EAAOjB,EAAK,CAAC,CAEjB,EACA,SAASiB,EAAOjB,EAAKvB,EAAK,CACxB,KAAOA,KACLuB,EAAIvB,CAAG,EAAI,CAACuB,EAAIvB,CAAG,CAEvB,CACAtE,EAAO,QAAU,CACf,iBAAA6D,GACA,qBAAAC,EACA,WAAAhD,EACA,WAAAG,EACA,kBAAAyB,GACA,QAAAhB,EACA,QAAAP,EACA,UAAAG,GACA,iBAAAiC,EACA,YAAAN,EACA,QAAAQ,EACA,UAAA7C,EACA,aAAA4B,EACA,QAAAU,EACA,MAAAd,EACA,cAAAN,EACA,cAAAW,EACA,UAAAY,EACA,WAAA5C,EACA,IAAA+D,EACA,aAAAU,EACA,IAAAU,CACF,CACF,CACF,CAAC,EAGGmB,GAAgBnI,GAAW,CAC7B,iCAAiCmB,EAASC,EAAQ,CAChD,aACA,IAAIgH,EAAQlH,GAAc,EACtBG,EAASC,GACTG,EAAOC,GACPC,EAAUN,EAAO,OACjBgH,EAAahH,EAAO,WACpB2F,EAAMoB,EAAM,IACZE,EAAQ7G,EAAK,SAAS,YAAY,EAClCM,EAAKN,EAAK,OACV8G,EAAQ,CACV,MAASC,EACT,QAAWC,EACX,MAASC,EACT,OAAUC,EACV,KAAQC,EACR,MAASC,EACT,MAASC,EACT,MAASC,EACT,IAAOC,GACP,KAAQC,EACR,IAAOC,EACP,KAAQC,EACR,OAAUN,EACV,OAAUO,CACZ,EACIC,EAAS,IAAIjB,EAAM,IACnBkB,EAAM,IAAItC,EAAI,IAAIqB,EAAW,IAAI,CAAC,EAClCkB,GAAe,KACfC,EAAmB,CAAC,EACxB,SAASC,EAAKC,EAAQ/G,EAAM,CAC1B,IAAIgH,EAYJ,GAXIJ,IACFI,EAAOJ,GACPC,EAAiB,KAAK,CAACD,GAAc,IAAI,CAAC,EAC1CA,GAAe,MAEfI,EAAO,KAET,KAAK,MAAQ,IAAIC,GACjB,KAAK,KAAO,OACZ,KAAK,QAAU,OACf,KAAK,IAAMF,GAAUA,EAAO,IAAM,GAAKA,EAAO,IAAM,OAChDA,EAAQ,CACV,IAAIvF,EAAOuF,EAAO,KACdnF,EAAYmF,EAAO,YAAc,OAAS/G,GAAQA,EAAK,UAAY+G,EAAO,UAC9E,GAAIvF,IAAS,OAAQ,CAEnB,GADAA,EAAO0F,GAAa1F,EAAMI,CAAS,EAC/BuF,GAAY3F,CAAI,EAClB,MAAM,IAAI,MAAMpC,EAAG,mCAAoCoC,CAAI,CAAC,EAE9D,IAAI4F,EAAWpH,GAAQA,EAAK,SAC5B,GAAIoH,EAAU,CACZ,GAAIA,EAAS5F,CAAI,IAAM,OACrB,MAAM,IAAI,MAAMpC,EAAG,0BAA2BoC,CAAI,CAAC,EAErD4F,EAAS5F,CAAI,EAAIwF,CACnB,CACF,SAAWhH,GAAQA,EAAK,iBACtB,MAAM,IAAI,MAAMZ,EAAG,sCAAuC2H,CAAM,CAAC,EAEnE,KAAK,KAAOvF,EACZ,KAAK,QAAUuF,EAAO,QAAUA,EAAO,QAAQ,IAAI,SAAS,EAAG,CAC7D,OAAOG,GAAa,EAAGtF,CAAS,CAClC,CAAC,EAAI,CAAC,CACR,CACF,CACAkF,EAAK,UAAY,SAASC,EAAQ/G,EAAM,CACtCA,EAAOA,GAAQ,CAAC,EAChBA,EAAK,SAAWA,EAAK,UAAY,CAAC,EAClC,IAAIqH,EAAa,SAASC,EAAY,CAUpC,OATIA,IAAe,GACjBA,EAAa,SACJA,IAAe,GACxBA,EAAa,QACJA,IAAe,OACxBA,EAAa,OACJ,OAAOA,GAAc,WAC9BA,EAAaA,EAAW,YAAY,GAE9BA,EAAY,CAClB,IAAK,SACH,OAAOC,EACT,IAAK,QACH,OAAOC,EACT,IAAK,OACH,OACF,QACE,MAAM,IAAI,MAAMpI,EAAG,iCAAkCkI,CAAU,CAAC,CACpE,CACF,EAAEtH,EAAK,UAAU,EACjB,GAAI+G,IAAW,KACb,MAAM,IAAI,MAAM,2CAA2C,EAE7D,GAAID,EAAK,OAAOC,CAAM,EACpB,OAAOA,EAET,IAAIC,EACJ,GAAIhH,EAAK,WAAagH,EAAOhH,EAAK,SAAS+G,EAAQ/G,CAAI,GAAI,CACzD,GAAI,CAAC8G,EAAK,OAAOE,CAAI,EACnB,MAAM,IAAI,MAAM5H,EAAG,oCAAqC4H,CAAI,CAAC,EAE/D,OAAOA,CACT,CACA,GAAI,OAAOD,GAAU,SAAU,CAG7B,GAFAA,EAASG,GAAaH,EAAQ/G,EAAK,SAAS,EAC5CgH,EAAOhH,EAAK,SAAS+G,CAAM,EACvBC,EACF,OAAOA,EAET,GAAIG,GAAYJ,CAAM,EACpB,OAAO/G,EAAK,SAAS+G,CAAM,EAAID,EAAK,UAAU,CAAE,KAAMC,CAAO,EAAG/G,CAAI,EAEtE,MAAM,IAAI,MAAMZ,EAAG,0BAA2B2H,CAAM,CAAC,CACvD,CACA,GAAIA,EAAO,aAAe/G,EAAK,cAAgB,CAAC4G,GAAc,CAC5D,IAAIa,EAAczH,EAAK,aAAa+G,EAAO,WAAW,EACtD,GAAIU,EAAa,CACf,IAAI7F,EAAY5B,EAAK,UACjBoH,EAAW,CAAC,EAChB,OAAO,KAAKpH,EAAK,QAAQ,EAAE,QAAQ,SAASlC,EAAK,CAC/CsJ,EAAStJ,CAAG,EAAIkC,EAAK,SAASlC,CAAG,CACnC,CAAC,EACD,GAAI,CACF,OAAA6H,EAAM,oCAAqCoB,EAAO,WAAW,EACtD,IAAIU,EAAYV,EAAQ/G,CAAI,CACrC,OAAS0H,EAAK,CAEZ,GADA/B,EAAM,4CAA6CoB,EAAO,WAAW,EACjE/G,EAAK,mBACP,MAAM0H,EAERd,GAAe,KACf5G,EAAK,UAAY4B,EACjB5B,EAAK,SAAWoH,CAClB,CACF,CACF,CACA,GAAI,MAAM,QAAQL,CAAM,EAAG,CACzB,IAAIY,EAAcf,GAClBA,GAAe,KACf,IAAIgB,EAAQb,EAAO,IAAI,SAAShG,EAAK,CACnC,OAAO+F,EAAK,UAAU/F,EAAKf,CAAI,CACjC,CAAC,EACIqH,IACHA,EAAaQ,GAAYD,CAAK,EAAIL,EAAmBC,GAEvDZ,GAAee,EACfX,EAAO,IAAIK,EAAWO,EAAO5H,CAAI,CACnC,MACEgH,EAAO,SAASc,EAAU,CACxB,IAAIC,EAAQnC,EAAMkC,CAAQ,EAC1B,GAAIC,IAAU,OACZ,MAAM,IAAI,MAAM3I,EAAG,mBAAoB0I,CAAQ,CAAC,EAElD,OAAO,IAAIC,EAAMhB,EAAQ/G,CAAI,CAC/B,EAAE+G,EAAO,IAAI,EAEf,OAAOC,CACT,EACAF,EAAK,SAAW,SAASkB,EAAKhI,EAAM,CAMlC,GALAA,EAAOA,GAAQ,CAAC,EAChBA,EAAK,eAAiBA,EAAK,gBAAkB8G,EAAK,UAAU,CAC1D,KAAM,QACN,MAAO,MACT,CAAC,EACG9G,EAAK,UAAW,CAClB,IAAIgH,EAAOhH,EAAK,UAAUgI,EAAKhI,CAAI,EACnC,GAAIgH,IAAS,OAAQ,CACnB,GAAI,CAACF,EAAK,OAAOE,CAAI,EACnB,MAAM,IAAI,MAAM5H,EAAG,sCAAuC4H,CAAI,CAAC,EAEjE,OAAOA,CACT,CACF,CACA,OAAQ,OAAOgB,EAAK,CAClB,IAAK,SACH,OAAOlB,EAAK,UAAU,SAAU9G,CAAI,EACtC,IAAK,UACH,OAAO8G,EAAK,UAAU,UAAW9G,CAAI,EACvC,IAAK,SACH,OAAKgI,EAAM,KAAOA,EACTlB,EAAK,UAAU,MAAO9G,CAAI,EACxB,KAAK,IAAIgI,CAAG,EAAI,iBAClBlB,EAAK,UAAU,QAAS9G,CAAI,EAE9B8G,EAAK,UAAU,SAAU9G,CAAI,EACtC,IAAK,SACH,GAAIgI,IAAQ,KACV,OAAOlB,EAAK,UAAU,OAAQ9G,CAAI,EAC7B,GAAI,MAAM,QAAQgI,CAAG,EAC1B,OAAKA,EAAI,OAGFlB,EAAK,UAAU,CACpB,KAAM,QACN,MAAOA,EAAK,SACVkB,EAAI,IAAI,SAASvH,EAAI,CACnB,OAAOqG,EAAK,SAASrG,EAAIT,CAAI,CAC/B,CAAC,EACDA,CACF,CACF,EAAGA,CAAI,EAVEA,EAAK,eAWT,GAAIhB,EAAQ,SAASgJ,CAAG,EAC7B,OAAOlB,EAAK,UAAU,QAAS9G,CAAI,EAErC,IAAIiI,EAAa,OAAO,KAAKD,CAAG,EAChC,OAAIC,EAAW,KAAK,SAAStI,EAAG,CAC9B,MAAO,CAAC8F,EAAM,YAAY9F,CAAC,CAC7B,CAAC,EACQmH,EAAK,UAAU,CACpB,KAAM,MACN,OAAQA,EAAK,SAASmB,EAAW,IAAI,SAAStI,EAAG,CAC/C,OAAOmH,EAAK,SAASkB,EAAIrI,CAAC,EAAGK,CAAI,CACnC,CAAC,EAAGA,CAAI,CACV,EAAGA,CAAI,EAEF8G,EAAK,UAAU,CACpB,KAAM,SACN,OAAQmB,EAAW,IAAI,SAAStI,EAAG,CACjC,MAAO,CAAE,KAAMA,EAAG,KAAMmH,EAAK,SAASkB,EAAIrI,CAAC,EAAGK,CAAI,CAAE,CACtD,CAAC,CACH,EAAGA,CAAI,EACT,QACE,MAAM,IAAI,MAAMZ,EAAG,6BAA8B4I,CAAG,CAAC,CACzD,CACF,EACAlB,EAAK,SAAW,SAASc,EAAO5H,EAAM,CACpC,GAAI,CAAC4H,EAAM,OACT,MAAM,IAAI,MAAM,qBAAqB,EAEvC,GAAIA,EAAM,SAAW,EACnB,OAAOA,EAAM,CAAC,EAEhB5H,EAAOA,GAAQ,CAAC,EAChB,IAAIkI,EAAW,CAAC,EACZC,EAAmB,EACnBC,EAAsB,GAmB1B,GAlBAR,EAAM,QAAQ,SAASZ,EAAM,CAC3B,OAAQA,EAAK,SAAU,CACrB,IAAK,kBACHoB,EAAsB,GACtBF,EAAWA,EAAS,OAAOlB,EAAK,KAAK,EACrC,MACF,IAAK,gBACHmB,IACAD,EAAWA,EAAS,OAAOlB,EAAK,KAAK,EACrC,MACF,IAAK,OACHkB,EAAS,KAAKlB,CAAI,EAClB,MACF,QACEoB,EAAsB,GACtBF,EAAS,KAAKlB,CAAI,CACtB,CACF,CAAC,EACGmB,EAAkB,CACpB,GAAI,CAACC,EACH,MAAM,IAAI,MAAM,8BAA8B,EAEhD,IAAIC,EAAc,CAAC,EACnBH,EAAS,QAAQ,SAASlB,EAAM,CAC9B,IAAIxF,EAAOwF,EAAK,WACZsB,EAAaD,EAAY7G,CAAI,EACjC,GAAI,CAAC8G,EACHD,EAAY7G,CAAI,EAAIwF,UACX,CAACA,EAAK,OAAOsB,CAAU,EAChC,MAAM,IAAI,MAAM,0BAA0B,CAE9C,CAAC,EACD,IAAIhB,EAAatH,EAAK,WAClBuI,EACJvI,EAAK,WAAa,GAClB,GAAI,CACFuI,EAAYzB,EAAK,UAAU,OAAO,KAAKuB,CAAW,EAAE,IAAI,SAAS7G,EAAM,CACrE,OAAO6G,EAAY7G,CAAI,CACzB,CAAC,EAAGxB,CAAI,CACV,OAAS0H,EAAK,CACZ,MAAA1H,EAAK,WAAasH,EACZI,CACR,CACA,OAAA1H,EAAK,WAAasH,EACXiB,CACT,CACA,IAAIC,EAAa,CAAC,EAClBN,EAAS,QAAQ,SAASlB,EAAM,CAC9B,IAAIyB,EAASC,GAAc1B,CAAI,EAC3B2B,EAAcH,EAAWC,CAAM,EAC9BE,IACHH,EAAWC,CAAM,EAAIE,EAAc,CAAC,GAEtCA,EAAY,KAAK3B,CAAI,CACvB,CAAC,EACD,IAAI4B,EAAU,OAAO,KAAKJ,CAAU,EAChCK,EAAYD,EAAQ,IAAI,SAASH,EAAQ,CAC3C,IAAIE,EAAcH,EAAWC,CAAM,EACnC,GAAIE,EAAY,SAAW,EACzB,OAAOA,EAAY,CAAC,EAEpB,OAAQF,EAAQ,CACd,IAAK,OACL,IAAK,UACH,OAAOE,EAAY,CAAC,EACtB,IAAK,SACH,OAAOG,GAAeH,CAAW,EACnC,IAAK,SACH,OAAOI,GAAeJ,EAAa3I,CAAI,EACzC,IAAK,SACH,OAAOgJ,GAAeL,EAAa3I,CAAI,EACzC,IAAK,QAIH,OAHA2I,EAAcA,EAAY,OAAO,SAASM,EAAG,CAC3C,OAAOA,IAAMjJ,EAAK,cACpB,CAAC,EACI2I,EAAY,OAGV7B,EAAK,UAAU,CACpB,KAAM,QACN,MAAOA,EAAK,SAAS6B,EAAY,IAAI,SAASM,EAAG,CAC/C,OAAOA,EAAE,SACX,CAAC,EAAGjJ,CAAI,CACV,EAAGA,CAAI,EAPEA,EAAK,eAQhB,QACE,OAAOkJ,GAAeP,EAAa3I,CAAI,CAC3C,CAEJ,CAAC,EACD,OAAI6I,EAAU,SAAW,EAChBA,EAAU,CAAC,EAEX/B,EAAK,UAAU+B,EAAW7I,CAAI,CAEzC,EACA8G,EAAK,OAAS,UAAW,CACvB,IAAIlG,EAAI,UAAU,OAClB,GAAI,CAACA,EACH,MAAO,GAET,IAAIuI,EAAM,UAAU,CAAC,EACrB,GAAI,CAACA,GAAO,OAAOA,EAAI,SAAW,YAAc,OAAOA,EAAI,aAAe,WACxE,MAAO,GAET,GAAIvI,IAAM,EACR,MAAO,GAET,IAAIkH,EAAWqB,EAAI,SACfxI,EACJ,IAAKA,EAAI,EAAGA,EAAIC,EAAGD,IACjB,GAAImH,EAAS,QAAQ,UAAUnH,CAAC,CAAC,IAAM,EACrC,MAAO,GAGX,MAAO,EACT,EACAmG,EAAK,QAAU,SAASxH,EAAM,CAC5BqG,EAAM,8BAA+BrG,CAAI,EACzCqH,EAAI,IAAM,IAAIjB,EAAWpG,CAAI,CAC/B,EACA,OAAO,eAAewH,EAAK,UAAW,aAAc,CAClD,WAAY,GACZ,IAAK,UAAW,CACd,IAAIE,EAAOF,EAAK,OAAO,KAAM,SAAS,EAAI,KAAK,eAAiB,KAChE,OAAIE,EAAK,KACAA,EAAK,KAEVF,EAAK,OAAOE,EAAM,UAAU,EACvBA,EAAK,kBAEPF,EAAK,OAAOE,EAAM,OAAO,EAAI,OAASA,EAAK,QACpD,CACF,CAAC,EACDF,EAAK,UAAU,MAAQ,SAASkB,EAAKhI,EAAM,CACzC,OAAIA,GACFA,EAAO,CACL,OAAQ,CAAC,CAACA,EAAK,cAAgB,EAE/B,UAAWA,EAAK,UAChB,aAAc,CAAC,CAACA,EAAK,aACrB,KAAM,CAAC,CAACA,EAAK,kBACb,KAAM,CAAC,CAACA,EAAK,WAAa,CAE5B,EACO,KAAK,MAAMgI,EAAKhI,CAAI,GAEpB,KAAK,WAAW,KAAK,SAASgI,CAAG,CAAC,CAE7C,EACAlB,EAAK,UAAU,QAAUrB,EAAM,iBAC/BqB,EAAK,UAAU,eAAiB,SAASsC,EAAMC,EAAM,CACnD,OAAO,KAAK,OAAO,IAAIhF,EAAI+E,CAAI,EAAG,IAAI/E,EAAIgF,CAAI,CAAC,CACjD,EACAvC,EAAK,UAAU,eAAiB,SAASE,EAAMhH,EAAM,CACnD,GAAI,CAAC8G,EAAK,OAAOE,CAAI,EACnB,MAAM,IAAI,MAAM5H,EAAG,iBAAkB4H,CAAI,CAAC,EAE5C,GAAI,CAACF,EAAK,OAAO,KAAM,QAAS,SAAS,GAAKA,EAAK,OAAOE,EAAM,SAAS,EACvE,OAAO,KAAK,eAAeA,EAAK,eAAgBhH,CAAI,EAEtDA,EAAOA,GAAQ,CAAC,EAChBA,EAAK,SAAWA,EAAK,UAAY,CAAC,EAClC,IAAIsJ,EAAUxL,EACd,GAAIgJ,EAAK,OAAO,KAAM,SAAU,OAAO,GAAKA,EAAK,OAAOE,EAAM,SAAU,OAAO,IAC7ElJ,EAAM,KAAK,KAAO,IAAMkJ,EAAK,KAC7BsC,EAAWtJ,EAAK,SAASlC,CAAG,EACxBwL,GACF,OAAOA,EAOX,GAJAA,EAAW,IAAIC,EAAS,IAAI,EACxBzL,IACFkC,EAAK,SAASlC,CAAG,EAAIwL,GAEnBxC,EAAK,OAAOE,EAAM,OAAO,EAAG,CAC9B,IAAIwC,EAAYxC,EAAK,MAAM,IAAI,SAASiC,EAAG,CACzC,OAAO,KAAK,eAAeA,EAAGjJ,CAAI,CACpC,EAAG,IAAI,EACPsJ,EAAS,MAAQ,SAASvE,EAAK,CAC7B,IAAI0E,EAAQ1E,EAAI,SAAS,EACrB2E,EAAYF,EAAUC,CAAK,EAC/B,GAAIC,IAAc,OAChB,MAAM,IAAI,MAAMtK,EAAG,0BAA2BqK,CAAK,CAAC,EAEtD,OAAOD,EAAUC,CAAK,EAAE,MAAM1E,CAAG,CACnC,CACF,MACE,KAAK,QAAQuE,EAAUtC,EAAMhH,CAAI,EAEnC,GAAI,CAACsJ,EAAS,MACZ,MAAM,IAAI,MAAMlK,EAAG,uBAAwB4H,EAAM,IAAI,CAAC,EAExD,OAAO,OAAO,OAAOsC,CAAQ,CAC/B,EACAxC,EAAK,UAAU,OAAS,SAASxC,EAAK5D,EAAK4I,EAAU,CACnD,IAAIvE,EAAM,IAAIV,EAAIC,EAAK5D,CAAG,EACtBsH,EAAM2B,EAAU,KAAM5E,EAAKuE,CAAQ,EACvC,OAAKvE,EAAI,QAAQ,EAGV,CAAE,MAAOiD,EAAK,OAAQjD,EAAI,GAAI,EAF5B,CAAE,MAAO,OAAQ,OAAQ,EAAG,CAGvC,EACA+B,EAAK,UAAU,OAAS,SAASkB,EAAK1D,EAAK5D,EAAK,CAC9C,IAAIqE,EAAM,IAAIV,EAAIC,EAAK5D,CAAG,EAE1B,OADA,KAAK,OAAOqE,EAAKiD,CAAG,EACfjD,EAAI,QAAQ,EAGVA,EAAI,IAFFT,EAAI,OAASS,EAAI,GAG5B,EACA+B,EAAK,UAAU,OAAS,SAASE,EAAMhH,EAAM,CAC3C,IAAI4J,EAEF9C,EAAK,OAAOE,CAAI,GAAK,KAAK,YAAY,EAAE,OAAOA,EAAK,YAAY,CAAC,EAEnE,MAAI,CAAC4C,GAAS,EAAE5J,GAAQA,EAAK,QACpB4J,EAEF,KAAK,UAAU,KAAK,OAAO,CAAE,YAAa,EAAK,CAAC,CAAC,IAAM,KAAK,UAAU5C,EAAK,OAAO,CAAE,YAAa,EAAK,CAAC,CAAC,CACjH,EACAF,EAAK,UAAU,YAAc,SAASzG,EAAW,CAC/C,GAAKA,EAOH,OAAOoF,EAAM,QAAQ,KAAK,UAAU,KAAK,OAAO,CAAC,EAAGpF,CAAS,EAN7D,GAAI,CAAC,KAAK,MAAM,IAAK,CACnB,IAAIwJ,EAAY,KAAK,UAAU,KAAK,OAAO,CAAC,EAC5C,KAAK,MAAM,IAAMpE,EAAM,QAAQoE,CAAS,EAAE,SAAS,QAAQ,CAC7D,CACA,OAAOpE,EAAM,WAAW,KAAK,MAAM,IAAK,QAAQ,CAIpD,EACAqB,EAAK,UAAU,WAAa,SAASxC,EAAKgF,EAAUQ,EAAS,CAC3D,IAAI/E,EAAM,IAAIV,EAAIC,CAAG,EACjB0D,EAAM2B,EAAU,KAAM5E,EAAKuE,EAAUQ,CAAO,EAChD,GAAI,CAAC/E,EAAI,QAAQ,EACf,MAAM,IAAI,MAAM,kBAAkB,EAEpC,GAAI,CAAC+E,GAAW/E,EAAI,IAAMT,EAAI,OAC5B,MAAM,IAAI,MAAM,eAAe,EAEjC,OAAO0D,CACT,EACAlB,EAAK,UAAU,WAAa,SAAS1G,EAAK,CACxC,OAAO,KAAK,MAAM,KAAK,MAAMA,CAAG,EAAG,CAAE,OAAQ,CAAE,CAAC,CAClD,EACA0G,EAAK,UAAU,QAAU,UAAW,CAClC,IAAIgB,EAAW,KAAK,SAChBiC,EAAYC,GAAalC,CAAQ,EACrC,GAAIX,GAAYW,CAAQ,EACtB,OAAO1I,EAAG,OAAQ2K,CAAS,EAE3B,IAAIhJ,EAAM,KAAK,OAAO,CAAE,YAAa,GAAM,QAAS,EAAK,CAAC,EAC1D,OAAI,OAAOA,GAAO,UAAY,CAAC+F,EAAK,OAAO,KAAM,SAAS,IACxD/F,EAAI,KAAO,QAEN3B,EAAG,UAAW2K,EAAWhJ,CAAG,CAEvC,EACA+F,EAAK,UAAU,QAAU,SAASkB,EAAKhI,EAAM,CAC3C,IAAIwD,GAASxD,GAAQA,EAAK,oBAAsB,EAC5CiK,EAAYjK,GAAQA,EAAK,UACzBkK,EAAMC,EACV,OAAIF,IACFE,EAAO,CAAC,EACRD,EAAO,SAASf,EAAKnC,EAAM,CACzBiD,EAAU,KAAK,KAAME,EAAK,MAAM,EAAGhB,EAAKnC,EAAMgB,CAAG,CACnD,GAEK,KAAK,OAAOA,EAAKxE,EAAO0G,EAAMC,CAAI,CAC3C,EACArD,EAAK,UAAU,OAASrB,EAAM,iBAC9BqB,EAAK,UAAU,OAAS,SAAS9G,EAAM,CACrC,OAAO,KAAK,OAAO,CACjB,YAAa,CAAC,EAAEA,GAAQA,EAAK,aAC7B,QAAS,CAAC,EAAEA,GAAQA,EAAK,QAC3B,CAAC,CACH,EACA8G,EAAK,UAAU,SAAW,SAASkB,EAAK,CACtCrB,EAAI,IAAM,EACV,KAAK,OAAOA,EAAKqB,CAAG,EACpB,IAAI1D,EAAMmB,EAAM,UAAUkB,EAAI,GAAG,EACjC,OAAIA,EAAI,QAAQ,EACdA,EAAI,IAAI,KAAKrC,EAAK,EAAG,EAAGqC,EAAI,GAAG,EAE/B,KAAK,OAAO,IAAItC,EAAIC,CAAG,EAAG0D,CAAG,EAExB1D,CACT,EACAwC,EAAK,UAAU,OAAS,UAAW,CACjC,OAAO,KAAK,OAAO,CAAE,YAAa,EAAK,CAAC,CAC1C,EACAA,EAAK,UAAU,SAAW,SAASkB,EAAK,CACtC,OACS,KAAK,UADVA,IAAQ,OACY,KAAK,OAAO,CAAE,QAAS,EAAK,CAAC,EAE/B,KAAK,MAAMA,EAAK,CAAE,OAAQ,CAAE,CAAC,CAFG,CAGxD,EACAlB,EAAK,UAAU,KAAO,SAASkB,EAAK,CAClC,IAAIoC,EAAS,KAAK,mBAClB,OAAOA,IAAW,KAAO,KAAO,IAAIA,EAAOpC,CAAG,CAChD,EACAlB,EAAK,UAAU,OAAS,SAAS9G,EAAM,CACrCA,EAAK,QAAUA,EAAK,SAAW,CAAC,EAChC,IAAIwB,EAAO,KAAK,KAChB,GAAIA,IAAS,OAAQ,CACnB,GAAIxB,EAAK,SAAWA,EAAK,QAAQwB,CAAI,EACnC,OAAOA,EAETxB,EAAK,QAAQwB,CAAI,EAAI,EACvB,CACA,IAAIuF,EAAS,CAAC,EACV,KAAK,OAAS,SAChBA,EAAO,KAAOvF,GAEhBuF,EAAO,KAAO,KAAK,SACnB,IAAIsD,EAAgB,KAAK,OAAOtD,EAAQ/G,CAAI,EAC5C,OAAIqK,IAAkB,SACpBtD,EAASsD,GAEPrK,EAAK,cACH,KAAK,SAAW,KAAK,QAAQ,SAC/B+G,EAAO,QAAU,KAAK,SAEpB,KAAK,MAAQ,SACfA,EAAO,IAAM,KAAK,MAGfA,CACT,EACAD,EAAK,UAAU,yBAA2B,UAAW,CACnD,IAAItF,EAAO,KAAK,WAChB,GAAIA,IAAS,OACX,OAAO,KAET,IAAI8I,EAAO,CAAC9I,EAAK,QAAQ,GAAG,EAAI,SAAWA,EAAO,KAAO,QAAUA,EAC/D+I,EAAO,kCAAoCD,EAAO,aAClDF,EAAS,IAAI,SAASG,CAAI,EAAE,EAChC,OAAAH,EAAO,KAAO,KACdA,EAAO,UAAU,OAAS,IAAI,SAAS,UAAYE,EAAO,GAAG,EAC7DF,EAAO,UAAU,UAAYA,EAAO,UAAU,OACvCA,CACT,EACAtD,EAAK,UAAU,MAAQ,SAAS/B,EAAK,CACnC,IAAIrE,EAAMqE,EAAI,IACViD,EAAM,KAAK,MAAMjD,CAAG,EACxB,OAAAA,EAAI,IAAMrE,EACHsH,CACT,EACAlB,EAAK,UAAU,OAASrB,EAAM,iBAC9BqB,EAAK,UAAU,MAAQrB,EAAM,iBAC7BqB,EAAK,UAAU,OAASrB,EAAM,iBAC9BqB,EAAK,UAAU,OAASrB,EAAM,iBAC9BqB,EAAK,UAAU,MAAQrB,EAAM,iBAC7BqB,EAAK,UAAU,MAAQrB,EAAM,iBAC7BqB,EAAK,UAAU,QAAUrB,EAAM,iBAC/BqB,EAAK,UAAU,OAASrB,EAAM,iBAC9BqB,EAAK,UAAU,WAAa,UAAW,CACrC,OAAO,KAAK,OACd,EACAA,EAAK,UAAU,eAAiBA,EAAK,UAAU,YAC/CA,EAAK,UAAU,QAAU,SAAS0D,EAAU,CAC1C,OAAO,KAAK,MAAQ,CAACA,EAAW,KAAK,KAAO,KAAK,UACnD,EACA1D,EAAK,UAAU,UAAYA,EAAK,UAAU,OAC1CA,EAAK,UAAU,YAAc,UAAW,CACtC,OAAO,KAAK,QACd,EACA,SAAS2D,EAAcC,EAAU,CAC/B5D,EAAK,KAAK,IAAI,EACd,KAAK,mBAAqB,KAAK,yBAAyB,EACnD4D,GACH,OAAO,OAAO,IAAI,CAEtB,CACA5L,EAAK,SAAS2L,EAAe3D,CAAI,EACjC2D,EAAc,UAAU,QAAU,SAASnB,EAAUtC,EAAM,CACrDA,EAAK,WAAa,KAAK,WACzBsC,EAAS,MAAQ,KAAK,MAE1B,EACAmB,EAAc,UAAU,MAAQ,SAASzC,EAAK,CAC5C,YAAK,OAAOA,EAAK,OAAQ2C,EAAiB,EACnC3C,CACT,EACAyC,EAAc,UAAU,OAAS,UAAW,CAC1C,OAAO,KAAK,QACd,EACAA,EAAc,UAAU,QAAUhF,EAAM,QACxC,SAASe,GAAW,CAClBiE,EAAc,KAAK,IAAI,CACzB,CACA3L,EAAK,SAAS0H,EAAUiE,CAAa,EACrCjE,EAAS,UAAU,OAAS,SAASwB,EAAKxE,EAAO0G,EAAM,CACrD,IAAI3F,EAAKyD,IAAQ,KACjB,MAAI,CAACzD,GAAM2F,GACTA,EAAKlC,EAAK,IAAI,EAETzD,CACT,EACAiC,EAAS,UAAU,MAAQ,UAAW,CACpC,OAAO,IACT,EACAA,EAAS,UAAU,MAAQ,UAAW,CACtC,EACAA,EAAS,UAAU,OAAS,SAASzB,EAAKiD,EAAK,CACzCA,IAAQ,MACV2C,GAAkB3C,EAAK,IAAI,CAE/B,EACAxB,EAAS,UAAU,OAAS,UAAW,CACrC,MAAO,EACT,EACAA,EAAS,UAAU,QAAUA,EAAS,UAAU,OAChDA,EAAS,UAAU,SAAW,OAC9BA,EAAS,UAAU,OAASA,EAAS,UAAU,MAC/C,SAASV,GAAc,CACrB2E,EAAc,KAAK,IAAI,CACzB,CACA3L,EAAK,SAASgH,EAAa2E,CAAa,EACxC3E,EAAY,UAAU,OAAS,SAASkC,EAAKxE,EAAO0G,EAAM,CACxD,IAAI3F,EAAK,OAAOyD,GAAO,UACvB,MAAI,CAACzD,GAAM2F,GACTA,EAAKlC,EAAK,IAAI,EAETzD,CACT,EACAuB,EAAY,UAAU,MAAQ,SAASf,EAAK,CAC1C,OAAOA,EAAI,YAAY,CACzB,EACAe,EAAY,UAAU,MAAQ,SAASf,EAAK,CAC1CA,EAAI,YAAY,CAClB,EACAe,EAAY,UAAU,OAAS,SAASf,EAAKiD,EAAK,CAC5C,OAAOA,GAAO,WAChB2C,GAAkB3C,EAAK,IAAI,EAE7BjD,EAAI,aAAaiD,CAAG,CACtB,EACAlC,EAAY,UAAU,OAAS,SAAS8E,EAAMC,EAAM,CAClD,OAAOD,EAAK,aAAaC,CAAI,CAC/B,EACA/E,EAAY,UAAU,SAAW,UACjCA,EAAY,UAAU,OAAS,UAAW,CACxC,OAAOY,EAAO,YAAY,CAC5B,EACA,SAASL,IAAU,CACjBoE,EAAc,KAAK,IAAI,CACzB,CACA3L,EAAK,SAASuH,GAASoE,CAAa,EACpCpE,GAAQ,UAAU,OAAS,SAAS2B,EAAKxE,EAAO0G,EAAM,CACpD,IAAI3F,EAAKyD,KAASA,EAAM,GACxB,MAAI,CAACzD,GAAM2F,GACTA,EAAKlC,EAAK,IAAI,EAETzD,CACT,EACA8B,GAAQ,UAAU,MAAQ,SAAStB,EAAK,CACtC,OAAOA,EAAI,QAAQ,CACrB,EACAsB,GAAQ,UAAU,MAAQ,SAAStB,EAAK,CACtCA,EAAI,QAAQ,CACd,EACAsB,GAAQ,UAAU,OAAS,SAAStB,EAAKiD,EAAK,CACxCA,KAASA,EAAM,IACjB2C,GAAkB3C,EAAK,IAAI,EAE7BjD,EAAI,SAASiD,CAAG,CAClB,EACA3B,GAAQ,UAAU,OAAS,SAASuE,EAAMC,EAAM,CAC9C,OAAOD,EAAK,SAASC,CAAI,CAC3B,EACAxE,GAAQ,UAAU,SAAW,MAC7BA,GAAQ,UAAU,OAAS,UAAW,CACpC,OAAOK,EAAO,QAAQ,GAAG,EAAI,CAC/B,EACA,SAASJ,GAAW,CAClBmE,EAAc,KAAK,IAAI,CACzB,CACA3L,EAAK,SAASwH,EAAUmE,CAAa,EACrCnE,EAAS,UAAU,OAAS,SAAS0B,EAAKxE,EAAO0G,EAAM,CACrD,IAAI3F,EAAK,OAAOyD,GAAO,UAAYA,EAAM,IAAM,GAAK8C,GAAW9C,CAAG,EAClE,MAAI,CAACzD,GAAM2F,GACTA,EAAKlC,EAAK,IAAI,EAETzD,CACT,EACA+B,EAAS,UAAU,MAAQ,SAASvB,EAAK,CACvC,IAAIP,EAAIO,EAAI,SAAS,EACrB,GAAI,CAAC+F,GAAWtG,CAAC,EACf,MAAM,IAAI,MAAM,0BAA0B,EAE5C,OAAOA,CACT,EACA8B,EAAS,UAAU,MAAQ,SAASvB,EAAK,CACvCA,EAAI,SAAS,CACf,EACAuB,EAAS,UAAU,OAAS,SAASvB,EAAKiD,EAAK,EACzC,OAAOA,GAAO,UAAYA,EAAM,GAAK,CAAC8C,GAAW9C,CAAG,IACtD2C,GAAkB3C,EAAK,IAAI,EAE7BjD,EAAI,UAAUiD,CAAG,CACnB,EACA1B,EAAS,UAAU,OAAS,SAASsE,EAAMC,EAAM,CAC/C,OAAOD,EAAK,UAAUC,CAAI,CAC5B,EACAvE,EAAS,UAAU,QAAU,SAASgD,EAAUtC,EAAM,CACpD,OAAQA,EAAK,SAAU,CACrB,IAAK,MACHsC,EAAS,MAAQtC,EAAK,MACtB,MACF,IAAK,gBACL,IAAK,OACHsC,EAAS,MAAQ,KAAK,KAC1B,CACF,EACAhD,EAAS,UAAU,SAAW,OAC9BA,EAAS,UAAU,OAAS,UAAW,CACrC,OAAOI,EAAO,QAAQ,CACxB,EACAJ,EAAS,OAAS,SAASyE,EAASC,EAAU,CAC5CD,EAAUA,GAAW,CAAC,EACtB,IAAIE,EAAU,CACZ,SAAU,YACV,WAAY,cACZ,SAAU,YACV,OAAQ,UACR,QAAS,WACT,QAAS,SACX,EACIjE,EAAO,IAAIkE,EAAiBF,CAAQ,EACxC,cAAO,KAAKC,CAAO,EAAE,QAAQ,SAASzJ,EAAM,CAC1C,GAAIuJ,EAAQvJ,CAAI,IAAM,OACpB,MAAM,IAAI,MAAMpC,EAAG,oCAAqCoC,CAAI,CAAC,EAE/DwF,EAAKiE,EAAQzJ,CAAI,CAAC,EAAIuJ,EAAQvJ,CAAI,CACpC,CAAC,EACM,OAAO,OAAOwF,CAAI,CAC3B,EACA,SAASZ,GAAY,CACnBqE,EAAc,KAAK,IAAI,CACzB,CACA3L,EAAK,SAASsH,EAAWqE,CAAa,EACtCrE,EAAU,UAAU,OAAS,SAAS4B,EAAKxE,EAAO0G,EAAM,CACtD,IAAI3F,EAAK,OAAOyD,GAAO,SACvB,MAAI,CAACzD,GAAM2F,GACTA,EAAKlC,EAAK,IAAI,EAETzD,CACT,EACA6B,EAAU,UAAU,MAAQ,SAASrB,EAAK,CACxC,OAAOA,EAAI,UAAU,CACvB,EACAqB,EAAU,UAAU,MAAQ,SAASrB,EAAK,CACxCA,EAAI,UAAU,CAChB,EACAqB,EAAU,UAAU,OAAS,SAASrB,EAAKiD,EAAK,CAC1C,OAAOA,GAAO,UAChB2C,GAAkB3C,EAAK,IAAI,EAE7BjD,EAAI,WAAWiD,CAAG,CACpB,EACA5B,EAAU,UAAU,OAAS,SAASwE,EAAMC,EAAM,CAChD,OAAOD,EAAK,WAAWC,CAAI,CAC7B,EACAzE,EAAU,UAAU,QAAU,SAASkD,EAAUtC,EAAM,CACrD,OAAQA,EAAK,SAAU,CACrB,IAAK,QACL,IAAK,MACHsC,EAAS,MAAQtC,EAAK,MACtB,MACF,IAAK,gBACL,IAAK,OACHsC,EAAS,MAAQ,SAASvE,EAAK,CAC7B,OAAOA,EAAI,SAAS,CACtB,CACJ,CACF,EACAqB,EAAU,UAAU,SAAW,QAC/BA,EAAU,UAAU,OAAS,UAAW,CACtC,OAAOM,EAAO,UAAU,GAAG,CAC7B,EACA,SAASV,GAAa,CACpByE,EAAc,KAAK,IAAI,CACzB,CACA3L,EAAK,SAASkH,EAAYyE,CAAa,EACvCzE,EAAW,UAAU,OAAS,SAASgC,EAAKxE,EAAO0G,EAAM,CACvD,IAAI3F,EAAK,OAAOyD,GAAO,SACvB,MAAI,CAACzD,GAAM2F,GACTA,EAAKlC,EAAK,IAAI,EAETzD,CACT,EACAyB,EAAW,UAAU,MAAQ,SAASjB,EAAK,CACzC,OAAOA,EAAI,WAAW,CACxB,EACAiB,EAAW,UAAU,MAAQ,SAASjB,EAAK,CACzCA,EAAI,WAAW,CACjB,EACAiB,EAAW,UAAU,OAAS,SAASjB,EAAKiD,EAAK,CAC3C,OAAOA,GAAO,UAChB2C,GAAkB3C,EAAK,IAAI,EAE7BjD,EAAI,YAAYiD,CAAG,CACrB,EACAhC,EAAW,UAAU,OAAS,SAAS4E,EAAMC,EAAM,CACjD,OAAOD,EAAK,YAAYC,CAAI,CAC9B,EACA7E,EAAW,UAAU,QAAU,SAASsD,EAAUtC,EAAM,CACtD,OAAQA,EAAK,SAAU,CACrB,IAAK,SACL,IAAK,QACL,IAAK,MACHsC,EAAS,MAAQtC,EAAK,MACtB,MACF,IAAK,gBACL,IAAK,OACHsC,EAAS,MAAQ,SAASvE,EAAK,CAC7B,OAAOA,EAAI,SAAS,CACtB,CACJ,CACF,EACAiB,EAAW,UAAU,SAAW,SAChCA,EAAW,UAAU,OAAS,UAAW,CACvC,OAAOU,EAAO,UAAU,CAC1B,EACA,SAASD,GAAa,CACpBgE,EAAc,KAAK,IAAI,CACzB,CACA3L,EAAK,SAAS2H,EAAYgE,CAAa,EACvChE,EAAW,UAAU,OAAS,SAASuB,EAAKxE,EAAO0G,EAAM,CACvD,IAAI3F,EAAK,OAAOyD,GAAO,SACvB,MAAI,CAACzD,GAAM2F,GACTA,EAAKlC,EAAK,IAAI,EAETzD,CACT,EACAkC,EAAW,UAAU,MAAQ,SAAS1B,EAAK,CACzC,OAAOA,EAAI,WAAW,CACxB,EACA0B,EAAW,UAAU,MAAQ,SAAS1B,EAAK,CACzCA,EAAI,WAAW,CACjB,EACA0B,EAAW,UAAU,OAAS,SAAS1B,EAAKiD,EAAK,CAC3C,OAAOA,GAAO,UAChB2C,GAAkB3C,EAAK,IAAI,EAE7BjD,EAAI,YAAYiD,CAAG,CACrB,EACAvB,EAAW,UAAU,OAAS,SAASmE,EAAMC,EAAM,CACjD,OAAOD,EAAK,YAAYC,CAAI,CAC9B,EACApE,EAAW,UAAU,QAAU,SAAS6C,EAAUtC,EAAM,CACtD,OAAQA,EAAK,SAAU,CACrB,IAAK,QACL,IAAK,SACHsC,EAAS,MAAQ,KAAK,KAC1B,CACF,EACA7C,EAAW,UAAU,SAAW,SAChCA,EAAW,UAAU,OAAS,UAAW,CACvC,OAAOC,EAAO,WAAWA,EAAO,QAAQ,EAAE,CAAC,CAC7C,EACA,SAASX,GAAY,CACnB0E,EAAc,KAAK,IAAI,CACzB,CACA3L,EAAK,SAASiH,EAAW0E,CAAa,EACtC1E,EAAU,UAAU,OAAS,SAASiC,EAAKxE,EAAO0G,EAAM,CACtD,IAAI3F,EAAKvF,EAAQ,SAASgJ,CAAG,EAC7B,MAAI,CAACzD,GAAM2F,GACTA,EAAKlC,EAAK,IAAI,EAETzD,CACT,EACAwB,EAAU,UAAU,MAAQ,SAAShB,EAAK,CACxC,OAAOA,EAAI,UAAU,CACvB,EACAgB,EAAU,UAAU,MAAQ,SAAShB,EAAK,CACxCA,EAAI,UAAU,CAChB,EACAgB,EAAU,UAAU,OAAS,SAAShB,EAAKiD,EAAK,CACzChJ,EAAQ,SAASgJ,CAAG,GACvB2C,GAAkB3C,EAAK,IAAI,EAE7BjD,EAAI,WAAWiD,CAAG,CACpB,EACAjC,EAAU,UAAU,OAAS,SAAS6E,EAAMC,EAAM,CAChD,OAAOD,EAAK,WAAWC,CAAI,CAC7B,EACA9E,EAAU,UAAU,QAAUU,EAAW,UAAU,QACnDV,EAAU,UAAU,MAAQ,SAAShF,EAAKf,EAAM,CAC9C,IAAIsE,EACJ,QAAStE,GAAQA,EAAK,QAAU,EAAG,CACjC,IAAK,GACH,YAAK,OAAOe,EAAK,OAAQ4J,EAAiB,EACnC5J,EAAI,SAAS,QAAQ,EAC9B,IAAK,GACH,GAAI,OAAOA,GAAO,SAChB,MAAM,IAAI,MAAM3B,EAAG,8BAA+B2B,CAAG,CAAC,EAExD,OAAAuD,EAAMmB,EAAM,WAAW1E,EAAK,QAAQ,EACpC,KAAK,OAAOuD,EAAK,OAAQqG,EAAiB,EACnCrG,EACT,IAAK,GACH,GAAI,CAAC6G,GAAapK,CAAG,EACnB,MAAM,IAAI,MAAM3B,EAAG,8BAA+B2B,CAAG,CAAC,EAExD,OAAAuD,EAAMmB,EAAM,WAAW1E,EAAI,IAAI,EAC/B,KAAK,OAAOuD,EAAK,OAAQqG,EAAiB,EACnCrG,EACT,QACE,YAAK,OAAOvD,EAAK,OAAQ4J,EAAiB,EACnClF,EAAM,WAAW1E,CAAG,CAC/B,CACF,EACAgF,EAAU,UAAU,QAAU/G,EAAQ,QACtC+G,EAAU,UAAU,SAAW,QAC/BA,EAAU,UAAU,OAAS,UAAW,CACtC,OAAOW,EAAO,WAAWA,EAAO,QAAQ,EAAE,CAAC,CAC7C,EACA,SAAS0E,GAAUrE,EAAQ/G,EAAM,CAE/B,GADA8G,EAAK,KAAK,IAAI,EACV,CAAC,MAAM,QAAQC,CAAM,EACvB,MAAM,IAAI,MAAM3H,EAAG,6BAA8B2H,CAAM,CAAC,EAE1D,GAAI,CAACA,EAAO,OACV,MAAM,IAAI,MAAM,aAAa,EAE/B,KAAK,MAAQ,OAAO,OAAOA,EAAO,IAAI,SAAShG,EAAK,CAClD,OAAO+F,EAAK,UAAU/F,EAAKf,CAAI,CACjC,CAAC,CAAC,EACF,KAAK,eAAiB,CAAC,EACvB,KAAK,MAAM,QAAQ,SAASgH,EAAMrG,EAAG,CACnC,GAAImG,EAAK,OAAOE,EAAM,OAAO,EAC3B,MAAM,IAAI,MAAM,kCAAkC,EAEpD,IAAIqE,EAASrE,EAAK,WAClB,GAAI,KAAK,eAAeqE,CAAM,IAAM,OAClC,MAAM,IAAI,MAAMjM,EAAG,kCAAmCiM,CAAM,CAAC,EAE/D,KAAK,eAAeA,CAAM,EAAI1K,CAChC,EAAG,IAAI,CACT,CACA7B,EAAK,SAASsM,GAAWtE,CAAI,EAC7BsE,GAAU,UAAU,mBAAqB,UAAW,CAClD,MAAM,IAAI,MAAM,mCAAmC,CACrD,EACAA,GAAU,UAAU,MAAQ,SAASrG,EAAK,CACxC,KAAK,MAAMA,EAAI,SAAS,CAAC,EAAE,MAAMA,CAAG,CACtC,EACAqG,GAAU,UAAU,OAAS,SAASR,EAAMC,EAAM,CAChD,IAAIhL,EAAK+K,EAAK,SAAS,EACnB9K,EAAK+K,EAAK,SAAS,EACvB,OAAIhL,IAAOC,EACF,KAAK,MAAMD,CAAE,EAAE,OAAO+K,EAAMC,CAAI,EAEhChL,EAAKC,EAAK,GAAK,CAE1B,EACAsL,GAAU,UAAU,OAAS,SAASrE,EAAQ/G,EAAM,CAClD,OAAO,KAAK,MAAM,IAAI,SAASiJ,EAAG,CAChC,OAAOA,EAAE,OAAOjJ,CAAI,CACtB,CAAC,CACH,EACAoL,GAAU,UAAU,SAAW,UAAW,CACxC,OAAO,KAAK,KACd,EACA,SAAS5D,EAAmBT,EAAQ/G,EAAM,CACxCoL,GAAU,KAAK,KAAMrE,EAAQ/G,CAAI,EACjC,KAAK,iBAAmB,KACxB,KAAK,eAAiB,CAAC,EACvB,KAAK,MAAM,QAAQ,SAASgH,EAAMyC,EAAO,CACvC,GAAI3C,EAAK,OAAOE,EAAM,WAAY,SAAS,EACpC,KAAK,mBACR,KAAK,iBAAmB,CAAC,GAE3B,KAAK,iBAAiB,KAAK,CAAE,MAAAyC,EAAO,KAAAzC,CAAK,CAAC,MACrC,CACL,IAAIyB,EAASC,GAAc1B,CAAI,EAC/B,GAAI,KAAK,eAAeyB,CAAM,IAAM,OAClC,MAAM,IAAI,MAAMrJ,EAAG,gCAAiC,IAAI,CAAC,EAE3D,KAAK,eAAeqJ,CAAM,EAAIgB,CAChC,CACF,EAAG,IAAI,EACP,OAAO,OAAO,IAAI,CACpB,CACA3K,EAAK,SAAS0I,EAAoB4D,EAAS,EAC3C5D,EAAmB,UAAU,UAAY,SAASQ,EAAK,CACrD,IAAIyB,EAAQ,KAAK,eAAe6B,GAAetD,CAAG,CAAC,EACnD,OAAI,KAAK,mBACPyB,EAAQ,KAAK,gBAAgBzB,EAAKyB,CAAK,GAElCA,CACT,EACAjC,EAAmB,UAAU,gBAAkB,SAAS2B,EAAKM,EAAO,CAClE,IAAI8B,EAAkB,KAAK,iBACvB5K,EAAGC,EAAGyK,EACV,IAAK1K,EAAI,EAAGC,EAAI2K,EAAgB,OAAQ5K,EAAIC,EAAGD,IAE7C,GADA0K,EAASE,EAAgB5K,CAAC,EACtB0K,EAAO,KAAK,OAAOlC,CAAG,EACxB,GAAIM,IAAU,OACZA,EAAQ4B,EAAO,UAEf,OAAM,IAAI,MAAM,sBAAsB,EAI5C,OAAO5B,CACT,EACAjC,EAAmB,UAAU,OAAS,SAASQ,EAAKxE,EAAO0G,EAAMC,EAAM,CACrE,IAAIV,EAAQ,KAAK,UAAUzB,CAAG,EAC1BzD,EAAKkF,IAAU,OACnB,OAAIlF,EACK,KAAK,MAAMkF,CAAK,EAAE,OAAOzB,EAAKxE,EAAO0G,EAAMC,CAAI,GAEpDD,GACFA,EAAKlC,EAAK,IAAI,EAETzD,EACT,EACAiD,EAAmB,UAAU,MAAQ,SAASzC,EAAK,CACjD,IAAI0E,EAAQ1E,EAAI,SAAS,EACrBuD,EAAa,KAAK,MAAMmB,CAAK,EACjC,GAAInB,EACF,OAAOA,EAAW,MAAMvD,CAAG,EAE3B,MAAM,IAAI,MAAM3F,EAAG,0BAA2BqK,CAAK,CAAC,CAExD,EACAjC,EAAmB,UAAU,OAAS,SAASzC,EAAKiD,EAAK,CACvD,IAAIyB,EAAQ,KAAK,UAAUzB,CAAG,EAC1ByB,IAAU,QACZkB,GAAkB3C,EAAK,IAAI,EAE7BjD,EAAI,UAAU0E,CAAK,EACfzB,IAAQ,MACV,KAAK,MAAMyB,CAAK,EAAE,OAAO1E,EAAKiD,CAAG,CAErC,EACAR,EAAmB,UAAU,QAAU,SAAS8B,EAAUtC,EAAMhH,EAAM,CACpE,IAAIW,EAAGC,EAAG4K,EACV,IAAK7K,EAAI,EAAGC,EAAI,KAAK,MAAM,OAAQD,EAAIC,EAAGD,IAAK,CAC7C,GAAI,CACF6K,EAAe,KAAK,MAAM7K,CAAC,EAAE,eAAeqG,EAAMhH,CAAI,CACxD,MAAc,CACZ,QACF,CACAsJ,EAAS,MAAQ,SAASvE,EAAK,CAC7B,OAAOyG,EAAa,MAAMzG,CAAG,CAC/B,EACA,MACF,CACF,EACAyC,EAAmB,UAAU,MAAQ,SAASQ,EAAKhI,EAAM,CACvD,IAAIyL,EAASzL,GAAQA,EAAK,OAAS,EAC/B0L,EAAO1L,GAAQA,EAAK,KAAO,EAC3ByJ,EACJ,GAAIiC,IAAS,EACXjC,EAAQ,MACH,CACL,OAAQgC,EAAQ,CACd,IAAK,GACCN,GAAanD,CAAG,GAAK,KAAK,eAAe,SAAW,OACtDyB,EAAQ,KAAK,eAAe,OAE5BA,EAAQ,KAAK,UAAUzB,CAAG,EAE5B,MACF,IAAK,GACH,GAAIA,IAAQ,KACVyB,EAAQ,KAAK,eAAe,aACnB,OAAOzB,GAAQ,SAAU,CAClC,IAAI2D,EAAO,OAAO,KAAK3D,CAAG,EACtB2D,EAAK,SAAW,IAClBlC,EAAQ,KAAK,eAAekC,EAAK,CAAC,CAAC,EACnC3D,EAAMA,EAAI2D,EAAK,CAAC,CAAC,EAErB,CACA,MACF,QACElC,EAAQ,KAAK,UAAUzB,CAAG,CAC9B,CACIyB,IAAU,QACZkB,GAAkB3C,EAAK,IAAI,CAE/B,CACA,IAAIhB,EAAO,KAAK,MAAMyC,CAAK,EAC3B,GAAIzB,IAAQ,MAAQ0D,IAAS,EAC3B,OAAO1E,EAAK,MAAMgB,EAAKhI,CAAI,EAE3B,OAAQyL,EAAQ,CACd,IAAK,GACH,IAAI1K,EAAM,CAAC,EACX,OAAAA,EAAIiG,EAAK,UAAU,EAAIA,EAAK,MAAMgB,EAAKhI,CAAI,EACpCe,EACT,QACE,OAAOiG,EAAK,MAAMgB,EAAKhI,CAAI,CAC/B,CAEJ,EACAwH,EAAmB,UAAU,QAAU,SAASoE,EAAMC,EAAM,CAC1D,IAAIC,EAAS,KAAK,UAAUF,CAAI,EAC5BG,EAAS,KAAK,UAAUF,CAAI,EAChC,GAAIC,IAAW,OACbnB,GAAkBiB,EAAM,IAAI,UACnBG,IAAW,OACpBpB,GAAkBkB,EAAM,IAAI,MACvB,QAAIC,IAAWC,EACb,KAAK,MAAMD,CAAM,EAAE,QAAQF,EAAMC,CAAI,EAErCpG,EAAM,QAAQqG,EAAQC,CAAM,CAEvC,EACAvE,EAAmB,UAAU,SAAW,kBACxCA,EAAmB,UAAU,OAAS,UAAW,CAC/C,IAAIiC,EAAQ/C,EAAO,QAAQ,KAAK,MAAM,MAAM,EAC5C,OAAO,KAAK,MAAM+C,CAAK,EAAE,OAAO,CAClC,EACA,SAASlC,EAAiBR,EAAQ/G,EAAM,CACtCoL,GAAU,KAAK,KAAMrE,EAAQ/G,CAAI,EACjC,OAAO,OAAO,IAAI,CACpB,CACAlB,EAAK,SAASyI,EAAkB6D,EAAS,EACzC7D,EAAiB,UAAU,OAAS,SAASS,EAAKxE,EAAO0G,EAAMC,EAAM,CACnE,IAAI5F,EAAK,GACT,GAAIyD,IAAQ,KACVzD,EAAK,KAAK,eAAe,OAAY,eAC5B,OAAOyD,GAAO,SAAU,CACjC,IAAI2D,EAAO,OAAO,KAAK3D,CAAG,EAC1B,GAAI2D,EAAK,SAAW,EAAG,CACrB,IAAInK,EAAOmK,EAAK,CAAC,EACblC,EAAQ,KAAK,eAAejI,CAAI,EACpC,GAAIiI,IAAU,OACZ,OAAIS,GACFC,EAAK,KAAK3I,CAAI,EACd+C,EAAK,KAAK,MAAMkF,CAAK,EAAE,OAAOzB,EAAIxG,CAAI,EAAGgC,EAAO0G,EAAMC,CAAI,EAC1DA,EAAK,IAAI,EACF5F,GAEA,KAAK,MAAMkF,CAAK,EAAE,OAAOzB,EAAIxG,CAAI,EAAGgC,CAAK,CAGtD,CACF,CACA,MAAI,CAACe,GAAM2F,GACTA,EAAKlC,EAAK,IAAI,EAETzD,CACT,EACAgD,EAAiB,UAAU,MAAQ,SAASxC,EAAK,CAC/C,IAAIiC,EAAO,KAAK,MAAMjC,EAAI,SAAS,CAAC,EACpC,GAAI,CAACiC,EACH,MAAM,IAAI,MAAM5H,EAAG,qBAAqB,CAAC,EAE3C,IAAIgL,EAASpD,EAAK,mBAClB,OAAIoD,IAAW,KACN,KAEA,IAAIA,EAAOpD,EAAK,MAAMjC,CAAG,CAAC,CAErC,EACAwC,EAAiB,UAAU,OAAS,SAASxC,EAAKiD,EAAK,CACrD,IAAIyB,EAAOkC,EAAMnK,EACbwG,IAAQ,MACVyB,EAAQ,KAAK,eAAe,KACxBA,IAAU,QACZkB,GAAkB3C,EAAK,IAAI,EAE7BjD,EAAI,UAAU0E,CAAK,IAEnBkC,EAAO,OAAO,KAAK3D,CAAG,EAClB2D,EAAK,SAAW,IAClBnK,EAAOmK,EAAK,CAAC,EACblC,EAAQ,KAAK,eAAejI,CAAI,GAE9BiI,IAAU,QACZkB,GAAkB3C,EAAK,IAAI,EAE7BjD,EAAI,UAAU0E,CAAK,EACnB,KAAK,MAAMA,CAAK,EAAE,OAAO1E,EAAKiD,EAAIxG,CAAI,CAAC,EAE3C,EACA+F,EAAiB,UAAU,QAAU,SAAS+B,EAAUtC,EAAMhH,EAAM,CAClE,IAAIW,EAAGC,EAAG4K,EAAcpB,EACxB,IAAKzJ,EAAI,EAAGC,EAAI,KAAK,MAAM,OAAQD,EAAIC,EAAGD,IAAK,CAC7C,GAAI,CACF6K,EAAe,KAAK,MAAM7K,CAAC,EAAE,eAAeqG,EAAMhH,CAAI,CACxD,MAAc,CACZ,QACF,CACAoK,EAAS,KAAK,MAAMzJ,CAAC,EAAE,mBACnByJ,EACFd,EAAS,MAAQ,SAASvE,EAAK,CAC7B,OAAO,IAAIqF,EAAOoB,EAAa,MAAMzG,CAAG,CAAC,CAC3C,EAEAuE,EAAS,MAAQ,UAAW,CAC1B,OAAO,IACT,EAEF,MACF,CACF,EACA/B,EAAiB,UAAU,MAAQ,SAASS,EAAKhI,EAAM,CACrD,IAAI0L,EAAO1L,GAAQA,EAAK,KAAO,EAC/B,GAAI0L,IAAS,EAAG,CACd,IAAIM,EAAY,KAAK,MAAM,CAAC,EAC5B,OAAIhE,IAAQ,MAAQgE,EAAU,WAAa,OAClC,KAEF,IAAIA,EAAU,mBAAmBA,EAAU,MAAMhE,EAAKhI,CAAI,CAAC,CACpE,CACA,GAAIgI,IAAQ,MAAQ,KAAK,eAAe,OAAY,OAClD,OAAO,KAET,IAAIrH,EAAGC,EAAGG,EACV,GAAI,OAAOiH,GAAO,SAAU,CAC1B,IAAI2D,EAAO,OAAO,KAAK3D,CAAG,EAC1B,GAAI2D,EAAK,SAAW,EAAG,CACrB,IAAInK,EAAOmK,EAAK,CAAC,EAEjB,GADAhL,EAAI,KAAK,eAAea,CAAI,EACxBb,IAAM,QAAUX,EAAK,aAAc,CACrC,IAAI8D,EAAIkD,EACR,IAAKlD,EAAK,EAAGlD,EAAI,KAAK,MAAM,OAAQkD,EAAKlD,EAAGkD,IAE1C,GADAkD,EAAO,KAAK,MAAMlD,CAAE,EAChBkD,EAAK,MAAQxF,IAASiE,EAAM,UAAUuB,EAAK,IAAI,EAAG,CACpDrG,EAAImD,EACJ,KACF,CAEJ,CACInD,IAAM,SACRI,EAAM,KAAK,MAAMJ,CAAC,EAAE,MAAMqH,EAAIxG,CAAI,EAAGxB,CAAI,EAE7C,CACF,CACA,GAAI0L,IAAS,GAAK3K,IAAQ,OAGxB,IAFAJ,EAAI,EACJC,EAAI,KAAK,MAAM,OACRD,EAAIC,GAAKG,IAAQ,QACtB,GAAI,CACFA,EAAM,KAAK,MAAMJ,CAAC,EAAE,MAAMqH,EAAKhI,CAAI,CACrC,MAAc,CACZW,GACF,CAGJ,GAAII,IAAQ,OACV,OAAO2K,IAAS,EAAI3K,EAAM,IAAI,KAAK,MAAMJ,CAAC,EAAE,mBAAmBI,CAAG,EAEpE4J,GAAkB3C,EAAK,IAAI,CAC7B,EACAT,EAAiB,UAAU,QAAU,SAASqE,EAAMC,EAAM,CACxD,IAAII,EAAQL,IAAS,KAAO,OAAS,OAAO,KAAKA,CAAI,EAAE,CAAC,EACpDM,EAAQL,IAAS,KAAO,OAAS,OAAO,KAAKA,CAAI,EAAE,CAAC,EACpDpC,EAAQ,KAAK,eAAewC,CAAK,EACrC,OAAIA,IAAUC,EACLD,IAAU,OAAS,EAAI,KAAK,MAAMxC,CAAK,EAAE,QAAQmC,EAAKK,CAAK,EAAGJ,EAAKI,CAAK,CAAC,EAEzExG,EAAM,QAAQgE,EAAO,KAAK,eAAeyC,CAAK,CAAC,CAE1D,EACA3E,EAAiB,UAAU,SAAW,gBACtCA,EAAiB,UAAU,OAAS,UAAW,CAC7C,IAAIkC,EAAQ/C,EAAO,QAAQ,KAAK,MAAM,MAAM,EACxCM,EAAO,KAAK,MAAMyC,CAAK,EACvBW,EAASpD,EAAK,mBAClB,OAAKoD,EAGE,IAAIA,EAAOpD,EAAK,OAAO,CAAC,EAFtB,IAGX,EACA,SAASf,EAASc,EAAQ/G,EAAM,CAE9B,GADA8G,EAAK,KAAK,KAAMC,EAAQ/G,CAAI,EACxB,CAAC,MAAM,QAAQ+G,EAAO,OAAO,GAAK,CAACA,EAAO,QAAQ,OACpD,MAAM,IAAI,MAAM3H,EAAG,2BAA4B2H,EAAO,OAAO,CAAC,EAchE,GAZA,KAAK,QAAU,OAAO,OAAOA,EAAO,QAAQ,MAAM,CAAC,EACnD,KAAK,SAAW,CAAC,EACjB,KAAK,QAAQ,QAAQ,SAASoF,EAAQxL,EAAG,CACvC,GAAI,CAAC8E,EAAM,YAAY0G,CAAM,EAC3B,MAAM,IAAI,MAAM/M,EAAG,wBAAyB,KAAM+M,CAAM,CAAC,EAE3D,GAAI,KAAK,SAASA,CAAM,IAAM,OAC5B,MAAM,IAAI,MAAM/M,EAAG,0BAA2B,KAAM+M,CAAM,CAAC,EAE7D,KAAK,SAASA,CAAM,EAAIxL,CAC1B,EAAG,IAAI,EACP,KAAK,QAAUoG,EAAO,QAClB,KAAK,UAAY,QAAU,KAAK,SAAS,KAAK,OAAO,IAAM,OAC7D,MAAM,IAAI,MAAM3H,EAAG,yBAA0B,KAAM,KAAK,OAAO,CAAC,EAElE,KAAK,mBAAqB,KAAK,yBAAyB,EACxD,OAAO,OAAO,IAAI,CACpB,CACAN,EAAK,SAASmH,EAAUa,CAAI,EAC5Bb,EAAS,UAAU,OAAS,SAAS+B,EAAKxE,EAAO0G,EAAM,CACrD,IAAI3F,EAAK,KAAK,SAASyD,CAAG,IAAM,OAChC,MAAI,CAACzD,GAAM2F,GACTA,EAAKlC,EAAK,IAAI,EAETzD,CACT,EACA0B,EAAS,UAAU,MAAQ,SAASlB,EAAK,CACvC,IAAI0E,EAAQ1E,EAAI,SAAS,EACrBoH,EAAS,KAAK,QAAQ1C,CAAK,EAC/B,GAAI0C,IAAW,OACb,MAAM,IAAI,MAAM/M,EAAG,4BAA6B,KAAK,KAAMqK,CAAK,CAAC,EAEnE,OAAO0C,CACT,EACAlG,EAAS,UAAU,MAAQ,SAASlB,EAAK,CACvCA,EAAI,SAAS,CACf,EACAkB,EAAS,UAAU,OAAS,SAASlB,EAAKiD,EAAK,CAC7C,IAAIyB,EAAQ,KAAK,SAASzB,CAAG,EACzByB,IAAU,QACZkB,GAAkB3C,EAAK,IAAI,EAE7BjD,EAAI,UAAU0E,CAAK,CACrB,EACAxD,EAAS,UAAU,OAAS,SAAS2E,EAAMC,EAAM,CAC/C,OAAOD,EAAK,UAAUC,CAAI,CAC5B,EACA5E,EAAS,UAAU,QAAU,SAAS2F,EAAMC,EAAM,CAChD,OAAOpG,EAAM,QAAQ,KAAK,SAASmG,CAAI,EAAG,KAAK,SAASC,CAAI,CAAC,CAC/D,EACA5F,EAAS,UAAU,QAAU,SAASqD,EAAUtC,EAAMhH,EAAM,CAC1D,IAAIoM,EAAU,KAAK,QACfpF,EAAK,WAAa,QAAUqF,GAAkB,KAAMrF,EAAM,CAAChH,EAAK,gBAAgB,IAAMgH,EAAK,QAAQ,MAAM,SAASrH,EAAG,CACvH,MAAO,CAACyM,EAAQ,QAAQzM,CAAC,CAC3B,CAAC,GAAK,KAAK,UAAY,UACrB2J,EAAS,QAAUtC,EAAK,QAAQ,IAAI,SAASrH,EAAG,CAC9C,OAAO,KAAK,SAASA,CAAC,IAAM,OAAS,KAAK,QAAUA,CACtD,EAAG,IAAI,EACP2J,EAAS,MAAQtC,EAAK,MAE1B,EACAf,EAAS,UAAU,MAAQ,SAAS+B,EAAK,CACvC,YAAK,OAAOA,EAAK,OAAQ2C,EAAiB,EACnC3C,CACT,EACA/B,EAAS,UAAU,OAAS,SAASc,EAAQ,CAC3CA,EAAO,QAAU,KAAK,OACxB,EACAd,EAAS,UAAU,WAAa,UAAW,CACzC,OAAO,KAAK,OACd,EACAA,EAAS,UAAU,SAAW,OAC9BA,EAAS,UAAU,OAAS,UAAW,CACrC,OAAOS,EAAO,OAAO,KAAK,OAAO,CACnC,EACA,SAASP,EAAUY,EAAQ/G,EAAM,CAE/B,GADA8G,EAAK,KAAK,KAAMC,EAAQ/G,CAAI,EACxB+G,EAAO,QAAUA,EAAO,KAAO,IAAMA,EAAO,KAAO,EACrD,MAAM,IAAI,MAAM3H,EAAG,kBAAmB,KAAK,UAAU,CAAC,EAExD,KAAK,KAAO2H,EAAO,KAAO,EAC1B,KAAK,mBAAqB,KAAK,yBAAyB,EACxD,OAAO,OAAO,IAAI,CACpB,CACAjI,EAAK,SAASqH,EAAWW,CAAI,EAC7BX,EAAU,UAAU,OAAS,SAAS6B,EAAKxE,EAAO0G,EAAM,CACtD,IAAI3F,EAAKvF,EAAQ,SAASgJ,CAAG,GAAKA,EAAI,SAAW,KAAK,KACtD,MAAI,CAACzD,GAAM2F,GACTA,EAAKlC,EAAK,IAAI,EAETzD,CACT,EACA4B,EAAU,UAAU,MAAQ,SAASpB,EAAK,CACxC,OAAOA,EAAI,UAAU,KAAK,IAAI,CAChC,EACAoB,EAAU,UAAU,MAAQ,SAASpB,EAAK,CACxCA,EAAI,UAAU,KAAK,IAAI,CACzB,EACAoB,EAAU,UAAU,OAAS,SAASpB,EAAKiD,EAAK,EAC1C,CAAChJ,EAAQ,SAASgJ,CAAG,GAAKA,EAAI,SAAW,KAAK,OAChD2C,GAAkB3C,EAAK,IAAI,EAE7BjD,EAAI,WAAWiD,EAAK,KAAK,IAAI,CAC/B,EACA7B,EAAU,UAAU,OAAS,SAASyE,EAAMC,EAAM,CAChD,OAAOD,EAAK,WAAWC,EAAM,KAAK,IAAI,CACxC,EACA1E,EAAU,UAAU,QAAUnH,EAAQ,QACtCmH,EAAU,UAAU,QAAU,SAASmD,EAAUtC,EAAMhH,EAAM,CACvDgH,EAAK,WAAa,SAAW,KAAK,OAASA,EAAK,MAAQqF,GAAkB,KAAMrF,EAAM,CAAChH,EAAK,gBAAgB,IAC9GsJ,EAAS,KAAO,KAAK,KACrBA,EAAS,MAAQ,KAAK,MAE1B,EACAnD,EAAU,UAAU,MAAQJ,EAAU,UAAU,MAChDI,EAAU,UAAU,OAAS,SAASY,EAAQ,CAC5CA,EAAO,KAAO,KAAK,IACrB,EACAZ,EAAU,UAAU,QAAU,UAAW,CACvC,OAAO,KAAK,IACd,EACAA,EAAU,UAAU,SAAW,QAC/BA,EAAU,UAAU,OAAS,UAAW,CACtC,OAAOO,EAAO,WAAW,KAAK,IAAI,CACpC,EACA,SAASH,EAAQQ,EAAQ/G,EAAM,CAE7B,GADA8G,EAAK,KAAK,IAAI,EACV,CAACC,EAAO,OACV,MAAM,IAAI,MAAM3H,EAAG,yBAA0B2H,CAAM,CAAC,EAEtD,KAAK,WAAaD,EAAK,UAAUC,EAAO,OAAQ/G,CAAI,EACpD,KAAK,mBAAqB,KAAK,yBAAyB,EACxD,OAAO,OAAO,IAAI,CACpB,CACAlB,EAAK,SAASyH,EAASO,CAAI,EAC3BP,EAAQ,UAAU,OAAS,SAASyB,EAAKxE,EAAO0G,EAAMC,EAAM,CAC1D,GAAI,CAACnC,GAAO,OAAOA,GAAO,UAAY,MAAM,QAAQA,CAAG,EACrD,OAAIkC,GACFA,EAAKlC,EAAK,IAAI,EAET,GAET,IAAI2D,EAAO,OAAO,KAAK3D,CAAG,EACtBzD,EAAK,GACL5D,EAAGC,EAAGkD,EAAIhG,EACd,GAAIoM,EAAM,CAGR,IAFApG,EAAKqG,EAAK,OACVA,EAAK,KAAK,EAAE,EACPxJ,EAAI,EAAGC,EAAI+K,EAAK,OAAQhL,EAAIC,EAAGD,IAClC7C,EAAMqM,EAAKrG,CAAE,EAAI6H,EAAKhL,CAAC,EAClB,KAAK,WAAW,OAAOqH,EAAIlK,CAAG,EAAG0F,EAAO0G,EAAMC,CAAI,IACrD5F,EAAK,IAGT4F,EAAK,IAAI,CACX,KACE,KAAKxJ,EAAI,EAAGC,EAAI+K,EAAK,OAAQhL,EAAIC,EAAGD,IAClC,GAAI,CAAC,KAAK,WAAW,OAAOqH,EAAI2D,EAAKhL,CAAC,CAAC,EAAG6C,CAAK,EAC7C,MAAO,GAIb,OAAOe,CACT,EACAgC,EAAQ,UAAU,MAAQ,SAASxB,EAAK,CAItC,QAHIuH,EAAS,KAAK,WACdtE,EAAM,CAAC,EACPxD,EACGA,EAAI+H,GAAcxH,CAAG,GAC1B,KAAOP,KAAK,CACV,IAAI1G,EAAMiH,EAAI,WAAW,EACzBiD,EAAIlK,CAAG,EAAIwO,EAAO,MAAMvH,CAAG,CAC7B,CAEF,OAAOiD,CACT,EACAzB,EAAQ,UAAU,MAAQ,SAASxB,EAAK,CAGtC,QAFIuH,EAAS,KAAK,WACdvJ,EAAKyB,EACFA,EAAIO,EAAI,SAAS,GACtB,GAAIP,EAAI,EACNzB,EAAMgC,EAAI,SAAS,EACnBA,EAAI,KAAOhC,MAEX,MAAOyB,KACLO,EAAI,WAAW,EACfuH,EAAO,MAAMvH,CAAG,CAIxB,EACAwB,EAAQ,UAAU,OAAS,SAASxB,EAAKiD,EAAK,EACxC,CAACA,GAAO,OAAOA,GAAO,UAAY,MAAM,QAAQA,CAAG,IACrD2C,GAAkB3C,EAAK,IAAI,EAE7B,IAAIsE,EAAS,KAAK,WACdX,EAAO,OAAO,KAAK3D,CAAG,EACtB,EAAI2D,EAAK,OACThL,EAAG7C,EACP,GAAI,EAEF,IADAiH,EAAI,UAAU,CAAC,EACVpE,EAAI,EAAGA,EAAI,EAAGA,IACjB7C,EAAM6N,EAAKhL,CAAC,EACZoE,EAAI,YAAYjH,CAAG,EACnBwO,EAAO,OAAOvH,EAAKiD,EAAIlK,CAAG,CAAC,EAG/BiH,EAAI,UAAU,CAAC,CACjB,EACAwB,EAAQ,UAAU,OAAS,UAAW,CACpC,MAAM,IAAI,MAAM,yBAAyB,CAC3C,EACAA,EAAQ,UAAU,QAAU,SAASiG,EAAKxF,EAAMhH,EAAM,CAChDgH,EAAK,WAAa,QACpBwF,EAAI,WAAa,KAAK,WAAW,eAAexF,EAAK,WAAYhH,CAAI,EACrEwM,EAAI,MAAQ,KAAK,MAErB,EACAjG,EAAQ,UAAU,MAAQ,SAASyB,EAAKhI,EAAM,CAC5C,GAAIgI,GAAO,OAAOA,GAAO,UAAY,CAAC,MAAM,QAAQA,CAAG,EAAG,CACxD,IAAIsE,EAAS,KAAK,WACdX,EAAO,OAAO,KAAK3D,CAAG,EACtBrH,EAAGC,EAAG9C,EACN2O,EAAO,CAAC,EACZ,IAAK9L,EAAI,EAAGC,EAAI+K,EAAK,OAAQhL,EAAIC,EAAGD,IAClC7C,EAAM6N,EAAKhL,CAAC,EACZ8L,EAAK3O,CAAG,EAAIwO,EAAO,MAAMtE,EAAIlK,CAAG,EAAGkC,CAAI,EAEzC,OAAOyM,CACT,CACA9B,GAAkB3C,EAAK,IAAI,CAC7B,EACAzB,EAAQ,UAAU,QAAUA,EAAQ,UAAU,OAC9CA,EAAQ,UAAU,SAAW,MAC7BA,EAAQ,UAAU,cAAgB,UAAW,CAC3C,OAAO,KAAK,UACd,EACAA,EAAQ,UAAU,OAAS,UAAW,CACpC,IAAIyB,EAAM,CAAC,EACP,EAAGpH,EACP,IAAK,EAAI,EAAGA,EAAI8F,EAAO,QAAQ,EAAE,EAAG,EAAI9F,EAAG,IACzCoH,EAAItB,EAAO,WAAWA,EAAO,QAAQ,EAAE,CAAC,CAAC,EAAI,KAAK,WAAW,OAAO,EAEtE,OAAOsB,CACT,EACAzB,EAAQ,UAAU,OAAS,SAASQ,EAAQ/G,EAAM,CAChD+G,EAAO,OAAS,KAAK,WAAW,OAAO/G,CAAI,CAC7C,EACA,SAAS6F,EAAUkB,EAAQ/G,EAAM,CAE/B,GADA8G,EAAK,KAAK,IAAI,EACV,CAACC,EAAO,MACV,MAAM,IAAI,MAAM3H,EAAG,0BAA2B2H,CAAM,CAAC,EAEvD,KAAK,UAAYD,EAAK,UAAUC,EAAO,MAAO/G,CAAI,EAClD,KAAK,mBAAqB,KAAK,yBAAyB,EACxD,OAAO,OAAO,IAAI,CACpB,CACAlB,EAAK,SAAS+G,EAAWiB,CAAI,EAC7BjB,EAAU,UAAU,OAAS,SAASmC,EAAKxE,EAAO0G,EAAMC,EAAM,CAC5D,GAAI,CAAC,MAAM,QAAQnC,CAAG,EACpB,OAAIkC,GACFA,EAAKlC,EAAK,IAAI,EAET,GAET,IAAInE,EAAQ,KAAK,UACbU,EAAK,GACL5D,EAAGC,EAAGkD,EACV,GAAIoG,EAAM,CAGR,IAFApG,EAAKqG,EAAK,OACVA,EAAK,KAAK,EAAE,EACPxJ,EAAI,EAAGC,EAAIoH,EAAI,OAAQrH,EAAIC,EAAGD,IACjCwJ,EAAKrG,CAAE,EAAI,GAAKnD,EACXkD,EAAM,OAAOmE,EAAIrH,CAAC,EAAG6C,EAAO0G,EAAMC,CAAI,IACzC5F,EAAK,IAGT4F,EAAK,IAAI,CACX,KACE,KAAKxJ,EAAI,EAAGC,EAAIoH,EAAI,OAAQrH,EAAIC,EAAGD,IACjC,GAAI,CAACkD,EAAM,OAAOmE,EAAIrH,CAAC,EAAG6C,CAAK,EAC7B,MAAO,GAIb,OAAOe,CACT,EACAsB,EAAU,UAAU,MAAQ,SAASd,EAAK,CAIxC,QAHIlB,EAAQ,KAAK,UACblD,EAAI,EACJqH,EAAK,EACF,EAAIjD,EAAI,SAAS,GAMtB,IALI,EAAI,IACN,EAAI,CAAC,EACLA,EAAI,SAAS,GAEfiD,EAAMA,GAAO,IAAI,MAAM,CAAC,EACjB,KACLA,EAAIrH,GAAG,EAAIkD,EAAM,MAAMkB,CAAG,EAG9B,OAAOiD,GAAO,CAAC,CACjB,EACAnC,EAAU,UAAU,MAAQ,SAASd,EAAK,CAGxC,QAFIlB,EAAQ,KAAK,UACbd,EAAKyB,EACFA,EAAIO,EAAI,SAAS,GACtB,GAAIP,EAAI,EACNzB,EAAMgC,EAAI,SAAS,EACnBA,EAAI,KAAOhC,MAEX,MAAOyB,KACLX,EAAM,MAAMkB,CAAG,CAIvB,EACAc,EAAU,UAAU,OAAS,SAASd,EAAKiD,EAAK,CACzC,MAAM,QAAQA,CAAG,GACpB2C,GAAkB3C,EAAK,IAAI,EAE7B,IAAInE,EAAQ,KAAK,UACbW,EAAIwD,EAAI,OACRrH,EACJ,GAAI6D,EAEF,IADAO,EAAI,UAAUP,CAAC,EACV7D,EAAI,EAAGA,EAAI6D,EAAG7D,IACjBkD,EAAM,OAAOkB,EAAKiD,EAAIrH,CAAC,CAAC,EAG5BoE,EAAI,UAAU,CAAC,CACjB,EACAc,EAAU,UAAU,OAAS,SAAS+E,EAAMC,EAAM,CAIhD,QAHIhL,EAAK+K,EAAK,SAAS,EACnB9K,EAAK+K,EAAK,SAAS,EACnBlG,EACG9E,GAAMC,GAAI,CAEf,GADA6E,EAAK,KAAK,UAAU,OAAOiG,EAAMC,CAAI,EACjClG,EACF,OAAOA,EAEJ,EAAE9E,IACLA,EAAK0M,GAAc3B,CAAI,GAEpB,EAAE9K,IACLA,EAAKyM,GAAc1B,CAAI,EAE3B,CACA,OAAOpF,EAAM,QAAQ5F,EAAIC,CAAE,CAC7B,EACA+F,EAAU,UAAU,QAAU,SAASyD,EAAUtC,EAAMhH,EAAM,CACvDgH,EAAK,WAAa,UACpBsC,EAAS,UAAY,KAAK,UAAU,eAAetC,EAAK,UAAWhH,CAAI,EACvEsJ,EAAS,MAAQ,KAAK,MAE1B,EACAzD,EAAU,UAAU,MAAQ,SAASmC,EAAKhI,EAAM,CACzC,MAAM,QAAQgI,CAAG,GACpB2C,GAAkB3C,EAAK,IAAI,EAE7B,IAAInE,EAAQ,IAAI,MAAMmE,EAAI,MAAM,EAC5BrH,EAAGC,EACP,IAAKD,EAAI,EAAGC,EAAIoH,EAAI,OAAQrH,EAAIC,EAAGD,IACjCkD,EAAMlD,CAAC,EAAI,KAAK,UAAU,MAAMqH,EAAIrH,CAAC,EAAGX,CAAI,EAE9C,OAAO6D,CACT,EACAgC,EAAU,UAAU,OAAS,SAASkB,EAAQ/G,EAAM,CAClD+G,EAAO,MAAQ,KAAK,UAAU,OAAO/G,CAAI,CAC3C,EACA6F,EAAU,UAAU,QAAU,SAAS+F,EAAMC,EAAM,CACjD,IAAIhM,EAAK+L,EAAK,OACV9L,EAAK+L,EAAK,OACVlL,EAAGC,EAAG+D,EACV,IAAKhE,EAAI,EAAGC,EAAI,KAAK,IAAIf,EAAIC,CAAE,EAAGa,EAAIC,EAAGD,IACvC,GAAIgE,EAAK,KAAK,UAAU,QAAQiH,EAAKjL,CAAC,EAAGkL,EAAKlL,CAAC,CAAC,EAC9C,OAAOgE,EAGX,OAAOc,EAAM,QAAQ5F,EAAIC,CAAE,CAC7B,EACA+F,EAAU,UAAU,aAAe,UAAW,CAC5C,OAAO,KAAK,SACd,EACAA,EAAU,UAAU,SAAW,QAC/BA,EAAU,UAAU,OAAS,UAAW,CACtC,IAAIrF,EAAM,CAAC,EACP,EAAGI,EACP,IAAK,EAAI,EAAGA,EAAI8F,EAAO,QAAQ,EAAE,EAAG,EAAI9F,EAAG,IACzCJ,EAAI,KAAK,KAAK,UAAU,OAAO,CAAC,EAElC,OAAOA,CACT,EACA,SAAS0F,EAAWa,EAAQ/G,EAAM,CAChCA,EAAOA,GAAQ,CAAC,EAChB,IAAI4B,EAAY5B,EAAK,UACrB,GAAI+G,EAAO,YAAc,OACvB/G,EAAK,UAAY+G,EAAO,kBACfA,EAAO,KAAM,CACtB,IAAI2F,EAAKjH,EAAM,iBAAiBsB,EAAO,IAAI,EACvC2F,IAAO,SACT1M,EAAK,UAAY0M,EAErB,CAEA,GADA5F,EAAK,KAAK,KAAMC,EAAQ/G,CAAI,EACxB,CAAC,MAAM,QAAQ+G,EAAO,MAAM,EAC9B,MAAM,IAAI,MAAM3H,EAAG,8BAA+B2H,EAAO,MAAM,CAAC,EAElE,GAAItB,EAAM,cAAcsB,EAAO,OAAQ,SAASpC,EAAI,CAClD,OAAOA,EAAG,IACZ,CAAC,EACC,MAAM,IAAI,MAAMvF,EAAG,2BAA4B2H,EAAO,MAAM,CAAC,EAE/D,KAAK,cAAgB,CAAC,EACtB,KAAK,OAAS,OAAO,OAAOA,EAAO,OAAO,IAAI,SAASpC,EAAI,CACzD,IAAIgI,EAAQ,IAAIC,EAAMjI,EAAI3E,CAAI,EAC9B,YAAK,cAAc2M,EAAM,IAAI,EAAIA,EAC1BA,CACT,EAAG,IAAI,CAAC,EACR,KAAK,mBAAqB,KAAK,yBAAyB,EACxD,KAAK,SAAW5F,EAAO,OAAS,QAChC,KAAK,kBAAoB,KAAK,mBAC5B/G,EAAK,iBACLA,EAAK,iBACP,EACA,KAAK,MAAQ,KAAK,cAAc,EAChC,KAAK,MAAQ,KAAK,eAAe,EACjC,KAAK,OAAS,KAAK,cAAc,EACjC,KAAK,OAAS,KAAK,eAAe,EAClCA,EAAK,UAAY4B,EACjB,OAAO,OAAO,IAAI,CACpB,CACA9C,EAAK,SAASoH,EAAYY,CAAI,EAC9BZ,EAAW,UAAU,oBAAsB,UAAW,CACpD,OAAO,KAAK,KAAOT,EAAM,WAAWA,EAAM,UAAU,KAAK,IAAI,CAAC,EAAI,KAAK,SAAW,SAAW,SAC/F,EACAS,EAAW,UAAU,mBAAqB,SAAS2G,EAAYC,EAAc,CAC3E,IAAIC,EAAY,CAAC,EACbC,EAAY,CAAC,EACbC,EAAK,CAAC,EACNC,EAAY,GACZvM,EAAGC,EAAG+L,EAAOnL,EAAM2L,EAAcC,EAAYC,EACjD,IAAK1M,EAAI,EAAGC,EAAI,KAAK,OAAO,OAAQD,EAAIC,EAAGD,IACzCgM,EAAQ,KAAK,OAAOhM,CAAC,EACrBwM,EAAeR,EAAM,aACrBS,EAAaD,EAAa,IAAM,OAChC3L,EAAOmL,EAAM,KACTE,GAAc,KAAK,UAAYrL,IAAS,SAAWsF,EAAK,OAAO6F,EAAM,KAAM,QAAQ,GAAK,CAACS,IAC3FC,EAAaV,GAEfK,EAAU,KAAK,IAAMrM,CAAC,EACtBuM,GAAa,KACRE,GAGHF,GAAa,QAAUvM,EAAI,qBAC3BuM,GAAa,QAAU1L,EAAO,OAASyL,EAAG,OAAS,OACnDC,GAAa,iBAAmB1L,EAAO,OAASb,EAAI;AAAA,EACpDoM,EAAU,KAAK,IAAME,EAAG,MAAM,EAC9BA,EAAG,KAAKE,CAAY,GANpBD,GAAa,QAAU1L,EAAO,OAASb,EAAI;AAAA,EAS3C0M,IACFH,GAAa,qCACT,OAAO,MAAM,mBAAqB,WACpCA,GAAa,mDAEbA,GAAa,8BAEfA,GAAa;AAAA,GAEf,IAAII,EAAY,mBAAqB,KAAK,oBAAoB,EAAI,IAClEA,GAAaN,EAAU,KAAK,EAAI;AAAA,EAAUE,EAAY,KACtD,IAAIK,EAAS,IAAI,SAASR,EAAU,KAAK,EAAGO,CAAS,EAAE,MAAM,OAAQL,CAAE,EACvE,GAAIH,EACF,OAAOS,EAET,IAAIC,EAAO,KACX,OAAAD,EAAO,QAAU,UAAW,CAC1B,OAAOC,CACT,EACAD,EAAO,KAAOC,EACV,KAAK,WACP1O,EAAK,SAASyO,EAAQ,KAAK,EAC3BA,EAAO,UAAU,KAAO,KAAK,oBAAoB,GAEnDA,EAAO,UAAU,MAAQ,SAASE,EAAG,CACnC,OAAOD,EAAK,MAAM,KAAMC,CAAC,CAC3B,EACAF,EAAO,UAAU,QAAU,SAAS9M,EAAI,CACtC,OAAO+M,EAAK,QAAQ,KAAM/M,CAAE,CAC9B,EACA8M,EAAO,UAAU,QAAU,SAASE,EAAG,CACrC,OAAOD,EAAK,QAAQ,KAAMC,CAAC,CAC7B,EACAF,EAAO,UAAU,SAAW,UAAW,CACrC,OAAOC,EAAK,SAAS,IAAI,CAC3B,EACAD,EAAO,UAAU,SAAW,UAAW,CACrC,OAAOC,EAAK,SAAS,IAAI,CAC3B,EACAD,EAAO,UAAU,KAAO,UAAW,CACjC,OAAOC,EAAK,KAAK,IAAI,CACvB,EACAD,EAAO,UAAU,QAAUA,EAAO,UAAU,KACrCA,CACT,EACArH,EAAW,UAAU,eAAiB,UAAW,CAC/C,IAAI3E,EAAQ,CAAC,EACT+K,EAAS,CAAC,EACV9K,EAAO,KAAK,oBAAoB,EAChC+I,EAAO,wBAA0B/I,EAAO;AAAA,EAS5C,GARA+I,GAAQ;AAAA,EACRA,GAAQ;AAAA,EACRA,GAAQ;AAAA,EACRA,GAAQ;AAAA,EACRA,GAAQ;AAAA,EACRA,GAAQ;AAAA,EACRA,GAAQ;AAAA,EACRA,GAAQ;AAAA,EACJ,CAAC,KAAK,OAAO,OACfA,GAAQ;AAAA,MACH,CACL,IAAK5J,EAAI,EAAGC,EAAI,KAAK,OAAO,OAAQD,EAAIC,EAAGD,IACzCgM,EAAQ,KAAK,OAAOhM,CAAC,EACrBY,EAAM,KAAK,IAAMZ,CAAC,EAClB2L,EAAO,KAAKK,EAAM,IAAI,EAClBA,EAAM,aAAa,IAAM,SAC3BpC,GAAQ,UAAY5J,EAAI,QAAUgM,EAAM,KAAO;AAAA,GAGnDpC,GAAQ;AAAA,EACRA,GAAQ;AAAA,EACRA,GAAQ;AAAA,EACRA,GAAQ;AAAA,EACR,IAAI5J,EAAGC,EAAG+L,EACV,IAAKhM,EAAI,EAAGC,EAAI,KAAK,OAAO,OAAQD,EAAIC,EAAGD,IACzCgM,EAAQ,KAAK,OAAOhM,CAAC,EACrB4J,GAAQ,eAAiBoC,EAAM,KAAO;AAAA,EACtCpC,GAAQ,YACJoC,EAAM,aAAa,IAAM,OAC3BpC,GAAQ,IAAM5J,EAAI,aAAegM,EAAM,KAAO;AAAA,GAE9CpC,GAAQ,IAAM5J,EAAI,qBAClB4J,GAAQ,IAAM5J,EAAI,YAAcA,EAAI;AAAA,GAGxC4J,GAAQ;AAAA,EACRA,GAAQ;AAAA,EACRA,GAAQ;AAAA;AAAA,QACRA,GAAQ,KAAK,OAAO,IAAI,SAASmD,EAAQxJ,EAAI,CAC3C,OAAOwJ,EAAO,aAAa,IAAM,OAAS,IAAMxJ,EAAK,aAAewJ,EAAO,KAAO,OAAS,KAAOxJ,EAAK,sBAAwBA,EAAK,YAAcA,EAAK,OACzJ,CAAC,EAAE,KAAK;AAAA,OAAa,EACrBqG,GAAQ;AAAA;AAAA;AAAA,CACV,CACA,OAAAA,GAAQ,KACD,IAAI,SAAShJ,EAAM,KAAK,EAAGgJ,CAAI,EAAE,MAAM,OAAQ+B,CAAM,CAC9D,EACApG,EAAW,UAAU,cAAgB,UAAW,CAC9C,IAAI3E,EAAQ,CAAC,EACT+K,EAAS,CAAC,KAAK,iBAAiB,EAChC3L,EAAGC,EACP,IAAKD,EAAI,EAAGC,EAAI,KAAK,OAAO,OAAQD,EAAIC,EAAGD,IACzCY,EAAM,KAAK,IAAMZ,CAAC,EAClB2L,EAAO,KAAK,KAAK,OAAO3L,CAAC,EAAE,IAAI,EAEjC,IAAIa,EAAO,KAAK,oBAAoB,EAChC+I,EAAO,uBAAyB/I,EAAO;AAAA,EAC3C,OAAA+I,GAAQ,gBAAkB/I,EAAO;AAAA,MACjC+I,GAAQhJ,EAAM,IAAI,SAAS,EAAG,CAC5B,OAAO,EAAI,WACb,CAAC,EAAE,KAAK;AAAA,KAAS,EACjBgJ,GAAQ;AAAA;AAAA,IACRhJ,EAAM,QAAQC,CAAI,EACX,IAAI,SAASD,EAAM,KAAK,EAAGgJ,CAAI,EAAE,MAAM,OAAQ+B,CAAM,CAC9D,EACApG,EAAW,UAAU,eAAiB,UAAW,CAC/C,IAAIyH,EAAO,CAAC,EACRpD,EAAO,uBAAyB,KAAK,oBAAoB,EAAI;AAAA,EAC7D+B,EAAS,CAAC,EACV3L,EAAGC,EACP,IAAKD,EAAI,EAAGC,EAAI,KAAK,OAAO,OAAQD,EAAIC,EAAGD,IACzCgN,EAAK,KAAK,IAAMhN,CAAC,EACjB2L,EAAO,KAAK,KAAK,OAAO3L,CAAC,EAAE,IAAI,EAC/B4J,GAAQ,MAAQ5J,EAAI;AAAA,EAEtB,OAAA4J,GAAQ,IACD,IAAI,SAASoD,EAAK,KAAK,EAAGpD,CAAI,EAAE,MAAM,OAAQ+B,CAAM,CAC7D,EACApG,EAAW,UAAU,cAAgB,UAAW,CAC9C,IAAIyH,EAAO,CAAC,EACRnM,EAAO,KAAK,oBAAoB,EAChC+I,EAAO,wBAA0B/I,EAAO;AAAA,EACxC8K,EAAS,CAAC,EACV3L,EAAGC,EAAG+L,EAAOzM,EACjB,IAAKS,EAAI,EAAGC,EAAI,KAAK,OAAO,OAAQD,EAAIC,EAAGD,IACzCgM,EAAQ,KAAK,OAAOhM,CAAC,EACrBgN,EAAK,KAAK,IAAMhN,CAAC,EACjB2L,EAAO,KAAKK,EAAM,IAAI,EACtBpC,GAAQ,KACJoC,EAAM,aAAa,IAAM,OAC3BpC,GAAQ,IAAM5J,EAAI,gBAAkBgM,EAAM,KAAO;AAAA,GAEjDzM,EAAQyM,EAAM,KAAK,SAASA,EAAM,aAAa,CAAC,EAAE,SAAS,QAAQ,EACnEgB,EAAK,KAAK,IAAMhN,CAAC,EACjB2L,EAAO,KAAKpM,CAAK,EACjBqK,GAAQ,QAAU5J,EAAI,QAAUgM,EAAM,KAAO;AAAA,EAC7CpC,GAAQ,QAAU5J,EAAI;AAAA,EACtB4J,GAAQ,sBAAwB5J,EAAI,KAAOT,EAAM,OAAS;AAAA,EAC1DqK,GAAQ;AAAA,OAAsB5J,EAAI,eAAiBA,EAAI;AAAA;AAAA,GAG3D,OAAA4J,GAAQ,IACD,IAAI,SAASoD,EAAK,KAAK,EAAGpD,CAAI,EAAE,MAAM,OAAQ+B,CAAM,CAC7D,EACApG,EAAW,UAAU,QAAU,SAASoD,EAAUtC,EAAMhH,EAAM,CAC5D,GAAI,CAACqM,GAAkB,KAAMrF,EAAM,CAAChH,EAAK,gBAAgB,EACvD,MAAM,IAAI,MAAMZ,EAAG,wBAAyB4H,EAAK,IAAI,CAAC,EAExD,IAAI4G,EAAU,KAAK,OACfC,EAAU7G,EAAK,OACf8G,EAAarI,EAAM,MAAMoI,EAAS,SAASlJ,GAAI,CACjD,OAAOA,GAAG,IACZ,CAAC,EACGqI,EAAY,CAAC,EACbxD,EAAY,CAAC,EACb7I,EAAGmD,EAAI6I,EAAOnL,EAAMD,EAAOwM,EAASC,EACxC,IAAKrN,EAAI,EAAGA,EAAIiN,EAAQ,OAAQjN,IAAK,CAInC,IAHAgM,EAAQiB,EAAQjN,CAAC,EACjBY,EAAQ0M,GAAWtB,CAAK,EACxBoB,EAAU,CAAC,EACNjK,EAAK,EAAGA,EAAKvC,EAAM,OAAQuC,IAC9BtC,EAAOD,EAAMuC,CAAE,EACXgK,EAAWtM,CAAI,GACjBuM,EAAQ,KAAKvM,CAAI,EAGrB,GAAIuM,EAAQ,OAAS,EACnB,MAAM,IAAI,MACR3O,EAAG,oCAAqC4H,EAAK,KAAM2F,EAAM,KAAMoB,CAAO,CACxE,EAEF,GAAKA,EAAQ,OAQXvM,EAAOuM,EAAQ,CAAC,EAChBC,EAAgB,CACd,SAAUrB,EAAM,KAAK,eAAemB,EAAWtM,CAAI,EAAE,KAAMxB,CAAI,EAC/D,KAAM,IAAM2M,EAAM,IAEpB,EACKnD,EAAUhI,CAAI,EAGjBgI,EAAUhI,CAAI,EAAE,KAAKwM,CAAa,EAFlCxE,EAAUhI,CAAI,EAAI,CAACwM,CAAa,EAIlChB,EAAU,KAAKgB,EAAc,IAAI,MAnBd,CACnB,GAAIrB,EAAM,aAAa,IAAM,OAC3B,MAAM,IAAI,MACRvN,EAAG,2CAA4C4H,EAAK,KAAM2F,EAAM,IAAI,CACtE,EAEFK,EAAU,KAAK,WAAW,CAC5B,CAcF,CACA,IAAIkB,EAAY,GAEhB,IADAvN,EAAIkN,EAAQ,OACLlN,GAAK6I,EAAUqE,EAAQ,EAAElN,CAAC,EAAE,IAAI,IAAM,QAC3CuN,EAAYvN,EAEd,IAAIwN,EAAQ,KAAK,oBAAoB,EACjCR,GAAO,CAACQ,CAAK,EACb7B,GAAS,CAAC,KAAK,iBAAiB,EAChC/B,GAAO,yBAA2B4D,EAAQ;AAAA,EAC9C,IAAKxN,EAAI,EAAGA,EAAIkN,EAAQ,OAAQlN,IAM9B,GALIA,IAAMuN,IACR3D,IAAQ;AAAA,GAEVoC,EAAQ3F,EAAK,OAAOrG,CAAC,EACrBa,EAAOmL,EAAM,KACTnD,EAAUhI,CAAI,IAAM,OACtB+I,IAAQ,CAAC2D,GAAavN,GAAKuN,EAAY,OAAS,KAChDP,GAAK,KAAK,IAAMhN,CAAC,EACjB2L,GAAO,KAAKK,EAAM,IAAI,EACtBpC,IAAQ,IAAM5J,EAAI;AAAA,MAGlB,KADAmD,EAAK0F,EAAUhI,CAAI,EAAE,OACdsC,KACLyG,IAAQ,CAAC2D,GAAavN,GAAKuN,EAAY,OAAS,KAChDP,GAAK,KAAK,IAAMhN,EAAI,IAAMmD,CAAE,EAC5BkK,EAAgBxE,EAAUhI,CAAI,EAAEsC,CAAE,EAClCwI,GAAO,KAAK0B,EAAc,QAAQ,EAClCzD,IAAQ,OAASyD,EAAc,KAAO,MACtCzD,IAAQ,IAAM5J,EAAI,IAAMmD,EAAK,MAAQA,EAAK,OAAS,QAAU;AAAA,EAI/D,CAACoK,IACH3D,IAAQ;AAAA,GAEVA,IAAQ,gBAAkB4D,EAAQ,IAAMnB,EAAU,KAAK,EAAI;AAAA,IAC3D1D,EAAS,MAAQ,IAAI,SAASqE,GAAK,KAAK,EAAGpD,EAAI,EAAE,MAAM,OAAQ+B,EAAM,CACvE,EACApG,EAAW,UAAU,OAAS,SAAS0E,EAAMC,EAAM,CACjD,IAAIuD,EAAS,KAAK,OACdzN,EAAGC,EAAG+L,EAAO0B,EAAOrH,EACxB,IAAKrG,EAAI,EAAGC,EAAIwN,EAAO,OAAQzN,EAAIC,EAAGD,IAIpC,GAHAgM,EAAQyB,EAAOzN,CAAC,EAChB0N,EAAQ1B,EAAM,OACd3F,EAAO2F,EAAM,KACT0B,GAEF,GADAA,GAASrH,EAAK,OAAO4D,EAAMC,CAAI,EAC3BwD,EACF,OAAOA,OAGTrH,EAAK,MAAM4D,CAAI,EACf5D,EAAK,MAAM6D,CAAI,EAGnB,MAAO,EACT,EACA3E,EAAW,UAAU,aAAe,SAASnF,EAAK,CAChD,IAAI4K,EAAO,OAAO,KAAK5K,CAAG,EACtBJ,EAAGC,EACP,IAAKD,EAAI,EAAGC,EAAI+K,EAAK,OAAQhL,EAAIC,EAAGD,IAClC,GAAI,CAAC,KAAK,cAAcgL,EAAKhL,CAAC,CAAC,EAC7B,MAAO,GAGX,MAAO,EACT,EACAuF,EAAW,UAAU,MAAQ,SAAS8B,EAAKhI,EAAM,CAC/C,IAAIkK,EAAOlK,GAAQA,EAAK,UACpBsM,EAAS,CAAC,MAAM,EAChB3L,EAAGC,EAAG+L,EAAOzM,EACjB,IAAKS,EAAI,EAAGC,EAAI,KAAK,OAAO,OAAQD,EAAIC,EAAGD,IACzCgM,EAAQ,KAAK,OAAOhM,CAAC,EACrBT,EAAQ8H,EAAI2E,EAAM,IAAI,EAClBzM,IAAU,QAAUyM,EAAM,eAAe,cAAc,IACzDzM,EAAQyM,EAAM,aAAa,IAEzB3M,GAAQ,CAACA,EAAK,MAAQE,IAAU,UAClCA,EAAQyM,EAAM,KAAK,MAAMzM,EAAOF,CAAI,GAElCkK,IACFhK,EAAQgK,EAAKyC,EAAOzM,EAAO,IAAI,GAEjCoM,EAAO,KAAKpM,CAAK,EAEnB,IAAIqN,EAAS,KAAK,kBAClB,OAAO,IAAKA,EAAO,KAAK,MAAMA,EAAQjB,CAAM,EAC9C,EACApG,EAAW,UAAU,OAAS,SAASa,EAAQ/G,EAAM,CACnD+G,EAAO,OAAS,KAAK,OAAO,IAAI,SAAS4F,EAAO,CAC9C,IAAI2B,EAAY3B,EAAM,KAClB4B,EAAc,CAChB,KAAM5B,EAAM,KACZ,KAAM2B,EAAU,OAAOtO,CAAI,CAC7B,EACA,GAAIA,EAAK,YAAa,CACpB,IAAIgI,EAAM2E,EAAM,aAAa,EACzB3E,IAAQ,SACVuG,EAAY,QAAaD,EAAU,MAAMtG,EAAK,CAAE,OAAQ,EAAG,KAAM,CAAE,CAAC,GAEtE,IAAIwG,EAAa7B,EAAM,MACnB6B,IAAe,cACjBD,EAAY,MAAQC,GAEtB,IAAIC,EAAe9B,EAAM,QACrB8B,EAAa,SACfF,EAAY,QAAUE,GAExB,IAAIC,EAAW/B,EAAM,IACjB+B,IAAa,SACfH,EAAY,IAAMG,EAEtB,CACA,OAAOH,CACT,CAAC,CACH,EACArI,EAAW,UAAU,QAAU,SAAS0F,EAAMC,EAAM,CAClD,IAAIuC,EAAS,KAAK,OACdzN,EAAGC,EAAG+L,EAAOnL,EAAM6M,EAAOrH,EAC9B,IAAKrG,EAAI,EAAGC,EAAIwN,EAAO,OAAQzN,EAAIC,EAAGD,IAKpC,GAJAgM,EAAQyB,EAAOzN,CAAC,EAChBa,EAAOmL,EAAM,KACb0B,EAAQ1B,EAAM,OACd3F,EAAO2F,EAAM,KACT0B,IACFA,GAASrH,EAAK,QAAQ4E,EAAKpK,CAAI,EAAGqK,EAAKrK,CAAI,CAAC,EACxC6M,GACF,OAAOA,EAIb,MAAO,EACT,EACAnI,EAAW,UAAU,OAAS,UAAW,CACvC,IAAIkI,EAAS,KAAK,OAAO,IAAI,SAASzJ,EAAI,CACxC,OAAOA,EAAG,KAAK,OAAO,CACxB,CAAC,EACDyJ,EAAO,QAAQ,MAAM,EACrB,IAAIb,EAAS,KAAK,kBAClB,OAAO,IAAKA,EAAO,KAAK,MAAMA,EAAQa,CAAM,EAC9C,EACAlI,EAAW,UAAU,MAAQ,SAAS1E,EAAM,CAC1C,OAAO,KAAK,cAAcA,CAAI,CAChC,EACA0E,EAAW,UAAU,SAAWA,EAAW,UAAU,MACrDA,EAAW,UAAU,UAAY,UAAW,CAC1C,OAAO,KAAK,MACd,EACAA,EAAW,UAAU,qBAAuB,UAAW,CACrD,OAAO,KAAK,iBACd,EACA,OAAO,eAAeA,EAAW,UAAW,WAAY,CACtD,WAAY,GACZ,IAAK,UAAW,CACd,OAAO,KAAK,SAAW,QAAU,QACnC,CACF,CAAC,EACD,SAASyI,EAAY5H,EAAQ/G,EAAM,CACjC,KAAK,iBAAmB+G,EAAO,YAC/BD,EAAK,KAAK,IAAI,EACdF,GAAe,KACf,GAAI,CACF,KAAK,gBAAkBE,EAAK,UAAUC,EAAQ/G,CAAI,CACpD,QAAE,CACA4G,GAAe,KACf,IAAIhG,EAAIiG,EAAiB,OACrBjG,GAAKiG,EAAiBjG,EAAI,CAAC,EAAE,CAAC,IAAM,MACtCiG,EAAiB,IAAI,CAEzB,CACIC,EAAK,OAAO,KAAK,eAAgB,OAAO,EAC1C,KAAK,mBAAqB,KAAK,eAAe,mBAE9C,KAAK,mBAAqB,KAAK,eAAe,yBAAyB,CAE3E,CACAhI,EAAK,SAAS6P,EAAa7H,CAAI,EAC/B,OAAO,eAAe6H,EAAY,UAAW,WAAY,CACvD,WAAY,GACZ,IAAK,UAAW,CACd,MAAO,WAAa,KAAK,gBAC3B,CACF,CAAC,EACD,OAAO,eAAeA,EAAY,UAAW,iBAAkB,CAC7D,WAAY,GACZ,IAAK,UAAW,CACd,GAAI,KAAK,gBACP,OAAO,KAAK,gBAEd,IAAIhO,EAAGC,EAAGJ,EACV,IAAKG,EAAI,EAAGC,EAAIiG,EAAiB,OAAQlG,EAAIC,EAAGD,IAE9C,GADAH,EAAMqG,EAAiBlG,CAAC,EACpBH,EAAI,CAAC,IAAM,KACb,OAAOA,EAAI,CAAC,CAGlB,CACF,CAAC,EACDmO,EAAY,UAAU,kBAAoB,UAAW,CACnD,OAAO,KAAK,cACd,EACAA,EAAY,UAAU,MAAQ,SAAS5J,EAAK,CAC1C,OAAO,KAAK,WAAW,KAAK,eAAe,MAAMA,CAAG,CAAC,CACvD,EACA4J,EAAY,UAAU,OAAS,SAAS5J,EAAKoE,EAAK,CAChD,KAAK,eAAe,OAAOpE,EAAK,KAAK,SAASoE,CAAG,CAAC,CACpD,EACAwF,EAAY,UAAU,OAAS,SAASxF,EAAK3F,EAAO0G,EAAMC,EAAM,CAC9D,GAAI,CACF,IAAInC,EAAM,KAAK,SAASmB,CAAG,CAC7B,MAAc,CACd,CACA,OAAInB,IAAQ,QACNkC,GACFA,EAAKf,EAAK,IAAI,EAET,IAEF,KAAK,eAAe,OAAOnB,EAAKxE,EAAO0G,EAAMC,CAAI,CAC1D,EACAwE,EAAY,UAAU,MAAQ,SAASxF,EAAKnJ,EAAM,CAChD,IAAIgH,EAAO,KAAK,eAChB,OAAQhH,GAAQA,EAAK,OAAQ,CAC3B,IAAK,GACH,OAAOgH,EAAK,MAAM,KAAK,SAASmC,CAAG,EAAGnJ,CAAI,EAC5C,IAAK,GACH,OAAO,KAAK,WAAWgH,EAAK,MAAMmC,EAAKnJ,CAAI,CAAC,EAC9C,QACE,OAAO,KAAK,WAAWgH,EAAK,MAAM,KAAK,SAASmC,CAAG,EAAGnJ,CAAI,CAAC,CAC/D,CACF,EACA2O,EAAY,UAAU,QAAU,SAASrF,EAAUtC,EAAMhH,EAAM,CAC7D,IAAI4O,EAAa,KAAK,SAAS5H,EAAMhH,CAAI,EACrC4O,IACFtF,EAAS,MAAQ,SAASvE,EAAK,CAC7B,OAAO6J,EAAW5H,EAAK,MAAMjC,CAAG,CAAC,CACnC,EAEJ,EACA4J,EAAY,UAAU,QAAU,SAASE,EAAMC,EAAM,CACnD,IAAIlD,EAAO,KAAK,SAASiD,CAAI,EACzBhD,EAAO,KAAK,SAASiD,CAAI,EAC7B,OAAO,KAAK,eAAe,QAAQlD,EAAMC,CAAI,CAC/C,EACA8C,EAAY,UAAU,OAAS,UAAW,CACxC,OAAO,KAAK,WAAW,KAAK,eAAe,OAAO,CAAC,CACrD,EACAA,EAAY,UAAU,OAAS,SAAS5H,EAAQ/G,EAAM,CACpD,IAAIgH,EAAO,KAAK,eACZ+H,EAAY/H,EAAK,OAAS,QAAUhH,EAAK,QAAQgH,EAAK,IAAI,EAC9D,OAAAD,EAASC,EAAK,OAAOhH,CAAI,EACrB,CAAC+O,GAAa/O,EAAK,cACjB,OAAO+G,GAAU,WACnBA,EAAS,CAAE,KAAMA,CAAO,GAE1BA,EAAO,YAAc,KAAK,iBAC1B,KAAK,QAAQA,CAAM,GAEdA,CACT,EACA4H,EAAY,UAAU,MAAQ,SAAS5J,EAAK,CAC1C,KAAK,eAAe,MAAMA,CAAG,CAC/B,EACA4J,EAAY,UAAU,QAAU,UAAW,CAC3C,EACAA,EAAY,UAAU,WAAalJ,EAAM,iBACzCkJ,EAAY,UAAU,SAAWlJ,EAAM,iBACvCkJ,EAAY,UAAU,SAAWlJ,EAAM,iBACvC,SAASyF,EAAiBF,EAAU,CAClC,KAAK,kBAAoB,OACzBP,EAAc,KAAK,KAAM,EAAI,EAC7B,KAAK,UAAY,CAAC,CAACO,CACrB,CACAlM,EAAK,SAASoM,EAAkB5E,CAAQ,EACxC4E,EAAiB,UAAU,SAAW,gBACtCA,EAAiB,UAAU,OAAS,SAASlD,EAAKxE,EAAO0G,EAAM,CAC7D,IAAI3F,EAAK,KAAK,SAASyD,CAAG,EAC1B,MAAI,CAACzD,GAAM2F,GACTA,EAAKlC,EAAK,IAAI,EAETzD,CACT,EACA2G,EAAiB,UAAU,MAAQ,SAASnG,EAAK,CAC/C,IAAIT,EAAK5D,EAQT,GAPI,KAAK,WACPA,EAAMqE,EAAI,IACVA,EAAI,SAAS,EACbT,EAAMS,EAAI,IAAI,MAAMrE,EAAKqE,EAAI,GAAG,GAEhCT,EAAMS,EAAI,gBAAgBA,CAAG,EAE3BA,EAAI,QAAQ,EACd,OAAO,KAAK,YAAYT,CAAG,CAE/B,EACA4G,EAAiB,UAAU,OAAS,SAASnG,EAAKiD,EAAK,CAChD,KAAK,SAASA,CAAG,GACpB2C,GAAkB3C,EAAK,IAAI,EAE7B,IAAI1D,EAAM,KAAK,UAAU0D,CAAG,EACxB,KAAK,UACPjD,EAAI,WAAWT,CAAG,EAElBS,EAAI,cAAcT,CAAG,CAEzB,EACA4G,EAAiB,UAAU,MAAQ,SAASlD,EAAKhI,EAAM,CACrD,OAAQA,GAAQA,EAAK,OAAQ,CAC3B,IAAK,GACH,OAAO,KAAK,QAAQgI,CAAG,EACzB,IAAK,GACH,OAAO,KAAK,UAAUA,CAAG,EAC3B,QACE,OAAO,KAAK,UAAU,KAAK,QAAQA,CAAG,CAAC,CAC3C,CACF,EACAkD,EAAiB,UAAU,OAAS,UAAW,CAC7C,MAAO,MACT,EACAA,EAAiB,UAAU,QAAU,SAAS5B,EAAUtC,EAAM,CAC5D,IAAIwG,EAAO,KACX,OAAQxG,EAAK,SAAU,CACrB,IAAK,MACHsC,EAAS,MAAQ,SAASvE,EAAK,CAC7B,OAAOyI,EAAK,UAAUxG,EAAK,MAAMjC,CAAG,CAAC,CACvC,EACA,MACF,IAAK,gBACL,IAAK,OACHuE,EAAS,MAAQ,SAASvE,EAAK,CAC7B,OAAOyI,EAAK,MAAMzI,CAAG,CACvB,CACJ,CACF,EACAmG,EAAiB,UAAU,OAAS,UAAW,CAC7C,OAAO,KAAK,UAAU5E,EAAS,UAAU,OAAO,CAAC,CACnD,EACA4E,EAAiB,UAAU,YAAczF,EAAM,iBAC/CyF,EAAiB,UAAU,UAAYzF,EAAM,iBAC7CyF,EAAiB,UAAU,UAAYzF,EAAM,iBAC7CyF,EAAiB,UAAU,QAAUzF,EAAM,iBAC3CyF,EAAiB,UAAU,SAAWzF,EAAM,iBAC5CyF,EAAiB,UAAU,QAAUzF,EAAM,iBAC3C,SAASmH,EAAM7F,EAAQ/G,EAAM,CAC3B,IAAIwB,EAAOuF,EAAO,KAClB,GAAI,OAAOvF,GAAQ,UAAY,CAACiE,EAAM,YAAYjE,CAAI,EACpD,MAAM,IAAI,MAAMpC,EAAG,yBAA0BoC,CAAI,CAAC,EAEpD,KAAK,KAAOA,EACZ,KAAK,KAAOsF,EAAK,UAAUC,EAAO,KAAM/G,CAAI,EAC5C,KAAK,QAAU+G,EAAO,SAAW,CAAC,EAClC,KAAK,IAAMA,EAAO,MAAQ,OAAS,GAAKA,EAAO,IAAM,OACrD,KAAK,OAAS,SAASsH,EAAO,CAC5B,OAAQA,EAAO,CACb,IAAK,YACH,MAAO,GACT,IAAK,aACH,MAAO,GACT,IAAK,SACH,MAAO,GACT,QACE,MAAM,IAAI,MAAMjP,EAAG,oBAAqBiP,CAAK,CAAC,CAClD,CACF,EAAEtH,EAAO,QAAU,OAAS,YAAcA,EAAO,KAAK,EACtD,IAAI7G,EAAQ6G,EAAO,QACnB,GAAI7G,IAAU,OAAQ,CACpB,IAAI8G,EAAO,KAAK,KACZgB,EACJ,GAAI,CACFA,EAAMhB,EAAK,MAAM9G,EAAO,CAAE,OAAQ,EAAG,KAAM,CAAE,CAAC,CAChD,OAASwH,EAAK,CACZ,IAAIsH,EAAM5P,EAAG,qCAAsCc,EAAOwH,EAAI,OAAO,EACrE,MAAIZ,EAAK,OAAOE,EAAM,OAAO,IAC3BgI,GAAO5P,EACL,2DACA4H,EAAK,MAAM,CAAC,CACd,GAEI,IAAI,MAAMgI,CAAG,CACrB,CACI7H,GAAYH,EAAK,QAAQ,GAAKA,EAAK,WAAa,QAClD,KAAK,aAAe,UAAW,CAC7B,OAAOgB,CACT,EAEA,KAAK,aAAe,UAAW,CAC7B,OAAOhB,EAAK,MAAMgB,CAAG,CACvB,CAEJ,CACA,OAAO,OAAO,IAAI,CACpB,CACA4E,EAAM,UAAU,aAAe,UAAW,CAC1C,EACA,OAAO,eAAeA,EAAM,UAAW,QAAS,CAC9C,WAAY,GACZ,IAAK,UAAW,CACd,MAAO,CAAC,aAAc,SAAU,WAAW,EAAE,KAAK,OAAS,CAAC,CAC9D,CACF,CAAC,EACDA,EAAM,UAAU,WAAa,UAAW,CACtC,OAAO,KAAK,OACd,EACAA,EAAM,UAAU,WAAaA,EAAM,UAAU,aAC7CA,EAAM,UAAU,QAAU,UAAW,CACnC,OAAO,KAAK,IACd,EACAA,EAAM,UAAU,SAAW,UAAW,CACpC,OAAO,KAAK,KACd,EACAA,EAAM,UAAU,QAAU,UAAW,CACnC,OAAO,KAAK,IACd,EACA,SAASrD,EAAS0F,EAAY,CAC5B,KAAK,YAAcA,EACnB,KAAK,MAAQ,KACb,KAAK,UAAY,KACjB,KAAK,KAAO,EACZ,KAAK,QAAU,KACf,KAAK,WAAa,IACpB,CACA1F,EAAS,UAAU,MAAQzC,EAAK,UAAU,MAC1CyC,EAAS,UAAU,QAAU,UAAW,CACtC,MAAO,YACT,EACA,SAAStC,IAAO,CACd,KAAK,IAAM,MACb,CACA,SAAS0C,EAAU3C,EAAMjC,EAAKuE,EAAU4F,EAAM,CAC5C,GAAI5F,EAAU,CACZ,GAAIA,EAAS,cAAgBtC,EAC3B,MAAM,IAAI,MAAM,kBAAkB,EAEpC,OAAOsC,EAAS,MAAMvE,EAAKmK,CAAI,CACjC,KACE,QAAOlI,EAAK,MAAMjC,CAAG,CAEzB,CACA,SAASkJ,GAAWlN,EAAK,CACvB,IAAIQ,EAAQ,CAAC,EACTR,EAAI,OACNQ,EAAMR,EAAI,IAAI,EAAI,IAEpB,IAAIoO,EAAUpO,EAAI,QACdJ,EAAGC,EACP,IAAKD,EAAI,EAAGC,EAAIuO,EAAQ,OAAQxO,EAAIC,EAAGD,IACrCY,EAAM4N,EAAQxO,CAAC,CAAC,EAAI,GAEtB,OAAO,OAAO,KAAKY,CAAK,CAC1B,CACA,SAAS8K,GAAkB+C,EAAQC,EAAQC,EAAQ,CACjD,GAAI,CAACD,EAAO,KACV,MAAO,GAET,IAAI7N,EAAO8N,EAASD,EAAO,KAAO5J,EAAM,UAAU4J,EAAO,IAAI,EACzDF,EAAUlB,GAAWmB,CAAM,EAC3BzO,EAAGC,EAAG2O,EACV,IAAK5O,EAAI,EAAGC,EAAIuO,EAAQ,OAAQxO,EAAIC,EAAGD,IAKrC,GAJA4O,EAAQJ,EAAQxO,CAAC,EACZ2O,IACHC,EAAQ9J,EAAM,UAAU8J,CAAK,GAE3BA,IAAU/N,EACZ,MAAO,GAGX,MAAO,EACT,CACA,SAAS2F,GAAYW,EAAU,CAC7B,IAAId,EAAOpB,EAAMkC,CAAQ,EACzB,OAAOd,GAAQA,EAAK,qBAAqByD,CAC3C,CACA,SAAST,GAAalC,EAAU,CAC9B,GAAIA,IAAa,QACfA,EAAW,aACN,CACL,IAAI7F,EAAQ,iBAAiB,KAAK6F,CAAQ,EACtC7F,IACEA,EAAM,CAAC,IAAM,QACf6F,EAAW7F,EAAM,CAAC,EAAI,QAEtB6F,EAAW7F,EAAM,CAAC,EAGxB,CACA,OAAOwD,EAAM,WAAWqC,CAAQ,EAAI,MACtC,CACA,SAASyE,GAAcxH,EAAK,CAC1B,IAAIP,EAAIO,EAAI,SAAS,EACrB,OAAIP,EAAI,IACNA,EAAI,CAACA,EACLO,EAAI,SAAS,GAERP,CACT,CACA,SAASsG,GAAWtG,EAAG,CACrB,OAAOA,GAAK,mBAAqBA,GAAK,gBACxC,CACA,SAAS2G,GAAapK,EAAK,CACzB,OAAOA,GAAOA,EAAI,OAAS,UAAY,MAAM,QAAQA,EAAI,IAAI,CAC/D,CACA,SAAS4J,GAAkB3C,EAAKhB,EAAM,CACpC,MAAM,IAAI,MAAM5H,EAAG,iBAAkB4H,EAAK,OAAO,EAAGgB,CAAG,CAAC,CAC1D,CACA,SAASd,GAAa1F,EAAMkL,EAAI,CAC9B,IAAI8C,EAAc/J,EAAM,UAAUjE,CAAI,EACtC,OAAO2F,GAAYqI,CAAW,EAAIA,EAAc/J,EAAM,QAAQjE,EAAMkL,CAAE,CACxE,CACA,SAAShE,GAAc1B,EAAM,CAC3B,IAAIc,EAAWd,EAAK,SACpB,OAAQc,EAAU,CAChB,IAAK,SACL,IAAK,QACL,IAAK,MACL,IAAK,OACH,MAAO,SACT,IAAK,QACL,IAAK,QACH,MAAO,SACT,IAAK,OACH,MAAO,SACT,IAAK,MACL,IAAK,QACL,IAAK,SACH,MAAO,SACT,QACE,OAAOA,CACX,CACF,CACA,SAASwD,GAAetD,EAAK,CAC3B,GAAIA,IAAQ,KACV,MAAO,OAET,IAAIS,EAAS,OAAOT,EACpB,GAAIS,IAAW,SAAU,CACvB,GAAI,MAAM,QAAQT,CAAG,EACnB,MAAO,QACF,GAAIhJ,EAAQ,SAASgJ,CAAG,EAC7B,MAAO,QAEX,CACA,OAAOS,CACT,CACA,SAASZ,GAAYD,EAAO,CAC1B,IAAIgB,EAAU,CAAC,EACXjI,EAAGC,EAAG6H,EAAQzB,EAClB,IAAKrG,EAAI,EAAGC,EAAIgH,EAAM,OAAQjH,EAAIC,EAAGD,IAEnC,GADAqG,EAAOY,EAAMjH,CAAC,EACV,CAACmG,EAAK,OAAOE,EAAM,SAAS,EAAG,CAEjC,GADAyB,EAASC,GAAc1B,CAAI,EACvB4B,EAAQH,CAAM,EAChB,MAAO,GAETG,EAAQH,CAAM,EAAI,EACpB,CAEF,MAAO,EACT,CACA,SAASK,GAAelB,EAAO,CAC7B,IAAI6H,EAAY,CAAC,MAAO,OAAQ,QAAS,QAAQ,EAC7CC,EAAa,GACbC,EAAY,KACZhP,EAAGC,EAAGoG,EAAMyC,EAChB,IAAK9I,EAAI,EAAGC,EAAIgH,EAAM,OAAQjH,EAAIC,EAAGD,IACnCqG,EAAOY,EAAMjH,CAAC,EACd8I,EAAQgG,EAAU,QAAQzI,EAAK,QAAQ,EACnCyC,EAAQiG,IACVA,EAAajG,EACbkG,EAAY3I,GAGhB,OAAO2I,CACT,CACA,SAAS5G,GAAenB,EAAO5H,EAAM,CACnC,IAAIoM,EAAU,CAAC,EACXzL,EAAGC,EAAGoG,EAAM4I,EAChB,IAAKjP,EAAI,EAAGC,EAAIgH,EAAM,OAAQjH,EAAIC,EAAGD,IAAK,CAExC,GADAqG,EAAOY,EAAMjH,CAAC,EACVqG,EAAK,WAAa,SACpB,OAAOA,EAET4I,EAAc5I,EAAK,QACnB,IAAIlD,EAAIV,EACR,IAAKU,EAAK,EAAGV,EAAKwM,EAAY,OAAQ9L,EAAKV,EAAIU,IAC7CsI,EAAQwD,EAAY9L,CAAE,CAAC,EAAI,EAE/B,CACA,OAAOgD,EAAK,UAAU,CAAE,KAAM,OAAQ,QAAS,OAAO,KAAKsF,CAAO,CAAE,EAAGpM,CAAI,CAC7E,CACA,SAASgJ,GAAepB,EAAO5H,EAAM,CACnC,IAAIV,EAAO,GACPqB,EAAGC,EAAGoG,EACV,IAAKrG,EAAI,EAAGC,EAAIgH,EAAM,OAAQjH,EAAIC,EAAGD,IAAK,CAExC,GADAqG,EAAOY,EAAMjH,CAAC,EACVqG,EAAK,WAAa,QACpB,OAAOA,EAEL1H,IAAS,GACXA,EAAO0H,EAAK,KACHA,EAAK,OAAS1H,IACvBA,EAAO,GAEX,CACA,OAAOA,EAAO,EAAIwH,EAAK,UAAU,QAAS9G,CAAI,EAAI4H,EAAM,CAAC,CAC3D,CACA,SAASsB,GAAetB,EAAO5H,EAAM,CACnC,IAAI6P,EAAW,CAAC,EACZC,EAAa,CAAC,EACdC,EAAgB,CAAC,EACjBC,EAAgB,GAChBrP,EAAGC,EAAGoG,EAAMoH,EAChB,IAAKzN,EAAI,EAAGC,EAAIgH,EAAM,OAAQjH,EAAIC,EAAGD,IAEnC,GADAqG,EAAOY,EAAMjH,CAAC,EACVqG,EAAK,WAAa,MACpBgJ,EAAgB,GAChBH,EAAS,KAAK7I,EAAK,UAAU,MACxB,CACLoH,EAASpH,EAAK,OACd,IAAIlD,EAAIV,EAAIuJ,EAAOsD,EAAcC,EAAW5B,EAC5C,IAAKxK,EAAK,EAAGV,EAAKgL,EAAO,OAAQtK,EAAKV,EAAIU,IACxC6I,EAAQyB,EAAOtK,CAAE,EACjBoM,EAAYvD,EAAM,KAClB2B,EAAY3B,EAAM,KAClBkD,EAAS,KAAKvB,CAAS,EACnB0B,IACGF,EAAWI,CAAS,IACvBJ,EAAWI,CAAS,EAAI,CAAC,GAE3BJ,EAAWI,CAAS,EAAE,KAAK5B,CAAS,EACpC2B,EAAetD,EAAM,aAAa,EAC9BsD,IAAiB,SACnBF,EAAcG,CAAS,EAAID,GAInC,CAEF,GAAID,EAAe,CACjB,IAAI/H,EAAa,OAAO,KAAK6H,CAAU,EACvC,IAAKnP,EAAI,EAAGC,EAAIqH,EAAW,OAAQtH,EAAIC,EAAGD,IACxCuP,EAAYjI,EAAWtH,CAAC,EACpBmP,EAAWI,CAAS,EAAE,OAAStI,EAAM,QAAUmI,EAAcG,CAAS,IAAM,SAC1ElQ,GAAQA,EAAK,eACfgQ,EAAgB,IAEhBF,EAAWI,CAAS,EAAE,QAAQpJ,EAAK,UAAU,OAAQ9G,CAAI,CAAC,EAC1D+P,EAAcG,CAAS,EAAI,MAInC,CACA,IAAInJ,GACJ,OAAIiJ,EACFjJ,GAAS,CACP,KAAM,SACN,OAAQkB,EAAW,IAAI,SAAStI,GAAG,CACjC,IAAIwQ,GAAarJ,EAAK,SAASgJ,EAAWnQ,EAAC,EAAGK,CAAI,EAC9CoQ,GAAgBL,EAAcpQ,EAAC,EACnC,GAAIyQ,KAAkB,QAAU,CAACD,GAAW,SAAS,QAAQ,OAAO,EAAG,CACrE,IAAIE,GAAaF,GAAW,MAAM,MAAM,EACpCjM,GAAIgB,GACR,IAAKhB,GAAK,EAAGgB,GAAKmL,GAAW,OAAQnM,GAAKgB,IACpC,CAAAmL,GAAWnM,EAAE,EAAE,QAAQkM,EAAa,EADIlM,KAC5C,CAIF,GAAIA,GAAK,EAAG,CACV,IAAIqE,GAAY8H,GAAW,CAAC,EAC5BA,GAAW,CAAC,EAAIA,GAAWnM,EAAE,EAC7BmM,GAAWnM,EAAE,EAAIqE,GACjB4H,GAAarJ,EAAK,UAAUuJ,GAAYrQ,CAAI,CAC9C,CACF,CACA,MAAO,CACL,KAAML,GACN,KAAMwQ,GACN,QAAWJ,EAAcpQ,EAAC,CAC5B,CACF,CAAC,CACH,EAEAoH,GAAS,CACP,KAAM,MACN,OAAQD,EAAK,SAAS+I,EAAU7P,CAAI,CACtC,EAEK8G,EAAK,UAAUC,GAAQ/G,CAAI,CACpC,CACAvB,EAAO,QAAU,CACf,KAAAqI,EACA,cAAA4B,GACA,eAAA4C,GACA,YAAAnE,GACA,SAAU,UAAW,CACnB,IAAIS,EAAQ,CACV,YAAA+G,EACA,mBAAAnH,EACA,iBAAAD,CACF,EACIkI,EAAY,OAAO,KAAK7J,CAAK,EAC7BjF,EAAGC,EAAGkH,EACV,IAAKnH,EAAI,EAAGC,EAAI6O,EAAU,OAAQ9O,EAAIC,EAAGD,IACvCmH,EAAW2H,EAAU9O,CAAC,EACtBiH,EAAMoC,GAAalC,CAAQ,CAAC,EAAIlC,EAAMkC,CAAQ,EAEhD,OAAOF,CACT,EAAE,CACJ,CACF,CACF,CAAC,EAGG0I,GAAqBjT,GAAW,CAClC,sCAAsCmB,EAASC,EAAQ,CACrD,aACA,IAAImJ,EAAQpC,GAAc,EACtBC,EAAQlH,GAAc,EACtBG,EAASC,GACT4R,EAASC,GACT1R,EAAOC,GACP0R,EAAOC,GACP1R,EAAUN,EAAO,OACjBiS,EAAO,CAAE,UAAW,sBAAuB,EAC3CC,EAAYhJ,EAAM,KAAK,UAAU,OAAQ+I,CAAI,EAC7CE,EAAiBjJ,EAAM,KAAK,UAAU,CAAE,KAAM,MAAO,OAAQ,OAAQ,EAAG+I,CAAI,EAC5EG,EAAclJ,EAAM,KAAK,UAAU,CACrC,KAAM,SACN,KAAM,SACN,OAAQ,CACN,CAAE,KAAM,QAAS,KAAM,CAAE,KAAM,QAAS,KAAM,QAAS,KAAM,CAAE,CAAE,EACjE,CAAE,KAAM,OAAQ,KAAMiJ,CAAe,EACrC,CAAE,KAAM,OAAQ,KAAM,CAAE,KAAM,QAAS,KAAM,OAAQ,KAAM,EAAG,CAAE,CAClE,CACF,EAAGF,CAAI,EACHI,GAAanJ,EAAM,KAAK,UAAU,CACpC,KAAM,QACN,KAAM,SACN,OAAQ,CACN,CAAE,KAAM,QAAS,KAAM,MAAO,EAC9B,CAAE,KAAM,OAAQ,KAAM,OAAQ,EAC9B,CAAE,KAAM,OAAQ,KAAM,MAAO,CAC/B,CACF,EAAG+I,CAAI,EACHK,EAAcvL,EAAM,WAAW,MAAM,EACrCrG,EAAKN,EAAK,OACVuF,EAAMoB,EAAM,IAChB,SAASwL,EAAWlK,EAAQ/G,EAAM,CAChCA,EAAOA,GAAQ,CAAC,EAChB,IAAIkR,EAAW,CAAC,CAAClR,EAAK,SACtBuQ,EAAO,OAAO,KAAK,KAAM,CACvB,mBAAoB,CAACW,EACrB,cAAe,EACjB,CAAC,EACD,KAAK,MAAQtJ,EAAM,KAAK,UAAUb,CAAM,EACxC,KAAK,KAAO,IAAI1C,EAAIoB,EAAM,UAAU,CAAC,CAAC,EACtC,KAAK,SAAW,KAChB,KAAK,UAAY,GACjB,KAAK,WAAa0L,EAAaD,EAAU,KAAK,KAAK,EACnD,KAAK,UAAY,GACjB,KAAK,GAAG,SAAU,UAAW,CAC3B,KAAK,UAAY,GACjB,KAAK,MAAM,CACb,CAAC,CACH,CACApS,EAAK,SAASmS,EAAYV,EAAO,MAAM,EACvCU,EAAW,UAAU,OAAS,SAASG,EAAOC,EAAU/T,EAAI,CAC1D,KAAK,SAAWA,EAChB,IAAIyH,EAAM,KAAK,KACfA,EAAI,IAAM/F,EAAQ,OAAO,CAAC+F,EAAI,IAAI,MAAMA,EAAI,GAAG,EAAGqM,CAAK,CAAC,EACxDrM,EAAI,IAAM,EACN,KAAK,YACP,KAAK,UAAY,GACjB,KAAK,MAAM,EAEf,EACAkM,EAAW,UAAU,MAAQ,UAAW,CACtC,KAAK,UAAY,GACjB,IAAIlM,EAAM,KAAK,KACXrE,EAAMqE,EAAI,IACViD,EAAM,KAAK,WAAWjD,CAAG,EACzBA,EAAI,QAAQ,EACd,KAAK,KAAKiD,CAAG,EACH,KAAK,UAOf,KAAK,KAAK,IAAI,GANdjD,EAAI,IAAMrE,EACV,KAAK,UAAY,GACb,KAAK,UACP,KAAK,SAAS,EAKpB,EACA,SAAS4Q,EAAatR,EAAM,CAC1BA,EAAOA,GAAQ,CAAC,EAChB,IAAIkR,EAAW,CAAC,CAAClR,EAAK,SACtBuQ,EAAO,OAAO,KAAK,KAAM,CACvB,cAAe,GAEf,mBAAoB,CAACW,CACvB,CAAC,EACD,KAAK,OAASlR,EAAK,eAAiB,OAAS4H,EAAM,KAAK,UAAU5H,EAAK,YAAY,EAAI,OACvF,KAAK,OAAS,KACd,KAAK,QAAUA,EAAK,OACpB,KAAK,OAAS,OACd,KAAK,WAAaA,EAAK,UACvB,KAAK,KAAO,IAAIqE,EAAIoB,EAAM,UAAU,CAAC,CAAC,EACtC,KAAK,UAAY,IAAIpB,EAAIoB,EAAM,UAAU,CAAC,CAAC,EAC3C,KAAK,YAAc,KACnB,KAAK,WAAa,KAClB,KAAK,UAAYyL,EACjB,KAAK,OAAS,IAAIzL,EAAM,aACxB,KAAK,YAAc,KACnB,KAAK,OAAS,EACd,KAAK,WAAa,OAClB,KAAK,UAAY,GACjB,KAAK,UAAY,GACjB,KAAK,GAAG,SAAU,UAAW,CAC3B,KAAK,UAAY,GACb,KAAK,WACP,KAAK,MAAM,CAEf,CAAC,CACH,CACA3G,EAAK,SAASwS,EAAcf,EAAO,MAAM,EACzCe,EAAa,cAAgB,UAAW,CACtC,MAAO,CACL,KAAQ,SAAShN,EAAKhH,EAAI,CACxBA,EAAG,KAAMgH,CAAG,CACd,EACA,QAAWmM,EAAK,UAClB,CACF,EACAa,EAAa,iBAAmBA,EAAa,cAC7CA,EAAa,UAAU,cAAgB,UAAW,CAChD,IAAIvM,EAAM,KAAK,KACf,GAAIA,EAAI,IAAI,OAASiM,EAAY,OAC/B,MAAO,GAET,GAAI,CAACA,EAAY,OAAOjM,EAAI,IAAI,MAAM,EAAGiM,EAAY,MAAM,CAAC,EAC1D,YAAK,KAAK,QAAS,IAAI,MAAM,qBAAqB,CAAC,EAC5C,GAET,IAAIO,EAAST,EAAY,MAAM/L,CAAG,EAClC,GAAI,CAACA,EAAI,QAAQ,EACf,MAAO,GAET,KAAK,QAAUwM,EAAO,KAAK,YAAY,GAAK,QAAQ,SAAS,EAC7D,IAAIC,EAAS,KAAK,SAAWF,EAAa,iBAAiB,EAE3D,GADA,KAAK,YAAcE,EAAO,KAAK,MAAM,EACjC,CAAC,KAAK,YAAa,CACrB,KAAK,KAAK,QAAS,IAAI,MAAMpS,EAAG,oBAAqB,KAAK,MAAM,CAAC,CAAC,EAClE,MACF,CACA,GAAI,CACF,IAAI2H,EAAS,KAAK,MAAMwK,EAAO,KAAK,aAAa,EAAE,SAAS,CAAC,EACzD,KAAK,aACPxK,EAAS,KAAK,WAAWA,CAAM,GAEjC,KAAK,OAASa,EAAM,KAAK,UAAUb,CAAM,CAC3C,OAASW,EAAK,CACZ,KAAK,KAAK,QAASA,CAAG,EACtB,MACF,CACA,GAAI,CACF,KAAK,WAAayJ,EAAa,KAAK,UAAW,KAAK,OAAQ,KAAK,MAAM,CACzE,OAASzJ,EAAK,CACZ,KAAK,KAAK,QAASA,CAAG,EACtB,MACF,CACA,YAAK,YAAc6J,EAAO,KAC1B,KAAK,KAAK,WAAY,KAAK,OAAQ,KAAK,OAAQA,CAAM,EAC/C,EACT,EACAD,EAAa,UAAU,OAAS,SAASF,EAAOC,EAAU/T,EAAI,CAC5D,IAAIyH,EAAM,KAAK,KAGf,GAFAA,EAAI,IAAM/F,EAAQ,OAAO,CAAC+F,EAAI,IAAKqM,CAAK,CAAC,EACzCrM,EAAI,IAAM,EACN,CAAC,KAAK,cAAc,EAAG,CACzB,QAAQ,SAASzH,CAAE,EACnB,MACF,CACA,KAAK,OAAS,KAAK,YACnB,KAAK,OAAOmI,EAAM,UAAU,CAAC,EAAG4L,EAAU/T,CAAE,CAC9C,EACAgU,EAAa,UAAU,YAAc,SAASF,EAAOC,EAAU/T,EAAI,CACjE,IAAIyH,EAAM,KAAK,KACfA,EAAI,IAAM/F,EAAQ,OAAO,CAAC+F,EAAI,IAAI,MAAMA,EAAI,GAAG,EAAGqM,CAAK,CAAC,EACxDrM,EAAI,IAAM,EAGV,QAFI0M,EAAU,EACVC,EACGA,EAAQC,EAAa5M,CAAG,GAAG,CAChC,GAAI,CAAC,KAAK,YAAY,OAAO2M,EAAM,IAAI,EAAG,CACxC,KAAK,KAAK,QAAS,IAAI,MAAM,qBAAqB,CAAC,EACnD,MACF,CACAD,IACA,KAAK,YACHC,EAAM,KACN,KAAK,qBAAqBA,EAAM,KAAK,OAAQA,EAAM,MAAOE,CAAO,CACnE,CACF,CACAA,EAAQ,EACR,SAASA,GAAU,CACZ,EAAEH,GACLnU,EAAG,CAEP,CACF,EACAgU,EAAa,UAAU,qBAAuB,SAAShS,EAAMuS,EAAOvU,EAAI,CACtE,IAAIkQ,EAAO,KACP/D,EAAQ,KAAK,SACjB,OAAO,SAASqI,EAAOtS,EAAM,CAC3B,GAAIsS,EAAO,CACT,IAAIpK,EAAM,IAAI,MAAMtI,EAAG,+BAAgCoO,EAAK,MAAM,CAAC,EACnE9F,EAAI,MAAQoK,EACZtE,EAAK,KAAK,QAAS9F,CAAG,EACtBpK,EAAG,CACL,MACEkQ,EAAK,KAAK,QAAS,IAAIuE,EAAUF,EAAOrS,EAAK,OAAQF,CAAI,CAAC,EAC1DkO,EAAK,OAAO,KAAK,IAAIwE,EAAUvI,EAAOjK,EAAMlC,EAAIuU,CAAK,CAAC,EAClDrE,EAAK,WACPA,EAAK,MAAM,CAGjB,CACF,EACA8D,EAAa,UAAU,MAAQ,UAAW,CACxC,KAAK,UAAY,GACjB,IAAIvM,EAAM,KAAK,UACf,GAAI,CAAC,KAAK,WAAY,CACpB,IAAIvF,EAAO,KAAK,OAAO,IAAI,EAC3B,GAAI,CAACA,GAAQ,CAACA,EAAK,MAAO,CACpB,KAAK,UACP,KAAK,KAAK,IAAI,EAEd,KAAK,UAAY,GAEfA,GACFA,EAAK,GAAG,EAEV,MACF,CACAA,EAAK,GAAG,EACR,KAAK,WAAaA,EAAK,MACvBuF,EAAI,IAAMvF,EAAK,IACfuF,EAAI,IAAM,CACZ,CACA,KAAK,aACL,IAAIiD,EACJ,GAAI,CAEF,GADAA,EAAM,KAAK,WAAWjD,CAAG,EACrB,CAACA,EAAI,QAAQ,EACf,MAAM,IAAI,MAAM,iBAAiB,CAErC,OAAS2C,EAAK,CACZ,KAAK,WAAa,EAClB,KAAK,KAAK,QAASA,CAAG,EACtB,MACF,CACA,KAAK,KAAKM,CAAG,CACf,EACA,SAASiK,GAAWlL,EAAQ/G,EAAM,CAChCA,EAAOA,GAAQ,CAAC,EAChBuQ,EAAO,UAAU,KAAK,KAAM,CAC1B,mBAAoB,GACpB,cAAe,EACjB,CAAC,EACD,KAAK,MAAQ3I,EAAM,KAAK,UAAUb,CAAM,EACxC,KAAK,YAAc,SAAShC,EAAKiD,EAAK,CACpC,GAAI,CACF,KAAK,MAAM,OAAOjD,EAAKiD,CAAG,CAC5B,OAASN,EAAK,CACZ,KAAK,KAAK,YAAaA,EAAKM,EAAK,KAAK,KAAK,CAC7C,CACF,EACA,KAAK,KAAO,IAAI3D,EAAIoB,EAAM,UAAUzF,EAAK,WAAa,KAAK,CAAC,EAC5D,KAAK,GAAG,YAAa,SAAS0H,EAAK,CACjC,KAAK,KAAK,QAASA,CAAG,CACxB,CAAC,CACH,CACA5I,EAAK,SAASmT,GAAY1B,EAAO,SAAS,EAC1C0B,GAAW,UAAU,WAAa,SAASjK,EAAKqJ,EAAU/T,EAAI,CAC5D,IAAIyH,EAAM,KAAK,KACXT,EAAMS,EAAI,IACVrE,EAAMqE,EAAI,IAEd,GADA,KAAK,YAAYA,EAAKiD,CAAG,EACrB,CAACjD,EAAI,QAAQ,EAAG,CACdrE,GACF,KAAK,KAAKwR,GAAWnN,EAAI,IAAK,EAAGrE,CAAG,CAAC,EAEvC,IAAIqC,EAAMgC,EAAI,IAAMrE,EAChBqC,EAAMuB,EAAI,SACZS,EAAI,IAAMU,EAAM,UAAU,EAAI1C,CAAG,GAEnCgC,EAAI,IAAM,EACV,KAAK,YAAYA,EAAKiD,CAAG,CAC3B,CACA1K,EAAG,CACL,EACA2U,GAAW,UAAU,OAAS,SAAS3U,EAAI,CACzC,IAAIyH,EAAM,KAAK,KACXrE,EAAMqE,EAAI,IACVrE,GACF,KAAK,KAAKqE,EAAI,IAAI,MAAM,EAAGrE,CAAG,CAAC,EAEjCpD,EAAG,CACL,EACA,SAAS6U,EAAapL,EAAQ/G,EAAM,CAClCA,EAAOA,GAAQ,CAAC,EAChBuQ,EAAO,OAAO,KAAK,KAAM,CACvB,cAAe,GAEf,mBAAoB,EACtB,CAAC,EACD,IAAIvJ,EA8BJ,GA7BIY,EAAM,KAAK,OAAOb,CAAM,GAC1BC,EAAOD,EACPA,EAAS,QAETC,EAAOY,EAAM,KAAK,UAAUb,CAAM,EAEpC,KAAK,QAAUA,EACf,KAAK,MAAQC,EACb,KAAK,YAAc,SAASjC,EAAKiD,EAAK,CACpC,GAAI,CACF,KAAK,MAAM,OAAOjD,EAAKiD,CAAG,CAC5B,OAASN,EAAK,CACZ,YAAK,KAAK,YAAaA,EAAKM,EAAK,KAAK,KAAK,EACpC,EACT,CACA,MAAO,EACT,EACA,KAAK,WAAahI,EAAK,WAAa,MACpC,KAAK,KAAO,IAAIqE,EAAIoB,EAAM,UAAU,KAAK,UAAU,CAAC,EACpD,KAAK,QAAUzF,EAAK,OACpB,KAAK,OAASA,EAAK,OAAS,OAC5B,KAAK,YAAc,EACnB,KAAK,YAAcA,EAAK,YAAc,IAAIyF,EAAM,IAAI,EAAE,WAAW,EAAE,EACnE,KAAK,OAAS,IAAIA,EAAM,aACxB,KAAK,SAAW,EAChB,KAAK,UAAY,GACjB,KAAK,YAAc,GACnB,KAAK,UAAY,GACjB,KAAK,UAAYzF,EAAK,UAAY,CAAC,EAC/B,CAAC6Q,EAAe,QAAQ,KAAK,SAAS,EACxC,MAAM,IAAI,MAAM,kBAAkB,EAEpC,IAAIuB,EAAQ,KAAK,OAEjB,GADA,KAAK,WAAa,KAAK,SAAWD,EAAa,iBAAiB,GAAGC,CAAK,EACpE,CAAC,KAAK,UACR,MAAM,IAAI,MAAMhT,EAAG,wBAAyBgT,CAAK,CAAC,EAKpD,OAHIpS,EAAK,aAAe,SACtBA,EAAK,YAAcA,EAAK,WAAa,QAAU,QAEzCA,EAAK,YAAa,CACxB,IAAK,GACL,IAAK,QACH,MACF,KAAK,OACL,IAAK,OACH,KAAK,YAAc,GACnB,MACF,QACE,KAAK,aAAa,CACtB,CACA,KAAK,GAAG,SAAU,UAAW,CAC3B,KAAK,UAAY,GACb,KAAK,YACP,KAAK,YAAY,EACR,KAAK,WAAa,KAAK,WAChC,KAAK,KAAK,IAAI,CAElB,CAAC,EACD,KAAK,GAAG,YAAa,SAAS0H,EAAK,CACjC,KAAK,KAAK,QAASA,CAAG,CACxB,CAAC,CACH,CACA5I,EAAK,SAASqT,EAAc5B,EAAO,MAAM,EACzC4B,EAAa,cAAgB,UAAW,CACtC,MAAO,CACL,KAAQ,SAAS7N,EAAKhH,EAAI,CACxBA,EAAG,KAAMgH,CAAG,CACd,EACA,QAAWmM,EAAK,UAClB,CACF,EACA0B,EAAa,iBAAmBA,EAAa,cAC7CA,EAAa,UAAU,aAAe,UAAW,CAC/C,IAAIpL,EAAS,KAAK,UAChB,KAAK,QAAU,KAAK,QAAU,KAAK,MAAM,UAAU,CAAE,YAAa,EAAK,CAAC,CAC1E,EACIsL,EAAO5M,EAAM,kBACf,KAAK,UACL,CAAE,cAAeA,EAAM,WAAWsB,CAAM,EAAG,aAActB,EAAM,WAAW,KAAK,MAAM,CAAE,EACvF,EAEF,EACI6M,EAASxB,EAAY,qBAAqB,EAC1CS,EAAS,IAAIe,EAAOtB,EAAaqB,EAAM,KAAK,WAAW,EAC3D,KAAK,KAAKd,EAAO,SAAS,CAAC,CAC7B,EACAY,EAAa,UAAU,OAAS,SAASnK,EAAKqJ,EAAU/T,EAAI,CACtD,KAAK,cACP,KAAK,aAAa,EAClB,KAAK,YAAc,IAErB,IAAIyH,EAAM,KAAK,KACXrE,EAAMqE,EAAI,IACVwN,EAAW,GACf,GAAI,KAAK,YAAYxN,EAAKiD,CAAG,EAAG,CAC9B,GAAI,CAACjD,EAAI,QAAQ,EAAG,CACdrE,IACF,KAAK,YAAYA,EAAKpD,CAAE,EACxBiV,EAAW,IAEb,IAAIxP,EAAMgC,EAAI,IAAMrE,EAChBqC,EAAM,KAAK,aACb,KAAK,WAAaA,EAAM,GAE1BgC,EAAI,IAAMU,EAAM,UAAU,KAAK,UAAU,EACzCV,EAAI,IAAM,EACV,KAAK,YAAYA,EAAKiD,CAAG,CAC3B,CACA,KAAK,aACP,MACEjD,EAAI,IAAMrE,EAEP6R,GACHjV,EAAG,CAEP,EACA6U,EAAa,UAAU,YAAc,SAASzR,EAAKpD,EAAI,CACrD,IAAIyH,EAAM,KAAK,KACfrE,EAAMA,GAAOqE,EAAI,IACjB,KAAK,UAAUA,EAAI,IAAI,MAAM,EAAGrE,CAAG,EAAG,KAAK,qBAAqBA,EAAKpD,CAAE,CAAC,EACxE,KAAK,YAAc,CACrB,EACA6U,EAAa,UAAU,MAAQ,UAAW,CACxC,IAAI3E,EAAO,KACPhO,EAAO,KAAK,OAAO,IAAI,EAC3B,GAAI,CAACA,EAAM,CACL,KAAK,WAAa,CAAC,KAAK,SAC1B,QAAQ,SAAS,UAAW,CAC1BgO,EAAK,KAAK,IAAI,CAChB,CAAC,EAED,KAAK,UAAY,GAEnB,MACF,CACA,KAAK,KAAKoD,EAAU,SAASpR,EAAK,MAAO,EAAI,CAAC,EAC9C,KAAK,KAAKoR,EAAU,SAASpR,EAAK,IAAI,OAAQ,EAAI,CAAC,EACnD,KAAK,KAAKA,EAAK,GAAG,EAClB,KAAK,KAAK,KAAK,WAAW,EACrB,KAAK,WACRA,EAAK,GAAG,CAEZ,EACA2S,EAAa,UAAU,qBAAuB,SAAS7S,EAAMhC,EAAI,CAC/D,IAAIkQ,EAAO,KACP/D,EAAQ,KAAK,SACboI,EAAQ,KAAK,YACjB,YAAK,WACE,SAASC,EAAOtS,EAAM,CAC3B,GAAIsS,EAAO,CACT,IAAIpK,EAAM,IAAI,MAAMtI,EAAG,6BAA8BoO,EAAK,MAAM,CAAC,EACjE9F,EAAI,MAAQoK,EACZtE,EAAK,KAAK,QAAS9F,CAAG,EACtB,MACF,CACA8F,EAAK,WACLA,EAAK,KAAK,QAAS,IAAIuE,EAAUF,EAAOvS,EAAME,EAAK,MAAM,CAAC,EAC1DgO,EAAK,OAAO,KAAK,IAAIwE,EAAUvI,EAAOjK,EAAMlC,EAAIuU,CAAK,CAAC,EAClDrE,EAAK,YACPA,EAAK,UAAY,GACjBA,EAAK,MAAM,EAEf,CACF,EACA,SAASuE,EAAUF,EAAOW,EAAKC,EAAY,CACzC,KAAK,WAAaZ,EAClB,KAAK,cAAgBW,EACrB,KAAK,qBAAuBC,CAC9B,CACA,SAAST,EAAUvI,EAAOnF,EAAKhH,EAAIuU,EAAO,CACxC,KAAK,MAAQpI,EACb,KAAK,IAAMnF,EACX,KAAK,GAAKhH,EACV,KAAK,MAAQuU,EAAQ,CACvB,CACA,SAASF,EAAa5M,EAAK,CACzB,IAAIrE,EAAMqE,EAAI,IACV2M,EAAQX,GAAW,MAAMhM,CAAG,EAChC,OAAKA,EAAI,QAAQ,EAIV2M,GAHL3M,EAAI,IAAMrE,EACH,KAGX,CACA,SAASyQ,EAAaD,EAAUwB,EAAYzD,EAAY,CACtD,GAAIiC,EACF,OAAuB,SAASyB,EAAS,CACvC,OAAO,SAAS5N,EAAK,CACnB,IAAIrE,EAAMqE,EAAI,IACd,OAAA4N,EAAQ5N,CAAG,EACJA,EAAI,IAAI,MAAMrE,EAAKqE,EAAI,GAAG,CACnC,CACF,EAAE2N,EAAW,KAAK,EACb,GAAIzD,EAAY,CACrB,IAAI3F,EAAW2F,EAAW,eAAeyD,CAAU,EACnD,OAAO,SAAS3N,EAAK,CACnB,OAAOuE,EAAS,MAAMvE,CAAG,CAC3B,CACF,KACE,QAAO,SAASA,EAAK,CACnB,OAAO2N,EAAW,MAAM3N,CAAG,CAC7B,CAEJ,CACA,SAASmN,GAAW5N,EAAK5D,EAAKqC,EAAK,CACjC,IAAI0J,EAAOhH,EAAM,UAAU1C,CAAG,EAC9B,OAAAuB,EAAI,KAAKmI,EAAM,EAAG/L,EAAKA,EAAMqC,CAAG,EACzB0J,CACT,CACAhO,EAAO,QAAU,CACf,WAAAsS,GAEA,YAAAD,EAEA,YAAAE,EAEA,QAAS,CACP,aAAAM,EACA,aAAAa,EACA,WAAAlB,EACA,WAAAgB,EACF,CACF,CACF,CACF,CAAC,EAGGW,GAAmBvV,GAAW,CAChC,oCAAoCmB,EAASC,EAAQ,CACnD,aACA,IAAImJ,EAAQpC,GAAc,EACtBC,EAAQlH,GAAc,EACtBG,EAASC,GACTkU,EAASC,GACTvC,EAASC,GACT1R,EAAOC,GACPC,EAAUN,EAAO,OACjB2F,EAAMoB,EAAM,IACZqB,EAAOc,EAAM,KACbjC,EAAQ7G,EAAK,SAAS,eAAe,EACrCM,EAAKN,EAAK,OACV6R,GAAO,CAAE,UAAW,qBAAsB,EAC1CoC,EAAejM,EAAK,UAAU,UAAW6J,EAAI,EAC7CE,EAAiB/J,EAAK,UAAU,CAAE,KAAM,MAAO,OAAQ,OAAQ,EAAG6J,EAAI,EACtEqC,EAAclM,EAAK,UAAU,SAAU6J,EAAI,EAC3CsC,EAAyBnM,EAAK,UAAU,CAC1C,KAAM,mBACN,KAAM,SACN,OAAQ,CACN,CAAE,KAAM,aAAc,KAAM,CAAE,KAAM,MAAO,KAAM,QAAS,KAAM,EAAG,CAAE,EACrE,CAAE,KAAM,iBAAkB,KAAM,CAAC,OAAQ,QAAQ,EAAG,QAAW,IAAK,EACpE,CAAE,KAAM,aAAc,KAAM,KAAM,EAClC,CAAE,KAAM,OAAQ,KAAM,CAAC,OAAQ+J,CAAc,EAAG,QAAW,IAAK,CAClE,CACF,EAAGF,EAAI,EACHuC,EAA0BpM,EAAK,UAAU,CAC3C,KAAM,oBACN,KAAM,SACN,OAAQ,CACN,CACE,KAAM,QACN,KAAM,CACJ,KAAM,iBACN,KAAM,OACN,QAAS,CAAC,OAAQ,SAAU,MAAM,CACpC,CACF,EACA,CAAE,KAAM,iBAAkB,KAAM,CAAC,OAAQ,QAAQ,EAAG,QAAW,IAAK,EACpE,CAAE,KAAM,aAAc,KAAM,CAAC,OAAQ,KAAK,EAAG,QAAW,IAAK,EAC7D,CAAE,KAAM,OAAQ,KAAM,CAAC,OAAQ+J,CAAc,EAAG,QAAW,IAAK,CAClE,CACF,EAAGF,EAAI,EACHwC,GAAgB,GAChBC,EAAe,IAAIC,EACrB,GAEAvM,EAAK,UAAU,CAAE,KAAM,cAAe,KAAM,SAAU,OAAQ,CAAC,CAAE,EAAG6J,EAAI,EACxE7J,EAAK,UAAU,CAAC,QAAQ,EAAG6J,EAAI,EAC/B7J,EAAK,UAAU,OAAQ6J,EAAI,CAC7B,EACA,SAAS0C,EAAQ7R,EAAM8R,EAASC,EAASC,EAASC,EAAQC,EAAK,CAE7D,GADA,KAAK,KAAOlS,EACR,CAACsF,EAAK,OAAOwM,EAAS,QAAQ,EAChC,MAAM,IAAI,MAAM,sBAAsB,EAGxC,GADA,KAAK,YAAcA,EACf,CAACxM,EAAK,OAAOyM,EAAS,OAAO,GAAK,CAACzM,EAAK,OAAOyM,EAAQ,SAAS,EAAE,CAAC,EAAG,QAAQ,EAChF,MAAM,IAAI,MAAM,oBAAoB,EAGtC,GADA,KAAK,UAAYA,EACbE,IACE,CAAC3M,EAAK,OAAO0M,EAAS,MAAM,GAAKD,EAAQ,SAAS,EAAE,OAAS,GAC/D,MAAM,IAAI,MAAM,gCAAgC,EAGpD,KAAK,aAAeC,EACpB,KAAK,OAAS,CAAC,CAACC,EAChB,KAAK,IAAMC,IAAQ,OAAS,GAAKA,EAAM,OACvC,OAAO,OAAO,IAAI,CACpB,CACAL,EAAQ,UAAY,SAAS7R,EAAMuF,EAAQ/G,EAAM,CAE/C,GADAA,EAAOA,GAAQ,CAAC,EACZ,CAACyF,EAAM,YAAYjE,CAAI,EACzB,MAAM,IAAI,MAAMpC,EAAG,2BAA4BoC,CAAI,CAAC,EAEtD,GAAI,CAAC,MAAM,QAAQuF,EAAO,OAAO,EAC/B,MAAM,IAAI,MAAM3H,EAAG,8BAA+BoC,CAAI,CAAC,EAEzD,IAAImS,EAAavU,EAAG,eAAgBuR,GAAK,UAAWlL,EAAM,WAAWjE,CAAI,CAAC,EACtE8R,EAAUxM,EAAK,UAAU,CAC3B,KAAM6M,EACN,KAAM,SACN,UAAW3T,EAAK,WAAa,GAE7B,OAAQ+G,EAAO,OACjB,EAAG/G,CAAI,EAEP,GADA,OAAOA,EAAK,SAAS2T,CAAU,EAC3B,CAAC5M,EAAO,SACV,MAAM,IAAI,MAAM3H,EAAG,+BAAgCoC,CAAI,CAAC,EAE1D,IAAIgS,EAAU1M,EAAK,UAAUC,EAAO,SAAU/G,CAAI,EAClD,GAAI+G,EAAO,SAAW,QAAU,CAAC,MAAM,QAAQA,EAAO,MAAM,EAC1D,MAAM,IAAI,MAAM3H,EAAG,6BAA8BoC,CAAI,CAAC,EAExD,IAAI+R,EAAUzM,EAAK,UAAU,CAAC,QAAQ,EAAE,OAAOC,EAAO,QAAU,CAAC,CAAC,EAAG/G,CAAI,EACrEyT,EAAS,CAAC,CAAC1M,EAAO,SAAS,EAC/B,OAAO,IAAIsM,EAAQ7R,EAAM8R,EAASC,EAASC,EAASC,EAAQ1M,EAAO,GAAG,CACxE,EACAsM,EAAQ,UAAU,OAASvM,EAAK,UAAU,UAC1CuM,EAAQ,UAAU,OAAS,SAASrT,EAAM,CACxC,IAAI4T,EAAY,KAAK,YAAY,OAAO5T,CAAI,EACxC+G,EAAS,CACX,QAAS6M,EAAU,OACnB,SAAU,KAAK,aAAa,OAAO5T,CAAI,CACzC,EACI6T,EAAS,KAAK,IACdA,IAAW,SACb9M,EAAO,IAAM8M,GAEf,IAAIC,EAAY,KAAK,UAAU,OAAO9T,CAAI,EAC1C,OAAI8T,EAAU,OAAS,IACrB/M,EAAO,OAAS+M,EAAU,MAAM,CAAC,GAE/B,KAAK,SACP/M,EAAO,SAAS,EAAI,IAEfA,CACT,EACAtB,EAAM,qBACJ4N,EACA,CAAC,OAAQ,YAAa,cAAe,cAAc,CACrD,EACAA,EAAQ,UAAU,SAAWvU,EAAK,UAChC,UAAW,CACT,OAAO,KAAK,MACd,EACA,iDACF,EACA,SAASiV,EAAQvS,EAAMwS,EAAUC,EAAQC,EAAMC,EAAQ,CACrD,GAAI,OAAO3S,GAAQ,SACjB,OAAOuS,EAAQ,YAAYvS,EAAMwS,CAAQ,EAE3C,KAAK,KAAOxS,EACZ,KAAK,gBAAkBwS,GAAY,CAAC,EACpC,KAAK,SAAW,OAAO,OAAOvO,EAAM,aAAa,KAAK,eAAe,CAAC,EACtE,KAAK,aAAewO,GAAU,CAAC,EAC/B,KAAK,MAAQ,OAAO,OAAOxO,EAAM,aAAa,KAAK,YAAY,CAAC,EAChE,KAAK,SAAWyO,EAChB,KAAK,SAAWzO,EAAM,QAAQ,KAAK,UAAUyO,CAAI,CAAC,EAAE,SAAS,QAAQ,EACrE,KAAK,IAAMA,EAAK,IAAM,GAAKA,EAAK,IAAM,OACtC,KAAK,QAAUC,GAAU,KAAK,aAAa,CAAE,OAAQ,EAAK,CAAC,EAC3D,OAAO,OAAO,IAAI,CACpB,CACAJ,EAAQ,OAASK,EACjBL,EAAQ,OAASM,GACjBN,EAAQ,WAAa,SAASO,EAAWC,EAAW,CAClD,GAAI,CACFC,GAAcF,EAAWC,CAAS,CACpC,MAAc,CACZ,MAAO,EACT,CACA,MAAO,EACT,EACAR,EAAQ,YAAc,SAASG,EAAMlU,EAAM,CACzCA,EAAOA,GAAQ,CAAC,EAChB,IAAIwB,EAAO0S,EAAK,SAChB,GAAI,CAAC1S,EACH,MAAM,IAAI,MAAM,uBAAuB,EAEzC,GAAI0S,EAAK,YAAc,OACrBlU,EAAK,UAAYkU,EAAK,cACjB,CACL,IAAIjS,EAAQ,gBAAgB,KAAKT,CAAI,EACjCS,IACFjC,EAAK,UAAYiC,EAAM,CAAC,EAE5B,CACAT,EAAOiE,EAAM,QAAQjE,EAAMxB,EAAK,SAAS,EACrCkU,EAAK,OACPA,EAAK,MAAM,QAAQ,SAASnT,EAAK,CAC/B+F,EAAK,UAAU/F,EAAKf,CAAI,CAC1B,CAAC,EAEH,IAAIyU,EACJ,OAAIP,EAAK,WACPO,EAAO,CAAC,EACR,OAAO,KAAKP,EAAK,QAAQ,EAAE,QAAQ,SAASpW,EAAK,CAC/C2W,EAAK3W,CAAG,EAAIuV,EAAQ,UAAUvV,EAAKoW,EAAK,SAASpW,CAAG,EAAGkC,CAAI,CAC7D,CAAC,GAEI,IAAI+T,EAAQvS,EAAMiT,EAAMzU,EAAK,SAAUkU,CAAI,CACpD,EACAH,EAAQ,UAAY,SAAS5K,EAAK,CAChC,MAAO,CAAC,CAACA,GAAOA,EAAI,eAAe,UAAU,CAC/C,EACA4K,EAAQ,UAAU,aAAe,SAAS/T,EAAM,CAC9C,IAAI0U,EAAS,IAAIN,EAAO,KAAMpU,CAAI,EAClC,eAAQ,SAAS,UAAW,CAC1B,GAAIA,GAAQA,EAAK,OAAQ,CACvB,IAAIe,EAAM,CAAE,WAAY,EAAK,EACzB4T,EAAM,CAAC,IAAIpE,EAAO,YAAYxP,CAAG,EAAG,IAAIwP,EAAO,YAAYxP,CAAG,CAAC,EACnEf,EAAK,OAAO,cAAc,CAAE,SAAU2U,EAAI,CAAC,EAAG,SAAUA,EAAI,CAAC,CAAE,EAAG5T,CAAG,EACrE2T,EAAO,cAAc,CAAE,SAAUC,EAAI,CAAC,EAAG,SAAUA,EAAI,CAAC,CAAE,EAAG5T,CAAG,CAClE,MAAWf,GAAQA,EAAK,WACtB0U,EAAO,cAAc1U,EAAK,SAAS,CAEvC,CAAC,EACM0U,CACT,EACAX,EAAQ,UAAU,aAAe,SAAS/T,EAAM,CAC9C,OAAO,IAAIqU,GAAO,KAAMrU,CAAI,CAC9B,EACA,OAAO,eAAe+T,EAAQ,UAAW,OAAQ,CAC/C,WAAY,GACZ,IAAK,UAAW,CACd,OAAOtO,EAAM,WAAW,KAAK,SAAU,QAAQ,CACjD,CACF,CAAC,EACDsO,EAAQ,UAAU,QAAU,SAASvS,EAAM,CACzC,OAAO,KAAK,gBAAgBA,CAAI,CAClC,EACAuS,EAAQ,UAAU,KAAO,SAASvS,EAAM,CACtC,OAAO,KAAK,aAAaA,CAAI,CAC/B,EACAuS,EAAQ,UAAU,QAAU,UAAW,CACrC,OAAO3U,EAAG,eAAgB,KAAK,IAAI,CACrC,EACAqG,EAAM,qBACJsO,EACA,CAAC,UAAW,WAAY,OAAQ,OAAQ,OAAO,CACjD,EACAA,EAAQ,UAAU,cAAgBjV,EAAK,UACrC,SAAS8V,EAAW5U,EAAM,CACxBA,EAAOA,GAAQ,CAAC,EAChB,IAAI0U,EAAS,KAAK,aAAa,CAC7B,MAAO1U,EAAK,MACZ,UAAW,GACX,YAAaA,EAAK,aAClB,QAASA,EAAK,OAChB,CAAC,EACG6U,EAAUH,EAAO,cAAcE,EAAW5U,CAAI,EAClD,OAAA8U,GAAcJ,EAAQG,CAAO,EACtBA,CACT,EACA,qDACF,EACAd,EAAQ,UAAU,eAAiBjV,EAAK,UACtC,SAAS8V,EAAW5U,EAAM,CACxB,GAAIA,GAAQA,EAAK,aACf,MAAM,IAAI,MAAM,gDAAgD,EAElE,OAAO,KAAK,QAAQ,cAAc4U,EAAW5U,CAAI,CACnD,EACA,sEACF,EACA+T,EAAQ,UAAU,KAAOjV,EAAK,UAC5B,SAAS0C,EAAMuT,EAAKF,EAASvX,EAAI,CAC/B,GAAI,CAACuX,GAAW,CAAC,KAAK,OAAOA,EAAQ,OAAO,KAAK,EAC/C,MAAM,IAAI,MAAM,iBAAiB,EAEnC,IAAIH,EAASG,EAAQ,OACrB,OAAAT,EAAO,UAAU,YAAY,KAAKM,EAAQlT,EAAMuT,EAAKzX,GAAMA,EAAG,KAAK,IAAI,CAAC,EACjEuX,EAAQ,WAAW,CAC5B,EACA,6EACF,EACAd,EAAQ,UAAU,OAASjV,EAAK,UAC9B,SAASqK,EAAK,CACZ,OAAO4K,EAAQ,UAAU5K,CAAG,GAAK,KAAK,eAAe,EAAE,OAAOA,EAAI,eAAe,CAAC,CACpF,EACA,kEACF,EACA4K,EAAQ,UAAU,eAAiBjV,EAAK,UACtC,SAASuB,EAAW,CAClB,OAAOoF,EAAM,QAAQ,KAAK,UAAU,KAAK,QAAQ,EAAGpF,CAAS,CAC/D,EACA,4CACF,EACA0T,EAAQ,UAAU,UAAYjV,EAAK,UACjCgI,EAAK,UAAU,UACf,2CACF,EACAiN,EAAQ,UAAU,GAAKjV,EAAK,UAC1B,SAAS0C,EAAMwT,EAAS,CACtB,IAAIxH,EAAO,KACX,YAAK,QAAQ,UAAUhM,EAAM,SAASuT,EAAKzX,EAAI,CAC7C,OAAO0X,EAAQ,KAAKxH,EAAMuH,EAAK,KAAK,QAASzX,CAAE,CACjD,CAAC,EACM,IACT,EACA,sDACF,EACAyW,EAAQ,UAAU,YAAcjV,EAAK,UACnC,UAAW,CACT,IAAImW,EAAS,KAAK,QACdjV,EAAO,CAAE,YAAaiV,EAAO,QAAS,MAAOA,EAAO,MAAO,EAC3Dd,EAAS,IAAIE,GAAOY,EAAO,QAASjV,CAAI,EAC5C,OAAAmU,EAAO,UAAY,OAAO,OAAOc,EAAO,SAAS,EAC1C,IAAIlB,EACT,KAAK,KACL,KAAK,gBACL,KAAK,aACL,KAAK,SACLI,CACF,CACF,EACA,yCACF,EACAJ,EAAQ,UAAU,OAAS,SAAS/T,EAAM,CACxC,IAAIkU,EAAO,CAAE,SAAU,KAAK,IAAK,EAC7BD,EAAS,CAAC,EACd,KAAK,MAAM,QAAQ,SAAShL,EAAG,CAC7B,GAAIA,EAAE,QAAQ,IAAM,OAGpB,KAAIiM,EAAajM,EAAE,OAAOjJ,CAAI,EAC1B,OAAOkV,GAAc,UACvBjB,EAAO,KAAKiB,CAAU,EAE1B,CAAC,EACGjB,EAAO,SACTC,EAAK,MAAQD,GAEf,IAAIkB,EAAW,OAAO,KAAK,KAAK,eAAe,EAC/C,OAAIA,EAAS,SACXjB,EAAK,SAAW,CAAC,EACjBiB,EAAS,QAAQ,SAAS3T,EAAM,CAC9B0S,EAAK,SAAS1S,CAAI,EAAI,KAAK,gBAAgBA,CAAI,EAAE,OAAOxB,CAAI,CAC9D,EAAG,IAAI,GAELA,GAAQA,EAAK,aAAe,KAAK,MAAQ,SAC3CkU,EAAK,IAAM,KAAK,KAEXA,CACT,EACA,SAASkB,EAAiBR,EAAW5U,EAAM1C,EAAI,CACzCA,IAAO,QAAU,OAAO0C,GAAQ,aAClC1C,EAAK0C,EACLA,EAAO,QAET,IAAIqV,EAAM,IAAItB,EAAQ,CAAE,SAAU,OAAQ,EAAGpD,EAAI,EAC7C2E,EACJD,EAAI,aAAa,CAAE,QAASrV,GAAQA,EAAK,OAAQ,CAAC,EAAE,cAAc4U,EAAW,CAC3E,MAAO5U,GAAQA,EAAK,MACpB,YAAa,OAAO4U,GAAa,UAEnC,CAAC,EAAE,KAAK,YAAa,SAASW,EAAMC,EAAM,CACxCF,EAAUE,EAAK,eACf,KAAK,QAAQ,EAAI,CACnB,CAAC,EAAE,KAAK,MAAO,SAASC,EAAS/N,EAAK,CAChCA,GAAO,CAAC,cAAc,KAAKA,CAAG,EAChCpK,EAAGoK,CAAG,EAENpK,EAAG,KAAM,KAAK,MAAMgY,CAAO,CAAC,CAEhC,CAAC,CACH,CACA,SAASlB,EAAOiB,EAAKrV,EAAM,CACzBA,EAAOA,GAAQ,CAAC,EAChB6S,EAAO,aAAa,KAAK,IAAI,EAC7B,KAAK,MAAQwC,EACb,KAAK,WAAa,CAAC,EACnB,KAAK,MAAQ,CAAC,EACd,KAAK,YAAc,CAAC,CAACrV,EAAK,UAC1B,KAAK,QAAUA,EAAK,OAAS,CAAC,EAC9B,KAAK,SAAWA,EAAK,cACrB,KAAK,SAAW,CAAC,CAACA,EAAK,YACvB,KAAK,UAAYyF,EAAM,UAAUzF,EAAM,UAAW,GAAG,EACjDA,EAAK,iBACP0V,GAAsB,KAAK,QAAS1V,EAAK,gBAAiBqV,EAAK,EAAI,EAErE,KAAK,MAAM,SAAS,QAAQ,SAASrG,EAAK,CACxC,KAAKA,EAAI,IAAI,EAAI,KAAK,uBAAuBA,CAAG,CAClD,EAAG,IAAI,CACT,CACAlQ,EAAK,SAASsV,EAAQvB,EAAO,YAAY,EACzCuB,EAAO,UAAU,eAAiB,UAAW,CAC3C,OAAO,KAAK,WAAW,MAAM,CAC/B,EACAA,EAAO,UAAU,cAAgB,SAASQ,EAAW5U,EAAM,CACzD,IAAI2V,EAAa3V,GAAQA,EAAK,WAC1B6U,EACJ,GAAI,OAAOD,GAAa,WAAY,CAClC,IAAIgB,EACAD,EACFC,EAAkBhB,EAElBgB,EAAkB,SAAStY,EAAI,CAC7B,IAAIuY,EAAW,IAAIC,EACfC,EAAYnB,EAAU,SAASlN,EAAKsO,EAAW,CACjD,GAAItO,EAAK,CACPpK,EAAGoK,CAAG,EACN,MACF,CACA,IAAIuO,GAAW,IAAIC,GAAa,EAAE,KAAK,QAAS,SAASC,GAAM,CAC7DtB,EAAQ,QAAQsB,EAAI,CACtB,CAAC,EACD7Y,EAAG,KAAM0Y,EAAU,KAAKC,EAAQ,CAAC,CACnC,CAAC,EACD,GAAIF,EACF,OAAAF,EAAS,KAAKE,CAAS,EAChBF,CAEX,EAEFhB,EAAU,IAAIuB,EAAuB,KAAMR,EAAiB5V,CAAI,CAClE,KAAO,CACL,IAAIqW,EAAUC,EAOd,GANIC,GAAS3B,CAAS,EACpByB,EAAWC,EAAW1B,GAEtByB,EAAWzB,EAAU,SACrB0B,EAAW1B,EAAU,UAEnB,CAACe,EAAY,CACf,IAAIa,EAAU,IAAIC,GAClBJ,EAAWA,EAAS,KAAKG,CAAO,EAChC,IAAIE,EAAU,IAAIC,GAClBD,EAAQ,KAAKJ,CAAQ,EACrBA,EAAWI,CACb,CACA7B,EAAU,IAAI+B,EAAsB,KAAMP,EAAUC,EAAUtW,CAAI,EAC7D2V,IACHd,EAAQ,KAAK,MAAO,UAAW,CAC7BwB,EAAS,OAAOG,CAAO,EACvBE,EAAQ,OAAOJ,CAAQ,CACzB,CAAC,EACDE,EAAQ,KAAK,QAAS,SAAS9O,EAAK,CAClCmN,EAAQ,QAAQnN,CAAG,CACrB,CAAC,EAEL,CACA,IAAImP,EAAW,KAAK,WACpB,OAAAA,EAAS,KAAKhC,CAAO,EACrBA,EAAQ,KAAK,SAAU,UAAW,CAChCgC,EAAS,OAAOA,EAAS,QAAQ,IAAI,EAAG,CAAC,CAC3C,CAAC,EACD,KAAK,YAAc,GACnB,KAAK,KAAK,UAAWhC,CAAO,EACrBA,CACT,EACAT,EAAO,UAAU,gBAAkB,SAASpU,EAAM,CAChD,KAAK,WAAW,QAAQ,SAAS6U,EAAS,CACxCA,EAAQ,QAAQ7U,GAAQA,EAAK,MAAM,CACrC,CAAC,CACH,EACAoU,EAAO,UAAU,YAAc,SAAS5S,EAAMuT,EAAK/U,EAAM1C,EAAI,CAC3D,IAAI0R,EAAM8H,EAAmB,KAAK,MAAOtV,CAAI,EACzCuV,EAAO,IAAIC,EAAehI,EAAK,CAAC,EAAG+F,CAAG,EAC1C,KAAK,cAAcgC,EAAM/W,EAAM1C,CAAE,CACnC,EACA8W,EAAO,UAAU,gBAAkB,UAAW,CAC5C,OAAO6C,GAAmB,KAAK,QAAS,EAAI,CAC9C,EACA,OAAO,eAAe7C,EAAO,UAAW,UAAW,CACjD,WAAY,GACZ,IAAK,UAAW,CACd,OAAO,KAAK,KACd,CACF,CAAC,EACDA,EAAO,UAAU,IAAM,UAAW,CAChC,IAAIzT,EAAGC,EAAGE,EACV,IAAKH,EAAI,EAAGC,EAAI,UAAU,OAAQD,EAAIC,EAAGD,IACvCG,EAAK,UAAUH,CAAC,EAChB,KAAK,MAAM,KAAKG,EAAG,OAAS,EAAIA,EAAG,IAAI,EAAIA,CAAE,EAE/C,OAAO,IACT,EACAsT,EAAO,UAAU,cAAgB,SAAS2C,EAAM/W,EAAM1C,EAAI,CACpD,CAACA,GAAM,OAAO0C,GAAS,aACzB1C,EAAK0C,EACLA,EAAO,QAET,IAAIwN,EAAO,KACPqJ,EAAW,KAAK,WAChBK,EAAcL,EAAS,OAC3B,GAAI,CAACK,EAAa,CAChB,GAAI,KAAK,YACPvR,EAAM,2CAA2C,EACjD,KAAK,KAAK,UAAW,UAAW,CAC9B,KAAK,cAAcoR,EAAM/W,EAAM1C,CAAE,CACnC,CAAC,MACI,CACL,IAAIoK,EAAM,IAAI,MAAM,oBAAoB,EACxC,QAAQ,SAAS,UAAW,CACtBpK,EACFA,EAAG,KAAK,IAAI6Z,EAAYJ,EAAK,IAAI,EAAGrP,CAAG,EAEvC8F,EAAK,KAAK,QAAS9F,CAAG,CAE1B,CAAC,CACH,CACA,MACF,CACA1H,EAAOA,GAAQ,CAAC,EACZA,EAAK,UAAY,SACnBA,EAAK,QAAU,KAAK,WAEtB,IAAI6U,EACJ,GAAIqC,IAAgB,EAClBrC,EAAUgC,EAAS,CAAC,UACX,KAAK,UAEd,GADAhC,EAAU,KAAK,SAAS,KAAK,WAAW,MAAM,CAAC,EAC3C,CAACA,EAAS,CACZlP,EAAM,2CAA2C,EACjD,MACF,OAEAkP,EAAUgC,EAAS,KAAK,MAAM,KAAK,OAAO,EAAIK,CAAW,CAAC,EAE5DrC,EAAQ,MAAMkC,EAAM/W,EAAM,SAASmW,EAAMiB,EAAM,CAC7C,IAAIC,EAAM,KACN9D,EAAU8D,EAAI,QAAQ,UAC1B,GAAIlB,EAAM,CACJ3I,EAAK,WACP2I,EAAO5C,EAAQ,MAAM4C,EAAK,QAAS,CAAE,WAAY,EAAK,CAAC,GAEzDmB,EAAKnB,CAAI,EACT,MACF,CACA,GAAI,CAACiB,EAAM,CACTE,EAAK,EACL,MACF,CACAnB,EAAOiB,EAAK,MACP5J,EAAK,WACJ2I,IAAS,OACXA,EAAO,KAEHrP,EAAK,OAAOyM,EAAS,iBAAiB,EACpC,OAAO4C,GAAQ,WACjBA,EAAO,IAAI,MAAMA,CAAI,GAEdA,GAAQA,EAAK,QAAU,OAAOA,EAAK,QAAU,WACtDA,EAAO,IAAI,MAAMA,EAAK,MAAM,IAIlCmB,EAAKnB,EAAMiB,EAAK,QAAQ,EACxB,SAASE,EAAKC,EAAMlS,EAAK,CACnB/H,EACFA,EAAG,KAAK+Z,EAAKE,EAAMlS,CAAG,EACbkS,GACT/J,EAAK,KAAK,QAAS+J,CAAI,CAE3B,CACF,CAAC,CACH,EACAnD,EAAO,UAAU,uBAAyB,SAASpF,EAAK,CACtD,IAAIZ,EAASY,EAAI,YAAY,UAAU,EACnCzN,EAAQ6M,EAAO,IAAI,SAASzJ,EAAI,CAClC,OAAOA,EAAG,QAAQ,CACpB,CAAC,EACG4F,EAAO,mBAAqByE,EAAI,KAAO,IAC3C,OAAIzN,EAAM,SACRgJ,GAAQhJ,EAAM,KAAK,IAAI,EAAI,MAE7BgJ,GAAQ;AAAA,EACRA,GAAQ,gBACRA,GAAQhJ,EAAM,IAAI,SAASiD,EAAG,CAC5B,OAAOA,EAAI,KAAOA,CACpB,CAAC,EAAE,KAAK,IAAI,EACZ+F,GAAQ;AAAA,EACRA,GAAQ,8BAAgCyE,EAAI,KAAO;AAAA,EACnDzE,GAAQ,KACD,IAAI,SAASA,CAAI,EAAE,CAC5B,EACA,SAAS8J,GAAOgB,EAAKrV,EAAM,CACzBA,EAAOA,GAAQ,CAAC,EAChB6S,EAAO,aAAa,KAAK,IAAI,EAC7B,KAAK,QAAUwC,EACf,KAAK,UAAY,CAAC,EAClB,KAAK,KAAO,CAAC,EACb,KAAK,UAAY,CAAC,EAClB,KAAK,eAAiB,EACtB,KAAK,OAASrV,EAAK,OAAS,CAAC,EAC7B,KAAK,gBAAkBA,EAAK,eAC5B,KAAK,iBAAmBA,EAAK,qBAC7B,KAAK,QAAU,CAAC,CAACA,EAAK,OACtB,KAAK,QAAU,CAAC,CAACA,EAAK,YAClBA,EAAK,iBACP0V,GAAsB,KAAK,OAAQ1V,EAAK,gBAAiBqV,EAAK,EAAK,EAErEA,EAAI,SAAS,QAAQ,SAASrG,EAAK,CACjC,IAAIxN,EAAOwN,EAAI,KACVhP,EAAK,eACRwB,EAAOiE,EAAM,WAAWjE,CAAI,GAE9B,KAAK,KAAOA,CAAI,EAAI,KAAK,sBAAsBwN,CAAG,CACpD,EAAG,IAAI,CACT,CACAlQ,EAAK,SAASuV,GAAQxB,EAAO,YAAY,EACzCwB,GAAO,UAAU,eAAiB,UAAW,CAC3C,OAAO5O,EAAM,aAAa,KAAK,SAAS,CAC1C,EACA4O,GAAO,UAAU,cAAgB,SAASO,EAAW5U,EAAM,CACzD,IAAI2V,EAAa3V,GAAQA,EAAK,WAC1B6U,EACJ,GAAI,OAAOD,GAAa,WAAY,CAClC,IAAI4C,EACA7B,EACF6B,EAAkB5C,EAElB4C,EAAkB,SAASla,EAAI,CAC7B,IAAI2Y,EAAW,IAAIC,GAAa,EAAE,KAAK,QAAS,SAASxO,EAAK,CAC5DmN,EAAQ,QAAQnN,CAAG,CACrB,CAAC,EACD,OAAOkN,EAAU,SAASlN,EAAKqO,EAAW,CACxC,GAAIrO,EAAK,CACPpK,EAAGoK,CAAG,EACN,MACF,CACA,IAAImO,GAAW,IAAIC,EACnBD,GAAS,KAAKE,CAAS,EACvBzY,EAAG,KAAMuY,EAAQ,CACnB,CAAC,EAAE,KAAKI,CAAQ,CAClB,EAEFpB,EAAU,IAAI4C,EAAuB,KAAMD,EAAiBxX,CAAI,CAClE,KAAO,CACL,IAAIqW,EAAUC,EAOd,GANIC,GAAS3B,CAAS,EACpByB,EAAWC,EAAW1B,GAEtByB,EAAWzB,EAAU,SACrB0B,EAAW1B,EAAU,UAEnB,CAACe,EAAY,CACf,IAAIa,EAAU,IAAIC,GAClBJ,EAAWA,EAAS,KAAKG,CAAO,EAChC,IAAIE,EAAU,IAAIC,GAClBD,EAAQ,KAAKJ,CAAQ,EACrBA,EAAWI,CACb,CACA7B,EAAU,IAAI6C,EAAsB,KAAMrB,EAAUC,EAAUtW,CAAI,EAC7D2V,IACHd,EAAQ,KAAK,MAAO,UAAW,CAC7BwB,EAAS,OAAOG,CAAO,EACvBE,EAAQ,OAAOJ,CAAQ,CACzB,CAAC,EACDE,EAAQ,KAAK,QAAS,SAAS9O,EAAK,CAClCmN,EAAQ,QAAQnN,CAAG,CACrB,CAAC,EAEL,CACK,KAAK,UAAU,OAAO,EAAE,QAC3B,KAAK,GAAG,QAAS,KAAK,QAAQ,EAEhC,IAAIiQ,EAAY,KAAK,iBACjBd,EAAW,KAAK,UACpB,OAAAA,EAASc,CAAS,EAAI9C,EAAQ,KAAK,MAAO,UAAW,CACnD,OAAOgC,EAASc,CAAS,CAC3B,CAAC,EACD,KAAK,KAAK,UAAW9C,CAAO,EACrBA,CACT,EACAR,GAAO,UAAU,UAAY,SAAS7S,EAAMwT,EAAS,CACnD,OAAA8B,EAAmB,KAAK,QAAStV,CAAI,EACrC,KAAK,UAAUA,CAAI,EAAIwT,EAChB,IACT,EACAX,GAAO,UAAU,gBAAkB,UAAW,CAC5C,OAAO4C,GAAmB,KAAK,OAAQ,EAAK,CAC9C,EACA5C,GAAO,UAAU,IAAM,UAAW,CAChC,IAAI1T,EAAGC,EAAGE,EACV,IAAKH,EAAI,EAAGC,EAAI,UAAU,OAAQD,EAAIC,EAAGD,IACvCG,EAAK,UAAUH,CAAC,EAChB,KAAK,KAAK,KAAKG,EAAG,OAAS,EAAIA,EAAG,IAAI,EAAIA,CAAE,EAE9C,OAAO,IACT,EACAuT,GAAO,UAAU,sBAAwB,SAASrF,EAAK,CACrD,IAAIxN,EAAOwN,EAAI,KACXZ,EAASY,EAAI,YAAY,OACzB4I,EAAUxJ,EAAO,OACjBT,EAAOS,EAAO,OAAS,KAAOA,EAAO,IAAI,SAASzJ,EAAI,CACxD,MAAO,OAASA,EAAG,IACrB,CAAC,EAAE,KAAK,IAAI,EAAI,GACZ4F,EAAO;AAAA,EACX,OAAAA,GAAQ,0BAA4BqN,EAAU;AAAA,EAC9CrN,GAAQ,8BAAgC/I,EAAO;AAAA,EAC/C+I,GAAQ,iCAAmCoD,EAAO;AAAA,EAClDpD,GAAQ;AAAA,EACRA,GAAQ;AAAA,EACRA,GAAQ,8BAAgC/I,EAAO;AAAA,EAC/C+I,GAAQ,iCAAmCoD,EAAO;AAAA,EAClDpD,GAAQ;AAAA,EACRA,GAAQ;AAAA,EACRA,GAAQ;AAAA,EACD,IAAI,SAASA,CAAI,EAAE,CAC5B,EACA8J,GAAO,UAAU,SAAW,SAAS3M,EAAK,CACpC,CAAC,KAAK,SAAWA,EAAI,UAAY,qBACnC,QAAQ,MAAM,EACVA,EAAI,SACN,QAAQ,MAAMA,EAAI,OAAO,EACzB,QAAQ,MAAMA,EAAI,KAAK,IAEvB,QAAQ,MAAM,uBAAuB,EACrC,QAAQ,MAAMA,CAAG,GAGvB,EACA,SAASmQ,EAAcnD,EAAQ1U,EAAM,CACnCA,EAAOA,GAAQ,CAAC,EAChB6S,EAAO,aAAa,KAAK,IAAI,EAC7B,KAAK,OAAS6B,EACd,KAAK,QAAUjP,EAAM,UAAUzF,EAAM,UAAW0U,EAAO,SAAS,EAChE,KAAK,aAAe,CAAC,CAACjP,EAAM,UAAUzF,EAAM,cAAe,EAAI,EAC/D,KAAK,QAAU8X,GAAiB9X,EAAK,KAAK,EAC1C,IAAI+X,EAAQrD,EAAO,QACfJ,EAAYI,EAAO,MACnBpU,EAAON,EAAK,WACXM,IACHA,EAAOgU,EAAU,MAEnB,IAAI0D,EAAUD,EAAMzX,CAAI,EACnB0X,IACH1X,EAAOgU,EAAU,KACjB0D,EAAUD,EAAMzX,CAAI,EAAI,IAAI2X,EAAQ3D,EAAWA,EAAWhU,CAAI,GAEhE,KAAK,SAAW0X,EAChB,KAAK,UAAY,IAAIE,EAAS,KAAM/E,EAAa,EACjD,KAAK,QAAU,EACf,KAAK,UAAY,GACjB,KAAK,SAAW,GAChB,KAAK,KAAK,OAAQ,SAASsC,EAAS/N,EAAK,CACvC/B,EAAM,oBAAoB,EAC1B,KAAK,UAAY,GACjB,KAAK,KAAK,MAAO8P,EAAS/N,CAAG,CAC/B,CAAC,CACH,CACA5I,EAAK,SAAS+Y,EAAehF,EAAO,YAAY,EAChDgF,EAAc,UAAU,QAAU,SAASM,EAAQ,CACjDxS,EAAM,2BAA2B,EAC5B,KAAK,WACR,KAAK,SAAW,GAChB,KAAK,KAAK,QAAQ,GAEpB,IAAIyB,EAAW,KAAK,UAChBqO,EAAU,KAAK,QACf0C,GACF/Q,EAAS,MAAM,EAEb+Q,GAAU,CAAC1C,EACT2C,GAAQD,CAAM,GAChBxS,EAAM,iCAAkCwS,CAAM,EAC9C,KAAK,KAAK,OAAQ1C,EAAS0C,CAAM,GAEjC,KAAK,KAAK,OAAQ1C,CAAO,EAG3B9P,EAAM,kDAAmD8P,CAAO,CAEpE,EACAoC,EAAc,UAAU,KAAO,SAASQ,EAAS/a,EAAI,CAC/C,CAACA,GAAM,OAAO+a,GAAW,aAC3B/a,EAAK+a,EACLA,EAAU,QAEZ,IAAI7K,EAAO,KACPuJ,EAAO,IAAIC,EAAe5D,CAAY,EAC1C,KAAK,MAAM2D,EAAM,CAAE,QAAAsB,CAAQ,EAAG,SAAS3Q,EAAK,CACtCpK,EACFA,EAAG,KAAKkQ,EAAM9F,CAAG,EACRA,GACT8F,EAAK,QAAQ9F,CAAG,CAEpB,CAAC,CACH,EACAmQ,EAAc,UAAU,wBAA0B,SAASG,EAASM,EAAO,CACzE,IAAIjD,EAAM,KAAK,OAAO,MACtB,MAAO,CACL,WAAYA,EAAI,KAChB,eAAgBiD,EAAQ,KAAO,KAAK,UAAUjD,EAAI,QAAQ,EAC1D,WAAY2C,EAAQ,KACtB,CACF,EACAH,EAAc,UAAU,MAAQ,SAASd,EAAM/W,EAAM1C,EAAI,CACvD,IAAI0R,EAAM+H,EAAK,KACXK,EAAOpI,EAAI,OAAS,OAAS,IAAIuJ,EAAgBvJ,EAAK,CAAC,CAAC,EACxDqI,EAAM,IAAIF,EAAYnI,EAAK,IAAI,EAC/BxB,EAAO,KACX,KAAK,UACL,QAAQ,SAAS,UAAW,CAC1B,GAAI,CAACwB,EAAI,KACPwJ,EAAazB,EAAMK,EAAMqB,CAAY,MAChC,CACLjL,EAAK,KAAK,eAAgB6J,EAAKrX,CAAI,EACnC,IAAI0Y,EAAMlL,EAAK,OAAO,MACtB7H,EAAM,mDAAoD+S,EAAI,MAAM,EACpEC,EAAgB,CACd,IAAAD,EACA,IAAArB,EACA,KAAAN,EACA,KAAAK,EACA,aAAAoB,EACA,aAAAC,EACA,QAAAG,CACF,CAAC,CACH,CACF,CAAC,EACD,SAASJ,EAAaK,EAAOC,EAAOC,EAAM,CACxC,IAAIrR,EAAKsR,EACT,GAAIxL,EAAK,UACP9F,EAAM,IAAI,MAAM,mBAAmB,MAEnC,IAAI,CACFsR,EAASH,EAAM,SAAS,CAC1B,MAAgB,CACdnR,EAAMuR,GACJ7Z,EAAG,qBAAsB4P,EAAI,IAAI,EACjC6J,EACA,CACE,CAAE,KAAM,UAAW,KAAMhI,CAAe,EACxC,CAAE,KAAM,UAAW,KAAM7B,EAAI,WAAY,CAC3C,CACF,CACF,CAEF,GAAItH,EAAK,CACPqR,EAAKrR,CAAG,EACR,MACF,CACA,IAAI2Q,GAAUrY,GAAQA,EAAK,UAAY,OAASA,EAAK,QAAUwN,EAAK,QAChE0L,GAAK1L,EAAK,UAAU,IAAI6K,GAAS,SAASlC,GAAMgD,GAAQnB,GAAS,CACnE,GAAI,CAAC7B,IAAQ,CAACnH,EAAI,OAChB,GAAI,CACFgJ,GAAQ,gBAAgBmB,GAAQL,EAAO9J,CAAG,CAC5C,OAAS8C,GAAO,CACdqE,GAAOrE,EACT,CAEFiH,EAAK5C,EAAI,CACX,CAAC,EACD+C,IAAM1L,EAAK,QACX7H,EAAM,qBAAsBuT,EAAE,EAC9B1L,EAAK,MAAM0L,GAAIF,EAAQ,CAAC,CAAChK,GAAOA,EAAI,MAAM,CAC5C,CACA,SAASyJ,EAAa/Q,EAAK,CACzB8F,EAAK,UACLlQ,EAAG,KAAK+Z,EAAK3P,EAAK0P,CAAI,EAClB5J,EAAK,UAAY,CAACA,EAAK,WAAa,CAACA,EAAK,SAC5CA,EAAK,QAAQ,CAEjB,CACA,SAASoL,EAAQlR,EAAK,CACpB8F,EAAK,OAAO,KAAK,QAAS9F,EAAK8F,CAAI,CACrC,CACF,EACAqK,EAAc,UAAU,YAAc,SAASrC,EAAM,CACnD,IAAIlV,EAAOkV,EAAK,WACZuC,EAAQ,KAAK,OAAO,QACpBC,EAAUD,EAAMzX,CAAI,EACxB,GAAI0X,EACF,OAAOA,EAET,IAAI9D,EAAO,KAAK,MAAMsB,EAAK,cAAc,EACrCjB,EAAYR,EAAQ,YAAYG,CAAI,EACxC,OAAA8D,EAAU,IAAIC,EAAQ,KAAK,OAAO,MAAO1D,EAAWjU,EAAM,EAAI,EACvDyX,EAAMzX,CAAI,EAAI0X,CACvB,EACAH,EAAc,UAAU,eAAiB,SAASqB,EAAI,CACpD,OAAOE,GAAcF,EAAI,KAAK,OAAO,CACvC,EACArB,EAAc,UAAU,MAAQpS,EAAM,iBACtCA,EAAM,qBAAqBoS,EAAe,CAAC,UAAW,SAAS,CAAC,EAChEA,EAAc,UAAU,SAAW/Y,EAAK,UACtC,UAAW,CACT,OAAO,KAAK,OAAO,OACrB,EACA,mDACF,EACA+Y,EAAc,UAAU,YAAc/Y,EAAK,UACzC,UAAW,CACT,OAAO,KAAK,OAAO,KACrB,EACA,4CACF,EACA+Y,EAAc,UAAU,YAAc/Y,EAAK,UACzC,UAAW,CACT,OAAO,KAAK,SACd,EACA,4CACF,EACA,SAASsX,EAAuB1B,EAAQkB,EAAiB5V,EAAM,CAC7D6X,EAAc,KAAK,KAAMnD,EAAQ1U,CAAI,EACrC,KAAK,iBAAmB4V,GACpB,CAAC5V,GAAQ,CAACA,EAAK,UACjB2F,EAAM,uBAAuB,EAC7B,KAAK,KAAK,EAEd,CACA7G,EAAK,SAASsX,EAAwByB,CAAa,EACnDzB,EAAuB,UAAU,MAAQ,SAAS8C,EAAIF,EAAQ,CAC5D,IAAI1b,EAAK,KAAK,UAAU,IAAI4b,CAAE,EAC1BlB,EAAU,KAAK,SACfxK,EAAO,KACX,eAAQ,SAAS6L,CAAI,EACd,GACP,SAASA,EAAKC,EAAO,CACnB,GAAI,CAAA9L,EAAK,UAGT,KAAI+H,EAAO/H,EAAK,wBAAwBwK,EAAS,CAACsB,CAAK,EACnDhD,EAAW9I,EAAK,iBAAiB,KAAKA,EAAM,SAAS9F,EAAK2O,EAAU,CACtE,GAAI3O,EAAK,CACPpK,EAAGoK,CAAG,EACN,MACF,CACA2O,EAAS,GAAG,OAAQ,SAAStV,EAAK,CAChC4E,EAAM,uBAAwB5E,EAAI,EAAE,EACpC,IAAIuD,EAAMtF,EAAQ,OAAO+B,EAAI,OAAO,EACpC,GAAI,CACF,IAAIgB,EAAQwX,GAASrG,EAAyB5O,CAAG,EAC7CkR,EAAOzT,EAAM,KACbyT,EAAK,aACPwC,EAAUxK,EAAK,YAAYgI,CAAI,EAEnC,OAAS1D,GAAO,CACdxU,EAAGwU,EAAK,EACR,MACF,CACA,IAAI7P,GAAQuT,EAAK,MACjB7P,EAAM,sBAAuB1D,EAAK,EAClCuL,EAAK,KAAK,YAAa+H,EAAMC,CAAI,EAC7BvT,KAAU,OACZ,QAAQ,SAAS,UAAW,CAC1BoX,EAAK,EAAI,CACX,CAAC,GAED7L,EAAK,SAAWwK,EAChB1a,EAAG,KAAMyE,EAAM,KAAMiW,CAAO,EAEhC,CAAC,CACH,CAAC,EACD,GAAI,CAAC1B,EAAU,CACbhZ,EAAG,IAAI,MAAM,yBAAyB,CAAC,EACvC,MACF,CACAgZ,EAAS,MAAM,CACb,GAAA4C,EACA,QAAS,CAACjG,EAAuB,SAASsC,CAAI,EAAGyD,CAAM,CACzD,CAAC,EACGxL,EAAK,cACP8I,EAAS,IAAI,EAEjB,CACF,EACA,SAASM,EAAsBlC,EAAQ2B,EAAUC,EAAUtW,EAAM,CAC/D6X,EAAc,KAAK,KAAMnD,EAAQ1U,CAAI,EACrC,KAAK,UAAYqW,EACjB,KAAK,UAAYC,EACjB,KAAK,WAAa,CAAC,EAAEtW,GAAQA,EAAK,QAClC,KAAK,UAAU,GAAG,MAAOwZ,CAAK,EAC9B,KAAK,UAAU,GAAG,SAAUC,CAAQ,EACpC,IAAIjM,EAAO,KACPkM,EAAQ,KACZ,KAAK,KAAK,MAAO,UAAW,CACtBA,IACF,aAAaA,CAAK,EAClBA,EAAQ,MAELlM,EAAK,YACRA,EAAK,KAAK,QAAQ,EAEpB,KAAK,UAAU,eAAe,SAAUiM,CAAQ,EAC5C,KAAK,eACP9T,EAAM,kBAAkB,EACxB,KAAK,UAAU,IAAI,GAErB,KAAK,UAAU,eAAe,OAAQgU,CAAM,EAAE,eAAe,OAAQC,CAAS,EAAE,eAAe,MAAOJ,CAAK,CAC7G,CAAC,EACD,IAAIjE,EACA,KAAK,WACP,KAAK,UAAU,GAAG,OAAQqE,CAAS,GAEnC,KAAK,UAAU,GAAG,OAAQD,CAAM,EAChC,QAAQ,SAASE,CAAI,EACjBrM,EAAK,UACPkM,EAAQ,WAAW,UAAW,CAC5BlM,EAAK,QAAQ,IAAI,MAAM,SAAS,CAAC,CACnC,EAAGA,EAAK,OAAO,IAGnB,SAASqM,EAAKP,EAAO,CACnB,GAAI,CAAA9L,EAAK,UAGT,CAAA+H,EAAO/H,EAAK,wBAAwBA,EAAK,SAAU,CAAC8L,CAAK,EACzD,IAAIQ,EAAU,CACZ7G,EAAuB,SAASsC,CAAI,EACpC9P,EAAM,WAAW,CAAC,EAAG,CAAC,CAAC,CAEzB,EACA+H,EAAK,UAAU,MAAM,CAAE,GAAIA,EAAK,QAAS,QAAAsM,CAAQ,CAAC,EACpD,CACA,SAASH,EAAO5Y,EAAK,CACnB,GAAI,CAACyM,EAAK,eAAezM,EAAI,EAAE,EAAG,CAChC4E,EAAM,qDAAsD5E,EAAI,EAAE,EAClE,MACF,CACA,IAAIuD,EAAMtF,EAAQ,OAAO+B,EAAI,OAAO,EACpC,GAAI,CACF,IAAIyU,EAAO+D,GAASrG,EAAyB5O,CAAG,EAAE,KAC9CkR,EAAK,aACPhI,EAAK,SAAWA,EAAK,YAAYgI,CAAI,EAEzC,OAAS1D,GAAO,CACdtE,EAAK,QAAQsE,EAAK,EAClB,MACF,CACA,IAAI7P,GAAQuT,EAAK,MACjB7P,EAAM,sBAAuB1D,EAAK,EAClCuL,EAAK,KAAK,YAAa+H,EAAMC,CAAI,EAC7BvT,KAAU,OACZ,QAAQ,SAAS,UAAW,CAC1B4X,EAAK,EAAI,CACX,CAAC,GAEDlU,EAAM,wBAAwB,EAC1B+T,IACF,aAAaA,CAAK,EAClBA,EAAQ,MAEVlM,EAAK,UAAU,eAAe,OAAQmM,CAAM,EAAE,GAAG,OAAQC,CAAS,EAClEpM,EAAK,WAAa,GAClBA,EAAK,KAAK,QAAQ,EAClB+H,EAAO,KAEX,CACA,SAASqE,EAAU7Y,EAAK,CACtB,IAAImY,EAAKnY,EAAI,GACb,GAAI,CAACyM,EAAK,eAAe0L,CAAE,EAAG,CAC5BvT,EAAM,iCAAkCuT,CAAE,EAC1C,MACF,CACA,IAAI5b,EAAKkQ,EAAK,UAAU,IAAI0L,CAAE,EAC1B5b,GACF,QAAQ,SAAS,UAAW,CAC1BqI,EAAM,sBAAuBuT,CAAE,EAC/B5b,EAAG,KAAM0B,EAAQ,OAAO+B,EAAI,OAAO,EAAGyM,EAAK,QAAQ,CACrD,CAAC,CAEL,CACA,SAASgM,GAAQ,CACfhM,EAAK,QAAQ,EAAI,CACnB,CACA,SAASiM,GAAW,CAClBjM,EAAK,QAAQ,CACf,CACF,CACA1O,EAAK,SAAS8X,EAAuBiB,CAAa,EAClDjB,EAAsB,UAAU,MAAQ,UAAW,CACjD,GAAI,KAAK,YAAc,KAAK,SAC1BiB,EAAc,UAAU,MAAM,MAAM,KAAM,SAAS,MAC9C,CACLlS,EAAM,iBAAiB,EACvB,IAAIgI,EAAO,CAAC,EACRhN,EAAGC,EACP,IAAKD,EAAI,EAAGC,EAAI,UAAU,OAAQD,EAAIC,EAAGD,IACvCgN,EAAK,KAAK,UAAUhN,CAAC,CAAC,EAExB,KAAK,KAAK,SAAU,UAAW,CAC7B,KAAK,MAAM,MAAM,KAAMgN,CAAI,CAC7B,CAAC,CACH,CACF,EACAiJ,EAAsB,UAAU,MAAQ,SAASsC,EAAIF,EAAQvF,EAAQ,CACnE,GAAIA,EAAQ,CACV,IAAIjG,EAAO,KACX,QAAQ,SAAS,UAAW,CAC1BA,EAAK,UAAU,IAAI0L,CAAE,EAAE,KAAMzT,EAAM,WAAW,CAAC,EAAG,EAAG,CAAC,CAAC,EAAG+H,EAAK,QAAQ,CACzE,CAAC,CACH,CACA,OAAO,KAAK,UAAU,MAAM,CAAE,GAAA0L,EAAI,QAAS,CAACF,CAAM,CAAE,CAAC,CACvD,EACA,SAASe,EAAc5F,EAAQnU,EAAM,CACnCA,EAAOA,GAAQ,CAAC,EAChB6S,EAAO,aAAa,KAAK,IAAI,EAC7B,KAAK,OAASsB,EACd,KAAK,aAAe,CAAC,CAAC1O,EAAM,UAAUzF,EAAM,cAAe,EAAI,EAC/D,KAAK,QAAU8X,GAAiB9X,EAAK,KAAK,EAC1C,IAAI+X,EAAQ5D,EAAO,OACfkB,EAAMlB,EAAO,QACb7T,EAAO+U,EAAI,KACV0C,EAAMzX,CAAI,IACbyX,EAAMzX,CAAI,EAAI,IAAI2X,EAAQ5C,EAAKA,EAAK/U,CAAI,GAE1C,KAAK,SAAW,KAChB,KAAK,UAAY,GACjB,KAAK,SAAW,GAChB,KAAK,QAAU,EACf,KAAK,KAAK,OAAQ,SAASmV,EAAS/N,EAAK,CACvC/B,EAAM,oBAAoB,EAC1B,KAAK,KAAK,MAAO8P,EAAS/N,CAAG,CAC/B,CAAC,CACH,CACA5I,EAAK,SAASib,EAAelH,EAAO,YAAY,EAChDkH,EAAc,UAAU,QAAU,SAAS5B,EAAQ,CAC5C,KAAK,WACR,KAAK,SAAW,GAChB,KAAK,KAAK,QAAQ,IAEhBA,GAAU,CAAC,KAAK,WAClB,KAAK,UAAY,GACbC,GAAQD,CAAM,GAChBxS,EAAM,iCAAkCwS,CAAM,EAC9C,KAAK,KAAK,OAAQ,KAAK,QAASA,CAAM,GAEtC,KAAK,KAAK,OAAQ,KAAK,OAAO,EAGpC,EACA4B,EAAc,UAAU,yBAA2B,SAASrS,EAAK6N,EAAM,CACrE,IAAIF,EAAM,KAAK,OAAO,QAClB/Q,EAAM+Q,EAAI,KACV2E,EAAczE,GAAQA,EAAK,WAAW,OAAOjR,CAAG,EACpD,MAAO,CACL,MAAOoD,EAAM,OAASsS,EAAc,OAAS,SAC7C,eAAgBA,EAAc,KAAO,KAAK,UAAU3E,EAAI,QAAQ,EAChE,WAAY2E,EAAc,KAAO1V,CACnC,CACF,EACAyV,EAAc,UAAU,YAAc,SAASxE,EAAM,CACnD,IAAIjV,EAAOiV,EAAK,WACZyC,EAAU,KAAK,OAAO,OAAO1X,CAAI,EACrC,GAAI0X,EACF,OAAOA,EAET,GAAI,CAACzC,EAAK,eACR,MAAM0E,GAAW,kBAAkB,EAErC,IAAI/F,EAAO,KAAK,MAAMqB,EAAK,cAAc,EACrCjB,EAAYP,EAAQ,YAAYG,CAAI,EACxC,OAAA8D,EAAU,IAAIC,EAAQ3D,EAAW,KAAK,OAAO,QAAShU,EAAM,EAAI,EACzD,KAAK,OAAO,OAAOA,CAAI,EAAI0X,CACpC,EACA+B,EAAc,UAAU,eAAiB,SAASb,EAAI,CACpD,OAAOE,GAAcF,EAAI,KAAK,OAAO,CACvC,EACAa,EAAc,UAAU,SAAW,SAASf,EAAQhB,EAAS1a,EAAI,CAC/D,IAAIkQ,EAAO,KACPuJ,EACJ,GAAI,CACFA,EAAOiB,EAAQ,eAAegB,CAAM,CACtC,OAASlH,EAAO,CACdxU,EAAGkQ,EAAK,mBAAmByM,GAAW,kBAAmBnI,CAAK,CAAC,CAAC,EAChE,MACF,CACA,IAAI9C,EAAM+H,EAAK,KACXK,EAAO,IAAImB,EAAgBvJ,EAAK,CAAC,CAAC,EACtC,GAAI,CAACA,EAAI,KAAM,CACboI,EAAK,SAAW,KAChB9Z,EAAG8Z,EAAK,SAAS,EAAG,EAAK,EACzB,MACF,CACA,IAAIC,EAAM,IAAIF,EAAYnI,EAAK,IAAI,EACnCxB,EAAK,KAAK,eAAgB6J,CAAG,EAC7B,IAAIqB,EAAM,KAAK,OAAO,KACtB/S,EAAM,mDAAoD+S,EAAI,MAAM,EACpElL,EAAK,UACLmL,EAAgB,CACd,IAAAD,EACA,IAAArB,EACA,KAAAN,EACA,KAAAK,EACA,aAAAoB,EACA,aAAAC,EACA,QAAAG,CACF,CAAC,EACD,SAASJ,EAAaK,EAAOC,EAAOC,EAAM,CACxC,IAAI/D,GAAUxH,EAAK,OAAO,UAAUwB,EAAI,IAAI,EAC5C,GAAKgG,GAQE,CACL,IAAIS,GAAU,CAACzG,EAAI,OACnB,GAAI,CACEyG,GACFT,GAAQ,KAAKqC,EAAKwB,EAAM,QAAS,SAASnR,GAAKrC,GAAK,CAClDoQ,GAAU,GACVqD,EAAM,MAAQpR,GACdoR,EAAM,SAAWzT,GACjB0T,EAAK,CACP,CAAC,GAED/D,GAAQ,KAAKqC,EAAKwB,EAAM,OAAO,EAC/BE,EAAK,EAET,OAASrR,GAAK,CACR+N,IACFA,GAAU,GACVsD,EAAKrR,EAAG,GAERkR,EAAQlR,EAAG,CAEf,CACF,KA9Bc,CACZ,IAAIwS,GAAiB1M,EAAK,OAAO,gBACjC,GAAI0M,GACFA,GAAe,KAAK7C,EAAKwB,EAAOC,EAAOC,CAAI,MACtC,CACL,IAAIjH,GAAQ,IAAI,MAAM1S,EAAG,oBAAqB4P,EAAI,IAAI,CAAC,EACvD+J,EAAKkB,GAAW,kBAAmBnI,EAAK,CAAC,CAC3C,CACF,CAuBF,CACA,SAAS2G,EAAa/Q,EAAK,CACzB8F,EAAK,UACL,IAAI2G,EAAS3G,EAAK,OACd2L,EACJ,GAAI,CAACzR,EAAK,CACR,IAAIyS,GAAS/C,EAAK,MACdgD,GAAWjG,EAAO,QACjBiG,KACChC,GAAQ+B,EAAM,EAChB/C,EAAK,MAAQpI,EAAI,UAAU,MAAMmL,GAAO,QAAS,CAAE,WAAY,EAAK,CAAC,EAC5DA,KAAW,OACpBA,GAAS/C,EAAK,MAAQ,QAEpB+C,KAAW,QAAU/C,EAAK,WAAa,QAAUpI,EAAI,aAAa,QAAQ,IAAI,IAChFoI,EAAK,SAAW,OAGpB,GAAI,CACF+B,EAAS/B,EAAK,SAAS,CACzB,MAAgB,CACVA,EAAK,QAAU,OACjB1P,EAAMuR,GACJ7Z,EAAG,mBAAoB4P,EAAI,IAAI,EAE/BoI,EACA,CACE,CAAE,KAAM,UAAW,KAAMvG,CAAe,EACxC,CAAE,KAAM,QAAS,KAAM7B,EAAI,SAAU,CACvC,CACF,EAEAtH,EAAMuR,GACJ7Z,EAAG,sBAAuB4P,EAAI,IAAI,EAClCoI,EACA,CACE,CAAE,KAAM,UAAW,KAAMvG,CAAe,EACxC,CAAE,KAAM,WAAY,KAAM7B,EAAI,YAAa,CAC7C,CACF,CAEJ,CACF,CACKmK,EAEMgB,KAAW,QACpBhG,EAAO,KAAK,QAAS8F,GAAW,oBAAqBE,EAAM,CAAC,EAF5DhB,EAAS3L,EAAK,mBAAmB9F,EAAK0P,EAAK,OAAO,EAIpD9Z,EAAG6b,EAAQnK,EAAI,MAAM,EACjBxB,EAAK,UAAY,CAACA,EAAK,SACzBA,EAAK,QAAQ,CAEjB,CACA,SAASoL,EAAQlR,EAAK,CACpB8F,EAAK,OAAO,KAAK,QAAS9F,EAAK8F,CAAI,CACrC,CACF,EACA/H,EAAM,qBAAqBsU,EAAe,CAAC,SAAS,CAAC,EACrDA,EAAc,UAAU,SAAWjb,EAAK,UACtC,UAAW,CACT,OAAO,KAAK,OAAO,MACrB,EACA,mDACF,EACAib,EAAc,UAAU,YAAcjb,EAAK,UACzC,UAAW,CACT,OAAO,KAAK,OAAO,OACrB,EACA,4CACF,EACAib,EAAc,UAAU,YAAcjb,EAAK,UACzC,UAAW,CACT,OAAO,KAAK,SACd,EACA,4CACF,EACAib,EAAc,UAAU,mBAAqB,SAASrS,EAAK6J,EAAQ,CACjE,IAAI4C,EAAS,KAAK,OAClBA,EAAO,KAAK,QAASzM,EAAK,IAAI,EAC9B,IAAI2S,EACAlG,EAAO,iBACTkG,EAASlG,EAAO,iBAAiB,KAAK,KAAMzM,CAAG,EACtCA,EAAI,UACb2S,EAAS3S,EAAI,SAEf,IAAI4S,EACJ,GAAI/I,EACF,GAAI,CACF+I,EAASzJ,EAAe,SAASU,CAAM,CACzC,OAASO,EAAO,CACdqC,EAAO,KAAK,QAASrC,EAAO,IAAI,CAClC,CAEF,OAAO9S,EAAQ,OAAO,CACpBsb,GAAU7U,EAAM,WAAW,CAAC,CAAC,CAAC,EAC9BA,EAAM,WAAW,CAAC,EAAG,CAAC,CAAC,EAEvBuN,EAAY,SAASqH,GAAU,uBAAuB,CACxD,CAAC,CACH,EACA,SAAS5C,EAAuBtD,EAAQqD,EAAiBxX,EAAM,CAC7D+Z,EAAc,KAAK,KAAM5F,EAAQnU,CAAI,EACrC,KAAK,UAAY,OACjB,IAAIwN,EAAO,KACP6I,EACJ,QAAQ,SAAS,UAAW,CAC1BA,EAAWmB,EAAgB,KAAKhK,EAAM,SAAS9F,EAAK4O,EAAU,CAC5D,QAAQ,SAAS,UAAW,CAC1B,GAAI5O,EAAK,CACP+R,EAAS/R,CAAG,EACZ,MACF,CACA8F,EAAK,UAAY8I,EAAS,GAAG,SAAUmD,CAAQ,EAC/CjM,EAAK,KAAK,WAAW,CACvB,CAAC,CACH,CAAC,EAAE,GAAG,OAAQ+M,CAAS,EAAE,GAAG,MAAOf,CAAK,CAC1C,CAAC,EACD,SAASe,EAAUxZ,EAAK,CACtB,IAAImY,EAAKnY,EAAI,GACTuD,EAAMtF,EAAQ,OAAO+B,EAAI,OAAO,EAChC2G,EACJ,GAAI,CACF,IAAI3F,EAAQwX,GAAStG,EAAwB3O,CAAG,EAC5CiR,EAAOxT,EAAM,KACbiW,EAAUxK,EAAK,YAAY+H,CAAI,CACrC,OAASzD,GAAO,CACdpK,EAAMuS,GAAW,4BAA6BnI,EAAK,CACrD,CACA,IAAI0D,GAAOhI,EAAK,yBAAyB9F,EAAK6N,CAAI,EAClD/H,EAAK,KAAK,YAAa+H,EAAMC,EAAI,EAC7B9N,EACF4P,GAAK9J,EAAK,mBAAmB9F,CAAG,CAAC,EAEjC8F,EAAK,SAASzL,EAAM,KAAMiW,EAASV,EAAI,EAEzC,SAASA,GAAK6B,GAAQ,CACpB,GAAI,CAAC3L,EAAK,UAAW,CACnB,GAAI,CAACA,EAAK,UAAW,CACnBA,EAAK,KAAK,YAAa,UAAW,CAChC8J,GAAK6B,EAAM,CACb,CAAC,EACD,MACF,CACA3L,EAAK,UAAU,MAAM,CACnB,GAAA0L,EACA,QAAS,CAAChG,EAAwB,SAASsC,EAAI,EAAG2D,EAAM,CAC1D,CAAC,CACH,CACI3L,EAAK,WAAaA,EAAK,cACzBA,EAAK,UAAU,IAAI,CAEvB,CACF,CACA,SAASgM,GAAQ,CACfhM,EAAK,QAAQ,CACf,CACA,SAASiM,EAAS/R,EAAK,CACrB2O,EAAS,eAAe,OAAQkE,CAAS,EAAE,eAAe,MAAOf,CAAK,EACtEhM,EAAK,QAAQ9F,GAAO,EAAI,CAC1B,CACF,CACA5I,EAAK,SAAS2Y,EAAwBsC,CAAa,EACnD,SAASrC,EAAsBvD,EAAQkC,EAAUC,EAAUtW,EAAM,CAC/D+Z,EAAc,KAAK,KAAM5F,EAAQnU,CAAI,EACrC,KAAK,SAAW,OAChB,KAAK,UAAYsW,EAAS,GAAG,SAAUmD,CAAQ,EAC/C,KAAK,UAAYpD,EAAS,GAAG,OAAQmE,CAAW,EAAE,GAAG,MAAOhB,CAAK,EACjE,KAAK,KAAK,SAAU,UAAW,CAC7B,KAAK,UAAU,eAAe,OAAQgB,CAAW,EAAE,eAAe,OAAQD,CAAS,EAAE,eAAe,MAAOf,CAAK,CAClH,CAAC,EAAE,KAAK,MAAO,UAAW,CACxB,KAAK,UAAU,eAAe,SAAUC,CAAQ,EAC5C,KAAK,cACP,KAAK,UAAU,IAAI,CAEvB,CAAC,EACD,IAAIjM,EAAO,KACX,SAASgN,EAAYzZ,EAAK,CACxB,IAAImY,EAAKnY,EAAI,GACb,GAAI,CAACyM,EAAK,eAAe0L,CAAE,EACzB,OAEF,IAAI5U,EAAMtF,EAAQ,OAAO+B,EAAI,OAAO,EAChC2G,EACJ,GAAI,CACF,IAAI3F,EAAQwX,GAAStG,EAAwB3O,CAAG,EAC5CiR,EAAOxT,EAAM,KACjByL,EAAK,SAAWA,EAAK,YAAY+H,CAAI,CACvC,OAASzD,GAAO,CACdpK,EAAMuS,GAAW,4BAA6BnI,EAAK,CACrD,CACA,IAAI0D,GAAOhI,EAAK,yBAAyB9F,EAAK6N,CAAI,EAClD/H,EAAK,KAAK,YAAa+H,EAAMC,EAAI,EAC7B9N,EACF4P,GAAK9J,EAAK,mBAAmB9F,CAAG,CAAC,GAEjC8F,EAAK,UAAU,eAAe,OAAQgN,CAAW,EAAE,GAAG,OAAQD,CAAS,EACvE/M,EAAK,SAASzL,EAAM,KAAMyL,EAAK,SAAU8J,EAAI,GAE/C,SAASA,GAAK6B,GAAQ,CAChB3L,EAAK,WAGTA,EAAK,UAAU,MAAM,CACnB,GAAA0L,EACA,QAAS,CAAChG,EAAwB,SAASsC,EAAI,EAAG2D,EAAM,CAC1D,CAAC,CACH,CACF,CACA,SAASoB,EAAUxZ,EAAK,CACtB,IAAImY,EAAKnY,EAAI,GACb,GAAKyM,EAAK,eAAe0L,CAAE,EAG3B,KAAIF,EAASha,EAAQ,OAAO+B,EAAI,OAAO,EACvCyM,EAAK,SAASwL,EAAQxL,EAAK,SAAU,SAAS2L,EAAQ1F,EAAQ,CACxDjG,EAAK,WAAaiG,GAGtBjG,EAAK,UAAU,MAAM,CAAE,GAAA0L,EAAI,QAAS,CAACC,CAAM,CAAE,CAAC,CAChD,CAAC,EACH,CACA,SAASK,GAAQ,CACfhM,EAAK,QAAQ,CACf,CACA,SAASiM,GAAW,CAClBjM,EAAK,QAAQ,EAAI,CACnB,CACF,CACA1O,EAAK,SAAS4Y,EAAuBqC,CAAa,EAClD,SAAS/C,EAAehI,EAAKyL,EAAM1F,EAAK,CACtC,KAAK,KAAO/F,EACZ,KAAK,QAAUyL,GAAQ,CAAC,EACxB,KAAK,QAAU1F,GAAO,CAAC,CACzB,CACAiC,EAAe,UAAU,SAAW,UAAW,CAC7C,IAAIhI,EAAM,KAAK,KACf,OAAOhQ,EAAQ,OAAO,CACpB6R,EAAe,SAAS,KAAK,OAAO,EACpCmC,EAAY,SAAShE,EAAI,IAAI,EAC7BA,EAAI,YAAY,SAAS,KAAK,OAAO,CACvC,CAAC,CACH,EACA,SAASuJ,EAAgBvJ,EAAK0L,EAAKhT,EAAKrC,EAAK,CAC3C,KAAK,KAAO2J,EACZ,KAAK,QAAU0L,EACf,KAAK,MAAQhT,EACb,KAAK,SAAWrC,CAClB,CACAkT,EAAgB,UAAU,SAAW,UAAW,CAC9C,IAAImC,EAAM7J,EAAe,SAAS,KAAK,OAAO,EAC1C8J,EAAW,KAAK,QAAU,OAC9B,OAAO3b,EAAQ,OAAO,CACpB0b,EACA3H,EAAa,SAAS4H,CAAQ,EAC9BA,EAAW,KAAK,KAAK,UAAU,SAAS,KAAK,KAAK,EAAI,KAAK,KAAK,aAAa,SAAS,KAAK,QAAQ,CACrG,CAAC,CACH,EACA,SAASxD,EAAYnI,EAAK6F,EAAS,CACjC,KAAK,QAAUA,EACf,KAAK,OAAS,CAAC,EACf,KAAK,QAAU7F,EACf,OAAO,OAAO,IAAI,CACpB,CACA,SAASkJ,EAASb,EAAKuD,EAAc,CACnC,KAAK,KAAOvD,EACZ,KAAK,MAAQ,MAAQuD,EAAe,GACpC,KAAK,IAAM,EACX,KAAK,GAAK,EACV,KAAK,KAAO,CAAC,CACf,CACA1C,EAAS,UAAU,IAAM,SAASgB,EAAI,CACpC,OAAO,KAAK,KAAKA,EAAK,KAAK,KAAK,CAClC,EACAhB,EAAS,UAAU,IAAM,SAASG,EAASvX,EAAI,CAC7C,KAAK,IAAM,KAAK,IAAM,EAAI,KAAK,MAC/B,IAAI0M,EAAO,KACP0L,EAAK,KAAK,IACVQ,EACJ,OAAIrB,EAAU,IACZqB,EAAQ,WAAW,UAAW,CAC5Bpc,EAAG,IAAI,MAAM,SAAS,CAAC,CACzB,EAAG+a,CAAO,GAEZ,KAAK,KAAKa,CAAE,EAAI5b,EAChB,KAAK,KACE4b,EACP,SAAS5b,GAAK,CACPkQ,EAAK,KAAK0L,CAAE,IAGjB,OAAO1L,EAAK,KAAK0L,CAAE,EACnB1L,EAAK,KACDkM,GACF,aAAaA,CAAK,EAEpB5Y,EAAG,MAAM0M,EAAK,KAAM,SAAS,EAC/B,CACF,EACA0K,EAAS,UAAU,MAAQ,UAAW,CACpC,OAAO,KAAK,KAAK,IAAI,EAAE,QAAQ,SAASgB,EAAI,CAC1C,KAAK,KAAKA,CAAE,EAAE,IAAI,MAAM,aAAa,CAAC,CACxC,EAAG,IAAI,CACT,EACA,SAASjB,EAAQ3D,EAAWC,EAAWjU,EAAMua,EAAU,CACrD,KAAK,WAAavG,EAClB,KAAK,WAAaC,EAClB,KAAK,MAAQjU,EACb,KAAK,UAAY,CAAC,CAACua,EACnB,KAAK,SAAWrG,GAAcF,EAAWC,CAAS,CACpD,CACA0D,EAAQ,UAAU,eAAiB,SAAS3T,EAAK,CAC/C,IAAIS,EAAM,IAAIV,EAAIC,CAAG,EACjBoW,EAAM7J,EAAe,MAAM9L,CAAG,EAC9BvD,EAAOwR,EAAY,MAAMjO,CAAG,EAC5BiK,EAAK+F,EAOT,GANIvT,GACFwN,EAAM,KAAK,WAAW,QAAQxN,CAAI,EAClCuT,EAAM,KAAK,SAASvT,EAAO,GAAG,EAAE,MAAMuD,CAAG,GAEzCiK,EAAMoE,EAEJ,CAACrO,EAAI,QAAQ,EACf,MAAM,IAAI,MAAM3F,EAAG,uBAAwBoC,GAAQ,OAAO,CAAC,EAE7D,OAAO,IAAIwV,EAAehI,EAAK0L,EAAK3F,CAAG,CACzC,EACAkD,EAAQ,UAAU,gBAAkB,SAAS3T,EAAK8S,EAAMpI,EAAK,CAC3D,IAAIjK,EAAM,IAAIV,EAAIC,CAAG,EACrBmB,EAAM,kBAAkBoL,EAAe,MAAM9L,CAAG,EAAGqS,EAAK,QAAS,EAAI,EACrE,IAAI0D,EAAW/H,EAAa,MAAMhO,CAAG,EACjCvD,EAAOwN,EAAI,KACf,GAAIxN,EAAM,CACR,IAAI4N,EAAS,KAAK,SAAS5N,GAAQsZ,EAAW,IAAM,IAAI,EAOxD,GANA9L,EAAM,KAAK,WAAW,QAAQxN,CAAI,EAC9BsZ,EACF1D,EAAK,MAAQhI,EAAO,MAAMrK,CAAG,EAE7BqS,EAAK,SAAWhI,EAAO,MAAMrK,CAAG,EAE9B,CAACA,EAAI,QAAQ,EACf,MAAM,IAAI,MAAM3F,EAAG,wBAAyBoC,CAAI,CAAC,CAErD,MACEwN,EAAMoE,CAEV,EACA,SAAS8C,IAAe,CACtB3F,EAAO,UAAU,KAAK,KAAM,CAAE,mBAAoB,EAAK,CAAC,EACxD,KAAK,IAAM,OACX,KAAK,KAAO9K,EAAM,UAAU,CAAC,EAC7B,KAAK,MAAQ,CAAC,EACd,KAAK,GAAG,SAAU,UAAW,CAC3B,KAAK,KAAK,IAAI,CAChB,CAAC,CACH,CACA3G,EAAK,SAASoX,GAAc3F,EAAO,SAAS,EAC5C2F,GAAa,UAAU,WAAa,SAAS5R,EAAK+M,EAAU/T,EAAI,CAC9DgH,EAAMtF,EAAQ,OAAO,CAAC,KAAK,KAAMsF,CAAG,CAAC,EAErC,QADIyW,EACGzW,EAAI,QAAU,GAAKA,EAAI,SAAWyW,EAAczW,EAAI,YAAY,CAAC,GAAK,GAAG,CAC9E,GAAIyW,EACF,KAAK,MAAM,KAAKzW,EAAI,MAAM,EAAGyW,EAAc,CAAC,CAAC,MACxC,CACL,IAAIC,EAAO,KAAK,MAChB,KAAK,MAAQ,CAAC,EACd,KAAK,KAAK,CAAE,GAAI,KAAM,QAASA,CAAK,CAAC,CACvC,CACA1W,EAAMA,EAAI,MAAMyW,EAAc,CAAC,CACjC,CACA,KAAK,KAAOzW,EACZhH,EAAG,CACL,EACA4Y,GAAa,UAAU,OAAS,SAAS5Y,EAAI,CAC3C,GAAI,KAAK,KAAK,QAAU,KAAK,MAAM,OAAQ,CACzC,IAAI0d,EAAO,KAAK,MAAM,MAAM,EAC5BA,EAAK,QAAQ,KAAK,IAAI,EACtB,IAAItT,EAAMuS,GAAW,eAAe,EACpCvS,EAAI,aAAe1I,EAAQ,OAAOgc,CAAI,EAAE,SAAS,EACjD,KAAK,KAAK,QAAStT,CAAG,CACxB,CACApK,EAAG,CACL,EACA,SAASwY,GAAe,CACtBvF,EAAO,UAAU,KAAK,KAAM,CAAE,mBAAoB,EAAK,CAAC,EACxD,KAAK,GAAG,SAAU,UAAW,CAC3B,KAAK,KAAK,IAAI,CAChB,CAAC,CACH,CACAzR,EAAK,SAASgX,EAAcvF,EAAO,SAAS,EAC5CuF,EAAa,UAAU,WAAa,SAAS/U,EAAKsQ,EAAU/T,EAAI,CAC9D,IAAI0d,EAAOja,EAAI,QACXJ,EAAGC,EAAG0D,EACV,IAAK3D,EAAI,EAAGC,EAAIoa,EAAK,OAAQra,EAAIC,EAAGD,IAClC2D,EAAM0W,EAAKra,CAAC,EACZ,KAAK,KAAKsa,GAAU3W,EAAI,MAAM,CAAC,EAC/B,KAAK,KAAKA,CAAG,EAEf,KAAK,KAAK2W,GAAU,CAAC,CAAC,EACtB3d,EAAG,CACL,EACA,SAASmZ,IAAe,CACtBlG,EAAO,UAAU,KAAK,KAAM,CAAE,mBAAoB,EAAK,CAAC,EACxD,KAAK,IAAM,OACX,KAAK,YAAc,EACnB,KAAK,KAAO9K,EAAM,UAAU,CAAC,EAC7B,KAAK,MAAQ,CAAC,EACd,KAAK,GAAG,SAAU,UAAW,CAC3B,KAAK,KAAK,IAAI,CAChB,CAAC,CACH,CACA3G,EAAK,SAAS2X,GAAclG,EAAO,SAAS,EAC5CkG,GAAa,UAAU,WAAa,SAASnS,EAAK+M,EAAU/T,EAAI,CAE9D,IADAgH,EAAMtF,EAAQ,OAAO,CAAC,KAAK,KAAMsF,CAAG,CAAC,IACxB,CACX,GAAI,KAAK,MAAQ,OAAQ,CACvB,GAAIA,EAAI,OAAS,EAAG,CAClB,KAAK,KAAOA,EACZhH,EAAG,EACH,MACF,CACA,KAAK,IAAMgH,EAAI,YAAY,CAAC,EAC5B,KAAK,YAAcA,EAAI,YAAY,CAAC,EACpCA,EAAMA,EAAI,MAAM,CAAC,CACnB,CAEA,QADIyW,EACG,KAAK,aAAezW,EAAI,QAAU,GAAKA,EAAI,SAAWyW,EAAczW,EAAI,YAAY,CAAC,GAAK,GAC/F,KAAK,cACL,KAAK,MAAM,KAAKA,EAAI,MAAM,EAAGyW,EAAc,CAAC,CAAC,EAC7CzW,EAAMA,EAAI,MAAMyW,EAAc,CAAC,EAEjC,GAAI,KAAK,YAAa,CACpB,KAAK,KAAOzW,EACZhH,EAAG,EACH,MACF,KAAO,CACL,IAAIyD,EAAM,CAAE,GAAI,KAAK,IAAK,QAAS,KAAK,KAAM,EAC9C,KAAK,MAAQ,CAAC,EACd,KAAK,IAAM,OACX,KAAK,KAAKA,CAAG,CACf,CACF,CACF,EACA0V,GAAa,UAAU,OAASP,GAAa,UAAU,OACvD,SAASS,IAAe,CACtBpG,EAAO,UAAU,KAAK,KAAM,CAAE,mBAAoB,EAAK,CAAC,EACxD,KAAK,GAAG,SAAU,UAAW,CAC3B,KAAK,KAAK,IAAI,CAChB,CAAC,CACH,CACAzR,EAAK,SAAS6X,GAAcpG,EAAO,SAAS,EAC5CoG,GAAa,UAAU,WAAa,SAAS5V,EAAKsQ,EAAU/T,EAAI,CAC9D,IAAI0d,EAAOja,EAAI,QACXH,EAAIoa,EAAK,OACT1W,EACJA,EAAMmB,EAAM,UAAU,CAAC,EACvBnB,EAAI,aAAavD,EAAI,GAAI,CAAC,EAC1BuD,EAAI,aAAa1D,EAAG,CAAC,EACrB,KAAK,KAAK0D,CAAG,EACb,IAAI3D,EACJ,IAAKA,EAAI,EAAGA,EAAIC,EAAGD,IACjB2D,EAAM0W,EAAKra,CAAC,EACZ,KAAK,KAAKsa,GAAU3W,EAAI,MAAM,CAAC,EAC/B,KAAK,KAAKA,CAAG,EAEfhH,EAAG,CACL,EACA,SAAS2d,GAAUzW,EAAG,CACpB,IAAIF,EAAMmB,EAAM,UAAU,CAAC,EAC3B,OAAAnB,EAAI,aAAaE,CAAC,EACXF,CACT,CACA,SAASiV,GAASvS,EAAM1C,EAAK,CAC3B,IAAIS,EAAM,IAAIV,EAAIC,CAAG,EACjB4W,EAAOlU,EAAK,MAAMjC,CAAG,EACzB,GAAI,CAACA,EAAI,QAAQ,EACf,MAAM,IAAI,MAAM3F,EAAG,eAAgB4H,EAAK,OAAO,CAAC,CAAC,EAEnD,MAAO,CAAE,KAAAkU,EAAM,KAAMnW,EAAI,IAAI,MAAMA,EAAI,GAAG,CAAE,CAC9C,CACA,SAASoM,GAAagK,EAAOC,EAAO,CAClC,OAAOD,EAAM,OAAOC,CAAK,EAAID,EAAQA,EAAM,eAAeC,CAAK,CACjE,CACA,SAAS5G,GAAcF,EAAWC,EAAW,CAC3C,IAAIxT,EAAM,CAAC,EACX,OAAAuT,EAAU,SAAS,QAAQ,SAASnS,EAAG,CACrC,IAAIqC,EAAIrC,EAAE,KACNxC,EAAI4U,EAAU,QAAQ/P,CAAC,EAC3B,GAAI,CACF,GAAI,CAAC7E,EACH,MAAM,IAAI,MAAMP,EAAG,6BAA8BoF,CAAC,CAAC,EAErD,GAAI7E,EAAE,SAAWwC,EAAE,OACjB,MAAM,IAAI,MAAM/C,EAAG,mCAAoCoF,CAAC,CAAC,EAE3DzD,EAAIyD,EAAI,GAAG,EAAI2M,GAAaxR,EAAE,YAAawC,EAAE,WAAW,EACxDpB,EAAIyD,EAAI,GAAG,EAAI2M,GAAahP,EAAE,UAAWxC,EAAE,SAAS,EACpDoB,EAAIyD,EAAI,GAAG,EAAI2M,GAAahP,EAAE,aAAcxC,EAAE,YAAY,CAC5D,OAASmS,EAAO,CACd,MAAMmI,GAAW,wBAAyBnI,CAAK,CACjD,CACF,CAAC,EACM/Q,CACT,CACA,SAAS2U,GAAsBqC,EAAOsD,EAAOhG,EAAKiG,EAAU,CAC1D,OAAO,KAAKD,CAAK,EAAE,QAAQ,SAAS/a,EAAM,CACxC,IAAI4T,EAAOmH,EAAM/a,CAAI,EACjBgU,EAAWC,EACX+G,GACFhH,EAAYe,EACZd,EAAYR,EAAQ,YAAYG,CAAI,IAEpCI,EAAYP,EAAQ,YAAYG,CAAI,EACpCK,EAAYc,GAEd0C,EAAMzX,CAAI,EAAI,IAAI2X,EAAQ3D,EAAWC,EAAWjU,EAAM,EAAI,CAC5D,CAAC,CACH,CACA,SAAS2W,GAAmBc,EAAOuD,EAAU,CAC3C,IAAID,EAAQ,CAAC,EACb,cAAO,KAAKtD,CAAK,EAAE,QAAQ,SAASwD,EAAI,CACtC,IAAIvD,EAAUD,EAAMwD,CAAE,EACtB,GAAIvD,EAAQ,UAAW,CACrB,IAAI3C,EAAMiG,EAAWtD,EAAQ,WAAaA,EAAQ,WAClDqD,EAAME,CAAE,EAAIlG,EAAI,QAClB,CACF,CAAC,EACMgG,CACT,CACA,SAASjD,GAAQjP,EAAK,CACpB,MAAO,CAAC,CAACA,GAAO,OAAO,UAAU,SAAS,KAAKA,CAAG,IAAM,gBAC1D,CACA,SAAS2L,GAAc1T,EAAKC,EAAK,CAC/B,OAAOD,EAAI,GAAG,QAAS,SAASsG,EAAK,CACnCrG,EAAI,KAAK,QAASqG,EAAKtG,CAAG,CAC5B,CAAC,CACH,CACA,SAASoa,GAAQxM,EAAK8C,EAAO,CAC3B,IAAIpK,EAAM,IAAI,MAAMsH,CAAG,EACvB,OAAAtH,EAAI,MAAQoK,EACLpK,CACT,CACA,SAASuS,GAAWwB,EAAS3J,EAAO,CAClC,IAAIpK,EAAM8T,GAAQC,EAAQ,YAAY,EAAE,QAAQ,KAAM,GAAG,EAAG3J,CAAK,EACjE,OAAApK,EAAI,QAAUoK,GAASA,EAAM,QAAUA,EAAM,QAAU2J,EAChD/T,CACT,CACA,SAASuR,GAAmBjK,EAAKjO,EAAKqN,EAAQ,CAC5C,IAAIsN,EAAU,CAAC,EACX/a,EAAGC,EAAG+L,EACV,IAAKhM,EAAI,EAAGC,EAAIwN,EAAO,OAAQzN,EAAIC,EAAGD,IACpCgM,EAAQyB,EAAOzN,CAAC,EAChBgM,EAAM,KAAK,QAAQ5L,EAAI4L,EAAM,IAAI,EAAG,CAAE,UAAA1C,CAAU,CAAC,EAEnD,IAAI0R,EAAaD,EAAQ,IAAI,SAAS5M,EAAM,CAC1C,OAAO1P,EAAG,0BAA2B0P,EAAK,KAAMA,EAAK,MAAOA,EAAK,IAAI,CACvE,CAAC,EAAE,KAAK,IAAI,EACRpH,EAAM,IAAI,MAAMtI,EAAG,UAAW4P,EAAK2M,CAAU,CAAC,EAClD,OAAAjU,EAAI,QAAUgU,EACPhU,EACP,SAASuC,EAAUlI,EAAOoH,EAAKnC,EAAM,CACnC,IAAI4U,EAAO,CAAC,EACR1X,EAAIgB,GAAIrD,GACZ,IAAKqC,EAAK,EAAGgB,GAAKnD,EAAM,OAAQmC,EAAKgB,GAAIhB,IACvCrC,GAAOE,EAAMmC,CAAE,EACX,MAAMrC,EAAI,EACZ+Z,EAAK,KAAK,IAAM/Z,EAAI,EAEpB+Z,EAAK,KAAK,IAAM/Z,GAAO,GAAG,EAG9B6Z,EAAQ,KAAK,CACX,KAAM/O,EAAM,KAAOiP,EAAK,KAAK,EAAE,EAC/B,MAAOzS,EACP,KAAAnC,CACF,CAAC,CACH,CACF,CACA,SAAS8Q,GAAiB+D,EAAO,CAC/B,OAAOA,EAAQpW,EAAM,QAAQoW,CAAK,EAAE,YAAY,CAAC,GAAK,GAAK1I,GAAgB,CAC7E,CACA,SAASiG,GAAcF,EAAI4C,EAAQ,CACjC,OAAQ5C,EAAK4C,IAAW,GAAK3I,KAAkB,CACjD,CACA,SAASoD,GAASpN,EAAK,CACrB,MAAO,CAAC,EAAEA,GAAOA,EAAI,KACvB,CACA,SAAS2N,EAAmBzB,EAAK7T,EAAM,CACrC,IAAIwN,EAAMqG,EAAI,QAAQ7T,CAAI,EAC1B,GAAI,CAACwN,EACH,MAAM,IAAI,MAAM5P,EAAG,sBAAuBoC,CAAI,CAAC,EAEjD,OAAOwN,CACT,CACA,SAAS2J,EAAgBoD,EAAQ,CAC/B,IAAIpO,EAAO,CAACoO,EAAO,KAAMA,EAAO,IAAI,EAChCC,EAAM,CAAC,EACPlK,EACJmK,EAAQ,CAAC,EACT,SAASA,EAAQvb,EAAK,CACpB,IAAIwb,EAAS,GACTxb,EAAMqb,EAAO,IAAI,OACnBA,EAAO,IAAIrb,CAAG,EAAE,MAAMqb,EAAO,IAAKpO,EAAK,OAAO,SAASjG,EAAKpK,EAAI,CAC9D,GAAI4e,EAAQ,CACVH,EAAO,QAAQP,GAAQ,oCAAqC9T,CAAG,CAAC,EAChE,MACF,CAEA,GADAwU,EAAS,GACLxU,GAAOqU,EAAO,OACjBA,EAAO,KAAK,QAAU,QAAUA,EAAO,KAAK,WAAa,QAAS,CACjEjK,EAAQpK,EACRyU,EAAS,EACT,MACF,CACI7e,GACF0e,EAAI,KAAK1e,CAAE,EAEb2e,EAAQ,EAAEvb,CAAG,CACf,CAAC,CAAC,EAEFqb,EAAO,aAAa,MAAMA,EAAO,IAAKpO,EAAK,OAAO,SAASjG,EAAK,CAC9D,GAAIwU,EAAQ,CACVH,EAAO,QAAQP,GAAQ,yBAA0B9T,CAAG,CAAC,EACrD,MACF,CACAwU,EAAS,GACTpK,EAAQpK,EACR,QAAQ,SAASyU,CAAQ,CAC3B,CAAC,CAAC,CAEN,CACA,SAASA,GAAW,CAClB,IAAI7e,EAAK0e,EAAI,IAAI,EACjB,GAAI1e,EAAI,CACN,IAAI4e,EAAS,GACb5e,EAAG,KAAKye,EAAO,IAAKjK,EAAO,SAASpK,EAAK,CACvC,GAAIwU,EAAQ,CACVH,EAAO,QAAQP,GAAQ,qCAAsC9T,CAAG,CAAC,EACjE,MACF,CACAoK,EAAQpK,EACRwU,EAAS,GACTC,EAAS,CACX,CAAC,CACH,MACEJ,EAAO,aAAa,KAAKA,EAAO,IAAKjK,CAAK,CAE9C,CACF,CACArT,EAAO,QAAU,CACf,QAAAwZ,EACA,uBAAAhF,EACA,wBAAAC,EACA,QAAAG,EACA,SAAA6E,EACA,QAAAnE,EACA,iBAAAqB,EACA,QAAS,CACP,aAAAc,GACA,aAAAJ,EACA,aAAAW,GACA,aAAAE,EACF,CACF,CACF,CACF,CAAC,EAGGyF,GAAgB/e,GAAW,CAC7B,iCAAiCmB,EAASC,EAAQ,CAChD,aACA,IAAI4d,EAAKC,GACLnS,EAAOoS,GACX,SAASC,GAAmB,CAC1B,IAAIC,EAAU,CAAC,EACf,OAAO,SAASC,EAAOC,EAAMrf,EAAI,CAE/B,GADAof,EAAQvS,EAAK,QAAQuS,CAAK,EACtBD,EAAQC,CAAK,EAAG,CAClB,QAAQ,SAASpf,CAAE,EACnB,MACF,CACAmf,EAAQC,CAAK,EAAI,GACjBL,EAAG,SAASK,EAAO,CAAE,SAAU,MAAO,EAAGpf,CAAE,CAC7C,CACF,CACA,SAASsf,GAAuB,CAC9B,IAAIH,EAAU,CAAC,EACf,OAAO,SAASC,EAAOC,EAAMrf,EAAI,CAC/Bof,EAAQvS,EAAK,QAAQuS,CAAK,EACtBD,EAAQC,CAAK,EACfpf,EAAG,GAEHmf,EAAQC,CAAK,EAAI,GACjBpf,EAAG,KAAM+e,EAAG,aAAaK,EAAO,CAAE,SAAU,MAAO,CAAC,CAAC,EAEzD,CACF,CACAje,EAAO,QAAU,CACf,iBAAA+d,EACA,qBAAAI,EAEA,WAAYP,EAAG,WACf,aAAcA,EAAG,YACnB,CACF,CACF,CAAC,EAGGQ,GAAgBxf,GAAW,CAC7B,iCAAiCmB,EAASC,EAAQ,CAChD,aACA,IAAIqe,EAAQV,GAAc,EACtB3W,EAAQlH,GAAc,EACtB4L,EAAOoS,GACPzd,EAAOC,GACPK,EAAKN,EAAK,OACVie,EAAY,CACd,KAAM,CAAE,KAAM,MAAO,YAAa,MAAO,EACzC,QAAS,CAAE,KAAM,QAAS,YAAa,SAAU,EACjD,QAAS,CAAE,KAAM,OAAQ,YAAa,aAAc,EACpD,aAAc,CAAE,KAAM,OAAQ,YAAa,kBAAmB,CAChE,EACA,SAASC,EAAiBN,EAAO1c,EAAM1C,EAAI,CACrC,CAACA,GAAM,OAAO0C,GAAQ,aACxB1C,EAAK0C,EACLA,EAAO,QAETA,EAAOA,GAAQ,CAAC,EACXA,EAAK,aACRA,EAAK,WAAa8c,EAAM,iBAAiB,GAE3CG,EAAWP,EAAO,SAAShV,EAAKwV,EAAU,CACxC,GAAIxV,EAAK,CACPpK,EAAGoK,CAAG,EACN,MACF,CACA,GAAI,CAACwV,EAAU,CACb5f,EAAG,IAAI,MAAM,mBAAmB,CAAC,EACjC,MACF,CACA,IAAI6f,EAAUD,EAAS,MACvB,GAAIC,EAAS,CACX,IAAIvb,EAAYwb,GAAkBF,CAAQ,GAAK,GAC/CC,EAAQ,QAAQ,SAASpW,EAAQ,CAC3BA,EAAO,YAAcnF,GACvB,OAAOmF,EAAO,SAElB,CAAC,CACH,CACAzJ,EAAG,KAAM4f,CAAQ,CACnB,CAAC,EACD,SAASD,EAAWI,EAAQC,EAAK,CAC/Btd,EAAK,WAAWqd,EAAQ,MAAO,SAAS3V,EAAKtH,EAAK,CAChD,GAAIsH,EAAK,CACP4V,EAAI5V,CAAG,EACP,MACF,CACA,GAAItH,IAAQ,OAAQ,CAClBkd,EAAI,EACJ,MACF,CACA,GAAI,CACF,IAAIlO,EAAS,IAAImO,EAAOnd,EAAKJ,CAAI,EAC7Be,GAAMqO,EAAO,cAAchP,EAAKJ,CAAI,CAC1C,OAASmW,EAAM,CACbA,EAAK,KAAOkH,EACZC,EAAInH,CAAI,EACR,MACF,CACAqH,EAAazc,GAAI,SAAUA,GAAI,QAASoJ,EAAK,QAAQkT,CAAM,EAAGC,CAAG,CACnE,CAAC,CACH,CACA,SAASE,EAAaN,EAAUT,EAASgB,EAAOH,EAAK,CACnD,IAAII,EAAoB,CAAC,EACzBC,GAAK,EACL,SAASA,IAAO,CACd,IAAIC,EAAOnB,EAAQ,MAAM,EACzB,GAAI,CAACmB,EAAM,CACTF,EAAkB,QAAQ,EAC1B,GAAI,CACFA,EAAkB,QAAQ,SAASG,EAAU,CAC3CC,GAAYZ,EAAUW,CAAQ,CAChC,CAAC,CACH,OAASnW,EAAK,CACZ4V,EAAI5V,CAAG,EACP,MACF,CACA4V,EAAI,KAAMJ,CAAQ,EAClB,MACF,CACA,IAAIa,EAAa5T,EAAK,KAAKsT,EAAOG,EAAK,IAAI,EACvCA,EAAK,OAAS,MAChBX,EAAWc,EAAY,SAASrW,EAAKmW,EAAU,CAC7C,GAAInW,EAAK,CACP4V,EAAI5V,CAAG,EACP,MACF,CACImW,GACFH,EAAkB,KAAKG,CAAQ,EAEjCF,GAAK,CACP,CAAC,EAED3d,EAAK,WAAW+d,EAAYH,EAAK,KAAM,SAASlW,EAAKtH,EAAK,CACxD,GAAIsH,EAAK,CACP4V,EAAI5V,CAAG,EACP,MACF,CACA,OAAQkW,EAAK,KAAM,CACjB,IAAK,WACL,IAAK,SACH,GAAIxd,IAAQ,OAAQ,CAClBud,GAAK,EACL,MACF,CACA,GAAI,CACF,IAAI5c,EAAM,KAAK,MAAMX,CAAG,CAC1B,OAAS+V,EAAM,CACbA,EAAK,KAAO4H,EACZT,EAAInH,CAAI,EACR,MACF,CACA,IAAI0H,EAAWD,EAAK,OAAS,SAAW,CAAE,MAAO,CAAC7c,CAAG,CAAE,EAAIA,EAC3D2c,EAAkB,KAAKG,CAAQ,EAC/BF,GAAK,EACL,OACF,QACEL,EAAI,IAAI,MAAMle,EAAG,0BAA2Bwe,EAAK,IAAI,CAAC,CAAC,CAC3D,CACF,CAAC,CAEL,CACF,CACA,SAASE,GAAYZ,EAAUW,EAAU,CACvC,IAAIV,EAAUU,EAAS,OAAS,CAAC,EACjCV,EAAQ,QAAQ,EAChBA,EAAQ,QAAQ,SAASpW,EAAQ,CAC1BmW,EAAS,QACZA,EAAS,MAAQ,CAAC,GAEhBnW,EAAO,YAAc,SACvBA,EAAO,UAAYqW,GAAkBS,CAAQ,GAAK,IAEpDX,EAAS,MAAM,QAAQnW,CAAM,CAC/B,CAAC,EACD,OAAO,KAAK8W,EAAS,UAAY,CAAC,CAAC,EAAE,QAAQ,SAASrc,EAAM,CAI1D,GAHK0b,EAAS,WACZA,EAAS,SAAW,CAAC,GAEnBA,EAAS,SAAS1b,CAAI,EACxB,MAAM,IAAI,MAAMpC,EAAG,wBAAyBoC,CAAI,CAAC,EAEnD0b,EAAS,SAAS1b,CAAI,EAAIqc,EAAS,SAASrc,CAAI,CAClD,CAAC,CACH,CACF,CACA,SAASwc,EAAK5d,EAAK,CACjB,IAAI2G,EACJ,GAAI,OAAO3G,GAAO,UAAY,CAACA,EAAI,QAAQ+J,EAAK,GAAG,GAAK2S,EAAM,WAAW1c,CAAG,EAAG,CAC7E,IAAI6d,EAAWnB,EAAM,aAAa1c,EAAK,CAAE,SAAU,MAAO,CAAC,EAC3D,GAAI,CACF,OAAO,KAAK,MAAM6d,CAAQ,CAC5B,MAAc,CACZ,IAAIje,EAAO,CAAE,WAAY8c,EAAM,qBAAqB,CAAE,EACtDE,EAAiB5c,EAAKJ,EAAM,SAASmW,GAAM+H,EAAgB,CACzDnX,EAASoP,GAAO8H,EAAWC,CAC7B,CAAC,CACH,CACF,MACEnX,EAAS3G,EAEX,GAAI,OAAO2G,GAAU,UAAYA,IAAW,OAC1C,OAAOA,EAET,GAAI,CACF,OAAO,KAAK,MAAMA,CAAM,CAC1B,MAAc,CACZ,GAAI,CACF,OAAOwW,EAAO,aAAaxW,CAAM,CACnC,MAAe,CACb,GAAI,CACF,OAAOwW,EAAO,WAAWxW,CAAM,CACjC,MAAe,CACb,OAAOA,CACT,CACF,CACF,CACF,CACA,SAASwW,EAAOnd,EAAKJ,EAAM,CACzBA,EAAOA,GAAQ,CAAC,EAChB,KAAK,IAAM,IAAIme,EAAU/d,CAAG,EAC5B,KAAK,iBAAmB,CAAC,CAACJ,EAAK,gBAC/B,KAAK,cAAgB,CAACA,EAAK,qBAC3B,KAAK,UAAYA,EAAK,UAAY+c,CACpC,CACAQ,EAAO,aAAe,SAASnd,EAAKJ,EAAM,CACxC,IAAIoP,EAAS,IAAImO,EAAOnd,EAAKJ,CAAI,EAC7Bkd,EAAW9N,EAAO,cAAc,EACpC,GAAI8N,EAAS,QAAQ,OACnB,MAAM,IAAI,MAAM,qBAAqB,EAEvC,OAAOA,EAAS,QAClB,EACAK,EAAO,WAAa,SAASnd,EAAKJ,EAAM,CACtC,IAAIoP,EAAS,IAAImO,EAAOnd,EAAKJ,CAAI,EAC7B0T,EAAMtE,EAAO,aAAa,EAC1BrI,EAASqI,EAAO,UAAUsE,IAAQ,OAAS,CAAC,EAAI,CAAE,IAAAA,CAAI,EAAG,EAAI,EACjE,OAAAtE,EAAO,IAAI,KAAK,CAAE,GAAI,OAAQ,CAAC,EACxBrI,CACT,EACAwW,EAAO,UAAU,cAAgB,UAAW,CAC1C,IAAIa,EAAK,KAAK,IACV3B,EAAU,CAAC,EACX7U,EAAQ,CAAC,EACToM,EAAW,CAAC,EACZtT,EACJ,KAAK,aAAa+b,CAAO,EACzB,IAAIyB,GAAiB,CAAC,EAClBG,EAAkB,KAAK,aAAa,EAUxC,IATIA,IAAoB,SACtBH,GAAe,IAAMG,GAEvB,KAAK,iBAAiBH,EAAc,EACpCE,EAAG,KAAK,CAAE,IAAK,UAAW,CAAC,EACtBA,EAAG,KAAK,CAAE,IAAK,IAAK,OAAQ,EAAK,CAAC,IACrCF,GAAe,SAAWE,EAAG,KAAK,CAAE,GAAI,MAAO,CAAC,EAAE,IAClDA,EAAG,KAAK,CAAE,IAAK,GAAI,CAAC,GAEf,CAACA,EAAG,KAAK,CAAE,IAAK,IAAK,OAAQ,EAAK,CAAC,GACxC,GAAI,CAAC,KAAK,aAAa3B,CAAO,EAAG,CAC/B,IAAI6B,EAAU,KAAK,aAAa,EAC5BpJ,EAAa,KAAK,UAAU,CAAC,EAAG,EAAI,EACpCqJ,EAAa,KAAK,aAAa9B,EAAS,EAAI,EAC5C+B,EAAU,OAEd,GADA9d,EAAM0d,EAAG,IACL,CAACG,IAAeC,EAAU,KAAK,aAAatJ,CAAU,GAAI,CACxDoJ,IAAY,QAAUE,EAAQ,OAAO,MAAQ,SAC/CA,EAAQ,OAAO,IAAMF,GAEvB,IAAI7K,GAAS,GAYb,IAXI+K,EAAQ,OAAO,WAAa,QAAUA,EAAQ,OAAO,SAAS,OAAS,UACzE/K,GAAS,CAAC,KAAK,kBAAoB,CAAC+K,EAAQ,OAAO,OAC/CA,EAAQ,OAAO,WAAa,OAC9BA,EAAQ,OAAO,SAAW,OAE1BA,EAAQ,OAAO,SAAS,KAAO,QAG/B/K,KACF+K,EAAQ,OAAO,SAAS,EAAI,IAE1BxK,EAASwK,EAAQ,IAAI,EACvB,MAAM,IAAI,MAAMpf,EAAG,wBAAyBof,EAAQ,IAAI,CAAC,EAE3DxK,EAASwK,EAAQ,IAAI,EAAIA,EAAQ,MACnC,MACMF,IACE,OAAOpJ,GAAc,SACvBA,EAAa,CAAE,IAAKoJ,EAAS,KAAMpJ,CAAW,EACrCA,EAAW,MAAQ,SAC5BA,EAAW,IAAMoJ,IAGrB1W,EAAM,KAAKsN,CAAU,EACrBkJ,EAAG,IAAM1d,EACT0d,EAAG,KAAK,CAAE,IAAK,IAAK,OAAQ,EAAK,CAAC,EAEpCE,EAAU,MACZ,CAEF,OAAAF,EAAG,KAAK,CAAE,GAAI,OAAQ,CAAC,EACnBxW,EAAM,SACRsW,GAAe,MAAQtW,GAErB,OAAO,KAAKoM,CAAQ,EAAE,SACxBkK,GAAe,SAAWlK,GAErB,CAAE,SAAUkK,GAAgB,QAAAzB,CAAQ,CAC7C,EACAc,EAAO,UAAU,iBAAmB,SAASxW,EAAQ,CAEnD,QADIqX,EAAK,KAAK,IACPA,EAAG,KAAK,CAAE,IAAK,IAAK,OAAQ,EAAK,CAAC,GAAG,CAE1C,QADIrc,EAAQ,CAAC,EACN,CAACqc,EAAG,KAAK,CAAE,IAAK,IAAK,OAAQ,EAAK,CAAC,GACxCrc,EAAM,KAAKqc,EAAG,KAAK,EAAE,GAAG,EAE1BrX,EAAOhF,EAAM,KAAK,EAAE,CAAC,EAAIqc,EAAG,KAAK,CAAE,GAAI,MAAO,CAAC,EAAE,IACjDA,EAAG,KAAK,CAAE,IAAK,GAAI,CAAC,CACtB,CACF,EACAb,EAAO,UAAU,aAAe,SAASkB,EAAgB,CACvD,IAAIL,EAAK,KAAK,IACVrX,EAAS,CAAE,QAAS,CAAC,EAAG,SAAU0X,CAAe,EACrD,KAAK,iBAAiB1X,CAAM,EAC5B,IAAIvF,EAAO4c,EAAG,KAAK,EAAE,IACrB,GAAIA,EAAG,KAAK,EAAE,MAAQ,IAGtB,IAAI,CAACA,EAAG,KAAK,CAAE,IAAK,IAAK,OAAQ,EAAK,CAAC,EACrC,GACErX,EAAO,QAAQ,KAAK,KAAK,WAAW,CAAC,QAC9B,CAACqX,EAAG,KAAK,CAAE,IAAK,IAAK,OAAQ,EAAK,CAAC,GAAKA,EAAG,KAAK,CAAE,IAAK,GAAI,CAAC,GAEvE,IAAIM,EAAQN,EAAG,KAAK,EACpB,OAAQM,EAAM,IAAK,CACjB,IAAK,SACH3X,EAAO,OAAS,CAAC,EACjB,GACEA,EAAO,OAAO,KAAK,KAAK,UAAU,CAAC,QAC5B,CAACqX,EAAG,KAAK,CAAE,IAAK,IAAK,OAAQ,EAAK,CAAC,GAAKA,EAAG,KAAK,CAAE,IAAK,GAAI,CAAC,GACrE,MACF,IAAK,SACHrX,EAAO,SAAS,EAAI,GACpBqX,EAAG,KAAK,CAAE,IAAK,GAAI,CAAC,EACpB,MACF,IAAK,IACH,MACF,QACE,MAAMA,EAAG,MAAM,yBAA0BM,CAAK,CAClD,CACA,MAAO,CAAE,KAAAld,EAAM,OAAAuF,CAAO,EACxB,EACAwW,EAAO,UAAU,aAAe,UAAW,CACzC,IAAImB,EAAQ,KAAK,IAAI,KAAK,CAAE,GAAI,UAAW,YAAa,GAAM,OAAQ,EAAK,CAAC,EAC5E,GAAIA,EACF,OAAOA,EAAM,GAEjB,EACAnB,EAAO,UAAU,WAAa,UAAW,CACvC,IAAIa,EAAK,KAAK,IACVE,EAAU,KAAK,aAAa,EAC5BvX,EAAS,CAAE,KAAM,KAAK,UAAU,CAAE,EACtC,OAAIuX,IAAY,QAAUvX,EAAO,MAAQ,SACvCA,EAAO,IAAMuX,GAEf,KAAK,iBAAiBvX,CAAM,EAC5BA,EAAO,KAAOqX,EAAG,KAAK,CAAE,GAAI,MAAO,CAAC,EAAE,IAClCA,EAAG,KAAK,CAAE,IAAK,IAAK,OAAQ,EAAK,CAAC,IACpCrX,EAAO,QAAaqX,EAAG,KAAK,CAAE,GAAI,MAAO,CAAC,EAAE,KAEvCrX,CACT,EACAwW,EAAO,UAAU,UAAY,SAASxW,EAAQ4X,EAAK,CAIjD,OAHA5X,EAASA,GAAU,CAAC,EACpB,KAAK,iBAAiBA,CAAM,EAC5BA,EAAO,KAAO,KAAK,IAAI,KAAK,CAAE,GAAI,MAAO,CAAC,EAAE,IACpCA,EAAO,KAAM,CACnB,IAAK,SACL,IAAK,QACH,OAAO,KAAK,YAAYA,CAAM,EAChC,IAAK,QACH,OAAO,KAAK,WAAWA,CAAM,EAC/B,IAAK,OACH,OAAO,KAAK,UAAUA,EAAQ4X,CAAG,EACnC,IAAK,MACH,OAAO,KAAK,SAAS5X,CAAM,EAC7B,IAAK,QACH,OAAO,KAAK,WAAWA,CAAM,EAC/B,IAAK,QACH,GAAI,OAAO,KAAKA,CAAM,EAAE,OAAS,EAC/B,MAAM,IAAI,MAAM,qCAAqC,EAEvD,OAAO,KAAK,WAAW,EACzB,QACE,IAAI6X,EAAM,KAAK,UAAU7X,EAAO,IAAI,EACpC,OAAI6X,IACF,OAAO7X,EAAO,KACdtB,EAAM,kBAAkBmZ,EAAK7X,CAAM,GAE9B,OAAO,KAAKA,CAAM,EAAE,OAAS,EAAIA,EAASA,EAAO,IAC5D,CACF,EACAwW,EAAO,UAAU,WAAa,SAASxW,EAAQ,CAC7C,IAAIqX,EAAK,KAAK,IACd,OAAKA,EAAG,KAAK,CAAE,IAAK,IAAK,OAAQ,EAAK,CAAC,IACrCrX,EAAO,KAAOqX,EAAG,KAAK,CAAE,GAAI,MAAO,CAAC,EAAE,IACtCA,EAAG,KAAK,CAAE,IAAK,GAAI,CAAC,GAEtBrX,EAAO,KAAO,SAASqX,EAAG,KAAK,CAAE,GAAI,QAAS,CAAC,EAAE,GAAG,EACpDA,EAAG,KAAK,CAAE,IAAK,GAAI,CAAC,EACbrX,CACT,EACAwW,EAAO,UAAU,SAAW,SAASxW,EAAQ,CAC3C,IAAIqX,EAAK,KAAK,IACVS,EAAS,KAAK,cACdC,EAAeV,EAAG,KAAK,CAAE,IAAK,IAAK,OAAAS,CAAO,CAAC,IAAM,OACrD,OAAA9X,EAAO,OAAS,KAAK,UAAU,EAC/BqX,EAAG,KAAK,CAAE,IAAK,IAAK,OAAQU,CAAa,CAAC,EACnC/X,CACT,EACAwW,EAAO,UAAU,WAAa,SAASxW,EAAQ,CAC7C,IAAIqX,EAAK,KAAK,IACVS,EAAS,KAAK,cACdC,EAAeV,EAAG,KAAK,CAAE,IAAK,IAAK,OAAAS,CAAO,CAAC,IAAM,OACrD,OAAA9X,EAAO,MAAQ,KAAK,UAAU,EAC9BqX,EAAG,KAAK,CAAE,IAAK,IAAK,OAAQU,CAAa,CAAC,EACnC/X,CACT,EACAwW,EAAO,UAAU,UAAY,SAASxW,EAAQ4X,EAAK,CACjD,IAAIP,EAAK,KAAK,IACTA,EAAG,KAAK,CAAE,IAAK,IAAK,OAAQ,EAAK,CAAC,IACrCrX,EAAO,KAAOqX,EAAG,KAAK,CAAE,GAAI,MAAO,CAAC,EAAE,IACtCA,EAAG,KAAK,CAAE,IAAK,GAAI,CAAC,GAEtBrX,EAAO,QAAU,CAAC,EAClB,GACEA,EAAO,QAAQ,KAAKqX,EAAG,KAAK,EAAE,GAAG,QAC1B,CAACA,EAAG,KAAK,CAAE,IAAK,IAAK,OAAQ,EAAK,CAAC,GAAKA,EAAG,KAAK,CAAE,IAAK,GAAI,CAAC,GACrE,OAAIO,GAAOP,EAAG,KAAK,CAAE,IAAK,IAAK,OAAQ,EAAK,CAAC,IAC3CrX,EAAO,QAAUqX,EAAG,KAAK,EAAE,IAC3BA,EAAG,KAAK,CAAE,IAAK,GAAI,CAAC,GAEfrX,CACT,EACAwW,EAAO,UAAU,WAAa,UAAW,CACvC,IAAIa,EAAK,KAAK,IACV5d,EAAM,CAAC,EACX4d,EAAG,KAAK,CAAE,IAAK,GAAI,CAAC,EACpB,GACE5d,EAAI,KAAK,KAAK,UAAU,CAAC,QAClB,CAAC4d,EAAG,KAAK,CAAE,IAAK,IAAK,OAAQ,EAAK,CAAC,GAAKA,EAAG,KAAK,CAAE,IAAK,GAAI,CAAC,GACrE,OAAO5d,CACT,EACA+c,EAAO,UAAU,YAAc,SAASxW,EAAQ,CAC9C,IAAIqX,EAAK,KAAK,IAMd,IALKA,EAAG,KAAK,CAAE,IAAK,IAAK,OAAQ,EAAK,CAAC,IACrCrX,EAAO,KAAOqX,EAAG,KAAK,CAAE,GAAI,MAAO,CAAC,EAAE,IACtCA,EAAG,KAAK,CAAE,IAAK,GAAI,CAAC,GAEtBrX,EAAO,OAAS,CAAC,EACV,CAACqX,EAAG,KAAK,CAAE,IAAK,IAAK,OAAQ,EAAK,CAAC,GACxCrX,EAAO,OAAO,KAAK,KAAK,WAAW,CAAC,EACpCqX,EAAG,KAAK,CAAE,IAAK,GAAI,CAAC,EAEtB,OAAOrX,CACT,EACAwW,EAAO,UAAU,aAAe,SAASd,EAASsC,EAAc,CAI9D,QAHIX,EAAK,KAAK,IACVG,EAAa,EACb7d,EAAM0d,EAAG,IACNA,EAAG,KAAK,CAAE,IAAK,SAAU,OAAQ,EAAK,CAAC,GAAG,CAC/C,GAAI,CAACG,GAAcQ,GAAgBX,EAAG,KAAK,CAAE,IAAK,IAAK,OAAQ,EAAK,CAAC,EAAG,CACtEA,EAAG,IAAM1d,EACT,MACF,CACA,IAAIic,GAAOyB,EAAG,KAAK,CAAE,GAAI,MAAO,CAAC,EAAE,IAC/BY,EAAQ,KAAK,MAAMZ,EAAG,KAAK,CAAE,GAAI,QAAS,CAAC,EAAE,GAAG,EACpDA,EAAG,KAAK,CAAE,IAAK,GAAI,CAAC,EACpB3B,EAAQ,KAAK,CAAE,KAAAE,GAAM,KAAMqC,CAAM,CAAC,EAClCT,GACF,CACA,OAAOA,CACT,EACA,SAASJ,EAAU/d,EAAK,CACtB,KAAK,KAAOA,EACZ,KAAK,IAAM,CACb,CACA+d,EAAU,UAAU,KAAO,SAASne,EAAM,CACxC,IAAI0e,EAAQ,CAAE,IAAK,KAAK,IAAK,GAAI,OAAQ,IAAK,MAAO,EACjDJ,EAAU,KAAK,MAAMte,GAAQA,EAAK,WAAW,EACjD,GAAI,OAAOse,GAAW,SACpBI,EAAM,GAAK,UACXA,EAAM,IAAMJ,MACP,CACL,IAAI5d,EAAM,KAAK,IACXN,EAAM,KAAK,KACX+B,GAAI/B,EAAI,OAAOM,CAAG,EACtB,GAAI,CAACyB,GACHuc,EAAM,GAAK,gBAEP1e,GAAQA,EAAK,KAAO,QACtB0e,EAAM,GAAK,OACX,KAAK,IAAM,KAAK,WAAW,GAClBvc,KAAM,KACfuc,EAAM,GAAK,SACX,KAAK,IAAM,KAAK,aAAa,GACpB,QAAQ,KAAKvc,EAAC,GACvBuc,EAAM,GAAK,SACX,KAAK,IAAM,KAAK,OAAO,OAAO,GACrB,cAAc,KAAKvc,EAAC,GAC7Buc,EAAM,GAAK,OACX,KAAK,IAAM,KAAK,OAAO,gBAAgB,IAEvCA,EAAM,GAAK,WACX,KAAK,IAAMhe,EAAM,GAEnBge,EAAM,IAAMte,EAAI,MAAMM,EAAK,KAAK,GAAG,EAC/Bge,EAAM,KAAO,OACf,GAAI,CACFA,EAAM,IAAM,KAAK,MAAMA,EAAM,GAAG,CAClC,MAAe,CACb,MAAM,KAAK,MAAM,eAAgBA,CAAK,CACxC,MACSA,EAAM,KAAO,SACtBA,EAAM,IAAMA,EAAM,IAAI,QAAQ,KAAM,EAAE,EAG5C,CACA,IAAIhX,EAMJ,GALI1H,GAAQA,EAAK,IAAMA,EAAK,KAAO0e,EAAM,GACvChX,EAAM,KAAK,MAAMtI,EAAG,iBAAkBY,EAAK,EAAE,EAAG0e,CAAK,EAC5C1e,GAAQA,EAAK,KAAOA,EAAK,MAAQ0e,EAAM,MAChDhX,EAAM,KAAK,MAAMtI,EAAG,oBAAqBY,EAAK,GAAG,EAAG0e,CAAK,GAEtDhX,EAEE,GAAI1H,GAAQA,EAAK,OAAQ,CAC9B,KAAK,IAAM0e,EAAM,IACjB,MACF,KACE,OAAMhX,MALN,QAAOgX,CAOX,EACAP,EAAU,UAAU,MAAQ,SAASc,EAAQC,EAAS,CACpD,IAAIC,EAAU,OAAOD,GAAW,SAC5Bxe,EAAMye,EAAUD,EAAQ,IAAMA,EAC9B9e,EAAM,KAAK,KACXgf,GAAU,EACVC,EAAY,EACZ1e,EACJ,IAAKA,EAAI,EAAGA,EAAID,EAAKC,IACfP,EAAI,OAAOO,CAAC,IAAM;AAAA,IACpBye,KACAC,EAAY1e,GAGhB,IAAIqO,EAAMmQ,EAAU/f,EAAG,uBAAwB8f,EAASD,CAAM,EAAIA,EAC9DvX,EAAM,IAAI,MAAMsH,CAAG,EACvB,OAAAtH,EAAI,MAAQyX,EAAUD,EAAU,OAChCxX,EAAI,QAAU0X,GACd1X,EAAI,OAAShH,EAAM2e,EACZ3X,CACT,EACAyW,EAAU,UAAU,MAAQ,SAASmB,EAAa,CAIhD,QAHIlf,EAAM,KAAK,KACXmf,EAAY,GACZ7e,EAAKyB,GACDA,EAAI/B,EAAI,OAAO,KAAK,GAAG,IAAM,KAAK,KAAK+B,CAAC,GAC9C,KAAK,MAGP,GADAzB,EAAM,KAAK,IACPyB,IAAM,IACR,OAAQ/B,EAAI,OAAO,KAAK,IAAM,CAAC,EAAG,CAChC,IAAK,IAEH,IADA,KAAK,KAAO,GACJ+B,EAAI/B,EAAI,OAAO,KAAK,GAAG,IAAM+B,IAAM;AAAA,GACzC,KAAK,MAEP,OAAO,KAAK,MAAMmd,CAAW,EAC/B,IAAK,IAKH,IAJA,KAAK,KAAO,EACRlf,EAAI,OAAO,KAAK,GAAG,IAAM,MAC3Bmf,EAAY,IAEPpd,EAAI/B,EAAI,OAAO,KAAK,KAAK,GAC9B,GAAI+B,IAAM,KAAO/B,EAAI,OAAO,KAAK,GAAG,IAAM,IAExC,OADA,KAAK,MACDmf,GAAaD,EACRE,EAAepf,EAAI,MAAMM,EAAM,EAAG,KAAK,IAAM,CAAC,CAAC,EAEjD,KAAK,MAAM4e,CAAW,EAGjC,MAAM,KAAK,MAAM,uBAAwB5e,CAAG,CAChD,CAEJ,EACAyd,EAAU,UAAU,OAAS,SAASsB,EAAK,CAGzC,QAFI/e,EAAM,KAAK,IACXN,EAAM,KAAK,KACRqf,EAAI,KAAKrf,EAAI,OAAOM,CAAG,CAAC,GAC7BA,IAEF,OAAOA,CACT,EACAyd,EAAU,UAAU,aAAe,UAAW,CAI5C,QAHIzd,EAAM,KAAK,IAAM,EACjBN,EAAM,KAAK,KACX+B,EACGA,EAAI/B,EAAI,OAAOM,CAAG,GAAG,CAC1B,GAAIyB,IAAM,IACR,OAAOzB,EAAM,EAEXyB,IAAM,KACRzB,GAAO,EAEPA,GAEJ,CACA,MAAM,KAAK,MAAM,sBAAuBA,EAAM,CAAC,CACjD,EACAyd,EAAU,UAAU,WAAa,UAAW,CAC1C,IAAIzd,EAAM+E,EAAM,QAAQ,KAAK,KAAM,KAAK,GAAG,EAC3C,GAAI/E,EAAM,EACR,MAAM,KAAK,MAAM,eAAgBA,CAAG,EAEtC,OAAOA,CACT,EACA,SAAS8e,EAAepf,EAAK,CAI3B,QAHIsf,EAAQtf,EAAI,QAAQ,mBAAoB,EAAE,EAAE,MAAM;AAAA,CAAI,EAAE,IAAI,SAASuf,EAAMhf,EAAG,CAChF,OAAOA,EAAIgf,EAAK,QAAQ,YAAa,EAAE,EAAIA,CAC7C,CAAC,EACMD,EAAM,QAAU,CAACA,EAAM,CAAC,GAC7BA,EAAM,MAAM,EAEd,KAAOA,EAAM,QAAU,CAACA,EAAMA,EAAM,OAAS,CAAC,GAC5CA,EAAM,IAAI,EAEZ,OAAOA,EAAM,KAAK;AAAA,CAAI,CACxB,CACA,SAAStC,GAAkBF,EAAU,CACnC,GAAIA,EAAS,UACX,OAAOA,EAAS,UAElB,IAAIjb,EAAQ,gBAAgB,KAAKib,EAAS,QAAQ,EAClD,OAAOjb,EAAQA,EAAM,CAAC,EAAI,MAC5B,CACAxD,EAAO,QAAU,CACf,UAAA0f,EACA,iBAAAnB,EACA,KAAAgB,EACA,aAAcT,EAAO,aACrB,WAAYA,EAAO,UACrB,CACF,CACF,CAAC,EAGGqC,GAAcviB,GAAW,CAC3B,iCAAiCmB,EAASC,EAAQ,CAChD,aACA,IAAIohB,EAAavP,GAAmB,EAChCwP,EAAWlN,GAAiB,EAC5BmN,EAAQlD,GAAc,EACtBjV,EAAQpC,GAAc,EACtBC,EAAQlH,GAAc,EACtBG,EAASC,GACT0d,EAAKC,GACLxd,EAAOC,GACPC,EAAUN,EAAO,OACrB,SAASshB,EAAO7W,EAAKnJ,EAAM,CACzB,IAAIigB,EAAmBF,EAAM,KAAK5W,CAAG,EACrC,OAAO8W,EAAiB,SAAWH,EAAS,QAAQ,YAAYG,EAAkBjgB,CAAI,EAAI4H,EAAM,KAAK,UAAUqY,EAAkBjgB,CAAI,CACvI,CACA,SAASkgB,EAAkB/V,EAAMnK,EAAM,CACrCA,EAAOA,GAAQ,CAAC,EAChB,IAAImgB,EAASngB,EAAK,SAAW,OAAS,GAAO,CAAC,CAACA,EAAK,OAChDV,EAAO,KAAK,IAAIU,EAAK,MAAQ,KAAM,CAAC,EACpCsE,GAAMmB,EAAM,UAAUnG,CAAI,EAC1B8gB,EAAK/D,EAAG,SAASlS,EAAM,GAAG,EAC9B,GAAI,CACF,IAAIzJ,EAAM2b,EAAG,SAAS+D,EAAI9b,GAAK,EAAGhF,CAAI,EACtC,GAAIoB,EAAM,GAAK,CAACmf,EAAW,YAAY,OAAOvb,GAAI,MAAM,EAAG,CAAC,CAAC,EAC3D,OAAO,KAET,IAAIS,EAAM,IAAIU,EAAM,IAAInB,EAAG,EACvBiN,EAAS,KACb,GACEA,EAASsO,EAAW,YAAY,MAAM9a,CAAG,QAClC,CAACsb,GAAQ,GAClB,GAAIF,IAAW,GAAO,CACpB,IAAI9N,EAAOd,EAAO,KAClBc,EAAK,aAAa,EAAI,KAAK,MAAMA,EAAK,aAAa,EAAE,SAAS,CAAC,EAC3DA,EAAK,YAAY,IAAM,SACzBA,EAAK,YAAY,EAAIA,EAAK,YAAY,EAAE,SAAS,EAErD,CACA,OAAOd,CACT,QAAE,CACA8K,EAAG,UAAU+D,CAAE,CACjB,CACA,SAASC,IAAU,CACjB,GAAItb,EAAI,QAAQ,EACd,MAAO,GAET,IAAIhC,EAAM,EAAIgC,EAAI,IAAI,OAClBsE,EAAO5D,EAAM,UAAU1C,CAAG,EAC9B,OAAAA,EAAMsZ,EAAG,SAAS+D,EAAI/W,EAAM,EAAGtG,CAAG,EAClCgC,EAAI,IAAM/F,EAAQ,OAAO,CAAC+F,EAAI,IAAKsE,CAAI,CAAC,EACxCtE,EAAI,IAAM,EACH,EACT,CACF,CACA,SAASub,GAAkBnW,EAAMnK,EAAM,CACrC,OAAOqc,EAAG,iBAAiBlS,CAAI,EAAE,KAAK,IAAI0V,EAAW,QAAQ,aAAa7f,CAAI,CAAC,CACjF,CACA,SAASugB,EAAkBpW,EAAMpD,EAAQ/G,EAAM,CAC7C,IAAI0W,EAAU,IAAImJ,EAAW,QAAQ,aAAa9Y,EAAQ/G,CAAI,EAC9D,OAAA0W,EAAQ,KAAK2F,EAAG,kBAAkBlS,EAAM,CAAE,gBAAiB,QAAS,CAAC,CAAC,EAC/DuM,CACT,CACAjY,EAAO,QAAU,CACf,QAASqhB,EAAS,QAClB,KAAMlY,EAAM,KACZ,iBAAkBmY,EAAM,iBACxB,kBAAAO,GACA,kBAAAC,EACA,iBAAkBT,EAAS,iBAC3B,kBAAAI,EACA,MAAOF,EACP,aAAcD,EAAM,aACpB,WAAYA,EAAM,WAClB,QAASF,EAAW,QACpB,MAAOjY,EAAM,SAEb,SAAUkY,EAAS,QACnB,SAAUhhB,EAAK,UACbihB,EAAM,iBACN,gCACF,EACA,QAASjhB,EAAK,UACZ8I,EAAM,KAAK,SACX,4BACF,EACA,MAAO9I,EAAK,UACV8I,EAAM,KAAK,SACX,6BACF,CACF,CACF,CACF,CAAC,EAGG4Y,GAAI,mBACJC,GAAI,eACJC,GAAI,KACJC,GAAI,IACJC,GAAI,mBACJC,GAAI,2BACJC,GAAI,kBACJC,GAAI,mBACJC,GAAI,CAAC,cAAe,kBAAmB,eAAgB,UAAU,EACjEC,GAAI,uBACJC,GAAI,aACJC,GAAI,OACJC,GAAI,gBACJC,GAAI,eACJC,GAAI,iBACJC,GAAI,OACJC,GAAI,gBACJC,GAAI,yBACJC,GAAK,GAAGD,EAAC,yCACTE,GAAK,GAAGF,EAAC,6CACTG,GAAK,GAAGH,EAAC,sCACTI,GAAK,GAAGJ,EAAC,wCACTK,GAAI,GAAGL,EAAC,iCACRM,GAAI,GAAGN,EAAC,sCACRO,GAAI,GAAGP,EAAC,kCACRQ,GAAI,GAAGR,EAAC,8DACRS,GAAI,GAAGT,EAAC,kCACRU,GAAI,GAAGV,EAAC,0BACRW,GAAI,GAAGX,EAAC,qCACRY,GAAI,GAAGZ,EAAC,6BACRa,GAAI,OAAO,aAAe,KAAM,QAAO,aAAa,GAAG,WACvDC,GAAI,OAAO,aAAe,KAAM,QAAO,aAAa,GAAG,WAC3D,OAAOD,GAAI,KAAO,OAAOC,GAAI,KAAO,QAAQ,MAAM,iKAAiK,EACnN,IAAIC,GAAK,CAAE,SAAU,EAAK,EACtBC,GAAMC,GAAM,IAAIA,EAAE,WAAW,CAAC,EAAE,SAAS,EAAE,EAAE,YAAY,CAAC,GAC1DC,GAAKD,GAAM,mBAAmBA,CAAC,EAAE,QAAQ,WAAYD,EAAE,EACvDG,GAAKF,GAAMC,GAAED,CAAC,EAAE,QAAQ,OAAQ,GAAG,EACnCG,GAAI,KAAM,CACZ,YAAY,CAAE,YAAaC,EAAG,gBAAiB7Z,EAAG,SAAU8Z,EAAG,WAAYve,EAAG,OAAQiJ,EAAI,OAAQ,sBAAuB9M,EAAI,QAAS,oBAAqBwC,EAAI,OAAQ,OAAQhB,EAAI,MAAO,EAAG,CAC3L,KAAK,cAAgB,IAAM,KAAK,WAAY,KAAK,cAAiBxC,GAAM,CACtE,KAAK,WAAaA,CACpB,EAAG,KAAK,UAAY,IAAM,KAAK,OAAQ,KAAK,UAAaA,GAAM,CAC7D,KAAK,OAASA,CAChB,EAAG,KAAK,YAAc,IAAM,KAAK,SAAU,KAAK,YAAeA,GAAM,CACnE,KAAK,SAAWA,CAClB,EAAG,KAAK,yBAA2B,IAAM,KAAK,sBAAuB,KAAK,yBAA4BA,GAAM,CAC1G,KAAK,sBAAwBA,CAC/B,EAAG,KAAK,aAAgBA,GAAMqjB,GAAErjB,CAAC,EAAG,KAAK,SAAW,KAAO,CAAE,YAAa,KAAK,YAAa,gBAAiB,KAAK,gBAAiB,OAAQ,KAAK,OAAQ,OAAQ,KAAK,WAAY,SAAU,KAAK,SAAU,sBAAuB,KAAK,sBAAuB,oBAAqB,KAAK,oBAAqB,OAAQ,KAAK,MAAO,GAAI,KAAK,SAAYA,GAAM,CACzV,KAAK,2BAA2BA,EAAE,YAAaA,EAAE,gBAAiBA,EAAE,WAAYA,EAAE,QAAQ,EAAG,KAAK,YAAcA,EAAE,YAAa,KAAK,gBAAkBA,EAAE,gBAAiB,KAAK,OAASA,EAAE,QAAU,OAAQ,KAAK,WAAaA,EAAE,WAAY,KAAK,SAAWA,EAAE,SAAU,KAAK,sBAAwBA,EAAE,uBAAyB,QAAS,KAAK,oBAAsBA,EAAE,oBAAqB,KAAK,OAASA,EAAE,MAC5Y,EAAG,KAAK,2BAA2BmjB,EAAG7Z,EAAG8Z,EAAGve,CAAC,EAAG,KAAK,YAAcse,EAAG,KAAK,gBAAkB7Z,EAAG,KAAK,SAAW8Z,EAAG,KAAK,WAAave,EAAG,KAAK,OAASiJ,EAAG,KAAK,sBAAwB9M,EAAG,KAAK,oBAAsBwC,EAAG,KAAK,OAAShB,CACvO,CACA,2BAA2B2gB,EAAG7Z,EAAG8Z,EAAGve,EAAG,CACrC,GAAI,OAAOse,GAAK,UAAYA,EAAE,KAAK,EAAE,SAAW,EAAG,MAAM,IAAI,UAAUpB,EAAE,EACzE,GAAI,OAAOzY,GAAK,UAAYA,EAAE,KAAK,EAAE,SAAW,EAAG,MAAM,IAAI,UAAU0Y,EAAE,EACzE,GAAI,OAAOoB,GAAK,UAAYA,EAAE,KAAK,EAAE,SAAW,EAAG,MAAM,IAAI,UAAUnB,EAAE,EACzE,GAAI,OAAOpd,GAAK,UAAYA,EAAE,KAAK,EAAE,SAAW,EAAG,MAAM,IAAI,UAAUqd,EAAE,CAC3E,CACA,qBAAqBiB,EAAG,CACtB,GAAIA,IAAM,OAASA,IAAM,OAAQ,MAAM,KAAK,KAAK,QAAS,GAAGrB,EAAC,mCAAmC,EAAG,IAAI,MAAM,mCAAmC,CACnJ,CACA,UAAUqB,EAAG,CACX,GAAI,OAAOA,GAAK,UAAYA,EAAE,KAAK,EAAE,SAAW,EAAG,MAAM,KAAK,KAAK,QAAShB,EAAC,EAAG,IAAI,UAAUA,EAAC,CACjG,CACA,gBAAgBgB,EAAG,CACjB,GAAI,OAAOA,GAAK,UAAYA,EAAE,KAAK,EAAE,SAAW,EAAG,MAAM,KAAK,KAAK,QAAST,EAAC,EAAG,IAAI,UAAUA,EAAC,CACjG,CACA,aAAaS,EAAG,CACd,GAAI,OAAOA,GAAK,SAAU,MAAM,KAAK,KAAK,QAASX,EAAC,EAAG,IAAI,UAAUA,EAAC,CACxE,CACA,cAAcW,EAAG,CACf,GAAI,OAAOA,GAAK,UAAYA,GAAK,EAAG,MAAM,KAAK,KAAK,QAASV,EAAC,EAAG,IAAI,UAAUA,EAAC,CAClF,CACA,WAAWU,EAAG,CACZ,GAAI,OAAOA,GAAK,SAAU,MAAM,KAAK,KAAK,QAAS,GAAGrB,EAAC,wBAAwB,EAAG,IAAI,UAAU,GAAGA,EAAC,wBAAwB,CAC9H,CACA,KAAKqB,EAAG7Z,EAAG8Z,EAAI,CAAC,EAAG,CACjB,GAAI,KAAK,QAAU,OAAO,KAAK,OAAOD,CAAC,GAAK,WAAY,CACtD,IAAIte,EAAKrB,GAAM,OAAOA,GAAK,UAAYA,IAAM,KAAOA,EAAI,OAAO,KAAKA,CAAC,EAAE,OAAO,CAAChB,EAAGxC,KAAOqhB,GAAE,SAASrhB,EAAE,YAAY,CAAC,EAAIwC,EAAExC,CAAC,EAAI,aAAe,OAAOwD,EAAExD,CAAC,GAAK,UAAYwD,EAAExD,CAAC,IAAM,KAAOwC,EAAExC,CAAC,EAAI6E,EAAErB,EAAExD,CAAC,CAAC,EAAIwC,EAAExC,CAAC,EAAIwD,EAAExD,CAAC,EAAGwC,GAAI,MAAM,QAAQgB,CAAC,EAAI,CAAC,EAAI,CAAC,CAAC,EAAGsK,EAAIjJ,EAAEue,CAAC,EAAGpiB,EAAI,CAAE,UAA4B,IAAI,KAAK,EAAG,YAAY,EAAG,MAAOmiB,EAAG,QAAS7Z,EAAG,GAAGwE,EAAG,QAASjJ,EAAE,CAAE,WAAY,KAAK,WAAY,OAAQ,KAAK,OAAQ,SAAU,KAAK,SAAU,YAAa,KAAK,YAAc,GAAG,KAAK,YAAY,UAAU,EAAG,CAAC,CAAC,MAAQ,MAAO,CAAC,CAAE,EACvgB,KAAK,OAAOse,CAAC,EAAEniB,CAAC,CAClB,CACF,CACA,MAAM,iBAAiBmiB,EAAG,CACxB,KAAK,UAAUA,CAAC,EAChB,IAAI7Z,EAAI,CAAE,CAACgY,EAAC,EAAGL,EAAE,EAAGmC,EAAIH,GAAEE,CAAC,EAAG,CAAE,IAAKte,EAAG,QAASiJ,CAAE,EAAI,MAAM,KAAK,MAAM,OAAQsV,EAAG,CAAC,EAAG9Z,EAAG,EAAE,EAAG9F,GAAK,MAAM,KAAK,aAAaqB,EAAG,OAAQiJ,CAAC,GAAG,QAAQ,IAAI6T,EAAC,EACxJ,OAAOne,EAAI,SAASA,EAAG,EAAE,EAAI,CAC/B,CACA,MAAM,cAAe,CACnB,IAAI2f,EAAI,CAAE,CAAC7B,EAAC,EAAGL,EAAE,EAAG,CAAE,IAAK3X,EAAG,QAAS8Z,CAAE,EAAI,MAAM,KAAK,MAAM,OAAQ,GAAI,CAAC,EAAGD,EAAG,EAAE,EAAGte,EAAI,MAAM,KAAK,aAAayE,EAAG,OAAQ8Z,CAAC,EAC9H,MAAO,CAAC,EAAEve,EAAE,IAAMA,EAAE,SAAW,IACjC,CACA,MAAM,WAAWse,EAAG7Z,EAAI,CAAC,EAAG,CAC1B,KAAK,UAAU6Z,CAAC,EAChB,GAAI,CAAE,aAAcC,EAAG,mBAAoBve,CAAE,EAAI,KAAK,iBAAiByE,CAAC,EAAGwE,EAAI,CAAE,CAACwT,EAAC,EAAGL,GAAG,GAAGpc,CAAE,EAAG7D,EAAIiiB,GAAEE,CAAC,EAAG,CAAE,IAAK3f,EAAG,QAAShB,CAAE,EAAI,MAAM,KAAK,MAAM,OAAQxB,EAAGoiB,EAAGtV,EAAG,EAAE,EACxK,GAAI,CACF,IAAI9N,EAAI,MAAM,KAAK,aAAawD,EAAG,OAAQhB,EAAG,GAAI,CAAC,IAAK,IAAK,IAAK,GAAG,CAAC,EACtE,OAAOxC,EAAE,SAAW,IAAM,GAAQA,EAAE,SAAW,KAAOA,EAAE,SAAW,IAAM,KAAOA,EAAE,IAAMA,EAAE,SAAW,IAAM,IAAQ,KAAK,qBAAqBA,CAAC,EAAG,GACnJ,OAASA,EAAG,CACV,IAAIiB,EAAIjB,aAAa,MAAQA,EAAE,QAAU,OAAOA,CAAC,EACjD,MAAM,KAAK,KAAK,QAAS,GAAG8hB,EAAC,mCAAmC7gB,CAAC,EAAE,EAAG,IAAI,MAAM,GAAG6gB,EAAC,mCAAmC7gB,CAAC,EAAE,CAC5H,CACF,CACA,MAAM,MAAMkiB,EAAG7Z,EAAG8Z,EAAGve,EAAGiJ,EAAG,CACzB,IAAI9M,EAAqB,IAAI,KAAK,EAAG,YAAY,EAAE,QAAQ,gBAAiB,EAAE,EAAGwC,EAAI,OAAO8F,GAAK,UAAYA,EAAE,OAAS,EAAI,IAAI,IAAIA,EAAG,KAAK,QAAQ,EAAI,IAAI,IAAI,KAAK,QAAQ,EAC7K9F,EAAE,SAAW,IAAI,UAAU,KAAK,UAAU,CAAC,GAAGA,EAAE,QAAQ,GAAIqB,EAAEyc,EAAC,EAAIxT,EAAI,MAAMwV,GAAExV,CAAC,EAAImT,GAAGpc,EAAE0c,EAAC,EAAIvgB,EAAG6D,EAAE2c,EAAC,EAAIhe,EAAE,KAC1G,IAAIhB,EAAI,KAAK,uBAAuBqC,CAAC,EAAG7E,EAAI,OAAO,KAAK6E,CAAC,EAAE,IAAK0e,IAAMA,GAAE,YAAY,CAAC,EAAE,KAAK,EAAE,KAAK,GAAG,EAAGtiB,EAAI,MAAM,KAAK,uBAAuBkiB,EAAG3f,EAAG4f,EAAG5gB,EAAGxC,EAAG8N,CAAC,EAAG/I,EAAI,MAAM,KAAK,mBAAmB/D,EAAGC,CAAC,EAAGiE,EAAI,MAAM,KAAK,oBAAoBlE,EAAG+D,CAAC,EAAGye,EAAI,KAAK,0BAA0BxiB,EAAGhB,EAAGkF,CAAC,EAC/R,OAAOL,EAAE4c,EAAC,EAAI+B,EAAG,CAAE,IAAKhgB,EAAE,SAAS,EAAG,QAASqB,CAAE,CACnD,CACA,uBAAuBse,EAAG,CACxB,OAAO,OAAO,QAAQA,CAAC,EAAE,IAAI,CAAC,CAAC7Z,EAAG8Z,CAAC,IAAM,GAAG9Z,EAAE,YAAY,CAAC,IAAI,OAAO8Z,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK;AAAA,CAClG,CACC,CACA,MAAM,uBAAuBD,EAAG7Z,EAAG8Z,EAAGve,EAAGiJ,EAAG9M,EAAG,CAC7C,MAAO,CAACmiB,EAAG7Z,EAAE,SAAU,KAAK,2BAA2B8Z,CAAC,EAAG,GAAGve,CAAC;AAAA,EAChEiJ,EAAG9M,EAAI,MAAMsiB,GAAEtiB,CAAC,EAAIigB,EAAC,EAAE,KAAK;AAAA,CAC9B,CACC,CACA,MAAM,mBAAmBkC,EAAG7Z,EAAG,CAC7B,IAAI8Z,EAAI,CAACD,EAAE,MAAM,EAAG,CAAC,EAAG,KAAK,OAAQpC,GAAGD,EAAC,EAAE,KAAK,GAAG,EACnD,MAAO,CAACD,GAAGsC,EAAGC,EAAG,MAAME,GAAEha,CAAC,CAAC,EAAE,KAAK;AAAA,CACrC,CACC,CACA,MAAM,oBAAoB6Z,EAAG7Z,EAAG,CAC9B,IAAI8Z,EAAI,MAAM,KAAK,iBAAiBD,EAAE,MAAM,EAAG,CAAC,CAAC,EACjD,OAAOM,GAAEL,EAAG9Z,EAAG,KAAK,CACtB,CACA,0BAA0B6Z,EAAG7Z,EAAG8Z,EAAG,CACjC,IAAIve,EAAI,CAACse,EAAE,MAAM,EAAG,CAAC,EAAG,KAAK,OAAQpC,GAAGD,EAAC,EAAE,KAAK,GAAG,EACnD,MAAO,CAAC,GAAGD,EAAC,eAAe,KAAK,WAAW,IAAIhc,CAAC,GAAI,iBAAiByE,CAAC,GAAI,aAAa8Z,CAAC,EAAE,EAAE,KAAK,IAAI,CACvG,CACA,iBAAiBD,EAAG,CAClB,IAAI7Z,EAAI,CAAC,EAAG8Z,EAAI,CAAC,EAAGve,EAAI,CAAC,WAAY,gBAAiB,oBAAqB,qBAAqB,EAChG,OAAS,CAACiJ,EAAG9M,CAAC,IAAK,OAAO,QAAQmiB,CAAC,EAAGte,EAAE,SAASiJ,CAAC,EAAIsV,EAAEtV,CAAC,EAAI9M,EAAIsI,EAAEwE,CAAC,EAAI9M,EACxE,MAAO,CAAE,aAAcsI,EAAG,mBAAoB8Z,CAAE,CAClD,CACA,MAAM,KAAKD,EAAI,IAAK7Z,EAAI,GAAI8Z,EAAI,IAAKve,EAAI,MAAOiJ,EAAI,CAAC,EAAG,CACtD,KAAK,gBAAgBqV,CAAC,EAAG,KAAK,aAAa7Z,CAAC,EAAG,KAAK,cAAc8Z,CAAC,EAAG,KAAK,qBAAqBve,CAAC,EAAG,KAAK,WAAWiJ,CAAC,EAAG,KAAK,KAAK,OAAQ,sBAAsBxE,CAAC,EAAE,EACnK,IAAItI,EAAI,CAAE,YAAaggB,GAAG,WAAY,OAAOoC,CAAC,EAAG,GAAGtV,CAAE,EACtDxE,EAAE,OAAS,IAAMtI,EAAE,OAASsI,GAC5B,IAAI9F,EAAI,CAAE,CAACke,EAAC,EAAGN,GAAG,CAACE,EAAC,EAAGL,EAAE,EAAGze,EAAI2gB,IAAM,IAAMA,EAAIH,GAAEG,CAAC,EAAG,CAAE,IAAKnjB,EAAG,QAASiB,CAAE,EAAI,MAAM,KAAK,MAAM,MAAOuB,EAAGxB,EAAGwC,EAAG,EAAE,EAAGuB,EAAI,GAAG/E,CAAC,IAAI,IAAI,gBAAgBgB,CAAC,CAAC,GAAIkE,EAAI,MAAM,KAAK,aAAaH,EAAG,MAAO9D,CAAC,EAAGuiB,EAAI,MAAMte,EAAE,KAAK,EACtN,GAAIL,IAAM,OAAQ,CAChB,IAAI6e,EAAIxe,EAAE,QAAQ,IAAIyc,EAAC,EAAGgC,EAAIze,EAAE,QAAQ,IAAI2c,EAAC,EAAG+B,EAAI1e,EAAE,QAAQ,IAAI0c,EAAC,EACnE,MAAO,CAAE,KAAM8B,EAAI,CAACA,EAAI,OAAQ,MAAOC,EAAI,IAAI,KAAKA,CAAC,EAAI,OAAQ,KAAMC,GAAK,MAAO,CACrF,CACA,IAAIL,GAAIM,GAAEL,CAAC,EAAGM,EAAIP,GAAE,kBAAoBA,GAAE,OAASA,GACnD,OAAOO,EAAE,UAAYA,CACvB,CACA,MAAM,qBAAqBX,EAAI,IAAK7Z,EAAI,GAAI8Z,EAAI,MAAOve,EAAI,CAAC,EAAG,CAC7D,IAAIiJ,EAAG9M,EAAGwC,EACV,KAAK,gBAAgB2f,CAAC,EAAG,KAAK,aAAa7Z,CAAC,EAAG,KAAK,qBAAqB8Z,CAAC,EAAG,KAAK,WAAWve,CAAC,EAAG,KAAK,KAAK,OAAQ,gCAAgCyE,CAAC,EAAE,EACtJ,IAAI9G,EAAI,CAAE,QAAS,GAAI,GAAGqC,CAAE,EAAG7E,EAAI,CAAE,CAAC0hB,EAAC,EAAGN,GAAG,CAACE,EAAC,EAAGL,EAAE,EAAGhgB,EAAIkiB,IAAM,IAAMA,EAAIH,GAAEG,CAAC,EAAG,CAAE,IAAKpe,EAAG,QAASG,CAAE,EAAI,MAAM,KAAK,MAAM,MAAOjE,EAAGuB,EAAGxC,EAAG,EAAE,EAAGwjB,EAAI,GAAGze,CAAC,IAAI,IAAI,gBAAgBvC,CAAC,CAAC,GAAI+gB,GAAI,MAAM,KAAK,aAAaC,EAAG,MAAOte,CAAC,EAAG4e,EAAI,MAAMP,GAAE,KAAK,EACjP,GAAIH,IAAM,OAAQ,MAAO,CAAE,KAAM,GAAGtV,EAAIyV,GAAE,QAAQ,IAAI5B,EAAC,KAAO,MAAQ7T,IAAM,OAASA,EAAI,KAAM,MAAO,IAAI,MAAM9M,EAAIuiB,GAAE,QAAQ,IAAI1B,EAAC,KAAO,MAAQ7gB,IAAM,OAASA,EAAI,EAAE,EAAG,MAAOwC,EAAI+f,GAAE,QAAQ,IAAI3B,EAAC,KAAO,MAAQpe,IAAM,OAASA,EAAI,EAAG,EACzO,IAAIkgB,EAAIG,GAAEC,CAAC,EAAGH,EAAID,EAAE,4BAA8BA,EAAE,OAASA,EAC7D,OAAOC,EAAE,SAAWA,CACtB,CACA,MAAM,IAAIR,EAAG7Z,EAAI,CAAC,EAAG,CACnB,KAAK,UAAU6Z,CAAC,EAAG,KAAK,KAAK,OAAQ,kBAAkBA,CAAC,EAAE,EAC1D,GAAI,CAAE,aAAcC,EAAG,mBAAoBve,CAAE,EAAI,KAAK,iBAAiByE,CAAC,EAAGwE,EAAI,CAAE,CAAC4T,EAAC,EAAGN,GAAG,CAACE,EAAC,EAAGL,GAAG,GAAGpc,CAAE,EAAG7D,EAAIiiB,GAAEE,CAAC,EAAG,CAAE,IAAK3f,EAAG,QAAShB,CAAE,EAAI,MAAM,KAAK,MAAM,MAAOxB,EAAGoiB,EAAGtV,EAAG,EAAE,EAAG9N,EAAI,MAAM,KAAK,aAAawD,EAAG,MAAOhB,EAAG,GAAI,CAAC,IAAK,IAAK,IAAK,GAAG,CAAC,EACnP,GAAIxC,EAAE,SAAW,KAAOA,EAAE,SAAW,KAAOA,EAAE,SAAW,IAAK,OAAO,KAAK,KAAK,QAAS,iCAAiCA,EAAE,MAAM,EAAE,EAAG,KACtI,GAAI,CAACA,EAAE,GAAI,MAAM,KAAK,KAAK,QAAS,iCAAiCA,EAAE,MAAM,EAAE,EAAG,IAAI,MAAM,iCAAiCA,EAAE,MAAM,EAAE,EACvI,OAAOA,EAAE,KAAK,CAChB,CACA,MAAM,kBAAkBmjB,EAAG7Z,EAAI,CAAC,EAAG,CACjC,KAAK,UAAU6Z,CAAC,EAAG,KAAK,KAAK,OAAQ,kBAAkBA,CAAC,EAAE,EAC1D,GAAI,CAAE,aAAcC,EAAG,mBAAoBve,CAAE,EAAI,KAAK,iBAAiByE,CAAC,EAAGwE,EAAI,CAAE,CAAC4T,EAAC,EAAGN,GAAG,CAACE,EAAC,EAAGL,GAAG,GAAGpc,CAAE,EAAG7D,EAAIiiB,GAAEE,CAAC,EAAG,CAAE,IAAK3f,EAAG,QAAShB,CAAE,EAAI,MAAM,KAAK,MAAM,MAAOxB,EAAGoiB,EAAGtV,EAAG,EAAE,EAC/K,GAAI,CACF,IAAI9N,EAAI,MAAM,KAAK,aAAawD,EAAG,MAAOhB,EAAG,GAAI,CAAC,IAAK,IAAK,IAAK,GAAG,CAAC,EACrE,GAAIxC,EAAE,SAAW,KAAOA,EAAE,SAAW,KAAOA,EAAE,SAAW,IAAK,OAAO,KAAK,KAAK,QAAS,iCAAiCA,EAAE,MAAM,EAAE,EAAG,CAAE,KAAM,KAAM,KAAM,IAAK,EAC/J,GAAI,CAACA,EAAE,GAAI,MAAM,KAAK,KAAK,QAAS,iCAAiCA,EAAE,MAAM,EAAE,EAAG,IAAI,MAAM,iCAAiCA,EAAE,MAAM,EAAE,EACvI,IAAIiB,EAAIjB,EAAE,QAAQ,IAAI,MAAM,EAC5B,GAAI,CAACiB,EAAG,MAAM,IAAI,MAAM,oCAAoC,EAC5D,IAAI8D,EAAI,MAAM/E,EAAE,KAAK,EACrB,MAAO,CAAE,KAAMqjB,GAAEpiB,CAAC,EAAG,KAAM8D,CAAE,CAC/B,OAAS/E,EAAG,CACV,MAAM,KAAK,KAAK,QAAS,wBAAwBmjB,CAAC,eAAenjB,CAAC,EAAE,EAAGA,CACzE,CACF,CACA,MAAM,QAAQmjB,EAAG7Z,EAAI,CAAC,EAAG,CACvB,KAAK,UAAU6Z,CAAC,EAAG,KAAK,KAAK,OAAQ,uBAAuBA,CAAC,EAAE,EAC/D,GAAI,CAAE,aAAcC,EAAG,mBAAoBve,CAAE,EAAI,KAAK,iBAAiByE,CAAC,EAAGwE,EAAI,CAAE,CAAC4T,EAAC,EAAGN,GAAG,CAACE,EAAC,EAAGL,GAAG,GAAGpc,CAAE,EAAG7D,EAAIiiB,GAAEE,CAAC,EAAG,CAAE,IAAK3f,EAAG,QAAShB,CAAE,EAAI,MAAM,KAAK,MAAM,OAAQxB,EAAGoiB,EAAGtV,EAAG,EAAE,EAAG9N,EAAI,MAAM,KAAK,aAAawD,EAAG,OAAQhB,EAAG,GAAI,CAAC,IAAK,IAAK,GAAG,CAAC,EAChP,GAAI,KAAK,KAAK,OAAQ,oBAAoBxC,EAAE,OAAQA,EAAE,UAAU,EAAE,EAAGA,EAAE,SAAW,KAAOA,EAAE,SAAW,IAAK,OAAO,KAClH,IAAIiB,EAAIjB,EAAE,QAAQ,IAAI,MAAM,EAC5B,GAAI,CAACiB,EAAG,MAAM,KAAK,KAAK,QAAS,oCAAoC,EAAG,IAAI,MAAM,oCAAoC,EACtH,OAAOoiB,GAAEpiB,CAAC,CACZ,CACA,MAAM,YAAYkiB,EAAG7Z,EAAI,GAAM8Z,EAAI,EAAGve,EAAI,KAAK,sBAAuBiJ,EAAI,CAAC,EAAG,CAC5E,KAAK,UAAUqV,CAAC,EAChB,GAAI,CAAE,aAAcniB,EAAG,mBAAoBwC,CAAE,EAAI,KAAK,iBAAiB,CAAE,GAAGsK,CAAE,CAAC,EAAGtL,EAAI,CAAE,CAACkf,EAAC,EAAGN,GAAG,CAACE,EAAC,EAAGL,GAAG,GAAG3X,EAAI,CAAC,EAAI,CAAE,MAAO,SAAS8Z,CAAC,IAAIve,EAAI,CAAC,EAAG,EAAG,GAAGrB,CAAE,EAAGxD,EAAIijB,GAAEE,CAAC,EAAG,CAAE,IAAKliB,EAAG,QAAS8D,CAAE,EAAI,MAAM,KAAK,MAAM,MAAO/E,EAAGgB,EAAGwB,EAAG,EAAE,EAAG0C,EAAI,GAAGjE,CAAC,IAAI,IAAI,gBAAgBD,CAAC,CAAC,GACzQ,OAAO,KAAK,aAAakE,EAAG,MAAOH,CAAC,CACtC,CACA,MAAM,IAAIoe,EAAG7Z,EAAG,CACd,GAAI,KAAK,UAAU6Z,CAAC,EAAG,EAAE7Z,aAAa,QAAU,OAAOA,GAAK,UAAW,MAAM,KAAK,KAAK,QAASiZ,EAAC,EAAG,IAAI,UAAUA,EAAC,EACnH,KAAK,KAAK,OAAQ,oBAAoBY,CAAC,EAAE,EACzC,IAAIC,EAAI,OAAO9Z,GAAK,SAAW,OAAO,WAAWA,CAAC,EAAIA,EAAE,OAAQzE,EAAI,CAAE,CAAC8c,EAAC,EAAGyB,CAAE,EAAGtV,EAAImV,GAAEE,CAAC,EAAG,CAAE,IAAKniB,EAAG,QAASwC,CAAE,EAAI,MAAM,KAAK,MAAM,MAAOsK,EAAG,CAAC,EAAGjJ,EAAGyE,CAAC,EACtJ,OAAO,MAAM,KAAK,aAAatI,EAAG,MAAOwC,EAAG8F,CAAC,CAC/C,CACA,MAAM,qBAAqB6Z,EAAG7Z,EAAI4X,GAAG,CACnC,GAAI,KAAK,UAAUiC,CAAC,EAAG,OAAO7Z,GAAK,SAAU,MAAM,KAAK,KAAK,QAAS,GAAGwY,EAAC,2BAA2B,EAAG,IAAI,UAAU,GAAGA,EAAC,2BAA2B,EACrJ,KAAK,KAAK,OAAQ,0CAA0CqB,CAAC,EAAE,EAC/D,IAAIC,EAAI,CAAE,QAAS,EAAG,EAAGve,EAAI,CAAE,CAAC6c,EAAC,EAAGpY,EAAG,CAACgY,EAAC,EAAGL,EAAE,EAAGnT,EAAImV,GAAEE,CAAC,EAAG,CAAE,IAAKniB,EAAG,QAASwC,CAAE,EAAI,MAAM,KAAK,MAAM,OAAQsK,EAAGsV,EAAGve,EAAG,EAAE,EAAGrC,EAAI,GAAGxB,CAAC,IAAI,IAAI,gBAAgBoiB,CAAC,CAAC,GAAIniB,EAAI,MAAO,MAAM,KAAK,aAAauB,EAAG,OAAQgB,CAAC,GAAG,KAAK,EAAGuB,EAAI8e,GAAE5iB,CAAC,EAClO,GAAI,OAAO8D,GAAK,UAAYA,IAAM,MAAQ,UAAWA,GAAK,OAAOA,EAAE,OAAS,UAAYA,EAAE,QAAU,MAAQ,YAAaA,EAAE,MAAO,CAChI,IAAIG,EAAI,OAAOH,EAAE,MAAM,OAAO,EAC9B,MAAM,KAAK,KAAK,QAAS,GAAG+c,EAAC,qCAAqC5c,CAAC,EAAE,EAAG,IAAI,MAAM,GAAG4c,EAAC,qCAAqC5c,CAAC,EAAE,CAChI,CACA,GAAI,OAAOH,GAAK,UAAYA,IAAM,KAAM,CACtC,GAAI,CAACA,EAAE,+BAAiC,CAACA,EAAE,8BAA8B,SAAU,MAAM,KAAK,KAAK,QAAS,GAAG+c,EAAC,4DAA4D,EAAG,IAAI,MAAM,GAAGA,EAAC,kEAAkE,EAC/P,OAAO/c,EAAE,8BAA8B,QACzC,KAAO,OAAM,KAAK,KAAK,QAAS,GAAG+c,EAAC,+DAA+D,EAAG,IAAI,MAAM,GAAGA,EAAC,+DAA+D,CACrL,CACA,MAAM,WAAWqB,EAAG7Z,EAAG8Z,EAAGve,EAAGiJ,EAAI,CAAC,EAAG,CACnC,KAAK,0BAA0BqV,EAAG7Z,EAAG8Z,EAAGve,EAAGiJ,CAAC,EAC5C,IAAI9M,EAAI,CAAE,SAAUoiB,EAAG,WAAYve,EAAG,GAAGiJ,CAAE,EAAGtK,EAAI,CAAE,CAACme,EAAC,EAAGrY,EAAE,MAAO,EAAG9G,EAAIygB,GAAEE,CAAC,EAAG,CAAE,IAAKnjB,EAAG,QAASiB,CAAE,EAAI,MAAM,KAAK,MAAM,MAAOuB,EAAGxB,EAAGwC,EAAG8F,CAAC,EAAGvE,EAAI,GAAG/E,CAAC,IAAI,IAAI,gBAAgBgB,CAAC,CAAC,GAAIkE,EAAI,MAAM,KAAK,aAAaH,EAAG,MAAO9D,EAAGqI,CAAC,EAAGka,EAAIH,GAAEne,EAAE,QAAQ,IAAI,MAAM,GAAK,EAAE,EACjQ,MAAO,CAAE,WAAYL,EAAG,KAAM2e,CAAE,CAClC,CACA,0BAA0BL,EAAG7Z,EAAG8Z,EAAGve,EAAGiJ,EAAG,CACvC,GAAI,KAAK,UAAUqV,CAAC,EAAG,EAAE7Z,aAAa,QAAU,OAAOA,GAAK,UAAW,MAAM,KAAK,KAAK,QAASiZ,EAAC,EAAG,IAAI,UAAUA,EAAC,EACnH,GAAI,OAAOa,GAAK,UAAYA,EAAE,KAAK,EAAE,SAAW,EAAG,MAAM,KAAK,KAAK,QAAShB,EAAC,EAAG,IAAI,UAAUA,EAAC,EAC/F,GAAI,CAAC,OAAO,UAAUvd,CAAC,GAAKA,GAAK,EAAG,MAAM,KAAK,KAAK,QAAS,GAAGid,EAAC,uCAAuC,EAAG,IAAI,UAAU,GAAGA,EAAC,uCAAuC,EACpK,KAAK,WAAWhU,CAAC,CACnB,CACA,MAAM,wBAAwBqV,EAAG7Z,EAAG8Z,EAAG,CACrC,GAAI,KAAK,UAAUD,CAAC,EAAG,OAAO7Z,GAAK,UAAYA,EAAE,KAAK,EAAE,SAAW,EAAG,MAAM,KAAK,KAAK,QAAS8Y,EAAC,EAAG,IAAI,UAAUA,EAAC,EAClH,GAAI,CAAC,MAAM,QAAQgB,CAAC,GAAKA,EAAE,SAAW,EAAG,MAAM,KAAK,KAAK,QAASf,EAAC,EAAG,IAAI,UAAUA,EAAC,EACrF,GAAI,CAACe,EAAE,MAAOG,GAAM,OAAOA,EAAE,YAAc,UAAY,OAAOA,EAAE,MAAQ,QAAQ,EAAG,MAAM,KAAK,KAAK,QAASjB,EAAC,EAAG,IAAI,UAAUA,EAAC,EAC/H,KAAK,KAAK,OAAQ,6BAA6BhZ,CAAC,eAAe6Z,CAAC,EAAE,EAClE,IAAIte,EAAI,CAAE,SAAUyE,CAAE,EAAGwE,EAAI,KAAK,iCAAiCsV,CAAC,EAAGpiB,EAAI,CAAE,CAAC0gB,EAAC,EAAGP,GAAG,CAACQ,EAAC,EAAG,OAAO,WAAW7T,CAAC,EAAE,SAAS,EAAG,CAACwT,EAAC,EAAG,MAAMgC,GAAExV,CAAC,CAAE,EAAGtK,EAAIyf,GAAEE,CAAC,EAAG,CAAE,IAAK3gB,EAAG,QAASxC,CAAE,EAAI,MAAM,KAAK,MAAM,OAAQwD,EAAGqB,EAAG7D,EAAG8M,CAAC,EAAG7M,EAAI,GAAGuB,CAAC,IAAI,IAAI,gBAAgBqC,CAAC,CAAC,GAAIK,EAAI,MAAO,MAAM,KAAK,aAAajE,EAAG,OAAQjB,EAAG8N,CAAC,GAAG,KAAK,EAAG0V,EAAIK,GAAE3e,CAAC,EACjU,GAAI,OAAOse,GAAK,UAAYA,IAAM,MAAQ,UAAWA,GAAK,OAAOA,EAAE,OAAS,UAAYA,EAAE,QAAU,MAAQ,YAAaA,EAAE,MAAO,CAChI,IAAID,EAAI,OAAOC,EAAE,MAAM,OAAO,EAC9B,MAAM,KAAK,KAAK,QAAS,GAAG1B,EAAC,qCAAqCyB,CAAC,EAAE,EAAG,IAAI,MAAM,GAAGzB,EAAC,qCAAqCyB,CAAC,EAAE,CAChI,CACA,OAAOC,EAAE,6BACX,CACA,MAAM,qBAAqBL,EAAG7Z,EAAG,CAC/B,GAAI,KAAK,UAAU6Z,CAAC,EAAG,OAAO7Z,GAAK,UAAYA,EAAE,KAAK,EAAE,SAAW,EAAG,MAAM,KAAK,KAAK,QAAS8Y,EAAC,EAAG,IAAI,UAAUA,EAAC,EAClH,KAAK,KAAK,OAAQ,6BAA6B9Y,CAAC,eAAe6Z,CAAC,EAAE,EAClE,IAAIC,EAAI,CAAE,SAAU9Z,CAAE,EAAGzE,EAAI,CAAE,CAAC6c,EAAC,EAAGP,GAAG,CAACG,EAAC,EAAGL,EAAE,EAC9C,GAAI,CACF,IAAInT,EAAImV,GAAEE,CAAC,EAAG,CAAE,IAAKniB,EAAG,QAASwC,CAAE,EAAI,MAAM,KAAK,MAAM,SAAUsK,EAAGsV,EAAGve,EAAG,EAAE,EAAGrC,EAAI,GAAGxB,CAAC,IAAI,IAAI,gBAAgBoiB,CAAC,CAAC,GAAIpjB,EAAI,MAAM,KAAK,aAAawC,EAAG,SAAUgB,CAAC,EAChK,GAAIxD,EAAE,GAAI,CACR,IAAIiB,EAAI,MAAMjB,EAAE,KAAK,EAAG+E,EAAI8e,GAAE5iB,CAAC,EAC/B,GAAI,OAAO8D,GAAK,UAAYA,IAAM,MAAQ,UAAWA,GAAK,OAAOA,EAAE,OAAS,UAAYA,EAAE,QAAU,MAAQ,YAAaA,EAAE,MAAO,CAChI,IAAIG,EAAI,OAAOH,EAAE,MAAM,OAAO,EAC9B,MAAM,KAAK,KAAK,QAAS,GAAG+c,EAAC,qCAAqC5c,CAAC,EAAE,EAAG,IAAI,MAAM,GAAG4c,EAAC,qCAAqC5c,CAAC,EAAE,CAChI,CACA,MAAO,CAAE,OAAQ,UAAW,IAAKie,EAAG,SAAU7Z,EAAG,SAAUvE,CAAE,CAC/D,KAAO,OAAM,KAAK,KAAK,QAAS,GAAG+c,EAAC,oCAAoC9hB,EAAE,MAAM,EAAE,EAAG,IAAI,MAAM,GAAG8hB,EAAC,oCAAoC9hB,EAAE,MAAM,EAAE,CACnJ,OAAS8N,EAAG,CACV,IAAI9M,EAAI8M,aAAa,MAAQA,EAAE,QAAU,OAAOA,CAAC,EACjD,MAAM,KAAK,KAAK,QAAS,GAAGgU,EAAC,4CAA4CqB,CAAC,KAAKniB,CAAC,EAAE,EAAG,IAAI,MAAM,GAAG8gB,EAAC,4CAA4CqB,CAAC,KAAKniB,CAAC,EAAE,CAC1J,CACF,CACA,iCAAiCmiB,EAAG,CAClC,MAAO;AAAA;AAAA,UAEDA,EAAE,IAAK7Z,GAAM;AAAA;AAAA,0BAEGA,EAAE,UAAU;AAAA,oBAClBA,EAAE,IAAI;AAAA;AAAA,SAEjB,EAAE,KAAK,EAAE,CAAC;AAAA;AAAA,KAGjB,CACA,MAAM,OAAO6Z,EAAG,CACd,KAAK,UAAUA,CAAC,EAAG,KAAK,KAAK,OAAQ,mBAAmBA,CAAC,EAAE,EAC3D,IAAI7Z,EAAI,CAAE,CAACoY,EAAC,EAAGN,GAAG,CAACE,EAAC,EAAGL,EAAE,EAAGmC,EAAIH,GAAEE,CAAC,EAAG,CAAE,IAAKte,EAAG,QAASiJ,CAAE,EAAI,MAAM,KAAK,MAAM,SAAUsV,EAAG,CAAC,EAAG9Z,EAAG,EAAE,EAAGtI,EAAI,MAAM,KAAK,aAAa6D,EAAG,SAAUiJ,CAAC,EACnJ,OAAO9M,EAAE,SAAW,KAAOA,EAAE,SAAW,GAC1C,CACA,MAAM,aAAamiB,EAAG7Z,EAAG8Z,EAAGve,EAAGiJ,EAAI,CAAC,EAAG,CACrC,KAAK,KAAK,OAAQ,WAAWxE,CAAC,eAAe6Z,CAAC,cAAc,KAAK,UAAUC,CAAC,CAAC,EAAE,EAC/E,IAAIpiB,EAAI,MAAM,MAAMmiB,EAAG,CAAE,OAAQ7Z,EAAG,QAAS8Z,EAAG,KAAM,CAAC,MAAO,MAAM,EAAE,SAAS9Z,CAAC,EAAI,OAASzE,EAAG,OAAQ,KAAK,sBAAwB,OAAS,YAAY,QAAQ,KAAK,mBAAmB,EAAI,MAAO,CAAC,EACtM,MAAO,CAAC7D,EAAE,IAAM,CAAC8M,EAAE,SAAS9M,EAAE,MAAM,GAAK,MAAM,KAAK,qBAAqBA,CAAC,EAAGA,CAC/E,CACA,MAAM,qBAAqBmiB,EAAG,CAC5B,IAAI7Z,EAAI,MAAM6Z,EAAE,KAAK,EAAGC,EAAID,EAAE,QAAQ,IAAI,kBAAkB,GAAK,UAAWte,EAAIse,EAAE,QAAQ,IAAI,qBAAqB,GAAKA,EAAE,WAC1H,MAAM,KAAK,KAAK,QAAS,GAAGrB,EAAC,8BAA8BqB,EAAE,MAAM,KAAKC,CAAC,MAAMve,CAAC,cAAcyE,CAAC,EAAE,EAAG,IAAI,MAAM,GAAGwY,EAAC,8BAA8BqB,EAAE,MAAM,KAAKC,CAAC,MAAMve,CAAC,eAAeyE,CAAC,EAAE,CACzL,CACA,2BAA2B6Z,EAAG,CAC5B,OAAO,OAAO,KAAKA,CAAC,EAAE,OAAS,EAAI,GAAK,OAAO,KAAKA,CAAC,EAAE,KAAK,EAAE,IAAK7Z,GAAM,GAAG,mBAAmBA,CAAC,CAAC,IAAI,mBAAmB6Z,EAAE7Z,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,GAAG,CAC3I,CACA,MAAM,iBAAiB6Z,EAAG,CACxB,IAAI7Z,EAAI,MAAMma,GAAE,OAAO,KAAK,eAAe,GAAIN,CAAC,EAAGC,EAAI,MAAMK,GAAEna,EAAG,KAAK,MAAM,EAAGzE,EAAI,MAAM4e,GAAEL,EAAGrC,EAAC,EAChG,OAAO0C,GAAE5e,EAAGic,EAAC,CACf,CACF,EACIwC,GAAI,MAAOP,GAAM,CACnB,IAAII,EAAIP,GAAE,QAAQ,EAClB,OAAOO,EAAE,OAAOJ,CAAC,EAAGI,EAAE,OAAO,KAAK,CACpC,EACIM,GAAI,MAAOV,EAAGI,EAAG7Z,IAAM,CACzB,IAAI8Z,EAAIT,GAAE,SAAUI,CAAC,EACrB,OAAOK,EAAE,OAAOD,CAAC,EAAGC,EAAE,OAAO9Z,CAAC,CAChC,EACI+Z,GAAKN,GAAM,CACb,IAAII,EAAI,CAAE,IAAK,GAAI,SAAU,GAAI,QAAS,GAAI,SAAU,GAAI,WAAY,EAAG,EAC3E,OAAOJ,EAAE,QAAQ,uCAAyCzZ,GAAM6Z,EAAE7Z,CAAC,CAAC,CACtE,EACIua,GAAKd,GAAM,CACb,IAAII,EAAKrV,GAAMA,EAAE,QAAQ,UAAW,GAAG,EAAE,QAAQ,UAAW,GAAG,EAAE,QAAQ,QAAS,GAAG,EAAE,QAAQ,QAAS,GAAG,EAAE,QAAQ,SAAU,GAAG,EAAGxE,EAAI,CAAC,EAAG8Z,EAAI,2DAA4Dve,EAC7M,KAAOA,EAAIue,EAAE,KAAKL,CAAC,GAAK,CACtB,GAAI,CAAC,CAAEjV,EAAG9M,EAAGwC,CAAC,EAAIqB,EAAGrC,EAAIsL,EAAE,YAAY,EAAI9M,EAAGhB,EAAIwD,GAAK,KAAOqgB,GAAErgB,CAAC,EAAI,GACrE,OAAOxD,GAAK,SAAWsJ,EAAE9G,CAAC,EAAI6gB,GAAEF,EAAEnjB,CAAC,CAAC,EAAI,MAAM,QAAQsJ,EAAE9G,CAAC,CAAC,EAAI8G,EAAE9G,CAAC,EAAE,KAAKxC,CAAC,EAAIsJ,EAAE9G,CAAC,EAAI8G,EAAE9G,CAAC,GAAK,KAAO,CAAC8G,EAAE9G,CAAC,EAAGxC,CAAC,EAAI6iB,GAAGrgB,CAAC,EAAI,CAACxC,CAAC,EAAIA,CAC/H,CACA,OAAO,OAAO,KAAKsJ,CAAC,EAAE,OAASA,EAAI6Z,EAAEJ,CAAC,CACxC,EAGIgB,GAAcxlB,GAAQ0hB,GAAY,EAAG,CAAC,EAGtC+D,EAAyB,CAC3B,iBAAkB,mBAClB,kBAAmB,oBACnB,wBAAyB,0BACzB,wBAAyB,0BACzB,wBAAyB,0BACzB,+BAAgC,iCAChC,qBAAsB,uBACtB,wBAAyB,0BACzB,0BAA2B,4BAC3B,mBAAoB,qBACpB,WAAY,aACZ,eAAgB,iBAChB,gBAAiB,kBACjB,aAAc,eACd,aAAc,eACd,iBAAkB,mBAClB,aAAc,eACd,YAAa,cACb,cAAe,eACjB,EACIC,GAAkB,cAAc,KAAM,CACxC,YAAYpF,EAASqF,EAAOF,EAAuB,cAAe,CAChE,MAAM,oBAAoBnF,CAAO,aAAaqF,CAAI,EAAE,EACpD,KAAK,KAAO,KAAK,YAAY,KAC7B,KAAK,KAAOA,EACZ,MAAM,kBAAkB,KAAM,KAAK,WAAW,CAChD,CACF,EACIC,GAAwB,cAAcF,EAAgB,CACxD,YAAYpF,EAASqF,EAAOF,EAAuB,wBAAyB,CAC1E,MAAMnF,EAASmF,EAAuB,uBAAuB,CAC/D,CACF,EACII,GAA0B,cAAcH,EAAgB,CAC1D,YAAYpF,EAASqF,EAAOF,EAAuB,0BAA2B,CAC5E,MAAMnF,EAASmF,EAAuB,yBAAyB,CACjE,CACF,EACIK,GAAmB,cAAcJ,EAAgB,CACnD,YAAYpF,EAASyF,EAAW,CAC9B,MAAM,MAAMA,CAAS,sBAAsBzF,CAAO,GAAImF,EAAuB,kBAAkB,CACjG,CACF,EAIIO,GAAe,CAACC,EAAUC,IACrB,OAAO,KAAKA,CAAK,EAAE,MAAOtmB,GAAQqmB,EAASrmB,CAAG,IAAMsmB,EAAMtmB,CAAG,CAAC,EAEnEumB,GAAe,SACb,OAAOC,GAAe,KAAe,OAAOA,IAAe,WACtDA,GAAW,EAEhB,OAAO,OAAW,KAAe,OAAO,QAAW,UAAY,OAAO,OAAO,YAAe,WACvF,OAAO,WAAW,EAEpB,uCAAuC,QAAQ,QAAS,SAASniB,EAAG,CACzE,IAAI4gB,EAAI,KAAK,OAAO,EAAI,GAAK,EAAGtiB,EAAK0B,IAAM,IAAM4gB,EAAIA,EAAI,EAAI,EAC7D,OAAOtiB,EAAG,SAAS,EAAE,CACvB,CAAC,EAEC8jB,GAAyBxd,GAAW,CACtC,IAAMyd,EAAU,CACd,KAAM,MACN,KAAM,SACN,KAAM,GACN,YAAa,MACf,EACA,OAAI,OAAOzd,EAAW,KAAeA,IAAW,OAG5C,SAAUA,GAAUA,EAAO,OAAS,UAAY,WAAYA,GAAU,MAAM,QAAQA,EAAO,MAAM,EAChFA,EAAO,OAAO,KAAM4F,GAAUA,EAAM,OAAS,KAAK,GAEnE5F,EAAO,OAAO,QAAQyd,CAAO,EAEtB,SAAUzd,GAAUA,EAAO,OAAS,SAAW,UAAWA,GAAUA,EAAO,QAAU,MAAQ,OAAOA,EAAO,OAAU,UAAY,SAAUA,EAAO,OAASA,EAAO,MAAM,OAAS,UAAY,WAAYA,EAAO,OAAS,MAAM,QAAQA,EAAO,MAAM,MAAM,IAChPA,EAAO,MAAM,OAAO,KAAM4F,GAAUA,EAAM,OAAS,KAAK,GAEzE5F,EAAO,MAAM,OAAO,QAAQyd,CAAO,IAGhCzd,CACT,EAGI0d,EAAc,aACdC,GAAoB,IACpBC,GAAqB,aACrBC,GAAa,QACbC,GAAY,KAAO,KACnBC,GAAY,EAAID,GAChBE,GAAa,OAAO,KAAK,GAAI,MAAM,EACnCC,GAAoB,CAACC,EAAYtB,EAAuB,4BAA8B,CACxF,MAAM,IAAII,GAAwB,GAAGU,CAAW,gCAAgCQ,CAAS,EAAE,CAC7F,EACIC,GAAc,CAACC,EAAU,KAAO,CAClC,GAAIA,EAAQ,KAAK,IAAM,IAAMA,IAAY,MAAQ,OAAOA,EAAY,KAAeA,EAAQ,OAAS,KAAOA,IAAY,KACrH,MAAM,IAAIvB,GAAgB,GAAGa,CAAW,kDAAmDd,EAAuB,gBAAgB,CAEtI,EACIyB,GAAa,KAAM,CACrB,YAAYC,EAAS,CACnB,KAAK,WAAc1X,GAAS,CAC1B,IAAM2X,EAAiB,CAAC,cAAe,kBAAmB,WAAY,YAAY,EAClF,QAAW3Y,KAAS2Y,EAClB,GAAI,CAAC3X,EAAKhB,CAAK,EACb,MAAM,IAAIiX,GAAgB,GAAGa,CAAW,KAAK9X,CAAK,eAAgBgX,EAAuB,gBAAgB,CAG/G,EAKA,KAAK,GAAK,IACD,KAAK,IAEd,KAAK,WAAW0B,CAAO,EACvB,KAAK,SAA2B,IAAI,IACpC,KAAK,IAAM,IAAIxC,GAAEwC,CAAO,EACxB,KAAK,WAAaA,EAAQ,WAAaV,GACvC,KAAK,WAAajB,GAAY,IAChC,CAMA,MAAM,iBAAkB,CACtB,GAAI,CACF,IAAM6B,EAAS,MAAM,KAAK,IAAI,KAAKb,GAAmB,KAAK,UAAU,EACrE,OAAI,MAAM,QAAQa,CAAM,EACfA,EAAO,IAAKC,GAAUA,EAAM,IAAI,MAAM,KAAK,WAAW,OAAS,EAAG,CAACZ,GAAW,MAAM,CAAC,EACnF,OAAOW,GAAW,UAAYA,IAAW,MAAQ,aAAcA,GAAUA,EAAO,WAAa,IAC/F,CAAC,EAEH,CAAC,CACV,OAASE,EAAO,CACd,MAAM,IAAIzB,GAAiB,GAAGS,CAAW,KAAKgB,EAAM,OAAO,GAAI9B,EAAuB,kBAAkB,CAC1G,CACF,CAOA,MAAM,iBAAiBwB,EAAU,GAAI,CACnC,GAAI,CACF,OAAAD,GAAYC,CAAO,EAEZ,CAAC,CADO,MAAM,KAAK,IAAI,WAAW,GAAG,KAAK,UAAU,GAAGT,EAAiB,GAAGS,CAAO,GAAGP,EAAU,EAAE,CAE1G,OAASa,EAAO,CACd,GAAIA,EAAM,QAAQ,SAAS,WAAW,EACpC,MAAO,GAET,MAAM,IAAI7B,GAAgB,GAAGa,CAAW,KAAKgB,EAAM,OAAO,GAAI9B,EAAuB,oBAAoB,CAC3G,CACF,CASA,MAAM,iBAAiBwB,EAAU,GAAIpe,EAAQvH,EAAO,CAAC,EAAG,CACtD,GAAI,CAGF,GAFA0lB,GAAYC,CAAO,EAEf,CADW,MAAM,KAAK,iBAAiBA,CAAO,EACrC,CACX,GAAI,OAAOpe,EAAW,KAAeA,IAAW,KAC9C,GAAI,CAEF,GAAI,CADS,KAAK,WAAW,UAAUA,CAAM,EAE3C,MAAM,IAAI+c,GACR,GAAGW,CAAW,wBAAwB1d,CAAM,IAAI4c,EAAuB,uBAAuB,EAChG,CAEJ,MAAgB,CACd,MAAM,IAAIG,GAAsB,GAAGW,CAAW,wBAAwB1d,CAAM,GAAI4c,EAAuB,uBAAuB,CAChI,CAEF,GAAInkB,EAAK,OAAS,GAAKuH,EAAQ,CAC7B,IAAM2e,EAAc,KAAK,WAAW,UAAU,CAAE,KAAM,QAAS,MAAO3e,CAAO,CAAC,EAC9E,MAAM,KAAK,IAAI,IAAI,GAAG,KAAK,UAAU,GAAG2d,EAAiB,GAAGS,CAAO,GAAGP,EAAU,GAAIc,EAAY,SAASlmB,CAAI,CAAC,CAChH,MACE,MAAM,KAAK,IAAI,IAAI,GAAG,KAAK,UAAU,GAAGklB,EAAiB,GAAGS,CAAO,GAAGP,EAAU,GAAIG,EAAU,EAEhG,OAAO,KAAK,WAAWI,EAASpe,EAAQ,EAAK,CAC/C,CACA,MAAM,IAAI6c,GAAgB,GAAGa,CAAW,gBAAgBU,CAAO,kBAAmBxB,EAAuB,iBAAiB,CAC5H,OAAS8B,EAAO,CACd,MAAIA,aAAiB7B,GACb6B,EAEF,IAAI7B,GAAgB,GAAGa,CAAW,KAAKgB,EAAM,OAAO,GAAI9B,EAAuB,uBAAuB,CAC9G,CACF,CAOA,MAAM,iBAAiBwB,EAAU,GAAI,CACnC,GAAI,CAGF,GAFAD,GAAYC,CAAO,EACJ,MAAM,KAAK,iBAAiBA,CAAO,EACtC,CACV,MAAM,KAAK,IAAI,OAAO,GAAG,KAAK,UAAU,GAAGT,EAAiB,GAAGS,CAAO,GAAGP,EAAU,EAAE,EACrF,IAAMe,EAAU,MAAM,KAAK,iBAAiBR,CAAO,EACnD,GAAI,OAAOQ,GAAY,UAAW,CAChC,GAAI,CAACA,EACH,YAAK,SAAS,OAAOR,CAAO,EACrB,GAET,MAAM,IAAIvB,GAAgB,GAAGa,CAAW,iCAAiCU,CAAO,GAAIxB,EAAuB,kBAAkB,CAC/H,CACA,MAAM,IAAIK,GAAiB,GAAGS,CAAW,iCAAiCU,CAAO,GAAIxB,EAAuB,kBAAkB,CAChI,CACA,MAAM,IAAIC,GAAgB,GAAGa,CAAW,gBAAgBU,CAAO,kBAAmBxB,EAAuB,uBAAuB,CAClI,OAAS8B,EAAO,CACd,MAAIA,aAAiBzB,GACbyB,EAEF,IAAI7B,GACR,GAAGa,CAAW,kCAAkCgB,EAAM,OAAO,GAC7D9B,EAAuB,uBACzB,CACF,CACF,CASA,MAAM,WAAWwB,EAAU,GAAIpe,EAAQ6e,EAAa,GAAM,CACxD,GAAI,CACFV,GAAYC,CAAO,EACnB,IAAMU,EAAU,GAAG,KAAK,UAAU,GAAGnB,EAAiB,GAAGS,CAAO,GAAGP,EAAU,GAE7E,GAAI,CADW,MAAM,KAAK,IAAI,WAAWiB,CAAO,EACnC,CACX,GAAI,CAACD,EACH,MAAM,IAAIhC,GAAgB,GAAGa,CAAW,gBAAgBU,CAAO,kBAAmBxB,EAAuB,oBAAoB,EAE/H,MAAM,KAAK,IAAI,IAAIkC,EAASd,EAAU,CACxC,CACA,IAAMe,EAAY/e,GAAU,KAAK,SAAS,IAAIoe,CAAO,GAAK,OAC1D,OAAO,IAAIY,GAAWZ,EAASW,EAAW,KAAK,IAAK,KAAK,UAAU,CACrE,OAASL,EAAO,CACd,MAAIA,EAAM,QAAQ,SAAS,cAAc,EACjC,IAAI3B,GACR,GAAGW,CAAW,8BAA8BgB,EAAM,OAAO,GACzD9B,EAAuB,uBACzB,EAEI,IAAIC,GAAgB,GAAGa,CAAW,KAAKgB,EAAM,OAAO,GAAI9B,EAAuB,oBAAoB,CAC3G,CACF,CACF,EACIoC,GAAa,MAAMC,EAAY,CACjC,YAAYb,EAAU,GAAIpe,EAAQkf,EAAIC,EAAYvB,GAAoBwB,EAAY,GAAOC,EAAYtB,GAAW,CAC9G,KAAK,SAAW,KAAO,CACrB,QAAS,KAAK,SACd,GAAI,KAAK,IACT,OAAQ,KAAK,QACb,UAAW,KAAK,WAChB,SAAU,KAAK,UACf,UAAW,KAAK,WAChB,UAAW,KAAK,WAChB,UAAW,KAAK,UAClB,GACA,KAAK,SAAYtiB,GAAU,CACzB,KAAK,SAAWA,EAAM,QACtB,KAAK,QAAUA,EAAM,OACrB,KAAK,IAAMA,EAAM,GACjB,KAAK,WAAaA,EAAM,UACxB,KAAK,UAAYA,EAAM,SACvB,KAAK,WAAaA,EAAM,UACxB,KAAK,WAAaA,EAAM,UACxB,KAAK,WAAaA,EAAM,SAC1B,EACA,KAAK,aAAgB2jB,GAAc,CACjC,KAAK,WAAaA,CACpB,EACA,KAAK,aAAe,IACX,KAAK,WAEd,KAAK,cAAgB,IACZ,KAAK,QAEd,KAAK,cAAiBpf,GAAW,CAC/B,GAAI,CACF,KAAK,QAAUwd,GAAsBxd,CAAM,EAC3C,KAAK,UAAY,OAAOA,EAAW,IAAc,KAAO,KAAK,WAAW,UAAUA,CAAM,CAC1F,OAAS0e,EAAO,CACd,MAAM,IAAI7B,GAAgB,GAAGa,CAAW,KAAKgB,EAAM,OAAO,GAAI9B,EAAuB,uBAAuB,CAC9G,CACF,EACA,KAAK,gBAAkB,CAACnkB,EAAMwH,EAAO,WAAa,CAC5C,MAAM,QAAQxH,CAAI,IACpBA,EAAOA,EAAK,CAAC,GAGf,IAAMuH,EADc,KAAK,WAAW,SAASvH,CAAI,EACtB,OAAO,EAClC,OAAO+kB,GAAsBxd,CAAM,CACrC,EACA,KAAK,SAAWoe,EAAQ,KAAK,EAC7B,KAAK,IAAMc,EACX,KAAK,QAAU1B,GAAsBxd,CAAM,EAC3C,KAAK,WAAamf,EAClB,KAAK,WAAaC,EAClB,KAAK,WAAaC,GAAatB,GAC/B,KAAK,IAAI,yBAAyB,KAAK,UAAU,EACjD,KAAK,WAAapB,GAAY,KAC9B,KAAK,UAAY,GACjB,KAAK,WAAa,CAAC,EACnB,KAAK,UAAY,OAAO3c,EAAW,IAAc,KAAO,KAAK,WAAW,UAAUA,CAAM,EACxF,KAAK,KAAO,GAAG,KAAK,UAAU,GAAG2d,EAAiB,GAAG,KAAK,QAAQ,GAAGE,EAAU,EACjF,CACA,MAAM,WAAY,CAChB,GAAI,CACF,GAAI,KAAK,YAAc,MAAQ,OAAO,KAAK,UAAc,IACvD,MAAM,IAAIhB,GACR,GAAGa,CAAW,0DACdd,EAAuB,uBACzB,EAEF,GAAM,CAAE,KAAA0C,EAAM,KAAA7mB,CAAK,EAAI,MAAM,KAAK,IAAI,kBAAkB,KAAK,KAAM,CAAE,gBAAiB,KAAK,SAAU,CAAC,EACtG,GAAIA,IAAS,KACX,OAAO,KAAK,WAEd,KAAK,UAAY6mB,IAAS,KAAO,KAAK,UAAYA,EAClD,IAAMX,EAAc,KAAK,WAAW,UAAU,CAAE,KAAM,QAAS,MAAO,KAAK,SAAU,CAAC,EACtF,GAAIlmB,EAAK,OAAS,KAAK,WACrB,YAAK,WAAaA,EAAK,OAAS,EAAIkmB,EAAY,WAAW,OAAO,KAAKlmB,EAAM,MAAM,CAAC,EAAI,CAAC,EAClF,KAAK,WAEd,IAAI8mB,EAAS,KAAK,WACdC,EAAY,CAAC,OAAO,KAAK/mB,EAAM,MAAM,CAAC,EACtCgnB,EAAS,GACb,KAAOA,GAAQ,CACb,IAAMC,EAAmB,MAAM,KAAK,IAAI,YAAY,KAAK,KAAM,GAAOH,EAAQA,EAAS,KAAK,UAAU,EAChGI,EAAe,MAAMD,EAAiB,KAAK,EACjDF,EAAU,KAAK,OAAO,KAAKG,EAAc,MAAM,CAAC,EAChDJ,GAAU,KAAK,WACO,SAASG,EAAiB,QAAQ,IAAI,gBAAgB,GAAKC,EAAa,OAAO,SAAS,CAAC,EAC3F,KAAK,aACvBF,EAAS,GAEb,CACA,IAAMG,EAAe,OAAO,OAAOJ,CAAS,EAC5C,YAAK,WAAab,EAAY,WAAWiB,CAAY,EAC9C,KAAK,UACd,OAASlB,EAAO,CACd,GAAIA,EAAM,SAAS,EAAE,QAAQ,iCAAiC,EAAI,GAChE,YAAK,WAAa,CAAC,EACZ,KAAK,WAEd,MAAM,IAAIzB,GAAiB,GAAGS,CAAW,0BAA0BgB,EAAM,OAAO,GAAI9B,EAAuB,kBAAkB,CAC/H,CACF,CACA,MAAM,UAAUnkB,EAAM,CACpB,GAAI,CACF,GAAI,KAAK,YAAc,MAAQ,OAAO,KAAK,UAAc,IACvD,MAAM,IAAIokB,GACR,GAAGa,CAAW,0DACdd,EAAuB,uBACzB,EAEF,IAAM+B,EAAc,KAAK,WAAW,UAAU,CAAE,KAAM,QAAS,MAAO,KAAK,SAAU,CAAC,EAChFkB,EAAapnB,EAAK,OAAS,EAAIkmB,EAAY,SAASlmB,CAAI,EAAIulB,GAClE,GAAI,KAAK,YAAc,KAAK,YAAc,GAAI,CAC5C,IAAM8B,EAAc,MAAM,KAAK,IAAI,QAAQ,KAAK,IAAI,EACpD,GAAIA,IAAgB,MAAQA,IAAgB,KAAK,UAC/C,MAAO,EAEX,CACA,IAAMC,EAAO,MAAM,KAAK,IAAI,IAAI,KAAK,KAAMF,CAAU,EACrD,GAAI,OAAOE,GAAS,UAAY,WAAYA,GAAQA,EAAK,SAAW,IAClE,MAAM,IAAI9C,GAAiB,GAAGS,CAAW,wBAAyBd,EAAuB,kBAAkB,EAE7G,IAAMoD,EAAUD,EAAK,SAAS,IAAI,MAAM,GAAK,GAC7C,OAAIC,GAAWA,EAAQ,OAAS,IAC9B,KAAK,UAAY,KAAK,IAAI,aAAaA,CAAO,EAC9C,KAAK,WAAavnB,GAEb,EACT,OAASimB,EAAO,CACd,MAAIA,aAAiBzB,GACbyB,EAEF,IAAI7B,GAAgB,GAAGa,CAAW,KAAKgB,EAAM,OAAO,GAAI9B,EAAuB,eAAe,CACtG,CACF,CAQA,MAAM,OAAOjQ,EAAK3M,EAAQ,CACxB,GAAI,CACF,GAAsB2M,GAAQ,KAC5B,MAAM,IAAIkQ,GAAgB,GAAGa,CAAW,oCAAqCd,EAAuB,YAAY,EAElH,GAAI,OAAOjQ,GAAQ,UAAY,CAAC,MAAM,QAAQA,CAAG,EAC/C,MAAM,IAAIqQ,GACR,GAAGU,CAAW,2CACdd,EAAuB,yBACzB,EAEF,IAAM9f,EAAS,MAAM,QAAQ6P,CAAG,EAAYA,EAAR,CAACA,CAAG,EAClCsT,EAAejgB,EAASwd,GAAsBxd,CAAM,EAAI,KAAK,SAAW,KAAK,gBAAgBlD,EAAM,CAAC,CAAC,EACrGojB,EAAW,KAAK,WAAW,UAAUD,CAAY,EACvD,GAAI,CAACC,EACH,MAAM,IAAInD,GACR,GAAGW,CAAW,4DACdd,EAAuB,uBACzB,EAEF,KAAK,UAAYsD,EACjB,IAAMznB,EAAO,MAAM,KAAK,UAAU,EAClC,QAASoE,KAAQC,EAAO,CACtB,GAAI,OAAOD,GAAS,UAAYA,IAAS,KACvC,MAAM,IAAImgB,GACR,GAAGU,CAAW,kEACdd,EAAuB,yBACzB,EAOF,GALA/f,EAAK,IAAMA,EAAK,KAAO,MAAMygB,GAAa,EACtB,KAAK,UAAU,QAAQzgB,EAAM,CAC/C,UAAWohB,GACX,mBAAoB,EACtB,CAAC,IACmB,GAClBxlB,EAAK,KAAKoE,CAAI,MAEd,OAAM,IAAImgB,GAAwB,GAAGU,CAAW,+BAAgCd,EAAuB,yBAAyB,CAEpI,CAEA,GAAI,CADY,MAAM,KAAK,UAAUnkB,CAAI,EAEvC,MAAM,IAAIwkB,GAAiB,GAAGS,CAAW,8BAA+Bd,EAAuB,kBAAkB,EAEnH,YAAK,cAAcqD,CAAY,EACxBnjB,CACT,OAAS4hB,EAAO,CACd,MAAIA,EAAM,QAAQ,SAAS,cAAc,EACjC,IAAI3B,GACR,GAAGW,CAAW,8BAA8BgB,EAAM,OAAO,GACzD9B,EAAuB,uBACzB,EAEE8B,aAAiB7B,GACb6B,EAEF,IAAI7B,GAAgB,GAAGa,CAAW,6BAA6BgB,EAAM,OAAO,GAAI9B,EAAuB,YAAY,CAC3H,CACF,CAUA,MAAM,KAAKS,EAAQ,CAAC,EAAGiB,EAAU,CAAC,EAAG,CACnC,GAAI,CACF,GAAwBjB,GAAU,KAChC,MAAM,IAAIR,GAAgB,GAAGa,CAAW,iCAAkCd,EAAuB,gBAAgB,EAEnH,IAAMnkB,EAAO,MAAM,KAAK,UAAU,EAC5B8D,EAAQ+hB,EAAQ,OAAS,OAAS,SAAS,OAAOA,EAAQ,IAAI,EAAG,EAAE,EAAI,EACvE9hB,EAAM8hB,EAAQ,QAAU,OAAS/hB,EAAQ,SAAS,OAAO+hB,EAAQ,KAAK,EAAG,EAAE,EAAI,OAErF,OADqB7lB,EAAK,OAAQkU,GAAQwQ,GAAaxQ,EAAK0Q,CAAK,CAAC,EAAE,MAAM9gB,EAAOC,CAAG,CAEtF,OAASkiB,EAAO,CACd,MAAM,IAAI7B,GAAgB,GAAGa,CAAW,4BAA4BgB,EAAM,OAAO,GAAI9B,EAAuB,UAAU,CACxH,CACF,CAOA,MAAM,QAAQS,EAAQ,CAAC,EAAG,CACxB,GAAI,CACF,GAAIA,IAAU,KACZ,MAAM,IAAIR,GAAgB,GAAGa,CAAW,yBAA0Bd,EAAuB,gBAAgB,EAG3G,OADe,MAAM,KAAK,KAAKS,EAAO,CAAE,MAAO,CAAE,CAAC,GACpC,CAAC,GAAK,IACtB,OAASqB,EAAO,CACd,MAAIA,aAAiB7B,GACb6B,EAEF,IAAI7B,GAAgB,GAAGa,CAAW,+BAA+BgB,EAAM,OAAO,GAAI9B,EAAuB,cAAc,CAC/H,CACF,CAWA,MAAM,OAAOS,EAAQ,CAAC,EAAG8C,EAAS,CAAC,EAAG7B,EAAU,CAAC,EAAG,CAClD,GAAI,CACF,GAAwBjB,GAAU,MAAQ8C,IAAW,QAAUA,IAAW,KACxE,MAAM,IAAItD,GACR,GAAGa,CAAW,oDACdd,EAAuB,gBACzB,EAEF,GAAI,CAAC,KAAK,UACR,MAAM,IAAIG,GACR,GAAGW,CAAW,8CACdd,EAAuB,uBACzB,EAEF,IAAMnkB,EAAO,MAAM,KAAK,UAAU,EAClC,GAAIA,EAAK,SAAW,EAAG,MAAO,GAC9B,IAAI2nB,EAAe,EACnB,QAASxmB,EAAI,EAAGA,EAAInB,EAAK,OAAQmB,IAC/B,GAAIujB,GAAa1kB,EAAKmB,CAAC,EAAGyjB,CAAK,EAAG,CAChC,IAAMgD,EAAa,CAAE,GAAG5nB,EAAKmB,CAAC,EAAG,GAAGumB,CAAO,EAK3C,GAJgB,KAAK,UAAU,QAAQE,EAAY,CACjD,UAAWpC,GACX,mBAAoB,EACtB,CAAC,IACe,GACdxlB,EAAKmB,CAAC,EAAIymB,EACVD,QAEA,OAAM,IAAIpD,GACR,GAAGU,CAAW,+BACdd,EAAuB,yBACzB,CAEJ,CAEF,GAAIwD,EAAe,GAEjB,GAAI,CADY,MAAM,KAAK,UAAU3nB,CAAI,EAEvC,MAAM,IAAIwkB,GAAiB,GAAGS,CAAW,8BAA+Bd,EAAuB,kBAAkB,UAE1G0B,GAAW,WAAYA,GAAWA,EAAQ,OAAQ,CAE3D,GAAI,CADY,MAAM,KAAK,OAAO6B,CAAM,EAEtC,MAAM,IAAIlD,GAAiB,GAAGS,CAAW,8BAA+Bd,EAAuB,kBAAkB,EAEnHwD,EAAe,CACjB,CACA,OAAOA,CACT,OAAS1B,EAAO,CACd,MAAIA,aAAiBzB,GACbyB,EAEF,IAAI7B,GAAgB,GAAGa,CAAW,8BAA8BgB,EAAM,OAAO,GAAI9B,EAAuB,YAAY,CAC5H,CACF,CAaA,MAAM,UAAUS,EAAQ,CAAC,EAAG8C,EAAS,CAAC,EAAG7B,EAAU,CAAC,EAAG,CACrD,GAAI,CACF,GAAwBjB,GAAU,MAAQ8C,IAAW,QAAUA,IAAW,KACxE,MAAM,IAAItD,GAAgB,GAAGa,CAAW,sBAAuBd,EAAuB,gBAAgB,EAExG,GAAI,CAAC,KAAK,UACR,MAAM,IAAIG,GACR,GAAGW,CAAW,8CACdd,EAAuB,uBACzB,EAEF,IAAMnkB,EAAO,MAAM,KAAK,UAAU,EAClC,GAAIA,EAAK,SAAW,EAAG,MAAO,GAC9B,IAAM6nB,EAAW7nB,EAAK,UAAWkU,GAAQwQ,GAAaxQ,EAAK0Q,CAAK,CAAC,EACjE,GAAIiD,IAAa,GAAI,CACnB,IAAMD,EAAa,CAAE,GAAG5nB,EAAK6nB,CAAQ,EAAG,GAAGH,CAAO,EAKlD,GAJgB,KAAK,UAAU,QAAQE,EAAY,CACjD,UAAWpC,GACX,mBAAoB,EACtB,CAAC,IACe,GAAM,CAGpB,GAFAxlB,EAAK6nB,CAAQ,EAAID,EAEb,CADY,MAAM,KAAK,UAAU5nB,CAAI,EAEvC,MAAM,IAAIwkB,GAAiB,GAAGS,CAAW,8BAA+Bd,EAAuB,kBAAkB,EAEnH,MAAO,EACT,KACE,OAAM,IAAII,GAAwB,GAAGU,CAAW,+BAAgCd,EAAuB,yBAAyB,CAEpI,CACA,GAAI0B,GAAW,WAAYA,GAAWA,EAAQ,OAAQ,CAEpD,GAAI,CADY,MAAM,KAAK,OAAO6B,CAAM,EAEtC,MAAM,IAAIlD,GAAiB,GAAGS,CAAW,8BAA+Bd,EAAuB,kBAAkB,EAEnH,MAAO,EACT,CACA,MAAO,EACT,OAAS8B,EAAO,CACd,MAAIA,aAAiB7B,GACb6B,EAEF,IAAI7B,GAAgB,GAAGa,CAAW,iCAAiCgB,EAAM,OAAO,GAAI9B,EAAuB,gBAAgB,CACnI,CACF,CAQA,MAAM,OAAOS,EAAQ,CAAC,EAAG,CACvB,GAAI,CACF,GAAwBA,GAAU,KAChC,MAAM,IAAIR,GAAgB,GAAGa,CAAW,sBAAuBd,EAAuB,gBAAgB,EAExG,IAAMnkB,EAAO,MAAM,KAAK,UAAU,EAClC,GAAIA,EAAK,SAAW,EAAG,MAAO,GAC9B,IAAM8nB,EAAgB9nB,EAAK,OACrB+nB,EAAU/nB,EAAK,OAAQkU,GAAQ,CAACwQ,GAAaxQ,EAAK0Q,CAAK,CAAC,EAE9D,GAAI,CADY,MAAM,KAAK,UAAUmD,CAAO,EAE1C,MAAM,IAAIvD,GAAiB,GAAGS,CAAW,8BAA+Bd,EAAuB,kBAAkB,EAEnH,OAAO2D,EAAgBC,EAAQ,MACjC,OAAS9B,EAAO,CACd,MAAIA,aAAiBzB,GACbyB,EAEF,IAAI7B,GAAgB,GAAGa,CAAW,8BAA8BgB,EAAM,OAAO,GAAI9B,EAAuB,YAAY,CAC5H,CACF,CAOA,MAAM,WAAY,CAChB,GAAI,CAEF,IAAM2D,GADO,MAAM,KAAK,UAAU,GACP,OAE3B,GAAI,CADY,MAAM,KAAK,UAAU,CAAC,CAAC,EAErC,MAAM,IAAItD,GAAiB,GAAGS,CAAW,8BAA+Bd,EAAuB,kBAAkB,EAEnH,OAAO2D,CACT,OAAS7B,EAAO,CACd,MAAIA,aAAiBzB,GACbyB,EAEF,IAAI7B,GAAgB,GAAGa,CAAW,8BAA8BgB,EAAM,OAAO,GAAI9B,EAAuB,YAAY,CAC5H,CACF,CAOA,MAAM,MAAMS,EAAQ,CAAC,EAAG,CACtB,GAAI,CAEF,OADa,MAAM,KAAK,KAAKA,CAAK,GACtB,MACd,OAASqB,EAAO,CACd,MAAM,IAAI7B,GAAgB,GAAGa,CAAW,6BAA6BgB,EAAM,OAAO,GAAI9B,EAAuB,WAAW,CAC1H,CACF,CACA,MAAM,iBAAiB6D,EAAYC,EAAY,KAAK,QAAS,CAC3D,GAAI,CAGF,GAFAvC,GAAYsC,CAAU,EACP,MAAM,KAAK,IAAI,WAAW,GAAG,KAAK,UAAU,GAAG9C,EAAiB,GAAG8C,CAAU,GAAG5C,EAAU,EAAE,EAEzG,MAAM,IAAIhB,GAAgB,GAAGa,CAAW,gBAAgB+C,CAAU,kBAAmB7D,EAAuB,iBAAiB,EAE/H,IAAM5c,EAAS0gB,GAAa,KAAK,cAAc,EACzCjoB,EAAO,MAAM,KAAK,UAAU,EAC5BkoB,EAAY,IAAI1B,GAAYwB,EAAYzgB,EAAQ,KAAK,IAAK,KAAK,WAAY,KAAK,WAAY,KAAK,UAAU,EACjH,aAAM2gB,EAAU,UAAUloB,CAAI,EAC9B,MAAM,KAAK,IAAI,OAAO,GAAG,KAAK,UAAU,GAAGklB,EAAiB,GAAG,KAAK,QAAQ,GAAGE,EAAU,EAAE,EACpF8C,CACT,OAASjC,EAAO,CACd,MAAIA,aAAiB7B,GACb6B,EAEF,IAAI7B,GACR,GAAGa,CAAW,+BAA+BgB,EAAM,OAAO,GAC1D9B,EAAuB,uBACzB,CACF,CACF,CACF", + "sourcesContent": ["import __import_BUFFER from \"buffer\";\nimport __import_CRYPTO from \"crypto\";\nimport __import_UTIL from \"util\";\nimport __import_STREAM from \"stream\";\nimport __import_ZLIB from \"zlib\";\nimport __import_EVENTS from \"events\";\nimport __import_FS from \"fs\";\nimport __import_PATH from \"path\";\n\nvar __create = Object.create;\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __getProtoOf = Object.getPrototypeOf;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __require = /* @__PURE__ */ ((x2) => typeof require !== \"undefined\" ? require : typeof Proxy !== \"undefined\" ? new Proxy(x2, {\n get: (a, b2) => (typeof require !== \"undefined\" ? require : a)[b2]\n}) : x2)(function(x2) {\n if (typeof require !== \"undefined\") return require.apply(this, arguments);\n throw Error('Dynamic require of \"' + x2 + '\" is not supported');\n});\nvar __commonJS = (cb, mod) => function __require2() {\n return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(\n // If the importer is in node compatibility mode or this is not an ESM\n // file that has been converted to a CommonJS file using a Babel-\n // compatible transform (i.e. \"__esModule\" has not been set), then set\n // \"default\" to the CommonJS \"module.exports\" for node compatibility.\n isNodeMode || !mod || !mod.__esModule ? __defProp(target, \"default\", { value: mod, enumerable: true }) : target,\n mod\n));\n\n// node_modules/avsc/lib/utils.js\nvar require_utils = __commonJS({\n \"node_modules/avsc/lib/utils.js\"(exports, module) {\n \"use strict\";\n var buffer = __import_BUFFER;\n var crypto2 = __import_CRYPTO;\n var util = __import_UTIL;\n var Buffer2 = buffer.Buffer;\n var POOL = new BufferPool(4096);\n var NAME_PATTERN = /^[A-Za-z_][A-Za-z0-9_]*$/;\n var f2 = util.format;\n function newBuffer(size) {\n if (typeof Buffer2.alloc == \"function\") {\n return Buffer2.alloc(size);\n } else {\n return new Buffer2(size);\n }\n }\n function bufferFrom(data, enc) {\n if (typeof Buffer2.from == \"function\") {\n return Buffer2.from(data, enc);\n } else {\n return new Buffer2(data, enc);\n }\n }\n function capitalize(s) {\n return s.charAt(0).toUpperCase() + s.slice(1);\n }\n function compare(n1, n2) {\n return n1 === n2 ? 0 : n1 < n2 ? -1 : 1;\n }\n function getOption(opts, key, def) {\n var value = opts[key];\n return value === void 0 ? def : value;\n }\n function getHash(str, algorithm) {\n algorithm = algorithm || \"md5\";\n var hash = crypto2.createHash(algorithm);\n hash.end(str);\n return hash.read();\n }\n function singleIndexOf(arr, v2) {\n var pos = -1;\n var i, l;\n if (!arr) {\n return -1;\n }\n for (i = 0, l = arr.length; i < l; i++) {\n if (arr[i] === v2) {\n if (pos >= 0) {\n return -2;\n }\n pos = i;\n }\n }\n return pos;\n }\n function toMap(arr, fn) {\n var obj = {};\n var i, elem;\n for (i = 0; i < arr.length; i++) {\n elem = arr[i];\n obj[fn(elem)] = elem;\n }\n return obj;\n }\n function objectValues(obj) {\n return Object.keys(obj).map(function(key) {\n return obj[key];\n });\n }\n function hasDuplicates(arr, fn) {\n var obj = /* @__PURE__ */ Object.create(null);\n var i, l, elem;\n for (i = 0, l = arr.length; i < l; i++) {\n elem = arr[i];\n if (fn) {\n elem = fn(elem);\n }\n if (obj[elem]) {\n return true;\n }\n obj[elem] = true;\n }\n return false;\n }\n function copyOwnProperties(src, dst, overwrite) {\n var names = Object.getOwnPropertyNames(src);\n var i, l, name;\n for (i = 0, l = names.length; i < l; i++) {\n name = names[i];\n if (!dst.hasOwnProperty(name) || overwrite) {\n var descriptor = Object.getOwnPropertyDescriptor(src, name);\n Object.defineProperty(dst, name, descriptor);\n }\n }\n return dst;\n }\n function isValidName(str) {\n return NAME_PATTERN.test(str);\n }\n function qualify(name, namespace) {\n if (~name.indexOf(\".\")) {\n name = name.replace(/^\\./, \"\");\n } else if (namespace) {\n name = namespace + \".\" + name;\n }\n name.split(\".\").forEach(function(part) {\n if (!isValidName(part)) {\n throw new Error(f2(\"invalid name: %j\", name));\n }\n });\n return name;\n }\n function unqualify(name) {\n var parts = name.split(\".\");\n return parts[parts.length - 1];\n }\n function impliedNamespace(name) {\n var match = /^(.*)\\.[^.]+$/.exec(name);\n return match ? match[1] : void 0;\n }\n function jsonEnd(str, pos) {\n pos = pos | 0;\n var c = str.charAt(pos++);\n if (/[\\d-]/.test(c)) {\n while (/[eE\\d.+-]/.test(str.charAt(pos))) {\n pos++;\n }\n return pos;\n } else if (/true|null/.test(str.slice(pos - 1, pos + 3))) {\n return pos + 3;\n } else if (/false/.test(str.slice(pos - 1, pos + 4))) {\n return pos + 4;\n }\n var depth = 0;\n var literal = false;\n do {\n switch (c) {\n case \"{\":\n case \"[\":\n if (!literal) {\n depth++;\n }\n break;\n case \"}\":\n case \"]\":\n if (!literal && !--depth) {\n return pos;\n }\n break;\n case '\"':\n literal = !literal;\n if (!depth && !literal) {\n return pos;\n }\n break;\n case \"\\\\\":\n pos++;\n }\n } while (c = str.charAt(pos++));\n return -1;\n }\n function abstractFunction() {\n throw new Error(\"abstract\");\n }\n function addDeprecatedGetters(obj, props) {\n var proto = obj.prototype;\n var i, l, prop, getter;\n for (i = 0, l = props.length; i < l; i++) {\n prop = props[i];\n getter = \"get\" + capitalize(prop);\n proto[getter] = util.deprecate(\n createGetter(prop),\n \"use `.\" + prop + \"` instead of `.\" + getter + \"()`\"\n );\n }\n function createGetter(prop2) {\n return function() {\n var delegate = this[prop2];\n return typeof delegate == \"function\" ? delegate.apply(this, arguments) : delegate;\n };\n }\n }\n function BufferPool(len) {\n this._len = len | 0;\n this._pos = 0;\n this._slab = newBuffer(this._len);\n }\n BufferPool.prototype.alloc = function(len) {\n if (len < 0) {\n throw new Error(\"negative length\");\n }\n var maxLen = this._len;\n if (len > maxLen) {\n return newBuffer(len);\n }\n if (this._pos + len > maxLen) {\n this._slab = newBuffer(maxLen);\n this._pos = 0;\n }\n return this._slab.slice(this._pos, this._pos += len);\n };\n function Lcg(seed) {\n var a = 1103515245;\n var c = 12345;\n var m2 = Math.pow(2, 31);\n var state = Math.floor(seed || Math.random() * (m2 - 1));\n this._max = m2;\n this._nextInt = function() {\n return state = (a * state + c) % m2;\n };\n }\n Lcg.prototype.nextBoolean = function() {\n return !!(this._nextInt() % 2);\n };\n Lcg.prototype.nextInt = function(start, end) {\n if (end === void 0) {\n end = start;\n start = 0;\n }\n end = end === void 0 ? this._max : end;\n return start + Math.floor(this.nextFloat() * (end - start));\n };\n Lcg.prototype.nextFloat = function(start, end) {\n if (end === void 0) {\n end = start;\n start = 0;\n }\n end = end === void 0 ? 1 : end;\n return start + (end - start) * this._nextInt() / this._max;\n };\n Lcg.prototype.nextString = function(len, flags) {\n len |= 0;\n flags = flags || \"aA\";\n var mask = \"\";\n if (flags.indexOf(\"a\") > -1) {\n mask += \"abcdefghijklmnopqrstuvwxyz\";\n }\n if (flags.indexOf(\"A\") > -1) {\n mask += \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\";\n }\n if (flags.indexOf(\"#\") > -1) {\n mask += \"0123456789\";\n }\n if (flags.indexOf(\"!\") > -1) {\n mask += \"~`!@#$%^&*()_+-={}[]:\\\";'<>?,./|\\\\\";\n }\n var result = [];\n for (var i = 0; i < len; i++) {\n result.push(this.choice(mask));\n }\n return result.join(\"\");\n };\n Lcg.prototype.nextBuffer = function(len) {\n var arr = [];\n var i;\n for (i = 0; i < len; i++) {\n arr.push(this.nextInt(256));\n }\n return bufferFrom(arr);\n };\n Lcg.prototype.choice = function(arr) {\n var len = arr.length;\n if (!len) {\n throw new Error(\"choosing from empty array\");\n }\n return arr[this.nextInt(len)];\n };\n function OrderedQueue() {\n this._index = 0;\n this._items = [];\n }\n OrderedQueue.prototype.push = function(item) {\n var items = this._items;\n var i = items.length | 0;\n var j2;\n items.push(item);\n while (i > 0 && items[i].index < items[j2 = i - 1 >> 1].index) {\n item = items[i];\n items[i] = items[j2];\n items[j2] = item;\n i = j2;\n }\n };\n OrderedQueue.prototype.pop = function() {\n var items = this._items;\n var len = items.length - 1 | 0;\n var first = items[0];\n if (!first || first.index > this._index) {\n return null;\n }\n this._index++;\n if (!len) {\n items.pop();\n return first;\n }\n items[0] = items.pop();\n var mid = len >> 1;\n var i = 0;\n var i1, i2, j2, item, c, c1, c2;\n while (i < mid) {\n item = items[i];\n i1 = (i << 1) + 1;\n i2 = i + 1 << 1;\n c1 = items[i1];\n c2 = items[i2];\n if (!c2 || c1.index <= c2.index) {\n c = c1;\n j2 = i1;\n } else {\n c = c2;\n j2 = i2;\n }\n if (c.index >= item.index) {\n break;\n }\n items[j2] = item;\n items[i] = c;\n i = j2;\n }\n return first;\n };\n function Tap(buf, pos) {\n this.buf = buf;\n this.pos = pos | 0;\n if (this.pos < 0) {\n throw new Error(\"negative offset\");\n }\n }\n Tap.prototype.isValid = function() {\n return this.pos <= this.buf.length;\n };\n Tap.prototype._invalidate = function() {\n this.pos = this.buf.length + 1;\n };\n Tap.prototype.readBoolean = function() {\n return !!this.buf[this.pos++];\n };\n Tap.prototype.skipBoolean = function() {\n this.pos++;\n };\n Tap.prototype.writeBoolean = function(b2) {\n this.buf[this.pos++] = !!b2;\n };\n Tap.prototype.readInt = Tap.prototype.readLong = function() {\n var n = 0;\n var k2 = 0;\n var buf = this.buf;\n var b2, h, f3, fk;\n do {\n b2 = buf[this.pos++];\n h = b2 & 128;\n n |= (b2 & 127) << k2;\n k2 += 7;\n } while (h && k2 < 28);\n if (h) {\n f3 = n;\n fk = 268435456;\n do {\n b2 = buf[this.pos++];\n f3 += (b2 & 127) * fk;\n fk *= 128;\n } while (b2 & 128);\n return (f3 % 2 ? -(f3 + 1) : f3) / 2;\n }\n return n >> 1 ^ -(n & 1);\n };\n Tap.prototype.skipInt = Tap.prototype.skipLong = function() {\n var buf = this.buf;\n while (buf[this.pos++] & 128) {\n }\n };\n Tap.prototype.writeInt = Tap.prototype.writeLong = function(n) {\n var buf = this.buf;\n var f3, m2;\n if (n >= -1073741824 && n < 1073741824) {\n m2 = n >= 0 ? n << 1 : ~n << 1 | 1;\n do {\n buf[this.pos] = m2 & 127;\n m2 >>= 7;\n } while (m2 && (buf[this.pos++] |= 128));\n } else {\n f3 = n >= 0 ? n * 2 : -n * 2 - 1;\n do {\n buf[this.pos] = f3 & 127;\n f3 /= 128;\n } while (f3 >= 1 && (buf[this.pos++] |= 128));\n }\n this.pos++;\n };\n Tap.prototype.readFloat = function() {\n var buf = this.buf;\n var pos = this.pos;\n this.pos += 4;\n if (this.pos > buf.length) {\n return 0;\n }\n return this.buf.readFloatLE(pos);\n };\n Tap.prototype.skipFloat = function() {\n this.pos += 4;\n };\n Tap.prototype.writeFloat = function(f3) {\n var buf = this.buf;\n var pos = this.pos;\n this.pos += 4;\n if (this.pos > buf.length) {\n return;\n }\n return this.buf.writeFloatLE(f3, pos);\n };\n Tap.prototype.readDouble = function() {\n var buf = this.buf;\n var pos = this.pos;\n this.pos += 8;\n if (this.pos > buf.length) {\n return 0;\n }\n return this.buf.readDoubleLE(pos);\n };\n Tap.prototype.skipDouble = function() {\n this.pos += 8;\n };\n Tap.prototype.writeDouble = function(d) {\n var buf = this.buf;\n var pos = this.pos;\n this.pos += 8;\n if (this.pos > buf.length) {\n return;\n }\n return this.buf.writeDoubleLE(d, pos);\n };\n Tap.prototype.readFixed = function(len) {\n var pos = this.pos;\n this.pos += len;\n if (this.pos > this.buf.length) {\n return;\n }\n var fixed = POOL.alloc(len);\n this.buf.copy(fixed, 0, pos, pos + len);\n return fixed;\n };\n Tap.prototype.skipFixed = function(len) {\n this.pos += len;\n };\n Tap.prototype.writeFixed = function(buf, len) {\n len = len || buf.length;\n var pos = this.pos;\n this.pos += len;\n if (this.pos > this.buf.length) {\n return;\n }\n buf.copy(this.buf, pos, 0, len);\n };\n Tap.prototype.readBytes = function() {\n var len = this.readLong();\n if (len < 0) {\n this._invalidate();\n return;\n }\n return this.readFixed(len);\n };\n Tap.prototype.skipBytes = function() {\n var len = this.readLong();\n if (len < 0) {\n this._invalidate();\n return;\n }\n this.pos += len;\n };\n Tap.prototype.writeBytes = function(buf) {\n var len = buf.length;\n this.writeLong(len);\n this.writeFixed(buf, len);\n };\n if (typeof Buffer2.prototype.utf8Slice == \"function\") {\n Tap.prototype.readString = function() {\n var len = this.readLong();\n if (len < 0) {\n this._invalidate();\n return \"\";\n }\n var pos = this.pos;\n var buf = this.buf;\n this.pos += len;\n if (this.pos > buf.length) {\n return;\n }\n return this.buf.utf8Slice(pos, pos + len);\n };\n } else {\n Tap.prototype.readString = function() {\n var len = this.readLong();\n if (len < 0) {\n this._invalidate();\n return \"\";\n }\n var pos = this.pos;\n var buf = this.buf;\n this.pos += len;\n if (this.pos > buf.length) {\n return;\n }\n return this.buf.slice(pos, pos + len).toString();\n };\n }\n Tap.prototype.skipString = function() {\n var len = this.readLong();\n if (len < 0) {\n this._invalidate();\n return;\n }\n this.pos += len;\n };\n Tap.prototype.writeString = function(s) {\n var len = Buffer2.byteLength(s);\n var buf = this.buf;\n this.writeLong(len);\n var pos = this.pos;\n this.pos += len;\n if (this.pos > buf.length) {\n return;\n }\n if (len > 64 && typeof Buffer2.prototype.utf8Write == \"function\") {\n buf.utf8Write(s, pos, len);\n } else {\n var i, l, c1, c2;\n for (i = 0, l = len; i < l; i++) {\n c1 = s.charCodeAt(i);\n if (c1 < 128) {\n buf[pos++] = c1;\n } else if (c1 < 2048) {\n buf[pos++] = c1 >> 6 | 192;\n buf[pos++] = c1 & 63 | 128;\n } else if ((c1 & 64512) === 55296 && ((c2 = s.charCodeAt(i + 1)) & 64512) === 56320) {\n c1 = 65536 + ((c1 & 1023) << 10) + (c2 & 1023);\n i++;\n buf[pos++] = c1 >> 18 | 240;\n buf[pos++] = c1 >> 12 & 63 | 128;\n buf[pos++] = c1 >> 6 & 63 | 128;\n buf[pos++] = c1 & 63 | 128;\n } else {\n buf[pos++] = c1 >> 12 | 224;\n buf[pos++] = c1 >> 6 & 63 | 128;\n buf[pos++] = c1 & 63 | 128;\n }\n }\n }\n };\n if (typeof Buffer2.prototype.latin1Write == \"function\") {\n Tap.prototype.writeBinary = function(str, len) {\n var pos = this.pos;\n this.pos += len;\n if (this.pos > this.buf.length) {\n return;\n }\n this.buf.latin1Write(str, pos, len);\n };\n } else if (typeof Buffer2.prototype.binaryWrite == \"function\") {\n Tap.prototype.writeBinary = function(str, len) {\n var pos = this.pos;\n this.pos += len;\n if (this.pos > this.buf.length) {\n return;\n }\n this.buf.binaryWrite(str, pos, len);\n };\n } else {\n Tap.prototype.writeBinary = function(s, len) {\n var pos = this.pos;\n this.pos += len;\n if (this.pos > this.buf.length) {\n return;\n }\n this.buf.write(s, pos, len, \"binary\");\n };\n }\n Tap.prototype.matchBoolean = function(tap) {\n return this.buf[this.pos++] - tap.buf[tap.pos++];\n };\n Tap.prototype.matchInt = Tap.prototype.matchLong = function(tap) {\n var n1 = this.readLong();\n var n2 = tap.readLong();\n return n1 === n2 ? 0 : n1 < n2 ? -1 : 1;\n };\n Tap.prototype.matchFloat = function(tap) {\n var n1 = this.readFloat();\n var n2 = tap.readFloat();\n return n1 === n2 ? 0 : n1 < n2 ? -1 : 1;\n };\n Tap.prototype.matchDouble = function(tap) {\n var n1 = this.readDouble();\n var n2 = tap.readDouble();\n return n1 === n2 ? 0 : n1 < n2 ? -1 : 1;\n };\n Tap.prototype.matchFixed = function(tap, len) {\n return this.readFixed(len).compare(tap.readFixed(len));\n };\n Tap.prototype.matchBytes = Tap.prototype.matchString = function(tap) {\n var l1 = this.readLong();\n var p1 = this.pos;\n this.pos += l1;\n var l2 = tap.readLong();\n var p2 = tap.pos;\n tap.pos += l2;\n var b1 = this.buf.slice(p1, this.pos);\n var b2 = tap.buf.slice(p2, tap.pos);\n return b1.compare(b2);\n };\n Tap.prototype.unpackLongBytes = function() {\n var res = newBuffer(8);\n var n = 0;\n var i = 0;\n var j2 = 6;\n var buf = this.buf;\n var b2, neg;\n b2 = buf[this.pos++];\n neg = b2 & 1;\n res.fill(0);\n n |= (b2 & 127) >> 1;\n while (b2 & 128) {\n b2 = buf[this.pos++];\n n |= (b2 & 127) << j2;\n j2 += 7;\n if (j2 >= 8) {\n j2 -= 8;\n res[i++] = n;\n n >>= 8;\n }\n }\n res[i] = n;\n if (neg) {\n invert(res, 8);\n }\n return res;\n };\n Tap.prototype.packLongBytes = function(buf) {\n var neg = (buf[7] & 128) >> 7;\n var res = this.buf;\n var j2 = 1;\n var k2 = 0;\n var m2 = 3;\n var n;\n if (neg) {\n invert(buf, 8);\n n = 1;\n } else {\n n = 0;\n }\n var parts = [\n buf.readUIntLE(0, 3),\n buf.readUIntLE(3, 3),\n buf.readUIntLE(6, 2)\n ];\n while (m2 && !parts[--m2]) {\n }\n while (k2 < m2) {\n n |= parts[k2++] << j2;\n j2 += 24;\n while (j2 > 7) {\n res[this.pos++] = n & 127 | 128;\n n >>= 7;\n j2 -= 7;\n }\n }\n n |= parts[m2] << j2;\n do {\n res[this.pos] = n & 127;\n n >>= 7;\n } while (n && (res[this.pos++] |= 128));\n this.pos++;\n if (neg) {\n invert(buf, 8);\n }\n };\n function invert(buf, len) {\n while (len--) {\n buf[len] = ~buf[len];\n }\n }\n module.exports = {\n abstractFunction,\n addDeprecatedGetters,\n bufferFrom,\n capitalize,\n copyOwnProperties,\n getHash,\n compare,\n getOption,\n impliedNamespace,\n isValidName,\n jsonEnd,\n newBuffer,\n objectValues,\n qualify,\n toMap,\n singleIndexOf,\n hasDuplicates,\n unqualify,\n BufferPool,\n Lcg,\n OrderedQueue,\n Tap\n };\n }\n});\n\n// node_modules/avsc/lib/types.js\nvar require_types = __commonJS({\n \"node_modules/avsc/lib/types.js\"(exports, module) {\n \"use strict\";\n var utils = require_utils();\n var buffer = __import_BUFFER;\n var util = __import_UTIL;\n var Buffer2 = buffer.Buffer;\n var SlowBuffer = buffer.SlowBuffer;\n var Tap = utils.Tap;\n var debug = util.debuglog(\"avsc:types\");\n var f2 = util.format;\n var TYPES = {\n \"array\": ArrayType,\n \"boolean\": BooleanType,\n \"bytes\": BytesType,\n \"double\": DoubleType,\n \"enum\": EnumType,\n \"error\": RecordType,\n \"fixed\": FixedType,\n \"float\": FloatType,\n \"int\": IntType,\n \"long\": LongType,\n \"map\": MapType,\n \"null\": NullType,\n \"record\": RecordType,\n \"string\": StringType\n };\n var RANDOM = new utils.Lcg();\n var TAP = new Tap(new SlowBuffer(1024));\n var LOGICAL_TYPE = null;\n var UNDERLYING_TYPES = [];\n function Type(schema, opts) {\n var type;\n if (LOGICAL_TYPE) {\n type = LOGICAL_TYPE;\n UNDERLYING_TYPES.push([LOGICAL_TYPE, this]);\n LOGICAL_TYPE = null;\n } else {\n type = this;\n }\n this._hash = new Hash();\n this.name = void 0;\n this.aliases = void 0;\n this.doc = schema && schema.doc ? \"\" + schema.doc : void 0;\n if (schema) {\n var name = schema.name;\n var namespace = schema.namespace === void 0 ? opts && opts.namespace : schema.namespace;\n if (name !== void 0) {\n name = maybeQualify(name, namespace);\n if (isPrimitive(name)) {\n throw new Error(f2(\"cannot rename primitive type: %j\", name));\n }\n var registry = opts && opts.registry;\n if (registry) {\n if (registry[name] !== void 0) {\n throw new Error(f2(\"duplicate type name: %s\", name));\n }\n registry[name] = type;\n }\n } else if (opts && opts.noAnonymousTypes) {\n throw new Error(f2(\"missing name property in schema: %j\", schema));\n }\n this.name = name;\n this.aliases = schema.aliases ? schema.aliases.map(function(s) {\n return maybeQualify(s, namespace);\n }) : [];\n }\n }\n Type.forSchema = function(schema, opts) {\n opts = opts || {};\n opts.registry = opts.registry || {};\n var UnionType2 = function(wrapUnions) {\n if (wrapUnions === true) {\n wrapUnions = \"always\";\n } else if (wrapUnions === false) {\n wrapUnions = \"never\";\n } else if (wrapUnions === void 0) {\n wrapUnions = \"auto\";\n } else if (typeof wrapUnions == \"string\") {\n wrapUnions = wrapUnions.toLowerCase();\n }\n switch (wrapUnions) {\n case \"always\":\n return WrappedUnionType;\n case \"never\":\n return UnwrappedUnionType;\n case \"auto\":\n return void 0;\n default:\n throw new Error(f2(\"invalid wrap unions option: %j\", wrapUnions));\n }\n }(opts.wrapUnions);\n if (schema === null) {\n throw new Error('invalid type: null (did you mean \"null\"?)');\n }\n if (Type.isType(schema)) {\n return schema;\n }\n var type;\n if (opts.typeHook && (type = opts.typeHook(schema, opts))) {\n if (!Type.isType(type)) {\n throw new Error(f2(\"invalid typehook return value: %j\", type));\n }\n return type;\n }\n if (typeof schema == \"string\") {\n schema = maybeQualify(schema, opts.namespace);\n type = opts.registry[schema];\n if (type) {\n return type;\n }\n if (isPrimitive(schema)) {\n return opts.registry[schema] = Type.forSchema({ type: schema }, opts);\n }\n throw new Error(f2(\"undefined type name: %s\", schema));\n }\n if (schema.logicalType && opts.logicalTypes && !LOGICAL_TYPE) {\n var DerivedType = opts.logicalTypes[schema.logicalType];\n if (DerivedType) {\n var namespace = opts.namespace;\n var registry = {};\n Object.keys(opts.registry).forEach(function(key) {\n registry[key] = opts.registry[key];\n });\n try {\n debug(\"instantiating logical type for %s\", schema.logicalType);\n return new DerivedType(schema, opts);\n } catch (err) {\n debug(\"failed to instantiate logical type for %s\", schema.logicalType);\n if (opts.assertLogicalTypes) {\n throw err;\n }\n LOGICAL_TYPE = null;\n opts.namespace = namespace;\n opts.registry = registry;\n }\n }\n }\n if (Array.isArray(schema)) {\n var logicalType = LOGICAL_TYPE;\n LOGICAL_TYPE = null;\n var types = schema.map(function(obj) {\n return Type.forSchema(obj, opts);\n });\n if (!UnionType2) {\n UnionType2 = isAmbiguous(types) ? WrappedUnionType : UnwrappedUnionType;\n }\n LOGICAL_TYPE = logicalType;\n type = new UnionType2(types, opts);\n } else {\n type = function(typeName) {\n var Type2 = TYPES[typeName];\n if (Type2 === void 0) {\n throw new Error(f2(\"unknown type: %j\", typeName));\n }\n return new Type2(schema, opts);\n }(schema.type);\n }\n return type;\n };\n Type.forValue = function(val, opts) {\n opts = opts || {};\n opts.emptyArrayType = opts.emptyArrayType || Type.forSchema({\n type: \"array\",\n items: \"null\"\n });\n if (opts.valueHook) {\n var type = opts.valueHook(val, opts);\n if (type !== void 0) {\n if (!Type.isType(type)) {\n throw new Error(f2(\"invalid value hook return value: %j\", type));\n }\n return type;\n }\n }\n switch (typeof val) {\n case \"string\":\n return Type.forSchema(\"string\", opts);\n case \"boolean\":\n return Type.forSchema(\"boolean\", opts);\n case \"number\":\n if ((val | 0) === val) {\n return Type.forSchema(\"int\", opts);\n } else if (Math.abs(val) < 9007199254740991) {\n return Type.forSchema(\"float\", opts);\n }\n return Type.forSchema(\"double\", opts);\n case \"object\":\n if (val === null) {\n return Type.forSchema(\"null\", opts);\n } else if (Array.isArray(val)) {\n if (!val.length) {\n return opts.emptyArrayType;\n }\n return Type.forSchema({\n type: \"array\",\n items: Type.forTypes(\n val.map(function(v2) {\n return Type.forValue(v2, opts);\n }),\n opts\n )\n }, opts);\n } else if (Buffer2.isBuffer(val)) {\n return Type.forSchema(\"bytes\", opts);\n }\n var fieldNames = Object.keys(val);\n if (fieldNames.some(function(s) {\n return !utils.isValidName(s);\n })) {\n return Type.forSchema({\n type: \"map\",\n values: Type.forTypes(fieldNames.map(function(s) {\n return Type.forValue(val[s], opts);\n }), opts)\n }, opts);\n }\n return Type.forSchema({\n type: \"record\",\n fields: fieldNames.map(function(s) {\n return { name: s, type: Type.forValue(val[s], opts) };\n })\n }, opts);\n default:\n throw new Error(f2(\"cannot infer type from: %j\", val));\n }\n };\n Type.forTypes = function(types, opts) {\n if (!types.length) {\n throw new Error(\"no types to combine\");\n }\n if (types.length === 1) {\n return types[0];\n }\n opts = opts || {};\n var expanded = [];\n var numWrappedUnions = 0;\n var isValidWrappedUnion = true;\n types.forEach(function(type) {\n switch (type.typeName) {\n case \"union:unwrapped\":\n isValidWrappedUnion = false;\n expanded = expanded.concat(type.types);\n break;\n case \"union:wrapped\":\n numWrappedUnions++;\n expanded = expanded.concat(type.types);\n break;\n case \"null\":\n expanded.push(type);\n break;\n default:\n isValidWrappedUnion = false;\n expanded.push(type);\n }\n });\n if (numWrappedUnions) {\n if (!isValidWrappedUnion) {\n throw new Error(\"cannot combine wrapped union\");\n }\n var branchTypes = {};\n expanded.forEach(function(type) {\n var name = type.branchName;\n var branchType = branchTypes[name];\n if (!branchType) {\n branchTypes[name] = type;\n } else if (!type.equals(branchType)) {\n throw new Error(\"inconsistent branch type\");\n }\n });\n var wrapUnions = opts.wrapUnions;\n var unionType;\n opts.wrapUnions = true;\n try {\n unionType = Type.forSchema(Object.keys(branchTypes).map(function(name) {\n return branchTypes[name];\n }), opts);\n } catch (err) {\n opts.wrapUnions = wrapUnions;\n throw err;\n }\n opts.wrapUnions = wrapUnions;\n return unionType;\n }\n var bucketized = {};\n expanded.forEach(function(type) {\n var bucket = getTypeBucket(type);\n var bucketTypes = bucketized[bucket];\n if (!bucketTypes) {\n bucketized[bucket] = bucketTypes = [];\n }\n bucketTypes.push(type);\n });\n var buckets = Object.keys(bucketized);\n var augmented = buckets.map(function(bucket) {\n var bucketTypes = bucketized[bucket];\n if (bucketTypes.length === 1) {\n return bucketTypes[0];\n } else {\n switch (bucket) {\n case \"null\":\n case \"boolean\":\n return bucketTypes[0];\n case \"number\":\n return combineNumbers(bucketTypes);\n case \"string\":\n return combineStrings(bucketTypes, opts);\n case \"buffer\":\n return combineBuffers(bucketTypes, opts);\n case \"array\":\n bucketTypes = bucketTypes.filter(function(t) {\n return t !== opts.emptyArrayType;\n });\n if (!bucketTypes.length) {\n return opts.emptyArrayType;\n }\n return Type.forSchema({\n type: \"array\",\n items: Type.forTypes(bucketTypes.map(function(t) {\n return t.itemsType;\n }), opts)\n }, opts);\n default:\n return combineObjects(bucketTypes, opts);\n }\n }\n });\n if (augmented.length === 1) {\n return augmented[0];\n } else {\n return Type.forSchema(augmented, opts);\n }\n };\n Type.isType = function() {\n var l = arguments.length;\n if (!l) {\n return false;\n }\n var any = arguments[0];\n if (!any || typeof any._update != \"function\" || typeof any.fingerprint != \"function\") {\n return false;\n }\n if (l === 1) {\n return true;\n }\n var typeName = any.typeName;\n var i;\n for (i = 1; i < l; i++) {\n if (typeName.indexOf(arguments[i]) === 0) {\n return true;\n }\n }\n return false;\n };\n Type.__reset = function(size) {\n debug(\"resetting type buffer to %d\", size);\n TAP.buf = new SlowBuffer(size);\n };\n Object.defineProperty(Type.prototype, \"branchName\", {\n enumerable: true,\n get: function() {\n var type = Type.isType(this, \"logical\") ? this.underlyingType : this;\n if (type.name) {\n return type.name;\n }\n if (Type.isType(type, \"abstract\")) {\n return type._concreteTypeName;\n }\n return Type.isType(type, \"union\") ? void 0 : type.typeName;\n }\n });\n Type.prototype.clone = function(val, opts) {\n if (opts) {\n opts = {\n coerce: !!opts.coerceBuffers | 0,\n // Coerce JSON to Buffer.\n fieldHook: opts.fieldHook,\n qualifyNames: !!opts.qualifyNames,\n skip: !!opts.skipMissingFields,\n wrap: !!opts.wrapUnions | 0\n // Wrap first match into union.\n };\n return this._copy(val, opts);\n } else {\n return this.fromBuffer(this.toBuffer(val));\n }\n };\n Type.prototype.compare = utils.abstractFunction;\n Type.prototype.compareBuffers = function(buf1, buf2) {\n return this._match(new Tap(buf1), new Tap(buf2));\n };\n Type.prototype.createResolver = function(type, opts) {\n if (!Type.isType(type)) {\n throw new Error(f2(\"not a type: %j\", type));\n }\n if (!Type.isType(this, \"union\", \"logical\") && Type.isType(type, \"logical\")) {\n return this.createResolver(type.underlyingType, opts);\n }\n opts = opts || {};\n opts.registry = opts.registry || {};\n var resolver, key;\n if (Type.isType(this, \"record\", \"error\") && Type.isType(type, \"record\", \"error\")) {\n key = this.name + \":\" + type.name;\n resolver = opts.registry[key];\n if (resolver) {\n return resolver;\n }\n }\n resolver = new Resolver(this);\n if (key) {\n opts.registry[key] = resolver;\n }\n if (Type.isType(type, \"union\")) {\n var resolvers = type.types.map(function(t) {\n return this.createResolver(t, opts);\n }, this);\n resolver._read = function(tap) {\n var index = tap.readLong();\n var resolver2 = resolvers[index];\n if (resolver2 === void 0) {\n throw new Error(f2(\"invalid union index: %s\", index));\n }\n return resolvers[index]._read(tap);\n };\n } else {\n this._update(resolver, type, opts);\n }\n if (!resolver._read) {\n throw new Error(f2(\"cannot read %s as %s\", type, this));\n }\n return Object.freeze(resolver);\n };\n Type.prototype.decode = function(buf, pos, resolver) {\n var tap = new Tap(buf, pos);\n var val = readValue(this, tap, resolver);\n if (!tap.isValid()) {\n return { value: void 0, offset: -1 };\n }\n return { value: val, offset: tap.pos };\n };\n Type.prototype.encode = function(val, buf, pos) {\n var tap = new Tap(buf, pos);\n this._write(tap, val);\n if (!tap.isValid()) {\n return buf.length - tap.pos;\n }\n return tap.pos;\n };\n Type.prototype.equals = function(type, opts) {\n var canon = (\n // Canonical equality.\n Type.isType(type) && this.fingerprint().equals(type.fingerprint())\n );\n if (!canon || !(opts && opts.strict)) {\n return canon;\n }\n return JSON.stringify(this.schema({ exportAttrs: true })) === JSON.stringify(type.schema({ exportAttrs: true }));\n };\n Type.prototype.fingerprint = function(algorithm) {\n if (!algorithm) {\n if (!this._hash.str) {\n var schemaStr = JSON.stringify(this.schema());\n this._hash.str = utils.getHash(schemaStr).toString(\"binary\");\n }\n return utils.bufferFrom(this._hash.str, \"binary\");\n } else {\n return utils.getHash(JSON.stringify(this.schema()), algorithm);\n }\n };\n Type.prototype.fromBuffer = function(buf, resolver, noCheck) {\n var tap = new Tap(buf);\n var val = readValue(this, tap, resolver, noCheck);\n if (!tap.isValid()) {\n throw new Error(\"truncated buffer\");\n }\n if (!noCheck && tap.pos < buf.length) {\n throw new Error(\"trailing data\");\n }\n return val;\n };\n Type.prototype.fromString = function(str) {\n return this._copy(JSON.parse(str), { coerce: 2 });\n };\n Type.prototype.inspect = function() {\n var typeName = this.typeName;\n var className = getClassName(typeName);\n if (isPrimitive(typeName)) {\n return f2(\"<%s>\", className);\n } else {\n var obj = this.schema({ exportAttrs: true, noDeref: true });\n if (typeof obj == \"object\" && !Type.isType(this, \"logical\")) {\n obj.type = void 0;\n }\n return f2(\"<%s %j>\", className, obj);\n }\n };\n Type.prototype.isValid = function(val, opts) {\n var flags = (opts && opts.noUndeclaredFields) | 0;\n var errorHook = opts && opts.errorHook;\n var hook, path;\n if (errorHook) {\n path = [];\n hook = function(any, type) {\n errorHook.call(this, path.slice(), any, type, val);\n };\n }\n return this._check(val, flags, hook, path);\n };\n Type.prototype.random = utils.abstractFunction;\n Type.prototype.schema = function(opts) {\n return this._attrs({\n exportAttrs: !!(opts && opts.exportAttrs),\n noDeref: !!(opts && opts.noDeref)\n });\n };\n Type.prototype.toBuffer = function(val) {\n TAP.pos = 0;\n this._write(TAP, val);\n var buf = utils.newBuffer(TAP.pos);\n if (TAP.isValid()) {\n TAP.buf.copy(buf, 0, 0, TAP.pos);\n } else {\n this._write(new Tap(buf), val);\n }\n return buf;\n };\n Type.prototype.toJSON = function() {\n return this.schema({ exportAttrs: true });\n };\n Type.prototype.toString = function(val) {\n if (val === void 0) {\n return JSON.stringify(this.schema({ noDeref: true }));\n }\n return JSON.stringify(this._copy(val, { coerce: 3 }));\n };\n Type.prototype.wrap = function(val) {\n var Branch = this._branchConstructor;\n return Branch === null ? null : new Branch(val);\n };\n Type.prototype._attrs = function(opts) {\n opts.derefed = opts.derefed || {};\n var name = this.name;\n if (name !== void 0) {\n if (opts.noDeref || opts.derefed[name]) {\n return name;\n }\n opts.derefed[name] = true;\n }\n var schema = {};\n if (this.name !== void 0) {\n schema.name = name;\n }\n schema.type = this.typeName;\n var derefedSchema = this._deref(schema, opts);\n if (derefedSchema !== void 0) {\n schema = derefedSchema;\n }\n if (opts.exportAttrs) {\n if (this.aliases && this.aliases.length) {\n schema.aliases = this.aliases;\n }\n if (this.doc !== void 0) {\n schema.doc = this.doc;\n }\n }\n return schema;\n };\n Type.prototype._createBranchConstructor = function() {\n var name = this.branchName;\n if (name === \"null\") {\n return null;\n }\n var attr = ~name.indexOf(\".\") ? \"this['\" + name + \"']\" : \"this.\" + name;\n var body = \"return function Branch$(val) { \" + attr + \" = val; };\";\n var Branch = new Function(body)();\n Branch.type = this;\n Branch.prototype.unwrap = new Function(\"return \" + attr + \";\");\n Branch.prototype.unwrapped = Branch.prototype.unwrap;\n return Branch;\n };\n Type.prototype._peek = function(tap) {\n var pos = tap.pos;\n var val = this._read(tap);\n tap.pos = pos;\n return val;\n };\n Type.prototype._check = utils.abstractFunction;\n Type.prototype._copy = utils.abstractFunction;\n Type.prototype._deref = utils.abstractFunction;\n Type.prototype._match = utils.abstractFunction;\n Type.prototype._read = utils.abstractFunction;\n Type.prototype._skip = utils.abstractFunction;\n Type.prototype._update = utils.abstractFunction;\n Type.prototype._write = utils.abstractFunction;\n Type.prototype.getAliases = function() {\n return this.aliases;\n };\n Type.prototype.getFingerprint = Type.prototype.fingerprint;\n Type.prototype.getName = function(asBranch) {\n return this.name || !asBranch ? this.name : this.branchName;\n };\n Type.prototype.getSchema = Type.prototype.schema;\n Type.prototype.getTypeName = function() {\n return this.typeName;\n };\n function PrimitiveType(noFreeze) {\n Type.call(this);\n this._branchConstructor = this._createBranchConstructor();\n if (!noFreeze) {\n Object.freeze(this);\n }\n }\n util.inherits(PrimitiveType, Type);\n PrimitiveType.prototype._update = function(resolver, type) {\n if (type.typeName === this.typeName) {\n resolver._read = this._read;\n }\n };\n PrimitiveType.prototype._copy = function(val) {\n this._check(val, void 0, throwInvalidError);\n return val;\n };\n PrimitiveType.prototype._deref = function() {\n return this.typeName;\n };\n PrimitiveType.prototype.compare = utils.compare;\n function NullType() {\n PrimitiveType.call(this);\n }\n util.inherits(NullType, PrimitiveType);\n NullType.prototype._check = function(val, flags, hook) {\n var b2 = val === null;\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n NullType.prototype._read = function() {\n return null;\n };\n NullType.prototype._skip = function() {\n };\n NullType.prototype._write = function(tap, val) {\n if (val !== null) {\n throwInvalidError(val, this);\n }\n };\n NullType.prototype._match = function() {\n return 0;\n };\n NullType.prototype.compare = NullType.prototype._match;\n NullType.prototype.typeName = \"null\";\n NullType.prototype.random = NullType.prototype._read;\n function BooleanType() {\n PrimitiveType.call(this);\n }\n util.inherits(BooleanType, PrimitiveType);\n BooleanType.prototype._check = function(val, flags, hook) {\n var b2 = typeof val == \"boolean\";\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n BooleanType.prototype._read = function(tap) {\n return tap.readBoolean();\n };\n BooleanType.prototype._skip = function(tap) {\n tap.skipBoolean();\n };\n BooleanType.prototype._write = function(tap, val) {\n if (typeof val != \"boolean\") {\n throwInvalidError(val, this);\n }\n tap.writeBoolean(val);\n };\n BooleanType.prototype._match = function(tap1, tap2) {\n return tap1.matchBoolean(tap2);\n };\n BooleanType.prototype.typeName = \"boolean\";\n BooleanType.prototype.random = function() {\n return RANDOM.nextBoolean();\n };\n function IntType() {\n PrimitiveType.call(this);\n }\n util.inherits(IntType, PrimitiveType);\n IntType.prototype._check = function(val, flags, hook) {\n var b2 = val === (val | 0);\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n IntType.prototype._read = function(tap) {\n return tap.readInt();\n };\n IntType.prototype._skip = function(tap) {\n tap.skipInt();\n };\n IntType.prototype._write = function(tap, val) {\n if (val !== (val | 0)) {\n throwInvalidError(val, this);\n }\n tap.writeInt(val);\n };\n IntType.prototype._match = function(tap1, tap2) {\n return tap1.matchInt(tap2);\n };\n IntType.prototype.typeName = \"int\";\n IntType.prototype.random = function() {\n return RANDOM.nextInt(1e3) | 0;\n };\n function LongType() {\n PrimitiveType.call(this);\n }\n util.inherits(LongType, PrimitiveType);\n LongType.prototype._check = function(val, flags, hook) {\n var b2 = typeof val == \"number\" && val % 1 === 0 && isSafeLong(val);\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n LongType.prototype._read = function(tap) {\n var n = tap.readLong();\n if (!isSafeLong(n)) {\n throw new Error(\"potential precision loss\");\n }\n return n;\n };\n LongType.prototype._skip = function(tap) {\n tap.skipLong();\n };\n LongType.prototype._write = function(tap, val) {\n if (typeof val != \"number\" || val % 1 || !isSafeLong(val)) {\n throwInvalidError(val, this);\n }\n tap.writeLong(val);\n };\n LongType.prototype._match = function(tap1, tap2) {\n return tap1.matchLong(tap2);\n };\n LongType.prototype._update = function(resolver, type) {\n switch (type.typeName) {\n case \"int\":\n resolver._read = type._read;\n break;\n case \"abstract:long\":\n case \"long\":\n resolver._read = this._read;\n }\n };\n LongType.prototype.typeName = \"long\";\n LongType.prototype.random = function() {\n return RANDOM.nextInt();\n };\n LongType.__with = function(methods, noUnpack) {\n methods = methods || {};\n var mapping = {\n toBuffer: \"_toBuffer\",\n fromBuffer: \"_fromBuffer\",\n fromJSON: \"_fromJSON\",\n toJSON: \"_toJSON\",\n isValid: \"_isValid\",\n compare: \"compare\"\n };\n var type = new AbstractLongType(noUnpack);\n Object.keys(mapping).forEach(function(name) {\n if (methods[name] === void 0) {\n throw new Error(f2(\"missing method implementation: %s\", name));\n }\n type[mapping[name]] = methods[name];\n });\n return Object.freeze(type);\n };\n function FloatType() {\n PrimitiveType.call(this);\n }\n util.inherits(FloatType, PrimitiveType);\n FloatType.prototype._check = function(val, flags, hook) {\n var b2 = typeof val == \"number\";\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n FloatType.prototype._read = function(tap) {\n return tap.readFloat();\n };\n FloatType.prototype._skip = function(tap) {\n tap.skipFloat();\n };\n FloatType.prototype._write = function(tap, val) {\n if (typeof val != \"number\") {\n throwInvalidError(val, this);\n }\n tap.writeFloat(val);\n };\n FloatType.prototype._match = function(tap1, tap2) {\n return tap1.matchFloat(tap2);\n };\n FloatType.prototype._update = function(resolver, type) {\n switch (type.typeName) {\n case \"float\":\n case \"int\":\n resolver._read = type._read;\n break;\n case \"abstract:long\":\n case \"long\":\n resolver._read = function(tap) {\n return tap.readLong();\n };\n }\n };\n FloatType.prototype.typeName = \"float\";\n FloatType.prototype.random = function() {\n return RANDOM.nextFloat(1e3);\n };\n function DoubleType() {\n PrimitiveType.call(this);\n }\n util.inherits(DoubleType, PrimitiveType);\n DoubleType.prototype._check = function(val, flags, hook) {\n var b2 = typeof val == \"number\";\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n DoubleType.prototype._read = function(tap) {\n return tap.readDouble();\n };\n DoubleType.prototype._skip = function(tap) {\n tap.skipDouble();\n };\n DoubleType.prototype._write = function(tap, val) {\n if (typeof val != \"number\") {\n throwInvalidError(val, this);\n }\n tap.writeDouble(val);\n };\n DoubleType.prototype._match = function(tap1, tap2) {\n return tap1.matchDouble(tap2);\n };\n DoubleType.prototype._update = function(resolver, type) {\n switch (type.typeName) {\n case \"double\":\n case \"float\":\n case \"int\":\n resolver._read = type._read;\n break;\n case \"abstract:long\":\n case \"long\":\n resolver._read = function(tap) {\n return tap.readLong();\n };\n }\n };\n DoubleType.prototype.typeName = \"double\";\n DoubleType.prototype.random = function() {\n return RANDOM.nextFloat();\n };\n function StringType() {\n PrimitiveType.call(this);\n }\n util.inherits(StringType, PrimitiveType);\n StringType.prototype._check = function(val, flags, hook) {\n var b2 = typeof val == \"string\";\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n StringType.prototype._read = function(tap) {\n return tap.readString();\n };\n StringType.prototype._skip = function(tap) {\n tap.skipString();\n };\n StringType.prototype._write = function(tap, val) {\n if (typeof val != \"string\") {\n throwInvalidError(val, this);\n }\n tap.writeString(val);\n };\n StringType.prototype._match = function(tap1, tap2) {\n return tap1.matchString(tap2);\n };\n StringType.prototype._update = function(resolver, type) {\n switch (type.typeName) {\n case \"bytes\":\n case \"string\":\n resolver._read = this._read;\n }\n };\n StringType.prototype.typeName = \"string\";\n StringType.prototype.random = function() {\n return RANDOM.nextString(RANDOM.nextInt(32));\n };\n function BytesType() {\n PrimitiveType.call(this);\n }\n util.inherits(BytesType, PrimitiveType);\n BytesType.prototype._check = function(val, flags, hook) {\n var b2 = Buffer2.isBuffer(val);\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n BytesType.prototype._read = function(tap) {\n return tap.readBytes();\n };\n BytesType.prototype._skip = function(tap) {\n tap.skipBytes();\n };\n BytesType.prototype._write = function(tap, val) {\n if (!Buffer2.isBuffer(val)) {\n throwInvalidError(val, this);\n }\n tap.writeBytes(val);\n };\n BytesType.prototype._match = function(tap1, tap2) {\n return tap1.matchBytes(tap2);\n };\n BytesType.prototype._update = StringType.prototype._update;\n BytesType.prototype._copy = function(obj, opts) {\n var buf;\n switch ((opts && opts.coerce) | 0) {\n case 3:\n this._check(obj, void 0, throwInvalidError);\n return obj.toString(\"binary\");\n case 2:\n if (typeof obj != \"string\") {\n throw new Error(f2(\"cannot coerce to buffer: %j\", obj));\n }\n buf = utils.bufferFrom(obj, \"binary\");\n this._check(buf, void 0, throwInvalidError);\n return buf;\n case 1:\n if (!isJsonBuffer(obj)) {\n throw new Error(f2(\"cannot coerce to buffer: %j\", obj));\n }\n buf = utils.bufferFrom(obj.data);\n this._check(buf, void 0, throwInvalidError);\n return buf;\n default:\n this._check(obj, void 0, throwInvalidError);\n return utils.bufferFrom(obj);\n }\n };\n BytesType.prototype.compare = Buffer2.compare;\n BytesType.prototype.typeName = \"bytes\";\n BytesType.prototype.random = function() {\n return RANDOM.nextBuffer(RANDOM.nextInt(32));\n };\n function UnionType(schema, opts) {\n Type.call(this);\n if (!Array.isArray(schema)) {\n throw new Error(f2(\"non-array union schema: %j\", schema));\n }\n if (!schema.length) {\n throw new Error(\"empty union\");\n }\n this.types = Object.freeze(schema.map(function(obj) {\n return Type.forSchema(obj, opts);\n }));\n this._branchIndices = {};\n this.types.forEach(function(type, i) {\n if (Type.isType(type, \"union\")) {\n throw new Error(\"unions cannot be directly nested\");\n }\n var branch = type.branchName;\n if (this._branchIndices[branch] !== void 0) {\n throw new Error(f2(\"duplicate union branch name: %j\", branch));\n }\n this._branchIndices[branch] = i;\n }, this);\n }\n util.inherits(UnionType, Type);\n UnionType.prototype._branchConstructor = function() {\n throw new Error(\"unions cannot be directly wrapped\");\n };\n UnionType.prototype._skip = function(tap) {\n this.types[tap.readLong()]._skip(tap);\n };\n UnionType.prototype._match = function(tap1, tap2) {\n var n1 = tap1.readLong();\n var n2 = tap2.readLong();\n if (n1 === n2) {\n return this.types[n1]._match(tap1, tap2);\n } else {\n return n1 < n2 ? -1 : 1;\n }\n };\n UnionType.prototype._deref = function(schema, opts) {\n return this.types.map(function(t) {\n return t._attrs(opts);\n });\n };\n UnionType.prototype.getTypes = function() {\n return this.types;\n };\n function UnwrappedUnionType(schema, opts) {\n UnionType.call(this, schema, opts);\n this._dynamicBranches = null;\n this._bucketIndices = {};\n this.types.forEach(function(type, index) {\n if (Type.isType(type, \"abstract\", \"logical\")) {\n if (!this._dynamicBranches) {\n this._dynamicBranches = [];\n }\n this._dynamicBranches.push({ index, type });\n } else {\n var bucket = getTypeBucket(type);\n if (this._bucketIndices[bucket] !== void 0) {\n throw new Error(f2(\"ambiguous unwrapped union: %j\", this));\n }\n this._bucketIndices[bucket] = index;\n }\n }, this);\n Object.freeze(this);\n }\n util.inherits(UnwrappedUnionType, UnionType);\n UnwrappedUnionType.prototype._getIndex = function(val) {\n var index = this._bucketIndices[getValueBucket(val)];\n if (this._dynamicBranches) {\n index = this._getBranchIndex(val, index);\n }\n return index;\n };\n UnwrappedUnionType.prototype._getBranchIndex = function(any, index) {\n var logicalBranches = this._dynamicBranches;\n var i, l, branch;\n for (i = 0, l = logicalBranches.length; i < l; i++) {\n branch = logicalBranches[i];\n if (branch.type._check(any)) {\n if (index === void 0) {\n index = branch.index;\n } else {\n throw new Error(\"ambiguous conversion\");\n }\n }\n }\n return index;\n };\n UnwrappedUnionType.prototype._check = function(val, flags, hook, path) {\n var index = this._getIndex(val);\n var b2 = index !== void 0;\n if (b2) {\n return this.types[index]._check(val, flags, hook, path);\n }\n if (hook) {\n hook(val, this);\n }\n return b2;\n };\n UnwrappedUnionType.prototype._read = function(tap) {\n var index = tap.readLong();\n var branchType = this.types[index];\n if (branchType) {\n return branchType._read(tap);\n } else {\n throw new Error(f2(\"invalid union index: %s\", index));\n }\n };\n UnwrappedUnionType.prototype._write = function(tap, val) {\n var index = this._getIndex(val);\n if (index === void 0) {\n throwInvalidError(val, this);\n }\n tap.writeLong(index);\n if (val !== null) {\n this.types[index]._write(tap, val);\n }\n };\n UnwrappedUnionType.prototype._update = function(resolver, type, opts) {\n var i, l, typeResolver;\n for (i = 0, l = this.types.length; i < l; i++) {\n try {\n typeResolver = this.types[i].createResolver(type, opts);\n } catch (err) {\n continue;\n }\n resolver._read = function(tap) {\n return typeResolver._read(tap);\n };\n return;\n }\n };\n UnwrappedUnionType.prototype._copy = function(val, opts) {\n var coerce = opts && opts.coerce | 0;\n var wrap = opts && opts.wrap | 0;\n var index;\n if (wrap === 2) {\n index = 0;\n } else {\n switch (coerce) {\n case 1:\n if (isJsonBuffer(val) && this._bucketIndices.buffer !== void 0) {\n index = this._bucketIndices.buffer;\n } else {\n index = this._getIndex(val);\n }\n break;\n case 2:\n if (val === null) {\n index = this._bucketIndices[\"null\"];\n } else if (typeof val === \"object\") {\n var keys = Object.keys(val);\n if (keys.length === 1) {\n index = this._branchIndices[keys[0]];\n val = val[keys[0]];\n }\n }\n break;\n default:\n index = this._getIndex(val);\n }\n if (index === void 0) {\n throwInvalidError(val, this);\n }\n }\n var type = this.types[index];\n if (val === null || wrap === 3) {\n return type._copy(val, opts);\n } else {\n switch (coerce) {\n case 3:\n var obj = {};\n obj[type.branchName] = type._copy(val, opts);\n return obj;\n default:\n return type._copy(val, opts);\n }\n }\n };\n UnwrappedUnionType.prototype.compare = function(val1, val2) {\n var index1 = this._getIndex(val1);\n var index2 = this._getIndex(val2);\n if (index1 === void 0) {\n throwInvalidError(val1, this);\n } else if (index2 === void 0) {\n throwInvalidError(val2, this);\n } else if (index1 === index2) {\n return this.types[index1].compare(val1, val2);\n } else {\n return utils.compare(index1, index2);\n }\n };\n UnwrappedUnionType.prototype.typeName = \"union:unwrapped\";\n UnwrappedUnionType.prototype.random = function() {\n var index = RANDOM.nextInt(this.types.length);\n return this.types[index].random();\n };\n function WrappedUnionType(schema, opts) {\n UnionType.call(this, schema, opts);\n Object.freeze(this);\n }\n util.inherits(WrappedUnionType, UnionType);\n WrappedUnionType.prototype._check = function(val, flags, hook, path) {\n var b2 = false;\n if (val === null) {\n b2 = this._branchIndices[\"null\"] !== void 0;\n } else if (typeof val == \"object\") {\n var keys = Object.keys(val);\n if (keys.length === 1) {\n var name = keys[0];\n var index = this._branchIndices[name];\n if (index !== void 0) {\n if (hook) {\n path.push(name);\n b2 = this.types[index]._check(val[name], flags, hook, path);\n path.pop();\n return b2;\n } else {\n return this.types[index]._check(val[name], flags);\n }\n }\n }\n }\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n WrappedUnionType.prototype._read = function(tap) {\n var type = this.types[tap.readLong()];\n if (!type) {\n throw new Error(f2(\"invalid union index\"));\n }\n var Branch = type._branchConstructor;\n if (Branch === null) {\n return null;\n } else {\n return new Branch(type._read(tap));\n }\n };\n WrappedUnionType.prototype._write = function(tap, val) {\n var index, keys, name;\n if (val === null) {\n index = this._branchIndices[\"null\"];\n if (index === void 0) {\n throwInvalidError(val, this);\n }\n tap.writeLong(index);\n } else {\n keys = Object.keys(val);\n if (keys.length === 1) {\n name = keys[0];\n index = this._branchIndices[name];\n }\n if (index === void 0) {\n throwInvalidError(val, this);\n }\n tap.writeLong(index);\n this.types[index]._write(tap, val[name]);\n }\n };\n WrappedUnionType.prototype._update = function(resolver, type, opts) {\n var i, l, typeResolver, Branch;\n for (i = 0, l = this.types.length; i < l; i++) {\n try {\n typeResolver = this.types[i].createResolver(type, opts);\n } catch (err) {\n continue;\n }\n Branch = this.types[i]._branchConstructor;\n if (Branch) {\n resolver._read = function(tap) {\n return new Branch(typeResolver._read(tap));\n };\n } else {\n resolver._read = function() {\n return null;\n };\n }\n return;\n }\n };\n WrappedUnionType.prototype._copy = function(val, opts) {\n var wrap = opts && opts.wrap | 0;\n if (wrap === 2) {\n var firstType = this.types[0];\n if (val === null && firstType.typeName === \"null\") {\n return null;\n }\n return new firstType._branchConstructor(firstType._copy(val, opts));\n }\n if (val === null && this._branchIndices[\"null\"] !== void 0) {\n return null;\n }\n var i, l, obj;\n if (typeof val == \"object\") {\n var keys = Object.keys(val);\n if (keys.length === 1) {\n var name = keys[0];\n i = this._branchIndices[name];\n if (i === void 0 && opts.qualifyNames) {\n var j2, type;\n for (j2 = 0, l = this.types.length; j2 < l; j2++) {\n type = this.types[j2];\n if (type.name && name === utils.unqualify(type.name)) {\n i = j2;\n break;\n }\n }\n }\n if (i !== void 0) {\n obj = this.types[i]._copy(val[name], opts);\n }\n }\n }\n if (wrap === 1 && obj === void 0) {\n i = 0;\n l = this.types.length;\n while (i < l && obj === void 0) {\n try {\n obj = this.types[i]._copy(val, opts);\n } catch (err) {\n i++;\n }\n }\n }\n if (obj !== void 0) {\n return wrap === 3 ? obj : new this.types[i]._branchConstructor(obj);\n }\n throwInvalidError(val, this);\n };\n WrappedUnionType.prototype.compare = function(val1, val2) {\n var name1 = val1 === null ? \"null\" : Object.keys(val1)[0];\n var name2 = val2 === null ? \"null\" : Object.keys(val2)[0];\n var index = this._branchIndices[name1];\n if (name1 === name2) {\n return name1 === \"null\" ? 0 : this.types[index].compare(val1[name1], val2[name1]);\n } else {\n return utils.compare(index, this._branchIndices[name2]);\n }\n };\n WrappedUnionType.prototype.typeName = \"union:wrapped\";\n WrappedUnionType.prototype.random = function() {\n var index = RANDOM.nextInt(this.types.length);\n var type = this.types[index];\n var Branch = type._branchConstructor;\n if (!Branch) {\n return null;\n }\n return new Branch(type.random());\n };\n function EnumType(schema, opts) {\n Type.call(this, schema, opts);\n if (!Array.isArray(schema.symbols) || !schema.symbols.length) {\n throw new Error(f2(\"invalid enum symbols: %j\", schema.symbols));\n }\n this.symbols = Object.freeze(schema.symbols.slice());\n this._indices = {};\n this.symbols.forEach(function(symbol, i) {\n if (!utils.isValidName(symbol)) {\n throw new Error(f2(\"invalid %s symbol: %j\", this, symbol));\n }\n if (this._indices[symbol] !== void 0) {\n throw new Error(f2(\"duplicate %s symbol: %j\", this, symbol));\n }\n this._indices[symbol] = i;\n }, this);\n this.default = schema.default;\n if (this.default !== void 0 && this._indices[this.default] === void 0) {\n throw new Error(f2(\"invalid %s default: %j\", this, this.default));\n }\n this._branchConstructor = this._createBranchConstructor();\n Object.freeze(this);\n }\n util.inherits(EnumType, Type);\n EnumType.prototype._check = function(val, flags, hook) {\n var b2 = this._indices[val] !== void 0;\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n EnumType.prototype._read = function(tap) {\n var index = tap.readLong();\n var symbol = this.symbols[index];\n if (symbol === void 0) {\n throw new Error(f2(\"invalid %s enum index: %s\", this.name, index));\n }\n return symbol;\n };\n EnumType.prototype._skip = function(tap) {\n tap.skipLong();\n };\n EnumType.prototype._write = function(tap, val) {\n var index = this._indices[val];\n if (index === void 0) {\n throwInvalidError(val, this);\n }\n tap.writeLong(index);\n };\n EnumType.prototype._match = function(tap1, tap2) {\n return tap1.matchLong(tap2);\n };\n EnumType.prototype.compare = function(val1, val2) {\n return utils.compare(this._indices[val1], this._indices[val2]);\n };\n EnumType.prototype._update = function(resolver, type, opts) {\n var symbols = this.symbols;\n if (type.typeName === \"enum\" && hasCompatibleName(this, type, !opts.ignoreNamespaces) && (type.symbols.every(function(s) {\n return ~symbols.indexOf(s);\n }) || this.default !== void 0)) {\n resolver.symbols = type.symbols.map(function(s) {\n return this._indices[s] === void 0 ? this.default : s;\n }, this);\n resolver._read = type._read;\n }\n };\n EnumType.prototype._copy = function(val) {\n this._check(val, void 0, throwInvalidError);\n return val;\n };\n EnumType.prototype._deref = function(schema) {\n schema.symbols = this.symbols;\n };\n EnumType.prototype.getSymbols = function() {\n return this.symbols;\n };\n EnumType.prototype.typeName = \"enum\";\n EnumType.prototype.random = function() {\n return RANDOM.choice(this.symbols);\n };\n function FixedType(schema, opts) {\n Type.call(this, schema, opts);\n if (schema.size !== (schema.size | 0) || schema.size < 0) {\n throw new Error(f2(\"invalid %s size\", this.branchName));\n }\n this.size = schema.size | 0;\n this._branchConstructor = this._createBranchConstructor();\n Object.freeze(this);\n }\n util.inherits(FixedType, Type);\n FixedType.prototype._check = function(val, flags, hook) {\n var b2 = Buffer2.isBuffer(val) && val.length === this.size;\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n FixedType.prototype._read = function(tap) {\n return tap.readFixed(this.size);\n };\n FixedType.prototype._skip = function(tap) {\n tap.skipFixed(this.size);\n };\n FixedType.prototype._write = function(tap, val) {\n if (!Buffer2.isBuffer(val) || val.length !== this.size) {\n throwInvalidError(val, this);\n }\n tap.writeFixed(val, this.size);\n };\n FixedType.prototype._match = function(tap1, tap2) {\n return tap1.matchFixed(tap2, this.size);\n };\n FixedType.prototype.compare = Buffer2.compare;\n FixedType.prototype._update = function(resolver, type, opts) {\n if (type.typeName === \"fixed\" && this.size === type.size && hasCompatibleName(this, type, !opts.ignoreNamespaces)) {\n resolver.size = this.size;\n resolver._read = this._read;\n }\n };\n FixedType.prototype._copy = BytesType.prototype._copy;\n FixedType.prototype._deref = function(schema) {\n schema.size = this.size;\n };\n FixedType.prototype.getSize = function() {\n return this.size;\n };\n FixedType.prototype.typeName = \"fixed\";\n FixedType.prototype.random = function() {\n return RANDOM.nextBuffer(this.size);\n };\n function MapType(schema, opts) {\n Type.call(this);\n if (!schema.values) {\n throw new Error(f2(\"missing map values: %j\", schema));\n }\n this.valuesType = Type.forSchema(schema.values, opts);\n this._branchConstructor = this._createBranchConstructor();\n Object.freeze(this);\n }\n util.inherits(MapType, Type);\n MapType.prototype._check = function(val, flags, hook, path) {\n if (!val || typeof val != \"object\" || Array.isArray(val)) {\n if (hook) {\n hook(val, this);\n }\n return false;\n }\n var keys = Object.keys(val);\n var b2 = true;\n var i, l, j2, key;\n if (hook) {\n j2 = path.length;\n path.push(\"\");\n for (i = 0, l = keys.length; i < l; i++) {\n key = path[j2] = keys[i];\n if (!this.valuesType._check(val[key], flags, hook, path)) {\n b2 = false;\n }\n }\n path.pop();\n } else {\n for (i = 0, l = keys.length; i < l; i++) {\n if (!this.valuesType._check(val[keys[i]], flags)) {\n return false;\n }\n }\n }\n return b2;\n };\n MapType.prototype._read = function(tap) {\n var values = this.valuesType;\n var val = {};\n var n;\n while (n = readArraySize(tap)) {\n while (n--) {\n var key = tap.readString();\n val[key] = values._read(tap);\n }\n }\n return val;\n };\n MapType.prototype._skip = function(tap) {\n var values = this.valuesType;\n var len, n;\n while (n = tap.readLong()) {\n if (n < 0) {\n len = tap.readLong();\n tap.pos += len;\n } else {\n while (n--) {\n tap.skipString();\n values._skip(tap);\n }\n }\n }\n };\n MapType.prototype._write = function(tap, val) {\n if (!val || typeof val != \"object\" || Array.isArray(val)) {\n throwInvalidError(val, this);\n }\n var values = this.valuesType;\n var keys = Object.keys(val);\n var n = keys.length;\n var i, key;\n if (n) {\n tap.writeLong(n);\n for (i = 0; i < n; i++) {\n key = keys[i];\n tap.writeString(key);\n values._write(tap, val[key]);\n }\n }\n tap.writeLong(0);\n };\n MapType.prototype._match = function() {\n throw new Error(\"maps cannot be compared\");\n };\n MapType.prototype._update = function(rsv, type, opts) {\n if (type.typeName === \"map\") {\n rsv.valuesType = this.valuesType.createResolver(type.valuesType, opts);\n rsv._read = this._read;\n }\n };\n MapType.prototype._copy = function(val, opts) {\n if (val && typeof val == \"object\" && !Array.isArray(val)) {\n var values = this.valuesType;\n var keys = Object.keys(val);\n var i, l, key;\n var copy = {};\n for (i = 0, l = keys.length; i < l; i++) {\n key = keys[i];\n copy[key] = values._copy(val[key], opts);\n }\n return copy;\n }\n throwInvalidError(val, this);\n };\n MapType.prototype.compare = MapType.prototype._match;\n MapType.prototype.typeName = \"map\";\n MapType.prototype.getValuesType = function() {\n return this.valuesType;\n };\n MapType.prototype.random = function() {\n var val = {};\n var i, l;\n for (i = 0, l = RANDOM.nextInt(10); i < l; i++) {\n val[RANDOM.nextString(RANDOM.nextInt(20))] = this.valuesType.random();\n }\n return val;\n };\n MapType.prototype._deref = function(schema, opts) {\n schema.values = this.valuesType._attrs(opts);\n };\n function ArrayType(schema, opts) {\n Type.call(this);\n if (!schema.items) {\n throw new Error(f2(\"missing array items: %j\", schema));\n }\n this.itemsType = Type.forSchema(schema.items, opts);\n this._branchConstructor = this._createBranchConstructor();\n Object.freeze(this);\n }\n util.inherits(ArrayType, Type);\n ArrayType.prototype._check = function(val, flags, hook, path) {\n if (!Array.isArray(val)) {\n if (hook) {\n hook(val, this);\n }\n return false;\n }\n var items = this.itemsType;\n var b2 = true;\n var i, l, j2;\n if (hook) {\n j2 = path.length;\n path.push(\"\");\n for (i = 0, l = val.length; i < l; i++) {\n path[j2] = \"\" + i;\n if (!items._check(val[i], flags, hook, path)) {\n b2 = false;\n }\n }\n path.pop();\n } else {\n for (i = 0, l = val.length; i < l; i++) {\n if (!items._check(val[i], flags)) {\n return false;\n }\n }\n }\n return b2;\n };\n ArrayType.prototype._read = function(tap) {\n var items = this.itemsType;\n var i = 0;\n var val, n;\n while (n = tap.readLong()) {\n if (n < 0) {\n n = -n;\n tap.skipLong();\n }\n val = val || new Array(n);\n while (n--) {\n val[i++] = items._read(tap);\n }\n }\n return val || [];\n };\n ArrayType.prototype._skip = function(tap) {\n var items = this.itemsType;\n var len, n;\n while (n = tap.readLong()) {\n if (n < 0) {\n len = tap.readLong();\n tap.pos += len;\n } else {\n while (n--) {\n items._skip(tap);\n }\n }\n }\n };\n ArrayType.prototype._write = function(tap, val) {\n if (!Array.isArray(val)) {\n throwInvalidError(val, this);\n }\n var items = this.itemsType;\n var n = val.length;\n var i;\n if (n) {\n tap.writeLong(n);\n for (i = 0; i < n; i++) {\n items._write(tap, val[i]);\n }\n }\n tap.writeLong(0);\n };\n ArrayType.prototype._match = function(tap1, tap2) {\n var n1 = tap1.readLong();\n var n2 = tap2.readLong();\n var f3;\n while (n1 && n2) {\n f3 = this.itemsType._match(tap1, tap2);\n if (f3) {\n return f3;\n }\n if (!--n1) {\n n1 = readArraySize(tap1);\n }\n if (!--n2) {\n n2 = readArraySize(tap2);\n }\n }\n return utils.compare(n1, n2);\n };\n ArrayType.prototype._update = function(resolver, type, opts) {\n if (type.typeName === \"array\") {\n resolver.itemsType = this.itemsType.createResolver(type.itemsType, opts);\n resolver._read = this._read;\n }\n };\n ArrayType.prototype._copy = function(val, opts) {\n if (!Array.isArray(val)) {\n throwInvalidError(val, this);\n }\n var items = new Array(val.length);\n var i, l;\n for (i = 0, l = val.length; i < l; i++) {\n items[i] = this.itemsType._copy(val[i], opts);\n }\n return items;\n };\n ArrayType.prototype._deref = function(schema, opts) {\n schema.items = this.itemsType._attrs(opts);\n };\n ArrayType.prototype.compare = function(val1, val2) {\n var n1 = val1.length;\n var n2 = val2.length;\n var i, l, f3;\n for (i = 0, l = Math.min(n1, n2); i < l; i++) {\n if (f3 = this.itemsType.compare(val1[i], val2[i])) {\n return f3;\n }\n }\n return utils.compare(n1, n2);\n };\n ArrayType.prototype.getItemsType = function() {\n return this.itemsType;\n };\n ArrayType.prototype.typeName = \"array\";\n ArrayType.prototype.random = function() {\n var arr = [];\n var i, l;\n for (i = 0, l = RANDOM.nextInt(10); i < l; i++) {\n arr.push(this.itemsType.random());\n }\n return arr;\n };\n function RecordType(schema, opts) {\n opts = opts || {};\n var namespace = opts.namespace;\n if (schema.namespace !== void 0) {\n opts.namespace = schema.namespace;\n } else if (schema.name) {\n var ns = utils.impliedNamespace(schema.name);\n if (ns !== void 0) {\n opts.namespace = ns;\n }\n }\n Type.call(this, schema, opts);\n if (!Array.isArray(schema.fields)) {\n throw new Error(f2(\"non-array record fields: %j\", schema.fields));\n }\n if (utils.hasDuplicates(schema.fields, function(f3) {\n return f3.name;\n })) {\n throw new Error(f2(\"duplicate field name: %j\", schema.fields));\n }\n this._fieldsByName = {};\n this.fields = Object.freeze(schema.fields.map(function(f3) {\n var field = new Field(f3, opts);\n this._fieldsByName[field.name] = field;\n return field;\n }, this));\n this._branchConstructor = this._createBranchConstructor();\n this._isError = schema.type === \"error\";\n this.recordConstructor = this._createConstructor(\n opts.errorStackTraces,\n opts.omitRecordMethods\n );\n this._read = this._createReader();\n this._skip = this._createSkipper();\n this._write = this._createWriter();\n this._check = this._createChecker();\n opts.namespace = namespace;\n Object.freeze(this);\n }\n util.inherits(RecordType, Type);\n RecordType.prototype._getConstructorName = function() {\n return this.name ? utils.capitalize(utils.unqualify(this.name)) : this._isError ? \"Error$\" : \"Record$\";\n };\n RecordType.prototype._createConstructor = function(errorStack, plainRecords) {\n var outerArgs = [];\n var innerArgs = [];\n var ds = [];\n var innerBody = \"\";\n var i, l, field, name, defaultValue, hasDefault, stackField;\n for (i = 0, l = this.fields.length; i < l; i++) {\n field = this.fields[i];\n defaultValue = field.defaultValue;\n hasDefault = defaultValue() !== void 0;\n name = field.name;\n if (errorStack && this._isError && name === \"stack\" && Type.isType(field.type, \"string\") && !hasDefault) {\n stackField = field;\n }\n innerArgs.push(\"v\" + i);\n innerBody += \" \";\n if (!hasDefault) {\n innerBody += \"this.\" + name + \" = v\" + i + \";\\n\";\n } else {\n innerBody += \"if (v\" + i + \" === undefined) { \";\n innerBody += \"this.\" + name + \" = d\" + ds.length + \"(); \";\n innerBody += \"} else { this.\" + name + \" = v\" + i + \"; }\\n\";\n outerArgs.push(\"d\" + ds.length);\n ds.push(defaultValue);\n }\n }\n if (stackField) {\n innerBody += \" if (this.stack === undefined) { \";\n if (typeof Error.captureStackTrace == \"function\") {\n innerBody += \"Error.captureStackTrace(this, this.constructor);\";\n } else {\n innerBody += \"this.stack = Error().stack;\";\n }\n innerBody += \" }\\n\";\n }\n var outerBody = \"return function \" + this._getConstructorName() + \"(\";\n outerBody += innerArgs.join() + \") {\\n\" + innerBody + \"};\";\n var Record = new Function(outerArgs.join(), outerBody).apply(void 0, ds);\n if (plainRecords) {\n return Record;\n }\n var self = this;\n Record.getType = function() {\n return self;\n };\n Record.type = self;\n if (this._isError) {\n util.inherits(Record, Error);\n Record.prototype.name = this._getConstructorName();\n }\n Record.prototype.clone = function(o) {\n return self.clone(this, o);\n };\n Record.prototype.compare = function(v2) {\n return self.compare(this, v2);\n };\n Record.prototype.isValid = function(o) {\n return self.isValid(this, o);\n };\n Record.prototype.toBuffer = function() {\n return self.toBuffer(this);\n };\n Record.prototype.toString = function() {\n return self.toString(this);\n };\n Record.prototype.wrap = function() {\n return self.wrap(this);\n };\n Record.prototype.wrapped = Record.prototype.wrap;\n return Record;\n };\n RecordType.prototype._createChecker = function() {\n var names = [];\n var values = [];\n var name = this._getConstructorName();\n var body = \"return function check\" + name + \"(v, f, h, p) {\\n\";\n body += \" if (\\n\";\n body += \" v === null ||\\n\";\n body += \" typeof v != 'object' ||\\n\";\n body += \" (f && !this._checkFields(v))\\n\";\n body += \" ) {\\n\";\n body += \" if (h) { h(v, this); }\\n\";\n body += \" return false;\\n\";\n body += \" }\\n\";\n if (!this.fields.length) {\n body += \" return true;\\n\";\n } else {\n for (i = 0, l = this.fields.length; i < l; i++) {\n field = this.fields[i];\n names.push(\"t\" + i);\n values.push(field.type);\n if (field.defaultValue() !== void 0) {\n body += \" var v\" + i + \" = v.\" + field.name + \";\\n\";\n }\n }\n body += \" if (h) {\\n\";\n body += \" var b = 1;\\n\";\n body += \" var j = p.length;\\n\";\n body += \" p.push('');\\n\";\n var i, l, field;\n for (i = 0, l = this.fields.length; i < l; i++) {\n field = this.fields[i];\n body += \" p[j] = '\" + field.name + \"';\\n\";\n body += \" b &= \";\n if (field.defaultValue() === void 0) {\n body += \"t\" + i + \"._check(v.\" + field.name + \", f, h, p);\\n\";\n } else {\n body += \"v\" + i + \" === undefined || \";\n body += \"t\" + i + \"._check(v\" + i + \", f, h, p);\\n\";\n }\n }\n body += \" p.pop();\\n\";\n body += \" return !!b;\\n\";\n body += \" } else {\\n return (\\n \";\n body += this.fields.map(function(field2, i2) {\n return field2.defaultValue() === void 0 ? \"t\" + i2 + \"._check(v.\" + field2.name + \", f)\" : \"(v\" + i2 + \" === undefined || t\" + i2 + \"._check(v\" + i2 + \", f))\";\n }).join(\" &&\\n \");\n body += \"\\n );\\n }\\n\";\n }\n body += \"};\";\n return new Function(names.join(), body).apply(void 0, values);\n };\n RecordType.prototype._createReader = function() {\n var names = [];\n var values = [this.recordConstructor];\n var i, l;\n for (i = 0, l = this.fields.length; i < l; i++) {\n names.push(\"t\" + i);\n values.push(this.fields[i].type);\n }\n var name = this._getConstructorName();\n var body = \"return function read\" + name + \"(t) {\\n\";\n body += \" return new \" + name + \"(\\n \";\n body += names.map(function(s) {\n return s + \"._read(t)\";\n }).join(\",\\n \");\n body += \"\\n );\\n};\";\n names.unshift(name);\n return new Function(names.join(), body).apply(void 0, values);\n };\n RecordType.prototype._createSkipper = function() {\n var args = [];\n var body = \"return function skip\" + this._getConstructorName() + \"(t) {\\n\";\n var values = [];\n var i, l;\n for (i = 0, l = this.fields.length; i < l; i++) {\n args.push(\"t\" + i);\n values.push(this.fields[i].type);\n body += \" t\" + i + \"._skip(t);\\n\";\n }\n body += \"}\";\n return new Function(args.join(), body).apply(void 0, values);\n };\n RecordType.prototype._createWriter = function() {\n var args = [];\n var name = this._getConstructorName();\n var body = \"return function write\" + name + \"(t, v) {\\n\";\n var values = [];\n var i, l, field, value;\n for (i = 0, l = this.fields.length; i < l; i++) {\n field = this.fields[i];\n args.push(\"t\" + i);\n values.push(field.type);\n body += \" \";\n if (field.defaultValue() === void 0) {\n body += \"t\" + i + \"._write(t, v.\" + field.name + \");\\n\";\n } else {\n value = field.type.toBuffer(field.defaultValue()).toString(\"binary\");\n args.push(\"d\" + i);\n values.push(value);\n body += \"var v\" + i + \" = v.\" + field.name + \";\\n\";\n body += \"if (v\" + i + \" === undefined) {\\n\";\n body += \" t.writeBinary(d\" + i + \", \" + value.length + \");\\n\";\n body += \" } else {\\n t\" + i + \"._write(t, v\" + i + \");\\n }\\n\";\n }\n }\n body += \"}\";\n return new Function(args.join(), body).apply(void 0, values);\n };\n RecordType.prototype._update = function(resolver, type, opts) {\n if (!hasCompatibleName(this, type, !opts.ignoreNamespaces)) {\n throw new Error(f2(\"no alias found for %s\", type.name));\n }\n var rFields = this.fields;\n var wFields = type.fields;\n var wFieldsMap = utils.toMap(wFields, function(f3) {\n return f3.name;\n });\n var innerArgs = [];\n var resolvers = {};\n var i, j2, field, name, names, matches, fieldResolver;\n for (i = 0; i < rFields.length; i++) {\n field = rFields[i];\n names = getAliases(field);\n matches = [];\n for (j2 = 0; j2 < names.length; j2++) {\n name = names[j2];\n if (wFieldsMap[name]) {\n matches.push(name);\n }\n }\n if (matches.length > 1) {\n throw new Error(\n f2(\"ambiguous aliasing for %s.%s (%s)\", type.name, field.name, matches)\n );\n }\n if (!matches.length) {\n if (field.defaultValue() === void 0) {\n throw new Error(\n f2(\"no matching field for default-less %s.%s\", type.name, field.name)\n );\n }\n innerArgs.push(\"undefined\");\n } else {\n name = matches[0];\n fieldResolver = {\n resolver: field.type.createResolver(wFieldsMap[name].type, opts),\n name: \"_\" + field.name\n // Reader field name.\n };\n if (!resolvers[name]) {\n resolvers[name] = [fieldResolver];\n } else {\n resolvers[name].push(fieldResolver);\n }\n innerArgs.push(fieldResolver.name);\n }\n }\n var lazyIndex = -1;\n i = wFields.length;\n while (i && resolvers[wFields[--i].name] === void 0) {\n lazyIndex = i;\n }\n var uname = this._getConstructorName();\n var args = [uname];\n var values = [this.recordConstructor];\n var body = \" return function read\" + uname + \"(t, b) {\\n\";\n for (i = 0; i < wFields.length; i++) {\n if (i === lazyIndex) {\n body += \" if (!b) {\\n\";\n }\n field = type.fields[i];\n name = field.name;\n if (resolvers[name] === void 0) {\n body += ~lazyIndex && i >= lazyIndex ? \" \" : \" \";\n args.push(\"r\" + i);\n values.push(field.type);\n body += \"r\" + i + \"._skip(t);\\n\";\n } else {\n j2 = resolvers[name].length;\n while (j2--) {\n body += ~lazyIndex && i >= lazyIndex ? \" \" : \" \";\n args.push(\"r\" + i + \"f\" + j2);\n fieldResolver = resolvers[name][j2];\n values.push(fieldResolver.resolver);\n body += \"var \" + fieldResolver.name + \" = \";\n body += \"r\" + i + \"f\" + j2 + \"._\" + (j2 ? \"peek\" : \"read\") + \"(t);\\n\";\n }\n }\n }\n if (~lazyIndex) {\n body += \" }\\n\";\n }\n body += \" return new \" + uname + \"(\" + innerArgs.join() + \");\\n};\";\n resolver._read = new Function(args.join(), body).apply(void 0, values);\n };\n RecordType.prototype._match = function(tap1, tap2) {\n var fields = this.fields;\n var i, l, field, order, type;\n for (i = 0, l = fields.length; i < l; i++) {\n field = fields[i];\n order = field._order;\n type = field.type;\n if (order) {\n order *= type._match(tap1, tap2);\n if (order) {\n return order;\n }\n } else {\n type._skip(tap1);\n type._skip(tap2);\n }\n }\n return 0;\n };\n RecordType.prototype._checkFields = function(obj) {\n var keys = Object.keys(obj);\n var i, l;\n for (i = 0, l = keys.length; i < l; i++) {\n if (!this._fieldsByName[keys[i]]) {\n return false;\n }\n }\n return true;\n };\n RecordType.prototype._copy = function(val, opts) {\n var hook = opts && opts.fieldHook;\n var values = [void 0];\n var i, l, field, value;\n for (i = 0, l = this.fields.length; i < l; i++) {\n field = this.fields[i];\n value = val[field.name];\n if (value === void 0 && field.hasOwnProperty(\"defaultValue\")) {\n value = field.defaultValue();\n }\n if (opts && !opts.skip || value !== void 0) {\n value = field.type._copy(value, opts);\n }\n if (hook) {\n value = hook(field, value, this);\n }\n values.push(value);\n }\n var Record = this.recordConstructor;\n return new (Record.bind.apply(Record, values))();\n };\n RecordType.prototype._deref = function(schema, opts) {\n schema.fields = this.fields.map(function(field) {\n var fieldType = field.type;\n var fieldSchema = {\n name: field.name,\n type: fieldType._attrs(opts)\n };\n if (opts.exportAttrs) {\n var val = field.defaultValue();\n if (val !== void 0) {\n fieldSchema[\"default\"] = fieldType._copy(val, { coerce: 3, wrap: 3 });\n }\n var fieldOrder = field.order;\n if (fieldOrder !== \"ascending\") {\n fieldSchema.order = fieldOrder;\n }\n var fieldAliases = field.aliases;\n if (fieldAliases.length) {\n fieldSchema.aliases = fieldAliases;\n }\n var fieldDoc = field.doc;\n if (fieldDoc !== void 0) {\n fieldSchema.doc = fieldDoc;\n }\n }\n return fieldSchema;\n });\n };\n RecordType.prototype.compare = function(val1, val2) {\n var fields = this.fields;\n var i, l, field, name, order, type;\n for (i = 0, l = fields.length; i < l; i++) {\n field = fields[i];\n name = field.name;\n order = field._order;\n type = field.type;\n if (order) {\n order *= type.compare(val1[name], val2[name]);\n if (order) {\n return order;\n }\n }\n }\n return 0;\n };\n RecordType.prototype.random = function() {\n var fields = this.fields.map(function(f3) {\n return f3.type.random();\n });\n fields.unshift(void 0);\n var Record = this.recordConstructor;\n return new (Record.bind.apply(Record, fields))();\n };\n RecordType.prototype.field = function(name) {\n return this._fieldsByName[name];\n };\n RecordType.prototype.getField = RecordType.prototype.field;\n RecordType.prototype.getFields = function() {\n return this.fields;\n };\n RecordType.prototype.getRecordConstructor = function() {\n return this.recordConstructor;\n };\n Object.defineProperty(RecordType.prototype, \"typeName\", {\n enumerable: true,\n get: function() {\n return this._isError ? \"error\" : \"record\";\n }\n });\n function LogicalType(schema, opts) {\n this._logicalTypeName = schema.logicalType;\n Type.call(this);\n LOGICAL_TYPE = this;\n try {\n this._underlyingType = Type.forSchema(schema, opts);\n } finally {\n LOGICAL_TYPE = null;\n var l = UNDERLYING_TYPES.length;\n if (l && UNDERLYING_TYPES[l - 1][0] === this) {\n UNDERLYING_TYPES.pop();\n }\n }\n if (Type.isType(this.underlyingType, \"union\")) {\n this._branchConstructor = this.underlyingType._branchConstructor;\n } else {\n this._branchConstructor = this.underlyingType._createBranchConstructor();\n }\n }\n util.inherits(LogicalType, Type);\n Object.defineProperty(LogicalType.prototype, \"typeName\", {\n enumerable: true,\n get: function() {\n return \"logical:\" + this._logicalTypeName;\n }\n });\n Object.defineProperty(LogicalType.prototype, \"underlyingType\", {\n enumerable: true,\n get: function() {\n if (this._underlyingType) {\n return this._underlyingType;\n }\n var i, l, arr;\n for (i = 0, l = UNDERLYING_TYPES.length; i < l; i++) {\n arr = UNDERLYING_TYPES[i];\n if (arr[0] === this) {\n return arr[1];\n }\n }\n }\n });\n LogicalType.prototype.getUnderlyingType = function() {\n return this.underlyingType;\n };\n LogicalType.prototype._read = function(tap) {\n return this._fromValue(this.underlyingType._read(tap));\n };\n LogicalType.prototype._write = function(tap, any) {\n this.underlyingType._write(tap, this._toValue(any));\n };\n LogicalType.prototype._check = function(any, flags, hook, path) {\n try {\n var val = this._toValue(any);\n } catch (err) {\n }\n if (val === void 0) {\n if (hook) {\n hook(any, this);\n }\n return false;\n }\n return this.underlyingType._check(val, flags, hook, path);\n };\n LogicalType.prototype._copy = function(any, opts) {\n var type = this.underlyingType;\n switch (opts && opts.coerce) {\n case 3:\n return type._copy(this._toValue(any), opts);\n case 2:\n return this._fromValue(type._copy(any, opts));\n default:\n return this._fromValue(type._copy(this._toValue(any), opts));\n }\n };\n LogicalType.prototype._update = function(resolver, type, opts) {\n var _fromValue = this._resolve(type, opts);\n if (_fromValue) {\n resolver._read = function(tap) {\n return _fromValue(type._read(tap));\n };\n }\n };\n LogicalType.prototype.compare = function(obj1, obj2) {\n var val1 = this._toValue(obj1);\n var val2 = this._toValue(obj2);\n return this.underlyingType.compare(val1, val2);\n };\n LogicalType.prototype.random = function() {\n return this._fromValue(this.underlyingType.random());\n };\n LogicalType.prototype._deref = function(schema, opts) {\n var type = this.underlyingType;\n var isVisited = type.name !== void 0 && opts.derefed[type.name];\n schema = type._attrs(opts);\n if (!isVisited && opts.exportAttrs) {\n if (typeof schema == \"string\") {\n schema = { type: schema };\n }\n schema.logicalType = this._logicalTypeName;\n this._export(schema);\n }\n return schema;\n };\n LogicalType.prototype._skip = function(tap) {\n this.underlyingType._skip(tap);\n };\n LogicalType.prototype._export = function() {\n };\n LogicalType.prototype._fromValue = utils.abstractFunction;\n LogicalType.prototype._toValue = utils.abstractFunction;\n LogicalType.prototype._resolve = utils.abstractFunction;\n function AbstractLongType(noUnpack) {\n this._concreteTypeName = \"long\";\n PrimitiveType.call(this, true);\n this._noUnpack = !!noUnpack;\n }\n util.inherits(AbstractLongType, LongType);\n AbstractLongType.prototype.typeName = \"abstract:long\";\n AbstractLongType.prototype._check = function(val, flags, hook) {\n var b2 = this._isValid(val);\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n AbstractLongType.prototype._read = function(tap) {\n var buf, pos;\n if (this._noUnpack) {\n pos = tap.pos;\n tap.skipLong();\n buf = tap.buf.slice(pos, tap.pos);\n } else {\n buf = tap.unpackLongBytes(tap);\n }\n if (tap.isValid()) {\n return this._fromBuffer(buf);\n }\n };\n AbstractLongType.prototype._write = function(tap, val) {\n if (!this._isValid(val)) {\n throwInvalidError(val, this);\n }\n var buf = this._toBuffer(val);\n if (this._noUnpack) {\n tap.writeFixed(buf);\n } else {\n tap.packLongBytes(buf);\n }\n };\n AbstractLongType.prototype._copy = function(val, opts) {\n switch (opts && opts.coerce) {\n case 3:\n return this._toJSON(val);\n case 2:\n return this._fromJSON(val);\n default:\n return this._fromJSON(this._toJSON(val));\n }\n };\n AbstractLongType.prototype._deref = function() {\n return \"long\";\n };\n AbstractLongType.prototype._update = function(resolver, type) {\n var self = this;\n switch (type.typeName) {\n case \"int\":\n resolver._read = function(tap) {\n return self._fromJSON(type._read(tap));\n };\n break;\n case \"abstract:long\":\n case \"long\":\n resolver._read = function(tap) {\n return self._read(tap);\n };\n }\n };\n AbstractLongType.prototype.random = function() {\n return this._fromJSON(LongType.prototype.random());\n };\n AbstractLongType.prototype._fromBuffer = utils.abstractFunction;\n AbstractLongType.prototype._toBuffer = utils.abstractFunction;\n AbstractLongType.prototype._fromJSON = utils.abstractFunction;\n AbstractLongType.prototype._toJSON = utils.abstractFunction;\n AbstractLongType.prototype._isValid = utils.abstractFunction;\n AbstractLongType.prototype.compare = utils.abstractFunction;\n function Field(schema, opts) {\n var name = schema.name;\n if (typeof name != \"string\" || !utils.isValidName(name)) {\n throw new Error(f2(\"invalid field name: %s\", name));\n }\n this.name = name;\n this.type = Type.forSchema(schema.type, opts);\n this.aliases = schema.aliases || [];\n this.doc = schema.doc !== void 0 ? \"\" + schema.doc : void 0;\n this._order = function(order) {\n switch (order) {\n case \"ascending\":\n return 1;\n case \"descending\":\n return -1;\n case \"ignore\":\n return 0;\n default:\n throw new Error(f2(\"invalid order: %j\", order));\n }\n }(schema.order === void 0 ? \"ascending\" : schema.order);\n var value = schema[\"default\"];\n if (value !== void 0) {\n var type = this.type;\n var val;\n try {\n val = type._copy(value, { coerce: 2, wrap: 2 });\n } catch (err) {\n var msg = f2(\"incompatible field default %j (%s)\", value, err.message);\n if (Type.isType(type, \"union\")) {\n msg += f2(\n \", union defaults must match the first branch's type (%j)\",\n type.types[0]\n );\n }\n throw new Error(msg);\n }\n if (isPrimitive(type.typeName) && type.typeName !== \"bytes\") {\n this.defaultValue = function() {\n return val;\n };\n } else {\n this.defaultValue = function() {\n return type._copy(val);\n };\n }\n }\n Object.freeze(this);\n }\n Field.prototype.defaultValue = function() {\n };\n Object.defineProperty(Field.prototype, \"order\", {\n enumerable: true,\n get: function() {\n return [\"descending\", \"ignore\", \"ascending\"][this._order + 1];\n }\n });\n Field.prototype.getAliases = function() {\n return this.aliases;\n };\n Field.prototype.getDefault = Field.prototype.defaultValue;\n Field.prototype.getName = function() {\n return this.name;\n };\n Field.prototype.getOrder = function() {\n return this.order;\n };\n Field.prototype.getType = function() {\n return this.type;\n };\n function Resolver(readerType) {\n this._readerType = readerType;\n this._read = null;\n this.itemsType = null;\n this.size = 0;\n this.symbols = null;\n this.valuesType = null;\n }\n Resolver.prototype._peek = Type.prototype._peek;\n Resolver.prototype.inspect = function() {\n return \"\";\n };\n function Hash() {\n this.str = void 0;\n }\n function readValue(type, tap, resolver, lazy) {\n if (resolver) {\n if (resolver._readerType !== type) {\n throw new Error(\"invalid resolver\");\n }\n return resolver._read(tap, lazy);\n } else {\n return type._read(tap);\n }\n }\n function getAliases(obj) {\n var names = {};\n if (obj.name) {\n names[obj.name] = true;\n }\n var aliases = obj.aliases;\n var i, l;\n for (i = 0, l = aliases.length; i < l; i++) {\n names[aliases[i]] = true;\n }\n return Object.keys(names);\n }\n function hasCompatibleName(reader, writer, strict) {\n if (!writer.name) {\n return true;\n }\n var name = strict ? writer.name : utils.unqualify(writer.name);\n var aliases = getAliases(reader);\n var i, l, alias;\n for (i = 0, l = aliases.length; i < l; i++) {\n alias = aliases[i];\n if (!strict) {\n alias = utils.unqualify(alias);\n }\n if (alias === name) {\n return true;\n }\n }\n return false;\n }\n function isPrimitive(typeName) {\n var type = TYPES[typeName];\n return type && type.prototype instanceof PrimitiveType;\n }\n function getClassName(typeName) {\n if (typeName === \"error\") {\n typeName = \"record\";\n } else {\n var match = /^([^:]+):(.*)$/.exec(typeName);\n if (match) {\n if (match[1] === \"union\") {\n typeName = match[2] + \"Union\";\n } else {\n typeName = match[1];\n }\n }\n }\n return utils.capitalize(typeName) + \"Type\";\n }\n function readArraySize(tap) {\n var n = tap.readLong();\n if (n < 0) {\n n = -n;\n tap.skipLong();\n }\n return n;\n }\n function isSafeLong(n) {\n return n >= -9007199254740990 && n <= 9007199254740990;\n }\n function isJsonBuffer(obj) {\n return obj && obj.type === \"Buffer\" && Array.isArray(obj.data);\n }\n function throwInvalidError(val, type) {\n throw new Error(f2(\"invalid %j: %j\", type.schema(), val));\n }\n function maybeQualify(name, ns) {\n var unqualified = utils.unqualify(name);\n return isPrimitive(unqualified) ? unqualified : utils.qualify(name, ns);\n }\n function getTypeBucket(type) {\n var typeName = type.typeName;\n switch (typeName) {\n case \"double\":\n case \"float\":\n case \"int\":\n case \"long\":\n return \"number\";\n case \"bytes\":\n case \"fixed\":\n return \"buffer\";\n case \"enum\":\n return \"string\";\n case \"map\":\n case \"error\":\n case \"record\":\n return \"object\";\n default:\n return typeName;\n }\n }\n function getValueBucket(val) {\n if (val === null) {\n return \"null\";\n }\n var bucket = typeof val;\n if (bucket === \"object\") {\n if (Array.isArray(val)) {\n return \"array\";\n } else if (Buffer2.isBuffer(val)) {\n return \"buffer\";\n }\n }\n return bucket;\n }\n function isAmbiguous(types) {\n var buckets = {};\n var i, l, bucket, type;\n for (i = 0, l = types.length; i < l; i++) {\n type = types[i];\n if (!Type.isType(type, \"logical\")) {\n bucket = getTypeBucket(type);\n if (buckets[bucket]) {\n return true;\n }\n buckets[bucket] = true;\n }\n }\n return false;\n }\n function combineNumbers(types) {\n var typeNames = [\"int\", \"long\", \"float\", \"double\"];\n var superIndex = -1;\n var superType = null;\n var i, l, type, index;\n for (i = 0, l = types.length; i < l; i++) {\n type = types[i];\n index = typeNames.indexOf(type.typeName);\n if (index > superIndex) {\n superIndex = index;\n superType = type;\n }\n }\n return superType;\n }\n function combineStrings(types, opts) {\n var symbols = {};\n var i, l, type, typeSymbols;\n for (i = 0, l = types.length; i < l; i++) {\n type = types[i];\n if (type.typeName === \"string\") {\n return type;\n }\n typeSymbols = type.symbols;\n var j2, m2;\n for (j2 = 0, m2 = typeSymbols.length; j2 < m2; j2++) {\n symbols[typeSymbols[j2]] = true;\n }\n }\n return Type.forSchema({ type: \"enum\", symbols: Object.keys(symbols) }, opts);\n }\n function combineBuffers(types, opts) {\n var size = -1;\n var i, l, type;\n for (i = 0, l = types.length; i < l; i++) {\n type = types[i];\n if (type.typeName === \"bytes\") {\n return type;\n }\n if (size === -1) {\n size = type.size;\n } else if (type.size !== size) {\n size = -2;\n }\n }\n return size < 0 ? Type.forSchema(\"bytes\", opts) : types[0];\n }\n function combineObjects(types, opts) {\n var allTypes = [];\n var fieldTypes = {};\n var fieldDefaults = {};\n var isValidRecord = true;\n var i, l, type, fields;\n for (i = 0, l = types.length; i < l; i++) {\n type = types[i];\n if (type.typeName === \"map\") {\n isValidRecord = false;\n allTypes.push(type.valuesType);\n } else {\n fields = type.fields;\n var j2, m2, field, fieldDefault, fieldName, fieldType;\n for (j2 = 0, m2 = fields.length; j2 < m2; j2++) {\n field = fields[j2];\n fieldName = field.name;\n fieldType = field.type;\n allTypes.push(fieldType);\n if (isValidRecord) {\n if (!fieldTypes[fieldName]) {\n fieldTypes[fieldName] = [];\n }\n fieldTypes[fieldName].push(fieldType);\n fieldDefault = field.defaultValue();\n if (fieldDefault !== void 0) {\n fieldDefaults[fieldName] = fieldDefault;\n }\n }\n }\n }\n }\n if (isValidRecord) {\n var fieldNames = Object.keys(fieldTypes);\n for (i = 0, l = fieldNames.length; i < l; i++) {\n fieldName = fieldNames[i];\n if (fieldTypes[fieldName].length < types.length && fieldDefaults[fieldName] === void 0) {\n if (opts && opts.strictDefaults) {\n isValidRecord = false;\n } else {\n fieldTypes[fieldName].unshift(Type.forSchema(\"null\", opts));\n fieldDefaults[fieldName] = null;\n }\n }\n }\n }\n var schema;\n if (isValidRecord) {\n schema = {\n type: \"record\",\n fields: fieldNames.map(function(s) {\n var fieldType2 = Type.forTypes(fieldTypes[s], opts);\n var fieldDefault2 = fieldDefaults[s];\n if (fieldDefault2 !== void 0 && ~fieldType2.typeName.indexOf(\"union\")) {\n var unionTypes = fieldType2.types.slice();\n var i2, l2;\n for (i2 = 0, l2 = unionTypes.length; i2 < l2; i2++) {\n if (unionTypes[i2].isValid(fieldDefault2)) {\n break;\n }\n }\n if (i2 > 0) {\n var unionType = unionTypes[0];\n unionTypes[0] = unionTypes[i2];\n unionTypes[i2] = unionType;\n fieldType2 = Type.forSchema(unionTypes, opts);\n }\n }\n return {\n name: s,\n type: fieldType2,\n \"default\": fieldDefaults[s]\n };\n })\n };\n } else {\n schema = {\n type: \"map\",\n values: Type.forTypes(allTypes, opts)\n };\n }\n return Type.forSchema(schema, opts);\n }\n module.exports = {\n Type,\n getTypeBucket,\n getValueBucket,\n isPrimitive,\n builtins: function() {\n var types = {\n LogicalType,\n UnwrappedUnionType,\n WrappedUnionType\n };\n var typeNames = Object.keys(TYPES);\n var i, l, typeName;\n for (i = 0, l = typeNames.length; i < l; i++) {\n typeName = typeNames[i];\n types[getClassName(typeName)] = TYPES[typeName];\n }\n return types;\n }()\n };\n }\n});\n\n// node_modules/avsc/lib/containers.js\nvar require_containers = __commonJS({\n \"node_modules/avsc/lib/containers.js\"(exports, module) {\n \"use strict\";\n var types = require_types();\n var utils = require_utils();\n var buffer = __import_BUFFER;\n var stream = __import_STREAM;\n var util = __import_UTIL;\n var zlib = __import_ZLIB;\n var Buffer2 = buffer.Buffer;\n var OPTS = { namespace: \"org.apache.avro.file\" };\n var LONG_TYPE = types.Type.forSchema(\"long\", OPTS);\n var MAP_BYTES_TYPE = types.Type.forSchema({ type: \"map\", values: \"bytes\" }, OPTS);\n var HEADER_TYPE = types.Type.forSchema({\n name: \"Header\",\n type: \"record\",\n fields: [\n { name: \"magic\", type: { type: \"fixed\", name: \"Magic\", size: 4 } },\n { name: \"meta\", type: MAP_BYTES_TYPE },\n { name: \"sync\", type: { type: \"fixed\", name: \"Sync\", size: 16 } }\n ]\n }, OPTS);\n var BLOCK_TYPE = types.Type.forSchema({\n name: \"Block\",\n type: \"record\",\n fields: [\n { name: \"count\", type: \"long\" },\n { name: \"data\", type: \"bytes\" },\n { name: \"sync\", type: \"Sync\" }\n ]\n }, OPTS);\n var MAGIC_BYTES = utils.bufferFrom(\"Obj\u0001\");\n var f2 = util.format;\n var Tap = utils.Tap;\n function RawDecoder(schema, opts) {\n opts = opts || {};\n var noDecode = !!opts.noDecode;\n stream.Duplex.call(this, {\n readableObjectMode: !noDecode,\n allowHalfOpen: false\n });\n this._type = types.Type.forSchema(schema);\n this._tap = new Tap(utils.newBuffer(0));\n this._writeCb = null;\n this._needPush = false;\n this._readValue = createReader(noDecode, this._type);\n this._finished = false;\n this.on(\"finish\", function() {\n this._finished = true;\n this._read();\n });\n }\n util.inherits(RawDecoder, stream.Duplex);\n RawDecoder.prototype._write = function(chunk, encoding, cb) {\n this._writeCb = cb;\n var tap = this._tap;\n tap.buf = Buffer2.concat([tap.buf.slice(tap.pos), chunk]);\n tap.pos = 0;\n if (this._needPush) {\n this._needPush = false;\n this._read();\n }\n };\n RawDecoder.prototype._read = function() {\n this._needPush = false;\n var tap = this._tap;\n var pos = tap.pos;\n var val = this._readValue(tap);\n if (tap.isValid()) {\n this.push(val);\n } else if (!this._finished) {\n tap.pos = pos;\n this._needPush = true;\n if (this._writeCb) {\n this._writeCb();\n }\n } else {\n this.push(null);\n }\n };\n function BlockDecoder(opts) {\n opts = opts || {};\n var noDecode = !!opts.noDecode;\n stream.Duplex.call(this, {\n allowHalfOpen: true,\n // For async decompressors.\n readableObjectMode: !noDecode\n });\n this._rType = opts.readerSchema !== void 0 ? types.Type.forSchema(opts.readerSchema) : void 0;\n this._wType = null;\n this._codecs = opts.codecs;\n this._codec = void 0;\n this._parseHook = opts.parseHook;\n this._tap = new Tap(utils.newBuffer(0));\n this._blockTap = new Tap(utils.newBuffer(0));\n this._syncMarker = null;\n this._readValue = null;\n this._noDecode = noDecode;\n this._queue = new utils.OrderedQueue();\n this._decompress = null;\n this._index = 0;\n this._remaining = void 0;\n this._needPush = false;\n this._finished = false;\n this.on(\"finish\", function() {\n this._finished = true;\n if (this._needPush) {\n this._read();\n }\n });\n }\n util.inherits(BlockDecoder, stream.Duplex);\n BlockDecoder.defaultCodecs = function() {\n return {\n \"null\": function(buf, cb) {\n cb(null, buf);\n },\n \"deflate\": zlib.inflateRaw\n };\n };\n BlockDecoder.getDefaultCodecs = BlockDecoder.defaultCodecs;\n BlockDecoder.prototype._decodeHeader = function() {\n var tap = this._tap;\n if (tap.buf.length < MAGIC_BYTES.length) {\n return false;\n }\n if (!MAGIC_BYTES.equals(tap.buf.slice(0, MAGIC_BYTES.length))) {\n this.emit(\"error\", new Error(\"invalid magic bytes\"));\n return false;\n }\n var header = HEADER_TYPE._read(tap);\n if (!tap.isValid()) {\n return false;\n }\n this._codec = (header.meta[\"avro.codec\"] || \"null\").toString();\n var codecs = this._codecs || BlockDecoder.getDefaultCodecs();\n this._decompress = codecs[this._codec];\n if (!this._decompress) {\n this.emit(\"error\", new Error(f2(\"unknown codec: %s\", this._codec)));\n return;\n }\n try {\n var schema = JSON.parse(header.meta[\"avro.schema\"].toString());\n if (this._parseHook) {\n schema = this._parseHook(schema);\n }\n this._wType = types.Type.forSchema(schema);\n } catch (err) {\n this.emit(\"error\", err);\n return;\n }\n try {\n this._readValue = createReader(this._noDecode, this._wType, this._rType);\n } catch (err) {\n this.emit(\"error\", err);\n return;\n }\n this._syncMarker = header.sync;\n this.emit(\"metadata\", this._wType, this._codec, header);\n return true;\n };\n BlockDecoder.prototype._write = function(chunk, encoding, cb) {\n var tap = this._tap;\n tap.buf = Buffer2.concat([tap.buf, chunk]);\n tap.pos = 0;\n if (!this._decodeHeader()) {\n process.nextTick(cb);\n return;\n }\n this._write = this._writeChunk;\n this._write(utils.newBuffer(0), encoding, cb);\n };\n BlockDecoder.prototype._writeChunk = function(chunk, encoding, cb) {\n var tap = this._tap;\n tap.buf = Buffer2.concat([tap.buf.slice(tap.pos), chunk]);\n tap.pos = 0;\n var nBlocks = 1;\n var block;\n while (block = tryReadBlock(tap)) {\n if (!this._syncMarker.equals(block.sync)) {\n this.emit(\"error\", new Error(\"invalid sync marker\"));\n return;\n }\n nBlocks++;\n this._decompress(\n block.data,\n this._createBlockCallback(block.data.length, block.count, chunkCb)\n );\n }\n chunkCb();\n function chunkCb() {\n if (!--nBlocks) {\n cb();\n }\n }\n };\n BlockDecoder.prototype._createBlockCallback = function(size, count, cb) {\n var self = this;\n var index = this._index++;\n return function(cause, data) {\n if (cause) {\n var err = new Error(f2(\"%s codec decompression error\", self._codec));\n err.cause = cause;\n self.emit(\"error\", err);\n cb();\n } else {\n self.emit(\"block\", new BlockInfo(count, data.length, size));\n self._queue.push(new BlockData(index, data, cb, count));\n if (self._needPush) {\n self._read();\n }\n }\n };\n };\n BlockDecoder.prototype._read = function() {\n this._needPush = false;\n var tap = this._blockTap;\n if (!this._remaining) {\n var data = this._queue.pop();\n if (!data || !data.count) {\n if (this._finished) {\n this.push(null);\n } else {\n this._needPush = true;\n }\n if (data) {\n data.cb();\n }\n return;\n }\n data.cb();\n this._remaining = data.count;\n tap.buf = data.buf;\n tap.pos = 0;\n }\n this._remaining--;\n var val;\n try {\n val = this._readValue(tap);\n if (!tap.isValid()) {\n throw new Error(\"truncated block\");\n }\n } catch (err) {\n this._remaining = 0;\n this.emit(\"error\", err);\n return;\n }\n this.push(val);\n };\n function RawEncoder(schema, opts) {\n opts = opts || {};\n stream.Transform.call(this, {\n writableObjectMode: true,\n allowHalfOpen: false\n });\n this._type = types.Type.forSchema(schema);\n this._writeValue = function(tap, val) {\n try {\n this._type._write(tap, val);\n } catch (err) {\n this.emit(\"typeError\", err, val, this._type);\n }\n };\n this._tap = new Tap(utils.newBuffer(opts.batchSize || 65536));\n this.on(\"typeError\", function(err) {\n this.emit(\"error\", err);\n });\n }\n util.inherits(RawEncoder, stream.Transform);\n RawEncoder.prototype._transform = function(val, encoding, cb) {\n var tap = this._tap;\n var buf = tap.buf;\n var pos = tap.pos;\n this._writeValue(tap, val);\n if (!tap.isValid()) {\n if (pos) {\n this.push(copyBuffer(tap.buf, 0, pos));\n }\n var len = tap.pos - pos;\n if (len > buf.length) {\n tap.buf = utils.newBuffer(2 * len);\n }\n tap.pos = 0;\n this._writeValue(tap, val);\n }\n cb();\n };\n RawEncoder.prototype._flush = function(cb) {\n var tap = this._tap;\n var pos = tap.pos;\n if (pos) {\n this.push(tap.buf.slice(0, pos));\n }\n cb();\n };\n function BlockEncoder(schema, opts) {\n opts = opts || {};\n stream.Duplex.call(this, {\n allowHalfOpen: true,\n // To support async compressors.\n writableObjectMode: true\n });\n var type;\n if (types.Type.isType(schema)) {\n type = schema;\n schema = void 0;\n } else {\n type = types.Type.forSchema(schema);\n }\n this._schema = schema;\n this._type = type;\n this._writeValue = function(tap, val) {\n try {\n this._type._write(tap, val);\n } catch (err) {\n this.emit(\"typeError\", err, val, this._type);\n return false;\n }\n return true;\n };\n this._blockSize = opts.blockSize || 65536;\n this._tap = new Tap(utils.newBuffer(this._blockSize));\n this._codecs = opts.codecs;\n this._codec = opts.codec || \"null\";\n this._blockCount = 0;\n this._syncMarker = opts.syncMarker || new utils.Lcg().nextBuffer(16);\n this._queue = new utils.OrderedQueue();\n this._pending = 0;\n this._finished = false;\n this._needHeader = false;\n this._needPush = false;\n this._metadata = opts.metadata || {};\n if (!MAP_BYTES_TYPE.isValid(this._metadata)) {\n throw new Error(\"invalid metadata\");\n }\n var codec = this._codec;\n this._compress = (this._codecs || BlockEncoder.getDefaultCodecs())[codec];\n if (!this._compress) {\n throw new Error(f2(\"unsupported codec: %s\", codec));\n }\n if (opts.omitHeader !== void 0) {\n opts.writeHeader = opts.omitHeader ? \"never\" : \"auto\";\n }\n switch (opts.writeHeader) {\n case false:\n case \"never\":\n break;\n case void 0:\n case \"auto\":\n this._needHeader = true;\n break;\n default:\n this._writeHeader();\n }\n this.on(\"finish\", function() {\n this._finished = true;\n if (this._blockCount) {\n this._flushChunk();\n } else if (this._finished && this._needPush) {\n this.push(null);\n }\n });\n this.on(\"typeError\", function(err) {\n this.emit(\"error\", err);\n });\n }\n util.inherits(BlockEncoder, stream.Duplex);\n BlockEncoder.defaultCodecs = function() {\n return {\n \"null\": function(buf, cb) {\n cb(null, buf);\n },\n \"deflate\": zlib.deflateRaw\n };\n };\n BlockEncoder.getDefaultCodecs = BlockEncoder.defaultCodecs;\n BlockEncoder.prototype._writeHeader = function() {\n var schema = JSON.stringify(\n this._schema ? this._schema : this._type.getSchema({ exportAttrs: true })\n );\n var meta = utils.copyOwnProperties(\n this._metadata,\n { \"avro.schema\": utils.bufferFrom(schema), \"avro.codec\": utils.bufferFrom(this._codec) },\n true\n // Overwrite.\n );\n var Header = HEADER_TYPE.getRecordConstructor();\n var header = new Header(MAGIC_BYTES, meta, this._syncMarker);\n this.push(header.toBuffer());\n };\n BlockEncoder.prototype._write = function(val, encoding, cb) {\n if (this._needHeader) {\n this._writeHeader();\n this._needHeader = false;\n }\n var tap = this._tap;\n var pos = tap.pos;\n var flushing = false;\n if (this._writeValue(tap, val)) {\n if (!tap.isValid()) {\n if (pos) {\n this._flushChunk(pos, cb);\n flushing = true;\n }\n var len = tap.pos - pos;\n if (len > this._blockSize) {\n this._blockSize = len * 2;\n }\n tap.buf = utils.newBuffer(this._blockSize);\n tap.pos = 0;\n this._writeValue(tap, val);\n }\n this._blockCount++;\n } else {\n tap.pos = pos;\n }\n if (!flushing) {\n cb();\n }\n };\n BlockEncoder.prototype._flushChunk = function(pos, cb) {\n var tap = this._tap;\n pos = pos || tap.pos;\n this._compress(tap.buf.slice(0, pos), this._createBlockCallback(pos, cb));\n this._blockCount = 0;\n };\n BlockEncoder.prototype._read = function() {\n var self = this;\n var data = this._queue.pop();\n if (!data) {\n if (this._finished && !this._pending) {\n process.nextTick(function() {\n self.push(null);\n });\n } else {\n this._needPush = true;\n }\n return;\n }\n this.push(LONG_TYPE.toBuffer(data.count, true));\n this.push(LONG_TYPE.toBuffer(data.buf.length, true));\n this.push(data.buf);\n this.push(this._syncMarker);\n if (!this._finished) {\n data.cb();\n }\n };\n BlockEncoder.prototype._createBlockCallback = function(size, cb) {\n var self = this;\n var index = this._index++;\n var count = this._blockCount;\n this._pending++;\n return function(cause, data) {\n if (cause) {\n var err = new Error(f2(\"%s codec compression error\", self._codec));\n err.cause = cause;\n self.emit(\"error\", err);\n return;\n }\n self._pending--;\n self.emit(\"block\", new BlockInfo(count, size, data.length));\n self._queue.push(new BlockData(index, data, cb, count));\n if (self._needPush) {\n self._needPush = false;\n self._read();\n }\n };\n };\n function BlockInfo(count, raw, compressed) {\n this.valueCount = count;\n this.rawDataLength = raw;\n this.compressedDataLength = compressed;\n }\n function BlockData(index, buf, cb, count) {\n this.index = index;\n this.buf = buf;\n this.cb = cb;\n this.count = count | 0;\n }\n function tryReadBlock(tap) {\n var pos = tap.pos;\n var block = BLOCK_TYPE._read(tap);\n if (!tap.isValid()) {\n tap.pos = pos;\n return null;\n }\n return block;\n }\n function createReader(noDecode, writerType, readerType) {\n if (noDecode) {\n return /* @__PURE__ */ function(skipper) {\n return function(tap) {\n var pos = tap.pos;\n skipper(tap);\n return tap.buf.slice(pos, tap.pos);\n };\n }(writerType._skip);\n } else if (readerType) {\n var resolver = readerType.createResolver(writerType);\n return function(tap) {\n return resolver._read(tap);\n };\n } else {\n return function(tap) {\n return writerType._read(tap);\n };\n }\n }\n function copyBuffer(buf, pos, len) {\n var copy = utils.newBuffer(len);\n buf.copy(copy, 0, pos, pos + len);\n return copy;\n }\n module.exports = {\n BLOCK_TYPE,\n // For tests.\n HEADER_TYPE,\n // Idem.\n MAGIC_BYTES,\n // Idem.\n streams: {\n BlockDecoder,\n BlockEncoder,\n RawDecoder,\n RawEncoder\n }\n };\n }\n});\n\n// node_modules/avsc/lib/services.js\nvar require_services = __commonJS({\n \"node_modules/avsc/lib/services.js\"(exports, module) {\n \"use strict\";\n var types = require_types();\n var utils = require_utils();\n var buffer = __import_BUFFER;\n var events = __import_EVENTS;\n var stream = __import_STREAM;\n var util = __import_UTIL;\n var Buffer2 = buffer.Buffer;\n var Tap = utils.Tap;\n var Type = types.Type;\n var debug = util.debuglog(\"avsc:services\");\n var f2 = util.format;\n var OPTS = { namespace: \"org.apache.avro.ipc\" };\n var BOOLEAN_TYPE = Type.forSchema(\"boolean\", OPTS);\n var MAP_BYTES_TYPE = Type.forSchema({ type: \"map\", values: \"bytes\" }, OPTS);\n var STRING_TYPE = Type.forSchema(\"string\", OPTS);\n var HANDSHAKE_REQUEST_TYPE = Type.forSchema({\n name: \"HandshakeRequest\",\n type: \"record\",\n fields: [\n { name: \"clientHash\", type: { name: \"MD5\", type: \"fixed\", size: 16 } },\n { name: \"clientProtocol\", type: [\"null\", \"string\"], \"default\": null },\n { name: \"serverHash\", type: \"MD5\" },\n { name: \"meta\", type: [\"null\", MAP_BYTES_TYPE], \"default\": null }\n ]\n }, OPTS);\n var HANDSHAKE_RESPONSE_TYPE = Type.forSchema({\n name: \"HandshakeResponse\",\n type: \"record\",\n fields: [\n {\n name: \"match\",\n type: {\n name: \"HandshakeMatch\",\n type: \"enum\",\n symbols: [\"BOTH\", \"CLIENT\", \"NONE\"]\n }\n },\n { name: \"serverProtocol\", type: [\"null\", \"string\"], \"default\": null },\n { name: \"serverHash\", type: [\"null\", \"MD5\"], \"default\": null },\n { name: \"meta\", type: [\"null\", MAP_BYTES_TYPE], \"default\": null }\n ]\n }, OPTS);\n var PREFIX_LENGTH = 16;\n var PING_MESSAGE = new Message(\n \"\",\n // Empty name (invalid for other \"normal\" messages).\n Type.forSchema({ name: \"PingRequest\", type: \"record\", fields: [] }, OPTS),\n Type.forSchema([\"string\"], OPTS),\n Type.forSchema(\"null\", OPTS)\n );\n function Message(name, reqType, errType, resType, oneWay, doc) {\n this.name = name;\n if (!Type.isType(reqType, \"record\")) {\n throw new Error(\"invalid request type\");\n }\n this.requestType = reqType;\n if (!Type.isType(errType, \"union\") || !Type.isType(errType.getTypes()[0], \"string\")) {\n throw new Error(\"invalid error type\");\n }\n this.errorType = errType;\n if (oneWay) {\n if (!Type.isType(resType, \"null\") || errType.getTypes().length > 1) {\n throw new Error(\"inapplicable one-way parameter\");\n }\n }\n this.responseType = resType;\n this.oneWay = !!oneWay;\n this.doc = doc !== void 0 ? \"\" + doc : void 0;\n Object.freeze(this);\n }\n Message.forSchema = function(name, schema, opts) {\n opts = opts || {};\n if (!utils.isValidName(name)) {\n throw new Error(f2(\"invalid message name: %s\", name));\n }\n if (!Array.isArray(schema.request)) {\n throw new Error(f2(\"invalid message request: %s\", name));\n }\n var recordName = f2(\"%s.%sRequest\", OPTS.namespace, utils.capitalize(name));\n var reqType = Type.forSchema({\n name: recordName,\n type: \"record\",\n namespace: opts.namespace || \"\",\n // Don't leak request namespace.\n fields: schema.request\n }, opts);\n delete opts.registry[recordName];\n if (!schema.response) {\n throw new Error(f2(\"invalid message response: %s\", name));\n }\n var resType = Type.forSchema(schema.response, opts);\n if (schema.errors !== void 0 && !Array.isArray(schema.errors)) {\n throw new Error(f2(\"invalid message errors: %s\", name));\n }\n var errType = Type.forSchema([\"string\"].concat(schema.errors || []), opts);\n var oneWay = !!schema[\"one-way\"];\n return new Message(name, reqType, errType, resType, oneWay, schema.doc);\n };\n Message.prototype.schema = Type.prototype.getSchema;\n Message.prototype._attrs = function(opts) {\n var reqSchema = this.requestType._attrs(opts);\n var schema = {\n request: reqSchema.fields,\n response: this.responseType._attrs(opts)\n };\n var msgDoc = this.doc;\n if (msgDoc !== void 0) {\n schema.doc = msgDoc;\n }\n var errSchema = this.errorType._attrs(opts);\n if (errSchema.length > 1) {\n schema.errors = errSchema.slice(1);\n }\n if (this.oneWay) {\n schema[\"one-way\"] = true;\n }\n return schema;\n };\n utils.addDeprecatedGetters(\n Message,\n [\"name\", \"errorType\", \"requestType\", \"responseType\"]\n );\n Message.prototype.isOneWay = util.deprecate(\n function() {\n return this.oneWay;\n },\n \"use `.oneWay` directly instead of `.isOneWay()`\"\n );\n function Service(name, messages, types2, ptcl, server) {\n if (typeof name != \"string\") {\n return Service.forProtocol(name, messages);\n }\n this.name = name;\n this._messagesByName = messages || {};\n this.messages = Object.freeze(utils.objectValues(this._messagesByName));\n this._typesByName = types2 || {};\n this.types = Object.freeze(utils.objectValues(this._typesByName));\n this.protocol = ptcl;\n this._hashStr = utils.getHash(JSON.stringify(ptcl)).toString(\"binary\");\n this.doc = ptcl.doc ? \"\" + ptcl.doc : void 0;\n this._server = server || this.createServer({ silent: true });\n Object.freeze(this);\n }\n Service.Client = Client;\n Service.Server = Server;\n Service.compatible = function(clientSvc, serverSvc) {\n try {\n createReaders(clientSvc, serverSvc);\n } catch (err) {\n return false;\n }\n return true;\n };\n Service.forProtocol = function(ptcl, opts) {\n opts = opts || {};\n var name = ptcl.protocol;\n if (!name) {\n throw new Error(\"missing protocol name\");\n }\n if (ptcl.namespace !== void 0) {\n opts.namespace = ptcl.namespace;\n } else {\n var match = /^(.*)\\.[^.]+$/.exec(name);\n if (match) {\n opts.namespace = match[1];\n }\n }\n name = utils.qualify(name, opts.namespace);\n if (ptcl.types) {\n ptcl.types.forEach(function(obj) {\n Type.forSchema(obj, opts);\n });\n }\n var msgs;\n if (ptcl.messages) {\n msgs = {};\n Object.keys(ptcl.messages).forEach(function(key) {\n msgs[key] = Message.forSchema(key, ptcl.messages[key], opts);\n });\n }\n return new Service(name, msgs, opts.registry, ptcl);\n };\n Service.isService = function(any) {\n return !!any && any.hasOwnProperty(\"_hashStr\");\n };\n Service.prototype.createClient = function(opts) {\n var client = new Client(this, opts);\n process.nextTick(function() {\n if (opts && opts.server) {\n var obj = { objectMode: true };\n var pts = [new stream.PassThrough(obj), new stream.PassThrough(obj)];\n opts.server.createChannel({ readable: pts[0], writable: pts[1] }, obj);\n client.createChannel({ readable: pts[1], writable: pts[0] }, obj);\n } else if (opts && opts.transport) {\n client.createChannel(opts.transport);\n }\n });\n return client;\n };\n Service.prototype.createServer = function(opts) {\n return new Server(this, opts);\n };\n Object.defineProperty(Service.prototype, \"hash\", {\n enumerable: true,\n get: function() {\n return utils.bufferFrom(this._hashStr, \"binary\");\n }\n });\n Service.prototype.message = function(name) {\n return this._messagesByName[name];\n };\n Service.prototype.type = function(name) {\n return this._typesByName[name];\n };\n Service.prototype.inspect = function() {\n return f2(\"\", this.name);\n };\n utils.addDeprecatedGetters(\n Service,\n [\"message\", \"messages\", \"name\", \"type\", \"types\"]\n );\n Service.prototype.createEmitter = util.deprecate(\n function(transport, opts) {\n opts = opts || {};\n var client = this.createClient({\n cache: opts.cache,\n buffering: false,\n strictTypes: opts.strictErrors,\n timeout: opts.timeout\n });\n var channel = client.createChannel(transport, opts);\n forwardErrors(client, channel);\n return channel;\n },\n \"use `.createClient()` instead of `.createEmitter()`\"\n );\n Service.prototype.createListener = util.deprecate(\n function(transport, opts) {\n if (opts && opts.strictErrors) {\n throw new Error(\"use `.createServer()` to support strict errors\");\n }\n return this._server.createChannel(transport, opts);\n },\n \"use `.createServer().createChannel()` instead of `.createListener()`\"\n );\n Service.prototype.emit = util.deprecate(\n function(name, req, channel, cb) {\n if (!channel || !this.equals(channel.client._svc$)) {\n throw new Error(\"invalid emitter\");\n }\n var client = channel.client;\n Client.prototype.emitMessage.call(client, name, req, cb && cb.bind(this));\n return channel.getPending();\n },\n \"create a client via `.createClient()` to emit messages instead of `.emit()`\"\n );\n Service.prototype.equals = util.deprecate(\n function(any) {\n return Service.isService(any) && this.getFingerprint().equals(any.getFingerprint());\n },\n \"equality testing is deprecated, compare the `.protocol`s instead\"\n );\n Service.prototype.getFingerprint = util.deprecate(\n function(algorithm) {\n return utils.getHash(JSON.stringify(this.protocol), algorithm);\n },\n \"use `.hash` instead of `.getFingerprint()`\"\n );\n Service.prototype.getSchema = util.deprecate(\n Type.prototype.getSchema,\n \"use `.protocol` instead of `.getSchema()`\"\n );\n Service.prototype.on = util.deprecate(\n function(name, handler) {\n var self = this;\n this._server.onMessage(name, function(req, cb) {\n return handler.call(self, req, this.channel, cb);\n });\n return this;\n },\n \"use `.createServer().onMessage()` instead of `.on()`\"\n );\n Service.prototype.subprotocol = util.deprecate(\n function() {\n var parent = this._server;\n var opts = { strictTypes: parent._strict, cache: parent._cache };\n var server = new Server(parent.service, opts);\n server._handlers = Object.create(parent._handlers);\n return new Service(\n this.name,\n this._messagesByName,\n this._typesByName,\n this.protocol,\n server\n );\n },\n \"`.subprotocol()` will be removed in 5.1\"\n );\n Service.prototype._attrs = function(opts) {\n var ptcl = { protocol: this.name };\n var types2 = [];\n this.types.forEach(function(t) {\n if (t.getName() === void 0) {\n return;\n }\n var typeSchema = t._attrs(opts);\n if (typeof typeSchema != \"string\") {\n types2.push(typeSchema);\n }\n });\n if (types2.length) {\n ptcl.types = types2;\n }\n var msgNames = Object.keys(this._messagesByName);\n if (msgNames.length) {\n ptcl.messages = {};\n msgNames.forEach(function(name) {\n ptcl.messages[name] = this._messagesByName[name]._attrs(opts);\n }, this);\n }\n if (opts && opts.exportAttrs && this.doc !== void 0) {\n ptcl.doc = this.doc;\n }\n return ptcl;\n };\n function discoverProtocol(transport, opts, cb) {\n if (cb === void 0 && typeof opts == \"function\") {\n cb = opts;\n opts = void 0;\n }\n var svc = new Service({ protocol: \"Empty\" }, OPTS);\n var ptclStr;\n svc.createClient({ timeout: opts && opts.timeout }).createChannel(transport, {\n scope: opts && opts.scope,\n endWritable: typeof transport == \"function\"\n // Stateless transports only.\n }).once(\"handshake\", function(hreq, hres) {\n ptclStr = hres.serverProtocol;\n this.destroy(true);\n }).once(\"eot\", function(pending, err) {\n if (err && !/interrupted/.test(err)) {\n cb(err);\n } else {\n cb(null, JSON.parse(ptclStr));\n }\n });\n }\n function Client(svc, opts) {\n opts = opts || {};\n events.EventEmitter.call(this);\n this._svc$ = svc;\n this._channels$ = [];\n this._fns$ = [];\n this._buffering$ = !!opts.buffering;\n this._cache$ = opts.cache || {};\n this._policy$ = opts.channelPolicy;\n this._strict$ = !!opts.strictTypes;\n this._timeout$ = utils.getOption(opts, \"timeout\", 1e4);\n if (opts.remoteProtocols) {\n insertRemoteProtocols(this._cache$, opts.remoteProtocols, svc, true);\n }\n this._svc$.messages.forEach(function(msg) {\n this[msg.name] = this._createMessageHandler$(msg);\n }, this);\n }\n util.inherits(Client, events.EventEmitter);\n Client.prototype.activeChannels = function() {\n return this._channels$.slice();\n };\n Client.prototype.createChannel = function(transport, opts) {\n var objectMode = opts && opts.objectMode;\n var channel;\n if (typeof transport == \"function\") {\n var writableFactory;\n if (objectMode) {\n writableFactory = transport;\n } else {\n writableFactory = function(cb) {\n var encoder2 = new FrameEncoder();\n var writable2 = transport(function(err, readable2) {\n if (err) {\n cb(err);\n return;\n }\n var decoder2 = new FrameDecoder().once(\"error\", function(err2) {\n channel.destroy(err2);\n });\n cb(null, readable2.pipe(decoder2));\n });\n if (writable2) {\n encoder2.pipe(writable2);\n return encoder2;\n }\n };\n }\n channel = new StatelessClientChannel(this, writableFactory, opts);\n } else {\n var readable, writable;\n if (isStream(transport)) {\n readable = writable = transport;\n } else {\n readable = transport.readable;\n writable = transport.writable;\n }\n if (!objectMode) {\n var decoder = new NettyDecoder();\n readable = readable.pipe(decoder);\n var encoder = new NettyEncoder();\n encoder.pipe(writable);\n writable = encoder;\n }\n channel = new StatefulClientChannel(this, readable, writable, opts);\n if (!objectMode) {\n channel.once(\"eot\", function() {\n readable.unpipe(decoder);\n encoder.unpipe(writable);\n });\n decoder.once(\"error\", function(err) {\n channel.destroy(err);\n });\n }\n }\n var channels = this._channels$;\n channels.push(channel);\n channel.once(\"_drain\", function() {\n channels.splice(channels.indexOf(this), 1);\n });\n this._buffering$ = false;\n this.emit(\"channel\", channel);\n return channel;\n };\n Client.prototype.destroyChannels = function(opts) {\n this._channels$.forEach(function(channel) {\n channel.destroy(opts && opts.noWait);\n });\n };\n Client.prototype.emitMessage = function(name, req, opts, cb) {\n var msg = getExistingMessage(this._svc$, name);\n var wreq = new WrappedRequest(msg, {}, req);\n this._emitMessage$(wreq, opts, cb);\n };\n Client.prototype.remoteProtocols = function() {\n return getRemoteProtocols(this._cache$, true);\n };\n Object.defineProperty(Client.prototype, \"service\", {\n enumerable: true,\n get: function() {\n return this._svc$;\n }\n });\n Client.prototype.use = function() {\n var i, l, fn;\n for (i = 0, l = arguments.length; i < l; i++) {\n fn = arguments[i];\n this._fns$.push(fn.length < 3 ? fn(this) : fn);\n }\n return this;\n };\n Client.prototype._emitMessage$ = function(wreq, opts, cb) {\n if (!cb && typeof opts === \"function\") {\n cb = opts;\n opts = void 0;\n }\n var self = this;\n var channels = this._channels$;\n var numChannels = channels.length;\n if (!numChannels) {\n if (this._buffering$) {\n debug(\"no active client channels, buffering call\");\n this.once(\"channel\", function() {\n this._emitMessage$(wreq, opts, cb);\n });\n } else {\n var err = new Error(\"no active channels\");\n process.nextTick(function() {\n if (cb) {\n cb.call(new CallContext(wreq._msg), err);\n } else {\n self.emit(\"error\", err);\n }\n });\n }\n return;\n }\n opts = opts || {};\n if (opts.timeout === void 0) {\n opts.timeout = this._timeout$;\n }\n var channel;\n if (numChannels === 1) {\n channel = channels[0];\n } else if (this._policy$) {\n channel = this._policy$(this._channels$.slice());\n if (!channel) {\n debug(\"policy returned no channel, skipping call\");\n return;\n }\n } else {\n channel = channels[Math.floor(Math.random() * numChannels)];\n }\n channel._emit(wreq, opts, function(err2, wres) {\n var ctx = this;\n var errType = ctx.message.errorType;\n if (err2) {\n if (self._strict$) {\n err2 = errType.clone(err2.message, { wrapUnions: true });\n }\n done(err2);\n return;\n }\n if (!wres) {\n done();\n return;\n }\n err2 = wres.error;\n if (!self._strict$) {\n if (err2 === void 0) {\n err2 = null;\n } else {\n if (Type.isType(errType, \"union:unwrapped\")) {\n if (typeof err2 == \"string\") {\n err2 = new Error(err2);\n }\n } else if (err2 && err2.string && typeof err2.string == \"string\") {\n err2 = new Error(err2.string);\n }\n }\n }\n done(err2, wres.response);\n function done(err3, res) {\n if (cb) {\n cb.call(ctx, err3, res);\n } else if (err3) {\n self.emit(\"error\", err3);\n }\n }\n });\n };\n Client.prototype._createMessageHandler$ = function(msg) {\n var fields = msg.requestType.getFields();\n var names = fields.map(function(f3) {\n return f3.getName();\n });\n var body = \"return function \" + msg.name + \"(\";\n if (names.length) {\n body += names.join(\", \") + \", \";\n }\n body += \"opts, cb) {\\n\";\n body += \" var req = {\";\n body += names.map(function(n) {\n return n + \": \" + n;\n }).join(\", \");\n body += \"};\\n\";\n body += \" return this.emitMessage('\" + msg.name + \"', req, opts, cb);\\n\";\n body += \"};\";\n return new Function(body)();\n };\n function Server(svc, opts) {\n opts = opts || {};\n events.EventEmitter.call(this);\n this.service = svc;\n this._handlers = {};\n this._fns = [];\n this._channels = {};\n this._nextChannelId = 1;\n this._cache = opts.cache || {};\n this._defaultHandler = opts.defaultHandler;\n this._sysErrFormatter = opts.systemErrorFormatter;\n this._silent = !!opts.silent;\n this._strict = !!opts.strictTypes;\n if (opts.remoteProtocols) {\n insertRemoteProtocols(this._cache, opts.remoteProtocols, svc, false);\n }\n svc.messages.forEach(function(msg) {\n var name = msg.name;\n if (!opts.noCapitalize) {\n name = utils.capitalize(name);\n }\n this[\"on\" + name] = this._createMessageHandler(msg);\n }, this);\n }\n util.inherits(Server, events.EventEmitter);\n Server.prototype.activeChannels = function() {\n return utils.objectValues(this._channels);\n };\n Server.prototype.createChannel = function(transport, opts) {\n var objectMode = opts && opts.objectMode;\n var channel;\n if (typeof transport == \"function\") {\n var readableFactory;\n if (objectMode) {\n readableFactory = transport;\n } else {\n readableFactory = function(cb) {\n var decoder2 = new FrameDecoder().once(\"error\", function(err) {\n channel.destroy(err);\n });\n return transport(function(err, writable2) {\n if (err) {\n cb(err);\n return;\n }\n var encoder2 = new FrameEncoder();\n encoder2.pipe(writable2);\n cb(null, encoder2);\n }).pipe(decoder2);\n };\n }\n channel = new StatelessServerChannel(this, readableFactory, opts);\n } else {\n var readable, writable;\n if (isStream(transport)) {\n readable = writable = transport;\n } else {\n readable = transport.readable;\n writable = transport.writable;\n }\n if (!objectMode) {\n var decoder = new NettyDecoder();\n readable = readable.pipe(decoder);\n var encoder = new NettyEncoder();\n encoder.pipe(writable);\n writable = encoder;\n }\n channel = new StatefulServerChannel(this, readable, writable, opts);\n if (!objectMode) {\n channel.once(\"eot\", function() {\n readable.unpipe(decoder);\n encoder.unpipe(writable);\n });\n decoder.once(\"error\", function(err) {\n channel.destroy(err);\n });\n }\n }\n if (!this.listeners(\"error\").length) {\n this.on(\"error\", this._onError);\n }\n var channelId = this._nextChannelId++;\n var channels = this._channels;\n channels[channelId] = channel.once(\"eot\", function() {\n delete channels[channelId];\n });\n this.emit(\"channel\", channel);\n return channel;\n };\n Server.prototype.onMessage = function(name, handler) {\n getExistingMessage(this.service, name);\n this._handlers[name] = handler;\n return this;\n };\n Server.prototype.remoteProtocols = function() {\n return getRemoteProtocols(this._cache, false);\n };\n Server.prototype.use = function() {\n var i, l, fn;\n for (i = 0, l = arguments.length; i < l; i++) {\n fn = arguments[i];\n this._fns.push(fn.length < 3 ? fn(this) : fn);\n }\n return this;\n };\n Server.prototype._createMessageHandler = function(msg) {\n var name = msg.name;\n var fields = msg.requestType.fields;\n var numArgs = fields.length;\n var args = fields.length ? \", \" + fields.map(function(f3) {\n return \"req.\" + f3.name;\n }).join(\", \") : \"\";\n var body = \"return function (handler) {\\n\";\n body += \" if (handler.length > \" + numArgs + \") {\\n\";\n body += \" return this.onMessage('\" + name + \"', function (req, cb) {\\n\";\n body += \" return handler.call(this\" + args + \", cb);\\n\";\n body += \" });\\n\";\n body += \" } else {\\n\";\n body += \" return this.onMessage('\" + name + \"', function (req) {\\n\";\n body += \" return handler.call(this\" + args + \");\\n\";\n body += \" });\\n\";\n body += \" }\\n\";\n body += \"};\\n\";\n return new Function(body)();\n };\n Server.prototype._onError = function(err) {\n if (!this._silent && err.rpcCode !== \"UNKNOWN_PROTOCOL\") {\n console.error();\n if (err.rpcCode) {\n console.error(err.rpcCode);\n console.error(err.cause);\n } else {\n console.error(\"INTERNAL_SERVER_ERROR\");\n console.error(err);\n }\n }\n };\n function ClientChannel(client, opts) {\n opts = opts || {};\n events.EventEmitter.call(this);\n this.client = client;\n this.timeout = utils.getOption(opts, \"timeout\", client._timeout$);\n this._endWritable = !!utils.getOption(opts, \"endWritable\", true);\n this._prefix = normalizedPrefix(opts.scope);\n var cache = client._cache$;\n var clientSvc = client._svc$;\n var hash = opts.serverHash;\n if (!hash) {\n hash = clientSvc.hash;\n }\n var adapter = cache[hash];\n if (!adapter) {\n hash = clientSvc.hash;\n adapter = cache[hash] = new Adapter(clientSvc, clientSvc, hash);\n }\n this._adapter = adapter;\n this._registry = new Registry(this, PREFIX_LENGTH);\n this.pending = 0;\n this.destroyed = false;\n this.draining = false;\n this.once(\"_eot\", function(pending, err) {\n debug(\"client channel EOT\");\n this.destroyed = true;\n this.emit(\"eot\", pending, err);\n });\n }\n util.inherits(ClientChannel, events.EventEmitter);\n ClientChannel.prototype.destroy = function(noWait) {\n debug(\"destroying client channel\");\n if (!this.draining) {\n this.draining = true;\n this.emit(\"_drain\");\n }\n var registry = this._registry;\n var pending = this.pending;\n if (noWait) {\n registry.clear();\n }\n if (noWait || !pending) {\n if (isError(noWait)) {\n debug(\"fatal client channel error: %s\", noWait);\n this.emit(\"_eot\", pending, noWait);\n } else {\n this.emit(\"_eot\", pending);\n }\n } else {\n debug(\"client channel entering drain mode (%s pending)\", pending);\n }\n };\n ClientChannel.prototype.ping = function(timeout, cb) {\n if (!cb && typeof timeout == \"function\") {\n cb = timeout;\n timeout = void 0;\n }\n var self = this;\n var wreq = new WrappedRequest(PING_MESSAGE);\n this._emit(wreq, { timeout }, function(err) {\n if (cb) {\n cb.call(self, err);\n } else if (err) {\n self.destroy(err);\n }\n });\n };\n ClientChannel.prototype._createHandshakeRequest = function(adapter, noSvc) {\n var svc = this.client._svc$;\n return {\n clientHash: svc.hash,\n clientProtocol: noSvc ? null : JSON.stringify(svc.protocol),\n serverHash: adapter._hash\n };\n };\n ClientChannel.prototype._emit = function(wreq, opts, cb) {\n var msg = wreq._msg;\n var wres = msg.oneWay ? void 0 : new WrappedResponse(msg, {});\n var ctx = new CallContext(msg, this);\n var self = this;\n this.pending++;\n process.nextTick(function() {\n if (!msg.name) {\n onTransition(wreq, wres, onCompletion);\n } else {\n self.emit(\"outgoingCall\", ctx, opts);\n var fns = self.client._fns$;\n debug(\"starting client middleware chain (%s middleware)\", fns.length);\n chainMiddleware({\n fns,\n ctx,\n wreq,\n wres,\n onTransition,\n onCompletion,\n onError\n });\n }\n });\n function onTransition(wreq2, wres2, prev) {\n var err, reqBuf;\n if (self.destroyed) {\n err = new Error(\"channel destroyed\");\n } else {\n try {\n reqBuf = wreq2.toBuffer();\n } catch (cause) {\n err = serializationError(\n f2(\"invalid %j request\", msg.name),\n wreq2,\n [\n { name: \"headers\", type: MAP_BYTES_TYPE },\n { name: \"request\", type: msg.requestType }\n ]\n );\n }\n }\n if (err) {\n prev(err);\n return;\n }\n var timeout = opts && opts.timeout !== void 0 ? opts.timeout : self.timeout;\n var id = self._registry.add(timeout, function(err2, resBuf, adapter) {\n if (!err2 && !msg.oneWay) {\n try {\n adapter._decodeResponse(resBuf, wres2, msg);\n } catch (cause) {\n err2 = cause;\n }\n }\n prev(err2);\n });\n id |= self._prefix;\n debug(\"sending message %s\", id);\n self._send(id, reqBuf, !!msg && msg.oneWay);\n }\n function onCompletion(err) {\n self.pending--;\n cb.call(ctx, err, wres);\n if (self.draining && !self.destroyed && !self.pending) {\n self.destroy();\n }\n }\n function onError(err) {\n self.client.emit(\"error\", err, self);\n }\n };\n ClientChannel.prototype._getAdapter = function(hres) {\n var hash = hres.serverHash;\n var cache = this.client._cache$;\n var adapter = cache[hash];\n if (adapter) {\n return adapter;\n }\n var ptcl = JSON.parse(hres.serverProtocol);\n var serverSvc = Service.forProtocol(ptcl);\n adapter = new Adapter(this.client._svc$, serverSvc, hash, true);\n return cache[hash] = adapter;\n };\n ClientChannel.prototype._matchesPrefix = function(id) {\n return matchesPrefix(id, this._prefix);\n };\n ClientChannel.prototype._send = utils.abstractFunction;\n utils.addDeprecatedGetters(ClientChannel, [\"pending\", \"timeout\"]);\n ClientChannel.prototype.getCache = util.deprecate(\n function() {\n return this.client._cache$;\n },\n \"use `.remoteProtocols()` instead of `.getCache()`\"\n );\n ClientChannel.prototype.getProtocol = util.deprecate(\n function() {\n return this.client._svc$;\n },\n \"use `.service` instead or `.getProtocol()`\"\n );\n ClientChannel.prototype.isDestroyed = util.deprecate(\n function() {\n return this.destroyed;\n },\n \"use `.destroyed` instead of `.isDestroyed`\"\n );\n function StatelessClientChannel(client, writableFactory, opts) {\n ClientChannel.call(this, client, opts);\n this._writableFactory = writableFactory;\n if (!opts || !opts.noPing) {\n debug(\"emitting ping request\");\n this.ping();\n }\n }\n util.inherits(StatelessClientChannel, ClientChannel);\n StatelessClientChannel.prototype._send = function(id, reqBuf) {\n var cb = this._registry.get(id);\n var adapter = this._adapter;\n var self = this;\n process.nextTick(emit);\n return true;\n function emit(retry) {\n if (self.destroyed) {\n return;\n }\n var hreq = self._createHandshakeRequest(adapter, !retry);\n var writable = self._writableFactory.call(self, function(err, readable) {\n if (err) {\n cb(err);\n return;\n }\n readable.on(\"data\", function(obj) {\n debug(\"received response %s\", obj.id);\n var buf = Buffer2.concat(obj.payload);\n try {\n var parts = readHead(HANDSHAKE_RESPONSE_TYPE, buf);\n var hres = parts.head;\n if (hres.serverHash) {\n adapter = self._getAdapter(hres);\n }\n } catch (cause) {\n cb(cause);\n return;\n }\n var match = hres.match;\n debug(\"handshake match: %s\", match);\n self.emit(\"handshake\", hreq, hres);\n if (match === \"NONE\") {\n process.nextTick(function() {\n emit(true);\n });\n } else {\n self._adapter = adapter;\n cb(null, parts.tail, adapter);\n }\n });\n });\n if (!writable) {\n cb(new Error(\"invalid writable stream\"));\n return;\n }\n writable.write({\n id,\n payload: [HANDSHAKE_REQUEST_TYPE.toBuffer(hreq), reqBuf]\n });\n if (self._endWritable) {\n writable.end();\n }\n }\n };\n function StatefulClientChannel(client, readable, writable, opts) {\n ClientChannel.call(this, client, opts);\n this._readable = readable;\n this._writable = writable;\n this._connected = !!(opts && opts.noPing);\n this._readable.on(\"end\", onEnd);\n this._writable.on(\"finish\", onFinish);\n var self = this;\n var timer = null;\n this.once(\"eot\", function() {\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n if (!self._connected) {\n self.emit(\"_ready\");\n }\n this._writable.removeListener(\"finish\", onFinish);\n if (this._endWritable) {\n debug(\"ending transport\");\n this._writable.end();\n }\n this._readable.removeListener(\"data\", onPing).removeListener(\"data\", onMessage).removeListener(\"end\", onEnd);\n });\n var hreq;\n if (this._connected) {\n this._readable.on(\"data\", onMessage);\n } else {\n this._readable.on(\"data\", onPing);\n process.nextTick(ping);\n if (self.timeout) {\n timer = setTimeout(function() {\n self.destroy(new Error(\"timeout\"));\n }, self.timeout);\n }\n }\n function ping(retry) {\n if (self.destroyed) {\n return;\n }\n hreq = self._createHandshakeRequest(self._adapter, !retry);\n var payload = [\n HANDSHAKE_REQUEST_TYPE.toBuffer(hreq),\n utils.bufferFrom([0, 0])\n // No header, no data (empty message name).\n ];\n self._writable.write({ id: self._prefix, payload });\n }\n function onPing(obj) {\n if (!self._matchesPrefix(obj.id)) {\n debug(\"discarding unscoped response %s (still connecting)\", obj.id);\n return;\n }\n var buf = Buffer2.concat(obj.payload);\n try {\n var hres = readHead(HANDSHAKE_RESPONSE_TYPE, buf).head;\n if (hres.serverHash) {\n self._adapter = self._getAdapter(hres);\n }\n } catch (cause) {\n self.destroy(cause);\n return;\n }\n var match = hres.match;\n debug(\"handshake match: %s\", match);\n self.emit(\"handshake\", hreq, hres);\n if (match === \"NONE\") {\n process.nextTick(function() {\n ping(true);\n });\n } else {\n debug(\"successfully connected\");\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n self._readable.removeListener(\"data\", onPing).on(\"data\", onMessage);\n self._connected = true;\n self.emit(\"_ready\");\n hreq = null;\n }\n }\n function onMessage(obj) {\n var id = obj.id;\n if (!self._matchesPrefix(id)) {\n debug(\"discarding unscoped message %s\", id);\n return;\n }\n var cb = self._registry.get(id);\n if (cb) {\n process.nextTick(function() {\n debug(\"received message %s\", id);\n cb(null, Buffer2.concat(obj.payload), self._adapter);\n });\n }\n }\n function onEnd() {\n self.destroy(true);\n }\n function onFinish() {\n self.destroy();\n }\n }\n util.inherits(StatefulClientChannel, ClientChannel);\n StatefulClientChannel.prototype._emit = function() {\n if (this._connected || this.draining) {\n ClientChannel.prototype._emit.apply(this, arguments);\n } else {\n debug(\"queuing request\");\n var args = [];\n var i, l;\n for (i = 0, l = arguments.length; i < l; i++) {\n args.push(arguments[i]);\n }\n this.once(\"_ready\", function() {\n this._emit.apply(this, args);\n });\n }\n };\n StatefulClientChannel.prototype._send = function(id, reqBuf, oneWay) {\n if (oneWay) {\n var self = this;\n process.nextTick(function() {\n self._registry.get(id)(null, utils.bufferFrom([0, 0, 0]), self._adapter);\n });\n }\n return this._writable.write({ id, payload: [reqBuf] });\n };\n function ServerChannel(server, opts) {\n opts = opts || {};\n events.EventEmitter.call(this);\n this.server = server;\n this._endWritable = !!utils.getOption(opts, \"endWritable\", true);\n this._prefix = normalizedPrefix(opts.scope);\n var cache = server._cache;\n var svc = server.service;\n var hash = svc.hash;\n if (!cache[hash]) {\n cache[hash] = new Adapter(svc, svc, hash);\n }\n this._adapter = null;\n this.destroyed = false;\n this.draining = false;\n this.pending = 0;\n this.once(\"_eot\", function(pending, err) {\n debug(\"server channel EOT\");\n this.emit(\"eot\", pending, err);\n });\n }\n util.inherits(ServerChannel, events.EventEmitter);\n ServerChannel.prototype.destroy = function(noWait) {\n if (!this.draining) {\n this.draining = true;\n this.emit(\"_drain\");\n }\n if (noWait || !this.pending) {\n this.destroyed = true;\n if (isError(noWait)) {\n debug(\"fatal server channel error: %s\", noWait);\n this.emit(\"_eot\", this.pending, noWait);\n } else {\n this.emit(\"_eot\", this.pending);\n }\n }\n };\n ServerChannel.prototype._createHandshakeResponse = function(err, hreq) {\n var svc = this.server.service;\n var buf = svc.hash;\n var serverMatch = hreq && hreq.serverHash.equals(buf);\n return {\n match: err ? \"NONE\" : serverMatch ? \"BOTH\" : \"CLIENT\",\n serverProtocol: serverMatch ? null : JSON.stringify(svc.protocol),\n serverHash: serverMatch ? null : buf\n };\n };\n ServerChannel.prototype._getAdapter = function(hreq) {\n var hash = hreq.clientHash;\n var adapter = this.server._cache[hash];\n if (adapter) {\n return adapter;\n }\n if (!hreq.clientProtocol) {\n throw toRpcError(\"UNKNOWN_PROTOCOL\");\n }\n var ptcl = JSON.parse(hreq.clientProtocol);\n var clientSvc = Service.forProtocol(ptcl);\n adapter = new Adapter(clientSvc, this.server.service, hash, true);\n return this.server._cache[hash] = adapter;\n };\n ServerChannel.prototype._matchesPrefix = function(id) {\n return matchesPrefix(id, this._prefix);\n };\n ServerChannel.prototype._receive = function(reqBuf, adapter, cb) {\n var self = this;\n var wreq;\n try {\n wreq = adapter._decodeRequest(reqBuf);\n } catch (cause) {\n cb(self._encodeSystemError(toRpcError(\"INVALID_REQUEST\", cause)));\n return;\n }\n var msg = wreq._msg;\n var wres = new WrappedResponse(msg, {});\n if (!msg.name) {\n wres.response = null;\n cb(wres.toBuffer(), false);\n return;\n }\n var ctx = new CallContext(msg, this);\n self.emit(\"incomingCall\", ctx);\n var fns = this.server._fns;\n debug(\"starting server middleware chain (%s middleware)\", fns.length);\n self.pending++;\n chainMiddleware({\n fns,\n ctx,\n wreq,\n wres,\n onTransition,\n onCompletion,\n onError\n });\n function onTransition(wreq2, wres2, prev) {\n var handler = self.server._handlers[msg.name];\n if (!handler) {\n var defaultHandler = self.server._defaultHandler;\n if (defaultHandler) {\n defaultHandler.call(ctx, wreq2, wres2, prev);\n } else {\n var cause = new Error(f2(\"no handler for %s\", msg.name));\n prev(toRpcError(\"NOT_IMPLEMENTED\", cause));\n }\n } else {\n var pending = !msg.oneWay;\n try {\n if (pending) {\n handler.call(ctx, wreq2.request, function(err, res) {\n pending = false;\n wres2.error = err;\n wres2.response = res;\n prev();\n });\n } else {\n handler.call(ctx, wreq2.request);\n prev();\n }\n } catch (err) {\n if (pending) {\n pending = false;\n prev(err);\n } else {\n onError(err);\n }\n }\n }\n }\n function onCompletion(err) {\n self.pending--;\n var server = self.server;\n var resBuf;\n if (!err) {\n var resErr = wres.error;\n var isStrict = server._strict;\n if (!isStrict) {\n if (isError(resErr)) {\n wres.error = msg.errorType.clone(resErr.message, { wrapUnions: true });\n } else if (resErr === null) {\n resErr = wres.error = void 0;\n }\n if (resErr === void 0 && wres.response === void 0 && msg.responseType.isValid(null)) {\n wres.response = null;\n }\n }\n try {\n resBuf = wres.toBuffer();\n } catch (cause) {\n if (wres.error !== void 0) {\n err = serializationError(\n f2(\"invalid %j error\", msg.name),\n // Sic.\n wres,\n [\n { name: \"headers\", type: MAP_BYTES_TYPE },\n { name: \"error\", type: msg.errorType }\n ]\n );\n } else {\n err = serializationError(\n f2(\"invalid %j response\", msg.name),\n wres,\n [\n { name: \"headers\", type: MAP_BYTES_TYPE },\n { name: \"response\", type: msg.responseType }\n ]\n );\n }\n }\n }\n if (!resBuf) {\n resBuf = self._encodeSystemError(err, wres.headers);\n } else if (resErr !== void 0) {\n server.emit(\"error\", toRpcError(\"APPLICATION_ERROR\", resErr));\n }\n cb(resBuf, msg.oneWay);\n if (self.draining && !self.pending) {\n self.destroy();\n }\n }\n function onError(err) {\n self.server.emit(\"error\", err, self);\n }\n };\n utils.addDeprecatedGetters(ServerChannel, [\"pending\"]);\n ServerChannel.prototype.getCache = util.deprecate(\n function() {\n return this.server._cache;\n },\n \"use `.remoteProtocols()` instead of `.getCache()`\"\n );\n ServerChannel.prototype.getProtocol = util.deprecate(\n function() {\n return this.server.service;\n },\n \"use `.service` instead of `.getProtocol()`\"\n );\n ServerChannel.prototype.isDestroyed = util.deprecate(\n function() {\n return this.destroyed;\n },\n \"use `.destroyed` instead of `.isDestroyed`\"\n );\n ServerChannel.prototype._encodeSystemError = function(err, header) {\n var server = this.server;\n server.emit(\"error\", err, this);\n var errStr;\n if (server._sysErrFormatter) {\n errStr = server._sysErrFormatter.call(this, err);\n } else if (err.rpcCode) {\n errStr = err.message;\n }\n var hdrBuf;\n if (header) {\n try {\n hdrBuf = MAP_BYTES_TYPE.toBuffer(header);\n } catch (cause) {\n server.emit(\"error\", cause, this);\n }\n }\n return Buffer2.concat([\n hdrBuf || utils.bufferFrom([0]),\n utils.bufferFrom([1, 0]),\n // Error flag and first union index.\n STRING_TYPE.toBuffer(errStr || \"internal server error\")\n ]);\n };\n function StatelessServerChannel(server, readableFactory, opts) {\n ServerChannel.call(this, server, opts);\n this._writable = void 0;\n var self = this;\n var readable;\n process.nextTick(function() {\n readable = readableFactory.call(self, function(err, writable) {\n process.nextTick(function() {\n if (err) {\n onFinish(err);\n return;\n }\n self._writable = writable.on(\"finish\", onFinish);\n self.emit(\"_writable\");\n });\n }).on(\"data\", onRequest).on(\"end\", onEnd);\n });\n function onRequest(obj) {\n var id = obj.id;\n var buf = Buffer2.concat(obj.payload);\n var err;\n try {\n var parts = readHead(HANDSHAKE_REQUEST_TYPE, buf);\n var hreq = parts.head;\n var adapter = self._getAdapter(hreq);\n } catch (cause) {\n err = toRpcError(\"INVALID_HANDSHAKE_REQUEST\", cause);\n }\n var hres = self._createHandshakeResponse(err, hreq);\n self.emit(\"handshake\", hreq, hres);\n if (err) {\n done(self._encodeSystemError(err));\n } else {\n self._receive(parts.tail, adapter, done);\n }\n function done(resBuf) {\n if (!self.destroyed) {\n if (!self._writable) {\n self.once(\"_writable\", function() {\n done(resBuf);\n });\n return;\n }\n self._writable.write({\n id,\n payload: [HANDSHAKE_RESPONSE_TYPE.toBuffer(hres), resBuf]\n });\n }\n if (self._writable && self._endWritable) {\n self._writable.end();\n }\n }\n }\n function onEnd() {\n self.destroy();\n }\n function onFinish(err) {\n readable.removeListener(\"data\", onRequest).removeListener(\"end\", onEnd);\n self.destroy(err || true);\n }\n }\n util.inherits(StatelessServerChannel, ServerChannel);\n function StatefulServerChannel(server, readable, writable, opts) {\n ServerChannel.call(this, server, opts);\n this._adapter = void 0;\n this._writable = writable.on(\"finish\", onFinish);\n this._readable = readable.on(\"data\", onHandshake).on(\"end\", onEnd);\n this.once(\"_drain\", function() {\n this._readable.removeListener(\"data\", onHandshake).removeListener(\"data\", onRequest).removeListener(\"end\", onEnd);\n }).once(\"eot\", function() {\n this._writable.removeListener(\"finish\", onFinish);\n if (this._endWritable) {\n this._writable.end();\n }\n });\n var self = this;\n function onHandshake(obj) {\n var id = obj.id;\n if (!self._matchesPrefix(id)) {\n return;\n }\n var buf = Buffer2.concat(obj.payload);\n var err;\n try {\n var parts = readHead(HANDSHAKE_REQUEST_TYPE, buf);\n var hreq = parts.head;\n self._adapter = self._getAdapter(hreq);\n } catch (cause) {\n err = toRpcError(\"INVALID_HANDSHAKE_REQUEST\", cause);\n }\n var hres = self._createHandshakeResponse(err, hreq);\n self.emit(\"handshake\", hreq, hres);\n if (err) {\n done(self._encodeSystemError(err));\n } else {\n self._readable.removeListener(\"data\", onHandshake).on(\"data\", onRequest);\n self._receive(parts.tail, self._adapter, done);\n }\n function done(resBuf) {\n if (self.destroyed) {\n return;\n }\n self._writable.write({\n id,\n payload: [HANDSHAKE_RESPONSE_TYPE.toBuffer(hres), resBuf]\n });\n }\n }\n function onRequest(obj) {\n var id = obj.id;\n if (!self._matchesPrefix(id)) {\n return;\n }\n var reqBuf = Buffer2.concat(obj.payload);\n self._receive(reqBuf, self._adapter, function(resBuf, oneWay) {\n if (self.destroyed || oneWay) {\n return;\n }\n self._writable.write({ id, payload: [resBuf] });\n });\n }\n function onEnd() {\n self.destroy();\n }\n function onFinish() {\n self.destroy(true);\n }\n }\n util.inherits(StatefulServerChannel, ServerChannel);\n function WrappedRequest(msg, hdrs, req) {\n this._msg = msg;\n this.headers = hdrs || {};\n this.request = req || {};\n }\n WrappedRequest.prototype.toBuffer = function() {\n var msg = this._msg;\n return Buffer2.concat([\n MAP_BYTES_TYPE.toBuffer(this.headers),\n STRING_TYPE.toBuffer(msg.name),\n msg.requestType.toBuffer(this.request)\n ]);\n };\n function WrappedResponse(msg, hdr, err, res) {\n this._msg = msg;\n this.headers = hdr;\n this.error = err;\n this.response = res;\n }\n WrappedResponse.prototype.toBuffer = function() {\n var hdr = MAP_BYTES_TYPE.toBuffer(this.headers);\n var hasError = this.error !== void 0;\n return Buffer2.concat([\n hdr,\n BOOLEAN_TYPE.toBuffer(hasError),\n hasError ? this._msg.errorType.toBuffer(this.error) : this._msg.responseType.toBuffer(this.response)\n ]);\n };\n function CallContext(msg, channel) {\n this.channel = channel;\n this.locals = {};\n this.message = msg;\n Object.freeze(this);\n }\n function Registry(ctx, prefixLength) {\n this._ctx = ctx;\n this._mask = ~0 >>> (prefixLength | 0);\n this._id = 0;\n this._n = 0;\n this._cbs = {};\n }\n Registry.prototype.get = function(id) {\n return this._cbs[id & this._mask];\n };\n Registry.prototype.add = function(timeout, fn) {\n this._id = this._id + 1 & this._mask;\n var self = this;\n var id = this._id;\n var timer;\n if (timeout > 0) {\n timer = setTimeout(function() {\n cb(new Error(\"timeout\"));\n }, timeout);\n }\n this._cbs[id] = cb;\n this._n++;\n return id;\n function cb() {\n if (!self._cbs[id]) {\n return;\n }\n delete self._cbs[id];\n self._n--;\n if (timer) {\n clearTimeout(timer);\n }\n fn.apply(self._ctx, arguments);\n }\n };\n Registry.prototype.clear = function() {\n Object.keys(this._cbs).forEach(function(id) {\n this._cbs[id](new Error(\"interrupted\"));\n }, this);\n };\n function Adapter(clientSvc, serverSvc, hash, isRemote) {\n this._clientSvc = clientSvc;\n this._serverSvc = serverSvc;\n this._hash = hash;\n this._isRemote = !!isRemote;\n this._readers = createReaders(clientSvc, serverSvc);\n }\n Adapter.prototype._decodeRequest = function(buf) {\n var tap = new Tap(buf);\n var hdr = MAP_BYTES_TYPE._read(tap);\n var name = STRING_TYPE._read(tap);\n var msg, req;\n if (name) {\n msg = this._serverSvc.message(name);\n req = this._readers[name + \"?\"]._read(tap);\n } else {\n msg = PING_MESSAGE;\n }\n if (!tap.isValid()) {\n throw new Error(f2(\"truncated %s request\", name || \"ping$\"));\n }\n return new WrappedRequest(msg, hdr, req);\n };\n Adapter.prototype._decodeResponse = function(buf, wres, msg) {\n var tap = new Tap(buf);\n utils.copyOwnProperties(MAP_BYTES_TYPE._read(tap), wres.headers, true);\n var isError2 = BOOLEAN_TYPE._read(tap);\n var name = msg.name;\n if (name) {\n var reader = this._readers[name + (isError2 ? \"*\" : \"!\")];\n msg = this._clientSvc.message(name);\n if (isError2) {\n wres.error = reader._read(tap);\n } else {\n wres.response = reader._read(tap);\n }\n if (!tap.isValid()) {\n throw new Error(f2(\"truncated %s response\", name));\n }\n } else {\n msg = PING_MESSAGE;\n }\n };\n function FrameDecoder() {\n stream.Transform.call(this, { readableObjectMode: true });\n this._id = void 0;\n this._buf = utils.newBuffer(0);\n this._bufs = [];\n this.on(\"finish\", function() {\n this.push(null);\n });\n }\n util.inherits(FrameDecoder, stream.Transform);\n FrameDecoder.prototype._transform = function(buf, encoding, cb) {\n buf = Buffer2.concat([this._buf, buf]);\n var frameLength;\n while (buf.length >= 4 && buf.length >= (frameLength = buf.readInt32BE(0)) + 4) {\n if (frameLength) {\n this._bufs.push(buf.slice(4, frameLength + 4));\n } else {\n var bufs = this._bufs;\n this._bufs = [];\n this.push({ id: null, payload: bufs });\n }\n buf = buf.slice(frameLength + 4);\n }\n this._buf = buf;\n cb();\n };\n FrameDecoder.prototype._flush = function(cb) {\n if (this._buf.length || this._bufs.length) {\n var bufs = this._bufs.slice();\n bufs.unshift(this._buf);\n var err = toRpcError(\"TRAILING_DATA\");\n err.trailingData = Buffer2.concat(bufs).toString();\n this.emit(\"error\", err);\n }\n cb();\n };\n function FrameEncoder() {\n stream.Transform.call(this, { writableObjectMode: true });\n this.on(\"finish\", function() {\n this.push(null);\n });\n }\n util.inherits(FrameEncoder, stream.Transform);\n FrameEncoder.prototype._transform = function(obj, encoding, cb) {\n var bufs = obj.payload;\n var i, l, buf;\n for (i = 0, l = bufs.length; i < l; i++) {\n buf = bufs[i];\n this.push(intBuffer(buf.length));\n this.push(buf);\n }\n this.push(intBuffer(0));\n cb();\n };\n function NettyDecoder() {\n stream.Transform.call(this, { readableObjectMode: true });\n this._id = void 0;\n this._frameCount = 0;\n this._buf = utils.newBuffer(0);\n this._bufs = [];\n this.on(\"finish\", function() {\n this.push(null);\n });\n }\n util.inherits(NettyDecoder, stream.Transform);\n NettyDecoder.prototype._transform = function(buf, encoding, cb) {\n buf = Buffer2.concat([this._buf, buf]);\n while (true) {\n if (this._id === void 0) {\n if (buf.length < 8) {\n this._buf = buf;\n cb();\n return;\n }\n this._id = buf.readInt32BE(0);\n this._frameCount = buf.readInt32BE(4);\n buf = buf.slice(8);\n }\n var frameLength;\n while (this._frameCount && buf.length >= 4 && buf.length >= (frameLength = buf.readInt32BE(0)) + 4) {\n this._frameCount--;\n this._bufs.push(buf.slice(4, frameLength + 4));\n buf = buf.slice(frameLength + 4);\n }\n if (this._frameCount) {\n this._buf = buf;\n cb();\n return;\n } else {\n var obj = { id: this._id, payload: this._bufs };\n this._bufs = [];\n this._id = void 0;\n this.push(obj);\n }\n }\n };\n NettyDecoder.prototype._flush = FrameDecoder.prototype._flush;\n function NettyEncoder() {\n stream.Transform.call(this, { writableObjectMode: true });\n this.on(\"finish\", function() {\n this.push(null);\n });\n }\n util.inherits(NettyEncoder, stream.Transform);\n NettyEncoder.prototype._transform = function(obj, encoding, cb) {\n var bufs = obj.payload;\n var l = bufs.length;\n var buf;\n buf = utils.newBuffer(8);\n buf.writeInt32BE(obj.id, 0);\n buf.writeInt32BE(l, 4);\n this.push(buf);\n var i;\n for (i = 0; i < l; i++) {\n buf = bufs[i];\n this.push(intBuffer(buf.length));\n this.push(buf);\n }\n cb();\n };\n function intBuffer(n) {\n var buf = utils.newBuffer(4);\n buf.writeInt32BE(n);\n return buf;\n }\n function readHead(type, buf) {\n var tap = new Tap(buf);\n var head = type._read(tap);\n if (!tap.isValid()) {\n throw new Error(f2(\"truncated %j\", type.schema()));\n }\n return { head, tail: tap.buf.slice(tap.pos) };\n }\n function createReader(rtype, wtype) {\n return rtype.equals(wtype) ? rtype : rtype.createResolver(wtype);\n }\n function createReaders(clientSvc, serverSvc) {\n var obj = {};\n clientSvc.messages.forEach(function(c) {\n var n = c.name;\n var s = serverSvc.message(n);\n try {\n if (!s) {\n throw new Error(f2(\"missing server message: %s\", n));\n }\n if (s.oneWay !== c.oneWay) {\n throw new Error(f2(\"inconsistent one-way message: %s\", n));\n }\n obj[n + \"?\"] = createReader(s.requestType, c.requestType);\n obj[n + \"*\"] = createReader(c.errorType, s.errorType);\n obj[n + \"!\"] = createReader(c.responseType, s.responseType);\n } catch (cause) {\n throw toRpcError(\"INCOMPATIBLE_PROTOCOL\", cause);\n }\n });\n return obj;\n }\n function insertRemoteProtocols(cache, ptcls, svc, isClient) {\n Object.keys(ptcls).forEach(function(hash) {\n var ptcl = ptcls[hash];\n var clientSvc, serverSvc;\n if (isClient) {\n clientSvc = svc;\n serverSvc = Service.forProtocol(ptcl);\n } else {\n clientSvc = Service.forProtocol(ptcl);\n serverSvc = svc;\n }\n cache[hash] = new Adapter(clientSvc, serverSvc, hash, true);\n });\n }\n function getRemoteProtocols(cache, isClient) {\n var ptcls = {};\n Object.keys(cache).forEach(function(hs) {\n var adapter = cache[hs];\n if (adapter._isRemote) {\n var svc = isClient ? adapter._serverSvc : adapter._clientSvc;\n ptcls[hs] = svc.protocol;\n }\n });\n return ptcls;\n }\n function isError(any) {\n return !!any && Object.prototype.toString.call(any) === \"[object Error]\";\n }\n function forwardErrors(src, dst) {\n return src.on(\"error\", function(err) {\n dst.emit(\"error\", err, src);\n });\n }\n function toError(msg, cause) {\n var err = new Error(msg);\n err.cause = cause;\n return err;\n }\n function toRpcError(rpcCode, cause) {\n var err = toError(rpcCode.toLowerCase().replace(/_/g, \" \"), cause);\n err.rpcCode = cause && cause.rpcCode ? cause.rpcCode : rpcCode;\n return err;\n }\n function serializationError(msg, obj, fields) {\n var details = [];\n var i, l, field;\n for (i = 0, l = fields.length; i < l; i++) {\n field = fields[i];\n field.type.isValid(obj[field.name], { errorHook });\n }\n var detailsStr = details.map(function(obj2) {\n return f2(\"%s = %j but expected %s\", obj2.path, obj2.value, obj2.type);\n }).join(\", \");\n var err = new Error(f2(\"%s (%s)\", msg, detailsStr));\n err.details = details;\n return err;\n function errorHook(parts, any, type) {\n var strs = [];\n var i2, l2, part;\n for (i2 = 0, l2 = parts.length; i2 < l2; i2++) {\n part = parts[i2];\n if (isNaN(part)) {\n strs.push(\".\" + part);\n } else {\n strs.push(\"[\" + part + \"]\");\n }\n }\n details.push({\n path: field.name + strs.join(\"\"),\n value: any,\n type\n });\n }\n }\n function normalizedPrefix(scope) {\n return scope ? utils.getHash(scope).readInt16BE(0) << 32 - PREFIX_LENGTH : 0;\n }\n function matchesPrefix(id, prefix) {\n return (id ^ prefix) >> 32 - PREFIX_LENGTH === 0;\n }\n function isStream(any) {\n return !!(any && any.pipe);\n }\n function getExistingMessage(svc, name) {\n var msg = svc.message(name);\n if (!msg) {\n throw new Error(f2(\"unknown message: %s\", name));\n }\n return msg;\n }\n function chainMiddleware(params) {\n var args = [params.wreq, params.wres];\n var cbs = [];\n var cause;\n forward(0);\n function forward(pos) {\n var isDone = false;\n if (pos < params.fns.length) {\n params.fns[pos].apply(params.ctx, args.concat(function(err, cb) {\n if (isDone) {\n params.onError(toError(\"duplicate forward middleware call\", err));\n return;\n }\n isDone = true;\n if (err || params.wres && // Non one-way messages.\n (params.wres.error !== void 0 || params.wres.response !== void 0)) {\n cause = err;\n backward();\n return;\n }\n if (cb) {\n cbs.push(cb);\n }\n forward(++pos);\n }));\n } else {\n params.onTransition.apply(params.ctx, args.concat(function(err) {\n if (isDone) {\n params.onError(toError(\"duplicate handler call\", err));\n return;\n }\n isDone = true;\n cause = err;\n process.nextTick(backward);\n }));\n }\n }\n function backward() {\n var cb = cbs.pop();\n if (cb) {\n var isDone = false;\n cb.call(params.ctx, cause, function(err) {\n if (isDone) {\n params.onError(toError(\"duplicate backward middleware call\", err));\n return;\n }\n cause = err;\n isDone = true;\n backward();\n });\n } else {\n params.onCompletion.call(params.ctx, cause);\n }\n }\n }\n module.exports = {\n Adapter,\n HANDSHAKE_REQUEST_TYPE,\n HANDSHAKE_RESPONSE_TYPE,\n Message,\n Registry,\n Service,\n discoverProtocol,\n streams: {\n FrameDecoder,\n FrameEncoder,\n NettyDecoder,\n NettyEncoder\n }\n };\n }\n});\n\n// node_modules/avsc/lib/files.js\nvar require_files = __commonJS({\n \"node_modules/avsc/lib/files.js\"(exports, module) {\n \"use strict\";\n var fs = __import_FS;\n var path = __import_PATH;\n function createImportHook() {\n var imports = {};\n return function(fpath, kind, cb) {\n fpath = path.resolve(fpath);\n if (imports[fpath]) {\n process.nextTick(cb);\n return;\n }\n imports[fpath] = true;\n fs.readFile(fpath, { encoding: \"utf8\" }, cb);\n };\n }\n function createSyncImportHook() {\n var imports = {};\n return function(fpath, kind, cb) {\n fpath = path.resolve(fpath);\n if (imports[fpath]) {\n cb();\n } else {\n imports[fpath] = true;\n cb(null, fs.readFileSync(fpath, { encoding: \"utf8\" }));\n }\n };\n }\n module.exports = {\n createImportHook,\n createSyncImportHook,\n // Proxy a few methods to better shim them for browserify.\n existsSync: fs.existsSync,\n readFileSync: fs.readFileSync\n };\n }\n});\n\n// node_modules/avsc/lib/specs.js\nvar require_specs = __commonJS({\n \"node_modules/avsc/lib/specs.js\"(exports, module) {\n \"use strict\";\n var files = require_files();\n var utils = require_utils();\n var path = __import_PATH;\n var util = __import_UTIL;\n var f2 = util.format;\n var TYPE_REFS = {\n date: { type: \"int\", logicalType: \"date\" },\n decimal: { type: \"bytes\", logicalType: \"decimal\" },\n time_ms: { type: \"long\", logicalType: \"time-millis\" },\n timestamp_ms: { type: \"long\", logicalType: \"timestamp-millis\" }\n };\n function assembleProtocol(fpath, opts, cb) {\n if (!cb && typeof opts == \"function\") {\n cb = opts;\n opts = void 0;\n }\n opts = opts || {};\n if (!opts.importHook) {\n opts.importHook = files.createImportHook();\n }\n importFile(fpath, function(err, protocol) {\n if (err) {\n cb(err);\n return;\n }\n if (!protocol) {\n cb(new Error(\"empty root import\"));\n return;\n }\n var schemas = protocol.types;\n if (schemas) {\n var namespace = protocolNamespace(protocol) || \"\";\n schemas.forEach(function(schema) {\n if (schema.namespace === namespace) {\n delete schema.namespace;\n }\n });\n }\n cb(null, protocol);\n });\n function importFile(fpath2, cb2) {\n opts.importHook(fpath2, \"idl\", function(err, str) {\n if (err) {\n cb2(err);\n return;\n }\n if (str === void 0) {\n cb2();\n return;\n }\n try {\n var reader = new Reader(str, opts);\n var obj = reader._readProtocol(str, opts);\n } catch (err2) {\n err2.path = fpath2;\n cb2(err2);\n return;\n }\n fetchImports(obj.protocol, obj.imports, path.dirname(fpath2), cb2);\n });\n }\n function fetchImports(protocol, imports, dpath, cb2) {\n var importedProtocols = [];\n next();\n function next() {\n var info = imports.shift();\n if (!info) {\n importedProtocols.reverse();\n try {\n importedProtocols.forEach(function(imported) {\n mergeImport(protocol, imported);\n });\n } catch (err) {\n cb2(err);\n return;\n }\n cb2(null, protocol);\n return;\n }\n var importPath = path.join(dpath, info.name);\n if (info.kind === \"idl\") {\n importFile(importPath, function(err, imported) {\n if (err) {\n cb2(err);\n return;\n }\n if (imported) {\n importedProtocols.push(imported);\n }\n next();\n });\n } else {\n opts.importHook(importPath, info.kind, function(err, str) {\n if (err) {\n cb2(err);\n return;\n }\n switch (info.kind) {\n case \"protocol\":\n case \"schema\":\n if (str === void 0) {\n next();\n return;\n }\n try {\n var obj = JSON.parse(str);\n } catch (err2) {\n err2.path = importPath;\n cb2(err2);\n return;\n }\n var imported = info.kind === \"schema\" ? { types: [obj] } : obj;\n importedProtocols.push(imported);\n next();\n return;\n default:\n cb2(new Error(f2(\"invalid import kind: %s\", info.kind)));\n }\n });\n }\n }\n }\n function mergeImport(protocol, imported) {\n var schemas = imported.types || [];\n schemas.reverse();\n schemas.forEach(function(schema) {\n if (!protocol.types) {\n protocol.types = [];\n }\n if (schema.namespace === void 0) {\n schema.namespace = protocolNamespace(imported) || \"\";\n }\n protocol.types.unshift(schema);\n });\n Object.keys(imported.messages || {}).forEach(function(name) {\n if (!protocol.messages) {\n protocol.messages = {};\n }\n if (protocol.messages[name]) {\n throw new Error(f2(\"duplicate message: %s\", name));\n }\n protocol.messages[name] = imported.messages[name];\n });\n }\n }\n function read(str) {\n var schema;\n if (typeof str == \"string\" && ~str.indexOf(path.sep) && files.existsSync(str)) {\n var contents = files.readFileSync(str, { encoding: \"utf8\" });\n try {\n return JSON.parse(contents);\n } catch (err) {\n var opts = { importHook: files.createSyncImportHook() };\n assembleProtocol(str, opts, function(err2, protocolSchema) {\n schema = err2 ? contents : protocolSchema;\n });\n }\n } else {\n schema = str;\n }\n if (typeof schema != \"string\" || schema === \"null\") {\n return schema;\n }\n try {\n return JSON.parse(schema);\n } catch (err) {\n try {\n return Reader.readProtocol(schema);\n } catch (err2) {\n try {\n return Reader.readSchema(schema);\n } catch (err3) {\n return schema;\n }\n }\n }\n }\n function Reader(str, opts) {\n opts = opts || {};\n this._tk = new Tokenizer(str);\n this._ackVoidMessages = !!opts.ackVoidMessages;\n this._implicitTags = !opts.delimitedCollections;\n this._typeRefs = opts.typeRefs || TYPE_REFS;\n }\n Reader.readProtocol = function(str, opts) {\n var reader = new Reader(str, opts);\n var protocol = reader._readProtocol();\n if (protocol.imports.length) {\n throw new Error(\"unresolvable import\");\n }\n return protocol.protocol;\n };\n Reader.readSchema = function(str, opts) {\n var reader = new Reader(str, opts);\n var doc = reader._readJavadoc();\n var schema = reader._readType(doc === void 0 ? {} : { doc }, true);\n reader._tk.next({ id: \"(eof)\" });\n return schema;\n };\n Reader.prototype._readProtocol = function() {\n var tk = this._tk;\n var imports = [];\n var types = [];\n var messages = {};\n var pos;\n this._readImports(imports);\n var protocolSchema = {};\n var protocolJavadoc = this._readJavadoc();\n if (protocolJavadoc !== void 0) {\n protocolSchema.doc = protocolJavadoc;\n }\n this._readAnnotations(protocolSchema);\n tk.next({ val: \"protocol\" });\n if (!tk.next({ val: \"{\", silent: true })) {\n protocolSchema.protocol = tk.next({ id: \"name\" }).val;\n tk.next({ val: \"{\" });\n }\n while (!tk.next({ val: \"}\", silent: true })) {\n if (!this._readImports(imports)) {\n var javadoc = this._readJavadoc();\n var typeSchema = this._readType({}, true);\n var numImports = this._readImports(imports, true);\n var message = void 0;\n pos = tk.pos;\n if (!numImports && (message = this._readMessage(typeSchema))) {\n if (javadoc !== void 0 && message.schema.doc === void 0) {\n message.schema.doc = javadoc;\n }\n var oneWay = false;\n if (message.schema.response === \"void\" || message.schema.response.type === \"void\") {\n oneWay = !this._ackVoidMessages && !message.schema.errors;\n if (message.schema.response === \"void\") {\n message.schema.response = \"null\";\n } else {\n message.schema.response.type = \"null\";\n }\n }\n if (oneWay) {\n message.schema[\"one-way\"] = true;\n }\n if (messages[message.name]) {\n throw new Error(f2(\"duplicate message: %s\", message.name));\n }\n messages[message.name] = message.schema;\n } else {\n if (javadoc) {\n if (typeof typeSchema == \"string\") {\n typeSchema = { doc: javadoc, type: typeSchema };\n } else if (typeSchema.doc === void 0) {\n typeSchema.doc = javadoc;\n }\n }\n types.push(typeSchema);\n tk.pos = pos;\n tk.next({ val: \";\", silent: true });\n }\n javadoc = void 0;\n }\n }\n tk.next({ id: \"(eof)\" });\n if (types.length) {\n protocolSchema.types = types;\n }\n if (Object.keys(messages).length) {\n protocolSchema.messages = messages;\n }\n return { protocol: protocolSchema, imports };\n };\n Reader.prototype._readAnnotations = function(schema) {\n var tk = this._tk;\n while (tk.next({ val: \"@\", silent: true })) {\n var parts = [];\n while (!tk.next({ val: \"(\", silent: true })) {\n parts.push(tk.next().val);\n }\n schema[parts.join(\"\")] = tk.next({ id: \"json\" }).val;\n tk.next({ val: \")\" });\n }\n };\n Reader.prototype._readMessage = function(responseSchema) {\n var tk = this._tk;\n var schema = { request: [], response: responseSchema };\n this._readAnnotations(schema);\n var name = tk.next().val;\n if (tk.next().val !== \"(\") {\n return;\n }\n if (!tk.next({ val: \")\", silent: true })) {\n do {\n schema.request.push(this._readField());\n } while (!tk.next({ val: \")\", silent: true }) && tk.next({ val: \",\" }));\n }\n var token = tk.next();\n switch (token.val) {\n case \"throws\":\n schema.errors = [];\n do {\n schema.errors.push(this._readType());\n } while (!tk.next({ val: \";\", silent: true }) && tk.next({ val: \",\" }));\n break;\n case \"oneway\":\n schema[\"one-way\"] = true;\n tk.next({ val: \";\" });\n break;\n case \";\":\n break;\n default:\n throw tk.error(\"invalid message suffix\", token);\n }\n return { name, schema };\n };\n Reader.prototype._readJavadoc = function() {\n var token = this._tk.next({ id: \"javadoc\", emitJavadoc: true, silent: true });\n if (token) {\n return token.val;\n }\n };\n Reader.prototype._readField = function() {\n var tk = this._tk;\n var javadoc = this._readJavadoc();\n var schema = { type: this._readType() };\n if (javadoc !== void 0 && schema.doc === void 0) {\n schema.doc = javadoc;\n }\n this._readAnnotations(schema);\n schema.name = tk.next({ id: \"name\" }).val;\n if (tk.next({ val: \"=\", silent: true })) {\n schema[\"default\"] = tk.next({ id: \"json\" }).val;\n }\n return schema;\n };\n Reader.prototype._readType = function(schema, top) {\n schema = schema || {};\n this._readAnnotations(schema);\n schema.type = this._tk.next({ id: \"name\" }).val;\n switch (schema.type) {\n case \"record\":\n case \"error\":\n return this._readRecord(schema);\n case \"fixed\":\n return this._readFixed(schema);\n case \"enum\":\n return this._readEnum(schema, top);\n case \"map\":\n return this._readMap(schema);\n case \"array\":\n return this._readArray(schema);\n case \"union\":\n if (Object.keys(schema).length > 1) {\n throw new Error(\"union annotations are not supported\");\n }\n return this._readUnion();\n default:\n var ref = this._typeRefs[schema.type];\n if (ref) {\n delete schema.type;\n utils.copyOwnProperties(ref, schema);\n }\n return Object.keys(schema).length > 1 ? schema : schema.type;\n }\n };\n Reader.prototype._readFixed = function(schema) {\n var tk = this._tk;\n if (!tk.next({ val: \"(\", silent: true })) {\n schema.name = tk.next({ id: \"name\" }).val;\n tk.next({ val: \"(\" });\n }\n schema.size = parseInt(tk.next({ id: \"number\" }).val);\n tk.next({ val: \")\" });\n return schema;\n };\n Reader.prototype._readMap = function(schema) {\n var tk = this._tk;\n var silent = this._implicitTags;\n var implicitTags = tk.next({ val: \"<\", silent }) === void 0;\n schema.values = this._readType();\n tk.next({ val: \">\", silent: implicitTags });\n return schema;\n };\n Reader.prototype._readArray = function(schema) {\n var tk = this._tk;\n var silent = this._implicitTags;\n var implicitTags = tk.next({ val: \"<\", silent }) === void 0;\n schema.items = this._readType();\n tk.next({ val: \">\", silent: implicitTags });\n return schema;\n };\n Reader.prototype._readEnum = function(schema, top) {\n var tk = this._tk;\n if (!tk.next({ val: \"{\", silent: true })) {\n schema.name = tk.next({ id: \"name\" }).val;\n tk.next({ val: \"{\" });\n }\n schema.symbols = [];\n do {\n schema.symbols.push(tk.next().val);\n } while (!tk.next({ val: \"}\", silent: true }) && tk.next({ val: \",\" }));\n if (top && tk.next({ val: \"=\", silent: true })) {\n schema.default = tk.next().val;\n tk.next({ val: \";\" });\n }\n return schema;\n };\n Reader.prototype._readUnion = function() {\n var tk = this._tk;\n var arr = [];\n tk.next({ val: \"{\" });\n do {\n arr.push(this._readType());\n } while (!tk.next({ val: \"}\", silent: true }) && tk.next({ val: \",\" }));\n return arr;\n };\n Reader.prototype._readRecord = function(schema) {\n var tk = this._tk;\n if (!tk.next({ val: \"{\", silent: true })) {\n schema.name = tk.next({ id: \"name\" }).val;\n tk.next({ val: \"{\" });\n }\n schema.fields = [];\n while (!tk.next({ val: \"}\", silent: true })) {\n schema.fields.push(this._readField());\n tk.next({ val: \";\" });\n }\n return schema;\n };\n Reader.prototype._readImports = function(imports, maybeMessage) {\n var tk = this._tk;\n var numImports = 0;\n var pos = tk.pos;\n while (tk.next({ val: \"import\", silent: true })) {\n if (!numImports && maybeMessage && tk.next({ val: \"(\", silent: true })) {\n tk.pos = pos;\n return;\n }\n var kind = tk.next({ id: \"name\" }).val;\n var fname = JSON.parse(tk.next({ id: \"string\" }).val);\n tk.next({ val: \";\" });\n imports.push({ kind, name: fname });\n numImports++;\n }\n return numImports;\n };\n function Tokenizer(str) {\n this._str = str;\n this.pos = 0;\n }\n Tokenizer.prototype.next = function(opts) {\n var token = { pos: this.pos, id: void 0, val: void 0 };\n var javadoc = this._skip(opts && opts.emitJavadoc);\n if (typeof javadoc == \"string\") {\n token.id = \"javadoc\";\n token.val = javadoc;\n } else {\n var pos = this.pos;\n var str = this._str;\n var c = str.charAt(pos);\n if (!c) {\n token.id = \"(eof)\";\n } else {\n if (opts && opts.id === \"json\") {\n token.id = \"json\";\n this.pos = this._endOfJson();\n } else if (c === '\"') {\n token.id = \"string\";\n this.pos = this._endOfString();\n } else if (/[0-9]/.test(c)) {\n token.id = \"number\";\n this.pos = this._endOf(/[0-9]/);\n } else if (/[`A-Za-z_.]/.test(c)) {\n token.id = \"name\";\n this.pos = this._endOf(/[`A-Za-z0-9_.]/);\n } else {\n token.id = \"operator\";\n this.pos = pos + 1;\n }\n token.val = str.slice(pos, this.pos);\n if (token.id === \"json\") {\n try {\n token.val = JSON.parse(token.val);\n } catch (err2) {\n throw this.error(\"invalid JSON\", token);\n }\n } else if (token.id === \"name\") {\n token.val = token.val.replace(/`/g, \"\");\n }\n }\n }\n var err;\n if (opts && opts.id && opts.id !== token.id) {\n err = this.error(f2(\"expected ID %s\", opts.id), token);\n } else if (opts && opts.val && opts.val !== token.val) {\n err = this.error(f2(\"expected value %s\", opts.val), token);\n }\n if (!err) {\n return token;\n } else if (opts && opts.silent) {\n this.pos = token.pos;\n return void 0;\n } else {\n throw err;\n }\n };\n Tokenizer.prototype.error = function(reason, context) {\n var isToken = typeof context != \"number\";\n var pos = isToken ? context.pos : context;\n var str = this._str;\n var lineNum = 1;\n var lineStart = 0;\n var i;\n for (i = 0; i < pos; i++) {\n if (str.charAt(i) === \"\\n\") {\n lineNum++;\n lineStart = i;\n }\n }\n var msg = isToken ? f2(\"invalid token %j: %s\", context, reason) : reason;\n var err = new Error(msg);\n err.token = isToken ? context : void 0;\n err.lineNum = lineNum;\n err.colNum = pos - lineStart;\n return err;\n };\n Tokenizer.prototype._skip = function(emitJavadoc) {\n var str = this._str;\n var isJavadoc = false;\n var pos, c;\n while ((c = str.charAt(this.pos)) && /\\s/.test(c)) {\n this.pos++;\n }\n pos = this.pos;\n if (c === \"/\") {\n switch (str.charAt(this.pos + 1)) {\n case \"/\":\n this.pos += 2;\n while ((c = str.charAt(this.pos)) && c !== \"\\n\") {\n this.pos++;\n }\n return this._skip(emitJavadoc);\n case \"*\":\n this.pos += 2;\n if (str.charAt(this.pos) === \"*\") {\n isJavadoc = true;\n }\n while (c = str.charAt(this.pos++)) {\n if (c === \"*\" && str.charAt(this.pos) === \"/\") {\n this.pos++;\n if (isJavadoc && emitJavadoc) {\n return extractJavadoc(str.slice(pos + 3, this.pos - 2));\n }\n return this._skip(emitJavadoc);\n }\n }\n throw this.error(\"unterminated comment\", pos);\n }\n }\n };\n Tokenizer.prototype._endOf = function(pat) {\n var pos = this.pos;\n var str = this._str;\n while (pat.test(str.charAt(pos))) {\n pos++;\n }\n return pos;\n };\n Tokenizer.prototype._endOfString = function() {\n var pos = this.pos + 1;\n var str = this._str;\n var c;\n while (c = str.charAt(pos)) {\n if (c === '\"') {\n return pos + 1;\n }\n if (c === \"\\\\\") {\n pos += 2;\n } else {\n pos++;\n }\n }\n throw this.error(\"unterminated string\", pos - 1);\n };\n Tokenizer.prototype._endOfJson = function() {\n var pos = utils.jsonEnd(this._str, this.pos);\n if (pos < 0) {\n throw this.error(\"invalid JSON\", pos);\n }\n return pos;\n };\n function extractJavadoc(str) {\n var lines = str.replace(/^[ \\t]+|[ \\t]+$/g, \"\").split(\"\\n\").map(function(line, i) {\n return i ? line.replace(/^\\s*\\*\\s?/, \"\") : line;\n });\n while (lines.length && !lines[0]) {\n lines.shift();\n }\n while (lines.length && !lines[lines.length - 1]) {\n lines.pop();\n }\n return lines.join(\"\\n\");\n }\n function protocolNamespace(protocol) {\n if (protocol.namespace) {\n return protocol.namespace;\n }\n var match = /^(.*)\\.[^.]+$/.exec(protocol.protocol);\n return match ? match[1] : void 0;\n }\n module.exports = {\n Tokenizer,\n assembleProtocol,\n read,\n readProtocol: Reader.readProtocol,\n readSchema: Reader.readSchema\n };\n }\n});\n\n// node_modules/avsc/lib/index.js\nvar require_lib = __commonJS({\n \"node_modules/avsc/lib/index.js\"(exports, module) {\n \"use strict\";\n var containers = require_containers();\n var services = require_services();\n var specs = require_specs();\n var types = require_types();\n var utils = require_utils();\n var buffer = __import_BUFFER;\n var fs = __import_FS;\n var util = __import_UTIL;\n var Buffer2 = buffer.Buffer;\n function parse2(any, opts) {\n var schemaOrProtocol = specs.read(any);\n return schemaOrProtocol.protocol ? services.Service.forProtocol(schemaOrProtocol, opts) : types.Type.forSchema(schemaOrProtocol, opts);\n }\n function extractFileHeader(path, opts) {\n opts = opts || {};\n var decode = opts.decode === void 0 ? true : !!opts.decode;\n var size = Math.max(opts.size || 4096, 4);\n var buf = utils.newBuffer(size);\n var fd = fs.openSync(path, \"r\");\n try {\n var pos = fs.readSync(fd, buf, 0, size);\n if (pos < 4 || !containers.MAGIC_BYTES.equals(buf.slice(0, 4))) {\n return null;\n }\n var tap = new utils.Tap(buf);\n var header = null;\n do {\n header = containers.HEADER_TYPE._read(tap);\n } while (!isValid());\n if (decode !== false) {\n var meta = header.meta;\n meta[\"avro.schema\"] = JSON.parse(meta[\"avro.schema\"].toString());\n if (meta[\"avro.codec\"] !== void 0) {\n meta[\"avro.codec\"] = meta[\"avro.codec\"].toString();\n }\n }\n return header;\n } finally {\n fs.closeSync(fd);\n }\n function isValid() {\n if (tap.isValid()) {\n return true;\n }\n var len = 2 * tap.buf.length;\n var buf2 = utils.newBuffer(len);\n len = fs.readSync(fd, buf2, 0, len);\n tap.buf = Buffer2.concat([tap.buf, buf2]);\n tap.pos = 0;\n return false;\n }\n }\n function createFileDecoder(path, opts) {\n return fs.createReadStream(path).pipe(new containers.streams.BlockDecoder(opts));\n }\n function createFileEncoder(path, schema, opts) {\n var encoder = new containers.streams.BlockEncoder(schema, opts);\n encoder.pipe(fs.createWriteStream(path, { defaultEncoding: \"binary\" }));\n return encoder;\n }\n module.exports = {\n Service: services.Service,\n Type: types.Type,\n assembleProtocol: specs.assembleProtocol,\n createFileDecoder,\n createFileEncoder,\n discoverProtocol: services.discoverProtocol,\n extractFileHeader,\n parse: parse2,\n readProtocol: specs.readProtocol,\n readSchema: specs.readSchema,\n streams: containers.streams,\n types: types.builtins,\n // Deprecated exports.\n Protocol: services.Service,\n assemble: util.deprecate(\n specs.assembleProtocol,\n \"use `assembleProtocol` instead\"\n ),\n combine: util.deprecate(\n types.Type.forTypes,\n \"use `Type.forTypes` intead\"\n ),\n infer: util.deprecate(\n types.Type.forValue,\n \"use `Type.forValue` instead\"\n )\n };\n }\n});\n\n// node_modules/ultralight-s3/lib/index.min.js\nvar x = \"AWS4-HMAC-SHA256\";\nvar K = \"aws4_request\";\nvar O = \"s3\";\nvar v = \"2\";\nvar E = \"UNSIGNED-PAYLOAD\";\nvar W = \"application/octet-stream\";\nvar M = \"application/xml\";\nvar w = \"application/json\";\nvar X = [\"accessKeyId\", \"secretAccessKey\", \"sessionToken\", \"password\"];\nvar f = \"x-amz-content-sha256\";\nvar Z = \"x-amz-date\";\nvar V = \"host\";\nvar J = \"Authorization\";\nvar m = \"Content-Type\";\nvar T = \"Content-Length\";\nvar P = \"etag\";\nvar C = \"last-modified\";\nvar u = \"ultralight-s3 Module: \";\nvar ee = `${u}accessKeyId must be a non-empty string`;\nvar te = `${u}secretAccessKey must be a non-empty string`;\nvar se = `${u}endpoint must be a non-empty string`;\nvar re = `${u}bucketName must be a non-empty string`;\nvar j = `${u}key must be a non-empty string`;\nvar $ = `${u}uploadId must be a non-empty string`;\nvar L = `${u}parts must be a non-empty array`;\nvar k = `${u}Each part must have a partNumber (number) and ETag (string)`;\nvar D = `${u}data must be a Buffer or string`;\nvar B = `${u}prefix must be a string`;\nvar F = `${u}maxKeys must be a positive integer`;\nvar G = `${u}delimiter must be a string`;\nvar z = crypto.createHmac || (await import(\"node:crypto\")).createHmac;\nvar Q = crypto.createHash || (await import(\"node:crypto\")).createHash;\ntypeof z > \"u\" && typeof Q > \"u\" && console.error(\"ultralight-S3 Module: Crypto functions are not available, please report the issue with necessary description: https://github.com/sentienhq/ultralight-s3/issues\");\nvar ne = { contents: true };\nvar oe = (p) => `%${p.charCodeAt(0).toString(16).toUpperCase()}`;\nvar q = (p) => encodeURIComponent(p).replace(/[!'()*]/g, oe);\nvar y = (p) => q(p).replace(/%2F/g, \"/\");\nvar N = class {\n constructor({ accessKeyId: e, secretAccessKey: t, endpoint: r, bucketName: n, region: o = \"auto\", maxRequestSizeInBytes: i = 5242880, requestAbortTimeout: a = void 0, logger: c = void 0 }) {\n this.getBucketName = () => this.bucketName, this.setBucketName = (s) => {\n this.bucketName = s;\n }, this.getRegion = () => this.region, this.setRegion = (s) => {\n this.region = s;\n }, this.getEndpoint = () => this.endpoint, this.setEndpoint = (s) => {\n this.endpoint = s;\n }, this.getMaxRequestSizeInBytes = () => this.maxRequestSizeInBytes, this.setMaxRequestSizeInBytes = (s) => {\n this.maxRequestSizeInBytes = s;\n }, this.sanitizeETag = (s) => H(s), this.getProps = () => ({ accessKeyId: this.accessKeyId, secretAccessKey: this.secretAccessKey, region: this.region, bucket: this.bucketName, endpoint: this.endpoint, maxRequestSizeInBytes: this.maxRequestSizeInBytes, requestAbortTimeout: this.requestAbortTimeout, logger: this.logger }), this.setProps = (s) => {\n this._validateConstructorParams(s.accessKeyId, s.secretAccessKey, s.bucketName, s.endpoint), this.accessKeyId = s.accessKeyId, this.secretAccessKey = s.secretAccessKey, this.region = s.region || \"auto\", this.bucketName = s.bucketName, this.endpoint = s.endpoint, this.maxRequestSizeInBytes = s.maxRequestSizeInBytes || 5242880, this.requestAbortTimeout = s.requestAbortTimeout, this.logger = s.logger;\n }, this._validateConstructorParams(e, t, r, n), this.accessKeyId = e, this.secretAccessKey = t, this.endpoint = r, this.bucketName = n, this.region = o, this.maxRequestSizeInBytes = i, this.requestAbortTimeout = a, this.logger = c;\n }\n _validateConstructorParams(e, t, r, n) {\n if (typeof e != \"string\" || e.trim().length === 0) throw new TypeError(ee);\n if (typeof t != \"string\" || t.trim().length === 0) throw new TypeError(te);\n if (typeof r != \"string\" || r.trim().length === 0) throw new TypeError(se);\n if (typeof n != \"string\" || n.trim().length === 0) throw new TypeError(re);\n }\n _checkMethodHeadnGet(e) {\n if (e !== \"GET\" && e !== \"HEAD\") throw this._log(\"error\", `${u}method must be either GET or HEAD`), new Error(\"method must be either GET or HEAD\");\n }\n _checkKey(e) {\n if (typeof e != \"string\" || e.trim().length === 0) throw this._log(\"error\", j), new TypeError(j);\n }\n _checkDelimiter(e) {\n if (typeof e != \"string\" || e.trim().length === 0) throw this._log(\"error\", G), new TypeError(G);\n }\n _checkPrefix(e) {\n if (typeof e != \"string\") throw this._log(\"error\", B), new TypeError(B);\n }\n _checkMaxKeys(e) {\n if (typeof e != \"number\" || e <= 0) throw this._log(\"error\", F), new TypeError(F);\n }\n _checkOpts(e) {\n if (typeof e != \"object\") throw this._log(\"error\", `${u}opts must be an object`), new TypeError(`${u}opts must be an object`);\n }\n _log(e, t, r = {}) {\n if (this.logger && typeof this.logger[e] == \"function\") {\n let n = (a) => typeof a != \"object\" || a === null ? a : Object.keys(a).reduce((c, s) => (X.includes(s.toLowerCase()) ? c[s] = \"[REDACTED]\" : typeof a[s] == \"object\" && a[s] !== null ? c[s] = n(a[s]) : c[s] = a[s], c), Array.isArray(a) ? [] : {}), o = n(r), i = { timestamp: (/* @__PURE__ */ new Date()).toISOString(), level: e, message: t, ...o, context: n({ bucketName: this.bucketName, region: this.region, endpoint: this.endpoint, accessKeyId: this.accessKeyId ? `${this.accessKeyId.substring(0, 4)}...` : void 0 }) };\n this.logger[e](i);\n }\n }\n async getContentLength(e) {\n this._checkKey(e);\n let t = { [f]: E }, r = y(e), { url: n, headers: o } = await this._sign(\"HEAD\", r, {}, t, \"\"), a = (await this._sendRequest(n, \"HEAD\", o)).headers.get(T);\n return a ? parseInt(a, 10) : 0;\n }\n async bucketExists() {\n let e = { [f]: E }, { url: t, headers: r } = await this._sign(\"HEAD\", \"\", {}, e, \"\"), n = await this._sendRequest(t, \"HEAD\", r);\n return !!(n.ok && n.status === 200);\n }\n async fileExists(e, t = {}) {\n this._checkKey(e);\n let { filteredOpts: r, conditionalHeaders: n } = this._filterIfHeaders(t), o = { [f]: E, ...n }, i = y(e), { url: a, headers: c } = await this._sign(\"HEAD\", i, r, o, \"\");\n try {\n let s = await this._sendRequest(a, \"HEAD\", c, \"\", [200, 404, 412, 304]);\n return s.status === 404 ? false : s.status === 412 || s.status === 304 ? null : s.ok && s.status === 200 ? true : (this._handleErrorResponse(s), false);\n } catch (s) {\n let l = s instanceof Error ? s.message : String(s);\n throw this._log(\"error\", `${u}Failed to check if file exists: ${l}`), new Error(`${u}Failed to check if file exists: ${l}`);\n }\n }\n async _sign(e, t, r, n, o) {\n let i = (/* @__PURE__ */ new Date()).toISOString().replace(/[:-]|\\.\\d{3}/g, \"\"), a = typeof t == \"string\" && t.length > 0 ? new URL(t, this.endpoint) : new URL(this.endpoint);\n a.pathname = `/${encodeURI(this.bucketName)}${a.pathname}`, n[f] = o ? await U(o) : E, n[Z] = i, n[V] = a.host;\n let c = this._buildCanonicalHeaders(n), s = Object.keys(n).map((_) => _.toLowerCase()).sort().join(\";\"), l = await this._buildCanonicalRequest(e, a, r, c, s, o), h = await this._buildStringToSign(i, l), d = await this._calculateSignature(i, h), g = this._buildAuthorizationHeader(i, s, d);\n return n[J] = g, { url: a.toString(), headers: n };\n }\n _buildCanonicalHeaders(e) {\n return Object.entries(e).map(([t, r]) => `${t.toLowerCase()}:${String(r).trim()}`).sort().join(`\n`);\n }\n async _buildCanonicalRequest(e, t, r, n, o, i) {\n return [e, t.pathname, this._buildCanonicalQueryString(r), `${n}\n`, o, i ? await U(i) : E].join(`\n`);\n }\n async _buildStringToSign(e, t) {\n let r = [e.slice(0, 8), this.region, O, K].join(\"/\");\n return [x, e, r, await U(t)].join(`\n`);\n }\n async _calculateSignature(e, t) {\n let r = await this._getSignatureKey(e.slice(0, 8));\n return A(r, t, \"hex\");\n }\n _buildAuthorizationHeader(e, t, r) {\n let n = [e.slice(0, 8), this.region, O, K].join(\"/\");\n return [`${x} Credential=${this.accessKeyId}/${n}`, `SignedHeaders=${t}`, `Signature=${r}`].join(\", \");\n }\n _filterIfHeaders(e) {\n let t = {}, r = {}, n = [\"if-match\", \"if-none-match\", \"if-modified-since\", \"if-unmodified-since\"];\n for (let [o, i] of Object.entries(e)) n.includes(o) ? r[o] = i : t[o] = i;\n return { filteredOpts: t, conditionalHeaders: r };\n }\n async list(e = \"/\", t = \"\", r = 1e3, n = \"GET\", o = {}) {\n this._checkDelimiter(e), this._checkPrefix(t), this._checkMaxKeys(r), this._checkMethodHeadnGet(n), this._checkOpts(o), this._log(\"info\", `Listing objects in ${t}`);\n let i = { \"list-type\": v, \"max-keys\": String(r), ...o };\n t.length > 0 && (i.prefix = t);\n let a = { [m]: w, [f]: E }, c = e === \"/\" ? e : q(e), { url: s, headers: l } = await this._sign(\"GET\", c, i, a, \"\"), h = `${s}?${new URLSearchParams(i)}`, d = await this._sendRequest(h, \"GET\", l), g = await d.text();\n if (n === \"HEAD\") {\n let R = d.headers.get(T), S = d.headers.get(C), Y = d.headers.get(P);\n return { size: R ? +R : void 0, mtime: S ? new Date(S) : void 0, ETag: Y || void 0 };\n }\n let _ = b(g), I = _.listBucketResult || _.error || _;\n return I.contents || I;\n }\n async listMultiPartUploads(e = \"/\", t = \"\", r = \"GET\", n = {}) {\n var o, i, a;\n this._checkDelimiter(e), this._checkPrefix(t), this._checkMethodHeadnGet(r), this._checkOpts(n), this._log(\"info\", `Listing multipart uploads in ${t}`);\n let c = { uploads: \"\", ...n }, s = { [m]: w, [f]: E }, l = e === \"/\" ? e : q(e), { url: h, headers: d } = await this._sign(\"GET\", l, c, s, \"\"), g = `${h}?${new URLSearchParams(c)}`, _ = await this._sendRequest(g, \"GET\", d), I = await _.text();\n if (r === \"HEAD\") return { size: +((o = _.headers.get(T)) !== null && o !== void 0 ? o : \"0\"), mtime: new Date((i = _.headers.get(C)) !== null && i !== void 0 ? i : \"\"), ETag: (a = _.headers.get(P)) !== null && a !== void 0 ? a : \"\" };\n let R = b(I), S = R.listMultipartUploadsResult || R.error || R;\n return S.uploads || S;\n }\n async get(e, t = {}) {\n this._checkKey(e), this._log(\"info\", `Getting object ${e}`);\n let { filteredOpts: r, conditionalHeaders: n } = this._filterIfHeaders(t), o = { [m]: w, [f]: E, ...n }, i = y(e), { url: a, headers: c } = await this._sign(\"GET\", i, r, o, \"\"), s = await this._sendRequest(a, \"GET\", c, \"\", [200, 404, 412, 304]);\n if (s.status === 404 || s.status === 412 || s.status === 304) return this._log(\"error\", `Failed to get object. Status: ${s.status}`), null;\n if (!s.ok) throw this._log(\"error\", `Failed to get object. Status: ${s.status}`), new Error(`Failed to get object. Status: ${s.status}`);\n return s.text();\n }\n async getObjectWithETag(e, t = {}) {\n this._checkKey(e), this._log(\"info\", `Getting object ${e}`);\n let { filteredOpts: r, conditionalHeaders: n } = this._filterIfHeaders(t), o = { [m]: w, [f]: E, ...n }, i = y(e), { url: a, headers: c } = await this._sign(\"GET\", i, r, o, \"\");\n try {\n let s = await this._sendRequest(a, \"GET\", c, \"\", [200, 404, 412, 304]);\n if (s.status === 404 || s.status === 412 || s.status === 304) return this._log(\"error\", `Failed to get object. Status: ${s.status}`), { etag: null, data: null };\n if (!s.ok) throw this._log(\"error\", `Failed to get object. Status: ${s.status}`), new Error(`Failed to get object. Status: ${s.status}`);\n let l = s.headers.get(\"etag\");\n if (!l) throw new Error(\"ETag not found in response headers\");\n let h = await s.text();\n return { etag: H(l), data: h };\n } catch (s) {\n throw this._log(\"error\", `Error getting object ${e} with ETag: ${s}`), s;\n }\n }\n async getEtag(e, t = {}) {\n this._checkKey(e), this._log(\"info\", `Getting etag object ${e}`);\n let { filteredOpts: r, conditionalHeaders: n } = this._filterIfHeaders(t), o = { [m]: w, [f]: E, ...n }, i = y(e), { url: a, headers: c } = await this._sign(\"HEAD\", i, r, o, \"\"), s = await this._sendRequest(a, \"HEAD\", c, \"\", [200, 412, 304]);\n if (this._log(\"info\", `Response status: ${s.status, s.statusText}`), s.status === 412 || s.status === 304) return null;\n let l = s.headers.get(\"etag\");\n if (!l) throw this._log(\"error\", \"ETag not found in response headers\"), new Error(\"ETag not found in response headers\");\n return H(l);\n }\n async getResponse(e, t = true, r = 0, n = this.maxRequestSizeInBytes, o = {}) {\n this._checkKey(e);\n let { filteredOpts: i, conditionalHeaders: a } = this._filterIfHeaders({ ...o }), c = { [m]: w, [f]: E, ...t ? {} : { range: `bytes=${r}-${n - 1}` }, ...a }, s = y(e), { url: l, headers: h } = await this._sign(\"GET\", s, i, c, \"\"), d = `${l}?${new URLSearchParams(i)}`;\n return this._sendRequest(d, \"GET\", h);\n }\n async put(e, t) {\n if (this._checkKey(e), !(t instanceof Buffer || typeof t == \"string\")) throw this._log(\"error\", D), new TypeError(D);\n this._log(\"info\", `Uploading object ${e}`);\n let r = typeof t == \"string\" ? Buffer.byteLength(t) : t.length, n = { [T]: r }, o = y(e), { url: i, headers: a } = await this._sign(\"PUT\", o, {}, n, t);\n return await this._sendRequest(i, \"PUT\", a, t);\n }\n async getMultipartUploadId(e, t = W) {\n if (this._checkKey(e), typeof t != \"string\") throw this._log(\"error\", `${u}fileType must be a string`), new TypeError(`${u}fileType must be a string`);\n this._log(\"info\", `Initiating multipart upload for object ${e}`);\n let r = { uploads: \"\" }, n = { [m]: t, [f]: E }, o = y(e), { url: i, headers: a } = await this._sign(\"POST\", o, r, n, \"\"), c = `${i}?${new URLSearchParams(r)}`, l = await (await this._sendRequest(c, \"POST\", a)).text(), h = b(l);\n if (typeof h == \"object\" && h !== null && \"error\" in h && typeof h.error == \"object\" && h.error !== null && \"message\" in h.error) {\n let d = String(h.error.message);\n throw this._log(\"error\", `${u}Failed to abort multipart upload: ${d}`), new Error(`${u}Failed to abort multipart upload: ${d}`);\n }\n if (typeof h == \"object\" && h !== null) {\n if (!h.initiateMultipartUploadResult || !h.initiateMultipartUploadResult.uploadId) throw this._log(\"error\", `${u}Failed to create multipart upload: no uploadId in response`), new Error(`${u}Failed to create multipart upload: Missing upload ID in response`);\n return h.initiateMultipartUploadResult.uploadId;\n } else throw this._log(\"error\", `${u}Failed to create multipart upload: unexpected response format`), new Error(`${u}Failed to create multipart upload: Unexpected response format`);\n }\n async uploadPart(e, t, r, n, o = {}) {\n this._validateUploadPartParams(e, t, r, n, o);\n let i = { uploadId: r, partNumber: n, ...o }, a = { [T]: t.length }, c = y(e), { url: s, headers: l } = await this._sign(\"PUT\", c, i, a, t), h = `${s}?${new URLSearchParams(i)}`, d = await this._sendRequest(h, \"PUT\", l, t), g = H(d.headers.get(\"etag\") || \"\");\n return { partNumber: n, ETag: g };\n }\n _validateUploadPartParams(e, t, r, n, o) {\n if (this._checkKey(e), !(t instanceof Buffer || typeof t == \"string\")) throw this._log(\"error\", D), new TypeError(D);\n if (typeof r != \"string\" || r.trim().length === 0) throw this._log(\"error\", $), new TypeError($);\n if (!Number.isInteger(n) || n <= 0) throw this._log(\"error\", `${u}partNumber must be a positive integer`), new TypeError(`${u}partNumber must be a positive integer`);\n this._checkOpts(o);\n }\n async completeMultipartUpload(e, t, r) {\n if (this._checkKey(e), typeof t != \"string\" || t.trim().length === 0) throw this._log(\"error\", $), new TypeError($);\n if (!Array.isArray(r) || r.length === 0) throw this._log(\"error\", L), new TypeError(L);\n if (!r.every((_) => typeof _.partNumber == \"number\" && typeof _.ETag == \"string\")) throw this._log(\"error\", k), new TypeError(k);\n this._log(\"info\", `Complete multipart upload ${t} for object ${e}`);\n let n = { uploadId: t }, o = this._buildCompleteMultipartUploadXml(r), i = { [m]: M, [T]: Buffer.byteLength(o).toString(), [f]: await U(o) }, a = y(e), { url: c, headers: s } = await this._sign(\"POST\", a, n, i, o), l = `${c}?${new URLSearchParams(n)}`, d = await (await this._sendRequest(l, \"POST\", s, o)).text(), g = b(d);\n if (typeof g == \"object\" && g !== null && \"error\" in g && typeof g.error == \"object\" && g.error !== null && \"message\" in g.error) {\n let _ = String(g.error.message);\n throw this._log(\"error\", `${u}Failed to abort multipart upload: ${_}`), new Error(`${u}Failed to abort multipart upload: ${_}`);\n }\n return g.completeMultipartUploadResult;\n }\n async abortMultipartUpload(e, t) {\n if (this._checkKey(e), typeof t != \"string\" || t.trim().length === 0) throw this._log(\"error\", $), new TypeError($);\n this._log(\"info\", `Aborting multipart upload ${t} for object ${e}`);\n let r = { uploadId: t }, n = { [m]: M, [f]: E };\n try {\n let o = y(e), { url: i, headers: a } = await this._sign(\"DELETE\", o, r, n, \"\"), c = `${i}?${new URLSearchParams(r)}`, s = await this._sendRequest(c, \"DELETE\", a);\n if (s.ok) {\n let l = await s.text(), h = b(l);\n if (typeof h == \"object\" && h !== null && \"error\" in h && typeof h.error == \"object\" && h.error !== null && \"message\" in h.error) {\n let d = String(h.error.message);\n throw this._log(\"error\", `${u}Failed to abort multipart upload: ${d}`), new Error(`${u}Failed to abort multipart upload: ${d}`);\n }\n return { status: \"Aborted\", key: e, uploadId: t, response: h };\n } else throw this._log(\"error\", `${u}Abort request failed with status ${s.status}`), new Error(`${u}Abort request failed with status ${s.status}`);\n } catch (o) {\n let i = o instanceof Error ? o.message : String(o);\n throw this._log(\"error\", `${u}Failed to abort multipart upload for key ${e}: ${i}`), new Error(`${u}Failed to abort multipart upload for key ${e}: ${i}`);\n }\n }\n _buildCompleteMultipartUploadXml(e) {\n return `\n \n ${e.map((t) => `\n \n ${t.partNumber}\n ${t.ETag}\n \n `).join(\"\")}\n \n `;\n }\n async delete(e) {\n this._checkKey(e), this._log(\"info\", `Deleting object ${e}`);\n let t = { [m]: w, [f]: E }, r = y(e), { url: n, headers: o } = await this._sign(\"DELETE\", r, {}, t, \"\"), i = await this._sendRequest(n, \"DELETE\", o);\n return i.status === 204 || i.status === 200;\n }\n async _sendRequest(e, t, r, n, o = []) {\n this._log(\"info\", `Sending ${t} request to ${e}, headers: ${JSON.stringify(r)}`);\n let i = await fetch(e, { method: t, headers: r, body: [\"GET\", \"HEAD\"].includes(t) ? void 0 : n, signal: this.requestAbortTimeout !== void 0 ? AbortSignal.timeout(this.requestAbortTimeout) : void 0 });\n return !i.ok && !o.includes(i.status) && await this._handleErrorResponse(i), i;\n }\n async _handleErrorResponse(e) {\n let t = await e.text(), r = e.headers.get(\"x-amz-error-code\") || \"Unknown\", n = e.headers.get(\"x-amz-error-message\") || e.statusText;\n throw this._log(\"error\", `${u}Request failed with status ${e.status}: ${r} - ${n},err body: ${t}`), new Error(`${u}Request failed with status ${e.status}: ${r} - ${n}, err body: ${t}`);\n }\n _buildCanonicalQueryString(e) {\n return Object.keys(e).length < 1 ? \"\" : Object.keys(e).sort().map((t) => `${encodeURIComponent(t)}=${encodeURIComponent(e[t])}`).join(\"&\");\n }\n async _getSignatureKey(e) {\n let t = await A(`AWS4${this.secretAccessKey}`, e), r = await A(t, this.region), n = await A(r, O);\n return A(n, K);\n }\n};\nvar U = async (p) => {\n let e = Q(\"sha256\");\n return e.update(p), e.digest(\"hex\");\n};\nvar A = async (p, e, t) => {\n let r = z(\"sha256\", p);\n return r.update(e), r.digest(t);\n};\nvar H = (p) => {\n let e = { '\"': \"\", \""\": \"\", \""\": \"\", \""\": \"\", \""\": \"\" };\n return p.replace(/^(\"|"|")|(\"|"|")$/g, (t) => e[t]);\n};\nvar b = (p) => {\n let e = (o) => o.replace(/"/g, '\"').replace(/'/g, \"'\").replace(/</g, \"<\").replace(/>/g, \">\").replace(/&/g, \"&\"), t = {}, r = /<(\\w)([-\\w]+)(?:\\/|[^>]*>((?:(?!<\\1)[\\s\\S])*)<\\/\\1\\2)>/gm, n;\n for (; n = r.exec(p); ) {\n let [, o, i, a] = n, c = o.toLowerCase() + i, s = a != null ? b(a) : true;\n typeof s == \"string\" ? t[c] = H(e(s)) : Array.isArray(t[c]) ? t[c].push(s) : t[c] = t[c] != null ? [t[c], s] : ne[c] ? [s] : s;\n }\n return Object.keys(t).length ? t : e(p);\n};\n\n// src/lowstorage.ts\nvar import_avsc = __toESM(require_lib(), 1);\n\n// src/errors.ts\nvar lowstorage_ERROR_CODES = {\n MISSING_ARGUMENT: \"MISSING_ARGUMENT\",\n COLLECTION_EXISTS: \"COLLECTION_EXISTS\",\n CREATE_COLLECTION_ERROR: \"CREATE_COLLECTION_ERROR\",\n RENAME_COLLECTION_ERROR: \"RENAME_COLLECTION_ERROR\",\n REMOVE_COLLECTION_ERROR: \"REMOVE_COLLECTION_ERROR\",\n UPDATE_COLLECTION_SCHEMA_ERROR: \"UPDATE_COLLECTION_SCHEMA_ERROR\",\n COLLECTION_NOT_FOUND: \"COLLECTION_NOT_FOUND\",\n SCHEMA_VALIDATION_ERROR: \"SCHEMA_VALIDATION_ERROR\",\n DOCUMENT_VALIDATION_ERROR: \"DOCUMENT_VALIDATION_ERROR\",\n S3_OPERATION_ERROR: \"S3_OPERATION_ERROR\",\n FIND_ERROR: \"FIND_ERROR\",\n FIND_ONE_ERROR: \"FIND_ONE_ERROR\",\n SAVE_DATA_ERROR: \"SAVE_DATA_ERROR\",\n INSERT_ERROR: \"INSERT_ERROR\",\n UPDATE_ERROR: \"UPDATE_ERROR\",\n UPDATE_ONE_ERROR: \"UPDATE_ONE_ERROR\",\n DELETE_ERROR: \"DELETE_ERROR\",\n COUNT_ERROR: \"COUNT_ERROR\",\n UNKNOWN_ERROR: \"UNKNOWN_ERROR\"\n};\nvar lowstorageError = class extends Error {\n constructor(message, code = lowstorage_ERROR_CODES.UNKNOWN_ERROR) {\n super(`lowstorageError: ${message} :: code: ${code}`);\n this.name = this.constructor.name;\n this.code = code;\n Error.captureStackTrace(this, this.constructor);\n }\n};\nvar SchemaValidationError = class extends lowstorageError {\n constructor(message, code = lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR) {\n super(message, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR);\n }\n};\nvar DocumentValidationError = class extends lowstorageError {\n constructor(message, code = lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR) {\n super(message, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR);\n }\n};\nvar S3OperationError = class extends lowstorageError {\n constructor(message, operation) {\n super(`S3 ${operation} operation failed: ${message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n};\n\n// src/helpers.ts\nimport { randomUUID } from \"node:crypto\";\nvar matchesQuery = (document, query) => {\n return Object.keys(query).every((key) => document[key] === query[key]);\n};\nvar generateUUID = async () => {\n if (typeof randomUUID !== \"undefined\" && typeof randomUUID === \"function\") {\n return randomUUID();\n }\n if (typeof crypto !== \"undefined\" && typeof crypto === \"object\" && typeof crypto.randomUUID === \"function\") {\n return crypto.randomUUID();\n }\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, function(c) {\n var r = Math.random() * 16 | 0, v2 = c === \"x\" ? r : r & 3 | 8;\n return v2.toString(16);\n });\n};\nvar ensureIdFieldInSchema = (schema) => {\n const idField = {\n name: \"_id\",\n type: \"string\",\n size: 16,\n logicalType: \"UUID\"\n };\n if (typeof schema === \"undefined\" || schema === null) {\n return schema;\n }\n if (\"type\" in schema && schema.type === \"record\" && \"fields\" in schema && Array.isArray(schema.fields)) {\n const hasIdField = schema.fields.some((field) => field.name === \"_id\");\n if (!hasIdField) {\n schema.fields.unshift(idField);\n }\n } else if (\"type\" in schema && schema.type === \"array\" && \"items\" in schema && schema.items !== null && typeof schema.items === \"object\" && \"type\" in schema.items && schema.items.type === \"record\" && \"fields\" in schema.items && Array.isArray(schema.items.fields)) {\n const hasIdField = schema.items.fields.some((field) => field.name === \"_id\");\n if (!hasIdField) {\n schema.items.fields.unshift(idField);\n }\n }\n return schema;\n};\n\n// src/lowstorage.ts\nvar MODULE_NAME = \"lowstorage\";\nvar DEFAULT_DELIMITER = \"/\";\nvar PROJECT_DIR_PREFIX = \"lowstorage\";\nvar COL_SUFFIX = \".avro\";\nvar CHUNG_1MB = 1024 * 1024;\nvar CHUNG_5MB = 5 * CHUNG_1MB;\nvar EMPTY_DATA = Buffer.from(\"\", \"utf8\");\nvar errorValidationFn = (errorCode = lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR) => {\n throw new DocumentValidationError(`${MODULE_NAME}: Invalid document or schema ${errorCode}`);\n};\nvar _hasColName = (colName = \"\") => {\n if (colName.trim() === \"\" || colName === null || typeof colName === \"undefined\" || colName.length > 255 || colName === null) {\n throw new lowstorageError(`${MODULE_NAME}: Collection name is required, null or too long`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n }\n};\nvar lowstorage = class {\n constructor(options) {\n this._checkArgs = (args) => {\n const requiredFields = [\"accessKeyId\", \"secretAccessKey\", \"endpoint\", \"bucketName\"];\n for (const field of requiredFields) {\n if (!args[field]) {\n throw new lowstorageError(`${MODULE_NAME}: ${field} is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n }\n }\n };\n /**\n * Get the S3 instance associated with the lowstorage instance.\n * @returns {S3} The S3 instance. Use this to perform S3 operations. Check for ultralight-s3 for more details.\n */\n this.s3 = () => {\n return this._s3;\n };\n this._checkArgs(options);\n this._schemas = /* @__PURE__ */ new Map();\n this._s3 = new N(options);\n this._dirPrefix = options.dirPrefix || PROJECT_DIR_PREFIX;\n this._avroParse = import_avsc.Type;\n }\n /**\n * List all collections.\n * @returns {Promise} An array of collection names.\n * @throws {S3OperationError} If there's an error during S3 operation.\n */\n async listCollections() {\n try {\n const listed = await this._s3.list(DEFAULT_DELIMITER, this._dirPrefix);\n if (Array.isArray(listed)) {\n return listed.map((entry) => entry.key.slice(this._dirPrefix.length + 1, -COL_SUFFIX.length));\n } else if (typeof listed === \"object\" && listed !== null && \"keyCount\" in listed && listed.keyCount === \"0\") {\n return [];\n }\n return [];\n } catch (error) {\n throw new S3OperationError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n }\n /**\n * Check if a collection exists.\n * @param {string} colName - The name of the collection.\n * @returns {Promise} True if the collection exists, false otherwise.\n * @throws {lowstorageError} If there's an error.\n */\n async collectionExists(colName = \"\") {\n try {\n _hasColName(colName);\n const exists = await this._s3.fileExists(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`);\n return !!exists;\n } catch (error) {\n if (error.message.includes(\"Not Found\")) {\n return false;\n }\n throw new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND);\n }\n }\n /**\n * Create a new collection.\n * @param {string} colName - The name of the collection.\n * @param {Object} [schema] - The schema for the collection.\n * @param {Array} [data=[]] - The initial data for the collection.\n * @returns {Promise} A Promise that resolves to a Collection object.\n * @throws {lowstorageError} If there's an error.\n */\n async createCollection(colName = \"\", schema, data = []) {\n try {\n _hasColName(colName);\n const exists = await this.collectionExists(colName);\n if (!exists) {\n if (typeof schema !== \"undefined\" && schema !== null) {\n try {\n const type = this._avroParse.forSchema(schema);\n if (!type) {\n throw new SchemaValidationError(\n `${MODULE_NAME}: Schema is invalid: ${schema} ${lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR}`\n );\n } else {\n this._schemas.set(colName, schema);\n }\n } catch (error) {\n throw new SchemaValidationError(`${MODULE_NAME}: Schema is invalid: ${schema}`, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR);\n }\n }\n if (data.length > 0 && schema) {\n const wrapperType = this._avroParse.forSchema({ type: \"array\", items: schema });\n await this._s3.put(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`, wrapperType.toBuffer(data));\n } else {\n await this._s3.put(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`, EMPTY_DATA);\n }\n return this.collection(colName, schema, false);\n }\n throw new lowstorageError(`${MODULE_NAME}: Collection ${colName} already exists`, lowstorage_ERROR_CODES.COLLECTION_EXISTS);\n } catch (error) {\n if (error instanceof lowstorageError) {\n throw error;\n }\n throw new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.CREATE_COLLECTION_ERROR);\n }\n }\n /**\n * Remove a collection.\n * @param {string} colName - The name of the collection.\n * @returns {Promise} A Promise that resolves to true if the collection is removed, false otherwise.\n * @throws {lowstorageError} If there's an error.\n */\n async removeCollection(colName = \"\") {\n try {\n _hasColName(colName);\n const exists = await this.collectionExists(colName);\n if (exists) {\n await this._s3.delete(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`);\n const exists2 = await this.collectionExists(colName);\n if (typeof exists2 === \"boolean\") {\n if (!exists2) {\n this._schemas.delete(colName);\n return true;\n }\n throw new lowstorageError(`${MODULE_NAME}: Failed to delete collection ${colName}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n throw new S3OperationError(`${MODULE_NAME}: Failed to delete collection ${colName}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n throw new lowstorageError(`${MODULE_NAME}: Collection ${colName} does not exist`, lowstorage_ERROR_CODES.REMOVE_COLLECTION_ERROR);\n } catch (error) {\n if (error instanceof S3OperationError) {\n throw error;\n }\n throw new lowstorageError(\n `${MODULE_NAME}: Failed to remove collection: ${error.message}`,\n lowstorage_ERROR_CODES.REMOVE_COLLECTION_ERROR\n );\n }\n }\n /**\n * Get or create a collection.\n * @param {string} colName - The name of the collection.\n * @param {Object} [schema] - The schema for the collection.\n * @param {boolean} [autoCreate=true] - Whether to automatically create the collection if it doesn't exist.\n * @returns {Promise} A Promise that resolves to a Collection object.\n * @throws {lowstorageError} If there's an error.\n */\n async collection(colName = \"\", schema, autoCreate = true) {\n try {\n _hasColName(colName);\n const colPath = `${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`;\n const exists = await this._s3.fileExists(colPath);\n if (!exists) {\n if (!autoCreate) {\n throw new lowstorageError(`${MODULE_NAME}: Collection ${colName} does not exist`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND);\n }\n await this._s3.put(colPath, EMPTY_DATA);\n }\n const colSchema = schema || this._schemas.get(colName) || void 0;\n return new Collection(colName, colSchema, this._s3, this._dirPrefix);\n } catch (error) {\n if (error.message.includes(\"unknown type\")) {\n throw new SchemaValidationError(\n `${MODULE_NAME}: Schema input is invalid: ${error.message}`,\n lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR\n );\n }\n throw new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND);\n }\n }\n};\nvar Collection = class _Collection {\n constructor(colName = \"\", schema, s3, dirPrefix = PROJECT_DIR_PREFIX, safeWrite = false, chunkSize = CHUNG_5MB) {\n this.getProps = () => ({\n colName: this._colName,\n s3: this._s3,\n schema: this._schema,\n avroParse: this._avroParse,\n avroType: this._avroType,\n dirPrefix: this._dirPrefix,\n safeWrite: this._safeWrite,\n chunkSize: this._chunkSize\n });\n this.setProps = (props) => {\n this._colName = props.colName;\n this._schema = props.schema;\n this._s3 = props.s3;\n this._avroParse = props.avroParse;\n this._avroType = props.avroType;\n this._dirPrefix = props.dirPrefix;\n this._safeWrite = props.safeWrite;\n this._chunkSize = props.chunkSize;\n };\n this.setSafeWrite = (safeWrite) => {\n this._safeWrite = safeWrite;\n };\n this.getSafeWrite = () => {\n return this._safeWrite;\n };\n this.getAvroSchema = () => {\n return this._schema;\n };\n this.setAvroSchema = (schema) => {\n try {\n this._schema = ensureIdFieldInSchema(schema);\n this._avroType = typeof schema === \"undefined\" ? null : this._avroParse.forSchema(schema);\n } catch (error) {\n throw new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR);\n }\n };\n this.inferAvroSchema = (data, type = \"record\") => {\n if (Array.isArray(data)) {\n data = data[0];\n }\n const inferedType = this._avroParse.forValue(data);\n const schema = inferedType.schema();\n return ensureIdFieldInSchema(schema);\n };\n this._colName = colName.trim();\n this._s3 = s3;\n this._schema = ensureIdFieldInSchema(schema);\n this._dirPrefix = dirPrefix;\n this._safeWrite = safeWrite;\n this._chunkSize = chunkSize || CHUNG_5MB;\n this._s3.setMaxRequestSizeInBytes(this._chunkSize);\n this._avroParse = import_avsc.Type;\n this._lastETag = \"\";\n this._dataCache = [];\n this._avroType = typeof schema === \"undefined\" ? null : this._avroParse.forSchema(schema);\n this._key = `${this._dirPrefix}${DEFAULT_DELIMITER}${this._colName}${COL_SUFFIX}`;\n }\n async _loadData() {\n try {\n if (this._avroType === null || typeof this._avroType === \"undefined\") {\n throw new lowstorageError(\n `${MODULE_NAME}: Missing type definition. Configure before operations `,\n lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR\n );\n }\n const { etag, data } = await this._s3.getObjectWithETag(this._key, { \"if-none-match\": this._lastETag });\n if (data === null) {\n return this._dataCache;\n }\n this._lastETag = etag === null ? this._lastETag : etag;\n const wrapperType = this._avroParse.forSchema({ type: \"array\", items: this._avroType });\n if (data.length < this._chunkSize) {\n this._dataCache = data.length > 0 ? wrapperType.fromBuffer(Buffer.from(data, \"utf8\")) : [];\n return this._dataCache;\n }\n let offset = this._chunkSize;\n let bufferArr = [Buffer.from(data, \"utf8\")];\n let repeat = true;\n while (repeat) {\n const nextDataResponse = await this._s3.getResponse(this._key, false, offset, offset + this._chunkSize);\n const nextDataBody = await nextDataResponse.text();\n bufferArr.push(Buffer.from(nextDataBody, \"utf8\"));\n offset += this._chunkSize;\n const contentLength = parseInt(nextDataResponse.headers.get(\"content-length\") || nextDataBody.length.toString());\n if (contentLength < this._chunkSize) {\n repeat = false;\n }\n }\n const bufferedData = Buffer.concat(bufferArr);\n this._dataCache = wrapperType.fromBuffer(bufferedData);\n return this._dataCache;\n } catch (error) {\n if (error.toString().indexOf(\"status 404: Unknown - Not Found\") > -1) {\n this._dataCache = [];\n return this._dataCache;\n }\n throw new S3OperationError(`${MODULE_NAME}: Failed to load data: ${error.message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n }\n async _saveData(data) {\n try {\n if (this._avroType === null || typeof this._avroType === \"undefined\") {\n throw new lowstorageError(\n `${MODULE_NAME}: Missing type definition. Configure before operations `,\n lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR\n );\n }\n const wrapperType = this._avroParse.forSchema({ type: \"array\", items: this._avroType });\n const dataBuffer = data.length > 0 ? wrapperType.toBuffer(data) : EMPTY_DATA;\n if (this._safeWrite && this._lastETag !== \"\") {\n const currentETag = await this._s3.getEtag(this._key);\n if (currentETag !== null && currentETag !== this._lastETag) {\n return false;\n }\n }\n const resp = await this._s3.put(this._key, dataBuffer);\n if (typeof resp === \"object\" && \"status\" in resp && resp.status !== 200) {\n throw new S3OperationError(`${MODULE_NAME}: Failed to save data`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n const newETag = resp.headers?.get(\"etag\") || \"\";\n if (newETag && newETag.length > 0) {\n this._lastETag = this._s3.sanitizeETag(newETag);\n this._dataCache = data;\n }\n return true;\n } catch (error) {\n if (error instanceof S3OperationError) {\n throw error;\n }\n throw new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.SAVE_DATA_ERROR);\n }\n }\n /**\n * Insert a document into the collection.\n * @param {Object|Array} doc - The document to insert.\n * @param {Object} [schema=undefined] - The schema for the document.\n * @returns {Promise} A Promise that resolves to the array of inserted document(s).\n * @throws {lowstorageError} If there's an error.\n */\n async insert(doc, schema) {\n try {\n if (doc === void 0 || doc === null) {\n throw new lowstorageError(`${MODULE_NAME}: Document is required for insert`, lowstorage_ERROR_CODES.INSERT_ERROR);\n }\n if (typeof doc !== \"object\" && !Array.isArray(doc)) {\n throw new DocumentValidationError(\n `${MODULE_NAME}: Document must be an object or an array`,\n lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR\n );\n }\n const items = !Array.isArray(doc) ? [doc] : doc;\n const schemaWithId = schema ? ensureIdFieldInSchema(schema) : this._schema || this.inferAvroSchema(items[0]);\n const avroType = this._avroParse.forSchema(schemaWithId);\n if (!avroType) {\n throw new SchemaValidationError(\n `${MODULE_NAME}: Schema is required - Pass a schema to the insert method`,\n lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR\n );\n }\n this._avroType = avroType;\n const data = await this._loadData();\n for (let item of items) {\n if (typeof item !== \"object\" || item === null) {\n throw new DocumentValidationError(\n `${MODULE_NAME}: Invalid input: input must be an object or an array of objects`,\n lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR\n );\n }\n item._id = item._id || await generateUUID();\n const validBuffer = this._avroType.isValid(item, {\n errorHook: errorValidationFn,\n noUndeclaredFields: true\n });\n if (validBuffer === true) {\n data.push(item);\n } else {\n throw new DocumentValidationError(`${MODULE_NAME}: Invalid document or schema`, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR);\n }\n }\n const success = await this._saveData(data);\n if (!success) {\n throw new S3OperationError(`${MODULE_NAME}: Failed to insert document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n this.setAvroSchema(schemaWithId);\n return items;\n } catch (error) {\n if (error.message.includes(\"unknown type\")) {\n throw new SchemaValidationError(\n `${MODULE_NAME}: Schema input is invalid: ${error.message}`,\n lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR\n );\n }\n if (error instanceof lowstorageError) {\n throw error;\n }\n throw new lowstorageError(`${MODULE_NAME} Insert operation failed: ${error.message}`, lowstorage_ERROR_CODES.INSERT_ERROR);\n }\n }\n /**\n * Find documents in the collection.\n * @param {Object} [query={}] - The query to filter documents.\n * @param {Object} [options={}] - The options for pagination.\n * @param {number} [options.skip=0] - The number of documents to skip. Default is 0.\n * @param {number} [options.limit=undefined] - The maximum number of documents to return. Default is undefined, which means no limit.\n * @returns {Promise} A Promise that resolves to an array of matching documents.\n * @throws {lowstorageError} If there's an error.\n */\n async find(query = {}, options = {}) {\n try {\n if (query === void 0 || query === null) {\n throw new lowstorageError(`${MODULE_NAME}: Query is required for update`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n }\n const data = await this._loadData();\n const start = options.skip !== void 0 ? parseInt(String(options.skip), 10) : 0;\n const end = options.limit !== void 0 ? start + parseInt(String(options.limit), 10) : void 0;\n const filteredData = data.filter((doc) => matchesQuery(doc, query)).slice(start, end);\n return filteredData;\n } catch (error) {\n throw new lowstorageError(`${MODULE_NAME}: Find operation failed: ${error.message}`, lowstorage_ERROR_CODES.FIND_ERROR);\n }\n }\n /**\n * Find the first document in the collection that matches the query.\n * @param {Object} [query={}] - The query to filter documents.\n * @returns {Promise} A Promise that resolves to the first matching document or null if no match is found.\n * @throws {lowstorageError} If there's an error.\n */\n async findOne(query = {}) {\n try {\n if (query === null) {\n throw new lowstorageError(`${MODULE_NAME}: Query cannot be null`, lowstorage_ERROR_CODES.INVALID_ARGUMENT);\n }\n const result = await this.find(query, { limit: 1 });\n return result[0] || null;\n } catch (error) {\n if (error instanceof lowstorageError) {\n throw error;\n }\n throw new lowstorageError(`${MODULE_NAME}: FindOne operation failed: ${error.message}`, lowstorage_ERROR_CODES.FIND_ONE_ERROR);\n }\n }\n /**\n * Update a single document in the collection that matches the query.\n * @param {Object} [query={}] - The query to filter the document to update.\n * @param {Object} [update={}] - The update operations to apply to the matching document.\n * @returns {Promise} A Promise that resolves to number of documents updated.\n * @throws {lowstorageError} If the updateOne operation fails.\n * @throws {SchemaValidationError} If the schema is not defined for the collection.\n * @throws {DocumentValidationError} If the updated document is invalid.\n * @throws {S3OperationError} If the S3 operation fails.\n */\n async update(query = {}, update = {}, options = {}) {\n try {\n if (query === void 0 || query === null || update === void 0 || update === null) {\n throw new lowstorageError(\n `${MODULE_NAME}: Query and update values are required for update`,\n lowstorage_ERROR_CODES.MISSING_ARGUMENT\n );\n }\n if (!this._avroType) {\n throw new SchemaValidationError(\n `${MODULE_NAME}: Schema is not defined for this collection`,\n lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR\n );\n }\n const data = await this._loadData();\n if (data.length === 0) return 0;\n let updatedCount = 0;\n for (let i = 0; i < data.length; i++) {\n if (matchesQuery(data[i], query)) {\n const updatedDoc = { ...data[i], ...update };\n const isValid = this._avroType.isValid(updatedDoc, {\n errorHook: errorValidationFn,\n noUndeclaredFields: true\n });\n if (isValid === true) {\n data[i] = updatedDoc;\n updatedCount++;\n } else {\n throw new DocumentValidationError(\n `${MODULE_NAME}: Invalid document or schema`,\n lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR\n );\n }\n }\n }\n if (updatedCount > 0) {\n const success = await this._saveData(data);\n if (!success) {\n throw new S3OperationError(`${MODULE_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n } else if (options && \"upsert\" in options && options.upsert) {\n const success = await this.insert(update);\n if (!success) {\n throw new S3OperationError(`${MODULE_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n updatedCount = 1;\n }\n return updatedCount;\n } catch (error) {\n if (error instanceof S3OperationError) {\n throw error;\n }\n throw new lowstorageError(`${MODULE_NAME}: Update operation failed: ${error.message}`, lowstorage_ERROR_CODES.UPDATE_ERROR);\n }\n }\n /**\n * Update a single document in the collection that matches the query.\n * @param {Object} [query={}] - The query to filter the document to update.\n * @param {Object} [update={}] - The update operations to apply to the matching document.\n * @returns {Promise} A Promise that resolves to 1 if a document was updated, 0 otherwise.\n /**\n * Update a single document in the collection that matches the query.\n * @throws {lowstorageError} If the updateOne operation fails.\n * @throws {SchemaValidationError} If the schema is not defined for the collection.\n * @throws {DocumentValidationError} If the updated document is invalid.\n * @throws {S3OperationError} If the S3 operation fails.\n */\n async updateOne(query = {}, update = {}, options = {}) {\n try {\n if (query === void 0 || query === null || update === void 0 || update === null) {\n throw new lowstorageError(`${MODULE_NAME}: Query is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n }\n if (!this._avroType) {\n throw new SchemaValidationError(\n `${MODULE_NAME}: Schema is not defined for this collection`,\n lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR\n );\n }\n const data = await this._loadData();\n if (data.length === 0) return 0;\n const docIndex = data.findIndex((doc) => matchesQuery(doc, query));\n if (docIndex !== -1) {\n const updatedDoc = { ...data[docIndex], ...update };\n const isValid = this._avroType.isValid(updatedDoc, {\n errorHook: errorValidationFn,\n noUndeclaredFields: true\n });\n if (isValid === true) {\n data[docIndex] = updatedDoc;\n const success = await this._saveData(data);\n if (!success) {\n throw new S3OperationError(`${MODULE_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n return 1;\n } else {\n throw new DocumentValidationError(`${MODULE_NAME}: Invalid document or schema`, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR);\n }\n }\n if (options && \"upsert\" in options && options.upsert) {\n const success = await this.insert(update);\n if (!success) {\n throw new S3OperationError(`${MODULE_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n return 1;\n }\n return 0;\n } catch (error) {\n if (error instanceof lowstorageError) {\n throw error;\n }\n throw new lowstorageError(`${MODULE_NAME}: UpdateOne operation failed: ${error.message}`, lowstorage_ERROR_CODES.UPDATE_ONE_ERROR);\n }\n }\n /**\n * Delete documents from the collection.\n * @param {Object} [query={}] - The query to filter documents to delete.\n * @returns {Promise} A Promise that resolves to the number of documents deleted.\n * @throws {lowstorageError} If the delete operation fails.\n * @throws {S3OperationError} If the S3 operation fails.\n */\n async delete(query = {}) {\n try {\n if (query === void 0 || query === null) {\n throw new lowstorageError(`${MODULE_NAME}: Query is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n }\n const data = await this._loadData();\n if (data.length === 0) return 0;\n const initialLength = data.length;\n const newData = data.filter((doc) => !matchesQuery(doc, query));\n const success = await this._saveData(newData);\n if (!success) {\n throw new S3OperationError(`${MODULE_NAME}: Failed to delete document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n return initialLength - newData.length;\n } catch (error) {\n if (error instanceof S3OperationError) {\n throw error;\n }\n throw new lowstorageError(`${MODULE_NAME}: Delete operation failed: ${error.message}`, lowstorage_ERROR_CODES.DELETE_ERROR);\n }\n }\n /**\n * Delete all documents from the collection.\n * @returns {Promise} A Promise that resolves to the number of documents deleted.\n * @throws {lowstorageError} If the delete operation fails.\n * @throws {S3OperationError} If the S3 operation fails.\n */\n async deleteAll() {\n try {\n const data = await this._loadData();\n const initialLength = data.length;\n const success = await this._saveData([]);\n if (!success) {\n throw new S3OperationError(`${MODULE_NAME}: Failed to delete document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n return initialLength;\n } catch (error) {\n if (error instanceof S3OperationError) {\n throw error;\n }\n throw new lowstorageError(`${MODULE_NAME}: Delete operation failed: ${error.message}`, lowstorage_ERROR_CODES.DELETE_ERROR);\n }\n }\n /**\n * Count the number of documents in the collection.\n * @param {Object} [query={}] - The query to filter documents.\n * @returns {Promise} A Promise that resolves to the number of documents in the collection.\n * @throws {lowstorageError} If the count operation fails.\n */\n async count(query = {}) {\n try {\n const data = await this.find(query);\n return data.length;\n } catch (error) {\n throw new lowstorageError(`${MODULE_NAME}: Count operation failed: ${error.message}`, lowstorage_ERROR_CODES.COUNT_ERROR);\n }\n }\n async renameCollection(newColName, newSchema = this._schema) {\n try {\n _hasColName(newColName);\n const exists = await this._s3.fileExists(`${this._dirPrefix}${DEFAULT_DELIMITER}${newColName}${COL_SUFFIX}`);\n if (!!exists) {\n throw new lowstorageError(`${MODULE_NAME}: Collection ${newColName} already exists`, lowstorage_ERROR_CODES.COLLECTION_EXISTS);\n }\n const schema = newSchema || this.getAvroSchema();\n const data = await this._loadData();\n const createNew = new _Collection(newColName, schema, this._s3, this._dirPrefix, this._safeWrite, this._chunkSize);\n await createNew._saveData(data);\n await this._s3.delete(`${this._dirPrefix}${DEFAULT_DELIMITER}${this._colName}${COL_SUFFIX}`);\n return createNew;\n } catch (error) {\n if (error instanceof lowstorageError) {\n throw error;\n }\n throw new lowstorageError(\n `${MODULE_NAME}: Rename collection failed: ${error.message}`,\n lowstorage_ERROR_CODES.RENAME_COLLECTION_ERROR\n );\n }\n }\n};\nexport {\n lowstorage,\n lowstorageError,\n lowstorage_ERROR_CODES\n};\n\n"], + "mappings": "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", "names": ["__import_BUFFER", "__import_CRYPTO", "__import_UTIL", "__import_STREAM", "__import_ZLIB", "__import_EVENTS", "__import_FS", "__import_PATH", "randomUUID", "__create", "__defProp", "__getOwnPropDesc", "__getOwnPropNames", "__getProtoOf", "__hasOwnProp", "__commonJS", "cb", "mod", "__getOwnPropNames", "__copyProps", "to", "from", "except", "desc", "key", "__hasOwnProp", "__defProp", "__getOwnPropDesc", "__toESM", "isNodeMode", "target", "__create", "__getProtoOf", "require_utils", "exports", "module", "buffer", "__import_BUFFER", "crypto2", "__import_CRYPTO", "util", "__import_UTIL", "Buffer2", "POOL", "BufferPool", "NAME_PATTERN", "f2", "newBuffer", "size", "bufferFrom", "data", "enc", "capitalize", "s", "compare", "n1", "n2", "getOption", "opts", "def", "value", "getHash", "str", "algorithm", "hash", "singleIndexOf", "arr", "v2", "pos", "i", "l", "toMap", "fn", "obj", "elem", "objectValues", "hasDuplicates", "copyOwnProperties", "src", "dst", "overwrite", "names", "name", "descriptor", "isValidName", "qualify", "namespace", "part", "unqualify", "parts", "impliedNamespace", "match", "jsonEnd", "c", "depth", "literal", "abstractFunction", "addDeprecatedGetters", "props", "proto", "prop", "getter", "createGetter", "prop2", "delegate", "len", "maxLen", "Lcg", "seed", "a", "m2", "state", "start", "end", "flags", "mask", "result", "OrderedQueue", "item", "items", "j2", "first", "mid", "i1", "i2", "c1", "c2", "Tap", "buf", "b2", "n", "k2", "h", "f3", "fk", "d", "fixed", "tap", "l1", "p1", "l2", "p2", "b1", "res", "neg", "invert", "require_types", "utils", "SlowBuffer", "debug", "TYPES", "ArrayType", "BooleanType", "BytesType", "DoubleType", "EnumType", "RecordType", "FixedType", "FloatType", "IntType", "LongType", "MapType", "NullType", "StringType", "RANDOM", "TAP", "LOGICAL_TYPE", "UNDERLYING_TYPES", "Type", "schema", "type", "Hash", "maybeQualify", "isPrimitive", "registry", "UnionType2", "wrapUnions", "WrappedUnionType", "UnwrappedUnionType", "DerivedType", "err", "logicalType", "types", "isAmbiguous", "typeName", "Type2", "val", "fieldNames", "expanded", "numWrappedUnions", "isValidWrappedUnion", "branchTypes", "branchType", "unionType", "bucketized", "bucket", "getTypeBucket", "bucketTypes", "buckets", "augmented", "combineNumbers", "combineStrings", "combineBuffers", "t", "combineObjects", "any", "buf1", "buf2", "resolver", "Resolver", "resolvers", "index", "resolver2", "readValue", "canon", "schemaStr", "noCheck", "className", "getClassName", "errorHook", "hook", "path", "Branch", "derefedSchema", "attr", "body", "asBranch", "PrimitiveType", "noFreeze", "throwInvalidError", "tap1", "tap2", "isSafeLong", "methods", "noUnpack", "mapping", "AbstractLongType", "isJsonBuffer", "UnionType", "branch", "getValueBucket", "logicalBranches", "typeResolver", "coerce", "wrap", "keys", "val1", "val2", "index1", "index2", "firstType", "name1", "name2", "symbol", "symbols", "hasCompatibleName", "values", "readArraySize", "rsv", "copy", "ns", "field", "Field", "errorStack", "plainRecords", "outerArgs", "innerArgs", "ds", "innerBody", "defaultValue", "hasDefault", "stackField", "outerBody", "Record", "self", "o", "field2", "args", "rFields", "wFields", "wFieldsMap", "matches", "fieldResolver", "getAliases", "lazyIndex", "uname", "fields", "order", "fieldType", "fieldSchema", "fieldOrder", "fieldAliases", "fieldDoc", "LogicalType", "_fromValue", "obj1", "obj2", "isVisited", "msg", "readerType", "lazy", "aliases", "reader", "writer", "strict", "alias", "unqualified", "typeNames", "superIndex", "superType", "typeSymbols", "allTypes", "fieldTypes", "fieldDefaults", "isValidRecord", "fieldDefault", "fieldName", "fieldType2", "fieldDefault2", "unionTypes", "require_containers", "stream", "__import_STREAM", "zlib", "__import_ZLIB", "OPTS", "LONG_TYPE", "MAP_BYTES_TYPE", "HEADER_TYPE", "BLOCK_TYPE", "MAGIC_BYTES", "RawDecoder", "noDecode", "createReader", "chunk", "encoding", "BlockDecoder", "header", "codecs", "nBlocks", "block", "tryReadBlock", "chunkCb", "count", "cause", "BlockInfo", "BlockData", "RawEncoder", "copyBuffer", "BlockEncoder", "codec", "meta", "Header", "flushing", "raw", "compressed", "writerType", "skipper", "require_services", "events", "__import_EVENTS", "BOOLEAN_TYPE", "STRING_TYPE", "HANDSHAKE_REQUEST_TYPE", "HANDSHAKE_RESPONSE_TYPE", "PREFIX_LENGTH", "PING_MESSAGE", "Message", "reqType", "errType", "resType", "oneWay", "doc", "recordName", "reqSchema", "msgDoc", "errSchema", "Service", "messages", "types2", "ptcl", "server", "Client", "Server", "clientSvc", "serverSvc", "createReaders", "msgs", "client", "pts", "transport", "channel", "forwardErrors", "req", "handler", "parent", "typeSchema", "msgNames", "discoverProtocol", "svc", "ptclStr", "hreq", "hres", "pending", "insertRemoteProtocols", "objectMode", "writableFactory", "encoder2", "FrameEncoder", "writable2", "readable2", "decoder2", "FrameDecoder", "err2", "StatelessClientChannel", "readable", "writable", "isStream", "decoder", "NettyDecoder", "encoder", "NettyEncoder", "StatefulClientChannel", "channels", "getExistingMessage", "wreq", "WrappedRequest", "getRemoteProtocols", "numChannels", "CallContext", "wres", "ctx", "done", "err3", "readableFactory", "StatelessServerChannel", "StatefulServerChannel", "channelId", "numArgs", "ClientChannel", "normalizedPrefix", "cache", "adapter", "Adapter", "Registry", "noWait", "isError", "timeout", "noSvc", "WrappedResponse", "onTransition", "onCompletion", "fns", "chainMiddleware", "onError", "wreq2", "wres2", "prev", "reqBuf", "serializationError", "id", "resBuf", "matchesPrefix", "emit", "retry", "readHead", "onEnd", "onFinish", "timer", "onPing", "onMessage", "ping", "payload", "ServerChannel", "serverMatch", "toRpcError", "defaultHandler", "resErr", "isStrict", "errStr", "hdrBuf", "onRequest", "onHandshake", "hdrs", "hdr", "hasError", "prefixLength", "isRemote", "isError2", "frameLength", "bufs", "intBuffer", "head", "rtype", "wtype", "ptcls", "isClient", "hs", "toError", "rpcCode", "details", "detailsStr", "strs", "scope", "prefix", "params", "cbs", "forward", "isDone", "backward", "require_files", "fs", "__import_FS", "__import_PATH", "createImportHook", "imports", "fpath", "kind", "createSyncImportHook", "require_specs", "files", "TYPE_REFS", "assembleProtocol", "importFile", "protocol", "schemas", "protocolNamespace", "fpath2", "cb2", "Reader", "fetchImports", "dpath", "importedProtocols", "next", "info", "imported", "mergeImport", "importPath", "read", "contents", "protocolSchema", "Tokenizer", "tk", "protocolJavadoc", "javadoc", "numImports", "message", "responseSchema", "token", "top", "ref", "silent", "implicitTags", "maybeMessage", "fname", "reason", "context", "isToken", "lineNum", "lineStart", "emitJavadoc", "isJavadoc", "extractJavadoc", "pat", "lines", "line", "require_lib", "containers", "services", "specs", "parse2", "schemaOrProtocol", "extractFileHeader", "decode", "fd", "isValid", "createFileDecoder", "createFileEncoder", "x", "K", "O", "v", "E", "W", "M", "w", "X", "f", "Z", "V", "J", "m", "T", "P", "C", "u", "ee", "te", "se", "re", "j", "$", "L", "k", "D", "B", "F", "G", "z", "Q", "ne", "oe", "p", "q", "y", "N", "e", "r", "H", "U", "_", "g", "A", "R", "S", "Y", "b", "I", "import_avsc", "lowstorage_ERROR_CODES", "lowstorageError", "code", "SchemaValidationError", "DocumentValidationError", "S3OperationError", "operation", "matchesQuery", "document", "query", "generateUUID", "randomUUID", "ensureIdFieldInSchema", "idField", "MODULE_NAME", "DEFAULT_DELIMITER", "PROJECT_DIR_PREFIX", "COL_SUFFIX", "CHUNG_1MB", "CHUNG_5MB", "EMPTY_DATA", "errorValidationFn", "errorCode", "_hasColName", "colName", "lowstorage", "options", "requiredFields", "listed", "entry", "error", "wrapperType", "exists2", "autoCreate", "colPath", "colSchema", "Collection", "_Collection", "s3", "dirPrefix", "safeWrite", "chunkSize", "etag", "offset", "bufferArr", "repeat", "nextDataResponse", "nextDataBody", "bufferedData", "dataBuffer", "currentETag", "resp", "newETag", "schemaWithId", "avroType", "update", "updatedCount", "updatedDoc", "docIndex", "initialLength", "newData", "newColName", "newSchema", "createNew"] } diff --git a/importify-esbuild-output.js b/importify-esbuild-output.js index f60f0de..2aee198 100644 --- a/importify-esbuild-output.js +++ b/importify-esbuild-output.js @@ -1,3 +1,4 @@ +// hack way to get rid of dynamic imports/requires errors by esbuild import { readFileSync } from 'fs'; var arg = process.argv[2]; var data = !arg || arg == '-' ? readFileSync(0, 'utf-8') : readFileSync(arg, 'utf-8'); diff --git a/lib/lowstorage.d.ts b/lib/lowstorage.d.ts index 0b176d8..1fdd747 100644 --- a/lib/lowstorage.d.ts +++ b/lib/lowstorage.d.ts @@ -117,9 +117,8 @@ declare class lowstorage { } /** * Collection class for managing documents in a collection. - * @class - * @example - * const storage = new lowstorage({ + * @class Collection + * @example const storage = new lowstorage({ * accessKeyId: 'YOUR_ACCESS_KEY', * secretAccessKey: 'YOUR_SECRET_KEY', * endpoint: 'YOUR_ENDPOINT', @@ -140,11 +139,6 @@ declare class lowstorage { * // Show all users * const allUsers = await userCol.find({}); * - * // Find users with pagination (e.g., page 2, 10 users per page) - * const secondPageUsers = await userCol.find({}, { skip: 10, limit: 10 }); - * - * // Find user by ID and update name - * await userCol.update({ _id: id }, { name: 'Carlos' }); */ declare class Collection { /** diff --git a/lib/lowstorage.js b/lib/lowstorage.js index 46e5675..1e5344d 100644 --- a/lib/lowstorage.js +++ b/lib/lowstorage.js @@ -137,6 +137,9 @@ class lowstorage { if (!type) { throw new SchemaValidationError(`${MODULE_NAME}: Schema is invalid: ${schema} ${lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR}`); } + else { + this._schemas.set(colName, schema); + } } catch (error) { throw new SchemaValidationError(`${MODULE_NAME}: Schema is invalid: ${schema}`, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR); @@ -225,9 +228,8 @@ class lowstorage { } /** * Collection class for managing documents in a collection. - * @class - * @example - * const storage = new lowstorage({ + * @class Collection + * @example const storage = new lowstorage({ * accessKeyId: 'YOUR_ACCESS_KEY', * secretAccessKey: 'YOUR_SECRET_KEY', * endpoint: 'YOUR_ENDPOINT', @@ -248,11 +250,6 @@ class lowstorage { * // Show all users * const allUsers = await userCol.find({}); * - * // Find users with pagination (e.g., page 2, 10 users per page) - * const secondPageUsers = await userCol.find({}, { skip: 10, limit: 10 }); - * - * // Find user by ID and update name - * await userCol.update({ _id: id }, { name: 'Carlos' }); */ class Collection { constructor(colName = '', schema, s3, dirPrefix = PROJECT_DIR_PREFIX, safeWrite = false, chunkSize = CHUNG_5MB) { diff --git a/lib/lowstorage.js.map b/lib/lowstorage.js.map index 88d8402..26b828b 100644 --- a/lib/lowstorage.js.map +++ b/lib/lowstorage.js.map @@ -1 +1 @@ -{"version":3,"file":"lowstorage.js","sourceRoot":"","sources":["../src/lowstorage.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"lowstorage.js","sourceRoot":"","sources":["../src/lowstorage.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/package.json b/package.json index b223a46..b598163 100644 --- a/package.json +++ b/package.json @@ -2,8 +2,16 @@ "name": "lowstorage", "version": "2.0.0", "description": "Simple, micro-dependency, pseudo-database using Apache Avro serialization on S3-compatible storages, inspired by lowdb.", - "main": "lib/lowstorage.js", "type": "module", + "main": "./build/lowstorage.min.js", + "module": "./build/lowstorage.min.js", + "types": "./lib/lowstorage.d.ts", + "files": [ + "build", + "lib", + "LICENSE", + "README.md" + ], "homepage": "https://github.com/good-lly/lowstorage#README.md", "bugs": { "url": "https://github.com/good-lly/lowstorage/issues" @@ -12,9 +20,19 @@ "type": "git", "url": "git+https://github.com/good-lly/lowstorage.git" }, + "exports": { + ".": { + "import": "./build/lowstorage.min.js", + "types": "./lib/lowstorage.d.ts", + "default": "./build/lowstorage.min.js" + } + }, "scripts": { + "prepublishOnly": "npm run clear && npm run prettier:fix && npm run build && npm run test", + "prettier:fix": "prettier --write \"src/**/*.ts\" \"src/**/*.js\"", "test": "node --env-file ./.env --experimental-vm-modules node_modules/jest/bin/jest.js --config=jest.config.json --no-cache", - "build": "tsc && esbuild --bundle --platform=node --target=node20 --format=esm ./src/lowstorage.js | node importify-esbuild-output.js | esbuild --bundle --minify --sourcemap --platform=node --target=node20 --format=esm --outfile=build/lowstorage.js" + "build": "tsc && esbuild --bundle --platform=node --target=node20 --format=esm ./src/lowstorage.js | node importify-esbuild-output.js | esbuild --bundle --minify --sourcemap --platform=node --target=node20 --format=esm --outfile=build/lowstorage.min.js", + "clear": "rm -rf build && rm -rf lib" }, "license": "MIT", "author": "Peter Jensen ", diff --git a/src/lowstorage.test.js b/src/lowstorage.test.js index dbd7d8d..75cf965 100644 --- a/src/lowstorage.test.js +++ b/src/lowstorage.test.js @@ -1,5 +1,5 @@ import { env } from 'node:process'; -import { lowstorage, lowstorageError, lowstorage_ERROR_CODES } from '../build/lowstorage.js'; +import { lowstorage, lowstorageError, lowstorage_ERROR_CODES } from '../build/lowstorage.min.js'; const configCF = { endpoint: env.CF_ENDPOINT, @@ -13,9 +13,7 @@ console.log('🏃 Running tests...', configCF); const configMinio = { endPoint: env.MINIO_ENDPOINT, - port: env.MINIO_PORT, region: env.MINIO_REGION, - useSSL: env.MINIO_USE_SSL, accessKey: env.MINIO_ACCESS_KEY, secretKey: env.MINIO_SECRET_KEY, bucketName: env.MINIO_BUCKET_NAME, diff --git a/src/lowstorage.ts b/src/lowstorage.ts index c346c52..df801c5 100644 --- a/src/lowstorage.ts +++ b/src/lowstorage.ts @@ -179,6 +179,8 @@ class lowstorage { throw new SchemaValidationError( `${MODULE_NAME}: Schema is invalid: ${schema} ${lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR}`, ); + } else { + this._schemas.set(colName, schema); } } catch (error) { throw new SchemaValidationError(`${MODULE_NAME}: Schema is invalid: ${schema}`, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR); @@ -281,9 +283,8 @@ class lowstorage { /** * Collection class for managing documents in a collection. - * @class - * @example - * const storage = new lowstorage({ + * @class Collection + * @example const storage = new lowstorage({ * accessKeyId: 'YOUR_ACCESS_KEY', * secretAccessKey: 'YOUR_SECRET_KEY', * endpoint: 'YOUR_ENDPOINT', @@ -304,11 +305,6 @@ class lowstorage { * // Show all users * const allUsers = await userCol.find({}); * - * // Find users with pagination (e.g., page 2, 10 users per page) - * const secondPageUsers = await userCol.find({}, { skip: 10, limit: 10 }); - * - * // Find user by ID and update name - * await userCol.update({ _id: id }, { name: 'Carlos' }); */ class Collection { /** From 752954d28cd22287b562bfcf347dc87728b278ed Mon Sep 17 00:00:00 2001 From: Jolly Good <1671375+good-lly@users.noreply.github.com> Date: Wed, 21 Aug 2024 10:11:29 +0200 Subject: [PATCH 15/18] added two utility functions, update readme, tests, added sponsor --- README.md | 57 ++++++++++++++++++++++++++---------- build/lowstorage.min.js | 2 +- build/lowstorage.min.js.map | 4 +-- lib/lowstorage.d.ts | 2 ++ lib/lowstorage.js | 14 +++++++++ lib/lowstorage.js.map | 2 +- sponsors/sentien-logo.png | Bin 0 -> 6568 bytes src/lowstorage.test.js | 31 +++++++++++++++++++- src/lowstorage.ts | 15 ++++++++++ 9 files changed, 106 insertions(+), 21 deletions(-) create mode 100644 sponsors/sentien-logo.png diff --git a/README.md b/README.md index 0ac75e7..80bb3dd 100644 --- a/README.md +++ b/README.md @@ -18,27 +18,33 @@ ## Features -- **🚀 Lightweight** ~129kb minified -- **🔧 Minimalist** - only two dependencies wrapped in a single package +- **🚀 Lightweight** under ~129kb minified +- **🔧 Minimalist** - only [t](https://github.com/sentienhq/ultralight-s3)w[o](https://github.com/mtth/avsc) (zero-dependency) dependencies wrapped in a single package - **💾 Familiar API** - similar to object databases like MongoDB -- **📦 BYOS3 / S3-compatibility** - "Bring-Your-Own-S3" like Cloudflare R2, Minio, Ceph, DigitalOcean Spaces, Google Cloud Storage, etc. -- **🔁 Schema validation & serialization** - Avro schema support +- **📦 BYOS3 / S3-compatibility** - "Bring-Your-Own-S3" like + [Garage](https://garagehq.deuxfleurs.fr/), [Cloudflare R2](https://www.cloudflare.com/developer-platform/r2/), [Minio](https://github.com/minio/minio), [Ceph](https://ceph.io/), [DigitalOcean Spaces](https://www.digitalocean.com/products/spaces/), [Google Cloud Storage](https://cloud.google.com/storage/), etc. +- **🔁 Schema validation & serialization** - [Avro schema](https://avro.apache.org/docs/1.11.1/specification/) support ([fast and compact](https://github.com/mtth/avsc/wiki/Benchmarks) serialization with much smaller encodings) - **💻 Typed** - Written in TypeScript ## Sponsors -[Become a sponsor and have your company logo here](https://github.com/sponsors/good-lly) 👉 [GitHub Sponsors](https://github.com/sponsors/good-lly) +

+Sponsored by Sentien -#### Version 2 - Breaking Changes +Become a sponsor + +

+ +### Version 2 - Breaking Changes Since version 2.0.0, `lowstorage` has undergone significant changes: -- **Support for Multiple Storages / constructor changes**: The constructor now accepts any S3-compatible configuration instead of being tied to Cloudflare R2. Like AWS S3, Cloudflare R2, Minio, Ceph, DigitalOcean Spaces, Google Cloud Storage, etc. (see [S3-compatible storages](#s3-compatible-storages)) instead of using AWS-SDK it utilize S3 via the zero-dependency [`ultralight-s3`](https://github.com/good-lly/ultralight-s3) package. +- **Support for S3 Storages / constructor changes**: The constructor now accepts any S3-compatible configuration instead of being tied to Cloudflare R2. Like AWS S3, Cloudflare R2, Minio, Ceph, DigitalOcean Spaces, Google Cloud Storage, etc. (see [S3-compatible storages](#s3-compatible-storages)) instead of using AWS-SDK it utilize S3 via the zero-dependency [`ultralight-s3`](https://github.com/good-lly/ultralight-s3) package. - **Avro Schemas**: The constructor now accepts Avro schemas for each collection. This allows more flexibility in defining schemas and validation. If no schema is provided, it will automatically infer the schema from the data. Check out [Avro schema](https://avro.apache.org/docs/current/spec.html) documentation for more details. If you are migrating from version 1.x.x, please review the new constructor parameters and usage examples below. -### Cloudflare R2 vs. S3 API Compatibility +#### Cloudflare R2 vs. S3 API Compatibility R2 uses the S3 API to allow users and their applications to migrate with ease. When comparing to AWS S3, Cloudflare has removed some API operations’ features and added others. The S3 API operations are listed below with their current implementation status. Feature implementation is currently in progress. Refer back to this page for updates. The API is available via the `https://.r2.cloudflarestorage.com` endpoint. Find your account ID in the Cloudflare dashboard. @@ -70,7 +76,9 @@ R2 uses the S3 API to allow users and their applications to migrate with ease. W - [getSafeWrite(): boolean](#getsafewrite) - [getAvroSchema(): Object](#getavroschema) - [setAvroSchema(schema: Object): void](#setavroschemaschema) + - [getCollectionETag(): string](#getcollectionetag) - [inferAvroSchema(data: Object | Array\): Object](#inferavroschem) + - [forceLoadData(): Promise\](#forceloaddata) - [insert(doc: Object | Array\, schema?: Object): Promise\](#insert) - [find(query: Object, options: Object): Promise\](#find) - [findOne(query: Object): Promise\](#findone) @@ -91,11 +99,11 @@ R2 uses the S3 API to allow users and their applications to migrate with ease. W - [Error codes](#error-codes) - - [Important Notice](##important-notice) +- [Important Notice](##important-notice) - - [Contributing](##contributing) +- [Contributing](##contributing) - - [License](##license) +- [License](##license) ### Usage & Examples @@ -107,11 +115,11 @@ const storage = new lowstorage({ secretAccessKey: 'YOUR_SECRET_KEY', endpoint: 'YOUR_ENDPOINT', bucketName: 'YOUR_BUCKET_NAME', - region: 'YOUR_REGION', + region: 'YOUR_REGION', // fallback to auto // optional params from here - logger: console, // logger object for your tough times - dirPrefix: 'lowstorage', // folder name prefix for collections - maxRequestSizeInBytes: 50 * 1024 * 1024, // request size in bytes for S3 operations (default: 5MB) + logger?: console, // logger object for your tough times + dirPrefix?: 'lowstorage', // folder name prefix for collections + maxRequestSizeInBytes?: 50 * 1024 * 1024, // request size in bytes for S3 operations (default: 5MB) }); // example user schema @@ -170,7 +178,10 @@ await userCol.removeCollection(); // List all collections const listCollections = await storage.listCollections(); -// check the API section for more details or `/examples` folder for more examples +// Get S3 instance and perform S3 operations (get, put, delete, etc.) Read more about ultralight-s3 here: https://github.com/sentienhq/ultralight-s3 +const s3ops = await storage.s3(); + +// check the API section for more details or /examples and /dev folder for more samples ``` ### Installation @@ -188,6 +199,8 @@ pnpm add lowstorage To set up and bind your storage, configure your storage client with the appropriate credentials and bucket information. Here is an example setup for AWS S3: ```js +import { lowstorage, lowstorage_ERROR_CODES } from 'lowstorage'; + const storage = new lowstorage({ endPoint: 's3.amazonaws.com', region: 'YOUR-REGION', @@ -343,6 +356,12 @@ For Cloudflare R2, follow similar steps with your R2-specific endpoint and crede - **Returns**: A void. - **Throws**: A lowstorageError if there's an error. +#### getCollectionETag(): string + +- **Behavior**: Returns the ETag of the collection. +- **Returns**: A string representing the ETag of the collection. +- **Throws**: A lowstorageError if there's an error. + #### inferAvroSchema(data: Object | Array\): Object - **Behavior**: Infers the Avro schema from the given data. @@ -351,6 +370,12 @@ For Cloudflare R2, follow similar steps with your R2-specific endpoint and crede - **Returns**: An object representing the inferred Avro schema. - **Throws**: A lowstorageError if there's an error. +#### forceLoadData(): Promise\ + +- **Behavior**: Forces the collection to load its data from S3. +- **Returns**: A promise that resolves to a boolean indicating whether the data was loaded successfully. +- **Throws**: A lowstorageError if there's an error. + #### insert(doc: Object | Array\, schema?: Object): Promise\ - **Behavior**: Inserts the given document(s) into the collection. diff --git a/build/lowstorage.min.js b/build/lowstorage.min.js index c99c37d..67e2068 100644 --- a/build/lowstorage.min.js +++ b/build/lowstorage.min.js @@ -80,5 +80,5 @@ import qe from"buffer";import xt from"crypto";import De from"util";import vt fro `).join("")} - `}async delete(h){this._checkKey(h),this._log("info",`Deleting object ${h}`);let l={[Te]:xe,[_e]:ye},c=me(h),{url:d,headers:_}=await this._sign("DELETE",c,{},l,""),g=await this._sendRequest(d,"DELETE",_);return g.status===204||g.status===200}async _sendRequest(h,l,c,d,_=[]){this._log("info",`Sending ${l} request to ${h}, headers: ${JSON.stringify(c)}`);let g=await fetch(h,{method:l,headers:c,body:["GET","HEAD"].includes(l)?void 0:d,signal:this.requestAbortTimeout!==void 0?AbortSignal.timeout(this.requestAbortTimeout):void 0});return!g.ok&&!_.includes(g.status)&&await this._handleErrorResponse(g),g}async _handleErrorResponse(h){let l=await h.text(),c=h.headers.get("x-amz-error-code")||"Unknown",d=h.headers.get("x-amz-error-message")||h.statusText;throw this._log("error",`${se}Request failed with status ${h.status}: ${c} - ${d},err body: ${l}`),new Error(`${se}Request failed with status ${h.status}: ${c} - ${d}, err body: ${l}`)}_buildCanonicalQueryString(h){return Object.keys(h).length<1?"":Object.keys(h).sort().map(l=>`${encodeURIComponent(l)}=${encodeURIComponent(h[l])}`).join("&")}async _getSignatureKey(h){let l=await Me(`AWS4${this.secretAccessKey}`,h),c=await Me(l,this.region),d=await Me(c,Ze);return Me(d,Xe)}},We=async h=>{let l=Tt("sha256");return l.update(h),l.digest("hex")},Me=async(h,l,c)=>{let d=Et("sha256",h);return d.update(l),d.digest(c)},He=h=>{let l={'"':"",""":"",""":"",""":"",""":""};return h.replace(/^("|"|")|("|"|")$/g,c=>l[c])},Be=h=>{let l=g=>g.replace(/"/g,'"').replace(/'/g,"'").replace(/</g,"<").replace(/>/g,">").replace(/&/g,"&"),c={},d=/<(\w)([-\w]+)(?:\/|[^>]*>((?:(?!<\1)[\s\S])*)<\/\1\2)>/gm,_;for(;_=d.exec(h);){let[,g,O,T]=_,v=g.toLowerCase()+O,R=T!=null?Be(T):!0;typeof R=="string"?c[v]=He(l(R)):Array.isArray(c[v])?c[v].push(R):c[v]=c[v]!=null?[c[v],R]:Xt[v]?[R]:R}return Object.keys(c).length?c:l(h)},Ot=Lt(Ht(),1),z={MISSING_ARGUMENT:"MISSING_ARGUMENT",COLLECTION_EXISTS:"COLLECTION_EXISTS",CREATE_COLLECTION_ERROR:"CREATE_COLLECTION_ERROR",RENAME_COLLECTION_ERROR:"RENAME_COLLECTION_ERROR",REMOVE_COLLECTION_ERROR:"REMOVE_COLLECTION_ERROR",UPDATE_COLLECTION_SCHEMA_ERROR:"UPDATE_COLLECTION_SCHEMA_ERROR",COLLECTION_NOT_FOUND:"COLLECTION_NOT_FOUND",SCHEMA_VALIDATION_ERROR:"SCHEMA_VALIDATION_ERROR",DOCUMENT_VALIDATION_ERROR:"DOCUMENT_VALIDATION_ERROR",S3_OPERATION_ERROR:"S3_OPERATION_ERROR",FIND_ERROR:"FIND_ERROR",FIND_ONE_ERROR:"FIND_ONE_ERROR",SAVE_DATA_ERROR:"SAVE_DATA_ERROR",INSERT_ERROR:"INSERT_ERROR",UPDATE_ERROR:"UPDATE_ERROR",UPDATE_ONE_ERROR:"UPDATE_ONE_ERROR",DELETE_ERROR:"DELETE_ERROR",COUNT_ERROR:"COUNT_ERROR",UNKNOWN_ERROR:"UNKNOWN_ERROR"},oe=class extends Error{constructor(h,l=z.UNKNOWN_ERROR){super(`lowstorageError: ${h} :: code: ${l}`),this.name=this.constructor.name,this.code=l,Error.captureStackTrace(this,this.constructor)}},Ne=class extends oe{constructor(h,l=z.SCHEMA_VALIDATION_ERROR){super(h,z.SCHEMA_VALIDATION_ERROR)}},Le=class extends oe{constructor(h,l=z.DOCUMENT_VALIDATION_ERROR){super(h,z.DOCUMENT_VALIDATION_ERROR)}},le=class extends oe{constructor(h,l){super(`S3 ${l} operation failed: ${h}`,z.S3_OPERATION_ERROR)}},Ye=(h,l)=>Object.keys(l).every(c=>h[c]===l[c]),tr=async()=>typeof et<"u"&&typeof et=="function"?et():typeof crypto<"u"&&typeof crypto=="object"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(h){var l=Math.random()*16|0,c=h==="x"?l:l&3|8;return c.toString(16)}),Qe=h=>{let l={name:"_id",type:"string",size:16,logicalType:"UUID"};return typeof h>"u"||h===null||("type"in h&&h.type==="record"&&"fields"in h&&Array.isArray(h.fields)?h.fields.some(d=>d.name==="_id")||h.fields.unshift(l):"type"in h&&h.type==="array"&&"items"in h&&h.items!==null&&typeof h.items=="object"&&"type"in h.items&&h.items.type==="record"&&"fields"in h.items&&Array.isArray(h.items.fields)&&(h.items.fields.some(d=>d.name==="_id")||h.items.fields.unshift(l))),h},Y="lowstorage",Oe="/",Rt="lowstorage",Re=".avro",rr=1024*1024,_t=5*rr,it=Buffer.from("","utf8"),tt=(h=z.DOCUMENT_VALIDATION_ERROR)=>{throw new Le(`${Y}: Invalid document or schema ${h}`)},Ve=(h="")=>{if(h.trim()===""||h===null||typeof h>"u"||h.length>255||h===null)throw new oe(`${Y}: Collection name is required, null or too long`,z.MISSING_ARGUMENT)},yr=class{constructor(h){this._checkArgs=l=>{let c=["accessKeyId","secretAccessKey","endpoint","bucketName"];for(let d of c)if(!l[d])throw new oe(`${Y}: ${d} is required`,z.MISSING_ARGUMENT)},this.s3=()=>this._s3,this._checkArgs(h),this._schemas=new Map,this._s3=new er(h),this._dirPrefix=h.dirPrefix||Rt,this._avroParse=Ot.Type}async listCollections(){try{let h=await this._s3.list(Oe,this._dirPrefix);return Array.isArray(h)?h.map(l=>l.key.slice(this._dirPrefix.length+1,-Re.length)):typeof h=="object"&&h!==null&&"keyCount"in h&&h.keyCount==="0"?[]:[]}catch(h){throw new le(`${Y}: ${h.message}`,z.S3_OPERATION_ERROR)}}async collectionExists(h=""){try{return Ve(h),!!await this._s3.fileExists(`${this._dirPrefix}${Oe}${h}${Re}`)}catch(l){if(l.message.includes("Not Found"))return!1;throw new oe(`${Y}: ${l.message}`,z.COLLECTION_NOT_FOUND)}}async createCollection(h="",l,c=[]){try{if(Ve(h),!await this.collectionExists(h)){if(typeof l<"u"&&l!==null)try{if(this._avroParse.forSchema(l))this._schemas.set(h,l);else throw new Ne(`${Y}: Schema is invalid: ${l} ${z.SCHEMA_VALIDATION_ERROR}`)}catch{throw new Ne(`${Y}: Schema is invalid: ${l}`,z.SCHEMA_VALIDATION_ERROR)}if(c.length>0&&l){let _=this._avroParse.forSchema({type:"array",items:l});await this._s3.put(`${this._dirPrefix}${Oe}${h}${Re}`,_.toBuffer(c))}else await this._s3.put(`${this._dirPrefix}${Oe}${h}${Re}`,it);return this.collection(h,l,!1)}throw new oe(`${Y}: Collection ${h} already exists`,z.COLLECTION_EXISTS)}catch(d){throw d instanceof oe?d:new oe(`${Y}: ${d.message}`,z.CREATE_COLLECTION_ERROR)}}async removeCollection(h=""){try{if(Ve(h),await this.collectionExists(h)){await this._s3.delete(`${this._dirPrefix}${Oe}${h}${Re}`);let c=await this.collectionExists(h);if(typeof c=="boolean"){if(!c)return this._schemas.delete(h),!0;throw new oe(`${Y}: Failed to delete collection ${h}`,z.S3_OPERATION_ERROR)}throw new le(`${Y}: Failed to delete collection ${h}`,z.S3_OPERATION_ERROR)}throw new oe(`${Y}: Collection ${h} does not exist`,z.REMOVE_COLLECTION_ERROR)}catch(l){throw l instanceof le?l:new oe(`${Y}: Failed to remove collection: ${l.message}`,z.REMOVE_COLLECTION_ERROR)}}async collection(h="",l,c=!0){try{Ve(h);let d=`${this._dirPrefix}${Oe}${h}${Re}`;if(!await this._s3.fileExists(d)){if(!c)throw new oe(`${Y}: Collection ${h} does not exist`,z.COLLECTION_NOT_FOUND);await this._s3.put(d,it)}let g=l||this._schemas.get(h)||void 0;return new ir(h,g,this._s3,this._dirPrefix)}catch(d){throw d.message.includes("unknown type")?new Ne(`${Y}: Schema input is invalid: ${d.message}`,z.SCHEMA_VALIDATION_ERROR):new oe(`${Y}: ${d.message}`,z.COLLECTION_NOT_FOUND)}}},ir=class St{constructor(l="",c,d,_=Rt,g=!1,O=_t){this.getProps=()=>({colName:this._colName,s3:this._s3,schema:this._schema,avroParse:this._avroParse,avroType:this._avroType,dirPrefix:this._dirPrefix,safeWrite:this._safeWrite,chunkSize:this._chunkSize}),this.setProps=T=>{this._colName=T.colName,this._schema=T.schema,this._s3=T.s3,this._avroParse=T.avroParse,this._avroType=T.avroType,this._dirPrefix=T.dirPrefix,this._safeWrite=T.safeWrite,this._chunkSize=T.chunkSize},this.setSafeWrite=T=>{this._safeWrite=T},this.getSafeWrite=()=>this._safeWrite,this.getAvroSchema=()=>this._schema,this.setAvroSchema=T=>{try{this._schema=Qe(T),this._avroType=typeof T>"u"?null:this._avroParse.forSchema(T)}catch(v){throw new oe(`${Y}: ${v.message}`,z.SCHEMA_VALIDATION_ERROR)}},this.inferAvroSchema=(T,v="record")=>{Array.isArray(T)&&(T=T[0]);let C=this._avroParse.forValue(T).schema();return Qe(C)},this._colName=l.trim(),this._s3=d,this._schema=Qe(c),this._dirPrefix=_,this._safeWrite=g,this._chunkSize=O||_t,this._s3.setMaxRequestSizeInBytes(this._chunkSize),this._avroParse=Ot.Type,this._lastETag="",this._dataCache=[],this._avroType=typeof c>"u"?null:this._avroParse.forSchema(c),this._key=`${this._dirPrefix}${Oe}${this._colName}${Re}`}async _loadData(){try{if(this._avroType===null||typeof this._avroType>"u")throw new oe(`${Y}: Missing type definition. Configure before operations `,z.SCHEMA_VALIDATION_ERROR);let{etag:l,data:c}=await this._s3.getObjectWithETag(this._key,{"if-none-match":this._lastETag});if(c===null)return this._dataCache;this._lastETag=l===null?this._lastETag:l;let d=this._avroParse.forSchema({type:"array",items:this._avroType});if(c.length0?d.fromBuffer(Buffer.from(c,"utf8")):[],this._dataCache;let _=this._chunkSize,g=[Buffer.from(c,"utf8")],O=!0;for(;O;){let v=await this._s3.getResponse(this._key,!1,_,_+this._chunkSize),R=await v.text();g.push(Buffer.from(R,"utf8")),_+=this._chunkSize,parseInt(v.headers.get("content-length")||R.length.toString())-1)return this._dataCache=[],this._dataCache;throw new le(`${Y}: Failed to load data: ${l.message}`,z.S3_OPERATION_ERROR)}}async _saveData(l){try{if(this._avroType===null||typeof this._avroType>"u")throw new oe(`${Y}: Missing type definition. Configure before operations `,z.SCHEMA_VALIDATION_ERROR);let c=this._avroParse.forSchema({type:"array",items:this._avroType}),d=l.length>0?c.toBuffer(l):it;if(this._safeWrite&&this._lastETag!==""){let O=await this._s3.getEtag(this._key);if(O!==null&&O!==this._lastETag)return!1}let _=await this._s3.put(this._key,d);if(typeof _=="object"&&"status"in _&&_.status!==200)throw new le(`${Y}: Failed to save data`,z.S3_OPERATION_ERROR);let g=_.headers?.get("etag")||"";return g&&g.length>0&&(this._lastETag=this._s3.sanitizeETag(g),this._dataCache=l),!0}catch(c){throw c instanceof le?c:new oe(`${Y}: ${c.message}`,z.SAVE_DATA_ERROR)}}async insert(l,c){try{if(l==null)throw new oe(`${Y}: Document is required for insert`,z.INSERT_ERROR);if(typeof l!="object"&&!Array.isArray(l))throw new Le(`${Y}: Document must be an object or an array`,z.DOCUMENT_VALIDATION_ERROR);let d=Array.isArray(l)?l:[l],_=c?Qe(c):this._schema||this.inferAvroSchema(d[0]),g=this._avroParse.forSchema(_);if(!g)throw new Ne(`${Y}: Schema is required - Pass a schema to the insert method`,z.SCHEMA_VALIDATION_ERROR);this._avroType=g;let O=await this._loadData();for(let v of d){if(typeof v!="object"||v===null)throw new Le(`${Y}: Invalid input: input must be an object or an array of objects`,z.DOCUMENT_VALIDATION_ERROR);if(v._id=v._id||await tr(),this._avroType.isValid(v,{errorHook:tt,noUndeclaredFields:!0})===!0)O.push(v);else throw new Le(`${Y}: Invalid document or schema`,z.DOCUMENT_VALIDATION_ERROR)}if(!await this._saveData(O))throw new le(`${Y}: Failed to insert document`,z.S3_OPERATION_ERROR);return this.setAvroSchema(_),d}catch(d){throw d.message.includes("unknown type")?new Ne(`${Y}: Schema input is invalid: ${d.message}`,z.SCHEMA_VALIDATION_ERROR):d instanceof oe?d:new oe(`${Y} Insert operation failed: ${d.message}`,z.INSERT_ERROR)}}async find(l={},c={}){try{if(l==null)throw new oe(`${Y}: Query is required for update`,z.MISSING_ARGUMENT);let d=await this._loadData(),_=c.skip!==void 0?parseInt(String(c.skip),10):0,g=c.limit!==void 0?_+parseInt(String(c.limit),10):void 0;return d.filter(T=>Ye(T,l)).slice(_,g)}catch(d){throw new oe(`${Y}: Find operation failed: ${d.message}`,z.FIND_ERROR)}}async findOne(l={}){try{if(l===null)throw new oe(`${Y}: Query cannot be null`,z.INVALID_ARGUMENT);return(await this.find(l,{limit:1}))[0]||null}catch(c){throw c instanceof oe?c:new oe(`${Y}: FindOne operation failed: ${c.message}`,z.FIND_ONE_ERROR)}}async update(l={},c={},d={}){try{if(l==null||c===void 0||c===null)throw new oe(`${Y}: Query and update values are required for update`,z.MISSING_ARGUMENT);if(!this._avroType)throw new Ne(`${Y}: Schema is not defined for this collection`,z.SCHEMA_VALIDATION_ERROR);let _=await this._loadData();if(_.length===0)return 0;let g=0;for(let O=0;O<_.length;O++)if(Ye(_[O],l)){let T={..._[O],...c};if(this._avroType.isValid(T,{errorHook:tt,noUndeclaredFields:!0})===!0)_[O]=T,g++;else throw new Le(`${Y}: Invalid document or schema`,z.DOCUMENT_VALIDATION_ERROR)}if(g>0){if(!await this._saveData(_))throw new le(`${Y}: Failed to update document`,z.S3_OPERATION_ERROR)}else if(d&&"upsert"in d&&d.upsert){if(!await this.insert(c))throw new le(`${Y}: Failed to update document`,z.S3_OPERATION_ERROR);g=1}return g}catch(_){throw _ instanceof le?_:new oe(`${Y}: Update operation failed: ${_.message}`,z.UPDATE_ERROR)}}async updateOne(l={},c={},d={}){try{if(l==null||c===void 0||c===null)throw new oe(`${Y}: Query is required`,z.MISSING_ARGUMENT);if(!this._avroType)throw new Ne(`${Y}: Schema is not defined for this collection`,z.SCHEMA_VALIDATION_ERROR);let _=await this._loadData();if(_.length===0)return 0;let g=_.findIndex(O=>Ye(O,l));if(g!==-1){let O={..._[g],...c};if(this._avroType.isValid(O,{errorHook:tt,noUndeclaredFields:!0})===!0){if(_[g]=O,!await this._saveData(_))throw new le(`${Y}: Failed to update document`,z.S3_OPERATION_ERROR);return 1}else throw new Le(`${Y}: Invalid document or schema`,z.DOCUMENT_VALIDATION_ERROR)}if(d&&"upsert"in d&&d.upsert){if(!await this.insert(c))throw new le(`${Y}: Failed to update document`,z.S3_OPERATION_ERROR);return 1}return 0}catch(_){throw _ instanceof oe?_:new oe(`${Y}: UpdateOne operation failed: ${_.message}`,z.UPDATE_ONE_ERROR)}}async delete(l={}){try{if(l==null)throw new oe(`${Y}: Query is required`,z.MISSING_ARGUMENT);let c=await this._loadData();if(c.length===0)return 0;let d=c.length,_=c.filter(O=>!Ye(O,l));if(!await this._saveData(_))throw new le(`${Y}: Failed to delete document`,z.S3_OPERATION_ERROR);return d-_.length}catch(c){throw c instanceof le?c:new oe(`${Y}: Delete operation failed: ${c.message}`,z.DELETE_ERROR)}}async deleteAll(){try{let c=(await this._loadData()).length;if(!await this._saveData([]))throw new le(`${Y}: Failed to delete document`,z.S3_OPERATION_ERROR);return c}catch(l){throw l instanceof le?l:new oe(`${Y}: Delete operation failed: ${l.message}`,z.DELETE_ERROR)}}async count(l={}){try{return(await this.find(l)).length}catch(c){throw new oe(`${Y}: Count operation failed: ${c.message}`,z.COUNT_ERROR)}}async renameCollection(l,c=this._schema){try{if(Ve(l),await this._s3.fileExists(`${this._dirPrefix}${Oe}${l}${Re}`))throw new oe(`${Y}: Collection ${l} already exists`,z.COLLECTION_EXISTS);let _=c||this.getAvroSchema(),g=await this._loadData(),O=new St(l,_,this._s3,this._dirPrefix,this._safeWrite,this._chunkSize);return await O._saveData(g),await this._s3.delete(`${this._dirPrefix}${Oe}${this._colName}${Re}`),O}catch(d){throw d instanceof oe?d:new oe(`${Y}: Rename collection failed: ${d.message}`,z.RENAME_COLLECTION_ERROR)}}};export{yr as lowstorage,oe as lowstorageError,z as lowstorage_ERROR_CODES}; + `}async delete(h){this._checkKey(h),this._log("info",`Deleting object ${h}`);let l={[Te]:xe,[_e]:ye},c=me(h),{url:d,headers:_}=await this._sign("DELETE",c,{},l,""),g=await this._sendRequest(d,"DELETE",_);return g.status===204||g.status===200}async _sendRequest(h,l,c,d,_=[]){this._log("info",`Sending ${l} request to ${h}, headers: ${JSON.stringify(c)}`);let g=await fetch(h,{method:l,headers:c,body:["GET","HEAD"].includes(l)?void 0:d,signal:this.requestAbortTimeout!==void 0?AbortSignal.timeout(this.requestAbortTimeout):void 0});return!g.ok&&!_.includes(g.status)&&await this._handleErrorResponse(g),g}async _handleErrorResponse(h){let l=await h.text(),c=h.headers.get("x-amz-error-code")||"Unknown",d=h.headers.get("x-amz-error-message")||h.statusText;throw this._log("error",`${se}Request failed with status ${h.status}: ${c} - ${d},err body: ${l}`),new Error(`${se}Request failed with status ${h.status}: ${c} - ${d}, err body: ${l}`)}_buildCanonicalQueryString(h){return Object.keys(h).length<1?"":Object.keys(h).sort().map(l=>`${encodeURIComponent(l)}=${encodeURIComponent(h[l])}`).join("&")}async _getSignatureKey(h){let l=await Me(`AWS4${this.secretAccessKey}`,h),c=await Me(l,this.region),d=await Me(c,Ze);return Me(d,Xe)}},We=async h=>{let l=Tt("sha256");return l.update(h),l.digest("hex")},Me=async(h,l,c)=>{let d=Et("sha256",h);return d.update(l),d.digest(c)},He=h=>{let l={'"':"",""":"",""":"",""":"",""":""};return h.replace(/^("|"|")|("|"|")$/g,c=>l[c])},Be=h=>{let l=g=>g.replace(/"/g,'"').replace(/'/g,"'").replace(/</g,"<").replace(/>/g,">").replace(/&/g,"&"),c={},d=/<(\w)([-\w]+)(?:\/|[^>]*>((?:(?!<\1)[\s\S])*)<\/\1\2)>/gm,_;for(;_=d.exec(h);){let[,g,O,T]=_,v=g.toLowerCase()+O,R=T!=null?Be(T):!0;typeof R=="string"?c[v]=He(l(R)):Array.isArray(c[v])?c[v].push(R):c[v]=c[v]!=null?[c[v],R]:Xt[v]?[R]:R}return Object.keys(c).length?c:l(h)},Ot=Lt(Ht(),1),z={MISSING_ARGUMENT:"MISSING_ARGUMENT",COLLECTION_EXISTS:"COLLECTION_EXISTS",CREATE_COLLECTION_ERROR:"CREATE_COLLECTION_ERROR",RENAME_COLLECTION_ERROR:"RENAME_COLLECTION_ERROR",REMOVE_COLLECTION_ERROR:"REMOVE_COLLECTION_ERROR",UPDATE_COLLECTION_SCHEMA_ERROR:"UPDATE_COLLECTION_SCHEMA_ERROR",COLLECTION_NOT_FOUND:"COLLECTION_NOT_FOUND",SCHEMA_VALIDATION_ERROR:"SCHEMA_VALIDATION_ERROR",DOCUMENT_VALIDATION_ERROR:"DOCUMENT_VALIDATION_ERROR",S3_OPERATION_ERROR:"S3_OPERATION_ERROR",FIND_ERROR:"FIND_ERROR",FIND_ONE_ERROR:"FIND_ONE_ERROR",SAVE_DATA_ERROR:"SAVE_DATA_ERROR",INSERT_ERROR:"INSERT_ERROR",UPDATE_ERROR:"UPDATE_ERROR",UPDATE_ONE_ERROR:"UPDATE_ONE_ERROR",DELETE_ERROR:"DELETE_ERROR",COUNT_ERROR:"COUNT_ERROR",UNKNOWN_ERROR:"UNKNOWN_ERROR"},oe=class extends Error{constructor(h,l=z.UNKNOWN_ERROR){super(`lowstorageError: ${h} :: code: ${l}`),this.name=this.constructor.name,this.code=l,Error.captureStackTrace(this,this.constructor)}},Ne=class extends oe{constructor(h,l=z.SCHEMA_VALIDATION_ERROR){super(h,z.SCHEMA_VALIDATION_ERROR)}},Le=class extends oe{constructor(h,l=z.DOCUMENT_VALIDATION_ERROR){super(h,z.DOCUMENT_VALIDATION_ERROR)}},le=class extends oe{constructor(h,l){super(`S3 ${l} operation failed: ${h}`,z.S3_OPERATION_ERROR)}},Ye=(h,l)=>Object.keys(l).every(c=>h[c]===l[c]),tr=async()=>typeof et<"u"&&typeof et=="function"?et():typeof crypto<"u"&&typeof crypto=="object"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(h){var l=Math.random()*16|0,c=h==="x"?l:l&3|8;return c.toString(16)}),Qe=h=>{let l={name:"_id",type:"string",size:16,logicalType:"UUID"};return typeof h>"u"||h===null||("type"in h&&h.type==="record"&&"fields"in h&&Array.isArray(h.fields)?h.fields.some(d=>d.name==="_id")||h.fields.unshift(l):"type"in h&&h.type==="array"&&"items"in h&&h.items!==null&&typeof h.items=="object"&&"type"in h.items&&h.items.type==="record"&&"fields"in h.items&&Array.isArray(h.items.fields)&&(h.items.fields.some(d=>d.name==="_id")||h.items.fields.unshift(l))),h},Y="lowstorage",Oe="/",Rt="lowstorage",Re=".avro",rr=1024*1024,_t=5*rr,it=Buffer.from("","utf8"),tt=(h=z.DOCUMENT_VALIDATION_ERROR)=>{throw new Le(`${Y}: Invalid document or schema ${h}`)},Ve=(h="")=>{if(h.trim()===""||h===null||typeof h>"u"||h.length>255||h===null)throw new oe(`${Y}: Collection name is required, null or too long`,z.MISSING_ARGUMENT)},yr=class{constructor(h){this._checkArgs=l=>{let c=["accessKeyId","secretAccessKey","endpoint","bucketName"];for(let d of c)if(!l[d])throw new oe(`${Y}: ${d} is required`,z.MISSING_ARGUMENT)},this.s3=()=>this._s3,this._checkArgs(h),this._schemas=new Map,this._s3=new er(h),this._dirPrefix=h.dirPrefix||Rt,this._avroParse=Ot.Type}async listCollections(){try{let h=await this._s3.list(Oe,this._dirPrefix);return Array.isArray(h)?h.map(l=>l.key.slice(this._dirPrefix.length+1,-Re.length)):typeof h=="object"&&h!==null&&"keyCount"in h&&h.keyCount==="0"?[]:[]}catch(h){throw new le(`${Y}: ${h.message}`,z.S3_OPERATION_ERROR)}}async collectionExists(h=""){try{return Ve(h),!!await this._s3.fileExists(`${this._dirPrefix}${Oe}${h}${Re}`)}catch(l){if(l.message.includes("Not Found"))return!1;throw new oe(`${Y}: ${l.message}`,z.COLLECTION_NOT_FOUND)}}async createCollection(h="",l,c=[]){try{if(Ve(h),!await this.collectionExists(h)){if(typeof l<"u"&&l!==null)try{if(this._avroParse.forSchema(l))this._schemas.set(h,l);else throw new Ne(`${Y}: Schema is invalid: ${l} ${z.SCHEMA_VALIDATION_ERROR}`)}catch{throw new Ne(`${Y}: Schema is invalid: ${l}`,z.SCHEMA_VALIDATION_ERROR)}if(c.length>0&&l){let _=this._avroParse.forSchema({type:"array",items:l});await this._s3.put(`${this._dirPrefix}${Oe}${h}${Re}`,_.toBuffer(c))}else await this._s3.put(`${this._dirPrefix}${Oe}${h}${Re}`,it);return this.collection(h,l,!1)}throw new oe(`${Y}: Collection ${h} already exists`,z.COLLECTION_EXISTS)}catch(d){throw d instanceof oe?d:new oe(`${Y}: ${d.message}`,z.CREATE_COLLECTION_ERROR)}}async removeCollection(h=""){try{if(Ve(h),await this.collectionExists(h)){await this._s3.delete(`${this._dirPrefix}${Oe}${h}${Re}`);let c=await this.collectionExists(h);if(typeof c=="boolean"){if(!c)return this._schemas.delete(h),!0;throw new oe(`${Y}: Failed to delete collection ${h}`,z.S3_OPERATION_ERROR)}throw new le(`${Y}: Failed to delete collection ${h}`,z.S3_OPERATION_ERROR)}throw new oe(`${Y}: Collection ${h} does not exist`,z.REMOVE_COLLECTION_ERROR)}catch(l){throw l instanceof le?l:new oe(`${Y}: Failed to remove collection: ${l.message}`,z.REMOVE_COLLECTION_ERROR)}}async collection(h="",l,c=!0){try{Ve(h);let d=`${this._dirPrefix}${Oe}${h}${Re}`;if(!await this._s3.fileExists(d)){if(!c)throw new oe(`${Y}: Collection ${h} does not exist`,z.COLLECTION_NOT_FOUND);await this._s3.put(d,it)}let g=l||this._schemas.get(h)||void 0;return new ir(h,g,this._s3,this._dirPrefix)}catch(d){throw d.message.includes("unknown type")?new Ne(`${Y}: Schema input is invalid: ${d.message}`,z.SCHEMA_VALIDATION_ERROR):new oe(`${Y}: ${d.message}`,z.COLLECTION_NOT_FOUND)}}},ir=class St{constructor(l="",c,d,_=Rt,g=!1,O=_t){this.getProps=()=>({colName:this._colName,s3:this._s3,schema:this._schema,avroParse:this._avroParse,avroType:this._avroType,dirPrefix:this._dirPrefix,safeWrite:this._safeWrite,chunkSize:this._chunkSize}),this.setProps=T=>{this._colName=T.colName,this._schema=T.schema,this._s3=T.s3,this._avroParse=T.avroParse,this._avroType=T.avroType,this._dirPrefix=T.dirPrefix,this._safeWrite=T.safeWrite,this._chunkSize=T.chunkSize},this.setSafeWrite=T=>{this._safeWrite=T},this.getSafeWrite=()=>this._safeWrite,this.getAvroSchema=()=>this._schema,this.setAvroSchema=T=>{try{this._schema=Qe(T),this._avroType=typeof T>"u"?null:this._avroParse.forSchema(T)}catch(v){throw new oe(`${Y}: ${v.message}`,z.SCHEMA_VALIDATION_ERROR)}},this.getCollectionETag=()=>this._lastETag,this.inferAvroSchema=(T,v="record")=>{Array.isArray(T)&&(T=T[0]);let C=this._avroParse.forValue(T).schema();return Qe(C)},this._colName=l.trim(),this._s3=d,this._schema=Qe(c),this._dirPrefix=_,this._safeWrite=g,this._chunkSize=O||_t,this._s3.setMaxRequestSizeInBytes(this._chunkSize),this._avroParse=Ot.Type,this._lastETag="",this._dataCache=[],this._avroType=typeof c>"u"?null:this._avroParse.forSchema(c),this._key=`${this._dirPrefix}${Oe}${this._colName}${Re}`}async forceLoadData(){try{this._lastETag="";let l=await this._loadData();return this._dataCache=l,!0}catch(l){throw new oe(`${Y}: Failed to force update data: ${l.message}`,z.S3_OPERATION_ERROR)}}async _loadData(){try{if(this._avroType===null||typeof this._avroType>"u")throw new oe(`${Y}: Missing type definition. Configure before operations `,z.SCHEMA_VALIDATION_ERROR);let{etag:l,data:c}=await this._s3.getObjectWithETag(this._key,{"if-none-match":this._lastETag});if(c===null)return this._dataCache;this._lastETag=l===null?this._lastETag:l;let d=this._avroParse.forSchema({type:"array",items:this._avroType});if(c.length0?d.fromBuffer(Buffer.from(c,"utf8")):[],this._dataCache;let _=this._chunkSize,g=[Buffer.from(c,"utf8")],O=!0;for(;O;){let v=await this._s3.getResponse(this._key,!1,_,_+this._chunkSize),R=await v.text();g.push(Buffer.from(R,"utf8")),_+=this._chunkSize,parseInt(v.headers.get("content-length")||R.length.toString())-1)return this._dataCache=[],this._dataCache;throw new le(`${Y}: Failed to load data: ${l.message}`,z.S3_OPERATION_ERROR)}}async _saveData(l){try{if(this._avroType===null||typeof this._avroType>"u")throw new oe(`${Y}: Missing type definition. Configure before operations `,z.SCHEMA_VALIDATION_ERROR);let c=this._avroParse.forSchema({type:"array",items:this._avroType}),d=l.length>0?c.toBuffer(l):it;if(this._safeWrite&&this._lastETag!==""){let O=await this._s3.getEtag(this._key);if(O!==null&&O!==this._lastETag)return!1}let _=await this._s3.put(this._key,d);if(typeof _=="object"&&"status"in _&&_.status!==200)throw new le(`${Y}: Failed to save data`,z.S3_OPERATION_ERROR);let g=_.headers?.get("etag")||"";return g&&g.length>0&&(this._lastETag=this._s3.sanitizeETag(g),this._dataCache=l),!0}catch(c){throw c instanceof le?c:new oe(`${Y}: ${c.message}`,z.SAVE_DATA_ERROR)}}async insert(l,c){try{if(l==null)throw new oe(`${Y}: Document is required for insert`,z.INSERT_ERROR);if(typeof l!="object"&&!Array.isArray(l))throw new Le(`${Y}: Document must be an object or an array`,z.DOCUMENT_VALIDATION_ERROR);let d=Array.isArray(l)?l:[l],_=c?Qe(c):this._schema||this.inferAvroSchema(d[0]),g=this._avroParse.forSchema(_);if(!g)throw new Ne(`${Y}: Schema is required - Pass a schema to the insert method`,z.SCHEMA_VALIDATION_ERROR);this._avroType=g;let O=await this._loadData();for(let v of d){if(typeof v!="object"||v===null)throw new Le(`${Y}: Invalid input: input must be an object or an array of objects`,z.DOCUMENT_VALIDATION_ERROR);if(v._id=v._id||await tr(),this._avroType.isValid(v,{errorHook:tt,noUndeclaredFields:!0})===!0)O.push(v);else throw new Le(`${Y}: Invalid document or schema`,z.DOCUMENT_VALIDATION_ERROR)}if(!await this._saveData(O))throw new le(`${Y}: Failed to insert document`,z.S3_OPERATION_ERROR);return this.setAvroSchema(_),d}catch(d){throw d.message.includes("unknown type")?new Ne(`${Y}: Schema input is invalid: ${d.message}`,z.SCHEMA_VALIDATION_ERROR):d instanceof oe?d:new oe(`${Y} Insert operation failed: ${d.message}`,z.INSERT_ERROR)}}async find(l={},c={}){try{if(l==null)throw new oe(`${Y}: Query is required for update`,z.MISSING_ARGUMENT);let d=await this._loadData(),_=c.skip!==void 0?parseInt(String(c.skip),10):0,g=c.limit!==void 0?_+parseInt(String(c.limit),10):void 0;return d.filter(T=>Ye(T,l)).slice(_,g)}catch(d){throw new oe(`${Y}: Find operation failed: ${d.message}`,z.FIND_ERROR)}}async findOne(l={}){try{if(l===null)throw new oe(`${Y}: Query cannot be null`,z.INVALID_ARGUMENT);return(await this.find(l,{limit:1}))[0]||null}catch(c){throw c instanceof oe?c:new oe(`${Y}: FindOne operation failed: ${c.message}`,z.FIND_ONE_ERROR)}}async update(l={},c={},d={}){try{if(l==null||c===void 0||c===null)throw new oe(`${Y}: Query and update values are required for update`,z.MISSING_ARGUMENT);if(!this._avroType)throw new Ne(`${Y}: Schema is not defined for this collection`,z.SCHEMA_VALIDATION_ERROR);let _=await this._loadData();if(_.length===0)return 0;let g=0;for(let O=0;O<_.length;O++)if(Ye(_[O],l)){let T={..._[O],...c};if(this._avroType.isValid(T,{errorHook:tt,noUndeclaredFields:!0})===!0)_[O]=T,g++;else throw new Le(`${Y}: Invalid document or schema`,z.DOCUMENT_VALIDATION_ERROR)}if(g>0){if(!await this._saveData(_))throw new le(`${Y}: Failed to update document`,z.S3_OPERATION_ERROR)}else if(d&&"upsert"in d&&d.upsert){if(!await this.insert(c))throw new le(`${Y}: Failed to update document`,z.S3_OPERATION_ERROR);g=1}return g}catch(_){throw _ instanceof le?_:new oe(`${Y}: Update operation failed: ${_.message}`,z.UPDATE_ERROR)}}async updateOne(l={},c={},d={}){try{if(l==null||c===void 0||c===null)throw new oe(`${Y}: Query is required`,z.MISSING_ARGUMENT);if(!this._avroType)throw new Ne(`${Y}: Schema is not defined for this collection`,z.SCHEMA_VALIDATION_ERROR);let _=await this._loadData();if(_.length===0)return 0;let g=_.findIndex(O=>Ye(O,l));if(g!==-1){let O={..._[g],...c};if(this._avroType.isValid(O,{errorHook:tt,noUndeclaredFields:!0})===!0){if(_[g]=O,!await this._saveData(_))throw new le(`${Y}: Failed to update document`,z.S3_OPERATION_ERROR);return 1}else throw new Le(`${Y}: Invalid document or schema`,z.DOCUMENT_VALIDATION_ERROR)}if(d&&"upsert"in d&&d.upsert){if(!await this.insert(c))throw new le(`${Y}: Failed to update document`,z.S3_OPERATION_ERROR);return 1}return 0}catch(_){throw _ instanceof oe?_:new oe(`${Y}: UpdateOne operation failed: ${_.message}`,z.UPDATE_ONE_ERROR)}}async delete(l={}){try{if(l==null)throw new oe(`${Y}: Query is required`,z.MISSING_ARGUMENT);let c=await this._loadData();if(c.length===0)return 0;let d=c.length,_=c.filter(O=>!Ye(O,l));if(!await this._saveData(_))throw new le(`${Y}: Failed to delete document`,z.S3_OPERATION_ERROR);return d-_.length}catch(c){throw c instanceof le?c:new oe(`${Y}: Delete operation failed: ${c.message}`,z.DELETE_ERROR)}}async deleteAll(){try{let c=(await this._loadData()).length;if(!await this._saveData([]))throw new le(`${Y}: Failed to delete document`,z.S3_OPERATION_ERROR);return c}catch(l){throw l instanceof le?l:new oe(`${Y}: Delete operation failed: ${l.message}`,z.DELETE_ERROR)}}async count(l={}){try{return(await this.find(l)).length}catch(c){throw new oe(`${Y}: Count operation failed: ${c.message}`,z.COUNT_ERROR)}}async renameCollection(l,c=this._schema){try{if(Ve(l),await this._s3.fileExists(`${this._dirPrefix}${Oe}${l}${Re}`))throw new oe(`${Y}: Collection ${l} already exists`,z.COLLECTION_EXISTS);let _=c||this.getAvroSchema(),g=await this._loadData(),O=new St(l,_,this._s3,this._dirPrefix,this._safeWrite,this._chunkSize);return await O._saveData(g),await this._s3.delete(`${this._dirPrefix}${Oe}${this._colName}${Re}`),O}catch(d){throw d instanceof oe?d:new oe(`${Y}: Rename collection failed: ${d.message}`,z.RENAME_COLLECTION_ERROR)}}};export{yr as lowstorage,oe as lowstorageError,z as lowstorage_ERROR_CODES}; //# sourceMappingURL=lowstorage.min.js.map diff --git a/build/lowstorage.min.js.map b/build/lowstorage.min.js.map index be86056..47c749c 100644 --- a/build/lowstorage.min.js.map +++ b/build/lowstorage.min.js.map @@ -1,7 +1,7 @@ { "version": 3, "sources": [""], - "sourcesContent": ["import __import_BUFFER from \"buffer\";\nimport __import_CRYPTO from \"crypto\";\nimport __import_UTIL from \"util\";\nimport __import_STREAM from \"stream\";\nimport __import_ZLIB from \"zlib\";\nimport __import_EVENTS from \"events\";\nimport __import_FS from \"fs\";\nimport __import_PATH from \"path\";\n\nvar __create = Object.create;\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __getProtoOf = Object.getPrototypeOf;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __require = /* @__PURE__ */ ((x2) => typeof require !== \"undefined\" ? require : typeof Proxy !== \"undefined\" ? new Proxy(x2, {\n get: (a, b2) => (typeof require !== \"undefined\" ? require : a)[b2]\n}) : x2)(function(x2) {\n if (typeof require !== \"undefined\") return require.apply(this, arguments);\n throw Error('Dynamic require of \"' + x2 + '\" is not supported');\n});\nvar __commonJS = (cb, mod) => function __require2() {\n return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(\n // If the importer is in node compatibility mode or this is not an ESM\n // file that has been converted to a CommonJS file using a Babel-\n // compatible transform (i.e. \"__esModule\" has not been set), then set\n // \"default\" to the CommonJS \"module.exports\" for node compatibility.\n isNodeMode || !mod || !mod.__esModule ? __defProp(target, \"default\", { value: mod, enumerable: true }) : target,\n mod\n));\n\n// node_modules/avsc/lib/utils.js\nvar require_utils = __commonJS({\n \"node_modules/avsc/lib/utils.js\"(exports, module) {\n \"use strict\";\n var buffer = __import_BUFFER;\n var crypto2 = __import_CRYPTO;\n var util = __import_UTIL;\n var Buffer2 = buffer.Buffer;\n var POOL = new BufferPool(4096);\n var NAME_PATTERN = /^[A-Za-z_][A-Za-z0-9_]*$/;\n var f2 = util.format;\n function newBuffer(size) {\n if (typeof Buffer2.alloc == \"function\") {\n return Buffer2.alloc(size);\n } else {\n return new Buffer2(size);\n }\n }\n function bufferFrom(data, enc) {\n if (typeof Buffer2.from == \"function\") {\n return Buffer2.from(data, enc);\n } else {\n return new Buffer2(data, enc);\n }\n }\n function capitalize(s) {\n return s.charAt(0).toUpperCase() + s.slice(1);\n }\n function compare(n1, n2) {\n return n1 === n2 ? 0 : n1 < n2 ? -1 : 1;\n }\n function getOption(opts, key, def) {\n var value = opts[key];\n return value === void 0 ? def : value;\n }\n function getHash(str, algorithm) {\n algorithm = algorithm || \"md5\";\n var hash = crypto2.createHash(algorithm);\n hash.end(str);\n return hash.read();\n }\n function singleIndexOf(arr, v2) {\n var pos = -1;\n var i, l;\n if (!arr) {\n return -1;\n }\n for (i = 0, l = arr.length; i < l; i++) {\n if (arr[i] === v2) {\n if (pos >= 0) {\n return -2;\n }\n pos = i;\n }\n }\n return pos;\n }\n function toMap(arr, fn) {\n var obj = {};\n var i, elem;\n for (i = 0; i < arr.length; i++) {\n elem = arr[i];\n obj[fn(elem)] = elem;\n }\n return obj;\n }\n function objectValues(obj) {\n return Object.keys(obj).map(function(key) {\n return obj[key];\n });\n }\n function hasDuplicates(arr, fn) {\n var obj = /* @__PURE__ */ Object.create(null);\n var i, l, elem;\n for (i = 0, l = arr.length; i < l; i++) {\n elem = arr[i];\n if (fn) {\n elem = fn(elem);\n }\n if (obj[elem]) {\n return true;\n }\n obj[elem] = true;\n }\n return false;\n }\n function copyOwnProperties(src, dst, overwrite) {\n var names = Object.getOwnPropertyNames(src);\n var i, l, name;\n for (i = 0, l = names.length; i < l; i++) {\n name = names[i];\n if (!dst.hasOwnProperty(name) || overwrite) {\n var descriptor = Object.getOwnPropertyDescriptor(src, name);\n Object.defineProperty(dst, name, descriptor);\n }\n }\n return dst;\n }\n function isValidName(str) {\n return NAME_PATTERN.test(str);\n }\n function qualify(name, namespace) {\n if (~name.indexOf(\".\")) {\n name = name.replace(/^\\./, \"\");\n } else if (namespace) {\n name = namespace + \".\" + name;\n }\n name.split(\".\").forEach(function(part) {\n if (!isValidName(part)) {\n throw new Error(f2(\"invalid name: %j\", name));\n }\n });\n return name;\n }\n function unqualify(name) {\n var parts = name.split(\".\");\n return parts[parts.length - 1];\n }\n function impliedNamespace(name) {\n var match = /^(.*)\\.[^.]+$/.exec(name);\n return match ? match[1] : void 0;\n }\n function jsonEnd(str, pos) {\n pos = pos | 0;\n var c = str.charAt(pos++);\n if (/[\\d-]/.test(c)) {\n while (/[eE\\d.+-]/.test(str.charAt(pos))) {\n pos++;\n }\n return pos;\n } else if (/true|null/.test(str.slice(pos - 1, pos + 3))) {\n return pos + 3;\n } else if (/false/.test(str.slice(pos - 1, pos + 4))) {\n return pos + 4;\n }\n var depth = 0;\n var literal = false;\n do {\n switch (c) {\n case \"{\":\n case \"[\":\n if (!literal) {\n depth++;\n }\n break;\n case \"}\":\n case \"]\":\n if (!literal && !--depth) {\n return pos;\n }\n break;\n case '\"':\n literal = !literal;\n if (!depth && !literal) {\n return pos;\n }\n break;\n case \"\\\\\":\n pos++;\n }\n } while (c = str.charAt(pos++));\n return -1;\n }\n function abstractFunction() {\n throw new Error(\"abstract\");\n }\n function addDeprecatedGetters(obj, props) {\n var proto = obj.prototype;\n var i, l, prop, getter;\n for (i = 0, l = props.length; i < l; i++) {\n prop = props[i];\n getter = \"get\" + capitalize(prop);\n proto[getter] = util.deprecate(\n createGetter(prop),\n \"use `.\" + prop + \"` instead of `.\" + getter + \"()`\"\n );\n }\n function createGetter(prop2) {\n return function() {\n var delegate = this[prop2];\n return typeof delegate == \"function\" ? delegate.apply(this, arguments) : delegate;\n };\n }\n }\n function BufferPool(len) {\n this._len = len | 0;\n this._pos = 0;\n this._slab = newBuffer(this._len);\n }\n BufferPool.prototype.alloc = function(len) {\n if (len < 0) {\n throw new Error(\"negative length\");\n }\n var maxLen = this._len;\n if (len > maxLen) {\n return newBuffer(len);\n }\n if (this._pos + len > maxLen) {\n this._slab = newBuffer(maxLen);\n this._pos = 0;\n }\n return this._slab.slice(this._pos, this._pos += len);\n };\n function Lcg(seed) {\n var a = 1103515245;\n var c = 12345;\n var m2 = Math.pow(2, 31);\n var state = Math.floor(seed || Math.random() * (m2 - 1));\n this._max = m2;\n this._nextInt = function() {\n return state = (a * state + c) % m2;\n };\n }\n Lcg.prototype.nextBoolean = function() {\n return !!(this._nextInt() % 2);\n };\n Lcg.prototype.nextInt = function(start, end) {\n if (end === void 0) {\n end = start;\n start = 0;\n }\n end = end === void 0 ? this._max : end;\n return start + Math.floor(this.nextFloat() * (end - start));\n };\n Lcg.prototype.nextFloat = function(start, end) {\n if (end === void 0) {\n end = start;\n start = 0;\n }\n end = end === void 0 ? 1 : end;\n return start + (end - start) * this._nextInt() / this._max;\n };\n Lcg.prototype.nextString = function(len, flags) {\n len |= 0;\n flags = flags || \"aA\";\n var mask = \"\";\n if (flags.indexOf(\"a\") > -1) {\n mask += \"abcdefghijklmnopqrstuvwxyz\";\n }\n if (flags.indexOf(\"A\") > -1) {\n mask += \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\";\n }\n if (flags.indexOf(\"#\") > -1) {\n mask += \"0123456789\";\n }\n if (flags.indexOf(\"!\") > -1) {\n mask += \"~`!@#$%^&*()_+-={}[]:\\\";'<>?,./|\\\\\";\n }\n var result = [];\n for (var i = 0; i < len; i++) {\n result.push(this.choice(mask));\n }\n return result.join(\"\");\n };\n Lcg.prototype.nextBuffer = function(len) {\n var arr = [];\n var i;\n for (i = 0; i < len; i++) {\n arr.push(this.nextInt(256));\n }\n return bufferFrom(arr);\n };\n Lcg.prototype.choice = function(arr) {\n var len = arr.length;\n if (!len) {\n throw new Error(\"choosing from empty array\");\n }\n return arr[this.nextInt(len)];\n };\n function OrderedQueue() {\n this._index = 0;\n this._items = [];\n }\n OrderedQueue.prototype.push = function(item) {\n var items = this._items;\n var i = items.length | 0;\n var j2;\n items.push(item);\n while (i > 0 && items[i].index < items[j2 = i - 1 >> 1].index) {\n item = items[i];\n items[i] = items[j2];\n items[j2] = item;\n i = j2;\n }\n };\n OrderedQueue.prototype.pop = function() {\n var items = this._items;\n var len = items.length - 1 | 0;\n var first = items[0];\n if (!first || first.index > this._index) {\n return null;\n }\n this._index++;\n if (!len) {\n items.pop();\n return first;\n }\n items[0] = items.pop();\n var mid = len >> 1;\n var i = 0;\n var i1, i2, j2, item, c, c1, c2;\n while (i < mid) {\n item = items[i];\n i1 = (i << 1) + 1;\n i2 = i + 1 << 1;\n c1 = items[i1];\n c2 = items[i2];\n if (!c2 || c1.index <= c2.index) {\n c = c1;\n j2 = i1;\n } else {\n c = c2;\n j2 = i2;\n }\n if (c.index >= item.index) {\n break;\n }\n items[j2] = item;\n items[i] = c;\n i = j2;\n }\n return first;\n };\n function Tap(buf, pos) {\n this.buf = buf;\n this.pos = pos | 0;\n if (this.pos < 0) {\n throw new Error(\"negative offset\");\n }\n }\n Tap.prototype.isValid = function() {\n return this.pos <= this.buf.length;\n };\n Tap.prototype._invalidate = function() {\n this.pos = this.buf.length + 1;\n };\n Tap.prototype.readBoolean = function() {\n return !!this.buf[this.pos++];\n };\n Tap.prototype.skipBoolean = function() {\n this.pos++;\n };\n Tap.prototype.writeBoolean = function(b2) {\n this.buf[this.pos++] = !!b2;\n };\n Tap.prototype.readInt = Tap.prototype.readLong = function() {\n var n = 0;\n var k2 = 0;\n var buf = this.buf;\n var b2, h, f3, fk;\n do {\n b2 = buf[this.pos++];\n h = b2 & 128;\n n |= (b2 & 127) << k2;\n k2 += 7;\n } while (h && k2 < 28);\n if (h) {\n f3 = n;\n fk = 268435456;\n do {\n b2 = buf[this.pos++];\n f3 += (b2 & 127) * fk;\n fk *= 128;\n } while (b2 & 128);\n return (f3 % 2 ? -(f3 + 1) : f3) / 2;\n }\n return n >> 1 ^ -(n & 1);\n };\n Tap.prototype.skipInt = Tap.prototype.skipLong = function() {\n var buf = this.buf;\n while (buf[this.pos++] & 128) {\n }\n };\n Tap.prototype.writeInt = Tap.prototype.writeLong = function(n) {\n var buf = this.buf;\n var f3, m2;\n if (n >= -1073741824 && n < 1073741824) {\n m2 = n >= 0 ? n << 1 : ~n << 1 | 1;\n do {\n buf[this.pos] = m2 & 127;\n m2 >>= 7;\n } while (m2 && (buf[this.pos++] |= 128));\n } else {\n f3 = n >= 0 ? n * 2 : -n * 2 - 1;\n do {\n buf[this.pos] = f3 & 127;\n f3 /= 128;\n } while (f3 >= 1 && (buf[this.pos++] |= 128));\n }\n this.pos++;\n };\n Tap.prototype.readFloat = function() {\n var buf = this.buf;\n var pos = this.pos;\n this.pos += 4;\n if (this.pos > buf.length) {\n return 0;\n }\n return this.buf.readFloatLE(pos);\n };\n Tap.prototype.skipFloat = function() {\n this.pos += 4;\n };\n Tap.prototype.writeFloat = function(f3) {\n var buf = this.buf;\n var pos = this.pos;\n this.pos += 4;\n if (this.pos > buf.length) {\n return;\n }\n return this.buf.writeFloatLE(f3, pos);\n };\n Tap.prototype.readDouble = function() {\n var buf = this.buf;\n var pos = this.pos;\n this.pos += 8;\n if (this.pos > buf.length) {\n return 0;\n }\n return this.buf.readDoubleLE(pos);\n };\n Tap.prototype.skipDouble = function() {\n this.pos += 8;\n };\n Tap.prototype.writeDouble = function(d) {\n var buf = this.buf;\n var pos = this.pos;\n this.pos += 8;\n if (this.pos > buf.length) {\n return;\n }\n return this.buf.writeDoubleLE(d, pos);\n };\n Tap.prototype.readFixed = function(len) {\n var pos = this.pos;\n this.pos += len;\n if (this.pos > this.buf.length) {\n return;\n }\n var fixed = POOL.alloc(len);\n this.buf.copy(fixed, 0, pos, pos + len);\n return fixed;\n };\n Tap.prototype.skipFixed = function(len) {\n this.pos += len;\n };\n Tap.prototype.writeFixed = function(buf, len) {\n len = len || buf.length;\n var pos = this.pos;\n this.pos += len;\n if (this.pos > this.buf.length) {\n return;\n }\n buf.copy(this.buf, pos, 0, len);\n };\n Tap.prototype.readBytes = function() {\n var len = this.readLong();\n if (len < 0) {\n this._invalidate();\n return;\n }\n return this.readFixed(len);\n };\n Tap.prototype.skipBytes = function() {\n var len = this.readLong();\n if (len < 0) {\n this._invalidate();\n return;\n }\n this.pos += len;\n };\n Tap.prototype.writeBytes = function(buf) {\n var len = buf.length;\n this.writeLong(len);\n this.writeFixed(buf, len);\n };\n if (typeof Buffer2.prototype.utf8Slice == \"function\") {\n Tap.prototype.readString = function() {\n var len = this.readLong();\n if (len < 0) {\n this._invalidate();\n return \"\";\n }\n var pos = this.pos;\n var buf = this.buf;\n this.pos += len;\n if (this.pos > buf.length) {\n return;\n }\n return this.buf.utf8Slice(pos, pos + len);\n };\n } else {\n Tap.prototype.readString = function() {\n var len = this.readLong();\n if (len < 0) {\n this._invalidate();\n return \"\";\n }\n var pos = this.pos;\n var buf = this.buf;\n this.pos += len;\n if (this.pos > buf.length) {\n return;\n }\n return this.buf.slice(pos, pos + len).toString();\n };\n }\n Tap.prototype.skipString = function() {\n var len = this.readLong();\n if (len < 0) {\n this._invalidate();\n return;\n }\n this.pos += len;\n };\n Tap.prototype.writeString = function(s) {\n var len = Buffer2.byteLength(s);\n var buf = this.buf;\n this.writeLong(len);\n var pos = this.pos;\n this.pos += len;\n if (this.pos > buf.length) {\n return;\n }\n if (len > 64 && typeof Buffer2.prototype.utf8Write == \"function\") {\n buf.utf8Write(s, pos, len);\n } else {\n var i, l, c1, c2;\n for (i = 0, l = len; i < l; i++) {\n c1 = s.charCodeAt(i);\n if (c1 < 128) {\n buf[pos++] = c1;\n } else if (c1 < 2048) {\n buf[pos++] = c1 >> 6 | 192;\n buf[pos++] = c1 & 63 | 128;\n } else if ((c1 & 64512) === 55296 && ((c2 = s.charCodeAt(i + 1)) & 64512) === 56320) {\n c1 = 65536 + ((c1 & 1023) << 10) + (c2 & 1023);\n i++;\n buf[pos++] = c1 >> 18 | 240;\n buf[pos++] = c1 >> 12 & 63 | 128;\n buf[pos++] = c1 >> 6 & 63 | 128;\n buf[pos++] = c1 & 63 | 128;\n } else {\n buf[pos++] = c1 >> 12 | 224;\n buf[pos++] = c1 >> 6 & 63 | 128;\n buf[pos++] = c1 & 63 | 128;\n }\n }\n }\n };\n if (typeof Buffer2.prototype.latin1Write == \"function\") {\n Tap.prototype.writeBinary = function(str, len) {\n var pos = this.pos;\n this.pos += len;\n if (this.pos > this.buf.length) {\n return;\n }\n this.buf.latin1Write(str, pos, len);\n };\n } else if (typeof Buffer2.prototype.binaryWrite == \"function\") {\n Tap.prototype.writeBinary = function(str, len) {\n var pos = this.pos;\n this.pos += len;\n if (this.pos > this.buf.length) {\n return;\n }\n this.buf.binaryWrite(str, pos, len);\n };\n } else {\n Tap.prototype.writeBinary = function(s, len) {\n var pos = this.pos;\n this.pos += len;\n if (this.pos > this.buf.length) {\n return;\n }\n this.buf.write(s, pos, len, \"binary\");\n };\n }\n Tap.prototype.matchBoolean = function(tap) {\n return this.buf[this.pos++] - tap.buf[tap.pos++];\n };\n Tap.prototype.matchInt = Tap.prototype.matchLong = function(tap) {\n var n1 = this.readLong();\n var n2 = tap.readLong();\n return n1 === n2 ? 0 : n1 < n2 ? -1 : 1;\n };\n Tap.prototype.matchFloat = function(tap) {\n var n1 = this.readFloat();\n var n2 = tap.readFloat();\n return n1 === n2 ? 0 : n1 < n2 ? -1 : 1;\n };\n Tap.prototype.matchDouble = function(tap) {\n var n1 = this.readDouble();\n var n2 = tap.readDouble();\n return n1 === n2 ? 0 : n1 < n2 ? -1 : 1;\n };\n Tap.prototype.matchFixed = function(tap, len) {\n return this.readFixed(len).compare(tap.readFixed(len));\n };\n Tap.prototype.matchBytes = Tap.prototype.matchString = function(tap) {\n var l1 = this.readLong();\n var p1 = this.pos;\n this.pos += l1;\n var l2 = tap.readLong();\n var p2 = tap.pos;\n tap.pos += l2;\n var b1 = this.buf.slice(p1, this.pos);\n var b2 = tap.buf.slice(p2, tap.pos);\n return b1.compare(b2);\n };\n Tap.prototype.unpackLongBytes = function() {\n var res = newBuffer(8);\n var n = 0;\n var i = 0;\n var j2 = 6;\n var buf = this.buf;\n var b2, neg;\n b2 = buf[this.pos++];\n neg = b2 & 1;\n res.fill(0);\n n |= (b2 & 127) >> 1;\n while (b2 & 128) {\n b2 = buf[this.pos++];\n n |= (b2 & 127) << j2;\n j2 += 7;\n if (j2 >= 8) {\n j2 -= 8;\n res[i++] = n;\n n >>= 8;\n }\n }\n res[i] = n;\n if (neg) {\n invert(res, 8);\n }\n return res;\n };\n Tap.prototype.packLongBytes = function(buf) {\n var neg = (buf[7] & 128) >> 7;\n var res = this.buf;\n var j2 = 1;\n var k2 = 0;\n var m2 = 3;\n var n;\n if (neg) {\n invert(buf, 8);\n n = 1;\n } else {\n n = 0;\n }\n var parts = [\n buf.readUIntLE(0, 3),\n buf.readUIntLE(3, 3),\n buf.readUIntLE(6, 2)\n ];\n while (m2 && !parts[--m2]) {\n }\n while (k2 < m2) {\n n |= parts[k2++] << j2;\n j2 += 24;\n while (j2 > 7) {\n res[this.pos++] = n & 127 | 128;\n n >>= 7;\n j2 -= 7;\n }\n }\n n |= parts[m2] << j2;\n do {\n res[this.pos] = n & 127;\n n >>= 7;\n } while (n && (res[this.pos++] |= 128));\n this.pos++;\n if (neg) {\n invert(buf, 8);\n }\n };\n function invert(buf, len) {\n while (len--) {\n buf[len] = ~buf[len];\n }\n }\n module.exports = {\n abstractFunction,\n addDeprecatedGetters,\n bufferFrom,\n capitalize,\n copyOwnProperties,\n getHash,\n compare,\n getOption,\n impliedNamespace,\n isValidName,\n jsonEnd,\n newBuffer,\n objectValues,\n qualify,\n toMap,\n singleIndexOf,\n hasDuplicates,\n unqualify,\n BufferPool,\n Lcg,\n OrderedQueue,\n Tap\n };\n }\n});\n\n// node_modules/avsc/lib/types.js\nvar require_types = __commonJS({\n \"node_modules/avsc/lib/types.js\"(exports, module) {\n \"use strict\";\n var utils = require_utils();\n var buffer = __import_BUFFER;\n var util = __import_UTIL;\n var Buffer2 = buffer.Buffer;\n var SlowBuffer = buffer.SlowBuffer;\n var Tap = utils.Tap;\n var debug = util.debuglog(\"avsc:types\");\n var f2 = util.format;\n var TYPES = {\n \"array\": ArrayType,\n \"boolean\": BooleanType,\n \"bytes\": BytesType,\n \"double\": DoubleType,\n \"enum\": EnumType,\n \"error\": RecordType,\n \"fixed\": FixedType,\n \"float\": FloatType,\n \"int\": IntType,\n \"long\": LongType,\n \"map\": MapType,\n \"null\": NullType,\n \"record\": RecordType,\n \"string\": StringType\n };\n var RANDOM = new utils.Lcg();\n var TAP = new Tap(new SlowBuffer(1024));\n var LOGICAL_TYPE = null;\n var UNDERLYING_TYPES = [];\n function Type(schema, opts) {\n var type;\n if (LOGICAL_TYPE) {\n type = LOGICAL_TYPE;\n UNDERLYING_TYPES.push([LOGICAL_TYPE, this]);\n LOGICAL_TYPE = null;\n } else {\n type = this;\n }\n this._hash = new Hash();\n this.name = void 0;\n this.aliases = void 0;\n this.doc = schema && schema.doc ? \"\" + schema.doc : void 0;\n if (schema) {\n var name = schema.name;\n var namespace = schema.namespace === void 0 ? opts && opts.namespace : schema.namespace;\n if (name !== void 0) {\n name = maybeQualify(name, namespace);\n if (isPrimitive(name)) {\n throw new Error(f2(\"cannot rename primitive type: %j\", name));\n }\n var registry = opts && opts.registry;\n if (registry) {\n if (registry[name] !== void 0) {\n throw new Error(f2(\"duplicate type name: %s\", name));\n }\n registry[name] = type;\n }\n } else if (opts && opts.noAnonymousTypes) {\n throw new Error(f2(\"missing name property in schema: %j\", schema));\n }\n this.name = name;\n this.aliases = schema.aliases ? schema.aliases.map(function(s) {\n return maybeQualify(s, namespace);\n }) : [];\n }\n }\n Type.forSchema = function(schema, opts) {\n opts = opts || {};\n opts.registry = opts.registry || {};\n var UnionType2 = function(wrapUnions) {\n if (wrapUnions === true) {\n wrapUnions = \"always\";\n } else if (wrapUnions === false) {\n wrapUnions = \"never\";\n } else if (wrapUnions === void 0) {\n wrapUnions = \"auto\";\n } else if (typeof wrapUnions == \"string\") {\n wrapUnions = wrapUnions.toLowerCase();\n }\n switch (wrapUnions) {\n case \"always\":\n return WrappedUnionType;\n case \"never\":\n return UnwrappedUnionType;\n case \"auto\":\n return void 0;\n default:\n throw new Error(f2(\"invalid wrap unions option: %j\", wrapUnions));\n }\n }(opts.wrapUnions);\n if (schema === null) {\n throw new Error('invalid type: null (did you mean \"null\"?)');\n }\n if (Type.isType(schema)) {\n return schema;\n }\n var type;\n if (opts.typeHook && (type = opts.typeHook(schema, opts))) {\n if (!Type.isType(type)) {\n throw new Error(f2(\"invalid typehook return value: %j\", type));\n }\n return type;\n }\n if (typeof schema == \"string\") {\n schema = maybeQualify(schema, opts.namespace);\n type = opts.registry[schema];\n if (type) {\n return type;\n }\n if (isPrimitive(schema)) {\n return opts.registry[schema] = Type.forSchema({ type: schema }, opts);\n }\n throw new Error(f2(\"undefined type name: %s\", schema));\n }\n if (schema.logicalType && opts.logicalTypes && !LOGICAL_TYPE) {\n var DerivedType = opts.logicalTypes[schema.logicalType];\n if (DerivedType) {\n var namespace = opts.namespace;\n var registry = {};\n Object.keys(opts.registry).forEach(function(key) {\n registry[key] = opts.registry[key];\n });\n try {\n debug(\"instantiating logical type for %s\", schema.logicalType);\n return new DerivedType(schema, opts);\n } catch (err) {\n debug(\"failed to instantiate logical type for %s\", schema.logicalType);\n if (opts.assertLogicalTypes) {\n throw err;\n }\n LOGICAL_TYPE = null;\n opts.namespace = namespace;\n opts.registry = registry;\n }\n }\n }\n if (Array.isArray(schema)) {\n var logicalType = LOGICAL_TYPE;\n LOGICAL_TYPE = null;\n var types = schema.map(function(obj) {\n return Type.forSchema(obj, opts);\n });\n if (!UnionType2) {\n UnionType2 = isAmbiguous(types) ? WrappedUnionType : UnwrappedUnionType;\n }\n LOGICAL_TYPE = logicalType;\n type = new UnionType2(types, opts);\n } else {\n type = function(typeName) {\n var Type2 = TYPES[typeName];\n if (Type2 === void 0) {\n throw new Error(f2(\"unknown type: %j\", typeName));\n }\n return new Type2(schema, opts);\n }(schema.type);\n }\n return type;\n };\n Type.forValue = function(val, opts) {\n opts = opts || {};\n opts.emptyArrayType = opts.emptyArrayType || Type.forSchema({\n type: \"array\",\n items: \"null\"\n });\n if (opts.valueHook) {\n var type = opts.valueHook(val, opts);\n if (type !== void 0) {\n if (!Type.isType(type)) {\n throw new Error(f2(\"invalid value hook return value: %j\", type));\n }\n return type;\n }\n }\n switch (typeof val) {\n case \"string\":\n return Type.forSchema(\"string\", opts);\n case \"boolean\":\n return Type.forSchema(\"boolean\", opts);\n case \"number\":\n if ((val | 0) === val) {\n return Type.forSchema(\"int\", opts);\n } else if (Math.abs(val) < 9007199254740991) {\n return Type.forSchema(\"float\", opts);\n }\n return Type.forSchema(\"double\", opts);\n case \"object\":\n if (val === null) {\n return Type.forSchema(\"null\", opts);\n } else if (Array.isArray(val)) {\n if (!val.length) {\n return opts.emptyArrayType;\n }\n return Type.forSchema({\n type: \"array\",\n items: Type.forTypes(\n val.map(function(v2) {\n return Type.forValue(v2, opts);\n }),\n opts\n )\n }, opts);\n } else if (Buffer2.isBuffer(val)) {\n return Type.forSchema(\"bytes\", opts);\n }\n var fieldNames = Object.keys(val);\n if (fieldNames.some(function(s) {\n return !utils.isValidName(s);\n })) {\n return Type.forSchema({\n type: \"map\",\n values: Type.forTypes(fieldNames.map(function(s) {\n return Type.forValue(val[s], opts);\n }), opts)\n }, opts);\n }\n return Type.forSchema({\n type: \"record\",\n fields: fieldNames.map(function(s) {\n return { name: s, type: Type.forValue(val[s], opts) };\n })\n }, opts);\n default:\n throw new Error(f2(\"cannot infer type from: %j\", val));\n }\n };\n Type.forTypes = function(types, opts) {\n if (!types.length) {\n throw new Error(\"no types to combine\");\n }\n if (types.length === 1) {\n return types[0];\n }\n opts = opts || {};\n var expanded = [];\n var numWrappedUnions = 0;\n var isValidWrappedUnion = true;\n types.forEach(function(type) {\n switch (type.typeName) {\n case \"union:unwrapped\":\n isValidWrappedUnion = false;\n expanded = expanded.concat(type.types);\n break;\n case \"union:wrapped\":\n numWrappedUnions++;\n expanded = expanded.concat(type.types);\n break;\n case \"null\":\n expanded.push(type);\n break;\n default:\n isValidWrappedUnion = false;\n expanded.push(type);\n }\n });\n if (numWrappedUnions) {\n if (!isValidWrappedUnion) {\n throw new Error(\"cannot combine wrapped union\");\n }\n var branchTypes = {};\n expanded.forEach(function(type) {\n var name = type.branchName;\n var branchType = branchTypes[name];\n if (!branchType) {\n branchTypes[name] = type;\n } else if (!type.equals(branchType)) {\n throw new Error(\"inconsistent branch type\");\n }\n });\n var wrapUnions = opts.wrapUnions;\n var unionType;\n opts.wrapUnions = true;\n try {\n unionType = Type.forSchema(Object.keys(branchTypes).map(function(name) {\n return branchTypes[name];\n }), opts);\n } catch (err) {\n opts.wrapUnions = wrapUnions;\n throw err;\n }\n opts.wrapUnions = wrapUnions;\n return unionType;\n }\n var bucketized = {};\n expanded.forEach(function(type) {\n var bucket = getTypeBucket(type);\n var bucketTypes = bucketized[bucket];\n if (!bucketTypes) {\n bucketized[bucket] = bucketTypes = [];\n }\n bucketTypes.push(type);\n });\n var buckets = Object.keys(bucketized);\n var augmented = buckets.map(function(bucket) {\n var bucketTypes = bucketized[bucket];\n if (bucketTypes.length === 1) {\n return bucketTypes[0];\n } else {\n switch (bucket) {\n case \"null\":\n case \"boolean\":\n return bucketTypes[0];\n case \"number\":\n return combineNumbers(bucketTypes);\n case \"string\":\n return combineStrings(bucketTypes, opts);\n case \"buffer\":\n return combineBuffers(bucketTypes, opts);\n case \"array\":\n bucketTypes = bucketTypes.filter(function(t) {\n return t !== opts.emptyArrayType;\n });\n if (!bucketTypes.length) {\n return opts.emptyArrayType;\n }\n return Type.forSchema({\n type: \"array\",\n items: Type.forTypes(bucketTypes.map(function(t) {\n return t.itemsType;\n }), opts)\n }, opts);\n default:\n return combineObjects(bucketTypes, opts);\n }\n }\n });\n if (augmented.length === 1) {\n return augmented[0];\n } else {\n return Type.forSchema(augmented, opts);\n }\n };\n Type.isType = function() {\n var l = arguments.length;\n if (!l) {\n return false;\n }\n var any = arguments[0];\n if (!any || typeof any._update != \"function\" || typeof any.fingerprint != \"function\") {\n return false;\n }\n if (l === 1) {\n return true;\n }\n var typeName = any.typeName;\n var i;\n for (i = 1; i < l; i++) {\n if (typeName.indexOf(arguments[i]) === 0) {\n return true;\n }\n }\n return false;\n };\n Type.__reset = function(size) {\n debug(\"resetting type buffer to %d\", size);\n TAP.buf = new SlowBuffer(size);\n };\n Object.defineProperty(Type.prototype, \"branchName\", {\n enumerable: true,\n get: function() {\n var type = Type.isType(this, \"logical\") ? this.underlyingType : this;\n if (type.name) {\n return type.name;\n }\n if (Type.isType(type, \"abstract\")) {\n return type._concreteTypeName;\n }\n return Type.isType(type, \"union\") ? void 0 : type.typeName;\n }\n });\n Type.prototype.clone = function(val, opts) {\n if (opts) {\n opts = {\n coerce: !!opts.coerceBuffers | 0,\n // Coerce JSON to Buffer.\n fieldHook: opts.fieldHook,\n qualifyNames: !!opts.qualifyNames,\n skip: !!opts.skipMissingFields,\n wrap: !!opts.wrapUnions | 0\n // Wrap first match into union.\n };\n return this._copy(val, opts);\n } else {\n return this.fromBuffer(this.toBuffer(val));\n }\n };\n Type.prototype.compare = utils.abstractFunction;\n Type.prototype.compareBuffers = function(buf1, buf2) {\n return this._match(new Tap(buf1), new Tap(buf2));\n };\n Type.prototype.createResolver = function(type, opts) {\n if (!Type.isType(type)) {\n throw new Error(f2(\"not a type: %j\", type));\n }\n if (!Type.isType(this, \"union\", \"logical\") && Type.isType(type, \"logical\")) {\n return this.createResolver(type.underlyingType, opts);\n }\n opts = opts || {};\n opts.registry = opts.registry || {};\n var resolver, key;\n if (Type.isType(this, \"record\", \"error\") && Type.isType(type, \"record\", \"error\")) {\n key = this.name + \":\" + type.name;\n resolver = opts.registry[key];\n if (resolver) {\n return resolver;\n }\n }\n resolver = new Resolver(this);\n if (key) {\n opts.registry[key] = resolver;\n }\n if (Type.isType(type, \"union\")) {\n var resolvers = type.types.map(function(t) {\n return this.createResolver(t, opts);\n }, this);\n resolver._read = function(tap) {\n var index = tap.readLong();\n var resolver2 = resolvers[index];\n if (resolver2 === void 0) {\n throw new Error(f2(\"invalid union index: %s\", index));\n }\n return resolvers[index]._read(tap);\n };\n } else {\n this._update(resolver, type, opts);\n }\n if (!resolver._read) {\n throw new Error(f2(\"cannot read %s as %s\", type, this));\n }\n return Object.freeze(resolver);\n };\n Type.prototype.decode = function(buf, pos, resolver) {\n var tap = new Tap(buf, pos);\n var val = readValue(this, tap, resolver);\n if (!tap.isValid()) {\n return { value: void 0, offset: -1 };\n }\n return { value: val, offset: tap.pos };\n };\n Type.prototype.encode = function(val, buf, pos) {\n var tap = new Tap(buf, pos);\n this._write(tap, val);\n if (!tap.isValid()) {\n return buf.length - tap.pos;\n }\n return tap.pos;\n };\n Type.prototype.equals = function(type, opts) {\n var canon = (\n // Canonical equality.\n Type.isType(type) && this.fingerprint().equals(type.fingerprint())\n );\n if (!canon || !(opts && opts.strict)) {\n return canon;\n }\n return JSON.stringify(this.schema({ exportAttrs: true })) === JSON.stringify(type.schema({ exportAttrs: true }));\n };\n Type.prototype.fingerprint = function(algorithm) {\n if (!algorithm) {\n if (!this._hash.str) {\n var schemaStr = JSON.stringify(this.schema());\n this._hash.str = utils.getHash(schemaStr).toString(\"binary\");\n }\n return utils.bufferFrom(this._hash.str, \"binary\");\n } else {\n return utils.getHash(JSON.stringify(this.schema()), algorithm);\n }\n };\n Type.prototype.fromBuffer = function(buf, resolver, noCheck) {\n var tap = new Tap(buf);\n var val = readValue(this, tap, resolver, noCheck);\n if (!tap.isValid()) {\n throw new Error(\"truncated buffer\");\n }\n if (!noCheck && tap.pos < buf.length) {\n throw new Error(\"trailing data\");\n }\n return val;\n };\n Type.prototype.fromString = function(str) {\n return this._copy(JSON.parse(str), { coerce: 2 });\n };\n Type.prototype.inspect = function() {\n var typeName = this.typeName;\n var className = getClassName(typeName);\n if (isPrimitive(typeName)) {\n return f2(\"<%s>\", className);\n } else {\n var obj = this.schema({ exportAttrs: true, noDeref: true });\n if (typeof obj == \"object\" && !Type.isType(this, \"logical\")) {\n obj.type = void 0;\n }\n return f2(\"<%s %j>\", className, obj);\n }\n };\n Type.prototype.isValid = function(val, opts) {\n var flags = (opts && opts.noUndeclaredFields) | 0;\n var errorHook = opts && opts.errorHook;\n var hook, path;\n if (errorHook) {\n path = [];\n hook = function(any, type) {\n errorHook.call(this, path.slice(), any, type, val);\n };\n }\n return this._check(val, flags, hook, path);\n };\n Type.prototype.random = utils.abstractFunction;\n Type.prototype.schema = function(opts) {\n return this._attrs({\n exportAttrs: !!(opts && opts.exportAttrs),\n noDeref: !!(opts && opts.noDeref)\n });\n };\n Type.prototype.toBuffer = function(val) {\n TAP.pos = 0;\n this._write(TAP, val);\n var buf = utils.newBuffer(TAP.pos);\n if (TAP.isValid()) {\n TAP.buf.copy(buf, 0, 0, TAP.pos);\n } else {\n this._write(new Tap(buf), val);\n }\n return buf;\n };\n Type.prototype.toJSON = function() {\n return this.schema({ exportAttrs: true });\n };\n Type.prototype.toString = function(val) {\n if (val === void 0) {\n return JSON.stringify(this.schema({ noDeref: true }));\n }\n return JSON.stringify(this._copy(val, { coerce: 3 }));\n };\n Type.prototype.wrap = function(val) {\n var Branch = this._branchConstructor;\n return Branch === null ? null : new Branch(val);\n };\n Type.prototype._attrs = function(opts) {\n opts.derefed = opts.derefed || {};\n var name = this.name;\n if (name !== void 0) {\n if (opts.noDeref || opts.derefed[name]) {\n return name;\n }\n opts.derefed[name] = true;\n }\n var schema = {};\n if (this.name !== void 0) {\n schema.name = name;\n }\n schema.type = this.typeName;\n var derefedSchema = this._deref(schema, opts);\n if (derefedSchema !== void 0) {\n schema = derefedSchema;\n }\n if (opts.exportAttrs) {\n if (this.aliases && this.aliases.length) {\n schema.aliases = this.aliases;\n }\n if (this.doc !== void 0) {\n schema.doc = this.doc;\n }\n }\n return schema;\n };\n Type.prototype._createBranchConstructor = function() {\n var name = this.branchName;\n if (name === \"null\") {\n return null;\n }\n var attr = ~name.indexOf(\".\") ? \"this['\" + name + \"']\" : \"this.\" + name;\n var body = \"return function Branch$(val) { \" + attr + \" = val; };\";\n var Branch = new Function(body)();\n Branch.type = this;\n Branch.prototype.unwrap = new Function(\"return \" + attr + \";\");\n Branch.prototype.unwrapped = Branch.prototype.unwrap;\n return Branch;\n };\n Type.prototype._peek = function(tap) {\n var pos = tap.pos;\n var val = this._read(tap);\n tap.pos = pos;\n return val;\n };\n Type.prototype._check = utils.abstractFunction;\n Type.prototype._copy = utils.abstractFunction;\n Type.prototype._deref = utils.abstractFunction;\n Type.prototype._match = utils.abstractFunction;\n Type.prototype._read = utils.abstractFunction;\n Type.prototype._skip = utils.abstractFunction;\n Type.prototype._update = utils.abstractFunction;\n Type.prototype._write = utils.abstractFunction;\n Type.prototype.getAliases = function() {\n return this.aliases;\n };\n Type.prototype.getFingerprint = Type.prototype.fingerprint;\n Type.prototype.getName = function(asBranch) {\n return this.name || !asBranch ? this.name : this.branchName;\n };\n Type.prototype.getSchema = Type.prototype.schema;\n Type.prototype.getTypeName = function() {\n return this.typeName;\n };\n function PrimitiveType(noFreeze) {\n Type.call(this);\n this._branchConstructor = this._createBranchConstructor();\n if (!noFreeze) {\n Object.freeze(this);\n }\n }\n util.inherits(PrimitiveType, Type);\n PrimitiveType.prototype._update = function(resolver, type) {\n if (type.typeName === this.typeName) {\n resolver._read = this._read;\n }\n };\n PrimitiveType.prototype._copy = function(val) {\n this._check(val, void 0, throwInvalidError);\n return val;\n };\n PrimitiveType.prototype._deref = function() {\n return this.typeName;\n };\n PrimitiveType.prototype.compare = utils.compare;\n function NullType() {\n PrimitiveType.call(this);\n }\n util.inherits(NullType, PrimitiveType);\n NullType.prototype._check = function(val, flags, hook) {\n var b2 = val === null;\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n NullType.prototype._read = function() {\n return null;\n };\n NullType.prototype._skip = function() {\n };\n NullType.prototype._write = function(tap, val) {\n if (val !== null) {\n throwInvalidError(val, this);\n }\n };\n NullType.prototype._match = function() {\n return 0;\n };\n NullType.prototype.compare = NullType.prototype._match;\n NullType.prototype.typeName = \"null\";\n NullType.prototype.random = NullType.prototype._read;\n function BooleanType() {\n PrimitiveType.call(this);\n }\n util.inherits(BooleanType, PrimitiveType);\n BooleanType.prototype._check = function(val, flags, hook) {\n var b2 = typeof val == \"boolean\";\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n BooleanType.prototype._read = function(tap) {\n return tap.readBoolean();\n };\n BooleanType.prototype._skip = function(tap) {\n tap.skipBoolean();\n };\n BooleanType.prototype._write = function(tap, val) {\n if (typeof val != \"boolean\") {\n throwInvalidError(val, this);\n }\n tap.writeBoolean(val);\n };\n BooleanType.prototype._match = function(tap1, tap2) {\n return tap1.matchBoolean(tap2);\n };\n BooleanType.prototype.typeName = \"boolean\";\n BooleanType.prototype.random = function() {\n return RANDOM.nextBoolean();\n };\n function IntType() {\n PrimitiveType.call(this);\n }\n util.inherits(IntType, PrimitiveType);\n IntType.prototype._check = function(val, flags, hook) {\n var b2 = val === (val | 0);\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n IntType.prototype._read = function(tap) {\n return tap.readInt();\n };\n IntType.prototype._skip = function(tap) {\n tap.skipInt();\n };\n IntType.prototype._write = function(tap, val) {\n if (val !== (val | 0)) {\n throwInvalidError(val, this);\n }\n tap.writeInt(val);\n };\n IntType.prototype._match = function(tap1, tap2) {\n return tap1.matchInt(tap2);\n };\n IntType.prototype.typeName = \"int\";\n IntType.prototype.random = function() {\n return RANDOM.nextInt(1e3) | 0;\n };\n function LongType() {\n PrimitiveType.call(this);\n }\n util.inherits(LongType, PrimitiveType);\n LongType.prototype._check = function(val, flags, hook) {\n var b2 = typeof val == \"number\" && val % 1 === 0 && isSafeLong(val);\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n LongType.prototype._read = function(tap) {\n var n = tap.readLong();\n if (!isSafeLong(n)) {\n throw new Error(\"potential precision loss\");\n }\n return n;\n };\n LongType.prototype._skip = function(tap) {\n tap.skipLong();\n };\n LongType.prototype._write = function(tap, val) {\n if (typeof val != \"number\" || val % 1 || !isSafeLong(val)) {\n throwInvalidError(val, this);\n }\n tap.writeLong(val);\n };\n LongType.prototype._match = function(tap1, tap2) {\n return tap1.matchLong(tap2);\n };\n LongType.prototype._update = function(resolver, type) {\n switch (type.typeName) {\n case \"int\":\n resolver._read = type._read;\n break;\n case \"abstract:long\":\n case \"long\":\n resolver._read = this._read;\n }\n };\n LongType.prototype.typeName = \"long\";\n LongType.prototype.random = function() {\n return RANDOM.nextInt();\n };\n LongType.__with = function(methods, noUnpack) {\n methods = methods || {};\n var mapping = {\n toBuffer: \"_toBuffer\",\n fromBuffer: \"_fromBuffer\",\n fromJSON: \"_fromJSON\",\n toJSON: \"_toJSON\",\n isValid: \"_isValid\",\n compare: \"compare\"\n };\n var type = new AbstractLongType(noUnpack);\n Object.keys(mapping).forEach(function(name) {\n if (methods[name] === void 0) {\n throw new Error(f2(\"missing method implementation: %s\", name));\n }\n type[mapping[name]] = methods[name];\n });\n return Object.freeze(type);\n };\n function FloatType() {\n PrimitiveType.call(this);\n }\n util.inherits(FloatType, PrimitiveType);\n FloatType.prototype._check = function(val, flags, hook) {\n var b2 = typeof val == \"number\";\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n FloatType.prototype._read = function(tap) {\n return tap.readFloat();\n };\n FloatType.prototype._skip = function(tap) {\n tap.skipFloat();\n };\n FloatType.prototype._write = function(tap, val) {\n if (typeof val != \"number\") {\n throwInvalidError(val, this);\n }\n tap.writeFloat(val);\n };\n FloatType.prototype._match = function(tap1, tap2) {\n return tap1.matchFloat(tap2);\n };\n FloatType.prototype._update = function(resolver, type) {\n switch (type.typeName) {\n case \"float\":\n case \"int\":\n resolver._read = type._read;\n break;\n case \"abstract:long\":\n case \"long\":\n resolver._read = function(tap) {\n return tap.readLong();\n };\n }\n };\n FloatType.prototype.typeName = \"float\";\n FloatType.prototype.random = function() {\n return RANDOM.nextFloat(1e3);\n };\n function DoubleType() {\n PrimitiveType.call(this);\n }\n util.inherits(DoubleType, PrimitiveType);\n DoubleType.prototype._check = function(val, flags, hook) {\n var b2 = typeof val == \"number\";\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n DoubleType.prototype._read = function(tap) {\n return tap.readDouble();\n };\n DoubleType.prototype._skip = function(tap) {\n tap.skipDouble();\n };\n DoubleType.prototype._write = function(tap, val) {\n if (typeof val != \"number\") {\n throwInvalidError(val, this);\n }\n tap.writeDouble(val);\n };\n DoubleType.prototype._match = function(tap1, tap2) {\n return tap1.matchDouble(tap2);\n };\n DoubleType.prototype._update = function(resolver, type) {\n switch (type.typeName) {\n case \"double\":\n case \"float\":\n case \"int\":\n resolver._read = type._read;\n break;\n case \"abstract:long\":\n case \"long\":\n resolver._read = function(tap) {\n return tap.readLong();\n };\n }\n };\n DoubleType.prototype.typeName = \"double\";\n DoubleType.prototype.random = function() {\n return RANDOM.nextFloat();\n };\n function StringType() {\n PrimitiveType.call(this);\n }\n util.inherits(StringType, PrimitiveType);\n StringType.prototype._check = function(val, flags, hook) {\n var b2 = typeof val == \"string\";\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n StringType.prototype._read = function(tap) {\n return tap.readString();\n };\n StringType.prototype._skip = function(tap) {\n tap.skipString();\n };\n StringType.prototype._write = function(tap, val) {\n if (typeof val != \"string\") {\n throwInvalidError(val, this);\n }\n tap.writeString(val);\n };\n StringType.prototype._match = function(tap1, tap2) {\n return tap1.matchString(tap2);\n };\n StringType.prototype._update = function(resolver, type) {\n switch (type.typeName) {\n case \"bytes\":\n case \"string\":\n resolver._read = this._read;\n }\n };\n StringType.prototype.typeName = \"string\";\n StringType.prototype.random = function() {\n return RANDOM.nextString(RANDOM.nextInt(32));\n };\n function BytesType() {\n PrimitiveType.call(this);\n }\n util.inherits(BytesType, PrimitiveType);\n BytesType.prototype._check = function(val, flags, hook) {\n var b2 = Buffer2.isBuffer(val);\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n BytesType.prototype._read = function(tap) {\n return tap.readBytes();\n };\n BytesType.prototype._skip = function(tap) {\n tap.skipBytes();\n };\n BytesType.prototype._write = function(tap, val) {\n if (!Buffer2.isBuffer(val)) {\n throwInvalidError(val, this);\n }\n tap.writeBytes(val);\n };\n BytesType.prototype._match = function(tap1, tap2) {\n return tap1.matchBytes(tap2);\n };\n BytesType.prototype._update = StringType.prototype._update;\n BytesType.prototype._copy = function(obj, opts) {\n var buf;\n switch ((opts && opts.coerce) | 0) {\n case 3:\n this._check(obj, void 0, throwInvalidError);\n return obj.toString(\"binary\");\n case 2:\n if (typeof obj != \"string\") {\n throw new Error(f2(\"cannot coerce to buffer: %j\", obj));\n }\n buf = utils.bufferFrom(obj, \"binary\");\n this._check(buf, void 0, throwInvalidError);\n return buf;\n case 1:\n if (!isJsonBuffer(obj)) {\n throw new Error(f2(\"cannot coerce to buffer: %j\", obj));\n }\n buf = utils.bufferFrom(obj.data);\n this._check(buf, void 0, throwInvalidError);\n return buf;\n default:\n this._check(obj, void 0, throwInvalidError);\n return utils.bufferFrom(obj);\n }\n };\n BytesType.prototype.compare = Buffer2.compare;\n BytesType.prototype.typeName = \"bytes\";\n BytesType.prototype.random = function() {\n return RANDOM.nextBuffer(RANDOM.nextInt(32));\n };\n function UnionType(schema, opts) {\n Type.call(this);\n if (!Array.isArray(schema)) {\n throw new Error(f2(\"non-array union schema: %j\", schema));\n }\n if (!schema.length) {\n throw new Error(\"empty union\");\n }\n this.types = Object.freeze(schema.map(function(obj) {\n return Type.forSchema(obj, opts);\n }));\n this._branchIndices = {};\n this.types.forEach(function(type, i) {\n if (Type.isType(type, \"union\")) {\n throw new Error(\"unions cannot be directly nested\");\n }\n var branch = type.branchName;\n if (this._branchIndices[branch] !== void 0) {\n throw new Error(f2(\"duplicate union branch name: %j\", branch));\n }\n this._branchIndices[branch] = i;\n }, this);\n }\n util.inherits(UnionType, Type);\n UnionType.prototype._branchConstructor = function() {\n throw new Error(\"unions cannot be directly wrapped\");\n };\n UnionType.prototype._skip = function(tap) {\n this.types[tap.readLong()]._skip(tap);\n };\n UnionType.prototype._match = function(tap1, tap2) {\n var n1 = tap1.readLong();\n var n2 = tap2.readLong();\n if (n1 === n2) {\n return this.types[n1]._match(tap1, tap2);\n } else {\n return n1 < n2 ? -1 : 1;\n }\n };\n UnionType.prototype._deref = function(schema, opts) {\n return this.types.map(function(t) {\n return t._attrs(opts);\n });\n };\n UnionType.prototype.getTypes = function() {\n return this.types;\n };\n function UnwrappedUnionType(schema, opts) {\n UnionType.call(this, schema, opts);\n this._dynamicBranches = null;\n this._bucketIndices = {};\n this.types.forEach(function(type, index) {\n if (Type.isType(type, \"abstract\", \"logical\")) {\n if (!this._dynamicBranches) {\n this._dynamicBranches = [];\n }\n this._dynamicBranches.push({ index, type });\n } else {\n var bucket = getTypeBucket(type);\n if (this._bucketIndices[bucket] !== void 0) {\n throw new Error(f2(\"ambiguous unwrapped union: %j\", this));\n }\n this._bucketIndices[bucket] = index;\n }\n }, this);\n Object.freeze(this);\n }\n util.inherits(UnwrappedUnionType, UnionType);\n UnwrappedUnionType.prototype._getIndex = function(val) {\n var index = this._bucketIndices[getValueBucket(val)];\n if (this._dynamicBranches) {\n index = this._getBranchIndex(val, index);\n }\n return index;\n };\n UnwrappedUnionType.prototype._getBranchIndex = function(any, index) {\n var logicalBranches = this._dynamicBranches;\n var i, l, branch;\n for (i = 0, l = logicalBranches.length; i < l; i++) {\n branch = logicalBranches[i];\n if (branch.type._check(any)) {\n if (index === void 0) {\n index = branch.index;\n } else {\n throw new Error(\"ambiguous conversion\");\n }\n }\n }\n return index;\n };\n UnwrappedUnionType.prototype._check = function(val, flags, hook, path) {\n var index = this._getIndex(val);\n var b2 = index !== void 0;\n if (b2) {\n return this.types[index]._check(val, flags, hook, path);\n }\n if (hook) {\n hook(val, this);\n }\n return b2;\n };\n UnwrappedUnionType.prototype._read = function(tap) {\n var index = tap.readLong();\n var branchType = this.types[index];\n if (branchType) {\n return branchType._read(tap);\n } else {\n throw new Error(f2(\"invalid union index: %s\", index));\n }\n };\n UnwrappedUnionType.prototype._write = function(tap, val) {\n var index = this._getIndex(val);\n if (index === void 0) {\n throwInvalidError(val, this);\n }\n tap.writeLong(index);\n if (val !== null) {\n this.types[index]._write(tap, val);\n }\n };\n UnwrappedUnionType.prototype._update = function(resolver, type, opts) {\n var i, l, typeResolver;\n for (i = 0, l = this.types.length; i < l; i++) {\n try {\n typeResolver = this.types[i].createResolver(type, opts);\n } catch (err) {\n continue;\n }\n resolver._read = function(tap) {\n return typeResolver._read(tap);\n };\n return;\n }\n };\n UnwrappedUnionType.prototype._copy = function(val, opts) {\n var coerce = opts && opts.coerce | 0;\n var wrap = opts && opts.wrap | 0;\n var index;\n if (wrap === 2) {\n index = 0;\n } else {\n switch (coerce) {\n case 1:\n if (isJsonBuffer(val) && this._bucketIndices.buffer !== void 0) {\n index = this._bucketIndices.buffer;\n } else {\n index = this._getIndex(val);\n }\n break;\n case 2:\n if (val === null) {\n index = this._bucketIndices[\"null\"];\n } else if (typeof val === \"object\") {\n var keys = Object.keys(val);\n if (keys.length === 1) {\n index = this._branchIndices[keys[0]];\n val = val[keys[0]];\n }\n }\n break;\n default:\n index = this._getIndex(val);\n }\n if (index === void 0) {\n throwInvalidError(val, this);\n }\n }\n var type = this.types[index];\n if (val === null || wrap === 3) {\n return type._copy(val, opts);\n } else {\n switch (coerce) {\n case 3:\n var obj = {};\n obj[type.branchName] = type._copy(val, opts);\n return obj;\n default:\n return type._copy(val, opts);\n }\n }\n };\n UnwrappedUnionType.prototype.compare = function(val1, val2) {\n var index1 = this._getIndex(val1);\n var index2 = this._getIndex(val2);\n if (index1 === void 0) {\n throwInvalidError(val1, this);\n } else if (index2 === void 0) {\n throwInvalidError(val2, this);\n } else if (index1 === index2) {\n return this.types[index1].compare(val1, val2);\n } else {\n return utils.compare(index1, index2);\n }\n };\n UnwrappedUnionType.prototype.typeName = \"union:unwrapped\";\n UnwrappedUnionType.prototype.random = function() {\n var index = RANDOM.nextInt(this.types.length);\n return this.types[index].random();\n };\n function WrappedUnionType(schema, opts) {\n UnionType.call(this, schema, opts);\n Object.freeze(this);\n }\n util.inherits(WrappedUnionType, UnionType);\n WrappedUnionType.prototype._check = function(val, flags, hook, path) {\n var b2 = false;\n if (val === null) {\n b2 = this._branchIndices[\"null\"] !== void 0;\n } else if (typeof val == \"object\") {\n var keys = Object.keys(val);\n if (keys.length === 1) {\n var name = keys[0];\n var index = this._branchIndices[name];\n if (index !== void 0) {\n if (hook) {\n path.push(name);\n b2 = this.types[index]._check(val[name], flags, hook, path);\n path.pop();\n return b2;\n } else {\n return this.types[index]._check(val[name], flags);\n }\n }\n }\n }\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n WrappedUnionType.prototype._read = function(tap) {\n var type = this.types[tap.readLong()];\n if (!type) {\n throw new Error(f2(\"invalid union index\"));\n }\n var Branch = type._branchConstructor;\n if (Branch === null) {\n return null;\n } else {\n return new Branch(type._read(tap));\n }\n };\n WrappedUnionType.prototype._write = function(tap, val) {\n var index, keys, name;\n if (val === null) {\n index = this._branchIndices[\"null\"];\n if (index === void 0) {\n throwInvalidError(val, this);\n }\n tap.writeLong(index);\n } else {\n keys = Object.keys(val);\n if (keys.length === 1) {\n name = keys[0];\n index = this._branchIndices[name];\n }\n if (index === void 0) {\n throwInvalidError(val, this);\n }\n tap.writeLong(index);\n this.types[index]._write(tap, val[name]);\n }\n };\n WrappedUnionType.prototype._update = function(resolver, type, opts) {\n var i, l, typeResolver, Branch;\n for (i = 0, l = this.types.length; i < l; i++) {\n try {\n typeResolver = this.types[i].createResolver(type, opts);\n } catch (err) {\n continue;\n }\n Branch = this.types[i]._branchConstructor;\n if (Branch) {\n resolver._read = function(tap) {\n return new Branch(typeResolver._read(tap));\n };\n } else {\n resolver._read = function() {\n return null;\n };\n }\n return;\n }\n };\n WrappedUnionType.prototype._copy = function(val, opts) {\n var wrap = opts && opts.wrap | 0;\n if (wrap === 2) {\n var firstType = this.types[0];\n if (val === null && firstType.typeName === \"null\") {\n return null;\n }\n return new firstType._branchConstructor(firstType._copy(val, opts));\n }\n if (val === null && this._branchIndices[\"null\"] !== void 0) {\n return null;\n }\n var i, l, obj;\n if (typeof val == \"object\") {\n var keys = Object.keys(val);\n if (keys.length === 1) {\n var name = keys[0];\n i = this._branchIndices[name];\n if (i === void 0 && opts.qualifyNames) {\n var j2, type;\n for (j2 = 0, l = this.types.length; j2 < l; j2++) {\n type = this.types[j2];\n if (type.name && name === utils.unqualify(type.name)) {\n i = j2;\n break;\n }\n }\n }\n if (i !== void 0) {\n obj = this.types[i]._copy(val[name], opts);\n }\n }\n }\n if (wrap === 1 && obj === void 0) {\n i = 0;\n l = this.types.length;\n while (i < l && obj === void 0) {\n try {\n obj = this.types[i]._copy(val, opts);\n } catch (err) {\n i++;\n }\n }\n }\n if (obj !== void 0) {\n return wrap === 3 ? obj : new this.types[i]._branchConstructor(obj);\n }\n throwInvalidError(val, this);\n };\n WrappedUnionType.prototype.compare = function(val1, val2) {\n var name1 = val1 === null ? \"null\" : Object.keys(val1)[0];\n var name2 = val2 === null ? \"null\" : Object.keys(val2)[0];\n var index = this._branchIndices[name1];\n if (name1 === name2) {\n return name1 === \"null\" ? 0 : this.types[index].compare(val1[name1], val2[name1]);\n } else {\n return utils.compare(index, this._branchIndices[name2]);\n }\n };\n WrappedUnionType.prototype.typeName = \"union:wrapped\";\n WrappedUnionType.prototype.random = function() {\n var index = RANDOM.nextInt(this.types.length);\n var type = this.types[index];\n var Branch = type._branchConstructor;\n if (!Branch) {\n return null;\n }\n return new Branch(type.random());\n };\n function EnumType(schema, opts) {\n Type.call(this, schema, opts);\n if (!Array.isArray(schema.symbols) || !schema.symbols.length) {\n throw new Error(f2(\"invalid enum symbols: %j\", schema.symbols));\n }\n this.symbols = Object.freeze(schema.symbols.slice());\n this._indices = {};\n this.symbols.forEach(function(symbol, i) {\n if (!utils.isValidName(symbol)) {\n throw new Error(f2(\"invalid %s symbol: %j\", this, symbol));\n }\n if (this._indices[symbol] !== void 0) {\n throw new Error(f2(\"duplicate %s symbol: %j\", this, symbol));\n }\n this._indices[symbol] = i;\n }, this);\n this.default = schema.default;\n if (this.default !== void 0 && this._indices[this.default] === void 0) {\n throw new Error(f2(\"invalid %s default: %j\", this, this.default));\n }\n this._branchConstructor = this._createBranchConstructor();\n Object.freeze(this);\n }\n util.inherits(EnumType, Type);\n EnumType.prototype._check = function(val, flags, hook) {\n var b2 = this._indices[val] !== void 0;\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n EnumType.prototype._read = function(tap) {\n var index = tap.readLong();\n var symbol = this.symbols[index];\n if (symbol === void 0) {\n throw new Error(f2(\"invalid %s enum index: %s\", this.name, index));\n }\n return symbol;\n };\n EnumType.prototype._skip = function(tap) {\n tap.skipLong();\n };\n EnumType.prototype._write = function(tap, val) {\n var index = this._indices[val];\n if (index === void 0) {\n throwInvalidError(val, this);\n }\n tap.writeLong(index);\n };\n EnumType.prototype._match = function(tap1, tap2) {\n return tap1.matchLong(tap2);\n };\n EnumType.prototype.compare = function(val1, val2) {\n return utils.compare(this._indices[val1], this._indices[val2]);\n };\n EnumType.prototype._update = function(resolver, type, opts) {\n var symbols = this.symbols;\n if (type.typeName === \"enum\" && hasCompatibleName(this, type, !opts.ignoreNamespaces) && (type.symbols.every(function(s) {\n return ~symbols.indexOf(s);\n }) || this.default !== void 0)) {\n resolver.symbols = type.symbols.map(function(s) {\n return this._indices[s] === void 0 ? this.default : s;\n }, this);\n resolver._read = type._read;\n }\n };\n EnumType.prototype._copy = function(val) {\n this._check(val, void 0, throwInvalidError);\n return val;\n };\n EnumType.prototype._deref = function(schema) {\n schema.symbols = this.symbols;\n };\n EnumType.prototype.getSymbols = function() {\n return this.symbols;\n };\n EnumType.prototype.typeName = \"enum\";\n EnumType.prototype.random = function() {\n return RANDOM.choice(this.symbols);\n };\n function FixedType(schema, opts) {\n Type.call(this, schema, opts);\n if (schema.size !== (schema.size | 0) || schema.size < 0) {\n throw new Error(f2(\"invalid %s size\", this.branchName));\n }\n this.size = schema.size | 0;\n this._branchConstructor = this._createBranchConstructor();\n Object.freeze(this);\n }\n util.inherits(FixedType, Type);\n FixedType.prototype._check = function(val, flags, hook) {\n var b2 = Buffer2.isBuffer(val) && val.length === this.size;\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n FixedType.prototype._read = function(tap) {\n return tap.readFixed(this.size);\n };\n FixedType.prototype._skip = function(tap) {\n tap.skipFixed(this.size);\n };\n FixedType.prototype._write = function(tap, val) {\n if (!Buffer2.isBuffer(val) || val.length !== this.size) {\n throwInvalidError(val, this);\n }\n tap.writeFixed(val, this.size);\n };\n FixedType.prototype._match = function(tap1, tap2) {\n return tap1.matchFixed(tap2, this.size);\n };\n FixedType.prototype.compare = Buffer2.compare;\n FixedType.prototype._update = function(resolver, type, opts) {\n if (type.typeName === \"fixed\" && this.size === type.size && hasCompatibleName(this, type, !opts.ignoreNamespaces)) {\n resolver.size = this.size;\n resolver._read = this._read;\n }\n };\n FixedType.prototype._copy = BytesType.prototype._copy;\n FixedType.prototype._deref = function(schema) {\n schema.size = this.size;\n };\n FixedType.prototype.getSize = function() {\n return this.size;\n };\n FixedType.prototype.typeName = \"fixed\";\n FixedType.prototype.random = function() {\n return RANDOM.nextBuffer(this.size);\n };\n function MapType(schema, opts) {\n Type.call(this);\n if (!schema.values) {\n throw new Error(f2(\"missing map values: %j\", schema));\n }\n this.valuesType = Type.forSchema(schema.values, opts);\n this._branchConstructor = this._createBranchConstructor();\n Object.freeze(this);\n }\n util.inherits(MapType, Type);\n MapType.prototype._check = function(val, flags, hook, path) {\n if (!val || typeof val != \"object\" || Array.isArray(val)) {\n if (hook) {\n hook(val, this);\n }\n return false;\n }\n var keys = Object.keys(val);\n var b2 = true;\n var i, l, j2, key;\n if (hook) {\n j2 = path.length;\n path.push(\"\");\n for (i = 0, l = keys.length; i < l; i++) {\n key = path[j2] = keys[i];\n if (!this.valuesType._check(val[key], flags, hook, path)) {\n b2 = false;\n }\n }\n path.pop();\n } else {\n for (i = 0, l = keys.length; i < l; i++) {\n if (!this.valuesType._check(val[keys[i]], flags)) {\n return false;\n }\n }\n }\n return b2;\n };\n MapType.prototype._read = function(tap) {\n var values = this.valuesType;\n var val = {};\n var n;\n while (n = readArraySize(tap)) {\n while (n--) {\n var key = tap.readString();\n val[key] = values._read(tap);\n }\n }\n return val;\n };\n MapType.prototype._skip = function(tap) {\n var values = this.valuesType;\n var len, n;\n while (n = tap.readLong()) {\n if (n < 0) {\n len = tap.readLong();\n tap.pos += len;\n } else {\n while (n--) {\n tap.skipString();\n values._skip(tap);\n }\n }\n }\n };\n MapType.prototype._write = function(tap, val) {\n if (!val || typeof val != \"object\" || Array.isArray(val)) {\n throwInvalidError(val, this);\n }\n var values = this.valuesType;\n var keys = Object.keys(val);\n var n = keys.length;\n var i, key;\n if (n) {\n tap.writeLong(n);\n for (i = 0; i < n; i++) {\n key = keys[i];\n tap.writeString(key);\n values._write(tap, val[key]);\n }\n }\n tap.writeLong(0);\n };\n MapType.prototype._match = function() {\n throw new Error(\"maps cannot be compared\");\n };\n MapType.prototype._update = function(rsv, type, opts) {\n if (type.typeName === \"map\") {\n rsv.valuesType = this.valuesType.createResolver(type.valuesType, opts);\n rsv._read = this._read;\n }\n };\n MapType.prototype._copy = function(val, opts) {\n if (val && typeof val == \"object\" && !Array.isArray(val)) {\n var values = this.valuesType;\n var keys = Object.keys(val);\n var i, l, key;\n var copy = {};\n for (i = 0, l = keys.length; i < l; i++) {\n key = keys[i];\n copy[key] = values._copy(val[key], opts);\n }\n return copy;\n }\n throwInvalidError(val, this);\n };\n MapType.prototype.compare = MapType.prototype._match;\n MapType.prototype.typeName = \"map\";\n MapType.prototype.getValuesType = function() {\n return this.valuesType;\n };\n MapType.prototype.random = function() {\n var val = {};\n var i, l;\n for (i = 0, l = RANDOM.nextInt(10); i < l; i++) {\n val[RANDOM.nextString(RANDOM.nextInt(20))] = this.valuesType.random();\n }\n return val;\n };\n MapType.prototype._deref = function(schema, opts) {\n schema.values = this.valuesType._attrs(opts);\n };\n function ArrayType(schema, opts) {\n Type.call(this);\n if (!schema.items) {\n throw new Error(f2(\"missing array items: %j\", schema));\n }\n this.itemsType = Type.forSchema(schema.items, opts);\n this._branchConstructor = this._createBranchConstructor();\n Object.freeze(this);\n }\n util.inherits(ArrayType, Type);\n ArrayType.prototype._check = function(val, flags, hook, path) {\n if (!Array.isArray(val)) {\n if (hook) {\n hook(val, this);\n }\n return false;\n }\n var items = this.itemsType;\n var b2 = true;\n var i, l, j2;\n if (hook) {\n j2 = path.length;\n path.push(\"\");\n for (i = 0, l = val.length; i < l; i++) {\n path[j2] = \"\" + i;\n if (!items._check(val[i], flags, hook, path)) {\n b2 = false;\n }\n }\n path.pop();\n } else {\n for (i = 0, l = val.length; i < l; i++) {\n if (!items._check(val[i], flags)) {\n return false;\n }\n }\n }\n return b2;\n };\n ArrayType.prototype._read = function(tap) {\n var items = this.itemsType;\n var i = 0;\n var val, n;\n while (n = tap.readLong()) {\n if (n < 0) {\n n = -n;\n tap.skipLong();\n }\n val = val || new Array(n);\n while (n--) {\n val[i++] = items._read(tap);\n }\n }\n return val || [];\n };\n ArrayType.prototype._skip = function(tap) {\n var items = this.itemsType;\n var len, n;\n while (n = tap.readLong()) {\n if (n < 0) {\n len = tap.readLong();\n tap.pos += len;\n } else {\n while (n--) {\n items._skip(tap);\n }\n }\n }\n };\n ArrayType.prototype._write = function(tap, val) {\n if (!Array.isArray(val)) {\n throwInvalidError(val, this);\n }\n var items = this.itemsType;\n var n = val.length;\n var i;\n if (n) {\n tap.writeLong(n);\n for (i = 0; i < n; i++) {\n items._write(tap, val[i]);\n }\n }\n tap.writeLong(0);\n };\n ArrayType.prototype._match = function(tap1, tap2) {\n var n1 = tap1.readLong();\n var n2 = tap2.readLong();\n var f3;\n while (n1 && n2) {\n f3 = this.itemsType._match(tap1, tap2);\n if (f3) {\n return f3;\n }\n if (!--n1) {\n n1 = readArraySize(tap1);\n }\n if (!--n2) {\n n2 = readArraySize(tap2);\n }\n }\n return utils.compare(n1, n2);\n };\n ArrayType.prototype._update = function(resolver, type, opts) {\n if (type.typeName === \"array\") {\n resolver.itemsType = this.itemsType.createResolver(type.itemsType, opts);\n resolver._read = this._read;\n }\n };\n ArrayType.prototype._copy = function(val, opts) {\n if (!Array.isArray(val)) {\n throwInvalidError(val, this);\n }\n var items = new Array(val.length);\n var i, l;\n for (i = 0, l = val.length; i < l; i++) {\n items[i] = this.itemsType._copy(val[i], opts);\n }\n return items;\n };\n ArrayType.prototype._deref = function(schema, opts) {\n schema.items = this.itemsType._attrs(opts);\n };\n ArrayType.prototype.compare = function(val1, val2) {\n var n1 = val1.length;\n var n2 = val2.length;\n var i, l, f3;\n for (i = 0, l = Math.min(n1, n2); i < l; i++) {\n if (f3 = this.itemsType.compare(val1[i], val2[i])) {\n return f3;\n }\n }\n return utils.compare(n1, n2);\n };\n ArrayType.prototype.getItemsType = function() {\n return this.itemsType;\n };\n ArrayType.prototype.typeName = \"array\";\n ArrayType.prototype.random = function() {\n var arr = [];\n var i, l;\n for (i = 0, l = RANDOM.nextInt(10); i < l; i++) {\n arr.push(this.itemsType.random());\n }\n return arr;\n };\n function RecordType(schema, opts) {\n opts = opts || {};\n var namespace = opts.namespace;\n if (schema.namespace !== void 0) {\n opts.namespace = schema.namespace;\n } else if (schema.name) {\n var ns = utils.impliedNamespace(schema.name);\n if (ns !== void 0) {\n opts.namespace = ns;\n }\n }\n Type.call(this, schema, opts);\n if (!Array.isArray(schema.fields)) {\n throw new Error(f2(\"non-array record fields: %j\", schema.fields));\n }\n if (utils.hasDuplicates(schema.fields, function(f3) {\n return f3.name;\n })) {\n throw new Error(f2(\"duplicate field name: %j\", schema.fields));\n }\n this._fieldsByName = {};\n this.fields = Object.freeze(schema.fields.map(function(f3) {\n var field = new Field(f3, opts);\n this._fieldsByName[field.name] = field;\n return field;\n }, this));\n this._branchConstructor = this._createBranchConstructor();\n this._isError = schema.type === \"error\";\n this.recordConstructor = this._createConstructor(\n opts.errorStackTraces,\n opts.omitRecordMethods\n );\n this._read = this._createReader();\n this._skip = this._createSkipper();\n this._write = this._createWriter();\n this._check = this._createChecker();\n opts.namespace = namespace;\n Object.freeze(this);\n }\n util.inherits(RecordType, Type);\n RecordType.prototype._getConstructorName = function() {\n return this.name ? utils.capitalize(utils.unqualify(this.name)) : this._isError ? \"Error$\" : \"Record$\";\n };\n RecordType.prototype._createConstructor = function(errorStack, plainRecords) {\n var outerArgs = [];\n var innerArgs = [];\n var ds = [];\n var innerBody = \"\";\n var i, l, field, name, defaultValue, hasDefault, stackField;\n for (i = 0, l = this.fields.length; i < l; i++) {\n field = this.fields[i];\n defaultValue = field.defaultValue;\n hasDefault = defaultValue() !== void 0;\n name = field.name;\n if (errorStack && this._isError && name === \"stack\" && Type.isType(field.type, \"string\") && !hasDefault) {\n stackField = field;\n }\n innerArgs.push(\"v\" + i);\n innerBody += \" \";\n if (!hasDefault) {\n innerBody += \"this.\" + name + \" = v\" + i + \";\\n\";\n } else {\n innerBody += \"if (v\" + i + \" === undefined) { \";\n innerBody += \"this.\" + name + \" = d\" + ds.length + \"(); \";\n innerBody += \"} else { this.\" + name + \" = v\" + i + \"; }\\n\";\n outerArgs.push(\"d\" + ds.length);\n ds.push(defaultValue);\n }\n }\n if (stackField) {\n innerBody += \" if (this.stack === undefined) { \";\n if (typeof Error.captureStackTrace == \"function\") {\n innerBody += \"Error.captureStackTrace(this, this.constructor);\";\n } else {\n innerBody += \"this.stack = Error().stack;\";\n }\n innerBody += \" }\\n\";\n }\n var outerBody = \"return function \" + this._getConstructorName() + \"(\";\n outerBody += innerArgs.join() + \") {\\n\" + innerBody + \"};\";\n var Record = new Function(outerArgs.join(), outerBody).apply(void 0, ds);\n if (plainRecords) {\n return Record;\n }\n var self = this;\n Record.getType = function() {\n return self;\n };\n Record.type = self;\n if (this._isError) {\n util.inherits(Record, Error);\n Record.prototype.name = this._getConstructorName();\n }\n Record.prototype.clone = function(o) {\n return self.clone(this, o);\n };\n Record.prototype.compare = function(v2) {\n return self.compare(this, v2);\n };\n Record.prototype.isValid = function(o) {\n return self.isValid(this, o);\n };\n Record.prototype.toBuffer = function() {\n return self.toBuffer(this);\n };\n Record.prototype.toString = function() {\n return self.toString(this);\n };\n Record.prototype.wrap = function() {\n return self.wrap(this);\n };\n Record.prototype.wrapped = Record.prototype.wrap;\n return Record;\n };\n RecordType.prototype._createChecker = function() {\n var names = [];\n var values = [];\n var name = this._getConstructorName();\n var body = \"return function check\" + name + \"(v, f, h, p) {\\n\";\n body += \" if (\\n\";\n body += \" v === null ||\\n\";\n body += \" typeof v != 'object' ||\\n\";\n body += \" (f && !this._checkFields(v))\\n\";\n body += \" ) {\\n\";\n body += \" if (h) { h(v, this); }\\n\";\n body += \" return false;\\n\";\n body += \" }\\n\";\n if (!this.fields.length) {\n body += \" return true;\\n\";\n } else {\n for (i = 0, l = this.fields.length; i < l; i++) {\n field = this.fields[i];\n names.push(\"t\" + i);\n values.push(field.type);\n if (field.defaultValue() !== void 0) {\n body += \" var v\" + i + \" = v.\" + field.name + \";\\n\";\n }\n }\n body += \" if (h) {\\n\";\n body += \" var b = 1;\\n\";\n body += \" var j = p.length;\\n\";\n body += \" p.push('');\\n\";\n var i, l, field;\n for (i = 0, l = this.fields.length; i < l; i++) {\n field = this.fields[i];\n body += \" p[j] = '\" + field.name + \"';\\n\";\n body += \" b &= \";\n if (field.defaultValue() === void 0) {\n body += \"t\" + i + \"._check(v.\" + field.name + \", f, h, p);\\n\";\n } else {\n body += \"v\" + i + \" === undefined || \";\n body += \"t\" + i + \"._check(v\" + i + \", f, h, p);\\n\";\n }\n }\n body += \" p.pop();\\n\";\n body += \" return !!b;\\n\";\n body += \" } else {\\n return (\\n \";\n body += this.fields.map(function(field2, i2) {\n return field2.defaultValue() === void 0 ? \"t\" + i2 + \"._check(v.\" + field2.name + \", f)\" : \"(v\" + i2 + \" === undefined || t\" + i2 + \"._check(v\" + i2 + \", f))\";\n }).join(\" &&\\n \");\n body += \"\\n );\\n }\\n\";\n }\n body += \"};\";\n return new Function(names.join(), body).apply(void 0, values);\n };\n RecordType.prototype._createReader = function() {\n var names = [];\n var values = [this.recordConstructor];\n var i, l;\n for (i = 0, l = this.fields.length; i < l; i++) {\n names.push(\"t\" + i);\n values.push(this.fields[i].type);\n }\n var name = this._getConstructorName();\n var body = \"return function read\" + name + \"(t) {\\n\";\n body += \" return new \" + name + \"(\\n \";\n body += names.map(function(s) {\n return s + \"._read(t)\";\n }).join(\",\\n \");\n body += \"\\n );\\n};\";\n names.unshift(name);\n return new Function(names.join(), body).apply(void 0, values);\n };\n RecordType.prototype._createSkipper = function() {\n var args = [];\n var body = \"return function skip\" + this._getConstructorName() + \"(t) {\\n\";\n var values = [];\n var i, l;\n for (i = 0, l = this.fields.length; i < l; i++) {\n args.push(\"t\" + i);\n values.push(this.fields[i].type);\n body += \" t\" + i + \"._skip(t);\\n\";\n }\n body += \"}\";\n return new Function(args.join(), body).apply(void 0, values);\n };\n RecordType.prototype._createWriter = function() {\n var args = [];\n var name = this._getConstructorName();\n var body = \"return function write\" + name + \"(t, v) {\\n\";\n var values = [];\n var i, l, field, value;\n for (i = 0, l = this.fields.length; i < l; i++) {\n field = this.fields[i];\n args.push(\"t\" + i);\n values.push(field.type);\n body += \" \";\n if (field.defaultValue() === void 0) {\n body += \"t\" + i + \"._write(t, v.\" + field.name + \");\\n\";\n } else {\n value = field.type.toBuffer(field.defaultValue()).toString(\"binary\");\n args.push(\"d\" + i);\n values.push(value);\n body += \"var v\" + i + \" = v.\" + field.name + \";\\n\";\n body += \"if (v\" + i + \" === undefined) {\\n\";\n body += \" t.writeBinary(d\" + i + \", \" + value.length + \");\\n\";\n body += \" } else {\\n t\" + i + \"._write(t, v\" + i + \");\\n }\\n\";\n }\n }\n body += \"}\";\n return new Function(args.join(), body).apply(void 0, values);\n };\n RecordType.prototype._update = function(resolver, type, opts) {\n if (!hasCompatibleName(this, type, !opts.ignoreNamespaces)) {\n throw new Error(f2(\"no alias found for %s\", type.name));\n }\n var rFields = this.fields;\n var wFields = type.fields;\n var wFieldsMap = utils.toMap(wFields, function(f3) {\n return f3.name;\n });\n var innerArgs = [];\n var resolvers = {};\n var i, j2, field, name, names, matches, fieldResolver;\n for (i = 0; i < rFields.length; i++) {\n field = rFields[i];\n names = getAliases(field);\n matches = [];\n for (j2 = 0; j2 < names.length; j2++) {\n name = names[j2];\n if (wFieldsMap[name]) {\n matches.push(name);\n }\n }\n if (matches.length > 1) {\n throw new Error(\n f2(\"ambiguous aliasing for %s.%s (%s)\", type.name, field.name, matches)\n );\n }\n if (!matches.length) {\n if (field.defaultValue() === void 0) {\n throw new Error(\n f2(\"no matching field for default-less %s.%s\", type.name, field.name)\n );\n }\n innerArgs.push(\"undefined\");\n } else {\n name = matches[0];\n fieldResolver = {\n resolver: field.type.createResolver(wFieldsMap[name].type, opts),\n name: \"_\" + field.name\n // Reader field name.\n };\n if (!resolvers[name]) {\n resolvers[name] = [fieldResolver];\n } else {\n resolvers[name].push(fieldResolver);\n }\n innerArgs.push(fieldResolver.name);\n }\n }\n var lazyIndex = -1;\n i = wFields.length;\n while (i && resolvers[wFields[--i].name] === void 0) {\n lazyIndex = i;\n }\n var uname = this._getConstructorName();\n var args = [uname];\n var values = [this.recordConstructor];\n var body = \" return function read\" + uname + \"(t, b) {\\n\";\n for (i = 0; i < wFields.length; i++) {\n if (i === lazyIndex) {\n body += \" if (!b) {\\n\";\n }\n field = type.fields[i];\n name = field.name;\n if (resolvers[name] === void 0) {\n body += ~lazyIndex && i >= lazyIndex ? \" \" : \" \";\n args.push(\"r\" + i);\n values.push(field.type);\n body += \"r\" + i + \"._skip(t);\\n\";\n } else {\n j2 = resolvers[name].length;\n while (j2--) {\n body += ~lazyIndex && i >= lazyIndex ? \" \" : \" \";\n args.push(\"r\" + i + \"f\" + j2);\n fieldResolver = resolvers[name][j2];\n values.push(fieldResolver.resolver);\n body += \"var \" + fieldResolver.name + \" = \";\n body += \"r\" + i + \"f\" + j2 + \"._\" + (j2 ? \"peek\" : \"read\") + \"(t);\\n\";\n }\n }\n }\n if (~lazyIndex) {\n body += \" }\\n\";\n }\n body += \" return new \" + uname + \"(\" + innerArgs.join() + \");\\n};\";\n resolver._read = new Function(args.join(), body).apply(void 0, values);\n };\n RecordType.prototype._match = function(tap1, tap2) {\n var fields = this.fields;\n var i, l, field, order, type;\n for (i = 0, l = fields.length; i < l; i++) {\n field = fields[i];\n order = field._order;\n type = field.type;\n if (order) {\n order *= type._match(tap1, tap2);\n if (order) {\n return order;\n }\n } else {\n type._skip(tap1);\n type._skip(tap2);\n }\n }\n return 0;\n };\n RecordType.prototype._checkFields = function(obj) {\n var keys = Object.keys(obj);\n var i, l;\n for (i = 0, l = keys.length; i < l; i++) {\n if (!this._fieldsByName[keys[i]]) {\n return false;\n }\n }\n return true;\n };\n RecordType.prototype._copy = function(val, opts) {\n var hook = opts && opts.fieldHook;\n var values = [void 0];\n var i, l, field, value;\n for (i = 0, l = this.fields.length; i < l; i++) {\n field = this.fields[i];\n value = val[field.name];\n if (value === void 0 && field.hasOwnProperty(\"defaultValue\")) {\n value = field.defaultValue();\n }\n if (opts && !opts.skip || value !== void 0) {\n value = field.type._copy(value, opts);\n }\n if (hook) {\n value = hook(field, value, this);\n }\n values.push(value);\n }\n var Record = this.recordConstructor;\n return new (Record.bind.apply(Record, values))();\n };\n RecordType.prototype._deref = function(schema, opts) {\n schema.fields = this.fields.map(function(field) {\n var fieldType = field.type;\n var fieldSchema = {\n name: field.name,\n type: fieldType._attrs(opts)\n };\n if (opts.exportAttrs) {\n var val = field.defaultValue();\n if (val !== void 0) {\n fieldSchema[\"default\"] = fieldType._copy(val, { coerce: 3, wrap: 3 });\n }\n var fieldOrder = field.order;\n if (fieldOrder !== \"ascending\") {\n fieldSchema.order = fieldOrder;\n }\n var fieldAliases = field.aliases;\n if (fieldAliases.length) {\n fieldSchema.aliases = fieldAliases;\n }\n var fieldDoc = field.doc;\n if (fieldDoc !== void 0) {\n fieldSchema.doc = fieldDoc;\n }\n }\n return fieldSchema;\n });\n };\n RecordType.prototype.compare = function(val1, val2) {\n var fields = this.fields;\n var i, l, field, name, order, type;\n for (i = 0, l = fields.length; i < l; i++) {\n field = fields[i];\n name = field.name;\n order = field._order;\n type = field.type;\n if (order) {\n order *= type.compare(val1[name], val2[name]);\n if (order) {\n return order;\n }\n }\n }\n return 0;\n };\n RecordType.prototype.random = function() {\n var fields = this.fields.map(function(f3) {\n return f3.type.random();\n });\n fields.unshift(void 0);\n var Record = this.recordConstructor;\n return new (Record.bind.apply(Record, fields))();\n };\n RecordType.prototype.field = function(name) {\n return this._fieldsByName[name];\n };\n RecordType.prototype.getField = RecordType.prototype.field;\n RecordType.prototype.getFields = function() {\n return this.fields;\n };\n RecordType.prototype.getRecordConstructor = function() {\n return this.recordConstructor;\n };\n Object.defineProperty(RecordType.prototype, \"typeName\", {\n enumerable: true,\n get: function() {\n return this._isError ? \"error\" : \"record\";\n }\n });\n function LogicalType(schema, opts) {\n this._logicalTypeName = schema.logicalType;\n Type.call(this);\n LOGICAL_TYPE = this;\n try {\n this._underlyingType = Type.forSchema(schema, opts);\n } finally {\n LOGICAL_TYPE = null;\n var l = UNDERLYING_TYPES.length;\n if (l && UNDERLYING_TYPES[l - 1][0] === this) {\n UNDERLYING_TYPES.pop();\n }\n }\n if (Type.isType(this.underlyingType, \"union\")) {\n this._branchConstructor = this.underlyingType._branchConstructor;\n } else {\n this._branchConstructor = this.underlyingType._createBranchConstructor();\n }\n }\n util.inherits(LogicalType, Type);\n Object.defineProperty(LogicalType.prototype, \"typeName\", {\n enumerable: true,\n get: function() {\n return \"logical:\" + this._logicalTypeName;\n }\n });\n Object.defineProperty(LogicalType.prototype, \"underlyingType\", {\n enumerable: true,\n get: function() {\n if (this._underlyingType) {\n return this._underlyingType;\n }\n var i, l, arr;\n for (i = 0, l = UNDERLYING_TYPES.length; i < l; i++) {\n arr = UNDERLYING_TYPES[i];\n if (arr[0] === this) {\n return arr[1];\n }\n }\n }\n });\n LogicalType.prototype.getUnderlyingType = function() {\n return this.underlyingType;\n };\n LogicalType.prototype._read = function(tap) {\n return this._fromValue(this.underlyingType._read(tap));\n };\n LogicalType.prototype._write = function(tap, any) {\n this.underlyingType._write(tap, this._toValue(any));\n };\n LogicalType.prototype._check = function(any, flags, hook, path) {\n try {\n var val = this._toValue(any);\n } catch (err) {\n }\n if (val === void 0) {\n if (hook) {\n hook(any, this);\n }\n return false;\n }\n return this.underlyingType._check(val, flags, hook, path);\n };\n LogicalType.prototype._copy = function(any, opts) {\n var type = this.underlyingType;\n switch (opts && opts.coerce) {\n case 3:\n return type._copy(this._toValue(any), opts);\n case 2:\n return this._fromValue(type._copy(any, opts));\n default:\n return this._fromValue(type._copy(this._toValue(any), opts));\n }\n };\n LogicalType.prototype._update = function(resolver, type, opts) {\n var _fromValue = this._resolve(type, opts);\n if (_fromValue) {\n resolver._read = function(tap) {\n return _fromValue(type._read(tap));\n };\n }\n };\n LogicalType.prototype.compare = function(obj1, obj2) {\n var val1 = this._toValue(obj1);\n var val2 = this._toValue(obj2);\n return this.underlyingType.compare(val1, val2);\n };\n LogicalType.prototype.random = function() {\n return this._fromValue(this.underlyingType.random());\n };\n LogicalType.prototype._deref = function(schema, opts) {\n var type = this.underlyingType;\n var isVisited = type.name !== void 0 && opts.derefed[type.name];\n schema = type._attrs(opts);\n if (!isVisited && opts.exportAttrs) {\n if (typeof schema == \"string\") {\n schema = { type: schema };\n }\n schema.logicalType = this._logicalTypeName;\n this._export(schema);\n }\n return schema;\n };\n LogicalType.prototype._skip = function(tap) {\n this.underlyingType._skip(tap);\n };\n LogicalType.prototype._export = function() {\n };\n LogicalType.prototype._fromValue = utils.abstractFunction;\n LogicalType.prototype._toValue = utils.abstractFunction;\n LogicalType.prototype._resolve = utils.abstractFunction;\n function AbstractLongType(noUnpack) {\n this._concreteTypeName = \"long\";\n PrimitiveType.call(this, true);\n this._noUnpack = !!noUnpack;\n }\n util.inherits(AbstractLongType, LongType);\n AbstractLongType.prototype.typeName = \"abstract:long\";\n AbstractLongType.prototype._check = function(val, flags, hook) {\n var b2 = this._isValid(val);\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n AbstractLongType.prototype._read = function(tap) {\n var buf, pos;\n if (this._noUnpack) {\n pos = tap.pos;\n tap.skipLong();\n buf = tap.buf.slice(pos, tap.pos);\n } else {\n buf = tap.unpackLongBytes(tap);\n }\n if (tap.isValid()) {\n return this._fromBuffer(buf);\n }\n };\n AbstractLongType.prototype._write = function(tap, val) {\n if (!this._isValid(val)) {\n throwInvalidError(val, this);\n }\n var buf = this._toBuffer(val);\n if (this._noUnpack) {\n tap.writeFixed(buf);\n } else {\n tap.packLongBytes(buf);\n }\n };\n AbstractLongType.prototype._copy = function(val, opts) {\n switch (opts && opts.coerce) {\n case 3:\n return this._toJSON(val);\n case 2:\n return this._fromJSON(val);\n default:\n return this._fromJSON(this._toJSON(val));\n }\n };\n AbstractLongType.prototype._deref = function() {\n return \"long\";\n };\n AbstractLongType.prototype._update = function(resolver, type) {\n var self = this;\n switch (type.typeName) {\n case \"int\":\n resolver._read = function(tap) {\n return self._fromJSON(type._read(tap));\n };\n break;\n case \"abstract:long\":\n case \"long\":\n resolver._read = function(tap) {\n return self._read(tap);\n };\n }\n };\n AbstractLongType.prototype.random = function() {\n return this._fromJSON(LongType.prototype.random());\n };\n AbstractLongType.prototype._fromBuffer = utils.abstractFunction;\n AbstractLongType.prototype._toBuffer = utils.abstractFunction;\n AbstractLongType.prototype._fromJSON = utils.abstractFunction;\n AbstractLongType.prototype._toJSON = utils.abstractFunction;\n AbstractLongType.prototype._isValid = utils.abstractFunction;\n AbstractLongType.prototype.compare = utils.abstractFunction;\n function Field(schema, opts) {\n var name = schema.name;\n if (typeof name != \"string\" || !utils.isValidName(name)) {\n throw new Error(f2(\"invalid field name: %s\", name));\n }\n this.name = name;\n this.type = Type.forSchema(schema.type, opts);\n this.aliases = schema.aliases || [];\n this.doc = schema.doc !== void 0 ? \"\" + schema.doc : void 0;\n this._order = function(order) {\n switch (order) {\n case \"ascending\":\n return 1;\n case \"descending\":\n return -1;\n case \"ignore\":\n return 0;\n default:\n throw new Error(f2(\"invalid order: %j\", order));\n }\n }(schema.order === void 0 ? \"ascending\" : schema.order);\n var value = schema[\"default\"];\n if (value !== void 0) {\n var type = this.type;\n var val;\n try {\n val = type._copy(value, { coerce: 2, wrap: 2 });\n } catch (err) {\n var msg = f2(\"incompatible field default %j (%s)\", value, err.message);\n if (Type.isType(type, \"union\")) {\n msg += f2(\n \", union defaults must match the first branch's type (%j)\",\n type.types[0]\n );\n }\n throw new Error(msg);\n }\n if (isPrimitive(type.typeName) && type.typeName !== \"bytes\") {\n this.defaultValue = function() {\n return val;\n };\n } else {\n this.defaultValue = function() {\n return type._copy(val);\n };\n }\n }\n Object.freeze(this);\n }\n Field.prototype.defaultValue = function() {\n };\n Object.defineProperty(Field.prototype, \"order\", {\n enumerable: true,\n get: function() {\n return [\"descending\", \"ignore\", \"ascending\"][this._order + 1];\n }\n });\n Field.prototype.getAliases = function() {\n return this.aliases;\n };\n Field.prototype.getDefault = Field.prototype.defaultValue;\n Field.prototype.getName = function() {\n return this.name;\n };\n Field.prototype.getOrder = function() {\n return this.order;\n };\n Field.prototype.getType = function() {\n return this.type;\n };\n function Resolver(readerType) {\n this._readerType = readerType;\n this._read = null;\n this.itemsType = null;\n this.size = 0;\n this.symbols = null;\n this.valuesType = null;\n }\n Resolver.prototype._peek = Type.prototype._peek;\n Resolver.prototype.inspect = function() {\n return \"\";\n };\n function Hash() {\n this.str = void 0;\n }\n function readValue(type, tap, resolver, lazy) {\n if (resolver) {\n if (resolver._readerType !== type) {\n throw new Error(\"invalid resolver\");\n }\n return resolver._read(tap, lazy);\n } else {\n return type._read(tap);\n }\n }\n function getAliases(obj) {\n var names = {};\n if (obj.name) {\n names[obj.name] = true;\n }\n var aliases = obj.aliases;\n var i, l;\n for (i = 0, l = aliases.length; i < l; i++) {\n names[aliases[i]] = true;\n }\n return Object.keys(names);\n }\n function hasCompatibleName(reader, writer, strict) {\n if (!writer.name) {\n return true;\n }\n var name = strict ? writer.name : utils.unqualify(writer.name);\n var aliases = getAliases(reader);\n var i, l, alias;\n for (i = 0, l = aliases.length; i < l; i++) {\n alias = aliases[i];\n if (!strict) {\n alias = utils.unqualify(alias);\n }\n if (alias === name) {\n return true;\n }\n }\n return false;\n }\n function isPrimitive(typeName) {\n var type = TYPES[typeName];\n return type && type.prototype instanceof PrimitiveType;\n }\n function getClassName(typeName) {\n if (typeName === \"error\") {\n typeName = \"record\";\n } else {\n var match = /^([^:]+):(.*)$/.exec(typeName);\n if (match) {\n if (match[1] === \"union\") {\n typeName = match[2] + \"Union\";\n } else {\n typeName = match[1];\n }\n }\n }\n return utils.capitalize(typeName) + \"Type\";\n }\n function readArraySize(tap) {\n var n = tap.readLong();\n if (n < 0) {\n n = -n;\n tap.skipLong();\n }\n return n;\n }\n function isSafeLong(n) {\n return n >= -9007199254740990 && n <= 9007199254740990;\n }\n function isJsonBuffer(obj) {\n return obj && obj.type === \"Buffer\" && Array.isArray(obj.data);\n }\n function throwInvalidError(val, type) {\n throw new Error(f2(\"invalid %j: %j\", type.schema(), val));\n }\n function maybeQualify(name, ns) {\n var unqualified = utils.unqualify(name);\n return isPrimitive(unqualified) ? unqualified : utils.qualify(name, ns);\n }\n function getTypeBucket(type) {\n var typeName = type.typeName;\n switch (typeName) {\n case \"double\":\n case \"float\":\n case \"int\":\n case \"long\":\n return \"number\";\n case \"bytes\":\n case \"fixed\":\n return \"buffer\";\n case \"enum\":\n return \"string\";\n case \"map\":\n case \"error\":\n case \"record\":\n return \"object\";\n default:\n return typeName;\n }\n }\n function getValueBucket(val) {\n if (val === null) {\n return \"null\";\n }\n var bucket = typeof val;\n if (bucket === \"object\") {\n if (Array.isArray(val)) {\n return \"array\";\n } else if (Buffer2.isBuffer(val)) {\n return \"buffer\";\n }\n }\n return bucket;\n }\n function isAmbiguous(types) {\n var buckets = {};\n var i, l, bucket, type;\n for (i = 0, l = types.length; i < l; i++) {\n type = types[i];\n if (!Type.isType(type, \"logical\")) {\n bucket = getTypeBucket(type);\n if (buckets[bucket]) {\n return true;\n }\n buckets[bucket] = true;\n }\n }\n return false;\n }\n function combineNumbers(types) {\n var typeNames = [\"int\", \"long\", \"float\", \"double\"];\n var superIndex = -1;\n var superType = null;\n var i, l, type, index;\n for (i = 0, l = types.length; i < l; i++) {\n type = types[i];\n index = typeNames.indexOf(type.typeName);\n if (index > superIndex) {\n superIndex = index;\n superType = type;\n }\n }\n return superType;\n }\n function combineStrings(types, opts) {\n var symbols = {};\n var i, l, type, typeSymbols;\n for (i = 0, l = types.length; i < l; i++) {\n type = types[i];\n if (type.typeName === \"string\") {\n return type;\n }\n typeSymbols = type.symbols;\n var j2, m2;\n for (j2 = 0, m2 = typeSymbols.length; j2 < m2; j2++) {\n symbols[typeSymbols[j2]] = true;\n }\n }\n return Type.forSchema({ type: \"enum\", symbols: Object.keys(symbols) }, opts);\n }\n function combineBuffers(types, opts) {\n var size = -1;\n var i, l, type;\n for (i = 0, l = types.length; i < l; i++) {\n type = types[i];\n if (type.typeName === \"bytes\") {\n return type;\n }\n if (size === -1) {\n size = type.size;\n } else if (type.size !== size) {\n size = -2;\n }\n }\n return size < 0 ? Type.forSchema(\"bytes\", opts) : types[0];\n }\n function combineObjects(types, opts) {\n var allTypes = [];\n var fieldTypes = {};\n var fieldDefaults = {};\n var isValidRecord = true;\n var i, l, type, fields;\n for (i = 0, l = types.length; i < l; i++) {\n type = types[i];\n if (type.typeName === \"map\") {\n isValidRecord = false;\n allTypes.push(type.valuesType);\n } else {\n fields = type.fields;\n var j2, m2, field, fieldDefault, fieldName, fieldType;\n for (j2 = 0, m2 = fields.length; j2 < m2; j2++) {\n field = fields[j2];\n fieldName = field.name;\n fieldType = field.type;\n allTypes.push(fieldType);\n if (isValidRecord) {\n if (!fieldTypes[fieldName]) {\n fieldTypes[fieldName] = [];\n }\n fieldTypes[fieldName].push(fieldType);\n fieldDefault = field.defaultValue();\n if (fieldDefault !== void 0) {\n fieldDefaults[fieldName] = fieldDefault;\n }\n }\n }\n }\n }\n if (isValidRecord) {\n var fieldNames = Object.keys(fieldTypes);\n for (i = 0, l = fieldNames.length; i < l; i++) {\n fieldName = fieldNames[i];\n if (fieldTypes[fieldName].length < types.length && fieldDefaults[fieldName] === void 0) {\n if (opts && opts.strictDefaults) {\n isValidRecord = false;\n } else {\n fieldTypes[fieldName].unshift(Type.forSchema(\"null\", opts));\n fieldDefaults[fieldName] = null;\n }\n }\n }\n }\n var schema;\n if (isValidRecord) {\n schema = {\n type: \"record\",\n fields: fieldNames.map(function(s) {\n var fieldType2 = Type.forTypes(fieldTypes[s], opts);\n var fieldDefault2 = fieldDefaults[s];\n if (fieldDefault2 !== void 0 && ~fieldType2.typeName.indexOf(\"union\")) {\n var unionTypes = fieldType2.types.slice();\n var i2, l2;\n for (i2 = 0, l2 = unionTypes.length; i2 < l2; i2++) {\n if (unionTypes[i2].isValid(fieldDefault2)) {\n break;\n }\n }\n if (i2 > 0) {\n var unionType = unionTypes[0];\n unionTypes[0] = unionTypes[i2];\n unionTypes[i2] = unionType;\n fieldType2 = Type.forSchema(unionTypes, opts);\n }\n }\n return {\n name: s,\n type: fieldType2,\n \"default\": fieldDefaults[s]\n };\n })\n };\n } else {\n schema = {\n type: \"map\",\n values: Type.forTypes(allTypes, opts)\n };\n }\n return Type.forSchema(schema, opts);\n }\n module.exports = {\n Type,\n getTypeBucket,\n getValueBucket,\n isPrimitive,\n builtins: function() {\n var types = {\n LogicalType,\n UnwrappedUnionType,\n WrappedUnionType\n };\n var typeNames = Object.keys(TYPES);\n var i, l, typeName;\n for (i = 0, l = typeNames.length; i < l; i++) {\n typeName = typeNames[i];\n types[getClassName(typeName)] = TYPES[typeName];\n }\n return types;\n }()\n };\n }\n});\n\n// node_modules/avsc/lib/containers.js\nvar require_containers = __commonJS({\n \"node_modules/avsc/lib/containers.js\"(exports, module) {\n \"use strict\";\n var types = require_types();\n var utils = require_utils();\n var buffer = __import_BUFFER;\n var stream = __import_STREAM;\n var util = __import_UTIL;\n var zlib = __import_ZLIB;\n var Buffer2 = buffer.Buffer;\n var OPTS = { namespace: \"org.apache.avro.file\" };\n var LONG_TYPE = types.Type.forSchema(\"long\", OPTS);\n var MAP_BYTES_TYPE = types.Type.forSchema({ type: \"map\", values: \"bytes\" }, OPTS);\n var HEADER_TYPE = types.Type.forSchema({\n name: \"Header\",\n type: \"record\",\n fields: [\n { name: \"magic\", type: { type: \"fixed\", name: \"Magic\", size: 4 } },\n { name: \"meta\", type: MAP_BYTES_TYPE },\n { name: \"sync\", type: { type: \"fixed\", name: \"Sync\", size: 16 } }\n ]\n }, OPTS);\n var BLOCK_TYPE = types.Type.forSchema({\n name: \"Block\",\n type: \"record\",\n fields: [\n { name: \"count\", type: \"long\" },\n { name: \"data\", type: \"bytes\" },\n { name: \"sync\", type: \"Sync\" }\n ]\n }, OPTS);\n var MAGIC_BYTES = utils.bufferFrom(\"Obj\u0001\");\n var f2 = util.format;\n var Tap = utils.Tap;\n function RawDecoder(schema, opts) {\n opts = opts || {};\n var noDecode = !!opts.noDecode;\n stream.Duplex.call(this, {\n readableObjectMode: !noDecode,\n allowHalfOpen: false\n });\n this._type = types.Type.forSchema(schema);\n this._tap = new Tap(utils.newBuffer(0));\n this._writeCb = null;\n this._needPush = false;\n this._readValue = createReader(noDecode, this._type);\n this._finished = false;\n this.on(\"finish\", function() {\n this._finished = true;\n this._read();\n });\n }\n util.inherits(RawDecoder, stream.Duplex);\n RawDecoder.prototype._write = function(chunk, encoding, cb) {\n this._writeCb = cb;\n var tap = this._tap;\n tap.buf = Buffer2.concat([tap.buf.slice(tap.pos), chunk]);\n tap.pos = 0;\n if (this._needPush) {\n this._needPush = false;\n this._read();\n }\n };\n RawDecoder.prototype._read = function() {\n this._needPush = false;\n var tap = this._tap;\n var pos = tap.pos;\n var val = this._readValue(tap);\n if (tap.isValid()) {\n this.push(val);\n } else if (!this._finished) {\n tap.pos = pos;\n this._needPush = true;\n if (this._writeCb) {\n this._writeCb();\n }\n } else {\n this.push(null);\n }\n };\n function BlockDecoder(opts) {\n opts = opts || {};\n var noDecode = !!opts.noDecode;\n stream.Duplex.call(this, {\n allowHalfOpen: true,\n // For async decompressors.\n readableObjectMode: !noDecode\n });\n this._rType = opts.readerSchema !== void 0 ? types.Type.forSchema(opts.readerSchema) : void 0;\n this._wType = null;\n this._codecs = opts.codecs;\n this._codec = void 0;\n this._parseHook = opts.parseHook;\n this._tap = new Tap(utils.newBuffer(0));\n this._blockTap = new Tap(utils.newBuffer(0));\n this._syncMarker = null;\n this._readValue = null;\n this._noDecode = noDecode;\n this._queue = new utils.OrderedQueue();\n this._decompress = null;\n this._index = 0;\n this._remaining = void 0;\n this._needPush = false;\n this._finished = false;\n this.on(\"finish\", function() {\n this._finished = true;\n if (this._needPush) {\n this._read();\n }\n });\n }\n util.inherits(BlockDecoder, stream.Duplex);\n BlockDecoder.defaultCodecs = function() {\n return {\n \"null\": function(buf, cb) {\n cb(null, buf);\n },\n \"deflate\": zlib.inflateRaw\n };\n };\n BlockDecoder.getDefaultCodecs = BlockDecoder.defaultCodecs;\n BlockDecoder.prototype._decodeHeader = function() {\n var tap = this._tap;\n if (tap.buf.length < MAGIC_BYTES.length) {\n return false;\n }\n if (!MAGIC_BYTES.equals(tap.buf.slice(0, MAGIC_BYTES.length))) {\n this.emit(\"error\", new Error(\"invalid magic bytes\"));\n return false;\n }\n var header = HEADER_TYPE._read(tap);\n if (!tap.isValid()) {\n return false;\n }\n this._codec = (header.meta[\"avro.codec\"] || \"null\").toString();\n var codecs = this._codecs || BlockDecoder.getDefaultCodecs();\n this._decompress = codecs[this._codec];\n if (!this._decompress) {\n this.emit(\"error\", new Error(f2(\"unknown codec: %s\", this._codec)));\n return;\n }\n try {\n var schema = JSON.parse(header.meta[\"avro.schema\"].toString());\n if (this._parseHook) {\n schema = this._parseHook(schema);\n }\n this._wType = types.Type.forSchema(schema);\n } catch (err) {\n this.emit(\"error\", err);\n return;\n }\n try {\n this._readValue = createReader(this._noDecode, this._wType, this._rType);\n } catch (err) {\n this.emit(\"error\", err);\n return;\n }\n this._syncMarker = header.sync;\n this.emit(\"metadata\", this._wType, this._codec, header);\n return true;\n };\n BlockDecoder.prototype._write = function(chunk, encoding, cb) {\n var tap = this._tap;\n tap.buf = Buffer2.concat([tap.buf, chunk]);\n tap.pos = 0;\n if (!this._decodeHeader()) {\n process.nextTick(cb);\n return;\n }\n this._write = this._writeChunk;\n this._write(utils.newBuffer(0), encoding, cb);\n };\n BlockDecoder.prototype._writeChunk = function(chunk, encoding, cb) {\n var tap = this._tap;\n tap.buf = Buffer2.concat([tap.buf.slice(tap.pos), chunk]);\n tap.pos = 0;\n var nBlocks = 1;\n var block;\n while (block = tryReadBlock(tap)) {\n if (!this._syncMarker.equals(block.sync)) {\n this.emit(\"error\", new Error(\"invalid sync marker\"));\n return;\n }\n nBlocks++;\n this._decompress(\n block.data,\n this._createBlockCallback(block.data.length, block.count, chunkCb)\n );\n }\n chunkCb();\n function chunkCb() {\n if (!--nBlocks) {\n cb();\n }\n }\n };\n BlockDecoder.prototype._createBlockCallback = function(size, count, cb) {\n var self = this;\n var index = this._index++;\n return function(cause, data) {\n if (cause) {\n var err = new Error(f2(\"%s codec decompression error\", self._codec));\n err.cause = cause;\n self.emit(\"error\", err);\n cb();\n } else {\n self.emit(\"block\", new BlockInfo(count, data.length, size));\n self._queue.push(new BlockData(index, data, cb, count));\n if (self._needPush) {\n self._read();\n }\n }\n };\n };\n BlockDecoder.prototype._read = function() {\n this._needPush = false;\n var tap = this._blockTap;\n if (!this._remaining) {\n var data = this._queue.pop();\n if (!data || !data.count) {\n if (this._finished) {\n this.push(null);\n } else {\n this._needPush = true;\n }\n if (data) {\n data.cb();\n }\n return;\n }\n data.cb();\n this._remaining = data.count;\n tap.buf = data.buf;\n tap.pos = 0;\n }\n this._remaining--;\n var val;\n try {\n val = this._readValue(tap);\n if (!tap.isValid()) {\n throw new Error(\"truncated block\");\n }\n } catch (err) {\n this._remaining = 0;\n this.emit(\"error\", err);\n return;\n }\n this.push(val);\n };\n function RawEncoder(schema, opts) {\n opts = opts || {};\n stream.Transform.call(this, {\n writableObjectMode: true,\n allowHalfOpen: false\n });\n this._type = types.Type.forSchema(schema);\n this._writeValue = function(tap, val) {\n try {\n this._type._write(tap, val);\n } catch (err) {\n this.emit(\"typeError\", err, val, this._type);\n }\n };\n this._tap = new Tap(utils.newBuffer(opts.batchSize || 65536));\n this.on(\"typeError\", function(err) {\n this.emit(\"error\", err);\n });\n }\n util.inherits(RawEncoder, stream.Transform);\n RawEncoder.prototype._transform = function(val, encoding, cb) {\n var tap = this._tap;\n var buf = tap.buf;\n var pos = tap.pos;\n this._writeValue(tap, val);\n if (!tap.isValid()) {\n if (pos) {\n this.push(copyBuffer(tap.buf, 0, pos));\n }\n var len = tap.pos - pos;\n if (len > buf.length) {\n tap.buf = utils.newBuffer(2 * len);\n }\n tap.pos = 0;\n this._writeValue(tap, val);\n }\n cb();\n };\n RawEncoder.prototype._flush = function(cb) {\n var tap = this._tap;\n var pos = tap.pos;\n if (pos) {\n this.push(tap.buf.slice(0, pos));\n }\n cb();\n };\n function BlockEncoder(schema, opts) {\n opts = opts || {};\n stream.Duplex.call(this, {\n allowHalfOpen: true,\n // To support async compressors.\n writableObjectMode: true\n });\n var type;\n if (types.Type.isType(schema)) {\n type = schema;\n schema = void 0;\n } else {\n type = types.Type.forSchema(schema);\n }\n this._schema = schema;\n this._type = type;\n this._writeValue = function(tap, val) {\n try {\n this._type._write(tap, val);\n } catch (err) {\n this.emit(\"typeError\", err, val, this._type);\n return false;\n }\n return true;\n };\n this._blockSize = opts.blockSize || 65536;\n this._tap = new Tap(utils.newBuffer(this._blockSize));\n this._codecs = opts.codecs;\n this._codec = opts.codec || \"null\";\n this._blockCount = 0;\n this._syncMarker = opts.syncMarker || new utils.Lcg().nextBuffer(16);\n this._queue = new utils.OrderedQueue();\n this._pending = 0;\n this._finished = false;\n this._needHeader = false;\n this._needPush = false;\n this._metadata = opts.metadata || {};\n if (!MAP_BYTES_TYPE.isValid(this._metadata)) {\n throw new Error(\"invalid metadata\");\n }\n var codec = this._codec;\n this._compress = (this._codecs || BlockEncoder.getDefaultCodecs())[codec];\n if (!this._compress) {\n throw new Error(f2(\"unsupported codec: %s\", codec));\n }\n if (opts.omitHeader !== void 0) {\n opts.writeHeader = opts.omitHeader ? \"never\" : \"auto\";\n }\n switch (opts.writeHeader) {\n case false:\n case \"never\":\n break;\n case void 0:\n case \"auto\":\n this._needHeader = true;\n break;\n default:\n this._writeHeader();\n }\n this.on(\"finish\", function() {\n this._finished = true;\n if (this._blockCount) {\n this._flushChunk();\n } else if (this._finished && this._needPush) {\n this.push(null);\n }\n });\n this.on(\"typeError\", function(err) {\n this.emit(\"error\", err);\n });\n }\n util.inherits(BlockEncoder, stream.Duplex);\n BlockEncoder.defaultCodecs = function() {\n return {\n \"null\": function(buf, cb) {\n cb(null, buf);\n },\n \"deflate\": zlib.deflateRaw\n };\n };\n BlockEncoder.getDefaultCodecs = BlockEncoder.defaultCodecs;\n BlockEncoder.prototype._writeHeader = function() {\n var schema = JSON.stringify(\n this._schema ? this._schema : this._type.getSchema({ exportAttrs: true })\n );\n var meta = utils.copyOwnProperties(\n this._metadata,\n { \"avro.schema\": utils.bufferFrom(schema), \"avro.codec\": utils.bufferFrom(this._codec) },\n true\n // Overwrite.\n );\n var Header = HEADER_TYPE.getRecordConstructor();\n var header = new Header(MAGIC_BYTES, meta, this._syncMarker);\n this.push(header.toBuffer());\n };\n BlockEncoder.prototype._write = function(val, encoding, cb) {\n if (this._needHeader) {\n this._writeHeader();\n this._needHeader = false;\n }\n var tap = this._tap;\n var pos = tap.pos;\n var flushing = false;\n if (this._writeValue(tap, val)) {\n if (!tap.isValid()) {\n if (pos) {\n this._flushChunk(pos, cb);\n flushing = true;\n }\n var len = tap.pos - pos;\n if (len > this._blockSize) {\n this._blockSize = len * 2;\n }\n tap.buf = utils.newBuffer(this._blockSize);\n tap.pos = 0;\n this._writeValue(tap, val);\n }\n this._blockCount++;\n } else {\n tap.pos = pos;\n }\n if (!flushing) {\n cb();\n }\n };\n BlockEncoder.prototype._flushChunk = function(pos, cb) {\n var tap = this._tap;\n pos = pos || tap.pos;\n this._compress(tap.buf.slice(0, pos), this._createBlockCallback(pos, cb));\n this._blockCount = 0;\n };\n BlockEncoder.prototype._read = function() {\n var self = this;\n var data = this._queue.pop();\n if (!data) {\n if (this._finished && !this._pending) {\n process.nextTick(function() {\n self.push(null);\n });\n } else {\n this._needPush = true;\n }\n return;\n }\n this.push(LONG_TYPE.toBuffer(data.count, true));\n this.push(LONG_TYPE.toBuffer(data.buf.length, true));\n this.push(data.buf);\n this.push(this._syncMarker);\n if (!this._finished) {\n data.cb();\n }\n };\n BlockEncoder.prototype._createBlockCallback = function(size, cb) {\n var self = this;\n var index = this._index++;\n var count = this._blockCount;\n this._pending++;\n return function(cause, data) {\n if (cause) {\n var err = new Error(f2(\"%s codec compression error\", self._codec));\n err.cause = cause;\n self.emit(\"error\", err);\n return;\n }\n self._pending--;\n self.emit(\"block\", new BlockInfo(count, size, data.length));\n self._queue.push(new BlockData(index, data, cb, count));\n if (self._needPush) {\n self._needPush = false;\n self._read();\n }\n };\n };\n function BlockInfo(count, raw, compressed) {\n this.valueCount = count;\n this.rawDataLength = raw;\n this.compressedDataLength = compressed;\n }\n function BlockData(index, buf, cb, count) {\n this.index = index;\n this.buf = buf;\n this.cb = cb;\n this.count = count | 0;\n }\n function tryReadBlock(tap) {\n var pos = tap.pos;\n var block = BLOCK_TYPE._read(tap);\n if (!tap.isValid()) {\n tap.pos = pos;\n return null;\n }\n return block;\n }\n function createReader(noDecode, writerType, readerType) {\n if (noDecode) {\n return /* @__PURE__ */ function(skipper) {\n return function(tap) {\n var pos = tap.pos;\n skipper(tap);\n return tap.buf.slice(pos, tap.pos);\n };\n }(writerType._skip);\n } else if (readerType) {\n var resolver = readerType.createResolver(writerType);\n return function(tap) {\n return resolver._read(tap);\n };\n } else {\n return function(tap) {\n return writerType._read(tap);\n };\n }\n }\n function copyBuffer(buf, pos, len) {\n var copy = utils.newBuffer(len);\n buf.copy(copy, 0, pos, pos + len);\n return copy;\n }\n module.exports = {\n BLOCK_TYPE,\n // For tests.\n HEADER_TYPE,\n // Idem.\n MAGIC_BYTES,\n // Idem.\n streams: {\n BlockDecoder,\n BlockEncoder,\n RawDecoder,\n RawEncoder\n }\n };\n }\n});\n\n// node_modules/avsc/lib/services.js\nvar require_services = __commonJS({\n \"node_modules/avsc/lib/services.js\"(exports, module) {\n \"use strict\";\n var types = require_types();\n var utils = require_utils();\n var buffer = __import_BUFFER;\n var events = __import_EVENTS;\n var stream = __import_STREAM;\n var util = __import_UTIL;\n var Buffer2 = buffer.Buffer;\n var Tap = utils.Tap;\n var Type = types.Type;\n var debug = util.debuglog(\"avsc:services\");\n var f2 = util.format;\n var OPTS = { namespace: \"org.apache.avro.ipc\" };\n var BOOLEAN_TYPE = Type.forSchema(\"boolean\", OPTS);\n var MAP_BYTES_TYPE = Type.forSchema({ type: \"map\", values: \"bytes\" }, OPTS);\n var STRING_TYPE = Type.forSchema(\"string\", OPTS);\n var HANDSHAKE_REQUEST_TYPE = Type.forSchema({\n name: \"HandshakeRequest\",\n type: \"record\",\n fields: [\n { name: \"clientHash\", type: { name: \"MD5\", type: \"fixed\", size: 16 } },\n { name: \"clientProtocol\", type: [\"null\", \"string\"], \"default\": null },\n { name: \"serverHash\", type: \"MD5\" },\n { name: \"meta\", type: [\"null\", MAP_BYTES_TYPE], \"default\": null }\n ]\n }, OPTS);\n var HANDSHAKE_RESPONSE_TYPE = Type.forSchema({\n name: \"HandshakeResponse\",\n type: \"record\",\n fields: [\n {\n name: \"match\",\n type: {\n name: \"HandshakeMatch\",\n type: \"enum\",\n symbols: [\"BOTH\", \"CLIENT\", \"NONE\"]\n }\n },\n { name: \"serverProtocol\", type: [\"null\", \"string\"], \"default\": null },\n { name: \"serverHash\", type: [\"null\", \"MD5\"], \"default\": null },\n { name: \"meta\", type: [\"null\", MAP_BYTES_TYPE], \"default\": null }\n ]\n }, OPTS);\n var PREFIX_LENGTH = 16;\n var PING_MESSAGE = new Message(\n \"\",\n // Empty name (invalid for other \"normal\" messages).\n Type.forSchema({ name: \"PingRequest\", type: \"record\", fields: [] }, OPTS),\n Type.forSchema([\"string\"], OPTS),\n Type.forSchema(\"null\", OPTS)\n );\n function Message(name, reqType, errType, resType, oneWay, doc) {\n this.name = name;\n if (!Type.isType(reqType, \"record\")) {\n throw new Error(\"invalid request type\");\n }\n this.requestType = reqType;\n if (!Type.isType(errType, \"union\") || !Type.isType(errType.getTypes()[0], \"string\")) {\n throw new Error(\"invalid error type\");\n }\n this.errorType = errType;\n if (oneWay) {\n if (!Type.isType(resType, \"null\") || errType.getTypes().length > 1) {\n throw new Error(\"inapplicable one-way parameter\");\n }\n }\n this.responseType = resType;\n this.oneWay = !!oneWay;\n this.doc = doc !== void 0 ? \"\" + doc : void 0;\n Object.freeze(this);\n }\n Message.forSchema = function(name, schema, opts) {\n opts = opts || {};\n if (!utils.isValidName(name)) {\n throw new Error(f2(\"invalid message name: %s\", name));\n }\n if (!Array.isArray(schema.request)) {\n throw new Error(f2(\"invalid message request: %s\", name));\n }\n var recordName = f2(\"%s.%sRequest\", OPTS.namespace, utils.capitalize(name));\n var reqType = Type.forSchema({\n name: recordName,\n type: \"record\",\n namespace: opts.namespace || \"\",\n // Don't leak request namespace.\n fields: schema.request\n }, opts);\n delete opts.registry[recordName];\n if (!schema.response) {\n throw new Error(f2(\"invalid message response: %s\", name));\n }\n var resType = Type.forSchema(schema.response, opts);\n if (schema.errors !== void 0 && !Array.isArray(schema.errors)) {\n throw new Error(f2(\"invalid message errors: %s\", name));\n }\n var errType = Type.forSchema([\"string\"].concat(schema.errors || []), opts);\n var oneWay = !!schema[\"one-way\"];\n return new Message(name, reqType, errType, resType, oneWay, schema.doc);\n };\n Message.prototype.schema = Type.prototype.getSchema;\n Message.prototype._attrs = function(opts) {\n var reqSchema = this.requestType._attrs(opts);\n var schema = {\n request: reqSchema.fields,\n response: this.responseType._attrs(opts)\n };\n var msgDoc = this.doc;\n if (msgDoc !== void 0) {\n schema.doc = msgDoc;\n }\n var errSchema = this.errorType._attrs(opts);\n if (errSchema.length > 1) {\n schema.errors = errSchema.slice(1);\n }\n if (this.oneWay) {\n schema[\"one-way\"] = true;\n }\n return schema;\n };\n utils.addDeprecatedGetters(\n Message,\n [\"name\", \"errorType\", \"requestType\", \"responseType\"]\n );\n Message.prototype.isOneWay = util.deprecate(\n function() {\n return this.oneWay;\n },\n \"use `.oneWay` directly instead of `.isOneWay()`\"\n );\n function Service(name, messages, types2, ptcl, server) {\n if (typeof name != \"string\") {\n return Service.forProtocol(name, messages);\n }\n this.name = name;\n this._messagesByName = messages || {};\n this.messages = Object.freeze(utils.objectValues(this._messagesByName));\n this._typesByName = types2 || {};\n this.types = Object.freeze(utils.objectValues(this._typesByName));\n this.protocol = ptcl;\n this._hashStr = utils.getHash(JSON.stringify(ptcl)).toString(\"binary\");\n this.doc = ptcl.doc ? \"\" + ptcl.doc : void 0;\n this._server = server || this.createServer({ silent: true });\n Object.freeze(this);\n }\n Service.Client = Client;\n Service.Server = Server;\n Service.compatible = function(clientSvc, serverSvc) {\n try {\n createReaders(clientSvc, serverSvc);\n } catch (err) {\n return false;\n }\n return true;\n };\n Service.forProtocol = function(ptcl, opts) {\n opts = opts || {};\n var name = ptcl.protocol;\n if (!name) {\n throw new Error(\"missing protocol name\");\n }\n if (ptcl.namespace !== void 0) {\n opts.namespace = ptcl.namespace;\n } else {\n var match = /^(.*)\\.[^.]+$/.exec(name);\n if (match) {\n opts.namespace = match[1];\n }\n }\n name = utils.qualify(name, opts.namespace);\n if (ptcl.types) {\n ptcl.types.forEach(function(obj) {\n Type.forSchema(obj, opts);\n });\n }\n var msgs;\n if (ptcl.messages) {\n msgs = {};\n Object.keys(ptcl.messages).forEach(function(key) {\n msgs[key] = Message.forSchema(key, ptcl.messages[key], opts);\n });\n }\n return new Service(name, msgs, opts.registry, ptcl);\n };\n Service.isService = function(any) {\n return !!any && any.hasOwnProperty(\"_hashStr\");\n };\n Service.prototype.createClient = function(opts) {\n var client = new Client(this, opts);\n process.nextTick(function() {\n if (opts && opts.server) {\n var obj = { objectMode: true };\n var pts = [new stream.PassThrough(obj), new stream.PassThrough(obj)];\n opts.server.createChannel({ readable: pts[0], writable: pts[1] }, obj);\n client.createChannel({ readable: pts[1], writable: pts[0] }, obj);\n } else if (opts && opts.transport) {\n client.createChannel(opts.transport);\n }\n });\n return client;\n };\n Service.prototype.createServer = function(opts) {\n return new Server(this, opts);\n };\n Object.defineProperty(Service.prototype, \"hash\", {\n enumerable: true,\n get: function() {\n return utils.bufferFrom(this._hashStr, \"binary\");\n }\n });\n Service.prototype.message = function(name) {\n return this._messagesByName[name];\n };\n Service.prototype.type = function(name) {\n return this._typesByName[name];\n };\n Service.prototype.inspect = function() {\n return f2(\"\", this.name);\n };\n utils.addDeprecatedGetters(\n Service,\n [\"message\", \"messages\", \"name\", \"type\", \"types\"]\n );\n Service.prototype.createEmitter = util.deprecate(\n function(transport, opts) {\n opts = opts || {};\n var client = this.createClient({\n cache: opts.cache,\n buffering: false,\n strictTypes: opts.strictErrors,\n timeout: opts.timeout\n });\n var channel = client.createChannel(transport, opts);\n forwardErrors(client, channel);\n return channel;\n },\n \"use `.createClient()` instead of `.createEmitter()`\"\n );\n Service.prototype.createListener = util.deprecate(\n function(transport, opts) {\n if (opts && opts.strictErrors) {\n throw new Error(\"use `.createServer()` to support strict errors\");\n }\n return this._server.createChannel(transport, opts);\n },\n \"use `.createServer().createChannel()` instead of `.createListener()`\"\n );\n Service.prototype.emit = util.deprecate(\n function(name, req, channel, cb) {\n if (!channel || !this.equals(channel.client._svc$)) {\n throw new Error(\"invalid emitter\");\n }\n var client = channel.client;\n Client.prototype.emitMessage.call(client, name, req, cb && cb.bind(this));\n return channel.getPending();\n },\n \"create a client via `.createClient()` to emit messages instead of `.emit()`\"\n );\n Service.prototype.equals = util.deprecate(\n function(any) {\n return Service.isService(any) && this.getFingerprint().equals(any.getFingerprint());\n },\n \"equality testing is deprecated, compare the `.protocol`s instead\"\n );\n Service.prototype.getFingerprint = util.deprecate(\n function(algorithm) {\n return utils.getHash(JSON.stringify(this.protocol), algorithm);\n },\n \"use `.hash` instead of `.getFingerprint()`\"\n );\n Service.prototype.getSchema = util.deprecate(\n Type.prototype.getSchema,\n \"use `.protocol` instead of `.getSchema()`\"\n );\n Service.prototype.on = util.deprecate(\n function(name, handler) {\n var self = this;\n this._server.onMessage(name, function(req, cb) {\n return handler.call(self, req, this.channel, cb);\n });\n return this;\n },\n \"use `.createServer().onMessage()` instead of `.on()`\"\n );\n Service.prototype.subprotocol = util.deprecate(\n function() {\n var parent = this._server;\n var opts = { strictTypes: parent._strict, cache: parent._cache };\n var server = new Server(parent.service, opts);\n server._handlers = Object.create(parent._handlers);\n return new Service(\n this.name,\n this._messagesByName,\n this._typesByName,\n this.protocol,\n server\n );\n },\n \"`.subprotocol()` will be removed in 5.1\"\n );\n Service.prototype._attrs = function(opts) {\n var ptcl = { protocol: this.name };\n var types2 = [];\n this.types.forEach(function(t) {\n if (t.getName() === void 0) {\n return;\n }\n var typeSchema = t._attrs(opts);\n if (typeof typeSchema != \"string\") {\n types2.push(typeSchema);\n }\n });\n if (types2.length) {\n ptcl.types = types2;\n }\n var msgNames = Object.keys(this._messagesByName);\n if (msgNames.length) {\n ptcl.messages = {};\n msgNames.forEach(function(name) {\n ptcl.messages[name] = this._messagesByName[name]._attrs(opts);\n }, this);\n }\n if (opts && opts.exportAttrs && this.doc !== void 0) {\n ptcl.doc = this.doc;\n }\n return ptcl;\n };\n function discoverProtocol(transport, opts, cb) {\n if (cb === void 0 && typeof opts == \"function\") {\n cb = opts;\n opts = void 0;\n }\n var svc = new Service({ protocol: \"Empty\" }, OPTS);\n var ptclStr;\n svc.createClient({ timeout: opts && opts.timeout }).createChannel(transport, {\n scope: opts && opts.scope,\n endWritable: typeof transport == \"function\"\n // Stateless transports only.\n }).once(\"handshake\", function(hreq, hres) {\n ptclStr = hres.serverProtocol;\n this.destroy(true);\n }).once(\"eot\", function(pending, err) {\n if (err && !/interrupted/.test(err)) {\n cb(err);\n } else {\n cb(null, JSON.parse(ptclStr));\n }\n });\n }\n function Client(svc, opts) {\n opts = opts || {};\n events.EventEmitter.call(this);\n this._svc$ = svc;\n this._channels$ = [];\n this._fns$ = [];\n this._buffering$ = !!opts.buffering;\n this._cache$ = opts.cache || {};\n this._policy$ = opts.channelPolicy;\n this._strict$ = !!opts.strictTypes;\n this._timeout$ = utils.getOption(opts, \"timeout\", 1e4);\n if (opts.remoteProtocols) {\n insertRemoteProtocols(this._cache$, opts.remoteProtocols, svc, true);\n }\n this._svc$.messages.forEach(function(msg) {\n this[msg.name] = this._createMessageHandler$(msg);\n }, this);\n }\n util.inherits(Client, events.EventEmitter);\n Client.prototype.activeChannels = function() {\n return this._channels$.slice();\n };\n Client.prototype.createChannel = function(transport, opts) {\n var objectMode = opts && opts.objectMode;\n var channel;\n if (typeof transport == \"function\") {\n var writableFactory;\n if (objectMode) {\n writableFactory = transport;\n } else {\n writableFactory = function(cb) {\n var encoder2 = new FrameEncoder();\n var writable2 = transport(function(err, readable2) {\n if (err) {\n cb(err);\n return;\n }\n var decoder2 = new FrameDecoder().once(\"error\", function(err2) {\n channel.destroy(err2);\n });\n cb(null, readable2.pipe(decoder2));\n });\n if (writable2) {\n encoder2.pipe(writable2);\n return encoder2;\n }\n };\n }\n channel = new StatelessClientChannel(this, writableFactory, opts);\n } else {\n var readable, writable;\n if (isStream(transport)) {\n readable = writable = transport;\n } else {\n readable = transport.readable;\n writable = transport.writable;\n }\n if (!objectMode) {\n var decoder = new NettyDecoder();\n readable = readable.pipe(decoder);\n var encoder = new NettyEncoder();\n encoder.pipe(writable);\n writable = encoder;\n }\n channel = new StatefulClientChannel(this, readable, writable, opts);\n if (!objectMode) {\n channel.once(\"eot\", function() {\n readable.unpipe(decoder);\n encoder.unpipe(writable);\n });\n decoder.once(\"error\", function(err) {\n channel.destroy(err);\n });\n }\n }\n var channels = this._channels$;\n channels.push(channel);\n channel.once(\"_drain\", function() {\n channels.splice(channels.indexOf(this), 1);\n });\n this._buffering$ = false;\n this.emit(\"channel\", channel);\n return channel;\n };\n Client.prototype.destroyChannels = function(opts) {\n this._channels$.forEach(function(channel) {\n channel.destroy(opts && opts.noWait);\n });\n };\n Client.prototype.emitMessage = function(name, req, opts, cb) {\n var msg = getExistingMessage(this._svc$, name);\n var wreq = new WrappedRequest(msg, {}, req);\n this._emitMessage$(wreq, opts, cb);\n };\n Client.prototype.remoteProtocols = function() {\n return getRemoteProtocols(this._cache$, true);\n };\n Object.defineProperty(Client.prototype, \"service\", {\n enumerable: true,\n get: function() {\n return this._svc$;\n }\n });\n Client.prototype.use = function() {\n var i, l, fn;\n for (i = 0, l = arguments.length; i < l; i++) {\n fn = arguments[i];\n this._fns$.push(fn.length < 3 ? fn(this) : fn);\n }\n return this;\n };\n Client.prototype._emitMessage$ = function(wreq, opts, cb) {\n if (!cb && typeof opts === \"function\") {\n cb = opts;\n opts = void 0;\n }\n var self = this;\n var channels = this._channels$;\n var numChannels = channels.length;\n if (!numChannels) {\n if (this._buffering$) {\n debug(\"no active client channels, buffering call\");\n this.once(\"channel\", function() {\n this._emitMessage$(wreq, opts, cb);\n });\n } else {\n var err = new Error(\"no active channels\");\n process.nextTick(function() {\n if (cb) {\n cb.call(new CallContext(wreq._msg), err);\n } else {\n self.emit(\"error\", err);\n }\n });\n }\n return;\n }\n opts = opts || {};\n if (opts.timeout === void 0) {\n opts.timeout = this._timeout$;\n }\n var channel;\n if (numChannels === 1) {\n channel = channels[0];\n } else if (this._policy$) {\n channel = this._policy$(this._channels$.slice());\n if (!channel) {\n debug(\"policy returned no channel, skipping call\");\n return;\n }\n } else {\n channel = channels[Math.floor(Math.random() * numChannels)];\n }\n channel._emit(wreq, opts, function(err2, wres) {\n var ctx = this;\n var errType = ctx.message.errorType;\n if (err2) {\n if (self._strict$) {\n err2 = errType.clone(err2.message, { wrapUnions: true });\n }\n done(err2);\n return;\n }\n if (!wres) {\n done();\n return;\n }\n err2 = wres.error;\n if (!self._strict$) {\n if (err2 === void 0) {\n err2 = null;\n } else {\n if (Type.isType(errType, \"union:unwrapped\")) {\n if (typeof err2 == \"string\") {\n err2 = new Error(err2);\n }\n } else if (err2 && err2.string && typeof err2.string == \"string\") {\n err2 = new Error(err2.string);\n }\n }\n }\n done(err2, wres.response);\n function done(err3, res) {\n if (cb) {\n cb.call(ctx, err3, res);\n } else if (err3) {\n self.emit(\"error\", err3);\n }\n }\n });\n };\n Client.prototype._createMessageHandler$ = function(msg) {\n var fields = msg.requestType.getFields();\n var names = fields.map(function(f3) {\n return f3.getName();\n });\n var body = \"return function \" + msg.name + \"(\";\n if (names.length) {\n body += names.join(\", \") + \", \";\n }\n body += \"opts, cb) {\\n\";\n body += \" var req = {\";\n body += names.map(function(n) {\n return n + \": \" + n;\n }).join(\", \");\n body += \"};\\n\";\n body += \" return this.emitMessage('\" + msg.name + \"', req, opts, cb);\\n\";\n body += \"};\";\n return new Function(body)();\n };\n function Server(svc, opts) {\n opts = opts || {};\n events.EventEmitter.call(this);\n this.service = svc;\n this._handlers = {};\n this._fns = [];\n this._channels = {};\n this._nextChannelId = 1;\n this._cache = opts.cache || {};\n this._defaultHandler = opts.defaultHandler;\n this._sysErrFormatter = opts.systemErrorFormatter;\n this._silent = !!opts.silent;\n this._strict = !!opts.strictTypes;\n if (opts.remoteProtocols) {\n insertRemoteProtocols(this._cache, opts.remoteProtocols, svc, false);\n }\n svc.messages.forEach(function(msg) {\n var name = msg.name;\n if (!opts.noCapitalize) {\n name = utils.capitalize(name);\n }\n this[\"on\" + name] = this._createMessageHandler(msg);\n }, this);\n }\n util.inherits(Server, events.EventEmitter);\n Server.prototype.activeChannels = function() {\n return utils.objectValues(this._channels);\n };\n Server.prototype.createChannel = function(transport, opts) {\n var objectMode = opts && opts.objectMode;\n var channel;\n if (typeof transport == \"function\") {\n var readableFactory;\n if (objectMode) {\n readableFactory = transport;\n } else {\n readableFactory = function(cb) {\n var decoder2 = new FrameDecoder().once(\"error\", function(err) {\n channel.destroy(err);\n });\n return transport(function(err, writable2) {\n if (err) {\n cb(err);\n return;\n }\n var encoder2 = new FrameEncoder();\n encoder2.pipe(writable2);\n cb(null, encoder2);\n }).pipe(decoder2);\n };\n }\n channel = new StatelessServerChannel(this, readableFactory, opts);\n } else {\n var readable, writable;\n if (isStream(transport)) {\n readable = writable = transport;\n } else {\n readable = transport.readable;\n writable = transport.writable;\n }\n if (!objectMode) {\n var decoder = new NettyDecoder();\n readable = readable.pipe(decoder);\n var encoder = new NettyEncoder();\n encoder.pipe(writable);\n writable = encoder;\n }\n channel = new StatefulServerChannel(this, readable, writable, opts);\n if (!objectMode) {\n channel.once(\"eot\", function() {\n readable.unpipe(decoder);\n encoder.unpipe(writable);\n });\n decoder.once(\"error\", function(err) {\n channel.destroy(err);\n });\n }\n }\n if (!this.listeners(\"error\").length) {\n this.on(\"error\", this._onError);\n }\n var channelId = this._nextChannelId++;\n var channels = this._channels;\n channels[channelId] = channel.once(\"eot\", function() {\n delete channels[channelId];\n });\n this.emit(\"channel\", channel);\n return channel;\n };\n Server.prototype.onMessage = function(name, handler) {\n getExistingMessage(this.service, name);\n this._handlers[name] = handler;\n return this;\n };\n Server.prototype.remoteProtocols = function() {\n return getRemoteProtocols(this._cache, false);\n };\n Server.prototype.use = function() {\n var i, l, fn;\n for (i = 0, l = arguments.length; i < l; i++) {\n fn = arguments[i];\n this._fns.push(fn.length < 3 ? fn(this) : fn);\n }\n return this;\n };\n Server.prototype._createMessageHandler = function(msg) {\n var name = msg.name;\n var fields = msg.requestType.fields;\n var numArgs = fields.length;\n var args = fields.length ? \", \" + fields.map(function(f3) {\n return \"req.\" + f3.name;\n }).join(\", \") : \"\";\n var body = \"return function (handler) {\\n\";\n body += \" if (handler.length > \" + numArgs + \") {\\n\";\n body += \" return this.onMessage('\" + name + \"', function (req, cb) {\\n\";\n body += \" return handler.call(this\" + args + \", cb);\\n\";\n body += \" });\\n\";\n body += \" } else {\\n\";\n body += \" return this.onMessage('\" + name + \"', function (req) {\\n\";\n body += \" return handler.call(this\" + args + \");\\n\";\n body += \" });\\n\";\n body += \" }\\n\";\n body += \"};\\n\";\n return new Function(body)();\n };\n Server.prototype._onError = function(err) {\n if (!this._silent && err.rpcCode !== \"UNKNOWN_PROTOCOL\") {\n console.error();\n if (err.rpcCode) {\n console.error(err.rpcCode);\n console.error(err.cause);\n } else {\n console.error(\"INTERNAL_SERVER_ERROR\");\n console.error(err);\n }\n }\n };\n function ClientChannel(client, opts) {\n opts = opts || {};\n events.EventEmitter.call(this);\n this.client = client;\n this.timeout = utils.getOption(opts, \"timeout\", client._timeout$);\n this._endWritable = !!utils.getOption(opts, \"endWritable\", true);\n this._prefix = normalizedPrefix(opts.scope);\n var cache = client._cache$;\n var clientSvc = client._svc$;\n var hash = opts.serverHash;\n if (!hash) {\n hash = clientSvc.hash;\n }\n var adapter = cache[hash];\n if (!adapter) {\n hash = clientSvc.hash;\n adapter = cache[hash] = new Adapter(clientSvc, clientSvc, hash);\n }\n this._adapter = adapter;\n this._registry = new Registry(this, PREFIX_LENGTH);\n this.pending = 0;\n this.destroyed = false;\n this.draining = false;\n this.once(\"_eot\", function(pending, err) {\n debug(\"client channel EOT\");\n this.destroyed = true;\n this.emit(\"eot\", pending, err);\n });\n }\n util.inherits(ClientChannel, events.EventEmitter);\n ClientChannel.prototype.destroy = function(noWait) {\n debug(\"destroying client channel\");\n if (!this.draining) {\n this.draining = true;\n this.emit(\"_drain\");\n }\n var registry = this._registry;\n var pending = this.pending;\n if (noWait) {\n registry.clear();\n }\n if (noWait || !pending) {\n if (isError(noWait)) {\n debug(\"fatal client channel error: %s\", noWait);\n this.emit(\"_eot\", pending, noWait);\n } else {\n this.emit(\"_eot\", pending);\n }\n } else {\n debug(\"client channel entering drain mode (%s pending)\", pending);\n }\n };\n ClientChannel.prototype.ping = function(timeout, cb) {\n if (!cb && typeof timeout == \"function\") {\n cb = timeout;\n timeout = void 0;\n }\n var self = this;\n var wreq = new WrappedRequest(PING_MESSAGE);\n this._emit(wreq, { timeout }, function(err) {\n if (cb) {\n cb.call(self, err);\n } else if (err) {\n self.destroy(err);\n }\n });\n };\n ClientChannel.prototype._createHandshakeRequest = function(adapter, noSvc) {\n var svc = this.client._svc$;\n return {\n clientHash: svc.hash,\n clientProtocol: noSvc ? null : JSON.stringify(svc.protocol),\n serverHash: adapter._hash\n };\n };\n ClientChannel.prototype._emit = function(wreq, opts, cb) {\n var msg = wreq._msg;\n var wres = msg.oneWay ? void 0 : new WrappedResponse(msg, {});\n var ctx = new CallContext(msg, this);\n var self = this;\n this.pending++;\n process.nextTick(function() {\n if (!msg.name) {\n onTransition(wreq, wres, onCompletion);\n } else {\n self.emit(\"outgoingCall\", ctx, opts);\n var fns = self.client._fns$;\n debug(\"starting client middleware chain (%s middleware)\", fns.length);\n chainMiddleware({\n fns,\n ctx,\n wreq,\n wres,\n onTransition,\n onCompletion,\n onError\n });\n }\n });\n function onTransition(wreq2, wres2, prev) {\n var err, reqBuf;\n if (self.destroyed) {\n err = new Error(\"channel destroyed\");\n } else {\n try {\n reqBuf = wreq2.toBuffer();\n } catch (cause) {\n err = serializationError(\n f2(\"invalid %j request\", msg.name),\n wreq2,\n [\n { name: \"headers\", type: MAP_BYTES_TYPE },\n { name: \"request\", type: msg.requestType }\n ]\n );\n }\n }\n if (err) {\n prev(err);\n return;\n }\n var timeout = opts && opts.timeout !== void 0 ? opts.timeout : self.timeout;\n var id = self._registry.add(timeout, function(err2, resBuf, adapter) {\n if (!err2 && !msg.oneWay) {\n try {\n adapter._decodeResponse(resBuf, wres2, msg);\n } catch (cause) {\n err2 = cause;\n }\n }\n prev(err2);\n });\n id |= self._prefix;\n debug(\"sending message %s\", id);\n self._send(id, reqBuf, !!msg && msg.oneWay);\n }\n function onCompletion(err) {\n self.pending--;\n cb.call(ctx, err, wres);\n if (self.draining && !self.destroyed && !self.pending) {\n self.destroy();\n }\n }\n function onError(err) {\n self.client.emit(\"error\", err, self);\n }\n };\n ClientChannel.prototype._getAdapter = function(hres) {\n var hash = hres.serverHash;\n var cache = this.client._cache$;\n var adapter = cache[hash];\n if (adapter) {\n return adapter;\n }\n var ptcl = JSON.parse(hres.serverProtocol);\n var serverSvc = Service.forProtocol(ptcl);\n adapter = new Adapter(this.client._svc$, serverSvc, hash, true);\n return cache[hash] = adapter;\n };\n ClientChannel.prototype._matchesPrefix = function(id) {\n return matchesPrefix(id, this._prefix);\n };\n ClientChannel.prototype._send = utils.abstractFunction;\n utils.addDeprecatedGetters(ClientChannel, [\"pending\", \"timeout\"]);\n ClientChannel.prototype.getCache = util.deprecate(\n function() {\n return this.client._cache$;\n },\n \"use `.remoteProtocols()` instead of `.getCache()`\"\n );\n ClientChannel.prototype.getProtocol = util.deprecate(\n function() {\n return this.client._svc$;\n },\n \"use `.service` instead or `.getProtocol()`\"\n );\n ClientChannel.prototype.isDestroyed = util.deprecate(\n function() {\n return this.destroyed;\n },\n \"use `.destroyed` instead of `.isDestroyed`\"\n );\n function StatelessClientChannel(client, writableFactory, opts) {\n ClientChannel.call(this, client, opts);\n this._writableFactory = writableFactory;\n if (!opts || !opts.noPing) {\n debug(\"emitting ping request\");\n this.ping();\n }\n }\n util.inherits(StatelessClientChannel, ClientChannel);\n StatelessClientChannel.prototype._send = function(id, reqBuf) {\n var cb = this._registry.get(id);\n var adapter = this._adapter;\n var self = this;\n process.nextTick(emit);\n return true;\n function emit(retry) {\n if (self.destroyed) {\n return;\n }\n var hreq = self._createHandshakeRequest(adapter, !retry);\n var writable = self._writableFactory.call(self, function(err, readable) {\n if (err) {\n cb(err);\n return;\n }\n readable.on(\"data\", function(obj) {\n debug(\"received response %s\", obj.id);\n var buf = Buffer2.concat(obj.payload);\n try {\n var parts = readHead(HANDSHAKE_RESPONSE_TYPE, buf);\n var hres = parts.head;\n if (hres.serverHash) {\n adapter = self._getAdapter(hres);\n }\n } catch (cause) {\n cb(cause);\n return;\n }\n var match = hres.match;\n debug(\"handshake match: %s\", match);\n self.emit(\"handshake\", hreq, hres);\n if (match === \"NONE\") {\n process.nextTick(function() {\n emit(true);\n });\n } else {\n self._adapter = adapter;\n cb(null, parts.tail, adapter);\n }\n });\n });\n if (!writable) {\n cb(new Error(\"invalid writable stream\"));\n return;\n }\n writable.write({\n id,\n payload: [HANDSHAKE_REQUEST_TYPE.toBuffer(hreq), reqBuf]\n });\n if (self._endWritable) {\n writable.end();\n }\n }\n };\n function StatefulClientChannel(client, readable, writable, opts) {\n ClientChannel.call(this, client, opts);\n this._readable = readable;\n this._writable = writable;\n this._connected = !!(opts && opts.noPing);\n this._readable.on(\"end\", onEnd);\n this._writable.on(\"finish\", onFinish);\n var self = this;\n var timer = null;\n this.once(\"eot\", function() {\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n if (!self._connected) {\n self.emit(\"_ready\");\n }\n this._writable.removeListener(\"finish\", onFinish);\n if (this._endWritable) {\n debug(\"ending transport\");\n this._writable.end();\n }\n this._readable.removeListener(\"data\", onPing).removeListener(\"data\", onMessage).removeListener(\"end\", onEnd);\n });\n var hreq;\n if (this._connected) {\n this._readable.on(\"data\", onMessage);\n } else {\n this._readable.on(\"data\", onPing);\n process.nextTick(ping);\n if (self.timeout) {\n timer = setTimeout(function() {\n self.destroy(new Error(\"timeout\"));\n }, self.timeout);\n }\n }\n function ping(retry) {\n if (self.destroyed) {\n return;\n }\n hreq = self._createHandshakeRequest(self._adapter, !retry);\n var payload = [\n HANDSHAKE_REQUEST_TYPE.toBuffer(hreq),\n utils.bufferFrom([0, 0])\n // No header, no data (empty message name).\n ];\n self._writable.write({ id: self._prefix, payload });\n }\n function onPing(obj) {\n if (!self._matchesPrefix(obj.id)) {\n debug(\"discarding unscoped response %s (still connecting)\", obj.id);\n return;\n }\n var buf = Buffer2.concat(obj.payload);\n try {\n var hres = readHead(HANDSHAKE_RESPONSE_TYPE, buf).head;\n if (hres.serverHash) {\n self._adapter = self._getAdapter(hres);\n }\n } catch (cause) {\n self.destroy(cause);\n return;\n }\n var match = hres.match;\n debug(\"handshake match: %s\", match);\n self.emit(\"handshake\", hreq, hres);\n if (match === \"NONE\") {\n process.nextTick(function() {\n ping(true);\n });\n } else {\n debug(\"successfully connected\");\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n self._readable.removeListener(\"data\", onPing).on(\"data\", onMessage);\n self._connected = true;\n self.emit(\"_ready\");\n hreq = null;\n }\n }\n function onMessage(obj) {\n var id = obj.id;\n if (!self._matchesPrefix(id)) {\n debug(\"discarding unscoped message %s\", id);\n return;\n }\n var cb = self._registry.get(id);\n if (cb) {\n process.nextTick(function() {\n debug(\"received message %s\", id);\n cb(null, Buffer2.concat(obj.payload), self._adapter);\n });\n }\n }\n function onEnd() {\n self.destroy(true);\n }\n function onFinish() {\n self.destroy();\n }\n }\n util.inherits(StatefulClientChannel, ClientChannel);\n StatefulClientChannel.prototype._emit = function() {\n if (this._connected || this.draining) {\n ClientChannel.prototype._emit.apply(this, arguments);\n } else {\n debug(\"queuing request\");\n var args = [];\n var i, l;\n for (i = 0, l = arguments.length; i < l; i++) {\n args.push(arguments[i]);\n }\n this.once(\"_ready\", function() {\n this._emit.apply(this, args);\n });\n }\n };\n StatefulClientChannel.prototype._send = function(id, reqBuf, oneWay) {\n if (oneWay) {\n var self = this;\n process.nextTick(function() {\n self._registry.get(id)(null, utils.bufferFrom([0, 0, 0]), self._adapter);\n });\n }\n return this._writable.write({ id, payload: [reqBuf] });\n };\n function ServerChannel(server, opts) {\n opts = opts || {};\n events.EventEmitter.call(this);\n this.server = server;\n this._endWritable = !!utils.getOption(opts, \"endWritable\", true);\n this._prefix = normalizedPrefix(opts.scope);\n var cache = server._cache;\n var svc = server.service;\n var hash = svc.hash;\n if (!cache[hash]) {\n cache[hash] = new Adapter(svc, svc, hash);\n }\n this._adapter = null;\n this.destroyed = false;\n this.draining = false;\n this.pending = 0;\n this.once(\"_eot\", function(pending, err) {\n debug(\"server channel EOT\");\n this.emit(\"eot\", pending, err);\n });\n }\n util.inherits(ServerChannel, events.EventEmitter);\n ServerChannel.prototype.destroy = function(noWait) {\n if (!this.draining) {\n this.draining = true;\n this.emit(\"_drain\");\n }\n if (noWait || !this.pending) {\n this.destroyed = true;\n if (isError(noWait)) {\n debug(\"fatal server channel error: %s\", noWait);\n this.emit(\"_eot\", this.pending, noWait);\n } else {\n this.emit(\"_eot\", this.pending);\n }\n }\n };\n ServerChannel.prototype._createHandshakeResponse = function(err, hreq) {\n var svc = this.server.service;\n var buf = svc.hash;\n var serverMatch = hreq && hreq.serverHash.equals(buf);\n return {\n match: err ? \"NONE\" : serverMatch ? \"BOTH\" : \"CLIENT\",\n serverProtocol: serverMatch ? null : JSON.stringify(svc.protocol),\n serverHash: serverMatch ? null : buf\n };\n };\n ServerChannel.prototype._getAdapter = function(hreq) {\n var hash = hreq.clientHash;\n var adapter = this.server._cache[hash];\n if (adapter) {\n return adapter;\n }\n if (!hreq.clientProtocol) {\n throw toRpcError(\"UNKNOWN_PROTOCOL\");\n }\n var ptcl = JSON.parse(hreq.clientProtocol);\n var clientSvc = Service.forProtocol(ptcl);\n adapter = new Adapter(clientSvc, this.server.service, hash, true);\n return this.server._cache[hash] = adapter;\n };\n ServerChannel.prototype._matchesPrefix = function(id) {\n return matchesPrefix(id, this._prefix);\n };\n ServerChannel.prototype._receive = function(reqBuf, adapter, cb) {\n var self = this;\n var wreq;\n try {\n wreq = adapter._decodeRequest(reqBuf);\n } catch (cause) {\n cb(self._encodeSystemError(toRpcError(\"INVALID_REQUEST\", cause)));\n return;\n }\n var msg = wreq._msg;\n var wres = new WrappedResponse(msg, {});\n if (!msg.name) {\n wres.response = null;\n cb(wres.toBuffer(), false);\n return;\n }\n var ctx = new CallContext(msg, this);\n self.emit(\"incomingCall\", ctx);\n var fns = this.server._fns;\n debug(\"starting server middleware chain (%s middleware)\", fns.length);\n self.pending++;\n chainMiddleware({\n fns,\n ctx,\n wreq,\n wres,\n onTransition,\n onCompletion,\n onError\n });\n function onTransition(wreq2, wres2, prev) {\n var handler = self.server._handlers[msg.name];\n if (!handler) {\n var defaultHandler = self.server._defaultHandler;\n if (defaultHandler) {\n defaultHandler.call(ctx, wreq2, wres2, prev);\n } else {\n var cause = new Error(f2(\"no handler for %s\", msg.name));\n prev(toRpcError(\"NOT_IMPLEMENTED\", cause));\n }\n } else {\n var pending = !msg.oneWay;\n try {\n if (pending) {\n handler.call(ctx, wreq2.request, function(err, res) {\n pending = false;\n wres2.error = err;\n wres2.response = res;\n prev();\n });\n } else {\n handler.call(ctx, wreq2.request);\n prev();\n }\n } catch (err) {\n if (pending) {\n pending = false;\n prev(err);\n } else {\n onError(err);\n }\n }\n }\n }\n function onCompletion(err) {\n self.pending--;\n var server = self.server;\n var resBuf;\n if (!err) {\n var resErr = wres.error;\n var isStrict = server._strict;\n if (!isStrict) {\n if (isError(resErr)) {\n wres.error = msg.errorType.clone(resErr.message, { wrapUnions: true });\n } else if (resErr === null) {\n resErr = wres.error = void 0;\n }\n if (resErr === void 0 && wres.response === void 0 && msg.responseType.isValid(null)) {\n wres.response = null;\n }\n }\n try {\n resBuf = wres.toBuffer();\n } catch (cause) {\n if (wres.error !== void 0) {\n err = serializationError(\n f2(\"invalid %j error\", msg.name),\n // Sic.\n wres,\n [\n { name: \"headers\", type: MAP_BYTES_TYPE },\n { name: \"error\", type: msg.errorType }\n ]\n );\n } else {\n err = serializationError(\n f2(\"invalid %j response\", msg.name),\n wres,\n [\n { name: \"headers\", type: MAP_BYTES_TYPE },\n { name: \"response\", type: msg.responseType }\n ]\n );\n }\n }\n }\n if (!resBuf) {\n resBuf = self._encodeSystemError(err, wres.headers);\n } else if (resErr !== void 0) {\n server.emit(\"error\", toRpcError(\"APPLICATION_ERROR\", resErr));\n }\n cb(resBuf, msg.oneWay);\n if (self.draining && !self.pending) {\n self.destroy();\n }\n }\n function onError(err) {\n self.server.emit(\"error\", err, self);\n }\n };\n utils.addDeprecatedGetters(ServerChannel, [\"pending\"]);\n ServerChannel.prototype.getCache = util.deprecate(\n function() {\n return this.server._cache;\n },\n \"use `.remoteProtocols()` instead of `.getCache()`\"\n );\n ServerChannel.prototype.getProtocol = util.deprecate(\n function() {\n return this.server.service;\n },\n \"use `.service` instead of `.getProtocol()`\"\n );\n ServerChannel.prototype.isDestroyed = util.deprecate(\n function() {\n return this.destroyed;\n },\n \"use `.destroyed` instead of `.isDestroyed`\"\n );\n ServerChannel.prototype._encodeSystemError = function(err, header) {\n var server = this.server;\n server.emit(\"error\", err, this);\n var errStr;\n if (server._sysErrFormatter) {\n errStr = server._sysErrFormatter.call(this, err);\n } else if (err.rpcCode) {\n errStr = err.message;\n }\n var hdrBuf;\n if (header) {\n try {\n hdrBuf = MAP_BYTES_TYPE.toBuffer(header);\n } catch (cause) {\n server.emit(\"error\", cause, this);\n }\n }\n return Buffer2.concat([\n hdrBuf || utils.bufferFrom([0]),\n utils.bufferFrom([1, 0]),\n // Error flag and first union index.\n STRING_TYPE.toBuffer(errStr || \"internal server error\")\n ]);\n };\n function StatelessServerChannel(server, readableFactory, opts) {\n ServerChannel.call(this, server, opts);\n this._writable = void 0;\n var self = this;\n var readable;\n process.nextTick(function() {\n readable = readableFactory.call(self, function(err, writable) {\n process.nextTick(function() {\n if (err) {\n onFinish(err);\n return;\n }\n self._writable = writable.on(\"finish\", onFinish);\n self.emit(\"_writable\");\n });\n }).on(\"data\", onRequest).on(\"end\", onEnd);\n });\n function onRequest(obj) {\n var id = obj.id;\n var buf = Buffer2.concat(obj.payload);\n var err;\n try {\n var parts = readHead(HANDSHAKE_REQUEST_TYPE, buf);\n var hreq = parts.head;\n var adapter = self._getAdapter(hreq);\n } catch (cause) {\n err = toRpcError(\"INVALID_HANDSHAKE_REQUEST\", cause);\n }\n var hres = self._createHandshakeResponse(err, hreq);\n self.emit(\"handshake\", hreq, hres);\n if (err) {\n done(self._encodeSystemError(err));\n } else {\n self._receive(parts.tail, adapter, done);\n }\n function done(resBuf) {\n if (!self.destroyed) {\n if (!self._writable) {\n self.once(\"_writable\", function() {\n done(resBuf);\n });\n return;\n }\n self._writable.write({\n id,\n payload: [HANDSHAKE_RESPONSE_TYPE.toBuffer(hres), resBuf]\n });\n }\n if (self._writable && self._endWritable) {\n self._writable.end();\n }\n }\n }\n function onEnd() {\n self.destroy();\n }\n function onFinish(err) {\n readable.removeListener(\"data\", onRequest).removeListener(\"end\", onEnd);\n self.destroy(err || true);\n }\n }\n util.inherits(StatelessServerChannel, ServerChannel);\n function StatefulServerChannel(server, readable, writable, opts) {\n ServerChannel.call(this, server, opts);\n this._adapter = void 0;\n this._writable = writable.on(\"finish\", onFinish);\n this._readable = readable.on(\"data\", onHandshake).on(\"end\", onEnd);\n this.once(\"_drain\", function() {\n this._readable.removeListener(\"data\", onHandshake).removeListener(\"data\", onRequest).removeListener(\"end\", onEnd);\n }).once(\"eot\", function() {\n this._writable.removeListener(\"finish\", onFinish);\n if (this._endWritable) {\n this._writable.end();\n }\n });\n var self = this;\n function onHandshake(obj) {\n var id = obj.id;\n if (!self._matchesPrefix(id)) {\n return;\n }\n var buf = Buffer2.concat(obj.payload);\n var err;\n try {\n var parts = readHead(HANDSHAKE_REQUEST_TYPE, buf);\n var hreq = parts.head;\n self._adapter = self._getAdapter(hreq);\n } catch (cause) {\n err = toRpcError(\"INVALID_HANDSHAKE_REQUEST\", cause);\n }\n var hres = self._createHandshakeResponse(err, hreq);\n self.emit(\"handshake\", hreq, hres);\n if (err) {\n done(self._encodeSystemError(err));\n } else {\n self._readable.removeListener(\"data\", onHandshake).on(\"data\", onRequest);\n self._receive(parts.tail, self._adapter, done);\n }\n function done(resBuf) {\n if (self.destroyed) {\n return;\n }\n self._writable.write({\n id,\n payload: [HANDSHAKE_RESPONSE_TYPE.toBuffer(hres), resBuf]\n });\n }\n }\n function onRequest(obj) {\n var id = obj.id;\n if (!self._matchesPrefix(id)) {\n return;\n }\n var reqBuf = Buffer2.concat(obj.payload);\n self._receive(reqBuf, self._adapter, function(resBuf, oneWay) {\n if (self.destroyed || oneWay) {\n return;\n }\n self._writable.write({ id, payload: [resBuf] });\n });\n }\n function onEnd() {\n self.destroy();\n }\n function onFinish() {\n self.destroy(true);\n }\n }\n util.inherits(StatefulServerChannel, ServerChannel);\n function WrappedRequest(msg, hdrs, req) {\n this._msg = msg;\n this.headers = hdrs || {};\n this.request = req || {};\n }\n WrappedRequest.prototype.toBuffer = function() {\n var msg = this._msg;\n return Buffer2.concat([\n MAP_BYTES_TYPE.toBuffer(this.headers),\n STRING_TYPE.toBuffer(msg.name),\n msg.requestType.toBuffer(this.request)\n ]);\n };\n function WrappedResponse(msg, hdr, err, res) {\n this._msg = msg;\n this.headers = hdr;\n this.error = err;\n this.response = res;\n }\n WrappedResponse.prototype.toBuffer = function() {\n var hdr = MAP_BYTES_TYPE.toBuffer(this.headers);\n var hasError = this.error !== void 0;\n return Buffer2.concat([\n hdr,\n BOOLEAN_TYPE.toBuffer(hasError),\n hasError ? this._msg.errorType.toBuffer(this.error) : this._msg.responseType.toBuffer(this.response)\n ]);\n };\n function CallContext(msg, channel) {\n this.channel = channel;\n this.locals = {};\n this.message = msg;\n Object.freeze(this);\n }\n function Registry(ctx, prefixLength) {\n this._ctx = ctx;\n this._mask = ~0 >>> (prefixLength | 0);\n this._id = 0;\n this._n = 0;\n this._cbs = {};\n }\n Registry.prototype.get = function(id) {\n return this._cbs[id & this._mask];\n };\n Registry.prototype.add = function(timeout, fn) {\n this._id = this._id + 1 & this._mask;\n var self = this;\n var id = this._id;\n var timer;\n if (timeout > 0) {\n timer = setTimeout(function() {\n cb(new Error(\"timeout\"));\n }, timeout);\n }\n this._cbs[id] = cb;\n this._n++;\n return id;\n function cb() {\n if (!self._cbs[id]) {\n return;\n }\n delete self._cbs[id];\n self._n--;\n if (timer) {\n clearTimeout(timer);\n }\n fn.apply(self._ctx, arguments);\n }\n };\n Registry.prototype.clear = function() {\n Object.keys(this._cbs).forEach(function(id) {\n this._cbs[id](new Error(\"interrupted\"));\n }, this);\n };\n function Adapter(clientSvc, serverSvc, hash, isRemote) {\n this._clientSvc = clientSvc;\n this._serverSvc = serverSvc;\n this._hash = hash;\n this._isRemote = !!isRemote;\n this._readers = createReaders(clientSvc, serverSvc);\n }\n Adapter.prototype._decodeRequest = function(buf) {\n var tap = new Tap(buf);\n var hdr = MAP_BYTES_TYPE._read(tap);\n var name = STRING_TYPE._read(tap);\n var msg, req;\n if (name) {\n msg = this._serverSvc.message(name);\n req = this._readers[name + \"?\"]._read(tap);\n } else {\n msg = PING_MESSAGE;\n }\n if (!tap.isValid()) {\n throw new Error(f2(\"truncated %s request\", name || \"ping$\"));\n }\n return new WrappedRequest(msg, hdr, req);\n };\n Adapter.prototype._decodeResponse = function(buf, wres, msg) {\n var tap = new Tap(buf);\n utils.copyOwnProperties(MAP_BYTES_TYPE._read(tap), wres.headers, true);\n var isError2 = BOOLEAN_TYPE._read(tap);\n var name = msg.name;\n if (name) {\n var reader = this._readers[name + (isError2 ? \"*\" : \"!\")];\n msg = this._clientSvc.message(name);\n if (isError2) {\n wres.error = reader._read(tap);\n } else {\n wres.response = reader._read(tap);\n }\n if (!tap.isValid()) {\n throw new Error(f2(\"truncated %s response\", name));\n }\n } else {\n msg = PING_MESSAGE;\n }\n };\n function FrameDecoder() {\n stream.Transform.call(this, { readableObjectMode: true });\n this._id = void 0;\n this._buf = utils.newBuffer(0);\n this._bufs = [];\n this.on(\"finish\", function() {\n this.push(null);\n });\n }\n util.inherits(FrameDecoder, stream.Transform);\n FrameDecoder.prototype._transform = function(buf, encoding, cb) {\n buf = Buffer2.concat([this._buf, buf]);\n var frameLength;\n while (buf.length >= 4 && buf.length >= (frameLength = buf.readInt32BE(0)) + 4) {\n if (frameLength) {\n this._bufs.push(buf.slice(4, frameLength + 4));\n } else {\n var bufs = this._bufs;\n this._bufs = [];\n this.push({ id: null, payload: bufs });\n }\n buf = buf.slice(frameLength + 4);\n }\n this._buf = buf;\n cb();\n };\n FrameDecoder.prototype._flush = function(cb) {\n if (this._buf.length || this._bufs.length) {\n var bufs = this._bufs.slice();\n bufs.unshift(this._buf);\n var err = toRpcError(\"TRAILING_DATA\");\n err.trailingData = Buffer2.concat(bufs).toString();\n this.emit(\"error\", err);\n }\n cb();\n };\n function FrameEncoder() {\n stream.Transform.call(this, { writableObjectMode: true });\n this.on(\"finish\", function() {\n this.push(null);\n });\n }\n util.inherits(FrameEncoder, stream.Transform);\n FrameEncoder.prototype._transform = function(obj, encoding, cb) {\n var bufs = obj.payload;\n var i, l, buf;\n for (i = 0, l = bufs.length; i < l; i++) {\n buf = bufs[i];\n this.push(intBuffer(buf.length));\n this.push(buf);\n }\n this.push(intBuffer(0));\n cb();\n };\n function NettyDecoder() {\n stream.Transform.call(this, { readableObjectMode: true });\n this._id = void 0;\n this._frameCount = 0;\n this._buf = utils.newBuffer(0);\n this._bufs = [];\n this.on(\"finish\", function() {\n this.push(null);\n });\n }\n util.inherits(NettyDecoder, stream.Transform);\n NettyDecoder.prototype._transform = function(buf, encoding, cb) {\n buf = Buffer2.concat([this._buf, buf]);\n while (true) {\n if (this._id === void 0) {\n if (buf.length < 8) {\n this._buf = buf;\n cb();\n return;\n }\n this._id = buf.readInt32BE(0);\n this._frameCount = buf.readInt32BE(4);\n buf = buf.slice(8);\n }\n var frameLength;\n while (this._frameCount && buf.length >= 4 && buf.length >= (frameLength = buf.readInt32BE(0)) + 4) {\n this._frameCount--;\n this._bufs.push(buf.slice(4, frameLength + 4));\n buf = buf.slice(frameLength + 4);\n }\n if (this._frameCount) {\n this._buf = buf;\n cb();\n return;\n } else {\n var obj = { id: this._id, payload: this._bufs };\n this._bufs = [];\n this._id = void 0;\n this.push(obj);\n }\n }\n };\n NettyDecoder.prototype._flush = FrameDecoder.prototype._flush;\n function NettyEncoder() {\n stream.Transform.call(this, { writableObjectMode: true });\n this.on(\"finish\", function() {\n this.push(null);\n });\n }\n util.inherits(NettyEncoder, stream.Transform);\n NettyEncoder.prototype._transform = function(obj, encoding, cb) {\n var bufs = obj.payload;\n var l = bufs.length;\n var buf;\n buf = utils.newBuffer(8);\n buf.writeInt32BE(obj.id, 0);\n buf.writeInt32BE(l, 4);\n this.push(buf);\n var i;\n for (i = 0; i < l; i++) {\n buf = bufs[i];\n this.push(intBuffer(buf.length));\n this.push(buf);\n }\n cb();\n };\n function intBuffer(n) {\n var buf = utils.newBuffer(4);\n buf.writeInt32BE(n);\n return buf;\n }\n function readHead(type, buf) {\n var tap = new Tap(buf);\n var head = type._read(tap);\n if (!tap.isValid()) {\n throw new Error(f2(\"truncated %j\", type.schema()));\n }\n return { head, tail: tap.buf.slice(tap.pos) };\n }\n function createReader(rtype, wtype) {\n return rtype.equals(wtype) ? rtype : rtype.createResolver(wtype);\n }\n function createReaders(clientSvc, serverSvc) {\n var obj = {};\n clientSvc.messages.forEach(function(c) {\n var n = c.name;\n var s = serverSvc.message(n);\n try {\n if (!s) {\n throw new Error(f2(\"missing server message: %s\", n));\n }\n if (s.oneWay !== c.oneWay) {\n throw new Error(f2(\"inconsistent one-way message: %s\", n));\n }\n obj[n + \"?\"] = createReader(s.requestType, c.requestType);\n obj[n + \"*\"] = createReader(c.errorType, s.errorType);\n obj[n + \"!\"] = createReader(c.responseType, s.responseType);\n } catch (cause) {\n throw toRpcError(\"INCOMPATIBLE_PROTOCOL\", cause);\n }\n });\n return obj;\n }\n function insertRemoteProtocols(cache, ptcls, svc, isClient) {\n Object.keys(ptcls).forEach(function(hash) {\n var ptcl = ptcls[hash];\n var clientSvc, serverSvc;\n if (isClient) {\n clientSvc = svc;\n serverSvc = Service.forProtocol(ptcl);\n } else {\n clientSvc = Service.forProtocol(ptcl);\n serverSvc = svc;\n }\n cache[hash] = new Adapter(clientSvc, serverSvc, hash, true);\n });\n }\n function getRemoteProtocols(cache, isClient) {\n var ptcls = {};\n Object.keys(cache).forEach(function(hs) {\n var adapter = cache[hs];\n if (adapter._isRemote) {\n var svc = isClient ? adapter._serverSvc : adapter._clientSvc;\n ptcls[hs] = svc.protocol;\n }\n });\n return ptcls;\n }\n function isError(any) {\n return !!any && Object.prototype.toString.call(any) === \"[object Error]\";\n }\n function forwardErrors(src, dst) {\n return src.on(\"error\", function(err) {\n dst.emit(\"error\", err, src);\n });\n }\n function toError(msg, cause) {\n var err = new Error(msg);\n err.cause = cause;\n return err;\n }\n function toRpcError(rpcCode, cause) {\n var err = toError(rpcCode.toLowerCase().replace(/_/g, \" \"), cause);\n err.rpcCode = cause && cause.rpcCode ? cause.rpcCode : rpcCode;\n return err;\n }\n function serializationError(msg, obj, fields) {\n var details = [];\n var i, l, field;\n for (i = 0, l = fields.length; i < l; i++) {\n field = fields[i];\n field.type.isValid(obj[field.name], { errorHook });\n }\n var detailsStr = details.map(function(obj2) {\n return f2(\"%s = %j but expected %s\", obj2.path, obj2.value, obj2.type);\n }).join(\", \");\n var err = new Error(f2(\"%s (%s)\", msg, detailsStr));\n err.details = details;\n return err;\n function errorHook(parts, any, type) {\n var strs = [];\n var i2, l2, part;\n for (i2 = 0, l2 = parts.length; i2 < l2; i2++) {\n part = parts[i2];\n if (isNaN(part)) {\n strs.push(\".\" + part);\n } else {\n strs.push(\"[\" + part + \"]\");\n }\n }\n details.push({\n path: field.name + strs.join(\"\"),\n value: any,\n type\n });\n }\n }\n function normalizedPrefix(scope) {\n return scope ? utils.getHash(scope).readInt16BE(0) << 32 - PREFIX_LENGTH : 0;\n }\n function matchesPrefix(id, prefix) {\n return (id ^ prefix) >> 32 - PREFIX_LENGTH === 0;\n }\n function isStream(any) {\n return !!(any && any.pipe);\n }\n function getExistingMessage(svc, name) {\n var msg = svc.message(name);\n if (!msg) {\n throw new Error(f2(\"unknown message: %s\", name));\n }\n return msg;\n }\n function chainMiddleware(params) {\n var args = [params.wreq, params.wres];\n var cbs = [];\n var cause;\n forward(0);\n function forward(pos) {\n var isDone = false;\n if (pos < params.fns.length) {\n params.fns[pos].apply(params.ctx, args.concat(function(err, cb) {\n if (isDone) {\n params.onError(toError(\"duplicate forward middleware call\", err));\n return;\n }\n isDone = true;\n if (err || params.wres && // Non one-way messages.\n (params.wres.error !== void 0 || params.wres.response !== void 0)) {\n cause = err;\n backward();\n return;\n }\n if (cb) {\n cbs.push(cb);\n }\n forward(++pos);\n }));\n } else {\n params.onTransition.apply(params.ctx, args.concat(function(err) {\n if (isDone) {\n params.onError(toError(\"duplicate handler call\", err));\n return;\n }\n isDone = true;\n cause = err;\n process.nextTick(backward);\n }));\n }\n }\n function backward() {\n var cb = cbs.pop();\n if (cb) {\n var isDone = false;\n cb.call(params.ctx, cause, function(err) {\n if (isDone) {\n params.onError(toError(\"duplicate backward middleware call\", err));\n return;\n }\n cause = err;\n isDone = true;\n backward();\n });\n } else {\n params.onCompletion.call(params.ctx, cause);\n }\n }\n }\n module.exports = {\n Adapter,\n HANDSHAKE_REQUEST_TYPE,\n HANDSHAKE_RESPONSE_TYPE,\n Message,\n Registry,\n Service,\n discoverProtocol,\n streams: {\n FrameDecoder,\n FrameEncoder,\n NettyDecoder,\n NettyEncoder\n }\n };\n }\n});\n\n// node_modules/avsc/lib/files.js\nvar require_files = __commonJS({\n \"node_modules/avsc/lib/files.js\"(exports, module) {\n \"use strict\";\n var fs = __import_FS;\n var path = __import_PATH;\n function createImportHook() {\n var imports = {};\n return function(fpath, kind, cb) {\n fpath = path.resolve(fpath);\n if (imports[fpath]) {\n process.nextTick(cb);\n return;\n }\n imports[fpath] = true;\n fs.readFile(fpath, { encoding: \"utf8\" }, cb);\n };\n }\n function createSyncImportHook() {\n var imports = {};\n return function(fpath, kind, cb) {\n fpath = path.resolve(fpath);\n if (imports[fpath]) {\n cb();\n } else {\n imports[fpath] = true;\n cb(null, fs.readFileSync(fpath, { encoding: \"utf8\" }));\n }\n };\n }\n module.exports = {\n createImportHook,\n createSyncImportHook,\n // Proxy a few methods to better shim them for browserify.\n existsSync: fs.existsSync,\n readFileSync: fs.readFileSync\n };\n }\n});\n\n// node_modules/avsc/lib/specs.js\nvar require_specs = __commonJS({\n \"node_modules/avsc/lib/specs.js\"(exports, module) {\n \"use strict\";\n var files = require_files();\n var utils = require_utils();\n var path = __import_PATH;\n var util = __import_UTIL;\n var f2 = util.format;\n var TYPE_REFS = {\n date: { type: \"int\", logicalType: \"date\" },\n decimal: { type: \"bytes\", logicalType: \"decimal\" },\n time_ms: { type: \"long\", logicalType: \"time-millis\" },\n timestamp_ms: { type: \"long\", logicalType: \"timestamp-millis\" }\n };\n function assembleProtocol(fpath, opts, cb) {\n if (!cb && typeof opts == \"function\") {\n cb = opts;\n opts = void 0;\n }\n opts = opts || {};\n if (!opts.importHook) {\n opts.importHook = files.createImportHook();\n }\n importFile(fpath, function(err, protocol) {\n if (err) {\n cb(err);\n return;\n }\n if (!protocol) {\n cb(new Error(\"empty root import\"));\n return;\n }\n var schemas = protocol.types;\n if (schemas) {\n var namespace = protocolNamespace(protocol) || \"\";\n schemas.forEach(function(schema) {\n if (schema.namespace === namespace) {\n delete schema.namespace;\n }\n });\n }\n cb(null, protocol);\n });\n function importFile(fpath2, cb2) {\n opts.importHook(fpath2, \"idl\", function(err, str) {\n if (err) {\n cb2(err);\n return;\n }\n if (str === void 0) {\n cb2();\n return;\n }\n try {\n var reader = new Reader(str, opts);\n var obj = reader._readProtocol(str, opts);\n } catch (err2) {\n err2.path = fpath2;\n cb2(err2);\n return;\n }\n fetchImports(obj.protocol, obj.imports, path.dirname(fpath2), cb2);\n });\n }\n function fetchImports(protocol, imports, dpath, cb2) {\n var importedProtocols = [];\n next();\n function next() {\n var info = imports.shift();\n if (!info) {\n importedProtocols.reverse();\n try {\n importedProtocols.forEach(function(imported) {\n mergeImport(protocol, imported);\n });\n } catch (err) {\n cb2(err);\n return;\n }\n cb2(null, protocol);\n return;\n }\n var importPath = path.join(dpath, info.name);\n if (info.kind === \"idl\") {\n importFile(importPath, function(err, imported) {\n if (err) {\n cb2(err);\n return;\n }\n if (imported) {\n importedProtocols.push(imported);\n }\n next();\n });\n } else {\n opts.importHook(importPath, info.kind, function(err, str) {\n if (err) {\n cb2(err);\n return;\n }\n switch (info.kind) {\n case \"protocol\":\n case \"schema\":\n if (str === void 0) {\n next();\n return;\n }\n try {\n var obj = JSON.parse(str);\n } catch (err2) {\n err2.path = importPath;\n cb2(err2);\n return;\n }\n var imported = info.kind === \"schema\" ? { types: [obj] } : obj;\n importedProtocols.push(imported);\n next();\n return;\n default:\n cb2(new Error(f2(\"invalid import kind: %s\", info.kind)));\n }\n });\n }\n }\n }\n function mergeImport(protocol, imported) {\n var schemas = imported.types || [];\n schemas.reverse();\n schemas.forEach(function(schema) {\n if (!protocol.types) {\n protocol.types = [];\n }\n if (schema.namespace === void 0) {\n schema.namespace = protocolNamespace(imported) || \"\";\n }\n protocol.types.unshift(schema);\n });\n Object.keys(imported.messages || {}).forEach(function(name) {\n if (!protocol.messages) {\n protocol.messages = {};\n }\n if (protocol.messages[name]) {\n throw new Error(f2(\"duplicate message: %s\", name));\n }\n protocol.messages[name] = imported.messages[name];\n });\n }\n }\n function read(str) {\n var schema;\n if (typeof str == \"string\" && ~str.indexOf(path.sep) && files.existsSync(str)) {\n var contents = files.readFileSync(str, { encoding: \"utf8\" });\n try {\n return JSON.parse(contents);\n } catch (err) {\n var opts = { importHook: files.createSyncImportHook() };\n assembleProtocol(str, opts, function(err2, protocolSchema) {\n schema = err2 ? contents : protocolSchema;\n });\n }\n } else {\n schema = str;\n }\n if (typeof schema != \"string\" || schema === \"null\") {\n return schema;\n }\n try {\n return JSON.parse(schema);\n } catch (err) {\n try {\n return Reader.readProtocol(schema);\n } catch (err2) {\n try {\n return Reader.readSchema(schema);\n } catch (err3) {\n return schema;\n }\n }\n }\n }\n function Reader(str, opts) {\n opts = opts || {};\n this._tk = new Tokenizer(str);\n this._ackVoidMessages = !!opts.ackVoidMessages;\n this._implicitTags = !opts.delimitedCollections;\n this._typeRefs = opts.typeRefs || TYPE_REFS;\n }\n Reader.readProtocol = function(str, opts) {\n var reader = new Reader(str, opts);\n var protocol = reader._readProtocol();\n if (protocol.imports.length) {\n throw new Error(\"unresolvable import\");\n }\n return protocol.protocol;\n };\n Reader.readSchema = function(str, opts) {\n var reader = new Reader(str, opts);\n var doc = reader._readJavadoc();\n var schema = reader._readType(doc === void 0 ? {} : { doc }, true);\n reader._tk.next({ id: \"(eof)\" });\n return schema;\n };\n Reader.prototype._readProtocol = function() {\n var tk = this._tk;\n var imports = [];\n var types = [];\n var messages = {};\n var pos;\n this._readImports(imports);\n var protocolSchema = {};\n var protocolJavadoc = this._readJavadoc();\n if (protocolJavadoc !== void 0) {\n protocolSchema.doc = protocolJavadoc;\n }\n this._readAnnotations(protocolSchema);\n tk.next({ val: \"protocol\" });\n if (!tk.next({ val: \"{\", silent: true })) {\n protocolSchema.protocol = tk.next({ id: \"name\" }).val;\n tk.next({ val: \"{\" });\n }\n while (!tk.next({ val: \"}\", silent: true })) {\n if (!this._readImports(imports)) {\n var javadoc = this._readJavadoc();\n var typeSchema = this._readType({}, true);\n var numImports = this._readImports(imports, true);\n var message = void 0;\n pos = tk.pos;\n if (!numImports && (message = this._readMessage(typeSchema))) {\n if (javadoc !== void 0 && message.schema.doc === void 0) {\n message.schema.doc = javadoc;\n }\n var oneWay = false;\n if (message.schema.response === \"void\" || message.schema.response.type === \"void\") {\n oneWay = !this._ackVoidMessages && !message.schema.errors;\n if (message.schema.response === \"void\") {\n message.schema.response = \"null\";\n } else {\n message.schema.response.type = \"null\";\n }\n }\n if (oneWay) {\n message.schema[\"one-way\"] = true;\n }\n if (messages[message.name]) {\n throw new Error(f2(\"duplicate message: %s\", message.name));\n }\n messages[message.name] = message.schema;\n } else {\n if (javadoc) {\n if (typeof typeSchema == \"string\") {\n typeSchema = { doc: javadoc, type: typeSchema };\n } else if (typeSchema.doc === void 0) {\n typeSchema.doc = javadoc;\n }\n }\n types.push(typeSchema);\n tk.pos = pos;\n tk.next({ val: \";\", silent: true });\n }\n javadoc = void 0;\n }\n }\n tk.next({ id: \"(eof)\" });\n if (types.length) {\n protocolSchema.types = types;\n }\n if (Object.keys(messages).length) {\n protocolSchema.messages = messages;\n }\n return { protocol: protocolSchema, imports };\n };\n Reader.prototype._readAnnotations = function(schema) {\n var tk = this._tk;\n while (tk.next({ val: \"@\", silent: true })) {\n var parts = [];\n while (!tk.next({ val: \"(\", silent: true })) {\n parts.push(tk.next().val);\n }\n schema[parts.join(\"\")] = tk.next({ id: \"json\" }).val;\n tk.next({ val: \")\" });\n }\n };\n Reader.prototype._readMessage = function(responseSchema) {\n var tk = this._tk;\n var schema = { request: [], response: responseSchema };\n this._readAnnotations(schema);\n var name = tk.next().val;\n if (tk.next().val !== \"(\") {\n return;\n }\n if (!tk.next({ val: \")\", silent: true })) {\n do {\n schema.request.push(this._readField());\n } while (!tk.next({ val: \")\", silent: true }) && tk.next({ val: \",\" }));\n }\n var token = tk.next();\n switch (token.val) {\n case \"throws\":\n schema.errors = [];\n do {\n schema.errors.push(this._readType());\n } while (!tk.next({ val: \";\", silent: true }) && tk.next({ val: \",\" }));\n break;\n case \"oneway\":\n schema[\"one-way\"] = true;\n tk.next({ val: \";\" });\n break;\n case \";\":\n break;\n default:\n throw tk.error(\"invalid message suffix\", token);\n }\n return { name, schema };\n };\n Reader.prototype._readJavadoc = function() {\n var token = this._tk.next({ id: \"javadoc\", emitJavadoc: true, silent: true });\n if (token) {\n return token.val;\n }\n };\n Reader.prototype._readField = function() {\n var tk = this._tk;\n var javadoc = this._readJavadoc();\n var schema = { type: this._readType() };\n if (javadoc !== void 0 && schema.doc === void 0) {\n schema.doc = javadoc;\n }\n this._readAnnotations(schema);\n schema.name = tk.next({ id: \"name\" }).val;\n if (tk.next({ val: \"=\", silent: true })) {\n schema[\"default\"] = tk.next({ id: \"json\" }).val;\n }\n return schema;\n };\n Reader.prototype._readType = function(schema, top) {\n schema = schema || {};\n this._readAnnotations(schema);\n schema.type = this._tk.next({ id: \"name\" }).val;\n switch (schema.type) {\n case \"record\":\n case \"error\":\n return this._readRecord(schema);\n case \"fixed\":\n return this._readFixed(schema);\n case \"enum\":\n return this._readEnum(schema, top);\n case \"map\":\n return this._readMap(schema);\n case \"array\":\n return this._readArray(schema);\n case \"union\":\n if (Object.keys(schema).length > 1) {\n throw new Error(\"union annotations are not supported\");\n }\n return this._readUnion();\n default:\n var ref = this._typeRefs[schema.type];\n if (ref) {\n delete schema.type;\n utils.copyOwnProperties(ref, schema);\n }\n return Object.keys(schema).length > 1 ? schema : schema.type;\n }\n };\n Reader.prototype._readFixed = function(schema) {\n var tk = this._tk;\n if (!tk.next({ val: \"(\", silent: true })) {\n schema.name = tk.next({ id: \"name\" }).val;\n tk.next({ val: \"(\" });\n }\n schema.size = parseInt(tk.next({ id: \"number\" }).val);\n tk.next({ val: \")\" });\n return schema;\n };\n Reader.prototype._readMap = function(schema) {\n var tk = this._tk;\n var silent = this._implicitTags;\n var implicitTags = tk.next({ val: \"<\", silent }) === void 0;\n schema.values = this._readType();\n tk.next({ val: \">\", silent: implicitTags });\n return schema;\n };\n Reader.prototype._readArray = function(schema) {\n var tk = this._tk;\n var silent = this._implicitTags;\n var implicitTags = tk.next({ val: \"<\", silent }) === void 0;\n schema.items = this._readType();\n tk.next({ val: \">\", silent: implicitTags });\n return schema;\n };\n Reader.prototype._readEnum = function(schema, top) {\n var tk = this._tk;\n if (!tk.next({ val: \"{\", silent: true })) {\n schema.name = tk.next({ id: \"name\" }).val;\n tk.next({ val: \"{\" });\n }\n schema.symbols = [];\n do {\n schema.symbols.push(tk.next().val);\n } while (!tk.next({ val: \"}\", silent: true }) && tk.next({ val: \",\" }));\n if (top && tk.next({ val: \"=\", silent: true })) {\n schema.default = tk.next().val;\n tk.next({ val: \";\" });\n }\n return schema;\n };\n Reader.prototype._readUnion = function() {\n var tk = this._tk;\n var arr = [];\n tk.next({ val: \"{\" });\n do {\n arr.push(this._readType());\n } while (!tk.next({ val: \"}\", silent: true }) && tk.next({ val: \",\" }));\n return arr;\n };\n Reader.prototype._readRecord = function(schema) {\n var tk = this._tk;\n if (!tk.next({ val: \"{\", silent: true })) {\n schema.name = tk.next({ id: \"name\" }).val;\n tk.next({ val: \"{\" });\n }\n schema.fields = [];\n while (!tk.next({ val: \"}\", silent: true })) {\n schema.fields.push(this._readField());\n tk.next({ val: \";\" });\n }\n return schema;\n };\n Reader.prototype._readImports = function(imports, maybeMessage) {\n var tk = this._tk;\n var numImports = 0;\n var pos = tk.pos;\n while (tk.next({ val: \"import\", silent: true })) {\n if (!numImports && maybeMessage && tk.next({ val: \"(\", silent: true })) {\n tk.pos = pos;\n return;\n }\n var kind = tk.next({ id: \"name\" }).val;\n var fname = JSON.parse(tk.next({ id: \"string\" }).val);\n tk.next({ val: \";\" });\n imports.push({ kind, name: fname });\n numImports++;\n }\n return numImports;\n };\n function Tokenizer(str) {\n this._str = str;\n this.pos = 0;\n }\n Tokenizer.prototype.next = function(opts) {\n var token = { pos: this.pos, id: void 0, val: void 0 };\n var javadoc = this._skip(opts && opts.emitJavadoc);\n if (typeof javadoc == \"string\") {\n token.id = \"javadoc\";\n token.val = javadoc;\n } else {\n var pos = this.pos;\n var str = this._str;\n var c = str.charAt(pos);\n if (!c) {\n token.id = \"(eof)\";\n } else {\n if (opts && opts.id === \"json\") {\n token.id = \"json\";\n this.pos = this._endOfJson();\n } else if (c === '\"') {\n token.id = \"string\";\n this.pos = this._endOfString();\n } else if (/[0-9]/.test(c)) {\n token.id = \"number\";\n this.pos = this._endOf(/[0-9]/);\n } else if (/[`A-Za-z_.]/.test(c)) {\n token.id = \"name\";\n this.pos = this._endOf(/[`A-Za-z0-9_.]/);\n } else {\n token.id = \"operator\";\n this.pos = pos + 1;\n }\n token.val = str.slice(pos, this.pos);\n if (token.id === \"json\") {\n try {\n token.val = JSON.parse(token.val);\n } catch (err2) {\n throw this.error(\"invalid JSON\", token);\n }\n } else if (token.id === \"name\") {\n token.val = token.val.replace(/`/g, \"\");\n }\n }\n }\n var err;\n if (opts && opts.id && opts.id !== token.id) {\n err = this.error(f2(\"expected ID %s\", opts.id), token);\n } else if (opts && opts.val && opts.val !== token.val) {\n err = this.error(f2(\"expected value %s\", opts.val), token);\n }\n if (!err) {\n return token;\n } else if (opts && opts.silent) {\n this.pos = token.pos;\n return void 0;\n } else {\n throw err;\n }\n };\n Tokenizer.prototype.error = function(reason, context) {\n var isToken = typeof context != \"number\";\n var pos = isToken ? context.pos : context;\n var str = this._str;\n var lineNum = 1;\n var lineStart = 0;\n var i;\n for (i = 0; i < pos; i++) {\n if (str.charAt(i) === \"\\n\") {\n lineNum++;\n lineStart = i;\n }\n }\n var msg = isToken ? f2(\"invalid token %j: %s\", context, reason) : reason;\n var err = new Error(msg);\n err.token = isToken ? context : void 0;\n err.lineNum = lineNum;\n err.colNum = pos - lineStart;\n return err;\n };\n Tokenizer.prototype._skip = function(emitJavadoc) {\n var str = this._str;\n var isJavadoc = false;\n var pos, c;\n while ((c = str.charAt(this.pos)) && /\\s/.test(c)) {\n this.pos++;\n }\n pos = this.pos;\n if (c === \"/\") {\n switch (str.charAt(this.pos + 1)) {\n case \"/\":\n this.pos += 2;\n while ((c = str.charAt(this.pos)) && c !== \"\\n\") {\n this.pos++;\n }\n return this._skip(emitJavadoc);\n case \"*\":\n this.pos += 2;\n if (str.charAt(this.pos) === \"*\") {\n isJavadoc = true;\n }\n while (c = str.charAt(this.pos++)) {\n if (c === \"*\" && str.charAt(this.pos) === \"/\") {\n this.pos++;\n if (isJavadoc && emitJavadoc) {\n return extractJavadoc(str.slice(pos + 3, this.pos - 2));\n }\n return this._skip(emitJavadoc);\n }\n }\n throw this.error(\"unterminated comment\", pos);\n }\n }\n };\n Tokenizer.prototype._endOf = function(pat) {\n var pos = this.pos;\n var str = this._str;\n while (pat.test(str.charAt(pos))) {\n pos++;\n }\n return pos;\n };\n Tokenizer.prototype._endOfString = function() {\n var pos = this.pos + 1;\n var str = this._str;\n var c;\n while (c = str.charAt(pos)) {\n if (c === '\"') {\n return pos + 1;\n }\n if (c === \"\\\\\") {\n pos += 2;\n } else {\n pos++;\n }\n }\n throw this.error(\"unterminated string\", pos - 1);\n };\n Tokenizer.prototype._endOfJson = function() {\n var pos = utils.jsonEnd(this._str, this.pos);\n if (pos < 0) {\n throw this.error(\"invalid JSON\", pos);\n }\n return pos;\n };\n function extractJavadoc(str) {\n var lines = str.replace(/^[ \\t]+|[ \\t]+$/g, \"\").split(\"\\n\").map(function(line, i) {\n return i ? line.replace(/^\\s*\\*\\s?/, \"\") : line;\n });\n while (lines.length && !lines[0]) {\n lines.shift();\n }\n while (lines.length && !lines[lines.length - 1]) {\n lines.pop();\n }\n return lines.join(\"\\n\");\n }\n function protocolNamespace(protocol) {\n if (protocol.namespace) {\n return protocol.namespace;\n }\n var match = /^(.*)\\.[^.]+$/.exec(protocol.protocol);\n return match ? match[1] : void 0;\n }\n module.exports = {\n Tokenizer,\n assembleProtocol,\n read,\n readProtocol: Reader.readProtocol,\n readSchema: Reader.readSchema\n };\n }\n});\n\n// node_modules/avsc/lib/index.js\nvar require_lib = __commonJS({\n \"node_modules/avsc/lib/index.js\"(exports, module) {\n \"use strict\";\n var containers = require_containers();\n var services = require_services();\n var specs = require_specs();\n var types = require_types();\n var utils = require_utils();\n var buffer = __import_BUFFER;\n var fs = __import_FS;\n var util = __import_UTIL;\n var Buffer2 = buffer.Buffer;\n function parse2(any, opts) {\n var schemaOrProtocol = specs.read(any);\n return schemaOrProtocol.protocol ? services.Service.forProtocol(schemaOrProtocol, opts) : types.Type.forSchema(schemaOrProtocol, opts);\n }\n function extractFileHeader(path, opts) {\n opts = opts || {};\n var decode = opts.decode === void 0 ? true : !!opts.decode;\n var size = Math.max(opts.size || 4096, 4);\n var buf = utils.newBuffer(size);\n var fd = fs.openSync(path, \"r\");\n try {\n var pos = fs.readSync(fd, buf, 0, size);\n if (pos < 4 || !containers.MAGIC_BYTES.equals(buf.slice(0, 4))) {\n return null;\n }\n var tap = new utils.Tap(buf);\n var header = null;\n do {\n header = containers.HEADER_TYPE._read(tap);\n } while (!isValid());\n if (decode !== false) {\n var meta = header.meta;\n meta[\"avro.schema\"] = JSON.parse(meta[\"avro.schema\"].toString());\n if (meta[\"avro.codec\"] !== void 0) {\n meta[\"avro.codec\"] = meta[\"avro.codec\"].toString();\n }\n }\n return header;\n } finally {\n fs.closeSync(fd);\n }\n function isValid() {\n if (tap.isValid()) {\n return true;\n }\n var len = 2 * tap.buf.length;\n var buf2 = utils.newBuffer(len);\n len = fs.readSync(fd, buf2, 0, len);\n tap.buf = Buffer2.concat([tap.buf, buf2]);\n tap.pos = 0;\n return false;\n }\n }\n function createFileDecoder(path, opts) {\n return fs.createReadStream(path).pipe(new containers.streams.BlockDecoder(opts));\n }\n function createFileEncoder(path, schema, opts) {\n var encoder = new containers.streams.BlockEncoder(schema, opts);\n encoder.pipe(fs.createWriteStream(path, { defaultEncoding: \"binary\" }));\n return encoder;\n }\n module.exports = {\n Service: services.Service,\n Type: types.Type,\n assembleProtocol: specs.assembleProtocol,\n createFileDecoder,\n createFileEncoder,\n discoverProtocol: services.discoverProtocol,\n extractFileHeader,\n parse: parse2,\n readProtocol: specs.readProtocol,\n readSchema: specs.readSchema,\n streams: containers.streams,\n types: types.builtins,\n // Deprecated exports.\n Protocol: services.Service,\n assemble: util.deprecate(\n specs.assembleProtocol,\n \"use `assembleProtocol` instead\"\n ),\n combine: util.deprecate(\n types.Type.forTypes,\n \"use `Type.forTypes` intead\"\n ),\n infer: util.deprecate(\n types.Type.forValue,\n \"use `Type.forValue` instead\"\n )\n };\n }\n});\n\n// node_modules/ultralight-s3/lib/index.min.js\nvar x = \"AWS4-HMAC-SHA256\";\nvar K = \"aws4_request\";\nvar O = \"s3\";\nvar v = \"2\";\nvar E = \"UNSIGNED-PAYLOAD\";\nvar W = \"application/octet-stream\";\nvar M = \"application/xml\";\nvar w = \"application/json\";\nvar X = [\"accessKeyId\", \"secretAccessKey\", \"sessionToken\", \"password\"];\nvar f = \"x-amz-content-sha256\";\nvar Z = \"x-amz-date\";\nvar V = \"host\";\nvar J = \"Authorization\";\nvar m = \"Content-Type\";\nvar T = \"Content-Length\";\nvar P = \"etag\";\nvar C = \"last-modified\";\nvar u = \"ultralight-s3 Module: \";\nvar ee = `${u}accessKeyId must be a non-empty string`;\nvar te = `${u}secretAccessKey must be a non-empty string`;\nvar se = `${u}endpoint must be a non-empty string`;\nvar re = `${u}bucketName must be a non-empty string`;\nvar j = `${u}key must be a non-empty string`;\nvar $ = `${u}uploadId must be a non-empty string`;\nvar L = `${u}parts must be a non-empty array`;\nvar k = `${u}Each part must have a partNumber (number) and ETag (string)`;\nvar D = `${u}data must be a Buffer or string`;\nvar B = `${u}prefix must be a string`;\nvar F = `${u}maxKeys must be a positive integer`;\nvar G = `${u}delimiter must be a string`;\nvar z = crypto.createHmac || (await import(\"node:crypto\")).createHmac;\nvar Q = crypto.createHash || (await import(\"node:crypto\")).createHash;\ntypeof z > \"u\" && typeof Q > \"u\" && console.error(\"ultralight-S3 Module: Crypto functions are not available, please report the issue with necessary description: https://github.com/sentienhq/ultralight-s3/issues\");\nvar ne = { contents: true };\nvar oe = (p) => `%${p.charCodeAt(0).toString(16).toUpperCase()}`;\nvar q = (p) => encodeURIComponent(p).replace(/[!'()*]/g, oe);\nvar y = (p) => q(p).replace(/%2F/g, \"/\");\nvar N = class {\n constructor({ accessKeyId: e, secretAccessKey: t, endpoint: r, bucketName: n, region: o = \"auto\", maxRequestSizeInBytes: i = 5242880, requestAbortTimeout: a = void 0, logger: c = void 0 }) {\n this.getBucketName = () => this.bucketName, this.setBucketName = (s) => {\n this.bucketName = s;\n }, this.getRegion = () => this.region, this.setRegion = (s) => {\n this.region = s;\n }, this.getEndpoint = () => this.endpoint, this.setEndpoint = (s) => {\n this.endpoint = s;\n }, this.getMaxRequestSizeInBytes = () => this.maxRequestSizeInBytes, this.setMaxRequestSizeInBytes = (s) => {\n this.maxRequestSizeInBytes = s;\n }, this.sanitizeETag = (s) => H(s), this.getProps = () => ({ accessKeyId: this.accessKeyId, secretAccessKey: this.secretAccessKey, region: this.region, bucket: this.bucketName, endpoint: this.endpoint, maxRequestSizeInBytes: this.maxRequestSizeInBytes, requestAbortTimeout: this.requestAbortTimeout, logger: this.logger }), this.setProps = (s) => {\n this._validateConstructorParams(s.accessKeyId, s.secretAccessKey, s.bucketName, s.endpoint), this.accessKeyId = s.accessKeyId, this.secretAccessKey = s.secretAccessKey, this.region = s.region || \"auto\", this.bucketName = s.bucketName, this.endpoint = s.endpoint, this.maxRequestSizeInBytes = s.maxRequestSizeInBytes || 5242880, this.requestAbortTimeout = s.requestAbortTimeout, this.logger = s.logger;\n }, this._validateConstructorParams(e, t, r, n), this.accessKeyId = e, this.secretAccessKey = t, this.endpoint = r, this.bucketName = n, this.region = o, this.maxRequestSizeInBytes = i, this.requestAbortTimeout = a, this.logger = c;\n }\n _validateConstructorParams(e, t, r, n) {\n if (typeof e != \"string\" || e.trim().length === 0) throw new TypeError(ee);\n if (typeof t != \"string\" || t.trim().length === 0) throw new TypeError(te);\n if (typeof r != \"string\" || r.trim().length === 0) throw new TypeError(se);\n if (typeof n != \"string\" || n.trim().length === 0) throw new TypeError(re);\n }\n _checkMethodHeadnGet(e) {\n if (e !== \"GET\" && e !== \"HEAD\") throw this._log(\"error\", `${u}method must be either GET or HEAD`), new Error(\"method must be either GET or HEAD\");\n }\n _checkKey(e) {\n if (typeof e != \"string\" || e.trim().length === 0) throw this._log(\"error\", j), new TypeError(j);\n }\n _checkDelimiter(e) {\n if (typeof e != \"string\" || e.trim().length === 0) throw this._log(\"error\", G), new TypeError(G);\n }\n _checkPrefix(e) {\n if (typeof e != \"string\") throw this._log(\"error\", B), new TypeError(B);\n }\n _checkMaxKeys(e) {\n if (typeof e != \"number\" || e <= 0) throw this._log(\"error\", F), new TypeError(F);\n }\n _checkOpts(e) {\n if (typeof e != \"object\") throw this._log(\"error\", `${u}opts must be an object`), new TypeError(`${u}opts must be an object`);\n }\n _log(e, t, r = {}) {\n if (this.logger && typeof this.logger[e] == \"function\") {\n let n = (a) => typeof a != \"object\" || a === null ? a : Object.keys(a).reduce((c, s) => (X.includes(s.toLowerCase()) ? c[s] = \"[REDACTED]\" : typeof a[s] == \"object\" && a[s] !== null ? c[s] = n(a[s]) : c[s] = a[s], c), Array.isArray(a) ? [] : {}), o = n(r), i = { timestamp: (/* @__PURE__ */ new Date()).toISOString(), level: e, message: t, ...o, context: n({ bucketName: this.bucketName, region: this.region, endpoint: this.endpoint, accessKeyId: this.accessKeyId ? `${this.accessKeyId.substring(0, 4)}...` : void 0 }) };\n this.logger[e](i);\n }\n }\n async getContentLength(e) {\n this._checkKey(e);\n let t = { [f]: E }, r = y(e), { url: n, headers: o } = await this._sign(\"HEAD\", r, {}, t, \"\"), a = (await this._sendRequest(n, \"HEAD\", o)).headers.get(T);\n return a ? parseInt(a, 10) : 0;\n }\n async bucketExists() {\n let e = { [f]: E }, { url: t, headers: r } = await this._sign(\"HEAD\", \"\", {}, e, \"\"), n = await this._sendRequest(t, \"HEAD\", r);\n return !!(n.ok && n.status === 200);\n }\n async fileExists(e, t = {}) {\n this._checkKey(e);\n let { filteredOpts: r, conditionalHeaders: n } = this._filterIfHeaders(t), o = { [f]: E, ...n }, i = y(e), { url: a, headers: c } = await this._sign(\"HEAD\", i, r, o, \"\");\n try {\n let s = await this._sendRequest(a, \"HEAD\", c, \"\", [200, 404, 412, 304]);\n return s.status === 404 ? false : s.status === 412 || s.status === 304 ? null : s.ok && s.status === 200 ? true : (this._handleErrorResponse(s), false);\n } catch (s) {\n let l = s instanceof Error ? s.message : String(s);\n throw this._log(\"error\", `${u}Failed to check if file exists: ${l}`), new Error(`${u}Failed to check if file exists: ${l}`);\n }\n }\n async _sign(e, t, r, n, o) {\n let i = (/* @__PURE__ */ new Date()).toISOString().replace(/[:-]|\\.\\d{3}/g, \"\"), a = typeof t == \"string\" && t.length > 0 ? new URL(t, this.endpoint) : new URL(this.endpoint);\n a.pathname = `/${encodeURI(this.bucketName)}${a.pathname}`, n[f] = o ? await U(o) : E, n[Z] = i, n[V] = a.host;\n let c = this._buildCanonicalHeaders(n), s = Object.keys(n).map((_) => _.toLowerCase()).sort().join(\";\"), l = await this._buildCanonicalRequest(e, a, r, c, s, o), h = await this._buildStringToSign(i, l), d = await this._calculateSignature(i, h), g = this._buildAuthorizationHeader(i, s, d);\n return n[J] = g, { url: a.toString(), headers: n };\n }\n _buildCanonicalHeaders(e) {\n return Object.entries(e).map(([t, r]) => `${t.toLowerCase()}:${String(r).trim()}`).sort().join(`\n`);\n }\n async _buildCanonicalRequest(e, t, r, n, o, i) {\n return [e, t.pathname, this._buildCanonicalQueryString(r), `${n}\n`, o, i ? await U(i) : E].join(`\n`);\n }\n async _buildStringToSign(e, t) {\n let r = [e.slice(0, 8), this.region, O, K].join(\"/\");\n return [x, e, r, await U(t)].join(`\n`);\n }\n async _calculateSignature(e, t) {\n let r = await this._getSignatureKey(e.slice(0, 8));\n return A(r, t, \"hex\");\n }\n _buildAuthorizationHeader(e, t, r) {\n let n = [e.slice(0, 8), this.region, O, K].join(\"/\");\n return [`${x} Credential=${this.accessKeyId}/${n}`, `SignedHeaders=${t}`, `Signature=${r}`].join(\", \");\n }\n _filterIfHeaders(e) {\n let t = {}, r = {}, n = [\"if-match\", \"if-none-match\", \"if-modified-since\", \"if-unmodified-since\"];\n for (let [o, i] of Object.entries(e)) n.includes(o) ? r[o] = i : t[o] = i;\n return { filteredOpts: t, conditionalHeaders: r };\n }\n async list(e = \"/\", t = \"\", r = 1e3, n = \"GET\", o = {}) {\n this._checkDelimiter(e), this._checkPrefix(t), this._checkMaxKeys(r), this._checkMethodHeadnGet(n), this._checkOpts(o), this._log(\"info\", `Listing objects in ${t}`);\n let i = { \"list-type\": v, \"max-keys\": String(r), ...o };\n t.length > 0 && (i.prefix = t);\n let a = { [m]: w, [f]: E }, c = e === \"/\" ? e : q(e), { url: s, headers: l } = await this._sign(\"GET\", c, i, a, \"\"), h = `${s}?${new URLSearchParams(i)}`, d = await this._sendRequest(h, \"GET\", l), g = await d.text();\n if (n === \"HEAD\") {\n let R = d.headers.get(T), S = d.headers.get(C), Y = d.headers.get(P);\n return { size: R ? +R : void 0, mtime: S ? new Date(S) : void 0, ETag: Y || void 0 };\n }\n let _ = b(g), I = _.listBucketResult || _.error || _;\n return I.contents || I;\n }\n async listMultiPartUploads(e = \"/\", t = \"\", r = \"GET\", n = {}) {\n var o, i, a;\n this._checkDelimiter(e), this._checkPrefix(t), this._checkMethodHeadnGet(r), this._checkOpts(n), this._log(\"info\", `Listing multipart uploads in ${t}`);\n let c = { uploads: \"\", ...n }, s = { [m]: w, [f]: E }, l = e === \"/\" ? e : q(e), { url: h, headers: d } = await this._sign(\"GET\", l, c, s, \"\"), g = `${h}?${new URLSearchParams(c)}`, _ = await this._sendRequest(g, \"GET\", d), I = await _.text();\n if (r === \"HEAD\") return { size: +((o = _.headers.get(T)) !== null && o !== void 0 ? o : \"0\"), mtime: new Date((i = _.headers.get(C)) !== null && i !== void 0 ? i : \"\"), ETag: (a = _.headers.get(P)) !== null && a !== void 0 ? a : \"\" };\n let R = b(I), S = R.listMultipartUploadsResult || R.error || R;\n return S.uploads || S;\n }\n async get(e, t = {}) {\n this._checkKey(e), this._log(\"info\", `Getting object ${e}`);\n let { filteredOpts: r, conditionalHeaders: n } = this._filterIfHeaders(t), o = { [m]: w, [f]: E, ...n }, i = y(e), { url: a, headers: c } = await this._sign(\"GET\", i, r, o, \"\"), s = await this._sendRequest(a, \"GET\", c, \"\", [200, 404, 412, 304]);\n if (s.status === 404 || s.status === 412 || s.status === 304) return this._log(\"error\", `Failed to get object. Status: ${s.status}`), null;\n if (!s.ok) throw this._log(\"error\", `Failed to get object. Status: ${s.status}`), new Error(`Failed to get object. Status: ${s.status}`);\n return s.text();\n }\n async getObjectWithETag(e, t = {}) {\n this._checkKey(e), this._log(\"info\", `Getting object ${e}`);\n let { filteredOpts: r, conditionalHeaders: n } = this._filterIfHeaders(t), o = { [m]: w, [f]: E, ...n }, i = y(e), { url: a, headers: c } = await this._sign(\"GET\", i, r, o, \"\");\n try {\n let s = await this._sendRequest(a, \"GET\", c, \"\", [200, 404, 412, 304]);\n if (s.status === 404 || s.status === 412 || s.status === 304) return this._log(\"error\", `Failed to get object. Status: ${s.status}`), { etag: null, data: null };\n if (!s.ok) throw this._log(\"error\", `Failed to get object. Status: ${s.status}`), new Error(`Failed to get object. Status: ${s.status}`);\n let l = s.headers.get(\"etag\");\n if (!l) throw new Error(\"ETag not found in response headers\");\n let h = await s.text();\n return { etag: H(l), data: h };\n } catch (s) {\n throw this._log(\"error\", `Error getting object ${e} with ETag: ${s}`), s;\n }\n }\n async getEtag(e, t = {}) {\n this._checkKey(e), this._log(\"info\", `Getting etag object ${e}`);\n let { filteredOpts: r, conditionalHeaders: n } = this._filterIfHeaders(t), o = { [m]: w, [f]: E, ...n }, i = y(e), { url: a, headers: c } = await this._sign(\"HEAD\", i, r, o, \"\"), s = await this._sendRequest(a, \"HEAD\", c, \"\", [200, 412, 304]);\n if (this._log(\"info\", `Response status: ${s.status, s.statusText}`), s.status === 412 || s.status === 304) return null;\n let l = s.headers.get(\"etag\");\n if (!l) throw this._log(\"error\", \"ETag not found in response headers\"), new Error(\"ETag not found in response headers\");\n return H(l);\n }\n async getResponse(e, t = true, r = 0, n = this.maxRequestSizeInBytes, o = {}) {\n this._checkKey(e);\n let { filteredOpts: i, conditionalHeaders: a } = this._filterIfHeaders({ ...o }), c = { [m]: w, [f]: E, ...t ? {} : { range: `bytes=${r}-${n - 1}` }, ...a }, s = y(e), { url: l, headers: h } = await this._sign(\"GET\", s, i, c, \"\"), d = `${l}?${new URLSearchParams(i)}`;\n return this._sendRequest(d, \"GET\", h);\n }\n async put(e, t) {\n if (this._checkKey(e), !(t instanceof Buffer || typeof t == \"string\")) throw this._log(\"error\", D), new TypeError(D);\n this._log(\"info\", `Uploading object ${e}`);\n let r = typeof t == \"string\" ? Buffer.byteLength(t) : t.length, n = { [T]: r }, o = y(e), { url: i, headers: a } = await this._sign(\"PUT\", o, {}, n, t);\n return await this._sendRequest(i, \"PUT\", a, t);\n }\n async getMultipartUploadId(e, t = W) {\n if (this._checkKey(e), typeof t != \"string\") throw this._log(\"error\", `${u}fileType must be a string`), new TypeError(`${u}fileType must be a string`);\n this._log(\"info\", `Initiating multipart upload for object ${e}`);\n let r = { uploads: \"\" }, n = { [m]: t, [f]: E }, o = y(e), { url: i, headers: a } = await this._sign(\"POST\", o, r, n, \"\"), c = `${i}?${new URLSearchParams(r)}`, l = await (await this._sendRequest(c, \"POST\", a)).text(), h = b(l);\n if (typeof h == \"object\" && h !== null && \"error\" in h && typeof h.error == \"object\" && h.error !== null && \"message\" in h.error) {\n let d = String(h.error.message);\n throw this._log(\"error\", `${u}Failed to abort multipart upload: ${d}`), new Error(`${u}Failed to abort multipart upload: ${d}`);\n }\n if (typeof h == \"object\" && h !== null) {\n if (!h.initiateMultipartUploadResult || !h.initiateMultipartUploadResult.uploadId) throw this._log(\"error\", `${u}Failed to create multipart upload: no uploadId in response`), new Error(`${u}Failed to create multipart upload: Missing upload ID in response`);\n return h.initiateMultipartUploadResult.uploadId;\n } else throw this._log(\"error\", `${u}Failed to create multipart upload: unexpected response format`), new Error(`${u}Failed to create multipart upload: Unexpected response format`);\n }\n async uploadPart(e, t, r, n, o = {}) {\n this._validateUploadPartParams(e, t, r, n, o);\n let i = { uploadId: r, partNumber: n, ...o }, a = { [T]: t.length }, c = y(e), { url: s, headers: l } = await this._sign(\"PUT\", c, i, a, t), h = `${s}?${new URLSearchParams(i)}`, d = await this._sendRequest(h, \"PUT\", l, t), g = H(d.headers.get(\"etag\") || \"\");\n return { partNumber: n, ETag: g };\n }\n _validateUploadPartParams(e, t, r, n, o) {\n if (this._checkKey(e), !(t instanceof Buffer || typeof t == \"string\")) throw this._log(\"error\", D), new TypeError(D);\n if (typeof r != \"string\" || r.trim().length === 0) throw this._log(\"error\", $), new TypeError($);\n if (!Number.isInteger(n) || n <= 0) throw this._log(\"error\", `${u}partNumber must be a positive integer`), new TypeError(`${u}partNumber must be a positive integer`);\n this._checkOpts(o);\n }\n async completeMultipartUpload(e, t, r) {\n if (this._checkKey(e), typeof t != \"string\" || t.trim().length === 0) throw this._log(\"error\", $), new TypeError($);\n if (!Array.isArray(r) || r.length === 0) throw this._log(\"error\", L), new TypeError(L);\n if (!r.every((_) => typeof _.partNumber == \"number\" && typeof _.ETag == \"string\")) throw this._log(\"error\", k), new TypeError(k);\n this._log(\"info\", `Complete multipart upload ${t} for object ${e}`);\n let n = { uploadId: t }, o = this._buildCompleteMultipartUploadXml(r), i = { [m]: M, [T]: Buffer.byteLength(o).toString(), [f]: await U(o) }, a = y(e), { url: c, headers: s } = await this._sign(\"POST\", a, n, i, o), l = `${c}?${new URLSearchParams(n)}`, d = await (await this._sendRequest(l, \"POST\", s, o)).text(), g = b(d);\n if (typeof g == \"object\" && g !== null && \"error\" in g && typeof g.error == \"object\" && g.error !== null && \"message\" in g.error) {\n let _ = String(g.error.message);\n throw this._log(\"error\", `${u}Failed to abort multipart upload: ${_}`), new Error(`${u}Failed to abort multipart upload: ${_}`);\n }\n return g.completeMultipartUploadResult;\n }\n async abortMultipartUpload(e, t) {\n if (this._checkKey(e), typeof t != \"string\" || t.trim().length === 0) throw this._log(\"error\", $), new TypeError($);\n this._log(\"info\", `Aborting multipart upload ${t} for object ${e}`);\n let r = { uploadId: t }, n = { [m]: M, [f]: E };\n try {\n let o = y(e), { url: i, headers: a } = await this._sign(\"DELETE\", o, r, n, \"\"), c = `${i}?${new URLSearchParams(r)}`, s = await this._sendRequest(c, \"DELETE\", a);\n if (s.ok) {\n let l = await s.text(), h = b(l);\n if (typeof h == \"object\" && h !== null && \"error\" in h && typeof h.error == \"object\" && h.error !== null && \"message\" in h.error) {\n let d = String(h.error.message);\n throw this._log(\"error\", `${u}Failed to abort multipart upload: ${d}`), new Error(`${u}Failed to abort multipart upload: ${d}`);\n }\n return { status: \"Aborted\", key: e, uploadId: t, response: h };\n } else throw this._log(\"error\", `${u}Abort request failed with status ${s.status}`), new Error(`${u}Abort request failed with status ${s.status}`);\n } catch (o) {\n let i = o instanceof Error ? o.message : String(o);\n throw this._log(\"error\", `${u}Failed to abort multipart upload for key ${e}: ${i}`), new Error(`${u}Failed to abort multipart upload for key ${e}: ${i}`);\n }\n }\n _buildCompleteMultipartUploadXml(e) {\n return `\n \n ${e.map((t) => `\n \n ${t.partNumber}\n ${t.ETag}\n \n `).join(\"\")}\n \n `;\n }\n async delete(e) {\n this._checkKey(e), this._log(\"info\", `Deleting object ${e}`);\n let t = { [m]: w, [f]: E }, r = y(e), { url: n, headers: o } = await this._sign(\"DELETE\", r, {}, t, \"\"), i = await this._sendRequest(n, \"DELETE\", o);\n return i.status === 204 || i.status === 200;\n }\n async _sendRequest(e, t, r, n, o = []) {\n this._log(\"info\", `Sending ${t} request to ${e}, headers: ${JSON.stringify(r)}`);\n let i = await fetch(e, { method: t, headers: r, body: [\"GET\", \"HEAD\"].includes(t) ? void 0 : n, signal: this.requestAbortTimeout !== void 0 ? AbortSignal.timeout(this.requestAbortTimeout) : void 0 });\n return !i.ok && !o.includes(i.status) && await this._handleErrorResponse(i), i;\n }\n async _handleErrorResponse(e) {\n let t = await e.text(), r = e.headers.get(\"x-amz-error-code\") || \"Unknown\", n = e.headers.get(\"x-amz-error-message\") || e.statusText;\n throw this._log(\"error\", `${u}Request failed with status ${e.status}: ${r} - ${n},err body: ${t}`), new Error(`${u}Request failed with status ${e.status}: ${r} - ${n}, err body: ${t}`);\n }\n _buildCanonicalQueryString(e) {\n return Object.keys(e).length < 1 ? \"\" : Object.keys(e).sort().map((t) => `${encodeURIComponent(t)}=${encodeURIComponent(e[t])}`).join(\"&\");\n }\n async _getSignatureKey(e) {\n let t = await A(`AWS4${this.secretAccessKey}`, e), r = await A(t, this.region), n = await A(r, O);\n return A(n, K);\n }\n};\nvar U = async (p) => {\n let e = Q(\"sha256\");\n return e.update(p), e.digest(\"hex\");\n};\nvar A = async (p, e, t) => {\n let r = z(\"sha256\", p);\n return r.update(e), r.digest(t);\n};\nvar H = (p) => {\n let e = { '\"': \"\", \""\": \"\", \""\": \"\", \""\": \"\", \""\": \"\" };\n return p.replace(/^(\"|"|")|(\"|"|")$/g, (t) => e[t]);\n};\nvar b = (p) => {\n let e = (o) => o.replace(/"/g, '\"').replace(/'/g, \"'\").replace(/</g, \"<\").replace(/>/g, \">\").replace(/&/g, \"&\"), t = {}, r = /<(\\w)([-\\w]+)(?:\\/|[^>]*>((?:(?!<\\1)[\\s\\S])*)<\\/\\1\\2)>/gm, n;\n for (; n = r.exec(p); ) {\n let [, o, i, a] = n, c = o.toLowerCase() + i, s = a != null ? b(a) : true;\n typeof s == \"string\" ? t[c] = H(e(s)) : Array.isArray(t[c]) ? t[c].push(s) : t[c] = t[c] != null ? [t[c], s] : ne[c] ? [s] : s;\n }\n return Object.keys(t).length ? t : e(p);\n};\n\n// src/lowstorage.ts\nvar import_avsc = __toESM(require_lib(), 1);\n\n// src/errors.ts\nvar lowstorage_ERROR_CODES = {\n MISSING_ARGUMENT: \"MISSING_ARGUMENT\",\n COLLECTION_EXISTS: \"COLLECTION_EXISTS\",\n CREATE_COLLECTION_ERROR: \"CREATE_COLLECTION_ERROR\",\n RENAME_COLLECTION_ERROR: \"RENAME_COLLECTION_ERROR\",\n REMOVE_COLLECTION_ERROR: \"REMOVE_COLLECTION_ERROR\",\n UPDATE_COLLECTION_SCHEMA_ERROR: \"UPDATE_COLLECTION_SCHEMA_ERROR\",\n COLLECTION_NOT_FOUND: \"COLLECTION_NOT_FOUND\",\n SCHEMA_VALIDATION_ERROR: \"SCHEMA_VALIDATION_ERROR\",\n DOCUMENT_VALIDATION_ERROR: \"DOCUMENT_VALIDATION_ERROR\",\n S3_OPERATION_ERROR: \"S3_OPERATION_ERROR\",\n FIND_ERROR: \"FIND_ERROR\",\n FIND_ONE_ERROR: \"FIND_ONE_ERROR\",\n SAVE_DATA_ERROR: \"SAVE_DATA_ERROR\",\n INSERT_ERROR: \"INSERT_ERROR\",\n UPDATE_ERROR: \"UPDATE_ERROR\",\n UPDATE_ONE_ERROR: \"UPDATE_ONE_ERROR\",\n DELETE_ERROR: \"DELETE_ERROR\",\n COUNT_ERROR: \"COUNT_ERROR\",\n UNKNOWN_ERROR: \"UNKNOWN_ERROR\"\n};\nvar lowstorageError = class extends Error {\n constructor(message, code = lowstorage_ERROR_CODES.UNKNOWN_ERROR) {\n super(`lowstorageError: ${message} :: code: ${code}`);\n this.name = this.constructor.name;\n this.code = code;\n Error.captureStackTrace(this, this.constructor);\n }\n};\nvar SchemaValidationError = class extends lowstorageError {\n constructor(message, code = lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR) {\n super(message, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR);\n }\n};\nvar DocumentValidationError = class extends lowstorageError {\n constructor(message, code = lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR) {\n super(message, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR);\n }\n};\nvar S3OperationError = class extends lowstorageError {\n constructor(message, operation) {\n super(`S3 ${operation} operation failed: ${message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n};\n\n// src/helpers.ts\nimport { randomUUID } from \"node:crypto\";\nvar matchesQuery = (document, query) => {\n return Object.keys(query).every((key) => document[key] === query[key]);\n};\nvar generateUUID = async () => {\n if (typeof randomUUID !== \"undefined\" && typeof randomUUID === \"function\") {\n return randomUUID();\n }\n if (typeof crypto !== \"undefined\" && typeof crypto === \"object\" && typeof crypto.randomUUID === \"function\") {\n return crypto.randomUUID();\n }\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, function(c) {\n var r = Math.random() * 16 | 0, v2 = c === \"x\" ? r : r & 3 | 8;\n return v2.toString(16);\n });\n};\nvar ensureIdFieldInSchema = (schema) => {\n const idField = {\n name: \"_id\",\n type: \"string\",\n size: 16,\n logicalType: \"UUID\"\n };\n if (typeof schema === \"undefined\" || schema === null) {\n return schema;\n }\n if (\"type\" in schema && schema.type === \"record\" && \"fields\" in schema && Array.isArray(schema.fields)) {\n const hasIdField = schema.fields.some((field) => field.name === \"_id\");\n if (!hasIdField) {\n schema.fields.unshift(idField);\n }\n } else if (\"type\" in schema && schema.type === \"array\" && \"items\" in schema && schema.items !== null && typeof schema.items === \"object\" && \"type\" in schema.items && schema.items.type === \"record\" && \"fields\" in schema.items && Array.isArray(schema.items.fields)) {\n const hasIdField = schema.items.fields.some((field) => field.name === \"_id\");\n if (!hasIdField) {\n schema.items.fields.unshift(idField);\n }\n }\n return schema;\n};\n\n// src/lowstorage.ts\nvar MODULE_NAME = \"lowstorage\";\nvar DEFAULT_DELIMITER = \"/\";\nvar PROJECT_DIR_PREFIX = \"lowstorage\";\nvar COL_SUFFIX = \".avro\";\nvar CHUNG_1MB = 1024 * 1024;\nvar CHUNG_5MB = 5 * CHUNG_1MB;\nvar EMPTY_DATA = Buffer.from(\"\", \"utf8\");\nvar errorValidationFn = (errorCode = lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR) => {\n throw new DocumentValidationError(`${MODULE_NAME}: Invalid document or schema ${errorCode}`);\n};\nvar _hasColName = (colName = \"\") => {\n if (colName.trim() === \"\" || colName === null || typeof colName === \"undefined\" || colName.length > 255 || colName === null) {\n throw new lowstorageError(`${MODULE_NAME}: Collection name is required, null or too long`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n }\n};\nvar lowstorage = class {\n constructor(options) {\n this._checkArgs = (args) => {\n const requiredFields = [\"accessKeyId\", \"secretAccessKey\", \"endpoint\", \"bucketName\"];\n for (const field of requiredFields) {\n if (!args[field]) {\n throw new lowstorageError(`${MODULE_NAME}: ${field} is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n }\n }\n };\n /**\n * Get the S3 instance associated with the lowstorage instance.\n * @returns {S3} The S3 instance. Use this to perform S3 operations. Check for ultralight-s3 for more details.\n */\n this.s3 = () => {\n return this._s3;\n };\n this._checkArgs(options);\n this._schemas = /* @__PURE__ */ new Map();\n this._s3 = new N(options);\n this._dirPrefix = options.dirPrefix || PROJECT_DIR_PREFIX;\n this._avroParse = import_avsc.Type;\n }\n /**\n * List all collections.\n * @returns {Promise} An array of collection names.\n * @throws {S3OperationError} If there's an error during S3 operation.\n */\n async listCollections() {\n try {\n const listed = await this._s3.list(DEFAULT_DELIMITER, this._dirPrefix);\n if (Array.isArray(listed)) {\n return listed.map((entry) => entry.key.slice(this._dirPrefix.length + 1, -COL_SUFFIX.length));\n } else if (typeof listed === \"object\" && listed !== null && \"keyCount\" in listed && listed.keyCount === \"0\") {\n return [];\n }\n return [];\n } catch (error) {\n throw new S3OperationError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n }\n /**\n * Check if a collection exists.\n * @param {string} colName - The name of the collection.\n * @returns {Promise} True if the collection exists, false otherwise.\n * @throws {lowstorageError} If there's an error.\n */\n async collectionExists(colName = \"\") {\n try {\n _hasColName(colName);\n const exists = await this._s3.fileExists(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`);\n return !!exists;\n } catch (error) {\n if (error.message.includes(\"Not Found\")) {\n return false;\n }\n throw new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND);\n }\n }\n /**\n * Create a new collection.\n * @param {string} colName - The name of the collection.\n * @param {Object} [schema] - The schema for the collection.\n * @param {Array} [data=[]] - The initial data for the collection.\n * @returns {Promise} A Promise that resolves to a Collection object.\n * @throws {lowstorageError} If there's an error.\n */\n async createCollection(colName = \"\", schema, data = []) {\n try {\n _hasColName(colName);\n const exists = await this.collectionExists(colName);\n if (!exists) {\n if (typeof schema !== \"undefined\" && schema !== null) {\n try {\n const type = this._avroParse.forSchema(schema);\n if (!type) {\n throw new SchemaValidationError(\n `${MODULE_NAME}: Schema is invalid: ${schema} ${lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR}`\n );\n } else {\n this._schemas.set(colName, schema);\n }\n } catch (error) {\n throw new SchemaValidationError(`${MODULE_NAME}: Schema is invalid: ${schema}`, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR);\n }\n }\n if (data.length > 0 && schema) {\n const wrapperType = this._avroParse.forSchema({ type: \"array\", items: schema });\n await this._s3.put(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`, wrapperType.toBuffer(data));\n } else {\n await this._s3.put(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`, EMPTY_DATA);\n }\n return this.collection(colName, schema, false);\n }\n throw new lowstorageError(`${MODULE_NAME}: Collection ${colName} already exists`, lowstorage_ERROR_CODES.COLLECTION_EXISTS);\n } catch (error) {\n if (error instanceof lowstorageError) {\n throw error;\n }\n throw new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.CREATE_COLLECTION_ERROR);\n }\n }\n /**\n * Remove a collection.\n * @param {string} colName - The name of the collection.\n * @returns {Promise} A Promise that resolves to true if the collection is removed, false otherwise.\n * @throws {lowstorageError} If there's an error.\n */\n async removeCollection(colName = \"\") {\n try {\n _hasColName(colName);\n const exists = await this.collectionExists(colName);\n if (exists) {\n await this._s3.delete(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`);\n const exists2 = await this.collectionExists(colName);\n if (typeof exists2 === \"boolean\") {\n if (!exists2) {\n this._schemas.delete(colName);\n return true;\n }\n throw new lowstorageError(`${MODULE_NAME}: Failed to delete collection ${colName}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n throw new S3OperationError(`${MODULE_NAME}: Failed to delete collection ${colName}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n throw new lowstorageError(`${MODULE_NAME}: Collection ${colName} does not exist`, lowstorage_ERROR_CODES.REMOVE_COLLECTION_ERROR);\n } catch (error) {\n if (error instanceof S3OperationError) {\n throw error;\n }\n throw new lowstorageError(\n `${MODULE_NAME}: Failed to remove collection: ${error.message}`,\n lowstorage_ERROR_CODES.REMOVE_COLLECTION_ERROR\n );\n }\n }\n /**\n * Get or create a collection.\n * @param {string} colName - The name of the collection.\n * @param {Object} [schema] - The schema for the collection.\n * @param {boolean} [autoCreate=true] - Whether to automatically create the collection if it doesn't exist.\n * @returns {Promise} A Promise that resolves to a Collection object.\n * @throws {lowstorageError} If there's an error.\n */\n async collection(colName = \"\", schema, autoCreate = true) {\n try {\n _hasColName(colName);\n const colPath = `${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`;\n const exists = await this._s3.fileExists(colPath);\n if (!exists) {\n if (!autoCreate) {\n throw new lowstorageError(`${MODULE_NAME}: Collection ${colName} does not exist`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND);\n }\n await this._s3.put(colPath, EMPTY_DATA);\n }\n const colSchema = schema || this._schemas.get(colName) || void 0;\n return new Collection(colName, colSchema, this._s3, this._dirPrefix);\n } catch (error) {\n if (error.message.includes(\"unknown type\")) {\n throw new SchemaValidationError(\n `${MODULE_NAME}: Schema input is invalid: ${error.message}`,\n lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR\n );\n }\n throw new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND);\n }\n }\n};\nvar Collection = class _Collection {\n constructor(colName = \"\", schema, s3, dirPrefix = PROJECT_DIR_PREFIX, safeWrite = false, chunkSize = CHUNG_5MB) {\n this.getProps = () => ({\n colName: this._colName,\n s3: this._s3,\n schema: this._schema,\n avroParse: this._avroParse,\n avroType: this._avroType,\n dirPrefix: this._dirPrefix,\n safeWrite: this._safeWrite,\n chunkSize: this._chunkSize\n });\n this.setProps = (props) => {\n this._colName = props.colName;\n this._schema = props.schema;\n this._s3 = props.s3;\n this._avroParse = props.avroParse;\n this._avroType = props.avroType;\n this._dirPrefix = props.dirPrefix;\n this._safeWrite = props.safeWrite;\n this._chunkSize = props.chunkSize;\n };\n this.setSafeWrite = (safeWrite) => {\n this._safeWrite = safeWrite;\n };\n this.getSafeWrite = () => {\n return this._safeWrite;\n };\n this.getAvroSchema = () => {\n return this._schema;\n };\n this.setAvroSchema = (schema) => {\n try {\n this._schema = ensureIdFieldInSchema(schema);\n this._avroType = typeof schema === \"undefined\" ? null : this._avroParse.forSchema(schema);\n } catch (error) {\n throw new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR);\n }\n };\n this.inferAvroSchema = (data, type = \"record\") => {\n if (Array.isArray(data)) {\n data = data[0];\n }\n const inferedType = this._avroParse.forValue(data);\n const schema = inferedType.schema();\n return ensureIdFieldInSchema(schema);\n };\n this._colName = colName.trim();\n this._s3 = s3;\n this._schema = ensureIdFieldInSchema(schema);\n this._dirPrefix = dirPrefix;\n this._safeWrite = safeWrite;\n this._chunkSize = chunkSize || CHUNG_5MB;\n this._s3.setMaxRequestSizeInBytes(this._chunkSize);\n this._avroParse = import_avsc.Type;\n this._lastETag = \"\";\n this._dataCache = [];\n this._avroType = typeof schema === \"undefined\" ? null : this._avroParse.forSchema(schema);\n this._key = `${this._dirPrefix}${DEFAULT_DELIMITER}${this._colName}${COL_SUFFIX}`;\n }\n async _loadData() {\n try {\n if (this._avroType === null || typeof this._avroType === \"undefined\") {\n throw new lowstorageError(\n `${MODULE_NAME}: Missing type definition. Configure before operations `,\n lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR\n );\n }\n const { etag, data } = await this._s3.getObjectWithETag(this._key, { \"if-none-match\": this._lastETag });\n if (data === null) {\n return this._dataCache;\n }\n this._lastETag = etag === null ? this._lastETag : etag;\n const wrapperType = this._avroParse.forSchema({ type: \"array\", items: this._avroType });\n if (data.length < this._chunkSize) {\n this._dataCache = data.length > 0 ? wrapperType.fromBuffer(Buffer.from(data, \"utf8\")) : [];\n return this._dataCache;\n }\n let offset = this._chunkSize;\n let bufferArr = [Buffer.from(data, \"utf8\")];\n let repeat = true;\n while (repeat) {\n const nextDataResponse = await this._s3.getResponse(this._key, false, offset, offset + this._chunkSize);\n const nextDataBody = await nextDataResponse.text();\n bufferArr.push(Buffer.from(nextDataBody, \"utf8\"));\n offset += this._chunkSize;\n const contentLength = parseInt(nextDataResponse.headers.get(\"content-length\") || nextDataBody.length.toString());\n if (contentLength < this._chunkSize) {\n repeat = false;\n }\n }\n const bufferedData = Buffer.concat(bufferArr);\n this._dataCache = wrapperType.fromBuffer(bufferedData);\n return this._dataCache;\n } catch (error) {\n if (error.toString().indexOf(\"status 404: Unknown - Not Found\") > -1) {\n this._dataCache = [];\n return this._dataCache;\n }\n throw new S3OperationError(`${MODULE_NAME}: Failed to load data: ${error.message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n }\n async _saveData(data) {\n try {\n if (this._avroType === null || typeof this._avroType === \"undefined\") {\n throw new lowstorageError(\n `${MODULE_NAME}: Missing type definition. Configure before operations `,\n lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR\n );\n }\n const wrapperType = this._avroParse.forSchema({ type: \"array\", items: this._avroType });\n const dataBuffer = data.length > 0 ? wrapperType.toBuffer(data) : EMPTY_DATA;\n if (this._safeWrite && this._lastETag !== \"\") {\n const currentETag = await this._s3.getEtag(this._key);\n if (currentETag !== null && currentETag !== this._lastETag) {\n return false;\n }\n }\n const resp = await this._s3.put(this._key, dataBuffer);\n if (typeof resp === \"object\" && \"status\" in resp && resp.status !== 200) {\n throw new S3OperationError(`${MODULE_NAME}: Failed to save data`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n const newETag = resp.headers?.get(\"etag\") || \"\";\n if (newETag && newETag.length > 0) {\n this._lastETag = this._s3.sanitizeETag(newETag);\n this._dataCache = data;\n }\n return true;\n } catch (error) {\n if (error instanceof S3OperationError) {\n throw error;\n }\n throw new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.SAVE_DATA_ERROR);\n }\n }\n /**\n * Insert a document into the collection.\n * @param {Object|Array} doc - The document to insert.\n * @param {Object} [schema=undefined] - The schema for the document.\n * @returns {Promise} A Promise that resolves to the array of inserted document(s).\n * @throws {lowstorageError} If there's an error.\n */\n async insert(doc, schema) {\n try {\n if (doc === void 0 || doc === null) {\n throw new lowstorageError(`${MODULE_NAME}: Document is required for insert`, lowstorage_ERROR_CODES.INSERT_ERROR);\n }\n if (typeof doc !== \"object\" && !Array.isArray(doc)) {\n throw new DocumentValidationError(\n `${MODULE_NAME}: Document must be an object or an array`,\n lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR\n );\n }\n const items = !Array.isArray(doc) ? [doc] : doc;\n const schemaWithId = schema ? ensureIdFieldInSchema(schema) : this._schema || this.inferAvroSchema(items[0]);\n const avroType = this._avroParse.forSchema(schemaWithId);\n if (!avroType) {\n throw new SchemaValidationError(\n `${MODULE_NAME}: Schema is required - Pass a schema to the insert method`,\n lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR\n );\n }\n this._avroType = avroType;\n const data = await this._loadData();\n for (let item of items) {\n if (typeof item !== \"object\" || item === null) {\n throw new DocumentValidationError(\n `${MODULE_NAME}: Invalid input: input must be an object or an array of objects`,\n lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR\n );\n }\n item._id = item._id || await generateUUID();\n const validBuffer = this._avroType.isValid(item, {\n errorHook: errorValidationFn,\n noUndeclaredFields: true\n });\n if (validBuffer === true) {\n data.push(item);\n } else {\n throw new DocumentValidationError(`${MODULE_NAME}: Invalid document or schema`, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR);\n }\n }\n const success = await this._saveData(data);\n if (!success) {\n throw new S3OperationError(`${MODULE_NAME}: Failed to insert document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n this.setAvroSchema(schemaWithId);\n return items;\n } catch (error) {\n if (error.message.includes(\"unknown type\")) {\n throw new SchemaValidationError(\n `${MODULE_NAME}: Schema input is invalid: ${error.message}`,\n lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR\n );\n }\n if (error instanceof lowstorageError) {\n throw error;\n }\n throw new lowstorageError(`${MODULE_NAME} Insert operation failed: ${error.message}`, lowstorage_ERROR_CODES.INSERT_ERROR);\n }\n }\n /**\n * Find documents in the collection.\n * @param {Object} [query={}] - The query to filter documents.\n * @param {Object} [options={}] - The options for pagination.\n * @param {number} [options.skip=0] - The number of documents to skip. Default is 0.\n * @param {number} [options.limit=undefined] - The maximum number of documents to return. Default is undefined, which means no limit.\n * @returns {Promise} A Promise that resolves to an array of matching documents.\n * @throws {lowstorageError} If there's an error.\n */\n async find(query = {}, options = {}) {\n try {\n if (query === void 0 || query === null) {\n throw new lowstorageError(`${MODULE_NAME}: Query is required for update`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n }\n const data = await this._loadData();\n const start = options.skip !== void 0 ? parseInt(String(options.skip), 10) : 0;\n const end = options.limit !== void 0 ? start + parseInt(String(options.limit), 10) : void 0;\n const filteredData = data.filter((doc) => matchesQuery(doc, query)).slice(start, end);\n return filteredData;\n } catch (error) {\n throw new lowstorageError(`${MODULE_NAME}: Find operation failed: ${error.message}`, lowstorage_ERROR_CODES.FIND_ERROR);\n }\n }\n /**\n * Find the first document in the collection that matches the query.\n * @param {Object} [query={}] - The query to filter documents.\n * @returns {Promise} A Promise that resolves to the first matching document or null if no match is found.\n * @throws {lowstorageError} If there's an error.\n */\n async findOne(query = {}) {\n try {\n if (query === null) {\n throw new lowstorageError(`${MODULE_NAME}: Query cannot be null`, lowstorage_ERROR_CODES.INVALID_ARGUMENT);\n }\n const result = await this.find(query, { limit: 1 });\n return result[0] || null;\n } catch (error) {\n if (error instanceof lowstorageError) {\n throw error;\n }\n throw new lowstorageError(`${MODULE_NAME}: FindOne operation failed: ${error.message}`, lowstorage_ERROR_CODES.FIND_ONE_ERROR);\n }\n }\n /**\n * Update a single document in the collection that matches the query.\n * @param {Object} [query={}] - The query to filter the document to update.\n * @param {Object} [update={}] - The update operations to apply to the matching document.\n * @returns {Promise} A Promise that resolves to number of documents updated.\n * @throws {lowstorageError} If the updateOne operation fails.\n * @throws {SchemaValidationError} If the schema is not defined for the collection.\n * @throws {DocumentValidationError} If the updated document is invalid.\n * @throws {S3OperationError} If the S3 operation fails.\n */\n async update(query = {}, update = {}, options = {}) {\n try {\n if (query === void 0 || query === null || update === void 0 || update === null) {\n throw new lowstorageError(\n `${MODULE_NAME}: Query and update values are required for update`,\n lowstorage_ERROR_CODES.MISSING_ARGUMENT\n );\n }\n if (!this._avroType) {\n throw new SchemaValidationError(\n `${MODULE_NAME}: Schema is not defined for this collection`,\n lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR\n );\n }\n const data = await this._loadData();\n if (data.length === 0) return 0;\n let updatedCount = 0;\n for (let i = 0; i < data.length; i++) {\n if (matchesQuery(data[i], query)) {\n const updatedDoc = { ...data[i], ...update };\n const isValid = this._avroType.isValid(updatedDoc, {\n errorHook: errorValidationFn,\n noUndeclaredFields: true\n });\n if (isValid === true) {\n data[i] = updatedDoc;\n updatedCount++;\n } else {\n throw new DocumentValidationError(\n `${MODULE_NAME}: Invalid document or schema`,\n lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR\n );\n }\n }\n }\n if (updatedCount > 0) {\n const success = await this._saveData(data);\n if (!success) {\n throw new S3OperationError(`${MODULE_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n } else if (options && \"upsert\" in options && options.upsert) {\n const success = await this.insert(update);\n if (!success) {\n throw new S3OperationError(`${MODULE_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n updatedCount = 1;\n }\n return updatedCount;\n } catch (error) {\n if (error instanceof S3OperationError) {\n throw error;\n }\n throw new lowstorageError(`${MODULE_NAME}: Update operation failed: ${error.message}`, lowstorage_ERROR_CODES.UPDATE_ERROR);\n }\n }\n /**\n * Update a single document in the collection that matches the query.\n * @param {Object} [query={}] - The query to filter the document to update.\n * @param {Object} [update={}] - The update operations to apply to the matching document.\n * @returns {Promise} A Promise that resolves to 1 if a document was updated, 0 otherwise.\n /**\n * Update a single document in the collection that matches the query.\n * @throws {lowstorageError} If the updateOne operation fails.\n * @throws {SchemaValidationError} If the schema is not defined for the collection.\n * @throws {DocumentValidationError} If the updated document is invalid.\n * @throws {S3OperationError} If the S3 operation fails.\n */\n async updateOne(query = {}, update = {}, options = {}) {\n try {\n if (query === void 0 || query === null || update === void 0 || update === null) {\n throw new lowstorageError(`${MODULE_NAME}: Query is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n }\n if (!this._avroType) {\n throw new SchemaValidationError(\n `${MODULE_NAME}: Schema is not defined for this collection`,\n lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR\n );\n }\n const data = await this._loadData();\n if (data.length === 0) return 0;\n const docIndex = data.findIndex((doc) => matchesQuery(doc, query));\n if (docIndex !== -1) {\n const updatedDoc = { ...data[docIndex], ...update };\n const isValid = this._avroType.isValid(updatedDoc, {\n errorHook: errorValidationFn,\n noUndeclaredFields: true\n });\n if (isValid === true) {\n data[docIndex] = updatedDoc;\n const success = await this._saveData(data);\n if (!success) {\n throw new S3OperationError(`${MODULE_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n return 1;\n } else {\n throw new DocumentValidationError(`${MODULE_NAME}: Invalid document or schema`, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR);\n }\n }\n if (options && \"upsert\" in options && options.upsert) {\n const success = await this.insert(update);\n if (!success) {\n throw new S3OperationError(`${MODULE_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n return 1;\n }\n return 0;\n } catch (error) {\n if (error instanceof lowstorageError) {\n throw error;\n }\n throw new lowstorageError(`${MODULE_NAME}: UpdateOne operation failed: ${error.message}`, lowstorage_ERROR_CODES.UPDATE_ONE_ERROR);\n }\n }\n /**\n * Delete documents from the collection.\n * @param {Object} [query={}] - The query to filter documents to delete.\n * @returns {Promise} A Promise that resolves to the number of documents deleted.\n * @throws {lowstorageError} If the delete operation fails.\n * @throws {S3OperationError} If the S3 operation fails.\n */\n async delete(query = {}) {\n try {\n if (query === void 0 || query === null) {\n throw new lowstorageError(`${MODULE_NAME}: Query is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n }\n const data = await this._loadData();\n if (data.length === 0) return 0;\n const initialLength = data.length;\n const newData = data.filter((doc) => !matchesQuery(doc, query));\n const success = await this._saveData(newData);\n if (!success) {\n throw new S3OperationError(`${MODULE_NAME}: Failed to delete document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n return initialLength - newData.length;\n } catch (error) {\n if (error instanceof S3OperationError) {\n throw error;\n }\n throw new lowstorageError(`${MODULE_NAME}: Delete operation failed: ${error.message}`, lowstorage_ERROR_CODES.DELETE_ERROR);\n }\n }\n /**\n * Delete all documents from the collection.\n * @returns {Promise} A Promise that resolves to the number of documents deleted.\n * @throws {lowstorageError} If the delete operation fails.\n * @throws {S3OperationError} If the S3 operation fails.\n */\n async deleteAll() {\n try {\n const data = await this._loadData();\n const initialLength = data.length;\n const success = await this._saveData([]);\n if (!success) {\n throw new S3OperationError(`${MODULE_NAME}: Failed to delete document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n return initialLength;\n } catch (error) {\n if (error instanceof S3OperationError) {\n throw error;\n }\n throw new lowstorageError(`${MODULE_NAME}: Delete operation failed: ${error.message}`, lowstorage_ERROR_CODES.DELETE_ERROR);\n }\n }\n /**\n * Count the number of documents in the collection.\n * @param {Object} [query={}] - The query to filter documents.\n * @returns {Promise} A Promise that resolves to the number of documents in the collection.\n * @throws {lowstorageError} If the count operation fails.\n */\n async count(query = {}) {\n try {\n const data = await this.find(query);\n return data.length;\n } catch (error) {\n throw new lowstorageError(`${MODULE_NAME}: Count operation failed: ${error.message}`, lowstorage_ERROR_CODES.COUNT_ERROR);\n }\n }\n async renameCollection(newColName, newSchema = this._schema) {\n try {\n _hasColName(newColName);\n const exists = await this._s3.fileExists(`${this._dirPrefix}${DEFAULT_DELIMITER}${newColName}${COL_SUFFIX}`);\n if (!!exists) {\n throw new lowstorageError(`${MODULE_NAME}: Collection ${newColName} already exists`, lowstorage_ERROR_CODES.COLLECTION_EXISTS);\n }\n const schema = newSchema || this.getAvroSchema();\n const data = await this._loadData();\n const createNew = new _Collection(newColName, schema, this._s3, this._dirPrefix, this._safeWrite, this._chunkSize);\n await createNew._saveData(data);\n await this._s3.delete(`${this._dirPrefix}${DEFAULT_DELIMITER}${this._colName}${COL_SUFFIX}`);\n return createNew;\n } catch (error) {\n if (error instanceof lowstorageError) {\n throw error;\n }\n throw new lowstorageError(\n `${MODULE_NAME}: Rename collection failed: ${error.message}`,\n lowstorage_ERROR_CODES.RENAME_COLLECTION_ERROR\n );\n }\n }\n};\nexport {\n lowstorage,\n lowstorageError,\n lowstorage_ERROR_CODES\n};\n\n"], - "mappings": "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", + "sourcesContent": ["import __import_BUFFER from \"buffer\";\nimport __import_CRYPTO from \"crypto\";\nimport __import_UTIL from \"util\";\nimport __import_STREAM from \"stream\";\nimport __import_ZLIB from \"zlib\";\nimport __import_EVENTS from \"events\";\nimport __import_FS from \"fs\";\nimport __import_PATH from \"path\";\n\nvar __create = Object.create;\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __getProtoOf = Object.getPrototypeOf;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __require = /* @__PURE__ */ ((x2) => typeof require !== \"undefined\" ? require : typeof Proxy !== \"undefined\" ? new Proxy(x2, {\n get: (a, b2) => (typeof require !== \"undefined\" ? require : a)[b2]\n}) : x2)(function(x2) {\n if (typeof require !== \"undefined\") return require.apply(this, arguments);\n throw Error('Dynamic require of \"' + x2 + '\" is not supported');\n});\nvar __commonJS = (cb, mod) => function __require2() {\n return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(\n // If the importer is in node compatibility mode or this is not an ESM\n // file that has been converted to a CommonJS file using a Babel-\n // compatible transform (i.e. \"__esModule\" has not been set), then set\n // \"default\" to the CommonJS \"module.exports\" for node compatibility.\n isNodeMode || !mod || !mod.__esModule ? __defProp(target, \"default\", { value: mod, enumerable: true }) : target,\n mod\n));\n\n// node_modules/avsc/lib/utils.js\nvar require_utils = __commonJS({\n \"node_modules/avsc/lib/utils.js\"(exports, module) {\n \"use strict\";\n var buffer = __import_BUFFER;\n var crypto2 = __import_CRYPTO;\n var util = __import_UTIL;\n var Buffer2 = buffer.Buffer;\n var POOL = new BufferPool(4096);\n var NAME_PATTERN = /^[A-Za-z_][A-Za-z0-9_]*$/;\n var f2 = util.format;\n function newBuffer(size) {\n if (typeof Buffer2.alloc == \"function\") {\n return Buffer2.alloc(size);\n } else {\n return new Buffer2(size);\n }\n }\n function bufferFrom(data, enc) {\n if (typeof Buffer2.from == \"function\") {\n return Buffer2.from(data, enc);\n } else {\n return new Buffer2(data, enc);\n }\n }\n function capitalize(s) {\n return s.charAt(0).toUpperCase() + s.slice(1);\n }\n function compare(n1, n2) {\n return n1 === n2 ? 0 : n1 < n2 ? -1 : 1;\n }\n function getOption(opts, key, def) {\n var value = opts[key];\n return value === void 0 ? def : value;\n }\n function getHash(str, algorithm) {\n algorithm = algorithm || \"md5\";\n var hash = crypto2.createHash(algorithm);\n hash.end(str);\n return hash.read();\n }\n function singleIndexOf(arr, v2) {\n var pos = -1;\n var i, l;\n if (!arr) {\n return -1;\n }\n for (i = 0, l = arr.length; i < l; i++) {\n if (arr[i] === v2) {\n if (pos >= 0) {\n return -2;\n }\n pos = i;\n }\n }\n return pos;\n }\n function toMap(arr, fn) {\n var obj = {};\n var i, elem;\n for (i = 0; i < arr.length; i++) {\n elem = arr[i];\n obj[fn(elem)] = elem;\n }\n return obj;\n }\n function objectValues(obj) {\n return Object.keys(obj).map(function(key) {\n return obj[key];\n });\n }\n function hasDuplicates(arr, fn) {\n var obj = /* @__PURE__ */ Object.create(null);\n var i, l, elem;\n for (i = 0, l = arr.length; i < l; i++) {\n elem = arr[i];\n if (fn) {\n elem = fn(elem);\n }\n if (obj[elem]) {\n return true;\n }\n obj[elem] = true;\n }\n return false;\n }\n function copyOwnProperties(src, dst, overwrite) {\n var names = Object.getOwnPropertyNames(src);\n var i, l, name;\n for (i = 0, l = names.length; i < l; i++) {\n name = names[i];\n if (!dst.hasOwnProperty(name) || overwrite) {\n var descriptor = Object.getOwnPropertyDescriptor(src, name);\n Object.defineProperty(dst, name, descriptor);\n }\n }\n return dst;\n }\n function isValidName(str) {\n return NAME_PATTERN.test(str);\n }\n function qualify(name, namespace) {\n if (~name.indexOf(\".\")) {\n name = name.replace(/^\\./, \"\");\n } else if (namespace) {\n name = namespace + \".\" + name;\n }\n name.split(\".\").forEach(function(part) {\n if (!isValidName(part)) {\n throw new Error(f2(\"invalid name: %j\", name));\n }\n });\n return name;\n }\n function unqualify(name) {\n var parts = name.split(\".\");\n return parts[parts.length - 1];\n }\n function impliedNamespace(name) {\n var match = /^(.*)\\.[^.]+$/.exec(name);\n return match ? match[1] : void 0;\n }\n function jsonEnd(str, pos) {\n pos = pos | 0;\n var c = str.charAt(pos++);\n if (/[\\d-]/.test(c)) {\n while (/[eE\\d.+-]/.test(str.charAt(pos))) {\n pos++;\n }\n return pos;\n } else if (/true|null/.test(str.slice(pos - 1, pos + 3))) {\n return pos + 3;\n } else if (/false/.test(str.slice(pos - 1, pos + 4))) {\n return pos + 4;\n }\n var depth = 0;\n var literal = false;\n do {\n switch (c) {\n case \"{\":\n case \"[\":\n if (!literal) {\n depth++;\n }\n break;\n case \"}\":\n case \"]\":\n if (!literal && !--depth) {\n return pos;\n }\n break;\n case '\"':\n literal = !literal;\n if (!depth && !literal) {\n return pos;\n }\n break;\n case \"\\\\\":\n pos++;\n }\n } while (c = str.charAt(pos++));\n return -1;\n }\n function abstractFunction() {\n throw new Error(\"abstract\");\n }\n function addDeprecatedGetters(obj, props) {\n var proto = obj.prototype;\n var i, l, prop, getter;\n for (i = 0, l = props.length; i < l; i++) {\n prop = props[i];\n getter = \"get\" + capitalize(prop);\n proto[getter] = util.deprecate(\n createGetter(prop),\n \"use `.\" + prop + \"` instead of `.\" + getter + \"()`\"\n );\n }\n function createGetter(prop2) {\n return function() {\n var delegate = this[prop2];\n return typeof delegate == \"function\" ? delegate.apply(this, arguments) : delegate;\n };\n }\n }\n function BufferPool(len) {\n this._len = len | 0;\n this._pos = 0;\n this._slab = newBuffer(this._len);\n }\n BufferPool.prototype.alloc = function(len) {\n if (len < 0) {\n throw new Error(\"negative length\");\n }\n var maxLen = this._len;\n if (len > maxLen) {\n return newBuffer(len);\n }\n if (this._pos + len > maxLen) {\n this._slab = newBuffer(maxLen);\n this._pos = 0;\n }\n return this._slab.slice(this._pos, this._pos += len);\n };\n function Lcg(seed) {\n var a = 1103515245;\n var c = 12345;\n var m2 = Math.pow(2, 31);\n var state = Math.floor(seed || Math.random() * (m2 - 1));\n this._max = m2;\n this._nextInt = function() {\n return state = (a * state + c) % m2;\n };\n }\n Lcg.prototype.nextBoolean = function() {\n return !!(this._nextInt() % 2);\n };\n Lcg.prototype.nextInt = function(start, end) {\n if (end === void 0) {\n end = start;\n start = 0;\n }\n end = end === void 0 ? this._max : end;\n return start + Math.floor(this.nextFloat() * (end - start));\n };\n Lcg.prototype.nextFloat = function(start, end) {\n if (end === void 0) {\n end = start;\n start = 0;\n }\n end = end === void 0 ? 1 : end;\n return start + (end - start) * this._nextInt() / this._max;\n };\n Lcg.prototype.nextString = function(len, flags) {\n len |= 0;\n flags = flags || \"aA\";\n var mask = \"\";\n if (flags.indexOf(\"a\") > -1) {\n mask += \"abcdefghijklmnopqrstuvwxyz\";\n }\n if (flags.indexOf(\"A\") > -1) {\n mask += \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\";\n }\n if (flags.indexOf(\"#\") > -1) {\n mask += \"0123456789\";\n }\n if (flags.indexOf(\"!\") > -1) {\n mask += \"~`!@#$%^&*()_+-={}[]:\\\";'<>?,./|\\\\\";\n }\n var result = [];\n for (var i = 0; i < len; i++) {\n result.push(this.choice(mask));\n }\n return result.join(\"\");\n };\n Lcg.prototype.nextBuffer = function(len) {\n var arr = [];\n var i;\n for (i = 0; i < len; i++) {\n arr.push(this.nextInt(256));\n }\n return bufferFrom(arr);\n };\n Lcg.prototype.choice = function(arr) {\n var len = arr.length;\n if (!len) {\n throw new Error(\"choosing from empty array\");\n }\n return arr[this.nextInt(len)];\n };\n function OrderedQueue() {\n this._index = 0;\n this._items = [];\n }\n OrderedQueue.prototype.push = function(item) {\n var items = this._items;\n var i = items.length | 0;\n var j2;\n items.push(item);\n while (i > 0 && items[i].index < items[j2 = i - 1 >> 1].index) {\n item = items[i];\n items[i] = items[j2];\n items[j2] = item;\n i = j2;\n }\n };\n OrderedQueue.prototype.pop = function() {\n var items = this._items;\n var len = items.length - 1 | 0;\n var first = items[0];\n if (!first || first.index > this._index) {\n return null;\n }\n this._index++;\n if (!len) {\n items.pop();\n return first;\n }\n items[0] = items.pop();\n var mid = len >> 1;\n var i = 0;\n var i1, i2, j2, item, c, c1, c2;\n while (i < mid) {\n item = items[i];\n i1 = (i << 1) + 1;\n i2 = i + 1 << 1;\n c1 = items[i1];\n c2 = items[i2];\n if (!c2 || c1.index <= c2.index) {\n c = c1;\n j2 = i1;\n } else {\n c = c2;\n j2 = i2;\n }\n if (c.index >= item.index) {\n break;\n }\n items[j2] = item;\n items[i] = c;\n i = j2;\n }\n return first;\n };\n function Tap(buf, pos) {\n this.buf = buf;\n this.pos = pos | 0;\n if (this.pos < 0) {\n throw new Error(\"negative offset\");\n }\n }\n Tap.prototype.isValid = function() {\n return this.pos <= this.buf.length;\n };\n Tap.prototype._invalidate = function() {\n this.pos = this.buf.length + 1;\n };\n Tap.prototype.readBoolean = function() {\n return !!this.buf[this.pos++];\n };\n Tap.prototype.skipBoolean = function() {\n this.pos++;\n };\n Tap.prototype.writeBoolean = function(b2) {\n this.buf[this.pos++] = !!b2;\n };\n Tap.prototype.readInt = Tap.prototype.readLong = function() {\n var n = 0;\n var k2 = 0;\n var buf = this.buf;\n var b2, h, f3, fk;\n do {\n b2 = buf[this.pos++];\n h = b2 & 128;\n n |= (b2 & 127) << k2;\n k2 += 7;\n } while (h && k2 < 28);\n if (h) {\n f3 = n;\n fk = 268435456;\n do {\n b2 = buf[this.pos++];\n f3 += (b2 & 127) * fk;\n fk *= 128;\n } while (b2 & 128);\n return (f3 % 2 ? -(f3 + 1) : f3) / 2;\n }\n return n >> 1 ^ -(n & 1);\n };\n Tap.prototype.skipInt = Tap.prototype.skipLong = function() {\n var buf = this.buf;\n while (buf[this.pos++] & 128) {\n }\n };\n Tap.prototype.writeInt = Tap.prototype.writeLong = function(n) {\n var buf = this.buf;\n var f3, m2;\n if (n >= -1073741824 && n < 1073741824) {\n m2 = n >= 0 ? n << 1 : ~n << 1 | 1;\n do {\n buf[this.pos] = m2 & 127;\n m2 >>= 7;\n } while (m2 && (buf[this.pos++] |= 128));\n } else {\n f3 = n >= 0 ? n * 2 : -n * 2 - 1;\n do {\n buf[this.pos] = f3 & 127;\n f3 /= 128;\n } while (f3 >= 1 && (buf[this.pos++] |= 128));\n }\n this.pos++;\n };\n Tap.prototype.readFloat = function() {\n var buf = this.buf;\n var pos = this.pos;\n this.pos += 4;\n if (this.pos > buf.length) {\n return 0;\n }\n return this.buf.readFloatLE(pos);\n };\n Tap.prototype.skipFloat = function() {\n this.pos += 4;\n };\n Tap.prototype.writeFloat = function(f3) {\n var buf = this.buf;\n var pos = this.pos;\n this.pos += 4;\n if (this.pos > buf.length) {\n return;\n }\n return this.buf.writeFloatLE(f3, pos);\n };\n Tap.prototype.readDouble = function() {\n var buf = this.buf;\n var pos = this.pos;\n this.pos += 8;\n if (this.pos > buf.length) {\n return 0;\n }\n return this.buf.readDoubleLE(pos);\n };\n Tap.prototype.skipDouble = function() {\n this.pos += 8;\n };\n Tap.prototype.writeDouble = function(d) {\n var buf = this.buf;\n var pos = this.pos;\n this.pos += 8;\n if (this.pos > buf.length) {\n return;\n }\n return this.buf.writeDoubleLE(d, pos);\n };\n Tap.prototype.readFixed = function(len) {\n var pos = this.pos;\n this.pos += len;\n if (this.pos > this.buf.length) {\n return;\n }\n var fixed = POOL.alloc(len);\n this.buf.copy(fixed, 0, pos, pos + len);\n return fixed;\n };\n Tap.prototype.skipFixed = function(len) {\n this.pos += len;\n };\n Tap.prototype.writeFixed = function(buf, len) {\n len = len || buf.length;\n var pos = this.pos;\n this.pos += len;\n if (this.pos > this.buf.length) {\n return;\n }\n buf.copy(this.buf, pos, 0, len);\n };\n Tap.prototype.readBytes = function() {\n var len = this.readLong();\n if (len < 0) {\n this._invalidate();\n return;\n }\n return this.readFixed(len);\n };\n Tap.prototype.skipBytes = function() {\n var len = this.readLong();\n if (len < 0) {\n this._invalidate();\n return;\n }\n this.pos += len;\n };\n Tap.prototype.writeBytes = function(buf) {\n var len = buf.length;\n this.writeLong(len);\n this.writeFixed(buf, len);\n };\n if (typeof Buffer2.prototype.utf8Slice == \"function\") {\n Tap.prototype.readString = function() {\n var len = this.readLong();\n if (len < 0) {\n this._invalidate();\n return \"\";\n }\n var pos = this.pos;\n var buf = this.buf;\n this.pos += len;\n if (this.pos > buf.length) {\n return;\n }\n return this.buf.utf8Slice(pos, pos + len);\n };\n } else {\n Tap.prototype.readString = function() {\n var len = this.readLong();\n if (len < 0) {\n this._invalidate();\n return \"\";\n }\n var pos = this.pos;\n var buf = this.buf;\n this.pos += len;\n if (this.pos > buf.length) {\n return;\n }\n return this.buf.slice(pos, pos + len).toString();\n };\n }\n Tap.prototype.skipString = function() {\n var len = this.readLong();\n if (len < 0) {\n this._invalidate();\n return;\n }\n this.pos += len;\n };\n Tap.prototype.writeString = function(s) {\n var len = Buffer2.byteLength(s);\n var buf = this.buf;\n this.writeLong(len);\n var pos = this.pos;\n this.pos += len;\n if (this.pos > buf.length) {\n return;\n }\n if (len > 64 && typeof Buffer2.prototype.utf8Write == \"function\") {\n buf.utf8Write(s, pos, len);\n } else {\n var i, l, c1, c2;\n for (i = 0, l = len; i < l; i++) {\n c1 = s.charCodeAt(i);\n if (c1 < 128) {\n buf[pos++] = c1;\n } else if (c1 < 2048) {\n buf[pos++] = c1 >> 6 | 192;\n buf[pos++] = c1 & 63 | 128;\n } else if ((c1 & 64512) === 55296 && ((c2 = s.charCodeAt(i + 1)) & 64512) === 56320) {\n c1 = 65536 + ((c1 & 1023) << 10) + (c2 & 1023);\n i++;\n buf[pos++] = c1 >> 18 | 240;\n buf[pos++] = c1 >> 12 & 63 | 128;\n buf[pos++] = c1 >> 6 & 63 | 128;\n buf[pos++] = c1 & 63 | 128;\n } else {\n buf[pos++] = c1 >> 12 | 224;\n buf[pos++] = c1 >> 6 & 63 | 128;\n buf[pos++] = c1 & 63 | 128;\n }\n }\n }\n };\n if (typeof Buffer2.prototype.latin1Write == \"function\") {\n Tap.prototype.writeBinary = function(str, len) {\n var pos = this.pos;\n this.pos += len;\n if (this.pos > this.buf.length) {\n return;\n }\n this.buf.latin1Write(str, pos, len);\n };\n } else if (typeof Buffer2.prototype.binaryWrite == \"function\") {\n Tap.prototype.writeBinary = function(str, len) {\n var pos = this.pos;\n this.pos += len;\n if (this.pos > this.buf.length) {\n return;\n }\n this.buf.binaryWrite(str, pos, len);\n };\n } else {\n Tap.prototype.writeBinary = function(s, len) {\n var pos = this.pos;\n this.pos += len;\n if (this.pos > this.buf.length) {\n return;\n }\n this.buf.write(s, pos, len, \"binary\");\n };\n }\n Tap.prototype.matchBoolean = function(tap) {\n return this.buf[this.pos++] - tap.buf[tap.pos++];\n };\n Tap.prototype.matchInt = Tap.prototype.matchLong = function(tap) {\n var n1 = this.readLong();\n var n2 = tap.readLong();\n return n1 === n2 ? 0 : n1 < n2 ? -1 : 1;\n };\n Tap.prototype.matchFloat = function(tap) {\n var n1 = this.readFloat();\n var n2 = tap.readFloat();\n return n1 === n2 ? 0 : n1 < n2 ? -1 : 1;\n };\n Tap.prototype.matchDouble = function(tap) {\n var n1 = this.readDouble();\n var n2 = tap.readDouble();\n return n1 === n2 ? 0 : n1 < n2 ? -1 : 1;\n };\n Tap.prototype.matchFixed = function(tap, len) {\n return this.readFixed(len).compare(tap.readFixed(len));\n };\n Tap.prototype.matchBytes = Tap.prototype.matchString = function(tap) {\n var l1 = this.readLong();\n var p1 = this.pos;\n this.pos += l1;\n var l2 = tap.readLong();\n var p2 = tap.pos;\n tap.pos += l2;\n var b1 = this.buf.slice(p1, this.pos);\n var b2 = tap.buf.slice(p2, tap.pos);\n return b1.compare(b2);\n };\n Tap.prototype.unpackLongBytes = function() {\n var res = newBuffer(8);\n var n = 0;\n var i = 0;\n var j2 = 6;\n var buf = this.buf;\n var b2, neg;\n b2 = buf[this.pos++];\n neg = b2 & 1;\n res.fill(0);\n n |= (b2 & 127) >> 1;\n while (b2 & 128) {\n b2 = buf[this.pos++];\n n |= (b2 & 127) << j2;\n j2 += 7;\n if (j2 >= 8) {\n j2 -= 8;\n res[i++] = n;\n n >>= 8;\n }\n }\n res[i] = n;\n if (neg) {\n invert(res, 8);\n }\n return res;\n };\n Tap.prototype.packLongBytes = function(buf) {\n var neg = (buf[7] & 128) >> 7;\n var res = this.buf;\n var j2 = 1;\n var k2 = 0;\n var m2 = 3;\n var n;\n if (neg) {\n invert(buf, 8);\n n = 1;\n } else {\n n = 0;\n }\n var parts = [\n buf.readUIntLE(0, 3),\n buf.readUIntLE(3, 3),\n buf.readUIntLE(6, 2)\n ];\n while (m2 && !parts[--m2]) {\n }\n while (k2 < m2) {\n n |= parts[k2++] << j2;\n j2 += 24;\n while (j2 > 7) {\n res[this.pos++] = n & 127 | 128;\n n >>= 7;\n j2 -= 7;\n }\n }\n n |= parts[m2] << j2;\n do {\n res[this.pos] = n & 127;\n n >>= 7;\n } while (n && (res[this.pos++] |= 128));\n this.pos++;\n if (neg) {\n invert(buf, 8);\n }\n };\n function invert(buf, len) {\n while (len--) {\n buf[len] = ~buf[len];\n }\n }\n module.exports = {\n abstractFunction,\n addDeprecatedGetters,\n bufferFrom,\n capitalize,\n copyOwnProperties,\n getHash,\n compare,\n getOption,\n impliedNamespace,\n isValidName,\n jsonEnd,\n newBuffer,\n objectValues,\n qualify,\n toMap,\n singleIndexOf,\n hasDuplicates,\n unqualify,\n BufferPool,\n Lcg,\n OrderedQueue,\n Tap\n };\n }\n});\n\n// node_modules/avsc/lib/types.js\nvar require_types = __commonJS({\n \"node_modules/avsc/lib/types.js\"(exports, module) {\n \"use strict\";\n var utils = require_utils();\n var buffer = __import_BUFFER;\n var util = __import_UTIL;\n var Buffer2 = buffer.Buffer;\n var SlowBuffer = buffer.SlowBuffer;\n var Tap = utils.Tap;\n var debug = util.debuglog(\"avsc:types\");\n var f2 = util.format;\n var TYPES = {\n \"array\": ArrayType,\n \"boolean\": BooleanType,\n \"bytes\": BytesType,\n \"double\": DoubleType,\n \"enum\": EnumType,\n \"error\": RecordType,\n \"fixed\": FixedType,\n \"float\": FloatType,\n \"int\": IntType,\n \"long\": LongType,\n \"map\": MapType,\n \"null\": NullType,\n \"record\": RecordType,\n \"string\": StringType\n };\n var RANDOM = new utils.Lcg();\n var TAP = new Tap(new SlowBuffer(1024));\n var LOGICAL_TYPE = null;\n var UNDERLYING_TYPES = [];\n function Type(schema, opts) {\n var type;\n if (LOGICAL_TYPE) {\n type = LOGICAL_TYPE;\n UNDERLYING_TYPES.push([LOGICAL_TYPE, this]);\n LOGICAL_TYPE = null;\n } else {\n type = this;\n }\n this._hash = new Hash();\n this.name = void 0;\n this.aliases = void 0;\n this.doc = schema && schema.doc ? \"\" + schema.doc : void 0;\n if (schema) {\n var name = schema.name;\n var namespace = schema.namespace === void 0 ? opts && opts.namespace : schema.namespace;\n if (name !== void 0) {\n name = maybeQualify(name, namespace);\n if (isPrimitive(name)) {\n throw new Error(f2(\"cannot rename primitive type: %j\", name));\n }\n var registry = opts && opts.registry;\n if (registry) {\n if (registry[name] !== void 0) {\n throw new Error(f2(\"duplicate type name: %s\", name));\n }\n registry[name] = type;\n }\n } else if (opts && opts.noAnonymousTypes) {\n throw new Error(f2(\"missing name property in schema: %j\", schema));\n }\n this.name = name;\n this.aliases = schema.aliases ? schema.aliases.map(function(s) {\n return maybeQualify(s, namespace);\n }) : [];\n }\n }\n Type.forSchema = function(schema, opts) {\n opts = opts || {};\n opts.registry = opts.registry || {};\n var UnionType2 = function(wrapUnions) {\n if (wrapUnions === true) {\n wrapUnions = \"always\";\n } else if (wrapUnions === false) {\n wrapUnions = \"never\";\n } else if (wrapUnions === void 0) {\n wrapUnions = \"auto\";\n } else if (typeof wrapUnions == \"string\") {\n wrapUnions = wrapUnions.toLowerCase();\n }\n switch (wrapUnions) {\n case \"always\":\n return WrappedUnionType;\n case \"never\":\n return UnwrappedUnionType;\n case \"auto\":\n return void 0;\n default:\n throw new Error(f2(\"invalid wrap unions option: %j\", wrapUnions));\n }\n }(opts.wrapUnions);\n if (schema === null) {\n throw new Error('invalid type: null (did you mean \"null\"?)');\n }\n if (Type.isType(schema)) {\n return schema;\n }\n var type;\n if (opts.typeHook && (type = opts.typeHook(schema, opts))) {\n if (!Type.isType(type)) {\n throw new Error(f2(\"invalid typehook return value: %j\", type));\n }\n return type;\n }\n if (typeof schema == \"string\") {\n schema = maybeQualify(schema, opts.namespace);\n type = opts.registry[schema];\n if (type) {\n return type;\n }\n if (isPrimitive(schema)) {\n return opts.registry[schema] = Type.forSchema({ type: schema }, opts);\n }\n throw new Error(f2(\"undefined type name: %s\", schema));\n }\n if (schema.logicalType && opts.logicalTypes && !LOGICAL_TYPE) {\n var DerivedType = opts.logicalTypes[schema.logicalType];\n if (DerivedType) {\n var namespace = opts.namespace;\n var registry = {};\n Object.keys(opts.registry).forEach(function(key) {\n registry[key] = opts.registry[key];\n });\n try {\n debug(\"instantiating logical type for %s\", schema.logicalType);\n return new DerivedType(schema, opts);\n } catch (err) {\n debug(\"failed to instantiate logical type for %s\", schema.logicalType);\n if (opts.assertLogicalTypes) {\n throw err;\n }\n LOGICAL_TYPE = null;\n opts.namespace = namespace;\n opts.registry = registry;\n }\n }\n }\n if (Array.isArray(schema)) {\n var logicalType = LOGICAL_TYPE;\n LOGICAL_TYPE = null;\n var types = schema.map(function(obj) {\n return Type.forSchema(obj, opts);\n });\n if (!UnionType2) {\n UnionType2 = isAmbiguous(types) ? WrappedUnionType : UnwrappedUnionType;\n }\n LOGICAL_TYPE = logicalType;\n type = new UnionType2(types, opts);\n } else {\n type = function(typeName) {\n var Type2 = TYPES[typeName];\n if (Type2 === void 0) {\n throw new Error(f2(\"unknown type: %j\", typeName));\n }\n return new Type2(schema, opts);\n }(schema.type);\n }\n return type;\n };\n Type.forValue = function(val, opts) {\n opts = opts || {};\n opts.emptyArrayType = opts.emptyArrayType || Type.forSchema({\n type: \"array\",\n items: \"null\"\n });\n if (opts.valueHook) {\n var type = opts.valueHook(val, opts);\n if (type !== void 0) {\n if (!Type.isType(type)) {\n throw new Error(f2(\"invalid value hook return value: %j\", type));\n }\n return type;\n }\n }\n switch (typeof val) {\n case \"string\":\n return Type.forSchema(\"string\", opts);\n case \"boolean\":\n return Type.forSchema(\"boolean\", opts);\n case \"number\":\n if ((val | 0) === val) {\n return Type.forSchema(\"int\", opts);\n } else if (Math.abs(val) < 9007199254740991) {\n return Type.forSchema(\"float\", opts);\n }\n return Type.forSchema(\"double\", opts);\n case \"object\":\n if (val === null) {\n return Type.forSchema(\"null\", opts);\n } else if (Array.isArray(val)) {\n if (!val.length) {\n return opts.emptyArrayType;\n }\n return Type.forSchema({\n type: \"array\",\n items: Type.forTypes(\n val.map(function(v2) {\n return Type.forValue(v2, opts);\n }),\n opts\n )\n }, opts);\n } else if (Buffer2.isBuffer(val)) {\n return Type.forSchema(\"bytes\", opts);\n }\n var fieldNames = Object.keys(val);\n if (fieldNames.some(function(s) {\n return !utils.isValidName(s);\n })) {\n return Type.forSchema({\n type: \"map\",\n values: Type.forTypes(fieldNames.map(function(s) {\n return Type.forValue(val[s], opts);\n }), opts)\n }, opts);\n }\n return Type.forSchema({\n type: \"record\",\n fields: fieldNames.map(function(s) {\n return { name: s, type: Type.forValue(val[s], opts) };\n })\n }, opts);\n default:\n throw new Error(f2(\"cannot infer type from: %j\", val));\n }\n };\n Type.forTypes = function(types, opts) {\n if (!types.length) {\n throw new Error(\"no types to combine\");\n }\n if (types.length === 1) {\n return types[0];\n }\n opts = opts || {};\n var expanded = [];\n var numWrappedUnions = 0;\n var isValidWrappedUnion = true;\n types.forEach(function(type) {\n switch (type.typeName) {\n case \"union:unwrapped\":\n isValidWrappedUnion = false;\n expanded = expanded.concat(type.types);\n break;\n case \"union:wrapped\":\n numWrappedUnions++;\n expanded = expanded.concat(type.types);\n break;\n case \"null\":\n expanded.push(type);\n break;\n default:\n isValidWrappedUnion = false;\n expanded.push(type);\n }\n });\n if (numWrappedUnions) {\n if (!isValidWrappedUnion) {\n throw new Error(\"cannot combine wrapped union\");\n }\n var branchTypes = {};\n expanded.forEach(function(type) {\n var name = type.branchName;\n var branchType = branchTypes[name];\n if (!branchType) {\n branchTypes[name] = type;\n } else if (!type.equals(branchType)) {\n throw new Error(\"inconsistent branch type\");\n }\n });\n var wrapUnions = opts.wrapUnions;\n var unionType;\n opts.wrapUnions = true;\n try {\n unionType = Type.forSchema(Object.keys(branchTypes).map(function(name) {\n return branchTypes[name];\n }), opts);\n } catch (err) {\n opts.wrapUnions = wrapUnions;\n throw err;\n }\n opts.wrapUnions = wrapUnions;\n return unionType;\n }\n var bucketized = {};\n expanded.forEach(function(type) {\n var bucket = getTypeBucket(type);\n var bucketTypes = bucketized[bucket];\n if (!bucketTypes) {\n bucketized[bucket] = bucketTypes = [];\n }\n bucketTypes.push(type);\n });\n var buckets = Object.keys(bucketized);\n var augmented = buckets.map(function(bucket) {\n var bucketTypes = bucketized[bucket];\n if (bucketTypes.length === 1) {\n return bucketTypes[0];\n } else {\n switch (bucket) {\n case \"null\":\n case \"boolean\":\n return bucketTypes[0];\n case \"number\":\n return combineNumbers(bucketTypes);\n case \"string\":\n return combineStrings(bucketTypes, opts);\n case \"buffer\":\n return combineBuffers(bucketTypes, opts);\n case \"array\":\n bucketTypes = bucketTypes.filter(function(t) {\n return t !== opts.emptyArrayType;\n });\n if (!bucketTypes.length) {\n return opts.emptyArrayType;\n }\n return Type.forSchema({\n type: \"array\",\n items: Type.forTypes(bucketTypes.map(function(t) {\n return t.itemsType;\n }), opts)\n }, opts);\n default:\n return combineObjects(bucketTypes, opts);\n }\n }\n });\n if (augmented.length === 1) {\n return augmented[0];\n } else {\n return Type.forSchema(augmented, opts);\n }\n };\n Type.isType = function() {\n var l = arguments.length;\n if (!l) {\n return false;\n }\n var any = arguments[0];\n if (!any || typeof any._update != \"function\" || typeof any.fingerprint != \"function\") {\n return false;\n }\n if (l === 1) {\n return true;\n }\n var typeName = any.typeName;\n var i;\n for (i = 1; i < l; i++) {\n if (typeName.indexOf(arguments[i]) === 0) {\n return true;\n }\n }\n return false;\n };\n Type.__reset = function(size) {\n debug(\"resetting type buffer to %d\", size);\n TAP.buf = new SlowBuffer(size);\n };\n Object.defineProperty(Type.prototype, \"branchName\", {\n enumerable: true,\n get: function() {\n var type = Type.isType(this, \"logical\") ? this.underlyingType : this;\n if (type.name) {\n return type.name;\n }\n if (Type.isType(type, \"abstract\")) {\n return type._concreteTypeName;\n }\n return Type.isType(type, \"union\") ? void 0 : type.typeName;\n }\n });\n Type.prototype.clone = function(val, opts) {\n if (opts) {\n opts = {\n coerce: !!opts.coerceBuffers | 0,\n // Coerce JSON to Buffer.\n fieldHook: opts.fieldHook,\n qualifyNames: !!opts.qualifyNames,\n skip: !!opts.skipMissingFields,\n wrap: !!opts.wrapUnions | 0\n // Wrap first match into union.\n };\n return this._copy(val, opts);\n } else {\n return this.fromBuffer(this.toBuffer(val));\n }\n };\n Type.prototype.compare = utils.abstractFunction;\n Type.prototype.compareBuffers = function(buf1, buf2) {\n return this._match(new Tap(buf1), new Tap(buf2));\n };\n Type.prototype.createResolver = function(type, opts) {\n if (!Type.isType(type)) {\n throw new Error(f2(\"not a type: %j\", type));\n }\n if (!Type.isType(this, \"union\", \"logical\") && Type.isType(type, \"logical\")) {\n return this.createResolver(type.underlyingType, opts);\n }\n opts = opts || {};\n opts.registry = opts.registry || {};\n var resolver, key;\n if (Type.isType(this, \"record\", \"error\") && Type.isType(type, \"record\", \"error\")) {\n key = this.name + \":\" + type.name;\n resolver = opts.registry[key];\n if (resolver) {\n return resolver;\n }\n }\n resolver = new Resolver(this);\n if (key) {\n opts.registry[key] = resolver;\n }\n if (Type.isType(type, \"union\")) {\n var resolvers = type.types.map(function(t) {\n return this.createResolver(t, opts);\n }, this);\n resolver._read = function(tap) {\n var index = tap.readLong();\n var resolver2 = resolvers[index];\n if (resolver2 === void 0) {\n throw new Error(f2(\"invalid union index: %s\", index));\n }\n return resolvers[index]._read(tap);\n };\n } else {\n this._update(resolver, type, opts);\n }\n if (!resolver._read) {\n throw new Error(f2(\"cannot read %s as %s\", type, this));\n }\n return Object.freeze(resolver);\n };\n Type.prototype.decode = function(buf, pos, resolver) {\n var tap = new Tap(buf, pos);\n var val = readValue(this, tap, resolver);\n if (!tap.isValid()) {\n return { value: void 0, offset: -1 };\n }\n return { value: val, offset: tap.pos };\n };\n Type.prototype.encode = function(val, buf, pos) {\n var tap = new Tap(buf, pos);\n this._write(tap, val);\n if (!tap.isValid()) {\n return buf.length - tap.pos;\n }\n return tap.pos;\n };\n Type.prototype.equals = function(type, opts) {\n var canon = (\n // Canonical equality.\n Type.isType(type) && this.fingerprint().equals(type.fingerprint())\n );\n if (!canon || !(opts && opts.strict)) {\n return canon;\n }\n return JSON.stringify(this.schema({ exportAttrs: true })) === JSON.stringify(type.schema({ exportAttrs: true }));\n };\n Type.prototype.fingerprint = function(algorithm) {\n if (!algorithm) {\n if (!this._hash.str) {\n var schemaStr = JSON.stringify(this.schema());\n this._hash.str = utils.getHash(schemaStr).toString(\"binary\");\n }\n return utils.bufferFrom(this._hash.str, \"binary\");\n } else {\n return utils.getHash(JSON.stringify(this.schema()), algorithm);\n }\n };\n Type.prototype.fromBuffer = function(buf, resolver, noCheck) {\n var tap = new Tap(buf);\n var val = readValue(this, tap, resolver, noCheck);\n if (!tap.isValid()) {\n throw new Error(\"truncated buffer\");\n }\n if (!noCheck && tap.pos < buf.length) {\n throw new Error(\"trailing data\");\n }\n return val;\n };\n Type.prototype.fromString = function(str) {\n return this._copy(JSON.parse(str), { coerce: 2 });\n };\n Type.prototype.inspect = function() {\n var typeName = this.typeName;\n var className = getClassName(typeName);\n if (isPrimitive(typeName)) {\n return f2(\"<%s>\", className);\n } else {\n var obj = this.schema({ exportAttrs: true, noDeref: true });\n if (typeof obj == \"object\" && !Type.isType(this, \"logical\")) {\n obj.type = void 0;\n }\n return f2(\"<%s %j>\", className, obj);\n }\n };\n Type.prototype.isValid = function(val, opts) {\n var flags = (opts && opts.noUndeclaredFields) | 0;\n var errorHook = opts && opts.errorHook;\n var hook, path;\n if (errorHook) {\n path = [];\n hook = function(any, type) {\n errorHook.call(this, path.slice(), any, type, val);\n };\n }\n return this._check(val, flags, hook, path);\n };\n Type.prototype.random = utils.abstractFunction;\n Type.prototype.schema = function(opts) {\n return this._attrs({\n exportAttrs: !!(opts && opts.exportAttrs),\n noDeref: !!(opts && opts.noDeref)\n });\n };\n Type.prototype.toBuffer = function(val) {\n TAP.pos = 0;\n this._write(TAP, val);\n var buf = utils.newBuffer(TAP.pos);\n if (TAP.isValid()) {\n TAP.buf.copy(buf, 0, 0, TAP.pos);\n } else {\n this._write(new Tap(buf), val);\n }\n return buf;\n };\n Type.prototype.toJSON = function() {\n return this.schema({ exportAttrs: true });\n };\n Type.prototype.toString = function(val) {\n if (val === void 0) {\n return JSON.stringify(this.schema({ noDeref: true }));\n }\n return JSON.stringify(this._copy(val, { coerce: 3 }));\n };\n Type.prototype.wrap = function(val) {\n var Branch = this._branchConstructor;\n return Branch === null ? null : new Branch(val);\n };\n Type.prototype._attrs = function(opts) {\n opts.derefed = opts.derefed || {};\n var name = this.name;\n if (name !== void 0) {\n if (opts.noDeref || opts.derefed[name]) {\n return name;\n }\n opts.derefed[name] = true;\n }\n var schema = {};\n if (this.name !== void 0) {\n schema.name = name;\n }\n schema.type = this.typeName;\n var derefedSchema = this._deref(schema, opts);\n if (derefedSchema !== void 0) {\n schema = derefedSchema;\n }\n if (opts.exportAttrs) {\n if (this.aliases && this.aliases.length) {\n schema.aliases = this.aliases;\n }\n if (this.doc !== void 0) {\n schema.doc = this.doc;\n }\n }\n return schema;\n };\n Type.prototype._createBranchConstructor = function() {\n var name = this.branchName;\n if (name === \"null\") {\n return null;\n }\n var attr = ~name.indexOf(\".\") ? \"this['\" + name + \"']\" : \"this.\" + name;\n var body = \"return function Branch$(val) { \" + attr + \" = val; };\";\n var Branch = new Function(body)();\n Branch.type = this;\n Branch.prototype.unwrap = new Function(\"return \" + attr + \";\");\n Branch.prototype.unwrapped = Branch.prototype.unwrap;\n return Branch;\n };\n Type.prototype._peek = function(tap) {\n var pos = tap.pos;\n var val = this._read(tap);\n tap.pos = pos;\n return val;\n };\n Type.prototype._check = utils.abstractFunction;\n Type.prototype._copy = utils.abstractFunction;\n Type.prototype._deref = utils.abstractFunction;\n Type.prototype._match = utils.abstractFunction;\n Type.prototype._read = utils.abstractFunction;\n Type.prototype._skip = utils.abstractFunction;\n Type.prototype._update = utils.abstractFunction;\n Type.prototype._write = utils.abstractFunction;\n Type.prototype.getAliases = function() {\n return this.aliases;\n };\n Type.prototype.getFingerprint = Type.prototype.fingerprint;\n Type.prototype.getName = function(asBranch) {\n return this.name || !asBranch ? this.name : this.branchName;\n };\n Type.prototype.getSchema = Type.prototype.schema;\n Type.prototype.getTypeName = function() {\n return this.typeName;\n };\n function PrimitiveType(noFreeze) {\n Type.call(this);\n this._branchConstructor = this._createBranchConstructor();\n if (!noFreeze) {\n Object.freeze(this);\n }\n }\n util.inherits(PrimitiveType, Type);\n PrimitiveType.prototype._update = function(resolver, type) {\n if (type.typeName === this.typeName) {\n resolver._read = this._read;\n }\n };\n PrimitiveType.prototype._copy = function(val) {\n this._check(val, void 0, throwInvalidError);\n return val;\n };\n PrimitiveType.prototype._deref = function() {\n return this.typeName;\n };\n PrimitiveType.prototype.compare = utils.compare;\n function NullType() {\n PrimitiveType.call(this);\n }\n util.inherits(NullType, PrimitiveType);\n NullType.prototype._check = function(val, flags, hook) {\n var b2 = val === null;\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n NullType.prototype._read = function() {\n return null;\n };\n NullType.prototype._skip = function() {\n };\n NullType.prototype._write = function(tap, val) {\n if (val !== null) {\n throwInvalidError(val, this);\n }\n };\n NullType.prototype._match = function() {\n return 0;\n };\n NullType.prototype.compare = NullType.prototype._match;\n NullType.prototype.typeName = \"null\";\n NullType.prototype.random = NullType.prototype._read;\n function BooleanType() {\n PrimitiveType.call(this);\n }\n util.inherits(BooleanType, PrimitiveType);\n BooleanType.prototype._check = function(val, flags, hook) {\n var b2 = typeof val == \"boolean\";\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n BooleanType.prototype._read = function(tap) {\n return tap.readBoolean();\n };\n BooleanType.prototype._skip = function(tap) {\n tap.skipBoolean();\n };\n BooleanType.prototype._write = function(tap, val) {\n if (typeof val != \"boolean\") {\n throwInvalidError(val, this);\n }\n tap.writeBoolean(val);\n };\n BooleanType.prototype._match = function(tap1, tap2) {\n return tap1.matchBoolean(tap2);\n };\n BooleanType.prototype.typeName = \"boolean\";\n BooleanType.prototype.random = function() {\n return RANDOM.nextBoolean();\n };\n function IntType() {\n PrimitiveType.call(this);\n }\n util.inherits(IntType, PrimitiveType);\n IntType.prototype._check = function(val, flags, hook) {\n var b2 = val === (val | 0);\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n IntType.prototype._read = function(tap) {\n return tap.readInt();\n };\n IntType.prototype._skip = function(tap) {\n tap.skipInt();\n };\n IntType.prototype._write = function(tap, val) {\n if (val !== (val | 0)) {\n throwInvalidError(val, this);\n }\n tap.writeInt(val);\n };\n IntType.prototype._match = function(tap1, tap2) {\n return tap1.matchInt(tap2);\n };\n IntType.prototype.typeName = \"int\";\n IntType.prototype.random = function() {\n return RANDOM.nextInt(1e3) | 0;\n };\n function LongType() {\n PrimitiveType.call(this);\n }\n util.inherits(LongType, PrimitiveType);\n LongType.prototype._check = function(val, flags, hook) {\n var b2 = typeof val == \"number\" && val % 1 === 0 && isSafeLong(val);\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n LongType.prototype._read = function(tap) {\n var n = tap.readLong();\n if (!isSafeLong(n)) {\n throw new Error(\"potential precision loss\");\n }\n return n;\n };\n LongType.prototype._skip = function(tap) {\n tap.skipLong();\n };\n LongType.prototype._write = function(tap, val) {\n if (typeof val != \"number\" || val % 1 || !isSafeLong(val)) {\n throwInvalidError(val, this);\n }\n tap.writeLong(val);\n };\n LongType.prototype._match = function(tap1, tap2) {\n return tap1.matchLong(tap2);\n };\n LongType.prototype._update = function(resolver, type) {\n switch (type.typeName) {\n case \"int\":\n resolver._read = type._read;\n break;\n case \"abstract:long\":\n case \"long\":\n resolver._read = this._read;\n }\n };\n LongType.prototype.typeName = \"long\";\n LongType.prototype.random = function() {\n return RANDOM.nextInt();\n };\n LongType.__with = function(methods, noUnpack) {\n methods = methods || {};\n var mapping = {\n toBuffer: \"_toBuffer\",\n fromBuffer: \"_fromBuffer\",\n fromJSON: \"_fromJSON\",\n toJSON: \"_toJSON\",\n isValid: \"_isValid\",\n compare: \"compare\"\n };\n var type = new AbstractLongType(noUnpack);\n Object.keys(mapping).forEach(function(name) {\n if (methods[name] === void 0) {\n throw new Error(f2(\"missing method implementation: %s\", name));\n }\n type[mapping[name]] = methods[name];\n });\n return Object.freeze(type);\n };\n function FloatType() {\n PrimitiveType.call(this);\n }\n util.inherits(FloatType, PrimitiveType);\n FloatType.prototype._check = function(val, flags, hook) {\n var b2 = typeof val == \"number\";\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n FloatType.prototype._read = function(tap) {\n return tap.readFloat();\n };\n FloatType.prototype._skip = function(tap) {\n tap.skipFloat();\n };\n FloatType.prototype._write = function(tap, val) {\n if (typeof val != \"number\") {\n throwInvalidError(val, this);\n }\n tap.writeFloat(val);\n };\n FloatType.prototype._match = function(tap1, tap2) {\n return tap1.matchFloat(tap2);\n };\n FloatType.prototype._update = function(resolver, type) {\n switch (type.typeName) {\n case \"float\":\n case \"int\":\n resolver._read = type._read;\n break;\n case \"abstract:long\":\n case \"long\":\n resolver._read = function(tap) {\n return tap.readLong();\n };\n }\n };\n FloatType.prototype.typeName = \"float\";\n FloatType.prototype.random = function() {\n return RANDOM.nextFloat(1e3);\n };\n function DoubleType() {\n PrimitiveType.call(this);\n }\n util.inherits(DoubleType, PrimitiveType);\n DoubleType.prototype._check = function(val, flags, hook) {\n var b2 = typeof val == \"number\";\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n DoubleType.prototype._read = function(tap) {\n return tap.readDouble();\n };\n DoubleType.prototype._skip = function(tap) {\n tap.skipDouble();\n };\n DoubleType.prototype._write = function(tap, val) {\n if (typeof val != \"number\") {\n throwInvalidError(val, this);\n }\n tap.writeDouble(val);\n };\n DoubleType.prototype._match = function(tap1, tap2) {\n return tap1.matchDouble(tap2);\n };\n DoubleType.prototype._update = function(resolver, type) {\n switch (type.typeName) {\n case \"double\":\n case \"float\":\n case \"int\":\n resolver._read = type._read;\n break;\n case \"abstract:long\":\n case \"long\":\n resolver._read = function(tap) {\n return tap.readLong();\n };\n }\n };\n DoubleType.prototype.typeName = \"double\";\n DoubleType.prototype.random = function() {\n return RANDOM.nextFloat();\n };\n function StringType() {\n PrimitiveType.call(this);\n }\n util.inherits(StringType, PrimitiveType);\n StringType.prototype._check = function(val, flags, hook) {\n var b2 = typeof val == \"string\";\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n StringType.prototype._read = function(tap) {\n return tap.readString();\n };\n StringType.prototype._skip = function(tap) {\n tap.skipString();\n };\n StringType.prototype._write = function(tap, val) {\n if (typeof val != \"string\") {\n throwInvalidError(val, this);\n }\n tap.writeString(val);\n };\n StringType.prototype._match = function(tap1, tap2) {\n return tap1.matchString(tap2);\n };\n StringType.prototype._update = function(resolver, type) {\n switch (type.typeName) {\n case \"bytes\":\n case \"string\":\n resolver._read = this._read;\n }\n };\n StringType.prototype.typeName = \"string\";\n StringType.prototype.random = function() {\n return RANDOM.nextString(RANDOM.nextInt(32));\n };\n function BytesType() {\n PrimitiveType.call(this);\n }\n util.inherits(BytesType, PrimitiveType);\n BytesType.prototype._check = function(val, flags, hook) {\n var b2 = Buffer2.isBuffer(val);\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n BytesType.prototype._read = function(tap) {\n return tap.readBytes();\n };\n BytesType.prototype._skip = function(tap) {\n tap.skipBytes();\n };\n BytesType.prototype._write = function(tap, val) {\n if (!Buffer2.isBuffer(val)) {\n throwInvalidError(val, this);\n }\n tap.writeBytes(val);\n };\n BytesType.prototype._match = function(tap1, tap2) {\n return tap1.matchBytes(tap2);\n };\n BytesType.prototype._update = StringType.prototype._update;\n BytesType.prototype._copy = function(obj, opts) {\n var buf;\n switch ((opts && opts.coerce) | 0) {\n case 3:\n this._check(obj, void 0, throwInvalidError);\n return obj.toString(\"binary\");\n case 2:\n if (typeof obj != \"string\") {\n throw new Error(f2(\"cannot coerce to buffer: %j\", obj));\n }\n buf = utils.bufferFrom(obj, \"binary\");\n this._check(buf, void 0, throwInvalidError);\n return buf;\n case 1:\n if (!isJsonBuffer(obj)) {\n throw new Error(f2(\"cannot coerce to buffer: %j\", obj));\n }\n buf = utils.bufferFrom(obj.data);\n this._check(buf, void 0, throwInvalidError);\n return buf;\n default:\n this._check(obj, void 0, throwInvalidError);\n return utils.bufferFrom(obj);\n }\n };\n BytesType.prototype.compare = Buffer2.compare;\n BytesType.prototype.typeName = \"bytes\";\n BytesType.prototype.random = function() {\n return RANDOM.nextBuffer(RANDOM.nextInt(32));\n };\n function UnionType(schema, opts) {\n Type.call(this);\n if (!Array.isArray(schema)) {\n throw new Error(f2(\"non-array union schema: %j\", schema));\n }\n if (!schema.length) {\n throw new Error(\"empty union\");\n }\n this.types = Object.freeze(schema.map(function(obj) {\n return Type.forSchema(obj, opts);\n }));\n this._branchIndices = {};\n this.types.forEach(function(type, i) {\n if (Type.isType(type, \"union\")) {\n throw new Error(\"unions cannot be directly nested\");\n }\n var branch = type.branchName;\n if (this._branchIndices[branch] !== void 0) {\n throw new Error(f2(\"duplicate union branch name: %j\", branch));\n }\n this._branchIndices[branch] = i;\n }, this);\n }\n util.inherits(UnionType, Type);\n UnionType.prototype._branchConstructor = function() {\n throw new Error(\"unions cannot be directly wrapped\");\n };\n UnionType.prototype._skip = function(tap) {\n this.types[tap.readLong()]._skip(tap);\n };\n UnionType.prototype._match = function(tap1, tap2) {\n var n1 = tap1.readLong();\n var n2 = tap2.readLong();\n if (n1 === n2) {\n return this.types[n1]._match(tap1, tap2);\n } else {\n return n1 < n2 ? -1 : 1;\n }\n };\n UnionType.prototype._deref = function(schema, opts) {\n return this.types.map(function(t) {\n return t._attrs(opts);\n });\n };\n UnionType.prototype.getTypes = function() {\n return this.types;\n };\n function UnwrappedUnionType(schema, opts) {\n UnionType.call(this, schema, opts);\n this._dynamicBranches = null;\n this._bucketIndices = {};\n this.types.forEach(function(type, index) {\n if (Type.isType(type, \"abstract\", \"logical\")) {\n if (!this._dynamicBranches) {\n this._dynamicBranches = [];\n }\n this._dynamicBranches.push({ index, type });\n } else {\n var bucket = getTypeBucket(type);\n if (this._bucketIndices[bucket] !== void 0) {\n throw new Error(f2(\"ambiguous unwrapped union: %j\", this));\n }\n this._bucketIndices[bucket] = index;\n }\n }, this);\n Object.freeze(this);\n }\n util.inherits(UnwrappedUnionType, UnionType);\n UnwrappedUnionType.prototype._getIndex = function(val) {\n var index = this._bucketIndices[getValueBucket(val)];\n if (this._dynamicBranches) {\n index = this._getBranchIndex(val, index);\n }\n return index;\n };\n UnwrappedUnionType.prototype._getBranchIndex = function(any, index) {\n var logicalBranches = this._dynamicBranches;\n var i, l, branch;\n for (i = 0, l = logicalBranches.length; i < l; i++) {\n branch = logicalBranches[i];\n if (branch.type._check(any)) {\n if (index === void 0) {\n index = branch.index;\n } else {\n throw new Error(\"ambiguous conversion\");\n }\n }\n }\n return index;\n };\n UnwrappedUnionType.prototype._check = function(val, flags, hook, path) {\n var index = this._getIndex(val);\n var b2 = index !== void 0;\n if (b2) {\n return this.types[index]._check(val, flags, hook, path);\n }\n if (hook) {\n hook(val, this);\n }\n return b2;\n };\n UnwrappedUnionType.prototype._read = function(tap) {\n var index = tap.readLong();\n var branchType = this.types[index];\n if (branchType) {\n return branchType._read(tap);\n } else {\n throw new Error(f2(\"invalid union index: %s\", index));\n }\n };\n UnwrappedUnionType.prototype._write = function(tap, val) {\n var index = this._getIndex(val);\n if (index === void 0) {\n throwInvalidError(val, this);\n }\n tap.writeLong(index);\n if (val !== null) {\n this.types[index]._write(tap, val);\n }\n };\n UnwrappedUnionType.prototype._update = function(resolver, type, opts) {\n var i, l, typeResolver;\n for (i = 0, l = this.types.length; i < l; i++) {\n try {\n typeResolver = this.types[i].createResolver(type, opts);\n } catch (err) {\n continue;\n }\n resolver._read = function(tap) {\n return typeResolver._read(tap);\n };\n return;\n }\n };\n UnwrappedUnionType.prototype._copy = function(val, opts) {\n var coerce = opts && opts.coerce | 0;\n var wrap = opts && opts.wrap | 0;\n var index;\n if (wrap === 2) {\n index = 0;\n } else {\n switch (coerce) {\n case 1:\n if (isJsonBuffer(val) && this._bucketIndices.buffer !== void 0) {\n index = this._bucketIndices.buffer;\n } else {\n index = this._getIndex(val);\n }\n break;\n case 2:\n if (val === null) {\n index = this._bucketIndices[\"null\"];\n } else if (typeof val === \"object\") {\n var keys = Object.keys(val);\n if (keys.length === 1) {\n index = this._branchIndices[keys[0]];\n val = val[keys[0]];\n }\n }\n break;\n default:\n index = this._getIndex(val);\n }\n if (index === void 0) {\n throwInvalidError(val, this);\n }\n }\n var type = this.types[index];\n if (val === null || wrap === 3) {\n return type._copy(val, opts);\n } else {\n switch (coerce) {\n case 3:\n var obj = {};\n obj[type.branchName] = type._copy(val, opts);\n return obj;\n default:\n return type._copy(val, opts);\n }\n }\n };\n UnwrappedUnionType.prototype.compare = function(val1, val2) {\n var index1 = this._getIndex(val1);\n var index2 = this._getIndex(val2);\n if (index1 === void 0) {\n throwInvalidError(val1, this);\n } else if (index2 === void 0) {\n throwInvalidError(val2, this);\n } else if (index1 === index2) {\n return this.types[index1].compare(val1, val2);\n } else {\n return utils.compare(index1, index2);\n }\n };\n UnwrappedUnionType.prototype.typeName = \"union:unwrapped\";\n UnwrappedUnionType.prototype.random = function() {\n var index = RANDOM.nextInt(this.types.length);\n return this.types[index].random();\n };\n function WrappedUnionType(schema, opts) {\n UnionType.call(this, schema, opts);\n Object.freeze(this);\n }\n util.inherits(WrappedUnionType, UnionType);\n WrappedUnionType.prototype._check = function(val, flags, hook, path) {\n var b2 = false;\n if (val === null) {\n b2 = this._branchIndices[\"null\"] !== void 0;\n } else if (typeof val == \"object\") {\n var keys = Object.keys(val);\n if (keys.length === 1) {\n var name = keys[0];\n var index = this._branchIndices[name];\n if (index !== void 0) {\n if (hook) {\n path.push(name);\n b2 = this.types[index]._check(val[name], flags, hook, path);\n path.pop();\n return b2;\n } else {\n return this.types[index]._check(val[name], flags);\n }\n }\n }\n }\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n WrappedUnionType.prototype._read = function(tap) {\n var type = this.types[tap.readLong()];\n if (!type) {\n throw new Error(f2(\"invalid union index\"));\n }\n var Branch = type._branchConstructor;\n if (Branch === null) {\n return null;\n } else {\n return new Branch(type._read(tap));\n }\n };\n WrappedUnionType.prototype._write = function(tap, val) {\n var index, keys, name;\n if (val === null) {\n index = this._branchIndices[\"null\"];\n if (index === void 0) {\n throwInvalidError(val, this);\n }\n tap.writeLong(index);\n } else {\n keys = Object.keys(val);\n if (keys.length === 1) {\n name = keys[0];\n index = this._branchIndices[name];\n }\n if (index === void 0) {\n throwInvalidError(val, this);\n }\n tap.writeLong(index);\n this.types[index]._write(tap, val[name]);\n }\n };\n WrappedUnionType.prototype._update = function(resolver, type, opts) {\n var i, l, typeResolver, Branch;\n for (i = 0, l = this.types.length; i < l; i++) {\n try {\n typeResolver = this.types[i].createResolver(type, opts);\n } catch (err) {\n continue;\n }\n Branch = this.types[i]._branchConstructor;\n if (Branch) {\n resolver._read = function(tap) {\n return new Branch(typeResolver._read(tap));\n };\n } else {\n resolver._read = function() {\n return null;\n };\n }\n return;\n }\n };\n WrappedUnionType.prototype._copy = function(val, opts) {\n var wrap = opts && opts.wrap | 0;\n if (wrap === 2) {\n var firstType = this.types[0];\n if (val === null && firstType.typeName === \"null\") {\n return null;\n }\n return new firstType._branchConstructor(firstType._copy(val, opts));\n }\n if (val === null && this._branchIndices[\"null\"] !== void 0) {\n return null;\n }\n var i, l, obj;\n if (typeof val == \"object\") {\n var keys = Object.keys(val);\n if (keys.length === 1) {\n var name = keys[0];\n i = this._branchIndices[name];\n if (i === void 0 && opts.qualifyNames) {\n var j2, type;\n for (j2 = 0, l = this.types.length; j2 < l; j2++) {\n type = this.types[j2];\n if (type.name && name === utils.unqualify(type.name)) {\n i = j2;\n break;\n }\n }\n }\n if (i !== void 0) {\n obj = this.types[i]._copy(val[name], opts);\n }\n }\n }\n if (wrap === 1 && obj === void 0) {\n i = 0;\n l = this.types.length;\n while (i < l && obj === void 0) {\n try {\n obj = this.types[i]._copy(val, opts);\n } catch (err) {\n i++;\n }\n }\n }\n if (obj !== void 0) {\n return wrap === 3 ? obj : new this.types[i]._branchConstructor(obj);\n }\n throwInvalidError(val, this);\n };\n WrappedUnionType.prototype.compare = function(val1, val2) {\n var name1 = val1 === null ? \"null\" : Object.keys(val1)[0];\n var name2 = val2 === null ? \"null\" : Object.keys(val2)[0];\n var index = this._branchIndices[name1];\n if (name1 === name2) {\n return name1 === \"null\" ? 0 : this.types[index].compare(val1[name1], val2[name1]);\n } else {\n return utils.compare(index, this._branchIndices[name2]);\n }\n };\n WrappedUnionType.prototype.typeName = \"union:wrapped\";\n WrappedUnionType.prototype.random = function() {\n var index = RANDOM.nextInt(this.types.length);\n var type = this.types[index];\n var Branch = type._branchConstructor;\n if (!Branch) {\n return null;\n }\n return new Branch(type.random());\n };\n function EnumType(schema, opts) {\n Type.call(this, schema, opts);\n if (!Array.isArray(schema.symbols) || !schema.symbols.length) {\n throw new Error(f2(\"invalid enum symbols: %j\", schema.symbols));\n }\n this.symbols = Object.freeze(schema.symbols.slice());\n this._indices = {};\n this.symbols.forEach(function(symbol, i) {\n if (!utils.isValidName(symbol)) {\n throw new Error(f2(\"invalid %s symbol: %j\", this, symbol));\n }\n if (this._indices[symbol] !== void 0) {\n throw new Error(f2(\"duplicate %s symbol: %j\", this, symbol));\n }\n this._indices[symbol] = i;\n }, this);\n this.default = schema.default;\n if (this.default !== void 0 && this._indices[this.default] === void 0) {\n throw new Error(f2(\"invalid %s default: %j\", this, this.default));\n }\n this._branchConstructor = this._createBranchConstructor();\n Object.freeze(this);\n }\n util.inherits(EnumType, Type);\n EnumType.prototype._check = function(val, flags, hook) {\n var b2 = this._indices[val] !== void 0;\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n EnumType.prototype._read = function(tap) {\n var index = tap.readLong();\n var symbol = this.symbols[index];\n if (symbol === void 0) {\n throw new Error(f2(\"invalid %s enum index: %s\", this.name, index));\n }\n return symbol;\n };\n EnumType.prototype._skip = function(tap) {\n tap.skipLong();\n };\n EnumType.prototype._write = function(tap, val) {\n var index = this._indices[val];\n if (index === void 0) {\n throwInvalidError(val, this);\n }\n tap.writeLong(index);\n };\n EnumType.prototype._match = function(tap1, tap2) {\n return tap1.matchLong(tap2);\n };\n EnumType.prototype.compare = function(val1, val2) {\n return utils.compare(this._indices[val1], this._indices[val2]);\n };\n EnumType.prototype._update = function(resolver, type, opts) {\n var symbols = this.symbols;\n if (type.typeName === \"enum\" && hasCompatibleName(this, type, !opts.ignoreNamespaces) && (type.symbols.every(function(s) {\n return ~symbols.indexOf(s);\n }) || this.default !== void 0)) {\n resolver.symbols = type.symbols.map(function(s) {\n return this._indices[s] === void 0 ? this.default : s;\n }, this);\n resolver._read = type._read;\n }\n };\n EnumType.prototype._copy = function(val) {\n this._check(val, void 0, throwInvalidError);\n return val;\n };\n EnumType.prototype._deref = function(schema) {\n schema.symbols = this.symbols;\n };\n EnumType.prototype.getSymbols = function() {\n return this.symbols;\n };\n EnumType.prototype.typeName = \"enum\";\n EnumType.prototype.random = function() {\n return RANDOM.choice(this.symbols);\n };\n function FixedType(schema, opts) {\n Type.call(this, schema, opts);\n if (schema.size !== (schema.size | 0) || schema.size < 0) {\n throw new Error(f2(\"invalid %s size\", this.branchName));\n }\n this.size = schema.size | 0;\n this._branchConstructor = this._createBranchConstructor();\n Object.freeze(this);\n }\n util.inherits(FixedType, Type);\n FixedType.prototype._check = function(val, flags, hook) {\n var b2 = Buffer2.isBuffer(val) && val.length === this.size;\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n FixedType.prototype._read = function(tap) {\n return tap.readFixed(this.size);\n };\n FixedType.prototype._skip = function(tap) {\n tap.skipFixed(this.size);\n };\n FixedType.prototype._write = function(tap, val) {\n if (!Buffer2.isBuffer(val) || val.length !== this.size) {\n throwInvalidError(val, this);\n }\n tap.writeFixed(val, this.size);\n };\n FixedType.prototype._match = function(tap1, tap2) {\n return tap1.matchFixed(tap2, this.size);\n };\n FixedType.prototype.compare = Buffer2.compare;\n FixedType.prototype._update = function(resolver, type, opts) {\n if (type.typeName === \"fixed\" && this.size === type.size && hasCompatibleName(this, type, !opts.ignoreNamespaces)) {\n resolver.size = this.size;\n resolver._read = this._read;\n }\n };\n FixedType.prototype._copy = BytesType.prototype._copy;\n FixedType.prototype._deref = function(schema) {\n schema.size = this.size;\n };\n FixedType.prototype.getSize = function() {\n return this.size;\n };\n FixedType.prototype.typeName = \"fixed\";\n FixedType.prototype.random = function() {\n return RANDOM.nextBuffer(this.size);\n };\n function MapType(schema, opts) {\n Type.call(this);\n if (!schema.values) {\n throw new Error(f2(\"missing map values: %j\", schema));\n }\n this.valuesType = Type.forSchema(schema.values, opts);\n this._branchConstructor = this._createBranchConstructor();\n Object.freeze(this);\n }\n util.inherits(MapType, Type);\n MapType.prototype._check = function(val, flags, hook, path) {\n if (!val || typeof val != \"object\" || Array.isArray(val)) {\n if (hook) {\n hook(val, this);\n }\n return false;\n }\n var keys = Object.keys(val);\n var b2 = true;\n var i, l, j2, key;\n if (hook) {\n j2 = path.length;\n path.push(\"\");\n for (i = 0, l = keys.length; i < l; i++) {\n key = path[j2] = keys[i];\n if (!this.valuesType._check(val[key], flags, hook, path)) {\n b2 = false;\n }\n }\n path.pop();\n } else {\n for (i = 0, l = keys.length; i < l; i++) {\n if (!this.valuesType._check(val[keys[i]], flags)) {\n return false;\n }\n }\n }\n return b2;\n };\n MapType.prototype._read = function(tap) {\n var values = this.valuesType;\n var val = {};\n var n;\n while (n = readArraySize(tap)) {\n while (n--) {\n var key = tap.readString();\n val[key] = values._read(tap);\n }\n }\n return val;\n };\n MapType.prototype._skip = function(tap) {\n var values = this.valuesType;\n var len, n;\n while (n = tap.readLong()) {\n if (n < 0) {\n len = tap.readLong();\n tap.pos += len;\n } else {\n while (n--) {\n tap.skipString();\n values._skip(tap);\n }\n }\n }\n };\n MapType.prototype._write = function(tap, val) {\n if (!val || typeof val != \"object\" || Array.isArray(val)) {\n throwInvalidError(val, this);\n }\n var values = this.valuesType;\n var keys = Object.keys(val);\n var n = keys.length;\n var i, key;\n if (n) {\n tap.writeLong(n);\n for (i = 0; i < n; i++) {\n key = keys[i];\n tap.writeString(key);\n values._write(tap, val[key]);\n }\n }\n tap.writeLong(0);\n };\n MapType.prototype._match = function() {\n throw new Error(\"maps cannot be compared\");\n };\n MapType.prototype._update = function(rsv, type, opts) {\n if (type.typeName === \"map\") {\n rsv.valuesType = this.valuesType.createResolver(type.valuesType, opts);\n rsv._read = this._read;\n }\n };\n MapType.prototype._copy = function(val, opts) {\n if (val && typeof val == \"object\" && !Array.isArray(val)) {\n var values = this.valuesType;\n var keys = Object.keys(val);\n var i, l, key;\n var copy = {};\n for (i = 0, l = keys.length; i < l; i++) {\n key = keys[i];\n copy[key] = values._copy(val[key], opts);\n }\n return copy;\n }\n throwInvalidError(val, this);\n };\n MapType.prototype.compare = MapType.prototype._match;\n MapType.prototype.typeName = \"map\";\n MapType.prototype.getValuesType = function() {\n return this.valuesType;\n };\n MapType.prototype.random = function() {\n var val = {};\n var i, l;\n for (i = 0, l = RANDOM.nextInt(10); i < l; i++) {\n val[RANDOM.nextString(RANDOM.nextInt(20))] = this.valuesType.random();\n }\n return val;\n };\n MapType.prototype._deref = function(schema, opts) {\n schema.values = this.valuesType._attrs(opts);\n };\n function ArrayType(schema, opts) {\n Type.call(this);\n if (!schema.items) {\n throw new Error(f2(\"missing array items: %j\", schema));\n }\n this.itemsType = Type.forSchema(schema.items, opts);\n this._branchConstructor = this._createBranchConstructor();\n Object.freeze(this);\n }\n util.inherits(ArrayType, Type);\n ArrayType.prototype._check = function(val, flags, hook, path) {\n if (!Array.isArray(val)) {\n if (hook) {\n hook(val, this);\n }\n return false;\n }\n var items = this.itemsType;\n var b2 = true;\n var i, l, j2;\n if (hook) {\n j2 = path.length;\n path.push(\"\");\n for (i = 0, l = val.length; i < l; i++) {\n path[j2] = \"\" + i;\n if (!items._check(val[i], flags, hook, path)) {\n b2 = false;\n }\n }\n path.pop();\n } else {\n for (i = 0, l = val.length; i < l; i++) {\n if (!items._check(val[i], flags)) {\n return false;\n }\n }\n }\n return b2;\n };\n ArrayType.prototype._read = function(tap) {\n var items = this.itemsType;\n var i = 0;\n var val, n;\n while (n = tap.readLong()) {\n if (n < 0) {\n n = -n;\n tap.skipLong();\n }\n val = val || new Array(n);\n while (n--) {\n val[i++] = items._read(tap);\n }\n }\n return val || [];\n };\n ArrayType.prototype._skip = function(tap) {\n var items = this.itemsType;\n var len, n;\n while (n = tap.readLong()) {\n if (n < 0) {\n len = tap.readLong();\n tap.pos += len;\n } else {\n while (n--) {\n items._skip(tap);\n }\n }\n }\n };\n ArrayType.prototype._write = function(tap, val) {\n if (!Array.isArray(val)) {\n throwInvalidError(val, this);\n }\n var items = this.itemsType;\n var n = val.length;\n var i;\n if (n) {\n tap.writeLong(n);\n for (i = 0; i < n; i++) {\n items._write(tap, val[i]);\n }\n }\n tap.writeLong(0);\n };\n ArrayType.prototype._match = function(tap1, tap2) {\n var n1 = tap1.readLong();\n var n2 = tap2.readLong();\n var f3;\n while (n1 && n2) {\n f3 = this.itemsType._match(tap1, tap2);\n if (f3) {\n return f3;\n }\n if (!--n1) {\n n1 = readArraySize(tap1);\n }\n if (!--n2) {\n n2 = readArraySize(tap2);\n }\n }\n return utils.compare(n1, n2);\n };\n ArrayType.prototype._update = function(resolver, type, opts) {\n if (type.typeName === \"array\") {\n resolver.itemsType = this.itemsType.createResolver(type.itemsType, opts);\n resolver._read = this._read;\n }\n };\n ArrayType.prototype._copy = function(val, opts) {\n if (!Array.isArray(val)) {\n throwInvalidError(val, this);\n }\n var items = new Array(val.length);\n var i, l;\n for (i = 0, l = val.length; i < l; i++) {\n items[i] = this.itemsType._copy(val[i], opts);\n }\n return items;\n };\n ArrayType.prototype._deref = function(schema, opts) {\n schema.items = this.itemsType._attrs(opts);\n };\n ArrayType.prototype.compare = function(val1, val2) {\n var n1 = val1.length;\n var n2 = val2.length;\n var i, l, f3;\n for (i = 0, l = Math.min(n1, n2); i < l; i++) {\n if (f3 = this.itemsType.compare(val1[i], val2[i])) {\n return f3;\n }\n }\n return utils.compare(n1, n2);\n };\n ArrayType.prototype.getItemsType = function() {\n return this.itemsType;\n };\n ArrayType.prototype.typeName = \"array\";\n ArrayType.prototype.random = function() {\n var arr = [];\n var i, l;\n for (i = 0, l = RANDOM.nextInt(10); i < l; i++) {\n arr.push(this.itemsType.random());\n }\n return arr;\n };\n function RecordType(schema, opts) {\n opts = opts || {};\n var namespace = opts.namespace;\n if (schema.namespace !== void 0) {\n opts.namespace = schema.namespace;\n } else if (schema.name) {\n var ns = utils.impliedNamespace(schema.name);\n if (ns !== void 0) {\n opts.namespace = ns;\n }\n }\n Type.call(this, schema, opts);\n if (!Array.isArray(schema.fields)) {\n throw new Error(f2(\"non-array record fields: %j\", schema.fields));\n }\n if (utils.hasDuplicates(schema.fields, function(f3) {\n return f3.name;\n })) {\n throw new Error(f2(\"duplicate field name: %j\", schema.fields));\n }\n this._fieldsByName = {};\n this.fields = Object.freeze(schema.fields.map(function(f3) {\n var field = new Field(f3, opts);\n this._fieldsByName[field.name] = field;\n return field;\n }, this));\n this._branchConstructor = this._createBranchConstructor();\n this._isError = schema.type === \"error\";\n this.recordConstructor = this._createConstructor(\n opts.errorStackTraces,\n opts.omitRecordMethods\n );\n this._read = this._createReader();\n this._skip = this._createSkipper();\n this._write = this._createWriter();\n this._check = this._createChecker();\n opts.namespace = namespace;\n Object.freeze(this);\n }\n util.inherits(RecordType, Type);\n RecordType.prototype._getConstructorName = function() {\n return this.name ? utils.capitalize(utils.unqualify(this.name)) : this._isError ? \"Error$\" : \"Record$\";\n };\n RecordType.prototype._createConstructor = function(errorStack, plainRecords) {\n var outerArgs = [];\n var innerArgs = [];\n var ds = [];\n var innerBody = \"\";\n var i, l, field, name, defaultValue, hasDefault, stackField;\n for (i = 0, l = this.fields.length; i < l; i++) {\n field = this.fields[i];\n defaultValue = field.defaultValue;\n hasDefault = defaultValue() !== void 0;\n name = field.name;\n if (errorStack && this._isError && name === \"stack\" && Type.isType(field.type, \"string\") && !hasDefault) {\n stackField = field;\n }\n innerArgs.push(\"v\" + i);\n innerBody += \" \";\n if (!hasDefault) {\n innerBody += \"this.\" + name + \" = v\" + i + \";\\n\";\n } else {\n innerBody += \"if (v\" + i + \" === undefined) { \";\n innerBody += \"this.\" + name + \" = d\" + ds.length + \"(); \";\n innerBody += \"} else { this.\" + name + \" = v\" + i + \"; }\\n\";\n outerArgs.push(\"d\" + ds.length);\n ds.push(defaultValue);\n }\n }\n if (stackField) {\n innerBody += \" if (this.stack === undefined) { \";\n if (typeof Error.captureStackTrace == \"function\") {\n innerBody += \"Error.captureStackTrace(this, this.constructor);\";\n } else {\n innerBody += \"this.stack = Error().stack;\";\n }\n innerBody += \" }\\n\";\n }\n var outerBody = \"return function \" + this._getConstructorName() + \"(\";\n outerBody += innerArgs.join() + \") {\\n\" + innerBody + \"};\";\n var Record = new Function(outerArgs.join(), outerBody).apply(void 0, ds);\n if (plainRecords) {\n return Record;\n }\n var self = this;\n Record.getType = function() {\n return self;\n };\n Record.type = self;\n if (this._isError) {\n util.inherits(Record, Error);\n Record.prototype.name = this._getConstructorName();\n }\n Record.prototype.clone = function(o) {\n return self.clone(this, o);\n };\n Record.prototype.compare = function(v2) {\n return self.compare(this, v2);\n };\n Record.prototype.isValid = function(o) {\n return self.isValid(this, o);\n };\n Record.prototype.toBuffer = function() {\n return self.toBuffer(this);\n };\n Record.prototype.toString = function() {\n return self.toString(this);\n };\n Record.prototype.wrap = function() {\n return self.wrap(this);\n };\n Record.prototype.wrapped = Record.prototype.wrap;\n return Record;\n };\n RecordType.prototype._createChecker = function() {\n var names = [];\n var values = [];\n var name = this._getConstructorName();\n var body = \"return function check\" + name + \"(v, f, h, p) {\\n\";\n body += \" if (\\n\";\n body += \" v === null ||\\n\";\n body += \" typeof v != 'object' ||\\n\";\n body += \" (f && !this._checkFields(v))\\n\";\n body += \" ) {\\n\";\n body += \" if (h) { h(v, this); }\\n\";\n body += \" return false;\\n\";\n body += \" }\\n\";\n if (!this.fields.length) {\n body += \" return true;\\n\";\n } else {\n for (i = 0, l = this.fields.length; i < l; i++) {\n field = this.fields[i];\n names.push(\"t\" + i);\n values.push(field.type);\n if (field.defaultValue() !== void 0) {\n body += \" var v\" + i + \" = v.\" + field.name + \";\\n\";\n }\n }\n body += \" if (h) {\\n\";\n body += \" var b = 1;\\n\";\n body += \" var j = p.length;\\n\";\n body += \" p.push('');\\n\";\n var i, l, field;\n for (i = 0, l = this.fields.length; i < l; i++) {\n field = this.fields[i];\n body += \" p[j] = '\" + field.name + \"';\\n\";\n body += \" b &= \";\n if (field.defaultValue() === void 0) {\n body += \"t\" + i + \"._check(v.\" + field.name + \", f, h, p);\\n\";\n } else {\n body += \"v\" + i + \" === undefined || \";\n body += \"t\" + i + \"._check(v\" + i + \", f, h, p);\\n\";\n }\n }\n body += \" p.pop();\\n\";\n body += \" return !!b;\\n\";\n body += \" } else {\\n return (\\n \";\n body += this.fields.map(function(field2, i2) {\n return field2.defaultValue() === void 0 ? \"t\" + i2 + \"._check(v.\" + field2.name + \", f)\" : \"(v\" + i2 + \" === undefined || t\" + i2 + \"._check(v\" + i2 + \", f))\";\n }).join(\" &&\\n \");\n body += \"\\n );\\n }\\n\";\n }\n body += \"};\";\n return new Function(names.join(), body).apply(void 0, values);\n };\n RecordType.prototype._createReader = function() {\n var names = [];\n var values = [this.recordConstructor];\n var i, l;\n for (i = 0, l = this.fields.length; i < l; i++) {\n names.push(\"t\" + i);\n values.push(this.fields[i].type);\n }\n var name = this._getConstructorName();\n var body = \"return function read\" + name + \"(t) {\\n\";\n body += \" return new \" + name + \"(\\n \";\n body += names.map(function(s) {\n return s + \"._read(t)\";\n }).join(\",\\n \");\n body += \"\\n );\\n};\";\n names.unshift(name);\n return new Function(names.join(), body).apply(void 0, values);\n };\n RecordType.prototype._createSkipper = function() {\n var args = [];\n var body = \"return function skip\" + this._getConstructorName() + \"(t) {\\n\";\n var values = [];\n var i, l;\n for (i = 0, l = this.fields.length; i < l; i++) {\n args.push(\"t\" + i);\n values.push(this.fields[i].type);\n body += \" t\" + i + \"._skip(t);\\n\";\n }\n body += \"}\";\n return new Function(args.join(), body).apply(void 0, values);\n };\n RecordType.prototype._createWriter = function() {\n var args = [];\n var name = this._getConstructorName();\n var body = \"return function write\" + name + \"(t, v) {\\n\";\n var values = [];\n var i, l, field, value;\n for (i = 0, l = this.fields.length; i < l; i++) {\n field = this.fields[i];\n args.push(\"t\" + i);\n values.push(field.type);\n body += \" \";\n if (field.defaultValue() === void 0) {\n body += \"t\" + i + \"._write(t, v.\" + field.name + \");\\n\";\n } else {\n value = field.type.toBuffer(field.defaultValue()).toString(\"binary\");\n args.push(\"d\" + i);\n values.push(value);\n body += \"var v\" + i + \" = v.\" + field.name + \";\\n\";\n body += \"if (v\" + i + \" === undefined) {\\n\";\n body += \" t.writeBinary(d\" + i + \", \" + value.length + \");\\n\";\n body += \" } else {\\n t\" + i + \"._write(t, v\" + i + \");\\n }\\n\";\n }\n }\n body += \"}\";\n return new Function(args.join(), body).apply(void 0, values);\n };\n RecordType.prototype._update = function(resolver, type, opts) {\n if (!hasCompatibleName(this, type, !opts.ignoreNamespaces)) {\n throw new Error(f2(\"no alias found for %s\", type.name));\n }\n var rFields = this.fields;\n var wFields = type.fields;\n var wFieldsMap = utils.toMap(wFields, function(f3) {\n return f3.name;\n });\n var innerArgs = [];\n var resolvers = {};\n var i, j2, field, name, names, matches, fieldResolver;\n for (i = 0; i < rFields.length; i++) {\n field = rFields[i];\n names = getAliases(field);\n matches = [];\n for (j2 = 0; j2 < names.length; j2++) {\n name = names[j2];\n if (wFieldsMap[name]) {\n matches.push(name);\n }\n }\n if (matches.length > 1) {\n throw new Error(\n f2(\"ambiguous aliasing for %s.%s (%s)\", type.name, field.name, matches)\n );\n }\n if (!matches.length) {\n if (field.defaultValue() === void 0) {\n throw new Error(\n f2(\"no matching field for default-less %s.%s\", type.name, field.name)\n );\n }\n innerArgs.push(\"undefined\");\n } else {\n name = matches[0];\n fieldResolver = {\n resolver: field.type.createResolver(wFieldsMap[name].type, opts),\n name: \"_\" + field.name\n // Reader field name.\n };\n if (!resolvers[name]) {\n resolvers[name] = [fieldResolver];\n } else {\n resolvers[name].push(fieldResolver);\n }\n innerArgs.push(fieldResolver.name);\n }\n }\n var lazyIndex = -1;\n i = wFields.length;\n while (i && resolvers[wFields[--i].name] === void 0) {\n lazyIndex = i;\n }\n var uname = this._getConstructorName();\n var args = [uname];\n var values = [this.recordConstructor];\n var body = \" return function read\" + uname + \"(t, b) {\\n\";\n for (i = 0; i < wFields.length; i++) {\n if (i === lazyIndex) {\n body += \" if (!b) {\\n\";\n }\n field = type.fields[i];\n name = field.name;\n if (resolvers[name] === void 0) {\n body += ~lazyIndex && i >= lazyIndex ? \" \" : \" \";\n args.push(\"r\" + i);\n values.push(field.type);\n body += \"r\" + i + \"._skip(t);\\n\";\n } else {\n j2 = resolvers[name].length;\n while (j2--) {\n body += ~lazyIndex && i >= lazyIndex ? \" \" : \" \";\n args.push(\"r\" + i + \"f\" + j2);\n fieldResolver = resolvers[name][j2];\n values.push(fieldResolver.resolver);\n body += \"var \" + fieldResolver.name + \" = \";\n body += \"r\" + i + \"f\" + j2 + \"._\" + (j2 ? \"peek\" : \"read\") + \"(t);\\n\";\n }\n }\n }\n if (~lazyIndex) {\n body += \" }\\n\";\n }\n body += \" return new \" + uname + \"(\" + innerArgs.join() + \");\\n};\";\n resolver._read = new Function(args.join(), body).apply(void 0, values);\n };\n RecordType.prototype._match = function(tap1, tap2) {\n var fields = this.fields;\n var i, l, field, order, type;\n for (i = 0, l = fields.length; i < l; i++) {\n field = fields[i];\n order = field._order;\n type = field.type;\n if (order) {\n order *= type._match(tap1, tap2);\n if (order) {\n return order;\n }\n } else {\n type._skip(tap1);\n type._skip(tap2);\n }\n }\n return 0;\n };\n RecordType.prototype._checkFields = function(obj) {\n var keys = Object.keys(obj);\n var i, l;\n for (i = 0, l = keys.length; i < l; i++) {\n if (!this._fieldsByName[keys[i]]) {\n return false;\n }\n }\n return true;\n };\n RecordType.prototype._copy = function(val, opts) {\n var hook = opts && opts.fieldHook;\n var values = [void 0];\n var i, l, field, value;\n for (i = 0, l = this.fields.length; i < l; i++) {\n field = this.fields[i];\n value = val[field.name];\n if (value === void 0 && field.hasOwnProperty(\"defaultValue\")) {\n value = field.defaultValue();\n }\n if (opts && !opts.skip || value !== void 0) {\n value = field.type._copy(value, opts);\n }\n if (hook) {\n value = hook(field, value, this);\n }\n values.push(value);\n }\n var Record = this.recordConstructor;\n return new (Record.bind.apply(Record, values))();\n };\n RecordType.prototype._deref = function(schema, opts) {\n schema.fields = this.fields.map(function(field) {\n var fieldType = field.type;\n var fieldSchema = {\n name: field.name,\n type: fieldType._attrs(opts)\n };\n if (opts.exportAttrs) {\n var val = field.defaultValue();\n if (val !== void 0) {\n fieldSchema[\"default\"] = fieldType._copy(val, { coerce: 3, wrap: 3 });\n }\n var fieldOrder = field.order;\n if (fieldOrder !== \"ascending\") {\n fieldSchema.order = fieldOrder;\n }\n var fieldAliases = field.aliases;\n if (fieldAliases.length) {\n fieldSchema.aliases = fieldAliases;\n }\n var fieldDoc = field.doc;\n if (fieldDoc !== void 0) {\n fieldSchema.doc = fieldDoc;\n }\n }\n return fieldSchema;\n });\n };\n RecordType.prototype.compare = function(val1, val2) {\n var fields = this.fields;\n var i, l, field, name, order, type;\n for (i = 0, l = fields.length; i < l; i++) {\n field = fields[i];\n name = field.name;\n order = field._order;\n type = field.type;\n if (order) {\n order *= type.compare(val1[name], val2[name]);\n if (order) {\n return order;\n }\n }\n }\n return 0;\n };\n RecordType.prototype.random = function() {\n var fields = this.fields.map(function(f3) {\n return f3.type.random();\n });\n fields.unshift(void 0);\n var Record = this.recordConstructor;\n return new (Record.bind.apply(Record, fields))();\n };\n RecordType.prototype.field = function(name) {\n return this._fieldsByName[name];\n };\n RecordType.prototype.getField = RecordType.prototype.field;\n RecordType.prototype.getFields = function() {\n return this.fields;\n };\n RecordType.prototype.getRecordConstructor = function() {\n return this.recordConstructor;\n };\n Object.defineProperty(RecordType.prototype, \"typeName\", {\n enumerable: true,\n get: function() {\n return this._isError ? \"error\" : \"record\";\n }\n });\n function LogicalType(schema, opts) {\n this._logicalTypeName = schema.logicalType;\n Type.call(this);\n LOGICAL_TYPE = this;\n try {\n this._underlyingType = Type.forSchema(schema, opts);\n } finally {\n LOGICAL_TYPE = null;\n var l = UNDERLYING_TYPES.length;\n if (l && UNDERLYING_TYPES[l - 1][0] === this) {\n UNDERLYING_TYPES.pop();\n }\n }\n if (Type.isType(this.underlyingType, \"union\")) {\n this._branchConstructor = this.underlyingType._branchConstructor;\n } else {\n this._branchConstructor = this.underlyingType._createBranchConstructor();\n }\n }\n util.inherits(LogicalType, Type);\n Object.defineProperty(LogicalType.prototype, \"typeName\", {\n enumerable: true,\n get: function() {\n return \"logical:\" + this._logicalTypeName;\n }\n });\n Object.defineProperty(LogicalType.prototype, \"underlyingType\", {\n enumerable: true,\n get: function() {\n if (this._underlyingType) {\n return this._underlyingType;\n }\n var i, l, arr;\n for (i = 0, l = UNDERLYING_TYPES.length; i < l; i++) {\n arr = UNDERLYING_TYPES[i];\n if (arr[0] === this) {\n return arr[1];\n }\n }\n }\n });\n LogicalType.prototype.getUnderlyingType = function() {\n return this.underlyingType;\n };\n LogicalType.prototype._read = function(tap) {\n return this._fromValue(this.underlyingType._read(tap));\n };\n LogicalType.prototype._write = function(tap, any) {\n this.underlyingType._write(tap, this._toValue(any));\n };\n LogicalType.prototype._check = function(any, flags, hook, path) {\n try {\n var val = this._toValue(any);\n } catch (err) {\n }\n if (val === void 0) {\n if (hook) {\n hook(any, this);\n }\n return false;\n }\n return this.underlyingType._check(val, flags, hook, path);\n };\n LogicalType.prototype._copy = function(any, opts) {\n var type = this.underlyingType;\n switch (opts && opts.coerce) {\n case 3:\n return type._copy(this._toValue(any), opts);\n case 2:\n return this._fromValue(type._copy(any, opts));\n default:\n return this._fromValue(type._copy(this._toValue(any), opts));\n }\n };\n LogicalType.prototype._update = function(resolver, type, opts) {\n var _fromValue = this._resolve(type, opts);\n if (_fromValue) {\n resolver._read = function(tap) {\n return _fromValue(type._read(tap));\n };\n }\n };\n LogicalType.prototype.compare = function(obj1, obj2) {\n var val1 = this._toValue(obj1);\n var val2 = this._toValue(obj2);\n return this.underlyingType.compare(val1, val2);\n };\n LogicalType.prototype.random = function() {\n return this._fromValue(this.underlyingType.random());\n };\n LogicalType.prototype._deref = function(schema, opts) {\n var type = this.underlyingType;\n var isVisited = type.name !== void 0 && opts.derefed[type.name];\n schema = type._attrs(opts);\n if (!isVisited && opts.exportAttrs) {\n if (typeof schema == \"string\") {\n schema = { type: schema };\n }\n schema.logicalType = this._logicalTypeName;\n this._export(schema);\n }\n return schema;\n };\n LogicalType.prototype._skip = function(tap) {\n this.underlyingType._skip(tap);\n };\n LogicalType.prototype._export = function() {\n };\n LogicalType.prototype._fromValue = utils.abstractFunction;\n LogicalType.prototype._toValue = utils.abstractFunction;\n LogicalType.prototype._resolve = utils.abstractFunction;\n function AbstractLongType(noUnpack) {\n this._concreteTypeName = \"long\";\n PrimitiveType.call(this, true);\n this._noUnpack = !!noUnpack;\n }\n util.inherits(AbstractLongType, LongType);\n AbstractLongType.prototype.typeName = \"abstract:long\";\n AbstractLongType.prototype._check = function(val, flags, hook) {\n var b2 = this._isValid(val);\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n AbstractLongType.prototype._read = function(tap) {\n var buf, pos;\n if (this._noUnpack) {\n pos = tap.pos;\n tap.skipLong();\n buf = tap.buf.slice(pos, tap.pos);\n } else {\n buf = tap.unpackLongBytes(tap);\n }\n if (tap.isValid()) {\n return this._fromBuffer(buf);\n }\n };\n AbstractLongType.prototype._write = function(tap, val) {\n if (!this._isValid(val)) {\n throwInvalidError(val, this);\n }\n var buf = this._toBuffer(val);\n if (this._noUnpack) {\n tap.writeFixed(buf);\n } else {\n tap.packLongBytes(buf);\n }\n };\n AbstractLongType.prototype._copy = function(val, opts) {\n switch (opts && opts.coerce) {\n case 3:\n return this._toJSON(val);\n case 2:\n return this._fromJSON(val);\n default:\n return this._fromJSON(this._toJSON(val));\n }\n };\n AbstractLongType.prototype._deref = function() {\n return \"long\";\n };\n AbstractLongType.prototype._update = function(resolver, type) {\n var self = this;\n switch (type.typeName) {\n case \"int\":\n resolver._read = function(tap) {\n return self._fromJSON(type._read(tap));\n };\n break;\n case \"abstract:long\":\n case \"long\":\n resolver._read = function(tap) {\n return self._read(tap);\n };\n }\n };\n AbstractLongType.prototype.random = function() {\n return this._fromJSON(LongType.prototype.random());\n };\n AbstractLongType.prototype._fromBuffer = utils.abstractFunction;\n AbstractLongType.prototype._toBuffer = utils.abstractFunction;\n AbstractLongType.prototype._fromJSON = utils.abstractFunction;\n AbstractLongType.prototype._toJSON = utils.abstractFunction;\n AbstractLongType.prototype._isValid = utils.abstractFunction;\n AbstractLongType.prototype.compare = utils.abstractFunction;\n function Field(schema, opts) {\n var name = schema.name;\n if (typeof name != \"string\" || !utils.isValidName(name)) {\n throw new Error(f2(\"invalid field name: %s\", name));\n }\n this.name = name;\n this.type = Type.forSchema(schema.type, opts);\n this.aliases = schema.aliases || [];\n this.doc = schema.doc !== void 0 ? \"\" + schema.doc : void 0;\n this._order = function(order) {\n switch (order) {\n case \"ascending\":\n return 1;\n case \"descending\":\n return -1;\n case \"ignore\":\n return 0;\n default:\n throw new Error(f2(\"invalid order: %j\", order));\n }\n }(schema.order === void 0 ? \"ascending\" : schema.order);\n var value = schema[\"default\"];\n if (value !== void 0) {\n var type = this.type;\n var val;\n try {\n val = type._copy(value, { coerce: 2, wrap: 2 });\n } catch (err) {\n var msg = f2(\"incompatible field default %j (%s)\", value, err.message);\n if (Type.isType(type, \"union\")) {\n msg += f2(\n \", union defaults must match the first branch's type (%j)\",\n type.types[0]\n );\n }\n throw new Error(msg);\n }\n if (isPrimitive(type.typeName) && type.typeName !== \"bytes\") {\n this.defaultValue = function() {\n return val;\n };\n } else {\n this.defaultValue = function() {\n return type._copy(val);\n };\n }\n }\n Object.freeze(this);\n }\n Field.prototype.defaultValue = function() {\n };\n Object.defineProperty(Field.prototype, \"order\", {\n enumerable: true,\n get: function() {\n return [\"descending\", \"ignore\", \"ascending\"][this._order + 1];\n }\n });\n Field.prototype.getAliases = function() {\n return this.aliases;\n };\n Field.prototype.getDefault = Field.prototype.defaultValue;\n Field.prototype.getName = function() {\n return this.name;\n };\n Field.prototype.getOrder = function() {\n return this.order;\n };\n Field.prototype.getType = function() {\n return this.type;\n };\n function Resolver(readerType) {\n this._readerType = readerType;\n this._read = null;\n this.itemsType = null;\n this.size = 0;\n this.symbols = null;\n this.valuesType = null;\n }\n Resolver.prototype._peek = Type.prototype._peek;\n Resolver.prototype.inspect = function() {\n return \"\";\n };\n function Hash() {\n this.str = void 0;\n }\n function readValue(type, tap, resolver, lazy) {\n if (resolver) {\n if (resolver._readerType !== type) {\n throw new Error(\"invalid resolver\");\n }\n return resolver._read(tap, lazy);\n } else {\n return type._read(tap);\n }\n }\n function getAliases(obj) {\n var names = {};\n if (obj.name) {\n names[obj.name] = true;\n }\n var aliases = obj.aliases;\n var i, l;\n for (i = 0, l = aliases.length; i < l; i++) {\n names[aliases[i]] = true;\n }\n return Object.keys(names);\n }\n function hasCompatibleName(reader, writer, strict) {\n if (!writer.name) {\n return true;\n }\n var name = strict ? writer.name : utils.unqualify(writer.name);\n var aliases = getAliases(reader);\n var i, l, alias;\n for (i = 0, l = aliases.length; i < l; i++) {\n alias = aliases[i];\n if (!strict) {\n alias = utils.unqualify(alias);\n }\n if (alias === name) {\n return true;\n }\n }\n return false;\n }\n function isPrimitive(typeName) {\n var type = TYPES[typeName];\n return type && type.prototype instanceof PrimitiveType;\n }\n function getClassName(typeName) {\n if (typeName === \"error\") {\n typeName = \"record\";\n } else {\n var match = /^([^:]+):(.*)$/.exec(typeName);\n if (match) {\n if (match[1] === \"union\") {\n typeName = match[2] + \"Union\";\n } else {\n typeName = match[1];\n }\n }\n }\n return utils.capitalize(typeName) + \"Type\";\n }\n function readArraySize(tap) {\n var n = tap.readLong();\n if (n < 0) {\n n = -n;\n tap.skipLong();\n }\n return n;\n }\n function isSafeLong(n) {\n return n >= -9007199254740990 && n <= 9007199254740990;\n }\n function isJsonBuffer(obj) {\n return obj && obj.type === \"Buffer\" && Array.isArray(obj.data);\n }\n function throwInvalidError(val, type) {\n throw new Error(f2(\"invalid %j: %j\", type.schema(), val));\n }\n function maybeQualify(name, ns) {\n var unqualified = utils.unqualify(name);\n return isPrimitive(unqualified) ? unqualified : utils.qualify(name, ns);\n }\n function getTypeBucket(type) {\n var typeName = type.typeName;\n switch (typeName) {\n case \"double\":\n case \"float\":\n case \"int\":\n case \"long\":\n return \"number\";\n case \"bytes\":\n case \"fixed\":\n return \"buffer\";\n case \"enum\":\n return \"string\";\n case \"map\":\n case \"error\":\n case \"record\":\n return \"object\";\n default:\n return typeName;\n }\n }\n function getValueBucket(val) {\n if (val === null) {\n return \"null\";\n }\n var bucket = typeof val;\n if (bucket === \"object\") {\n if (Array.isArray(val)) {\n return \"array\";\n } else if (Buffer2.isBuffer(val)) {\n return \"buffer\";\n }\n }\n return bucket;\n }\n function isAmbiguous(types) {\n var buckets = {};\n var i, l, bucket, type;\n for (i = 0, l = types.length; i < l; i++) {\n type = types[i];\n if (!Type.isType(type, \"logical\")) {\n bucket = getTypeBucket(type);\n if (buckets[bucket]) {\n return true;\n }\n buckets[bucket] = true;\n }\n }\n return false;\n }\n function combineNumbers(types) {\n var typeNames = [\"int\", \"long\", \"float\", \"double\"];\n var superIndex = -1;\n var superType = null;\n var i, l, type, index;\n for (i = 0, l = types.length; i < l; i++) {\n type = types[i];\n index = typeNames.indexOf(type.typeName);\n if (index > superIndex) {\n superIndex = index;\n superType = type;\n }\n }\n return superType;\n }\n function combineStrings(types, opts) {\n var symbols = {};\n var i, l, type, typeSymbols;\n for (i = 0, l = types.length; i < l; i++) {\n type = types[i];\n if (type.typeName === \"string\") {\n return type;\n }\n typeSymbols = type.symbols;\n var j2, m2;\n for (j2 = 0, m2 = typeSymbols.length; j2 < m2; j2++) {\n symbols[typeSymbols[j2]] = true;\n }\n }\n return Type.forSchema({ type: \"enum\", symbols: Object.keys(symbols) }, opts);\n }\n function combineBuffers(types, opts) {\n var size = -1;\n var i, l, type;\n for (i = 0, l = types.length; i < l; i++) {\n type = types[i];\n if (type.typeName === \"bytes\") {\n return type;\n }\n if (size === -1) {\n size = type.size;\n } else if (type.size !== size) {\n size = -2;\n }\n }\n return size < 0 ? Type.forSchema(\"bytes\", opts) : types[0];\n }\n function combineObjects(types, opts) {\n var allTypes = [];\n var fieldTypes = {};\n var fieldDefaults = {};\n var isValidRecord = true;\n var i, l, type, fields;\n for (i = 0, l = types.length; i < l; i++) {\n type = types[i];\n if (type.typeName === \"map\") {\n isValidRecord = false;\n allTypes.push(type.valuesType);\n } else {\n fields = type.fields;\n var j2, m2, field, fieldDefault, fieldName, fieldType;\n for (j2 = 0, m2 = fields.length; j2 < m2; j2++) {\n field = fields[j2];\n fieldName = field.name;\n fieldType = field.type;\n allTypes.push(fieldType);\n if (isValidRecord) {\n if (!fieldTypes[fieldName]) {\n fieldTypes[fieldName] = [];\n }\n fieldTypes[fieldName].push(fieldType);\n fieldDefault = field.defaultValue();\n if (fieldDefault !== void 0) {\n fieldDefaults[fieldName] = fieldDefault;\n }\n }\n }\n }\n }\n if (isValidRecord) {\n var fieldNames = Object.keys(fieldTypes);\n for (i = 0, l = fieldNames.length; i < l; i++) {\n fieldName = fieldNames[i];\n if (fieldTypes[fieldName].length < types.length && fieldDefaults[fieldName] === void 0) {\n if (opts && opts.strictDefaults) {\n isValidRecord = false;\n } else {\n fieldTypes[fieldName].unshift(Type.forSchema(\"null\", opts));\n fieldDefaults[fieldName] = null;\n }\n }\n }\n }\n var schema;\n if (isValidRecord) {\n schema = {\n type: \"record\",\n fields: fieldNames.map(function(s) {\n var fieldType2 = Type.forTypes(fieldTypes[s], opts);\n var fieldDefault2 = fieldDefaults[s];\n if (fieldDefault2 !== void 0 && ~fieldType2.typeName.indexOf(\"union\")) {\n var unionTypes = fieldType2.types.slice();\n var i2, l2;\n for (i2 = 0, l2 = unionTypes.length; i2 < l2; i2++) {\n if (unionTypes[i2].isValid(fieldDefault2)) {\n break;\n }\n }\n if (i2 > 0) {\n var unionType = unionTypes[0];\n unionTypes[0] = unionTypes[i2];\n unionTypes[i2] = unionType;\n fieldType2 = Type.forSchema(unionTypes, opts);\n }\n }\n return {\n name: s,\n type: fieldType2,\n \"default\": fieldDefaults[s]\n };\n })\n };\n } else {\n schema = {\n type: \"map\",\n values: Type.forTypes(allTypes, opts)\n };\n }\n return Type.forSchema(schema, opts);\n }\n module.exports = {\n Type,\n getTypeBucket,\n getValueBucket,\n isPrimitive,\n builtins: function() {\n var types = {\n LogicalType,\n UnwrappedUnionType,\n WrappedUnionType\n };\n var typeNames = Object.keys(TYPES);\n var i, l, typeName;\n for (i = 0, l = typeNames.length; i < l; i++) {\n typeName = typeNames[i];\n types[getClassName(typeName)] = TYPES[typeName];\n }\n return types;\n }()\n };\n }\n});\n\n// node_modules/avsc/lib/containers.js\nvar require_containers = __commonJS({\n \"node_modules/avsc/lib/containers.js\"(exports, module) {\n \"use strict\";\n var types = require_types();\n var utils = require_utils();\n var buffer = __import_BUFFER;\n var stream = __import_STREAM;\n var util = __import_UTIL;\n var zlib = __import_ZLIB;\n var Buffer2 = buffer.Buffer;\n var OPTS = { namespace: \"org.apache.avro.file\" };\n var LONG_TYPE = types.Type.forSchema(\"long\", OPTS);\n var MAP_BYTES_TYPE = types.Type.forSchema({ type: \"map\", values: \"bytes\" }, OPTS);\n var HEADER_TYPE = types.Type.forSchema({\n name: \"Header\",\n type: \"record\",\n fields: [\n { name: \"magic\", type: { type: \"fixed\", name: \"Magic\", size: 4 } },\n { name: \"meta\", type: MAP_BYTES_TYPE },\n { name: \"sync\", type: { type: \"fixed\", name: \"Sync\", size: 16 } }\n ]\n }, OPTS);\n var BLOCK_TYPE = types.Type.forSchema({\n name: \"Block\",\n type: \"record\",\n fields: [\n { name: \"count\", type: \"long\" },\n { name: \"data\", type: \"bytes\" },\n { name: \"sync\", type: \"Sync\" }\n ]\n }, OPTS);\n var MAGIC_BYTES = utils.bufferFrom(\"Obj\u0001\");\n var f2 = util.format;\n var Tap = utils.Tap;\n function RawDecoder(schema, opts) {\n opts = opts || {};\n var noDecode = !!opts.noDecode;\n stream.Duplex.call(this, {\n readableObjectMode: !noDecode,\n allowHalfOpen: false\n });\n this._type = types.Type.forSchema(schema);\n this._tap = new Tap(utils.newBuffer(0));\n this._writeCb = null;\n this._needPush = false;\n this._readValue = createReader(noDecode, this._type);\n this._finished = false;\n this.on(\"finish\", function() {\n this._finished = true;\n this._read();\n });\n }\n util.inherits(RawDecoder, stream.Duplex);\n RawDecoder.prototype._write = function(chunk, encoding, cb) {\n this._writeCb = cb;\n var tap = this._tap;\n tap.buf = Buffer2.concat([tap.buf.slice(tap.pos), chunk]);\n tap.pos = 0;\n if (this._needPush) {\n this._needPush = false;\n this._read();\n }\n };\n RawDecoder.prototype._read = function() {\n this._needPush = false;\n var tap = this._tap;\n var pos = tap.pos;\n var val = this._readValue(tap);\n if (tap.isValid()) {\n this.push(val);\n } else if (!this._finished) {\n tap.pos = pos;\n this._needPush = true;\n if (this._writeCb) {\n this._writeCb();\n }\n } else {\n this.push(null);\n }\n };\n function BlockDecoder(opts) {\n opts = opts || {};\n var noDecode = !!opts.noDecode;\n stream.Duplex.call(this, {\n allowHalfOpen: true,\n // For async decompressors.\n readableObjectMode: !noDecode\n });\n this._rType = opts.readerSchema !== void 0 ? types.Type.forSchema(opts.readerSchema) : void 0;\n this._wType = null;\n this._codecs = opts.codecs;\n this._codec = void 0;\n this._parseHook = opts.parseHook;\n this._tap = new Tap(utils.newBuffer(0));\n this._blockTap = new Tap(utils.newBuffer(0));\n this._syncMarker = null;\n this._readValue = null;\n this._noDecode = noDecode;\n this._queue = new utils.OrderedQueue();\n this._decompress = null;\n this._index = 0;\n this._remaining = void 0;\n this._needPush = false;\n this._finished = false;\n this.on(\"finish\", function() {\n this._finished = true;\n if (this._needPush) {\n this._read();\n }\n });\n }\n util.inherits(BlockDecoder, stream.Duplex);\n BlockDecoder.defaultCodecs = function() {\n return {\n \"null\": function(buf, cb) {\n cb(null, buf);\n },\n \"deflate\": zlib.inflateRaw\n };\n };\n BlockDecoder.getDefaultCodecs = BlockDecoder.defaultCodecs;\n BlockDecoder.prototype._decodeHeader = function() {\n var tap = this._tap;\n if (tap.buf.length < MAGIC_BYTES.length) {\n return false;\n }\n if (!MAGIC_BYTES.equals(tap.buf.slice(0, MAGIC_BYTES.length))) {\n this.emit(\"error\", new Error(\"invalid magic bytes\"));\n return false;\n }\n var header = HEADER_TYPE._read(tap);\n if (!tap.isValid()) {\n return false;\n }\n this._codec = (header.meta[\"avro.codec\"] || \"null\").toString();\n var codecs = this._codecs || BlockDecoder.getDefaultCodecs();\n this._decompress = codecs[this._codec];\n if (!this._decompress) {\n this.emit(\"error\", new Error(f2(\"unknown codec: %s\", this._codec)));\n return;\n }\n try {\n var schema = JSON.parse(header.meta[\"avro.schema\"].toString());\n if (this._parseHook) {\n schema = this._parseHook(schema);\n }\n this._wType = types.Type.forSchema(schema);\n } catch (err) {\n this.emit(\"error\", err);\n return;\n }\n try {\n this._readValue = createReader(this._noDecode, this._wType, this._rType);\n } catch (err) {\n this.emit(\"error\", err);\n return;\n }\n this._syncMarker = header.sync;\n this.emit(\"metadata\", this._wType, this._codec, header);\n return true;\n };\n BlockDecoder.prototype._write = function(chunk, encoding, cb) {\n var tap = this._tap;\n tap.buf = Buffer2.concat([tap.buf, chunk]);\n tap.pos = 0;\n if (!this._decodeHeader()) {\n process.nextTick(cb);\n return;\n }\n this._write = this._writeChunk;\n this._write(utils.newBuffer(0), encoding, cb);\n };\n BlockDecoder.prototype._writeChunk = function(chunk, encoding, cb) {\n var tap = this._tap;\n tap.buf = Buffer2.concat([tap.buf.slice(tap.pos), chunk]);\n tap.pos = 0;\n var nBlocks = 1;\n var block;\n while (block = tryReadBlock(tap)) {\n if (!this._syncMarker.equals(block.sync)) {\n this.emit(\"error\", new Error(\"invalid sync marker\"));\n return;\n }\n nBlocks++;\n this._decompress(\n block.data,\n this._createBlockCallback(block.data.length, block.count, chunkCb)\n );\n }\n chunkCb();\n function chunkCb() {\n if (!--nBlocks) {\n cb();\n }\n }\n };\n BlockDecoder.prototype._createBlockCallback = function(size, count, cb) {\n var self = this;\n var index = this._index++;\n return function(cause, data) {\n if (cause) {\n var err = new Error(f2(\"%s codec decompression error\", self._codec));\n err.cause = cause;\n self.emit(\"error\", err);\n cb();\n } else {\n self.emit(\"block\", new BlockInfo(count, data.length, size));\n self._queue.push(new BlockData(index, data, cb, count));\n if (self._needPush) {\n self._read();\n }\n }\n };\n };\n BlockDecoder.prototype._read = function() {\n this._needPush = false;\n var tap = this._blockTap;\n if (!this._remaining) {\n var data = this._queue.pop();\n if (!data || !data.count) {\n if (this._finished) {\n this.push(null);\n } else {\n this._needPush = true;\n }\n if (data) {\n data.cb();\n }\n return;\n }\n data.cb();\n this._remaining = data.count;\n tap.buf = data.buf;\n tap.pos = 0;\n }\n this._remaining--;\n var val;\n try {\n val = this._readValue(tap);\n if (!tap.isValid()) {\n throw new Error(\"truncated block\");\n }\n } catch (err) {\n this._remaining = 0;\n this.emit(\"error\", err);\n return;\n }\n this.push(val);\n };\n function RawEncoder(schema, opts) {\n opts = opts || {};\n stream.Transform.call(this, {\n writableObjectMode: true,\n allowHalfOpen: false\n });\n this._type = types.Type.forSchema(schema);\n this._writeValue = function(tap, val) {\n try {\n this._type._write(tap, val);\n } catch (err) {\n this.emit(\"typeError\", err, val, this._type);\n }\n };\n this._tap = new Tap(utils.newBuffer(opts.batchSize || 65536));\n this.on(\"typeError\", function(err) {\n this.emit(\"error\", err);\n });\n }\n util.inherits(RawEncoder, stream.Transform);\n RawEncoder.prototype._transform = function(val, encoding, cb) {\n var tap = this._tap;\n var buf = tap.buf;\n var pos = tap.pos;\n this._writeValue(tap, val);\n if (!tap.isValid()) {\n if (pos) {\n this.push(copyBuffer(tap.buf, 0, pos));\n }\n var len = tap.pos - pos;\n if (len > buf.length) {\n tap.buf = utils.newBuffer(2 * len);\n }\n tap.pos = 0;\n this._writeValue(tap, val);\n }\n cb();\n };\n RawEncoder.prototype._flush = function(cb) {\n var tap = this._tap;\n var pos = tap.pos;\n if (pos) {\n this.push(tap.buf.slice(0, pos));\n }\n cb();\n };\n function BlockEncoder(schema, opts) {\n opts = opts || {};\n stream.Duplex.call(this, {\n allowHalfOpen: true,\n // To support async compressors.\n writableObjectMode: true\n });\n var type;\n if (types.Type.isType(schema)) {\n type = schema;\n schema = void 0;\n } else {\n type = types.Type.forSchema(schema);\n }\n this._schema = schema;\n this._type = type;\n this._writeValue = function(tap, val) {\n try {\n this._type._write(tap, val);\n } catch (err) {\n this.emit(\"typeError\", err, val, this._type);\n return false;\n }\n return true;\n };\n this._blockSize = opts.blockSize || 65536;\n this._tap = new Tap(utils.newBuffer(this._blockSize));\n this._codecs = opts.codecs;\n this._codec = opts.codec || \"null\";\n this._blockCount = 0;\n this._syncMarker = opts.syncMarker || new utils.Lcg().nextBuffer(16);\n this._queue = new utils.OrderedQueue();\n this._pending = 0;\n this._finished = false;\n this._needHeader = false;\n this._needPush = false;\n this._metadata = opts.metadata || {};\n if (!MAP_BYTES_TYPE.isValid(this._metadata)) {\n throw new Error(\"invalid metadata\");\n }\n var codec = this._codec;\n this._compress = (this._codecs || BlockEncoder.getDefaultCodecs())[codec];\n if (!this._compress) {\n throw new Error(f2(\"unsupported codec: %s\", codec));\n }\n if (opts.omitHeader !== void 0) {\n opts.writeHeader = opts.omitHeader ? \"never\" : \"auto\";\n }\n switch (opts.writeHeader) {\n case false:\n case \"never\":\n break;\n case void 0:\n case \"auto\":\n this._needHeader = true;\n break;\n default:\n this._writeHeader();\n }\n this.on(\"finish\", function() {\n this._finished = true;\n if (this._blockCount) {\n this._flushChunk();\n } else if (this._finished && this._needPush) {\n this.push(null);\n }\n });\n this.on(\"typeError\", function(err) {\n this.emit(\"error\", err);\n });\n }\n util.inherits(BlockEncoder, stream.Duplex);\n BlockEncoder.defaultCodecs = function() {\n return {\n \"null\": function(buf, cb) {\n cb(null, buf);\n },\n \"deflate\": zlib.deflateRaw\n };\n };\n BlockEncoder.getDefaultCodecs = BlockEncoder.defaultCodecs;\n BlockEncoder.prototype._writeHeader = function() {\n var schema = JSON.stringify(\n this._schema ? this._schema : this._type.getSchema({ exportAttrs: true })\n );\n var meta = utils.copyOwnProperties(\n this._metadata,\n { \"avro.schema\": utils.bufferFrom(schema), \"avro.codec\": utils.bufferFrom(this._codec) },\n true\n // Overwrite.\n );\n var Header = HEADER_TYPE.getRecordConstructor();\n var header = new Header(MAGIC_BYTES, meta, this._syncMarker);\n this.push(header.toBuffer());\n };\n BlockEncoder.prototype._write = function(val, encoding, cb) {\n if (this._needHeader) {\n this._writeHeader();\n this._needHeader = false;\n }\n var tap = this._tap;\n var pos = tap.pos;\n var flushing = false;\n if (this._writeValue(tap, val)) {\n if (!tap.isValid()) {\n if (pos) {\n this._flushChunk(pos, cb);\n flushing = true;\n }\n var len = tap.pos - pos;\n if (len > this._blockSize) {\n this._blockSize = len * 2;\n }\n tap.buf = utils.newBuffer(this._blockSize);\n tap.pos = 0;\n this._writeValue(tap, val);\n }\n this._blockCount++;\n } else {\n tap.pos = pos;\n }\n if (!flushing) {\n cb();\n }\n };\n BlockEncoder.prototype._flushChunk = function(pos, cb) {\n var tap = this._tap;\n pos = pos || tap.pos;\n this._compress(tap.buf.slice(0, pos), this._createBlockCallback(pos, cb));\n this._blockCount = 0;\n };\n BlockEncoder.prototype._read = function() {\n var self = this;\n var data = this._queue.pop();\n if (!data) {\n if (this._finished && !this._pending) {\n process.nextTick(function() {\n self.push(null);\n });\n } else {\n this._needPush = true;\n }\n return;\n }\n this.push(LONG_TYPE.toBuffer(data.count, true));\n this.push(LONG_TYPE.toBuffer(data.buf.length, true));\n this.push(data.buf);\n this.push(this._syncMarker);\n if (!this._finished) {\n data.cb();\n }\n };\n BlockEncoder.prototype._createBlockCallback = function(size, cb) {\n var self = this;\n var index = this._index++;\n var count = this._blockCount;\n this._pending++;\n return function(cause, data) {\n if (cause) {\n var err = new Error(f2(\"%s codec compression error\", self._codec));\n err.cause = cause;\n self.emit(\"error\", err);\n return;\n }\n self._pending--;\n self.emit(\"block\", new BlockInfo(count, size, data.length));\n self._queue.push(new BlockData(index, data, cb, count));\n if (self._needPush) {\n self._needPush = false;\n self._read();\n }\n };\n };\n function BlockInfo(count, raw, compressed) {\n this.valueCount = count;\n this.rawDataLength = raw;\n this.compressedDataLength = compressed;\n }\n function BlockData(index, buf, cb, count) {\n this.index = index;\n this.buf = buf;\n this.cb = cb;\n this.count = count | 0;\n }\n function tryReadBlock(tap) {\n var pos = tap.pos;\n var block = BLOCK_TYPE._read(tap);\n if (!tap.isValid()) {\n tap.pos = pos;\n return null;\n }\n return block;\n }\n function createReader(noDecode, writerType, readerType) {\n if (noDecode) {\n return /* @__PURE__ */ function(skipper) {\n return function(tap) {\n var pos = tap.pos;\n skipper(tap);\n return tap.buf.slice(pos, tap.pos);\n };\n }(writerType._skip);\n } else if (readerType) {\n var resolver = readerType.createResolver(writerType);\n return function(tap) {\n return resolver._read(tap);\n };\n } else {\n return function(tap) {\n return writerType._read(tap);\n };\n }\n }\n function copyBuffer(buf, pos, len) {\n var copy = utils.newBuffer(len);\n buf.copy(copy, 0, pos, pos + len);\n return copy;\n }\n module.exports = {\n BLOCK_TYPE,\n // For tests.\n HEADER_TYPE,\n // Idem.\n MAGIC_BYTES,\n // Idem.\n streams: {\n BlockDecoder,\n BlockEncoder,\n RawDecoder,\n RawEncoder\n }\n };\n }\n});\n\n// node_modules/avsc/lib/services.js\nvar require_services = __commonJS({\n \"node_modules/avsc/lib/services.js\"(exports, module) {\n \"use strict\";\n var types = require_types();\n var utils = require_utils();\n var buffer = __import_BUFFER;\n var events = __import_EVENTS;\n var stream = __import_STREAM;\n var util = __import_UTIL;\n var Buffer2 = buffer.Buffer;\n var Tap = utils.Tap;\n var Type = types.Type;\n var debug = util.debuglog(\"avsc:services\");\n var f2 = util.format;\n var OPTS = { namespace: \"org.apache.avro.ipc\" };\n var BOOLEAN_TYPE = Type.forSchema(\"boolean\", OPTS);\n var MAP_BYTES_TYPE = Type.forSchema({ type: \"map\", values: \"bytes\" }, OPTS);\n var STRING_TYPE = Type.forSchema(\"string\", OPTS);\n var HANDSHAKE_REQUEST_TYPE = Type.forSchema({\n name: \"HandshakeRequest\",\n type: \"record\",\n fields: [\n { name: \"clientHash\", type: { name: \"MD5\", type: \"fixed\", size: 16 } },\n { name: \"clientProtocol\", type: [\"null\", \"string\"], \"default\": null },\n { name: \"serverHash\", type: \"MD5\" },\n { name: \"meta\", type: [\"null\", MAP_BYTES_TYPE], \"default\": null }\n ]\n }, OPTS);\n var HANDSHAKE_RESPONSE_TYPE = Type.forSchema({\n name: \"HandshakeResponse\",\n type: \"record\",\n fields: [\n {\n name: \"match\",\n type: {\n name: \"HandshakeMatch\",\n type: \"enum\",\n symbols: [\"BOTH\", \"CLIENT\", \"NONE\"]\n }\n },\n { name: \"serverProtocol\", type: [\"null\", \"string\"], \"default\": null },\n { name: \"serverHash\", type: [\"null\", \"MD5\"], \"default\": null },\n { name: \"meta\", type: [\"null\", MAP_BYTES_TYPE], \"default\": null }\n ]\n }, OPTS);\n var PREFIX_LENGTH = 16;\n var PING_MESSAGE = new Message(\n \"\",\n // Empty name (invalid for other \"normal\" messages).\n Type.forSchema({ name: \"PingRequest\", type: \"record\", fields: [] }, OPTS),\n Type.forSchema([\"string\"], OPTS),\n Type.forSchema(\"null\", OPTS)\n );\n function Message(name, reqType, errType, resType, oneWay, doc) {\n this.name = name;\n if (!Type.isType(reqType, \"record\")) {\n throw new Error(\"invalid request type\");\n }\n this.requestType = reqType;\n if (!Type.isType(errType, \"union\") || !Type.isType(errType.getTypes()[0], \"string\")) {\n throw new Error(\"invalid error type\");\n }\n this.errorType = errType;\n if (oneWay) {\n if (!Type.isType(resType, \"null\") || errType.getTypes().length > 1) {\n throw new Error(\"inapplicable one-way parameter\");\n }\n }\n this.responseType = resType;\n this.oneWay = !!oneWay;\n this.doc = doc !== void 0 ? \"\" + doc : void 0;\n Object.freeze(this);\n }\n Message.forSchema = function(name, schema, opts) {\n opts = opts || {};\n if (!utils.isValidName(name)) {\n throw new Error(f2(\"invalid message name: %s\", name));\n }\n if (!Array.isArray(schema.request)) {\n throw new Error(f2(\"invalid message request: %s\", name));\n }\n var recordName = f2(\"%s.%sRequest\", OPTS.namespace, utils.capitalize(name));\n var reqType = Type.forSchema({\n name: recordName,\n type: \"record\",\n namespace: opts.namespace || \"\",\n // Don't leak request namespace.\n fields: schema.request\n }, opts);\n delete opts.registry[recordName];\n if (!schema.response) {\n throw new Error(f2(\"invalid message response: %s\", name));\n }\n var resType = Type.forSchema(schema.response, opts);\n if (schema.errors !== void 0 && !Array.isArray(schema.errors)) {\n throw new Error(f2(\"invalid message errors: %s\", name));\n }\n var errType = Type.forSchema([\"string\"].concat(schema.errors || []), opts);\n var oneWay = !!schema[\"one-way\"];\n return new Message(name, reqType, errType, resType, oneWay, schema.doc);\n };\n Message.prototype.schema = Type.prototype.getSchema;\n Message.prototype._attrs = function(opts) {\n var reqSchema = this.requestType._attrs(opts);\n var schema = {\n request: reqSchema.fields,\n response: this.responseType._attrs(opts)\n };\n var msgDoc = this.doc;\n if (msgDoc !== void 0) {\n schema.doc = msgDoc;\n }\n var errSchema = this.errorType._attrs(opts);\n if (errSchema.length > 1) {\n schema.errors = errSchema.slice(1);\n }\n if (this.oneWay) {\n schema[\"one-way\"] = true;\n }\n return schema;\n };\n utils.addDeprecatedGetters(\n Message,\n [\"name\", \"errorType\", \"requestType\", \"responseType\"]\n );\n Message.prototype.isOneWay = util.deprecate(\n function() {\n return this.oneWay;\n },\n \"use `.oneWay` directly instead of `.isOneWay()`\"\n );\n function Service(name, messages, types2, ptcl, server) {\n if (typeof name != \"string\") {\n return Service.forProtocol(name, messages);\n }\n this.name = name;\n this._messagesByName = messages || {};\n this.messages = Object.freeze(utils.objectValues(this._messagesByName));\n this._typesByName = types2 || {};\n this.types = Object.freeze(utils.objectValues(this._typesByName));\n this.protocol = ptcl;\n this._hashStr = utils.getHash(JSON.stringify(ptcl)).toString(\"binary\");\n this.doc = ptcl.doc ? \"\" + ptcl.doc : void 0;\n this._server = server || this.createServer({ silent: true });\n Object.freeze(this);\n }\n Service.Client = Client;\n Service.Server = Server;\n Service.compatible = function(clientSvc, serverSvc) {\n try {\n createReaders(clientSvc, serverSvc);\n } catch (err) {\n return false;\n }\n return true;\n };\n Service.forProtocol = function(ptcl, opts) {\n opts = opts || {};\n var name = ptcl.protocol;\n if (!name) {\n throw new Error(\"missing protocol name\");\n }\n if (ptcl.namespace !== void 0) {\n opts.namespace = ptcl.namespace;\n } else {\n var match = /^(.*)\\.[^.]+$/.exec(name);\n if (match) {\n opts.namespace = match[1];\n }\n }\n name = utils.qualify(name, opts.namespace);\n if (ptcl.types) {\n ptcl.types.forEach(function(obj) {\n Type.forSchema(obj, opts);\n });\n }\n var msgs;\n if (ptcl.messages) {\n msgs = {};\n Object.keys(ptcl.messages).forEach(function(key) {\n msgs[key] = Message.forSchema(key, ptcl.messages[key], opts);\n });\n }\n return new Service(name, msgs, opts.registry, ptcl);\n };\n Service.isService = function(any) {\n return !!any && any.hasOwnProperty(\"_hashStr\");\n };\n Service.prototype.createClient = function(opts) {\n var client = new Client(this, opts);\n process.nextTick(function() {\n if (opts && opts.server) {\n var obj = { objectMode: true };\n var pts = [new stream.PassThrough(obj), new stream.PassThrough(obj)];\n opts.server.createChannel({ readable: pts[0], writable: pts[1] }, obj);\n client.createChannel({ readable: pts[1], writable: pts[0] }, obj);\n } else if (opts && opts.transport) {\n client.createChannel(opts.transport);\n }\n });\n return client;\n };\n Service.prototype.createServer = function(opts) {\n return new Server(this, opts);\n };\n Object.defineProperty(Service.prototype, \"hash\", {\n enumerable: true,\n get: function() {\n return utils.bufferFrom(this._hashStr, \"binary\");\n }\n });\n Service.prototype.message = function(name) {\n return this._messagesByName[name];\n };\n Service.prototype.type = function(name) {\n return this._typesByName[name];\n };\n Service.prototype.inspect = function() {\n return f2(\"\", this.name);\n };\n utils.addDeprecatedGetters(\n Service,\n [\"message\", \"messages\", \"name\", \"type\", \"types\"]\n );\n Service.prototype.createEmitter = util.deprecate(\n function(transport, opts) {\n opts = opts || {};\n var client = this.createClient({\n cache: opts.cache,\n buffering: false,\n strictTypes: opts.strictErrors,\n timeout: opts.timeout\n });\n var channel = client.createChannel(transport, opts);\n forwardErrors(client, channel);\n return channel;\n },\n \"use `.createClient()` instead of `.createEmitter()`\"\n );\n Service.prototype.createListener = util.deprecate(\n function(transport, opts) {\n if (opts && opts.strictErrors) {\n throw new Error(\"use `.createServer()` to support strict errors\");\n }\n return this._server.createChannel(transport, opts);\n },\n \"use `.createServer().createChannel()` instead of `.createListener()`\"\n );\n Service.prototype.emit = util.deprecate(\n function(name, req, channel, cb) {\n if (!channel || !this.equals(channel.client._svc$)) {\n throw new Error(\"invalid emitter\");\n }\n var client = channel.client;\n Client.prototype.emitMessage.call(client, name, req, cb && cb.bind(this));\n return channel.getPending();\n },\n \"create a client via `.createClient()` to emit messages instead of `.emit()`\"\n );\n Service.prototype.equals = util.deprecate(\n function(any) {\n return Service.isService(any) && this.getFingerprint().equals(any.getFingerprint());\n },\n \"equality testing is deprecated, compare the `.protocol`s instead\"\n );\n Service.prototype.getFingerprint = util.deprecate(\n function(algorithm) {\n return utils.getHash(JSON.stringify(this.protocol), algorithm);\n },\n \"use `.hash` instead of `.getFingerprint()`\"\n );\n Service.prototype.getSchema = util.deprecate(\n Type.prototype.getSchema,\n \"use `.protocol` instead of `.getSchema()`\"\n );\n Service.prototype.on = util.deprecate(\n function(name, handler) {\n var self = this;\n this._server.onMessage(name, function(req, cb) {\n return handler.call(self, req, this.channel, cb);\n });\n return this;\n },\n \"use `.createServer().onMessage()` instead of `.on()`\"\n );\n Service.prototype.subprotocol = util.deprecate(\n function() {\n var parent = this._server;\n var opts = { strictTypes: parent._strict, cache: parent._cache };\n var server = new Server(parent.service, opts);\n server._handlers = Object.create(parent._handlers);\n return new Service(\n this.name,\n this._messagesByName,\n this._typesByName,\n this.protocol,\n server\n );\n },\n \"`.subprotocol()` will be removed in 5.1\"\n );\n Service.prototype._attrs = function(opts) {\n var ptcl = { protocol: this.name };\n var types2 = [];\n this.types.forEach(function(t) {\n if (t.getName() === void 0) {\n return;\n }\n var typeSchema = t._attrs(opts);\n if (typeof typeSchema != \"string\") {\n types2.push(typeSchema);\n }\n });\n if (types2.length) {\n ptcl.types = types2;\n }\n var msgNames = Object.keys(this._messagesByName);\n if (msgNames.length) {\n ptcl.messages = {};\n msgNames.forEach(function(name) {\n ptcl.messages[name] = this._messagesByName[name]._attrs(opts);\n }, this);\n }\n if (opts && opts.exportAttrs && this.doc !== void 0) {\n ptcl.doc = this.doc;\n }\n return ptcl;\n };\n function discoverProtocol(transport, opts, cb) {\n if (cb === void 0 && typeof opts == \"function\") {\n cb = opts;\n opts = void 0;\n }\n var svc = new Service({ protocol: \"Empty\" }, OPTS);\n var ptclStr;\n svc.createClient({ timeout: opts && opts.timeout }).createChannel(transport, {\n scope: opts && opts.scope,\n endWritable: typeof transport == \"function\"\n // Stateless transports only.\n }).once(\"handshake\", function(hreq, hres) {\n ptclStr = hres.serverProtocol;\n this.destroy(true);\n }).once(\"eot\", function(pending, err) {\n if (err && !/interrupted/.test(err)) {\n cb(err);\n } else {\n cb(null, JSON.parse(ptclStr));\n }\n });\n }\n function Client(svc, opts) {\n opts = opts || {};\n events.EventEmitter.call(this);\n this._svc$ = svc;\n this._channels$ = [];\n this._fns$ = [];\n this._buffering$ = !!opts.buffering;\n this._cache$ = opts.cache || {};\n this._policy$ = opts.channelPolicy;\n this._strict$ = !!opts.strictTypes;\n this._timeout$ = utils.getOption(opts, \"timeout\", 1e4);\n if (opts.remoteProtocols) {\n insertRemoteProtocols(this._cache$, opts.remoteProtocols, svc, true);\n }\n this._svc$.messages.forEach(function(msg) {\n this[msg.name] = this._createMessageHandler$(msg);\n }, this);\n }\n util.inherits(Client, events.EventEmitter);\n Client.prototype.activeChannels = function() {\n return this._channels$.slice();\n };\n Client.prototype.createChannel = function(transport, opts) {\n var objectMode = opts && opts.objectMode;\n var channel;\n if (typeof transport == \"function\") {\n var writableFactory;\n if (objectMode) {\n writableFactory = transport;\n } else {\n writableFactory = function(cb) {\n var encoder2 = new FrameEncoder();\n var writable2 = transport(function(err, readable2) {\n if (err) {\n cb(err);\n return;\n }\n var decoder2 = new FrameDecoder().once(\"error\", function(err2) {\n channel.destroy(err2);\n });\n cb(null, readable2.pipe(decoder2));\n });\n if (writable2) {\n encoder2.pipe(writable2);\n return encoder2;\n }\n };\n }\n channel = new StatelessClientChannel(this, writableFactory, opts);\n } else {\n var readable, writable;\n if (isStream(transport)) {\n readable = writable = transport;\n } else {\n readable = transport.readable;\n writable = transport.writable;\n }\n if (!objectMode) {\n var decoder = new NettyDecoder();\n readable = readable.pipe(decoder);\n var encoder = new NettyEncoder();\n encoder.pipe(writable);\n writable = encoder;\n }\n channel = new StatefulClientChannel(this, readable, writable, opts);\n if (!objectMode) {\n channel.once(\"eot\", function() {\n readable.unpipe(decoder);\n encoder.unpipe(writable);\n });\n decoder.once(\"error\", function(err) {\n channel.destroy(err);\n });\n }\n }\n var channels = this._channels$;\n channels.push(channel);\n channel.once(\"_drain\", function() {\n channels.splice(channels.indexOf(this), 1);\n });\n this._buffering$ = false;\n this.emit(\"channel\", channel);\n return channel;\n };\n Client.prototype.destroyChannels = function(opts) {\n this._channels$.forEach(function(channel) {\n channel.destroy(opts && opts.noWait);\n });\n };\n Client.prototype.emitMessage = function(name, req, opts, cb) {\n var msg = getExistingMessage(this._svc$, name);\n var wreq = new WrappedRequest(msg, {}, req);\n this._emitMessage$(wreq, opts, cb);\n };\n Client.prototype.remoteProtocols = function() {\n return getRemoteProtocols(this._cache$, true);\n };\n Object.defineProperty(Client.prototype, \"service\", {\n enumerable: true,\n get: function() {\n return this._svc$;\n }\n });\n Client.prototype.use = function() {\n var i, l, fn;\n for (i = 0, l = arguments.length; i < l; i++) {\n fn = arguments[i];\n this._fns$.push(fn.length < 3 ? fn(this) : fn);\n }\n return this;\n };\n Client.prototype._emitMessage$ = function(wreq, opts, cb) {\n if (!cb && typeof opts === \"function\") {\n cb = opts;\n opts = void 0;\n }\n var self = this;\n var channels = this._channels$;\n var numChannels = channels.length;\n if (!numChannels) {\n if (this._buffering$) {\n debug(\"no active client channels, buffering call\");\n this.once(\"channel\", function() {\n this._emitMessage$(wreq, opts, cb);\n });\n } else {\n var err = new Error(\"no active channels\");\n process.nextTick(function() {\n if (cb) {\n cb.call(new CallContext(wreq._msg), err);\n } else {\n self.emit(\"error\", err);\n }\n });\n }\n return;\n }\n opts = opts || {};\n if (opts.timeout === void 0) {\n opts.timeout = this._timeout$;\n }\n var channel;\n if (numChannels === 1) {\n channel = channels[0];\n } else if (this._policy$) {\n channel = this._policy$(this._channels$.slice());\n if (!channel) {\n debug(\"policy returned no channel, skipping call\");\n return;\n }\n } else {\n channel = channels[Math.floor(Math.random() * numChannels)];\n }\n channel._emit(wreq, opts, function(err2, wres) {\n var ctx = this;\n var errType = ctx.message.errorType;\n if (err2) {\n if (self._strict$) {\n err2 = errType.clone(err2.message, { wrapUnions: true });\n }\n done(err2);\n return;\n }\n if (!wres) {\n done();\n return;\n }\n err2 = wres.error;\n if (!self._strict$) {\n if (err2 === void 0) {\n err2 = null;\n } else {\n if (Type.isType(errType, \"union:unwrapped\")) {\n if (typeof err2 == \"string\") {\n err2 = new Error(err2);\n }\n } else if (err2 && err2.string && typeof err2.string == \"string\") {\n err2 = new Error(err2.string);\n }\n }\n }\n done(err2, wres.response);\n function done(err3, res) {\n if (cb) {\n cb.call(ctx, err3, res);\n } else if (err3) {\n self.emit(\"error\", err3);\n }\n }\n });\n };\n Client.prototype._createMessageHandler$ = function(msg) {\n var fields = msg.requestType.getFields();\n var names = fields.map(function(f3) {\n return f3.getName();\n });\n var body = \"return function \" + msg.name + \"(\";\n if (names.length) {\n body += names.join(\", \") + \", \";\n }\n body += \"opts, cb) {\\n\";\n body += \" var req = {\";\n body += names.map(function(n) {\n return n + \": \" + n;\n }).join(\", \");\n body += \"};\\n\";\n body += \" return this.emitMessage('\" + msg.name + \"', req, opts, cb);\\n\";\n body += \"};\";\n return new Function(body)();\n };\n function Server(svc, opts) {\n opts = opts || {};\n events.EventEmitter.call(this);\n this.service = svc;\n this._handlers = {};\n this._fns = [];\n this._channels = {};\n this._nextChannelId = 1;\n this._cache = opts.cache || {};\n this._defaultHandler = opts.defaultHandler;\n this._sysErrFormatter = opts.systemErrorFormatter;\n this._silent = !!opts.silent;\n this._strict = !!opts.strictTypes;\n if (opts.remoteProtocols) {\n insertRemoteProtocols(this._cache, opts.remoteProtocols, svc, false);\n }\n svc.messages.forEach(function(msg) {\n var name = msg.name;\n if (!opts.noCapitalize) {\n name = utils.capitalize(name);\n }\n this[\"on\" + name] = this._createMessageHandler(msg);\n }, this);\n }\n util.inherits(Server, events.EventEmitter);\n Server.prototype.activeChannels = function() {\n return utils.objectValues(this._channels);\n };\n Server.prototype.createChannel = function(transport, opts) {\n var objectMode = opts && opts.objectMode;\n var channel;\n if (typeof transport == \"function\") {\n var readableFactory;\n if (objectMode) {\n readableFactory = transport;\n } else {\n readableFactory = function(cb) {\n var decoder2 = new FrameDecoder().once(\"error\", function(err) {\n channel.destroy(err);\n });\n return transport(function(err, writable2) {\n if (err) {\n cb(err);\n return;\n }\n var encoder2 = new FrameEncoder();\n encoder2.pipe(writable2);\n cb(null, encoder2);\n }).pipe(decoder2);\n };\n }\n channel = new StatelessServerChannel(this, readableFactory, opts);\n } else {\n var readable, writable;\n if (isStream(transport)) {\n readable = writable = transport;\n } else {\n readable = transport.readable;\n writable = transport.writable;\n }\n if (!objectMode) {\n var decoder = new NettyDecoder();\n readable = readable.pipe(decoder);\n var encoder = new NettyEncoder();\n encoder.pipe(writable);\n writable = encoder;\n }\n channel = new StatefulServerChannel(this, readable, writable, opts);\n if (!objectMode) {\n channel.once(\"eot\", function() {\n readable.unpipe(decoder);\n encoder.unpipe(writable);\n });\n decoder.once(\"error\", function(err) {\n channel.destroy(err);\n });\n }\n }\n if (!this.listeners(\"error\").length) {\n this.on(\"error\", this._onError);\n }\n var channelId = this._nextChannelId++;\n var channels = this._channels;\n channels[channelId] = channel.once(\"eot\", function() {\n delete channels[channelId];\n });\n this.emit(\"channel\", channel);\n return channel;\n };\n Server.prototype.onMessage = function(name, handler) {\n getExistingMessage(this.service, name);\n this._handlers[name] = handler;\n return this;\n };\n Server.prototype.remoteProtocols = function() {\n return getRemoteProtocols(this._cache, false);\n };\n Server.prototype.use = function() {\n var i, l, fn;\n for (i = 0, l = arguments.length; i < l; i++) {\n fn = arguments[i];\n this._fns.push(fn.length < 3 ? fn(this) : fn);\n }\n return this;\n };\n Server.prototype._createMessageHandler = function(msg) {\n var name = msg.name;\n var fields = msg.requestType.fields;\n var numArgs = fields.length;\n var args = fields.length ? \", \" + fields.map(function(f3) {\n return \"req.\" + f3.name;\n }).join(\", \") : \"\";\n var body = \"return function (handler) {\\n\";\n body += \" if (handler.length > \" + numArgs + \") {\\n\";\n body += \" return this.onMessage('\" + name + \"', function (req, cb) {\\n\";\n body += \" return handler.call(this\" + args + \", cb);\\n\";\n body += \" });\\n\";\n body += \" } else {\\n\";\n body += \" return this.onMessage('\" + name + \"', function (req) {\\n\";\n body += \" return handler.call(this\" + args + \");\\n\";\n body += \" });\\n\";\n body += \" }\\n\";\n body += \"};\\n\";\n return new Function(body)();\n };\n Server.prototype._onError = function(err) {\n if (!this._silent && err.rpcCode !== \"UNKNOWN_PROTOCOL\") {\n console.error();\n if (err.rpcCode) {\n console.error(err.rpcCode);\n console.error(err.cause);\n } else {\n console.error(\"INTERNAL_SERVER_ERROR\");\n console.error(err);\n }\n }\n };\n function ClientChannel(client, opts) {\n opts = opts || {};\n events.EventEmitter.call(this);\n this.client = client;\n this.timeout = utils.getOption(opts, \"timeout\", client._timeout$);\n this._endWritable = !!utils.getOption(opts, \"endWritable\", true);\n this._prefix = normalizedPrefix(opts.scope);\n var cache = client._cache$;\n var clientSvc = client._svc$;\n var hash = opts.serverHash;\n if (!hash) {\n hash = clientSvc.hash;\n }\n var adapter = cache[hash];\n if (!adapter) {\n hash = clientSvc.hash;\n adapter = cache[hash] = new Adapter(clientSvc, clientSvc, hash);\n }\n this._adapter = adapter;\n this._registry = new Registry(this, PREFIX_LENGTH);\n this.pending = 0;\n this.destroyed = false;\n this.draining = false;\n this.once(\"_eot\", function(pending, err) {\n debug(\"client channel EOT\");\n this.destroyed = true;\n this.emit(\"eot\", pending, err);\n });\n }\n util.inherits(ClientChannel, events.EventEmitter);\n ClientChannel.prototype.destroy = function(noWait) {\n debug(\"destroying client channel\");\n if (!this.draining) {\n this.draining = true;\n this.emit(\"_drain\");\n }\n var registry = this._registry;\n var pending = this.pending;\n if (noWait) {\n registry.clear();\n }\n if (noWait || !pending) {\n if (isError(noWait)) {\n debug(\"fatal client channel error: %s\", noWait);\n this.emit(\"_eot\", pending, noWait);\n } else {\n this.emit(\"_eot\", pending);\n }\n } else {\n debug(\"client channel entering drain mode (%s pending)\", pending);\n }\n };\n ClientChannel.prototype.ping = function(timeout, cb) {\n if (!cb && typeof timeout == \"function\") {\n cb = timeout;\n timeout = void 0;\n }\n var self = this;\n var wreq = new WrappedRequest(PING_MESSAGE);\n this._emit(wreq, { timeout }, function(err) {\n if (cb) {\n cb.call(self, err);\n } else if (err) {\n self.destroy(err);\n }\n });\n };\n ClientChannel.prototype._createHandshakeRequest = function(adapter, noSvc) {\n var svc = this.client._svc$;\n return {\n clientHash: svc.hash,\n clientProtocol: noSvc ? null : JSON.stringify(svc.protocol),\n serverHash: adapter._hash\n };\n };\n ClientChannel.prototype._emit = function(wreq, opts, cb) {\n var msg = wreq._msg;\n var wres = msg.oneWay ? void 0 : new WrappedResponse(msg, {});\n var ctx = new CallContext(msg, this);\n var self = this;\n this.pending++;\n process.nextTick(function() {\n if (!msg.name) {\n onTransition(wreq, wres, onCompletion);\n } else {\n self.emit(\"outgoingCall\", ctx, opts);\n var fns = self.client._fns$;\n debug(\"starting client middleware chain (%s middleware)\", fns.length);\n chainMiddleware({\n fns,\n ctx,\n wreq,\n wres,\n onTransition,\n onCompletion,\n onError\n });\n }\n });\n function onTransition(wreq2, wres2, prev) {\n var err, reqBuf;\n if (self.destroyed) {\n err = new Error(\"channel destroyed\");\n } else {\n try {\n reqBuf = wreq2.toBuffer();\n } catch (cause) {\n err = serializationError(\n f2(\"invalid %j request\", msg.name),\n wreq2,\n [\n { name: \"headers\", type: MAP_BYTES_TYPE },\n { name: \"request\", type: msg.requestType }\n ]\n );\n }\n }\n if (err) {\n prev(err);\n return;\n }\n var timeout = opts && opts.timeout !== void 0 ? opts.timeout : self.timeout;\n var id = self._registry.add(timeout, function(err2, resBuf, adapter) {\n if (!err2 && !msg.oneWay) {\n try {\n adapter._decodeResponse(resBuf, wres2, msg);\n } catch (cause) {\n err2 = cause;\n }\n }\n prev(err2);\n });\n id |= self._prefix;\n debug(\"sending message %s\", id);\n self._send(id, reqBuf, !!msg && msg.oneWay);\n }\n function onCompletion(err) {\n self.pending--;\n cb.call(ctx, err, wres);\n if (self.draining && !self.destroyed && !self.pending) {\n self.destroy();\n }\n }\n function onError(err) {\n self.client.emit(\"error\", err, self);\n }\n };\n ClientChannel.prototype._getAdapter = function(hres) {\n var hash = hres.serverHash;\n var cache = this.client._cache$;\n var adapter = cache[hash];\n if (adapter) {\n return adapter;\n }\n var ptcl = JSON.parse(hres.serverProtocol);\n var serverSvc = Service.forProtocol(ptcl);\n adapter = new Adapter(this.client._svc$, serverSvc, hash, true);\n return cache[hash] = adapter;\n };\n ClientChannel.prototype._matchesPrefix = function(id) {\n return matchesPrefix(id, this._prefix);\n };\n ClientChannel.prototype._send = utils.abstractFunction;\n utils.addDeprecatedGetters(ClientChannel, [\"pending\", \"timeout\"]);\n ClientChannel.prototype.getCache = util.deprecate(\n function() {\n return this.client._cache$;\n },\n \"use `.remoteProtocols()` instead of `.getCache()`\"\n );\n ClientChannel.prototype.getProtocol = util.deprecate(\n function() {\n return this.client._svc$;\n },\n \"use `.service` instead or `.getProtocol()`\"\n );\n ClientChannel.prototype.isDestroyed = util.deprecate(\n function() {\n return this.destroyed;\n },\n \"use `.destroyed` instead of `.isDestroyed`\"\n );\n function StatelessClientChannel(client, writableFactory, opts) {\n ClientChannel.call(this, client, opts);\n this._writableFactory = writableFactory;\n if (!opts || !opts.noPing) {\n debug(\"emitting ping request\");\n this.ping();\n }\n }\n util.inherits(StatelessClientChannel, ClientChannel);\n StatelessClientChannel.prototype._send = function(id, reqBuf) {\n var cb = this._registry.get(id);\n var adapter = this._adapter;\n var self = this;\n process.nextTick(emit);\n return true;\n function emit(retry) {\n if (self.destroyed) {\n return;\n }\n var hreq = self._createHandshakeRequest(adapter, !retry);\n var writable = self._writableFactory.call(self, function(err, readable) {\n if (err) {\n cb(err);\n return;\n }\n readable.on(\"data\", function(obj) {\n debug(\"received response %s\", obj.id);\n var buf = Buffer2.concat(obj.payload);\n try {\n var parts = readHead(HANDSHAKE_RESPONSE_TYPE, buf);\n var hres = parts.head;\n if (hres.serverHash) {\n adapter = self._getAdapter(hres);\n }\n } catch (cause) {\n cb(cause);\n return;\n }\n var match = hres.match;\n debug(\"handshake match: %s\", match);\n self.emit(\"handshake\", hreq, hres);\n if (match === \"NONE\") {\n process.nextTick(function() {\n emit(true);\n });\n } else {\n self._adapter = adapter;\n cb(null, parts.tail, adapter);\n }\n });\n });\n if (!writable) {\n cb(new Error(\"invalid writable stream\"));\n return;\n }\n writable.write({\n id,\n payload: [HANDSHAKE_REQUEST_TYPE.toBuffer(hreq), reqBuf]\n });\n if (self._endWritable) {\n writable.end();\n }\n }\n };\n function StatefulClientChannel(client, readable, writable, opts) {\n ClientChannel.call(this, client, opts);\n this._readable = readable;\n this._writable = writable;\n this._connected = !!(opts && opts.noPing);\n this._readable.on(\"end\", onEnd);\n this._writable.on(\"finish\", onFinish);\n var self = this;\n var timer = null;\n this.once(\"eot\", function() {\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n if (!self._connected) {\n self.emit(\"_ready\");\n }\n this._writable.removeListener(\"finish\", onFinish);\n if (this._endWritable) {\n debug(\"ending transport\");\n this._writable.end();\n }\n this._readable.removeListener(\"data\", onPing).removeListener(\"data\", onMessage).removeListener(\"end\", onEnd);\n });\n var hreq;\n if (this._connected) {\n this._readable.on(\"data\", onMessage);\n } else {\n this._readable.on(\"data\", onPing);\n process.nextTick(ping);\n if (self.timeout) {\n timer = setTimeout(function() {\n self.destroy(new Error(\"timeout\"));\n }, self.timeout);\n }\n }\n function ping(retry) {\n if (self.destroyed) {\n return;\n }\n hreq = self._createHandshakeRequest(self._adapter, !retry);\n var payload = [\n HANDSHAKE_REQUEST_TYPE.toBuffer(hreq),\n utils.bufferFrom([0, 0])\n // No header, no data (empty message name).\n ];\n self._writable.write({ id: self._prefix, payload });\n }\n function onPing(obj) {\n if (!self._matchesPrefix(obj.id)) {\n debug(\"discarding unscoped response %s (still connecting)\", obj.id);\n return;\n }\n var buf = Buffer2.concat(obj.payload);\n try {\n var hres = readHead(HANDSHAKE_RESPONSE_TYPE, buf).head;\n if (hres.serverHash) {\n self._adapter = self._getAdapter(hres);\n }\n } catch (cause) {\n self.destroy(cause);\n return;\n }\n var match = hres.match;\n debug(\"handshake match: %s\", match);\n self.emit(\"handshake\", hreq, hres);\n if (match === \"NONE\") {\n process.nextTick(function() {\n ping(true);\n });\n } else {\n debug(\"successfully connected\");\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n self._readable.removeListener(\"data\", onPing).on(\"data\", onMessage);\n self._connected = true;\n self.emit(\"_ready\");\n hreq = null;\n }\n }\n function onMessage(obj) {\n var id = obj.id;\n if (!self._matchesPrefix(id)) {\n debug(\"discarding unscoped message %s\", id);\n return;\n }\n var cb = self._registry.get(id);\n if (cb) {\n process.nextTick(function() {\n debug(\"received message %s\", id);\n cb(null, Buffer2.concat(obj.payload), self._adapter);\n });\n }\n }\n function onEnd() {\n self.destroy(true);\n }\n function onFinish() {\n self.destroy();\n }\n }\n util.inherits(StatefulClientChannel, ClientChannel);\n StatefulClientChannel.prototype._emit = function() {\n if (this._connected || this.draining) {\n ClientChannel.prototype._emit.apply(this, arguments);\n } else {\n debug(\"queuing request\");\n var args = [];\n var i, l;\n for (i = 0, l = arguments.length; i < l; i++) {\n args.push(arguments[i]);\n }\n this.once(\"_ready\", function() {\n this._emit.apply(this, args);\n });\n }\n };\n StatefulClientChannel.prototype._send = function(id, reqBuf, oneWay) {\n if (oneWay) {\n var self = this;\n process.nextTick(function() {\n self._registry.get(id)(null, utils.bufferFrom([0, 0, 0]), self._adapter);\n });\n }\n return this._writable.write({ id, payload: [reqBuf] });\n };\n function ServerChannel(server, opts) {\n opts = opts || {};\n events.EventEmitter.call(this);\n this.server = server;\n this._endWritable = !!utils.getOption(opts, \"endWritable\", true);\n this._prefix = normalizedPrefix(opts.scope);\n var cache = server._cache;\n var svc = server.service;\n var hash = svc.hash;\n if (!cache[hash]) {\n cache[hash] = new Adapter(svc, svc, hash);\n }\n this._adapter = null;\n this.destroyed = false;\n this.draining = false;\n this.pending = 0;\n this.once(\"_eot\", function(pending, err) {\n debug(\"server channel EOT\");\n this.emit(\"eot\", pending, err);\n });\n }\n util.inherits(ServerChannel, events.EventEmitter);\n ServerChannel.prototype.destroy = function(noWait) {\n if (!this.draining) {\n this.draining = true;\n this.emit(\"_drain\");\n }\n if (noWait || !this.pending) {\n this.destroyed = true;\n if (isError(noWait)) {\n debug(\"fatal server channel error: %s\", noWait);\n this.emit(\"_eot\", this.pending, noWait);\n } else {\n this.emit(\"_eot\", this.pending);\n }\n }\n };\n ServerChannel.prototype._createHandshakeResponse = function(err, hreq) {\n var svc = this.server.service;\n var buf = svc.hash;\n var serverMatch = hreq && hreq.serverHash.equals(buf);\n return {\n match: err ? \"NONE\" : serverMatch ? \"BOTH\" : \"CLIENT\",\n serverProtocol: serverMatch ? null : JSON.stringify(svc.protocol),\n serverHash: serverMatch ? null : buf\n };\n };\n ServerChannel.prototype._getAdapter = function(hreq) {\n var hash = hreq.clientHash;\n var adapter = this.server._cache[hash];\n if (adapter) {\n return adapter;\n }\n if (!hreq.clientProtocol) {\n throw toRpcError(\"UNKNOWN_PROTOCOL\");\n }\n var ptcl = JSON.parse(hreq.clientProtocol);\n var clientSvc = Service.forProtocol(ptcl);\n adapter = new Adapter(clientSvc, this.server.service, hash, true);\n return this.server._cache[hash] = adapter;\n };\n ServerChannel.prototype._matchesPrefix = function(id) {\n return matchesPrefix(id, this._prefix);\n };\n ServerChannel.prototype._receive = function(reqBuf, adapter, cb) {\n var self = this;\n var wreq;\n try {\n wreq = adapter._decodeRequest(reqBuf);\n } catch (cause) {\n cb(self._encodeSystemError(toRpcError(\"INVALID_REQUEST\", cause)));\n return;\n }\n var msg = wreq._msg;\n var wres = new WrappedResponse(msg, {});\n if (!msg.name) {\n wres.response = null;\n cb(wres.toBuffer(), false);\n return;\n }\n var ctx = new CallContext(msg, this);\n self.emit(\"incomingCall\", ctx);\n var fns = this.server._fns;\n debug(\"starting server middleware chain (%s middleware)\", fns.length);\n self.pending++;\n chainMiddleware({\n fns,\n ctx,\n wreq,\n wres,\n onTransition,\n onCompletion,\n onError\n });\n function onTransition(wreq2, wres2, prev) {\n var handler = self.server._handlers[msg.name];\n if (!handler) {\n var defaultHandler = self.server._defaultHandler;\n if (defaultHandler) {\n defaultHandler.call(ctx, wreq2, wres2, prev);\n } else {\n var cause = new Error(f2(\"no handler for %s\", msg.name));\n prev(toRpcError(\"NOT_IMPLEMENTED\", cause));\n }\n } else {\n var pending = !msg.oneWay;\n try {\n if (pending) {\n handler.call(ctx, wreq2.request, function(err, res) {\n pending = false;\n wres2.error = err;\n wres2.response = res;\n prev();\n });\n } else {\n handler.call(ctx, wreq2.request);\n prev();\n }\n } catch (err) {\n if (pending) {\n pending = false;\n prev(err);\n } else {\n onError(err);\n }\n }\n }\n }\n function onCompletion(err) {\n self.pending--;\n var server = self.server;\n var resBuf;\n if (!err) {\n var resErr = wres.error;\n var isStrict = server._strict;\n if (!isStrict) {\n if (isError(resErr)) {\n wres.error = msg.errorType.clone(resErr.message, { wrapUnions: true });\n } else if (resErr === null) {\n resErr = wres.error = void 0;\n }\n if (resErr === void 0 && wres.response === void 0 && msg.responseType.isValid(null)) {\n wres.response = null;\n }\n }\n try {\n resBuf = wres.toBuffer();\n } catch (cause) {\n if (wres.error !== void 0) {\n err = serializationError(\n f2(\"invalid %j error\", msg.name),\n // Sic.\n wres,\n [\n { name: \"headers\", type: MAP_BYTES_TYPE },\n { name: \"error\", type: msg.errorType }\n ]\n );\n } else {\n err = serializationError(\n f2(\"invalid %j response\", msg.name),\n wres,\n [\n { name: \"headers\", type: MAP_BYTES_TYPE },\n { name: \"response\", type: msg.responseType }\n ]\n );\n }\n }\n }\n if (!resBuf) {\n resBuf = self._encodeSystemError(err, wres.headers);\n } else if (resErr !== void 0) {\n server.emit(\"error\", toRpcError(\"APPLICATION_ERROR\", resErr));\n }\n cb(resBuf, msg.oneWay);\n if (self.draining && !self.pending) {\n self.destroy();\n }\n }\n function onError(err) {\n self.server.emit(\"error\", err, self);\n }\n };\n utils.addDeprecatedGetters(ServerChannel, [\"pending\"]);\n ServerChannel.prototype.getCache = util.deprecate(\n function() {\n return this.server._cache;\n },\n \"use `.remoteProtocols()` instead of `.getCache()`\"\n );\n ServerChannel.prototype.getProtocol = util.deprecate(\n function() {\n return this.server.service;\n },\n \"use `.service` instead of `.getProtocol()`\"\n );\n ServerChannel.prototype.isDestroyed = util.deprecate(\n function() {\n return this.destroyed;\n },\n \"use `.destroyed` instead of `.isDestroyed`\"\n );\n ServerChannel.prototype._encodeSystemError = function(err, header) {\n var server = this.server;\n server.emit(\"error\", err, this);\n var errStr;\n if (server._sysErrFormatter) {\n errStr = server._sysErrFormatter.call(this, err);\n } else if (err.rpcCode) {\n errStr = err.message;\n }\n var hdrBuf;\n if (header) {\n try {\n hdrBuf = MAP_BYTES_TYPE.toBuffer(header);\n } catch (cause) {\n server.emit(\"error\", cause, this);\n }\n }\n return Buffer2.concat([\n hdrBuf || utils.bufferFrom([0]),\n utils.bufferFrom([1, 0]),\n // Error flag and first union index.\n STRING_TYPE.toBuffer(errStr || \"internal server error\")\n ]);\n };\n function StatelessServerChannel(server, readableFactory, opts) {\n ServerChannel.call(this, server, opts);\n this._writable = void 0;\n var self = this;\n var readable;\n process.nextTick(function() {\n readable = readableFactory.call(self, function(err, writable) {\n process.nextTick(function() {\n if (err) {\n onFinish(err);\n return;\n }\n self._writable = writable.on(\"finish\", onFinish);\n self.emit(\"_writable\");\n });\n }).on(\"data\", onRequest).on(\"end\", onEnd);\n });\n function onRequest(obj) {\n var id = obj.id;\n var buf = Buffer2.concat(obj.payload);\n var err;\n try {\n var parts = readHead(HANDSHAKE_REQUEST_TYPE, buf);\n var hreq = parts.head;\n var adapter = self._getAdapter(hreq);\n } catch (cause) {\n err = toRpcError(\"INVALID_HANDSHAKE_REQUEST\", cause);\n }\n var hres = self._createHandshakeResponse(err, hreq);\n self.emit(\"handshake\", hreq, hres);\n if (err) {\n done(self._encodeSystemError(err));\n } else {\n self._receive(parts.tail, adapter, done);\n }\n function done(resBuf) {\n if (!self.destroyed) {\n if (!self._writable) {\n self.once(\"_writable\", function() {\n done(resBuf);\n });\n return;\n }\n self._writable.write({\n id,\n payload: [HANDSHAKE_RESPONSE_TYPE.toBuffer(hres), resBuf]\n });\n }\n if (self._writable && self._endWritable) {\n self._writable.end();\n }\n }\n }\n function onEnd() {\n self.destroy();\n }\n function onFinish(err) {\n readable.removeListener(\"data\", onRequest).removeListener(\"end\", onEnd);\n self.destroy(err || true);\n }\n }\n util.inherits(StatelessServerChannel, ServerChannel);\n function StatefulServerChannel(server, readable, writable, opts) {\n ServerChannel.call(this, server, opts);\n this._adapter = void 0;\n this._writable = writable.on(\"finish\", onFinish);\n this._readable = readable.on(\"data\", onHandshake).on(\"end\", onEnd);\n this.once(\"_drain\", function() {\n this._readable.removeListener(\"data\", onHandshake).removeListener(\"data\", onRequest).removeListener(\"end\", onEnd);\n }).once(\"eot\", function() {\n this._writable.removeListener(\"finish\", onFinish);\n if (this._endWritable) {\n this._writable.end();\n }\n });\n var self = this;\n function onHandshake(obj) {\n var id = obj.id;\n if (!self._matchesPrefix(id)) {\n return;\n }\n var buf = Buffer2.concat(obj.payload);\n var err;\n try {\n var parts = readHead(HANDSHAKE_REQUEST_TYPE, buf);\n var hreq = parts.head;\n self._adapter = self._getAdapter(hreq);\n } catch (cause) {\n err = toRpcError(\"INVALID_HANDSHAKE_REQUEST\", cause);\n }\n var hres = self._createHandshakeResponse(err, hreq);\n self.emit(\"handshake\", hreq, hres);\n if (err) {\n done(self._encodeSystemError(err));\n } else {\n self._readable.removeListener(\"data\", onHandshake).on(\"data\", onRequest);\n self._receive(parts.tail, self._adapter, done);\n }\n function done(resBuf) {\n if (self.destroyed) {\n return;\n }\n self._writable.write({\n id,\n payload: [HANDSHAKE_RESPONSE_TYPE.toBuffer(hres), resBuf]\n });\n }\n }\n function onRequest(obj) {\n var id = obj.id;\n if (!self._matchesPrefix(id)) {\n return;\n }\n var reqBuf = Buffer2.concat(obj.payload);\n self._receive(reqBuf, self._adapter, function(resBuf, oneWay) {\n if (self.destroyed || oneWay) {\n return;\n }\n self._writable.write({ id, payload: [resBuf] });\n });\n }\n function onEnd() {\n self.destroy();\n }\n function onFinish() {\n self.destroy(true);\n }\n }\n util.inherits(StatefulServerChannel, ServerChannel);\n function WrappedRequest(msg, hdrs, req) {\n this._msg = msg;\n this.headers = hdrs || {};\n this.request = req || {};\n }\n WrappedRequest.prototype.toBuffer = function() {\n var msg = this._msg;\n return Buffer2.concat([\n MAP_BYTES_TYPE.toBuffer(this.headers),\n STRING_TYPE.toBuffer(msg.name),\n msg.requestType.toBuffer(this.request)\n ]);\n };\n function WrappedResponse(msg, hdr, err, res) {\n this._msg = msg;\n this.headers = hdr;\n this.error = err;\n this.response = res;\n }\n WrappedResponse.prototype.toBuffer = function() {\n var hdr = MAP_BYTES_TYPE.toBuffer(this.headers);\n var hasError = this.error !== void 0;\n return Buffer2.concat([\n hdr,\n BOOLEAN_TYPE.toBuffer(hasError),\n hasError ? this._msg.errorType.toBuffer(this.error) : this._msg.responseType.toBuffer(this.response)\n ]);\n };\n function CallContext(msg, channel) {\n this.channel = channel;\n this.locals = {};\n this.message = msg;\n Object.freeze(this);\n }\n function Registry(ctx, prefixLength) {\n this._ctx = ctx;\n this._mask = ~0 >>> (prefixLength | 0);\n this._id = 0;\n this._n = 0;\n this._cbs = {};\n }\n Registry.prototype.get = function(id) {\n return this._cbs[id & this._mask];\n };\n Registry.prototype.add = function(timeout, fn) {\n this._id = this._id + 1 & this._mask;\n var self = this;\n var id = this._id;\n var timer;\n if (timeout > 0) {\n timer = setTimeout(function() {\n cb(new Error(\"timeout\"));\n }, timeout);\n }\n this._cbs[id] = cb;\n this._n++;\n return id;\n function cb() {\n if (!self._cbs[id]) {\n return;\n }\n delete self._cbs[id];\n self._n--;\n if (timer) {\n clearTimeout(timer);\n }\n fn.apply(self._ctx, arguments);\n }\n };\n Registry.prototype.clear = function() {\n Object.keys(this._cbs).forEach(function(id) {\n this._cbs[id](new Error(\"interrupted\"));\n }, this);\n };\n function Adapter(clientSvc, serverSvc, hash, isRemote) {\n this._clientSvc = clientSvc;\n this._serverSvc = serverSvc;\n this._hash = hash;\n this._isRemote = !!isRemote;\n this._readers = createReaders(clientSvc, serverSvc);\n }\n Adapter.prototype._decodeRequest = function(buf) {\n var tap = new Tap(buf);\n var hdr = MAP_BYTES_TYPE._read(tap);\n var name = STRING_TYPE._read(tap);\n var msg, req;\n if (name) {\n msg = this._serverSvc.message(name);\n req = this._readers[name + \"?\"]._read(tap);\n } else {\n msg = PING_MESSAGE;\n }\n if (!tap.isValid()) {\n throw new Error(f2(\"truncated %s request\", name || \"ping$\"));\n }\n return new WrappedRequest(msg, hdr, req);\n };\n Adapter.prototype._decodeResponse = function(buf, wres, msg) {\n var tap = new Tap(buf);\n utils.copyOwnProperties(MAP_BYTES_TYPE._read(tap), wres.headers, true);\n var isError2 = BOOLEAN_TYPE._read(tap);\n var name = msg.name;\n if (name) {\n var reader = this._readers[name + (isError2 ? \"*\" : \"!\")];\n msg = this._clientSvc.message(name);\n if (isError2) {\n wres.error = reader._read(tap);\n } else {\n wres.response = reader._read(tap);\n }\n if (!tap.isValid()) {\n throw new Error(f2(\"truncated %s response\", name));\n }\n } else {\n msg = PING_MESSAGE;\n }\n };\n function FrameDecoder() {\n stream.Transform.call(this, { readableObjectMode: true });\n this._id = void 0;\n this._buf = utils.newBuffer(0);\n this._bufs = [];\n this.on(\"finish\", function() {\n this.push(null);\n });\n }\n util.inherits(FrameDecoder, stream.Transform);\n FrameDecoder.prototype._transform = function(buf, encoding, cb) {\n buf = Buffer2.concat([this._buf, buf]);\n var frameLength;\n while (buf.length >= 4 && buf.length >= (frameLength = buf.readInt32BE(0)) + 4) {\n if (frameLength) {\n this._bufs.push(buf.slice(4, frameLength + 4));\n } else {\n var bufs = this._bufs;\n this._bufs = [];\n this.push({ id: null, payload: bufs });\n }\n buf = buf.slice(frameLength + 4);\n }\n this._buf = buf;\n cb();\n };\n FrameDecoder.prototype._flush = function(cb) {\n if (this._buf.length || this._bufs.length) {\n var bufs = this._bufs.slice();\n bufs.unshift(this._buf);\n var err = toRpcError(\"TRAILING_DATA\");\n err.trailingData = Buffer2.concat(bufs).toString();\n this.emit(\"error\", err);\n }\n cb();\n };\n function FrameEncoder() {\n stream.Transform.call(this, { writableObjectMode: true });\n this.on(\"finish\", function() {\n this.push(null);\n });\n }\n util.inherits(FrameEncoder, stream.Transform);\n FrameEncoder.prototype._transform = function(obj, encoding, cb) {\n var bufs = obj.payload;\n var i, l, buf;\n for (i = 0, l = bufs.length; i < l; i++) {\n buf = bufs[i];\n this.push(intBuffer(buf.length));\n this.push(buf);\n }\n this.push(intBuffer(0));\n cb();\n };\n function NettyDecoder() {\n stream.Transform.call(this, { readableObjectMode: true });\n this._id = void 0;\n this._frameCount = 0;\n this._buf = utils.newBuffer(0);\n this._bufs = [];\n this.on(\"finish\", function() {\n this.push(null);\n });\n }\n util.inherits(NettyDecoder, stream.Transform);\n NettyDecoder.prototype._transform = function(buf, encoding, cb) {\n buf = Buffer2.concat([this._buf, buf]);\n while (true) {\n if (this._id === void 0) {\n if (buf.length < 8) {\n this._buf = buf;\n cb();\n return;\n }\n this._id = buf.readInt32BE(0);\n this._frameCount = buf.readInt32BE(4);\n buf = buf.slice(8);\n }\n var frameLength;\n while (this._frameCount && buf.length >= 4 && buf.length >= (frameLength = buf.readInt32BE(0)) + 4) {\n this._frameCount--;\n this._bufs.push(buf.slice(4, frameLength + 4));\n buf = buf.slice(frameLength + 4);\n }\n if (this._frameCount) {\n this._buf = buf;\n cb();\n return;\n } else {\n var obj = { id: this._id, payload: this._bufs };\n this._bufs = [];\n this._id = void 0;\n this.push(obj);\n }\n }\n };\n NettyDecoder.prototype._flush = FrameDecoder.prototype._flush;\n function NettyEncoder() {\n stream.Transform.call(this, { writableObjectMode: true });\n this.on(\"finish\", function() {\n this.push(null);\n });\n }\n util.inherits(NettyEncoder, stream.Transform);\n NettyEncoder.prototype._transform = function(obj, encoding, cb) {\n var bufs = obj.payload;\n var l = bufs.length;\n var buf;\n buf = utils.newBuffer(8);\n buf.writeInt32BE(obj.id, 0);\n buf.writeInt32BE(l, 4);\n this.push(buf);\n var i;\n for (i = 0; i < l; i++) {\n buf = bufs[i];\n this.push(intBuffer(buf.length));\n this.push(buf);\n }\n cb();\n };\n function intBuffer(n) {\n var buf = utils.newBuffer(4);\n buf.writeInt32BE(n);\n return buf;\n }\n function readHead(type, buf) {\n var tap = new Tap(buf);\n var head = type._read(tap);\n if (!tap.isValid()) {\n throw new Error(f2(\"truncated %j\", type.schema()));\n }\n return { head, tail: tap.buf.slice(tap.pos) };\n }\n function createReader(rtype, wtype) {\n return rtype.equals(wtype) ? rtype : rtype.createResolver(wtype);\n }\n function createReaders(clientSvc, serverSvc) {\n var obj = {};\n clientSvc.messages.forEach(function(c) {\n var n = c.name;\n var s = serverSvc.message(n);\n try {\n if (!s) {\n throw new Error(f2(\"missing server message: %s\", n));\n }\n if (s.oneWay !== c.oneWay) {\n throw new Error(f2(\"inconsistent one-way message: %s\", n));\n }\n obj[n + \"?\"] = createReader(s.requestType, c.requestType);\n obj[n + \"*\"] = createReader(c.errorType, s.errorType);\n obj[n + \"!\"] = createReader(c.responseType, s.responseType);\n } catch (cause) {\n throw toRpcError(\"INCOMPATIBLE_PROTOCOL\", cause);\n }\n });\n return obj;\n }\n function insertRemoteProtocols(cache, ptcls, svc, isClient) {\n Object.keys(ptcls).forEach(function(hash) {\n var ptcl = ptcls[hash];\n var clientSvc, serverSvc;\n if (isClient) {\n clientSvc = svc;\n serverSvc = Service.forProtocol(ptcl);\n } else {\n clientSvc = Service.forProtocol(ptcl);\n serverSvc = svc;\n }\n cache[hash] = new Adapter(clientSvc, serverSvc, hash, true);\n });\n }\n function getRemoteProtocols(cache, isClient) {\n var ptcls = {};\n Object.keys(cache).forEach(function(hs) {\n var adapter = cache[hs];\n if (adapter._isRemote) {\n var svc = isClient ? adapter._serverSvc : adapter._clientSvc;\n ptcls[hs] = svc.protocol;\n }\n });\n return ptcls;\n }\n function isError(any) {\n return !!any && Object.prototype.toString.call(any) === \"[object Error]\";\n }\n function forwardErrors(src, dst) {\n return src.on(\"error\", function(err) {\n dst.emit(\"error\", err, src);\n });\n }\n function toError(msg, cause) {\n var err = new Error(msg);\n err.cause = cause;\n return err;\n }\n function toRpcError(rpcCode, cause) {\n var err = toError(rpcCode.toLowerCase().replace(/_/g, \" \"), cause);\n err.rpcCode = cause && cause.rpcCode ? cause.rpcCode : rpcCode;\n return err;\n }\n function serializationError(msg, obj, fields) {\n var details = [];\n var i, l, field;\n for (i = 0, l = fields.length; i < l; i++) {\n field = fields[i];\n field.type.isValid(obj[field.name], { errorHook });\n }\n var detailsStr = details.map(function(obj2) {\n return f2(\"%s = %j but expected %s\", obj2.path, obj2.value, obj2.type);\n }).join(\", \");\n var err = new Error(f2(\"%s (%s)\", msg, detailsStr));\n err.details = details;\n return err;\n function errorHook(parts, any, type) {\n var strs = [];\n var i2, l2, part;\n for (i2 = 0, l2 = parts.length; i2 < l2; i2++) {\n part = parts[i2];\n if (isNaN(part)) {\n strs.push(\".\" + part);\n } else {\n strs.push(\"[\" + part + \"]\");\n }\n }\n details.push({\n path: field.name + strs.join(\"\"),\n value: any,\n type\n });\n }\n }\n function normalizedPrefix(scope) {\n return scope ? utils.getHash(scope).readInt16BE(0) << 32 - PREFIX_LENGTH : 0;\n }\n function matchesPrefix(id, prefix) {\n return (id ^ prefix) >> 32 - PREFIX_LENGTH === 0;\n }\n function isStream(any) {\n return !!(any && any.pipe);\n }\n function getExistingMessage(svc, name) {\n var msg = svc.message(name);\n if (!msg) {\n throw new Error(f2(\"unknown message: %s\", name));\n }\n return msg;\n }\n function chainMiddleware(params) {\n var args = [params.wreq, params.wres];\n var cbs = [];\n var cause;\n forward(0);\n function forward(pos) {\n var isDone = false;\n if (pos < params.fns.length) {\n params.fns[pos].apply(params.ctx, args.concat(function(err, cb) {\n if (isDone) {\n params.onError(toError(\"duplicate forward middleware call\", err));\n return;\n }\n isDone = true;\n if (err || params.wres && // Non one-way messages.\n (params.wres.error !== void 0 || params.wres.response !== void 0)) {\n cause = err;\n backward();\n return;\n }\n if (cb) {\n cbs.push(cb);\n }\n forward(++pos);\n }));\n } else {\n params.onTransition.apply(params.ctx, args.concat(function(err) {\n if (isDone) {\n params.onError(toError(\"duplicate handler call\", err));\n return;\n }\n isDone = true;\n cause = err;\n process.nextTick(backward);\n }));\n }\n }\n function backward() {\n var cb = cbs.pop();\n if (cb) {\n var isDone = false;\n cb.call(params.ctx, cause, function(err) {\n if (isDone) {\n params.onError(toError(\"duplicate backward middleware call\", err));\n return;\n }\n cause = err;\n isDone = true;\n backward();\n });\n } else {\n params.onCompletion.call(params.ctx, cause);\n }\n }\n }\n module.exports = {\n Adapter,\n HANDSHAKE_REQUEST_TYPE,\n HANDSHAKE_RESPONSE_TYPE,\n Message,\n Registry,\n Service,\n discoverProtocol,\n streams: {\n FrameDecoder,\n FrameEncoder,\n NettyDecoder,\n NettyEncoder\n }\n };\n }\n});\n\n// node_modules/avsc/lib/files.js\nvar require_files = __commonJS({\n \"node_modules/avsc/lib/files.js\"(exports, module) {\n \"use strict\";\n var fs = __import_FS;\n var path = __import_PATH;\n function createImportHook() {\n var imports = {};\n return function(fpath, kind, cb) {\n fpath = path.resolve(fpath);\n if (imports[fpath]) {\n process.nextTick(cb);\n return;\n }\n imports[fpath] = true;\n fs.readFile(fpath, { encoding: \"utf8\" }, cb);\n };\n }\n function createSyncImportHook() {\n var imports = {};\n return function(fpath, kind, cb) {\n fpath = path.resolve(fpath);\n if (imports[fpath]) {\n cb();\n } else {\n imports[fpath] = true;\n cb(null, fs.readFileSync(fpath, { encoding: \"utf8\" }));\n }\n };\n }\n module.exports = {\n createImportHook,\n createSyncImportHook,\n // Proxy a few methods to better shim them for browserify.\n existsSync: fs.existsSync,\n readFileSync: fs.readFileSync\n };\n }\n});\n\n// node_modules/avsc/lib/specs.js\nvar require_specs = __commonJS({\n \"node_modules/avsc/lib/specs.js\"(exports, module) {\n \"use strict\";\n var files = require_files();\n var utils = require_utils();\n var path = __import_PATH;\n var util = __import_UTIL;\n var f2 = util.format;\n var TYPE_REFS = {\n date: { type: \"int\", logicalType: \"date\" },\n decimal: { type: \"bytes\", logicalType: \"decimal\" },\n time_ms: { type: \"long\", logicalType: \"time-millis\" },\n timestamp_ms: { type: \"long\", logicalType: \"timestamp-millis\" }\n };\n function assembleProtocol(fpath, opts, cb) {\n if (!cb && typeof opts == \"function\") {\n cb = opts;\n opts = void 0;\n }\n opts = opts || {};\n if (!opts.importHook) {\n opts.importHook = files.createImportHook();\n }\n importFile(fpath, function(err, protocol) {\n if (err) {\n cb(err);\n return;\n }\n if (!protocol) {\n cb(new Error(\"empty root import\"));\n return;\n }\n var schemas = protocol.types;\n if (schemas) {\n var namespace = protocolNamespace(protocol) || \"\";\n schemas.forEach(function(schema) {\n if (schema.namespace === namespace) {\n delete schema.namespace;\n }\n });\n }\n cb(null, protocol);\n });\n function importFile(fpath2, cb2) {\n opts.importHook(fpath2, \"idl\", function(err, str) {\n if (err) {\n cb2(err);\n return;\n }\n if (str === void 0) {\n cb2();\n return;\n }\n try {\n var reader = new Reader(str, opts);\n var obj = reader._readProtocol(str, opts);\n } catch (err2) {\n err2.path = fpath2;\n cb2(err2);\n return;\n }\n fetchImports(obj.protocol, obj.imports, path.dirname(fpath2), cb2);\n });\n }\n function fetchImports(protocol, imports, dpath, cb2) {\n var importedProtocols = [];\n next();\n function next() {\n var info = imports.shift();\n if (!info) {\n importedProtocols.reverse();\n try {\n importedProtocols.forEach(function(imported) {\n mergeImport(protocol, imported);\n });\n } catch (err) {\n cb2(err);\n return;\n }\n cb2(null, protocol);\n return;\n }\n var importPath = path.join(dpath, info.name);\n if (info.kind === \"idl\") {\n importFile(importPath, function(err, imported) {\n if (err) {\n cb2(err);\n return;\n }\n if (imported) {\n importedProtocols.push(imported);\n }\n next();\n });\n } else {\n opts.importHook(importPath, info.kind, function(err, str) {\n if (err) {\n cb2(err);\n return;\n }\n switch (info.kind) {\n case \"protocol\":\n case \"schema\":\n if (str === void 0) {\n next();\n return;\n }\n try {\n var obj = JSON.parse(str);\n } catch (err2) {\n err2.path = importPath;\n cb2(err2);\n return;\n }\n var imported = info.kind === \"schema\" ? { types: [obj] } : obj;\n importedProtocols.push(imported);\n next();\n return;\n default:\n cb2(new Error(f2(\"invalid import kind: %s\", info.kind)));\n }\n });\n }\n }\n }\n function mergeImport(protocol, imported) {\n var schemas = imported.types || [];\n schemas.reverse();\n schemas.forEach(function(schema) {\n if (!protocol.types) {\n protocol.types = [];\n }\n if (schema.namespace === void 0) {\n schema.namespace = protocolNamespace(imported) || \"\";\n }\n protocol.types.unshift(schema);\n });\n Object.keys(imported.messages || {}).forEach(function(name) {\n if (!protocol.messages) {\n protocol.messages = {};\n }\n if (protocol.messages[name]) {\n throw new Error(f2(\"duplicate message: %s\", name));\n }\n protocol.messages[name] = imported.messages[name];\n });\n }\n }\n function read(str) {\n var schema;\n if (typeof str == \"string\" && ~str.indexOf(path.sep) && files.existsSync(str)) {\n var contents = files.readFileSync(str, { encoding: \"utf8\" });\n try {\n return JSON.parse(contents);\n } catch (err) {\n var opts = { importHook: files.createSyncImportHook() };\n assembleProtocol(str, opts, function(err2, protocolSchema) {\n schema = err2 ? contents : protocolSchema;\n });\n }\n } else {\n schema = str;\n }\n if (typeof schema != \"string\" || schema === \"null\") {\n return schema;\n }\n try {\n return JSON.parse(schema);\n } catch (err) {\n try {\n return Reader.readProtocol(schema);\n } catch (err2) {\n try {\n return Reader.readSchema(schema);\n } catch (err3) {\n return schema;\n }\n }\n }\n }\n function Reader(str, opts) {\n opts = opts || {};\n this._tk = new Tokenizer(str);\n this._ackVoidMessages = !!opts.ackVoidMessages;\n this._implicitTags = !opts.delimitedCollections;\n this._typeRefs = opts.typeRefs || TYPE_REFS;\n }\n Reader.readProtocol = function(str, opts) {\n var reader = new Reader(str, opts);\n var protocol = reader._readProtocol();\n if (protocol.imports.length) {\n throw new Error(\"unresolvable import\");\n }\n return protocol.protocol;\n };\n Reader.readSchema = function(str, opts) {\n var reader = new Reader(str, opts);\n var doc = reader._readJavadoc();\n var schema = reader._readType(doc === void 0 ? {} : { doc }, true);\n reader._tk.next({ id: \"(eof)\" });\n return schema;\n };\n Reader.prototype._readProtocol = function() {\n var tk = this._tk;\n var imports = [];\n var types = [];\n var messages = {};\n var pos;\n this._readImports(imports);\n var protocolSchema = {};\n var protocolJavadoc = this._readJavadoc();\n if (protocolJavadoc !== void 0) {\n protocolSchema.doc = protocolJavadoc;\n }\n this._readAnnotations(protocolSchema);\n tk.next({ val: \"protocol\" });\n if (!tk.next({ val: \"{\", silent: true })) {\n protocolSchema.protocol = tk.next({ id: \"name\" }).val;\n tk.next({ val: \"{\" });\n }\n while (!tk.next({ val: \"}\", silent: true })) {\n if (!this._readImports(imports)) {\n var javadoc = this._readJavadoc();\n var typeSchema = this._readType({}, true);\n var numImports = this._readImports(imports, true);\n var message = void 0;\n pos = tk.pos;\n if (!numImports && (message = this._readMessage(typeSchema))) {\n if (javadoc !== void 0 && message.schema.doc === void 0) {\n message.schema.doc = javadoc;\n }\n var oneWay = false;\n if (message.schema.response === \"void\" || message.schema.response.type === \"void\") {\n oneWay = !this._ackVoidMessages && !message.schema.errors;\n if (message.schema.response === \"void\") {\n message.schema.response = \"null\";\n } else {\n message.schema.response.type = \"null\";\n }\n }\n if (oneWay) {\n message.schema[\"one-way\"] = true;\n }\n if (messages[message.name]) {\n throw new Error(f2(\"duplicate message: %s\", message.name));\n }\n messages[message.name] = message.schema;\n } else {\n if (javadoc) {\n if (typeof typeSchema == \"string\") {\n typeSchema = { doc: javadoc, type: typeSchema };\n } else if (typeSchema.doc === void 0) {\n typeSchema.doc = javadoc;\n }\n }\n types.push(typeSchema);\n tk.pos = pos;\n tk.next({ val: \";\", silent: true });\n }\n javadoc = void 0;\n }\n }\n tk.next({ id: \"(eof)\" });\n if (types.length) {\n protocolSchema.types = types;\n }\n if (Object.keys(messages).length) {\n protocolSchema.messages = messages;\n }\n return { protocol: protocolSchema, imports };\n };\n Reader.prototype._readAnnotations = function(schema) {\n var tk = this._tk;\n while (tk.next({ val: \"@\", silent: true })) {\n var parts = [];\n while (!tk.next({ val: \"(\", silent: true })) {\n parts.push(tk.next().val);\n }\n schema[parts.join(\"\")] = tk.next({ id: \"json\" }).val;\n tk.next({ val: \")\" });\n }\n };\n Reader.prototype._readMessage = function(responseSchema) {\n var tk = this._tk;\n var schema = { request: [], response: responseSchema };\n this._readAnnotations(schema);\n var name = tk.next().val;\n if (tk.next().val !== \"(\") {\n return;\n }\n if (!tk.next({ val: \")\", silent: true })) {\n do {\n schema.request.push(this._readField());\n } while (!tk.next({ val: \")\", silent: true }) && tk.next({ val: \",\" }));\n }\n var token = tk.next();\n switch (token.val) {\n case \"throws\":\n schema.errors = [];\n do {\n schema.errors.push(this._readType());\n } while (!tk.next({ val: \";\", silent: true }) && tk.next({ val: \",\" }));\n break;\n case \"oneway\":\n schema[\"one-way\"] = true;\n tk.next({ val: \";\" });\n break;\n case \";\":\n break;\n default:\n throw tk.error(\"invalid message suffix\", token);\n }\n return { name, schema };\n };\n Reader.prototype._readJavadoc = function() {\n var token = this._tk.next({ id: \"javadoc\", emitJavadoc: true, silent: true });\n if (token) {\n return token.val;\n }\n };\n Reader.prototype._readField = function() {\n var tk = this._tk;\n var javadoc = this._readJavadoc();\n var schema = { type: this._readType() };\n if (javadoc !== void 0 && schema.doc === void 0) {\n schema.doc = javadoc;\n }\n this._readAnnotations(schema);\n schema.name = tk.next({ id: \"name\" }).val;\n if (tk.next({ val: \"=\", silent: true })) {\n schema[\"default\"] = tk.next({ id: \"json\" }).val;\n }\n return schema;\n };\n Reader.prototype._readType = function(schema, top) {\n schema = schema || {};\n this._readAnnotations(schema);\n schema.type = this._tk.next({ id: \"name\" }).val;\n switch (schema.type) {\n case \"record\":\n case \"error\":\n return this._readRecord(schema);\n case \"fixed\":\n return this._readFixed(schema);\n case \"enum\":\n return this._readEnum(schema, top);\n case \"map\":\n return this._readMap(schema);\n case \"array\":\n return this._readArray(schema);\n case \"union\":\n if (Object.keys(schema).length > 1) {\n throw new Error(\"union annotations are not supported\");\n }\n return this._readUnion();\n default:\n var ref = this._typeRefs[schema.type];\n if (ref) {\n delete schema.type;\n utils.copyOwnProperties(ref, schema);\n }\n return Object.keys(schema).length > 1 ? schema : schema.type;\n }\n };\n Reader.prototype._readFixed = function(schema) {\n var tk = this._tk;\n if (!tk.next({ val: \"(\", silent: true })) {\n schema.name = tk.next({ id: \"name\" }).val;\n tk.next({ val: \"(\" });\n }\n schema.size = parseInt(tk.next({ id: \"number\" }).val);\n tk.next({ val: \")\" });\n return schema;\n };\n Reader.prototype._readMap = function(schema) {\n var tk = this._tk;\n var silent = this._implicitTags;\n var implicitTags = tk.next({ val: \"<\", silent }) === void 0;\n schema.values = this._readType();\n tk.next({ val: \">\", silent: implicitTags });\n return schema;\n };\n Reader.prototype._readArray = function(schema) {\n var tk = this._tk;\n var silent = this._implicitTags;\n var implicitTags = tk.next({ val: \"<\", silent }) === void 0;\n schema.items = this._readType();\n tk.next({ val: \">\", silent: implicitTags });\n return schema;\n };\n Reader.prototype._readEnum = function(schema, top) {\n var tk = this._tk;\n if (!tk.next({ val: \"{\", silent: true })) {\n schema.name = tk.next({ id: \"name\" }).val;\n tk.next({ val: \"{\" });\n }\n schema.symbols = [];\n do {\n schema.symbols.push(tk.next().val);\n } while (!tk.next({ val: \"}\", silent: true }) && tk.next({ val: \",\" }));\n if (top && tk.next({ val: \"=\", silent: true })) {\n schema.default = tk.next().val;\n tk.next({ val: \";\" });\n }\n return schema;\n };\n Reader.prototype._readUnion = function() {\n var tk = this._tk;\n var arr = [];\n tk.next({ val: \"{\" });\n do {\n arr.push(this._readType());\n } while (!tk.next({ val: \"}\", silent: true }) && tk.next({ val: \",\" }));\n return arr;\n };\n Reader.prototype._readRecord = function(schema) {\n var tk = this._tk;\n if (!tk.next({ val: \"{\", silent: true })) {\n schema.name = tk.next({ id: \"name\" }).val;\n tk.next({ val: \"{\" });\n }\n schema.fields = [];\n while (!tk.next({ val: \"}\", silent: true })) {\n schema.fields.push(this._readField());\n tk.next({ val: \";\" });\n }\n return schema;\n };\n Reader.prototype._readImports = function(imports, maybeMessage) {\n var tk = this._tk;\n var numImports = 0;\n var pos = tk.pos;\n while (tk.next({ val: \"import\", silent: true })) {\n if (!numImports && maybeMessage && tk.next({ val: \"(\", silent: true })) {\n tk.pos = pos;\n return;\n }\n var kind = tk.next({ id: \"name\" }).val;\n var fname = JSON.parse(tk.next({ id: \"string\" }).val);\n tk.next({ val: \";\" });\n imports.push({ kind, name: fname });\n numImports++;\n }\n return numImports;\n };\n function Tokenizer(str) {\n this._str = str;\n this.pos = 0;\n }\n Tokenizer.prototype.next = function(opts) {\n var token = { pos: this.pos, id: void 0, val: void 0 };\n var javadoc = this._skip(opts && opts.emitJavadoc);\n if (typeof javadoc == \"string\") {\n token.id = \"javadoc\";\n token.val = javadoc;\n } else {\n var pos = this.pos;\n var str = this._str;\n var c = str.charAt(pos);\n if (!c) {\n token.id = \"(eof)\";\n } else {\n if (opts && opts.id === \"json\") {\n token.id = \"json\";\n this.pos = this._endOfJson();\n } else if (c === '\"') {\n token.id = \"string\";\n this.pos = this._endOfString();\n } else if (/[0-9]/.test(c)) {\n token.id = \"number\";\n this.pos = this._endOf(/[0-9]/);\n } else if (/[`A-Za-z_.]/.test(c)) {\n token.id = \"name\";\n this.pos = this._endOf(/[`A-Za-z0-9_.]/);\n } else {\n token.id = \"operator\";\n this.pos = pos + 1;\n }\n token.val = str.slice(pos, this.pos);\n if (token.id === \"json\") {\n try {\n token.val = JSON.parse(token.val);\n } catch (err2) {\n throw this.error(\"invalid JSON\", token);\n }\n } else if (token.id === \"name\") {\n token.val = token.val.replace(/`/g, \"\");\n }\n }\n }\n var err;\n if (opts && opts.id && opts.id !== token.id) {\n err = this.error(f2(\"expected ID %s\", opts.id), token);\n } else if (opts && opts.val && opts.val !== token.val) {\n err = this.error(f2(\"expected value %s\", opts.val), token);\n }\n if (!err) {\n return token;\n } else if (opts && opts.silent) {\n this.pos = token.pos;\n return void 0;\n } else {\n throw err;\n }\n };\n Tokenizer.prototype.error = function(reason, context) {\n var isToken = typeof context != \"number\";\n var pos = isToken ? context.pos : context;\n var str = this._str;\n var lineNum = 1;\n var lineStart = 0;\n var i;\n for (i = 0; i < pos; i++) {\n if (str.charAt(i) === \"\\n\") {\n lineNum++;\n lineStart = i;\n }\n }\n var msg = isToken ? f2(\"invalid token %j: %s\", context, reason) : reason;\n var err = new Error(msg);\n err.token = isToken ? context : void 0;\n err.lineNum = lineNum;\n err.colNum = pos - lineStart;\n return err;\n };\n Tokenizer.prototype._skip = function(emitJavadoc) {\n var str = this._str;\n var isJavadoc = false;\n var pos, c;\n while ((c = str.charAt(this.pos)) && /\\s/.test(c)) {\n this.pos++;\n }\n pos = this.pos;\n if (c === \"/\") {\n switch (str.charAt(this.pos + 1)) {\n case \"/\":\n this.pos += 2;\n while ((c = str.charAt(this.pos)) && c !== \"\\n\") {\n this.pos++;\n }\n return this._skip(emitJavadoc);\n case \"*\":\n this.pos += 2;\n if (str.charAt(this.pos) === \"*\") {\n isJavadoc = true;\n }\n while (c = str.charAt(this.pos++)) {\n if (c === \"*\" && str.charAt(this.pos) === \"/\") {\n this.pos++;\n if (isJavadoc && emitJavadoc) {\n return extractJavadoc(str.slice(pos + 3, this.pos - 2));\n }\n return this._skip(emitJavadoc);\n }\n }\n throw this.error(\"unterminated comment\", pos);\n }\n }\n };\n Tokenizer.prototype._endOf = function(pat) {\n var pos = this.pos;\n var str = this._str;\n while (pat.test(str.charAt(pos))) {\n pos++;\n }\n return pos;\n };\n Tokenizer.prototype._endOfString = function() {\n var pos = this.pos + 1;\n var str = this._str;\n var c;\n while (c = str.charAt(pos)) {\n if (c === '\"') {\n return pos + 1;\n }\n if (c === \"\\\\\") {\n pos += 2;\n } else {\n pos++;\n }\n }\n throw this.error(\"unterminated string\", pos - 1);\n };\n Tokenizer.prototype._endOfJson = function() {\n var pos = utils.jsonEnd(this._str, this.pos);\n if (pos < 0) {\n throw this.error(\"invalid JSON\", pos);\n }\n return pos;\n };\n function extractJavadoc(str) {\n var lines = str.replace(/^[ \\t]+|[ \\t]+$/g, \"\").split(\"\\n\").map(function(line, i) {\n return i ? line.replace(/^\\s*\\*\\s?/, \"\") : line;\n });\n while (lines.length && !lines[0]) {\n lines.shift();\n }\n while (lines.length && !lines[lines.length - 1]) {\n lines.pop();\n }\n return lines.join(\"\\n\");\n }\n function protocolNamespace(protocol) {\n if (protocol.namespace) {\n return protocol.namespace;\n }\n var match = /^(.*)\\.[^.]+$/.exec(protocol.protocol);\n return match ? match[1] : void 0;\n }\n module.exports = {\n Tokenizer,\n assembleProtocol,\n read,\n readProtocol: Reader.readProtocol,\n readSchema: Reader.readSchema\n };\n }\n});\n\n// node_modules/avsc/lib/index.js\nvar require_lib = __commonJS({\n \"node_modules/avsc/lib/index.js\"(exports, module) {\n \"use strict\";\n var containers = require_containers();\n var services = require_services();\n var specs = require_specs();\n var types = require_types();\n var utils = require_utils();\n var buffer = __import_BUFFER;\n var fs = __import_FS;\n var util = __import_UTIL;\n var Buffer2 = buffer.Buffer;\n function parse2(any, opts) {\n var schemaOrProtocol = specs.read(any);\n return schemaOrProtocol.protocol ? services.Service.forProtocol(schemaOrProtocol, opts) : types.Type.forSchema(schemaOrProtocol, opts);\n }\n function extractFileHeader(path, opts) {\n opts = opts || {};\n var decode = opts.decode === void 0 ? true : !!opts.decode;\n var size = Math.max(opts.size || 4096, 4);\n var buf = utils.newBuffer(size);\n var fd = fs.openSync(path, \"r\");\n try {\n var pos = fs.readSync(fd, buf, 0, size);\n if (pos < 4 || !containers.MAGIC_BYTES.equals(buf.slice(0, 4))) {\n return null;\n }\n var tap = new utils.Tap(buf);\n var header = null;\n do {\n header = containers.HEADER_TYPE._read(tap);\n } while (!isValid());\n if (decode !== false) {\n var meta = header.meta;\n meta[\"avro.schema\"] = JSON.parse(meta[\"avro.schema\"].toString());\n if (meta[\"avro.codec\"] !== void 0) {\n meta[\"avro.codec\"] = meta[\"avro.codec\"].toString();\n }\n }\n return header;\n } finally {\n fs.closeSync(fd);\n }\n function isValid() {\n if (tap.isValid()) {\n return true;\n }\n var len = 2 * tap.buf.length;\n var buf2 = utils.newBuffer(len);\n len = fs.readSync(fd, buf2, 0, len);\n tap.buf = Buffer2.concat([tap.buf, buf2]);\n tap.pos = 0;\n return false;\n }\n }\n function createFileDecoder(path, opts) {\n return fs.createReadStream(path).pipe(new containers.streams.BlockDecoder(opts));\n }\n function createFileEncoder(path, schema, opts) {\n var encoder = new containers.streams.BlockEncoder(schema, opts);\n encoder.pipe(fs.createWriteStream(path, { defaultEncoding: \"binary\" }));\n return encoder;\n }\n module.exports = {\n Service: services.Service,\n Type: types.Type,\n assembleProtocol: specs.assembleProtocol,\n createFileDecoder,\n createFileEncoder,\n discoverProtocol: services.discoverProtocol,\n extractFileHeader,\n parse: parse2,\n readProtocol: specs.readProtocol,\n readSchema: specs.readSchema,\n streams: containers.streams,\n types: types.builtins,\n // Deprecated exports.\n Protocol: services.Service,\n assemble: util.deprecate(\n specs.assembleProtocol,\n \"use `assembleProtocol` instead\"\n ),\n combine: util.deprecate(\n types.Type.forTypes,\n \"use `Type.forTypes` intead\"\n ),\n infer: util.deprecate(\n types.Type.forValue,\n \"use `Type.forValue` instead\"\n )\n };\n }\n});\n\n// node_modules/ultralight-s3/lib/index.min.js\nvar x = \"AWS4-HMAC-SHA256\";\nvar K = \"aws4_request\";\nvar O = \"s3\";\nvar v = \"2\";\nvar E = \"UNSIGNED-PAYLOAD\";\nvar W = \"application/octet-stream\";\nvar M = \"application/xml\";\nvar w = \"application/json\";\nvar X = [\"accessKeyId\", \"secretAccessKey\", \"sessionToken\", \"password\"];\nvar f = \"x-amz-content-sha256\";\nvar Z = \"x-amz-date\";\nvar V = \"host\";\nvar J = \"Authorization\";\nvar m = \"Content-Type\";\nvar T = \"Content-Length\";\nvar P = \"etag\";\nvar C = \"last-modified\";\nvar u = \"ultralight-s3 Module: \";\nvar ee = `${u}accessKeyId must be a non-empty string`;\nvar te = `${u}secretAccessKey must be a non-empty string`;\nvar se = `${u}endpoint must be a non-empty string`;\nvar re = `${u}bucketName must be a non-empty string`;\nvar j = `${u}key must be a non-empty string`;\nvar $ = `${u}uploadId must be a non-empty string`;\nvar L = `${u}parts must be a non-empty array`;\nvar k = `${u}Each part must have a partNumber (number) and ETag (string)`;\nvar D = `${u}data must be a Buffer or string`;\nvar B = `${u}prefix must be a string`;\nvar F = `${u}maxKeys must be a positive integer`;\nvar G = `${u}delimiter must be a string`;\nvar z = crypto.createHmac || (await import(\"node:crypto\")).createHmac;\nvar Q = crypto.createHash || (await import(\"node:crypto\")).createHash;\ntypeof z > \"u\" && typeof Q > \"u\" && console.error(\"ultralight-S3 Module: Crypto functions are not available, please report the issue with necessary description: https://github.com/sentienhq/ultralight-s3/issues\");\nvar ne = { contents: true };\nvar oe = (p) => `%${p.charCodeAt(0).toString(16).toUpperCase()}`;\nvar q = (p) => encodeURIComponent(p).replace(/[!'()*]/g, oe);\nvar y = (p) => q(p).replace(/%2F/g, \"/\");\nvar N = class {\n constructor({ accessKeyId: e, secretAccessKey: t, endpoint: r, bucketName: n, region: o = \"auto\", maxRequestSizeInBytes: i = 5242880, requestAbortTimeout: a = void 0, logger: c = void 0 }) {\n this.getBucketName = () => this.bucketName, this.setBucketName = (s) => {\n this.bucketName = s;\n }, this.getRegion = () => this.region, this.setRegion = (s) => {\n this.region = s;\n }, this.getEndpoint = () => this.endpoint, this.setEndpoint = (s) => {\n this.endpoint = s;\n }, this.getMaxRequestSizeInBytes = () => this.maxRequestSizeInBytes, this.setMaxRequestSizeInBytes = (s) => {\n this.maxRequestSizeInBytes = s;\n }, this.sanitizeETag = (s) => H(s), this.getProps = () => ({ accessKeyId: this.accessKeyId, secretAccessKey: this.secretAccessKey, region: this.region, bucket: this.bucketName, endpoint: this.endpoint, maxRequestSizeInBytes: this.maxRequestSizeInBytes, requestAbortTimeout: this.requestAbortTimeout, logger: this.logger }), this.setProps = (s) => {\n this._validateConstructorParams(s.accessKeyId, s.secretAccessKey, s.bucketName, s.endpoint), this.accessKeyId = s.accessKeyId, this.secretAccessKey = s.secretAccessKey, this.region = s.region || \"auto\", this.bucketName = s.bucketName, this.endpoint = s.endpoint, this.maxRequestSizeInBytes = s.maxRequestSizeInBytes || 5242880, this.requestAbortTimeout = s.requestAbortTimeout, this.logger = s.logger;\n }, this._validateConstructorParams(e, t, r, n), this.accessKeyId = e, this.secretAccessKey = t, this.endpoint = r, this.bucketName = n, this.region = o, this.maxRequestSizeInBytes = i, this.requestAbortTimeout = a, this.logger = c;\n }\n _validateConstructorParams(e, t, r, n) {\n if (typeof e != \"string\" || e.trim().length === 0) throw new TypeError(ee);\n if (typeof t != \"string\" || t.trim().length === 0) throw new TypeError(te);\n if (typeof r != \"string\" || r.trim().length === 0) throw new TypeError(se);\n if (typeof n != \"string\" || n.trim().length === 0) throw new TypeError(re);\n }\n _checkMethodHeadnGet(e) {\n if (e !== \"GET\" && e !== \"HEAD\") throw this._log(\"error\", `${u}method must be either GET or HEAD`), new Error(\"method must be either GET or HEAD\");\n }\n _checkKey(e) {\n if (typeof e != \"string\" || e.trim().length === 0) throw this._log(\"error\", j), new TypeError(j);\n }\n _checkDelimiter(e) {\n if (typeof e != \"string\" || e.trim().length === 0) throw this._log(\"error\", G), new TypeError(G);\n }\n _checkPrefix(e) {\n if (typeof e != \"string\") throw this._log(\"error\", B), new TypeError(B);\n }\n _checkMaxKeys(e) {\n if (typeof e != \"number\" || e <= 0) throw this._log(\"error\", F), new TypeError(F);\n }\n _checkOpts(e) {\n if (typeof e != \"object\") throw this._log(\"error\", `${u}opts must be an object`), new TypeError(`${u}opts must be an object`);\n }\n _log(e, t, r = {}) {\n if (this.logger && typeof this.logger[e] == \"function\") {\n let n = (a) => typeof a != \"object\" || a === null ? a : Object.keys(a).reduce((c, s) => (X.includes(s.toLowerCase()) ? c[s] = \"[REDACTED]\" : typeof a[s] == \"object\" && a[s] !== null ? c[s] = n(a[s]) : c[s] = a[s], c), Array.isArray(a) ? [] : {}), o = n(r), i = { timestamp: (/* @__PURE__ */ new Date()).toISOString(), level: e, message: t, ...o, context: n({ bucketName: this.bucketName, region: this.region, endpoint: this.endpoint, accessKeyId: this.accessKeyId ? `${this.accessKeyId.substring(0, 4)}...` : void 0 }) };\n this.logger[e](i);\n }\n }\n async getContentLength(e) {\n this._checkKey(e);\n let t = { [f]: E }, r = y(e), { url: n, headers: o } = await this._sign(\"HEAD\", r, {}, t, \"\"), a = (await this._sendRequest(n, \"HEAD\", o)).headers.get(T);\n return a ? parseInt(a, 10) : 0;\n }\n async bucketExists() {\n let e = { [f]: E }, { url: t, headers: r } = await this._sign(\"HEAD\", \"\", {}, e, \"\"), n = await this._sendRequest(t, \"HEAD\", r);\n return !!(n.ok && n.status === 200);\n }\n async fileExists(e, t = {}) {\n this._checkKey(e);\n let { filteredOpts: r, conditionalHeaders: n } = this._filterIfHeaders(t), o = { [f]: E, ...n }, i = y(e), { url: a, headers: c } = await this._sign(\"HEAD\", i, r, o, \"\");\n try {\n let s = await this._sendRequest(a, \"HEAD\", c, \"\", [200, 404, 412, 304]);\n return s.status === 404 ? false : s.status === 412 || s.status === 304 ? null : s.ok && s.status === 200 ? true : (this._handleErrorResponse(s), false);\n } catch (s) {\n let l = s instanceof Error ? s.message : String(s);\n throw this._log(\"error\", `${u}Failed to check if file exists: ${l}`), new Error(`${u}Failed to check if file exists: ${l}`);\n }\n }\n async _sign(e, t, r, n, o) {\n let i = (/* @__PURE__ */ new Date()).toISOString().replace(/[:-]|\\.\\d{3}/g, \"\"), a = typeof t == \"string\" && t.length > 0 ? new URL(t, this.endpoint) : new URL(this.endpoint);\n a.pathname = `/${encodeURI(this.bucketName)}${a.pathname}`, n[f] = o ? await U(o) : E, n[Z] = i, n[V] = a.host;\n let c = this._buildCanonicalHeaders(n), s = Object.keys(n).map((_) => _.toLowerCase()).sort().join(\";\"), l = await this._buildCanonicalRequest(e, a, r, c, s, o), h = await this._buildStringToSign(i, l), d = await this._calculateSignature(i, h), g = this._buildAuthorizationHeader(i, s, d);\n return n[J] = g, { url: a.toString(), headers: n };\n }\n _buildCanonicalHeaders(e) {\n return Object.entries(e).map(([t, r]) => `${t.toLowerCase()}:${String(r).trim()}`).sort().join(`\n`);\n }\n async _buildCanonicalRequest(e, t, r, n, o, i) {\n return [e, t.pathname, this._buildCanonicalQueryString(r), `${n}\n`, o, i ? await U(i) : E].join(`\n`);\n }\n async _buildStringToSign(e, t) {\n let r = [e.slice(0, 8), this.region, O, K].join(\"/\");\n return [x, e, r, await U(t)].join(`\n`);\n }\n async _calculateSignature(e, t) {\n let r = await this._getSignatureKey(e.slice(0, 8));\n return A(r, t, \"hex\");\n }\n _buildAuthorizationHeader(e, t, r) {\n let n = [e.slice(0, 8), this.region, O, K].join(\"/\");\n return [`${x} Credential=${this.accessKeyId}/${n}`, `SignedHeaders=${t}`, `Signature=${r}`].join(\", \");\n }\n _filterIfHeaders(e) {\n let t = {}, r = {}, n = [\"if-match\", \"if-none-match\", \"if-modified-since\", \"if-unmodified-since\"];\n for (let [o, i] of Object.entries(e)) n.includes(o) ? r[o] = i : t[o] = i;\n return { filteredOpts: t, conditionalHeaders: r };\n }\n async list(e = \"/\", t = \"\", r = 1e3, n = \"GET\", o = {}) {\n this._checkDelimiter(e), this._checkPrefix(t), this._checkMaxKeys(r), this._checkMethodHeadnGet(n), this._checkOpts(o), this._log(\"info\", `Listing objects in ${t}`);\n let i = { \"list-type\": v, \"max-keys\": String(r), ...o };\n t.length > 0 && (i.prefix = t);\n let a = { [m]: w, [f]: E }, c = e === \"/\" ? e : q(e), { url: s, headers: l } = await this._sign(\"GET\", c, i, a, \"\"), h = `${s}?${new URLSearchParams(i)}`, d = await this._sendRequest(h, \"GET\", l), g = await d.text();\n if (n === \"HEAD\") {\n let R = d.headers.get(T), S = d.headers.get(C), Y = d.headers.get(P);\n return { size: R ? +R : void 0, mtime: S ? new Date(S) : void 0, ETag: Y || void 0 };\n }\n let _ = b(g), I = _.listBucketResult || _.error || _;\n return I.contents || I;\n }\n async listMultiPartUploads(e = \"/\", t = \"\", r = \"GET\", n = {}) {\n var o, i, a;\n this._checkDelimiter(e), this._checkPrefix(t), this._checkMethodHeadnGet(r), this._checkOpts(n), this._log(\"info\", `Listing multipart uploads in ${t}`);\n let c = { uploads: \"\", ...n }, s = { [m]: w, [f]: E }, l = e === \"/\" ? e : q(e), { url: h, headers: d } = await this._sign(\"GET\", l, c, s, \"\"), g = `${h}?${new URLSearchParams(c)}`, _ = await this._sendRequest(g, \"GET\", d), I = await _.text();\n if (r === \"HEAD\") return { size: +((o = _.headers.get(T)) !== null && o !== void 0 ? o : \"0\"), mtime: new Date((i = _.headers.get(C)) !== null && i !== void 0 ? i : \"\"), ETag: (a = _.headers.get(P)) !== null && a !== void 0 ? a : \"\" };\n let R = b(I), S = R.listMultipartUploadsResult || R.error || R;\n return S.uploads || S;\n }\n async get(e, t = {}) {\n this._checkKey(e), this._log(\"info\", `Getting object ${e}`);\n let { filteredOpts: r, conditionalHeaders: n } = this._filterIfHeaders(t), o = { [m]: w, [f]: E, ...n }, i = y(e), { url: a, headers: c } = await this._sign(\"GET\", i, r, o, \"\"), s = await this._sendRequest(a, \"GET\", c, \"\", [200, 404, 412, 304]);\n if (s.status === 404 || s.status === 412 || s.status === 304) return this._log(\"error\", `Failed to get object. Status: ${s.status}`), null;\n if (!s.ok) throw this._log(\"error\", `Failed to get object. Status: ${s.status}`), new Error(`Failed to get object. Status: ${s.status}`);\n return s.text();\n }\n async getObjectWithETag(e, t = {}) {\n this._checkKey(e), this._log(\"info\", `Getting object ${e}`);\n let { filteredOpts: r, conditionalHeaders: n } = this._filterIfHeaders(t), o = { [m]: w, [f]: E, ...n }, i = y(e), { url: a, headers: c } = await this._sign(\"GET\", i, r, o, \"\");\n try {\n let s = await this._sendRequest(a, \"GET\", c, \"\", [200, 404, 412, 304]);\n if (s.status === 404 || s.status === 412 || s.status === 304) return this._log(\"error\", `Failed to get object. Status: ${s.status}`), { etag: null, data: null };\n if (!s.ok) throw this._log(\"error\", `Failed to get object. Status: ${s.status}`), new Error(`Failed to get object. Status: ${s.status}`);\n let l = s.headers.get(\"etag\");\n if (!l) throw new Error(\"ETag not found in response headers\");\n let h = await s.text();\n return { etag: H(l), data: h };\n } catch (s) {\n throw this._log(\"error\", `Error getting object ${e} with ETag: ${s}`), s;\n }\n }\n async getEtag(e, t = {}) {\n this._checkKey(e), this._log(\"info\", `Getting etag object ${e}`);\n let { filteredOpts: r, conditionalHeaders: n } = this._filterIfHeaders(t), o = { [m]: w, [f]: E, ...n }, i = y(e), { url: a, headers: c } = await this._sign(\"HEAD\", i, r, o, \"\"), s = await this._sendRequest(a, \"HEAD\", c, \"\", [200, 412, 304]);\n if (this._log(\"info\", `Response status: ${s.status, s.statusText}`), s.status === 412 || s.status === 304) return null;\n let l = s.headers.get(\"etag\");\n if (!l) throw this._log(\"error\", \"ETag not found in response headers\"), new Error(\"ETag not found in response headers\");\n return H(l);\n }\n async getResponse(e, t = true, r = 0, n = this.maxRequestSizeInBytes, o = {}) {\n this._checkKey(e);\n let { filteredOpts: i, conditionalHeaders: a } = this._filterIfHeaders({ ...o }), c = { [m]: w, [f]: E, ...t ? {} : { range: `bytes=${r}-${n - 1}` }, ...a }, s = y(e), { url: l, headers: h } = await this._sign(\"GET\", s, i, c, \"\"), d = `${l}?${new URLSearchParams(i)}`;\n return this._sendRequest(d, \"GET\", h);\n }\n async put(e, t) {\n if (this._checkKey(e), !(t instanceof Buffer || typeof t == \"string\")) throw this._log(\"error\", D), new TypeError(D);\n this._log(\"info\", `Uploading object ${e}`);\n let r = typeof t == \"string\" ? Buffer.byteLength(t) : t.length, n = { [T]: r }, o = y(e), { url: i, headers: a } = await this._sign(\"PUT\", o, {}, n, t);\n return await this._sendRequest(i, \"PUT\", a, t);\n }\n async getMultipartUploadId(e, t = W) {\n if (this._checkKey(e), typeof t != \"string\") throw this._log(\"error\", `${u}fileType must be a string`), new TypeError(`${u}fileType must be a string`);\n this._log(\"info\", `Initiating multipart upload for object ${e}`);\n let r = { uploads: \"\" }, n = { [m]: t, [f]: E }, o = y(e), { url: i, headers: a } = await this._sign(\"POST\", o, r, n, \"\"), c = `${i}?${new URLSearchParams(r)}`, l = await (await this._sendRequest(c, \"POST\", a)).text(), h = b(l);\n if (typeof h == \"object\" && h !== null && \"error\" in h && typeof h.error == \"object\" && h.error !== null && \"message\" in h.error) {\n let d = String(h.error.message);\n throw this._log(\"error\", `${u}Failed to abort multipart upload: ${d}`), new Error(`${u}Failed to abort multipart upload: ${d}`);\n }\n if (typeof h == \"object\" && h !== null) {\n if (!h.initiateMultipartUploadResult || !h.initiateMultipartUploadResult.uploadId) throw this._log(\"error\", `${u}Failed to create multipart upload: no uploadId in response`), new Error(`${u}Failed to create multipart upload: Missing upload ID in response`);\n return h.initiateMultipartUploadResult.uploadId;\n } else throw this._log(\"error\", `${u}Failed to create multipart upload: unexpected response format`), new Error(`${u}Failed to create multipart upload: Unexpected response format`);\n }\n async uploadPart(e, t, r, n, o = {}) {\n this._validateUploadPartParams(e, t, r, n, o);\n let i = { uploadId: r, partNumber: n, ...o }, a = { [T]: t.length }, c = y(e), { url: s, headers: l } = await this._sign(\"PUT\", c, i, a, t), h = `${s}?${new URLSearchParams(i)}`, d = await this._sendRequest(h, \"PUT\", l, t), g = H(d.headers.get(\"etag\") || \"\");\n return { partNumber: n, ETag: g };\n }\n _validateUploadPartParams(e, t, r, n, o) {\n if (this._checkKey(e), !(t instanceof Buffer || typeof t == \"string\")) throw this._log(\"error\", D), new TypeError(D);\n if (typeof r != \"string\" || r.trim().length === 0) throw this._log(\"error\", $), new TypeError($);\n if (!Number.isInteger(n) || n <= 0) throw this._log(\"error\", `${u}partNumber must be a positive integer`), new TypeError(`${u}partNumber must be a positive integer`);\n this._checkOpts(o);\n }\n async completeMultipartUpload(e, t, r) {\n if (this._checkKey(e), typeof t != \"string\" || t.trim().length === 0) throw this._log(\"error\", $), new TypeError($);\n if (!Array.isArray(r) || r.length === 0) throw this._log(\"error\", L), new TypeError(L);\n if (!r.every((_) => typeof _.partNumber == \"number\" && typeof _.ETag == \"string\")) throw this._log(\"error\", k), new TypeError(k);\n this._log(\"info\", `Complete multipart upload ${t} for object ${e}`);\n let n = { uploadId: t }, o = this._buildCompleteMultipartUploadXml(r), i = { [m]: M, [T]: Buffer.byteLength(o).toString(), [f]: await U(o) }, a = y(e), { url: c, headers: s } = await this._sign(\"POST\", a, n, i, o), l = `${c}?${new URLSearchParams(n)}`, d = await (await this._sendRequest(l, \"POST\", s, o)).text(), g = b(d);\n if (typeof g == \"object\" && g !== null && \"error\" in g && typeof g.error == \"object\" && g.error !== null && \"message\" in g.error) {\n let _ = String(g.error.message);\n throw this._log(\"error\", `${u}Failed to abort multipart upload: ${_}`), new Error(`${u}Failed to abort multipart upload: ${_}`);\n }\n return g.completeMultipartUploadResult;\n }\n async abortMultipartUpload(e, t) {\n if (this._checkKey(e), typeof t != \"string\" || t.trim().length === 0) throw this._log(\"error\", $), new TypeError($);\n this._log(\"info\", `Aborting multipart upload ${t} for object ${e}`);\n let r = { uploadId: t }, n = { [m]: M, [f]: E };\n try {\n let o = y(e), { url: i, headers: a } = await this._sign(\"DELETE\", o, r, n, \"\"), c = `${i}?${new URLSearchParams(r)}`, s = await this._sendRequest(c, \"DELETE\", a);\n if (s.ok) {\n let l = await s.text(), h = b(l);\n if (typeof h == \"object\" && h !== null && \"error\" in h && typeof h.error == \"object\" && h.error !== null && \"message\" in h.error) {\n let d = String(h.error.message);\n throw this._log(\"error\", `${u}Failed to abort multipart upload: ${d}`), new Error(`${u}Failed to abort multipart upload: ${d}`);\n }\n return { status: \"Aborted\", key: e, uploadId: t, response: h };\n } else throw this._log(\"error\", `${u}Abort request failed with status ${s.status}`), new Error(`${u}Abort request failed with status ${s.status}`);\n } catch (o) {\n let i = o instanceof Error ? o.message : String(o);\n throw this._log(\"error\", `${u}Failed to abort multipart upload for key ${e}: ${i}`), new Error(`${u}Failed to abort multipart upload for key ${e}: ${i}`);\n }\n }\n _buildCompleteMultipartUploadXml(e) {\n return `\n \n ${e.map((t) => `\n \n ${t.partNumber}\n ${t.ETag}\n \n `).join(\"\")}\n \n `;\n }\n async delete(e) {\n this._checkKey(e), this._log(\"info\", `Deleting object ${e}`);\n let t = { [m]: w, [f]: E }, r = y(e), { url: n, headers: o } = await this._sign(\"DELETE\", r, {}, t, \"\"), i = await this._sendRequest(n, \"DELETE\", o);\n return i.status === 204 || i.status === 200;\n }\n async _sendRequest(e, t, r, n, o = []) {\n this._log(\"info\", `Sending ${t} request to ${e}, headers: ${JSON.stringify(r)}`);\n let i = await fetch(e, { method: t, headers: r, body: [\"GET\", \"HEAD\"].includes(t) ? void 0 : n, signal: this.requestAbortTimeout !== void 0 ? AbortSignal.timeout(this.requestAbortTimeout) : void 0 });\n return !i.ok && !o.includes(i.status) && await this._handleErrorResponse(i), i;\n }\n async _handleErrorResponse(e) {\n let t = await e.text(), r = e.headers.get(\"x-amz-error-code\") || \"Unknown\", n = e.headers.get(\"x-amz-error-message\") || e.statusText;\n throw this._log(\"error\", `${u}Request failed with status ${e.status}: ${r} - ${n},err body: ${t}`), new Error(`${u}Request failed with status ${e.status}: ${r} - ${n}, err body: ${t}`);\n }\n _buildCanonicalQueryString(e) {\n return Object.keys(e).length < 1 ? \"\" : Object.keys(e).sort().map((t) => `${encodeURIComponent(t)}=${encodeURIComponent(e[t])}`).join(\"&\");\n }\n async _getSignatureKey(e) {\n let t = await A(`AWS4${this.secretAccessKey}`, e), r = await A(t, this.region), n = await A(r, O);\n return A(n, K);\n }\n};\nvar U = async (p) => {\n let e = Q(\"sha256\");\n return e.update(p), e.digest(\"hex\");\n};\nvar A = async (p, e, t) => {\n let r = z(\"sha256\", p);\n return r.update(e), r.digest(t);\n};\nvar H = (p) => {\n let e = { '\"': \"\", \""\": \"\", \""\": \"\", \""\": \"\", \""\": \"\" };\n return p.replace(/^(\"|"|")|(\"|"|")$/g, (t) => e[t]);\n};\nvar b = (p) => {\n let e = (o) => o.replace(/"/g, '\"').replace(/'/g, \"'\").replace(/</g, \"<\").replace(/>/g, \">\").replace(/&/g, \"&\"), t = {}, r = /<(\\w)([-\\w]+)(?:\\/|[^>]*>((?:(?!<\\1)[\\s\\S])*)<\\/\\1\\2)>/gm, n;\n for (; n = r.exec(p); ) {\n let [, o, i, a] = n, c = o.toLowerCase() + i, s = a != null ? b(a) : true;\n typeof s == \"string\" ? t[c] = H(e(s)) : Array.isArray(t[c]) ? t[c].push(s) : t[c] = t[c] != null ? [t[c], s] : ne[c] ? [s] : s;\n }\n return Object.keys(t).length ? t : e(p);\n};\n\n// src/lowstorage.ts\nvar import_avsc = __toESM(require_lib(), 1);\n\n// src/errors.ts\nvar lowstorage_ERROR_CODES = {\n MISSING_ARGUMENT: \"MISSING_ARGUMENT\",\n COLLECTION_EXISTS: \"COLLECTION_EXISTS\",\n CREATE_COLLECTION_ERROR: \"CREATE_COLLECTION_ERROR\",\n RENAME_COLLECTION_ERROR: \"RENAME_COLLECTION_ERROR\",\n REMOVE_COLLECTION_ERROR: \"REMOVE_COLLECTION_ERROR\",\n UPDATE_COLLECTION_SCHEMA_ERROR: \"UPDATE_COLLECTION_SCHEMA_ERROR\",\n COLLECTION_NOT_FOUND: \"COLLECTION_NOT_FOUND\",\n SCHEMA_VALIDATION_ERROR: \"SCHEMA_VALIDATION_ERROR\",\n DOCUMENT_VALIDATION_ERROR: \"DOCUMENT_VALIDATION_ERROR\",\n S3_OPERATION_ERROR: \"S3_OPERATION_ERROR\",\n FIND_ERROR: \"FIND_ERROR\",\n FIND_ONE_ERROR: \"FIND_ONE_ERROR\",\n SAVE_DATA_ERROR: \"SAVE_DATA_ERROR\",\n INSERT_ERROR: \"INSERT_ERROR\",\n UPDATE_ERROR: \"UPDATE_ERROR\",\n UPDATE_ONE_ERROR: \"UPDATE_ONE_ERROR\",\n DELETE_ERROR: \"DELETE_ERROR\",\n COUNT_ERROR: \"COUNT_ERROR\",\n UNKNOWN_ERROR: \"UNKNOWN_ERROR\"\n};\nvar lowstorageError = class extends Error {\n constructor(message, code = lowstorage_ERROR_CODES.UNKNOWN_ERROR) {\n super(`lowstorageError: ${message} :: code: ${code}`);\n this.name = this.constructor.name;\n this.code = code;\n Error.captureStackTrace(this, this.constructor);\n }\n};\nvar SchemaValidationError = class extends lowstorageError {\n constructor(message, code = lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR) {\n super(message, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR);\n }\n};\nvar DocumentValidationError = class extends lowstorageError {\n constructor(message, code = lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR) {\n super(message, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR);\n }\n};\nvar S3OperationError = class extends lowstorageError {\n constructor(message, operation) {\n super(`S3 ${operation} operation failed: ${message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n};\n\n// src/helpers.ts\nimport { randomUUID } from \"node:crypto\";\nvar matchesQuery = (document, query) => {\n return Object.keys(query).every((key) => document[key] === query[key]);\n};\nvar generateUUID = async () => {\n if (typeof randomUUID !== \"undefined\" && typeof randomUUID === \"function\") {\n return randomUUID();\n }\n if (typeof crypto !== \"undefined\" && typeof crypto === \"object\" && typeof crypto.randomUUID === \"function\") {\n return crypto.randomUUID();\n }\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, function(c) {\n var r = Math.random() * 16 | 0, v2 = c === \"x\" ? r : r & 3 | 8;\n return v2.toString(16);\n });\n};\nvar ensureIdFieldInSchema = (schema) => {\n const idField = {\n name: \"_id\",\n type: \"string\",\n size: 16,\n logicalType: \"UUID\"\n };\n if (typeof schema === \"undefined\" || schema === null) {\n return schema;\n }\n if (\"type\" in schema && schema.type === \"record\" && \"fields\" in schema && Array.isArray(schema.fields)) {\n const hasIdField = schema.fields.some((field) => field.name === \"_id\");\n if (!hasIdField) {\n schema.fields.unshift(idField);\n }\n } else if (\"type\" in schema && schema.type === \"array\" && \"items\" in schema && schema.items !== null && typeof schema.items === \"object\" && \"type\" in schema.items && schema.items.type === \"record\" && \"fields\" in schema.items && Array.isArray(schema.items.fields)) {\n const hasIdField = schema.items.fields.some((field) => field.name === \"_id\");\n if (!hasIdField) {\n schema.items.fields.unshift(idField);\n }\n }\n return schema;\n};\n\n// src/lowstorage.ts\nvar MODULE_NAME = \"lowstorage\";\nvar DEFAULT_DELIMITER = \"/\";\nvar PROJECT_DIR_PREFIX = \"lowstorage\";\nvar COL_SUFFIX = \".avro\";\nvar CHUNG_1MB = 1024 * 1024;\nvar CHUNG_5MB = 5 * CHUNG_1MB;\nvar EMPTY_DATA = Buffer.from(\"\", \"utf8\");\nvar errorValidationFn = (errorCode = lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR) => {\n throw new DocumentValidationError(`${MODULE_NAME}: Invalid document or schema ${errorCode}`);\n};\nvar _hasColName = (colName = \"\") => {\n if (colName.trim() === \"\" || colName === null || typeof colName === \"undefined\" || colName.length > 255 || colName === null) {\n throw new lowstorageError(`${MODULE_NAME}: Collection name is required, null or too long`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n }\n};\nvar lowstorage = class {\n constructor(options) {\n this._checkArgs = (args) => {\n const requiredFields = [\"accessKeyId\", \"secretAccessKey\", \"endpoint\", \"bucketName\"];\n for (const field of requiredFields) {\n if (!args[field]) {\n throw new lowstorageError(`${MODULE_NAME}: ${field} is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n }\n }\n };\n /**\n * Get the S3 instance associated with the lowstorage instance.\n * @returns {S3} The S3 instance. Use this to perform S3 operations. Check for ultralight-s3 for more details.\n */\n this.s3 = () => {\n return this._s3;\n };\n this._checkArgs(options);\n this._schemas = /* @__PURE__ */ new Map();\n this._s3 = new N(options);\n this._dirPrefix = options.dirPrefix || PROJECT_DIR_PREFIX;\n this._avroParse = import_avsc.Type;\n }\n /**\n * List all collections.\n * @returns {Promise} An array of collection names.\n * @throws {S3OperationError} If there's an error during S3 operation.\n */\n async listCollections() {\n try {\n const listed = await this._s3.list(DEFAULT_DELIMITER, this._dirPrefix);\n if (Array.isArray(listed)) {\n return listed.map((entry) => entry.key.slice(this._dirPrefix.length + 1, -COL_SUFFIX.length));\n } else if (typeof listed === \"object\" && listed !== null && \"keyCount\" in listed && listed.keyCount === \"0\") {\n return [];\n }\n return [];\n } catch (error) {\n throw new S3OperationError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n }\n /**\n * Check if a collection exists.\n * @param {string} colName - The name of the collection.\n * @returns {Promise} True if the collection exists, false otherwise.\n * @throws {lowstorageError} If there's an error.\n */\n async collectionExists(colName = \"\") {\n try {\n _hasColName(colName);\n const exists = await this._s3.fileExists(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`);\n return !!exists;\n } catch (error) {\n if (error.message.includes(\"Not Found\")) {\n return false;\n }\n throw new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND);\n }\n }\n /**\n * Create a new collection.\n * @param {string} colName - The name of the collection.\n * @param {Object} [schema] - The schema for the collection.\n * @param {Array} [data=[]] - The initial data for the collection.\n * @returns {Promise} A Promise that resolves to a Collection object.\n * @throws {lowstorageError} If there's an error.\n */\n async createCollection(colName = \"\", schema, data = []) {\n try {\n _hasColName(colName);\n const exists = await this.collectionExists(colName);\n if (!exists) {\n if (typeof schema !== \"undefined\" && schema !== null) {\n try {\n const type = this._avroParse.forSchema(schema);\n if (!type) {\n throw new SchemaValidationError(\n `${MODULE_NAME}: Schema is invalid: ${schema} ${lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR}`\n );\n } else {\n this._schemas.set(colName, schema);\n }\n } catch (error) {\n throw new SchemaValidationError(`${MODULE_NAME}: Schema is invalid: ${schema}`, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR);\n }\n }\n if (data.length > 0 && schema) {\n const wrapperType = this._avroParse.forSchema({ type: \"array\", items: schema });\n await this._s3.put(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`, wrapperType.toBuffer(data));\n } else {\n await this._s3.put(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`, EMPTY_DATA);\n }\n return this.collection(colName, schema, false);\n }\n throw new lowstorageError(`${MODULE_NAME}: Collection ${colName} already exists`, lowstorage_ERROR_CODES.COLLECTION_EXISTS);\n } catch (error) {\n if (error instanceof lowstorageError) {\n throw error;\n }\n throw new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.CREATE_COLLECTION_ERROR);\n }\n }\n /**\n * Remove a collection.\n * @param {string} colName - The name of the collection.\n * @returns {Promise} A Promise that resolves to true if the collection is removed, false otherwise.\n * @throws {lowstorageError} If there's an error.\n */\n async removeCollection(colName = \"\") {\n try {\n _hasColName(colName);\n const exists = await this.collectionExists(colName);\n if (exists) {\n await this._s3.delete(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`);\n const exists2 = await this.collectionExists(colName);\n if (typeof exists2 === \"boolean\") {\n if (!exists2) {\n this._schemas.delete(colName);\n return true;\n }\n throw new lowstorageError(`${MODULE_NAME}: Failed to delete collection ${colName}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n throw new S3OperationError(`${MODULE_NAME}: Failed to delete collection ${colName}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n throw new lowstorageError(`${MODULE_NAME}: Collection ${colName} does not exist`, lowstorage_ERROR_CODES.REMOVE_COLLECTION_ERROR);\n } catch (error) {\n if (error instanceof S3OperationError) {\n throw error;\n }\n throw new lowstorageError(\n `${MODULE_NAME}: Failed to remove collection: ${error.message}`,\n lowstorage_ERROR_CODES.REMOVE_COLLECTION_ERROR\n );\n }\n }\n /**\n * Get or create a collection.\n * @param {string} colName - The name of the collection.\n * @param {Object} [schema] - The schema for the collection.\n * @param {boolean} [autoCreate=true] - Whether to automatically create the collection if it doesn't exist.\n * @returns {Promise} A Promise that resolves to a Collection object.\n * @throws {lowstorageError} If there's an error.\n */\n async collection(colName = \"\", schema, autoCreate = true) {\n try {\n _hasColName(colName);\n const colPath = `${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`;\n const exists = await this._s3.fileExists(colPath);\n if (!exists) {\n if (!autoCreate) {\n throw new lowstorageError(`${MODULE_NAME}: Collection ${colName} does not exist`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND);\n }\n await this._s3.put(colPath, EMPTY_DATA);\n }\n const colSchema = schema || this._schemas.get(colName) || void 0;\n return new Collection(colName, colSchema, this._s3, this._dirPrefix);\n } catch (error) {\n if (error.message.includes(\"unknown type\")) {\n throw new SchemaValidationError(\n `${MODULE_NAME}: Schema input is invalid: ${error.message}`,\n lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR\n );\n }\n throw new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND);\n }\n }\n};\nvar Collection = class _Collection {\n constructor(colName = \"\", schema, s3, dirPrefix = PROJECT_DIR_PREFIX, safeWrite = false, chunkSize = CHUNG_5MB) {\n this.getProps = () => ({\n colName: this._colName,\n s3: this._s3,\n schema: this._schema,\n avroParse: this._avroParse,\n avroType: this._avroType,\n dirPrefix: this._dirPrefix,\n safeWrite: this._safeWrite,\n chunkSize: this._chunkSize\n });\n this.setProps = (props) => {\n this._colName = props.colName;\n this._schema = props.schema;\n this._s3 = props.s3;\n this._avroParse = props.avroParse;\n this._avroType = props.avroType;\n this._dirPrefix = props.dirPrefix;\n this._safeWrite = props.safeWrite;\n this._chunkSize = props.chunkSize;\n };\n this.setSafeWrite = (safeWrite) => {\n this._safeWrite = safeWrite;\n };\n this.getSafeWrite = () => {\n return this._safeWrite;\n };\n this.getAvroSchema = () => {\n return this._schema;\n };\n this.setAvroSchema = (schema) => {\n try {\n this._schema = ensureIdFieldInSchema(schema);\n this._avroType = typeof schema === \"undefined\" ? null : this._avroParse.forSchema(schema);\n } catch (error) {\n throw new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR);\n }\n };\n this.getCollectionETag = () => {\n return this._lastETag;\n };\n this.inferAvroSchema = (data, type = \"record\") => {\n if (Array.isArray(data)) {\n data = data[0];\n }\n const inferedType = this._avroParse.forValue(data);\n const schema = inferedType.schema();\n return ensureIdFieldInSchema(schema);\n };\n this._colName = colName.trim();\n this._s3 = s3;\n this._schema = ensureIdFieldInSchema(schema);\n this._dirPrefix = dirPrefix;\n this._safeWrite = safeWrite;\n this._chunkSize = chunkSize || CHUNG_5MB;\n this._s3.setMaxRequestSizeInBytes(this._chunkSize);\n this._avroParse = import_avsc.Type;\n this._lastETag = \"\";\n this._dataCache = [];\n this._avroType = typeof schema === \"undefined\" ? null : this._avroParse.forSchema(schema);\n this._key = `${this._dirPrefix}${DEFAULT_DELIMITER}${this._colName}${COL_SUFFIX}`;\n }\n async forceLoadData() {\n try {\n this._lastETag = \"\";\n const data = await this._loadData();\n this._dataCache = data;\n return true;\n } catch (error) {\n throw new lowstorageError(`${MODULE_NAME}: Failed to force update data: ${error.message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n }\n async _loadData() {\n try {\n if (this._avroType === null || typeof this._avroType === \"undefined\") {\n throw new lowstorageError(\n `${MODULE_NAME}: Missing type definition. Configure before operations `,\n lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR\n );\n }\n const { etag, data } = await this._s3.getObjectWithETag(this._key, { \"if-none-match\": this._lastETag });\n if (data === null) {\n return this._dataCache;\n }\n this._lastETag = etag === null ? this._lastETag : etag;\n const wrapperType = this._avroParse.forSchema({ type: \"array\", items: this._avroType });\n if (data.length < this._chunkSize) {\n this._dataCache = data.length > 0 ? wrapperType.fromBuffer(Buffer.from(data, \"utf8\")) : [];\n return this._dataCache;\n }\n let offset = this._chunkSize;\n let bufferArr = [Buffer.from(data, \"utf8\")];\n let repeat = true;\n while (repeat) {\n const nextDataResponse = await this._s3.getResponse(this._key, false, offset, offset + this._chunkSize);\n const nextDataBody = await nextDataResponse.text();\n bufferArr.push(Buffer.from(nextDataBody, \"utf8\"));\n offset += this._chunkSize;\n const contentLength = parseInt(nextDataResponse.headers.get(\"content-length\") || nextDataBody.length.toString());\n if (contentLength < this._chunkSize) {\n repeat = false;\n }\n }\n const bufferedData = Buffer.concat(bufferArr);\n this._dataCache = wrapperType.fromBuffer(bufferedData);\n return this._dataCache;\n } catch (error) {\n if (error.toString().indexOf(\"status 404: Unknown - Not Found\") > -1) {\n this._dataCache = [];\n return this._dataCache;\n }\n throw new S3OperationError(`${MODULE_NAME}: Failed to load data: ${error.message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n }\n async _saveData(data) {\n try {\n if (this._avroType === null || typeof this._avroType === \"undefined\") {\n throw new lowstorageError(\n `${MODULE_NAME}: Missing type definition. Configure before operations `,\n lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR\n );\n }\n const wrapperType = this._avroParse.forSchema({ type: \"array\", items: this._avroType });\n const dataBuffer = data.length > 0 ? wrapperType.toBuffer(data) : EMPTY_DATA;\n if (this._safeWrite && this._lastETag !== \"\") {\n const currentETag = await this._s3.getEtag(this._key);\n if (currentETag !== null && currentETag !== this._lastETag) {\n return false;\n }\n }\n const resp = await this._s3.put(this._key, dataBuffer);\n if (typeof resp === \"object\" && \"status\" in resp && resp.status !== 200) {\n throw new S3OperationError(`${MODULE_NAME}: Failed to save data`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n const newETag = resp.headers?.get(\"etag\") || \"\";\n if (newETag && newETag.length > 0) {\n this._lastETag = this._s3.sanitizeETag(newETag);\n this._dataCache = data;\n }\n return true;\n } catch (error) {\n if (error instanceof S3OperationError) {\n throw error;\n }\n throw new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.SAVE_DATA_ERROR);\n }\n }\n /**\n * Insert a document into the collection.\n * @param {Object|Array} doc - The document to insert.\n * @param {Object} [schema=undefined] - The schema for the document.\n * @returns {Promise} A Promise that resolves to the array of inserted document(s).\n * @throws {lowstorageError} If there's an error.\n */\n async insert(doc, schema) {\n try {\n if (doc === void 0 || doc === null) {\n throw new lowstorageError(`${MODULE_NAME}: Document is required for insert`, lowstorage_ERROR_CODES.INSERT_ERROR);\n }\n if (typeof doc !== \"object\" && !Array.isArray(doc)) {\n throw new DocumentValidationError(\n `${MODULE_NAME}: Document must be an object or an array`,\n lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR\n );\n }\n const items = !Array.isArray(doc) ? [doc] : doc;\n const schemaWithId = schema ? ensureIdFieldInSchema(schema) : this._schema || this.inferAvroSchema(items[0]);\n const avroType = this._avroParse.forSchema(schemaWithId);\n if (!avroType) {\n throw new SchemaValidationError(\n `${MODULE_NAME}: Schema is required - Pass a schema to the insert method`,\n lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR\n );\n }\n this._avroType = avroType;\n const data = await this._loadData();\n for (let item of items) {\n if (typeof item !== \"object\" || item === null) {\n throw new DocumentValidationError(\n `${MODULE_NAME}: Invalid input: input must be an object or an array of objects`,\n lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR\n );\n }\n item._id = item._id || await generateUUID();\n const validBuffer = this._avroType.isValid(item, {\n errorHook: errorValidationFn,\n noUndeclaredFields: true\n });\n if (validBuffer === true) {\n data.push(item);\n } else {\n throw new DocumentValidationError(`${MODULE_NAME}: Invalid document or schema`, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR);\n }\n }\n const success = await this._saveData(data);\n if (!success) {\n throw new S3OperationError(`${MODULE_NAME}: Failed to insert document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n this.setAvroSchema(schemaWithId);\n return items;\n } catch (error) {\n if (error.message.includes(\"unknown type\")) {\n throw new SchemaValidationError(\n `${MODULE_NAME}: Schema input is invalid: ${error.message}`,\n lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR\n );\n }\n if (error instanceof lowstorageError) {\n throw error;\n }\n throw new lowstorageError(`${MODULE_NAME} Insert operation failed: ${error.message}`, lowstorage_ERROR_CODES.INSERT_ERROR);\n }\n }\n /**\n * Find documents in the collection.\n * @param {Object} [query={}] - The query to filter documents.\n * @param {Object} [options={}] - The options for pagination.\n * @param {number} [options.skip=0] - The number of documents to skip. Default is 0.\n * @param {number} [options.limit=undefined] - The maximum number of documents to return. Default is undefined, which means no limit.\n * @returns {Promise} A Promise that resolves to an array of matching documents.\n * @throws {lowstorageError} If there's an error.\n */\n async find(query = {}, options = {}) {\n try {\n if (query === void 0 || query === null) {\n throw new lowstorageError(`${MODULE_NAME}: Query is required for update`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n }\n const data = await this._loadData();\n const start = options.skip !== void 0 ? parseInt(String(options.skip), 10) : 0;\n const end = options.limit !== void 0 ? start + parseInt(String(options.limit), 10) : void 0;\n const filteredData = data.filter((doc) => matchesQuery(doc, query)).slice(start, end);\n return filteredData;\n } catch (error) {\n throw new lowstorageError(`${MODULE_NAME}: Find operation failed: ${error.message}`, lowstorage_ERROR_CODES.FIND_ERROR);\n }\n }\n /**\n * Find the first document in the collection that matches the query.\n * @param {Object} [query={}] - The query to filter documents.\n * @returns {Promise} A Promise that resolves to the first matching document or null if no match is found.\n * @throws {lowstorageError} If there's an error.\n */\n async findOne(query = {}) {\n try {\n if (query === null) {\n throw new lowstorageError(`${MODULE_NAME}: Query cannot be null`, lowstorage_ERROR_CODES.INVALID_ARGUMENT);\n }\n const result = await this.find(query, { limit: 1 });\n return result[0] || null;\n } catch (error) {\n if (error instanceof lowstorageError) {\n throw error;\n }\n throw new lowstorageError(`${MODULE_NAME}: FindOne operation failed: ${error.message}`, lowstorage_ERROR_CODES.FIND_ONE_ERROR);\n }\n }\n /**\n * Update a single document in the collection that matches the query.\n * @param {Object} [query={}] - The query to filter the document to update.\n * @param {Object} [update={}] - The update operations to apply to the matching document.\n * @returns {Promise} A Promise that resolves to number of documents updated.\n * @throws {lowstorageError} If the updateOne operation fails.\n * @throws {SchemaValidationError} If the schema is not defined for the collection.\n * @throws {DocumentValidationError} If the updated document is invalid.\n * @throws {S3OperationError} If the S3 operation fails.\n */\n async update(query = {}, update = {}, options = {}) {\n try {\n if (query === void 0 || query === null || update === void 0 || update === null) {\n throw new lowstorageError(\n `${MODULE_NAME}: Query and update values are required for update`,\n lowstorage_ERROR_CODES.MISSING_ARGUMENT\n );\n }\n if (!this._avroType) {\n throw new SchemaValidationError(\n `${MODULE_NAME}: Schema is not defined for this collection`,\n lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR\n );\n }\n const data = await this._loadData();\n if (data.length === 0) return 0;\n let updatedCount = 0;\n for (let i = 0; i < data.length; i++) {\n if (matchesQuery(data[i], query)) {\n const updatedDoc = { ...data[i], ...update };\n const isValid = this._avroType.isValid(updatedDoc, {\n errorHook: errorValidationFn,\n noUndeclaredFields: true\n });\n if (isValid === true) {\n data[i] = updatedDoc;\n updatedCount++;\n } else {\n throw new DocumentValidationError(\n `${MODULE_NAME}: Invalid document or schema`,\n lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR\n );\n }\n }\n }\n if (updatedCount > 0) {\n const success = await this._saveData(data);\n if (!success) {\n throw new S3OperationError(`${MODULE_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n } else if (options && \"upsert\" in options && options.upsert) {\n const success = await this.insert(update);\n if (!success) {\n throw new S3OperationError(`${MODULE_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n updatedCount = 1;\n }\n return updatedCount;\n } catch (error) {\n if (error instanceof S3OperationError) {\n throw error;\n }\n throw new lowstorageError(`${MODULE_NAME}: Update operation failed: ${error.message}`, lowstorage_ERROR_CODES.UPDATE_ERROR);\n }\n }\n /**\n * Update a single document in the collection that matches the query.\n * @param {Object} [query={}] - The query to filter the document to update.\n * @param {Object} [update={}] - The update operations to apply to the matching document.\n * @returns {Promise} A Promise that resolves to 1 if a document was updated, 0 otherwise.\n /**\n * Update a single document in the collection that matches the query.\n * @throws {lowstorageError} If the updateOne operation fails.\n * @throws {SchemaValidationError} If the schema is not defined for the collection.\n * @throws {DocumentValidationError} If the updated document is invalid.\n * @throws {S3OperationError} If the S3 operation fails.\n */\n async updateOne(query = {}, update = {}, options = {}) {\n try {\n if (query === void 0 || query === null || update === void 0 || update === null) {\n throw new lowstorageError(`${MODULE_NAME}: Query is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n }\n if (!this._avroType) {\n throw new SchemaValidationError(\n `${MODULE_NAME}: Schema is not defined for this collection`,\n lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR\n );\n }\n const data = await this._loadData();\n if (data.length === 0) return 0;\n const docIndex = data.findIndex((doc) => matchesQuery(doc, query));\n if (docIndex !== -1) {\n const updatedDoc = { ...data[docIndex], ...update };\n const isValid = this._avroType.isValid(updatedDoc, {\n errorHook: errorValidationFn,\n noUndeclaredFields: true\n });\n if (isValid === true) {\n data[docIndex] = updatedDoc;\n const success = await this._saveData(data);\n if (!success) {\n throw new S3OperationError(`${MODULE_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n return 1;\n } else {\n throw new DocumentValidationError(`${MODULE_NAME}: Invalid document or schema`, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR);\n }\n }\n if (options && \"upsert\" in options && options.upsert) {\n const success = await this.insert(update);\n if (!success) {\n throw new S3OperationError(`${MODULE_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n return 1;\n }\n return 0;\n } catch (error) {\n if (error instanceof lowstorageError) {\n throw error;\n }\n throw new lowstorageError(`${MODULE_NAME}: UpdateOne operation failed: ${error.message}`, lowstorage_ERROR_CODES.UPDATE_ONE_ERROR);\n }\n }\n /**\n * Delete documents from the collection.\n * @param {Object} [query={}] - The query to filter documents to delete.\n * @returns {Promise} A Promise that resolves to the number of documents deleted.\n * @throws {lowstorageError} If the delete operation fails.\n * @throws {S3OperationError} If the S3 operation fails.\n */\n async delete(query = {}) {\n try {\n if (query === void 0 || query === null) {\n throw new lowstorageError(`${MODULE_NAME}: Query is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n }\n const data = await this._loadData();\n if (data.length === 0) return 0;\n const initialLength = data.length;\n const newData = data.filter((doc) => !matchesQuery(doc, query));\n const success = await this._saveData(newData);\n if (!success) {\n throw new S3OperationError(`${MODULE_NAME}: Failed to delete document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n return initialLength - newData.length;\n } catch (error) {\n if (error instanceof S3OperationError) {\n throw error;\n }\n throw new lowstorageError(`${MODULE_NAME}: Delete operation failed: ${error.message}`, lowstorage_ERROR_CODES.DELETE_ERROR);\n }\n }\n /**\n * Delete all documents from the collection.\n * @returns {Promise} A Promise that resolves to the number of documents deleted.\n * @throws {lowstorageError} If the delete operation fails.\n * @throws {S3OperationError} If the S3 operation fails.\n */\n async deleteAll() {\n try {\n const data = await this._loadData();\n const initialLength = data.length;\n const success = await this._saveData([]);\n if (!success) {\n throw new S3OperationError(`${MODULE_NAME}: Failed to delete document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n return initialLength;\n } catch (error) {\n if (error instanceof S3OperationError) {\n throw error;\n }\n throw new lowstorageError(`${MODULE_NAME}: Delete operation failed: ${error.message}`, lowstorage_ERROR_CODES.DELETE_ERROR);\n }\n }\n /**\n * Count the number of documents in the collection.\n * @param {Object} [query={}] - The query to filter documents.\n * @returns {Promise} A Promise that resolves to the number of documents in the collection.\n * @throws {lowstorageError} If the count operation fails.\n */\n async count(query = {}) {\n try {\n const data = await this.find(query);\n return data.length;\n } catch (error) {\n throw new lowstorageError(`${MODULE_NAME}: Count operation failed: ${error.message}`, lowstorage_ERROR_CODES.COUNT_ERROR);\n }\n }\n async renameCollection(newColName, newSchema = this._schema) {\n try {\n _hasColName(newColName);\n const exists = await this._s3.fileExists(`${this._dirPrefix}${DEFAULT_DELIMITER}${newColName}${COL_SUFFIX}`);\n if (!!exists) {\n throw new lowstorageError(`${MODULE_NAME}: Collection ${newColName} already exists`, lowstorage_ERROR_CODES.COLLECTION_EXISTS);\n }\n const schema = newSchema || this.getAvroSchema();\n const data = await this._loadData();\n const createNew = new _Collection(newColName, schema, this._s3, this._dirPrefix, this._safeWrite, this._chunkSize);\n await createNew._saveData(data);\n await this._s3.delete(`${this._dirPrefix}${DEFAULT_DELIMITER}${this._colName}${COL_SUFFIX}`);\n return createNew;\n } catch (error) {\n if (error instanceof lowstorageError) {\n throw error;\n }\n throw new lowstorageError(\n `${MODULE_NAME}: Rename collection failed: ${error.message}`,\n lowstorage_ERROR_CODES.RENAME_COLLECTION_ERROR\n );\n }\n }\n};\nexport {\n lowstorage,\n lowstorageError,\n lowstorage_ERROR_CODES\n};\n\n"], + "mappings": "AAAA,OAAOA,OAAqB,SAC5B,OAAOC,OAAqB,SAC5B,OAAOC,OAAmB,OAC1B,OAAOC,OAAqB,SAC5B,OAAOC,OAAmB,OAC1B,OAAOC,OAAqB,SAC5B,OAAOC,OAAiB,KACxB,OAAOC,OAAmB,OA4xN1B,OAAS,cAAAC,OAAkB,cA1xN3B,IAAIC,GAAW,OAAO,OAClBC,GAAY,OAAO,eACnBC,GAAmB,OAAO,yBAC1BC,GAAoB,OAAO,oBAC3BC,GAAe,OAAO,eACtBC,GAAe,OAAO,UAAU,eAOpC,IAAIC,GAAa,CAACC,EAAIC,IAAQ,UAAsB,CAClD,OAAOA,MAAWD,EAAGE,GAAkBF,CAAE,EAAE,CAAC,CAAC,IAAIC,EAAM,CAAE,QAAS,CAAC,CAAE,GAAG,QAASA,CAAG,EAAGA,EAAI,OAC7F,EACIE,GAAc,CAACC,EAAIC,EAAMC,EAAQC,IAAS,CAC5C,GAAIF,GAAQ,OAAOA,GAAS,UAAY,OAAOA,GAAS,WACtD,QAASG,KAAON,GAAkBG,CAAI,EAChC,CAACI,GAAa,KAAKL,EAAII,CAAG,GAAKA,IAAQF,GACzCI,GAAUN,EAAII,EAAK,CAAE,IAAK,IAAMH,EAAKG,CAAG,EAAG,WAAY,EAAED,EAAOI,GAAiBN,EAAMG,CAAG,IAAMD,EAAK,UAAW,CAAC,EAEvH,OAAOH,CACT,EACIQ,GAAU,CAACX,EAAKY,EAAYC,KAAYA,EAASb,GAAO,KAAOc,GAASC,GAAaf,CAAG,CAAC,EAAI,CAAC,EAAGE,GAKnGU,GAAc,CAACZ,GAAO,CAACA,EAAI,WAAaS,GAAUI,EAAQ,UAAW,CAAE,MAAOb,EAAK,WAAY,EAAK,CAAC,EAAIa,EACzGb,CACF,GAGIgB,GAAgBlB,GAAW,CAC7B,iCAAiCmB,EAASC,EAAQ,CAChD,aACA,IAAIC,EAASC,GACTC,EAAUC,GACVC,EAAOC,GACPC,EAAUN,EAAO,OACjBO,EAAO,IAAIC,EAAW,IAAI,EAC1BC,EAAe,2BACfC,EAAKN,EAAK,OACd,SAASO,EAAUC,EAAM,CACvB,OAAI,OAAON,EAAQ,OAAS,WACnBA,EAAQ,MAAMM,CAAI,EAElB,IAAIN,EAAQM,CAAI,CAE3B,CACA,SAASC,EAAWC,EAAMC,EAAK,CAC7B,OAAI,OAAOT,EAAQ,MAAQ,WAClBA,EAAQ,KAAKQ,EAAMC,CAAG,EAEtB,IAAIT,EAAQQ,EAAMC,CAAG,CAEhC,CACA,SAASC,EAAWC,EAAG,CACrB,OAAOA,EAAE,OAAO,CAAC,EAAE,YAAY,EAAIA,EAAE,MAAM,CAAC,CAC9C,CACA,SAASC,EAAQC,EAAIC,EAAI,CACvB,OAAOD,IAAOC,EAAK,EAAID,EAAKC,EAAK,GAAK,CACxC,CACA,SAASC,GAAUC,EAAMlC,EAAKmC,EAAK,CACjC,IAAIC,EAAQF,EAAKlC,CAAG,EACpB,OAAOoC,IAAU,OAASD,EAAMC,CAClC,CACA,SAASC,EAAQC,EAAKC,EAAW,CAC/BA,EAAYA,GAAa,MACzB,IAAIC,EAAO1B,EAAQ,WAAWyB,CAAS,EACvC,OAAAC,EAAK,IAAIF,CAAG,EACLE,EAAK,KAAK,CACnB,CACA,SAASC,EAAcC,EAAKC,EAAI,CAC9B,IAAIC,EAAM,GACNC,EAAGC,EACP,GAAI,CAACJ,EACH,MAAO,GAET,IAAKG,EAAI,EAAGC,EAAIJ,EAAI,OAAQG,EAAIC,EAAGD,IACjC,GAAIH,EAAIG,CAAC,IAAMF,EAAI,CACjB,GAAIC,GAAO,EACT,MAAO,GAETA,EAAMC,CACR,CAEF,OAAOD,CACT,CACA,SAASG,EAAML,EAAKM,EAAI,CACtB,IAAIC,EAAM,CAAC,EACPJ,EAAGK,EACP,IAAKL,EAAI,EAAGA,EAAIH,EAAI,OAAQG,IAC1BK,EAAOR,EAAIG,CAAC,EACZI,EAAID,EAAGE,CAAI,CAAC,EAAIA,EAElB,OAAOD,CACT,CACA,SAASE,EAAaF,EAAK,CACzB,OAAO,OAAO,KAAKA,CAAG,EAAE,IAAI,SAASjD,EAAK,CACxC,OAAOiD,EAAIjD,CAAG,CAChB,CAAC,CACH,CACA,SAASoD,EAAcV,EAAKM,EAAI,CAC9B,IAAIC,EAAsB,OAAO,OAAO,IAAI,EACxCJ,EAAGC,EAAGI,GACV,IAAKL,EAAI,EAAGC,EAAIJ,EAAI,OAAQG,EAAIC,EAAGD,IAAK,CAKtC,GAJAK,GAAOR,EAAIG,CAAC,EACRG,IACFE,GAAOF,EAAGE,EAAI,GAEZD,EAAIC,EAAI,EACV,MAAO,GAETD,EAAIC,EAAI,EAAI,EACd,CACA,MAAO,EACT,CACA,SAASG,GAAkBC,EAAKC,EAAKC,EAAW,CAC9C,IAAIC,EAAQ,OAAO,oBAAoBH,CAAG,EACtCT,EAAGC,GAAGY,EACV,IAAKb,EAAI,EAAGC,GAAIW,EAAM,OAAQZ,EAAIC,GAAGD,IAEnC,GADAa,EAAOD,EAAMZ,CAAC,EACV,CAACU,EAAI,eAAeG,CAAI,GAAKF,EAAW,CAC1C,IAAIG,GAAa,OAAO,yBAAyBL,EAAKI,CAAI,EAC1D,OAAO,eAAeH,EAAKG,EAAMC,EAAU,CAC7C,CAEF,OAAOJ,CACT,CACA,SAASK,EAAYtB,EAAK,CACxB,OAAOjB,EAAa,KAAKiB,CAAG,CAC9B,CACA,SAASuB,EAAQH,EAAMI,EAAW,CAChC,MAAI,CAACJ,EAAK,QAAQ,GAAG,EACnBA,EAAOA,EAAK,QAAQ,MAAO,EAAE,EACpBI,IACTJ,EAAOI,EAAY,IAAMJ,GAE3BA,EAAK,MAAM,GAAG,EAAE,QAAQ,SAASK,EAAM,CACrC,GAAI,CAACH,EAAYG,CAAI,EACnB,MAAM,IAAI,MAAMzC,EAAG,mBAAoBoC,CAAI,CAAC,CAEhD,CAAC,EACMA,CACT,CACA,SAASM,EAAUN,EAAM,CACvB,IAAIO,EAAQP,EAAK,MAAM,GAAG,EAC1B,OAAOO,EAAMA,EAAM,OAAS,CAAC,CAC/B,CACA,SAASC,EAAiBR,EAAM,CAC9B,IAAIS,EAAQ,gBAAgB,KAAKT,CAAI,EACrC,OAAOS,EAAQA,EAAM,CAAC,EAAI,MAC5B,CACA,SAASC,EAAQ9B,EAAKM,EAAK,CACzBA,EAAMA,EAAM,EACZ,IAAIyB,EAAI/B,EAAI,OAAOM,GAAK,EACxB,GAAI,QAAQ,KAAKyB,CAAC,EAAG,CACnB,KAAO,YAAY,KAAK/B,EAAI,OAAOM,CAAG,CAAC,GACrCA,IAEF,OAAOA,CACT,KAAO,IAAI,YAAY,KAAKN,EAAI,MAAMM,EAAM,EAAGA,EAAM,CAAC,CAAC,EACrD,OAAOA,EAAM,EACR,GAAI,QAAQ,KAAKN,EAAI,MAAMM,EAAM,EAAGA,EAAM,CAAC,CAAC,EACjD,OAAOA,EAAM,EAEf,IAAI0B,EAAQ,EACRC,EAAU,GACd,EACE,QAAQF,EAAG,CACT,IAAK,IACL,IAAK,IACEE,GACHD,IAEF,MACF,IAAK,IACL,IAAK,IACH,GAAI,CAACC,GAAW,CAAC,EAAED,EACjB,OAAO1B,EAET,MACF,IAAK,IAEH,GADA2B,EAAU,CAACA,EACP,CAACD,GAAS,CAACC,EACb,OAAO3B,EAET,MACF,IAAK,KACHA,GACJ,OACOyB,EAAI/B,EAAI,OAAOM,GAAK,GAC7B,MAAO,EACT,CACA,SAAS4B,IAAmB,CAC1B,MAAM,IAAI,MAAM,UAAU,CAC5B,CACA,SAASC,EAAqBxB,EAAKyB,EAAO,CACxC,IAAIC,EAAQ1B,EAAI,UACZJ,EAAGC,EAAG8B,GAAMC,EAChB,IAAKhC,EAAI,EAAGC,EAAI4B,EAAM,OAAQ7B,EAAIC,EAAGD,IACnC+B,GAAOF,EAAM7B,CAAC,EACdgC,EAAS,MAAQjD,EAAWgD,EAAI,EAChCD,EAAME,CAAM,EAAI7D,EAAK,UACnB8D,GAAaF,EAAI,EACjB,SAAWA,GAAO,kBAAoBC,EAAS,KACjD,EAEF,SAASC,GAAaC,GAAO,CAC3B,OAAO,UAAW,CAChB,IAAIC,GAAW,KAAKD,EAAK,EACzB,OAAO,OAAOC,IAAY,WAAaA,GAAS,MAAM,KAAM,SAAS,EAAIA,EAC3E,CACF,CACF,CACA,SAAS5D,EAAW6D,EAAK,CACvB,KAAK,KAAOA,EAAM,EAClB,KAAK,KAAO,EACZ,KAAK,MAAQ1D,EAAU,KAAK,IAAI,CAClC,CACAH,EAAW,UAAU,MAAQ,SAAS6D,EAAK,CACzC,GAAIA,EAAM,EACR,MAAM,IAAI,MAAM,iBAAiB,EAEnC,IAAIC,EAAS,KAAK,KAClB,OAAID,EAAMC,EACD3D,EAAU0D,CAAG,GAElB,KAAK,KAAOA,EAAMC,IACpB,KAAK,MAAQ3D,EAAU2D,CAAM,EAC7B,KAAK,KAAO,GAEP,KAAK,MAAM,MAAM,KAAK,KAAM,KAAK,MAAQD,CAAG,EACrD,EACA,SAASE,EAAIC,EAAM,CACjB,IAAIC,EAAI,WACJhB,EAAI,MACJiB,EAAK,KAAK,IAAI,EAAG,EAAE,EACnBC,EAAQ,KAAK,MAAMH,GAAQ,KAAK,OAAO,GAAKE,EAAK,EAAE,EACvD,KAAK,KAAOA,EACZ,KAAK,SAAW,UAAW,CACzB,OAAOC,GAASF,EAAIE,EAAQlB,GAAKiB,CACnC,CACF,CACAH,EAAI,UAAU,YAAc,UAAW,CACrC,MAAO,CAAC,EAAE,KAAK,SAAS,EAAI,EAC9B,EACAA,EAAI,UAAU,QAAU,SAASK,EAAOC,EAAK,CAC3C,OAAIA,IAAQ,SACVA,EAAMD,EACNA,EAAQ,GAEVC,EAAMA,IAAQ,OAAS,KAAK,KAAOA,EAC5BD,EAAQ,KAAK,MAAM,KAAK,UAAU,GAAKC,EAAMD,EAAM,CAC5D,EACAL,EAAI,UAAU,UAAY,SAASK,EAAOC,EAAK,CAC7C,OAAIA,IAAQ,SACVA,EAAMD,EACNA,EAAQ,GAEVC,EAAMA,IAAQ,OAAS,EAAIA,EACpBD,GAASC,EAAMD,GAAS,KAAK,SAAS,EAAI,KAAK,IACxD,EACAL,EAAI,UAAU,WAAa,SAASF,EAAKS,EAAO,CAC9CT,GAAO,EACPS,EAAQA,GAAS,KACjB,IAAIC,EAAO,GACPD,EAAM,QAAQ,GAAG,EAAI,KACvBC,GAAQ,8BAEND,EAAM,QAAQ,GAAG,EAAI,KACvBC,GAAQ,8BAEND,EAAM,QAAQ,GAAG,EAAI,KACvBC,GAAQ,cAEND,EAAM,QAAQ,GAAG,EAAI,KACvBC,GAAQ,sCAGV,QADIC,EAAS,CAAC,EACL/C,EAAI,EAAGA,EAAIoC,EAAKpC,IACvB+C,EAAO,KAAK,KAAK,OAAOD,CAAI,CAAC,EAE/B,OAAOC,EAAO,KAAK,EAAE,CACvB,EACAT,EAAI,UAAU,WAAa,SAASF,EAAK,CACvC,IAAIvC,EAAM,CAAC,EACPG,EACJ,IAAKA,EAAI,EAAGA,EAAIoC,EAAKpC,IACnBH,EAAI,KAAK,KAAK,QAAQ,GAAG,CAAC,EAE5B,OAAOjB,EAAWiB,CAAG,CACvB,EACAyC,EAAI,UAAU,OAAS,SAASzC,EAAK,CACnC,IAAIuC,EAAMvC,EAAI,OACd,GAAI,CAACuC,EACH,MAAM,IAAI,MAAM,2BAA2B,EAE7C,OAAOvC,EAAI,KAAK,QAAQuC,CAAG,CAAC,CAC9B,EACA,SAASY,GAAe,CACtB,KAAK,OAAS,EACd,KAAK,OAAS,CAAC,CACjB,CACAA,EAAa,UAAU,KAAO,SAASC,EAAM,CAC3C,IAAIC,EAAQ,KAAK,OACblD,EAAIkD,EAAM,OAAS,EACnBC,EAEJ,IADAD,EAAM,KAAKD,CAAI,EACRjD,EAAI,GAAKkD,EAAMlD,CAAC,EAAE,MAAQkD,EAAMC,EAAKnD,EAAI,GAAK,CAAC,EAAE,OACtDiD,EAAOC,EAAMlD,CAAC,EACdkD,EAAMlD,CAAC,EAAIkD,EAAMC,CAAE,EACnBD,EAAMC,CAAE,EAAIF,EACZjD,EAAImD,CAER,EACAH,EAAa,UAAU,IAAM,UAAW,CACtC,IAAIE,EAAQ,KAAK,OACbd,EAAMc,EAAM,OAAS,EAAI,EACzBE,EAAQF,EAAM,CAAC,EACnB,GAAI,CAACE,GAASA,EAAM,MAAQ,KAAK,OAC/B,OAAO,KAGT,GADA,KAAK,SACD,CAAChB,EACH,OAAAc,EAAM,IAAI,EACHE,EAETF,EAAM,CAAC,EAAIA,EAAM,IAAI,EAIrB,QAHIG,EAAMjB,GAAO,EACbpC,EAAI,EACJsD,GAAIC,EAAIJ,GAAIF,GAAMzB,GAAGgC,GAAIC,GACtBzD,EAAIqD,IACTJ,GAAOC,EAAMlD,CAAC,EACdsD,IAAMtD,GAAK,GAAK,EAChBuD,EAAKvD,EAAI,GAAK,EACdwD,GAAKN,EAAMI,EAAE,EACbG,GAAKP,EAAMK,CAAE,EACT,CAACE,IAAMD,GAAG,OAASC,GAAG,OACxBjC,GAAIgC,GACJL,GAAKG,KAEL9B,GAAIiC,GACJN,GAAKI,GAEH,EAAA/B,GAAE,OAASyB,GAAK,SAGpBC,EAAMC,EAAE,EAAIF,GACZC,EAAMlD,CAAC,EAAIwB,GACXxB,EAAImD,GAEN,OAAOC,CACT,EACA,SAASM,EAAIC,EAAK5D,EAAK,CAGrB,GAFA,KAAK,IAAM4D,EACX,KAAK,IAAM5D,EAAM,EACb,KAAK,IAAM,EACb,MAAM,IAAI,MAAM,iBAAiB,CAErC,CACA2D,EAAI,UAAU,QAAU,UAAW,CACjC,OAAO,KAAK,KAAO,KAAK,IAAI,MAC9B,EACAA,EAAI,UAAU,YAAc,UAAW,CACrC,KAAK,IAAM,KAAK,IAAI,OAAS,CAC/B,EACAA,EAAI,UAAU,YAAc,UAAW,CACrC,MAAO,CAAC,CAAC,KAAK,IAAI,KAAK,KAAK,CAC9B,EACAA,EAAI,UAAU,YAAc,UAAW,CACrC,KAAK,KACP,EACAA,EAAI,UAAU,aAAe,SAASE,EAAI,CACxC,KAAK,IAAI,KAAK,KAAK,EAAI,CAAC,CAACA,CAC3B,EACAF,EAAI,UAAU,QAAUA,EAAI,UAAU,SAAW,UAAW,CAC1D,IAAIG,EAAI,EACJC,EAAK,EACLH,EAAM,KAAK,IACXC,EAAIG,EAAGC,GAAIC,EACf,GACEL,EAAKD,EAAI,KAAK,KAAK,EACnBI,EAAIH,EAAK,IACTC,IAAMD,EAAK,MAAQE,EACnBA,GAAM,QACCC,GAAKD,EAAK,IACnB,GAAIC,EAAG,CACLC,GAAKH,EACLI,EAAK,UACL,GACEL,EAAKD,EAAI,KAAK,KAAK,EACnBK,KAAOJ,EAAK,KAAOK,EACnBA,GAAM,UACCL,EAAK,KACd,OAAQI,GAAK,EAAI,EAAEA,GAAK,GAAKA,IAAM,CACrC,CACA,OAAOH,GAAK,EAAI,EAAEA,EAAI,EACxB,EACAH,EAAI,UAAU,QAAUA,EAAI,UAAU,SAAW,UAAW,CAE1D,QADIC,EAAM,KAAK,IACRA,EAAI,KAAK,KAAK,EAAI,KAAK,CAEhC,EACAD,EAAI,UAAU,SAAWA,EAAI,UAAU,UAAY,SAASG,EAAG,CAC7D,IAAIF,EAAM,KAAK,IACXK,EAAIvB,EACR,GAAIoB,GAAK,aAAeA,EAAI,WAAY,CACtCpB,EAAKoB,GAAK,EAAIA,GAAK,EAAI,CAACA,GAAK,EAAI,EACjC,GACEF,EAAI,KAAK,GAAG,EAAIlB,EAAK,IACrBA,IAAO,QACAA,IAAOkB,EAAI,KAAK,KAAK,GAAK,KACrC,KAAO,CACLK,EAAKH,GAAK,EAAIA,EAAI,EAAI,CAACA,EAAI,EAAI,EAC/B,GACEF,EAAI,KAAK,GAAG,EAAIK,EAAK,IACrBA,GAAM,UACCA,GAAM,IAAML,EAAI,KAAK,KAAK,GAAK,KAC1C,CACA,KAAK,KACP,EACAD,EAAI,UAAU,UAAY,UAAW,CACnC,IAAIC,EAAM,KAAK,IACX5D,EAAM,KAAK,IAEf,OADA,KAAK,KAAO,EACR,KAAK,IAAM4D,EAAI,OACV,EAEF,KAAK,IAAI,YAAY5D,CAAG,CACjC,EACA2D,EAAI,UAAU,UAAY,UAAW,CACnC,KAAK,KAAO,CACd,EACAA,EAAI,UAAU,WAAa,SAASM,EAAI,CACtC,IAAIL,EAAM,KAAK,IACX5D,EAAM,KAAK,IAEf,GADA,KAAK,KAAO,EACR,OAAK,IAAM4D,EAAI,QAGnB,OAAO,KAAK,IAAI,aAAaK,EAAIjE,CAAG,CACtC,EACA2D,EAAI,UAAU,WAAa,UAAW,CACpC,IAAIC,EAAM,KAAK,IACX5D,EAAM,KAAK,IAEf,OADA,KAAK,KAAO,EACR,KAAK,IAAM4D,EAAI,OACV,EAEF,KAAK,IAAI,aAAa5D,CAAG,CAClC,EACA2D,EAAI,UAAU,WAAa,UAAW,CACpC,KAAK,KAAO,CACd,EACAA,EAAI,UAAU,YAAc,SAASQ,EAAG,CACtC,IAAIP,EAAM,KAAK,IACX5D,EAAM,KAAK,IAEf,GADA,KAAK,KAAO,EACR,OAAK,IAAM4D,EAAI,QAGnB,OAAO,KAAK,IAAI,cAAcO,EAAGnE,CAAG,CACtC,EACA2D,EAAI,UAAU,UAAY,SAAStB,EAAK,CACtC,IAAIrC,EAAM,KAAK,IAEf,GADA,KAAK,KAAOqC,EACR,OAAK,IAAM,KAAK,IAAI,QAGxB,KAAI+B,EAAQ7F,EAAK,MAAM8D,CAAG,EAC1B,YAAK,IAAI,KAAK+B,EAAO,EAAGpE,EAAKA,EAAMqC,CAAG,EAC/B+B,EACT,EACAT,EAAI,UAAU,UAAY,SAAStB,EAAK,CACtC,KAAK,KAAOA,CACd,EACAsB,EAAI,UAAU,WAAa,SAASC,EAAKvB,EAAK,CAC5CA,EAAMA,GAAOuB,EAAI,OACjB,IAAI5D,EAAM,KAAK,IACf,KAAK,KAAOqC,EACR,OAAK,IAAM,KAAK,IAAI,SAGxBuB,EAAI,KAAK,KAAK,IAAK5D,EAAK,EAAGqC,CAAG,CAChC,EACAsB,EAAI,UAAU,UAAY,UAAW,CACnC,IAAItB,EAAM,KAAK,SAAS,EACxB,GAAIA,EAAM,EAAG,CACX,KAAK,YAAY,EACjB,MACF,CACA,OAAO,KAAK,UAAUA,CAAG,CAC3B,EACAsB,EAAI,UAAU,UAAY,UAAW,CACnC,IAAItB,EAAM,KAAK,SAAS,EACxB,GAAIA,EAAM,EAAG,CACX,KAAK,YAAY,EACjB,MACF,CACA,KAAK,KAAOA,CACd,EACAsB,EAAI,UAAU,WAAa,SAASC,EAAK,CACvC,IAAIvB,EAAMuB,EAAI,OACd,KAAK,UAAUvB,CAAG,EAClB,KAAK,WAAWuB,EAAKvB,CAAG,CAC1B,EACI,OAAO/D,EAAQ,UAAU,WAAa,WACxCqF,EAAI,UAAU,WAAa,UAAW,CACpC,IAAItB,EAAM,KAAK,SAAS,EACxB,GAAIA,EAAM,EACR,YAAK,YAAY,EACV,GAET,IAAIrC,EAAM,KAAK,IACX4D,EAAM,KAAK,IAEf,GADA,KAAK,KAAOvB,EACR,OAAK,IAAMuB,EAAI,QAGnB,OAAO,KAAK,IAAI,UAAU5D,EAAKA,EAAMqC,CAAG,CAC1C,EAEAsB,EAAI,UAAU,WAAa,UAAW,CACpC,IAAItB,EAAM,KAAK,SAAS,EACxB,GAAIA,EAAM,EACR,YAAK,YAAY,EACV,GAET,IAAIrC,EAAM,KAAK,IACX4D,EAAM,KAAK,IAEf,GADA,KAAK,KAAOvB,EACR,OAAK,IAAMuB,EAAI,QAGnB,OAAO,KAAK,IAAI,MAAM5D,EAAKA,EAAMqC,CAAG,EAAE,SAAS,CACjD,EAEFsB,EAAI,UAAU,WAAa,UAAW,CACpC,IAAItB,EAAM,KAAK,SAAS,EACxB,GAAIA,EAAM,EAAG,CACX,KAAK,YAAY,EACjB,MACF,CACA,KAAK,KAAOA,CACd,EACAsB,EAAI,UAAU,YAAc,SAAS1E,EAAG,CACtC,IAAIoD,EAAM/D,EAAQ,WAAWW,CAAC,EAC1B2E,EAAM,KAAK,IACf,KAAK,UAAUvB,CAAG,EAClB,IAAIrC,EAAM,KAAK,IAEf,GADA,KAAK,KAAOqC,EACR,OAAK,IAAMuB,EAAI,QAGnB,GAAIvB,EAAM,IAAM,OAAO/D,EAAQ,UAAU,WAAa,WACpDsF,EAAI,UAAU3E,EAAGe,EAAKqC,CAAG,MACpB,CACL,IAAIpC,EAAGC,GAAGuD,EAAIC,GACd,IAAKzD,EAAI,EAAGC,GAAImC,EAAKpC,EAAIC,GAAGD,IAC1BwD,EAAKxE,EAAE,WAAWgB,CAAC,EACfwD,EAAK,IACPG,EAAI5D,GAAK,EAAIyD,EACJA,EAAK,MACdG,EAAI5D,GAAK,EAAIyD,GAAM,EAAI,IACvBG,EAAI5D,GAAK,EAAIyD,EAAK,GAAK,MACbA,EAAK,SAAW,SAAWC,GAAKzE,EAAE,WAAWgB,EAAI,CAAC,GAAK,SAAW,OAC5EwD,EAAK,QAAUA,EAAK,OAAS,KAAOC,GAAK,MACzCzD,IACA2D,EAAI5D,GAAK,EAAIyD,GAAM,GAAK,IACxBG,EAAI5D,GAAK,EAAIyD,GAAM,GAAK,GAAK,IAC7BG,EAAI5D,GAAK,EAAIyD,GAAM,EAAI,GAAK,IAC5BG,EAAI5D,GAAK,EAAIyD,EAAK,GAAK,MAEvBG,EAAI5D,GAAK,EAAIyD,GAAM,GAAK,IACxBG,EAAI5D,GAAK,EAAIyD,GAAM,EAAI,GAAK,IAC5BG,EAAI5D,GAAK,EAAIyD,EAAK,GAAK,IAG7B,CACF,EACI,OAAOnF,EAAQ,UAAU,aAAe,WAC1CqF,EAAI,UAAU,YAAc,SAASjE,EAAK2C,EAAK,CAC7C,IAAIrC,EAAM,KAAK,IACf,KAAK,KAAOqC,EACR,OAAK,IAAM,KAAK,IAAI,SAGxB,KAAK,IAAI,YAAY3C,EAAKM,EAAKqC,CAAG,CACpC,EACS,OAAO/D,EAAQ,UAAU,aAAe,WACjDqF,EAAI,UAAU,YAAc,SAASjE,EAAK2C,EAAK,CAC7C,IAAIrC,EAAM,KAAK,IACf,KAAK,KAAOqC,EACR,OAAK,IAAM,KAAK,IAAI,SAGxB,KAAK,IAAI,YAAY3C,EAAKM,EAAKqC,CAAG,CACpC,EAEAsB,EAAI,UAAU,YAAc,SAAS1E,EAAGoD,EAAK,CAC3C,IAAIrC,EAAM,KAAK,IACf,KAAK,KAAOqC,EACR,OAAK,IAAM,KAAK,IAAI,SAGxB,KAAK,IAAI,MAAMpD,EAAGe,EAAKqC,EAAK,QAAQ,CACtC,EAEFsB,EAAI,UAAU,aAAe,SAASU,EAAK,CACzC,OAAO,KAAK,IAAI,KAAK,KAAK,EAAIA,EAAI,IAAIA,EAAI,KAAK,CACjD,EACAV,EAAI,UAAU,SAAWA,EAAI,UAAU,UAAY,SAASU,EAAK,CAC/D,IAAIlF,EAAK,KAAK,SAAS,EACnBC,EAAKiF,EAAI,SAAS,EACtB,OAAOlF,IAAOC,EAAK,EAAID,EAAKC,EAAK,GAAK,CACxC,EACAuE,EAAI,UAAU,WAAa,SAASU,EAAK,CACvC,IAAIlF,EAAK,KAAK,UAAU,EACpBC,EAAKiF,EAAI,UAAU,EACvB,OAAOlF,IAAOC,EAAK,EAAID,EAAKC,EAAK,GAAK,CACxC,EACAuE,EAAI,UAAU,YAAc,SAASU,EAAK,CACxC,IAAIlF,EAAK,KAAK,WAAW,EACrBC,EAAKiF,EAAI,WAAW,EACxB,OAAOlF,IAAOC,EAAK,EAAID,EAAKC,EAAK,GAAK,CACxC,EACAuE,EAAI,UAAU,WAAa,SAASU,EAAKhC,EAAK,CAC5C,OAAO,KAAK,UAAUA,CAAG,EAAE,QAAQgC,EAAI,UAAUhC,CAAG,CAAC,CACvD,EACAsB,EAAI,UAAU,WAAaA,EAAI,UAAU,YAAc,SAASU,EAAK,CACnE,IAAIC,EAAK,KAAK,SAAS,EACnBC,EAAK,KAAK,IACd,KAAK,KAAOD,EACZ,IAAIE,EAAKH,EAAI,SAAS,EAClBI,EAAKJ,EAAI,IACbA,EAAI,KAAOG,EACX,IAAIE,GAAK,KAAK,IAAI,MAAMH,EAAI,KAAK,GAAG,EAChCV,EAAKQ,EAAI,IAAI,MAAMI,EAAIJ,EAAI,GAAG,EAClC,OAAOK,GAAG,QAAQb,CAAE,CACtB,EACAF,EAAI,UAAU,gBAAkB,UAAW,CACzC,IAAIgB,EAAMhG,EAAU,CAAC,EACjBmF,EAAI,EACJ7D,EAAI,EACJmD,EAAK,EACLQ,EAAM,KAAK,IACXC,GAAIe,EAKR,IAJAf,GAAKD,EAAI,KAAK,KAAK,EACnBgB,EAAMf,GAAK,EACXc,EAAI,KAAK,CAAC,EACVb,IAAMD,GAAK,MAAQ,EACZA,GAAK,KACVA,GAAKD,EAAI,KAAK,KAAK,EACnBE,IAAMD,GAAK,MAAQT,EACnBA,GAAM,EACFA,GAAM,IACRA,GAAM,EACNuB,EAAI1E,GAAG,EAAI6D,EACXA,IAAM,GAGV,OAAAa,EAAI1E,CAAC,EAAI6D,EACLc,GACFC,EAAOF,EAAK,CAAC,EAERA,CACT,EACAhB,EAAI,UAAU,cAAgB,SAASC,EAAK,CAC1C,IAAIgB,GAAOhB,EAAI,CAAC,EAAI,MAAQ,EACxBe,EAAM,KAAK,IACXvB,EAAK,EACLW,EAAK,EACLrB,GAAK,EACLoB,EACAc,GACFC,EAAOjB,EAAK,CAAC,EACbE,EAAI,GAEJA,EAAI,EAON,QALIzC,GAAQ,CACVuC,EAAI,WAAW,EAAG,CAAC,EACnBA,EAAI,WAAW,EAAG,CAAC,EACnBA,EAAI,WAAW,EAAG,CAAC,CACrB,EACOlB,IAAM,CAACrB,GAAM,EAAEqB,EAAE,GAAG,CAE3B,KAAOqB,EAAKrB,IAGV,IAFAoB,GAAKzC,GAAM0C,GAAI,GAAKX,EACpBA,GAAM,GACCA,EAAK,GACVuB,EAAI,KAAK,KAAK,EAAIb,EAAI,IAAM,IAC5BA,IAAM,EACNV,GAAM,EAGVU,GAAKzC,GAAMqB,EAAE,GAAKU,EAClB,GACEuB,EAAI,KAAK,GAAG,EAAIb,EAAI,IACpBA,IAAM,QACCA,IAAMa,EAAI,KAAK,KAAK,GAAK,MAClC,KAAK,MACDC,GACFC,EAAOjB,EAAK,CAAC,CAEjB,EACA,SAASiB,EAAOjB,EAAKvB,EAAK,CACxB,KAAOA,KACLuB,EAAIvB,CAAG,EAAI,CAACuB,EAAIvB,CAAG,CAEvB,CACAtE,EAAO,QAAU,CACf,iBAAA6D,GACA,qBAAAC,EACA,WAAAhD,EACA,WAAAG,EACA,kBAAAyB,GACA,QAAAhB,EACA,QAAAP,EACA,UAAAG,GACA,iBAAAiC,EACA,YAAAN,EACA,QAAAQ,EACA,UAAA7C,EACA,aAAA4B,EACA,QAAAU,EACA,MAAAd,EACA,cAAAN,EACA,cAAAW,EACA,UAAAY,EACA,WAAA5C,EACA,IAAA+D,EACA,aAAAU,EACA,IAAAU,CACF,CACF,CACF,CAAC,EAGGmB,GAAgBnI,GAAW,CAC7B,iCAAiCmB,EAASC,EAAQ,CAChD,aACA,IAAIgH,EAAQlH,GAAc,EACtBG,EAASC,GACTG,EAAOC,GACPC,EAAUN,EAAO,OACjBgH,EAAahH,EAAO,WACpB2F,EAAMoB,EAAM,IACZE,EAAQ7G,EAAK,SAAS,YAAY,EAClCM,EAAKN,EAAK,OACV8G,EAAQ,CACV,MAASC,EACT,QAAWC,EACX,MAASC,EACT,OAAUC,EACV,KAAQC,EACR,MAASC,EACT,MAASC,EACT,MAASC,EACT,IAAOC,GACP,KAAQC,EACR,IAAOC,EACP,KAAQC,EACR,OAAUN,EACV,OAAUO,CACZ,EACIC,EAAS,IAAIjB,EAAM,IACnBkB,EAAM,IAAItC,EAAI,IAAIqB,EAAW,IAAI,CAAC,EAClCkB,GAAe,KACfC,EAAmB,CAAC,EACxB,SAASC,EAAKC,EAAQ/G,EAAM,CAC1B,IAAIgH,EAYJ,GAXIJ,IACFI,EAAOJ,GACPC,EAAiB,KAAK,CAACD,GAAc,IAAI,CAAC,EAC1CA,GAAe,MAEfI,EAAO,KAET,KAAK,MAAQ,IAAIC,GACjB,KAAK,KAAO,OACZ,KAAK,QAAU,OACf,KAAK,IAAMF,GAAUA,EAAO,IAAM,GAAKA,EAAO,IAAM,OAChDA,EAAQ,CACV,IAAIvF,EAAOuF,EAAO,KACdnF,EAAYmF,EAAO,YAAc,OAAS/G,GAAQA,EAAK,UAAY+G,EAAO,UAC9E,GAAIvF,IAAS,OAAQ,CAEnB,GADAA,EAAO0F,GAAa1F,EAAMI,CAAS,EAC/BuF,GAAY3F,CAAI,EAClB,MAAM,IAAI,MAAMpC,EAAG,mCAAoCoC,CAAI,CAAC,EAE9D,IAAI4F,EAAWpH,GAAQA,EAAK,SAC5B,GAAIoH,EAAU,CACZ,GAAIA,EAAS5F,CAAI,IAAM,OACrB,MAAM,IAAI,MAAMpC,EAAG,0BAA2BoC,CAAI,CAAC,EAErD4F,EAAS5F,CAAI,EAAIwF,CACnB,CACF,SAAWhH,GAAQA,EAAK,iBACtB,MAAM,IAAI,MAAMZ,EAAG,sCAAuC2H,CAAM,CAAC,EAEnE,KAAK,KAAOvF,EACZ,KAAK,QAAUuF,EAAO,QAAUA,EAAO,QAAQ,IAAI,SAAS,EAAG,CAC7D,OAAOG,GAAa,EAAGtF,CAAS,CAClC,CAAC,EAAI,CAAC,CACR,CACF,CACAkF,EAAK,UAAY,SAASC,EAAQ/G,EAAM,CACtCA,EAAOA,GAAQ,CAAC,EAChBA,EAAK,SAAWA,EAAK,UAAY,CAAC,EAClC,IAAIqH,EAAa,SAASC,EAAY,CAUpC,OATIA,IAAe,GACjBA,EAAa,SACJA,IAAe,GACxBA,EAAa,QACJA,IAAe,OACxBA,EAAa,OACJ,OAAOA,GAAc,WAC9BA,EAAaA,EAAW,YAAY,GAE9BA,EAAY,CAClB,IAAK,SACH,OAAOC,EACT,IAAK,QACH,OAAOC,EACT,IAAK,OACH,OACF,QACE,MAAM,IAAI,MAAMpI,EAAG,iCAAkCkI,CAAU,CAAC,CACpE,CACF,EAAEtH,EAAK,UAAU,EACjB,GAAI+G,IAAW,KACb,MAAM,IAAI,MAAM,2CAA2C,EAE7D,GAAID,EAAK,OAAOC,CAAM,EACpB,OAAOA,EAET,IAAIC,EACJ,GAAIhH,EAAK,WAAagH,EAAOhH,EAAK,SAAS+G,EAAQ/G,CAAI,GAAI,CACzD,GAAI,CAAC8G,EAAK,OAAOE,CAAI,EACnB,MAAM,IAAI,MAAM5H,EAAG,oCAAqC4H,CAAI,CAAC,EAE/D,OAAOA,CACT,CACA,GAAI,OAAOD,GAAU,SAAU,CAG7B,GAFAA,EAASG,GAAaH,EAAQ/G,EAAK,SAAS,EAC5CgH,EAAOhH,EAAK,SAAS+G,CAAM,EACvBC,EACF,OAAOA,EAET,GAAIG,GAAYJ,CAAM,EACpB,OAAO/G,EAAK,SAAS+G,CAAM,EAAID,EAAK,UAAU,CAAE,KAAMC,CAAO,EAAG/G,CAAI,EAEtE,MAAM,IAAI,MAAMZ,EAAG,0BAA2B2H,CAAM,CAAC,CACvD,CACA,GAAIA,EAAO,aAAe/G,EAAK,cAAgB,CAAC4G,GAAc,CAC5D,IAAIa,EAAczH,EAAK,aAAa+G,EAAO,WAAW,EACtD,GAAIU,EAAa,CACf,IAAI7F,EAAY5B,EAAK,UACjBoH,EAAW,CAAC,EAChB,OAAO,KAAKpH,EAAK,QAAQ,EAAE,QAAQ,SAASlC,EAAK,CAC/CsJ,EAAStJ,CAAG,EAAIkC,EAAK,SAASlC,CAAG,CACnC,CAAC,EACD,GAAI,CACF,OAAA6H,EAAM,oCAAqCoB,EAAO,WAAW,EACtD,IAAIU,EAAYV,EAAQ/G,CAAI,CACrC,OAAS0H,EAAK,CAEZ,GADA/B,EAAM,4CAA6CoB,EAAO,WAAW,EACjE/G,EAAK,mBACP,MAAM0H,EAERd,GAAe,KACf5G,EAAK,UAAY4B,EACjB5B,EAAK,SAAWoH,CAClB,CACF,CACF,CACA,GAAI,MAAM,QAAQL,CAAM,EAAG,CACzB,IAAIY,EAAcf,GAClBA,GAAe,KACf,IAAIgB,EAAQb,EAAO,IAAI,SAAShG,EAAK,CACnC,OAAO+F,EAAK,UAAU/F,EAAKf,CAAI,CACjC,CAAC,EACIqH,IACHA,EAAaQ,GAAYD,CAAK,EAAIL,EAAmBC,GAEvDZ,GAAee,EACfX,EAAO,IAAIK,EAAWO,EAAO5H,CAAI,CACnC,MACEgH,EAAO,SAASc,EAAU,CACxB,IAAIC,EAAQnC,EAAMkC,CAAQ,EAC1B,GAAIC,IAAU,OACZ,MAAM,IAAI,MAAM3I,EAAG,mBAAoB0I,CAAQ,CAAC,EAElD,OAAO,IAAIC,EAAMhB,EAAQ/G,CAAI,CAC/B,EAAE+G,EAAO,IAAI,EAEf,OAAOC,CACT,EACAF,EAAK,SAAW,SAASkB,EAAKhI,EAAM,CAMlC,GALAA,EAAOA,GAAQ,CAAC,EAChBA,EAAK,eAAiBA,EAAK,gBAAkB8G,EAAK,UAAU,CAC1D,KAAM,QACN,MAAO,MACT,CAAC,EACG9G,EAAK,UAAW,CAClB,IAAIgH,EAAOhH,EAAK,UAAUgI,EAAKhI,CAAI,EACnC,GAAIgH,IAAS,OAAQ,CACnB,GAAI,CAACF,EAAK,OAAOE,CAAI,EACnB,MAAM,IAAI,MAAM5H,EAAG,sCAAuC4H,CAAI,CAAC,EAEjE,OAAOA,CACT,CACF,CACA,OAAQ,OAAOgB,EAAK,CAClB,IAAK,SACH,OAAOlB,EAAK,UAAU,SAAU9G,CAAI,EACtC,IAAK,UACH,OAAO8G,EAAK,UAAU,UAAW9G,CAAI,EACvC,IAAK,SACH,OAAKgI,EAAM,KAAOA,EACTlB,EAAK,UAAU,MAAO9G,CAAI,EACxB,KAAK,IAAIgI,CAAG,EAAI,iBAClBlB,EAAK,UAAU,QAAS9G,CAAI,EAE9B8G,EAAK,UAAU,SAAU9G,CAAI,EACtC,IAAK,SACH,GAAIgI,IAAQ,KACV,OAAOlB,EAAK,UAAU,OAAQ9G,CAAI,EAC7B,GAAI,MAAM,QAAQgI,CAAG,EAC1B,OAAKA,EAAI,OAGFlB,EAAK,UAAU,CACpB,KAAM,QACN,MAAOA,EAAK,SACVkB,EAAI,IAAI,SAASvH,EAAI,CACnB,OAAOqG,EAAK,SAASrG,EAAIT,CAAI,CAC/B,CAAC,EACDA,CACF,CACF,EAAGA,CAAI,EAVEA,EAAK,eAWT,GAAIhB,EAAQ,SAASgJ,CAAG,EAC7B,OAAOlB,EAAK,UAAU,QAAS9G,CAAI,EAErC,IAAIiI,EAAa,OAAO,KAAKD,CAAG,EAChC,OAAIC,EAAW,KAAK,SAAStI,EAAG,CAC9B,MAAO,CAAC8F,EAAM,YAAY9F,CAAC,CAC7B,CAAC,EACQmH,EAAK,UAAU,CACpB,KAAM,MACN,OAAQA,EAAK,SAASmB,EAAW,IAAI,SAAStI,EAAG,CAC/C,OAAOmH,EAAK,SAASkB,EAAIrI,CAAC,EAAGK,CAAI,CACnC,CAAC,EAAGA,CAAI,CACV,EAAGA,CAAI,EAEF8G,EAAK,UAAU,CACpB,KAAM,SACN,OAAQmB,EAAW,IAAI,SAAStI,EAAG,CACjC,MAAO,CAAE,KAAMA,EAAG,KAAMmH,EAAK,SAASkB,EAAIrI,CAAC,EAAGK,CAAI,CAAE,CACtD,CAAC,CACH,EAAGA,CAAI,EACT,QACE,MAAM,IAAI,MAAMZ,EAAG,6BAA8B4I,CAAG,CAAC,CACzD,CACF,EACAlB,EAAK,SAAW,SAASc,EAAO5H,EAAM,CACpC,GAAI,CAAC4H,EAAM,OACT,MAAM,IAAI,MAAM,qBAAqB,EAEvC,GAAIA,EAAM,SAAW,EACnB,OAAOA,EAAM,CAAC,EAEhB5H,EAAOA,GAAQ,CAAC,EAChB,IAAIkI,EAAW,CAAC,EACZC,EAAmB,EACnBC,EAAsB,GAmB1B,GAlBAR,EAAM,QAAQ,SAASZ,EAAM,CAC3B,OAAQA,EAAK,SAAU,CACrB,IAAK,kBACHoB,EAAsB,GACtBF,EAAWA,EAAS,OAAOlB,EAAK,KAAK,EACrC,MACF,IAAK,gBACHmB,IACAD,EAAWA,EAAS,OAAOlB,EAAK,KAAK,EACrC,MACF,IAAK,OACHkB,EAAS,KAAKlB,CAAI,EAClB,MACF,QACEoB,EAAsB,GACtBF,EAAS,KAAKlB,CAAI,CACtB,CACF,CAAC,EACGmB,EAAkB,CACpB,GAAI,CAACC,EACH,MAAM,IAAI,MAAM,8BAA8B,EAEhD,IAAIC,EAAc,CAAC,EACnBH,EAAS,QAAQ,SAASlB,EAAM,CAC9B,IAAIxF,EAAOwF,EAAK,WACZsB,EAAaD,EAAY7G,CAAI,EACjC,GAAI,CAAC8G,EACHD,EAAY7G,CAAI,EAAIwF,UACX,CAACA,EAAK,OAAOsB,CAAU,EAChC,MAAM,IAAI,MAAM,0BAA0B,CAE9C,CAAC,EACD,IAAIhB,EAAatH,EAAK,WAClBuI,EACJvI,EAAK,WAAa,GAClB,GAAI,CACFuI,EAAYzB,EAAK,UAAU,OAAO,KAAKuB,CAAW,EAAE,IAAI,SAAS7G,EAAM,CACrE,OAAO6G,EAAY7G,CAAI,CACzB,CAAC,EAAGxB,CAAI,CACV,OAAS0H,EAAK,CACZ,MAAA1H,EAAK,WAAasH,EACZI,CACR,CACA,OAAA1H,EAAK,WAAasH,EACXiB,CACT,CACA,IAAIC,EAAa,CAAC,EAClBN,EAAS,QAAQ,SAASlB,EAAM,CAC9B,IAAIyB,EAASC,GAAc1B,CAAI,EAC3B2B,EAAcH,EAAWC,CAAM,EAC9BE,IACHH,EAAWC,CAAM,EAAIE,EAAc,CAAC,GAEtCA,EAAY,KAAK3B,CAAI,CACvB,CAAC,EACD,IAAI4B,EAAU,OAAO,KAAKJ,CAAU,EAChCK,EAAYD,EAAQ,IAAI,SAASH,EAAQ,CAC3C,IAAIE,EAAcH,EAAWC,CAAM,EACnC,GAAIE,EAAY,SAAW,EACzB,OAAOA,EAAY,CAAC,EAEpB,OAAQF,EAAQ,CACd,IAAK,OACL,IAAK,UACH,OAAOE,EAAY,CAAC,EACtB,IAAK,SACH,OAAOG,GAAeH,CAAW,EACnC,IAAK,SACH,OAAOI,GAAeJ,EAAa3I,CAAI,EACzC,IAAK,SACH,OAAOgJ,GAAeL,EAAa3I,CAAI,EACzC,IAAK,QAIH,OAHA2I,EAAcA,EAAY,OAAO,SAASM,EAAG,CAC3C,OAAOA,IAAMjJ,EAAK,cACpB,CAAC,EACI2I,EAAY,OAGV7B,EAAK,UAAU,CACpB,KAAM,QACN,MAAOA,EAAK,SAAS6B,EAAY,IAAI,SAASM,EAAG,CAC/C,OAAOA,EAAE,SACX,CAAC,EAAGjJ,CAAI,CACV,EAAGA,CAAI,EAPEA,EAAK,eAQhB,QACE,OAAOkJ,GAAeP,EAAa3I,CAAI,CAC3C,CAEJ,CAAC,EACD,OAAI6I,EAAU,SAAW,EAChBA,EAAU,CAAC,EAEX/B,EAAK,UAAU+B,EAAW7I,CAAI,CAEzC,EACA8G,EAAK,OAAS,UAAW,CACvB,IAAIlG,EAAI,UAAU,OAClB,GAAI,CAACA,EACH,MAAO,GAET,IAAIuI,EAAM,UAAU,CAAC,EACrB,GAAI,CAACA,GAAO,OAAOA,EAAI,SAAW,YAAc,OAAOA,EAAI,aAAe,WACxE,MAAO,GAET,GAAIvI,IAAM,EACR,MAAO,GAET,IAAIkH,EAAWqB,EAAI,SACfxI,EACJ,IAAKA,EAAI,EAAGA,EAAIC,EAAGD,IACjB,GAAImH,EAAS,QAAQ,UAAUnH,CAAC,CAAC,IAAM,EACrC,MAAO,GAGX,MAAO,EACT,EACAmG,EAAK,QAAU,SAASxH,EAAM,CAC5BqG,EAAM,8BAA+BrG,CAAI,EACzCqH,EAAI,IAAM,IAAIjB,EAAWpG,CAAI,CAC/B,EACA,OAAO,eAAewH,EAAK,UAAW,aAAc,CAClD,WAAY,GACZ,IAAK,UAAW,CACd,IAAIE,EAAOF,EAAK,OAAO,KAAM,SAAS,EAAI,KAAK,eAAiB,KAChE,OAAIE,EAAK,KACAA,EAAK,KAEVF,EAAK,OAAOE,EAAM,UAAU,EACvBA,EAAK,kBAEPF,EAAK,OAAOE,EAAM,OAAO,EAAI,OAASA,EAAK,QACpD,CACF,CAAC,EACDF,EAAK,UAAU,MAAQ,SAASkB,EAAKhI,EAAM,CACzC,OAAIA,GACFA,EAAO,CACL,OAAQ,CAAC,CAACA,EAAK,cAAgB,EAE/B,UAAWA,EAAK,UAChB,aAAc,CAAC,CAACA,EAAK,aACrB,KAAM,CAAC,CAACA,EAAK,kBACb,KAAM,CAAC,CAACA,EAAK,WAAa,CAE5B,EACO,KAAK,MAAMgI,EAAKhI,CAAI,GAEpB,KAAK,WAAW,KAAK,SAASgI,CAAG,CAAC,CAE7C,EACAlB,EAAK,UAAU,QAAUrB,EAAM,iBAC/BqB,EAAK,UAAU,eAAiB,SAASsC,EAAMC,EAAM,CACnD,OAAO,KAAK,OAAO,IAAIhF,EAAI+E,CAAI,EAAG,IAAI/E,EAAIgF,CAAI,CAAC,CACjD,EACAvC,EAAK,UAAU,eAAiB,SAASE,EAAMhH,EAAM,CACnD,GAAI,CAAC8G,EAAK,OAAOE,CAAI,EACnB,MAAM,IAAI,MAAM5H,EAAG,iBAAkB4H,CAAI,CAAC,EAE5C,GAAI,CAACF,EAAK,OAAO,KAAM,QAAS,SAAS,GAAKA,EAAK,OAAOE,EAAM,SAAS,EACvE,OAAO,KAAK,eAAeA,EAAK,eAAgBhH,CAAI,EAEtDA,EAAOA,GAAQ,CAAC,EAChBA,EAAK,SAAWA,EAAK,UAAY,CAAC,EAClC,IAAIsJ,EAAUxL,EACd,GAAIgJ,EAAK,OAAO,KAAM,SAAU,OAAO,GAAKA,EAAK,OAAOE,EAAM,SAAU,OAAO,IAC7ElJ,EAAM,KAAK,KAAO,IAAMkJ,EAAK,KAC7BsC,EAAWtJ,EAAK,SAASlC,CAAG,EACxBwL,GACF,OAAOA,EAOX,GAJAA,EAAW,IAAIC,EAAS,IAAI,EACxBzL,IACFkC,EAAK,SAASlC,CAAG,EAAIwL,GAEnBxC,EAAK,OAAOE,EAAM,OAAO,EAAG,CAC9B,IAAIwC,EAAYxC,EAAK,MAAM,IAAI,SAASiC,EAAG,CACzC,OAAO,KAAK,eAAeA,EAAGjJ,CAAI,CACpC,EAAG,IAAI,EACPsJ,EAAS,MAAQ,SAASvE,EAAK,CAC7B,IAAI0E,EAAQ1E,EAAI,SAAS,EACrB2E,EAAYF,EAAUC,CAAK,EAC/B,GAAIC,IAAc,OAChB,MAAM,IAAI,MAAMtK,EAAG,0BAA2BqK,CAAK,CAAC,EAEtD,OAAOD,EAAUC,CAAK,EAAE,MAAM1E,CAAG,CACnC,CACF,MACE,KAAK,QAAQuE,EAAUtC,EAAMhH,CAAI,EAEnC,GAAI,CAACsJ,EAAS,MACZ,MAAM,IAAI,MAAMlK,EAAG,uBAAwB4H,EAAM,IAAI,CAAC,EAExD,OAAO,OAAO,OAAOsC,CAAQ,CAC/B,EACAxC,EAAK,UAAU,OAAS,SAASxC,EAAK5D,EAAK4I,EAAU,CACnD,IAAIvE,EAAM,IAAIV,EAAIC,EAAK5D,CAAG,EACtBsH,EAAM2B,EAAU,KAAM5E,EAAKuE,CAAQ,EACvC,OAAKvE,EAAI,QAAQ,EAGV,CAAE,MAAOiD,EAAK,OAAQjD,EAAI,GAAI,EAF5B,CAAE,MAAO,OAAQ,OAAQ,EAAG,CAGvC,EACA+B,EAAK,UAAU,OAAS,SAASkB,EAAK1D,EAAK5D,EAAK,CAC9C,IAAIqE,EAAM,IAAIV,EAAIC,EAAK5D,CAAG,EAE1B,OADA,KAAK,OAAOqE,EAAKiD,CAAG,EACfjD,EAAI,QAAQ,EAGVA,EAAI,IAFFT,EAAI,OAASS,EAAI,GAG5B,EACA+B,EAAK,UAAU,OAAS,SAASE,EAAMhH,EAAM,CAC3C,IAAI4J,EAEF9C,EAAK,OAAOE,CAAI,GAAK,KAAK,YAAY,EAAE,OAAOA,EAAK,YAAY,CAAC,EAEnE,MAAI,CAAC4C,GAAS,EAAE5J,GAAQA,EAAK,QACpB4J,EAEF,KAAK,UAAU,KAAK,OAAO,CAAE,YAAa,EAAK,CAAC,CAAC,IAAM,KAAK,UAAU5C,EAAK,OAAO,CAAE,YAAa,EAAK,CAAC,CAAC,CACjH,EACAF,EAAK,UAAU,YAAc,SAASzG,EAAW,CAC/C,GAAKA,EAOH,OAAOoF,EAAM,QAAQ,KAAK,UAAU,KAAK,OAAO,CAAC,EAAGpF,CAAS,EAN7D,GAAI,CAAC,KAAK,MAAM,IAAK,CACnB,IAAIwJ,EAAY,KAAK,UAAU,KAAK,OAAO,CAAC,EAC5C,KAAK,MAAM,IAAMpE,EAAM,QAAQoE,CAAS,EAAE,SAAS,QAAQ,CAC7D,CACA,OAAOpE,EAAM,WAAW,KAAK,MAAM,IAAK,QAAQ,CAIpD,EACAqB,EAAK,UAAU,WAAa,SAASxC,EAAKgF,EAAUQ,EAAS,CAC3D,IAAI/E,EAAM,IAAIV,EAAIC,CAAG,EACjB0D,EAAM2B,EAAU,KAAM5E,EAAKuE,EAAUQ,CAAO,EAChD,GAAI,CAAC/E,EAAI,QAAQ,EACf,MAAM,IAAI,MAAM,kBAAkB,EAEpC,GAAI,CAAC+E,GAAW/E,EAAI,IAAMT,EAAI,OAC5B,MAAM,IAAI,MAAM,eAAe,EAEjC,OAAO0D,CACT,EACAlB,EAAK,UAAU,WAAa,SAAS1G,EAAK,CACxC,OAAO,KAAK,MAAM,KAAK,MAAMA,CAAG,EAAG,CAAE,OAAQ,CAAE,CAAC,CAClD,EACA0G,EAAK,UAAU,QAAU,UAAW,CAClC,IAAIgB,EAAW,KAAK,SAChBiC,EAAYC,GAAalC,CAAQ,EACrC,GAAIX,GAAYW,CAAQ,EACtB,OAAO1I,EAAG,OAAQ2K,CAAS,EAE3B,IAAIhJ,EAAM,KAAK,OAAO,CAAE,YAAa,GAAM,QAAS,EAAK,CAAC,EAC1D,OAAI,OAAOA,GAAO,UAAY,CAAC+F,EAAK,OAAO,KAAM,SAAS,IACxD/F,EAAI,KAAO,QAEN3B,EAAG,UAAW2K,EAAWhJ,CAAG,CAEvC,EACA+F,EAAK,UAAU,QAAU,SAASkB,EAAKhI,EAAM,CAC3C,IAAIwD,GAASxD,GAAQA,EAAK,oBAAsB,EAC5CiK,EAAYjK,GAAQA,EAAK,UACzBkK,EAAMC,EACV,OAAIF,IACFE,EAAO,CAAC,EACRD,EAAO,SAASf,EAAKnC,EAAM,CACzBiD,EAAU,KAAK,KAAME,EAAK,MAAM,EAAGhB,EAAKnC,EAAMgB,CAAG,CACnD,GAEK,KAAK,OAAOA,EAAKxE,EAAO0G,EAAMC,CAAI,CAC3C,EACArD,EAAK,UAAU,OAASrB,EAAM,iBAC9BqB,EAAK,UAAU,OAAS,SAAS9G,EAAM,CACrC,OAAO,KAAK,OAAO,CACjB,YAAa,CAAC,EAAEA,GAAQA,EAAK,aAC7B,QAAS,CAAC,EAAEA,GAAQA,EAAK,QAC3B,CAAC,CACH,EACA8G,EAAK,UAAU,SAAW,SAASkB,EAAK,CACtCrB,EAAI,IAAM,EACV,KAAK,OAAOA,EAAKqB,CAAG,EACpB,IAAI1D,EAAMmB,EAAM,UAAUkB,EAAI,GAAG,EACjC,OAAIA,EAAI,QAAQ,EACdA,EAAI,IAAI,KAAKrC,EAAK,EAAG,EAAGqC,EAAI,GAAG,EAE/B,KAAK,OAAO,IAAItC,EAAIC,CAAG,EAAG0D,CAAG,EAExB1D,CACT,EACAwC,EAAK,UAAU,OAAS,UAAW,CACjC,OAAO,KAAK,OAAO,CAAE,YAAa,EAAK,CAAC,CAC1C,EACAA,EAAK,UAAU,SAAW,SAASkB,EAAK,CACtC,OACS,KAAK,UADVA,IAAQ,OACY,KAAK,OAAO,CAAE,QAAS,EAAK,CAAC,EAE/B,KAAK,MAAMA,EAAK,CAAE,OAAQ,CAAE,CAAC,CAFG,CAGxD,EACAlB,EAAK,UAAU,KAAO,SAASkB,EAAK,CAClC,IAAIoC,EAAS,KAAK,mBAClB,OAAOA,IAAW,KAAO,KAAO,IAAIA,EAAOpC,CAAG,CAChD,EACAlB,EAAK,UAAU,OAAS,SAAS9G,EAAM,CACrCA,EAAK,QAAUA,EAAK,SAAW,CAAC,EAChC,IAAIwB,EAAO,KAAK,KAChB,GAAIA,IAAS,OAAQ,CACnB,GAAIxB,EAAK,SAAWA,EAAK,QAAQwB,CAAI,EACnC,OAAOA,EAETxB,EAAK,QAAQwB,CAAI,EAAI,EACvB,CACA,IAAIuF,EAAS,CAAC,EACV,KAAK,OAAS,SAChBA,EAAO,KAAOvF,GAEhBuF,EAAO,KAAO,KAAK,SACnB,IAAIsD,EAAgB,KAAK,OAAOtD,EAAQ/G,CAAI,EAC5C,OAAIqK,IAAkB,SACpBtD,EAASsD,GAEPrK,EAAK,cACH,KAAK,SAAW,KAAK,QAAQ,SAC/B+G,EAAO,QAAU,KAAK,SAEpB,KAAK,MAAQ,SACfA,EAAO,IAAM,KAAK,MAGfA,CACT,EACAD,EAAK,UAAU,yBAA2B,UAAW,CACnD,IAAItF,EAAO,KAAK,WAChB,GAAIA,IAAS,OACX,OAAO,KAET,IAAI8I,EAAO,CAAC9I,EAAK,QAAQ,GAAG,EAAI,SAAWA,EAAO,KAAO,QAAUA,EAC/D+I,EAAO,kCAAoCD,EAAO,aAClDF,EAAS,IAAI,SAASG,CAAI,EAAE,EAChC,OAAAH,EAAO,KAAO,KACdA,EAAO,UAAU,OAAS,IAAI,SAAS,UAAYE,EAAO,GAAG,EAC7DF,EAAO,UAAU,UAAYA,EAAO,UAAU,OACvCA,CACT,EACAtD,EAAK,UAAU,MAAQ,SAAS/B,EAAK,CACnC,IAAIrE,EAAMqE,EAAI,IACViD,EAAM,KAAK,MAAMjD,CAAG,EACxB,OAAAA,EAAI,IAAMrE,EACHsH,CACT,EACAlB,EAAK,UAAU,OAASrB,EAAM,iBAC9BqB,EAAK,UAAU,MAAQrB,EAAM,iBAC7BqB,EAAK,UAAU,OAASrB,EAAM,iBAC9BqB,EAAK,UAAU,OAASrB,EAAM,iBAC9BqB,EAAK,UAAU,MAAQrB,EAAM,iBAC7BqB,EAAK,UAAU,MAAQrB,EAAM,iBAC7BqB,EAAK,UAAU,QAAUrB,EAAM,iBAC/BqB,EAAK,UAAU,OAASrB,EAAM,iBAC9BqB,EAAK,UAAU,WAAa,UAAW,CACrC,OAAO,KAAK,OACd,EACAA,EAAK,UAAU,eAAiBA,EAAK,UAAU,YAC/CA,EAAK,UAAU,QAAU,SAAS0D,EAAU,CAC1C,OAAO,KAAK,MAAQ,CAACA,EAAW,KAAK,KAAO,KAAK,UACnD,EACA1D,EAAK,UAAU,UAAYA,EAAK,UAAU,OAC1CA,EAAK,UAAU,YAAc,UAAW,CACtC,OAAO,KAAK,QACd,EACA,SAAS2D,EAAcC,EAAU,CAC/B5D,EAAK,KAAK,IAAI,EACd,KAAK,mBAAqB,KAAK,yBAAyB,EACnD4D,GACH,OAAO,OAAO,IAAI,CAEtB,CACA5L,EAAK,SAAS2L,EAAe3D,CAAI,EACjC2D,EAAc,UAAU,QAAU,SAASnB,EAAUtC,EAAM,CACrDA,EAAK,WAAa,KAAK,WACzBsC,EAAS,MAAQ,KAAK,MAE1B,EACAmB,EAAc,UAAU,MAAQ,SAASzC,EAAK,CAC5C,YAAK,OAAOA,EAAK,OAAQ2C,EAAiB,EACnC3C,CACT,EACAyC,EAAc,UAAU,OAAS,UAAW,CAC1C,OAAO,KAAK,QACd,EACAA,EAAc,UAAU,QAAUhF,EAAM,QACxC,SAASe,GAAW,CAClBiE,EAAc,KAAK,IAAI,CACzB,CACA3L,EAAK,SAAS0H,EAAUiE,CAAa,EACrCjE,EAAS,UAAU,OAAS,SAASwB,EAAKxE,EAAO0G,EAAM,CACrD,IAAI3F,EAAKyD,IAAQ,KACjB,MAAI,CAACzD,GAAM2F,GACTA,EAAKlC,EAAK,IAAI,EAETzD,CACT,EACAiC,EAAS,UAAU,MAAQ,UAAW,CACpC,OAAO,IACT,EACAA,EAAS,UAAU,MAAQ,UAAW,CACtC,EACAA,EAAS,UAAU,OAAS,SAASzB,EAAKiD,EAAK,CACzCA,IAAQ,MACV2C,GAAkB3C,EAAK,IAAI,CAE/B,EACAxB,EAAS,UAAU,OAAS,UAAW,CACrC,MAAO,EACT,EACAA,EAAS,UAAU,QAAUA,EAAS,UAAU,OAChDA,EAAS,UAAU,SAAW,OAC9BA,EAAS,UAAU,OAASA,EAAS,UAAU,MAC/C,SAASV,GAAc,CACrB2E,EAAc,KAAK,IAAI,CACzB,CACA3L,EAAK,SAASgH,EAAa2E,CAAa,EACxC3E,EAAY,UAAU,OAAS,SAASkC,EAAKxE,EAAO0G,EAAM,CACxD,IAAI3F,EAAK,OAAOyD,GAAO,UACvB,MAAI,CAACzD,GAAM2F,GACTA,EAAKlC,EAAK,IAAI,EAETzD,CACT,EACAuB,EAAY,UAAU,MAAQ,SAASf,EAAK,CAC1C,OAAOA,EAAI,YAAY,CACzB,EACAe,EAAY,UAAU,MAAQ,SAASf,EAAK,CAC1CA,EAAI,YAAY,CAClB,EACAe,EAAY,UAAU,OAAS,SAASf,EAAKiD,EAAK,CAC5C,OAAOA,GAAO,WAChB2C,GAAkB3C,EAAK,IAAI,EAE7BjD,EAAI,aAAaiD,CAAG,CACtB,EACAlC,EAAY,UAAU,OAAS,SAAS8E,EAAMC,EAAM,CAClD,OAAOD,EAAK,aAAaC,CAAI,CAC/B,EACA/E,EAAY,UAAU,SAAW,UACjCA,EAAY,UAAU,OAAS,UAAW,CACxC,OAAOY,EAAO,YAAY,CAC5B,EACA,SAASL,IAAU,CACjBoE,EAAc,KAAK,IAAI,CACzB,CACA3L,EAAK,SAASuH,GAASoE,CAAa,EACpCpE,GAAQ,UAAU,OAAS,SAAS2B,EAAKxE,EAAO0G,EAAM,CACpD,IAAI3F,EAAKyD,KAASA,EAAM,GACxB,MAAI,CAACzD,GAAM2F,GACTA,EAAKlC,EAAK,IAAI,EAETzD,CACT,EACA8B,GAAQ,UAAU,MAAQ,SAAStB,EAAK,CACtC,OAAOA,EAAI,QAAQ,CACrB,EACAsB,GAAQ,UAAU,MAAQ,SAAStB,EAAK,CACtCA,EAAI,QAAQ,CACd,EACAsB,GAAQ,UAAU,OAAS,SAAStB,EAAKiD,EAAK,CACxCA,KAASA,EAAM,IACjB2C,GAAkB3C,EAAK,IAAI,EAE7BjD,EAAI,SAASiD,CAAG,CAClB,EACA3B,GAAQ,UAAU,OAAS,SAASuE,EAAMC,EAAM,CAC9C,OAAOD,EAAK,SAASC,CAAI,CAC3B,EACAxE,GAAQ,UAAU,SAAW,MAC7BA,GAAQ,UAAU,OAAS,UAAW,CACpC,OAAOK,EAAO,QAAQ,GAAG,EAAI,CAC/B,EACA,SAASJ,GAAW,CAClBmE,EAAc,KAAK,IAAI,CACzB,CACA3L,EAAK,SAASwH,EAAUmE,CAAa,EACrCnE,EAAS,UAAU,OAAS,SAAS0B,EAAKxE,EAAO0G,EAAM,CACrD,IAAI3F,EAAK,OAAOyD,GAAO,UAAYA,EAAM,IAAM,GAAK8C,GAAW9C,CAAG,EAClE,MAAI,CAACzD,GAAM2F,GACTA,EAAKlC,EAAK,IAAI,EAETzD,CACT,EACA+B,EAAS,UAAU,MAAQ,SAASvB,EAAK,CACvC,IAAIP,EAAIO,EAAI,SAAS,EACrB,GAAI,CAAC+F,GAAWtG,CAAC,EACf,MAAM,IAAI,MAAM,0BAA0B,EAE5C,OAAOA,CACT,EACA8B,EAAS,UAAU,MAAQ,SAASvB,EAAK,CACvCA,EAAI,SAAS,CACf,EACAuB,EAAS,UAAU,OAAS,SAASvB,EAAKiD,EAAK,EACzC,OAAOA,GAAO,UAAYA,EAAM,GAAK,CAAC8C,GAAW9C,CAAG,IACtD2C,GAAkB3C,EAAK,IAAI,EAE7BjD,EAAI,UAAUiD,CAAG,CACnB,EACA1B,EAAS,UAAU,OAAS,SAASsE,EAAMC,EAAM,CAC/C,OAAOD,EAAK,UAAUC,CAAI,CAC5B,EACAvE,EAAS,UAAU,QAAU,SAASgD,EAAUtC,EAAM,CACpD,OAAQA,EAAK,SAAU,CACrB,IAAK,MACHsC,EAAS,MAAQtC,EAAK,MACtB,MACF,IAAK,gBACL,IAAK,OACHsC,EAAS,MAAQ,KAAK,KAC1B,CACF,EACAhD,EAAS,UAAU,SAAW,OAC9BA,EAAS,UAAU,OAAS,UAAW,CACrC,OAAOI,EAAO,QAAQ,CACxB,EACAJ,EAAS,OAAS,SAASyE,EAASC,EAAU,CAC5CD,EAAUA,GAAW,CAAC,EACtB,IAAIE,EAAU,CACZ,SAAU,YACV,WAAY,cACZ,SAAU,YACV,OAAQ,UACR,QAAS,WACT,QAAS,SACX,EACIjE,EAAO,IAAIkE,EAAiBF,CAAQ,EACxC,cAAO,KAAKC,CAAO,EAAE,QAAQ,SAASzJ,EAAM,CAC1C,GAAIuJ,EAAQvJ,CAAI,IAAM,OACpB,MAAM,IAAI,MAAMpC,EAAG,oCAAqCoC,CAAI,CAAC,EAE/DwF,EAAKiE,EAAQzJ,CAAI,CAAC,EAAIuJ,EAAQvJ,CAAI,CACpC,CAAC,EACM,OAAO,OAAOwF,CAAI,CAC3B,EACA,SAASZ,GAAY,CACnBqE,EAAc,KAAK,IAAI,CACzB,CACA3L,EAAK,SAASsH,EAAWqE,CAAa,EACtCrE,EAAU,UAAU,OAAS,SAAS4B,EAAKxE,EAAO0G,EAAM,CACtD,IAAI3F,EAAK,OAAOyD,GAAO,SACvB,MAAI,CAACzD,GAAM2F,GACTA,EAAKlC,EAAK,IAAI,EAETzD,CACT,EACA6B,EAAU,UAAU,MAAQ,SAASrB,EAAK,CACxC,OAAOA,EAAI,UAAU,CACvB,EACAqB,EAAU,UAAU,MAAQ,SAASrB,EAAK,CACxCA,EAAI,UAAU,CAChB,EACAqB,EAAU,UAAU,OAAS,SAASrB,EAAKiD,EAAK,CAC1C,OAAOA,GAAO,UAChB2C,GAAkB3C,EAAK,IAAI,EAE7BjD,EAAI,WAAWiD,CAAG,CACpB,EACA5B,EAAU,UAAU,OAAS,SAASwE,EAAMC,EAAM,CAChD,OAAOD,EAAK,WAAWC,CAAI,CAC7B,EACAzE,EAAU,UAAU,QAAU,SAASkD,EAAUtC,EAAM,CACrD,OAAQA,EAAK,SAAU,CACrB,IAAK,QACL,IAAK,MACHsC,EAAS,MAAQtC,EAAK,MACtB,MACF,IAAK,gBACL,IAAK,OACHsC,EAAS,MAAQ,SAASvE,EAAK,CAC7B,OAAOA,EAAI,SAAS,CACtB,CACJ,CACF,EACAqB,EAAU,UAAU,SAAW,QAC/BA,EAAU,UAAU,OAAS,UAAW,CACtC,OAAOM,EAAO,UAAU,GAAG,CAC7B,EACA,SAASV,GAAa,CACpByE,EAAc,KAAK,IAAI,CACzB,CACA3L,EAAK,SAASkH,EAAYyE,CAAa,EACvCzE,EAAW,UAAU,OAAS,SAASgC,EAAKxE,EAAO0G,EAAM,CACvD,IAAI3F,EAAK,OAAOyD,GAAO,SACvB,MAAI,CAACzD,GAAM2F,GACTA,EAAKlC,EAAK,IAAI,EAETzD,CACT,EACAyB,EAAW,UAAU,MAAQ,SAASjB,EAAK,CACzC,OAAOA,EAAI,WAAW,CACxB,EACAiB,EAAW,UAAU,MAAQ,SAASjB,EAAK,CACzCA,EAAI,WAAW,CACjB,EACAiB,EAAW,UAAU,OAAS,SAASjB,EAAKiD,EAAK,CAC3C,OAAOA,GAAO,UAChB2C,GAAkB3C,EAAK,IAAI,EAE7BjD,EAAI,YAAYiD,CAAG,CACrB,EACAhC,EAAW,UAAU,OAAS,SAAS4E,EAAMC,EAAM,CACjD,OAAOD,EAAK,YAAYC,CAAI,CAC9B,EACA7E,EAAW,UAAU,QAAU,SAASsD,EAAUtC,EAAM,CACtD,OAAQA,EAAK,SAAU,CACrB,IAAK,SACL,IAAK,QACL,IAAK,MACHsC,EAAS,MAAQtC,EAAK,MACtB,MACF,IAAK,gBACL,IAAK,OACHsC,EAAS,MAAQ,SAASvE,EAAK,CAC7B,OAAOA,EAAI,SAAS,CACtB,CACJ,CACF,EACAiB,EAAW,UAAU,SAAW,SAChCA,EAAW,UAAU,OAAS,UAAW,CACvC,OAAOU,EAAO,UAAU,CAC1B,EACA,SAASD,GAAa,CACpBgE,EAAc,KAAK,IAAI,CACzB,CACA3L,EAAK,SAAS2H,EAAYgE,CAAa,EACvChE,EAAW,UAAU,OAAS,SAASuB,EAAKxE,EAAO0G,EAAM,CACvD,IAAI3F,EAAK,OAAOyD,GAAO,SACvB,MAAI,CAACzD,GAAM2F,GACTA,EAAKlC,EAAK,IAAI,EAETzD,CACT,EACAkC,EAAW,UAAU,MAAQ,SAAS1B,EAAK,CACzC,OAAOA,EAAI,WAAW,CACxB,EACA0B,EAAW,UAAU,MAAQ,SAAS1B,EAAK,CACzCA,EAAI,WAAW,CACjB,EACA0B,EAAW,UAAU,OAAS,SAAS1B,EAAKiD,EAAK,CAC3C,OAAOA,GAAO,UAChB2C,GAAkB3C,EAAK,IAAI,EAE7BjD,EAAI,YAAYiD,CAAG,CACrB,EACAvB,EAAW,UAAU,OAAS,SAASmE,EAAMC,EAAM,CACjD,OAAOD,EAAK,YAAYC,CAAI,CAC9B,EACApE,EAAW,UAAU,QAAU,SAAS6C,EAAUtC,EAAM,CACtD,OAAQA,EAAK,SAAU,CACrB,IAAK,QACL,IAAK,SACHsC,EAAS,MAAQ,KAAK,KAC1B,CACF,EACA7C,EAAW,UAAU,SAAW,SAChCA,EAAW,UAAU,OAAS,UAAW,CACvC,OAAOC,EAAO,WAAWA,EAAO,QAAQ,EAAE,CAAC,CAC7C,EACA,SAASX,GAAY,CACnB0E,EAAc,KAAK,IAAI,CACzB,CACA3L,EAAK,SAASiH,EAAW0E,CAAa,EACtC1E,EAAU,UAAU,OAAS,SAASiC,EAAKxE,EAAO0G,EAAM,CACtD,IAAI3F,EAAKvF,EAAQ,SAASgJ,CAAG,EAC7B,MAAI,CAACzD,GAAM2F,GACTA,EAAKlC,EAAK,IAAI,EAETzD,CACT,EACAwB,EAAU,UAAU,MAAQ,SAAShB,EAAK,CACxC,OAAOA,EAAI,UAAU,CACvB,EACAgB,EAAU,UAAU,MAAQ,SAAShB,EAAK,CACxCA,EAAI,UAAU,CAChB,EACAgB,EAAU,UAAU,OAAS,SAAShB,EAAKiD,EAAK,CACzChJ,EAAQ,SAASgJ,CAAG,GACvB2C,GAAkB3C,EAAK,IAAI,EAE7BjD,EAAI,WAAWiD,CAAG,CACpB,EACAjC,EAAU,UAAU,OAAS,SAAS6E,EAAMC,EAAM,CAChD,OAAOD,EAAK,WAAWC,CAAI,CAC7B,EACA9E,EAAU,UAAU,QAAUU,EAAW,UAAU,QACnDV,EAAU,UAAU,MAAQ,SAAShF,EAAKf,EAAM,CAC9C,IAAIsE,EACJ,QAAStE,GAAQA,EAAK,QAAU,EAAG,CACjC,IAAK,GACH,YAAK,OAAOe,EAAK,OAAQ4J,EAAiB,EACnC5J,EAAI,SAAS,QAAQ,EAC9B,IAAK,GACH,GAAI,OAAOA,GAAO,SAChB,MAAM,IAAI,MAAM3B,EAAG,8BAA+B2B,CAAG,CAAC,EAExD,OAAAuD,EAAMmB,EAAM,WAAW1E,EAAK,QAAQ,EACpC,KAAK,OAAOuD,EAAK,OAAQqG,EAAiB,EACnCrG,EACT,IAAK,GACH,GAAI,CAAC6G,GAAapK,CAAG,EACnB,MAAM,IAAI,MAAM3B,EAAG,8BAA+B2B,CAAG,CAAC,EAExD,OAAAuD,EAAMmB,EAAM,WAAW1E,EAAI,IAAI,EAC/B,KAAK,OAAOuD,EAAK,OAAQqG,EAAiB,EACnCrG,EACT,QACE,YAAK,OAAOvD,EAAK,OAAQ4J,EAAiB,EACnClF,EAAM,WAAW1E,CAAG,CAC/B,CACF,EACAgF,EAAU,UAAU,QAAU/G,EAAQ,QACtC+G,EAAU,UAAU,SAAW,QAC/BA,EAAU,UAAU,OAAS,UAAW,CACtC,OAAOW,EAAO,WAAWA,EAAO,QAAQ,EAAE,CAAC,CAC7C,EACA,SAAS0E,GAAUrE,EAAQ/G,EAAM,CAE/B,GADA8G,EAAK,KAAK,IAAI,EACV,CAAC,MAAM,QAAQC,CAAM,EACvB,MAAM,IAAI,MAAM3H,EAAG,6BAA8B2H,CAAM,CAAC,EAE1D,GAAI,CAACA,EAAO,OACV,MAAM,IAAI,MAAM,aAAa,EAE/B,KAAK,MAAQ,OAAO,OAAOA,EAAO,IAAI,SAAShG,EAAK,CAClD,OAAO+F,EAAK,UAAU/F,EAAKf,CAAI,CACjC,CAAC,CAAC,EACF,KAAK,eAAiB,CAAC,EACvB,KAAK,MAAM,QAAQ,SAASgH,EAAMrG,EAAG,CACnC,GAAImG,EAAK,OAAOE,EAAM,OAAO,EAC3B,MAAM,IAAI,MAAM,kCAAkC,EAEpD,IAAIqE,EAASrE,EAAK,WAClB,GAAI,KAAK,eAAeqE,CAAM,IAAM,OAClC,MAAM,IAAI,MAAMjM,EAAG,kCAAmCiM,CAAM,CAAC,EAE/D,KAAK,eAAeA,CAAM,EAAI1K,CAChC,EAAG,IAAI,CACT,CACA7B,EAAK,SAASsM,GAAWtE,CAAI,EAC7BsE,GAAU,UAAU,mBAAqB,UAAW,CAClD,MAAM,IAAI,MAAM,mCAAmC,CACrD,EACAA,GAAU,UAAU,MAAQ,SAASrG,EAAK,CACxC,KAAK,MAAMA,EAAI,SAAS,CAAC,EAAE,MAAMA,CAAG,CACtC,EACAqG,GAAU,UAAU,OAAS,SAASR,EAAMC,EAAM,CAChD,IAAIhL,EAAK+K,EAAK,SAAS,EACnB9K,EAAK+K,EAAK,SAAS,EACvB,OAAIhL,IAAOC,EACF,KAAK,MAAMD,CAAE,EAAE,OAAO+K,EAAMC,CAAI,EAEhChL,EAAKC,EAAK,GAAK,CAE1B,EACAsL,GAAU,UAAU,OAAS,SAASrE,EAAQ/G,EAAM,CAClD,OAAO,KAAK,MAAM,IAAI,SAASiJ,EAAG,CAChC,OAAOA,EAAE,OAAOjJ,CAAI,CACtB,CAAC,CACH,EACAoL,GAAU,UAAU,SAAW,UAAW,CACxC,OAAO,KAAK,KACd,EACA,SAAS5D,EAAmBT,EAAQ/G,EAAM,CACxCoL,GAAU,KAAK,KAAMrE,EAAQ/G,CAAI,EACjC,KAAK,iBAAmB,KACxB,KAAK,eAAiB,CAAC,EACvB,KAAK,MAAM,QAAQ,SAASgH,EAAMyC,EAAO,CACvC,GAAI3C,EAAK,OAAOE,EAAM,WAAY,SAAS,EACpC,KAAK,mBACR,KAAK,iBAAmB,CAAC,GAE3B,KAAK,iBAAiB,KAAK,CAAE,MAAAyC,EAAO,KAAAzC,CAAK,CAAC,MACrC,CACL,IAAIyB,EAASC,GAAc1B,CAAI,EAC/B,GAAI,KAAK,eAAeyB,CAAM,IAAM,OAClC,MAAM,IAAI,MAAMrJ,EAAG,gCAAiC,IAAI,CAAC,EAE3D,KAAK,eAAeqJ,CAAM,EAAIgB,CAChC,CACF,EAAG,IAAI,EACP,OAAO,OAAO,IAAI,CACpB,CACA3K,EAAK,SAAS0I,EAAoB4D,EAAS,EAC3C5D,EAAmB,UAAU,UAAY,SAASQ,EAAK,CACrD,IAAIyB,EAAQ,KAAK,eAAe6B,GAAetD,CAAG,CAAC,EACnD,OAAI,KAAK,mBACPyB,EAAQ,KAAK,gBAAgBzB,EAAKyB,CAAK,GAElCA,CACT,EACAjC,EAAmB,UAAU,gBAAkB,SAAS2B,EAAKM,EAAO,CAClE,IAAI8B,EAAkB,KAAK,iBACvB5K,EAAGC,EAAGyK,EACV,IAAK1K,EAAI,EAAGC,EAAI2K,EAAgB,OAAQ5K,EAAIC,EAAGD,IAE7C,GADA0K,EAASE,EAAgB5K,CAAC,EACtB0K,EAAO,KAAK,OAAOlC,CAAG,EACxB,GAAIM,IAAU,OACZA,EAAQ4B,EAAO,UAEf,OAAM,IAAI,MAAM,sBAAsB,EAI5C,OAAO5B,CACT,EACAjC,EAAmB,UAAU,OAAS,SAASQ,EAAKxE,EAAO0G,EAAMC,EAAM,CACrE,IAAIV,EAAQ,KAAK,UAAUzB,CAAG,EAC1BzD,EAAKkF,IAAU,OACnB,OAAIlF,EACK,KAAK,MAAMkF,CAAK,EAAE,OAAOzB,EAAKxE,EAAO0G,EAAMC,CAAI,GAEpDD,GACFA,EAAKlC,EAAK,IAAI,EAETzD,EACT,EACAiD,EAAmB,UAAU,MAAQ,SAASzC,EAAK,CACjD,IAAI0E,EAAQ1E,EAAI,SAAS,EACrBuD,EAAa,KAAK,MAAMmB,CAAK,EACjC,GAAInB,EACF,OAAOA,EAAW,MAAMvD,CAAG,EAE3B,MAAM,IAAI,MAAM3F,EAAG,0BAA2BqK,CAAK,CAAC,CAExD,EACAjC,EAAmB,UAAU,OAAS,SAASzC,EAAKiD,EAAK,CACvD,IAAIyB,EAAQ,KAAK,UAAUzB,CAAG,EAC1ByB,IAAU,QACZkB,GAAkB3C,EAAK,IAAI,EAE7BjD,EAAI,UAAU0E,CAAK,EACfzB,IAAQ,MACV,KAAK,MAAMyB,CAAK,EAAE,OAAO1E,EAAKiD,CAAG,CAErC,EACAR,EAAmB,UAAU,QAAU,SAAS8B,EAAUtC,EAAMhH,EAAM,CACpE,IAAIW,EAAGC,EAAG4K,EACV,IAAK7K,EAAI,EAAGC,EAAI,KAAK,MAAM,OAAQD,EAAIC,EAAGD,IAAK,CAC7C,GAAI,CACF6K,EAAe,KAAK,MAAM7K,CAAC,EAAE,eAAeqG,EAAMhH,CAAI,CACxD,MAAc,CACZ,QACF,CACAsJ,EAAS,MAAQ,SAASvE,EAAK,CAC7B,OAAOyG,EAAa,MAAMzG,CAAG,CAC/B,EACA,MACF,CACF,EACAyC,EAAmB,UAAU,MAAQ,SAASQ,EAAKhI,EAAM,CACvD,IAAIyL,EAASzL,GAAQA,EAAK,OAAS,EAC/B0L,EAAO1L,GAAQA,EAAK,KAAO,EAC3ByJ,EACJ,GAAIiC,IAAS,EACXjC,EAAQ,MACH,CACL,OAAQgC,EAAQ,CACd,IAAK,GACCN,GAAanD,CAAG,GAAK,KAAK,eAAe,SAAW,OACtDyB,EAAQ,KAAK,eAAe,OAE5BA,EAAQ,KAAK,UAAUzB,CAAG,EAE5B,MACF,IAAK,GACH,GAAIA,IAAQ,KACVyB,EAAQ,KAAK,eAAe,aACnB,OAAOzB,GAAQ,SAAU,CAClC,IAAI2D,EAAO,OAAO,KAAK3D,CAAG,EACtB2D,EAAK,SAAW,IAClBlC,EAAQ,KAAK,eAAekC,EAAK,CAAC,CAAC,EACnC3D,EAAMA,EAAI2D,EAAK,CAAC,CAAC,EAErB,CACA,MACF,QACElC,EAAQ,KAAK,UAAUzB,CAAG,CAC9B,CACIyB,IAAU,QACZkB,GAAkB3C,EAAK,IAAI,CAE/B,CACA,IAAIhB,EAAO,KAAK,MAAMyC,CAAK,EAC3B,GAAIzB,IAAQ,MAAQ0D,IAAS,EAC3B,OAAO1E,EAAK,MAAMgB,EAAKhI,CAAI,EAE3B,OAAQyL,EAAQ,CACd,IAAK,GACH,IAAI1K,EAAM,CAAC,EACX,OAAAA,EAAIiG,EAAK,UAAU,EAAIA,EAAK,MAAMgB,EAAKhI,CAAI,EACpCe,EACT,QACE,OAAOiG,EAAK,MAAMgB,EAAKhI,CAAI,CAC/B,CAEJ,EACAwH,EAAmB,UAAU,QAAU,SAASoE,EAAMC,EAAM,CAC1D,IAAIC,EAAS,KAAK,UAAUF,CAAI,EAC5BG,EAAS,KAAK,UAAUF,CAAI,EAChC,GAAIC,IAAW,OACbnB,GAAkBiB,EAAM,IAAI,UACnBG,IAAW,OACpBpB,GAAkBkB,EAAM,IAAI,MACvB,QAAIC,IAAWC,EACb,KAAK,MAAMD,CAAM,EAAE,QAAQF,EAAMC,CAAI,EAErCpG,EAAM,QAAQqG,EAAQC,CAAM,CAEvC,EACAvE,EAAmB,UAAU,SAAW,kBACxCA,EAAmB,UAAU,OAAS,UAAW,CAC/C,IAAIiC,EAAQ/C,EAAO,QAAQ,KAAK,MAAM,MAAM,EAC5C,OAAO,KAAK,MAAM+C,CAAK,EAAE,OAAO,CAClC,EACA,SAASlC,EAAiBR,EAAQ/G,EAAM,CACtCoL,GAAU,KAAK,KAAMrE,EAAQ/G,CAAI,EACjC,OAAO,OAAO,IAAI,CACpB,CACAlB,EAAK,SAASyI,EAAkB6D,EAAS,EACzC7D,EAAiB,UAAU,OAAS,SAASS,EAAKxE,EAAO0G,EAAMC,EAAM,CACnE,IAAI5F,EAAK,GACT,GAAIyD,IAAQ,KACVzD,EAAK,KAAK,eAAe,OAAY,eAC5B,OAAOyD,GAAO,SAAU,CACjC,IAAI2D,EAAO,OAAO,KAAK3D,CAAG,EAC1B,GAAI2D,EAAK,SAAW,EAAG,CACrB,IAAInK,EAAOmK,EAAK,CAAC,EACblC,EAAQ,KAAK,eAAejI,CAAI,EACpC,GAAIiI,IAAU,OACZ,OAAIS,GACFC,EAAK,KAAK3I,CAAI,EACd+C,EAAK,KAAK,MAAMkF,CAAK,EAAE,OAAOzB,EAAIxG,CAAI,EAAGgC,EAAO0G,EAAMC,CAAI,EAC1DA,EAAK,IAAI,EACF5F,GAEA,KAAK,MAAMkF,CAAK,EAAE,OAAOzB,EAAIxG,CAAI,EAAGgC,CAAK,CAGtD,CACF,CACA,MAAI,CAACe,GAAM2F,GACTA,EAAKlC,EAAK,IAAI,EAETzD,CACT,EACAgD,EAAiB,UAAU,MAAQ,SAASxC,EAAK,CAC/C,IAAIiC,EAAO,KAAK,MAAMjC,EAAI,SAAS,CAAC,EACpC,GAAI,CAACiC,EACH,MAAM,IAAI,MAAM5H,EAAG,qBAAqB,CAAC,EAE3C,IAAIgL,EAASpD,EAAK,mBAClB,OAAIoD,IAAW,KACN,KAEA,IAAIA,EAAOpD,EAAK,MAAMjC,CAAG,CAAC,CAErC,EACAwC,EAAiB,UAAU,OAAS,SAASxC,EAAKiD,EAAK,CACrD,IAAIyB,EAAOkC,EAAMnK,EACbwG,IAAQ,MACVyB,EAAQ,KAAK,eAAe,KACxBA,IAAU,QACZkB,GAAkB3C,EAAK,IAAI,EAE7BjD,EAAI,UAAU0E,CAAK,IAEnBkC,EAAO,OAAO,KAAK3D,CAAG,EAClB2D,EAAK,SAAW,IAClBnK,EAAOmK,EAAK,CAAC,EACblC,EAAQ,KAAK,eAAejI,CAAI,GAE9BiI,IAAU,QACZkB,GAAkB3C,EAAK,IAAI,EAE7BjD,EAAI,UAAU0E,CAAK,EACnB,KAAK,MAAMA,CAAK,EAAE,OAAO1E,EAAKiD,EAAIxG,CAAI,CAAC,EAE3C,EACA+F,EAAiB,UAAU,QAAU,SAAS+B,EAAUtC,EAAMhH,EAAM,CAClE,IAAIW,EAAGC,EAAG4K,EAAcpB,EACxB,IAAKzJ,EAAI,EAAGC,EAAI,KAAK,MAAM,OAAQD,EAAIC,EAAGD,IAAK,CAC7C,GAAI,CACF6K,EAAe,KAAK,MAAM7K,CAAC,EAAE,eAAeqG,EAAMhH,CAAI,CACxD,MAAc,CACZ,QACF,CACAoK,EAAS,KAAK,MAAMzJ,CAAC,EAAE,mBACnByJ,EACFd,EAAS,MAAQ,SAASvE,EAAK,CAC7B,OAAO,IAAIqF,EAAOoB,EAAa,MAAMzG,CAAG,CAAC,CAC3C,EAEAuE,EAAS,MAAQ,UAAW,CAC1B,OAAO,IACT,EAEF,MACF,CACF,EACA/B,EAAiB,UAAU,MAAQ,SAASS,EAAKhI,EAAM,CACrD,IAAI0L,EAAO1L,GAAQA,EAAK,KAAO,EAC/B,GAAI0L,IAAS,EAAG,CACd,IAAIM,EAAY,KAAK,MAAM,CAAC,EAC5B,OAAIhE,IAAQ,MAAQgE,EAAU,WAAa,OAClC,KAEF,IAAIA,EAAU,mBAAmBA,EAAU,MAAMhE,EAAKhI,CAAI,CAAC,CACpE,CACA,GAAIgI,IAAQ,MAAQ,KAAK,eAAe,OAAY,OAClD,OAAO,KAET,IAAIrH,EAAGC,EAAGG,EACV,GAAI,OAAOiH,GAAO,SAAU,CAC1B,IAAI2D,EAAO,OAAO,KAAK3D,CAAG,EAC1B,GAAI2D,EAAK,SAAW,EAAG,CACrB,IAAInK,EAAOmK,EAAK,CAAC,EAEjB,GADAhL,EAAI,KAAK,eAAea,CAAI,EACxBb,IAAM,QAAUX,EAAK,aAAc,CACrC,IAAI8D,EAAIkD,EACR,IAAKlD,EAAK,EAAGlD,EAAI,KAAK,MAAM,OAAQkD,EAAKlD,EAAGkD,IAE1C,GADAkD,EAAO,KAAK,MAAMlD,CAAE,EAChBkD,EAAK,MAAQxF,IAASiE,EAAM,UAAUuB,EAAK,IAAI,EAAG,CACpDrG,EAAImD,EACJ,KACF,CAEJ,CACInD,IAAM,SACRI,EAAM,KAAK,MAAMJ,CAAC,EAAE,MAAMqH,EAAIxG,CAAI,EAAGxB,CAAI,EAE7C,CACF,CACA,GAAI0L,IAAS,GAAK3K,IAAQ,OAGxB,IAFAJ,EAAI,EACJC,EAAI,KAAK,MAAM,OACRD,EAAIC,GAAKG,IAAQ,QACtB,GAAI,CACFA,EAAM,KAAK,MAAMJ,CAAC,EAAE,MAAMqH,EAAKhI,CAAI,CACrC,MAAc,CACZW,GACF,CAGJ,GAAII,IAAQ,OACV,OAAO2K,IAAS,EAAI3K,EAAM,IAAI,KAAK,MAAMJ,CAAC,EAAE,mBAAmBI,CAAG,EAEpE4J,GAAkB3C,EAAK,IAAI,CAC7B,EACAT,EAAiB,UAAU,QAAU,SAASqE,EAAMC,EAAM,CACxD,IAAII,EAAQL,IAAS,KAAO,OAAS,OAAO,KAAKA,CAAI,EAAE,CAAC,EACpDM,EAAQL,IAAS,KAAO,OAAS,OAAO,KAAKA,CAAI,EAAE,CAAC,EACpDpC,EAAQ,KAAK,eAAewC,CAAK,EACrC,OAAIA,IAAUC,EACLD,IAAU,OAAS,EAAI,KAAK,MAAMxC,CAAK,EAAE,QAAQmC,EAAKK,CAAK,EAAGJ,EAAKI,CAAK,CAAC,EAEzExG,EAAM,QAAQgE,EAAO,KAAK,eAAeyC,CAAK,CAAC,CAE1D,EACA3E,EAAiB,UAAU,SAAW,gBACtCA,EAAiB,UAAU,OAAS,UAAW,CAC7C,IAAIkC,EAAQ/C,EAAO,QAAQ,KAAK,MAAM,MAAM,EACxCM,EAAO,KAAK,MAAMyC,CAAK,EACvBW,EAASpD,EAAK,mBAClB,OAAKoD,EAGE,IAAIA,EAAOpD,EAAK,OAAO,CAAC,EAFtB,IAGX,EACA,SAASf,EAASc,EAAQ/G,EAAM,CAE9B,GADA8G,EAAK,KAAK,KAAMC,EAAQ/G,CAAI,EACxB,CAAC,MAAM,QAAQ+G,EAAO,OAAO,GAAK,CAACA,EAAO,QAAQ,OACpD,MAAM,IAAI,MAAM3H,EAAG,2BAA4B2H,EAAO,OAAO,CAAC,EAchE,GAZA,KAAK,QAAU,OAAO,OAAOA,EAAO,QAAQ,MAAM,CAAC,EACnD,KAAK,SAAW,CAAC,EACjB,KAAK,QAAQ,QAAQ,SAASoF,EAAQxL,EAAG,CACvC,GAAI,CAAC8E,EAAM,YAAY0G,CAAM,EAC3B,MAAM,IAAI,MAAM/M,EAAG,wBAAyB,KAAM+M,CAAM,CAAC,EAE3D,GAAI,KAAK,SAASA,CAAM,IAAM,OAC5B,MAAM,IAAI,MAAM/M,EAAG,0BAA2B,KAAM+M,CAAM,CAAC,EAE7D,KAAK,SAASA,CAAM,EAAIxL,CAC1B,EAAG,IAAI,EACP,KAAK,QAAUoG,EAAO,QAClB,KAAK,UAAY,QAAU,KAAK,SAAS,KAAK,OAAO,IAAM,OAC7D,MAAM,IAAI,MAAM3H,EAAG,yBAA0B,KAAM,KAAK,OAAO,CAAC,EAElE,KAAK,mBAAqB,KAAK,yBAAyB,EACxD,OAAO,OAAO,IAAI,CACpB,CACAN,EAAK,SAASmH,EAAUa,CAAI,EAC5Bb,EAAS,UAAU,OAAS,SAAS+B,EAAKxE,EAAO0G,EAAM,CACrD,IAAI3F,EAAK,KAAK,SAASyD,CAAG,IAAM,OAChC,MAAI,CAACzD,GAAM2F,GACTA,EAAKlC,EAAK,IAAI,EAETzD,CACT,EACA0B,EAAS,UAAU,MAAQ,SAASlB,EAAK,CACvC,IAAI0E,EAAQ1E,EAAI,SAAS,EACrBoH,EAAS,KAAK,QAAQ1C,CAAK,EAC/B,GAAI0C,IAAW,OACb,MAAM,IAAI,MAAM/M,EAAG,4BAA6B,KAAK,KAAMqK,CAAK,CAAC,EAEnE,OAAO0C,CACT,EACAlG,EAAS,UAAU,MAAQ,SAASlB,EAAK,CACvCA,EAAI,SAAS,CACf,EACAkB,EAAS,UAAU,OAAS,SAASlB,EAAKiD,EAAK,CAC7C,IAAIyB,EAAQ,KAAK,SAASzB,CAAG,EACzByB,IAAU,QACZkB,GAAkB3C,EAAK,IAAI,EAE7BjD,EAAI,UAAU0E,CAAK,CACrB,EACAxD,EAAS,UAAU,OAAS,SAAS2E,EAAMC,EAAM,CAC/C,OAAOD,EAAK,UAAUC,CAAI,CAC5B,EACA5E,EAAS,UAAU,QAAU,SAAS2F,EAAMC,EAAM,CAChD,OAAOpG,EAAM,QAAQ,KAAK,SAASmG,CAAI,EAAG,KAAK,SAASC,CAAI,CAAC,CAC/D,EACA5F,EAAS,UAAU,QAAU,SAASqD,EAAUtC,EAAMhH,EAAM,CAC1D,IAAIoM,EAAU,KAAK,QACfpF,EAAK,WAAa,QAAUqF,GAAkB,KAAMrF,EAAM,CAAChH,EAAK,gBAAgB,IAAMgH,EAAK,QAAQ,MAAM,SAASrH,EAAG,CACvH,MAAO,CAACyM,EAAQ,QAAQzM,CAAC,CAC3B,CAAC,GAAK,KAAK,UAAY,UACrB2J,EAAS,QAAUtC,EAAK,QAAQ,IAAI,SAASrH,EAAG,CAC9C,OAAO,KAAK,SAASA,CAAC,IAAM,OAAS,KAAK,QAAUA,CACtD,EAAG,IAAI,EACP2J,EAAS,MAAQtC,EAAK,MAE1B,EACAf,EAAS,UAAU,MAAQ,SAAS+B,EAAK,CACvC,YAAK,OAAOA,EAAK,OAAQ2C,EAAiB,EACnC3C,CACT,EACA/B,EAAS,UAAU,OAAS,SAASc,EAAQ,CAC3CA,EAAO,QAAU,KAAK,OACxB,EACAd,EAAS,UAAU,WAAa,UAAW,CACzC,OAAO,KAAK,OACd,EACAA,EAAS,UAAU,SAAW,OAC9BA,EAAS,UAAU,OAAS,UAAW,CACrC,OAAOS,EAAO,OAAO,KAAK,OAAO,CACnC,EACA,SAASP,EAAUY,EAAQ/G,EAAM,CAE/B,GADA8G,EAAK,KAAK,KAAMC,EAAQ/G,CAAI,EACxB+G,EAAO,QAAUA,EAAO,KAAO,IAAMA,EAAO,KAAO,EACrD,MAAM,IAAI,MAAM3H,EAAG,kBAAmB,KAAK,UAAU,CAAC,EAExD,KAAK,KAAO2H,EAAO,KAAO,EAC1B,KAAK,mBAAqB,KAAK,yBAAyB,EACxD,OAAO,OAAO,IAAI,CACpB,CACAjI,EAAK,SAASqH,EAAWW,CAAI,EAC7BX,EAAU,UAAU,OAAS,SAAS6B,EAAKxE,EAAO0G,EAAM,CACtD,IAAI3F,EAAKvF,EAAQ,SAASgJ,CAAG,GAAKA,EAAI,SAAW,KAAK,KACtD,MAAI,CAACzD,GAAM2F,GACTA,EAAKlC,EAAK,IAAI,EAETzD,CACT,EACA4B,EAAU,UAAU,MAAQ,SAASpB,EAAK,CACxC,OAAOA,EAAI,UAAU,KAAK,IAAI,CAChC,EACAoB,EAAU,UAAU,MAAQ,SAASpB,EAAK,CACxCA,EAAI,UAAU,KAAK,IAAI,CACzB,EACAoB,EAAU,UAAU,OAAS,SAASpB,EAAKiD,EAAK,EAC1C,CAAChJ,EAAQ,SAASgJ,CAAG,GAAKA,EAAI,SAAW,KAAK,OAChD2C,GAAkB3C,EAAK,IAAI,EAE7BjD,EAAI,WAAWiD,EAAK,KAAK,IAAI,CAC/B,EACA7B,EAAU,UAAU,OAAS,SAASyE,EAAMC,EAAM,CAChD,OAAOD,EAAK,WAAWC,EAAM,KAAK,IAAI,CACxC,EACA1E,EAAU,UAAU,QAAUnH,EAAQ,QACtCmH,EAAU,UAAU,QAAU,SAASmD,EAAUtC,EAAMhH,EAAM,CACvDgH,EAAK,WAAa,SAAW,KAAK,OAASA,EAAK,MAAQqF,GAAkB,KAAMrF,EAAM,CAAChH,EAAK,gBAAgB,IAC9GsJ,EAAS,KAAO,KAAK,KACrBA,EAAS,MAAQ,KAAK,MAE1B,EACAnD,EAAU,UAAU,MAAQJ,EAAU,UAAU,MAChDI,EAAU,UAAU,OAAS,SAASY,EAAQ,CAC5CA,EAAO,KAAO,KAAK,IACrB,EACAZ,EAAU,UAAU,QAAU,UAAW,CACvC,OAAO,KAAK,IACd,EACAA,EAAU,UAAU,SAAW,QAC/BA,EAAU,UAAU,OAAS,UAAW,CACtC,OAAOO,EAAO,WAAW,KAAK,IAAI,CACpC,EACA,SAASH,EAAQQ,EAAQ/G,EAAM,CAE7B,GADA8G,EAAK,KAAK,IAAI,EACV,CAACC,EAAO,OACV,MAAM,IAAI,MAAM3H,EAAG,yBAA0B2H,CAAM,CAAC,EAEtD,KAAK,WAAaD,EAAK,UAAUC,EAAO,OAAQ/G,CAAI,EACpD,KAAK,mBAAqB,KAAK,yBAAyB,EACxD,OAAO,OAAO,IAAI,CACpB,CACAlB,EAAK,SAASyH,EAASO,CAAI,EAC3BP,EAAQ,UAAU,OAAS,SAASyB,EAAKxE,EAAO0G,EAAMC,EAAM,CAC1D,GAAI,CAACnC,GAAO,OAAOA,GAAO,UAAY,MAAM,QAAQA,CAAG,EACrD,OAAIkC,GACFA,EAAKlC,EAAK,IAAI,EAET,GAET,IAAI2D,EAAO,OAAO,KAAK3D,CAAG,EACtBzD,EAAK,GACL5D,EAAGC,EAAGkD,EAAIhG,EACd,GAAIoM,EAAM,CAGR,IAFApG,EAAKqG,EAAK,OACVA,EAAK,KAAK,EAAE,EACPxJ,EAAI,EAAGC,EAAI+K,EAAK,OAAQhL,EAAIC,EAAGD,IAClC7C,EAAMqM,EAAKrG,CAAE,EAAI6H,EAAKhL,CAAC,EAClB,KAAK,WAAW,OAAOqH,EAAIlK,CAAG,EAAG0F,EAAO0G,EAAMC,CAAI,IACrD5F,EAAK,IAGT4F,EAAK,IAAI,CACX,KACE,KAAKxJ,EAAI,EAAGC,EAAI+K,EAAK,OAAQhL,EAAIC,EAAGD,IAClC,GAAI,CAAC,KAAK,WAAW,OAAOqH,EAAI2D,EAAKhL,CAAC,CAAC,EAAG6C,CAAK,EAC7C,MAAO,GAIb,OAAOe,CACT,EACAgC,EAAQ,UAAU,MAAQ,SAASxB,EAAK,CAItC,QAHIuH,EAAS,KAAK,WACdtE,EAAM,CAAC,EACPxD,EACGA,EAAI+H,GAAcxH,CAAG,GAC1B,KAAOP,KAAK,CACV,IAAI1G,EAAMiH,EAAI,WAAW,EACzBiD,EAAIlK,CAAG,EAAIwO,EAAO,MAAMvH,CAAG,CAC7B,CAEF,OAAOiD,CACT,EACAzB,EAAQ,UAAU,MAAQ,SAASxB,EAAK,CAGtC,QAFIuH,EAAS,KAAK,WACdvJ,EAAKyB,EACFA,EAAIO,EAAI,SAAS,GACtB,GAAIP,EAAI,EACNzB,EAAMgC,EAAI,SAAS,EACnBA,EAAI,KAAOhC,MAEX,MAAOyB,KACLO,EAAI,WAAW,EACfuH,EAAO,MAAMvH,CAAG,CAIxB,EACAwB,EAAQ,UAAU,OAAS,SAASxB,EAAKiD,EAAK,EACxC,CAACA,GAAO,OAAOA,GAAO,UAAY,MAAM,QAAQA,CAAG,IACrD2C,GAAkB3C,EAAK,IAAI,EAE7B,IAAIsE,EAAS,KAAK,WACdX,EAAO,OAAO,KAAK3D,CAAG,EACtB,EAAI2D,EAAK,OACThL,EAAG7C,EACP,GAAI,EAEF,IADAiH,EAAI,UAAU,CAAC,EACVpE,EAAI,EAAGA,EAAI,EAAGA,IACjB7C,EAAM6N,EAAKhL,CAAC,EACZoE,EAAI,YAAYjH,CAAG,EACnBwO,EAAO,OAAOvH,EAAKiD,EAAIlK,CAAG,CAAC,EAG/BiH,EAAI,UAAU,CAAC,CACjB,EACAwB,EAAQ,UAAU,OAAS,UAAW,CACpC,MAAM,IAAI,MAAM,yBAAyB,CAC3C,EACAA,EAAQ,UAAU,QAAU,SAASiG,EAAKxF,EAAMhH,EAAM,CAChDgH,EAAK,WAAa,QACpBwF,EAAI,WAAa,KAAK,WAAW,eAAexF,EAAK,WAAYhH,CAAI,EACrEwM,EAAI,MAAQ,KAAK,MAErB,EACAjG,EAAQ,UAAU,MAAQ,SAASyB,EAAKhI,EAAM,CAC5C,GAAIgI,GAAO,OAAOA,GAAO,UAAY,CAAC,MAAM,QAAQA,CAAG,EAAG,CACxD,IAAIsE,EAAS,KAAK,WACdX,EAAO,OAAO,KAAK3D,CAAG,EACtBrH,EAAGC,EAAG9C,EACN2O,EAAO,CAAC,EACZ,IAAK9L,EAAI,EAAGC,EAAI+K,EAAK,OAAQhL,EAAIC,EAAGD,IAClC7C,EAAM6N,EAAKhL,CAAC,EACZ8L,EAAK3O,CAAG,EAAIwO,EAAO,MAAMtE,EAAIlK,CAAG,EAAGkC,CAAI,EAEzC,OAAOyM,CACT,CACA9B,GAAkB3C,EAAK,IAAI,CAC7B,EACAzB,EAAQ,UAAU,QAAUA,EAAQ,UAAU,OAC9CA,EAAQ,UAAU,SAAW,MAC7BA,EAAQ,UAAU,cAAgB,UAAW,CAC3C,OAAO,KAAK,UACd,EACAA,EAAQ,UAAU,OAAS,UAAW,CACpC,IAAIyB,EAAM,CAAC,EACP,EAAGpH,EACP,IAAK,EAAI,EAAGA,EAAI8F,EAAO,QAAQ,EAAE,EAAG,EAAI9F,EAAG,IACzCoH,EAAItB,EAAO,WAAWA,EAAO,QAAQ,EAAE,CAAC,CAAC,EAAI,KAAK,WAAW,OAAO,EAEtE,OAAOsB,CACT,EACAzB,EAAQ,UAAU,OAAS,SAASQ,EAAQ/G,EAAM,CAChD+G,EAAO,OAAS,KAAK,WAAW,OAAO/G,CAAI,CAC7C,EACA,SAAS6F,EAAUkB,EAAQ/G,EAAM,CAE/B,GADA8G,EAAK,KAAK,IAAI,EACV,CAACC,EAAO,MACV,MAAM,IAAI,MAAM3H,EAAG,0BAA2B2H,CAAM,CAAC,EAEvD,KAAK,UAAYD,EAAK,UAAUC,EAAO,MAAO/G,CAAI,EAClD,KAAK,mBAAqB,KAAK,yBAAyB,EACxD,OAAO,OAAO,IAAI,CACpB,CACAlB,EAAK,SAAS+G,EAAWiB,CAAI,EAC7BjB,EAAU,UAAU,OAAS,SAASmC,EAAKxE,EAAO0G,EAAMC,EAAM,CAC5D,GAAI,CAAC,MAAM,QAAQnC,CAAG,EACpB,OAAIkC,GACFA,EAAKlC,EAAK,IAAI,EAET,GAET,IAAInE,EAAQ,KAAK,UACbU,EAAK,GACL5D,EAAGC,EAAGkD,EACV,GAAIoG,EAAM,CAGR,IAFApG,EAAKqG,EAAK,OACVA,EAAK,KAAK,EAAE,EACPxJ,EAAI,EAAGC,EAAIoH,EAAI,OAAQrH,EAAIC,EAAGD,IACjCwJ,EAAKrG,CAAE,EAAI,GAAKnD,EACXkD,EAAM,OAAOmE,EAAIrH,CAAC,EAAG6C,EAAO0G,EAAMC,CAAI,IACzC5F,EAAK,IAGT4F,EAAK,IAAI,CACX,KACE,KAAKxJ,EAAI,EAAGC,EAAIoH,EAAI,OAAQrH,EAAIC,EAAGD,IACjC,GAAI,CAACkD,EAAM,OAAOmE,EAAIrH,CAAC,EAAG6C,CAAK,EAC7B,MAAO,GAIb,OAAOe,CACT,EACAsB,EAAU,UAAU,MAAQ,SAASd,EAAK,CAIxC,QAHIlB,EAAQ,KAAK,UACblD,EAAI,EACJqH,EAAK,EACF,EAAIjD,EAAI,SAAS,GAMtB,IALI,EAAI,IACN,EAAI,CAAC,EACLA,EAAI,SAAS,GAEfiD,EAAMA,GAAO,IAAI,MAAM,CAAC,EACjB,KACLA,EAAIrH,GAAG,EAAIkD,EAAM,MAAMkB,CAAG,EAG9B,OAAOiD,GAAO,CAAC,CACjB,EACAnC,EAAU,UAAU,MAAQ,SAASd,EAAK,CAGxC,QAFIlB,EAAQ,KAAK,UACbd,EAAKyB,EACFA,EAAIO,EAAI,SAAS,GACtB,GAAIP,EAAI,EACNzB,EAAMgC,EAAI,SAAS,EACnBA,EAAI,KAAOhC,MAEX,MAAOyB,KACLX,EAAM,MAAMkB,CAAG,CAIvB,EACAc,EAAU,UAAU,OAAS,SAASd,EAAKiD,EAAK,CACzC,MAAM,QAAQA,CAAG,GACpB2C,GAAkB3C,EAAK,IAAI,EAE7B,IAAInE,EAAQ,KAAK,UACbW,EAAIwD,EAAI,OACRrH,EACJ,GAAI6D,EAEF,IADAO,EAAI,UAAUP,CAAC,EACV7D,EAAI,EAAGA,EAAI6D,EAAG7D,IACjBkD,EAAM,OAAOkB,EAAKiD,EAAIrH,CAAC,CAAC,EAG5BoE,EAAI,UAAU,CAAC,CACjB,EACAc,EAAU,UAAU,OAAS,SAAS+E,EAAMC,EAAM,CAIhD,QAHIhL,EAAK+K,EAAK,SAAS,EACnB9K,EAAK+K,EAAK,SAAS,EACnBlG,EACG9E,GAAMC,GAAI,CAEf,GADA6E,EAAK,KAAK,UAAU,OAAOiG,EAAMC,CAAI,EACjClG,EACF,OAAOA,EAEJ,EAAE9E,IACLA,EAAK0M,GAAc3B,CAAI,GAEpB,EAAE9K,IACLA,EAAKyM,GAAc1B,CAAI,EAE3B,CACA,OAAOpF,EAAM,QAAQ5F,EAAIC,CAAE,CAC7B,EACA+F,EAAU,UAAU,QAAU,SAASyD,EAAUtC,EAAMhH,EAAM,CACvDgH,EAAK,WAAa,UACpBsC,EAAS,UAAY,KAAK,UAAU,eAAetC,EAAK,UAAWhH,CAAI,EACvEsJ,EAAS,MAAQ,KAAK,MAE1B,EACAzD,EAAU,UAAU,MAAQ,SAASmC,EAAKhI,EAAM,CACzC,MAAM,QAAQgI,CAAG,GACpB2C,GAAkB3C,EAAK,IAAI,EAE7B,IAAInE,EAAQ,IAAI,MAAMmE,EAAI,MAAM,EAC5BrH,EAAGC,EACP,IAAKD,EAAI,EAAGC,EAAIoH,EAAI,OAAQrH,EAAIC,EAAGD,IACjCkD,EAAMlD,CAAC,EAAI,KAAK,UAAU,MAAMqH,EAAIrH,CAAC,EAAGX,CAAI,EAE9C,OAAO6D,CACT,EACAgC,EAAU,UAAU,OAAS,SAASkB,EAAQ/G,EAAM,CAClD+G,EAAO,MAAQ,KAAK,UAAU,OAAO/G,CAAI,CAC3C,EACA6F,EAAU,UAAU,QAAU,SAAS+F,EAAMC,EAAM,CACjD,IAAIhM,EAAK+L,EAAK,OACV9L,EAAK+L,EAAK,OACVlL,EAAGC,EAAG+D,EACV,IAAKhE,EAAI,EAAGC,EAAI,KAAK,IAAIf,EAAIC,CAAE,EAAGa,EAAIC,EAAGD,IACvC,GAAIgE,EAAK,KAAK,UAAU,QAAQiH,EAAKjL,CAAC,EAAGkL,EAAKlL,CAAC,CAAC,EAC9C,OAAOgE,EAGX,OAAOc,EAAM,QAAQ5F,EAAIC,CAAE,CAC7B,EACA+F,EAAU,UAAU,aAAe,UAAW,CAC5C,OAAO,KAAK,SACd,EACAA,EAAU,UAAU,SAAW,QAC/BA,EAAU,UAAU,OAAS,UAAW,CACtC,IAAIrF,EAAM,CAAC,EACP,EAAGI,EACP,IAAK,EAAI,EAAGA,EAAI8F,EAAO,QAAQ,EAAE,EAAG,EAAI9F,EAAG,IACzCJ,EAAI,KAAK,KAAK,UAAU,OAAO,CAAC,EAElC,OAAOA,CACT,EACA,SAAS0F,EAAWa,EAAQ/G,EAAM,CAChCA,EAAOA,GAAQ,CAAC,EAChB,IAAI4B,EAAY5B,EAAK,UACrB,GAAI+G,EAAO,YAAc,OACvB/G,EAAK,UAAY+G,EAAO,kBACfA,EAAO,KAAM,CACtB,IAAI2F,EAAKjH,EAAM,iBAAiBsB,EAAO,IAAI,EACvC2F,IAAO,SACT1M,EAAK,UAAY0M,EAErB,CAEA,GADA5F,EAAK,KAAK,KAAMC,EAAQ/G,CAAI,EACxB,CAAC,MAAM,QAAQ+G,EAAO,MAAM,EAC9B,MAAM,IAAI,MAAM3H,EAAG,8BAA+B2H,EAAO,MAAM,CAAC,EAElE,GAAItB,EAAM,cAAcsB,EAAO,OAAQ,SAASpC,EAAI,CAClD,OAAOA,EAAG,IACZ,CAAC,EACC,MAAM,IAAI,MAAMvF,EAAG,2BAA4B2H,EAAO,MAAM,CAAC,EAE/D,KAAK,cAAgB,CAAC,EACtB,KAAK,OAAS,OAAO,OAAOA,EAAO,OAAO,IAAI,SAASpC,EAAI,CACzD,IAAIgI,EAAQ,IAAIC,EAAMjI,EAAI3E,CAAI,EAC9B,YAAK,cAAc2M,EAAM,IAAI,EAAIA,EAC1BA,CACT,EAAG,IAAI,CAAC,EACR,KAAK,mBAAqB,KAAK,yBAAyB,EACxD,KAAK,SAAW5F,EAAO,OAAS,QAChC,KAAK,kBAAoB,KAAK,mBAC5B/G,EAAK,iBACLA,EAAK,iBACP,EACA,KAAK,MAAQ,KAAK,cAAc,EAChC,KAAK,MAAQ,KAAK,eAAe,EACjC,KAAK,OAAS,KAAK,cAAc,EACjC,KAAK,OAAS,KAAK,eAAe,EAClCA,EAAK,UAAY4B,EACjB,OAAO,OAAO,IAAI,CACpB,CACA9C,EAAK,SAASoH,EAAYY,CAAI,EAC9BZ,EAAW,UAAU,oBAAsB,UAAW,CACpD,OAAO,KAAK,KAAOT,EAAM,WAAWA,EAAM,UAAU,KAAK,IAAI,CAAC,EAAI,KAAK,SAAW,SAAW,SAC/F,EACAS,EAAW,UAAU,mBAAqB,SAAS2G,EAAYC,EAAc,CAC3E,IAAIC,EAAY,CAAC,EACbC,EAAY,CAAC,EACbC,EAAK,CAAC,EACNC,EAAY,GACZvM,EAAGC,EAAG+L,EAAOnL,EAAM2L,EAAcC,EAAYC,EACjD,IAAK1M,EAAI,EAAGC,EAAI,KAAK,OAAO,OAAQD,EAAIC,EAAGD,IACzCgM,EAAQ,KAAK,OAAOhM,CAAC,EACrBwM,EAAeR,EAAM,aACrBS,EAAaD,EAAa,IAAM,OAChC3L,EAAOmL,EAAM,KACTE,GAAc,KAAK,UAAYrL,IAAS,SAAWsF,EAAK,OAAO6F,EAAM,KAAM,QAAQ,GAAK,CAACS,IAC3FC,EAAaV,GAEfK,EAAU,KAAK,IAAMrM,CAAC,EACtBuM,GAAa,KACRE,GAGHF,GAAa,QAAUvM,EAAI,qBAC3BuM,GAAa,QAAU1L,EAAO,OAASyL,EAAG,OAAS,OACnDC,GAAa,iBAAmB1L,EAAO,OAASb,EAAI;AAAA,EACpDoM,EAAU,KAAK,IAAME,EAAG,MAAM,EAC9BA,EAAG,KAAKE,CAAY,GANpBD,GAAa,QAAU1L,EAAO,OAASb,EAAI;AAAA,EAS3C0M,IACFH,GAAa,qCACT,OAAO,MAAM,mBAAqB,WACpCA,GAAa,mDAEbA,GAAa,8BAEfA,GAAa;AAAA,GAEf,IAAII,EAAY,mBAAqB,KAAK,oBAAoB,EAAI,IAClEA,GAAaN,EAAU,KAAK,EAAI;AAAA,EAAUE,EAAY,KACtD,IAAIK,EAAS,IAAI,SAASR,EAAU,KAAK,EAAGO,CAAS,EAAE,MAAM,OAAQL,CAAE,EACvE,GAAIH,EACF,OAAOS,EAET,IAAIC,EAAO,KACX,OAAAD,EAAO,QAAU,UAAW,CAC1B,OAAOC,CACT,EACAD,EAAO,KAAOC,EACV,KAAK,WACP1O,EAAK,SAASyO,EAAQ,KAAK,EAC3BA,EAAO,UAAU,KAAO,KAAK,oBAAoB,GAEnDA,EAAO,UAAU,MAAQ,SAASE,EAAG,CACnC,OAAOD,EAAK,MAAM,KAAMC,CAAC,CAC3B,EACAF,EAAO,UAAU,QAAU,SAAS9M,EAAI,CACtC,OAAO+M,EAAK,QAAQ,KAAM/M,CAAE,CAC9B,EACA8M,EAAO,UAAU,QAAU,SAASE,EAAG,CACrC,OAAOD,EAAK,QAAQ,KAAMC,CAAC,CAC7B,EACAF,EAAO,UAAU,SAAW,UAAW,CACrC,OAAOC,EAAK,SAAS,IAAI,CAC3B,EACAD,EAAO,UAAU,SAAW,UAAW,CACrC,OAAOC,EAAK,SAAS,IAAI,CAC3B,EACAD,EAAO,UAAU,KAAO,UAAW,CACjC,OAAOC,EAAK,KAAK,IAAI,CACvB,EACAD,EAAO,UAAU,QAAUA,EAAO,UAAU,KACrCA,CACT,EACArH,EAAW,UAAU,eAAiB,UAAW,CAC/C,IAAI3E,EAAQ,CAAC,EACT+K,EAAS,CAAC,EACV9K,EAAO,KAAK,oBAAoB,EAChC+I,EAAO,wBAA0B/I,EAAO;AAAA,EAS5C,GARA+I,GAAQ;AAAA,EACRA,GAAQ;AAAA,EACRA,GAAQ;AAAA,EACRA,GAAQ;AAAA,EACRA,GAAQ;AAAA,EACRA,GAAQ;AAAA,EACRA,GAAQ;AAAA,EACRA,GAAQ;AAAA,EACJ,CAAC,KAAK,OAAO,OACfA,GAAQ;AAAA,MACH,CACL,IAAK5J,EAAI,EAAGC,EAAI,KAAK,OAAO,OAAQD,EAAIC,EAAGD,IACzCgM,EAAQ,KAAK,OAAOhM,CAAC,EACrBY,EAAM,KAAK,IAAMZ,CAAC,EAClB2L,EAAO,KAAKK,EAAM,IAAI,EAClBA,EAAM,aAAa,IAAM,SAC3BpC,GAAQ,UAAY5J,EAAI,QAAUgM,EAAM,KAAO;AAAA,GAGnDpC,GAAQ;AAAA,EACRA,GAAQ;AAAA,EACRA,GAAQ;AAAA,EACRA,GAAQ;AAAA,EACR,IAAI5J,EAAGC,EAAG+L,EACV,IAAKhM,EAAI,EAAGC,EAAI,KAAK,OAAO,OAAQD,EAAIC,EAAGD,IACzCgM,EAAQ,KAAK,OAAOhM,CAAC,EACrB4J,GAAQ,eAAiBoC,EAAM,KAAO;AAAA,EACtCpC,GAAQ,YACJoC,EAAM,aAAa,IAAM,OAC3BpC,GAAQ,IAAM5J,EAAI,aAAegM,EAAM,KAAO;AAAA,GAE9CpC,GAAQ,IAAM5J,EAAI,qBAClB4J,GAAQ,IAAM5J,EAAI,YAAcA,EAAI;AAAA,GAGxC4J,GAAQ;AAAA,EACRA,GAAQ;AAAA,EACRA,GAAQ;AAAA;AAAA,QACRA,GAAQ,KAAK,OAAO,IAAI,SAASmD,EAAQxJ,EAAI,CAC3C,OAAOwJ,EAAO,aAAa,IAAM,OAAS,IAAMxJ,EAAK,aAAewJ,EAAO,KAAO,OAAS,KAAOxJ,EAAK,sBAAwBA,EAAK,YAAcA,EAAK,OACzJ,CAAC,EAAE,KAAK;AAAA,OAAa,EACrBqG,GAAQ;AAAA;AAAA;AAAA,CACV,CACA,OAAAA,GAAQ,KACD,IAAI,SAAShJ,EAAM,KAAK,EAAGgJ,CAAI,EAAE,MAAM,OAAQ+B,CAAM,CAC9D,EACApG,EAAW,UAAU,cAAgB,UAAW,CAC9C,IAAI3E,EAAQ,CAAC,EACT+K,EAAS,CAAC,KAAK,iBAAiB,EAChC3L,EAAGC,EACP,IAAKD,EAAI,EAAGC,EAAI,KAAK,OAAO,OAAQD,EAAIC,EAAGD,IACzCY,EAAM,KAAK,IAAMZ,CAAC,EAClB2L,EAAO,KAAK,KAAK,OAAO3L,CAAC,EAAE,IAAI,EAEjC,IAAIa,EAAO,KAAK,oBAAoB,EAChC+I,EAAO,uBAAyB/I,EAAO;AAAA,EAC3C,OAAA+I,GAAQ,gBAAkB/I,EAAO;AAAA,MACjC+I,GAAQhJ,EAAM,IAAI,SAAS,EAAG,CAC5B,OAAO,EAAI,WACb,CAAC,EAAE,KAAK;AAAA,KAAS,EACjBgJ,GAAQ;AAAA;AAAA,IACRhJ,EAAM,QAAQC,CAAI,EACX,IAAI,SAASD,EAAM,KAAK,EAAGgJ,CAAI,EAAE,MAAM,OAAQ+B,CAAM,CAC9D,EACApG,EAAW,UAAU,eAAiB,UAAW,CAC/C,IAAIyH,EAAO,CAAC,EACRpD,EAAO,uBAAyB,KAAK,oBAAoB,EAAI;AAAA,EAC7D+B,EAAS,CAAC,EACV3L,EAAGC,EACP,IAAKD,EAAI,EAAGC,EAAI,KAAK,OAAO,OAAQD,EAAIC,EAAGD,IACzCgN,EAAK,KAAK,IAAMhN,CAAC,EACjB2L,EAAO,KAAK,KAAK,OAAO3L,CAAC,EAAE,IAAI,EAC/B4J,GAAQ,MAAQ5J,EAAI;AAAA,EAEtB,OAAA4J,GAAQ,IACD,IAAI,SAASoD,EAAK,KAAK,EAAGpD,CAAI,EAAE,MAAM,OAAQ+B,CAAM,CAC7D,EACApG,EAAW,UAAU,cAAgB,UAAW,CAC9C,IAAIyH,EAAO,CAAC,EACRnM,EAAO,KAAK,oBAAoB,EAChC+I,EAAO,wBAA0B/I,EAAO;AAAA,EACxC8K,EAAS,CAAC,EACV3L,EAAGC,EAAG+L,EAAOzM,EACjB,IAAKS,EAAI,EAAGC,EAAI,KAAK,OAAO,OAAQD,EAAIC,EAAGD,IACzCgM,EAAQ,KAAK,OAAOhM,CAAC,EACrBgN,EAAK,KAAK,IAAMhN,CAAC,EACjB2L,EAAO,KAAKK,EAAM,IAAI,EACtBpC,GAAQ,KACJoC,EAAM,aAAa,IAAM,OAC3BpC,GAAQ,IAAM5J,EAAI,gBAAkBgM,EAAM,KAAO;AAAA,GAEjDzM,EAAQyM,EAAM,KAAK,SAASA,EAAM,aAAa,CAAC,EAAE,SAAS,QAAQ,EACnEgB,EAAK,KAAK,IAAMhN,CAAC,EACjB2L,EAAO,KAAKpM,CAAK,EACjBqK,GAAQ,QAAU5J,EAAI,QAAUgM,EAAM,KAAO;AAAA,EAC7CpC,GAAQ,QAAU5J,EAAI;AAAA,EACtB4J,GAAQ,sBAAwB5J,EAAI,KAAOT,EAAM,OAAS;AAAA,EAC1DqK,GAAQ;AAAA,OAAsB5J,EAAI,eAAiBA,EAAI;AAAA;AAAA,GAG3D,OAAA4J,GAAQ,IACD,IAAI,SAASoD,EAAK,KAAK,EAAGpD,CAAI,EAAE,MAAM,OAAQ+B,CAAM,CAC7D,EACApG,EAAW,UAAU,QAAU,SAASoD,EAAUtC,EAAMhH,EAAM,CAC5D,GAAI,CAACqM,GAAkB,KAAMrF,EAAM,CAAChH,EAAK,gBAAgB,EACvD,MAAM,IAAI,MAAMZ,EAAG,wBAAyB4H,EAAK,IAAI,CAAC,EAExD,IAAI4G,EAAU,KAAK,OACfC,EAAU7G,EAAK,OACf8G,EAAarI,EAAM,MAAMoI,EAAS,SAASlJ,GAAI,CACjD,OAAOA,GAAG,IACZ,CAAC,EACGqI,EAAY,CAAC,EACbxD,EAAY,CAAC,EACb7I,EAAGmD,EAAI6I,EAAOnL,EAAMD,EAAOwM,EAASC,EACxC,IAAKrN,EAAI,EAAGA,EAAIiN,EAAQ,OAAQjN,IAAK,CAInC,IAHAgM,EAAQiB,EAAQjN,CAAC,EACjBY,EAAQ0M,GAAWtB,CAAK,EACxBoB,EAAU,CAAC,EACNjK,EAAK,EAAGA,EAAKvC,EAAM,OAAQuC,IAC9BtC,EAAOD,EAAMuC,CAAE,EACXgK,EAAWtM,CAAI,GACjBuM,EAAQ,KAAKvM,CAAI,EAGrB,GAAIuM,EAAQ,OAAS,EACnB,MAAM,IAAI,MACR3O,EAAG,oCAAqC4H,EAAK,KAAM2F,EAAM,KAAMoB,CAAO,CACxE,EAEF,GAAKA,EAAQ,OAQXvM,EAAOuM,EAAQ,CAAC,EAChBC,EAAgB,CACd,SAAUrB,EAAM,KAAK,eAAemB,EAAWtM,CAAI,EAAE,KAAMxB,CAAI,EAC/D,KAAM,IAAM2M,EAAM,IAEpB,EACKnD,EAAUhI,CAAI,EAGjBgI,EAAUhI,CAAI,EAAE,KAAKwM,CAAa,EAFlCxE,EAAUhI,CAAI,EAAI,CAACwM,CAAa,EAIlChB,EAAU,KAAKgB,EAAc,IAAI,MAnBd,CACnB,GAAIrB,EAAM,aAAa,IAAM,OAC3B,MAAM,IAAI,MACRvN,EAAG,2CAA4C4H,EAAK,KAAM2F,EAAM,IAAI,CACtE,EAEFK,EAAU,KAAK,WAAW,CAC5B,CAcF,CACA,IAAIkB,EAAY,GAEhB,IADAvN,EAAIkN,EAAQ,OACLlN,GAAK6I,EAAUqE,EAAQ,EAAElN,CAAC,EAAE,IAAI,IAAM,QAC3CuN,EAAYvN,EAEd,IAAIwN,EAAQ,KAAK,oBAAoB,EACjCR,GAAO,CAACQ,CAAK,EACb7B,GAAS,CAAC,KAAK,iBAAiB,EAChC/B,GAAO,yBAA2B4D,EAAQ;AAAA,EAC9C,IAAKxN,EAAI,EAAGA,EAAIkN,EAAQ,OAAQlN,IAM9B,GALIA,IAAMuN,IACR3D,IAAQ;AAAA,GAEVoC,EAAQ3F,EAAK,OAAOrG,CAAC,EACrBa,EAAOmL,EAAM,KACTnD,EAAUhI,CAAI,IAAM,OACtB+I,IAAQ,CAAC2D,GAAavN,GAAKuN,EAAY,OAAS,KAChDP,GAAK,KAAK,IAAMhN,CAAC,EACjB2L,GAAO,KAAKK,EAAM,IAAI,EACtBpC,IAAQ,IAAM5J,EAAI;AAAA,MAGlB,KADAmD,EAAK0F,EAAUhI,CAAI,EAAE,OACdsC,KACLyG,IAAQ,CAAC2D,GAAavN,GAAKuN,EAAY,OAAS,KAChDP,GAAK,KAAK,IAAMhN,EAAI,IAAMmD,CAAE,EAC5BkK,EAAgBxE,EAAUhI,CAAI,EAAEsC,CAAE,EAClCwI,GAAO,KAAK0B,EAAc,QAAQ,EAClCzD,IAAQ,OAASyD,EAAc,KAAO,MACtCzD,IAAQ,IAAM5J,EAAI,IAAMmD,EAAK,MAAQA,EAAK,OAAS,QAAU;AAAA,EAI/D,CAACoK,IACH3D,IAAQ;AAAA,GAEVA,IAAQ,gBAAkB4D,EAAQ,IAAMnB,EAAU,KAAK,EAAI;AAAA,IAC3D1D,EAAS,MAAQ,IAAI,SAASqE,GAAK,KAAK,EAAGpD,EAAI,EAAE,MAAM,OAAQ+B,EAAM,CACvE,EACApG,EAAW,UAAU,OAAS,SAAS0E,EAAMC,EAAM,CACjD,IAAIuD,EAAS,KAAK,OACdzN,EAAGC,EAAG+L,EAAO0B,EAAOrH,EACxB,IAAKrG,EAAI,EAAGC,EAAIwN,EAAO,OAAQzN,EAAIC,EAAGD,IAIpC,GAHAgM,EAAQyB,EAAOzN,CAAC,EAChB0N,EAAQ1B,EAAM,OACd3F,EAAO2F,EAAM,KACT0B,GAEF,GADAA,GAASrH,EAAK,OAAO4D,EAAMC,CAAI,EAC3BwD,EACF,OAAOA,OAGTrH,EAAK,MAAM4D,CAAI,EACf5D,EAAK,MAAM6D,CAAI,EAGnB,MAAO,EACT,EACA3E,EAAW,UAAU,aAAe,SAASnF,EAAK,CAChD,IAAI4K,EAAO,OAAO,KAAK5K,CAAG,EACtBJ,EAAGC,EACP,IAAKD,EAAI,EAAGC,EAAI+K,EAAK,OAAQhL,EAAIC,EAAGD,IAClC,GAAI,CAAC,KAAK,cAAcgL,EAAKhL,CAAC,CAAC,EAC7B,MAAO,GAGX,MAAO,EACT,EACAuF,EAAW,UAAU,MAAQ,SAAS8B,EAAKhI,EAAM,CAC/C,IAAIkK,EAAOlK,GAAQA,EAAK,UACpBsM,EAAS,CAAC,MAAM,EAChB3L,EAAGC,EAAG+L,EAAOzM,EACjB,IAAKS,EAAI,EAAGC,EAAI,KAAK,OAAO,OAAQD,EAAIC,EAAGD,IACzCgM,EAAQ,KAAK,OAAOhM,CAAC,EACrBT,EAAQ8H,EAAI2E,EAAM,IAAI,EAClBzM,IAAU,QAAUyM,EAAM,eAAe,cAAc,IACzDzM,EAAQyM,EAAM,aAAa,IAEzB3M,GAAQ,CAACA,EAAK,MAAQE,IAAU,UAClCA,EAAQyM,EAAM,KAAK,MAAMzM,EAAOF,CAAI,GAElCkK,IACFhK,EAAQgK,EAAKyC,EAAOzM,EAAO,IAAI,GAEjCoM,EAAO,KAAKpM,CAAK,EAEnB,IAAIqN,EAAS,KAAK,kBAClB,OAAO,IAAKA,EAAO,KAAK,MAAMA,EAAQjB,CAAM,EAC9C,EACApG,EAAW,UAAU,OAAS,SAASa,EAAQ/G,EAAM,CACnD+G,EAAO,OAAS,KAAK,OAAO,IAAI,SAAS4F,EAAO,CAC9C,IAAI2B,EAAY3B,EAAM,KAClB4B,EAAc,CAChB,KAAM5B,EAAM,KACZ,KAAM2B,EAAU,OAAOtO,CAAI,CAC7B,EACA,GAAIA,EAAK,YAAa,CACpB,IAAIgI,EAAM2E,EAAM,aAAa,EACzB3E,IAAQ,SACVuG,EAAY,QAAaD,EAAU,MAAMtG,EAAK,CAAE,OAAQ,EAAG,KAAM,CAAE,CAAC,GAEtE,IAAIwG,EAAa7B,EAAM,MACnB6B,IAAe,cACjBD,EAAY,MAAQC,GAEtB,IAAIC,EAAe9B,EAAM,QACrB8B,EAAa,SACfF,EAAY,QAAUE,GAExB,IAAIC,EAAW/B,EAAM,IACjB+B,IAAa,SACfH,EAAY,IAAMG,EAEtB,CACA,OAAOH,CACT,CAAC,CACH,EACArI,EAAW,UAAU,QAAU,SAAS0F,EAAMC,EAAM,CAClD,IAAIuC,EAAS,KAAK,OACdzN,EAAGC,EAAG+L,EAAOnL,EAAM6M,EAAOrH,EAC9B,IAAKrG,EAAI,EAAGC,EAAIwN,EAAO,OAAQzN,EAAIC,EAAGD,IAKpC,GAJAgM,EAAQyB,EAAOzN,CAAC,EAChBa,EAAOmL,EAAM,KACb0B,EAAQ1B,EAAM,OACd3F,EAAO2F,EAAM,KACT0B,IACFA,GAASrH,EAAK,QAAQ4E,EAAKpK,CAAI,EAAGqK,EAAKrK,CAAI,CAAC,EACxC6M,GACF,OAAOA,EAIb,MAAO,EACT,EACAnI,EAAW,UAAU,OAAS,UAAW,CACvC,IAAIkI,EAAS,KAAK,OAAO,IAAI,SAASzJ,EAAI,CACxC,OAAOA,EAAG,KAAK,OAAO,CACxB,CAAC,EACDyJ,EAAO,QAAQ,MAAM,EACrB,IAAIb,EAAS,KAAK,kBAClB,OAAO,IAAKA,EAAO,KAAK,MAAMA,EAAQa,CAAM,EAC9C,EACAlI,EAAW,UAAU,MAAQ,SAAS1E,EAAM,CAC1C,OAAO,KAAK,cAAcA,CAAI,CAChC,EACA0E,EAAW,UAAU,SAAWA,EAAW,UAAU,MACrDA,EAAW,UAAU,UAAY,UAAW,CAC1C,OAAO,KAAK,MACd,EACAA,EAAW,UAAU,qBAAuB,UAAW,CACrD,OAAO,KAAK,iBACd,EACA,OAAO,eAAeA,EAAW,UAAW,WAAY,CACtD,WAAY,GACZ,IAAK,UAAW,CACd,OAAO,KAAK,SAAW,QAAU,QACnC,CACF,CAAC,EACD,SAASyI,EAAY5H,EAAQ/G,EAAM,CACjC,KAAK,iBAAmB+G,EAAO,YAC/BD,EAAK,KAAK,IAAI,EACdF,GAAe,KACf,GAAI,CACF,KAAK,gBAAkBE,EAAK,UAAUC,EAAQ/G,CAAI,CACpD,QAAE,CACA4G,GAAe,KACf,IAAIhG,EAAIiG,EAAiB,OACrBjG,GAAKiG,EAAiBjG,EAAI,CAAC,EAAE,CAAC,IAAM,MACtCiG,EAAiB,IAAI,CAEzB,CACIC,EAAK,OAAO,KAAK,eAAgB,OAAO,EAC1C,KAAK,mBAAqB,KAAK,eAAe,mBAE9C,KAAK,mBAAqB,KAAK,eAAe,yBAAyB,CAE3E,CACAhI,EAAK,SAAS6P,EAAa7H,CAAI,EAC/B,OAAO,eAAe6H,EAAY,UAAW,WAAY,CACvD,WAAY,GACZ,IAAK,UAAW,CACd,MAAO,WAAa,KAAK,gBAC3B,CACF,CAAC,EACD,OAAO,eAAeA,EAAY,UAAW,iBAAkB,CAC7D,WAAY,GACZ,IAAK,UAAW,CACd,GAAI,KAAK,gBACP,OAAO,KAAK,gBAEd,IAAIhO,EAAGC,EAAGJ,EACV,IAAKG,EAAI,EAAGC,EAAIiG,EAAiB,OAAQlG,EAAIC,EAAGD,IAE9C,GADAH,EAAMqG,EAAiBlG,CAAC,EACpBH,EAAI,CAAC,IAAM,KACb,OAAOA,EAAI,CAAC,CAGlB,CACF,CAAC,EACDmO,EAAY,UAAU,kBAAoB,UAAW,CACnD,OAAO,KAAK,cACd,EACAA,EAAY,UAAU,MAAQ,SAAS5J,EAAK,CAC1C,OAAO,KAAK,WAAW,KAAK,eAAe,MAAMA,CAAG,CAAC,CACvD,EACA4J,EAAY,UAAU,OAAS,SAAS5J,EAAKoE,EAAK,CAChD,KAAK,eAAe,OAAOpE,EAAK,KAAK,SAASoE,CAAG,CAAC,CACpD,EACAwF,EAAY,UAAU,OAAS,SAASxF,EAAK3F,EAAO0G,EAAMC,EAAM,CAC9D,GAAI,CACF,IAAInC,EAAM,KAAK,SAASmB,CAAG,CAC7B,MAAc,CACd,CACA,OAAInB,IAAQ,QACNkC,GACFA,EAAKf,EAAK,IAAI,EAET,IAEF,KAAK,eAAe,OAAOnB,EAAKxE,EAAO0G,EAAMC,CAAI,CAC1D,EACAwE,EAAY,UAAU,MAAQ,SAASxF,EAAKnJ,EAAM,CAChD,IAAIgH,EAAO,KAAK,eAChB,OAAQhH,GAAQA,EAAK,OAAQ,CAC3B,IAAK,GACH,OAAOgH,EAAK,MAAM,KAAK,SAASmC,CAAG,EAAGnJ,CAAI,EAC5C,IAAK,GACH,OAAO,KAAK,WAAWgH,EAAK,MAAMmC,EAAKnJ,CAAI,CAAC,EAC9C,QACE,OAAO,KAAK,WAAWgH,EAAK,MAAM,KAAK,SAASmC,CAAG,EAAGnJ,CAAI,CAAC,CAC/D,CACF,EACA2O,EAAY,UAAU,QAAU,SAASrF,EAAUtC,EAAMhH,EAAM,CAC7D,IAAI4O,EAAa,KAAK,SAAS5H,EAAMhH,CAAI,EACrC4O,IACFtF,EAAS,MAAQ,SAASvE,EAAK,CAC7B,OAAO6J,EAAW5H,EAAK,MAAMjC,CAAG,CAAC,CACnC,EAEJ,EACA4J,EAAY,UAAU,QAAU,SAASE,EAAMC,EAAM,CACnD,IAAIlD,EAAO,KAAK,SAASiD,CAAI,EACzBhD,EAAO,KAAK,SAASiD,CAAI,EAC7B,OAAO,KAAK,eAAe,QAAQlD,EAAMC,CAAI,CAC/C,EACA8C,EAAY,UAAU,OAAS,UAAW,CACxC,OAAO,KAAK,WAAW,KAAK,eAAe,OAAO,CAAC,CACrD,EACAA,EAAY,UAAU,OAAS,SAAS5H,EAAQ/G,EAAM,CACpD,IAAIgH,EAAO,KAAK,eACZ+H,EAAY/H,EAAK,OAAS,QAAUhH,EAAK,QAAQgH,EAAK,IAAI,EAC9D,OAAAD,EAASC,EAAK,OAAOhH,CAAI,EACrB,CAAC+O,GAAa/O,EAAK,cACjB,OAAO+G,GAAU,WACnBA,EAAS,CAAE,KAAMA,CAAO,GAE1BA,EAAO,YAAc,KAAK,iBAC1B,KAAK,QAAQA,CAAM,GAEdA,CACT,EACA4H,EAAY,UAAU,MAAQ,SAAS5J,EAAK,CAC1C,KAAK,eAAe,MAAMA,CAAG,CAC/B,EACA4J,EAAY,UAAU,QAAU,UAAW,CAC3C,EACAA,EAAY,UAAU,WAAalJ,EAAM,iBACzCkJ,EAAY,UAAU,SAAWlJ,EAAM,iBACvCkJ,EAAY,UAAU,SAAWlJ,EAAM,iBACvC,SAASyF,EAAiBF,EAAU,CAClC,KAAK,kBAAoB,OACzBP,EAAc,KAAK,KAAM,EAAI,EAC7B,KAAK,UAAY,CAAC,CAACO,CACrB,CACAlM,EAAK,SAASoM,EAAkB5E,CAAQ,EACxC4E,EAAiB,UAAU,SAAW,gBACtCA,EAAiB,UAAU,OAAS,SAASlD,EAAKxE,EAAO0G,EAAM,CAC7D,IAAI3F,EAAK,KAAK,SAASyD,CAAG,EAC1B,MAAI,CAACzD,GAAM2F,GACTA,EAAKlC,EAAK,IAAI,EAETzD,CACT,EACA2G,EAAiB,UAAU,MAAQ,SAASnG,EAAK,CAC/C,IAAIT,EAAK5D,EAQT,GAPI,KAAK,WACPA,EAAMqE,EAAI,IACVA,EAAI,SAAS,EACbT,EAAMS,EAAI,IAAI,MAAMrE,EAAKqE,EAAI,GAAG,GAEhCT,EAAMS,EAAI,gBAAgBA,CAAG,EAE3BA,EAAI,QAAQ,EACd,OAAO,KAAK,YAAYT,CAAG,CAE/B,EACA4G,EAAiB,UAAU,OAAS,SAASnG,EAAKiD,EAAK,CAChD,KAAK,SAASA,CAAG,GACpB2C,GAAkB3C,EAAK,IAAI,EAE7B,IAAI1D,EAAM,KAAK,UAAU0D,CAAG,EACxB,KAAK,UACPjD,EAAI,WAAWT,CAAG,EAElBS,EAAI,cAAcT,CAAG,CAEzB,EACA4G,EAAiB,UAAU,MAAQ,SAASlD,EAAKhI,EAAM,CACrD,OAAQA,GAAQA,EAAK,OAAQ,CAC3B,IAAK,GACH,OAAO,KAAK,QAAQgI,CAAG,EACzB,IAAK,GACH,OAAO,KAAK,UAAUA,CAAG,EAC3B,QACE,OAAO,KAAK,UAAU,KAAK,QAAQA,CAAG,CAAC,CAC3C,CACF,EACAkD,EAAiB,UAAU,OAAS,UAAW,CAC7C,MAAO,MACT,EACAA,EAAiB,UAAU,QAAU,SAAS5B,EAAUtC,EAAM,CAC5D,IAAIwG,EAAO,KACX,OAAQxG,EAAK,SAAU,CACrB,IAAK,MACHsC,EAAS,MAAQ,SAASvE,EAAK,CAC7B,OAAOyI,EAAK,UAAUxG,EAAK,MAAMjC,CAAG,CAAC,CACvC,EACA,MACF,IAAK,gBACL,IAAK,OACHuE,EAAS,MAAQ,SAASvE,EAAK,CAC7B,OAAOyI,EAAK,MAAMzI,CAAG,CACvB,CACJ,CACF,EACAmG,EAAiB,UAAU,OAAS,UAAW,CAC7C,OAAO,KAAK,UAAU5E,EAAS,UAAU,OAAO,CAAC,CACnD,EACA4E,EAAiB,UAAU,YAAczF,EAAM,iBAC/CyF,EAAiB,UAAU,UAAYzF,EAAM,iBAC7CyF,EAAiB,UAAU,UAAYzF,EAAM,iBAC7CyF,EAAiB,UAAU,QAAUzF,EAAM,iBAC3CyF,EAAiB,UAAU,SAAWzF,EAAM,iBAC5CyF,EAAiB,UAAU,QAAUzF,EAAM,iBAC3C,SAASmH,EAAM7F,EAAQ/G,EAAM,CAC3B,IAAIwB,EAAOuF,EAAO,KAClB,GAAI,OAAOvF,GAAQ,UAAY,CAACiE,EAAM,YAAYjE,CAAI,EACpD,MAAM,IAAI,MAAMpC,EAAG,yBAA0BoC,CAAI,CAAC,EAEpD,KAAK,KAAOA,EACZ,KAAK,KAAOsF,EAAK,UAAUC,EAAO,KAAM/G,CAAI,EAC5C,KAAK,QAAU+G,EAAO,SAAW,CAAC,EAClC,KAAK,IAAMA,EAAO,MAAQ,OAAS,GAAKA,EAAO,IAAM,OACrD,KAAK,OAAS,SAASsH,EAAO,CAC5B,OAAQA,EAAO,CACb,IAAK,YACH,MAAO,GACT,IAAK,aACH,MAAO,GACT,IAAK,SACH,MAAO,GACT,QACE,MAAM,IAAI,MAAMjP,EAAG,oBAAqBiP,CAAK,CAAC,CAClD,CACF,EAAEtH,EAAO,QAAU,OAAS,YAAcA,EAAO,KAAK,EACtD,IAAI7G,EAAQ6G,EAAO,QACnB,GAAI7G,IAAU,OAAQ,CACpB,IAAI8G,EAAO,KAAK,KACZgB,EACJ,GAAI,CACFA,EAAMhB,EAAK,MAAM9G,EAAO,CAAE,OAAQ,EAAG,KAAM,CAAE,CAAC,CAChD,OAASwH,EAAK,CACZ,IAAIsH,EAAM5P,EAAG,qCAAsCc,EAAOwH,EAAI,OAAO,EACrE,MAAIZ,EAAK,OAAOE,EAAM,OAAO,IAC3BgI,GAAO5P,EACL,2DACA4H,EAAK,MAAM,CAAC,CACd,GAEI,IAAI,MAAMgI,CAAG,CACrB,CACI7H,GAAYH,EAAK,QAAQ,GAAKA,EAAK,WAAa,QAClD,KAAK,aAAe,UAAW,CAC7B,OAAOgB,CACT,EAEA,KAAK,aAAe,UAAW,CAC7B,OAAOhB,EAAK,MAAMgB,CAAG,CACvB,CAEJ,CACA,OAAO,OAAO,IAAI,CACpB,CACA4E,EAAM,UAAU,aAAe,UAAW,CAC1C,EACA,OAAO,eAAeA,EAAM,UAAW,QAAS,CAC9C,WAAY,GACZ,IAAK,UAAW,CACd,MAAO,CAAC,aAAc,SAAU,WAAW,EAAE,KAAK,OAAS,CAAC,CAC9D,CACF,CAAC,EACDA,EAAM,UAAU,WAAa,UAAW,CACtC,OAAO,KAAK,OACd,EACAA,EAAM,UAAU,WAAaA,EAAM,UAAU,aAC7CA,EAAM,UAAU,QAAU,UAAW,CACnC,OAAO,KAAK,IACd,EACAA,EAAM,UAAU,SAAW,UAAW,CACpC,OAAO,KAAK,KACd,EACAA,EAAM,UAAU,QAAU,UAAW,CACnC,OAAO,KAAK,IACd,EACA,SAASrD,EAAS0F,EAAY,CAC5B,KAAK,YAAcA,EACnB,KAAK,MAAQ,KACb,KAAK,UAAY,KACjB,KAAK,KAAO,EACZ,KAAK,QAAU,KACf,KAAK,WAAa,IACpB,CACA1F,EAAS,UAAU,MAAQzC,EAAK,UAAU,MAC1CyC,EAAS,UAAU,QAAU,UAAW,CACtC,MAAO,YACT,EACA,SAAStC,IAAO,CACd,KAAK,IAAM,MACb,CACA,SAAS0C,EAAU3C,EAAMjC,EAAKuE,EAAU4F,EAAM,CAC5C,GAAI5F,EAAU,CACZ,GAAIA,EAAS,cAAgBtC,EAC3B,MAAM,IAAI,MAAM,kBAAkB,EAEpC,OAAOsC,EAAS,MAAMvE,EAAKmK,CAAI,CACjC,KACE,QAAOlI,EAAK,MAAMjC,CAAG,CAEzB,CACA,SAASkJ,GAAWlN,EAAK,CACvB,IAAIQ,EAAQ,CAAC,EACTR,EAAI,OACNQ,EAAMR,EAAI,IAAI,EAAI,IAEpB,IAAIoO,EAAUpO,EAAI,QACdJ,EAAGC,EACP,IAAKD,EAAI,EAAGC,EAAIuO,EAAQ,OAAQxO,EAAIC,EAAGD,IACrCY,EAAM4N,EAAQxO,CAAC,CAAC,EAAI,GAEtB,OAAO,OAAO,KAAKY,CAAK,CAC1B,CACA,SAAS8K,GAAkB+C,EAAQC,EAAQC,EAAQ,CACjD,GAAI,CAACD,EAAO,KACV,MAAO,GAET,IAAI7N,EAAO8N,EAASD,EAAO,KAAO5J,EAAM,UAAU4J,EAAO,IAAI,EACzDF,EAAUlB,GAAWmB,CAAM,EAC3BzO,EAAGC,EAAG2O,EACV,IAAK5O,EAAI,EAAGC,EAAIuO,EAAQ,OAAQxO,EAAIC,EAAGD,IAKrC,GAJA4O,EAAQJ,EAAQxO,CAAC,EACZ2O,IACHC,EAAQ9J,EAAM,UAAU8J,CAAK,GAE3BA,IAAU/N,EACZ,MAAO,GAGX,MAAO,EACT,CACA,SAAS2F,GAAYW,EAAU,CAC7B,IAAId,EAAOpB,EAAMkC,CAAQ,EACzB,OAAOd,GAAQA,EAAK,qBAAqByD,CAC3C,CACA,SAAST,GAAalC,EAAU,CAC9B,GAAIA,IAAa,QACfA,EAAW,aACN,CACL,IAAI7F,EAAQ,iBAAiB,KAAK6F,CAAQ,EACtC7F,IACEA,EAAM,CAAC,IAAM,QACf6F,EAAW7F,EAAM,CAAC,EAAI,QAEtB6F,EAAW7F,EAAM,CAAC,EAGxB,CACA,OAAOwD,EAAM,WAAWqC,CAAQ,EAAI,MACtC,CACA,SAASyE,GAAcxH,EAAK,CAC1B,IAAIP,EAAIO,EAAI,SAAS,EACrB,OAAIP,EAAI,IACNA,EAAI,CAACA,EACLO,EAAI,SAAS,GAERP,CACT,CACA,SAASsG,GAAWtG,EAAG,CACrB,OAAOA,GAAK,mBAAqBA,GAAK,gBACxC,CACA,SAAS2G,GAAapK,EAAK,CACzB,OAAOA,GAAOA,EAAI,OAAS,UAAY,MAAM,QAAQA,EAAI,IAAI,CAC/D,CACA,SAAS4J,GAAkB3C,EAAKhB,EAAM,CACpC,MAAM,IAAI,MAAM5H,EAAG,iBAAkB4H,EAAK,OAAO,EAAGgB,CAAG,CAAC,CAC1D,CACA,SAASd,GAAa1F,EAAMkL,EAAI,CAC9B,IAAI8C,EAAc/J,EAAM,UAAUjE,CAAI,EACtC,OAAO2F,GAAYqI,CAAW,EAAIA,EAAc/J,EAAM,QAAQjE,EAAMkL,CAAE,CACxE,CACA,SAAShE,GAAc1B,EAAM,CAC3B,IAAIc,EAAWd,EAAK,SACpB,OAAQc,EAAU,CAChB,IAAK,SACL,IAAK,QACL,IAAK,MACL,IAAK,OACH,MAAO,SACT,IAAK,QACL,IAAK,QACH,MAAO,SACT,IAAK,OACH,MAAO,SACT,IAAK,MACL,IAAK,QACL,IAAK,SACH,MAAO,SACT,QACE,OAAOA,CACX,CACF,CACA,SAASwD,GAAetD,EAAK,CAC3B,GAAIA,IAAQ,KACV,MAAO,OAET,IAAIS,EAAS,OAAOT,EACpB,GAAIS,IAAW,SAAU,CACvB,GAAI,MAAM,QAAQT,CAAG,EACnB,MAAO,QACF,GAAIhJ,EAAQ,SAASgJ,CAAG,EAC7B,MAAO,QAEX,CACA,OAAOS,CACT,CACA,SAASZ,GAAYD,EAAO,CAC1B,IAAIgB,EAAU,CAAC,EACXjI,EAAGC,EAAG6H,EAAQzB,EAClB,IAAKrG,EAAI,EAAGC,EAAIgH,EAAM,OAAQjH,EAAIC,EAAGD,IAEnC,GADAqG,EAAOY,EAAMjH,CAAC,EACV,CAACmG,EAAK,OAAOE,EAAM,SAAS,EAAG,CAEjC,GADAyB,EAASC,GAAc1B,CAAI,EACvB4B,EAAQH,CAAM,EAChB,MAAO,GAETG,EAAQH,CAAM,EAAI,EACpB,CAEF,MAAO,EACT,CACA,SAASK,GAAelB,EAAO,CAC7B,IAAI6H,EAAY,CAAC,MAAO,OAAQ,QAAS,QAAQ,EAC7CC,EAAa,GACbC,EAAY,KACZhP,EAAGC,EAAGoG,EAAMyC,EAChB,IAAK9I,EAAI,EAAGC,EAAIgH,EAAM,OAAQjH,EAAIC,EAAGD,IACnCqG,EAAOY,EAAMjH,CAAC,EACd8I,EAAQgG,EAAU,QAAQzI,EAAK,QAAQ,EACnCyC,EAAQiG,IACVA,EAAajG,EACbkG,EAAY3I,GAGhB,OAAO2I,CACT,CACA,SAAS5G,GAAenB,EAAO5H,EAAM,CACnC,IAAIoM,EAAU,CAAC,EACXzL,EAAGC,EAAGoG,EAAM4I,EAChB,IAAKjP,EAAI,EAAGC,EAAIgH,EAAM,OAAQjH,EAAIC,EAAGD,IAAK,CAExC,GADAqG,EAAOY,EAAMjH,CAAC,EACVqG,EAAK,WAAa,SACpB,OAAOA,EAET4I,EAAc5I,EAAK,QACnB,IAAIlD,EAAIV,EACR,IAAKU,EAAK,EAAGV,EAAKwM,EAAY,OAAQ9L,EAAKV,EAAIU,IAC7CsI,EAAQwD,EAAY9L,CAAE,CAAC,EAAI,EAE/B,CACA,OAAOgD,EAAK,UAAU,CAAE,KAAM,OAAQ,QAAS,OAAO,KAAKsF,CAAO,CAAE,EAAGpM,CAAI,CAC7E,CACA,SAASgJ,GAAepB,EAAO5H,EAAM,CACnC,IAAIV,EAAO,GACPqB,EAAGC,EAAGoG,EACV,IAAKrG,EAAI,EAAGC,EAAIgH,EAAM,OAAQjH,EAAIC,EAAGD,IAAK,CAExC,GADAqG,EAAOY,EAAMjH,CAAC,EACVqG,EAAK,WAAa,QACpB,OAAOA,EAEL1H,IAAS,GACXA,EAAO0H,EAAK,KACHA,EAAK,OAAS1H,IACvBA,EAAO,GAEX,CACA,OAAOA,EAAO,EAAIwH,EAAK,UAAU,QAAS9G,CAAI,EAAI4H,EAAM,CAAC,CAC3D,CACA,SAASsB,GAAetB,EAAO5H,EAAM,CACnC,IAAI6P,EAAW,CAAC,EACZC,EAAa,CAAC,EACdC,EAAgB,CAAC,EACjBC,EAAgB,GAChBrP,EAAGC,EAAGoG,EAAMoH,EAChB,IAAKzN,EAAI,EAAGC,EAAIgH,EAAM,OAAQjH,EAAIC,EAAGD,IAEnC,GADAqG,EAAOY,EAAMjH,CAAC,EACVqG,EAAK,WAAa,MACpBgJ,EAAgB,GAChBH,EAAS,KAAK7I,EAAK,UAAU,MACxB,CACLoH,EAASpH,EAAK,OACd,IAAIlD,EAAIV,EAAIuJ,EAAOsD,EAAcC,EAAW5B,EAC5C,IAAKxK,EAAK,EAAGV,EAAKgL,EAAO,OAAQtK,EAAKV,EAAIU,IACxC6I,EAAQyB,EAAOtK,CAAE,EACjBoM,EAAYvD,EAAM,KAClB2B,EAAY3B,EAAM,KAClBkD,EAAS,KAAKvB,CAAS,EACnB0B,IACGF,EAAWI,CAAS,IACvBJ,EAAWI,CAAS,EAAI,CAAC,GAE3BJ,EAAWI,CAAS,EAAE,KAAK5B,CAAS,EACpC2B,EAAetD,EAAM,aAAa,EAC9BsD,IAAiB,SACnBF,EAAcG,CAAS,EAAID,GAInC,CAEF,GAAID,EAAe,CACjB,IAAI/H,EAAa,OAAO,KAAK6H,CAAU,EACvC,IAAKnP,EAAI,EAAGC,EAAIqH,EAAW,OAAQtH,EAAIC,EAAGD,IACxCuP,EAAYjI,EAAWtH,CAAC,EACpBmP,EAAWI,CAAS,EAAE,OAAStI,EAAM,QAAUmI,EAAcG,CAAS,IAAM,SAC1ElQ,GAAQA,EAAK,eACfgQ,EAAgB,IAEhBF,EAAWI,CAAS,EAAE,QAAQpJ,EAAK,UAAU,OAAQ9G,CAAI,CAAC,EAC1D+P,EAAcG,CAAS,EAAI,MAInC,CACA,IAAInJ,GACJ,OAAIiJ,EACFjJ,GAAS,CACP,KAAM,SACN,OAAQkB,EAAW,IAAI,SAAStI,GAAG,CACjC,IAAIwQ,GAAarJ,EAAK,SAASgJ,EAAWnQ,EAAC,EAAGK,CAAI,EAC9CoQ,GAAgBL,EAAcpQ,EAAC,EACnC,GAAIyQ,KAAkB,QAAU,CAACD,GAAW,SAAS,QAAQ,OAAO,EAAG,CACrE,IAAIE,GAAaF,GAAW,MAAM,MAAM,EACpCjM,GAAIgB,GACR,IAAKhB,GAAK,EAAGgB,GAAKmL,GAAW,OAAQnM,GAAKgB,IACpC,CAAAmL,GAAWnM,EAAE,EAAE,QAAQkM,EAAa,EADIlM,KAC5C,CAIF,GAAIA,GAAK,EAAG,CACV,IAAIqE,GAAY8H,GAAW,CAAC,EAC5BA,GAAW,CAAC,EAAIA,GAAWnM,EAAE,EAC7BmM,GAAWnM,EAAE,EAAIqE,GACjB4H,GAAarJ,EAAK,UAAUuJ,GAAYrQ,CAAI,CAC9C,CACF,CACA,MAAO,CACL,KAAML,GACN,KAAMwQ,GACN,QAAWJ,EAAcpQ,EAAC,CAC5B,CACF,CAAC,CACH,EAEAoH,GAAS,CACP,KAAM,MACN,OAAQD,EAAK,SAAS+I,EAAU7P,CAAI,CACtC,EAEK8G,EAAK,UAAUC,GAAQ/G,CAAI,CACpC,CACAvB,EAAO,QAAU,CACf,KAAAqI,EACA,cAAA4B,GACA,eAAA4C,GACA,YAAAnE,GACA,SAAU,UAAW,CACnB,IAAIS,EAAQ,CACV,YAAA+G,EACA,mBAAAnH,EACA,iBAAAD,CACF,EACIkI,EAAY,OAAO,KAAK7J,CAAK,EAC7BjF,EAAGC,EAAGkH,EACV,IAAKnH,EAAI,EAAGC,EAAI6O,EAAU,OAAQ9O,EAAIC,EAAGD,IACvCmH,EAAW2H,EAAU9O,CAAC,EACtBiH,EAAMoC,GAAalC,CAAQ,CAAC,EAAIlC,EAAMkC,CAAQ,EAEhD,OAAOF,CACT,EAAE,CACJ,CACF,CACF,CAAC,EAGG0I,GAAqBjT,GAAW,CAClC,sCAAsCmB,EAASC,EAAQ,CACrD,aACA,IAAImJ,EAAQpC,GAAc,EACtBC,EAAQlH,GAAc,EACtBG,EAASC,GACT4R,EAASC,GACT1R,EAAOC,GACP0R,EAAOC,GACP1R,EAAUN,EAAO,OACjBiS,EAAO,CAAE,UAAW,sBAAuB,EAC3CC,EAAYhJ,EAAM,KAAK,UAAU,OAAQ+I,CAAI,EAC7CE,EAAiBjJ,EAAM,KAAK,UAAU,CAAE,KAAM,MAAO,OAAQ,OAAQ,EAAG+I,CAAI,EAC5EG,EAAclJ,EAAM,KAAK,UAAU,CACrC,KAAM,SACN,KAAM,SACN,OAAQ,CACN,CAAE,KAAM,QAAS,KAAM,CAAE,KAAM,QAAS,KAAM,QAAS,KAAM,CAAE,CAAE,EACjE,CAAE,KAAM,OAAQ,KAAMiJ,CAAe,EACrC,CAAE,KAAM,OAAQ,KAAM,CAAE,KAAM,QAAS,KAAM,OAAQ,KAAM,EAAG,CAAE,CAClE,CACF,EAAGF,CAAI,EACHI,GAAanJ,EAAM,KAAK,UAAU,CACpC,KAAM,QACN,KAAM,SACN,OAAQ,CACN,CAAE,KAAM,QAAS,KAAM,MAAO,EAC9B,CAAE,KAAM,OAAQ,KAAM,OAAQ,EAC9B,CAAE,KAAM,OAAQ,KAAM,MAAO,CAC/B,CACF,EAAG+I,CAAI,EACHK,EAAcvL,EAAM,WAAW,MAAM,EACrCrG,EAAKN,EAAK,OACVuF,EAAMoB,EAAM,IAChB,SAASwL,EAAWlK,EAAQ/G,EAAM,CAChCA,EAAOA,GAAQ,CAAC,EAChB,IAAIkR,EAAW,CAAC,CAAClR,EAAK,SACtBuQ,EAAO,OAAO,KAAK,KAAM,CACvB,mBAAoB,CAACW,EACrB,cAAe,EACjB,CAAC,EACD,KAAK,MAAQtJ,EAAM,KAAK,UAAUb,CAAM,EACxC,KAAK,KAAO,IAAI1C,EAAIoB,EAAM,UAAU,CAAC,CAAC,EACtC,KAAK,SAAW,KAChB,KAAK,UAAY,GACjB,KAAK,WAAa0L,EAAaD,EAAU,KAAK,KAAK,EACnD,KAAK,UAAY,GACjB,KAAK,GAAG,SAAU,UAAW,CAC3B,KAAK,UAAY,GACjB,KAAK,MAAM,CACb,CAAC,CACH,CACApS,EAAK,SAASmS,EAAYV,EAAO,MAAM,EACvCU,EAAW,UAAU,OAAS,SAASG,EAAOC,EAAU/T,EAAI,CAC1D,KAAK,SAAWA,EAChB,IAAIyH,EAAM,KAAK,KACfA,EAAI,IAAM/F,EAAQ,OAAO,CAAC+F,EAAI,IAAI,MAAMA,EAAI,GAAG,EAAGqM,CAAK,CAAC,EACxDrM,EAAI,IAAM,EACN,KAAK,YACP,KAAK,UAAY,GACjB,KAAK,MAAM,EAEf,EACAkM,EAAW,UAAU,MAAQ,UAAW,CACtC,KAAK,UAAY,GACjB,IAAIlM,EAAM,KAAK,KACXrE,EAAMqE,EAAI,IACViD,EAAM,KAAK,WAAWjD,CAAG,EACzBA,EAAI,QAAQ,EACd,KAAK,KAAKiD,CAAG,EACH,KAAK,UAOf,KAAK,KAAK,IAAI,GANdjD,EAAI,IAAMrE,EACV,KAAK,UAAY,GACb,KAAK,UACP,KAAK,SAAS,EAKpB,EACA,SAAS4Q,EAAatR,EAAM,CAC1BA,EAAOA,GAAQ,CAAC,EAChB,IAAIkR,EAAW,CAAC,CAAClR,EAAK,SACtBuQ,EAAO,OAAO,KAAK,KAAM,CACvB,cAAe,GAEf,mBAAoB,CAACW,CACvB,CAAC,EACD,KAAK,OAASlR,EAAK,eAAiB,OAAS4H,EAAM,KAAK,UAAU5H,EAAK,YAAY,EAAI,OACvF,KAAK,OAAS,KACd,KAAK,QAAUA,EAAK,OACpB,KAAK,OAAS,OACd,KAAK,WAAaA,EAAK,UACvB,KAAK,KAAO,IAAIqE,EAAIoB,EAAM,UAAU,CAAC,CAAC,EACtC,KAAK,UAAY,IAAIpB,EAAIoB,EAAM,UAAU,CAAC,CAAC,EAC3C,KAAK,YAAc,KACnB,KAAK,WAAa,KAClB,KAAK,UAAYyL,EACjB,KAAK,OAAS,IAAIzL,EAAM,aACxB,KAAK,YAAc,KACnB,KAAK,OAAS,EACd,KAAK,WAAa,OAClB,KAAK,UAAY,GACjB,KAAK,UAAY,GACjB,KAAK,GAAG,SAAU,UAAW,CAC3B,KAAK,UAAY,GACb,KAAK,WACP,KAAK,MAAM,CAEf,CAAC,CACH,CACA3G,EAAK,SAASwS,EAAcf,EAAO,MAAM,EACzCe,EAAa,cAAgB,UAAW,CACtC,MAAO,CACL,KAAQ,SAAShN,EAAKhH,EAAI,CACxBA,EAAG,KAAMgH,CAAG,CACd,EACA,QAAWmM,EAAK,UAClB,CACF,EACAa,EAAa,iBAAmBA,EAAa,cAC7CA,EAAa,UAAU,cAAgB,UAAW,CAChD,IAAIvM,EAAM,KAAK,KACf,GAAIA,EAAI,IAAI,OAASiM,EAAY,OAC/B,MAAO,GAET,GAAI,CAACA,EAAY,OAAOjM,EAAI,IAAI,MAAM,EAAGiM,EAAY,MAAM,CAAC,EAC1D,YAAK,KAAK,QAAS,IAAI,MAAM,qBAAqB,CAAC,EAC5C,GAET,IAAIO,EAAST,EAAY,MAAM/L,CAAG,EAClC,GAAI,CAACA,EAAI,QAAQ,EACf,MAAO,GAET,KAAK,QAAUwM,EAAO,KAAK,YAAY,GAAK,QAAQ,SAAS,EAC7D,IAAIC,EAAS,KAAK,SAAWF,EAAa,iBAAiB,EAE3D,GADA,KAAK,YAAcE,EAAO,KAAK,MAAM,EACjC,CAAC,KAAK,YAAa,CACrB,KAAK,KAAK,QAAS,IAAI,MAAMpS,EAAG,oBAAqB,KAAK,MAAM,CAAC,CAAC,EAClE,MACF,CACA,GAAI,CACF,IAAI2H,EAAS,KAAK,MAAMwK,EAAO,KAAK,aAAa,EAAE,SAAS,CAAC,EACzD,KAAK,aACPxK,EAAS,KAAK,WAAWA,CAAM,GAEjC,KAAK,OAASa,EAAM,KAAK,UAAUb,CAAM,CAC3C,OAASW,EAAK,CACZ,KAAK,KAAK,QAASA,CAAG,EACtB,MACF,CACA,GAAI,CACF,KAAK,WAAayJ,EAAa,KAAK,UAAW,KAAK,OAAQ,KAAK,MAAM,CACzE,OAASzJ,EAAK,CACZ,KAAK,KAAK,QAASA,CAAG,EACtB,MACF,CACA,YAAK,YAAc6J,EAAO,KAC1B,KAAK,KAAK,WAAY,KAAK,OAAQ,KAAK,OAAQA,CAAM,EAC/C,EACT,EACAD,EAAa,UAAU,OAAS,SAASF,EAAOC,EAAU/T,EAAI,CAC5D,IAAIyH,EAAM,KAAK,KAGf,GAFAA,EAAI,IAAM/F,EAAQ,OAAO,CAAC+F,EAAI,IAAKqM,CAAK,CAAC,EACzCrM,EAAI,IAAM,EACN,CAAC,KAAK,cAAc,EAAG,CACzB,QAAQ,SAASzH,CAAE,EACnB,MACF,CACA,KAAK,OAAS,KAAK,YACnB,KAAK,OAAOmI,EAAM,UAAU,CAAC,EAAG4L,EAAU/T,CAAE,CAC9C,EACAgU,EAAa,UAAU,YAAc,SAASF,EAAOC,EAAU/T,EAAI,CACjE,IAAIyH,EAAM,KAAK,KACfA,EAAI,IAAM/F,EAAQ,OAAO,CAAC+F,EAAI,IAAI,MAAMA,EAAI,GAAG,EAAGqM,CAAK,CAAC,EACxDrM,EAAI,IAAM,EAGV,QAFI0M,EAAU,EACVC,EACGA,EAAQC,EAAa5M,CAAG,GAAG,CAChC,GAAI,CAAC,KAAK,YAAY,OAAO2M,EAAM,IAAI,EAAG,CACxC,KAAK,KAAK,QAAS,IAAI,MAAM,qBAAqB,CAAC,EACnD,MACF,CACAD,IACA,KAAK,YACHC,EAAM,KACN,KAAK,qBAAqBA,EAAM,KAAK,OAAQA,EAAM,MAAOE,CAAO,CACnE,CACF,CACAA,EAAQ,EACR,SAASA,GAAU,CACZ,EAAEH,GACLnU,EAAG,CAEP,CACF,EACAgU,EAAa,UAAU,qBAAuB,SAAShS,EAAMuS,EAAOvU,EAAI,CACtE,IAAIkQ,EAAO,KACP/D,EAAQ,KAAK,SACjB,OAAO,SAASqI,EAAOtS,EAAM,CAC3B,GAAIsS,EAAO,CACT,IAAIpK,EAAM,IAAI,MAAMtI,EAAG,+BAAgCoO,EAAK,MAAM,CAAC,EACnE9F,EAAI,MAAQoK,EACZtE,EAAK,KAAK,QAAS9F,CAAG,EACtBpK,EAAG,CACL,MACEkQ,EAAK,KAAK,QAAS,IAAIuE,EAAUF,EAAOrS,EAAK,OAAQF,CAAI,CAAC,EAC1DkO,EAAK,OAAO,KAAK,IAAIwE,EAAUvI,EAAOjK,EAAMlC,EAAIuU,CAAK,CAAC,EAClDrE,EAAK,WACPA,EAAK,MAAM,CAGjB,CACF,EACA8D,EAAa,UAAU,MAAQ,UAAW,CACxC,KAAK,UAAY,GACjB,IAAIvM,EAAM,KAAK,UACf,GAAI,CAAC,KAAK,WAAY,CACpB,IAAIvF,EAAO,KAAK,OAAO,IAAI,EAC3B,GAAI,CAACA,GAAQ,CAACA,EAAK,MAAO,CACpB,KAAK,UACP,KAAK,KAAK,IAAI,EAEd,KAAK,UAAY,GAEfA,GACFA,EAAK,GAAG,EAEV,MACF,CACAA,EAAK,GAAG,EACR,KAAK,WAAaA,EAAK,MACvBuF,EAAI,IAAMvF,EAAK,IACfuF,EAAI,IAAM,CACZ,CACA,KAAK,aACL,IAAIiD,EACJ,GAAI,CAEF,GADAA,EAAM,KAAK,WAAWjD,CAAG,EACrB,CAACA,EAAI,QAAQ,EACf,MAAM,IAAI,MAAM,iBAAiB,CAErC,OAAS2C,EAAK,CACZ,KAAK,WAAa,EAClB,KAAK,KAAK,QAASA,CAAG,EACtB,MACF,CACA,KAAK,KAAKM,CAAG,CACf,EACA,SAASiK,GAAWlL,EAAQ/G,EAAM,CAChCA,EAAOA,GAAQ,CAAC,EAChBuQ,EAAO,UAAU,KAAK,KAAM,CAC1B,mBAAoB,GACpB,cAAe,EACjB,CAAC,EACD,KAAK,MAAQ3I,EAAM,KAAK,UAAUb,CAAM,EACxC,KAAK,YAAc,SAAShC,EAAKiD,EAAK,CACpC,GAAI,CACF,KAAK,MAAM,OAAOjD,EAAKiD,CAAG,CAC5B,OAASN,EAAK,CACZ,KAAK,KAAK,YAAaA,EAAKM,EAAK,KAAK,KAAK,CAC7C,CACF,EACA,KAAK,KAAO,IAAI3D,EAAIoB,EAAM,UAAUzF,EAAK,WAAa,KAAK,CAAC,EAC5D,KAAK,GAAG,YAAa,SAAS0H,EAAK,CACjC,KAAK,KAAK,QAASA,CAAG,CACxB,CAAC,CACH,CACA5I,EAAK,SAASmT,GAAY1B,EAAO,SAAS,EAC1C0B,GAAW,UAAU,WAAa,SAASjK,EAAKqJ,EAAU/T,EAAI,CAC5D,IAAIyH,EAAM,KAAK,KACXT,EAAMS,EAAI,IACVrE,EAAMqE,EAAI,IAEd,GADA,KAAK,YAAYA,EAAKiD,CAAG,EACrB,CAACjD,EAAI,QAAQ,EAAG,CACdrE,GACF,KAAK,KAAKwR,GAAWnN,EAAI,IAAK,EAAGrE,CAAG,CAAC,EAEvC,IAAIqC,EAAMgC,EAAI,IAAMrE,EAChBqC,EAAMuB,EAAI,SACZS,EAAI,IAAMU,EAAM,UAAU,EAAI1C,CAAG,GAEnCgC,EAAI,IAAM,EACV,KAAK,YAAYA,EAAKiD,CAAG,CAC3B,CACA1K,EAAG,CACL,EACA2U,GAAW,UAAU,OAAS,SAAS3U,EAAI,CACzC,IAAIyH,EAAM,KAAK,KACXrE,EAAMqE,EAAI,IACVrE,GACF,KAAK,KAAKqE,EAAI,IAAI,MAAM,EAAGrE,CAAG,CAAC,EAEjCpD,EAAG,CACL,EACA,SAAS6U,EAAapL,EAAQ/G,EAAM,CAClCA,EAAOA,GAAQ,CAAC,EAChBuQ,EAAO,OAAO,KAAK,KAAM,CACvB,cAAe,GAEf,mBAAoB,EACtB,CAAC,EACD,IAAIvJ,EA8BJ,GA7BIY,EAAM,KAAK,OAAOb,CAAM,GAC1BC,EAAOD,EACPA,EAAS,QAETC,EAAOY,EAAM,KAAK,UAAUb,CAAM,EAEpC,KAAK,QAAUA,EACf,KAAK,MAAQC,EACb,KAAK,YAAc,SAASjC,EAAKiD,EAAK,CACpC,GAAI,CACF,KAAK,MAAM,OAAOjD,EAAKiD,CAAG,CAC5B,OAASN,EAAK,CACZ,YAAK,KAAK,YAAaA,EAAKM,EAAK,KAAK,KAAK,EACpC,EACT,CACA,MAAO,EACT,EACA,KAAK,WAAahI,EAAK,WAAa,MACpC,KAAK,KAAO,IAAIqE,EAAIoB,EAAM,UAAU,KAAK,UAAU,CAAC,EACpD,KAAK,QAAUzF,EAAK,OACpB,KAAK,OAASA,EAAK,OAAS,OAC5B,KAAK,YAAc,EACnB,KAAK,YAAcA,EAAK,YAAc,IAAIyF,EAAM,IAAI,EAAE,WAAW,EAAE,EACnE,KAAK,OAAS,IAAIA,EAAM,aACxB,KAAK,SAAW,EAChB,KAAK,UAAY,GACjB,KAAK,YAAc,GACnB,KAAK,UAAY,GACjB,KAAK,UAAYzF,EAAK,UAAY,CAAC,EAC/B,CAAC6Q,EAAe,QAAQ,KAAK,SAAS,EACxC,MAAM,IAAI,MAAM,kBAAkB,EAEpC,IAAIuB,EAAQ,KAAK,OAEjB,GADA,KAAK,WAAa,KAAK,SAAWD,EAAa,iBAAiB,GAAGC,CAAK,EACpE,CAAC,KAAK,UACR,MAAM,IAAI,MAAMhT,EAAG,wBAAyBgT,CAAK,CAAC,EAKpD,OAHIpS,EAAK,aAAe,SACtBA,EAAK,YAAcA,EAAK,WAAa,QAAU,QAEzCA,EAAK,YAAa,CACxB,IAAK,GACL,IAAK,QACH,MACF,KAAK,OACL,IAAK,OACH,KAAK,YAAc,GACnB,MACF,QACE,KAAK,aAAa,CACtB,CACA,KAAK,GAAG,SAAU,UAAW,CAC3B,KAAK,UAAY,GACb,KAAK,YACP,KAAK,YAAY,EACR,KAAK,WAAa,KAAK,WAChC,KAAK,KAAK,IAAI,CAElB,CAAC,EACD,KAAK,GAAG,YAAa,SAAS0H,EAAK,CACjC,KAAK,KAAK,QAASA,CAAG,CACxB,CAAC,CACH,CACA5I,EAAK,SAASqT,EAAc5B,EAAO,MAAM,EACzC4B,EAAa,cAAgB,UAAW,CACtC,MAAO,CACL,KAAQ,SAAS7N,EAAKhH,EAAI,CACxBA,EAAG,KAAMgH,CAAG,CACd,EACA,QAAWmM,EAAK,UAClB,CACF,EACA0B,EAAa,iBAAmBA,EAAa,cAC7CA,EAAa,UAAU,aAAe,UAAW,CAC/C,IAAIpL,EAAS,KAAK,UAChB,KAAK,QAAU,KAAK,QAAU,KAAK,MAAM,UAAU,CAAE,YAAa,EAAK,CAAC,CAC1E,EACIsL,EAAO5M,EAAM,kBACf,KAAK,UACL,CAAE,cAAeA,EAAM,WAAWsB,CAAM,EAAG,aAActB,EAAM,WAAW,KAAK,MAAM,CAAE,EACvF,EAEF,EACI6M,EAASxB,EAAY,qBAAqB,EAC1CS,EAAS,IAAIe,EAAOtB,EAAaqB,EAAM,KAAK,WAAW,EAC3D,KAAK,KAAKd,EAAO,SAAS,CAAC,CAC7B,EACAY,EAAa,UAAU,OAAS,SAASnK,EAAKqJ,EAAU/T,EAAI,CACtD,KAAK,cACP,KAAK,aAAa,EAClB,KAAK,YAAc,IAErB,IAAIyH,EAAM,KAAK,KACXrE,EAAMqE,EAAI,IACVwN,EAAW,GACf,GAAI,KAAK,YAAYxN,EAAKiD,CAAG,EAAG,CAC9B,GAAI,CAACjD,EAAI,QAAQ,EAAG,CACdrE,IACF,KAAK,YAAYA,EAAKpD,CAAE,EACxBiV,EAAW,IAEb,IAAIxP,EAAMgC,EAAI,IAAMrE,EAChBqC,EAAM,KAAK,aACb,KAAK,WAAaA,EAAM,GAE1BgC,EAAI,IAAMU,EAAM,UAAU,KAAK,UAAU,EACzCV,EAAI,IAAM,EACV,KAAK,YAAYA,EAAKiD,CAAG,CAC3B,CACA,KAAK,aACP,MACEjD,EAAI,IAAMrE,EAEP6R,GACHjV,EAAG,CAEP,EACA6U,EAAa,UAAU,YAAc,SAASzR,EAAKpD,EAAI,CACrD,IAAIyH,EAAM,KAAK,KACfrE,EAAMA,GAAOqE,EAAI,IACjB,KAAK,UAAUA,EAAI,IAAI,MAAM,EAAGrE,CAAG,EAAG,KAAK,qBAAqBA,EAAKpD,CAAE,CAAC,EACxE,KAAK,YAAc,CACrB,EACA6U,EAAa,UAAU,MAAQ,UAAW,CACxC,IAAI3E,EAAO,KACPhO,EAAO,KAAK,OAAO,IAAI,EAC3B,GAAI,CAACA,EAAM,CACL,KAAK,WAAa,CAAC,KAAK,SAC1B,QAAQ,SAAS,UAAW,CAC1BgO,EAAK,KAAK,IAAI,CAChB,CAAC,EAED,KAAK,UAAY,GAEnB,MACF,CACA,KAAK,KAAKoD,EAAU,SAASpR,EAAK,MAAO,EAAI,CAAC,EAC9C,KAAK,KAAKoR,EAAU,SAASpR,EAAK,IAAI,OAAQ,EAAI,CAAC,EACnD,KAAK,KAAKA,EAAK,GAAG,EAClB,KAAK,KAAK,KAAK,WAAW,EACrB,KAAK,WACRA,EAAK,GAAG,CAEZ,EACA2S,EAAa,UAAU,qBAAuB,SAAS7S,EAAMhC,EAAI,CAC/D,IAAIkQ,EAAO,KACP/D,EAAQ,KAAK,SACboI,EAAQ,KAAK,YACjB,YAAK,WACE,SAASC,EAAOtS,EAAM,CAC3B,GAAIsS,EAAO,CACT,IAAIpK,EAAM,IAAI,MAAMtI,EAAG,6BAA8BoO,EAAK,MAAM,CAAC,EACjE9F,EAAI,MAAQoK,EACZtE,EAAK,KAAK,QAAS9F,CAAG,EACtB,MACF,CACA8F,EAAK,WACLA,EAAK,KAAK,QAAS,IAAIuE,EAAUF,EAAOvS,EAAME,EAAK,MAAM,CAAC,EAC1DgO,EAAK,OAAO,KAAK,IAAIwE,EAAUvI,EAAOjK,EAAMlC,EAAIuU,CAAK,CAAC,EAClDrE,EAAK,YACPA,EAAK,UAAY,GACjBA,EAAK,MAAM,EAEf,CACF,EACA,SAASuE,EAAUF,EAAOW,EAAKC,EAAY,CACzC,KAAK,WAAaZ,EAClB,KAAK,cAAgBW,EACrB,KAAK,qBAAuBC,CAC9B,CACA,SAAST,EAAUvI,EAAOnF,EAAKhH,EAAIuU,EAAO,CACxC,KAAK,MAAQpI,EACb,KAAK,IAAMnF,EACX,KAAK,GAAKhH,EACV,KAAK,MAAQuU,EAAQ,CACvB,CACA,SAASF,EAAa5M,EAAK,CACzB,IAAIrE,EAAMqE,EAAI,IACV2M,EAAQX,GAAW,MAAMhM,CAAG,EAChC,OAAKA,EAAI,QAAQ,EAIV2M,GAHL3M,EAAI,IAAMrE,EACH,KAGX,CACA,SAASyQ,EAAaD,EAAUwB,EAAYzD,EAAY,CACtD,GAAIiC,EACF,OAAuB,SAASyB,EAAS,CACvC,OAAO,SAAS5N,EAAK,CACnB,IAAIrE,EAAMqE,EAAI,IACd,OAAA4N,EAAQ5N,CAAG,EACJA,EAAI,IAAI,MAAMrE,EAAKqE,EAAI,GAAG,CACnC,CACF,EAAE2N,EAAW,KAAK,EACb,GAAIzD,EAAY,CACrB,IAAI3F,EAAW2F,EAAW,eAAeyD,CAAU,EACnD,OAAO,SAAS3N,EAAK,CACnB,OAAOuE,EAAS,MAAMvE,CAAG,CAC3B,CACF,KACE,QAAO,SAASA,EAAK,CACnB,OAAO2N,EAAW,MAAM3N,CAAG,CAC7B,CAEJ,CACA,SAASmN,GAAW5N,EAAK5D,EAAKqC,EAAK,CACjC,IAAI0J,EAAOhH,EAAM,UAAU1C,CAAG,EAC9B,OAAAuB,EAAI,KAAKmI,EAAM,EAAG/L,EAAKA,EAAMqC,CAAG,EACzB0J,CACT,CACAhO,EAAO,QAAU,CACf,WAAAsS,GAEA,YAAAD,EAEA,YAAAE,EAEA,QAAS,CACP,aAAAM,EACA,aAAAa,EACA,WAAAlB,EACA,WAAAgB,EACF,CACF,CACF,CACF,CAAC,EAGGW,GAAmBvV,GAAW,CAChC,oCAAoCmB,EAASC,EAAQ,CACnD,aACA,IAAImJ,EAAQpC,GAAc,EACtBC,EAAQlH,GAAc,EACtBG,EAASC,GACTkU,EAASC,GACTvC,EAASC,GACT1R,EAAOC,GACPC,EAAUN,EAAO,OACjB2F,EAAMoB,EAAM,IACZqB,EAAOc,EAAM,KACbjC,EAAQ7G,EAAK,SAAS,eAAe,EACrCM,EAAKN,EAAK,OACV6R,GAAO,CAAE,UAAW,qBAAsB,EAC1CoC,EAAejM,EAAK,UAAU,UAAW6J,EAAI,EAC7CE,EAAiB/J,EAAK,UAAU,CAAE,KAAM,MAAO,OAAQ,OAAQ,EAAG6J,EAAI,EACtEqC,EAAclM,EAAK,UAAU,SAAU6J,EAAI,EAC3CsC,EAAyBnM,EAAK,UAAU,CAC1C,KAAM,mBACN,KAAM,SACN,OAAQ,CACN,CAAE,KAAM,aAAc,KAAM,CAAE,KAAM,MAAO,KAAM,QAAS,KAAM,EAAG,CAAE,EACrE,CAAE,KAAM,iBAAkB,KAAM,CAAC,OAAQ,QAAQ,EAAG,QAAW,IAAK,EACpE,CAAE,KAAM,aAAc,KAAM,KAAM,EAClC,CAAE,KAAM,OAAQ,KAAM,CAAC,OAAQ+J,CAAc,EAAG,QAAW,IAAK,CAClE,CACF,EAAGF,EAAI,EACHuC,EAA0BpM,EAAK,UAAU,CAC3C,KAAM,oBACN,KAAM,SACN,OAAQ,CACN,CACE,KAAM,QACN,KAAM,CACJ,KAAM,iBACN,KAAM,OACN,QAAS,CAAC,OAAQ,SAAU,MAAM,CACpC,CACF,EACA,CAAE,KAAM,iBAAkB,KAAM,CAAC,OAAQ,QAAQ,EAAG,QAAW,IAAK,EACpE,CAAE,KAAM,aAAc,KAAM,CAAC,OAAQ,KAAK,EAAG,QAAW,IAAK,EAC7D,CAAE,KAAM,OAAQ,KAAM,CAAC,OAAQ+J,CAAc,EAAG,QAAW,IAAK,CAClE,CACF,EAAGF,EAAI,EACHwC,GAAgB,GAChBC,EAAe,IAAIC,EACrB,GAEAvM,EAAK,UAAU,CAAE,KAAM,cAAe,KAAM,SAAU,OAAQ,CAAC,CAAE,EAAG6J,EAAI,EACxE7J,EAAK,UAAU,CAAC,QAAQ,EAAG6J,EAAI,EAC/B7J,EAAK,UAAU,OAAQ6J,EAAI,CAC7B,EACA,SAAS0C,EAAQ7R,EAAM8R,EAASC,EAASC,EAASC,EAAQC,EAAK,CAE7D,GADA,KAAK,KAAOlS,EACR,CAACsF,EAAK,OAAOwM,EAAS,QAAQ,EAChC,MAAM,IAAI,MAAM,sBAAsB,EAGxC,GADA,KAAK,YAAcA,EACf,CAACxM,EAAK,OAAOyM,EAAS,OAAO,GAAK,CAACzM,EAAK,OAAOyM,EAAQ,SAAS,EAAE,CAAC,EAAG,QAAQ,EAChF,MAAM,IAAI,MAAM,oBAAoB,EAGtC,GADA,KAAK,UAAYA,EACbE,IACE,CAAC3M,EAAK,OAAO0M,EAAS,MAAM,GAAKD,EAAQ,SAAS,EAAE,OAAS,GAC/D,MAAM,IAAI,MAAM,gCAAgC,EAGpD,KAAK,aAAeC,EACpB,KAAK,OAAS,CAAC,CAACC,EAChB,KAAK,IAAMC,IAAQ,OAAS,GAAKA,EAAM,OACvC,OAAO,OAAO,IAAI,CACpB,CACAL,EAAQ,UAAY,SAAS7R,EAAMuF,EAAQ/G,EAAM,CAE/C,GADAA,EAAOA,GAAQ,CAAC,EACZ,CAACyF,EAAM,YAAYjE,CAAI,EACzB,MAAM,IAAI,MAAMpC,EAAG,2BAA4BoC,CAAI,CAAC,EAEtD,GAAI,CAAC,MAAM,QAAQuF,EAAO,OAAO,EAC/B,MAAM,IAAI,MAAM3H,EAAG,8BAA+BoC,CAAI,CAAC,EAEzD,IAAImS,EAAavU,EAAG,eAAgBuR,GAAK,UAAWlL,EAAM,WAAWjE,CAAI,CAAC,EACtE8R,EAAUxM,EAAK,UAAU,CAC3B,KAAM6M,EACN,KAAM,SACN,UAAW3T,EAAK,WAAa,GAE7B,OAAQ+G,EAAO,OACjB,EAAG/G,CAAI,EAEP,GADA,OAAOA,EAAK,SAAS2T,CAAU,EAC3B,CAAC5M,EAAO,SACV,MAAM,IAAI,MAAM3H,EAAG,+BAAgCoC,CAAI,CAAC,EAE1D,IAAIgS,EAAU1M,EAAK,UAAUC,EAAO,SAAU/G,CAAI,EAClD,GAAI+G,EAAO,SAAW,QAAU,CAAC,MAAM,QAAQA,EAAO,MAAM,EAC1D,MAAM,IAAI,MAAM3H,EAAG,6BAA8BoC,CAAI,CAAC,EAExD,IAAI+R,EAAUzM,EAAK,UAAU,CAAC,QAAQ,EAAE,OAAOC,EAAO,QAAU,CAAC,CAAC,EAAG/G,CAAI,EACrEyT,EAAS,CAAC,CAAC1M,EAAO,SAAS,EAC/B,OAAO,IAAIsM,EAAQ7R,EAAM8R,EAASC,EAASC,EAASC,EAAQ1M,EAAO,GAAG,CACxE,EACAsM,EAAQ,UAAU,OAASvM,EAAK,UAAU,UAC1CuM,EAAQ,UAAU,OAAS,SAASrT,EAAM,CACxC,IAAI4T,EAAY,KAAK,YAAY,OAAO5T,CAAI,EACxC+G,EAAS,CACX,QAAS6M,EAAU,OACnB,SAAU,KAAK,aAAa,OAAO5T,CAAI,CACzC,EACI6T,EAAS,KAAK,IACdA,IAAW,SACb9M,EAAO,IAAM8M,GAEf,IAAIC,EAAY,KAAK,UAAU,OAAO9T,CAAI,EAC1C,OAAI8T,EAAU,OAAS,IACrB/M,EAAO,OAAS+M,EAAU,MAAM,CAAC,GAE/B,KAAK,SACP/M,EAAO,SAAS,EAAI,IAEfA,CACT,EACAtB,EAAM,qBACJ4N,EACA,CAAC,OAAQ,YAAa,cAAe,cAAc,CACrD,EACAA,EAAQ,UAAU,SAAWvU,EAAK,UAChC,UAAW,CACT,OAAO,KAAK,MACd,EACA,iDACF,EACA,SAASiV,EAAQvS,EAAMwS,EAAUC,EAAQC,EAAMC,EAAQ,CACrD,GAAI,OAAO3S,GAAQ,SACjB,OAAOuS,EAAQ,YAAYvS,EAAMwS,CAAQ,EAE3C,KAAK,KAAOxS,EACZ,KAAK,gBAAkBwS,GAAY,CAAC,EACpC,KAAK,SAAW,OAAO,OAAOvO,EAAM,aAAa,KAAK,eAAe,CAAC,EACtE,KAAK,aAAewO,GAAU,CAAC,EAC/B,KAAK,MAAQ,OAAO,OAAOxO,EAAM,aAAa,KAAK,YAAY,CAAC,EAChE,KAAK,SAAWyO,EAChB,KAAK,SAAWzO,EAAM,QAAQ,KAAK,UAAUyO,CAAI,CAAC,EAAE,SAAS,QAAQ,EACrE,KAAK,IAAMA,EAAK,IAAM,GAAKA,EAAK,IAAM,OACtC,KAAK,QAAUC,GAAU,KAAK,aAAa,CAAE,OAAQ,EAAK,CAAC,EAC3D,OAAO,OAAO,IAAI,CACpB,CACAJ,EAAQ,OAASK,EACjBL,EAAQ,OAASM,GACjBN,EAAQ,WAAa,SAASO,EAAWC,EAAW,CAClD,GAAI,CACFC,GAAcF,EAAWC,CAAS,CACpC,MAAc,CACZ,MAAO,EACT,CACA,MAAO,EACT,EACAR,EAAQ,YAAc,SAASG,EAAMlU,EAAM,CACzCA,EAAOA,GAAQ,CAAC,EAChB,IAAIwB,EAAO0S,EAAK,SAChB,GAAI,CAAC1S,EACH,MAAM,IAAI,MAAM,uBAAuB,EAEzC,GAAI0S,EAAK,YAAc,OACrBlU,EAAK,UAAYkU,EAAK,cACjB,CACL,IAAIjS,EAAQ,gBAAgB,KAAKT,CAAI,EACjCS,IACFjC,EAAK,UAAYiC,EAAM,CAAC,EAE5B,CACAT,EAAOiE,EAAM,QAAQjE,EAAMxB,EAAK,SAAS,EACrCkU,EAAK,OACPA,EAAK,MAAM,QAAQ,SAASnT,EAAK,CAC/B+F,EAAK,UAAU/F,EAAKf,CAAI,CAC1B,CAAC,EAEH,IAAIyU,EACJ,OAAIP,EAAK,WACPO,EAAO,CAAC,EACR,OAAO,KAAKP,EAAK,QAAQ,EAAE,QAAQ,SAASpW,EAAK,CAC/C2W,EAAK3W,CAAG,EAAIuV,EAAQ,UAAUvV,EAAKoW,EAAK,SAASpW,CAAG,EAAGkC,CAAI,CAC7D,CAAC,GAEI,IAAI+T,EAAQvS,EAAMiT,EAAMzU,EAAK,SAAUkU,CAAI,CACpD,EACAH,EAAQ,UAAY,SAAS5K,EAAK,CAChC,MAAO,CAAC,CAACA,GAAOA,EAAI,eAAe,UAAU,CAC/C,EACA4K,EAAQ,UAAU,aAAe,SAAS/T,EAAM,CAC9C,IAAI0U,EAAS,IAAIN,EAAO,KAAMpU,CAAI,EAClC,eAAQ,SAAS,UAAW,CAC1B,GAAIA,GAAQA,EAAK,OAAQ,CACvB,IAAIe,EAAM,CAAE,WAAY,EAAK,EACzB4T,EAAM,CAAC,IAAIpE,EAAO,YAAYxP,CAAG,EAAG,IAAIwP,EAAO,YAAYxP,CAAG,CAAC,EACnEf,EAAK,OAAO,cAAc,CAAE,SAAU2U,EAAI,CAAC,EAAG,SAAUA,EAAI,CAAC,CAAE,EAAG5T,CAAG,EACrE2T,EAAO,cAAc,CAAE,SAAUC,EAAI,CAAC,EAAG,SAAUA,EAAI,CAAC,CAAE,EAAG5T,CAAG,CAClE,MAAWf,GAAQA,EAAK,WACtB0U,EAAO,cAAc1U,EAAK,SAAS,CAEvC,CAAC,EACM0U,CACT,EACAX,EAAQ,UAAU,aAAe,SAAS/T,EAAM,CAC9C,OAAO,IAAIqU,GAAO,KAAMrU,CAAI,CAC9B,EACA,OAAO,eAAe+T,EAAQ,UAAW,OAAQ,CAC/C,WAAY,GACZ,IAAK,UAAW,CACd,OAAOtO,EAAM,WAAW,KAAK,SAAU,QAAQ,CACjD,CACF,CAAC,EACDsO,EAAQ,UAAU,QAAU,SAASvS,EAAM,CACzC,OAAO,KAAK,gBAAgBA,CAAI,CAClC,EACAuS,EAAQ,UAAU,KAAO,SAASvS,EAAM,CACtC,OAAO,KAAK,aAAaA,CAAI,CAC/B,EACAuS,EAAQ,UAAU,QAAU,UAAW,CACrC,OAAO3U,EAAG,eAAgB,KAAK,IAAI,CACrC,EACAqG,EAAM,qBACJsO,EACA,CAAC,UAAW,WAAY,OAAQ,OAAQ,OAAO,CACjD,EACAA,EAAQ,UAAU,cAAgBjV,EAAK,UACrC,SAAS8V,EAAW5U,EAAM,CACxBA,EAAOA,GAAQ,CAAC,EAChB,IAAI0U,EAAS,KAAK,aAAa,CAC7B,MAAO1U,EAAK,MACZ,UAAW,GACX,YAAaA,EAAK,aAClB,QAASA,EAAK,OAChB,CAAC,EACG6U,EAAUH,EAAO,cAAcE,EAAW5U,CAAI,EAClD,OAAA8U,GAAcJ,EAAQG,CAAO,EACtBA,CACT,EACA,qDACF,EACAd,EAAQ,UAAU,eAAiBjV,EAAK,UACtC,SAAS8V,EAAW5U,EAAM,CACxB,GAAIA,GAAQA,EAAK,aACf,MAAM,IAAI,MAAM,gDAAgD,EAElE,OAAO,KAAK,QAAQ,cAAc4U,EAAW5U,CAAI,CACnD,EACA,sEACF,EACA+T,EAAQ,UAAU,KAAOjV,EAAK,UAC5B,SAAS0C,EAAMuT,EAAKF,EAASvX,EAAI,CAC/B,GAAI,CAACuX,GAAW,CAAC,KAAK,OAAOA,EAAQ,OAAO,KAAK,EAC/C,MAAM,IAAI,MAAM,iBAAiB,EAEnC,IAAIH,EAASG,EAAQ,OACrB,OAAAT,EAAO,UAAU,YAAY,KAAKM,EAAQlT,EAAMuT,EAAKzX,GAAMA,EAAG,KAAK,IAAI,CAAC,EACjEuX,EAAQ,WAAW,CAC5B,EACA,6EACF,EACAd,EAAQ,UAAU,OAASjV,EAAK,UAC9B,SAASqK,EAAK,CACZ,OAAO4K,EAAQ,UAAU5K,CAAG,GAAK,KAAK,eAAe,EAAE,OAAOA,EAAI,eAAe,CAAC,CACpF,EACA,kEACF,EACA4K,EAAQ,UAAU,eAAiBjV,EAAK,UACtC,SAASuB,EAAW,CAClB,OAAOoF,EAAM,QAAQ,KAAK,UAAU,KAAK,QAAQ,EAAGpF,CAAS,CAC/D,EACA,4CACF,EACA0T,EAAQ,UAAU,UAAYjV,EAAK,UACjCgI,EAAK,UAAU,UACf,2CACF,EACAiN,EAAQ,UAAU,GAAKjV,EAAK,UAC1B,SAAS0C,EAAMwT,EAAS,CACtB,IAAIxH,EAAO,KACX,YAAK,QAAQ,UAAUhM,EAAM,SAASuT,EAAKzX,EAAI,CAC7C,OAAO0X,EAAQ,KAAKxH,EAAMuH,EAAK,KAAK,QAASzX,CAAE,CACjD,CAAC,EACM,IACT,EACA,sDACF,EACAyW,EAAQ,UAAU,YAAcjV,EAAK,UACnC,UAAW,CACT,IAAImW,EAAS,KAAK,QACdjV,EAAO,CAAE,YAAaiV,EAAO,QAAS,MAAOA,EAAO,MAAO,EAC3Dd,EAAS,IAAIE,GAAOY,EAAO,QAASjV,CAAI,EAC5C,OAAAmU,EAAO,UAAY,OAAO,OAAOc,EAAO,SAAS,EAC1C,IAAIlB,EACT,KAAK,KACL,KAAK,gBACL,KAAK,aACL,KAAK,SACLI,CACF,CACF,EACA,yCACF,EACAJ,EAAQ,UAAU,OAAS,SAAS/T,EAAM,CACxC,IAAIkU,EAAO,CAAE,SAAU,KAAK,IAAK,EAC7BD,EAAS,CAAC,EACd,KAAK,MAAM,QAAQ,SAAShL,EAAG,CAC7B,GAAIA,EAAE,QAAQ,IAAM,OAGpB,KAAIiM,EAAajM,EAAE,OAAOjJ,CAAI,EAC1B,OAAOkV,GAAc,UACvBjB,EAAO,KAAKiB,CAAU,EAE1B,CAAC,EACGjB,EAAO,SACTC,EAAK,MAAQD,GAEf,IAAIkB,EAAW,OAAO,KAAK,KAAK,eAAe,EAC/C,OAAIA,EAAS,SACXjB,EAAK,SAAW,CAAC,EACjBiB,EAAS,QAAQ,SAAS3T,EAAM,CAC9B0S,EAAK,SAAS1S,CAAI,EAAI,KAAK,gBAAgBA,CAAI,EAAE,OAAOxB,CAAI,CAC9D,EAAG,IAAI,GAELA,GAAQA,EAAK,aAAe,KAAK,MAAQ,SAC3CkU,EAAK,IAAM,KAAK,KAEXA,CACT,EACA,SAASkB,EAAiBR,EAAW5U,EAAM1C,EAAI,CACzCA,IAAO,QAAU,OAAO0C,GAAQ,aAClC1C,EAAK0C,EACLA,EAAO,QAET,IAAIqV,EAAM,IAAItB,EAAQ,CAAE,SAAU,OAAQ,EAAGpD,EAAI,EAC7C2E,EACJD,EAAI,aAAa,CAAE,QAASrV,GAAQA,EAAK,OAAQ,CAAC,EAAE,cAAc4U,EAAW,CAC3E,MAAO5U,GAAQA,EAAK,MACpB,YAAa,OAAO4U,GAAa,UAEnC,CAAC,EAAE,KAAK,YAAa,SAASW,EAAMC,EAAM,CACxCF,EAAUE,EAAK,eACf,KAAK,QAAQ,EAAI,CACnB,CAAC,EAAE,KAAK,MAAO,SAASC,EAAS/N,EAAK,CAChCA,GAAO,CAAC,cAAc,KAAKA,CAAG,EAChCpK,EAAGoK,CAAG,EAENpK,EAAG,KAAM,KAAK,MAAMgY,CAAO,CAAC,CAEhC,CAAC,CACH,CACA,SAASlB,EAAOiB,EAAKrV,EAAM,CACzBA,EAAOA,GAAQ,CAAC,EAChB6S,EAAO,aAAa,KAAK,IAAI,EAC7B,KAAK,MAAQwC,EACb,KAAK,WAAa,CAAC,EACnB,KAAK,MAAQ,CAAC,EACd,KAAK,YAAc,CAAC,CAACrV,EAAK,UAC1B,KAAK,QAAUA,EAAK,OAAS,CAAC,EAC9B,KAAK,SAAWA,EAAK,cACrB,KAAK,SAAW,CAAC,CAACA,EAAK,YACvB,KAAK,UAAYyF,EAAM,UAAUzF,EAAM,UAAW,GAAG,EACjDA,EAAK,iBACP0V,GAAsB,KAAK,QAAS1V,EAAK,gBAAiBqV,EAAK,EAAI,EAErE,KAAK,MAAM,SAAS,QAAQ,SAASrG,EAAK,CACxC,KAAKA,EAAI,IAAI,EAAI,KAAK,uBAAuBA,CAAG,CAClD,EAAG,IAAI,CACT,CACAlQ,EAAK,SAASsV,EAAQvB,EAAO,YAAY,EACzCuB,EAAO,UAAU,eAAiB,UAAW,CAC3C,OAAO,KAAK,WAAW,MAAM,CAC/B,EACAA,EAAO,UAAU,cAAgB,SAASQ,EAAW5U,EAAM,CACzD,IAAI2V,EAAa3V,GAAQA,EAAK,WAC1B6U,EACJ,GAAI,OAAOD,GAAa,WAAY,CAClC,IAAIgB,EACAD,EACFC,EAAkBhB,EAElBgB,EAAkB,SAAStY,EAAI,CAC7B,IAAIuY,EAAW,IAAIC,EACfC,EAAYnB,EAAU,SAASlN,EAAKsO,EAAW,CACjD,GAAItO,EAAK,CACPpK,EAAGoK,CAAG,EACN,MACF,CACA,IAAIuO,GAAW,IAAIC,GAAa,EAAE,KAAK,QAAS,SAASC,GAAM,CAC7DtB,EAAQ,QAAQsB,EAAI,CACtB,CAAC,EACD7Y,EAAG,KAAM0Y,EAAU,KAAKC,EAAQ,CAAC,CACnC,CAAC,EACD,GAAIF,EACF,OAAAF,EAAS,KAAKE,CAAS,EAChBF,CAEX,EAEFhB,EAAU,IAAIuB,EAAuB,KAAMR,EAAiB5V,CAAI,CAClE,KAAO,CACL,IAAIqW,EAAUC,EAOd,GANIC,GAAS3B,CAAS,EACpByB,EAAWC,EAAW1B,GAEtByB,EAAWzB,EAAU,SACrB0B,EAAW1B,EAAU,UAEnB,CAACe,EAAY,CACf,IAAIa,EAAU,IAAIC,GAClBJ,EAAWA,EAAS,KAAKG,CAAO,EAChC,IAAIE,EAAU,IAAIC,GAClBD,EAAQ,KAAKJ,CAAQ,EACrBA,EAAWI,CACb,CACA7B,EAAU,IAAI+B,EAAsB,KAAMP,EAAUC,EAAUtW,CAAI,EAC7D2V,IACHd,EAAQ,KAAK,MAAO,UAAW,CAC7BwB,EAAS,OAAOG,CAAO,EACvBE,EAAQ,OAAOJ,CAAQ,CACzB,CAAC,EACDE,EAAQ,KAAK,QAAS,SAAS9O,EAAK,CAClCmN,EAAQ,QAAQnN,CAAG,CACrB,CAAC,EAEL,CACA,IAAImP,EAAW,KAAK,WACpB,OAAAA,EAAS,KAAKhC,CAAO,EACrBA,EAAQ,KAAK,SAAU,UAAW,CAChCgC,EAAS,OAAOA,EAAS,QAAQ,IAAI,EAAG,CAAC,CAC3C,CAAC,EACD,KAAK,YAAc,GACnB,KAAK,KAAK,UAAWhC,CAAO,EACrBA,CACT,EACAT,EAAO,UAAU,gBAAkB,SAASpU,EAAM,CAChD,KAAK,WAAW,QAAQ,SAAS6U,EAAS,CACxCA,EAAQ,QAAQ7U,GAAQA,EAAK,MAAM,CACrC,CAAC,CACH,EACAoU,EAAO,UAAU,YAAc,SAAS5S,EAAMuT,EAAK/U,EAAM1C,EAAI,CAC3D,IAAI0R,EAAM8H,EAAmB,KAAK,MAAOtV,CAAI,EACzCuV,EAAO,IAAIC,EAAehI,EAAK,CAAC,EAAG+F,CAAG,EAC1C,KAAK,cAAcgC,EAAM/W,EAAM1C,CAAE,CACnC,EACA8W,EAAO,UAAU,gBAAkB,UAAW,CAC5C,OAAO6C,GAAmB,KAAK,QAAS,EAAI,CAC9C,EACA,OAAO,eAAe7C,EAAO,UAAW,UAAW,CACjD,WAAY,GACZ,IAAK,UAAW,CACd,OAAO,KAAK,KACd,CACF,CAAC,EACDA,EAAO,UAAU,IAAM,UAAW,CAChC,IAAIzT,EAAGC,EAAGE,EACV,IAAKH,EAAI,EAAGC,EAAI,UAAU,OAAQD,EAAIC,EAAGD,IACvCG,EAAK,UAAUH,CAAC,EAChB,KAAK,MAAM,KAAKG,EAAG,OAAS,EAAIA,EAAG,IAAI,EAAIA,CAAE,EAE/C,OAAO,IACT,EACAsT,EAAO,UAAU,cAAgB,SAAS2C,EAAM/W,EAAM1C,EAAI,CACpD,CAACA,GAAM,OAAO0C,GAAS,aACzB1C,EAAK0C,EACLA,EAAO,QAET,IAAIwN,EAAO,KACPqJ,EAAW,KAAK,WAChBK,EAAcL,EAAS,OAC3B,GAAI,CAACK,EAAa,CAChB,GAAI,KAAK,YACPvR,EAAM,2CAA2C,EACjD,KAAK,KAAK,UAAW,UAAW,CAC9B,KAAK,cAAcoR,EAAM/W,EAAM1C,CAAE,CACnC,CAAC,MACI,CACL,IAAIoK,EAAM,IAAI,MAAM,oBAAoB,EACxC,QAAQ,SAAS,UAAW,CACtBpK,EACFA,EAAG,KAAK,IAAI6Z,EAAYJ,EAAK,IAAI,EAAGrP,CAAG,EAEvC8F,EAAK,KAAK,QAAS9F,CAAG,CAE1B,CAAC,CACH,CACA,MACF,CACA1H,EAAOA,GAAQ,CAAC,EACZA,EAAK,UAAY,SACnBA,EAAK,QAAU,KAAK,WAEtB,IAAI6U,EACJ,GAAIqC,IAAgB,EAClBrC,EAAUgC,EAAS,CAAC,UACX,KAAK,UAEd,GADAhC,EAAU,KAAK,SAAS,KAAK,WAAW,MAAM,CAAC,EAC3C,CAACA,EAAS,CACZlP,EAAM,2CAA2C,EACjD,MACF,OAEAkP,EAAUgC,EAAS,KAAK,MAAM,KAAK,OAAO,EAAIK,CAAW,CAAC,EAE5DrC,EAAQ,MAAMkC,EAAM/W,EAAM,SAASmW,EAAMiB,EAAM,CAC7C,IAAIC,EAAM,KACN9D,EAAU8D,EAAI,QAAQ,UAC1B,GAAIlB,EAAM,CACJ3I,EAAK,WACP2I,EAAO5C,EAAQ,MAAM4C,EAAK,QAAS,CAAE,WAAY,EAAK,CAAC,GAEzDmB,EAAKnB,CAAI,EACT,MACF,CACA,GAAI,CAACiB,EAAM,CACTE,EAAK,EACL,MACF,CACAnB,EAAOiB,EAAK,MACP5J,EAAK,WACJ2I,IAAS,OACXA,EAAO,KAEHrP,EAAK,OAAOyM,EAAS,iBAAiB,EACpC,OAAO4C,GAAQ,WACjBA,EAAO,IAAI,MAAMA,CAAI,GAEdA,GAAQA,EAAK,QAAU,OAAOA,EAAK,QAAU,WACtDA,EAAO,IAAI,MAAMA,EAAK,MAAM,IAIlCmB,EAAKnB,EAAMiB,EAAK,QAAQ,EACxB,SAASE,EAAKC,EAAMlS,EAAK,CACnB/H,EACFA,EAAG,KAAK+Z,EAAKE,EAAMlS,CAAG,EACbkS,GACT/J,EAAK,KAAK,QAAS+J,CAAI,CAE3B,CACF,CAAC,CACH,EACAnD,EAAO,UAAU,uBAAyB,SAASpF,EAAK,CACtD,IAAIZ,EAASY,EAAI,YAAY,UAAU,EACnCzN,EAAQ6M,EAAO,IAAI,SAASzJ,EAAI,CAClC,OAAOA,EAAG,QAAQ,CACpB,CAAC,EACG4F,EAAO,mBAAqByE,EAAI,KAAO,IAC3C,OAAIzN,EAAM,SACRgJ,GAAQhJ,EAAM,KAAK,IAAI,EAAI,MAE7BgJ,GAAQ;AAAA,EACRA,GAAQ,gBACRA,GAAQhJ,EAAM,IAAI,SAASiD,EAAG,CAC5B,OAAOA,EAAI,KAAOA,CACpB,CAAC,EAAE,KAAK,IAAI,EACZ+F,GAAQ;AAAA,EACRA,GAAQ,8BAAgCyE,EAAI,KAAO;AAAA,EACnDzE,GAAQ,KACD,IAAI,SAASA,CAAI,EAAE,CAC5B,EACA,SAAS8J,GAAOgB,EAAKrV,EAAM,CACzBA,EAAOA,GAAQ,CAAC,EAChB6S,EAAO,aAAa,KAAK,IAAI,EAC7B,KAAK,QAAUwC,EACf,KAAK,UAAY,CAAC,EAClB,KAAK,KAAO,CAAC,EACb,KAAK,UAAY,CAAC,EAClB,KAAK,eAAiB,EACtB,KAAK,OAASrV,EAAK,OAAS,CAAC,EAC7B,KAAK,gBAAkBA,EAAK,eAC5B,KAAK,iBAAmBA,EAAK,qBAC7B,KAAK,QAAU,CAAC,CAACA,EAAK,OACtB,KAAK,QAAU,CAAC,CAACA,EAAK,YAClBA,EAAK,iBACP0V,GAAsB,KAAK,OAAQ1V,EAAK,gBAAiBqV,EAAK,EAAK,EAErEA,EAAI,SAAS,QAAQ,SAASrG,EAAK,CACjC,IAAIxN,EAAOwN,EAAI,KACVhP,EAAK,eACRwB,EAAOiE,EAAM,WAAWjE,CAAI,GAE9B,KAAK,KAAOA,CAAI,EAAI,KAAK,sBAAsBwN,CAAG,CACpD,EAAG,IAAI,CACT,CACAlQ,EAAK,SAASuV,GAAQxB,EAAO,YAAY,EACzCwB,GAAO,UAAU,eAAiB,UAAW,CAC3C,OAAO5O,EAAM,aAAa,KAAK,SAAS,CAC1C,EACA4O,GAAO,UAAU,cAAgB,SAASO,EAAW5U,EAAM,CACzD,IAAI2V,EAAa3V,GAAQA,EAAK,WAC1B6U,EACJ,GAAI,OAAOD,GAAa,WAAY,CAClC,IAAI4C,EACA7B,EACF6B,EAAkB5C,EAElB4C,EAAkB,SAASla,EAAI,CAC7B,IAAI2Y,EAAW,IAAIC,GAAa,EAAE,KAAK,QAAS,SAASxO,EAAK,CAC5DmN,EAAQ,QAAQnN,CAAG,CACrB,CAAC,EACD,OAAOkN,EAAU,SAASlN,EAAKqO,EAAW,CACxC,GAAIrO,EAAK,CACPpK,EAAGoK,CAAG,EACN,MACF,CACA,IAAImO,GAAW,IAAIC,EACnBD,GAAS,KAAKE,CAAS,EACvBzY,EAAG,KAAMuY,EAAQ,CACnB,CAAC,EAAE,KAAKI,CAAQ,CAClB,EAEFpB,EAAU,IAAI4C,EAAuB,KAAMD,EAAiBxX,CAAI,CAClE,KAAO,CACL,IAAIqW,EAAUC,EAOd,GANIC,GAAS3B,CAAS,EACpByB,EAAWC,EAAW1B,GAEtByB,EAAWzB,EAAU,SACrB0B,EAAW1B,EAAU,UAEnB,CAACe,EAAY,CACf,IAAIa,EAAU,IAAIC,GAClBJ,EAAWA,EAAS,KAAKG,CAAO,EAChC,IAAIE,EAAU,IAAIC,GAClBD,EAAQ,KAAKJ,CAAQ,EACrBA,EAAWI,CACb,CACA7B,EAAU,IAAI6C,EAAsB,KAAMrB,EAAUC,EAAUtW,CAAI,EAC7D2V,IACHd,EAAQ,KAAK,MAAO,UAAW,CAC7BwB,EAAS,OAAOG,CAAO,EACvBE,EAAQ,OAAOJ,CAAQ,CACzB,CAAC,EACDE,EAAQ,KAAK,QAAS,SAAS9O,EAAK,CAClCmN,EAAQ,QAAQnN,CAAG,CACrB,CAAC,EAEL,CACK,KAAK,UAAU,OAAO,EAAE,QAC3B,KAAK,GAAG,QAAS,KAAK,QAAQ,EAEhC,IAAIiQ,EAAY,KAAK,iBACjBd,EAAW,KAAK,UACpB,OAAAA,EAASc,CAAS,EAAI9C,EAAQ,KAAK,MAAO,UAAW,CACnD,OAAOgC,EAASc,CAAS,CAC3B,CAAC,EACD,KAAK,KAAK,UAAW9C,CAAO,EACrBA,CACT,EACAR,GAAO,UAAU,UAAY,SAAS7S,EAAMwT,EAAS,CACnD,OAAA8B,EAAmB,KAAK,QAAStV,CAAI,EACrC,KAAK,UAAUA,CAAI,EAAIwT,EAChB,IACT,EACAX,GAAO,UAAU,gBAAkB,UAAW,CAC5C,OAAO4C,GAAmB,KAAK,OAAQ,EAAK,CAC9C,EACA5C,GAAO,UAAU,IAAM,UAAW,CAChC,IAAI1T,EAAGC,EAAGE,EACV,IAAKH,EAAI,EAAGC,EAAI,UAAU,OAAQD,EAAIC,EAAGD,IACvCG,EAAK,UAAUH,CAAC,EAChB,KAAK,KAAK,KAAKG,EAAG,OAAS,EAAIA,EAAG,IAAI,EAAIA,CAAE,EAE9C,OAAO,IACT,EACAuT,GAAO,UAAU,sBAAwB,SAASrF,EAAK,CACrD,IAAIxN,EAAOwN,EAAI,KACXZ,EAASY,EAAI,YAAY,OACzB4I,EAAUxJ,EAAO,OACjBT,EAAOS,EAAO,OAAS,KAAOA,EAAO,IAAI,SAASzJ,EAAI,CACxD,MAAO,OAASA,EAAG,IACrB,CAAC,EAAE,KAAK,IAAI,EAAI,GACZ4F,EAAO;AAAA,EACX,OAAAA,GAAQ,0BAA4BqN,EAAU;AAAA,EAC9CrN,GAAQ,8BAAgC/I,EAAO;AAAA,EAC/C+I,GAAQ,iCAAmCoD,EAAO;AAAA,EAClDpD,GAAQ;AAAA,EACRA,GAAQ;AAAA,EACRA,GAAQ,8BAAgC/I,EAAO;AAAA,EAC/C+I,GAAQ,iCAAmCoD,EAAO;AAAA,EAClDpD,GAAQ;AAAA,EACRA,GAAQ;AAAA,EACRA,GAAQ;AAAA,EACD,IAAI,SAASA,CAAI,EAAE,CAC5B,EACA8J,GAAO,UAAU,SAAW,SAAS3M,EAAK,CACpC,CAAC,KAAK,SAAWA,EAAI,UAAY,qBACnC,QAAQ,MAAM,EACVA,EAAI,SACN,QAAQ,MAAMA,EAAI,OAAO,EACzB,QAAQ,MAAMA,EAAI,KAAK,IAEvB,QAAQ,MAAM,uBAAuB,EACrC,QAAQ,MAAMA,CAAG,GAGvB,EACA,SAASmQ,EAAcnD,EAAQ1U,EAAM,CACnCA,EAAOA,GAAQ,CAAC,EAChB6S,EAAO,aAAa,KAAK,IAAI,EAC7B,KAAK,OAAS6B,EACd,KAAK,QAAUjP,EAAM,UAAUzF,EAAM,UAAW0U,EAAO,SAAS,EAChE,KAAK,aAAe,CAAC,CAACjP,EAAM,UAAUzF,EAAM,cAAe,EAAI,EAC/D,KAAK,QAAU8X,GAAiB9X,EAAK,KAAK,EAC1C,IAAI+X,EAAQrD,EAAO,QACfJ,EAAYI,EAAO,MACnBpU,EAAON,EAAK,WACXM,IACHA,EAAOgU,EAAU,MAEnB,IAAI0D,EAAUD,EAAMzX,CAAI,EACnB0X,IACH1X,EAAOgU,EAAU,KACjB0D,EAAUD,EAAMzX,CAAI,EAAI,IAAI2X,EAAQ3D,EAAWA,EAAWhU,CAAI,GAEhE,KAAK,SAAW0X,EAChB,KAAK,UAAY,IAAIE,EAAS,KAAM/E,EAAa,EACjD,KAAK,QAAU,EACf,KAAK,UAAY,GACjB,KAAK,SAAW,GAChB,KAAK,KAAK,OAAQ,SAASsC,EAAS/N,EAAK,CACvC/B,EAAM,oBAAoB,EAC1B,KAAK,UAAY,GACjB,KAAK,KAAK,MAAO8P,EAAS/N,CAAG,CAC/B,CAAC,CACH,CACA5I,EAAK,SAAS+Y,EAAehF,EAAO,YAAY,EAChDgF,EAAc,UAAU,QAAU,SAASM,EAAQ,CACjDxS,EAAM,2BAA2B,EAC5B,KAAK,WACR,KAAK,SAAW,GAChB,KAAK,KAAK,QAAQ,GAEpB,IAAIyB,EAAW,KAAK,UAChBqO,EAAU,KAAK,QACf0C,GACF/Q,EAAS,MAAM,EAEb+Q,GAAU,CAAC1C,EACT2C,GAAQD,CAAM,GAChBxS,EAAM,iCAAkCwS,CAAM,EAC9C,KAAK,KAAK,OAAQ1C,EAAS0C,CAAM,GAEjC,KAAK,KAAK,OAAQ1C,CAAO,EAG3B9P,EAAM,kDAAmD8P,CAAO,CAEpE,EACAoC,EAAc,UAAU,KAAO,SAASQ,EAAS/a,EAAI,CAC/C,CAACA,GAAM,OAAO+a,GAAW,aAC3B/a,EAAK+a,EACLA,EAAU,QAEZ,IAAI7K,EAAO,KACPuJ,EAAO,IAAIC,EAAe5D,CAAY,EAC1C,KAAK,MAAM2D,EAAM,CAAE,QAAAsB,CAAQ,EAAG,SAAS3Q,EAAK,CACtCpK,EACFA,EAAG,KAAKkQ,EAAM9F,CAAG,EACRA,GACT8F,EAAK,QAAQ9F,CAAG,CAEpB,CAAC,CACH,EACAmQ,EAAc,UAAU,wBAA0B,SAASG,EAASM,EAAO,CACzE,IAAIjD,EAAM,KAAK,OAAO,MACtB,MAAO,CACL,WAAYA,EAAI,KAChB,eAAgBiD,EAAQ,KAAO,KAAK,UAAUjD,EAAI,QAAQ,EAC1D,WAAY2C,EAAQ,KACtB,CACF,EACAH,EAAc,UAAU,MAAQ,SAASd,EAAM/W,EAAM1C,EAAI,CACvD,IAAI0R,EAAM+H,EAAK,KACXK,EAAOpI,EAAI,OAAS,OAAS,IAAIuJ,EAAgBvJ,EAAK,CAAC,CAAC,EACxDqI,EAAM,IAAIF,EAAYnI,EAAK,IAAI,EAC/BxB,EAAO,KACX,KAAK,UACL,QAAQ,SAAS,UAAW,CAC1B,GAAI,CAACwB,EAAI,KACPwJ,EAAazB,EAAMK,EAAMqB,CAAY,MAChC,CACLjL,EAAK,KAAK,eAAgB6J,EAAKrX,CAAI,EACnC,IAAI0Y,EAAMlL,EAAK,OAAO,MACtB7H,EAAM,mDAAoD+S,EAAI,MAAM,EACpEC,EAAgB,CACd,IAAAD,EACA,IAAArB,EACA,KAAAN,EACA,KAAAK,EACA,aAAAoB,EACA,aAAAC,EACA,QAAAG,CACF,CAAC,CACH,CACF,CAAC,EACD,SAASJ,EAAaK,EAAOC,EAAOC,EAAM,CACxC,IAAIrR,EAAKsR,EACT,GAAIxL,EAAK,UACP9F,EAAM,IAAI,MAAM,mBAAmB,MAEnC,IAAI,CACFsR,EAASH,EAAM,SAAS,CAC1B,MAAgB,CACdnR,EAAMuR,GACJ7Z,EAAG,qBAAsB4P,EAAI,IAAI,EACjC6J,EACA,CACE,CAAE,KAAM,UAAW,KAAMhI,CAAe,EACxC,CAAE,KAAM,UAAW,KAAM7B,EAAI,WAAY,CAC3C,CACF,CACF,CAEF,GAAItH,EAAK,CACPqR,EAAKrR,CAAG,EACR,MACF,CACA,IAAI2Q,GAAUrY,GAAQA,EAAK,UAAY,OAASA,EAAK,QAAUwN,EAAK,QAChE0L,GAAK1L,EAAK,UAAU,IAAI6K,GAAS,SAASlC,GAAMgD,GAAQnB,GAAS,CACnE,GAAI,CAAC7B,IAAQ,CAACnH,EAAI,OAChB,GAAI,CACFgJ,GAAQ,gBAAgBmB,GAAQL,EAAO9J,CAAG,CAC5C,OAAS8C,GAAO,CACdqE,GAAOrE,EACT,CAEFiH,EAAK5C,EAAI,CACX,CAAC,EACD+C,IAAM1L,EAAK,QACX7H,EAAM,qBAAsBuT,EAAE,EAC9B1L,EAAK,MAAM0L,GAAIF,EAAQ,CAAC,CAAChK,GAAOA,EAAI,MAAM,CAC5C,CACA,SAASyJ,EAAa/Q,EAAK,CACzB8F,EAAK,UACLlQ,EAAG,KAAK+Z,EAAK3P,EAAK0P,CAAI,EAClB5J,EAAK,UAAY,CAACA,EAAK,WAAa,CAACA,EAAK,SAC5CA,EAAK,QAAQ,CAEjB,CACA,SAASoL,EAAQlR,EAAK,CACpB8F,EAAK,OAAO,KAAK,QAAS9F,EAAK8F,CAAI,CACrC,CACF,EACAqK,EAAc,UAAU,YAAc,SAASrC,EAAM,CACnD,IAAIlV,EAAOkV,EAAK,WACZuC,EAAQ,KAAK,OAAO,QACpBC,EAAUD,EAAMzX,CAAI,EACxB,GAAI0X,EACF,OAAOA,EAET,IAAI9D,EAAO,KAAK,MAAMsB,EAAK,cAAc,EACrCjB,EAAYR,EAAQ,YAAYG,CAAI,EACxC,OAAA8D,EAAU,IAAIC,EAAQ,KAAK,OAAO,MAAO1D,EAAWjU,EAAM,EAAI,EACvDyX,EAAMzX,CAAI,EAAI0X,CACvB,EACAH,EAAc,UAAU,eAAiB,SAASqB,EAAI,CACpD,OAAOE,GAAcF,EAAI,KAAK,OAAO,CACvC,EACArB,EAAc,UAAU,MAAQpS,EAAM,iBACtCA,EAAM,qBAAqBoS,EAAe,CAAC,UAAW,SAAS,CAAC,EAChEA,EAAc,UAAU,SAAW/Y,EAAK,UACtC,UAAW,CACT,OAAO,KAAK,OAAO,OACrB,EACA,mDACF,EACA+Y,EAAc,UAAU,YAAc/Y,EAAK,UACzC,UAAW,CACT,OAAO,KAAK,OAAO,KACrB,EACA,4CACF,EACA+Y,EAAc,UAAU,YAAc/Y,EAAK,UACzC,UAAW,CACT,OAAO,KAAK,SACd,EACA,4CACF,EACA,SAASsX,EAAuB1B,EAAQkB,EAAiB5V,EAAM,CAC7D6X,EAAc,KAAK,KAAMnD,EAAQ1U,CAAI,EACrC,KAAK,iBAAmB4V,GACpB,CAAC5V,GAAQ,CAACA,EAAK,UACjB2F,EAAM,uBAAuB,EAC7B,KAAK,KAAK,EAEd,CACA7G,EAAK,SAASsX,EAAwByB,CAAa,EACnDzB,EAAuB,UAAU,MAAQ,SAAS8C,EAAIF,EAAQ,CAC5D,IAAI1b,EAAK,KAAK,UAAU,IAAI4b,CAAE,EAC1BlB,EAAU,KAAK,SACfxK,EAAO,KACX,eAAQ,SAAS6L,CAAI,EACd,GACP,SAASA,EAAKC,EAAO,CACnB,GAAI,CAAA9L,EAAK,UAGT,KAAI+H,EAAO/H,EAAK,wBAAwBwK,EAAS,CAACsB,CAAK,EACnDhD,EAAW9I,EAAK,iBAAiB,KAAKA,EAAM,SAAS9F,EAAK2O,EAAU,CACtE,GAAI3O,EAAK,CACPpK,EAAGoK,CAAG,EACN,MACF,CACA2O,EAAS,GAAG,OAAQ,SAAStV,EAAK,CAChC4E,EAAM,uBAAwB5E,EAAI,EAAE,EACpC,IAAIuD,EAAMtF,EAAQ,OAAO+B,EAAI,OAAO,EACpC,GAAI,CACF,IAAIgB,EAAQwX,GAASrG,EAAyB5O,CAAG,EAC7CkR,EAAOzT,EAAM,KACbyT,EAAK,aACPwC,EAAUxK,EAAK,YAAYgI,CAAI,EAEnC,OAAS1D,GAAO,CACdxU,EAAGwU,EAAK,EACR,MACF,CACA,IAAI7P,GAAQuT,EAAK,MACjB7P,EAAM,sBAAuB1D,EAAK,EAClCuL,EAAK,KAAK,YAAa+H,EAAMC,CAAI,EAC7BvT,KAAU,OACZ,QAAQ,SAAS,UAAW,CAC1BoX,EAAK,EAAI,CACX,CAAC,GAED7L,EAAK,SAAWwK,EAChB1a,EAAG,KAAMyE,EAAM,KAAMiW,CAAO,EAEhC,CAAC,CACH,CAAC,EACD,GAAI,CAAC1B,EAAU,CACbhZ,EAAG,IAAI,MAAM,yBAAyB,CAAC,EACvC,MACF,CACAgZ,EAAS,MAAM,CACb,GAAA4C,EACA,QAAS,CAACjG,EAAuB,SAASsC,CAAI,EAAGyD,CAAM,CACzD,CAAC,EACGxL,EAAK,cACP8I,EAAS,IAAI,EAEjB,CACF,EACA,SAASM,EAAsBlC,EAAQ2B,EAAUC,EAAUtW,EAAM,CAC/D6X,EAAc,KAAK,KAAMnD,EAAQ1U,CAAI,EACrC,KAAK,UAAYqW,EACjB,KAAK,UAAYC,EACjB,KAAK,WAAa,CAAC,EAAEtW,GAAQA,EAAK,QAClC,KAAK,UAAU,GAAG,MAAOwZ,CAAK,EAC9B,KAAK,UAAU,GAAG,SAAUC,CAAQ,EACpC,IAAIjM,EAAO,KACPkM,EAAQ,KACZ,KAAK,KAAK,MAAO,UAAW,CACtBA,IACF,aAAaA,CAAK,EAClBA,EAAQ,MAELlM,EAAK,YACRA,EAAK,KAAK,QAAQ,EAEpB,KAAK,UAAU,eAAe,SAAUiM,CAAQ,EAC5C,KAAK,eACP9T,EAAM,kBAAkB,EACxB,KAAK,UAAU,IAAI,GAErB,KAAK,UAAU,eAAe,OAAQgU,CAAM,EAAE,eAAe,OAAQC,CAAS,EAAE,eAAe,MAAOJ,CAAK,CAC7G,CAAC,EACD,IAAIjE,EACA,KAAK,WACP,KAAK,UAAU,GAAG,OAAQqE,CAAS,GAEnC,KAAK,UAAU,GAAG,OAAQD,CAAM,EAChC,QAAQ,SAASE,CAAI,EACjBrM,EAAK,UACPkM,EAAQ,WAAW,UAAW,CAC5BlM,EAAK,QAAQ,IAAI,MAAM,SAAS,CAAC,CACnC,EAAGA,EAAK,OAAO,IAGnB,SAASqM,EAAKP,EAAO,CACnB,GAAI,CAAA9L,EAAK,UAGT,CAAA+H,EAAO/H,EAAK,wBAAwBA,EAAK,SAAU,CAAC8L,CAAK,EACzD,IAAIQ,EAAU,CACZ7G,EAAuB,SAASsC,CAAI,EACpC9P,EAAM,WAAW,CAAC,EAAG,CAAC,CAAC,CAEzB,EACA+H,EAAK,UAAU,MAAM,CAAE,GAAIA,EAAK,QAAS,QAAAsM,CAAQ,CAAC,EACpD,CACA,SAASH,EAAO5Y,EAAK,CACnB,GAAI,CAACyM,EAAK,eAAezM,EAAI,EAAE,EAAG,CAChC4E,EAAM,qDAAsD5E,EAAI,EAAE,EAClE,MACF,CACA,IAAIuD,EAAMtF,EAAQ,OAAO+B,EAAI,OAAO,EACpC,GAAI,CACF,IAAIyU,EAAO+D,GAASrG,EAAyB5O,CAAG,EAAE,KAC9CkR,EAAK,aACPhI,EAAK,SAAWA,EAAK,YAAYgI,CAAI,EAEzC,OAAS1D,GAAO,CACdtE,EAAK,QAAQsE,EAAK,EAClB,MACF,CACA,IAAI7P,GAAQuT,EAAK,MACjB7P,EAAM,sBAAuB1D,EAAK,EAClCuL,EAAK,KAAK,YAAa+H,EAAMC,CAAI,EAC7BvT,KAAU,OACZ,QAAQ,SAAS,UAAW,CAC1B4X,EAAK,EAAI,CACX,CAAC,GAEDlU,EAAM,wBAAwB,EAC1B+T,IACF,aAAaA,CAAK,EAClBA,EAAQ,MAEVlM,EAAK,UAAU,eAAe,OAAQmM,CAAM,EAAE,GAAG,OAAQC,CAAS,EAClEpM,EAAK,WAAa,GAClBA,EAAK,KAAK,QAAQ,EAClB+H,EAAO,KAEX,CACA,SAASqE,EAAU7Y,EAAK,CACtB,IAAImY,EAAKnY,EAAI,GACb,GAAI,CAACyM,EAAK,eAAe0L,CAAE,EAAG,CAC5BvT,EAAM,iCAAkCuT,CAAE,EAC1C,MACF,CACA,IAAI5b,EAAKkQ,EAAK,UAAU,IAAI0L,CAAE,EAC1B5b,GACF,QAAQ,SAAS,UAAW,CAC1BqI,EAAM,sBAAuBuT,CAAE,EAC/B5b,EAAG,KAAM0B,EAAQ,OAAO+B,EAAI,OAAO,EAAGyM,EAAK,QAAQ,CACrD,CAAC,CAEL,CACA,SAASgM,GAAQ,CACfhM,EAAK,QAAQ,EAAI,CACnB,CACA,SAASiM,GAAW,CAClBjM,EAAK,QAAQ,CACf,CACF,CACA1O,EAAK,SAAS8X,EAAuBiB,CAAa,EAClDjB,EAAsB,UAAU,MAAQ,UAAW,CACjD,GAAI,KAAK,YAAc,KAAK,SAC1BiB,EAAc,UAAU,MAAM,MAAM,KAAM,SAAS,MAC9C,CACLlS,EAAM,iBAAiB,EACvB,IAAIgI,EAAO,CAAC,EACRhN,EAAGC,EACP,IAAKD,EAAI,EAAGC,EAAI,UAAU,OAAQD,EAAIC,EAAGD,IACvCgN,EAAK,KAAK,UAAUhN,CAAC,CAAC,EAExB,KAAK,KAAK,SAAU,UAAW,CAC7B,KAAK,MAAM,MAAM,KAAMgN,CAAI,CAC7B,CAAC,CACH,CACF,EACAiJ,EAAsB,UAAU,MAAQ,SAASsC,EAAIF,EAAQvF,EAAQ,CACnE,GAAIA,EAAQ,CACV,IAAIjG,EAAO,KACX,QAAQ,SAAS,UAAW,CAC1BA,EAAK,UAAU,IAAI0L,CAAE,EAAE,KAAMzT,EAAM,WAAW,CAAC,EAAG,EAAG,CAAC,CAAC,EAAG+H,EAAK,QAAQ,CACzE,CAAC,CACH,CACA,OAAO,KAAK,UAAU,MAAM,CAAE,GAAA0L,EAAI,QAAS,CAACF,CAAM,CAAE,CAAC,CACvD,EACA,SAASe,EAAc5F,EAAQnU,EAAM,CACnCA,EAAOA,GAAQ,CAAC,EAChB6S,EAAO,aAAa,KAAK,IAAI,EAC7B,KAAK,OAASsB,EACd,KAAK,aAAe,CAAC,CAAC1O,EAAM,UAAUzF,EAAM,cAAe,EAAI,EAC/D,KAAK,QAAU8X,GAAiB9X,EAAK,KAAK,EAC1C,IAAI+X,EAAQ5D,EAAO,OACfkB,EAAMlB,EAAO,QACb7T,EAAO+U,EAAI,KACV0C,EAAMzX,CAAI,IACbyX,EAAMzX,CAAI,EAAI,IAAI2X,EAAQ5C,EAAKA,EAAK/U,CAAI,GAE1C,KAAK,SAAW,KAChB,KAAK,UAAY,GACjB,KAAK,SAAW,GAChB,KAAK,QAAU,EACf,KAAK,KAAK,OAAQ,SAASmV,EAAS/N,EAAK,CACvC/B,EAAM,oBAAoB,EAC1B,KAAK,KAAK,MAAO8P,EAAS/N,CAAG,CAC/B,CAAC,CACH,CACA5I,EAAK,SAASib,EAAelH,EAAO,YAAY,EAChDkH,EAAc,UAAU,QAAU,SAAS5B,EAAQ,CAC5C,KAAK,WACR,KAAK,SAAW,GAChB,KAAK,KAAK,QAAQ,IAEhBA,GAAU,CAAC,KAAK,WAClB,KAAK,UAAY,GACbC,GAAQD,CAAM,GAChBxS,EAAM,iCAAkCwS,CAAM,EAC9C,KAAK,KAAK,OAAQ,KAAK,QAASA,CAAM,GAEtC,KAAK,KAAK,OAAQ,KAAK,OAAO,EAGpC,EACA4B,EAAc,UAAU,yBAA2B,SAASrS,EAAK6N,EAAM,CACrE,IAAIF,EAAM,KAAK,OAAO,QAClB/Q,EAAM+Q,EAAI,KACV2E,EAAczE,GAAQA,EAAK,WAAW,OAAOjR,CAAG,EACpD,MAAO,CACL,MAAOoD,EAAM,OAASsS,EAAc,OAAS,SAC7C,eAAgBA,EAAc,KAAO,KAAK,UAAU3E,EAAI,QAAQ,EAChE,WAAY2E,EAAc,KAAO1V,CACnC,CACF,EACAyV,EAAc,UAAU,YAAc,SAASxE,EAAM,CACnD,IAAIjV,EAAOiV,EAAK,WACZyC,EAAU,KAAK,OAAO,OAAO1X,CAAI,EACrC,GAAI0X,EACF,OAAOA,EAET,GAAI,CAACzC,EAAK,eACR,MAAM0E,GAAW,kBAAkB,EAErC,IAAI/F,EAAO,KAAK,MAAMqB,EAAK,cAAc,EACrCjB,EAAYP,EAAQ,YAAYG,CAAI,EACxC,OAAA8D,EAAU,IAAIC,EAAQ3D,EAAW,KAAK,OAAO,QAAShU,EAAM,EAAI,EACzD,KAAK,OAAO,OAAOA,CAAI,EAAI0X,CACpC,EACA+B,EAAc,UAAU,eAAiB,SAASb,EAAI,CACpD,OAAOE,GAAcF,EAAI,KAAK,OAAO,CACvC,EACAa,EAAc,UAAU,SAAW,SAASf,EAAQhB,EAAS1a,EAAI,CAC/D,IAAIkQ,EAAO,KACPuJ,EACJ,GAAI,CACFA,EAAOiB,EAAQ,eAAegB,CAAM,CACtC,OAASlH,EAAO,CACdxU,EAAGkQ,EAAK,mBAAmByM,GAAW,kBAAmBnI,CAAK,CAAC,CAAC,EAChE,MACF,CACA,IAAI9C,EAAM+H,EAAK,KACXK,EAAO,IAAImB,EAAgBvJ,EAAK,CAAC,CAAC,EACtC,GAAI,CAACA,EAAI,KAAM,CACboI,EAAK,SAAW,KAChB9Z,EAAG8Z,EAAK,SAAS,EAAG,EAAK,EACzB,MACF,CACA,IAAIC,EAAM,IAAIF,EAAYnI,EAAK,IAAI,EACnCxB,EAAK,KAAK,eAAgB6J,CAAG,EAC7B,IAAIqB,EAAM,KAAK,OAAO,KACtB/S,EAAM,mDAAoD+S,EAAI,MAAM,EACpElL,EAAK,UACLmL,EAAgB,CACd,IAAAD,EACA,IAAArB,EACA,KAAAN,EACA,KAAAK,EACA,aAAAoB,EACA,aAAAC,EACA,QAAAG,CACF,CAAC,EACD,SAASJ,EAAaK,EAAOC,EAAOC,EAAM,CACxC,IAAI/D,GAAUxH,EAAK,OAAO,UAAUwB,EAAI,IAAI,EAC5C,GAAKgG,GAQE,CACL,IAAIS,GAAU,CAACzG,EAAI,OACnB,GAAI,CACEyG,GACFT,GAAQ,KAAKqC,EAAKwB,EAAM,QAAS,SAASnR,GAAKrC,GAAK,CAClDoQ,GAAU,GACVqD,EAAM,MAAQpR,GACdoR,EAAM,SAAWzT,GACjB0T,EAAK,CACP,CAAC,GAED/D,GAAQ,KAAKqC,EAAKwB,EAAM,OAAO,EAC/BE,EAAK,EAET,OAASrR,GAAK,CACR+N,IACFA,GAAU,GACVsD,EAAKrR,EAAG,GAERkR,EAAQlR,EAAG,CAEf,CACF,KA9Bc,CACZ,IAAIwS,GAAiB1M,EAAK,OAAO,gBACjC,GAAI0M,GACFA,GAAe,KAAK7C,EAAKwB,EAAOC,EAAOC,CAAI,MACtC,CACL,IAAIjH,GAAQ,IAAI,MAAM1S,EAAG,oBAAqB4P,EAAI,IAAI,CAAC,EACvD+J,EAAKkB,GAAW,kBAAmBnI,EAAK,CAAC,CAC3C,CACF,CAuBF,CACA,SAAS2G,EAAa/Q,EAAK,CACzB8F,EAAK,UACL,IAAI2G,EAAS3G,EAAK,OACd2L,EACJ,GAAI,CAACzR,EAAK,CACR,IAAIyS,GAAS/C,EAAK,MACdgD,GAAWjG,EAAO,QACjBiG,KACChC,GAAQ+B,EAAM,EAChB/C,EAAK,MAAQpI,EAAI,UAAU,MAAMmL,GAAO,QAAS,CAAE,WAAY,EAAK,CAAC,EAC5DA,KAAW,OACpBA,GAAS/C,EAAK,MAAQ,QAEpB+C,KAAW,QAAU/C,EAAK,WAAa,QAAUpI,EAAI,aAAa,QAAQ,IAAI,IAChFoI,EAAK,SAAW,OAGpB,GAAI,CACF+B,EAAS/B,EAAK,SAAS,CACzB,MAAgB,CACVA,EAAK,QAAU,OACjB1P,EAAMuR,GACJ7Z,EAAG,mBAAoB4P,EAAI,IAAI,EAE/BoI,EACA,CACE,CAAE,KAAM,UAAW,KAAMvG,CAAe,EACxC,CAAE,KAAM,QAAS,KAAM7B,EAAI,SAAU,CACvC,CACF,EAEAtH,EAAMuR,GACJ7Z,EAAG,sBAAuB4P,EAAI,IAAI,EAClCoI,EACA,CACE,CAAE,KAAM,UAAW,KAAMvG,CAAe,EACxC,CAAE,KAAM,WAAY,KAAM7B,EAAI,YAAa,CAC7C,CACF,CAEJ,CACF,CACKmK,EAEMgB,KAAW,QACpBhG,EAAO,KAAK,QAAS8F,GAAW,oBAAqBE,EAAM,CAAC,EAF5DhB,EAAS3L,EAAK,mBAAmB9F,EAAK0P,EAAK,OAAO,EAIpD9Z,EAAG6b,EAAQnK,EAAI,MAAM,EACjBxB,EAAK,UAAY,CAACA,EAAK,SACzBA,EAAK,QAAQ,CAEjB,CACA,SAASoL,EAAQlR,EAAK,CACpB8F,EAAK,OAAO,KAAK,QAAS9F,EAAK8F,CAAI,CACrC,CACF,EACA/H,EAAM,qBAAqBsU,EAAe,CAAC,SAAS,CAAC,EACrDA,EAAc,UAAU,SAAWjb,EAAK,UACtC,UAAW,CACT,OAAO,KAAK,OAAO,MACrB,EACA,mDACF,EACAib,EAAc,UAAU,YAAcjb,EAAK,UACzC,UAAW,CACT,OAAO,KAAK,OAAO,OACrB,EACA,4CACF,EACAib,EAAc,UAAU,YAAcjb,EAAK,UACzC,UAAW,CACT,OAAO,KAAK,SACd,EACA,4CACF,EACAib,EAAc,UAAU,mBAAqB,SAASrS,EAAK6J,EAAQ,CACjE,IAAI4C,EAAS,KAAK,OAClBA,EAAO,KAAK,QAASzM,EAAK,IAAI,EAC9B,IAAI2S,EACAlG,EAAO,iBACTkG,EAASlG,EAAO,iBAAiB,KAAK,KAAMzM,CAAG,EACtCA,EAAI,UACb2S,EAAS3S,EAAI,SAEf,IAAI4S,EACJ,GAAI/I,EACF,GAAI,CACF+I,EAASzJ,EAAe,SAASU,CAAM,CACzC,OAASO,EAAO,CACdqC,EAAO,KAAK,QAASrC,EAAO,IAAI,CAClC,CAEF,OAAO9S,EAAQ,OAAO,CACpBsb,GAAU7U,EAAM,WAAW,CAAC,CAAC,CAAC,EAC9BA,EAAM,WAAW,CAAC,EAAG,CAAC,CAAC,EAEvBuN,EAAY,SAASqH,GAAU,uBAAuB,CACxD,CAAC,CACH,EACA,SAAS5C,EAAuBtD,EAAQqD,EAAiBxX,EAAM,CAC7D+Z,EAAc,KAAK,KAAM5F,EAAQnU,CAAI,EACrC,KAAK,UAAY,OACjB,IAAIwN,EAAO,KACP6I,EACJ,QAAQ,SAAS,UAAW,CAC1BA,EAAWmB,EAAgB,KAAKhK,EAAM,SAAS9F,EAAK4O,EAAU,CAC5D,QAAQ,SAAS,UAAW,CAC1B,GAAI5O,EAAK,CACP+R,EAAS/R,CAAG,EACZ,MACF,CACA8F,EAAK,UAAY8I,EAAS,GAAG,SAAUmD,CAAQ,EAC/CjM,EAAK,KAAK,WAAW,CACvB,CAAC,CACH,CAAC,EAAE,GAAG,OAAQ+M,CAAS,EAAE,GAAG,MAAOf,CAAK,CAC1C,CAAC,EACD,SAASe,EAAUxZ,EAAK,CACtB,IAAImY,EAAKnY,EAAI,GACTuD,EAAMtF,EAAQ,OAAO+B,EAAI,OAAO,EAChC2G,EACJ,GAAI,CACF,IAAI3F,EAAQwX,GAAStG,EAAwB3O,CAAG,EAC5CiR,EAAOxT,EAAM,KACbiW,EAAUxK,EAAK,YAAY+H,CAAI,CACrC,OAASzD,GAAO,CACdpK,EAAMuS,GAAW,4BAA6BnI,EAAK,CACrD,CACA,IAAI0D,GAAOhI,EAAK,yBAAyB9F,EAAK6N,CAAI,EAClD/H,EAAK,KAAK,YAAa+H,EAAMC,EAAI,EAC7B9N,EACF4P,GAAK9J,EAAK,mBAAmB9F,CAAG,CAAC,EAEjC8F,EAAK,SAASzL,EAAM,KAAMiW,EAASV,EAAI,EAEzC,SAASA,GAAK6B,GAAQ,CACpB,GAAI,CAAC3L,EAAK,UAAW,CACnB,GAAI,CAACA,EAAK,UAAW,CACnBA,EAAK,KAAK,YAAa,UAAW,CAChC8J,GAAK6B,EAAM,CACb,CAAC,EACD,MACF,CACA3L,EAAK,UAAU,MAAM,CACnB,GAAA0L,EACA,QAAS,CAAChG,EAAwB,SAASsC,EAAI,EAAG2D,EAAM,CAC1D,CAAC,CACH,CACI3L,EAAK,WAAaA,EAAK,cACzBA,EAAK,UAAU,IAAI,CAEvB,CACF,CACA,SAASgM,GAAQ,CACfhM,EAAK,QAAQ,CACf,CACA,SAASiM,EAAS/R,EAAK,CACrB2O,EAAS,eAAe,OAAQkE,CAAS,EAAE,eAAe,MAAOf,CAAK,EACtEhM,EAAK,QAAQ9F,GAAO,EAAI,CAC1B,CACF,CACA5I,EAAK,SAAS2Y,EAAwBsC,CAAa,EACnD,SAASrC,EAAsBvD,EAAQkC,EAAUC,EAAUtW,EAAM,CAC/D+Z,EAAc,KAAK,KAAM5F,EAAQnU,CAAI,EACrC,KAAK,SAAW,OAChB,KAAK,UAAYsW,EAAS,GAAG,SAAUmD,CAAQ,EAC/C,KAAK,UAAYpD,EAAS,GAAG,OAAQmE,CAAW,EAAE,GAAG,MAAOhB,CAAK,EACjE,KAAK,KAAK,SAAU,UAAW,CAC7B,KAAK,UAAU,eAAe,OAAQgB,CAAW,EAAE,eAAe,OAAQD,CAAS,EAAE,eAAe,MAAOf,CAAK,CAClH,CAAC,EAAE,KAAK,MAAO,UAAW,CACxB,KAAK,UAAU,eAAe,SAAUC,CAAQ,EAC5C,KAAK,cACP,KAAK,UAAU,IAAI,CAEvB,CAAC,EACD,IAAIjM,EAAO,KACX,SAASgN,EAAYzZ,EAAK,CACxB,IAAImY,EAAKnY,EAAI,GACb,GAAI,CAACyM,EAAK,eAAe0L,CAAE,EACzB,OAEF,IAAI5U,EAAMtF,EAAQ,OAAO+B,EAAI,OAAO,EAChC2G,EACJ,GAAI,CACF,IAAI3F,EAAQwX,GAAStG,EAAwB3O,CAAG,EAC5CiR,EAAOxT,EAAM,KACjByL,EAAK,SAAWA,EAAK,YAAY+H,CAAI,CACvC,OAASzD,GAAO,CACdpK,EAAMuS,GAAW,4BAA6BnI,EAAK,CACrD,CACA,IAAI0D,GAAOhI,EAAK,yBAAyB9F,EAAK6N,CAAI,EAClD/H,EAAK,KAAK,YAAa+H,EAAMC,EAAI,EAC7B9N,EACF4P,GAAK9J,EAAK,mBAAmB9F,CAAG,CAAC,GAEjC8F,EAAK,UAAU,eAAe,OAAQgN,CAAW,EAAE,GAAG,OAAQD,CAAS,EACvE/M,EAAK,SAASzL,EAAM,KAAMyL,EAAK,SAAU8J,EAAI,GAE/C,SAASA,GAAK6B,GAAQ,CAChB3L,EAAK,WAGTA,EAAK,UAAU,MAAM,CACnB,GAAA0L,EACA,QAAS,CAAChG,EAAwB,SAASsC,EAAI,EAAG2D,EAAM,CAC1D,CAAC,CACH,CACF,CACA,SAASoB,EAAUxZ,EAAK,CACtB,IAAImY,EAAKnY,EAAI,GACb,GAAKyM,EAAK,eAAe0L,CAAE,EAG3B,KAAIF,EAASha,EAAQ,OAAO+B,EAAI,OAAO,EACvCyM,EAAK,SAASwL,EAAQxL,EAAK,SAAU,SAAS2L,EAAQ1F,EAAQ,CACxDjG,EAAK,WAAaiG,GAGtBjG,EAAK,UAAU,MAAM,CAAE,GAAA0L,EAAI,QAAS,CAACC,CAAM,CAAE,CAAC,CAChD,CAAC,EACH,CACA,SAASK,GAAQ,CACfhM,EAAK,QAAQ,CACf,CACA,SAASiM,GAAW,CAClBjM,EAAK,QAAQ,EAAI,CACnB,CACF,CACA1O,EAAK,SAAS4Y,EAAuBqC,CAAa,EAClD,SAAS/C,EAAehI,EAAKyL,EAAM1F,EAAK,CACtC,KAAK,KAAO/F,EACZ,KAAK,QAAUyL,GAAQ,CAAC,EACxB,KAAK,QAAU1F,GAAO,CAAC,CACzB,CACAiC,EAAe,UAAU,SAAW,UAAW,CAC7C,IAAIhI,EAAM,KAAK,KACf,OAAOhQ,EAAQ,OAAO,CACpB6R,EAAe,SAAS,KAAK,OAAO,EACpCmC,EAAY,SAAShE,EAAI,IAAI,EAC7BA,EAAI,YAAY,SAAS,KAAK,OAAO,CACvC,CAAC,CACH,EACA,SAASuJ,EAAgBvJ,EAAK0L,EAAKhT,EAAKrC,EAAK,CAC3C,KAAK,KAAO2J,EACZ,KAAK,QAAU0L,EACf,KAAK,MAAQhT,EACb,KAAK,SAAWrC,CAClB,CACAkT,EAAgB,UAAU,SAAW,UAAW,CAC9C,IAAImC,EAAM7J,EAAe,SAAS,KAAK,OAAO,EAC1C8J,EAAW,KAAK,QAAU,OAC9B,OAAO3b,EAAQ,OAAO,CACpB0b,EACA3H,EAAa,SAAS4H,CAAQ,EAC9BA,EAAW,KAAK,KAAK,UAAU,SAAS,KAAK,KAAK,EAAI,KAAK,KAAK,aAAa,SAAS,KAAK,QAAQ,CACrG,CAAC,CACH,EACA,SAASxD,EAAYnI,EAAK6F,EAAS,CACjC,KAAK,QAAUA,EACf,KAAK,OAAS,CAAC,EACf,KAAK,QAAU7F,EACf,OAAO,OAAO,IAAI,CACpB,CACA,SAASkJ,EAASb,EAAKuD,EAAc,CACnC,KAAK,KAAOvD,EACZ,KAAK,MAAQ,MAAQuD,EAAe,GACpC,KAAK,IAAM,EACX,KAAK,GAAK,EACV,KAAK,KAAO,CAAC,CACf,CACA1C,EAAS,UAAU,IAAM,SAASgB,EAAI,CACpC,OAAO,KAAK,KAAKA,EAAK,KAAK,KAAK,CAClC,EACAhB,EAAS,UAAU,IAAM,SAASG,EAASvX,EAAI,CAC7C,KAAK,IAAM,KAAK,IAAM,EAAI,KAAK,MAC/B,IAAI0M,EAAO,KACP0L,EAAK,KAAK,IACVQ,EACJ,OAAIrB,EAAU,IACZqB,EAAQ,WAAW,UAAW,CAC5Bpc,EAAG,IAAI,MAAM,SAAS,CAAC,CACzB,EAAG+a,CAAO,GAEZ,KAAK,KAAKa,CAAE,EAAI5b,EAChB,KAAK,KACE4b,EACP,SAAS5b,GAAK,CACPkQ,EAAK,KAAK0L,CAAE,IAGjB,OAAO1L,EAAK,KAAK0L,CAAE,EACnB1L,EAAK,KACDkM,GACF,aAAaA,CAAK,EAEpB5Y,EAAG,MAAM0M,EAAK,KAAM,SAAS,EAC/B,CACF,EACA0K,EAAS,UAAU,MAAQ,UAAW,CACpC,OAAO,KAAK,KAAK,IAAI,EAAE,QAAQ,SAASgB,EAAI,CAC1C,KAAK,KAAKA,CAAE,EAAE,IAAI,MAAM,aAAa,CAAC,CACxC,EAAG,IAAI,CACT,EACA,SAASjB,EAAQ3D,EAAWC,EAAWjU,EAAMua,EAAU,CACrD,KAAK,WAAavG,EAClB,KAAK,WAAaC,EAClB,KAAK,MAAQjU,EACb,KAAK,UAAY,CAAC,CAACua,EACnB,KAAK,SAAWrG,GAAcF,EAAWC,CAAS,CACpD,CACA0D,EAAQ,UAAU,eAAiB,SAAS3T,EAAK,CAC/C,IAAIS,EAAM,IAAIV,EAAIC,CAAG,EACjBoW,EAAM7J,EAAe,MAAM9L,CAAG,EAC9BvD,EAAOwR,EAAY,MAAMjO,CAAG,EAC5BiK,EAAK+F,EAOT,GANIvT,GACFwN,EAAM,KAAK,WAAW,QAAQxN,CAAI,EAClCuT,EAAM,KAAK,SAASvT,EAAO,GAAG,EAAE,MAAMuD,CAAG,GAEzCiK,EAAMoE,EAEJ,CAACrO,EAAI,QAAQ,EACf,MAAM,IAAI,MAAM3F,EAAG,uBAAwBoC,GAAQ,OAAO,CAAC,EAE7D,OAAO,IAAIwV,EAAehI,EAAK0L,EAAK3F,CAAG,CACzC,EACAkD,EAAQ,UAAU,gBAAkB,SAAS3T,EAAK8S,EAAMpI,EAAK,CAC3D,IAAIjK,EAAM,IAAIV,EAAIC,CAAG,EACrBmB,EAAM,kBAAkBoL,EAAe,MAAM9L,CAAG,EAAGqS,EAAK,QAAS,EAAI,EACrE,IAAI0D,EAAW/H,EAAa,MAAMhO,CAAG,EACjCvD,EAAOwN,EAAI,KACf,GAAIxN,EAAM,CACR,IAAI4N,EAAS,KAAK,SAAS5N,GAAQsZ,EAAW,IAAM,IAAI,EAOxD,GANA9L,EAAM,KAAK,WAAW,QAAQxN,CAAI,EAC9BsZ,EACF1D,EAAK,MAAQhI,EAAO,MAAMrK,CAAG,EAE7BqS,EAAK,SAAWhI,EAAO,MAAMrK,CAAG,EAE9B,CAACA,EAAI,QAAQ,EACf,MAAM,IAAI,MAAM3F,EAAG,wBAAyBoC,CAAI,CAAC,CAErD,MACEwN,EAAMoE,CAEV,EACA,SAAS8C,IAAe,CACtB3F,EAAO,UAAU,KAAK,KAAM,CAAE,mBAAoB,EAAK,CAAC,EACxD,KAAK,IAAM,OACX,KAAK,KAAO9K,EAAM,UAAU,CAAC,EAC7B,KAAK,MAAQ,CAAC,EACd,KAAK,GAAG,SAAU,UAAW,CAC3B,KAAK,KAAK,IAAI,CAChB,CAAC,CACH,CACA3G,EAAK,SAASoX,GAAc3F,EAAO,SAAS,EAC5C2F,GAAa,UAAU,WAAa,SAAS5R,EAAK+M,EAAU/T,EAAI,CAC9DgH,EAAMtF,EAAQ,OAAO,CAAC,KAAK,KAAMsF,CAAG,CAAC,EAErC,QADIyW,EACGzW,EAAI,QAAU,GAAKA,EAAI,SAAWyW,EAAczW,EAAI,YAAY,CAAC,GAAK,GAAG,CAC9E,GAAIyW,EACF,KAAK,MAAM,KAAKzW,EAAI,MAAM,EAAGyW,EAAc,CAAC,CAAC,MACxC,CACL,IAAIC,EAAO,KAAK,MAChB,KAAK,MAAQ,CAAC,EACd,KAAK,KAAK,CAAE,GAAI,KAAM,QAASA,CAAK,CAAC,CACvC,CACA1W,EAAMA,EAAI,MAAMyW,EAAc,CAAC,CACjC,CACA,KAAK,KAAOzW,EACZhH,EAAG,CACL,EACA4Y,GAAa,UAAU,OAAS,SAAS5Y,EAAI,CAC3C,GAAI,KAAK,KAAK,QAAU,KAAK,MAAM,OAAQ,CACzC,IAAI0d,EAAO,KAAK,MAAM,MAAM,EAC5BA,EAAK,QAAQ,KAAK,IAAI,EACtB,IAAItT,EAAMuS,GAAW,eAAe,EACpCvS,EAAI,aAAe1I,EAAQ,OAAOgc,CAAI,EAAE,SAAS,EACjD,KAAK,KAAK,QAAStT,CAAG,CACxB,CACApK,EAAG,CACL,EACA,SAASwY,GAAe,CACtBvF,EAAO,UAAU,KAAK,KAAM,CAAE,mBAAoB,EAAK,CAAC,EACxD,KAAK,GAAG,SAAU,UAAW,CAC3B,KAAK,KAAK,IAAI,CAChB,CAAC,CACH,CACAzR,EAAK,SAASgX,EAAcvF,EAAO,SAAS,EAC5CuF,EAAa,UAAU,WAAa,SAAS/U,EAAKsQ,EAAU/T,EAAI,CAC9D,IAAI0d,EAAOja,EAAI,QACXJ,EAAGC,EAAG0D,EACV,IAAK3D,EAAI,EAAGC,EAAIoa,EAAK,OAAQra,EAAIC,EAAGD,IAClC2D,EAAM0W,EAAKra,CAAC,EACZ,KAAK,KAAKsa,GAAU3W,EAAI,MAAM,CAAC,EAC/B,KAAK,KAAKA,CAAG,EAEf,KAAK,KAAK2W,GAAU,CAAC,CAAC,EACtB3d,EAAG,CACL,EACA,SAASmZ,IAAe,CACtBlG,EAAO,UAAU,KAAK,KAAM,CAAE,mBAAoB,EAAK,CAAC,EACxD,KAAK,IAAM,OACX,KAAK,YAAc,EACnB,KAAK,KAAO9K,EAAM,UAAU,CAAC,EAC7B,KAAK,MAAQ,CAAC,EACd,KAAK,GAAG,SAAU,UAAW,CAC3B,KAAK,KAAK,IAAI,CAChB,CAAC,CACH,CACA3G,EAAK,SAAS2X,GAAclG,EAAO,SAAS,EAC5CkG,GAAa,UAAU,WAAa,SAASnS,EAAK+M,EAAU/T,EAAI,CAE9D,IADAgH,EAAMtF,EAAQ,OAAO,CAAC,KAAK,KAAMsF,CAAG,CAAC,IACxB,CACX,GAAI,KAAK,MAAQ,OAAQ,CACvB,GAAIA,EAAI,OAAS,EAAG,CAClB,KAAK,KAAOA,EACZhH,EAAG,EACH,MACF,CACA,KAAK,IAAMgH,EAAI,YAAY,CAAC,EAC5B,KAAK,YAAcA,EAAI,YAAY,CAAC,EACpCA,EAAMA,EAAI,MAAM,CAAC,CACnB,CAEA,QADIyW,EACG,KAAK,aAAezW,EAAI,QAAU,GAAKA,EAAI,SAAWyW,EAAczW,EAAI,YAAY,CAAC,GAAK,GAC/F,KAAK,cACL,KAAK,MAAM,KAAKA,EAAI,MAAM,EAAGyW,EAAc,CAAC,CAAC,EAC7CzW,EAAMA,EAAI,MAAMyW,EAAc,CAAC,EAEjC,GAAI,KAAK,YAAa,CACpB,KAAK,KAAOzW,EACZhH,EAAG,EACH,MACF,KAAO,CACL,IAAIyD,EAAM,CAAE,GAAI,KAAK,IAAK,QAAS,KAAK,KAAM,EAC9C,KAAK,MAAQ,CAAC,EACd,KAAK,IAAM,OACX,KAAK,KAAKA,CAAG,CACf,CACF,CACF,EACA0V,GAAa,UAAU,OAASP,GAAa,UAAU,OACvD,SAASS,IAAe,CACtBpG,EAAO,UAAU,KAAK,KAAM,CAAE,mBAAoB,EAAK,CAAC,EACxD,KAAK,GAAG,SAAU,UAAW,CAC3B,KAAK,KAAK,IAAI,CAChB,CAAC,CACH,CACAzR,EAAK,SAAS6X,GAAcpG,EAAO,SAAS,EAC5CoG,GAAa,UAAU,WAAa,SAAS5V,EAAKsQ,EAAU/T,EAAI,CAC9D,IAAI0d,EAAOja,EAAI,QACXH,EAAIoa,EAAK,OACT1W,EACJA,EAAMmB,EAAM,UAAU,CAAC,EACvBnB,EAAI,aAAavD,EAAI,GAAI,CAAC,EAC1BuD,EAAI,aAAa1D,EAAG,CAAC,EACrB,KAAK,KAAK0D,CAAG,EACb,IAAI3D,EACJ,IAAKA,EAAI,EAAGA,EAAIC,EAAGD,IACjB2D,EAAM0W,EAAKra,CAAC,EACZ,KAAK,KAAKsa,GAAU3W,EAAI,MAAM,CAAC,EAC/B,KAAK,KAAKA,CAAG,EAEfhH,EAAG,CACL,EACA,SAAS2d,GAAUzW,EAAG,CACpB,IAAIF,EAAMmB,EAAM,UAAU,CAAC,EAC3B,OAAAnB,EAAI,aAAaE,CAAC,EACXF,CACT,CACA,SAASiV,GAASvS,EAAM1C,EAAK,CAC3B,IAAIS,EAAM,IAAIV,EAAIC,CAAG,EACjB4W,EAAOlU,EAAK,MAAMjC,CAAG,EACzB,GAAI,CAACA,EAAI,QAAQ,EACf,MAAM,IAAI,MAAM3F,EAAG,eAAgB4H,EAAK,OAAO,CAAC,CAAC,EAEnD,MAAO,CAAE,KAAAkU,EAAM,KAAMnW,EAAI,IAAI,MAAMA,EAAI,GAAG,CAAE,CAC9C,CACA,SAASoM,GAAagK,EAAOC,EAAO,CAClC,OAAOD,EAAM,OAAOC,CAAK,EAAID,EAAQA,EAAM,eAAeC,CAAK,CACjE,CACA,SAAS5G,GAAcF,EAAWC,EAAW,CAC3C,IAAIxT,EAAM,CAAC,EACX,OAAAuT,EAAU,SAAS,QAAQ,SAASnS,EAAG,CACrC,IAAIqC,EAAIrC,EAAE,KACNxC,EAAI4U,EAAU,QAAQ/P,CAAC,EAC3B,GAAI,CACF,GAAI,CAAC7E,EACH,MAAM,IAAI,MAAMP,EAAG,6BAA8BoF,CAAC,CAAC,EAErD,GAAI7E,EAAE,SAAWwC,EAAE,OACjB,MAAM,IAAI,MAAM/C,EAAG,mCAAoCoF,CAAC,CAAC,EAE3DzD,EAAIyD,EAAI,GAAG,EAAI2M,GAAaxR,EAAE,YAAawC,EAAE,WAAW,EACxDpB,EAAIyD,EAAI,GAAG,EAAI2M,GAAahP,EAAE,UAAWxC,EAAE,SAAS,EACpDoB,EAAIyD,EAAI,GAAG,EAAI2M,GAAahP,EAAE,aAAcxC,EAAE,YAAY,CAC5D,OAASmS,EAAO,CACd,MAAMmI,GAAW,wBAAyBnI,CAAK,CACjD,CACF,CAAC,EACM/Q,CACT,CACA,SAAS2U,GAAsBqC,EAAOsD,EAAOhG,EAAKiG,EAAU,CAC1D,OAAO,KAAKD,CAAK,EAAE,QAAQ,SAAS/a,EAAM,CACxC,IAAI4T,EAAOmH,EAAM/a,CAAI,EACjBgU,EAAWC,EACX+G,GACFhH,EAAYe,EACZd,EAAYR,EAAQ,YAAYG,CAAI,IAEpCI,EAAYP,EAAQ,YAAYG,CAAI,EACpCK,EAAYc,GAEd0C,EAAMzX,CAAI,EAAI,IAAI2X,EAAQ3D,EAAWC,EAAWjU,EAAM,EAAI,CAC5D,CAAC,CACH,CACA,SAAS2W,GAAmBc,EAAOuD,EAAU,CAC3C,IAAID,EAAQ,CAAC,EACb,cAAO,KAAKtD,CAAK,EAAE,QAAQ,SAASwD,EAAI,CACtC,IAAIvD,EAAUD,EAAMwD,CAAE,EACtB,GAAIvD,EAAQ,UAAW,CACrB,IAAI3C,EAAMiG,EAAWtD,EAAQ,WAAaA,EAAQ,WAClDqD,EAAME,CAAE,EAAIlG,EAAI,QAClB,CACF,CAAC,EACMgG,CACT,CACA,SAASjD,GAAQjP,EAAK,CACpB,MAAO,CAAC,CAACA,GAAO,OAAO,UAAU,SAAS,KAAKA,CAAG,IAAM,gBAC1D,CACA,SAAS2L,GAAc1T,EAAKC,EAAK,CAC/B,OAAOD,EAAI,GAAG,QAAS,SAASsG,EAAK,CACnCrG,EAAI,KAAK,QAASqG,EAAKtG,CAAG,CAC5B,CAAC,CACH,CACA,SAASoa,GAAQxM,EAAK8C,EAAO,CAC3B,IAAIpK,EAAM,IAAI,MAAMsH,CAAG,EACvB,OAAAtH,EAAI,MAAQoK,EACLpK,CACT,CACA,SAASuS,GAAWwB,EAAS3J,EAAO,CAClC,IAAIpK,EAAM8T,GAAQC,EAAQ,YAAY,EAAE,QAAQ,KAAM,GAAG,EAAG3J,CAAK,EACjE,OAAApK,EAAI,QAAUoK,GAASA,EAAM,QAAUA,EAAM,QAAU2J,EAChD/T,CACT,CACA,SAASuR,GAAmBjK,EAAKjO,EAAKqN,EAAQ,CAC5C,IAAIsN,EAAU,CAAC,EACX/a,EAAGC,EAAG+L,EACV,IAAKhM,EAAI,EAAGC,EAAIwN,EAAO,OAAQzN,EAAIC,EAAGD,IACpCgM,EAAQyB,EAAOzN,CAAC,EAChBgM,EAAM,KAAK,QAAQ5L,EAAI4L,EAAM,IAAI,EAAG,CAAE,UAAA1C,CAAU,CAAC,EAEnD,IAAI0R,EAAaD,EAAQ,IAAI,SAAS5M,EAAM,CAC1C,OAAO1P,EAAG,0BAA2B0P,EAAK,KAAMA,EAAK,MAAOA,EAAK,IAAI,CACvE,CAAC,EAAE,KAAK,IAAI,EACRpH,EAAM,IAAI,MAAMtI,EAAG,UAAW4P,EAAK2M,CAAU,CAAC,EAClD,OAAAjU,EAAI,QAAUgU,EACPhU,EACP,SAASuC,EAAUlI,EAAOoH,EAAKnC,EAAM,CACnC,IAAI4U,EAAO,CAAC,EACR1X,EAAIgB,GAAIrD,GACZ,IAAKqC,EAAK,EAAGgB,GAAKnD,EAAM,OAAQmC,EAAKgB,GAAIhB,IACvCrC,GAAOE,EAAMmC,CAAE,EACX,MAAMrC,EAAI,EACZ+Z,EAAK,KAAK,IAAM/Z,EAAI,EAEpB+Z,EAAK,KAAK,IAAM/Z,GAAO,GAAG,EAG9B6Z,EAAQ,KAAK,CACX,KAAM/O,EAAM,KAAOiP,EAAK,KAAK,EAAE,EAC/B,MAAOzS,EACP,KAAAnC,CACF,CAAC,CACH,CACF,CACA,SAAS8Q,GAAiB+D,EAAO,CAC/B,OAAOA,EAAQpW,EAAM,QAAQoW,CAAK,EAAE,YAAY,CAAC,GAAK,GAAK1I,GAAgB,CAC7E,CACA,SAASiG,GAAcF,EAAI4C,EAAQ,CACjC,OAAQ5C,EAAK4C,IAAW,GAAK3I,KAAkB,CACjD,CACA,SAASoD,GAASpN,EAAK,CACrB,MAAO,CAAC,EAAEA,GAAOA,EAAI,KACvB,CACA,SAAS2N,EAAmBzB,EAAK7T,EAAM,CACrC,IAAIwN,EAAMqG,EAAI,QAAQ7T,CAAI,EAC1B,GAAI,CAACwN,EACH,MAAM,IAAI,MAAM5P,EAAG,sBAAuBoC,CAAI,CAAC,EAEjD,OAAOwN,CACT,CACA,SAAS2J,EAAgBoD,EAAQ,CAC/B,IAAIpO,EAAO,CAACoO,EAAO,KAAMA,EAAO,IAAI,EAChCC,EAAM,CAAC,EACPlK,EACJmK,EAAQ,CAAC,EACT,SAASA,EAAQvb,EAAK,CACpB,IAAIwb,EAAS,GACTxb,EAAMqb,EAAO,IAAI,OACnBA,EAAO,IAAIrb,CAAG,EAAE,MAAMqb,EAAO,IAAKpO,EAAK,OAAO,SAASjG,EAAKpK,EAAI,CAC9D,GAAI4e,EAAQ,CACVH,EAAO,QAAQP,GAAQ,oCAAqC9T,CAAG,CAAC,EAChE,MACF,CAEA,GADAwU,EAAS,GACLxU,GAAOqU,EAAO,OACjBA,EAAO,KAAK,QAAU,QAAUA,EAAO,KAAK,WAAa,QAAS,CACjEjK,EAAQpK,EACRyU,EAAS,EACT,MACF,CACI7e,GACF0e,EAAI,KAAK1e,CAAE,EAEb2e,EAAQ,EAAEvb,CAAG,CACf,CAAC,CAAC,EAEFqb,EAAO,aAAa,MAAMA,EAAO,IAAKpO,EAAK,OAAO,SAASjG,EAAK,CAC9D,GAAIwU,EAAQ,CACVH,EAAO,QAAQP,GAAQ,yBAA0B9T,CAAG,CAAC,EACrD,MACF,CACAwU,EAAS,GACTpK,EAAQpK,EACR,QAAQ,SAASyU,CAAQ,CAC3B,CAAC,CAAC,CAEN,CACA,SAASA,GAAW,CAClB,IAAI7e,EAAK0e,EAAI,IAAI,EACjB,GAAI1e,EAAI,CACN,IAAI4e,EAAS,GACb5e,EAAG,KAAKye,EAAO,IAAKjK,EAAO,SAASpK,EAAK,CACvC,GAAIwU,EAAQ,CACVH,EAAO,QAAQP,GAAQ,qCAAsC9T,CAAG,CAAC,EACjE,MACF,CACAoK,EAAQpK,EACRwU,EAAS,GACTC,EAAS,CACX,CAAC,CACH,MACEJ,EAAO,aAAa,KAAKA,EAAO,IAAKjK,CAAK,CAE9C,CACF,CACArT,EAAO,QAAU,CACf,QAAAwZ,EACA,uBAAAhF,EACA,wBAAAC,EACA,QAAAG,EACA,SAAA6E,EACA,QAAAnE,EACA,iBAAAqB,EACA,QAAS,CACP,aAAAc,GACA,aAAAJ,EACA,aAAAW,GACA,aAAAE,EACF,CACF,CACF,CACF,CAAC,EAGGyF,GAAgB/e,GAAW,CAC7B,iCAAiCmB,EAASC,EAAQ,CAChD,aACA,IAAI4d,EAAKC,GACLnS,EAAOoS,GACX,SAASC,GAAmB,CAC1B,IAAIC,EAAU,CAAC,EACf,OAAO,SAASC,EAAOC,EAAMrf,EAAI,CAE/B,GADAof,EAAQvS,EAAK,QAAQuS,CAAK,EACtBD,EAAQC,CAAK,EAAG,CAClB,QAAQ,SAASpf,CAAE,EACnB,MACF,CACAmf,EAAQC,CAAK,EAAI,GACjBL,EAAG,SAASK,EAAO,CAAE,SAAU,MAAO,EAAGpf,CAAE,CAC7C,CACF,CACA,SAASsf,GAAuB,CAC9B,IAAIH,EAAU,CAAC,EACf,OAAO,SAASC,EAAOC,EAAMrf,EAAI,CAC/Bof,EAAQvS,EAAK,QAAQuS,CAAK,EACtBD,EAAQC,CAAK,EACfpf,EAAG,GAEHmf,EAAQC,CAAK,EAAI,GACjBpf,EAAG,KAAM+e,EAAG,aAAaK,EAAO,CAAE,SAAU,MAAO,CAAC,CAAC,EAEzD,CACF,CACAje,EAAO,QAAU,CACf,iBAAA+d,EACA,qBAAAI,EAEA,WAAYP,EAAG,WACf,aAAcA,EAAG,YACnB,CACF,CACF,CAAC,EAGGQ,GAAgBxf,GAAW,CAC7B,iCAAiCmB,EAASC,EAAQ,CAChD,aACA,IAAIqe,EAAQV,GAAc,EACtB3W,EAAQlH,GAAc,EACtB4L,EAAOoS,GACPzd,EAAOC,GACPK,EAAKN,EAAK,OACVie,EAAY,CACd,KAAM,CAAE,KAAM,MAAO,YAAa,MAAO,EACzC,QAAS,CAAE,KAAM,QAAS,YAAa,SAAU,EACjD,QAAS,CAAE,KAAM,OAAQ,YAAa,aAAc,EACpD,aAAc,CAAE,KAAM,OAAQ,YAAa,kBAAmB,CAChE,EACA,SAASC,EAAiBN,EAAO1c,EAAM1C,EAAI,CACrC,CAACA,GAAM,OAAO0C,GAAQ,aACxB1C,EAAK0C,EACLA,EAAO,QAETA,EAAOA,GAAQ,CAAC,EACXA,EAAK,aACRA,EAAK,WAAa8c,EAAM,iBAAiB,GAE3CG,EAAWP,EAAO,SAAShV,EAAKwV,EAAU,CACxC,GAAIxV,EAAK,CACPpK,EAAGoK,CAAG,EACN,MACF,CACA,GAAI,CAACwV,EAAU,CACb5f,EAAG,IAAI,MAAM,mBAAmB,CAAC,EACjC,MACF,CACA,IAAI6f,EAAUD,EAAS,MACvB,GAAIC,EAAS,CACX,IAAIvb,EAAYwb,GAAkBF,CAAQ,GAAK,GAC/CC,EAAQ,QAAQ,SAASpW,EAAQ,CAC3BA,EAAO,YAAcnF,GACvB,OAAOmF,EAAO,SAElB,CAAC,CACH,CACAzJ,EAAG,KAAM4f,CAAQ,CACnB,CAAC,EACD,SAASD,EAAWI,EAAQC,EAAK,CAC/Btd,EAAK,WAAWqd,EAAQ,MAAO,SAAS3V,EAAKtH,EAAK,CAChD,GAAIsH,EAAK,CACP4V,EAAI5V,CAAG,EACP,MACF,CACA,GAAItH,IAAQ,OAAQ,CAClBkd,EAAI,EACJ,MACF,CACA,GAAI,CACF,IAAIlO,EAAS,IAAImO,EAAOnd,EAAKJ,CAAI,EAC7Be,GAAMqO,EAAO,cAAchP,EAAKJ,CAAI,CAC1C,OAASmW,EAAM,CACbA,EAAK,KAAOkH,EACZC,EAAInH,CAAI,EACR,MACF,CACAqH,EAAazc,GAAI,SAAUA,GAAI,QAASoJ,EAAK,QAAQkT,CAAM,EAAGC,CAAG,CACnE,CAAC,CACH,CACA,SAASE,EAAaN,EAAUT,EAASgB,EAAOH,EAAK,CACnD,IAAII,EAAoB,CAAC,EACzBC,GAAK,EACL,SAASA,IAAO,CACd,IAAIC,EAAOnB,EAAQ,MAAM,EACzB,GAAI,CAACmB,EAAM,CACTF,EAAkB,QAAQ,EAC1B,GAAI,CACFA,EAAkB,QAAQ,SAASG,EAAU,CAC3CC,GAAYZ,EAAUW,CAAQ,CAChC,CAAC,CACH,OAASnW,EAAK,CACZ4V,EAAI5V,CAAG,EACP,MACF,CACA4V,EAAI,KAAMJ,CAAQ,EAClB,MACF,CACA,IAAIa,EAAa5T,EAAK,KAAKsT,EAAOG,EAAK,IAAI,EACvCA,EAAK,OAAS,MAChBX,EAAWc,EAAY,SAASrW,EAAKmW,EAAU,CAC7C,GAAInW,EAAK,CACP4V,EAAI5V,CAAG,EACP,MACF,CACImW,GACFH,EAAkB,KAAKG,CAAQ,EAEjCF,GAAK,CACP,CAAC,EAED3d,EAAK,WAAW+d,EAAYH,EAAK,KAAM,SAASlW,EAAKtH,EAAK,CACxD,GAAIsH,EAAK,CACP4V,EAAI5V,CAAG,EACP,MACF,CACA,OAAQkW,EAAK,KAAM,CACjB,IAAK,WACL,IAAK,SACH,GAAIxd,IAAQ,OAAQ,CAClBud,GAAK,EACL,MACF,CACA,GAAI,CACF,IAAI5c,EAAM,KAAK,MAAMX,CAAG,CAC1B,OAAS+V,EAAM,CACbA,EAAK,KAAO4H,EACZT,EAAInH,CAAI,EACR,MACF,CACA,IAAI0H,EAAWD,EAAK,OAAS,SAAW,CAAE,MAAO,CAAC7c,CAAG,CAAE,EAAIA,EAC3D2c,EAAkB,KAAKG,CAAQ,EAC/BF,GAAK,EACL,OACF,QACEL,EAAI,IAAI,MAAMle,EAAG,0BAA2Bwe,EAAK,IAAI,CAAC,CAAC,CAC3D,CACF,CAAC,CAEL,CACF,CACA,SAASE,GAAYZ,EAAUW,EAAU,CACvC,IAAIV,EAAUU,EAAS,OAAS,CAAC,EACjCV,EAAQ,QAAQ,EAChBA,EAAQ,QAAQ,SAASpW,EAAQ,CAC1BmW,EAAS,QACZA,EAAS,MAAQ,CAAC,GAEhBnW,EAAO,YAAc,SACvBA,EAAO,UAAYqW,GAAkBS,CAAQ,GAAK,IAEpDX,EAAS,MAAM,QAAQnW,CAAM,CAC/B,CAAC,EACD,OAAO,KAAK8W,EAAS,UAAY,CAAC,CAAC,EAAE,QAAQ,SAASrc,EAAM,CAI1D,GAHK0b,EAAS,WACZA,EAAS,SAAW,CAAC,GAEnBA,EAAS,SAAS1b,CAAI,EACxB,MAAM,IAAI,MAAMpC,EAAG,wBAAyBoC,CAAI,CAAC,EAEnD0b,EAAS,SAAS1b,CAAI,EAAIqc,EAAS,SAASrc,CAAI,CAClD,CAAC,CACH,CACF,CACA,SAASwc,EAAK5d,EAAK,CACjB,IAAI2G,EACJ,GAAI,OAAO3G,GAAO,UAAY,CAACA,EAAI,QAAQ+J,EAAK,GAAG,GAAK2S,EAAM,WAAW1c,CAAG,EAAG,CAC7E,IAAI6d,EAAWnB,EAAM,aAAa1c,EAAK,CAAE,SAAU,MAAO,CAAC,EAC3D,GAAI,CACF,OAAO,KAAK,MAAM6d,CAAQ,CAC5B,MAAc,CACZ,IAAIje,EAAO,CAAE,WAAY8c,EAAM,qBAAqB,CAAE,EACtDE,EAAiB5c,EAAKJ,EAAM,SAASmW,GAAM+H,EAAgB,CACzDnX,EAASoP,GAAO8H,EAAWC,CAC7B,CAAC,CACH,CACF,MACEnX,EAAS3G,EAEX,GAAI,OAAO2G,GAAU,UAAYA,IAAW,OAC1C,OAAOA,EAET,GAAI,CACF,OAAO,KAAK,MAAMA,CAAM,CAC1B,MAAc,CACZ,GAAI,CACF,OAAOwW,EAAO,aAAaxW,CAAM,CACnC,MAAe,CACb,GAAI,CACF,OAAOwW,EAAO,WAAWxW,CAAM,CACjC,MAAe,CACb,OAAOA,CACT,CACF,CACF,CACF,CACA,SAASwW,EAAOnd,EAAKJ,EAAM,CACzBA,EAAOA,GAAQ,CAAC,EAChB,KAAK,IAAM,IAAIme,EAAU/d,CAAG,EAC5B,KAAK,iBAAmB,CAAC,CAACJ,EAAK,gBAC/B,KAAK,cAAgB,CAACA,EAAK,qBAC3B,KAAK,UAAYA,EAAK,UAAY+c,CACpC,CACAQ,EAAO,aAAe,SAASnd,EAAKJ,EAAM,CACxC,IAAIoP,EAAS,IAAImO,EAAOnd,EAAKJ,CAAI,EAC7Bkd,EAAW9N,EAAO,cAAc,EACpC,GAAI8N,EAAS,QAAQ,OACnB,MAAM,IAAI,MAAM,qBAAqB,EAEvC,OAAOA,EAAS,QAClB,EACAK,EAAO,WAAa,SAASnd,EAAKJ,EAAM,CACtC,IAAIoP,EAAS,IAAImO,EAAOnd,EAAKJ,CAAI,EAC7B0T,EAAMtE,EAAO,aAAa,EAC1BrI,EAASqI,EAAO,UAAUsE,IAAQ,OAAS,CAAC,EAAI,CAAE,IAAAA,CAAI,EAAG,EAAI,EACjE,OAAAtE,EAAO,IAAI,KAAK,CAAE,GAAI,OAAQ,CAAC,EACxBrI,CACT,EACAwW,EAAO,UAAU,cAAgB,UAAW,CAC1C,IAAIa,EAAK,KAAK,IACV3B,EAAU,CAAC,EACX7U,EAAQ,CAAC,EACToM,EAAW,CAAC,EACZtT,EACJ,KAAK,aAAa+b,CAAO,EACzB,IAAIyB,GAAiB,CAAC,EAClBG,EAAkB,KAAK,aAAa,EAUxC,IATIA,IAAoB,SACtBH,GAAe,IAAMG,GAEvB,KAAK,iBAAiBH,EAAc,EACpCE,EAAG,KAAK,CAAE,IAAK,UAAW,CAAC,EACtBA,EAAG,KAAK,CAAE,IAAK,IAAK,OAAQ,EAAK,CAAC,IACrCF,GAAe,SAAWE,EAAG,KAAK,CAAE,GAAI,MAAO,CAAC,EAAE,IAClDA,EAAG,KAAK,CAAE,IAAK,GAAI,CAAC,GAEf,CAACA,EAAG,KAAK,CAAE,IAAK,IAAK,OAAQ,EAAK,CAAC,GACxC,GAAI,CAAC,KAAK,aAAa3B,CAAO,EAAG,CAC/B,IAAI6B,EAAU,KAAK,aAAa,EAC5BpJ,EAAa,KAAK,UAAU,CAAC,EAAG,EAAI,EACpCqJ,EAAa,KAAK,aAAa9B,EAAS,EAAI,EAC5C+B,EAAU,OAEd,GADA9d,EAAM0d,EAAG,IACL,CAACG,IAAeC,EAAU,KAAK,aAAatJ,CAAU,GAAI,CACxDoJ,IAAY,QAAUE,EAAQ,OAAO,MAAQ,SAC/CA,EAAQ,OAAO,IAAMF,GAEvB,IAAI7K,GAAS,GAYb,IAXI+K,EAAQ,OAAO,WAAa,QAAUA,EAAQ,OAAO,SAAS,OAAS,UACzE/K,GAAS,CAAC,KAAK,kBAAoB,CAAC+K,EAAQ,OAAO,OAC/CA,EAAQ,OAAO,WAAa,OAC9BA,EAAQ,OAAO,SAAW,OAE1BA,EAAQ,OAAO,SAAS,KAAO,QAG/B/K,KACF+K,EAAQ,OAAO,SAAS,EAAI,IAE1BxK,EAASwK,EAAQ,IAAI,EACvB,MAAM,IAAI,MAAMpf,EAAG,wBAAyBof,EAAQ,IAAI,CAAC,EAE3DxK,EAASwK,EAAQ,IAAI,EAAIA,EAAQ,MACnC,MACMF,IACE,OAAOpJ,GAAc,SACvBA,EAAa,CAAE,IAAKoJ,EAAS,KAAMpJ,CAAW,EACrCA,EAAW,MAAQ,SAC5BA,EAAW,IAAMoJ,IAGrB1W,EAAM,KAAKsN,CAAU,EACrBkJ,EAAG,IAAM1d,EACT0d,EAAG,KAAK,CAAE,IAAK,IAAK,OAAQ,EAAK,CAAC,EAEpCE,EAAU,MACZ,CAEF,OAAAF,EAAG,KAAK,CAAE,GAAI,OAAQ,CAAC,EACnBxW,EAAM,SACRsW,GAAe,MAAQtW,GAErB,OAAO,KAAKoM,CAAQ,EAAE,SACxBkK,GAAe,SAAWlK,GAErB,CAAE,SAAUkK,GAAgB,QAAAzB,CAAQ,CAC7C,EACAc,EAAO,UAAU,iBAAmB,SAASxW,EAAQ,CAEnD,QADIqX,EAAK,KAAK,IACPA,EAAG,KAAK,CAAE,IAAK,IAAK,OAAQ,EAAK,CAAC,GAAG,CAE1C,QADIrc,EAAQ,CAAC,EACN,CAACqc,EAAG,KAAK,CAAE,IAAK,IAAK,OAAQ,EAAK,CAAC,GACxCrc,EAAM,KAAKqc,EAAG,KAAK,EAAE,GAAG,EAE1BrX,EAAOhF,EAAM,KAAK,EAAE,CAAC,EAAIqc,EAAG,KAAK,CAAE,GAAI,MAAO,CAAC,EAAE,IACjDA,EAAG,KAAK,CAAE,IAAK,GAAI,CAAC,CACtB,CACF,EACAb,EAAO,UAAU,aAAe,SAASkB,EAAgB,CACvD,IAAIL,EAAK,KAAK,IACVrX,EAAS,CAAE,QAAS,CAAC,EAAG,SAAU0X,CAAe,EACrD,KAAK,iBAAiB1X,CAAM,EAC5B,IAAIvF,EAAO4c,EAAG,KAAK,EAAE,IACrB,GAAIA,EAAG,KAAK,EAAE,MAAQ,IAGtB,IAAI,CAACA,EAAG,KAAK,CAAE,IAAK,IAAK,OAAQ,EAAK,CAAC,EACrC,GACErX,EAAO,QAAQ,KAAK,KAAK,WAAW,CAAC,QAC9B,CAACqX,EAAG,KAAK,CAAE,IAAK,IAAK,OAAQ,EAAK,CAAC,GAAKA,EAAG,KAAK,CAAE,IAAK,GAAI,CAAC,GAEvE,IAAIM,EAAQN,EAAG,KAAK,EACpB,OAAQM,EAAM,IAAK,CACjB,IAAK,SACH3X,EAAO,OAAS,CAAC,EACjB,GACEA,EAAO,OAAO,KAAK,KAAK,UAAU,CAAC,QAC5B,CAACqX,EAAG,KAAK,CAAE,IAAK,IAAK,OAAQ,EAAK,CAAC,GAAKA,EAAG,KAAK,CAAE,IAAK,GAAI,CAAC,GACrE,MACF,IAAK,SACHrX,EAAO,SAAS,EAAI,GACpBqX,EAAG,KAAK,CAAE,IAAK,GAAI,CAAC,EACpB,MACF,IAAK,IACH,MACF,QACE,MAAMA,EAAG,MAAM,yBAA0BM,CAAK,CAClD,CACA,MAAO,CAAE,KAAAld,EAAM,OAAAuF,CAAO,EACxB,EACAwW,EAAO,UAAU,aAAe,UAAW,CACzC,IAAImB,EAAQ,KAAK,IAAI,KAAK,CAAE,GAAI,UAAW,YAAa,GAAM,OAAQ,EAAK,CAAC,EAC5E,GAAIA,EACF,OAAOA,EAAM,GAEjB,EACAnB,EAAO,UAAU,WAAa,UAAW,CACvC,IAAIa,EAAK,KAAK,IACVE,EAAU,KAAK,aAAa,EAC5BvX,EAAS,CAAE,KAAM,KAAK,UAAU,CAAE,EACtC,OAAIuX,IAAY,QAAUvX,EAAO,MAAQ,SACvCA,EAAO,IAAMuX,GAEf,KAAK,iBAAiBvX,CAAM,EAC5BA,EAAO,KAAOqX,EAAG,KAAK,CAAE,GAAI,MAAO,CAAC,EAAE,IAClCA,EAAG,KAAK,CAAE,IAAK,IAAK,OAAQ,EAAK,CAAC,IACpCrX,EAAO,QAAaqX,EAAG,KAAK,CAAE,GAAI,MAAO,CAAC,EAAE,KAEvCrX,CACT,EACAwW,EAAO,UAAU,UAAY,SAASxW,EAAQ4X,EAAK,CAIjD,OAHA5X,EAASA,GAAU,CAAC,EACpB,KAAK,iBAAiBA,CAAM,EAC5BA,EAAO,KAAO,KAAK,IAAI,KAAK,CAAE,GAAI,MAAO,CAAC,EAAE,IACpCA,EAAO,KAAM,CACnB,IAAK,SACL,IAAK,QACH,OAAO,KAAK,YAAYA,CAAM,EAChC,IAAK,QACH,OAAO,KAAK,WAAWA,CAAM,EAC/B,IAAK,OACH,OAAO,KAAK,UAAUA,EAAQ4X,CAAG,EACnC,IAAK,MACH,OAAO,KAAK,SAAS5X,CAAM,EAC7B,IAAK,QACH,OAAO,KAAK,WAAWA,CAAM,EAC/B,IAAK,QACH,GAAI,OAAO,KAAKA,CAAM,EAAE,OAAS,EAC/B,MAAM,IAAI,MAAM,qCAAqC,EAEvD,OAAO,KAAK,WAAW,EACzB,QACE,IAAI6X,EAAM,KAAK,UAAU7X,EAAO,IAAI,EACpC,OAAI6X,IACF,OAAO7X,EAAO,KACdtB,EAAM,kBAAkBmZ,EAAK7X,CAAM,GAE9B,OAAO,KAAKA,CAAM,EAAE,OAAS,EAAIA,EAASA,EAAO,IAC5D,CACF,EACAwW,EAAO,UAAU,WAAa,SAASxW,EAAQ,CAC7C,IAAIqX,EAAK,KAAK,IACd,OAAKA,EAAG,KAAK,CAAE,IAAK,IAAK,OAAQ,EAAK,CAAC,IACrCrX,EAAO,KAAOqX,EAAG,KAAK,CAAE,GAAI,MAAO,CAAC,EAAE,IACtCA,EAAG,KAAK,CAAE,IAAK,GAAI,CAAC,GAEtBrX,EAAO,KAAO,SAASqX,EAAG,KAAK,CAAE,GAAI,QAAS,CAAC,EAAE,GAAG,EACpDA,EAAG,KAAK,CAAE,IAAK,GAAI,CAAC,EACbrX,CACT,EACAwW,EAAO,UAAU,SAAW,SAASxW,EAAQ,CAC3C,IAAIqX,EAAK,KAAK,IACVS,EAAS,KAAK,cACdC,EAAeV,EAAG,KAAK,CAAE,IAAK,IAAK,OAAAS,CAAO,CAAC,IAAM,OACrD,OAAA9X,EAAO,OAAS,KAAK,UAAU,EAC/BqX,EAAG,KAAK,CAAE,IAAK,IAAK,OAAQU,CAAa,CAAC,EACnC/X,CACT,EACAwW,EAAO,UAAU,WAAa,SAASxW,EAAQ,CAC7C,IAAIqX,EAAK,KAAK,IACVS,EAAS,KAAK,cACdC,EAAeV,EAAG,KAAK,CAAE,IAAK,IAAK,OAAAS,CAAO,CAAC,IAAM,OACrD,OAAA9X,EAAO,MAAQ,KAAK,UAAU,EAC9BqX,EAAG,KAAK,CAAE,IAAK,IAAK,OAAQU,CAAa,CAAC,EACnC/X,CACT,EACAwW,EAAO,UAAU,UAAY,SAASxW,EAAQ4X,EAAK,CACjD,IAAIP,EAAK,KAAK,IACTA,EAAG,KAAK,CAAE,IAAK,IAAK,OAAQ,EAAK,CAAC,IACrCrX,EAAO,KAAOqX,EAAG,KAAK,CAAE,GAAI,MAAO,CAAC,EAAE,IACtCA,EAAG,KAAK,CAAE,IAAK,GAAI,CAAC,GAEtBrX,EAAO,QAAU,CAAC,EAClB,GACEA,EAAO,QAAQ,KAAKqX,EAAG,KAAK,EAAE,GAAG,QAC1B,CAACA,EAAG,KAAK,CAAE,IAAK,IAAK,OAAQ,EAAK,CAAC,GAAKA,EAAG,KAAK,CAAE,IAAK,GAAI,CAAC,GACrE,OAAIO,GAAOP,EAAG,KAAK,CAAE,IAAK,IAAK,OAAQ,EAAK,CAAC,IAC3CrX,EAAO,QAAUqX,EAAG,KAAK,EAAE,IAC3BA,EAAG,KAAK,CAAE,IAAK,GAAI,CAAC,GAEfrX,CACT,EACAwW,EAAO,UAAU,WAAa,UAAW,CACvC,IAAIa,EAAK,KAAK,IACV5d,EAAM,CAAC,EACX4d,EAAG,KAAK,CAAE,IAAK,GAAI,CAAC,EACpB,GACE5d,EAAI,KAAK,KAAK,UAAU,CAAC,QAClB,CAAC4d,EAAG,KAAK,CAAE,IAAK,IAAK,OAAQ,EAAK,CAAC,GAAKA,EAAG,KAAK,CAAE,IAAK,GAAI,CAAC,GACrE,OAAO5d,CACT,EACA+c,EAAO,UAAU,YAAc,SAASxW,EAAQ,CAC9C,IAAIqX,EAAK,KAAK,IAMd,IALKA,EAAG,KAAK,CAAE,IAAK,IAAK,OAAQ,EAAK,CAAC,IACrCrX,EAAO,KAAOqX,EAAG,KAAK,CAAE,GAAI,MAAO,CAAC,EAAE,IACtCA,EAAG,KAAK,CAAE,IAAK,GAAI,CAAC,GAEtBrX,EAAO,OAAS,CAAC,EACV,CAACqX,EAAG,KAAK,CAAE,IAAK,IAAK,OAAQ,EAAK,CAAC,GACxCrX,EAAO,OAAO,KAAK,KAAK,WAAW,CAAC,EACpCqX,EAAG,KAAK,CAAE,IAAK,GAAI,CAAC,EAEtB,OAAOrX,CACT,EACAwW,EAAO,UAAU,aAAe,SAASd,EAASsC,EAAc,CAI9D,QAHIX,EAAK,KAAK,IACVG,EAAa,EACb7d,EAAM0d,EAAG,IACNA,EAAG,KAAK,CAAE,IAAK,SAAU,OAAQ,EAAK,CAAC,GAAG,CAC/C,GAAI,CAACG,GAAcQ,GAAgBX,EAAG,KAAK,CAAE,IAAK,IAAK,OAAQ,EAAK,CAAC,EAAG,CACtEA,EAAG,IAAM1d,EACT,MACF,CACA,IAAIic,GAAOyB,EAAG,KAAK,CAAE,GAAI,MAAO,CAAC,EAAE,IAC/BY,EAAQ,KAAK,MAAMZ,EAAG,KAAK,CAAE,GAAI,QAAS,CAAC,EAAE,GAAG,EACpDA,EAAG,KAAK,CAAE,IAAK,GAAI,CAAC,EACpB3B,EAAQ,KAAK,CAAE,KAAAE,GAAM,KAAMqC,CAAM,CAAC,EAClCT,GACF,CACA,OAAOA,CACT,EACA,SAASJ,EAAU/d,EAAK,CACtB,KAAK,KAAOA,EACZ,KAAK,IAAM,CACb,CACA+d,EAAU,UAAU,KAAO,SAASne,EAAM,CACxC,IAAI0e,EAAQ,CAAE,IAAK,KAAK,IAAK,GAAI,OAAQ,IAAK,MAAO,EACjDJ,EAAU,KAAK,MAAMte,GAAQA,EAAK,WAAW,EACjD,GAAI,OAAOse,GAAW,SACpBI,EAAM,GAAK,UACXA,EAAM,IAAMJ,MACP,CACL,IAAI5d,EAAM,KAAK,IACXN,EAAM,KAAK,KACX+B,GAAI/B,EAAI,OAAOM,CAAG,EACtB,GAAI,CAACyB,GACHuc,EAAM,GAAK,gBAEP1e,GAAQA,EAAK,KAAO,QACtB0e,EAAM,GAAK,OACX,KAAK,IAAM,KAAK,WAAW,GAClBvc,KAAM,KACfuc,EAAM,GAAK,SACX,KAAK,IAAM,KAAK,aAAa,GACpB,QAAQ,KAAKvc,EAAC,GACvBuc,EAAM,GAAK,SACX,KAAK,IAAM,KAAK,OAAO,OAAO,GACrB,cAAc,KAAKvc,EAAC,GAC7Buc,EAAM,GAAK,OACX,KAAK,IAAM,KAAK,OAAO,gBAAgB,IAEvCA,EAAM,GAAK,WACX,KAAK,IAAMhe,EAAM,GAEnBge,EAAM,IAAMte,EAAI,MAAMM,EAAK,KAAK,GAAG,EAC/Bge,EAAM,KAAO,OACf,GAAI,CACFA,EAAM,IAAM,KAAK,MAAMA,EAAM,GAAG,CAClC,MAAe,CACb,MAAM,KAAK,MAAM,eAAgBA,CAAK,CACxC,MACSA,EAAM,KAAO,SACtBA,EAAM,IAAMA,EAAM,IAAI,QAAQ,KAAM,EAAE,EAG5C,CACA,IAAIhX,EAMJ,GALI1H,GAAQA,EAAK,IAAMA,EAAK,KAAO0e,EAAM,GACvChX,EAAM,KAAK,MAAMtI,EAAG,iBAAkBY,EAAK,EAAE,EAAG0e,CAAK,EAC5C1e,GAAQA,EAAK,KAAOA,EAAK,MAAQ0e,EAAM,MAChDhX,EAAM,KAAK,MAAMtI,EAAG,oBAAqBY,EAAK,GAAG,EAAG0e,CAAK,GAEtDhX,EAEE,GAAI1H,GAAQA,EAAK,OAAQ,CAC9B,KAAK,IAAM0e,EAAM,IACjB,MACF,KACE,OAAMhX,MALN,QAAOgX,CAOX,EACAP,EAAU,UAAU,MAAQ,SAASc,EAAQC,EAAS,CACpD,IAAIC,EAAU,OAAOD,GAAW,SAC5Bxe,EAAMye,EAAUD,EAAQ,IAAMA,EAC9B9e,EAAM,KAAK,KACXgf,GAAU,EACVC,EAAY,EACZ1e,EACJ,IAAKA,EAAI,EAAGA,EAAID,EAAKC,IACfP,EAAI,OAAOO,CAAC,IAAM;AAAA,IACpBye,KACAC,EAAY1e,GAGhB,IAAIqO,EAAMmQ,EAAU/f,EAAG,uBAAwB8f,EAASD,CAAM,EAAIA,EAC9DvX,EAAM,IAAI,MAAMsH,CAAG,EACvB,OAAAtH,EAAI,MAAQyX,EAAUD,EAAU,OAChCxX,EAAI,QAAU0X,GACd1X,EAAI,OAAShH,EAAM2e,EACZ3X,CACT,EACAyW,EAAU,UAAU,MAAQ,SAASmB,EAAa,CAIhD,QAHIlf,EAAM,KAAK,KACXmf,EAAY,GACZ7e,EAAKyB,GACDA,EAAI/B,EAAI,OAAO,KAAK,GAAG,IAAM,KAAK,KAAK+B,CAAC,GAC9C,KAAK,MAGP,GADAzB,EAAM,KAAK,IACPyB,IAAM,IACR,OAAQ/B,EAAI,OAAO,KAAK,IAAM,CAAC,EAAG,CAChC,IAAK,IAEH,IADA,KAAK,KAAO,GACJ+B,EAAI/B,EAAI,OAAO,KAAK,GAAG,IAAM+B,IAAM;AAAA,GACzC,KAAK,MAEP,OAAO,KAAK,MAAMmd,CAAW,EAC/B,IAAK,IAKH,IAJA,KAAK,KAAO,EACRlf,EAAI,OAAO,KAAK,GAAG,IAAM,MAC3Bmf,EAAY,IAEPpd,EAAI/B,EAAI,OAAO,KAAK,KAAK,GAC9B,GAAI+B,IAAM,KAAO/B,EAAI,OAAO,KAAK,GAAG,IAAM,IAExC,OADA,KAAK,MACDmf,GAAaD,EACRE,EAAepf,EAAI,MAAMM,EAAM,EAAG,KAAK,IAAM,CAAC,CAAC,EAEjD,KAAK,MAAM4e,CAAW,EAGjC,MAAM,KAAK,MAAM,uBAAwB5e,CAAG,CAChD,CAEJ,EACAyd,EAAU,UAAU,OAAS,SAASsB,EAAK,CAGzC,QAFI/e,EAAM,KAAK,IACXN,EAAM,KAAK,KACRqf,EAAI,KAAKrf,EAAI,OAAOM,CAAG,CAAC,GAC7BA,IAEF,OAAOA,CACT,EACAyd,EAAU,UAAU,aAAe,UAAW,CAI5C,QAHIzd,EAAM,KAAK,IAAM,EACjBN,EAAM,KAAK,KACX+B,EACGA,EAAI/B,EAAI,OAAOM,CAAG,GAAG,CAC1B,GAAIyB,IAAM,IACR,OAAOzB,EAAM,EAEXyB,IAAM,KACRzB,GAAO,EAEPA,GAEJ,CACA,MAAM,KAAK,MAAM,sBAAuBA,EAAM,CAAC,CACjD,EACAyd,EAAU,UAAU,WAAa,UAAW,CAC1C,IAAIzd,EAAM+E,EAAM,QAAQ,KAAK,KAAM,KAAK,GAAG,EAC3C,GAAI/E,EAAM,EACR,MAAM,KAAK,MAAM,eAAgBA,CAAG,EAEtC,OAAOA,CACT,EACA,SAAS8e,EAAepf,EAAK,CAI3B,QAHIsf,EAAQtf,EAAI,QAAQ,mBAAoB,EAAE,EAAE,MAAM;AAAA,CAAI,EAAE,IAAI,SAASuf,EAAMhf,EAAG,CAChF,OAAOA,EAAIgf,EAAK,QAAQ,YAAa,EAAE,EAAIA,CAC7C,CAAC,EACMD,EAAM,QAAU,CAACA,EAAM,CAAC,GAC7BA,EAAM,MAAM,EAEd,KAAOA,EAAM,QAAU,CAACA,EAAMA,EAAM,OAAS,CAAC,GAC5CA,EAAM,IAAI,EAEZ,OAAOA,EAAM,KAAK;AAAA,CAAI,CACxB,CACA,SAAStC,GAAkBF,EAAU,CACnC,GAAIA,EAAS,UACX,OAAOA,EAAS,UAElB,IAAIjb,EAAQ,gBAAgB,KAAKib,EAAS,QAAQ,EAClD,OAAOjb,EAAQA,EAAM,CAAC,EAAI,MAC5B,CACAxD,EAAO,QAAU,CACf,UAAA0f,EACA,iBAAAnB,EACA,KAAAgB,EACA,aAAcT,EAAO,aACrB,WAAYA,EAAO,UACrB,CACF,CACF,CAAC,EAGGqC,GAAcviB,GAAW,CAC3B,iCAAiCmB,EAASC,EAAQ,CAChD,aACA,IAAIohB,EAAavP,GAAmB,EAChCwP,EAAWlN,GAAiB,EAC5BmN,EAAQlD,GAAc,EACtBjV,EAAQpC,GAAc,EACtBC,EAAQlH,GAAc,EACtBG,EAASC,GACT0d,EAAKC,GACLxd,EAAOC,GACPC,EAAUN,EAAO,OACrB,SAASshB,EAAO7W,EAAKnJ,EAAM,CACzB,IAAIigB,EAAmBF,EAAM,KAAK5W,CAAG,EACrC,OAAO8W,EAAiB,SAAWH,EAAS,QAAQ,YAAYG,EAAkBjgB,CAAI,EAAI4H,EAAM,KAAK,UAAUqY,EAAkBjgB,CAAI,CACvI,CACA,SAASkgB,EAAkB/V,EAAMnK,EAAM,CACrCA,EAAOA,GAAQ,CAAC,EAChB,IAAImgB,EAASngB,EAAK,SAAW,OAAS,GAAO,CAAC,CAACA,EAAK,OAChDV,EAAO,KAAK,IAAIU,EAAK,MAAQ,KAAM,CAAC,EACpCsE,GAAMmB,EAAM,UAAUnG,CAAI,EAC1B8gB,EAAK/D,EAAG,SAASlS,EAAM,GAAG,EAC9B,GAAI,CACF,IAAIzJ,EAAM2b,EAAG,SAAS+D,EAAI9b,GAAK,EAAGhF,CAAI,EACtC,GAAIoB,EAAM,GAAK,CAACmf,EAAW,YAAY,OAAOvb,GAAI,MAAM,EAAG,CAAC,CAAC,EAC3D,OAAO,KAET,IAAIS,EAAM,IAAIU,EAAM,IAAInB,EAAG,EACvBiN,EAAS,KACb,GACEA,EAASsO,EAAW,YAAY,MAAM9a,CAAG,QAClC,CAACsb,GAAQ,GAClB,GAAIF,IAAW,GAAO,CACpB,IAAI9N,EAAOd,EAAO,KAClBc,EAAK,aAAa,EAAI,KAAK,MAAMA,EAAK,aAAa,EAAE,SAAS,CAAC,EAC3DA,EAAK,YAAY,IAAM,SACzBA,EAAK,YAAY,EAAIA,EAAK,YAAY,EAAE,SAAS,EAErD,CACA,OAAOd,CACT,QAAE,CACA8K,EAAG,UAAU+D,CAAE,CACjB,CACA,SAASC,IAAU,CACjB,GAAItb,EAAI,QAAQ,EACd,MAAO,GAET,IAAIhC,EAAM,EAAIgC,EAAI,IAAI,OAClBsE,EAAO5D,EAAM,UAAU1C,CAAG,EAC9B,OAAAA,EAAMsZ,EAAG,SAAS+D,EAAI/W,EAAM,EAAGtG,CAAG,EAClCgC,EAAI,IAAM/F,EAAQ,OAAO,CAAC+F,EAAI,IAAKsE,CAAI,CAAC,EACxCtE,EAAI,IAAM,EACH,EACT,CACF,CACA,SAASub,GAAkBnW,EAAMnK,EAAM,CACrC,OAAOqc,EAAG,iBAAiBlS,CAAI,EAAE,KAAK,IAAI0V,EAAW,QAAQ,aAAa7f,CAAI,CAAC,CACjF,CACA,SAASugB,EAAkBpW,EAAMpD,EAAQ/G,EAAM,CAC7C,IAAI0W,EAAU,IAAImJ,EAAW,QAAQ,aAAa9Y,EAAQ/G,CAAI,EAC9D,OAAA0W,EAAQ,KAAK2F,EAAG,kBAAkBlS,EAAM,CAAE,gBAAiB,QAAS,CAAC,CAAC,EAC/DuM,CACT,CACAjY,EAAO,QAAU,CACf,QAASqhB,EAAS,QAClB,KAAMlY,EAAM,KACZ,iBAAkBmY,EAAM,iBACxB,kBAAAO,GACA,kBAAAC,EACA,iBAAkBT,EAAS,iBAC3B,kBAAAI,EACA,MAAOF,EACP,aAAcD,EAAM,aACpB,WAAYA,EAAM,WAClB,QAASF,EAAW,QACpB,MAAOjY,EAAM,SAEb,SAAUkY,EAAS,QACnB,SAAUhhB,EAAK,UACbihB,EAAM,iBACN,gCACF,EACA,QAASjhB,EAAK,UACZ8I,EAAM,KAAK,SACX,4BACF,EACA,MAAO9I,EAAK,UACV8I,EAAM,KAAK,SACX,6BACF,CACF,CACF,CACF,CAAC,EAGG4Y,GAAI,mBACJC,GAAI,eACJC,GAAI,KACJC,GAAI,IACJC,GAAI,mBACJC,GAAI,2BACJC,GAAI,kBACJC,GAAI,mBACJC,GAAI,CAAC,cAAe,kBAAmB,eAAgB,UAAU,EACjEC,GAAI,uBACJC,GAAI,aACJC,GAAI,OACJC,GAAI,gBACJC,GAAI,eACJC,GAAI,iBACJC,GAAI,OACJC,GAAI,gBACJC,GAAI,yBACJC,GAAK,GAAGD,EAAC,yCACTE,GAAK,GAAGF,EAAC,6CACTG,GAAK,GAAGH,EAAC,sCACTI,GAAK,GAAGJ,EAAC,wCACTK,GAAI,GAAGL,EAAC,iCACRM,GAAI,GAAGN,EAAC,sCACRO,GAAI,GAAGP,EAAC,kCACRQ,GAAI,GAAGR,EAAC,8DACRS,GAAI,GAAGT,EAAC,kCACRU,GAAI,GAAGV,EAAC,0BACRW,GAAI,GAAGX,EAAC,qCACRY,GAAI,GAAGZ,EAAC,6BACRa,GAAI,OAAO,aAAe,KAAM,QAAO,aAAa,GAAG,WACvDC,GAAI,OAAO,aAAe,KAAM,QAAO,aAAa,GAAG,WAC3D,OAAOD,GAAI,KAAO,OAAOC,GAAI,KAAO,QAAQ,MAAM,iKAAiK,EACnN,IAAIC,GAAK,CAAE,SAAU,EAAK,EACtBC,GAAMC,GAAM,IAAIA,EAAE,WAAW,CAAC,EAAE,SAAS,EAAE,EAAE,YAAY,CAAC,GAC1DC,GAAKD,GAAM,mBAAmBA,CAAC,EAAE,QAAQ,WAAYD,EAAE,EACvDG,GAAKF,GAAMC,GAAED,CAAC,EAAE,QAAQ,OAAQ,GAAG,EACnCG,GAAI,KAAM,CACZ,YAAY,CAAE,YAAaC,EAAG,gBAAiB7Z,EAAG,SAAU8Z,EAAG,WAAYve,EAAG,OAAQiJ,EAAI,OAAQ,sBAAuB9M,EAAI,QAAS,oBAAqBwC,EAAI,OAAQ,OAAQhB,EAAI,MAAO,EAAG,CAC3L,KAAK,cAAgB,IAAM,KAAK,WAAY,KAAK,cAAiBxC,GAAM,CACtE,KAAK,WAAaA,CACpB,EAAG,KAAK,UAAY,IAAM,KAAK,OAAQ,KAAK,UAAaA,GAAM,CAC7D,KAAK,OAASA,CAChB,EAAG,KAAK,YAAc,IAAM,KAAK,SAAU,KAAK,YAAeA,GAAM,CACnE,KAAK,SAAWA,CAClB,EAAG,KAAK,yBAA2B,IAAM,KAAK,sBAAuB,KAAK,yBAA4BA,GAAM,CAC1G,KAAK,sBAAwBA,CAC/B,EAAG,KAAK,aAAgBA,GAAMqjB,GAAErjB,CAAC,EAAG,KAAK,SAAW,KAAO,CAAE,YAAa,KAAK,YAAa,gBAAiB,KAAK,gBAAiB,OAAQ,KAAK,OAAQ,OAAQ,KAAK,WAAY,SAAU,KAAK,SAAU,sBAAuB,KAAK,sBAAuB,oBAAqB,KAAK,oBAAqB,OAAQ,KAAK,MAAO,GAAI,KAAK,SAAYA,GAAM,CACzV,KAAK,2BAA2BA,EAAE,YAAaA,EAAE,gBAAiBA,EAAE,WAAYA,EAAE,QAAQ,EAAG,KAAK,YAAcA,EAAE,YAAa,KAAK,gBAAkBA,EAAE,gBAAiB,KAAK,OAASA,EAAE,QAAU,OAAQ,KAAK,WAAaA,EAAE,WAAY,KAAK,SAAWA,EAAE,SAAU,KAAK,sBAAwBA,EAAE,uBAAyB,QAAS,KAAK,oBAAsBA,EAAE,oBAAqB,KAAK,OAASA,EAAE,MAC5Y,EAAG,KAAK,2BAA2BmjB,EAAG7Z,EAAG8Z,EAAGve,CAAC,EAAG,KAAK,YAAcse,EAAG,KAAK,gBAAkB7Z,EAAG,KAAK,SAAW8Z,EAAG,KAAK,WAAave,EAAG,KAAK,OAASiJ,EAAG,KAAK,sBAAwB9M,EAAG,KAAK,oBAAsBwC,EAAG,KAAK,OAAShB,CACvO,CACA,2BAA2B2gB,EAAG7Z,EAAG8Z,EAAGve,EAAG,CACrC,GAAI,OAAOse,GAAK,UAAYA,EAAE,KAAK,EAAE,SAAW,EAAG,MAAM,IAAI,UAAUpB,EAAE,EACzE,GAAI,OAAOzY,GAAK,UAAYA,EAAE,KAAK,EAAE,SAAW,EAAG,MAAM,IAAI,UAAU0Y,EAAE,EACzE,GAAI,OAAOoB,GAAK,UAAYA,EAAE,KAAK,EAAE,SAAW,EAAG,MAAM,IAAI,UAAUnB,EAAE,EACzE,GAAI,OAAOpd,GAAK,UAAYA,EAAE,KAAK,EAAE,SAAW,EAAG,MAAM,IAAI,UAAUqd,EAAE,CAC3E,CACA,qBAAqBiB,EAAG,CACtB,GAAIA,IAAM,OAASA,IAAM,OAAQ,MAAM,KAAK,KAAK,QAAS,GAAGrB,EAAC,mCAAmC,EAAG,IAAI,MAAM,mCAAmC,CACnJ,CACA,UAAUqB,EAAG,CACX,GAAI,OAAOA,GAAK,UAAYA,EAAE,KAAK,EAAE,SAAW,EAAG,MAAM,KAAK,KAAK,QAAShB,EAAC,EAAG,IAAI,UAAUA,EAAC,CACjG,CACA,gBAAgBgB,EAAG,CACjB,GAAI,OAAOA,GAAK,UAAYA,EAAE,KAAK,EAAE,SAAW,EAAG,MAAM,KAAK,KAAK,QAAST,EAAC,EAAG,IAAI,UAAUA,EAAC,CACjG,CACA,aAAaS,EAAG,CACd,GAAI,OAAOA,GAAK,SAAU,MAAM,KAAK,KAAK,QAASX,EAAC,EAAG,IAAI,UAAUA,EAAC,CACxE,CACA,cAAcW,EAAG,CACf,GAAI,OAAOA,GAAK,UAAYA,GAAK,EAAG,MAAM,KAAK,KAAK,QAASV,EAAC,EAAG,IAAI,UAAUA,EAAC,CAClF,CACA,WAAWU,EAAG,CACZ,GAAI,OAAOA,GAAK,SAAU,MAAM,KAAK,KAAK,QAAS,GAAGrB,EAAC,wBAAwB,EAAG,IAAI,UAAU,GAAGA,EAAC,wBAAwB,CAC9H,CACA,KAAKqB,EAAG7Z,EAAG8Z,EAAI,CAAC,EAAG,CACjB,GAAI,KAAK,QAAU,OAAO,KAAK,OAAOD,CAAC,GAAK,WAAY,CACtD,IAAIte,EAAKrB,GAAM,OAAOA,GAAK,UAAYA,IAAM,KAAOA,EAAI,OAAO,KAAKA,CAAC,EAAE,OAAO,CAAChB,EAAGxC,KAAOqhB,GAAE,SAASrhB,EAAE,YAAY,CAAC,EAAIwC,EAAExC,CAAC,EAAI,aAAe,OAAOwD,EAAExD,CAAC,GAAK,UAAYwD,EAAExD,CAAC,IAAM,KAAOwC,EAAExC,CAAC,EAAI6E,EAAErB,EAAExD,CAAC,CAAC,EAAIwC,EAAExC,CAAC,EAAIwD,EAAExD,CAAC,EAAGwC,GAAI,MAAM,QAAQgB,CAAC,EAAI,CAAC,EAAI,CAAC,CAAC,EAAGsK,EAAIjJ,EAAEue,CAAC,EAAGpiB,EAAI,CAAE,UAA4B,IAAI,KAAK,EAAG,YAAY,EAAG,MAAOmiB,EAAG,QAAS7Z,EAAG,GAAGwE,EAAG,QAASjJ,EAAE,CAAE,WAAY,KAAK,WAAY,OAAQ,KAAK,OAAQ,SAAU,KAAK,SAAU,YAAa,KAAK,YAAc,GAAG,KAAK,YAAY,UAAU,EAAG,CAAC,CAAC,MAAQ,MAAO,CAAC,CAAE,EACvgB,KAAK,OAAOse,CAAC,EAAEniB,CAAC,CAClB,CACF,CACA,MAAM,iBAAiBmiB,EAAG,CACxB,KAAK,UAAUA,CAAC,EAChB,IAAI7Z,EAAI,CAAE,CAACgY,EAAC,EAAGL,EAAE,EAAGmC,EAAIH,GAAEE,CAAC,EAAG,CAAE,IAAKte,EAAG,QAASiJ,CAAE,EAAI,MAAM,KAAK,MAAM,OAAQsV,EAAG,CAAC,EAAG9Z,EAAG,EAAE,EAAG9F,GAAK,MAAM,KAAK,aAAaqB,EAAG,OAAQiJ,CAAC,GAAG,QAAQ,IAAI6T,EAAC,EACxJ,OAAOne,EAAI,SAASA,EAAG,EAAE,EAAI,CAC/B,CACA,MAAM,cAAe,CACnB,IAAI2f,EAAI,CAAE,CAAC7B,EAAC,EAAGL,EAAE,EAAG,CAAE,IAAK3X,EAAG,QAAS8Z,CAAE,EAAI,MAAM,KAAK,MAAM,OAAQ,GAAI,CAAC,EAAGD,EAAG,EAAE,EAAGte,EAAI,MAAM,KAAK,aAAayE,EAAG,OAAQ8Z,CAAC,EAC9H,MAAO,CAAC,EAAEve,EAAE,IAAMA,EAAE,SAAW,IACjC,CACA,MAAM,WAAWse,EAAG7Z,EAAI,CAAC,EAAG,CAC1B,KAAK,UAAU6Z,CAAC,EAChB,GAAI,CAAE,aAAcC,EAAG,mBAAoBve,CAAE,EAAI,KAAK,iBAAiByE,CAAC,EAAGwE,EAAI,CAAE,CAACwT,EAAC,EAAGL,GAAG,GAAGpc,CAAE,EAAG7D,EAAIiiB,GAAEE,CAAC,EAAG,CAAE,IAAK3f,EAAG,QAAShB,CAAE,EAAI,MAAM,KAAK,MAAM,OAAQxB,EAAGoiB,EAAGtV,EAAG,EAAE,EACxK,GAAI,CACF,IAAI9N,EAAI,MAAM,KAAK,aAAawD,EAAG,OAAQhB,EAAG,GAAI,CAAC,IAAK,IAAK,IAAK,GAAG,CAAC,EACtE,OAAOxC,EAAE,SAAW,IAAM,GAAQA,EAAE,SAAW,KAAOA,EAAE,SAAW,IAAM,KAAOA,EAAE,IAAMA,EAAE,SAAW,IAAM,IAAQ,KAAK,qBAAqBA,CAAC,EAAG,GACnJ,OAASA,EAAG,CACV,IAAIiB,EAAIjB,aAAa,MAAQA,EAAE,QAAU,OAAOA,CAAC,EACjD,MAAM,KAAK,KAAK,QAAS,GAAG8hB,EAAC,mCAAmC7gB,CAAC,EAAE,EAAG,IAAI,MAAM,GAAG6gB,EAAC,mCAAmC7gB,CAAC,EAAE,CAC5H,CACF,CACA,MAAM,MAAMkiB,EAAG7Z,EAAG8Z,EAAGve,EAAGiJ,EAAG,CACzB,IAAI9M,EAAqB,IAAI,KAAK,EAAG,YAAY,EAAE,QAAQ,gBAAiB,EAAE,EAAGwC,EAAI,OAAO8F,GAAK,UAAYA,EAAE,OAAS,EAAI,IAAI,IAAIA,EAAG,KAAK,QAAQ,EAAI,IAAI,IAAI,KAAK,QAAQ,EAC7K9F,EAAE,SAAW,IAAI,UAAU,KAAK,UAAU,CAAC,GAAGA,EAAE,QAAQ,GAAIqB,EAAEyc,EAAC,EAAIxT,EAAI,MAAMwV,GAAExV,CAAC,EAAImT,GAAGpc,EAAE0c,EAAC,EAAIvgB,EAAG6D,EAAE2c,EAAC,EAAIhe,EAAE,KAC1G,IAAIhB,EAAI,KAAK,uBAAuBqC,CAAC,EAAG7E,EAAI,OAAO,KAAK6E,CAAC,EAAE,IAAK0e,IAAMA,GAAE,YAAY,CAAC,EAAE,KAAK,EAAE,KAAK,GAAG,EAAGtiB,EAAI,MAAM,KAAK,uBAAuBkiB,EAAG3f,EAAG4f,EAAG5gB,EAAGxC,EAAG8N,CAAC,EAAG/I,EAAI,MAAM,KAAK,mBAAmB/D,EAAGC,CAAC,EAAGiE,EAAI,MAAM,KAAK,oBAAoBlE,EAAG+D,CAAC,EAAGye,EAAI,KAAK,0BAA0BxiB,EAAGhB,EAAGkF,CAAC,EAC/R,OAAOL,EAAE4c,EAAC,EAAI+B,EAAG,CAAE,IAAKhgB,EAAE,SAAS,EAAG,QAASqB,CAAE,CACnD,CACA,uBAAuBse,EAAG,CACxB,OAAO,OAAO,QAAQA,CAAC,EAAE,IAAI,CAAC,CAAC7Z,EAAG8Z,CAAC,IAAM,GAAG9Z,EAAE,YAAY,CAAC,IAAI,OAAO8Z,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK;AAAA,CAClG,CACC,CACA,MAAM,uBAAuBD,EAAG7Z,EAAG8Z,EAAGve,EAAGiJ,EAAG9M,EAAG,CAC7C,MAAO,CAACmiB,EAAG7Z,EAAE,SAAU,KAAK,2BAA2B8Z,CAAC,EAAG,GAAGve,CAAC;AAAA,EAChEiJ,EAAG9M,EAAI,MAAMsiB,GAAEtiB,CAAC,EAAIigB,EAAC,EAAE,KAAK;AAAA,CAC9B,CACC,CACA,MAAM,mBAAmBkC,EAAG7Z,EAAG,CAC7B,IAAI8Z,EAAI,CAACD,EAAE,MAAM,EAAG,CAAC,EAAG,KAAK,OAAQpC,GAAGD,EAAC,EAAE,KAAK,GAAG,EACnD,MAAO,CAACD,GAAGsC,EAAGC,EAAG,MAAME,GAAEha,CAAC,CAAC,EAAE,KAAK;AAAA,CACrC,CACC,CACA,MAAM,oBAAoB6Z,EAAG7Z,EAAG,CAC9B,IAAI8Z,EAAI,MAAM,KAAK,iBAAiBD,EAAE,MAAM,EAAG,CAAC,CAAC,EACjD,OAAOM,GAAEL,EAAG9Z,EAAG,KAAK,CACtB,CACA,0BAA0B6Z,EAAG7Z,EAAG8Z,EAAG,CACjC,IAAIve,EAAI,CAACse,EAAE,MAAM,EAAG,CAAC,EAAG,KAAK,OAAQpC,GAAGD,EAAC,EAAE,KAAK,GAAG,EACnD,MAAO,CAAC,GAAGD,EAAC,eAAe,KAAK,WAAW,IAAIhc,CAAC,GAAI,iBAAiByE,CAAC,GAAI,aAAa8Z,CAAC,EAAE,EAAE,KAAK,IAAI,CACvG,CACA,iBAAiBD,EAAG,CAClB,IAAI7Z,EAAI,CAAC,EAAG8Z,EAAI,CAAC,EAAGve,EAAI,CAAC,WAAY,gBAAiB,oBAAqB,qBAAqB,EAChG,OAAS,CAACiJ,EAAG9M,CAAC,IAAK,OAAO,QAAQmiB,CAAC,EAAGte,EAAE,SAASiJ,CAAC,EAAIsV,EAAEtV,CAAC,EAAI9M,EAAIsI,EAAEwE,CAAC,EAAI9M,EACxE,MAAO,CAAE,aAAcsI,EAAG,mBAAoB8Z,CAAE,CAClD,CACA,MAAM,KAAKD,EAAI,IAAK7Z,EAAI,GAAI8Z,EAAI,IAAKve,EAAI,MAAOiJ,EAAI,CAAC,EAAG,CACtD,KAAK,gBAAgBqV,CAAC,EAAG,KAAK,aAAa7Z,CAAC,EAAG,KAAK,cAAc8Z,CAAC,EAAG,KAAK,qBAAqBve,CAAC,EAAG,KAAK,WAAWiJ,CAAC,EAAG,KAAK,KAAK,OAAQ,sBAAsBxE,CAAC,EAAE,EACnK,IAAItI,EAAI,CAAE,YAAaggB,GAAG,WAAY,OAAOoC,CAAC,EAAG,GAAGtV,CAAE,EACtDxE,EAAE,OAAS,IAAMtI,EAAE,OAASsI,GAC5B,IAAI9F,EAAI,CAAE,CAACke,EAAC,EAAGN,GAAG,CAACE,EAAC,EAAGL,EAAE,EAAGze,EAAI2gB,IAAM,IAAMA,EAAIH,GAAEG,CAAC,EAAG,CAAE,IAAKnjB,EAAG,QAASiB,CAAE,EAAI,MAAM,KAAK,MAAM,MAAOuB,EAAGxB,EAAGwC,EAAG,EAAE,EAAGuB,EAAI,GAAG/E,CAAC,IAAI,IAAI,gBAAgBgB,CAAC,CAAC,GAAIkE,EAAI,MAAM,KAAK,aAAaH,EAAG,MAAO9D,CAAC,EAAGuiB,EAAI,MAAMte,EAAE,KAAK,EACtN,GAAIL,IAAM,OAAQ,CAChB,IAAI6e,EAAIxe,EAAE,QAAQ,IAAIyc,EAAC,EAAGgC,EAAIze,EAAE,QAAQ,IAAI2c,EAAC,EAAG+B,EAAI1e,EAAE,QAAQ,IAAI0c,EAAC,EACnE,MAAO,CAAE,KAAM8B,EAAI,CAACA,EAAI,OAAQ,MAAOC,EAAI,IAAI,KAAKA,CAAC,EAAI,OAAQ,KAAMC,GAAK,MAAO,CACrF,CACA,IAAIL,GAAIM,GAAEL,CAAC,EAAGM,EAAIP,GAAE,kBAAoBA,GAAE,OAASA,GACnD,OAAOO,EAAE,UAAYA,CACvB,CACA,MAAM,qBAAqBX,EAAI,IAAK7Z,EAAI,GAAI8Z,EAAI,MAAOve,EAAI,CAAC,EAAG,CAC7D,IAAIiJ,EAAG9M,EAAGwC,EACV,KAAK,gBAAgB2f,CAAC,EAAG,KAAK,aAAa7Z,CAAC,EAAG,KAAK,qBAAqB8Z,CAAC,EAAG,KAAK,WAAWve,CAAC,EAAG,KAAK,KAAK,OAAQ,gCAAgCyE,CAAC,EAAE,EACtJ,IAAI9G,EAAI,CAAE,QAAS,GAAI,GAAGqC,CAAE,EAAG7E,EAAI,CAAE,CAAC0hB,EAAC,EAAGN,GAAG,CAACE,EAAC,EAAGL,EAAE,EAAGhgB,EAAIkiB,IAAM,IAAMA,EAAIH,GAAEG,CAAC,EAAG,CAAE,IAAKpe,EAAG,QAASG,CAAE,EAAI,MAAM,KAAK,MAAM,MAAOjE,EAAGuB,EAAGxC,EAAG,EAAE,EAAGwjB,EAAI,GAAGze,CAAC,IAAI,IAAI,gBAAgBvC,CAAC,CAAC,GAAI+gB,GAAI,MAAM,KAAK,aAAaC,EAAG,MAAOte,CAAC,EAAG4e,EAAI,MAAMP,GAAE,KAAK,EACjP,GAAIH,IAAM,OAAQ,MAAO,CAAE,KAAM,GAAGtV,EAAIyV,GAAE,QAAQ,IAAI5B,EAAC,KAAO,MAAQ7T,IAAM,OAASA,EAAI,KAAM,MAAO,IAAI,MAAM9M,EAAIuiB,GAAE,QAAQ,IAAI1B,EAAC,KAAO,MAAQ7gB,IAAM,OAASA,EAAI,EAAE,EAAG,MAAOwC,EAAI+f,GAAE,QAAQ,IAAI3B,EAAC,KAAO,MAAQpe,IAAM,OAASA,EAAI,EAAG,EACzO,IAAIkgB,EAAIG,GAAEC,CAAC,EAAGH,EAAID,EAAE,4BAA8BA,EAAE,OAASA,EAC7D,OAAOC,EAAE,SAAWA,CACtB,CACA,MAAM,IAAIR,EAAG7Z,EAAI,CAAC,EAAG,CACnB,KAAK,UAAU6Z,CAAC,EAAG,KAAK,KAAK,OAAQ,kBAAkBA,CAAC,EAAE,EAC1D,GAAI,CAAE,aAAcC,EAAG,mBAAoBve,CAAE,EAAI,KAAK,iBAAiByE,CAAC,EAAGwE,EAAI,CAAE,CAAC4T,EAAC,EAAGN,GAAG,CAACE,EAAC,EAAGL,GAAG,GAAGpc,CAAE,EAAG7D,EAAIiiB,GAAEE,CAAC,EAAG,CAAE,IAAK3f,EAAG,QAAShB,CAAE,EAAI,MAAM,KAAK,MAAM,MAAOxB,EAAGoiB,EAAGtV,EAAG,EAAE,EAAG9N,EAAI,MAAM,KAAK,aAAawD,EAAG,MAAOhB,EAAG,GAAI,CAAC,IAAK,IAAK,IAAK,GAAG,CAAC,EACnP,GAAIxC,EAAE,SAAW,KAAOA,EAAE,SAAW,KAAOA,EAAE,SAAW,IAAK,OAAO,KAAK,KAAK,QAAS,iCAAiCA,EAAE,MAAM,EAAE,EAAG,KACtI,GAAI,CAACA,EAAE,GAAI,MAAM,KAAK,KAAK,QAAS,iCAAiCA,EAAE,MAAM,EAAE,EAAG,IAAI,MAAM,iCAAiCA,EAAE,MAAM,EAAE,EACvI,OAAOA,EAAE,KAAK,CAChB,CACA,MAAM,kBAAkBmjB,EAAG7Z,EAAI,CAAC,EAAG,CACjC,KAAK,UAAU6Z,CAAC,EAAG,KAAK,KAAK,OAAQ,kBAAkBA,CAAC,EAAE,EAC1D,GAAI,CAAE,aAAcC,EAAG,mBAAoBve,CAAE,EAAI,KAAK,iBAAiByE,CAAC,EAAGwE,EAAI,CAAE,CAAC4T,EAAC,EAAGN,GAAG,CAACE,EAAC,EAAGL,GAAG,GAAGpc,CAAE,EAAG7D,EAAIiiB,GAAEE,CAAC,EAAG,CAAE,IAAK3f,EAAG,QAAShB,CAAE,EAAI,MAAM,KAAK,MAAM,MAAOxB,EAAGoiB,EAAGtV,EAAG,EAAE,EAC/K,GAAI,CACF,IAAI9N,EAAI,MAAM,KAAK,aAAawD,EAAG,MAAOhB,EAAG,GAAI,CAAC,IAAK,IAAK,IAAK,GAAG,CAAC,EACrE,GAAIxC,EAAE,SAAW,KAAOA,EAAE,SAAW,KAAOA,EAAE,SAAW,IAAK,OAAO,KAAK,KAAK,QAAS,iCAAiCA,EAAE,MAAM,EAAE,EAAG,CAAE,KAAM,KAAM,KAAM,IAAK,EAC/J,GAAI,CAACA,EAAE,GAAI,MAAM,KAAK,KAAK,QAAS,iCAAiCA,EAAE,MAAM,EAAE,EAAG,IAAI,MAAM,iCAAiCA,EAAE,MAAM,EAAE,EACvI,IAAIiB,EAAIjB,EAAE,QAAQ,IAAI,MAAM,EAC5B,GAAI,CAACiB,EAAG,MAAM,IAAI,MAAM,oCAAoC,EAC5D,IAAI8D,EAAI,MAAM/E,EAAE,KAAK,EACrB,MAAO,CAAE,KAAMqjB,GAAEpiB,CAAC,EAAG,KAAM8D,CAAE,CAC/B,OAAS/E,EAAG,CACV,MAAM,KAAK,KAAK,QAAS,wBAAwBmjB,CAAC,eAAenjB,CAAC,EAAE,EAAGA,CACzE,CACF,CACA,MAAM,QAAQmjB,EAAG7Z,EAAI,CAAC,EAAG,CACvB,KAAK,UAAU6Z,CAAC,EAAG,KAAK,KAAK,OAAQ,uBAAuBA,CAAC,EAAE,EAC/D,GAAI,CAAE,aAAcC,EAAG,mBAAoBve,CAAE,EAAI,KAAK,iBAAiByE,CAAC,EAAGwE,EAAI,CAAE,CAAC4T,EAAC,EAAGN,GAAG,CAACE,EAAC,EAAGL,GAAG,GAAGpc,CAAE,EAAG7D,EAAIiiB,GAAEE,CAAC,EAAG,CAAE,IAAK3f,EAAG,QAAShB,CAAE,EAAI,MAAM,KAAK,MAAM,OAAQxB,EAAGoiB,EAAGtV,EAAG,EAAE,EAAG9N,EAAI,MAAM,KAAK,aAAawD,EAAG,OAAQhB,EAAG,GAAI,CAAC,IAAK,IAAK,GAAG,CAAC,EAChP,GAAI,KAAK,KAAK,OAAQ,oBAAoBxC,EAAE,OAAQA,EAAE,UAAU,EAAE,EAAGA,EAAE,SAAW,KAAOA,EAAE,SAAW,IAAK,OAAO,KAClH,IAAIiB,EAAIjB,EAAE,QAAQ,IAAI,MAAM,EAC5B,GAAI,CAACiB,EAAG,MAAM,KAAK,KAAK,QAAS,oCAAoC,EAAG,IAAI,MAAM,oCAAoC,EACtH,OAAOoiB,GAAEpiB,CAAC,CACZ,CACA,MAAM,YAAYkiB,EAAG7Z,EAAI,GAAM8Z,EAAI,EAAGve,EAAI,KAAK,sBAAuBiJ,EAAI,CAAC,EAAG,CAC5E,KAAK,UAAUqV,CAAC,EAChB,GAAI,CAAE,aAAcniB,EAAG,mBAAoBwC,CAAE,EAAI,KAAK,iBAAiB,CAAE,GAAGsK,CAAE,CAAC,EAAGtL,EAAI,CAAE,CAACkf,EAAC,EAAGN,GAAG,CAACE,EAAC,EAAGL,GAAG,GAAG3X,EAAI,CAAC,EAAI,CAAE,MAAO,SAAS8Z,CAAC,IAAIve,EAAI,CAAC,EAAG,EAAG,GAAGrB,CAAE,EAAGxD,EAAIijB,GAAEE,CAAC,EAAG,CAAE,IAAKliB,EAAG,QAAS8D,CAAE,EAAI,MAAM,KAAK,MAAM,MAAO/E,EAAGgB,EAAGwB,EAAG,EAAE,EAAG0C,EAAI,GAAGjE,CAAC,IAAI,IAAI,gBAAgBD,CAAC,CAAC,GACzQ,OAAO,KAAK,aAAakE,EAAG,MAAOH,CAAC,CACtC,CACA,MAAM,IAAIoe,EAAG7Z,EAAG,CACd,GAAI,KAAK,UAAU6Z,CAAC,EAAG,EAAE7Z,aAAa,QAAU,OAAOA,GAAK,UAAW,MAAM,KAAK,KAAK,QAASiZ,EAAC,EAAG,IAAI,UAAUA,EAAC,EACnH,KAAK,KAAK,OAAQ,oBAAoBY,CAAC,EAAE,EACzC,IAAIC,EAAI,OAAO9Z,GAAK,SAAW,OAAO,WAAWA,CAAC,EAAIA,EAAE,OAAQzE,EAAI,CAAE,CAAC8c,EAAC,EAAGyB,CAAE,EAAGtV,EAAImV,GAAEE,CAAC,EAAG,CAAE,IAAKniB,EAAG,QAASwC,CAAE,EAAI,MAAM,KAAK,MAAM,MAAOsK,EAAG,CAAC,EAAGjJ,EAAGyE,CAAC,EACtJ,OAAO,MAAM,KAAK,aAAatI,EAAG,MAAOwC,EAAG8F,CAAC,CAC/C,CACA,MAAM,qBAAqB6Z,EAAG7Z,EAAI4X,GAAG,CACnC,GAAI,KAAK,UAAUiC,CAAC,EAAG,OAAO7Z,GAAK,SAAU,MAAM,KAAK,KAAK,QAAS,GAAGwY,EAAC,2BAA2B,EAAG,IAAI,UAAU,GAAGA,EAAC,2BAA2B,EACrJ,KAAK,KAAK,OAAQ,0CAA0CqB,CAAC,EAAE,EAC/D,IAAIC,EAAI,CAAE,QAAS,EAAG,EAAGve,EAAI,CAAE,CAAC6c,EAAC,EAAGpY,EAAG,CAACgY,EAAC,EAAGL,EAAE,EAAGnT,EAAImV,GAAEE,CAAC,EAAG,CAAE,IAAKniB,EAAG,QAASwC,CAAE,EAAI,MAAM,KAAK,MAAM,OAAQsK,EAAGsV,EAAGve,EAAG,EAAE,EAAGrC,EAAI,GAAGxB,CAAC,IAAI,IAAI,gBAAgBoiB,CAAC,CAAC,GAAIniB,EAAI,MAAO,MAAM,KAAK,aAAauB,EAAG,OAAQgB,CAAC,GAAG,KAAK,EAAGuB,EAAI8e,GAAE5iB,CAAC,EAClO,GAAI,OAAO8D,GAAK,UAAYA,IAAM,MAAQ,UAAWA,GAAK,OAAOA,EAAE,OAAS,UAAYA,EAAE,QAAU,MAAQ,YAAaA,EAAE,MAAO,CAChI,IAAIG,EAAI,OAAOH,EAAE,MAAM,OAAO,EAC9B,MAAM,KAAK,KAAK,QAAS,GAAG+c,EAAC,qCAAqC5c,CAAC,EAAE,EAAG,IAAI,MAAM,GAAG4c,EAAC,qCAAqC5c,CAAC,EAAE,CAChI,CACA,GAAI,OAAOH,GAAK,UAAYA,IAAM,KAAM,CACtC,GAAI,CAACA,EAAE,+BAAiC,CAACA,EAAE,8BAA8B,SAAU,MAAM,KAAK,KAAK,QAAS,GAAG+c,EAAC,4DAA4D,EAAG,IAAI,MAAM,GAAGA,EAAC,kEAAkE,EAC/P,OAAO/c,EAAE,8BAA8B,QACzC,KAAO,OAAM,KAAK,KAAK,QAAS,GAAG+c,EAAC,+DAA+D,EAAG,IAAI,MAAM,GAAGA,EAAC,+DAA+D,CACrL,CACA,MAAM,WAAWqB,EAAG7Z,EAAG8Z,EAAGve,EAAGiJ,EAAI,CAAC,EAAG,CACnC,KAAK,0BAA0BqV,EAAG7Z,EAAG8Z,EAAGve,EAAGiJ,CAAC,EAC5C,IAAI9M,EAAI,CAAE,SAAUoiB,EAAG,WAAYve,EAAG,GAAGiJ,CAAE,EAAGtK,EAAI,CAAE,CAACme,EAAC,EAAGrY,EAAE,MAAO,EAAG9G,EAAIygB,GAAEE,CAAC,EAAG,CAAE,IAAKnjB,EAAG,QAASiB,CAAE,EAAI,MAAM,KAAK,MAAM,MAAOuB,EAAGxB,EAAGwC,EAAG8F,CAAC,EAAGvE,EAAI,GAAG/E,CAAC,IAAI,IAAI,gBAAgBgB,CAAC,CAAC,GAAIkE,EAAI,MAAM,KAAK,aAAaH,EAAG,MAAO9D,EAAGqI,CAAC,EAAGka,EAAIH,GAAEne,EAAE,QAAQ,IAAI,MAAM,GAAK,EAAE,EACjQ,MAAO,CAAE,WAAYL,EAAG,KAAM2e,CAAE,CAClC,CACA,0BAA0BL,EAAG7Z,EAAG8Z,EAAGve,EAAGiJ,EAAG,CACvC,GAAI,KAAK,UAAUqV,CAAC,EAAG,EAAE7Z,aAAa,QAAU,OAAOA,GAAK,UAAW,MAAM,KAAK,KAAK,QAASiZ,EAAC,EAAG,IAAI,UAAUA,EAAC,EACnH,GAAI,OAAOa,GAAK,UAAYA,EAAE,KAAK,EAAE,SAAW,EAAG,MAAM,KAAK,KAAK,QAAShB,EAAC,EAAG,IAAI,UAAUA,EAAC,EAC/F,GAAI,CAAC,OAAO,UAAUvd,CAAC,GAAKA,GAAK,EAAG,MAAM,KAAK,KAAK,QAAS,GAAGid,EAAC,uCAAuC,EAAG,IAAI,UAAU,GAAGA,EAAC,uCAAuC,EACpK,KAAK,WAAWhU,CAAC,CACnB,CACA,MAAM,wBAAwBqV,EAAG7Z,EAAG8Z,EAAG,CACrC,GAAI,KAAK,UAAUD,CAAC,EAAG,OAAO7Z,GAAK,UAAYA,EAAE,KAAK,EAAE,SAAW,EAAG,MAAM,KAAK,KAAK,QAAS8Y,EAAC,EAAG,IAAI,UAAUA,EAAC,EAClH,GAAI,CAAC,MAAM,QAAQgB,CAAC,GAAKA,EAAE,SAAW,EAAG,MAAM,KAAK,KAAK,QAASf,EAAC,EAAG,IAAI,UAAUA,EAAC,EACrF,GAAI,CAACe,EAAE,MAAOG,GAAM,OAAOA,EAAE,YAAc,UAAY,OAAOA,EAAE,MAAQ,QAAQ,EAAG,MAAM,KAAK,KAAK,QAASjB,EAAC,EAAG,IAAI,UAAUA,EAAC,EAC/H,KAAK,KAAK,OAAQ,6BAA6BhZ,CAAC,eAAe6Z,CAAC,EAAE,EAClE,IAAIte,EAAI,CAAE,SAAUyE,CAAE,EAAGwE,EAAI,KAAK,iCAAiCsV,CAAC,EAAGpiB,EAAI,CAAE,CAAC0gB,EAAC,EAAGP,GAAG,CAACQ,EAAC,EAAG,OAAO,WAAW7T,CAAC,EAAE,SAAS,EAAG,CAACwT,EAAC,EAAG,MAAMgC,GAAExV,CAAC,CAAE,EAAGtK,EAAIyf,GAAEE,CAAC,EAAG,CAAE,IAAK3gB,EAAG,QAASxC,CAAE,EAAI,MAAM,KAAK,MAAM,OAAQwD,EAAGqB,EAAG7D,EAAG8M,CAAC,EAAG7M,EAAI,GAAGuB,CAAC,IAAI,IAAI,gBAAgBqC,CAAC,CAAC,GAAIK,EAAI,MAAO,MAAM,KAAK,aAAajE,EAAG,OAAQjB,EAAG8N,CAAC,GAAG,KAAK,EAAG0V,EAAIK,GAAE3e,CAAC,EACjU,GAAI,OAAOse,GAAK,UAAYA,IAAM,MAAQ,UAAWA,GAAK,OAAOA,EAAE,OAAS,UAAYA,EAAE,QAAU,MAAQ,YAAaA,EAAE,MAAO,CAChI,IAAID,EAAI,OAAOC,EAAE,MAAM,OAAO,EAC9B,MAAM,KAAK,KAAK,QAAS,GAAG1B,EAAC,qCAAqCyB,CAAC,EAAE,EAAG,IAAI,MAAM,GAAGzB,EAAC,qCAAqCyB,CAAC,EAAE,CAChI,CACA,OAAOC,EAAE,6BACX,CACA,MAAM,qBAAqBL,EAAG7Z,EAAG,CAC/B,GAAI,KAAK,UAAU6Z,CAAC,EAAG,OAAO7Z,GAAK,UAAYA,EAAE,KAAK,EAAE,SAAW,EAAG,MAAM,KAAK,KAAK,QAAS8Y,EAAC,EAAG,IAAI,UAAUA,EAAC,EAClH,KAAK,KAAK,OAAQ,6BAA6B9Y,CAAC,eAAe6Z,CAAC,EAAE,EAClE,IAAIC,EAAI,CAAE,SAAU9Z,CAAE,EAAGzE,EAAI,CAAE,CAAC6c,EAAC,EAAGP,GAAG,CAACG,EAAC,EAAGL,EAAE,EAC9C,GAAI,CACF,IAAInT,EAAImV,GAAEE,CAAC,EAAG,CAAE,IAAKniB,EAAG,QAASwC,CAAE,EAAI,MAAM,KAAK,MAAM,SAAUsK,EAAGsV,EAAGve,EAAG,EAAE,EAAGrC,EAAI,GAAGxB,CAAC,IAAI,IAAI,gBAAgBoiB,CAAC,CAAC,GAAIpjB,EAAI,MAAM,KAAK,aAAawC,EAAG,SAAUgB,CAAC,EAChK,GAAIxD,EAAE,GAAI,CACR,IAAIiB,EAAI,MAAMjB,EAAE,KAAK,EAAG+E,EAAI8e,GAAE5iB,CAAC,EAC/B,GAAI,OAAO8D,GAAK,UAAYA,IAAM,MAAQ,UAAWA,GAAK,OAAOA,EAAE,OAAS,UAAYA,EAAE,QAAU,MAAQ,YAAaA,EAAE,MAAO,CAChI,IAAIG,EAAI,OAAOH,EAAE,MAAM,OAAO,EAC9B,MAAM,KAAK,KAAK,QAAS,GAAG+c,EAAC,qCAAqC5c,CAAC,EAAE,EAAG,IAAI,MAAM,GAAG4c,EAAC,qCAAqC5c,CAAC,EAAE,CAChI,CACA,MAAO,CAAE,OAAQ,UAAW,IAAKie,EAAG,SAAU7Z,EAAG,SAAUvE,CAAE,CAC/D,KAAO,OAAM,KAAK,KAAK,QAAS,GAAG+c,EAAC,oCAAoC9hB,EAAE,MAAM,EAAE,EAAG,IAAI,MAAM,GAAG8hB,EAAC,oCAAoC9hB,EAAE,MAAM,EAAE,CACnJ,OAAS8N,EAAG,CACV,IAAI9M,EAAI8M,aAAa,MAAQA,EAAE,QAAU,OAAOA,CAAC,EACjD,MAAM,KAAK,KAAK,QAAS,GAAGgU,EAAC,4CAA4CqB,CAAC,KAAKniB,CAAC,EAAE,EAAG,IAAI,MAAM,GAAG8gB,EAAC,4CAA4CqB,CAAC,KAAKniB,CAAC,EAAE,CAC1J,CACF,CACA,iCAAiCmiB,EAAG,CAClC,MAAO;AAAA;AAAA,UAEDA,EAAE,IAAK7Z,GAAM;AAAA;AAAA,0BAEGA,EAAE,UAAU;AAAA,oBAClBA,EAAE,IAAI;AAAA;AAAA,SAEjB,EAAE,KAAK,EAAE,CAAC;AAAA;AAAA,KAGjB,CACA,MAAM,OAAO6Z,EAAG,CACd,KAAK,UAAUA,CAAC,EAAG,KAAK,KAAK,OAAQ,mBAAmBA,CAAC,EAAE,EAC3D,IAAI7Z,EAAI,CAAE,CAACoY,EAAC,EAAGN,GAAG,CAACE,EAAC,EAAGL,EAAE,EAAGmC,EAAIH,GAAEE,CAAC,EAAG,CAAE,IAAKte,EAAG,QAASiJ,CAAE,EAAI,MAAM,KAAK,MAAM,SAAUsV,EAAG,CAAC,EAAG9Z,EAAG,EAAE,EAAGtI,EAAI,MAAM,KAAK,aAAa6D,EAAG,SAAUiJ,CAAC,EACnJ,OAAO9M,EAAE,SAAW,KAAOA,EAAE,SAAW,GAC1C,CACA,MAAM,aAAamiB,EAAG7Z,EAAG8Z,EAAGve,EAAGiJ,EAAI,CAAC,EAAG,CACrC,KAAK,KAAK,OAAQ,WAAWxE,CAAC,eAAe6Z,CAAC,cAAc,KAAK,UAAUC,CAAC,CAAC,EAAE,EAC/E,IAAIpiB,EAAI,MAAM,MAAMmiB,EAAG,CAAE,OAAQ7Z,EAAG,QAAS8Z,EAAG,KAAM,CAAC,MAAO,MAAM,EAAE,SAAS9Z,CAAC,EAAI,OAASzE,EAAG,OAAQ,KAAK,sBAAwB,OAAS,YAAY,QAAQ,KAAK,mBAAmB,EAAI,MAAO,CAAC,EACtM,MAAO,CAAC7D,EAAE,IAAM,CAAC8M,EAAE,SAAS9M,EAAE,MAAM,GAAK,MAAM,KAAK,qBAAqBA,CAAC,EAAGA,CAC/E,CACA,MAAM,qBAAqBmiB,EAAG,CAC5B,IAAI7Z,EAAI,MAAM6Z,EAAE,KAAK,EAAGC,EAAID,EAAE,QAAQ,IAAI,kBAAkB,GAAK,UAAWte,EAAIse,EAAE,QAAQ,IAAI,qBAAqB,GAAKA,EAAE,WAC1H,MAAM,KAAK,KAAK,QAAS,GAAGrB,EAAC,8BAA8BqB,EAAE,MAAM,KAAKC,CAAC,MAAMve,CAAC,cAAcyE,CAAC,EAAE,EAAG,IAAI,MAAM,GAAGwY,EAAC,8BAA8BqB,EAAE,MAAM,KAAKC,CAAC,MAAMve,CAAC,eAAeyE,CAAC,EAAE,CACzL,CACA,2BAA2B6Z,EAAG,CAC5B,OAAO,OAAO,KAAKA,CAAC,EAAE,OAAS,EAAI,GAAK,OAAO,KAAKA,CAAC,EAAE,KAAK,EAAE,IAAK7Z,GAAM,GAAG,mBAAmBA,CAAC,CAAC,IAAI,mBAAmB6Z,EAAE7Z,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,GAAG,CAC3I,CACA,MAAM,iBAAiB6Z,EAAG,CACxB,IAAI7Z,EAAI,MAAMma,GAAE,OAAO,KAAK,eAAe,GAAIN,CAAC,EAAGC,EAAI,MAAMK,GAAEna,EAAG,KAAK,MAAM,EAAGzE,EAAI,MAAM4e,GAAEL,EAAGrC,EAAC,EAChG,OAAO0C,GAAE5e,EAAGic,EAAC,CACf,CACF,EACIwC,GAAI,MAAOP,GAAM,CACnB,IAAII,EAAIP,GAAE,QAAQ,EAClB,OAAOO,EAAE,OAAOJ,CAAC,EAAGI,EAAE,OAAO,KAAK,CACpC,EACIM,GAAI,MAAOV,EAAGI,EAAG7Z,IAAM,CACzB,IAAI8Z,EAAIT,GAAE,SAAUI,CAAC,EACrB,OAAOK,EAAE,OAAOD,CAAC,EAAGC,EAAE,OAAO9Z,CAAC,CAChC,EACI+Z,GAAKN,GAAM,CACb,IAAII,EAAI,CAAE,IAAK,GAAI,SAAU,GAAI,QAAS,GAAI,SAAU,GAAI,WAAY,EAAG,EAC3E,OAAOJ,EAAE,QAAQ,uCAAyCzZ,GAAM6Z,EAAE7Z,CAAC,CAAC,CACtE,EACIua,GAAKd,GAAM,CACb,IAAII,EAAKrV,GAAMA,EAAE,QAAQ,UAAW,GAAG,EAAE,QAAQ,UAAW,GAAG,EAAE,QAAQ,QAAS,GAAG,EAAE,QAAQ,QAAS,GAAG,EAAE,QAAQ,SAAU,GAAG,EAAGxE,EAAI,CAAC,EAAG8Z,EAAI,2DAA4Dve,EAC7M,KAAOA,EAAIue,EAAE,KAAKL,CAAC,GAAK,CACtB,GAAI,CAAC,CAAEjV,EAAG9M,EAAGwC,CAAC,EAAIqB,EAAGrC,EAAIsL,EAAE,YAAY,EAAI9M,EAAGhB,EAAIwD,GAAK,KAAOqgB,GAAErgB,CAAC,EAAI,GACrE,OAAOxD,GAAK,SAAWsJ,EAAE9G,CAAC,EAAI6gB,GAAEF,EAAEnjB,CAAC,CAAC,EAAI,MAAM,QAAQsJ,EAAE9G,CAAC,CAAC,EAAI8G,EAAE9G,CAAC,EAAE,KAAKxC,CAAC,EAAIsJ,EAAE9G,CAAC,EAAI8G,EAAE9G,CAAC,GAAK,KAAO,CAAC8G,EAAE9G,CAAC,EAAGxC,CAAC,EAAI6iB,GAAGrgB,CAAC,EAAI,CAACxC,CAAC,EAAIA,CAC/H,CACA,OAAO,OAAO,KAAKsJ,CAAC,EAAE,OAASA,EAAI6Z,EAAEJ,CAAC,CACxC,EAGIgB,GAAcxlB,GAAQ0hB,GAAY,EAAG,CAAC,EAGtC+D,EAAyB,CAC3B,iBAAkB,mBAClB,kBAAmB,oBACnB,wBAAyB,0BACzB,wBAAyB,0BACzB,wBAAyB,0BACzB,+BAAgC,iCAChC,qBAAsB,uBACtB,wBAAyB,0BACzB,0BAA2B,4BAC3B,mBAAoB,qBACpB,WAAY,aACZ,eAAgB,iBAChB,gBAAiB,kBACjB,aAAc,eACd,aAAc,eACd,iBAAkB,mBAClB,aAAc,eACd,YAAa,cACb,cAAe,eACjB,EACIC,GAAkB,cAAc,KAAM,CACxC,YAAYpF,EAASqF,EAAOF,EAAuB,cAAe,CAChE,MAAM,oBAAoBnF,CAAO,aAAaqF,CAAI,EAAE,EACpD,KAAK,KAAO,KAAK,YAAY,KAC7B,KAAK,KAAOA,EACZ,MAAM,kBAAkB,KAAM,KAAK,WAAW,CAChD,CACF,EACIC,GAAwB,cAAcF,EAAgB,CACxD,YAAYpF,EAASqF,EAAOF,EAAuB,wBAAyB,CAC1E,MAAMnF,EAASmF,EAAuB,uBAAuB,CAC/D,CACF,EACII,GAA0B,cAAcH,EAAgB,CAC1D,YAAYpF,EAASqF,EAAOF,EAAuB,0BAA2B,CAC5E,MAAMnF,EAASmF,EAAuB,yBAAyB,CACjE,CACF,EACIK,GAAmB,cAAcJ,EAAgB,CACnD,YAAYpF,EAASyF,EAAW,CAC9B,MAAM,MAAMA,CAAS,sBAAsBzF,CAAO,GAAImF,EAAuB,kBAAkB,CACjG,CACF,EAIIO,GAAe,CAACC,EAAUC,IACrB,OAAO,KAAKA,CAAK,EAAE,MAAOtmB,GAAQqmB,EAASrmB,CAAG,IAAMsmB,EAAMtmB,CAAG,CAAC,EAEnEumB,GAAe,SACb,OAAOC,GAAe,KAAe,OAAOA,IAAe,WACtDA,GAAW,EAEhB,OAAO,OAAW,KAAe,OAAO,QAAW,UAAY,OAAO,OAAO,YAAe,WACvF,OAAO,WAAW,EAEpB,uCAAuC,QAAQ,QAAS,SAASniB,EAAG,CACzE,IAAI4gB,EAAI,KAAK,OAAO,EAAI,GAAK,EAAGtiB,EAAK0B,IAAM,IAAM4gB,EAAIA,EAAI,EAAI,EAC7D,OAAOtiB,EAAG,SAAS,EAAE,CACvB,CAAC,EAEC8jB,GAAyBxd,GAAW,CACtC,IAAMyd,EAAU,CACd,KAAM,MACN,KAAM,SACN,KAAM,GACN,YAAa,MACf,EACA,OAAI,OAAOzd,EAAW,KAAeA,IAAW,OAG5C,SAAUA,GAAUA,EAAO,OAAS,UAAY,WAAYA,GAAU,MAAM,QAAQA,EAAO,MAAM,EAChFA,EAAO,OAAO,KAAM4F,GAAUA,EAAM,OAAS,KAAK,GAEnE5F,EAAO,OAAO,QAAQyd,CAAO,EAEtB,SAAUzd,GAAUA,EAAO,OAAS,SAAW,UAAWA,GAAUA,EAAO,QAAU,MAAQ,OAAOA,EAAO,OAAU,UAAY,SAAUA,EAAO,OAASA,EAAO,MAAM,OAAS,UAAY,WAAYA,EAAO,OAAS,MAAM,QAAQA,EAAO,MAAM,MAAM,IAChPA,EAAO,MAAM,OAAO,KAAM4F,GAAUA,EAAM,OAAS,KAAK,GAEzE5F,EAAO,MAAM,OAAO,QAAQyd,CAAO,IAGhCzd,CACT,EAGI0d,EAAc,aACdC,GAAoB,IACpBC,GAAqB,aACrBC,GAAa,QACbC,GAAY,KAAO,KACnBC,GAAY,EAAID,GAChBE,GAAa,OAAO,KAAK,GAAI,MAAM,EACnCC,GAAoB,CAACC,EAAYtB,EAAuB,4BAA8B,CACxF,MAAM,IAAII,GAAwB,GAAGU,CAAW,gCAAgCQ,CAAS,EAAE,CAC7F,EACIC,GAAc,CAACC,EAAU,KAAO,CAClC,GAAIA,EAAQ,KAAK,IAAM,IAAMA,IAAY,MAAQ,OAAOA,EAAY,KAAeA,EAAQ,OAAS,KAAOA,IAAY,KACrH,MAAM,IAAIvB,GAAgB,GAAGa,CAAW,kDAAmDd,EAAuB,gBAAgB,CAEtI,EACIyB,GAAa,KAAM,CACrB,YAAYC,EAAS,CACnB,KAAK,WAAc1X,GAAS,CAC1B,IAAM2X,EAAiB,CAAC,cAAe,kBAAmB,WAAY,YAAY,EAClF,QAAW3Y,KAAS2Y,EAClB,GAAI,CAAC3X,EAAKhB,CAAK,EACb,MAAM,IAAIiX,GAAgB,GAAGa,CAAW,KAAK9X,CAAK,eAAgBgX,EAAuB,gBAAgB,CAG/G,EAKA,KAAK,GAAK,IACD,KAAK,IAEd,KAAK,WAAW0B,CAAO,EACvB,KAAK,SAA2B,IAAI,IACpC,KAAK,IAAM,IAAIxC,GAAEwC,CAAO,EACxB,KAAK,WAAaA,EAAQ,WAAaV,GACvC,KAAK,WAAajB,GAAY,IAChC,CAMA,MAAM,iBAAkB,CACtB,GAAI,CACF,IAAM6B,EAAS,MAAM,KAAK,IAAI,KAAKb,GAAmB,KAAK,UAAU,EACrE,OAAI,MAAM,QAAQa,CAAM,EACfA,EAAO,IAAKC,GAAUA,EAAM,IAAI,MAAM,KAAK,WAAW,OAAS,EAAG,CAACZ,GAAW,MAAM,CAAC,EACnF,OAAOW,GAAW,UAAYA,IAAW,MAAQ,aAAcA,GAAUA,EAAO,WAAa,IAC/F,CAAC,EAEH,CAAC,CACV,OAASE,EAAO,CACd,MAAM,IAAIzB,GAAiB,GAAGS,CAAW,KAAKgB,EAAM,OAAO,GAAI9B,EAAuB,kBAAkB,CAC1G,CACF,CAOA,MAAM,iBAAiBwB,EAAU,GAAI,CACnC,GAAI,CACF,OAAAD,GAAYC,CAAO,EAEZ,CAAC,CADO,MAAM,KAAK,IAAI,WAAW,GAAG,KAAK,UAAU,GAAGT,EAAiB,GAAGS,CAAO,GAAGP,EAAU,EAAE,CAE1G,OAASa,EAAO,CACd,GAAIA,EAAM,QAAQ,SAAS,WAAW,EACpC,MAAO,GAET,MAAM,IAAI7B,GAAgB,GAAGa,CAAW,KAAKgB,EAAM,OAAO,GAAI9B,EAAuB,oBAAoB,CAC3G,CACF,CASA,MAAM,iBAAiBwB,EAAU,GAAIpe,EAAQvH,EAAO,CAAC,EAAG,CACtD,GAAI,CAGF,GAFA0lB,GAAYC,CAAO,EAEf,CADW,MAAM,KAAK,iBAAiBA,CAAO,EACrC,CACX,GAAI,OAAOpe,EAAW,KAAeA,IAAW,KAC9C,GAAI,CAEF,GADa,KAAK,WAAW,UAAUA,CAAM,EAM3C,KAAK,SAAS,IAAIoe,EAASpe,CAAM,MAJjC,OAAM,IAAI+c,GACR,GAAGW,CAAW,wBAAwB1d,CAAM,IAAI4c,EAAuB,uBAAuB,EAChG,CAIJ,MAAgB,CACd,MAAM,IAAIG,GAAsB,GAAGW,CAAW,wBAAwB1d,CAAM,GAAI4c,EAAuB,uBAAuB,CAChI,CAEF,GAAInkB,EAAK,OAAS,GAAKuH,EAAQ,CAC7B,IAAM2e,EAAc,KAAK,WAAW,UAAU,CAAE,KAAM,QAAS,MAAO3e,CAAO,CAAC,EAC9E,MAAM,KAAK,IAAI,IAAI,GAAG,KAAK,UAAU,GAAG2d,EAAiB,GAAGS,CAAO,GAAGP,EAAU,GAAIc,EAAY,SAASlmB,CAAI,CAAC,CAChH,MACE,MAAM,KAAK,IAAI,IAAI,GAAG,KAAK,UAAU,GAAGklB,EAAiB,GAAGS,CAAO,GAAGP,EAAU,GAAIG,EAAU,EAEhG,OAAO,KAAK,WAAWI,EAASpe,EAAQ,EAAK,CAC/C,CACA,MAAM,IAAI6c,GAAgB,GAAGa,CAAW,gBAAgBU,CAAO,kBAAmBxB,EAAuB,iBAAiB,CAC5H,OAAS8B,EAAO,CACd,MAAIA,aAAiB7B,GACb6B,EAEF,IAAI7B,GAAgB,GAAGa,CAAW,KAAKgB,EAAM,OAAO,GAAI9B,EAAuB,uBAAuB,CAC9G,CACF,CAOA,MAAM,iBAAiBwB,EAAU,GAAI,CACnC,GAAI,CAGF,GAFAD,GAAYC,CAAO,EACJ,MAAM,KAAK,iBAAiBA,CAAO,EACtC,CACV,MAAM,KAAK,IAAI,OAAO,GAAG,KAAK,UAAU,GAAGT,EAAiB,GAAGS,CAAO,GAAGP,EAAU,EAAE,EACrF,IAAMe,EAAU,MAAM,KAAK,iBAAiBR,CAAO,EACnD,GAAI,OAAOQ,GAAY,UAAW,CAChC,GAAI,CAACA,EACH,YAAK,SAAS,OAAOR,CAAO,EACrB,GAET,MAAM,IAAIvB,GAAgB,GAAGa,CAAW,iCAAiCU,CAAO,GAAIxB,EAAuB,kBAAkB,CAC/H,CACA,MAAM,IAAIK,GAAiB,GAAGS,CAAW,iCAAiCU,CAAO,GAAIxB,EAAuB,kBAAkB,CAChI,CACA,MAAM,IAAIC,GAAgB,GAAGa,CAAW,gBAAgBU,CAAO,kBAAmBxB,EAAuB,uBAAuB,CAClI,OAAS8B,EAAO,CACd,MAAIA,aAAiBzB,GACbyB,EAEF,IAAI7B,GACR,GAAGa,CAAW,kCAAkCgB,EAAM,OAAO,GAC7D9B,EAAuB,uBACzB,CACF,CACF,CASA,MAAM,WAAWwB,EAAU,GAAIpe,EAAQ6e,EAAa,GAAM,CACxD,GAAI,CACFV,GAAYC,CAAO,EACnB,IAAMU,EAAU,GAAG,KAAK,UAAU,GAAGnB,EAAiB,GAAGS,CAAO,GAAGP,EAAU,GAE7E,GAAI,CADW,MAAM,KAAK,IAAI,WAAWiB,CAAO,EACnC,CACX,GAAI,CAACD,EACH,MAAM,IAAIhC,GAAgB,GAAGa,CAAW,gBAAgBU,CAAO,kBAAmBxB,EAAuB,oBAAoB,EAE/H,MAAM,KAAK,IAAI,IAAIkC,EAASd,EAAU,CACxC,CACA,IAAMe,EAAY/e,GAAU,KAAK,SAAS,IAAIoe,CAAO,GAAK,OAC1D,OAAO,IAAIY,GAAWZ,EAASW,EAAW,KAAK,IAAK,KAAK,UAAU,CACrE,OAASL,EAAO,CACd,MAAIA,EAAM,QAAQ,SAAS,cAAc,EACjC,IAAI3B,GACR,GAAGW,CAAW,8BAA8BgB,EAAM,OAAO,GACzD9B,EAAuB,uBACzB,EAEI,IAAIC,GAAgB,GAAGa,CAAW,KAAKgB,EAAM,OAAO,GAAI9B,EAAuB,oBAAoB,CAC3G,CACF,CACF,EACIoC,GAAa,MAAMC,EAAY,CACjC,YAAYb,EAAU,GAAIpe,EAAQkf,EAAIC,EAAYvB,GAAoBwB,EAAY,GAAOC,EAAYtB,GAAW,CAC9G,KAAK,SAAW,KAAO,CACrB,QAAS,KAAK,SACd,GAAI,KAAK,IACT,OAAQ,KAAK,QACb,UAAW,KAAK,WAChB,SAAU,KAAK,UACf,UAAW,KAAK,WAChB,UAAW,KAAK,WAChB,UAAW,KAAK,UAClB,GACA,KAAK,SAAYtiB,GAAU,CACzB,KAAK,SAAWA,EAAM,QACtB,KAAK,QAAUA,EAAM,OACrB,KAAK,IAAMA,EAAM,GACjB,KAAK,WAAaA,EAAM,UACxB,KAAK,UAAYA,EAAM,SACvB,KAAK,WAAaA,EAAM,UACxB,KAAK,WAAaA,EAAM,UACxB,KAAK,WAAaA,EAAM,SAC1B,EACA,KAAK,aAAgB2jB,GAAc,CACjC,KAAK,WAAaA,CACpB,EACA,KAAK,aAAe,IACX,KAAK,WAEd,KAAK,cAAgB,IACZ,KAAK,QAEd,KAAK,cAAiBpf,GAAW,CAC/B,GAAI,CACF,KAAK,QAAUwd,GAAsBxd,CAAM,EAC3C,KAAK,UAAY,OAAOA,EAAW,IAAc,KAAO,KAAK,WAAW,UAAUA,CAAM,CAC1F,OAAS0e,EAAO,CACd,MAAM,IAAI7B,GAAgB,GAAGa,CAAW,KAAKgB,EAAM,OAAO,GAAI9B,EAAuB,uBAAuB,CAC9G,CACF,EACA,KAAK,kBAAoB,IAChB,KAAK,UAEd,KAAK,gBAAkB,CAACnkB,EAAMwH,EAAO,WAAa,CAC5C,MAAM,QAAQxH,CAAI,IACpBA,EAAOA,EAAK,CAAC,GAGf,IAAMuH,EADc,KAAK,WAAW,SAASvH,CAAI,EACtB,OAAO,EAClC,OAAO+kB,GAAsBxd,CAAM,CACrC,EACA,KAAK,SAAWoe,EAAQ,KAAK,EAC7B,KAAK,IAAMc,EACX,KAAK,QAAU1B,GAAsBxd,CAAM,EAC3C,KAAK,WAAamf,EAClB,KAAK,WAAaC,EAClB,KAAK,WAAaC,GAAatB,GAC/B,KAAK,IAAI,yBAAyB,KAAK,UAAU,EACjD,KAAK,WAAapB,GAAY,KAC9B,KAAK,UAAY,GACjB,KAAK,WAAa,CAAC,EACnB,KAAK,UAAY,OAAO3c,EAAW,IAAc,KAAO,KAAK,WAAW,UAAUA,CAAM,EACxF,KAAK,KAAO,GAAG,KAAK,UAAU,GAAG2d,EAAiB,GAAG,KAAK,QAAQ,GAAGE,EAAU,EACjF,CACA,MAAM,eAAgB,CACpB,GAAI,CACF,KAAK,UAAY,GACjB,IAAMplB,EAAO,MAAM,KAAK,UAAU,EAClC,YAAK,WAAaA,EACX,EACT,OAASimB,EAAO,CACd,MAAM,IAAI7B,GAAgB,GAAGa,CAAW,kCAAkCgB,EAAM,OAAO,GAAI9B,EAAuB,kBAAkB,CACtI,CACF,CACA,MAAM,WAAY,CAChB,GAAI,CACF,GAAI,KAAK,YAAc,MAAQ,OAAO,KAAK,UAAc,IACvD,MAAM,IAAIC,GACR,GAAGa,CAAW,0DACdd,EAAuB,uBACzB,EAEF,GAAM,CAAE,KAAA0C,EAAM,KAAA7mB,CAAK,EAAI,MAAM,KAAK,IAAI,kBAAkB,KAAK,KAAM,CAAE,gBAAiB,KAAK,SAAU,CAAC,EACtG,GAAIA,IAAS,KACX,OAAO,KAAK,WAEd,KAAK,UAAY6mB,IAAS,KAAO,KAAK,UAAYA,EAClD,IAAMX,EAAc,KAAK,WAAW,UAAU,CAAE,KAAM,QAAS,MAAO,KAAK,SAAU,CAAC,EACtF,GAAIlmB,EAAK,OAAS,KAAK,WACrB,YAAK,WAAaA,EAAK,OAAS,EAAIkmB,EAAY,WAAW,OAAO,KAAKlmB,EAAM,MAAM,CAAC,EAAI,CAAC,EAClF,KAAK,WAEd,IAAI8mB,EAAS,KAAK,WACdC,EAAY,CAAC,OAAO,KAAK/mB,EAAM,MAAM,CAAC,EACtCgnB,EAAS,GACb,KAAOA,GAAQ,CACb,IAAMC,EAAmB,MAAM,KAAK,IAAI,YAAY,KAAK,KAAM,GAAOH,EAAQA,EAAS,KAAK,UAAU,EAChGI,EAAe,MAAMD,EAAiB,KAAK,EACjDF,EAAU,KAAK,OAAO,KAAKG,EAAc,MAAM,CAAC,EAChDJ,GAAU,KAAK,WACO,SAASG,EAAiB,QAAQ,IAAI,gBAAgB,GAAKC,EAAa,OAAO,SAAS,CAAC,EAC3F,KAAK,aACvBF,EAAS,GAEb,CACA,IAAMG,EAAe,OAAO,OAAOJ,CAAS,EAC5C,YAAK,WAAab,EAAY,WAAWiB,CAAY,EAC9C,KAAK,UACd,OAASlB,EAAO,CACd,GAAIA,EAAM,SAAS,EAAE,QAAQ,iCAAiC,EAAI,GAChE,YAAK,WAAa,CAAC,EACZ,KAAK,WAEd,MAAM,IAAIzB,GAAiB,GAAGS,CAAW,0BAA0BgB,EAAM,OAAO,GAAI9B,EAAuB,kBAAkB,CAC/H,CACF,CACA,MAAM,UAAUnkB,EAAM,CACpB,GAAI,CACF,GAAI,KAAK,YAAc,MAAQ,OAAO,KAAK,UAAc,IACvD,MAAM,IAAIokB,GACR,GAAGa,CAAW,0DACdd,EAAuB,uBACzB,EAEF,IAAM+B,EAAc,KAAK,WAAW,UAAU,CAAE,KAAM,QAAS,MAAO,KAAK,SAAU,CAAC,EAChFkB,EAAapnB,EAAK,OAAS,EAAIkmB,EAAY,SAASlmB,CAAI,EAAIulB,GAClE,GAAI,KAAK,YAAc,KAAK,YAAc,GAAI,CAC5C,IAAM8B,EAAc,MAAM,KAAK,IAAI,QAAQ,KAAK,IAAI,EACpD,GAAIA,IAAgB,MAAQA,IAAgB,KAAK,UAC/C,MAAO,EAEX,CACA,IAAMC,EAAO,MAAM,KAAK,IAAI,IAAI,KAAK,KAAMF,CAAU,EACrD,GAAI,OAAOE,GAAS,UAAY,WAAYA,GAAQA,EAAK,SAAW,IAClE,MAAM,IAAI9C,GAAiB,GAAGS,CAAW,wBAAyBd,EAAuB,kBAAkB,EAE7G,IAAMoD,EAAUD,EAAK,SAAS,IAAI,MAAM,GAAK,GAC7C,OAAIC,GAAWA,EAAQ,OAAS,IAC9B,KAAK,UAAY,KAAK,IAAI,aAAaA,CAAO,EAC9C,KAAK,WAAavnB,GAEb,EACT,OAASimB,EAAO,CACd,MAAIA,aAAiBzB,GACbyB,EAEF,IAAI7B,GAAgB,GAAGa,CAAW,KAAKgB,EAAM,OAAO,GAAI9B,EAAuB,eAAe,CACtG,CACF,CAQA,MAAM,OAAOjQ,EAAK3M,EAAQ,CACxB,GAAI,CACF,GAAsB2M,GAAQ,KAC5B,MAAM,IAAIkQ,GAAgB,GAAGa,CAAW,oCAAqCd,EAAuB,YAAY,EAElH,GAAI,OAAOjQ,GAAQ,UAAY,CAAC,MAAM,QAAQA,CAAG,EAC/C,MAAM,IAAIqQ,GACR,GAAGU,CAAW,2CACdd,EAAuB,yBACzB,EAEF,IAAM9f,EAAS,MAAM,QAAQ6P,CAAG,EAAYA,EAAR,CAACA,CAAG,EAClCsT,EAAejgB,EAASwd,GAAsBxd,CAAM,EAAI,KAAK,SAAW,KAAK,gBAAgBlD,EAAM,CAAC,CAAC,EACrGojB,EAAW,KAAK,WAAW,UAAUD,CAAY,EACvD,GAAI,CAACC,EACH,MAAM,IAAInD,GACR,GAAGW,CAAW,4DACdd,EAAuB,uBACzB,EAEF,KAAK,UAAYsD,EACjB,IAAMznB,EAAO,MAAM,KAAK,UAAU,EAClC,QAASoE,KAAQC,EAAO,CACtB,GAAI,OAAOD,GAAS,UAAYA,IAAS,KACvC,MAAM,IAAImgB,GACR,GAAGU,CAAW,kEACdd,EAAuB,yBACzB,EAOF,GALA/f,EAAK,IAAMA,EAAK,KAAO,MAAMygB,GAAa,EACtB,KAAK,UAAU,QAAQzgB,EAAM,CAC/C,UAAWohB,GACX,mBAAoB,EACtB,CAAC,IACmB,GAClBxlB,EAAK,KAAKoE,CAAI,MAEd,OAAM,IAAImgB,GAAwB,GAAGU,CAAW,+BAAgCd,EAAuB,yBAAyB,CAEpI,CAEA,GAAI,CADY,MAAM,KAAK,UAAUnkB,CAAI,EAEvC,MAAM,IAAIwkB,GAAiB,GAAGS,CAAW,8BAA+Bd,EAAuB,kBAAkB,EAEnH,YAAK,cAAcqD,CAAY,EACxBnjB,CACT,OAAS4hB,EAAO,CACd,MAAIA,EAAM,QAAQ,SAAS,cAAc,EACjC,IAAI3B,GACR,GAAGW,CAAW,8BAA8BgB,EAAM,OAAO,GACzD9B,EAAuB,uBACzB,EAEE8B,aAAiB7B,GACb6B,EAEF,IAAI7B,GAAgB,GAAGa,CAAW,6BAA6BgB,EAAM,OAAO,GAAI9B,EAAuB,YAAY,CAC3H,CACF,CAUA,MAAM,KAAKS,EAAQ,CAAC,EAAGiB,EAAU,CAAC,EAAG,CACnC,GAAI,CACF,GAAwBjB,GAAU,KAChC,MAAM,IAAIR,GAAgB,GAAGa,CAAW,iCAAkCd,EAAuB,gBAAgB,EAEnH,IAAMnkB,EAAO,MAAM,KAAK,UAAU,EAC5B8D,EAAQ+hB,EAAQ,OAAS,OAAS,SAAS,OAAOA,EAAQ,IAAI,EAAG,EAAE,EAAI,EACvE9hB,EAAM8hB,EAAQ,QAAU,OAAS/hB,EAAQ,SAAS,OAAO+hB,EAAQ,KAAK,EAAG,EAAE,EAAI,OAErF,OADqB7lB,EAAK,OAAQkU,GAAQwQ,GAAaxQ,EAAK0Q,CAAK,CAAC,EAAE,MAAM9gB,EAAOC,CAAG,CAEtF,OAASkiB,EAAO,CACd,MAAM,IAAI7B,GAAgB,GAAGa,CAAW,4BAA4BgB,EAAM,OAAO,GAAI9B,EAAuB,UAAU,CACxH,CACF,CAOA,MAAM,QAAQS,EAAQ,CAAC,EAAG,CACxB,GAAI,CACF,GAAIA,IAAU,KACZ,MAAM,IAAIR,GAAgB,GAAGa,CAAW,yBAA0Bd,EAAuB,gBAAgB,EAG3G,OADe,MAAM,KAAK,KAAKS,EAAO,CAAE,MAAO,CAAE,CAAC,GACpC,CAAC,GAAK,IACtB,OAASqB,EAAO,CACd,MAAIA,aAAiB7B,GACb6B,EAEF,IAAI7B,GAAgB,GAAGa,CAAW,+BAA+BgB,EAAM,OAAO,GAAI9B,EAAuB,cAAc,CAC/H,CACF,CAWA,MAAM,OAAOS,EAAQ,CAAC,EAAG8C,EAAS,CAAC,EAAG7B,EAAU,CAAC,EAAG,CAClD,GAAI,CACF,GAAwBjB,GAAU,MAAQ8C,IAAW,QAAUA,IAAW,KACxE,MAAM,IAAItD,GACR,GAAGa,CAAW,oDACdd,EAAuB,gBACzB,EAEF,GAAI,CAAC,KAAK,UACR,MAAM,IAAIG,GACR,GAAGW,CAAW,8CACdd,EAAuB,uBACzB,EAEF,IAAMnkB,EAAO,MAAM,KAAK,UAAU,EAClC,GAAIA,EAAK,SAAW,EAAG,MAAO,GAC9B,IAAI2nB,EAAe,EACnB,QAASxmB,EAAI,EAAGA,EAAInB,EAAK,OAAQmB,IAC/B,GAAIujB,GAAa1kB,EAAKmB,CAAC,EAAGyjB,CAAK,EAAG,CAChC,IAAMgD,EAAa,CAAE,GAAG5nB,EAAKmB,CAAC,EAAG,GAAGumB,CAAO,EAK3C,GAJgB,KAAK,UAAU,QAAQE,EAAY,CACjD,UAAWpC,GACX,mBAAoB,EACtB,CAAC,IACe,GACdxlB,EAAKmB,CAAC,EAAIymB,EACVD,QAEA,OAAM,IAAIpD,GACR,GAAGU,CAAW,+BACdd,EAAuB,yBACzB,CAEJ,CAEF,GAAIwD,EAAe,GAEjB,GAAI,CADY,MAAM,KAAK,UAAU3nB,CAAI,EAEvC,MAAM,IAAIwkB,GAAiB,GAAGS,CAAW,8BAA+Bd,EAAuB,kBAAkB,UAE1G0B,GAAW,WAAYA,GAAWA,EAAQ,OAAQ,CAE3D,GAAI,CADY,MAAM,KAAK,OAAO6B,CAAM,EAEtC,MAAM,IAAIlD,GAAiB,GAAGS,CAAW,8BAA+Bd,EAAuB,kBAAkB,EAEnHwD,EAAe,CACjB,CACA,OAAOA,CACT,OAAS1B,EAAO,CACd,MAAIA,aAAiBzB,GACbyB,EAEF,IAAI7B,GAAgB,GAAGa,CAAW,8BAA8BgB,EAAM,OAAO,GAAI9B,EAAuB,YAAY,CAC5H,CACF,CAaA,MAAM,UAAUS,EAAQ,CAAC,EAAG8C,EAAS,CAAC,EAAG7B,EAAU,CAAC,EAAG,CACrD,GAAI,CACF,GAAwBjB,GAAU,MAAQ8C,IAAW,QAAUA,IAAW,KACxE,MAAM,IAAItD,GAAgB,GAAGa,CAAW,sBAAuBd,EAAuB,gBAAgB,EAExG,GAAI,CAAC,KAAK,UACR,MAAM,IAAIG,GACR,GAAGW,CAAW,8CACdd,EAAuB,uBACzB,EAEF,IAAMnkB,EAAO,MAAM,KAAK,UAAU,EAClC,GAAIA,EAAK,SAAW,EAAG,MAAO,GAC9B,IAAM6nB,EAAW7nB,EAAK,UAAWkU,GAAQwQ,GAAaxQ,EAAK0Q,CAAK,CAAC,EACjE,GAAIiD,IAAa,GAAI,CACnB,IAAMD,EAAa,CAAE,GAAG5nB,EAAK6nB,CAAQ,EAAG,GAAGH,CAAO,EAKlD,GAJgB,KAAK,UAAU,QAAQE,EAAY,CACjD,UAAWpC,GACX,mBAAoB,EACtB,CAAC,IACe,GAAM,CAGpB,GAFAxlB,EAAK6nB,CAAQ,EAAID,EAEb,CADY,MAAM,KAAK,UAAU5nB,CAAI,EAEvC,MAAM,IAAIwkB,GAAiB,GAAGS,CAAW,8BAA+Bd,EAAuB,kBAAkB,EAEnH,MAAO,EACT,KACE,OAAM,IAAII,GAAwB,GAAGU,CAAW,+BAAgCd,EAAuB,yBAAyB,CAEpI,CACA,GAAI0B,GAAW,WAAYA,GAAWA,EAAQ,OAAQ,CAEpD,GAAI,CADY,MAAM,KAAK,OAAO6B,CAAM,EAEtC,MAAM,IAAIlD,GAAiB,GAAGS,CAAW,8BAA+Bd,EAAuB,kBAAkB,EAEnH,MAAO,EACT,CACA,MAAO,EACT,OAAS8B,EAAO,CACd,MAAIA,aAAiB7B,GACb6B,EAEF,IAAI7B,GAAgB,GAAGa,CAAW,iCAAiCgB,EAAM,OAAO,GAAI9B,EAAuB,gBAAgB,CACnI,CACF,CAQA,MAAM,OAAOS,EAAQ,CAAC,EAAG,CACvB,GAAI,CACF,GAAwBA,GAAU,KAChC,MAAM,IAAIR,GAAgB,GAAGa,CAAW,sBAAuBd,EAAuB,gBAAgB,EAExG,IAAMnkB,EAAO,MAAM,KAAK,UAAU,EAClC,GAAIA,EAAK,SAAW,EAAG,MAAO,GAC9B,IAAM8nB,EAAgB9nB,EAAK,OACrB+nB,EAAU/nB,EAAK,OAAQkU,GAAQ,CAACwQ,GAAaxQ,EAAK0Q,CAAK,CAAC,EAE9D,GAAI,CADY,MAAM,KAAK,UAAUmD,CAAO,EAE1C,MAAM,IAAIvD,GAAiB,GAAGS,CAAW,8BAA+Bd,EAAuB,kBAAkB,EAEnH,OAAO2D,EAAgBC,EAAQ,MACjC,OAAS9B,EAAO,CACd,MAAIA,aAAiBzB,GACbyB,EAEF,IAAI7B,GAAgB,GAAGa,CAAW,8BAA8BgB,EAAM,OAAO,GAAI9B,EAAuB,YAAY,CAC5H,CACF,CAOA,MAAM,WAAY,CAChB,GAAI,CAEF,IAAM2D,GADO,MAAM,KAAK,UAAU,GACP,OAE3B,GAAI,CADY,MAAM,KAAK,UAAU,CAAC,CAAC,EAErC,MAAM,IAAItD,GAAiB,GAAGS,CAAW,8BAA+Bd,EAAuB,kBAAkB,EAEnH,OAAO2D,CACT,OAAS7B,EAAO,CACd,MAAIA,aAAiBzB,GACbyB,EAEF,IAAI7B,GAAgB,GAAGa,CAAW,8BAA8BgB,EAAM,OAAO,GAAI9B,EAAuB,YAAY,CAC5H,CACF,CAOA,MAAM,MAAMS,EAAQ,CAAC,EAAG,CACtB,GAAI,CAEF,OADa,MAAM,KAAK,KAAKA,CAAK,GACtB,MACd,OAASqB,EAAO,CACd,MAAM,IAAI7B,GAAgB,GAAGa,CAAW,6BAA6BgB,EAAM,OAAO,GAAI9B,EAAuB,WAAW,CAC1H,CACF,CACA,MAAM,iBAAiB6D,EAAYC,EAAY,KAAK,QAAS,CAC3D,GAAI,CAGF,GAFAvC,GAAYsC,CAAU,EACP,MAAM,KAAK,IAAI,WAAW,GAAG,KAAK,UAAU,GAAG9C,EAAiB,GAAG8C,CAAU,GAAG5C,EAAU,EAAE,EAEzG,MAAM,IAAIhB,GAAgB,GAAGa,CAAW,gBAAgB+C,CAAU,kBAAmB7D,EAAuB,iBAAiB,EAE/H,IAAM5c,EAAS0gB,GAAa,KAAK,cAAc,EACzCjoB,EAAO,MAAM,KAAK,UAAU,EAC5BkoB,EAAY,IAAI1B,GAAYwB,EAAYzgB,EAAQ,KAAK,IAAK,KAAK,WAAY,KAAK,WAAY,KAAK,UAAU,EACjH,aAAM2gB,EAAU,UAAUloB,CAAI,EAC9B,MAAM,KAAK,IAAI,OAAO,GAAG,KAAK,UAAU,GAAGklB,EAAiB,GAAG,KAAK,QAAQ,GAAGE,EAAU,EAAE,EACpF8C,CACT,OAASjC,EAAO,CACd,MAAIA,aAAiB7B,GACb6B,EAEF,IAAI7B,GACR,GAAGa,CAAW,+BAA+BgB,EAAM,OAAO,GAC1D9B,EAAuB,uBACzB,CACF,CACF,CACF", "names": ["__import_BUFFER", "__import_CRYPTO", "__import_UTIL", "__import_STREAM", "__import_ZLIB", "__import_EVENTS", "__import_FS", "__import_PATH", "randomUUID", "__create", "__defProp", "__getOwnPropDesc", "__getOwnPropNames", "__getProtoOf", "__hasOwnProp", "__commonJS", "cb", "mod", "__getOwnPropNames", "__copyProps", "to", "from", "except", "desc", "key", "__hasOwnProp", "__defProp", "__getOwnPropDesc", "__toESM", "isNodeMode", "target", "__create", "__getProtoOf", "require_utils", "exports", "module", "buffer", "__import_BUFFER", "crypto2", "__import_CRYPTO", "util", "__import_UTIL", "Buffer2", "POOL", "BufferPool", "NAME_PATTERN", "f2", "newBuffer", "size", "bufferFrom", "data", "enc", "capitalize", "s", "compare", "n1", "n2", "getOption", "opts", "def", "value", "getHash", "str", "algorithm", "hash", "singleIndexOf", "arr", "v2", "pos", "i", "l", "toMap", "fn", "obj", "elem", "objectValues", "hasDuplicates", "copyOwnProperties", "src", "dst", "overwrite", "names", "name", "descriptor", "isValidName", "qualify", "namespace", "part", "unqualify", "parts", "impliedNamespace", "match", "jsonEnd", "c", "depth", "literal", "abstractFunction", "addDeprecatedGetters", "props", "proto", "prop", "getter", "createGetter", "prop2", "delegate", "len", "maxLen", "Lcg", "seed", "a", "m2", "state", "start", "end", "flags", "mask", "result", "OrderedQueue", "item", "items", "j2", "first", "mid", "i1", "i2", "c1", "c2", "Tap", "buf", "b2", "n", "k2", "h", "f3", "fk", "d", "fixed", "tap", "l1", "p1", "l2", "p2", "b1", "res", "neg", "invert", "require_types", "utils", "SlowBuffer", "debug", "TYPES", "ArrayType", "BooleanType", "BytesType", "DoubleType", "EnumType", "RecordType", "FixedType", "FloatType", "IntType", "LongType", "MapType", "NullType", "StringType", "RANDOM", "TAP", "LOGICAL_TYPE", "UNDERLYING_TYPES", "Type", "schema", "type", "Hash", "maybeQualify", "isPrimitive", "registry", "UnionType2", "wrapUnions", "WrappedUnionType", "UnwrappedUnionType", "DerivedType", "err", "logicalType", "types", "isAmbiguous", "typeName", "Type2", "val", "fieldNames", "expanded", "numWrappedUnions", "isValidWrappedUnion", "branchTypes", "branchType", "unionType", "bucketized", "bucket", "getTypeBucket", "bucketTypes", "buckets", "augmented", "combineNumbers", "combineStrings", "combineBuffers", "t", "combineObjects", "any", "buf1", "buf2", "resolver", "Resolver", "resolvers", "index", "resolver2", "readValue", "canon", "schemaStr", "noCheck", "className", "getClassName", "errorHook", "hook", "path", "Branch", "derefedSchema", "attr", "body", "asBranch", "PrimitiveType", "noFreeze", "throwInvalidError", "tap1", "tap2", "isSafeLong", "methods", "noUnpack", "mapping", "AbstractLongType", "isJsonBuffer", "UnionType", "branch", "getValueBucket", "logicalBranches", "typeResolver", "coerce", "wrap", "keys", "val1", "val2", "index1", "index2", "firstType", "name1", "name2", "symbol", "symbols", "hasCompatibleName", "values", "readArraySize", "rsv", "copy", "ns", "field", "Field", "errorStack", "plainRecords", "outerArgs", "innerArgs", "ds", "innerBody", "defaultValue", "hasDefault", "stackField", "outerBody", "Record", "self", "o", "field2", "args", "rFields", "wFields", "wFieldsMap", "matches", "fieldResolver", "getAliases", "lazyIndex", "uname", "fields", "order", "fieldType", "fieldSchema", "fieldOrder", "fieldAliases", "fieldDoc", "LogicalType", "_fromValue", "obj1", "obj2", "isVisited", "msg", "readerType", "lazy", "aliases", "reader", "writer", "strict", "alias", "unqualified", "typeNames", "superIndex", "superType", "typeSymbols", "allTypes", "fieldTypes", "fieldDefaults", "isValidRecord", "fieldDefault", "fieldName", "fieldType2", "fieldDefault2", "unionTypes", "require_containers", "stream", "__import_STREAM", "zlib", "__import_ZLIB", "OPTS", "LONG_TYPE", "MAP_BYTES_TYPE", "HEADER_TYPE", "BLOCK_TYPE", "MAGIC_BYTES", "RawDecoder", "noDecode", "createReader", "chunk", "encoding", "BlockDecoder", "header", "codecs", "nBlocks", "block", "tryReadBlock", "chunkCb", "count", "cause", "BlockInfo", "BlockData", "RawEncoder", "copyBuffer", "BlockEncoder", "codec", "meta", "Header", "flushing", "raw", "compressed", "writerType", "skipper", "require_services", "events", "__import_EVENTS", "BOOLEAN_TYPE", "STRING_TYPE", "HANDSHAKE_REQUEST_TYPE", "HANDSHAKE_RESPONSE_TYPE", "PREFIX_LENGTH", "PING_MESSAGE", "Message", "reqType", "errType", "resType", "oneWay", "doc", "recordName", "reqSchema", "msgDoc", "errSchema", "Service", "messages", "types2", "ptcl", "server", "Client", "Server", "clientSvc", "serverSvc", "createReaders", "msgs", "client", "pts", "transport", "channel", "forwardErrors", "req", "handler", "parent", "typeSchema", "msgNames", "discoverProtocol", "svc", "ptclStr", "hreq", "hres", "pending", "insertRemoteProtocols", "objectMode", "writableFactory", "encoder2", "FrameEncoder", "writable2", "readable2", "decoder2", "FrameDecoder", "err2", "StatelessClientChannel", "readable", "writable", "isStream", "decoder", "NettyDecoder", "encoder", "NettyEncoder", "StatefulClientChannel", "channels", "getExistingMessage", "wreq", "WrappedRequest", "getRemoteProtocols", "numChannels", "CallContext", "wres", "ctx", "done", "err3", "readableFactory", "StatelessServerChannel", "StatefulServerChannel", "channelId", "numArgs", "ClientChannel", "normalizedPrefix", "cache", "adapter", "Adapter", "Registry", "noWait", "isError", "timeout", "noSvc", "WrappedResponse", "onTransition", "onCompletion", "fns", "chainMiddleware", "onError", "wreq2", "wres2", "prev", "reqBuf", "serializationError", "id", "resBuf", "matchesPrefix", "emit", "retry", "readHead", "onEnd", "onFinish", "timer", "onPing", "onMessage", "ping", "payload", "ServerChannel", "serverMatch", "toRpcError", "defaultHandler", "resErr", "isStrict", "errStr", "hdrBuf", "onRequest", "onHandshake", "hdrs", "hdr", "hasError", "prefixLength", "isRemote", "isError2", "frameLength", "bufs", "intBuffer", "head", "rtype", "wtype", "ptcls", "isClient", "hs", "toError", "rpcCode", "details", "detailsStr", "strs", "scope", "prefix", "params", "cbs", "forward", "isDone", "backward", "require_files", "fs", "__import_FS", "__import_PATH", "createImportHook", "imports", "fpath", "kind", "createSyncImportHook", "require_specs", "files", "TYPE_REFS", "assembleProtocol", "importFile", "protocol", "schemas", "protocolNamespace", "fpath2", "cb2", "Reader", "fetchImports", "dpath", "importedProtocols", "next", "info", "imported", "mergeImport", "importPath", "read", "contents", "protocolSchema", "Tokenizer", "tk", "protocolJavadoc", "javadoc", "numImports", "message", "responseSchema", "token", "top", "ref", "silent", "implicitTags", "maybeMessage", "fname", "reason", "context", "isToken", "lineNum", "lineStart", "emitJavadoc", "isJavadoc", "extractJavadoc", "pat", "lines", "line", "require_lib", "containers", "services", "specs", "parse2", "schemaOrProtocol", "extractFileHeader", "decode", "fd", "isValid", "createFileDecoder", "createFileEncoder", "x", "K", "O", "v", "E", "W", "M", "w", "X", "f", "Z", "V", "J", "m", "T", "P", "C", "u", "ee", "te", "se", "re", "j", "$", "L", "k", "D", "B", "F", "G", "z", "Q", "ne", "oe", "p", "q", "y", "N", "e", "r", "H", "U", "_", "g", "A", "R", "S", "Y", "b", "I", "import_avsc", "lowstorage_ERROR_CODES", "lowstorageError", "code", "SchemaValidationError", "DocumentValidationError", "S3OperationError", "operation", "matchesQuery", "document", "query", "generateUUID", "randomUUID", "ensureIdFieldInSchema", "idField", "MODULE_NAME", "DEFAULT_DELIMITER", "PROJECT_DIR_PREFIX", "COL_SUFFIX", "CHUNG_1MB", "CHUNG_5MB", "EMPTY_DATA", "errorValidationFn", "errorCode", "_hasColName", "colName", "lowstorage", "options", "requiredFields", "listed", "entry", "error", "wrapperType", "exists2", "autoCreate", "colPath", "colSchema", "Collection", "_Collection", "s3", "dirPrefix", "safeWrite", "chunkSize", "etag", "offset", "bufferArr", "repeat", "nextDataResponse", "nextDataBody", "bufferedData", "dataBuffer", "currentETag", "resp", "newETag", "schemaWithId", "avroType", "update", "updatedCount", "updatedDoc", "docIndex", "initialLength", "newData", "newColName", "newSchema", "createNew"] } diff --git a/lib/lowstorage.d.ts b/lib/lowstorage.d.ts index 1fdd747..315db9d 100644 --- a/lib/lowstorage.d.ts +++ b/lib/lowstorage.d.ts @@ -169,9 +169,11 @@ declare class Collection { getSafeWrite: () => boolean; getAvroSchema: () => Object; setAvroSchema: (schema: Object) => void; + getCollectionETag: () => string; inferAvroSchema: (data: any[] | { [s: string]: unknown; } | ArrayLike, type?: string) => Object; + forceLoadData(): Promise; _loadData(): Promise; _saveData(data: Object[]): Promise; /** diff --git a/lib/lowstorage.js b/lib/lowstorage.js index 1e5344d..0b40122 100644 --- a/lib/lowstorage.js +++ b/lib/lowstorage.js @@ -291,6 +291,9 @@ class Collection { throw new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR); } }; + this.getCollectionETag = () => { + return this._lastETag; + }; this.inferAvroSchema = (data, type = 'record') => { if (Array.isArray(data)) { data = data[0]; @@ -312,6 +315,17 @@ class Collection { this._avroType = typeof schema === 'undefined' ? null : this._avroParse.forSchema(schema); this._key = `${this._dirPrefix}${DEFAULT_DELIMITER}${this._colName}${COL_SUFFIX}`; } + async forceLoadData() { + try { + this._lastETag = ''; + const data = await this._loadData(); + this._dataCache = data; + return true; + } + catch (error) { + throw new lowstorageError(`${MODULE_NAME}: Failed to force update data: ${error.message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); + } + } async _loadData() { try { if (this._avroType === null || typeof this._avroType === 'undefined') { diff --git a/lib/lowstorage.js.map b/lib/lowstorage.js.map index 26b828b..2d8105d 100644 --- a/lib/lowstorage.js.map +++ b/lib/lowstorage.js.map @@ -1 +1 @@ -{"version":3,"file":"lowstorage.js","sourceRoot":"","sources":["../src/lowstorage.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"lowstorage.js","sourceRoot":"","sources":["../src/lowstorage.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/sponsors/sentien-logo.png b/sponsors/sentien-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..fa198b06712790e05bffc60d1ee9d268b11d2b09 GIT binary patch literal 6568 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 literal 0 HcmV?d00001 diff --git a/src/lowstorage.test.js b/src/lowstorage.test.js index 75cf965..8f46ed4 100644 --- a/src/lowstorage.test.js +++ b/src/lowstorage.test.js @@ -283,6 +283,11 @@ test('Document | CRUD operations', async () => { expect(findData[0]).toHaveProperty('name', 'Carlos'); expect(findData[0]).toHaveProperty('age', 25); + // Test get collection etag + const etag = col.getCollectionETag(); + expect(etag).toBeDefined(); + expect(etag).not.toBe(''); + // Test insert with schema const insertDataWithSchema = await col.insert({ name: 'Carlos', age: 25 }, userAvroSchema); expect(insertDataWithSchema).toBeDefined(); @@ -291,6 +296,12 @@ test('Document | CRUD operations', async () => { expect(insertDataWithSchema[0]).toHaveProperty('name', 'Carlos'); expect(insertDataWithSchema[0]).toHaveProperty('age', 25); + // Test get collection etag + const etag2 = col.getCollectionETag(); + expect(etag2).toBeDefined(); + expect(etag2).not.toBe(''); + expect(etag2).not.toBe(etag); + // Test by find const findDataWithSchema = await col.find({ name: 'Carlos' }); expect(findDataWithSchema).toBeDefined(); @@ -368,6 +379,25 @@ test('Document | CRUD operations', async () => { expect(updateData).toBe(4); expect(updateData).toEqual(4); + // Get collection etag + const etag3 = col.getCollectionETag(); + expect(etag3).toBeDefined(); + expect(etag3).not.toBe(''); + expect(etag3).not.toBe(etag2); + + // Test upsert + const updateData2 = await col.update({ name: 'Kim' }, { name: 'Kimono', age: 30 }, { upsert: true }); + expect(updateData2).toBeDefined(); + expect(updateData2).toBe(1); + expect(updateData2).toEqual(1); + + const findKimono = await col.find({ name: 'Kimono' }); + expect(findKimono).toBeDefined(); + expect(findKimono).toHaveLength(1); + expect(findKimono[0]).toHaveProperty('_id'); + expect(findKimono[0]).toHaveProperty('name', 'Kimono'); + expect(findKimono[0]).toHaveProperty('age', 30); + // Test update with invalid array await expect(col.update(null, { name: 'Carlos2' })).rejects.toThrow(lowstorage_ERROR_CODES.UPDATE_ERROR); @@ -463,7 +493,6 @@ test('Document | cachcing and race conditions', async () => { expect(checkBob[0]).toHaveProperty('age', 30); // Test update with invalid schema - // TODO - fix this await expect(col.update({ name: 'Carlos2' }, { surname: 'CarlosesSurname' })).rejects.toThrow(lowstorage_ERROR_CODES.UPDATE_ERROR); const updateCheck = await col2.find({ name: 'Carlos2' }); expect(updateCheck).toBeDefined(); diff --git a/src/lowstorage.ts b/src/lowstorage.ts index df801c5..6e7ab91 100644 --- a/src/lowstorage.ts +++ b/src/lowstorage.ts @@ -393,6 +393,10 @@ class Collection { } }; + getCollectionETag = (): string => { + return this._lastETag; + }; + inferAvroSchema = (data: any[] | { [s: string]: unknown } | ArrayLike, type = 'record') => { if (Array.isArray(data)) { data = data[0]; @@ -402,6 +406,17 @@ class Collection { return ensureIdFieldInSchema(schema); }; + async forceLoadData(): Promise { + try { + this._lastETag = ''; + const data = await this._loadData(); + this._dataCache = data; + return true; + } catch (error: any) { + throw new lowstorageError(`${MODULE_NAME}: Failed to force update data: ${error.message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); + } + } + async _loadData() { try { if (this._avroType === null || typeof this._avroType === 'undefined') { From bd91105399c9a34aacf3f72ca2a31e782891c26e Mon Sep 17 00:00:00 2001 From: Jolly Good <1671375+good-lly@users.noreply.github.com> Date: Thu, 22 Aug 2024 16:06:41 +0200 Subject: [PATCH 16/18] #17 setting up testing workflows --- .github/workflows/test-cf-dev.yml | 36 ++++++++++++++ .github/workflows/test-cf-master.yml | 36 ++++++++++++++ .github/workflows/test-minio-dev.yml | 33 +++++++++++++ .github/workflows/test-minio-master.yml | 33 +++++++++++++ .gitignore | 1 + README.md | 28 ++++++++++- build/lowstorage.min.js | 50 +++++++++++--------- build/lowstorage.min.js.map | 6 +-- jest.config.json => general.jest.config.json | 3 +- lib/lowstorage.d.ts | 12 +++++ lib/lowstorage.js | 39 +++++++++++++++ lib/lowstorage.js.map | 2 +- minio.jest.config.json | 11 +++++ package-lock.json | 14 +++--- package.json | 8 ++-- src/lowstorage.test.js | 38 +++++++-------- src/lowstorage.ts | 39 +++++++++++++++ test_ops/compose.yaml | 15 ++++++ test_ops/setup.js | 39 +++++++++++++++ test_ops/teardown.js | 37 +++++++++++++++ 20 files changed, 418 insertions(+), 62 deletions(-) create mode 100644 .github/workflows/test-cf-dev.yml create mode 100644 .github/workflows/test-cf-master.yml create mode 100644 .github/workflows/test-minio-dev.yml create mode 100644 .github/workflows/test-minio-master.yml rename jest.config.json => general.jest.config.json (60%) create mode 100644 minio.jest.config.json create mode 100644 test_ops/compose.yaml create mode 100644 test_ops/setup.js create mode 100644 test_ops/teardown.js diff --git a/.github/workflows/test-cf-dev.yml b/.github/workflows/test-cf-dev.yml new file mode 100644 index 0000000..2842374 --- /dev/null +++ b/.github/workflows/test-cf-dev.yml @@ -0,0 +1,36 @@ +name: Test Cloudflare Dev + +on: + push: + branches: [dev] + pull_request: + branches: [dev] + +jobs: + test: + runs-on: ubuntu-latest + timeout-minutes: 10 + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-node@v4 + with: + node-version: 20 + + - name: Install dependencies + run: npm install + + - name: Build project + run: npm run build + + - name: Create env-cf file + run: | + touch .env + echo ENDPOINT=${{ secrets.ENDPOINT }} >> .env + echo REGION=${{ secrets.REGION }} >> .env + echo ACCESS_KEY_ID=${{ secrets.ACCESS_KEY_ID }} >> .env + echo SECRET_ACCESS_KEY=${{ secrets.SECRET_ACCESS_KEY }} >> .env + echo BUCKET_NAME=${{ secrets.BUCKET_NAME }} >> .env + + - name: Run e2e tests + run: npm run test:cf diff --git a/.github/workflows/test-cf-master.yml b/.github/workflows/test-cf-master.yml new file mode 100644 index 0000000..d6fd822 --- /dev/null +++ b/.github/workflows/test-cf-master.yml @@ -0,0 +1,36 @@ +name: Test Cloudflare Dev + +on: + push: + branches: [master] + pull_request: + branches: [master] + +jobs: + test: + runs-on: ubuntu-latest + timeout-minutes: 10 + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-node@v4 + with: + node-version: 20 + + - name: Install dependencies + run: npm install + + - name: Build project + run: npm run build + + - name: Create env-cf file + run: | + touch .env + echo ENDPOINT=${{ secrets.ENDPOINT }} >> .env + echo REGION=${{ secrets.REGION }} >> .env + echo ACCESS_KEY_ID=${{ secrets.ACCESS_KEY_ID }} >> .env + echo SECRET_ACCESS_KEY=${{ secrets.SECRET_ACCESS_KEY }} >> .env + echo BUCKET_NAME=${{ secrets.BUCKET_NAME }} >> .env + + - name: Run e2e tests + run: npm run test:cf diff --git a/.github/workflows/test-minio-dev.yml b/.github/workflows/test-minio-dev.yml new file mode 100644 index 0000000..e3fb8e8 --- /dev/null +++ b/.github/workflows/test-minio-dev.yml @@ -0,0 +1,33 @@ +name: Test Minio Dev + +on: + push: + branches: [dev] + pull_request: + branches: [dev] + +jobs: + test: + runs-on: ubuntu-latest + timeout-minutes: 10 + steps: + - uses: actions/checkout@v4 + + - name: Check Docker version + run: docker --version && docker compose version + + - name: Start Docker image + run: docker compose -f ./tests/compose.yaml up -d && sleep 10 + + - uses: actions/setup-node@v4 + with: + node-version: 20 + + - name: Install dependencies + run: npm install + + - name: Build project + run: npm run build + + - name: Run e2e tests + run: npm run test:minio diff --git a/.github/workflows/test-minio-master.yml b/.github/workflows/test-minio-master.yml new file mode 100644 index 0000000..22900d4 --- /dev/null +++ b/.github/workflows/test-minio-master.yml @@ -0,0 +1,33 @@ +name: Test Minio Master + +on: + push: + branches: [master] + pull_request: + branches: [master] + +jobs: + test: + runs-on: ubuntu-latest + timeout-minutes: 10 + steps: + - uses: actions/checkout@v4 + + - name: Check Docker version + run: docker --version && docker compose version + + - name: Start Docker image + run: docker compose -f ./tests/compose.yaml up -d && sleep 10 + + - uses: actions/setup-node@v4 + with: + node-version: 20 + + - name: Install dependencies + run: npm install + + - name: Build project + run: npm run build + + - name: Run e2e tests + run: npm run test:minio diff --git a/.gitignore b/.gitignore index ed06b0c..fc56c15 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ node_modules .wrangler .env +test_ops/data diff --git a/README.md b/README.md index 80bb3dd..aadd61d 100644 --- a/README.md +++ b/README.md @@ -13,6 +13,8 @@ [![GitHub issues](https://img.shields.io/github/issues/good-lly/lowstorage)](https://github.com/good-lly/lowstorage/issues/) Contributions welcome +[![CodeQL](https://github.com/good-lly/lowstorage/actions/workflows/github-code-scanning/codeql/badge.svg?branch=master)](https://github.com/good-lly/lowstorage/actions/workflows/github-code-scanning/codeql) + [[github](https://github.com/good-lly/lowstorage)] [[npm](https://www.npmjs.com/package/lowstorage)] @@ -60,6 +62,8 @@ R2 uses the S3 API to allow users and their applications to migrate with ease. W - [lowstorage class](#lowstorage) - [constructor(options: S3Options)](#constructor) + - [checkIfStorageExists(): Promise](#checkifstorageexists) + - [createStorage(): Promise](#createstorage) - [collection(colName: string, schema?: Object, autoCreate?: boolean)](#lowstorage-collection) - [listCollections(): Promise](#listcollections) - [createCollection(colName: string, schema?: Object, data?: any[]): Promise](#createcollection) @@ -214,11 +218,11 @@ For Cloudflare R2, follow similar steps with your R2-specific endpoint and crede ## API - + ### lowstorage class - + #### constructor(options: S3Options) @@ -236,6 +240,24 @@ For Cloudflare R2, follow similar steps with your R2-specific endpoint and crede - **Returns**: A new lowstorage instance. - **Throws**: A lowstorageError if there's an error. + + +#### checkIfStorageExists(): Promise\ + +- **Behavior**: Checks if a storage bucket exists. +- **Returns**: A Promise that resolves to a boolean indicating whether the storage bucket exists. +- **Throws**: A lowstorageError if there's an error. + + + +#### createStorage(): Promise\ + +- **Behavior**: Creates a new storage bucket if it doesn't exist. +- **Returns**: A Promise that resolves to a boolean indicating whether the storage bucket was created or already exists. +- **Throws**: A lowstorageError if there's an error. + + + #### collection(colName: string, schema?: Object, autoCreate?: boolean) - **Behavior**: Creates or accesses a collection with the given name. @@ -246,6 +268,8 @@ For Cloudflare R2, follow similar steps with your R2-specific endpoint and crede - **Returns**: An instance of the Collection class corresponding to the specified collection name. - **Throws**: A lowstorageError if there's an error. + + #### listCollections(): Promise - **Behavior**: Lists all collections stored in the lowstorage instance. diff --git a/build/lowstorage.min.js b/build/lowstorage.min.js index 67e2068..86f463a 100644 --- a/build/lowstorage.min.js +++ b/build/lowstorage.min.js @@ -1,8 +1,8 @@ -import qe from"buffer";import xt from"crypto";import De from"util";import vt from"stream";import Nt from"zlib";import At from"events";import mt from"fs";import gt from"path";import{randomUUID as et}from"node:crypto";var It=Object.create,wt=Object.defineProperty,$t=Object.getOwnPropertyDescriptor,bt=Object.getOwnPropertyNames,Ct=Object.getPrototypeOf,Pt=Object.prototype.hasOwnProperty;var Ae=(h,l)=>function(){return l||(0,h[bt(h)[0]])((l={exports:{}}).exports,l),l.exports},Bt=(h,l,c,d)=>{if(l&&typeof l=="object"||typeof l=="function")for(let _ of bt(l))!Pt.call(h,_)&&_!==c&&wt(h,_,{get:()=>l[_],enumerable:!(d=$t(l,_))||d.enumerable});return h},Lt=(h,l,c)=>(c=h!=null?It(Ct(h)):{},Bt(l||!h||!h.__esModule?wt(c,"default",{value:h,enumerable:!0}):c,h)),Ue=Ae({"node_modules/avsc/lib/utils.js"(h,l){"use strict";var c=qe,d=xt,_=De,g=c.Buffer,O=new S(4096),T=/^[A-Za-z_][A-Za-z0-9_]*$/,v=_.format;function R(u){return typeof g.alloc=="function"?g.alloc(u):new g(u)}function C(u,p){return typeof g.from=="function"?g.from(u,p):new g(u,p)}function P(u){return u.charAt(0).toUpperCase()+u.slice(1)}function Q(u,p){return u===p?0:u=0)return-2;b=A}return b}function w(u,p){var b={},A,V;for(A=0;Ap?R(u):(this._pos+u>p&&(this._slab=R(p),this._pos=0),this._slab.slice(this._pos,this._pos+=u))};function N(u){var p=1103515245,b=12345,A=Math.pow(2,31),V=Math.floor(u||Math.random()*(A-1));this._max=A,this._nextInt=function(){return V=(p*V+b)%A}}N.prototype.nextBoolean=function(){return!!(this._nextInt()%2)},N.prototype.nextInt=function(u,p){return p===void 0&&(p=u,u=0),p=p===void 0?this._max:p,u+Math.floor(this.nextFloat()*(p-u))},N.prototype.nextFloat=function(u,p){return p===void 0&&(p=u,u=0),p=p===void 0?1:p,u+(p-u)*this._nextInt()/this._max},N.prototype.nextString=function(u,p){u|=0,p=p||"aA";var b="";p.indexOf("a")>-1&&(b+="abcdefghijklmnopqrstuvwxyz"),p.indexOf("A")>-1&&(b+="ABCDEFGHIJKLMNOPQRSTUVWXYZ"),p.indexOf("#")>-1&&(b+="0123456789"),p.indexOf("!")>-1&&(b+="~`!@#$%^&*()_+-={}[]:\";'<>?,./|\\");for(var A=[],V=0;V0&&p[b].index>1].index;)u=p[b],p[b]=p[A],p[A]=u,b=A},x.prototype.pop=function(){var u=this._items,p=u.length-1|0,b=u[0];if(!b||b.index>this._index)return null;if(this._index++,!p)return u.pop(),b;u[0]=u.pop();for(var A=p>>1,V=0,ee,K,he,pe,fe,ge,ve;V=pe.index));)u[he]=pe,u[V]=fe,V=he;return b};function I(u,p){if(this.buf=u,this.pos=p|0,this.pos<0)throw new Error("negative offset")}I.prototype.isValid=function(){return this.pos<=this.buf.length},I.prototype._invalidate=function(){this.pos=this.buf.length+1},I.prototype.readBoolean=function(){return!!this.buf[this.pos++]},I.prototype.skipBoolean=function(){this.pos++},I.prototype.writeBoolean=function(u){this.buf[this.pos++]=!!u},I.prototype.readInt=I.prototype.readLong=function(){var u=0,p=0,b=this.buf,A,V,ee,K;do A=b[this.pos++],V=A&128,u|=(A&127)<>1^-(u&1)},I.prototype.skipInt=I.prototype.skipLong=function(){for(var u=this.buf;u[this.pos++]&128;);},I.prototype.writeInt=I.prototype.writeLong=function(u){var p=this.buf,b,A;if(u>=-1073741824&&u<1073741824){A=u>=0?u<<1:~u<<1|1;do p[this.pos]=A&127,A>>=7;while(A&&(p[this.pos++]|=128))}else{b=u>=0?u*2:-u*2-1;do p[this.pos]=b&127,b/=128;while(b>=1&&(p[this.pos++]|=128))}this.pos++},I.prototype.readFloat=function(){var u=this.buf,p=this.pos;return this.pos+=4,this.pos>u.length?0:this.buf.readFloatLE(p)},I.prototype.skipFloat=function(){this.pos+=4},I.prototype.writeFloat=function(u){var p=this.buf,b=this.pos;if(this.pos+=4,!(this.pos>p.length))return this.buf.writeFloatLE(u,b)},I.prototype.readDouble=function(){var u=this.buf,p=this.pos;return this.pos+=8,this.pos>u.length?0:this.buf.readDoubleLE(p)},I.prototype.skipDouble=function(){this.pos+=8},I.prototype.writeDouble=function(u){var p=this.buf,b=this.pos;if(this.pos+=8,!(this.pos>p.length))return this.buf.writeDoubleLE(u,b)},I.prototype.readFixed=function(u){var p=this.pos;if(this.pos+=u,!(this.pos>this.buf.length)){var b=O.alloc(u);return this.buf.copy(b,0,p,p+u),b}},I.prototype.skipFixed=function(u){this.pos+=u},I.prototype.writeFixed=function(u,p){p=p||u.length;var b=this.pos;this.pos+=p,!(this.pos>this.buf.length)&&u.copy(this.buf,b,0,p)},I.prototype.readBytes=function(){var u=this.readLong();if(u<0){this._invalidate();return}return this.readFixed(u)},I.prototype.skipBytes=function(){var u=this.readLong();if(u<0){this._invalidate();return}this.pos+=u},I.prototype.writeBytes=function(u){var p=u.length;this.writeLong(p),this.writeFixed(u,p)},typeof g.prototype.utf8Slice=="function"?I.prototype.readString=function(){var u=this.readLong();if(u<0)return this._invalidate(),"";var p=this.pos,b=this.buf;if(this.pos+=u,!(this.pos>b.length))return this.buf.utf8Slice(p,p+u)}:I.prototype.readString=function(){var u=this.readLong();if(u<0)return this._invalidate(),"";var p=this.pos,b=this.buf;if(this.pos+=u,!(this.pos>b.length))return this.buf.slice(p,p+u).toString()},I.prototype.skipString=function(){var u=this.readLong();if(u<0){this._invalidate();return}this.pos+=u},I.prototype.writeString=function(u){var p=g.byteLength(u),b=this.buf;this.writeLong(p);var A=this.pos;if(this.pos+=p,!(this.pos>b.length))if(p>64&&typeof g.prototype.utf8Write=="function")b.utf8Write(u,A,p);else{var V,ee,K,he;for(V=0,ee=p;V>6|192,b[A++]=K&63|128):(K&64512)===55296&&((he=u.charCodeAt(V+1))&64512)===56320?(K=65536+((K&1023)<<10)+(he&1023),V++,b[A++]=K>>18|240,b[A++]=K>>12&63|128,b[A++]=K>>6&63|128,b[A++]=K&63|128):(b[A++]=K>>12|224,b[A++]=K>>6&63|128,b[A++]=K&63|128)}},typeof g.prototype.latin1Write=="function"?I.prototype.writeBinary=function(u,p){var b=this.pos;this.pos+=p,!(this.pos>this.buf.length)&&this.buf.latin1Write(u,b,p)}:typeof g.prototype.binaryWrite=="function"?I.prototype.writeBinary=function(u,p){var b=this.pos;this.pos+=p,!(this.pos>this.buf.length)&&this.buf.binaryWrite(u,b,p)}:I.prototype.writeBinary=function(u,p){var b=this.pos;this.pos+=p,!(this.pos>this.buf.length)&&this.buf.write(u,b,p,"binary")},I.prototype.matchBoolean=function(u){return this.buf[this.pos++]-u.buf[u.pos++]},I.prototype.matchInt=I.prototype.matchLong=function(u){var p=this.readLong(),b=u.readLong();return p===b?0:p>1;ee&128;)ee=V[this.pos++],p|=(ee&127)<=8&&(A-=8,u[b++]=p,p>>=8);return u[b]=p,K&&Z(u,8),u},I.prototype.packLongBytes=function(u){var p=(u[7]&128)>>7,b=this.buf,A=1,V=0,ee=3,K;p?(Z(u,8),K=1):K=0;for(var he=[u.readUIntLE(0,3),u.readUIntLE(3,3),u.readUIntLE(6,2)];ee&&!he[--ee];);for(;V7;)b[this.pos++]=K&127|128,K>>=7,A-=7;K|=he[ee]<>=7;while(K&&(b[this.pos++]|=128));this.pos++,p&&Z(u,8)};function Z(u,p){for(;p--;)u[p]=~u[p]}l.exports={abstractFunction:ne,addDeprecatedGetters:E,bufferFrom:C,capitalize:P,copyOwnProperties:te,getHash:m,compare:Q,getOption:re,impliedNamespace:X,isValidName:M,jsonEnd:q,newBuffer:R,objectValues:j,qualify:G,toMap:w,singleIndexOf:a,hasDuplicates:U,unqualify:D,BufferPool:S,Lcg:N,OrderedQueue:x,Tap:I}}}),nt=Ae({"node_modules/avsc/lib/types.js"(h,l){"use strict";var c=Ue(),d=qe,_=De,g=d.Buffer,O=d.SlowBuffer,T=c.Tap,v=_.debuglog("avsc:types"),R=_.format,C={array:Z,boolean:U,bytes:q,double:D,enum:N,error:u,fixed:x,float:G,int:te,long:M,map:I,null:j,record:u,string:X},P=new c.Lcg,Q=new T(new O(1024)),re=null,m=[];function a(t,i){var e;if(re?(e=re,m.push([re,this]),re=null):e=this,this._hash=new ee,this.name=void 0,this.aliases=void 0,this.doc=t&&t.doc?""+t.doc:void 0,t){var r=t.name,n=t.namespace===void 0?i&&i.namespace:t.namespace;if(r!==void 0){if(r=Se(r,n),fe(r))throw new Error(R("cannot rename primitive type: %j",r));var o=i&&i.registry;if(o){if(o[r]!==void 0)throw new Error(R("duplicate type name: %s",r));o[r]=e}}else if(i&&i.noAnonymousTypes)throw new Error(R("missing name property in schema: %j",t));this.name=r,this.aliases=t.aliases?t.aliases.map(function(s){return Se(s,n)}):[]}}a.forSchema=function(t,i){i=i||{},i.registry=i.registry||{};var e=function(k){switch(k===!0?k="always":k===!1?k="never":k===void 0?k="auto":typeof k=="string"&&(k=k.toLowerCase()),k){case"always":return S;case"never":return E;case"auto":return;default:throw new Error(R("invalid wrap unions option: %j",k))}}(i.wrapUnions);if(t===null)throw new Error('invalid type: null (did you mean "null"?)');if(a.isType(t))return t;var r;if(i.typeHook&&(r=i.typeHook(t,i))){if(!a.isType(r))throw new Error(R("invalid typehook return value: %j",r));return r}if(typeof t=="string"){if(t=Se(t,i.namespace),r=i.registry[t],r)return r;if(fe(t))return i.registry[t]=a.forSchema({type:t},i);throw new Error(R("undefined type name: %s",t))}if(t.logicalType&&i.logicalTypes&&!re){var n=i.logicalTypes[t.logicalType];if(n){var o=i.namespace,s={};Object.keys(i.registry).forEach(function(k){s[k]=i.registry[k]});try{return v("instantiating logical type for %s",t.logicalType),new n(t,i)}catch(k){if(v("failed to instantiate logical type for %s",t.logicalType),i.assertLogicalTypes)throw k;re=null,i.namespace=o,i.registry=s}}}if(Array.isArray(t)){var f=re;re=null;var y=t.map(function(k){return a.forSchema(k,i)});e||(e=Ee(y)?S:E),re=f,r=new e(y,i)}else r=function(k){var $=C[k];if($===void 0)throw new Error(R("unknown type: %j",k));return new $(t,i)}(t.type);return r},a.forValue=function(t,i){if(i=i||{},i.emptyArrayType=i.emptyArrayType||a.forSchema({type:"array",items:"null"}),i.valueHook){var e=i.valueHook(t,i);if(e!==void 0){if(!a.isType(e))throw new Error(R("invalid value hook return value: %j",e));return e}}switch(typeof t){case"string":return a.forSchema("string",i);case"boolean":return a.forSchema("boolean",i);case"number":return(t|0)===t?a.forSchema("int",i):Math.abs(t)<9007199254740991?a.forSchema("float",i):a.forSchema("double",i);case"object":if(t===null)return a.forSchema("null",i);if(Array.isArray(t))return t.length?a.forSchema({type:"array",items:a.forTypes(t.map(function(n){return a.forValue(n,i)}),i)},i):i.emptyArrayType;if(g.isBuffer(t))return a.forSchema("bytes",i);var r=Object.keys(t);return r.some(function(n){return!c.isValidName(n)})?a.forSchema({type:"map",values:a.forTypes(r.map(function(n){return a.forValue(t[n],i)}),i)},i):a.forSchema({type:"record",fields:r.map(function(n){return{name:n,type:a.forValue(t[n],i)}})},i);default:throw new Error(R("cannot infer type from: %j",t))}},a.forTypes=function(t,i){if(!t.length)throw new Error("no types to combine");if(t.length===1)return t[0];i=i||{};var e=[],r=0,n=!0;if(t.forEach(function(L){switch(L.typeName){case"union:unwrapped":n=!1,e=e.concat(L.types);break;case"union:wrapped":r++,e=e.concat(L.types);break;case"null":e.push(L);break;default:n=!1,e.push(L)}}),r){if(!n)throw new Error("cannot combine wrapped union");var o={};e.forEach(function(L){var F=L.branchName,J=o[F];if(!J)o[F]=L;else if(!L.equals(J))throw new Error("inconsistent branch type")});var s=i.wrapUnions,f;i.wrapUnions=!0;try{f=a.forSchema(Object.keys(o).map(function(L){return o[L]}),i)}catch(L){throw i.wrapUnions=s,L}return i.wrapUnions=s,f}var y={};e.forEach(function(L){var F=$e(L),J=y[F];J||(y[F]=J=[]),J.push(L)});var k=Object.keys(y),$=k.map(function(L){var F=y[L];if(F.length===1)return F[0];switch(L){case"null":case"boolean":return F[0];case"number":return Fe(F);case"string":return ze(F,i);case"buffer":return Ge(F,i);case"array":return F=F.filter(function(J){return J!==i.emptyArrayType}),F.length?a.forSchema({type:"array",items:a.forTypes(F.map(function(J){return J.itemsType}),i)},i):i.emptyArrayType;default:return Ke(F,i)}});return $.length===1?$[0]:a.forSchema($,i)},a.isType=function(){var t=arguments.length;if(!t)return!1;var i=arguments[0];if(!i||typeof i._update!="function"||typeof i.fingerprint!="function")return!1;if(t===1)return!0;var e=i.typeName,r;for(r=1;r",i);var e=this.schema({exportAttrs:!0,noDeref:!0});return typeof e=="object"&&!a.isType(this,"logical")&&(e.type=void 0),R("<%s %j>",i,e)},a.prototype.isValid=function(t,i){var e=(i&&i.noUndeclaredFields)|0,r=i&&i.errorHook,n,o;return r&&(o=[],n=function(s,f){r.call(this,o.slice(),s,f,t)}),this._check(t,e,n,o)},a.prototype.random=c.abstractFunction,a.prototype.schema=function(t){return this._attrs({exportAttrs:!!(t&&t.exportAttrs),noDeref:!!(t&&t.noDeref)})},a.prototype.toBuffer=function(t){Q.pos=0,this._write(Q,t);var i=c.newBuffer(Q.pos);return Q.isValid()?Q.buf.copy(i,0,0,Q.pos):this._write(new T(i),t),i},a.prototype.toJSON=function(){return this.schema({exportAttrs:!0})},a.prototype.toString=function(t){return JSON.stringify(t===void 0?this.schema({noDeref:!0}):this._copy(t,{coerce:3}))},a.prototype.wrap=function(t){var i=this._branchConstructor;return i===null?null:new i(t)},a.prototype._attrs=function(t){t.derefed=t.derefed||{};var i=this.name;if(i!==void 0){if(t.noDeref||t.derefed[i])return i;t.derefed[i]=!0}var e={};this.name!==void 0&&(e.name=i),e.type=this.typeName;var r=this._deref(e,t);return r!==void 0&&(e=r),t.exportAttrs&&(this.aliases&&this.aliases.length&&(e.aliases=this.aliases),this.doc!==void 0&&(e.doc=this.doc)),e},a.prototype._createBranchConstructor=function(){var t=this.branchName;if(t==="null")return null;var i=~t.indexOf(".")?"this['"+t+"']":"this."+t,e="return function Branch$(val) { "+i+" = val; };",r=new Function(e)();return r.type=this,r.prototype.unwrap=new Function("return "+i+";"),r.prototype.unwrapped=r.prototype.unwrap,r},a.prototype._peek=function(t){var i=t.pos,e=this._read(t);return t.pos=i,e},a.prototype._check=c.abstractFunction,a.prototype._copy=c.abstractFunction,a.prototype._deref=c.abstractFunction,a.prototype._match=c.abstractFunction,a.prototype._read=c.abstractFunction,a.prototype._skip=c.abstractFunction,a.prototype._update=c.abstractFunction,a.prototype._write=c.abstractFunction,a.prototype.getAliases=function(){return this.aliases},a.prototype.getFingerprint=a.prototype.fingerprint,a.prototype.getName=function(t){return this.name||!t?this.name:this.branchName},a.prototype.getSchema=a.prototype.schema,a.prototype.getTypeName=function(){return this.typeName};function w(t){a.call(this),this._branchConstructor=this._createBranchConstructor(),t||Object.freeze(this)}_.inherits(w,a),w.prototype._update=function(t,i){i.typeName===this.typeName&&(t._read=this._read)},w.prototype._copy=function(t){return this._check(t,void 0,ue),t},w.prototype._deref=function(){return this.typeName},w.prototype.compare=c.compare;function j(){w.call(this)}_.inherits(j,w),j.prototype._check=function(t,i,e){var r=t===null;return!r&&e&&e(t,this),r},j.prototype._read=function(){return null},j.prototype._skip=function(){},j.prototype._write=function(t,i){i!==null&&ue(i,this)},j.prototype._match=function(){return 0},j.prototype.compare=j.prototype._match,j.prototype.typeName="null",j.prototype.random=j.prototype._read;function U(){w.call(this)}_.inherits(U,w),U.prototype._check=function(t,i,e){var r=typeof t=="boolean";return!r&&e&&e(t,this),r},U.prototype._read=function(t){return t.readBoolean()},U.prototype._skip=function(t){t.skipBoolean()},U.prototype._write=function(t,i){typeof i!="boolean"&&ue(i,this),t.writeBoolean(i)},U.prototype._match=function(t,i){return t.matchBoolean(i)},U.prototype.typeName="boolean",U.prototype.random=function(){return P.nextBoolean()};function te(){w.call(this)}_.inherits(te,w),te.prototype._check=function(t,i,e){var r=t===(t|0);return!r&&e&&e(t,this),r},te.prototype._read=function(t){return t.readInt()},te.prototype._skip=function(t){t.skipInt()},te.prototype._write=function(t,i){i!==(i|0)&&ue(i,this),t.writeInt(i)},te.prototype._match=function(t,i){return t.matchInt(i)},te.prototype.typeName="int",te.prototype.random=function(){return P.nextInt(1e3)|0};function M(){w.call(this)}_.inherits(M,w),M.prototype._check=function(t,i,e){var r=typeof t=="number"&&t%1===0&&Ie(t);return!r&&e&&e(t,this),r},M.prototype._read=function(t){var i=t.readLong();if(!Ie(i))throw new Error("potential precision loss");return i},M.prototype._skip=function(t){t.skipLong()},M.prototype._write=function(t,i){(typeof i!="number"||i%1||!Ie(i))&&ue(i,this),t.writeLong(i)},M.prototype._match=function(t,i){return t.matchLong(i)},M.prototype._update=function(t,i){switch(i.typeName){case"int":t._read=i._read;break;case"abstract:long":case"long":t._read=this._read}},M.prototype.typeName="long",M.prototype.random=function(){return P.nextInt()},M.__with=function(t,i){t=t||{};var e={toBuffer:"_toBuffer",fromBuffer:"_fromBuffer",fromJSON:"_fromJSON",toJSON:"_toJSON",isValid:"_isValid",compare:"compare"},r=new b(i);return Object.keys(e).forEach(function(n){if(t[n]===void 0)throw new Error(R("missing method implementation: %s",n));r[e[n]]=t[n]}),Object.freeze(r)};function G(){w.call(this)}_.inherits(G,w),G.prototype._check=function(t,i,e){var r=typeof t=="number";return!r&&e&&e(t,this),r},G.prototype._read=function(t){return t.readFloat()},G.prototype._skip=function(t){t.skipFloat()},G.prototype._write=function(t,i){typeof i!="number"&&ue(i,this),t.writeFloat(i)},G.prototype._match=function(t,i){return t.matchFloat(i)},G.prototype._update=function(t,i){switch(i.typeName){case"float":case"int":t._read=i._read;break;case"abstract:long":case"long":t._read=function(e){return e.readLong()}}},G.prototype.typeName="float",G.prototype.random=function(){return P.nextFloat(1e3)};function D(){w.call(this)}_.inherits(D,w),D.prototype._check=function(t,i,e){var r=typeof t=="number";return!r&&e&&e(t,this),r},D.prototype._read=function(t){return t.readDouble()},D.prototype._skip=function(t){t.skipDouble()},D.prototype._write=function(t,i){typeof i!="number"&&ue(i,this),t.writeDouble(i)},D.prototype._match=function(t,i){return t.matchDouble(i)},D.prototype._update=function(t,i){switch(i.typeName){case"double":case"float":case"int":t._read=i._read;break;case"abstract:long":case"long":t._read=function(e){return e.readLong()}}},D.prototype.typeName="double",D.prototype.random=function(){return P.nextFloat()};function X(){w.call(this)}_.inherits(X,w),X.prototype._check=function(t,i,e){var r=typeof t=="string";return!r&&e&&e(t,this),r},X.prototype._read=function(t){return t.readString()},X.prototype._skip=function(t){t.skipString()},X.prototype._write=function(t,i){typeof i!="string"&&ue(i,this),t.writeString(i)},X.prototype._match=function(t,i){return t.matchString(i)},X.prototype._update=function(t,i){switch(i.typeName){case"bytes":case"string":t._read=this._read}},X.prototype.typeName="string",X.prototype.random=function(){return P.nextString(P.nextInt(32))};function q(){w.call(this)}_.inherits(q,w),q.prototype._check=function(t,i,e){var r=g.isBuffer(t);return!r&&e&&e(t,this),r},q.prototype._read=function(t){return t.readBytes()},q.prototype._skip=function(t){t.skipBytes()},q.prototype._write=function(t,i){g.isBuffer(i)||ue(i,this),t.writeBytes(i)},q.prototype._match=function(t,i){return t.matchBytes(i)},q.prototype._update=X.prototype._update,q.prototype._copy=function(t,i){var e;switch((i&&i.coerce)|0){case 3:return this._check(t,void 0,ue),t.toString("binary");case 2:if(typeof t!="string")throw new Error(R("cannot coerce to buffer: %j",t));return e=c.bufferFrom(t,"binary"),this._check(e,void 0,ue),e;case 1:if(!je(t))throw new Error(R("cannot coerce to buffer: %j",t));return e=c.bufferFrom(t.data),this._check(e,void 0,ue),e;default:return this._check(t,void 0,ue),c.bufferFrom(t)}},q.prototype.compare=g.compare,q.prototype.typeName="bytes",q.prototype.random=function(){return P.nextBuffer(P.nextInt(32))};function ne(t,i){if(a.call(this),!Array.isArray(t))throw new Error(R("non-array union schema: %j",t));if(!t.length)throw new Error("empty union");this.types=Object.freeze(t.map(function(e){return a.forSchema(e,i)})),this._branchIndices={},this.types.forEach(function(e,r){if(a.isType(e,"union"))throw new Error("unions cannot be directly nested");var n=e.branchName;if(this._branchIndices[n]!==void 0)throw new Error(R("duplicate union branch name: %j",n));this._branchIndices[n]=r},this)}_.inherits(ne,a),ne.prototype._branchConstructor=function(){throw new Error("unions cannot be directly wrapped")},ne.prototype._skip=function(t){this.types[t.readLong()]._skip(t)},ne.prototype._match=function(t,i){var e=t.readLong(),r=i.readLong();return e===r?this.types[e]._match(t,i):efunction(){return l||(0,u[bt(u)[0]])((l={exports:{}}).exports,l),l.exports},Bt=(u,l,h,d)=>{if(l&&typeof l=="object"||typeof l=="function")for(let _ of bt(l))!Pt.call(u,_)&&_!==h&&wt(u,_,{get:()=>l[_],enumerable:!(d=$t(l,_))||d.enumerable});return u},Lt=(u,l,h)=>(h=u!=null?It(Ct(u)):{},Bt(l||!u||!u.__esModule?wt(h,"default",{value:u,enumerable:!0}):h,u)),ze=Ie({"node_modules/avsc/lib/utils.js"(u,l){"use strict";var h=Ue,d=xt,_=De,g=h.Buffer,O=new k(4096),T=/^[A-Za-z_][A-Za-z0-9_]*$/,v=_.format;function R(c){return typeof g.alloc=="function"?g.alloc(c):new g(c)}function C(c,p){return typeof g.from=="function"?g.from(c,p):new g(c,p)}function P(c){return c.charAt(0).toUpperCase()+c.slice(1)}function Q(c,p){return c===p?0:c=0)return-2;b=A}return b}function w(c,p){var b={},A,V;for(A=0;Ap?R(c):(this._pos+c>p&&(this._slab=R(p),this._pos=0),this._slab.slice(this._pos,this._pos+=c))};function N(c){var p=1103515245,b=12345,A=Math.pow(2,31),V=Math.floor(c||Math.random()*(A-1));this._max=A,this._nextInt=function(){return V=(p*V+b)%A}}N.prototype.nextBoolean=function(){return!!(this._nextInt()%2)},N.prototype.nextInt=function(c,p){return p===void 0&&(p=c,c=0),p=p===void 0?this._max:p,c+Math.floor(this.nextFloat()*(p-c))},N.prototype.nextFloat=function(c,p){return p===void 0&&(p=c,c=0),p=p===void 0?1:p,c+(p-c)*this._nextInt()/this._max},N.prototype.nextString=function(c,p){c|=0,p=p||"aA";var b="";p.indexOf("a")>-1&&(b+="abcdefghijklmnopqrstuvwxyz"),p.indexOf("A")>-1&&(b+="ABCDEFGHIJKLMNOPQRSTUVWXYZ"),p.indexOf("#")>-1&&(b+="0123456789"),p.indexOf("!")>-1&&(b+="~`!@#$%^&*()_+-={}[]:\";'<>?,./|\\");for(var A=[],V=0;V0&&p[b].index>1].index;)c=p[b],p[b]=p[A],p[A]=c,b=A},x.prototype.pop=function(){var c=this._items,p=c.length-1|0,b=c[0];if(!b||b.index>this._index)return null;if(this._index++,!p)return c.pop(),b;c[0]=c.pop();for(var A=p>>1,V=0,ee,J,he,pe,fe,ge,ve;V=pe.index));)c[he]=pe,c[V]=fe,V=he;return b};function I(c,p){if(this.buf=c,this.pos=p|0,this.pos<0)throw new Error("negative offset")}I.prototype.isValid=function(){return this.pos<=this.buf.length},I.prototype._invalidate=function(){this.pos=this.buf.length+1},I.prototype.readBoolean=function(){return!!this.buf[this.pos++]},I.prototype.skipBoolean=function(){this.pos++},I.prototype.writeBoolean=function(c){this.buf[this.pos++]=!!c},I.prototype.readInt=I.prototype.readLong=function(){var c=0,p=0,b=this.buf,A,V,ee,J;do A=b[this.pos++],V=A&128,c|=(A&127)<>1^-(c&1)},I.prototype.skipInt=I.prototype.skipLong=function(){for(var c=this.buf;c[this.pos++]&128;);},I.prototype.writeInt=I.prototype.writeLong=function(c){var p=this.buf,b,A;if(c>=-1073741824&&c<1073741824){A=c>=0?c<<1:~c<<1|1;do p[this.pos]=A&127,A>>=7;while(A&&(p[this.pos++]|=128))}else{b=c>=0?c*2:-c*2-1;do p[this.pos]=b&127,b/=128;while(b>=1&&(p[this.pos++]|=128))}this.pos++},I.prototype.readFloat=function(){var c=this.buf,p=this.pos;return this.pos+=4,this.pos>c.length?0:this.buf.readFloatLE(p)},I.prototype.skipFloat=function(){this.pos+=4},I.prototype.writeFloat=function(c){var p=this.buf,b=this.pos;if(this.pos+=4,!(this.pos>p.length))return this.buf.writeFloatLE(c,b)},I.prototype.readDouble=function(){var c=this.buf,p=this.pos;return this.pos+=8,this.pos>c.length?0:this.buf.readDoubleLE(p)},I.prototype.skipDouble=function(){this.pos+=8},I.prototype.writeDouble=function(c){var p=this.buf,b=this.pos;if(this.pos+=8,!(this.pos>p.length))return this.buf.writeDoubleLE(c,b)},I.prototype.readFixed=function(c){var p=this.pos;if(this.pos+=c,!(this.pos>this.buf.length)){var b=O.alloc(c);return this.buf.copy(b,0,p,p+c),b}},I.prototype.skipFixed=function(c){this.pos+=c},I.prototype.writeFixed=function(c,p){p=p||c.length;var b=this.pos;this.pos+=p,!(this.pos>this.buf.length)&&c.copy(this.buf,b,0,p)},I.prototype.readBytes=function(){var c=this.readLong();if(c<0){this._invalidate();return}return this.readFixed(c)},I.prototype.skipBytes=function(){var c=this.readLong();if(c<0){this._invalidate();return}this.pos+=c},I.prototype.writeBytes=function(c){var p=c.length;this.writeLong(p),this.writeFixed(c,p)},typeof g.prototype.utf8Slice=="function"?I.prototype.readString=function(){var c=this.readLong();if(c<0)return this._invalidate(),"";var p=this.pos,b=this.buf;if(this.pos+=c,!(this.pos>b.length))return this.buf.utf8Slice(p,p+c)}:I.prototype.readString=function(){var c=this.readLong();if(c<0)return this._invalidate(),"";var p=this.pos,b=this.buf;if(this.pos+=c,!(this.pos>b.length))return this.buf.slice(p,p+c).toString()},I.prototype.skipString=function(){var c=this.readLong();if(c<0){this._invalidate();return}this.pos+=c},I.prototype.writeString=function(c){var p=g.byteLength(c),b=this.buf;this.writeLong(p);var A=this.pos;if(this.pos+=p,!(this.pos>b.length))if(p>64&&typeof g.prototype.utf8Write=="function")b.utf8Write(c,A,p);else{var V,ee,J,he;for(V=0,ee=p;V>6|192,b[A++]=J&63|128):(J&64512)===55296&&((he=c.charCodeAt(V+1))&64512)===56320?(J=65536+((J&1023)<<10)+(he&1023),V++,b[A++]=J>>18|240,b[A++]=J>>12&63|128,b[A++]=J>>6&63|128,b[A++]=J&63|128):(b[A++]=J>>12|224,b[A++]=J>>6&63|128,b[A++]=J&63|128)}},typeof g.prototype.latin1Write=="function"?I.prototype.writeBinary=function(c,p){var b=this.pos;this.pos+=p,!(this.pos>this.buf.length)&&this.buf.latin1Write(c,b,p)}:typeof g.prototype.binaryWrite=="function"?I.prototype.writeBinary=function(c,p){var b=this.pos;this.pos+=p,!(this.pos>this.buf.length)&&this.buf.binaryWrite(c,b,p)}:I.prototype.writeBinary=function(c,p){var b=this.pos;this.pos+=p,!(this.pos>this.buf.length)&&this.buf.write(c,b,p,"binary")},I.prototype.matchBoolean=function(c){return this.buf[this.pos++]-c.buf[c.pos++]},I.prototype.matchInt=I.prototype.matchLong=function(c){var p=this.readLong(),b=c.readLong();return p===b?0:p>1;ee&128;)ee=V[this.pos++],p|=(ee&127)<=8&&(A-=8,c[b++]=p,p>>=8);return c[b]=p,J&&Z(c,8),c},I.prototype.packLongBytes=function(c){var p=(c[7]&128)>>7,b=this.buf,A=1,V=0,ee=3,J;p?(Z(c,8),J=1):J=0;for(var he=[c.readUIntLE(0,3),c.readUIntLE(3,3),c.readUIntLE(6,2)];ee&&!he[--ee];);for(;V7;)b[this.pos++]=J&127|128,J>>=7,A-=7;J|=he[ee]<>=7;while(J&&(b[this.pos++]|=128));this.pos++,p&&Z(c,8)};function Z(c,p){for(;p--;)c[p]=~c[p]}l.exports={abstractFunction:oe,addDeprecatedGetters:E,bufferFrom:C,capitalize:P,copyOwnProperties:te,getHash:m,compare:Q,getOption:re,impliedNamespace:X,isValidName:M,jsonEnd:U,newBuffer:R,objectValues:j,qualify:G,toMap:w,singleIndexOf:a,hasDuplicates:z,unqualify:D,BufferPool:k,Lcg:N,OrderedQueue:x,Tap:I}}}),ot=Ie({"node_modules/avsc/lib/types.js"(u,l){"use strict";var h=ze(),d=Ue,_=De,g=d.Buffer,O=d.SlowBuffer,T=h.Tap,v=_.debuglog("avsc:types"),R=_.format,C={array:Z,boolean:z,bytes:U,double:D,enum:N,error:c,fixed:x,float:G,int:te,long:M,map:I,null:j,record:c,string:X},P=new h.Lcg,Q=new T(new O(1024)),re=null,m=[];function a(t,i){var e;if(re?(e=re,m.push([re,this]),re=null):e=this,this._hash=new ee,this.name=void 0,this.aliases=void 0,this.doc=t&&t.doc?""+t.doc:void 0,t){var r=t.name,n=t.namespace===void 0?i&&i.namespace:t.namespace;if(r!==void 0){if(r=ke(r,n),fe(r))throw new Error(R("cannot rename primitive type: %j",r));var o=i&&i.registry;if(o){if(o[r]!==void 0)throw new Error(R("duplicate type name: %s",r));o[r]=e}}else if(i&&i.noAnonymousTypes)throw new Error(R("missing name property in schema: %j",t));this.name=r,this.aliases=t.aliases?t.aliases.map(function(s){return ke(s,n)}):[]}}a.forSchema=function(t,i){i=i||{},i.registry=i.registry||{};var e=function(S){switch(S===!0?S="always":S===!1?S="never":S===void 0?S="auto":typeof S=="string"&&(S=S.toLowerCase()),S){case"always":return k;case"never":return E;case"auto":return;default:throw new Error(R("invalid wrap unions option: %j",S))}}(i.wrapUnions);if(t===null)throw new Error('invalid type: null (did you mean "null"?)');if(a.isType(t))return t;var r;if(i.typeHook&&(r=i.typeHook(t,i))){if(!a.isType(r))throw new Error(R("invalid typehook return value: %j",r));return r}if(typeof t=="string"){if(t=ke(t,i.namespace),r=i.registry[t],r)return r;if(fe(t))return i.registry[t]=a.forSchema({type:t},i);throw new Error(R("undefined type name: %s",t))}if(t.logicalType&&i.logicalTypes&&!re){var n=i.logicalTypes[t.logicalType];if(n){var o=i.namespace,s={};Object.keys(i.registry).forEach(function(S){s[S]=i.registry[S]});try{return v("instantiating logical type for %s",t.logicalType),new n(t,i)}catch(S){if(v("failed to instantiate logical type for %s",t.logicalType),i.assertLogicalTypes)throw S;re=null,i.namespace=o,i.registry=s}}}if(Array.isArray(t)){var f=re;re=null;var y=t.map(function(S){return a.forSchema(S,i)});e||(e=Te(y)?k:E),re=f,r=new e(y,i)}else r=function(S){var $=C[S];if($===void 0)throw new Error(R("unknown type: %j",S));return new $(t,i)}(t.type);return r},a.forValue=function(t,i){if(i=i||{},i.emptyArrayType=i.emptyArrayType||a.forSchema({type:"array",items:"null"}),i.valueHook){var e=i.valueHook(t,i);if(e!==void 0){if(!a.isType(e))throw new Error(R("invalid value hook return value: %j",e));return e}}switch(typeof t){case"string":return a.forSchema("string",i);case"boolean":return a.forSchema("boolean",i);case"number":return(t|0)===t?a.forSchema("int",i):Math.abs(t)<9007199254740991?a.forSchema("float",i):a.forSchema("double",i);case"object":if(t===null)return a.forSchema("null",i);if(Array.isArray(t))return t.length?a.forSchema({type:"array",items:a.forTypes(t.map(function(n){return a.forValue(n,i)}),i)},i):i.emptyArrayType;if(g.isBuffer(t))return a.forSchema("bytes",i);var r=Object.keys(t);return r.some(function(n){return!h.isValidName(n)})?a.forSchema({type:"map",values:a.forTypes(r.map(function(n){return a.forValue(t[n],i)}),i)},i):a.forSchema({type:"record",fields:r.map(function(n){return{name:n,type:a.forValue(t[n],i)}})},i);default:throw new Error(R("cannot infer type from: %j",t))}},a.forTypes=function(t,i){if(!t.length)throw new Error("no types to combine");if(t.length===1)return t[0];i=i||{};var e=[],r=0,n=!0;if(t.forEach(function(L){switch(L.typeName){case"union:unwrapped":n=!1,e=e.concat(L.types);break;case"union:wrapped":r++,e=e.concat(L.types);break;case"null":e.push(L);break;default:n=!1,e.push(L)}}),r){if(!n)throw new Error("cannot combine wrapped union");var o={};e.forEach(function(L){var F=L.branchName,W=o[F];if(!W)o[F]=L;else if(!L.equals(W))throw new Error("inconsistent branch type")});var s=i.wrapUnions,f;i.wrapUnions=!0;try{f=a.forSchema(Object.keys(o).map(function(L){return o[L]}),i)}catch(L){throw i.wrapUnions=s,L}return i.wrapUnions=s,f}var y={};e.forEach(function(L){var F=Ce(L),W=y[F];W||(y[F]=W=[]),W.push(L)});var S=Object.keys(y),$=S.map(function(L){var F=y[L];if(F.length===1)return F[0];switch(L){case"null":case"boolean":return F[0];case"number":return Fe(F);case"string":return Ge(F,i);case"buffer":return Ke(F,i);case"array":return F=F.filter(function(W){return W!==i.emptyArrayType}),F.length?a.forSchema({type:"array",items:a.forTypes(F.map(function(W){return W.itemsType}),i)},i):i.emptyArrayType;default:return Je(F,i)}});return $.length===1?$[0]:a.forSchema($,i)},a.isType=function(){var t=arguments.length;if(!t)return!1;var i=arguments[0];if(!i||typeof i._update!="function"||typeof i.fingerprint!="function")return!1;if(t===1)return!0;var e=i.typeName,r;for(r=1;r",i);var e=this.schema({exportAttrs:!0,noDeref:!0});return typeof e=="object"&&!a.isType(this,"logical")&&(e.type=void 0),R("<%s %j>",i,e)},a.prototype.isValid=function(t,i){var e=(i&&i.noUndeclaredFields)|0,r=i&&i.errorHook,n,o;return r&&(o=[],n=function(s,f){r.call(this,o.slice(),s,f,t)}),this._check(t,e,n,o)},a.prototype.random=h.abstractFunction,a.prototype.schema=function(t){return this._attrs({exportAttrs:!!(t&&t.exportAttrs),noDeref:!!(t&&t.noDeref)})},a.prototype.toBuffer=function(t){Q.pos=0,this._write(Q,t);var i=h.newBuffer(Q.pos);return Q.isValid()?Q.buf.copy(i,0,0,Q.pos):this._write(new T(i),t),i},a.prototype.toJSON=function(){return this.schema({exportAttrs:!0})},a.prototype.toString=function(t){return JSON.stringify(t===void 0?this.schema({noDeref:!0}):this._copy(t,{coerce:3}))},a.prototype.wrap=function(t){var i=this._branchConstructor;return i===null?null:new i(t)},a.prototype._attrs=function(t){t.derefed=t.derefed||{};var i=this.name;if(i!==void 0){if(t.noDeref||t.derefed[i])return i;t.derefed[i]=!0}var e={};this.name!==void 0&&(e.name=i),e.type=this.typeName;var r=this._deref(e,t);return r!==void 0&&(e=r),t.exportAttrs&&(this.aliases&&this.aliases.length&&(e.aliases=this.aliases),this.doc!==void 0&&(e.doc=this.doc)),e},a.prototype._createBranchConstructor=function(){var t=this.branchName;if(t==="null")return null;var i=~t.indexOf(".")?"this['"+t+"']":"this."+t,e="return function Branch$(val) { "+i+" = val; };",r=new Function(e)();return r.type=this,r.prototype.unwrap=new Function("return "+i+";"),r.prototype.unwrapped=r.prototype.unwrap,r},a.prototype._peek=function(t){var i=t.pos,e=this._read(t);return t.pos=i,e},a.prototype._check=h.abstractFunction,a.prototype._copy=h.abstractFunction,a.prototype._deref=h.abstractFunction,a.prototype._match=h.abstractFunction,a.prototype._read=h.abstractFunction,a.prototype._skip=h.abstractFunction,a.prototype._update=h.abstractFunction,a.prototype._write=h.abstractFunction,a.prototype.getAliases=function(){return this.aliases},a.prototype.getFingerprint=a.prototype.fingerprint,a.prototype.getName=function(t){return this.name||!t?this.name:this.branchName},a.prototype.getSchema=a.prototype.schema,a.prototype.getTypeName=function(){return this.typeName};function w(t){a.call(this),this._branchConstructor=this._createBranchConstructor(),t||Object.freeze(this)}_.inherits(w,a),w.prototype._update=function(t,i){i.typeName===this.typeName&&(t._read=this._read)},w.prototype._copy=function(t){return this._check(t,void 0,ue),t},w.prototype._deref=function(){return this.typeName},w.prototype.compare=h.compare;function j(){w.call(this)}_.inherits(j,w),j.prototype._check=function(t,i,e){var r=t===null;return!r&&e&&e(t,this),r},j.prototype._read=function(){return null},j.prototype._skip=function(){},j.prototype._write=function(t,i){i!==null&&ue(i,this)},j.prototype._match=function(){return 0},j.prototype.compare=j.prototype._match,j.prototype.typeName="null",j.prototype.random=j.prototype._read;function z(){w.call(this)}_.inherits(z,w),z.prototype._check=function(t,i,e){var r=typeof t=="boolean";return!r&&e&&e(t,this),r},z.prototype._read=function(t){return t.readBoolean()},z.prototype._skip=function(t){t.skipBoolean()},z.prototype._write=function(t,i){typeof i!="boolean"&&ue(i,this),t.writeBoolean(i)},z.prototype._match=function(t,i){return t.matchBoolean(i)},z.prototype.typeName="boolean",z.prototype.random=function(){return P.nextBoolean()};function te(){w.call(this)}_.inherits(te,w),te.prototype._check=function(t,i,e){var r=t===(t|0);return!r&&e&&e(t,this),r},te.prototype._read=function(t){return t.readInt()},te.prototype._skip=function(t){t.skipInt()},te.prototype._write=function(t,i){i!==(i|0)&&ue(i,this),t.writeInt(i)},te.prototype._match=function(t,i){return t.matchInt(i)},te.prototype.typeName="int",te.prototype.random=function(){return P.nextInt(1e3)|0};function M(){w.call(this)}_.inherits(M,w),M.prototype._check=function(t,i,e){var r=typeof t=="number"&&t%1===0&&$e(t);return!r&&e&&e(t,this),r},M.prototype._read=function(t){var i=t.readLong();if(!$e(i))throw new Error("potential precision loss");return i},M.prototype._skip=function(t){t.skipLong()},M.prototype._write=function(t,i){(typeof i!="number"||i%1||!$e(i))&&ue(i,this),t.writeLong(i)},M.prototype._match=function(t,i){return t.matchLong(i)},M.prototype._update=function(t,i){switch(i.typeName){case"int":t._read=i._read;break;case"abstract:long":case"long":t._read=this._read}},M.prototype.typeName="long",M.prototype.random=function(){return P.nextInt()},M.__with=function(t,i){t=t||{};var e={toBuffer:"_toBuffer",fromBuffer:"_fromBuffer",fromJSON:"_fromJSON",toJSON:"_toJSON",isValid:"_isValid",compare:"compare"},r=new b(i);return Object.keys(e).forEach(function(n){if(t[n]===void 0)throw new Error(R("missing method implementation: %s",n));r[e[n]]=t[n]}),Object.freeze(r)};function G(){w.call(this)}_.inherits(G,w),G.prototype._check=function(t,i,e){var r=typeof t=="number";return!r&&e&&e(t,this),r},G.prototype._read=function(t){return t.readFloat()},G.prototype._skip=function(t){t.skipFloat()},G.prototype._write=function(t,i){typeof i!="number"&&ue(i,this),t.writeFloat(i)},G.prototype._match=function(t,i){return t.matchFloat(i)},G.prototype._update=function(t,i){switch(i.typeName){case"float":case"int":t._read=i._read;break;case"abstract:long":case"long":t._read=function(e){return e.readLong()}}},G.prototype.typeName="float",G.prototype.random=function(){return P.nextFloat(1e3)};function D(){w.call(this)}_.inherits(D,w),D.prototype._check=function(t,i,e){var r=typeof t=="number";return!r&&e&&e(t,this),r},D.prototype._read=function(t){return t.readDouble()},D.prototype._skip=function(t){t.skipDouble()},D.prototype._write=function(t,i){typeof i!="number"&&ue(i,this),t.writeDouble(i)},D.prototype._match=function(t,i){return t.matchDouble(i)},D.prototype._update=function(t,i){switch(i.typeName){case"double":case"float":case"int":t._read=i._read;break;case"abstract:long":case"long":t._read=function(e){return e.readLong()}}},D.prototype.typeName="double",D.prototype.random=function(){return P.nextFloat()};function X(){w.call(this)}_.inherits(X,w),X.prototype._check=function(t,i,e){var r=typeof t=="string";return!r&&e&&e(t,this),r},X.prototype._read=function(t){return t.readString()},X.prototype._skip=function(t){t.skipString()},X.prototype._write=function(t,i){typeof i!="string"&&ue(i,this),t.writeString(i)},X.prototype._match=function(t,i){return t.matchString(i)},X.prototype._update=function(t,i){switch(i.typeName){case"bytes":case"string":t._read=this._read}},X.prototype.typeName="string",X.prototype.random=function(){return P.nextString(P.nextInt(32))};function U(){w.call(this)}_.inherits(U,w),U.prototype._check=function(t,i,e){var r=g.isBuffer(t);return!r&&e&&e(t,this),r},U.prototype._read=function(t){return t.readBytes()},U.prototype._skip=function(t){t.skipBytes()},U.prototype._write=function(t,i){g.isBuffer(i)||ue(i,this),t.writeBytes(i)},U.prototype._match=function(t,i){return t.matchBytes(i)},U.prototype._update=X.prototype._update,U.prototype._copy=function(t,i){var e;switch((i&&i.coerce)|0){case 3:return this._check(t,void 0,ue),t.toString("binary");case 2:if(typeof t!="string")throw new Error(R("cannot coerce to buffer: %j",t));return e=h.bufferFrom(t,"binary"),this._check(e,void 0,ue),e;case 1:if(!je(t))throw new Error(R("cannot coerce to buffer: %j",t));return e=h.bufferFrom(t.data),this._check(e,void 0,ue),e;default:return this._check(t,void 0,ue),h.bufferFrom(t)}},U.prototype.compare=g.compare,U.prototype.typeName="bytes",U.prototype.random=function(){return P.nextBuffer(P.nextInt(32))};function oe(t,i){if(a.call(this),!Array.isArray(t))throw new Error(R("non-array union schema: %j",t));if(!t.length)throw new Error("empty union");this.types=Object.freeze(t.map(function(e){return a.forSchema(e,i)})),this._branchIndices={},this.types.forEach(function(e,r){if(a.isType(e,"union"))throw new Error("unions cannot be directly nested");var n=e.branchName;if(this._branchIndices[n]!==void 0)throw new Error(R("duplicate union branch name: %j",n));this._branchIndices[n]=r},this)}_.inherits(oe,a),oe.prototype._branchConstructor=function(){throw new Error("unions cannot be directly wrapped")},oe.prototype._skip=function(t){this.types[t.readLong()]._skip(t)},oe.prototype._match=function(t,i){var e=t.readLong(),r=i.readLong();return e===r?this.types[e]._match(t,i):e1)throw new Error(R("ambiguous aliasing for %s.%s (%s)",i.name,$.name,J));if(J.length)L=J[0],B={resolver:$.type.createResolver(o[L].type,e),name:"_"+$.name},f[L]?f[L].push(B):f[L]=[B],s.push(B.name);else{if($.defaultValue()===void 0)throw new Error(R("no matching field for default-less %s.%s",i.name,$.name));s.push("undefined")}}var H=-1;for(y=n.length;y&&f[n[--y].name]===void 0;)H=y;var W=this._getConstructorName(),ie=[W],ae=[this.recordConstructor],ce=" return function read"+W+`(t, b) { +`);return e+="}",new Function(t.join(),e).apply(void 0,r)},c.prototype._update=function(t,i,e){if(!pe(this,i,!e.ignoreNamespaces))throw new Error(R("no alias found for %s",i.name));var r=this.fields,n=i.fields,o=h.toMap(n,function(we){return we.name}),s=[],f={},y,S,$,L,F,W,B;for(y=0;y1)throw new Error(R("ambiguous aliasing for %s.%s (%s)",i.name,$.name,W));if(W.length)L=W[0],B={resolver:$.type.createResolver(o[L].type,e),name:"_"+$.name},f[L]?f[L].push(B):f[L]=[B],s.push(B.name);else{if($.defaultValue()===void 0)throw new Error(R("no matching field for default-less %s.%s",i.name,$.name));s.push("undefined")}}var H=-1;for(y=n.length;y&&f[n[--y].name]===void 0;)H=y;var Y=this._getConstructorName(),ne=[Y],ae=[this.recordConstructor],ce=" return function read"+Y+`(t, b) { `;for(y=0;y=H?" ":" ",ie.push("r"+y),ae.push($.type),ce+="r"+y+`._skip(t); -`;else for(k=f[L].length;k--;)ce+=~H&&y>=H?" ":" ",ie.push("r"+y+"f"+k),B=f[L][k],ae.push(B.resolver),ce+="var "+B.name+" = ",ce+="r"+y+"f"+k+"._"+(k?"peek":"read")+`(t); +`),$=i.fields[y],L=$.name,f[L]===void 0)ce+=~H&&y>=H?" ":" ",ne.push("r"+y),ae.push($.type),ce+="r"+y+`._skip(t); +`;else for(S=f[L].length;S--;)ce+=~H&&y>=H?" ":" ",ne.push("r"+y+"f"+S),B=f[L][S],ae.push(B.resolver),ce+="var "+B.name+" = ",ce+="r"+y+"f"+S+"._"+(S?"peek":"read")+`(t); `;~H&&(ce+=` } -`),ce+=" return new "+W+"("+s.join()+`); -};`,t._read=new Function(ie.join(),ce).apply(void 0,ae)},u.prototype._match=function(t,i){var e=this.fields,r,n,o,s,f;for(r=0,n=e.length;r"};function ee(){this.str=void 0}function K(t,i,e,r){if(e){if(e._readerType!==t)throw new Error("invalid resolver");return e._read(i,r)}else return t._read(i)}function he(t){var i={};t.name&&(i[t.name]=!0);var e=t.aliases,r,n;for(r=0,n=e.length;r=-9007199254740990&&t<=9007199254740990}function je(t){return t&&t.type==="Buffer"&&Array.isArray(t.data)}function ue(t,i){throw new Error(R("invalid %j: %j",i.schema(),t))}function Se(t,i){var e=c.unqualify(t);return fe(e)?e:c.qualify(t,i)}function $e(t){var i=t.typeName;switch(i){case"double":case"float":case"int":case"long":return"number";case"bytes":case"fixed":return"buffer";case"enum":return"string";case"map":case"error":case"record":return"object";default:return i}}function ke(t){if(t===null)return"null";var i=typeof t;if(i==="object"){if(Array.isArray(t))return"array";if(g.isBuffer(t))return"buffer"}return i}function Ee(t){var i={},e,r,n,o;for(e=0,r=t.length;ee&&(e=f,r=s);return r}function ze(t,i){var e={},r,n,o,s;for(r=0,n=t.length;r0){var kt=de[0];de[0]=de[be],de[be]=kt,ce=a.forSchema(de,i)}}return{name:ae,type:ce,default:n[ae]}})}:ie={type:"map",values:a.forTypes(e,i)},a.forSchema(ie,i)}l.exports={Type:a,getTypeBucket:$e,getValueBucket:ke,isPrimitive:fe,builtins:function(){var t={LogicalType:p,UnwrappedUnionType:E,WrappedUnionType:S},i=Object.keys(C),e,r,n;for(e=0,r=i.length;eI.length&&(x.buf=d.newBuffer(2*u)),x.pos=0,this._writeValue(x,E)}N()},te.prototype._flush=function(E){var S=this._tap,N=S.pos;N&&this.push(S.buf.slice(0,N)),E()};function M(E,S){S=S||{},g.Duplex.call(this,{allowHalfOpen:!0,writableObjectMode:!0});var N;if(c.Type.isType(E)?(N=E,E=void 0):N=c.Type.forSchema(E),this._schema=E,this._type=N,this._writeValue=function(I,Z){try{this._type._write(I,Z)}catch(u){return this.emit("typeError",u,Z,this._type),!1}return!0},this._blockSize=S.blockSize||65536,this._tap=new w(d.newBuffer(this._blockSize)),this._codecs=S.codecs,this._codec=S.codec||"null",this._blockCount=0,this._syncMarker=S.syncMarker||new d.Lcg().nextBuffer(16),this._queue=new d.OrderedQueue,this._pending=0,this._finished=!1,this._needHeader=!1,this._needPush=!1,this._metadata=S.metadata||{},!P.isValid(this._metadata))throw new Error("invalid metadata");var x=this._codec;if(this._compress=(this._codecs||M.getDefaultCodecs())[x],!this._compress)throw new Error(a("unsupported codec: %s",x));switch(S.omitHeader!==void 0&&(S.writeHeader=S.omitHeader?"never":"auto"),S.writeHeader){case!1:case"never":break;case void 0:case"auto":this._needHeader=!0;break;default:this._writeHeader()}this.on("finish",function(){this._finished=!0,this._blockCount?this._flushChunk():this._finished&&this._needPush&&this.push(null)}),this.on("typeError",function(I){this.emit("error",I)})}O.inherits(M,g.Duplex),M.defaultCodecs=function(){return{null:function(E,S){S(null,E)},deflate:T.deflateRaw}},M.getDefaultCodecs=M.defaultCodecs,M.prototype._writeHeader=function(){var E=JSON.stringify(this._schema?this._schema:this._type.getSchema({exportAttrs:!0})),S=d.copyOwnProperties(this._metadata,{"avro.schema":d.bufferFrom(E),"avro.codec":d.bufferFrom(this._codec)},!0),N=Q.getRecordConstructor(),x=new N(m,S,this._syncMarker);this.push(x.toBuffer())},M.prototype._write=function(E,S,N){this._needHeader&&(this._writeHeader(),this._needHeader=!1);var x=this._tap,I=x.pos,Z=!1;if(this._writeValue(x,E)){if(!x.isValid()){I&&(this._flushChunk(I,N),Z=!0);var u=x.pos-I;u>this._blockSize&&(this._blockSize=u*2),x.buf=d.newBuffer(this._blockSize),x.pos=0,this._writeValue(x,E)}this._blockCount++}else x.pos=I;Z||N()},M.prototype._flushChunk=function(E,S){var N=this._tap;E=E||N.pos,this._compress(N.buf.slice(0,E),this._createBlockCallback(E,S)),this._blockCount=0},M.prototype._read=function(){var E=this,S=this._queue.pop();if(!S){this._finished&&!this._pending?process.nextTick(function(){E.push(null)}):this._needPush=!0;return}this.push(C.toBuffer(S.count,!0)),this.push(C.toBuffer(S.buf.length,!0)),this.push(S.buf),this.push(this._syncMarker),this._finished||S.cb()},M.prototype._createBlockCallback=function(E,S){var N=this,x=this._index++,I=this._blockCount;return this._pending++,function(Z,u){if(Z){var p=new Error(a("%s codec compression error",N._codec));p.cause=Z,N.emit("error",p);return}N._pending--,N.emit("block",new G(I,E,u.length)),N._queue.push(new D(x,u,S,I)),N._needPush&&(N._needPush=!1,N._read())}};function G(E,S,N){this.valueCount=E,this.rawDataLength=S,this.compressedDataLength=N}function D(E,S,N,x){this.index=E,this.buf=S,this.cb=N,this.count=x|0}function X(E){var S=E.pos,N=re._read(E);return E.isValid()?N:(E.pos=S,null)}function q(E,S,N){if(E)return function(I){return function(Z){var u=Z.pos;return I(Z),Z.buf.slice(u,Z.pos)}}(S._skip);if(N){var x=N.createResolver(S);return function(I){return x._read(I)}}else return function(I){return S._read(I)}}function ne(E,S,N){var x=d.newBuffer(N);return E.copy(x,0,S,S+N),x}l.exports={BLOCK_TYPE:re,HEADER_TYPE:Q,MAGIC_BYTES:m,streams:{BlockDecoder:U,BlockEncoder:M,RawDecoder:j,RawEncoder:te}}}}),jt=Ae({"node_modules/avsc/lib/services.js"(h,l){"use strict";var c=nt(),d=Ue(),_=qe,g=At,O=vt,T=De,v=_.Buffer,R=d.Tap,C=c.Type,P=T.debuglog("avsc:services"),Q=T.format,re={namespace:"org.apache.avro.ipc"},m=C.forSchema("boolean",re),a=C.forSchema({type:"map",values:"bytes"},re),w=C.forSchema("string",re),j=C.forSchema({name:"HandshakeRequest",type:"record",fields:[{name:"clientHash",type:{name:"MD5",type:"fixed",size:16}},{name:"clientProtocol",type:["null","string"],default:null},{name:"serverHash",type:"MD5"},{name:"meta",type:["null",a],default:null}]},re),U=C.forSchema({name:"HandshakeResponse",type:"record",fields:[{name:"match",type:{name:"HandshakeMatch",type:"enum",symbols:["BOTH","CLIENT","NONE"]}},{name:"serverProtocol",type:["null","string"],default:null},{name:"serverHash",type:["null","MD5"],default:null},{name:"meta",type:["null",a],default:null}]},re),te=16,M=new G("",C.forSchema({name:"PingRequest",type:"record",fields:[]},re),C.forSchema(["string"],re),C.forSchema("null",re));function G(e,r,n,o,s,f){if(this.name=e,!C.isType(r,"record"))throw new Error("invalid request type");if(this.requestType=r,!C.isType(n,"union")||!C.isType(n.getTypes()[0],"string"))throw new Error("invalid error type");if(this.errorType=n,s&&(!C.isType(o,"null")||n.getTypes().length>1))throw new Error("inapplicable one-way parameter");this.responseType=o,this.oneWay=!!s,this.doc=f!==void 0?""+f:void 0,Object.freeze(this)}G.forSchema=function(e,r,n){if(n=n||{},!d.isValidName(e))throw new Error(Q("invalid message name: %s",e));if(!Array.isArray(r.request))throw new Error(Q("invalid message request: %s",e));var o=Q("%s.%sRequest",re.namespace,d.capitalize(e)),s=C.forSchema({name:o,type:"record",namespace:n.namespace||"",fields:r.request},n);if(delete n.registry[o],!r.response)throw new Error(Q("invalid message response: %s",e));var f=C.forSchema(r.response,n);if(r.errors!==void 0&&!Array.isArray(r.errors))throw new Error(Q("invalid message errors: %s",e));var y=C.forSchema(["string"].concat(r.errors||[]),n),k=!!r["one-way"];return new G(e,s,y,f,k,r.doc)},G.prototype.schema=C.prototype.getSchema,G.prototype._attrs=function(e){var r=this.requestType._attrs(e),n={request:r.fields,response:this.responseType._attrs(e)},o=this.doc;o!==void 0&&(n.doc=o);var s=this.errorType._attrs(e);return s.length>1&&(n.errors=s.slice(1)),this.oneWay&&(n["one-way"]=!0),n},d.addDeprecatedGetters(G,["name","errorType","requestType","responseType"]),G.prototype.isOneWay=T.deprecate(function(){return this.oneWay},"use `.oneWay` directly instead of `.isOneWay()`");function D(e,r,n,o,s){if(typeof e!="string")return D.forProtocol(e,r);this.name=e,this._messagesByName=r||{},this.messages=Object.freeze(d.objectValues(this._messagesByName)),this._typesByName=n||{},this.types=Object.freeze(d.objectValues(this._typesByName)),this.protocol=o,this._hashStr=d.getHash(JSON.stringify(o)).toString("binary"),this.doc=o.doc?""+o.doc:void 0,this._server=s||this.createServer({silent:!0}),Object.freeze(this)}D.Client=q,D.Server=ne,D.compatible=function(e,r){try{Ie(e,r)}catch{return!1}return!0},D.forProtocol=function(e,r){r=r||{};var n=e.protocol;if(!n)throw new Error("missing protocol name");if(e.namespace!==void 0)r.namespace=e.namespace;else{var o=/^(.*)\.[^.]+$/.exec(n);o&&(r.namespace=o[1])}n=d.qualify(n,r.namespace),e.types&&e.types.forEach(function(f){C.forSchema(f,r)});var s;return e.messages&&(s={},Object.keys(e.messages).forEach(function(f){s[f]=G.forSchema(f,e.messages[f],r)})),new D(n,s,r.registry,e)},D.isService=function(e){return!!e&&e.hasOwnProperty("_hashStr")},D.prototype.createClient=function(e){var r=new q(this,e);return process.nextTick(function(){if(e&&e.server){var n={objectMode:!0},o=[new O.PassThrough(n),new O.PassThrough(n)];e.server.createChannel({readable:o[0],writable:o[1]},n),r.createChannel({readable:o[1],writable:o[0]},n)}else e&&e.transport&&r.createChannel(e.transport)}),r},D.prototype.createServer=function(e){return new ne(this,e)},Object.defineProperty(D.prototype,"hash",{enumerable:!0,get:function(){return d.bufferFrom(this._hashStr,"binary")}}),D.prototype.message=function(e){return this._messagesByName[e]},D.prototype.type=function(e){return this._typesByName[e]},D.prototype.inspect=function(){return Q("",this.name)},d.addDeprecatedGetters(D,["message","messages","name","type","types"]),D.prototype.createEmitter=T.deprecate(function(e,r){r=r||{};var n=this.createClient({cache:r.cache,buffering:!1,strictTypes:r.strictErrors,timeout:r.timeout}),o=n.createChannel(e,r);return $e(n,o),o},"use `.createClient()` instead of `.createEmitter()`"),D.prototype.createListener=T.deprecate(function(e,r){if(r&&r.strictErrors)throw new Error("use `.createServer()` to support strict errors");return this._server.createChannel(e,r)},"use `.createServer().createChannel()` instead of `.createListener()`"),D.prototype.emit=T.deprecate(function(e,r,n,o){if(!n||!this.equals(n.client._svc$))throw new Error("invalid emitter");var s=n.client;return q.prototype.emitMessage.call(s,e,r,o&&o.bind(this)),n.getPending()},"create a client via `.createClient()` to emit messages instead of `.emit()`"),D.prototype.equals=T.deprecate(function(e){return D.isService(e)&&this.getFingerprint().equals(e.getFingerprint())},"equality testing is deprecated, compare the `.protocol`s instead"),D.prototype.getFingerprint=T.deprecate(function(e){return d.getHash(JSON.stringify(this.protocol),e)},"use `.hash` instead of `.getFingerprint()`"),D.prototype.getSchema=T.deprecate(C.prototype.getSchema,"use `.protocol` instead of `.getSchema()`"),D.prototype.on=T.deprecate(function(e,r){var n=this;return this._server.onMessage(e,function(o,s){return r.call(n,o,this.channel,s)}),this},"use `.createServer().onMessage()` instead of `.on()`"),D.prototype.subprotocol=T.deprecate(function(){var e=this._server,r={strictTypes:e._strict,cache:e._cache},n=new ne(e.service,r);return n._handlers=Object.create(e._handlers),new D(this.name,this._messagesByName,this._typesByName,this.protocol,n)},"`.subprotocol()` will be removed in 5.1"),D.prototype._attrs=function(e){var r={protocol:this.name},n=[];this.types.forEach(function(s){if(s.getName()!==void 0){var f=s._attrs(e);typeof f!="string"&&n.push(f)}}),n.length&&(r.types=n);var o=Object.keys(this._messagesByName);return o.length&&(r.messages={},o.forEach(function(s){r.messages[s]=this._messagesByName[s]._attrs(e)},this)),e&&e.exportAttrs&&this.doc!==void 0&&(r.doc=this.doc),r};function X(e,r,n){n===void 0&&typeof r=="function"&&(n=r,r=void 0);var o=new D({protocol:"Empty"},re),s;o.createClient({timeout:r&&r.timeout}).createChannel(e,{scope:r&&r.scope,endWritable:typeof e=="function"}).once("handshake",function(f,y){s=y.serverProtocol,this.destroy(!0)}).once("eot",function(f,y){y&&!/interrupted/.test(y)?n(y):n(null,JSON.parse(s))})}function q(e,r){r=r||{},g.EventEmitter.call(this),this._svc$=e,this._channels$=[],this._fns$=[],this._buffering$=!!r.buffering,this._cache$=r.cache||{},this._policy$=r.channelPolicy,this._strict$=!!r.strictTypes,this._timeout$=d.getOption(r,"timeout",1e4),r.remoteProtocols&&je(this._cache$,r.remoteProtocols,e,!0),this._svc$.messages.forEach(function(n){this[n.name]=this._createMessageHandler$(n)},this)}T.inherits(q,g.EventEmitter),q.prototype.activeChannels=function(){return this._channels$.slice()},q.prototype.createChannel=function(e,r){var n=r&&r.objectMode,o;if(typeof e=="function"){var s;n?s=e:s=function(F){var J=new K,B=e(function(H,W){if(H){F(H);return}var ie=new ee().once("error",function(ae){o.destroy(ae)});F(null,W.pipe(ie))});if(B)return J.pipe(B),J},o=new S(this,s,r)}else{var f,y;if(Ke(e)?f=y=e:(f=e.readable,y=e.writable),!n){var k=new he;f=f.pipe(k);var $=new pe;$.pipe(y),y=$}o=new N(this,f,y,r),n||(o.once("eot",function(){f.unpipe(k),$.unpipe(y)}),k.once("error",function(F){o.destroy(F)}))}var L=this._channels$;return L.push(o),o.once("_drain",function(){L.splice(L.indexOf(this),1)}),this._buffering$=!1,this.emit("channel",o),o},q.prototype.destroyChannels=function(e){this._channels$.forEach(function(r){r.destroy(e&&e.noWait)})},q.prototype.emitMessage=function(e,r,n,o){var s=t(this._svc$,e),f=new u(s,{},r);this._emitMessage$(f,n,o)},q.prototype.remoteProtocols=function(){return ue(this._cache$,!0)},Object.defineProperty(q.prototype,"service",{enumerable:!0,get:function(){return this._svc$}}),q.prototype.use=function(){var e,r,n;for(e=0,r=arguments.length;e"};function ee(){this.str=void 0}function J(t,i,e,r){if(e){if(e._readerType!==t)throw new Error("invalid resolver");return e._read(i,r)}else return t._read(i)}function he(t){var i={};t.name&&(i[t.name]=!0);var e=t.aliases,r,n;for(r=0,n=e.length;r=-9007199254740990&&t<=9007199254740990}function je(t){return t&&t.type==="Buffer"&&Array.isArray(t.data)}function ue(t,i){throw new Error(R("invalid %j: %j",i.schema(),t))}function ke(t,i){var e=h.unqualify(t);return fe(e)?e:h.qualify(t,i)}function Ce(t){var i=t.typeName;switch(i){case"double":case"float":case"int":case"long":return"number";case"bytes":case"fixed":return"buffer";case"enum":return"string";case"map":case"error":case"record":return"object";default:return i}}function Se(t){if(t===null)return"null";var i=typeof t;if(i==="object"){if(Array.isArray(t))return"array";if(g.isBuffer(t))return"buffer"}return i}function Te(t){var i={},e,r,n,o;for(e=0,r=t.length;ee&&(e=f,r=s);return r}function Ge(t,i){var e={},r,n,o,s;for(r=0,n=t.length;r0){var St=ye[0];ye[0]=ye[be],ye[be]=St,ce=a.forSchema(ye,i)}}return{name:ae,type:ce,default:n[ae]}})}:ne={type:"map",values:a.forTypes(e,i)},a.forSchema(ne,i)}l.exports={Type:a,getTypeBucket:Ce,getValueBucket:Se,isPrimitive:fe,builtins:function(){var t={LogicalType:p,UnwrappedUnionType:E,WrappedUnionType:k},i=Object.keys(C),e,r,n;for(e=0,r=i.length;eI.length&&(x.buf=d.newBuffer(2*c)),x.pos=0,this._writeValue(x,E)}N()},te.prototype._flush=function(E){var k=this._tap,N=k.pos;N&&this.push(k.buf.slice(0,N)),E()};function M(E,k){k=k||{},g.Duplex.call(this,{allowHalfOpen:!0,writableObjectMode:!0});var N;if(h.Type.isType(E)?(N=E,E=void 0):N=h.Type.forSchema(E),this._schema=E,this._type=N,this._writeValue=function(I,Z){try{this._type._write(I,Z)}catch(c){return this.emit("typeError",c,Z,this._type),!1}return!0},this._blockSize=k.blockSize||65536,this._tap=new w(d.newBuffer(this._blockSize)),this._codecs=k.codecs,this._codec=k.codec||"null",this._blockCount=0,this._syncMarker=k.syncMarker||new d.Lcg().nextBuffer(16),this._queue=new d.OrderedQueue,this._pending=0,this._finished=!1,this._needHeader=!1,this._needPush=!1,this._metadata=k.metadata||{},!P.isValid(this._metadata))throw new Error("invalid metadata");var x=this._codec;if(this._compress=(this._codecs||M.getDefaultCodecs())[x],!this._compress)throw new Error(a("unsupported codec: %s",x));switch(k.omitHeader!==void 0&&(k.writeHeader=k.omitHeader?"never":"auto"),k.writeHeader){case!1:case"never":break;case void 0:case"auto":this._needHeader=!0;break;default:this._writeHeader()}this.on("finish",function(){this._finished=!0,this._blockCount?this._flushChunk():this._finished&&this._needPush&&this.push(null)}),this.on("typeError",function(I){this.emit("error",I)})}O.inherits(M,g.Duplex),M.defaultCodecs=function(){return{null:function(E,k){k(null,E)},deflate:T.deflateRaw}},M.getDefaultCodecs=M.defaultCodecs,M.prototype._writeHeader=function(){var E=JSON.stringify(this._schema?this._schema:this._type.getSchema({exportAttrs:!0})),k=d.copyOwnProperties(this._metadata,{"avro.schema":d.bufferFrom(E),"avro.codec":d.bufferFrom(this._codec)},!0),N=Q.getRecordConstructor(),x=new N(m,k,this._syncMarker);this.push(x.toBuffer())},M.prototype._write=function(E,k,N){this._needHeader&&(this._writeHeader(),this._needHeader=!1);var x=this._tap,I=x.pos,Z=!1;if(this._writeValue(x,E)){if(!x.isValid()){I&&(this._flushChunk(I,N),Z=!0);var c=x.pos-I;c>this._blockSize&&(this._blockSize=c*2),x.buf=d.newBuffer(this._blockSize),x.pos=0,this._writeValue(x,E)}this._blockCount++}else x.pos=I;Z||N()},M.prototype._flushChunk=function(E,k){var N=this._tap;E=E||N.pos,this._compress(N.buf.slice(0,E),this._createBlockCallback(E,k)),this._blockCount=0},M.prototype._read=function(){var E=this,k=this._queue.pop();if(!k){this._finished&&!this._pending?process.nextTick(function(){E.push(null)}):this._needPush=!0;return}this.push(C.toBuffer(k.count,!0)),this.push(C.toBuffer(k.buf.length,!0)),this.push(k.buf),this.push(this._syncMarker),this._finished||k.cb()},M.prototype._createBlockCallback=function(E,k){var N=this,x=this._index++,I=this._blockCount;return this._pending++,function(Z,c){if(Z){var p=new Error(a("%s codec compression error",N._codec));p.cause=Z,N.emit("error",p);return}N._pending--,N.emit("block",new G(I,E,c.length)),N._queue.push(new D(x,c,k,I)),N._needPush&&(N._needPush=!1,N._read())}};function G(E,k,N){this.valueCount=E,this.rawDataLength=k,this.compressedDataLength=N}function D(E,k,N,x){this.index=E,this.buf=k,this.cb=N,this.count=x|0}function X(E){var k=E.pos,N=re._read(E);return E.isValid()?N:(E.pos=k,null)}function U(E,k,N){if(E)return function(I){return function(Z){var c=Z.pos;return I(Z),Z.buf.slice(c,Z.pos)}}(k._skip);if(N){var x=N.createResolver(k);return function(I){return x._read(I)}}else return function(I){return k._read(I)}}function oe(E,k,N){var x=d.newBuffer(N);return E.copy(x,0,k,k+N),x}l.exports={BLOCK_TYPE:re,HEADER_TYPE:Q,MAGIC_BYTES:m,streams:{BlockDecoder:z,BlockEncoder:M,RawDecoder:j,RawEncoder:te}}}}),jt=Ie({"node_modules/avsc/lib/services.js"(u,l){"use strict";var h=ot(),d=ze(),_=Ue,g=At,O=vt,T=De,v=_.Buffer,R=d.Tap,C=h.Type,P=T.debuglog("avsc:services"),Q=T.format,re={namespace:"org.apache.avro.ipc"},m=C.forSchema("boolean",re),a=C.forSchema({type:"map",values:"bytes"},re),w=C.forSchema("string",re),j=C.forSchema({name:"HandshakeRequest",type:"record",fields:[{name:"clientHash",type:{name:"MD5",type:"fixed",size:16}},{name:"clientProtocol",type:["null","string"],default:null},{name:"serverHash",type:"MD5"},{name:"meta",type:["null",a],default:null}]},re),z=C.forSchema({name:"HandshakeResponse",type:"record",fields:[{name:"match",type:{name:"HandshakeMatch",type:"enum",symbols:["BOTH","CLIENT","NONE"]}},{name:"serverProtocol",type:["null","string"],default:null},{name:"serverHash",type:["null","MD5"],default:null},{name:"meta",type:["null",a],default:null}]},re),te=16,M=new G("",C.forSchema({name:"PingRequest",type:"record",fields:[]},re),C.forSchema(["string"],re),C.forSchema("null",re));function G(e,r,n,o,s,f){if(this.name=e,!C.isType(r,"record"))throw new Error("invalid request type");if(this.requestType=r,!C.isType(n,"union")||!C.isType(n.getTypes()[0],"string"))throw new Error("invalid error type");if(this.errorType=n,s&&(!C.isType(o,"null")||n.getTypes().length>1))throw new Error("inapplicable one-way parameter");this.responseType=o,this.oneWay=!!s,this.doc=f!==void 0?""+f:void 0,Object.freeze(this)}G.forSchema=function(e,r,n){if(n=n||{},!d.isValidName(e))throw new Error(Q("invalid message name: %s",e));if(!Array.isArray(r.request))throw new Error(Q("invalid message request: %s",e));var o=Q("%s.%sRequest",re.namespace,d.capitalize(e)),s=C.forSchema({name:o,type:"record",namespace:n.namespace||"",fields:r.request},n);if(delete n.registry[o],!r.response)throw new Error(Q("invalid message response: %s",e));var f=C.forSchema(r.response,n);if(r.errors!==void 0&&!Array.isArray(r.errors))throw new Error(Q("invalid message errors: %s",e));var y=C.forSchema(["string"].concat(r.errors||[]),n),S=!!r["one-way"];return new G(e,s,y,f,S,r.doc)},G.prototype.schema=C.prototype.getSchema,G.prototype._attrs=function(e){var r=this.requestType._attrs(e),n={request:r.fields,response:this.responseType._attrs(e)},o=this.doc;o!==void 0&&(n.doc=o);var s=this.errorType._attrs(e);return s.length>1&&(n.errors=s.slice(1)),this.oneWay&&(n["one-way"]=!0),n},d.addDeprecatedGetters(G,["name","errorType","requestType","responseType"]),G.prototype.isOneWay=T.deprecate(function(){return this.oneWay},"use `.oneWay` directly instead of `.isOneWay()`");function D(e,r,n,o,s){if(typeof e!="string")return D.forProtocol(e,r);this.name=e,this._messagesByName=r||{},this.messages=Object.freeze(d.objectValues(this._messagesByName)),this._typesByName=n||{},this.types=Object.freeze(d.objectValues(this._typesByName)),this.protocol=o,this._hashStr=d.getHash(JSON.stringify(o)).toString("binary"),this.doc=o.doc?""+o.doc:void 0,this._server=s||this.createServer({silent:!0}),Object.freeze(this)}D.Client=U,D.Server=oe,D.compatible=function(e,r){try{$e(e,r)}catch{return!1}return!0},D.forProtocol=function(e,r){r=r||{};var n=e.protocol;if(!n)throw new Error("missing protocol name");if(e.namespace!==void 0)r.namespace=e.namespace;else{var o=/^(.*)\.[^.]+$/.exec(n);o&&(r.namespace=o[1])}n=d.qualify(n,r.namespace),e.types&&e.types.forEach(function(f){C.forSchema(f,r)});var s;return e.messages&&(s={},Object.keys(e.messages).forEach(function(f){s[f]=G.forSchema(f,e.messages[f],r)})),new D(n,s,r.registry,e)},D.isService=function(e){return!!e&&e.hasOwnProperty("_hashStr")},D.prototype.createClient=function(e){var r=new U(this,e);return process.nextTick(function(){if(e&&e.server){var n={objectMode:!0},o=[new O.PassThrough(n),new O.PassThrough(n)];e.server.createChannel({readable:o[0],writable:o[1]},n),r.createChannel({readable:o[1],writable:o[0]},n)}else e&&e.transport&&r.createChannel(e.transport)}),r},D.prototype.createServer=function(e){return new oe(this,e)},Object.defineProperty(D.prototype,"hash",{enumerable:!0,get:function(){return d.bufferFrom(this._hashStr,"binary")}}),D.prototype.message=function(e){return this._messagesByName[e]},D.prototype.type=function(e){return this._typesByName[e]},D.prototype.inspect=function(){return Q("",this.name)},d.addDeprecatedGetters(D,["message","messages","name","type","types"]),D.prototype.createEmitter=T.deprecate(function(e,r){r=r||{};var n=this.createClient({cache:r.cache,buffering:!1,strictTypes:r.strictErrors,timeout:r.timeout}),o=n.createChannel(e,r);return Ce(n,o),o},"use `.createClient()` instead of `.createEmitter()`"),D.prototype.createListener=T.deprecate(function(e,r){if(r&&r.strictErrors)throw new Error("use `.createServer()` to support strict errors");return this._server.createChannel(e,r)},"use `.createServer().createChannel()` instead of `.createListener()`"),D.prototype.emit=T.deprecate(function(e,r,n,o){if(!n||!this.equals(n.client._svc$))throw new Error("invalid emitter");var s=n.client;return U.prototype.emitMessage.call(s,e,r,o&&o.bind(this)),n.getPending()},"create a client via `.createClient()` to emit messages instead of `.emit()`"),D.prototype.equals=T.deprecate(function(e){return D.isService(e)&&this.getFingerprint().equals(e.getFingerprint())},"equality testing is deprecated, compare the `.protocol`s instead"),D.prototype.getFingerprint=T.deprecate(function(e){return d.getHash(JSON.stringify(this.protocol),e)},"use `.hash` instead of `.getFingerprint()`"),D.prototype.getSchema=T.deprecate(C.prototype.getSchema,"use `.protocol` instead of `.getSchema()`"),D.prototype.on=T.deprecate(function(e,r){var n=this;return this._server.onMessage(e,function(o,s){return r.call(n,o,this.channel,s)}),this},"use `.createServer().onMessage()` instead of `.on()`"),D.prototype.subprotocol=T.deprecate(function(){var e=this._server,r={strictTypes:e._strict,cache:e._cache},n=new oe(e.service,r);return n._handlers=Object.create(e._handlers),new D(this.name,this._messagesByName,this._typesByName,this.protocol,n)},"`.subprotocol()` will be removed in 5.1"),D.prototype._attrs=function(e){var r={protocol:this.name},n=[];this.types.forEach(function(s){if(s.getName()!==void 0){var f=s._attrs(e);typeof f!="string"&&n.push(f)}}),n.length&&(r.types=n);var o=Object.keys(this._messagesByName);return o.length&&(r.messages={},o.forEach(function(s){r.messages[s]=this._messagesByName[s]._attrs(e)},this)),e&&e.exportAttrs&&this.doc!==void 0&&(r.doc=this.doc),r};function X(e,r,n){n===void 0&&typeof r=="function"&&(n=r,r=void 0);var o=new D({protocol:"Empty"},re),s;o.createClient({timeout:r&&r.timeout}).createChannel(e,{scope:r&&r.scope,endWritable:typeof e=="function"}).once("handshake",function(f,y){s=y.serverProtocol,this.destroy(!0)}).once("eot",function(f,y){y&&!/interrupted/.test(y)?n(y):n(null,JSON.parse(s))})}function U(e,r){r=r||{},g.EventEmitter.call(this),this._svc$=e,this._channels$=[],this._fns$=[],this._buffering$=!!r.buffering,this._cache$=r.cache||{},this._policy$=r.channelPolicy,this._strict$=!!r.strictTypes,this._timeout$=d.getOption(r,"timeout",1e4),r.remoteProtocols&&je(this._cache$,r.remoteProtocols,e,!0),this._svc$.messages.forEach(function(n){this[n.name]=this._createMessageHandler$(n)},this)}T.inherits(U,g.EventEmitter),U.prototype.activeChannels=function(){return this._channels$.slice()},U.prototype.createChannel=function(e,r){var n=r&&r.objectMode,o;if(typeof e=="function"){var s;n?s=e:s=function(F){var W=new J,B=e(function(H,Y){if(H){F(H);return}var ne=new ee().once("error",function(ae){o.destroy(ae)});F(null,Y.pipe(ne))});if(B)return W.pipe(B),W},o=new k(this,s,r)}else{var f,y;if(Je(e)?f=y=e:(f=e.readable,y=e.writable),!n){var S=new he;f=f.pipe(S);var $=new pe;$.pipe(y),y=$}o=new N(this,f,y,r),n||(o.once("eot",function(){f.unpipe(S),$.unpipe(y)}),S.once("error",function(F){o.destroy(F)}))}var L=this._channels$;return L.push(o),o.once("_drain",function(){L.splice(L.indexOf(this),1)}),this._buffering$=!1,this.emit("channel",o),o},U.prototype.destroyChannels=function(e){this._channels$.forEach(function(r){r.destroy(e&&e.noWait)})},U.prototype.emitMessage=function(e,r,n,o){var s=t(this._svc$,e),f=new c(s,{},r);this._emitMessage$(f,n,o)},U.prototype.remoteProtocols=function(){return ue(this._cache$,!0)},Object.defineProperty(U.prototype,"service",{enumerable:!0,get:function(){return this._svc$}}),U.prototype.use=function(){var e,r,n;for(e=0,r=arguments.length;e>>(r|0),this._id=0,this._n=0,this._cbs={}}A.prototype.get=function(e){return this._cbs[e&this._mask]},A.prototype.add=function(e,r){this._id=this._id+1&this._mask;var n=this,o=this._id,s;return e>0&&(s=setTimeout(function(){f(new Error("timeout"))},e)),this._cbs[o]=f,this._n++,o;function f(){n._cbs[o]&&(delete n._cbs[o],n._n--,s&&clearTimeout(s),r.apply(n._ctx,arguments))}},A.prototype.clear=function(){Object.keys(this._cbs).forEach(function(e){this._cbs[e](new Error("interrupted"))},this)};function V(e,r,n,o){this._clientSvc=e,this._serverSvc=r,this._hash=n,this._isRemote=!!o,this._readers=Ie(e,r)}V.prototype._decodeRequest=function(e){var r=new R(e),n=a._read(r),o=w._read(r),s,f;if(o?(s=this._serverSvc.message(o),f=this._readers[o+"?"]._read(r)):s=M,!r.isValid())throw new Error(Q("truncated %s request",o||"ping$"));return new u(s,n,f)},V.prototype._decodeResponse=function(e,r,n){var o=new R(e);d.copyOwnProperties(a._read(o),r.headers,!0);var s=m._read(o),f=n.name;if(f){var y=this._readers[f+(s?"*":"!")];if(n=this._clientSvc.message(f),s?r.error=y._read(o):r.response=y._read(o),!o.isValid())throw new Error(Q("truncated %s response",f))}else n=M};function ee(){O.Transform.call(this,{readableObjectMode:!0}),this._id=void 0,this._buf=d.newBuffer(0),this._bufs=[],this.on("finish",function(){this.push(null)})}T.inherits(ee,O.Transform),ee.prototype._transform=function(e,r,n){e=v.concat([this._buf,e]);for(var o;e.length>=4&&e.length>=(o=e.readInt32BE(0))+4;){if(o)this._bufs.push(e.slice(4,o+4));else{var s=this._bufs;this._bufs=[],this.push({id:null,payload:s})}e=e.slice(o+4)}this._buf=e,n()},ee.prototype._flush=function(e){if(this._buf.length||this._bufs.length){var r=this._bufs.slice();r.unshift(this._buf);var n=Ee("TRAILING_DATA");n.trailingData=v.concat(r).toString(),this.emit("error",n)}e()};function K(){O.Transform.call(this,{writableObjectMode:!0}),this.on("finish",function(){this.push(null)})}T.inherits(K,O.Transform),K.prototype._transform=function(e,r,n){var o=e.payload,s,f,y;for(s=0,f=o.length;s=4&&e.length>=(o=e.readInt32BE(0))+4;)this._frameCount--,this._bufs.push(e.slice(4,o+4)),e=e.slice(o+4);if(this._frameCount){this._buf=e,n();return}else{var s={id:this._id,payload:this._bufs};this._bufs=[],this._id=void 0,this.push(s)}}},he.prototype._flush=ee.prototype._flush;function pe(){O.Transform.call(this,{writableObjectMode:!0}),this.on("finish",function(){this.push(null)})}T.inherits(pe,O.Transform),pe.prototype._transform=function(e,r,n){var o=e.payload,s=o.length,f;f=d.newBuffer(8),f.writeInt32BE(e.id,0),f.writeInt32BE(s,4),this.push(f);var y;for(y=0;y>32-te===0}function Ke(e){return!!(e&&e.pipe)}function t(e,r){var n=e.message(r);if(!n)throw new Error(Q("unknown message: %s",r));return n}function i(e){var r=[e.wreq,e.wres],n=[],o;s(0);function s(y){var k=!1;y1)throw new Error("union annotations are not supported");return this._readUnion();default:var w=this._typeRefs[m.type];return w&&(delete m.type,d.copyOwnProperties(w,m)),Object.keys(m).length>1?m:m.type}},C.prototype._readFixed=function(m){var a=this._tk;return a.next({val:"(",silent:!0})||(m.name=a.next({id:"name"}).val,a.next({val:"("})),m.size=parseInt(a.next({id:"number"}).val),a.next({val:")"}),m},C.prototype._readMap=function(m){var a=this._tk,w=this._implicitTags,j=a.next({val:"<",silent:w})===void 0;return m.values=this._readType(),a.next({val:">",silent:j}),m},C.prototype._readArray=function(m){var a=this._tk,w=this._implicitTags,j=a.next({val:"<",silent:w})===void 0;return m.items=this._readType(),a.next({val:">",silent:j}),m},C.prototype._readEnum=function(m,a){var w=this._tk;w.next({val:"{",silent:!0})||(m.name=w.next({id:"name"}).val,w.next({val:"{"})),m.symbols=[];do m.symbols.push(w.next().val);while(!w.next({val:"}",silent:!0})&&w.next({val:","}));return a&&w.next({val:"=",silent:!0})&&(m.default=w.next().val,w.next({val:";"})),m},C.prototype._readUnion=function(){var m=this._tk,a=[];m.next({val:"{"});do a.push(this._readType());while(!m.next({val:"}",silent:!0})&&m.next({val:","}));return a},C.prototype._readRecord=function(m){var a=this._tk;for(a.next({val:"{",silent:!0})||(m.name=a.next({id:"name"}).val,a.next({val:"{"})),m.fields=[];!a.next({val:"}",silent:!0});)m.fields.push(this._readField()),a.next({val:";"});return m},C.prototype._readImports=function(m,a){for(var w=this._tk,j=0,U=w.pos;w.next({val:"import",silent:!0});){if(!j&&a&&w.next({val:"(",silent:!0})){w.pos=U;return}var te=w.next({id:"name"}).val,M=JSON.parse(w.next({id:"string"}).val);w.next({val:";"}),m.push({kind:te,name:M}),j++}return j};function P(m){this._str=m,this.pos=0}P.prototype.next=function(m){var a={pos:this.pos,id:void 0,val:void 0},w=this._skip(m&&m.emitJavadoc);if(typeof w=="string")a.id="javadoc",a.val=w;else{var j=this.pos,U=this._str,te=U.charAt(j);if(!te)a.id="(eof)";else if(m&&m.id==="json"?(a.id="json",this.pos=this._endOfJson()):te==='"'?(a.id="string",this.pos=this._endOfString()):/[0-9]/.test(te)?(a.id="number",this.pos=this._endOf(/[0-9]/)):/[`A-Za-z_.]/.test(te)?(a.id="name",this.pos=this._endOf(/[`A-Za-z0-9_.]/)):(a.id="operator",this.pos=j+1),a.val=U.slice(j,this.pos),a.id==="json")try{a.val=JSON.parse(a.val)}catch{throw this.error("invalid JSON",a)}else a.id==="name"&&(a.val=a.val.replace(/`/g,""))}var M;if(m&&m.id&&m.id!==a.id?M=this.error(O("expected ID %s",m.id),a):m&&m.val&&m.val!==a.val&&(M=this.error(O("expected value %s",m.val),a)),M)if(m&&m.silent){this.pos=a.pos;return}else throw M;else return a},P.prototype.error=function(m,a){var w=typeof a!="number",j=w?a.pos:a,U=this._str,te=1,M=0,G;for(G=0;G>>(r|0),this._id=0,this._n=0,this._cbs={}}A.prototype.get=function(e){return this._cbs[e&this._mask]},A.prototype.add=function(e,r){this._id=this._id+1&this._mask;var n=this,o=this._id,s;return e>0&&(s=setTimeout(function(){f(new Error("timeout"))},e)),this._cbs[o]=f,this._n++,o;function f(){n._cbs[o]&&(delete n._cbs[o],n._n--,s&&clearTimeout(s),r.apply(n._ctx,arguments))}},A.prototype.clear=function(){Object.keys(this._cbs).forEach(function(e){this._cbs[e](new Error("interrupted"))},this)};function V(e,r,n,o){this._clientSvc=e,this._serverSvc=r,this._hash=n,this._isRemote=!!o,this._readers=$e(e,r)}V.prototype._decodeRequest=function(e){var r=new R(e),n=a._read(r),o=w._read(r),s,f;if(o?(s=this._serverSvc.message(o),f=this._readers[o+"?"]._read(r)):s=M,!r.isValid())throw new Error(Q("truncated %s request",o||"ping$"));return new c(s,n,f)},V.prototype._decodeResponse=function(e,r,n){var o=new R(e);d.copyOwnProperties(a._read(o),r.headers,!0);var s=m._read(o),f=n.name;if(f){var y=this._readers[f+(s?"*":"!")];if(n=this._clientSvc.message(f),s?r.error=y._read(o):r.response=y._read(o),!o.isValid())throw new Error(Q("truncated %s response",f))}else n=M};function ee(){O.Transform.call(this,{readableObjectMode:!0}),this._id=void 0,this._buf=d.newBuffer(0),this._bufs=[],this.on("finish",function(){this.push(null)})}T.inherits(ee,O.Transform),ee.prototype._transform=function(e,r,n){e=v.concat([this._buf,e]);for(var o;e.length>=4&&e.length>=(o=e.readInt32BE(0))+4;){if(o)this._bufs.push(e.slice(4,o+4));else{var s=this._bufs;this._bufs=[],this.push({id:null,payload:s})}e=e.slice(o+4)}this._buf=e,n()},ee.prototype._flush=function(e){if(this._buf.length||this._bufs.length){var r=this._bufs.slice();r.unshift(this._buf);var n=Te("TRAILING_DATA");n.trailingData=v.concat(r).toString(),this.emit("error",n)}e()};function J(){O.Transform.call(this,{writableObjectMode:!0}),this.on("finish",function(){this.push(null)})}T.inherits(J,O.Transform),J.prototype._transform=function(e,r,n){var o=e.payload,s,f,y;for(s=0,f=o.length;s=4&&e.length>=(o=e.readInt32BE(0))+4;)this._frameCount--,this._bufs.push(e.slice(4,o+4)),e=e.slice(o+4);if(this._frameCount){this._buf=e,n();return}else{var s={id:this._id,payload:this._bufs};this._bufs=[],this._id=void 0,this.push(s)}}},he.prototype._flush=ee.prototype._flush;function pe(){O.Transform.call(this,{writableObjectMode:!0}),this.on("finish",function(){this.push(null)})}T.inherits(pe,O.Transform),pe.prototype._transform=function(e,r,n){var o=e.payload,s=o.length,f;f=d.newBuffer(8),f.writeInt32BE(e.id,0),f.writeInt32BE(s,4),this.push(f);var y;for(y=0;y>32-te===0}function Je(e){return!!(e&&e.pipe)}function t(e,r){var n=e.message(r);if(!n)throw new Error(Q("unknown message: %s",r));return n}function i(e){var r=[e.wreq,e.wres],n=[],o;s(0);function s(y){var S=!1;y1)throw new Error("union annotations are not supported");return this._readUnion();default:var w=this._typeRefs[m.type];return w&&(delete m.type,d.copyOwnProperties(w,m)),Object.keys(m).length>1?m:m.type}},C.prototype._readFixed=function(m){var a=this._tk;return a.next({val:"(",silent:!0})||(m.name=a.next({id:"name"}).val,a.next({val:"("})),m.size=parseInt(a.next({id:"number"}).val),a.next({val:")"}),m},C.prototype._readMap=function(m){var a=this._tk,w=this._implicitTags,j=a.next({val:"<",silent:w})===void 0;return m.values=this._readType(),a.next({val:">",silent:j}),m},C.prototype._readArray=function(m){var a=this._tk,w=this._implicitTags,j=a.next({val:"<",silent:w})===void 0;return m.items=this._readType(),a.next({val:">",silent:j}),m},C.prototype._readEnum=function(m,a){var w=this._tk;w.next({val:"{",silent:!0})||(m.name=w.next({id:"name"}).val,w.next({val:"{"})),m.symbols=[];do m.symbols.push(w.next().val);while(!w.next({val:"}",silent:!0})&&w.next({val:","}));return a&&w.next({val:"=",silent:!0})&&(m.default=w.next().val,w.next({val:";"})),m},C.prototype._readUnion=function(){var m=this._tk,a=[];m.next({val:"{"});do a.push(this._readType());while(!m.next({val:"}",silent:!0})&&m.next({val:","}));return a},C.prototype._readRecord=function(m){var a=this._tk;for(a.next({val:"{",silent:!0})||(m.name=a.next({id:"name"}).val,a.next({val:"{"})),m.fields=[];!a.next({val:"}",silent:!0});)m.fields.push(this._readField()),a.next({val:";"});return m},C.prototype._readImports=function(m,a){for(var w=this._tk,j=0,z=w.pos;w.next({val:"import",silent:!0});){if(!j&&a&&w.next({val:"(",silent:!0})){w.pos=z;return}var te=w.next({id:"name"}).val,M=JSON.parse(w.next({id:"string"}).val);w.next({val:";"}),m.push({kind:te,name:M}),j++}return j};function P(m){this._str=m,this.pos=0}P.prototype.next=function(m){var a={pos:this.pos,id:void 0,val:void 0},w=this._skip(m&&m.emitJavadoc);if(typeof w=="string")a.id="javadoc",a.val=w;else{var j=this.pos,z=this._str,te=z.charAt(j);if(!te)a.id="(eof)";else if(m&&m.id==="json"?(a.id="json",this.pos=this._endOfJson()):te==='"'?(a.id="string",this.pos=this._endOfString()):/[0-9]/.test(te)?(a.id="number",this.pos=this._endOf(/[0-9]/)):/[`A-Za-z_.]/.test(te)?(a.id="name",this.pos=this._endOf(/[`A-Za-z0-9_.]/)):(a.id="operator",this.pos=j+1),a.val=z.slice(j,this.pos),a.id==="json")try{a.val=JSON.parse(a.val)}catch{throw this.error("invalid JSON",a)}else a.id==="name"&&(a.val=a.val.replace(/`/g,""))}var M;if(m&&m.id&&m.id!==a.id?M=this.error(O("expected ID %s",m.id),a):m&&m.val&&m.val!==a.val&&(M=this.error(O("expected value %s",m.val),a)),M)if(m&&m.silent){this.pos=a.pos;return}else throw M;else return a},P.prototype.error=function(m,a){var w=typeof a!="number",j=w?a.pos:a,z=this._str,te=1,M=0,G;for(G=0;G"u"&&typeof Tt>"u"&&console.error("ultralight-S3 Module: Crypto functions are not available, please report the issue with necessary description: https://github.com/sentienhq/ultralight-s3/issues");var Xt={contents:!0},Zt=h=>`%${h.charCodeAt(0).toString(16).toUpperCase()}`,rt=h=>encodeURIComponent(h).replace(/[!'()*]/g,Zt),me=h=>rt(h).replace(/%2F/g,"/"),er=class{constructor({accessKeyId:h,secretAccessKey:l,endpoint:c,bucketName:d,region:_="auto",maxRequestSizeInBytes:g=5242880,requestAbortTimeout:O=void 0,logger:T=void 0}){this.getBucketName=()=>this.bucketName,this.setBucketName=v=>{this.bucketName=v},this.getRegion=()=>this.region,this.setRegion=v=>{this.region=v},this.getEndpoint=()=>this.endpoint,this.setEndpoint=v=>{this.endpoint=v},this.getMaxRequestSizeInBytes=()=>this.maxRequestSizeInBytes,this.setMaxRequestSizeInBytes=v=>{this.maxRequestSizeInBytes=v},this.sanitizeETag=v=>He(v),this.getProps=()=>({accessKeyId:this.accessKeyId,secretAccessKey:this.secretAccessKey,region:this.region,bucket:this.bucketName,endpoint:this.endpoint,maxRequestSizeInBytes:this.maxRequestSizeInBytes,requestAbortTimeout:this.requestAbortTimeout,logger:this.logger}),this.setProps=v=>{this._validateConstructorParams(v.accessKeyId,v.secretAccessKey,v.bucketName,v.endpoint),this.accessKeyId=v.accessKeyId,this.secretAccessKey=v.secretAccessKey,this.region=v.region||"auto",this.bucketName=v.bucketName,this.endpoint=v.endpoint,this.maxRequestSizeInBytes=v.maxRequestSizeInBytes||5242880,this.requestAbortTimeout=v.requestAbortTimeout,this.logger=v.logger},this._validateConstructorParams(h,l,c,d),this.accessKeyId=h,this.secretAccessKey=l,this.endpoint=c,this.bucketName=d,this.region=_,this.maxRequestSizeInBytes=g,this.requestAbortTimeout=O,this.logger=T}_validateConstructorParams(h,l,c,d){if(typeof h!="string"||h.trim().length===0)throw new TypeError(Jt);if(typeof l!="string"||l.trim().length===0)throw new TypeError(Wt);if(typeof c!="string"||c.trim().length===0)throw new TypeError(Yt);if(typeof d!="string"||d.trim().length===0)throw new TypeError(Qt)}_checkMethodHeadnGet(h){if(h!=="GET"&&h!=="HEAD")throw this._log("error",`${se}method must be either GET or HEAD`),new Error("method must be either GET or HEAD")}_checkKey(h){if(typeof h!="string"||h.trim().length===0)throw this._log("error",ht),new TypeError(ht)}_checkDelimiter(h){if(typeof h!="string"||h.trim().length===0)throw this._log("error",yt),new TypeError(yt)}_checkPrefix(h){if(typeof h!="string")throw this._log("error",pt),new TypeError(pt)}_checkMaxKeys(h){if(typeof h!="number"||h<=0)throw this._log("error",dt),new TypeError(dt)}_checkOpts(h){if(typeof h!="object")throw this._log("error",`${se}opts must be an object`),new TypeError(`${se}opts must be an object`)}_log(h,l,c={}){if(this.logger&&typeof this.logger[h]=="function"){let d=O=>typeof O!="object"||O===null?O:Object.keys(O).reduce((T,v)=>(Ut.includes(v.toLowerCase())?T[v]="[REDACTED]":typeof O[v]=="object"&&O[v]!==null?T[v]=d(O[v]):T[v]=O[v],T),Array.isArray(O)?[]:{}),_=d(c),g={timestamp:new Date().toISOString(),level:h,message:l,..._,context:d({bucketName:this.bucketName,region:this.region,endpoint:this.endpoint,accessKeyId:this.accessKeyId?`${this.accessKeyId.substring(0,4)}...`:void 0})};this.logger[h](g)}}async getContentLength(h){this._checkKey(h);let l={[_e]:ye},c=me(h),{url:d,headers:_}=await this._sign("HEAD",c,{},l,""),g=(await this._sendRequest(d,"HEAD",_)).headers.get(Ce);return g?parseInt(g,10):0}async bucketExists(){let h={[_e]:ye},{url:l,headers:c}=await this._sign("HEAD","",{},h,""),d=await this._sendRequest(l,"HEAD",c);return!!(d.ok&&d.status===200)}async fileExists(h,l={}){this._checkKey(h);let{filteredOpts:c,conditionalHeaders:d}=this._filterIfHeaders(l),_={[_e]:ye,...d},g=me(h),{url:O,headers:T}=await this._sign("HEAD",g,c,_,"");try{let v=await this._sendRequest(O,"HEAD",T,"",[200,404,412,304]);return v.status===404?!1:v.status===412||v.status===304?null:v.ok&&v.status===200?!0:(this._handleErrorResponse(v),!1)}catch(v){let R=v instanceof Error?v.message:String(v);throw this._log("error",`${se}Failed to check if file exists: ${R}`),new Error(`${se}Failed to check if file exists: ${R}`)}}async _sign(h,l,c,d,_){let g=new Date().toISOString().replace(/[:-]|\.\d{3}/g,""),O=typeof l=="string"&&l.length>0?new URL(l,this.endpoint):new URL(this.endpoint);O.pathname=`/${encodeURI(this.bucketName)}${O.pathname}`,d[_e]=_?await We(_):ye,d[zt]=g,d[Gt]=O.host;let T=this._buildCanonicalHeaders(d),v=Object.keys(d).map(re=>re.toLowerCase()).sort().join(";"),R=await this._buildCanonicalRequest(h,O,c,T,v,_),C=await this._buildStringToSign(g,R),P=await this._calculateSignature(g,C),Q=this._buildAuthorizationHeader(g,v,P);return d[Kt]=Q,{url:O.toString(),headers:d}}_buildCanonicalHeaders(h){return Object.entries(h).map(([l,c])=>`${l.toLowerCase()}:${String(c).trim()}`).sort().join(` -`)}async _buildCanonicalRequest(h,l,c,d,_,g){return[h,l.pathname,this._buildCanonicalQueryString(c),`${d} -`,_,g?await We(g):ye].join(` -`)}async _buildStringToSign(h,l){let c=[h.slice(0,8),this.region,Ze,Xe].join("/");return[st,h,c,await We(l)].join(` -`)}async _calculateSignature(h,l){let c=await this._getSignatureKey(h.slice(0,8));return Me(c,l,"hex")}_buildAuthorizationHeader(h,l,c){let d=[h.slice(0,8),this.region,Ze,Xe].join("/");return[`${st} Credential=${this.accessKeyId}/${d}`,`SignedHeaders=${l}`,`Signature=${c}`].join(", ")}_filterIfHeaders(h){let l={},c={},d=["if-match","if-none-match","if-modified-since","if-unmodified-since"];for(let[_,g]of Object.entries(h))d.includes(_)?c[_]=g:l[_]=g;return{filteredOpts:l,conditionalHeaders:c}}async list(h="/",l="",c=1e3,d="GET",_={}){this._checkDelimiter(h),this._checkPrefix(l),this._checkMaxKeys(c),this._checkMethodHeadnGet(d),this._checkOpts(_),this._log("info",`Listing objects in ${l}`);let g={"list-type":Vt,"max-keys":String(c),..._};l.length>0&&(g.prefix=l);let O={[Te]:xe,[_e]:ye},T=h==="/"?h:rt(h),{url:v,headers:R}=await this._sign("GET",T,g,O,""),C=`${v}?${new URLSearchParams(g)}`,P=await this._sendRequest(C,"GET",R),Q=await P.text();if(d==="HEAD"){let a=P.headers.get(Ce),w=P.headers.get(ct),j=P.headers.get(ut);return{size:a?+a:void 0,mtime:w?new Date(w):void 0,ETag:j||void 0}}let re=Be(Q),m=re.listBucketResult||re.error||re;return m.contents||m}async listMultiPartUploads(h="/",l="",c="GET",d={}){var _,g,O;this._checkDelimiter(h),this._checkPrefix(l),this._checkMethodHeadnGet(c),this._checkOpts(d),this._log("info",`Listing multipart uploads in ${l}`);let T={uploads:"",...d},v={[Te]:xe,[_e]:ye},R=h==="/"?h:rt(h),{url:C,headers:P}=await this._sign("GET",R,T,v,""),Q=`${C}?${new URLSearchParams(T)}`,re=await this._sendRequest(Q,"GET",P),m=await re.text();if(c==="HEAD")return{size:+((_=re.headers.get(Ce))!==null&&_!==void 0?_:"0"),mtime:new Date((g=re.headers.get(ct))!==null&&g!==void 0?g:""),ETag:(O=re.headers.get(ut))!==null&&O!==void 0?O:""};let a=Be(m),w=a.listMultipartUploadsResult||a.error||a;return w.uploads||w}async get(h,l={}){this._checkKey(h),this._log("info",`Getting object ${h}`);let{filteredOpts:c,conditionalHeaders:d}=this._filterIfHeaders(l),_={[Te]:xe,[_e]:ye,...d},g=me(h),{url:O,headers:T}=await this._sign("GET",g,c,_,""),v=await this._sendRequest(O,"GET",T,"",[200,404,412,304]);if(v.status===404||v.status===412||v.status===304)return this._log("error",`Failed to get object. Status: ${v.status}`),null;if(!v.ok)throw this._log("error",`Failed to get object. Status: ${v.status}`),new Error(`Failed to get object. Status: ${v.status}`);return v.text()}async getObjectWithETag(h,l={}){this._checkKey(h),this._log("info",`Getting object ${h}`);let{filteredOpts:c,conditionalHeaders:d}=this._filterIfHeaders(l),_={[Te]:xe,[_e]:ye,...d},g=me(h),{url:O,headers:T}=await this._sign("GET",g,c,_,"");try{let v=await this._sendRequest(O,"GET",T,"",[200,404,412,304]);if(v.status===404||v.status===412||v.status===304)return this._log("error",`Failed to get object. Status: ${v.status}`),{etag:null,data:null};if(!v.ok)throw this._log("error",`Failed to get object. Status: ${v.status}`),new Error(`Failed to get object. Status: ${v.status}`);let R=v.headers.get("etag");if(!R)throw new Error("ETag not found in response headers");let C=await v.text();return{etag:He(R),data:C}}catch(v){throw this._log("error",`Error getting object ${h} with ETag: ${v}`),v}}async getEtag(h,l={}){this._checkKey(h),this._log("info",`Getting etag object ${h}`);let{filteredOpts:c,conditionalHeaders:d}=this._filterIfHeaders(l),_={[Te]:xe,[_e]:ye,...d},g=me(h),{url:O,headers:T}=await this._sign("HEAD",g,c,_,""),v=await this._sendRequest(O,"HEAD",T,"",[200,412,304]);if(this._log("info",`Response status: ${v.status,v.statusText}`),v.status===412||v.status===304)return null;let R=v.headers.get("etag");if(!R)throw this._log("error","ETag not found in response headers"),new Error("ETag not found in response headers");return He(R)}async getResponse(h,l=!0,c=0,d=this.maxRequestSizeInBytes,_={}){this._checkKey(h);let{filteredOpts:g,conditionalHeaders:O}=this._filterIfHeaders({..._}),T={[Te]:xe,[_e]:ye,...l?{}:{range:`bytes=${c}-${d-1}`},...O},v=me(h),{url:R,headers:C}=await this._sign("GET",v,g,T,""),P=`${R}?${new URLSearchParams(g)}`;return this._sendRequest(P,"GET",C)}async put(h,l){if(this._checkKey(h),!(l instanceof Buffer||typeof l=="string"))throw this._log("error",Je),new TypeError(Je);this._log("info",`Uploading object ${h}`);let c=typeof l=="string"?Buffer.byteLength(l):l.length,d={[Ce]:c},_=me(h),{url:g,headers:O}=await this._sign("PUT",_,{},d,l);return await this._sendRequest(g,"PUT",O,l)}async getMultipartUploadId(h,l=qt){if(this._checkKey(h),typeof l!="string")throw this._log("error",`${se}fileType must be a string`),new TypeError(`${se}fileType must be a string`);this._log("info",`Initiating multipart upload for object ${h}`);let c={uploads:""},d={[Te]:l,[_e]:ye},_=me(h),{url:g,headers:O}=await this._sign("POST",_,c,d,""),T=`${g}?${new URLSearchParams(c)}`,v=await(await this._sendRequest(T,"POST",O)).text(),R=Be(v);if(typeof R=="object"&&R!==null&&"error"in R&&typeof R.error=="object"&&R.error!==null&&"message"in R.error){let C=String(R.error.message);throw this._log("error",`${se}Failed to abort multipart upload: ${C}`),new Error(`${se}Failed to abort multipart upload: ${C}`)}if(typeof R=="object"&&R!==null){if(!R.initiateMultipartUploadResult||!R.initiateMultipartUploadResult.uploadId)throw this._log("error",`${se}Failed to create multipart upload: no uploadId in response`),new Error(`${se}Failed to create multipart upload: Missing upload ID in response`);return R.initiateMultipartUploadResult.uploadId}else throw this._log("error",`${se}Failed to create multipart upload: unexpected response format`),new Error(`${se}Failed to create multipart upload: Unexpected response format`)}async uploadPart(h,l,c,d,_={}){this._validateUploadPartParams(h,l,c,d,_);let g={uploadId:c,partNumber:d,..._},O={[Ce]:l.length},T=me(h),{url:v,headers:R}=await this._sign("PUT",T,g,O,l),C=`${v}?${new URLSearchParams(g)}`,P=await this._sendRequest(C,"PUT",R,l),Q=He(P.headers.get("etag")||"");return{partNumber:d,ETag:Q}}_validateUploadPartParams(h,l,c,d,_){if(this._checkKey(h),!(l instanceof Buffer||typeof l=="string"))throw this._log("error",Je),new TypeError(Je);if(typeof c!="string"||c.trim().length===0)throw this._log("error",Pe),new TypeError(Pe);if(!Number.isInteger(d)||d<=0)throw this._log("error",`${se}partNumber must be a positive integer`),new TypeError(`${se}partNumber must be a positive integer`);this._checkOpts(_)}async completeMultipartUpload(h,l,c){if(this._checkKey(h),typeof l!="string"||l.trim().length===0)throw this._log("error",Pe),new TypeError(Pe);if(!Array.isArray(c)||c.length===0)throw this._log("error",ft),new TypeError(ft);if(!c.every(Q=>typeof Q.partNumber=="number"&&typeof Q.ETag=="string"))throw this._log("error",lt),new TypeError(lt);this._log("info",`Complete multipart upload ${l} for object ${h}`);let d={uploadId:l},_=this._buildCompleteMultipartUploadXml(c),g={[Te]:at,[Ce]:Buffer.byteLength(_).toString(),[_e]:await We(_)},O=me(h),{url:T,headers:v}=await this._sign("POST",O,d,g,_),R=`${T}?${new URLSearchParams(d)}`,C=await(await this._sendRequest(R,"POST",v,_)).text(),P=Be(C);if(typeof P=="object"&&P!==null&&"error"in P&&typeof P.error=="object"&&P.error!==null&&"message"in P.error){let Q=String(P.error.message);throw this._log("error",`${se}Failed to abort multipart upload: ${Q}`),new Error(`${se}Failed to abort multipart upload: ${Q}`)}return P.completeMultipartUploadResult}async abortMultipartUpload(h,l){if(this._checkKey(h),typeof l!="string"||l.trim().length===0)throw this._log("error",Pe),new TypeError(Pe);this._log("info",`Aborting multipart upload ${l} for object ${h}`);let c={uploadId:l},d={[Te]:at,[_e]:ye};try{let _=me(h),{url:g,headers:O}=await this._sign("DELETE",_,c,d,""),T=`${g}?${new URLSearchParams(c)}`,v=await this._sendRequest(T,"DELETE",O);if(v.ok){let R=await v.text(),C=Be(R);if(typeof C=="object"&&C!==null&&"error"in C&&typeof C.error=="object"&&C.error!==null&&"message"in C.error){let P=String(C.error.message);throw this._log("error",`${se}Failed to abort multipart upload: ${P}`),new Error(`${se}Failed to abort multipart upload: ${P}`)}return{status:"Aborted",key:h,uploadId:l,response:C}}else throw this._log("error",`${se}Abort request failed with status ${v.status}`),new Error(`${se}Abort request failed with status ${v.status}`)}catch(_){let g=_ instanceof Error?_.message:String(_);throw this._log("error",`${se}Failed to abort multipart upload for key ${h}: ${g}`),new Error(`${se}Failed to abort multipart upload for key ${h}: ${g}`)}}_buildCompleteMultipartUploadXml(h){return` +`)}function re(m){if(m.namespace)return m.namespace;var a=/^(.*)\.[^.]+$/.exec(m.protocol);return a?a[1]:void 0}l.exports={Tokenizer:P,assembleProtocol:v,read:R,readProtocol:C.readProtocol,readSchema:C.readSchema}}}),Ht=Ie({"node_modules/avsc/lib/index.js"(u,l){"use strict";var h=Dt(),d=jt(),_=Mt(),g=ot(),O=ze(),T=Ue,v=mt,R=De,C=T.Buffer;function P(a,w){var j=_.read(a);return j.protocol?d.Service.forProtocol(j,w):g.Type.forSchema(j,w)}function Q(a,w){w=w||{};var j=w.decode===void 0?!0:!!w.decode,z=Math.max(w.size||4096,4),te=O.newBuffer(z),M=v.openSync(a,"r");try{var G=v.readSync(M,te,0,z);if(G<4||!h.MAGIC_BYTES.equals(te.slice(0,4)))return null;var D=new O.Tap(te),X=null;do X=h.HEADER_TYPE._read(D);while(!oe());if(j!==!1){var U=X.meta;U["avro.schema"]=JSON.parse(U["avro.schema"].toString()),U["avro.codec"]!==void 0&&(U["avro.codec"]=U["avro.codec"].toString())}return X}finally{v.closeSync(M)}function oe(){if(D.isValid())return!0;var E=2*D.buf.length,k=O.newBuffer(E);return E=v.readSync(M,k,0,E),D.buf=C.concat([D.buf,k]),D.pos=0,!1}}function re(a,w){return v.createReadStream(a).pipe(new h.streams.BlockDecoder(w))}function m(a,w,j){var z=new h.streams.BlockEncoder(w,j);return z.pipe(v.createWriteStream(a,{defaultEncoding:"binary"})),z}l.exports={Service:d.Service,Type:g.Type,assembleProtocol:_.assembleProtocol,createFileDecoder:re,createFileEncoder:m,discoverProtocol:d.discoverProtocol,extractFileHeader:Q,parse:P,readProtocol:_.readProtocol,readSchema:_.readSchema,streams:h.streams,types:g.builtins,Protocol:d.Service,assemble:R.deprecate(_.assembleProtocol,"use `assembleProtocol` instead"),combine:R.deprecate(g.Type.forTypes,"use `Type.forTypes` intead"),infer:R.deprecate(g.Type.forValue,"use `Type.forValue` instead")}}}),at="AWS4-HMAC-SHA256",Xe="aws4_request",Ze="s3",Vt="2",_e="UNSIGNED-PAYLOAD",qt="application/octet-stream",et="application/xml",xe="application/json",Ut=["accessKeyId","secretAccessKey","sessionToken","password"],de="x-amz-content-sha256",zt="x-amz-date",Gt="host",Kt="Authorization",Ee="Content-Type",Ne="Content-Length",ut="etag",ct="last-modified",se="ultralight-s3 Module: ",Jt=`${se}accessKeyId must be a non-empty string`,Wt=`${se}secretAccessKey must be a non-empty string`,Yt=`${se}endpoint must be a non-empty string`,Qt=`${se}bucketName must be a non-empty string`,ht=`${se}key must be a non-empty string`,Pe=`${se}uploadId must be a non-empty string`,ft=`${se}parts must be a non-empty array`,lt=`${se}Each part must have a partNumber (number) and ETag (string)`,We=`${se}data must be a Buffer or string`,pt=`${se}prefix must be a string`,dt=`${se}maxKeys must be a positive integer`,yt=`${se}delimiter must be a string`,Et=crypto.createHmac||(await import("node:crypto")).createHmac,Tt=crypto.createHash||(await import("node:crypto")).createHash;typeof Et>"u"&&typeof Tt>"u"&&console.error("ultralight-S3 Module: Crypto functions are not available, please report the issue with necessary description: https://github.com/sentienhq/ultralight-s3/issues");var Xt={contents:!0},Zt=u=>`%${u.charCodeAt(0).toString(16).toUpperCase()}`,it=u=>encodeURIComponent(u).replace(/[!'()*]/g,Zt),me=u=>it(u).replace(/%2F/g,"/"),er=class{constructor({accessKeyId:u,secretAccessKey:l,endpoint:h,bucketName:d,region:_="auto",maxRequestSizeInBytes:g=5242880,requestAbortTimeout:O=void 0,logger:T=void 0}){this.getBucketName=()=>this.bucketName,this.setBucketName=v=>{this.bucketName=v},this.getRegion=()=>this.region,this.setRegion=v=>{this.region=v},this.getEndpoint=()=>this.endpoint,this.setEndpoint=v=>{this.endpoint=v},this.getMaxRequestSizeInBytes=()=>this.maxRequestSizeInBytes,this.setMaxRequestSizeInBytes=v=>{this.maxRequestSizeInBytes=v},this.sanitizeETag=v=>Ve(v),this.getProps=()=>({accessKeyId:this.accessKeyId,secretAccessKey:this.secretAccessKey,region:this.region,bucket:this.bucketName,endpoint:this.endpoint,maxRequestSizeInBytes:this.maxRequestSizeInBytes,requestAbortTimeout:this.requestAbortTimeout,logger:this.logger}),this.setProps=v=>{this._validateConstructorParams(v.accessKeyId,v.secretAccessKey,v.bucketName,v.endpoint),this.accessKeyId=v.accessKeyId,this.secretAccessKey=v.secretAccessKey,this.region=v.region||"auto",this.bucketName=v.bucketName,this.endpoint=v.endpoint,this.maxRequestSizeInBytes=v.maxRequestSizeInBytes||5242880,this.requestAbortTimeout=v.requestAbortTimeout,this.logger=v.logger},this._validateConstructorParams(u,l,h,d),this.accessKeyId=u,this.secretAccessKey=l,this.endpoint=h,this.bucketName=d,this.region=_,this.maxRequestSizeInBytes=g,this.requestAbortTimeout=O,this.logger=T}_validateConstructorParams(u,l,h,d){if(typeof u!="string"||u.trim().length===0)throw new TypeError(Jt);if(typeof l!="string"||l.trim().length===0)throw new TypeError(Wt);if(typeof h!="string"||h.trim().length===0)throw new TypeError(Yt);if(typeof d!="string"||d.trim().length===0)throw new TypeError(Qt)}_checkMethodHeadnGet(u){if(u!=="GET"&&u!=="HEAD")throw this._log("error",`${se}method must be either GET or HEAD`),new Error("method must be either GET or HEAD")}_checkKey(u){if(typeof u!="string"||u.trim().length===0)throw this._log("error",ht),new TypeError(ht)}_checkDelimiter(u){if(typeof u!="string"||u.trim().length===0)throw this._log("error",yt),new TypeError(yt)}_checkPrefix(u){if(typeof u!="string")throw this._log("error",pt),new TypeError(pt)}_checkMaxKeys(u){if(typeof u!="number"||u<=0)throw this._log("error",dt),new TypeError(dt)}_checkOpts(u){if(typeof u!="object")throw this._log("error",`${se}opts must be an object`),new TypeError(`${se}opts must be an object`)}_log(u,l,h={}){if(this.logger&&typeof this.logger[u]=="function"){let d=O=>typeof O!="object"||O===null?O:Object.keys(O).reduce((T,v)=>(Ut.includes(v.toLowerCase())?T[v]="[REDACTED]":typeof O[v]=="object"&&O[v]!==null?T[v]=d(O[v]):T[v]=O[v],T),Array.isArray(O)?[]:{}),_=d(h),g={timestamp:new Date().toISOString(),level:u,message:l,..._,context:d({bucketName:this.bucketName,region:this.region,endpoint:this.endpoint,accessKeyId:this.accessKeyId?`${this.accessKeyId.substring(0,4)}...`:void 0})};this.logger[u](g)}}async getContentLength(u){this._checkKey(u);let l={[de]:_e},h=me(u),{url:d,headers:_}=await this._sign("HEAD",h,{},l,""),g=(await this._sendRequest(d,"HEAD",_)).headers.get(Ne);return g?parseInt(g,10):0}async bucketExists(){let u={[de]:_e},{url:l,headers:h}=await this._sign("HEAD","",{},u,""),d=await this._sendRequest(l,"HEAD",h,"",[200,404,403]);return this._log("error",`Response status: ${d.status,d.statusText}`),!!(d.ok&&d.status===200)}async createBucket(){let u=` + + ${this.region} + + `,l={[Ee]:et,[Ne]:Buffer.byteLength(u).toString(),[de]:await Me(u)},h=encodeURI(""),{url:d,headers:_}=await this._sign("PUT",h,{},l,""),g=await this._sendRequest(d,"PUT",_,u,[200,404,403]);return!!(g.ok&&g.status===200)}async fileExists(u,l={}){this._checkKey(u);let{filteredOpts:h,conditionalHeaders:d}=this._filterIfHeaders(l),_={[de]:_e,...d},g=me(u),{url:O,headers:T}=await this._sign("HEAD",g,h,_,"");try{let v=await this._sendRequest(O,"HEAD",T,"",[200,404,412,304]);return v.status===404?!1:v.status===412||v.status===304?null:v.ok&&v.status===200?!0:(this._handleErrorResponse(v),!1)}catch(v){let R=v instanceof Error?v.message:String(v);throw this._log("error",`${se}Failed to check if file exists: ${R}`),new Error(`${se}Failed to check if file exists: ${R}`)}}async _sign(u,l,h={},d,_){let g=new Date().toISOString().replace(/[:-]|\.\d{3}/g,""),O=typeof l=="string"&&l.length>0?new URL(l,this.endpoint):new URL(this.endpoint);O.pathname=`/${encodeURI(this.bucketName)}${O.pathname}`,d[de]=_?await Me(_):_e,d[zt]=g,d[Gt]=O.host;let T=this._buildCanonicalHeaders(d),v=Object.keys(d).map(re=>re.toLowerCase()).sort().join(";"),R=await this._buildCanonicalRequest(u,O,h,T,v,_),C=await this._buildStringToSign(g,R),P=await this._calculateSignature(g,C),Q=this._buildAuthorizationHeader(g,v,P);return d[Kt]=Q,{url:O.toString(),headers:d}}_buildCanonicalHeaders(u){return Object.entries(u).map(([l,h])=>`${l.toLowerCase()}:${String(h).trim()}`).sort().join(` +`)}async _buildCanonicalRequest(u,l,h,d,_,g){return[u,l.pathname,this._buildCanonicalQueryString(h),`${d} +`,_,g?await Me(g):_e].join(` +`)}async _buildStringToSign(u,l){let h=[u.slice(0,8),this.region,Ze,Xe].join("/");return[at,u,h,await Me(l)].join(` +`)}async _calculateSignature(u,l){let h=await this._getSignatureKey(u.slice(0,8));return He(h,l,"hex")}_buildAuthorizationHeader(u,l,h){let d=[u.slice(0,8),this.region,Ze,Xe].join("/");return[`${at} Credential=${this.accessKeyId}/${d}`,`SignedHeaders=${l}`,`Signature=${h}`].join(", ")}_filterIfHeaders(u){let l={},h={},d=["if-match","if-none-match","if-modified-since","if-unmodified-since"];for(let[_,g]of Object.entries(u))d.includes(_)?h[_]=g:l[_]=g;return{filteredOpts:l,conditionalHeaders:h}}async list(u="/",l="",h=1e3,d="GET",_={}){this._checkDelimiter(u),this._checkPrefix(l),this._checkMaxKeys(h),this._checkMethodHeadnGet(d),this._checkOpts(_),this._log("info",`Listing objects in ${l}`);let g={"list-type":Vt,"max-keys":String(h),..._};l.length>0&&(g.prefix=l);let O={[Ee]:xe,[de]:_e},T=u==="/"?u:it(u),{url:v,headers:R}=await this._sign("GET",T,g,O,""),C=`${v}?${new URLSearchParams(g)}`,P=await this._sendRequest(C,"GET",R),Q=await P.text();if(d==="HEAD"){let a=P.headers.get(Ne),w=P.headers.get(ct),j=P.headers.get(ut);return{size:a?+a:void 0,mtime:w?new Date(w):void 0,ETag:j||void 0}}let re=Be(Q),m=re.listBucketResult||re.error||re;return m.contents||m}async listMultiPartUploads(u="/",l="",h="GET",d={}){var _,g,O;this._checkDelimiter(u),this._checkPrefix(l),this._checkMethodHeadnGet(h),this._checkOpts(d),this._log("info",`Listing multipart uploads in ${l}`);let T={uploads:"",...d},v={[Ee]:xe,[de]:_e},R=u==="/"?u:it(u),{url:C,headers:P}=await this._sign("GET",R,T,v,""),Q=`${C}?${new URLSearchParams(T)}`,re=await this._sendRequest(Q,"GET",P),m=await re.text();if(h==="HEAD")return{size:+((_=re.headers.get(Ne))!==null&&_!==void 0?_:"0"),mtime:new Date((g=re.headers.get(ct))!==null&&g!==void 0?g:""),ETag:(O=re.headers.get(ut))!==null&&O!==void 0?O:""};let a=Be(m),w=a.listMultipartUploadsResult||a.error||a;return w.uploads||w}async get(u,l={}){this._checkKey(u),this._log("info",`Getting object ${u}`);let{filteredOpts:h,conditionalHeaders:d}=this._filterIfHeaders(l),_={[Ee]:xe,[de]:_e,...d},g=me(u),{url:O,headers:T}=await this._sign("GET",g,h,_,""),v=await this._sendRequest(O,"GET",T,"",[200,404,412,304]);if(v.status===404||v.status===412||v.status===304)return this._log("error",`Failed to get object. Status: ${v.status}`),null;if(!v.ok)throw this._log("error",`Failed to get object. Status: ${v.status}`),new Error(`Failed to get object. Status: ${v.status}`);return v}async getObjectWithETag(u,l={}){this._checkKey(u),this._log("info",`Getting object ${u}`);let{filteredOpts:h,conditionalHeaders:d}=this._filterIfHeaders(l),_={[Ee]:xe,[de]:_e,...d},g=me(u),{url:O,headers:T}=await this._sign("GET",g,h,_,"");try{let v=await this._sendRequest(O,"GET",T,"",[200,404,412,304]);if(v.status===404||v.status===412||v.status===304)return this._log("error",`Failed to get object. Status: ${v.status}`),{etag:null,data:null};if(!v.ok)throw this._log("error",`Failed to get object. Status: ${v.status}`),new Error(`Failed to get object. Status: ${v.status}`);let R=v.headers.get("etag");if(!R)throw new Error("ETag not found in response headers");let C=await v.text();return{etag:Ve(R),data:C}}catch(v){throw this._log("error",`Error getting object ${u} with ETag: ${v}`),v}}async getEtag(u,l={}){this._checkKey(u),this._log("info",`Getting etag object ${u}`);let{filteredOpts:h,conditionalHeaders:d}=this._filterIfHeaders(l),_={[Ee]:xe,[de]:_e,...d},g=me(u),{url:O,headers:T}=await this._sign("HEAD",g,h,_,""),v=await this._sendRequest(O,"HEAD",T,"",[200,412,304]);if(this._log("info",`Response status: ${v.status,v.statusText}`),v.status===412||v.status===304)return null;let R=v.headers.get("etag");if(!R)throw this._log("error","ETag not found in response headers"),new Error("ETag not found in response headers");return Ve(R)}async getResponse(u,l=!0,h=0,d=this.maxRequestSizeInBytes,_={}){this._checkKey(u);let{filteredOpts:g,conditionalHeaders:O}=this._filterIfHeaders({..._}),T={[Ee]:xe,[de]:_e,...l?{}:{range:`bytes=${h}-${d-1}`},...O},v=me(u),{url:R,headers:C}=await this._sign("GET",v,g,T,""),P=`${R}?${new URLSearchParams(g)}`;return this._sendRequest(P,"GET",C)}async put(u,l){if(this._checkKey(u),!(l instanceof Buffer||typeof l=="string"))throw this._log("error",We),new TypeError(We);this._log("info",`Uploading object ${u}`);let h=typeof l=="string"?Buffer.byteLength(l):l.length,d={[Ne]:h},_=me(u),{url:g,headers:O}=await this._sign("PUT",_,{},d,l);return this._sendRequest(g,"PUT",O,l,[200])}async getMultipartUploadId(u,l=qt){if(this._checkKey(u),typeof l!="string")throw this._log("error",`${se}fileType must be a string`),new TypeError(`${se}fileType must be a string`);this._log("info",`Initiating multipart upload for object ${u}`);let h={uploads:""},d={[Ee]:l,[de]:_e},_=me(u),{url:g,headers:O}=await this._sign("POST",_,h,d,""),T=`${g}?${new URLSearchParams(h)}`,v=await(await this._sendRequest(T,"POST",O)).text(),R=Be(v);if(typeof R=="object"&&R!==null&&"error"in R&&typeof R.error=="object"&&R.error!==null&&"message"in R.error){let C=String(R.error.message);throw this._log("error",`${se}Failed to abort multipart upload: ${C}`),new Error(`${se}Failed to abort multipart upload: ${C}`)}if(typeof R=="object"&&R!==null){if(!R.initiateMultipartUploadResult||!R.initiateMultipartUploadResult.uploadId)throw this._log("error",`${se}Failed to create multipart upload: no uploadId in response`),new Error(`${se}Failed to create multipart upload: Missing upload ID in response`);return R.initiateMultipartUploadResult.uploadId}else throw this._log("error",`${se}Failed to create multipart upload: unexpected response format`),new Error(`${se}Failed to create multipart upload: Unexpected response format`)}async uploadPart(u,l,h,d,_={}){this._validateUploadPartParams(u,l,h,d,_);let g={uploadId:h,partNumber:d,..._},O={[Ne]:l.length},T=me(u),{url:v,headers:R}=await this._sign("PUT",T,g,O,l),C=`${v}?${new URLSearchParams(g)}`,P=await this._sendRequest(C,"PUT",R,l),Q=Ve(P.headers.get("etag")||"");return{partNumber:d,ETag:Q}}_validateUploadPartParams(u,l,h,d,_){if(this._checkKey(u),!(l instanceof Buffer||typeof l=="string"))throw this._log("error",We),new TypeError(We);if(typeof h!="string"||h.trim().length===0)throw this._log("error",Pe),new TypeError(Pe);if(!Number.isInteger(d)||d<=0)throw this._log("error",`${se}partNumber must be a positive integer`),new TypeError(`${se}partNumber must be a positive integer`);this._checkOpts(_)}async completeMultipartUpload(u,l,h){if(this._checkKey(u),typeof l!="string"||l.trim().length===0)throw this._log("error",Pe),new TypeError(Pe);if(!Array.isArray(h)||h.length===0)throw this._log("error",ft),new TypeError(ft);if(!h.every(Q=>typeof Q.partNumber=="number"&&typeof Q.ETag=="string"))throw this._log("error",lt),new TypeError(lt);this._log("info",`Complete multipart upload ${l} for object ${u}`);let d={uploadId:l},_=this._buildCompleteMultipartUploadXml(h),g={[Ee]:et,[Ne]:Buffer.byteLength(_).toString(),[de]:await Me(_)},O=me(u),{url:T,headers:v}=await this._sign("POST",O,d,g,_),R=`${T}?${new URLSearchParams(d)}`,C=await(await this._sendRequest(R,"POST",v,_)).text(),P=Be(C);if(typeof P=="object"&&P!==null&&"error"in P&&typeof P.error=="object"&&P.error!==null&&"message"in P.error){let Q=String(P.error.message);throw this._log("error",`${se}Failed to abort multipart upload: ${Q}`),new Error(`${se}Failed to abort multipart upload: ${Q}`)}return P.completeMultipartUploadResult}async abortMultipartUpload(u,l){if(this._checkKey(u),typeof l!="string"||l.trim().length===0)throw this._log("error",Pe),new TypeError(Pe);this._log("info",`Aborting multipart upload ${l} for object ${u}`);let h={uploadId:l},d={[Ee]:et,[de]:_e};try{let _=me(u),{url:g,headers:O}=await this._sign("DELETE",_,h,d,""),T=`${g}?${new URLSearchParams(h)}`,v=await this._sendRequest(T,"DELETE",O);if(v.ok){let R=await v.text(),C=Be(R);if(typeof C=="object"&&C!==null&&"error"in C&&typeof C.error=="object"&&C.error!==null&&"message"in C.error){let P=String(C.error.message);throw this._log("error",`${se}Failed to abort multipart upload: ${P}`),new Error(`${se}Failed to abort multipart upload: ${P}`)}return{status:"Aborted",key:u,uploadId:l,response:C}}else throw this._log("error",`${se}Abort request failed with status ${v.status}`),new Error(`${se}Abort request failed with status ${v.status}`)}catch(_){let g=_ instanceof Error?_.message:String(_);throw this._log("error",`${se}Failed to abort multipart upload for key ${u}: ${g}`),new Error(`${se}Failed to abort multipart upload for key ${u}: ${g}`)}}_buildCompleteMultipartUploadXml(u){return` - ${h.map(l=>` + ${u.map(l=>` ${l.partNumber} ${l.ETag} `).join("")} - `}async delete(h){this._checkKey(h),this._log("info",`Deleting object ${h}`);let l={[Te]:xe,[_e]:ye},c=me(h),{url:d,headers:_}=await this._sign("DELETE",c,{},l,""),g=await this._sendRequest(d,"DELETE",_);return g.status===204||g.status===200}async _sendRequest(h,l,c,d,_=[]){this._log("info",`Sending ${l} request to ${h}, headers: ${JSON.stringify(c)}`);let g=await fetch(h,{method:l,headers:c,body:["GET","HEAD"].includes(l)?void 0:d,signal:this.requestAbortTimeout!==void 0?AbortSignal.timeout(this.requestAbortTimeout):void 0});return!g.ok&&!_.includes(g.status)&&await this._handleErrorResponse(g),g}async _handleErrorResponse(h){let l=await h.text(),c=h.headers.get("x-amz-error-code")||"Unknown",d=h.headers.get("x-amz-error-message")||h.statusText;throw this._log("error",`${se}Request failed with status ${h.status}: ${c} - ${d},err body: ${l}`),new Error(`${se}Request failed with status ${h.status}: ${c} - ${d}, err body: ${l}`)}_buildCanonicalQueryString(h){return Object.keys(h).length<1?"":Object.keys(h).sort().map(l=>`${encodeURIComponent(l)}=${encodeURIComponent(h[l])}`).join("&")}async _getSignatureKey(h){let l=await Me(`AWS4${this.secretAccessKey}`,h),c=await Me(l,this.region),d=await Me(c,Ze);return Me(d,Xe)}},We=async h=>{let l=Tt("sha256");return l.update(h),l.digest("hex")},Me=async(h,l,c)=>{let d=Et("sha256",h);return d.update(l),d.digest(c)},He=h=>{let l={'"':"",""":"",""":"",""":"",""":""};return h.replace(/^("|"|")|("|"|")$/g,c=>l[c])},Be=h=>{let l=g=>g.replace(/"/g,'"').replace(/'/g,"'").replace(/</g,"<").replace(/>/g,">").replace(/&/g,"&"),c={},d=/<(\w)([-\w]+)(?:\/|[^>]*>((?:(?!<\1)[\s\S])*)<\/\1\2)>/gm,_;for(;_=d.exec(h);){let[,g,O,T]=_,v=g.toLowerCase()+O,R=T!=null?Be(T):!0;typeof R=="string"?c[v]=He(l(R)):Array.isArray(c[v])?c[v].push(R):c[v]=c[v]!=null?[c[v],R]:Xt[v]?[R]:R}return Object.keys(c).length?c:l(h)},Ot=Lt(Ht(),1),z={MISSING_ARGUMENT:"MISSING_ARGUMENT",COLLECTION_EXISTS:"COLLECTION_EXISTS",CREATE_COLLECTION_ERROR:"CREATE_COLLECTION_ERROR",RENAME_COLLECTION_ERROR:"RENAME_COLLECTION_ERROR",REMOVE_COLLECTION_ERROR:"REMOVE_COLLECTION_ERROR",UPDATE_COLLECTION_SCHEMA_ERROR:"UPDATE_COLLECTION_SCHEMA_ERROR",COLLECTION_NOT_FOUND:"COLLECTION_NOT_FOUND",SCHEMA_VALIDATION_ERROR:"SCHEMA_VALIDATION_ERROR",DOCUMENT_VALIDATION_ERROR:"DOCUMENT_VALIDATION_ERROR",S3_OPERATION_ERROR:"S3_OPERATION_ERROR",FIND_ERROR:"FIND_ERROR",FIND_ONE_ERROR:"FIND_ONE_ERROR",SAVE_DATA_ERROR:"SAVE_DATA_ERROR",INSERT_ERROR:"INSERT_ERROR",UPDATE_ERROR:"UPDATE_ERROR",UPDATE_ONE_ERROR:"UPDATE_ONE_ERROR",DELETE_ERROR:"DELETE_ERROR",COUNT_ERROR:"COUNT_ERROR",UNKNOWN_ERROR:"UNKNOWN_ERROR"},oe=class extends Error{constructor(h,l=z.UNKNOWN_ERROR){super(`lowstorageError: ${h} :: code: ${l}`),this.name=this.constructor.name,this.code=l,Error.captureStackTrace(this,this.constructor)}},Ne=class extends oe{constructor(h,l=z.SCHEMA_VALIDATION_ERROR){super(h,z.SCHEMA_VALIDATION_ERROR)}},Le=class extends oe{constructor(h,l=z.DOCUMENT_VALIDATION_ERROR){super(h,z.DOCUMENT_VALIDATION_ERROR)}},le=class extends oe{constructor(h,l){super(`S3 ${l} operation failed: ${h}`,z.S3_OPERATION_ERROR)}},Ye=(h,l)=>Object.keys(l).every(c=>h[c]===l[c]),tr=async()=>typeof et<"u"&&typeof et=="function"?et():typeof crypto<"u"&&typeof crypto=="object"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(h){var l=Math.random()*16|0,c=h==="x"?l:l&3|8;return c.toString(16)}),Qe=h=>{let l={name:"_id",type:"string",size:16,logicalType:"UUID"};return typeof h>"u"||h===null||("type"in h&&h.type==="record"&&"fields"in h&&Array.isArray(h.fields)?h.fields.some(d=>d.name==="_id")||h.fields.unshift(l):"type"in h&&h.type==="array"&&"items"in h&&h.items!==null&&typeof h.items=="object"&&"type"in h.items&&h.items.type==="record"&&"fields"in h.items&&Array.isArray(h.items.fields)&&(h.items.fields.some(d=>d.name==="_id")||h.items.fields.unshift(l))),h},Y="lowstorage",Oe="/",Rt="lowstorage",Re=".avro",rr=1024*1024,_t=5*rr,it=Buffer.from("","utf8"),tt=(h=z.DOCUMENT_VALIDATION_ERROR)=>{throw new Le(`${Y}: Invalid document or schema ${h}`)},Ve=(h="")=>{if(h.trim()===""||h===null||typeof h>"u"||h.length>255||h===null)throw new oe(`${Y}: Collection name is required, null or too long`,z.MISSING_ARGUMENT)},yr=class{constructor(h){this._checkArgs=l=>{let c=["accessKeyId","secretAccessKey","endpoint","bucketName"];for(let d of c)if(!l[d])throw new oe(`${Y}: ${d} is required`,z.MISSING_ARGUMENT)},this.s3=()=>this._s3,this._checkArgs(h),this._schemas=new Map,this._s3=new er(h),this._dirPrefix=h.dirPrefix||Rt,this._avroParse=Ot.Type}async listCollections(){try{let h=await this._s3.list(Oe,this._dirPrefix);return Array.isArray(h)?h.map(l=>l.key.slice(this._dirPrefix.length+1,-Re.length)):typeof h=="object"&&h!==null&&"keyCount"in h&&h.keyCount==="0"?[]:[]}catch(h){throw new le(`${Y}: ${h.message}`,z.S3_OPERATION_ERROR)}}async collectionExists(h=""){try{return Ve(h),!!await this._s3.fileExists(`${this._dirPrefix}${Oe}${h}${Re}`)}catch(l){if(l.message.includes("Not Found"))return!1;throw new oe(`${Y}: ${l.message}`,z.COLLECTION_NOT_FOUND)}}async createCollection(h="",l,c=[]){try{if(Ve(h),!await this.collectionExists(h)){if(typeof l<"u"&&l!==null)try{if(this._avroParse.forSchema(l))this._schemas.set(h,l);else throw new Ne(`${Y}: Schema is invalid: ${l} ${z.SCHEMA_VALIDATION_ERROR}`)}catch{throw new Ne(`${Y}: Schema is invalid: ${l}`,z.SCHEMA_VALIDATION_ERROR)}if(c.length>0&&l){let _=this._avroParse.forSchema({type:"array",items:l});await this._s3.put(`${this._dirPrefix}${Oe}${h}${Re}`,_.toBuffer(c))}else await this._s3.put(`${this._dirPrefix}${Oe}${h}${Re}`,it);return this.collection(h,l,!1)}throw new oe(`${Y}: Collection ${h} already exists`,z.COLLECTION_EXISTS)}catch(d){throw d instanceof oe?d:new oe(`${Y}: ${d.message}`,z.CREATE_COLLECTION_ERROR)}}async removeCollection(h=""){try{if(Ve(h),await this.collectionExists(h)){await this._s3.delete(`${this._dirPrefix}${Oe}${h}${Re}`);let c=await this.collectionExists(h);if(typeof c=="boolean"){if(!c)return this._schemas.delete(h),!0;throw new oe(`${Y}: Failed to delete collection ${h}`,z.S3_OPERATION_ERROR)}throw new le(`${Y}: Failed to delete collection ${h}`,z.S3_OPERATION_ERROR)}throw new oe(`${Y}: Collection ${h} does not exist`,z.REMOVE_COLLECTION_ERROR)}catch(l){throw l instanceof le?l:new oe(`${Y}: Failed to remove collection: ${l.message}`,z.REMOVE_COLLECTION_ERROR)}}async collection(h="",l,c=!0){try{Ve(h);let d=`${this._dirPrefix}${Oe}${h}${Re}`;if(!await this._s3.fileExists(d)){if(!c)throw new oe(`${Y}: Collection ${h} does not exist`,z.COLLECTION_NOT_FOUND);await this._s3.put(d,it)}let g=l||this._schemas.get(h)||void 0;return new ir(h,g,this._s3,this._dirPrefix)}catch(d){throw d.message.includes("unknown type")?new Ne(`${Y}: Schema input is invalid: ${d.message}`,z.SCHEMA_VALIDATION_ERROR):new oe(`${Y}: ${d.message}`,z.COLLECTION_NOT_FOUND)}}},ir=class St{constructor(l="",c,d,_=Rt,g=!1,O=_t){this.getProps=()=>({colName:this._colName,s3:this._s3,schema:this._schema,avroParse:this._avroParse,avroType:this._avroType,dirPrefix:this._dirPrefix,safeWrite:this._safeWrite,chunkSize:this._chunkSize}),this.setProps=T=>{this._colName=T.colName,this._schema=T.schema,this._s3=T.s3,this._avroParse=T.avroParse,this._avroType=T.avroType,this._dirPrefix=T.dirPrefix,this._safeWrite=T.safeWrite,this._chunkSize=T.chunkSize},this.setSafeWrite=T=>{this._safeWrite=T},this.getSafeWrite=()=>this._safeWrite,this.getAvroSchema=()=>this._schema,this.setAvroSchema=T=>{try{this._schema=Qe(T),this._avroType=typeof T>"u"?null:this._avroParse.forSchema(T)}catch(v){throw new oe(`${Y}: ${v.message}`,z.SCHEMA_VALIDATION_ERROR)}},this.getCollectionETag=()=>this._lastETag,this.inferAvroSchema=(T,v="record")=>{Array.isArray(T)&&(T=T[0]);let C=this._avroParse.forValue(T).schema();return Qe(C)},this._colName=l.trim(),this._s3=d,this._schema=Qe(c),this._dirPrefix=_,this._safeWrite=g,this._chunkSize=O||_t,this._s3.setMaxRequestSizeInBytes(this._chunkSize),this._avroParse=Ot.Type,this._lastETag="",this._dataCache=[],this._avroType=typeof c>"u"?null:this._avroParse.forSchema(c),this._key=`${this._dirPrefix}${Oe}${this._colName}${Re}`}async forceLoadData(){try{this._lastETag="";let l=await this._loadData();return this._dataCache=l,!0}catch(l){throw new oe(`${Y}: Failed to force update data: ${l.message}`,z.S3_OPERATION_ERROR)}}async _loadData(){try{if(this._avroType===null||typeof this._avroType>"u")throw new oe(`${Y}: Missing type definition. Configure before operations `,z.SCHEMA_VALIDATION_ERROR);let{etag:l,data:c}=await this._s3.getObjectWithETag(this._key,{"if-none-match":this._lastETag});if(c===null)return this._dataCache;this._lastETag=l===null?this._lastETag:l;let d=this._avroParse.forSchema({type:"array",items:this._avroType});if(c.length0?d.fromBuffer(Buffer.from(c,"utf8")):[],this._dataCache;let _=this._chunkSize,g=[Buffer.from(c,"utf8")],O=!0;for(;O;){let v=await this._s3.getResponse(this._key,!1,_,_+this._chunkSize),R=await v.text();g.push(Buffer.from(R,"utf8")),_+=this._chunkSize,parseInt(v.headers.get("content-length")||R.length.toString())-1)return this._dataCache=[],this._dataCache;throw new le(`${Y}: Failed to load data: ${l.message}`,z.S3_OPERATION_ERROR)}}async _saveData(l){try{if(this._avroType===null||typeof this._avroType>"u")throw new oe(`${Y}: Missing type definition. Configure before operations `,z.SCHEMA_VALIDATION_ERROR);let c=this._avroParse.forSchema({type:"array",items:this._avroType}),d=l.length>0?c.toBuffer(l):it;if(this._safeWrite&&this._lastETag!==""){let O=await this._s3.getEtag(this._key);if(O!==null&&O!==this._lastETag)return!1}let _=await this._s3.put(this._key,d);if(typeof _=="object"&&"status"in _&&_.status!==200)throw new le(`${Y}: Failed to save data`,z.S3_OPERATION_ERROR);let g=_.headers?.get("etag")||"";return g&&g.length>0&&(this._lastETag=this._s3.sanitizeETag(g),this._dataCache=l),!0}catch(c){throw c instanceof le?c:new oe(`${Y}: ${c.message}`,z.SAVE_DATA_ERROR)}}async insert(l,c){try{if(l==null)throw new oe(`${Y}: Document is required for insert`,z.INSERT_ERROR);if(typeof l!="object"&&!Array.isArray(l))throw new Le(`${Y}: Document must be an object or an array`,z.DOCUMENT_VALIDATION_ERROR);let d=Array.isArray(l)?l:[l],_=c?Qe(c):this._schema||this.inferAvroSchema(d[0]),g=this._avroParse.forSchema(_);if(!g)throw new Ne(`${Y}: Schema is required - Pass a schema to the insert method`,z.SCHEMA_VALIDATION_ERROR);this._avroType=g;let O=await this._loadData();for(let v of d){if(typeof v!="object"||v===null)throw new Le(`${Y}: Invalid input: input must be an object or an array of objects`,z.DOCUMENT_VALIDATION_ERROR);if(v._id=v._id||await tr(),this._avroType.isValid(v,{errorHook:tt,noUndeclaredFields:!0})===!0)O.push(v);else throw new Le(`${Y}: Invalid document or schema`,z.DOCUMENT_VALIDATION_ERROR)}if(!await this._saveData(O))throw new le(`${Y}: Failed to insert document`,z.S3_OPERATION_ERROR);return this.setAvroSchema(_),d}catch(d){throw d.message.includes("unknown type")?new Ne(`${Y}: Schema input is invalid: ${d.message}`,z.SCHEMA_VALIDATION_ERROR):d instanceof oe?d:new oe(`${Y} Insert operation failed: ${d.message}`,z.INSERT_ERROR)}}async find(l={},c={}){try{if(l==null)throw new oe(`${Y}: Query is required for update`,z.MISSING_ARGUMENT);let d=await this._loadData(),_=c.skip!==void 0?parseInt(String(c.skip),10):0,g=c.limit!==void 0?_+parseInt(String(c.limit),10):void 0;return d.filter(T=>Ye(T,l)).slice(_,g)}catch(d){throw new oe(`${Y}: Find operation failed: ${d.message}`,z.FIND_ERROR)}}async findOne(l={}){try{if(l===null)throw new oe(`${Y}: Query cannot be null`,z.INVALID_ARGUMENT);return(await this.find(l,{limit:1}))[0]||null}catch(c){throw c instanceof oe?c:new oe(`${Y}: FindOne operation failed: ${c.message}`,z.FIND_ONE_ERROR)}}async update(l={},c={},d={}){try{if(l==null||c===void 0||c===null)throw new oe(`${Y}: Query and update values are required for update`,z.MISSING_ARGUMENT);if(!this._avroType)throw new Ne(`${Y}: Schema is not defined for this collection`,z.SCHEMA_VALIDATION_ERROR);let _=await this._loadData();if(_.length===0)return 0;let g=0;for(let O=0;O<_.length;O++)if(Ye(_[O],l)){let T={..._[O],...c};if(this._avroType.isValid(T,{errorHook:tt,noUndeclaredFields:!0})===!0)_[O]=T,g++;else throw new Le(`${Y}: Invalid document or schema`,z.DOCUMENT_VALIDATION_ERROR)}if(g>0){if(!await this._saveData(_))throw new le(`${Y}: Failed to update document`,z.S3_OPERATION_ERROR)}else if(d&&"upsert"in d&&d.upsert){if(!await this.insert(c))throw new le(`${Y}: Failed to update document`,z.S3_OPERATION_ERROR);g=1}return g}catch(_){throw _ instanceof le?_:new oe(`${Y}: Update operation failed: ${_.message}`,z.UPDATE_ERROR)}}async updateOne(l={},c={},d={}){try{if(l==null||c===void 0||c===null)throw new oe(`${Y}: Query is required`,z.MISSING_ARGUMENT);if(!this._avroType)throw new Ne(`${Y}: Schema is not defined for this collection`,z.SCHEMA_VALIDATION_ERROR);let _=await this._loadData();if(_.length===0)return 0;let g=_.findIndex(O=>Ye(O,l));if(g!==-1){let O={..._[g],...c};if(this._avroType.isValid(O,{errorHook:tt,noUndeclaredFields:!0})===!0){if(_[g]=O,!await this._saveData(_))throw new le(`${Y}: Failed to update document`,z.S3_OPERATION_ERROR);return 1}else throw new Le(`${Y}: Invalid document or schema`,z.DOCUMENT_VALIDATION_ERROR)}if(d&&"upsert"in d&&d.upsert){if(!await this.insert(c))throw new le(`${Y}: Failed to update document`,z.S3_OPERATION_ERROR);return 1}return 0}catch(_){throw _ instanceof oe?_:new oe(`${Y}: UpdateOne operation failed: ${_.message}`,z.UPDATE_ONE_ERROR)}}async delete(l={}){try{if(l==null)throw new oe(`${Y}: Query is required`,z.MISSING_ARGUMENT);let c=await this._loadData();if(c.length===0)return 0;let d=c.length,_=c.filter(O=>!Ye(O,l));if(!await this._saveData(_))throw new le(`${Y}: Failed to delete document`,z.S3_OPERATION_ERROR);return d-_.length}catch(c){throw c instanceof le?c:new oe(`${Y}: Delete operation failed: ${c.message}`,z.DELETE_ERROR)}}async deleteAll(){try{let c=(await this._loadData()).length;if(!await this._saveData([]))throw new le(`${Y}: Failed to delete document`,z.S3_OPERATION_ERROR);return c}catch(l){throw l instanceof le?l:new oe(`${Y}: Delete operation failed: ${l.message}`,z.DELETE_ERROR)}}async count(l={}){try{return(await this.find(l)).length}catch(c){throw new oe(`${Y}: Count operation failed: ${c.message}`,z.COUNT_ERROR)}}async renameCollection(l,c=this._schema){try{if(Ve(l),await this._s3.fileExists(`${this._dirPrefix}${Oe}${l}${Re}`))throw new oe(`${Y}: Collection ${l} already exists`,z.COLLECTION_EXISTS);let _=c||this.getAvroSchema(),g=await this._loadData(),O=new St(l,_,this._s3,this._dirPrefix,this._safeWrite,this._chunkSize);return await O._saveData(g),await this._s3.delete(`${this._dirPrefix}${Oe}${this._colName}${Re}`),O}catch(d){throw d instanceof oe?d:new oe(`${Y}: Rename collection failed: ${d.message}`,z.RENAME_COLLECTION_ERROR)}}};export{yr as lowstorage,oe as lowstorageError,z as lowstorage_ERROR_CODES}; + `}async delete(u){this._checkKey(u),this._log("info",`Deleting object ${u}`);let l={[Ee]:xe,[de]:_e},h=me(u),{url:d,headers:_}=await this._sign("DELETE",h,{},l,""),g=await this._sendRequest(d,"DELETE",_);return g.status===204||g.status===200}async _sendRequest(u,l,h,d,_=[]){this._log("info",`Sending ${l} request to ${u}, headers: ${JSON.stringify(h)}`);let g=await fetch(u,{method:l,headers:h,body:["GET","HEAD"].includes(l)?void 0:d,signal:this.requestAbortTimeout!==void 0?AbortSignal.timeout(this.requestAbortTimeout):void 0});return this._log("info",`Response status: ${g.status,_}`),!g.ok&&!_.includes(g.status)&&await this._handleErrorResponse(g),g}async _handleErrorResponse(u){let l=await u.text(),h=u.headers.get("x-amz-error-code")||"Unknown",d=u.headers.get("x-amz-error-message")||u.statusText;throw this._log("error",`${se}Request failed with status ${u.status}: ${h} - ${d},err body: ${l}`),new Error(`${se}Request failed with status ${u.status}: ${h} - ${d}, err body: ${l}`)}_buildCanonicalQueryString(u){return Object.keys(u).length<1?"":Object.keys(u).sort().map(l=>`${encodeURIComponent(l)}=${encodeURIComponent(u[l])}`).join("&")}async _getSignatureKey(u){let l=await He(`AWS4${this.secretAccessKey}`,u),h=await He(l,this.region),d=await He(h,Ze);return He(d,Xe)}},Me=async u=>{let l=Tt("sha256");return l.update(u),l.digest("hex")},He=async(u,l,h)=>{let d=Et("sha256",u);return d.update(l),d.digest(h)},Ve=u=>{let l={'"':"",""":"",""":"",""":"",""":""};return u.replace(/^("|"|")|("|"|")$/g,h=>l[h])},Be=u=>{let l=g=>g.replace(/"/g,'"').replace(/'/g,"'").replace(/</g,"<").replace(/>/g,">").replace(/&/g,"&"),h={},d=/<(\w)([-\w]+)(?:\/|[^>]*>((?:(?!<\1)[\s\S])*)<\/\1\2)>/gm,_;for(;_=d.exec(u);){let[,g,O,T]=_,v=g.toLowerCase()+O,R=T!=null?Be(T):!0;typeof R=="string"?h[v]=Ve(l(R)):Array.isArray(h[v])?h[v].push(R):h[v]=h[v]!=null?[h[v],R]:Xt[v]?[R]:R}return Object.keys(h).length?h:l(u)},Ot=Lt(Ht(),1),q={MISSING_ARGUMENT:"MISSING_ARGUMENT",COLLECTION_EXISTS:"COLLECTION_EXISTS",CREATE_COLLECTION_ERROR:"CREATE_COLLECTION_ERROR",RENAME_COLLECTION_ERROR:"RENAME_COLLECTION_ERROR",REMOVE_COLLECTION_ERROR:"REMOVE_COLLECTION_ERROR",UPDATE_COLLECTION_SCHEMA_ERROR:"UPDATE_COLLECTION_SCHEMA_ERROR",COLLECTION_NOT_FOUND:"COLLECTION_NOT_FOUND",SCHEMA_VALIDATION_ERROR:"SCHEMA_VALIDATION_ERROR",DOCUMENT_VALIDATION_ERROR:"DOCUMENT_VALIDATION_ERROR",S3_OPERATION_ERROR:"S3_OPERATION_ERROR",FIND_ERROR:"FIND_ERROR",FIND_ONE_ERROR:"FIND_ONE_ERROR",SAVE_DATA_ERROR:"SAVE_DATA_ERROR",INSERT_ERROR:"INSERT_ERROR",UPDATE_ERROR:"UPDATE_ERROR",UPDATE_ONE_ERROR:"UPDATE_ONE_ERROR",DELETE_ERROR:"DELETE_ERROR",COUNT_ERROR:"COUNT_ERROR",UNKNOWN_ERROR:"UNKNOWN_ERROR"},ie=class extends Error{constructor(u,l=q.UNKNOWN_ERROR){super(`lowstorageError: ${u} :: code: ${l}`),this.name=this.constructor.name,this.code=l,Error.captureStackTrace(this,this.constructor)}},Ae=class extends ie{constructor(u,l=q.SCHEMA_VALIDATION_ERROR){super(u,q.SCHEMA_VALIDATION_ERROR)}},Le=class extends ie{constructor(u,l=q.DOCUMENT_VALIDATION_ERROR){super(u,q.DOCUMENT_VALIDATION_ERROR)}},le=class extends ie{constructor(u,l){super(`S3 ${l} operation failed: ${u}`,q.S3_OPERATION_ERROR)}},Ye=(u,l)=>Object.keys(l).every(h=>u[h]===l[h]),tr=async()=>typeof tt<"u"&&typeof tt=="function"?tt():typeof crypto<"u"&&typeof crypto=="object"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(u){var l=Math.random()*16|0,h=u==="x"?l:l&3|8;return h.toString(16)}),Qe=u=>{let l={name:"_id",type:"string",size:16,logicalType:"UUID"};return typeof u>"u"||u===null||("type"in u&&u.type==="record"&&"fields"in u&&Array.isArray(u.fields)?u.fields.some(d=>d.name==="_id")||u.fields.unshift(l):"type"in u&&u.type==="array"&&"items"in u&&u.items!==null&&typeof u.items=="object"&&"type"in u.items&&u.items.type==="record"&&"fields"in u.items&&Array.isArray(u.items.fields)&&(u.items.fields.some(d=>d.name==="_id")||u.items.fields.unshift(l))),u},K="lowstorage",Oe="/",Rt="lowstorage",Re=".avro",rr=1024*1024,_t=5*rr,nt=Buffer.from("","utf8"),rt=(u=q.DOCUMENT_VALIDATION_ERROR)=>{throw new Le(`${K}: Invalid document or schema ${u}`)},qe=(u="")=>{if(u.trim()===""||u===null||typeof u>"u"||u.length>255||u===null)throw new ie(`${K}: Collection name is required, null or too long`,q.MISSING_ARGUMENT)},yr=class{constructor(u){this._checkArgs=l=>{let h=["accessKeyId","secretAccessKey","endpoint","bucketName"];for(let d of h)if(!l[d])throw new ie(`${K}: ${d} is required`,q.MISSING_ARGUMENT)},this.s3=()=>this._s3,this._checkArgs(u),this._schemas=new Map,this._s3=new er(u),this._dirPrefix=u.dirPrefix||Rt,this._avroParse=Ot.Type}async checkIfStorageExists(){try{return!!await this._s3.bucketExists()}catch(u){if(u.message.includes("Not Found"))return!1;throw new ie(`${K}: ${u.message}`,q.S3_OPERATION_ERROR)}}async createStorage(){try{let u=await this.checkIfStorageExists();return u||await this._s3.createBucket()}catch(u){throw u instanceof ie?u:new ie(`${K}: ${u.message}`,q.S3_OPERATION_ERROR)}}async listCollections(){try{let u=await this._s3.list(Oe,this._dirPrefix);return Array.isArray(u)?u.map(l=>l.key.slice(this._dirPrefix.length+1,-Re.length)):typeof u=="object"&&u!==null&&"keyCount"in u&&u.keyCount==="0"?[]:[]}catch(u){throw new le(`${K}: ${u.message}`,q.S3_OPERATION_ERROR)}}async collectionExists(u=""){try{return qe(u),!!await this._s3.fileExists(`${this._dirPrefix}${Oe}${u}${Re}`)}catch(l){if(l.message.includes("Not Found"))return!1;throw new ie(`${K}: ${l.message}`,q.COLLECTION_NOT_FOUND)}}async createCollection(u="",l,h=[]){try{if(qe(u),!await this.collectionExists(u)){if(typeof l<"u"&&l!==null)try{if(this._avroParse.forSchema(l))this._schemas.set(u,l);else throw new Ae(`${K}: Schema is invalid: ${l} ${q.SCHEMA_VALIDATION_ERROR}`)}catch{throw new Ae(`${K}: Schema is invalid: ${l}`,q.SCHEMA_VALIDATION_ERROR)}if(h.length>0&&l){let _=this._avroParse.forSchema({type:"array",items:l});await this._s3.put(`${this._dirPrefix}${Oe}${u}${Re}`,_.toBuffer(h))}else await this._s3.put(`${this._dirPrefix}${Oe}${u}${Re}`,nt);return this.collection(u,l,!1)}throw new ie(`${K}: Collection ${u} already exists`,q.COLLECTION_EXISTS)}catch(d){throw d instanceof ie?d:new ie(`${K}: ${d.message}`,q.CREATE_COLLECTION_ERROR)}}async removeCollection(u=""){try{if(qe(u),await this.collectionExists(u)){await this._s3.delete(`${this._dirPrefix}${Oe}${u}${Re}`);let h=await this.collectionExists(u);if(typeof h=="boolean"){if(!h)return this._schemas.delete(u),!0;throw new ie(`${K}: Failed to delete collection ${u}`,q.S3_OPERATION_ERROR)}throw new le(`${K}: Failed to delete collection ${u}`,q.S3_OPERATION_ERROR)}throw new ie(`${K}: Collection ${u} does not exist`,q.REMOVE_COLLECTION_ERROR)}catch(l){throw l instanceof le?l:new ie(`${K}: Failed to remove collection: ${l.message}`,q.REMOVE_COLLECTION_ERROR)}}async collection(u="",l,h=!0){try{qe(u);let d=`${this._dirPrefix}${Oe}${u}${Re}`;if(!await this._s3.fileExists(d)){if(!h)throw new ie(`${K}: Collection ${u} does not exist`,q.COLLECTION_NOT_FOUND);await this._s3.put(d,nt)}let g=l||this._schemas.get(u)||void 0;return new ir(u,g,this._s3,this._dirPrefix)}catch(d){throw d.message.includes("unknown type")?new Ae(`${K}: Schema input is invalid: ${d.message}`,q.SCHEMA_VALIDATION_ERROR):new ie(`${K}: ${d.message}`,q.COLLECTION_NOT_FOUND)}}},ir=class kt{constructor(l="",h,d,_=Rt,g=!1,O=_t){this.getProps=()=>({colName:this._colName,s3:this._s3,schema:this._schema,avroParse:this._avroParse,avroType:this._avroType,dirPrefix:this._dirPrefix,safeWrite:this._safeWrite,chunkSize:this._chunkSize}),this.setProps=T=>{this._colName=T.colName,this._schema=T.schema,this._s3=T.s3,this._avroParse=T.avroParse,this._avroType=T.avroType,this._dirPrefix=T.dirPrefix,this._safeWrite=T.safeWrite,this._chunkSize=T.chunkSize},this.setSafeWrite=T=>{this._safeWrite=T},this.getSafeWrite=()=>this._safeWrite,this.getAvroSchema=()=>this._schema,this.setAvroSchema=T=>{try{this._schema=Qe(T),this._avroType=typeof T>"u"?null:this._avroParse.forSchema(T)}catch(v){throw new ie(`${K}: ${v.message}`,q.SCHEMA_VALIDATION_ERROR)}},this.getCollectionETag=()=>this._lastETag,this.inferAvroSchema=(T,v="record")=>{Array.isArray(T)&&(T=T[0]);let C=this._avroParse.forValue(T).schema();return Qe(C)},this._colName=l.trim(),this._s3=d,this._schema=Qe(h),this._dirPrefix=_,this._safeWrite=g,this._chunkSize=O||_t,this._s3.setMaxRequestSizeInBytes(this._chunkSize),this._avroParse=Ot.Type,this._lastETag="",this._dataCache=[],this._avroType=typeof h>"u"?null:this._avroParse.forSchema(h),this._key=`${this._dirPrefix}${Oe}${this._colName}${Re}`}async forceLoadData(){try{this._lastETag="";let l=await this._loadData();return this._dataCache=l,!0}catch(l){throw new ie(`${K}: Failed to force update data: ${l.message}`,q.S3_OPERATION_ERROR)}}async _loadData(){try{if(this._avroType===null||typeof this._avroType>"u")throw new ie(`${K}: Missing type definition. Configure before operations `,q.SCHEMA_VALIDATION_ERROR);let{etag:l,data:h}=await this._s3.getObjectWithETag(this._key,{"if-none-match":this._lastETag});if(h===null)return this._dataCache;this._lastETag=l===null?this._lastETag:l;let d=this._avroParse.forSchema({type:"array",items:this._avroType});if(h.length0?d.fromBuffer(Buffer.from(h,"utf8")):[],this._dataCache;let _=this._chunkSize,g=[Buffer.from(h,"utf8")],O=!0;for(;O;){let v=await this._s3.getResponse(this._key,!1,_,_+this._chunkSize),R=await v.text();g.push(Buffer.from(R,"utf8")),_+=this._chunkSize,parseInt(v.headers.get("content-length")||R.length.toString())-1)return this._dataCache=[],this._dataCache;throw new le(`${K}: Failed to load data: ${l.message}`,q.S3_OPERATION_ERROR)}}async _saveData(l){try{if(this._avroType===null||typeof this._avroType>"u")throw new ie(`${K}: Missing type definition. Configure before operations `,q.SCHEMA_VALIDATION_ERROR);let h=this._avroParse.forSchema({type:"array",items:this._avroType}),d=l.length>0?h.toBuffer(l):nt;if(this._safeWrite&&this._lastETag!==""){let O=await this._s3.getEtag(this._key);if(O!==null&&O!==this._lastETag)return!1}let _=await this._s3.put(this._key,d);if(typeof _=="object"&&"status"in _&&_.status!==200)throw new le(`${K}: Failed to save data`,q.S3_OPERATION_ERROR);let g=_.headers?.get("etag")||"";return g&&g.length>0&&(this._lastETag=this._s3.sanitizeETag(g),this._dataCache=l),!0}catch(h){throw h instanceof le?h:new ie(`${K}: ${h.message}`,q.SAVE_DATA_ERROR)}}async insert(l,h){try{if(l==null)throw new ie(`${K}: Document is required for insert`,q.INSERT_ERROR);if(typeof l!="object"&&!Array.isArray(l))throw new Le(`${K}: Document must be an object or an array`,q.DOCUMENT_VALIDATION_ERROR);let d=Array.isArray(l)?l:[l],_=h?Qe(h):this._schema||this.inferAvroSchema(d[0]),g=this._avroParse.forSchema(_);if(!g)throw new Ae(`${K}: Schema is required - Pass a schema to the insert method`,q.SCHEMA_VALIDATION_ERROR);this._avroType=g;let O=await this._loadData();for(let v of d){if(typeof v!="object"||v===null)throw new Le(`${K}: Invalid input: input must be an object or an array of objects`,q.DOCUMENT_VALIDATION_ERROR);if(v._id=v._id||await tr(),this._avroType.isValid(v,{errorHook:rt,noUndeclaredFields:!0})===!0)O.push(v);else throw new Le(`${K}: Invalid document or schema`,q.DOCUMENT_VALIDATION_ERROR)}if(!await this._saveData(O))throw new le(`${K}: Failed to insert document`,q.S3_OPERATION_ERROR);return this.setAvroSchema(_),d}catch(d){throw d.message.includes("unknown type")?new Ae(`${K}: Schema input is invalid: ${d.message}`,q.SCHEMA_VALIDATION_ERROR):d instanceof ie?d:new ie(`${K} Insert operation failed: ${d.message}`,q.INSERT_ERROR)}}async find(l={},h={}){try{if(l==null)throw new ie(`${K}: Query is required for update`,q.MISSING_ARGUMENT);let d=await this._loadData(),_=h.skip!==void 0?parseInt(String(h.skip),10):0,g=h.limit!==void 0?_+parseInt(String(h.limit),10):void 0;return d.filter(T=>Ye(T,l)).slice(_,g)}catch(d){throw new ie(`${K}: Find operation failed: ${d.message}`,q.FIND_ERROR)}}async findOne(l={}){try{if(l===null)throw new ie(`${K}: Query cannot be null`,q.INVALID_ARGUMENT);return(await this.find(l,{limit:1}))[0]||null}catch(h){throw h instanceof ie?h:new ie(`${K}: FindOne operation failed: ${h.message}`,q.FIND_ONE_ERROR)}}async update(l={},h={},d={}){try{if(l==null||h===void 0||h===null)throw new ie(`${K}: Query and update values are required for update`,q.MISSING_ARGUMENT);if(!this._avroType)throw new Ae(`${K}: Schema is not defined for this collection`,q.SCHEMA_VALIDATION_ERROR);let _=await this._loadData();if(_.length===0)return 0;let g=0;for(let O=0;O<_.length;O++)if(Ye(_[O],l)){let T={..._[O],...h};if(this._avroType.isValid(T,{errorHook:rt,noUndeclaredFields:!0})===!0)_[O]=T,g++;else throw new Le(`${K}: Invalid document or schema`,q.DOCUMENT_VALIDATION_ERROR)}if(g>0){if(!await this._saveData(_))throw new le(`${K}: Failed to update document`,q.S3_OPERATION_ERROR)}else if(d&&"upsert"in d&&d.upsert){if(!await this.insert(h))throw new le(`${K}: Failed to update document`,q.S3_OPERATION_ERROR);g=1}return g}catch(_){throw _ instanceof le?_:new ie(`${K}: Update operation failed: ${_.message}`,q.UPDATE_ERROR)}}async updateOne(l={},h={},d={}){try{if(l==null||h===void 0||h===null)throw new ie(`${K}: Query is required`,q.MISSING_ARGUMENT);if(!this._avroType)throw new Ae(`${K}: Schema is not defined for this collection`,q.SCHEMA_VALIDATION_ERROR);let _=await this._loadData();if(_.length===0)return 0;let g=_.findIndex(O=>Ye(O,l));if(g!==-1){let O={..._[g],...h};if(this._avroType.isValid(O,{errorHook:rt,noUndeclaredFields:!0})===!0){if(_[g]=O,!await this._saveData(_))throw new le(`${K}: Failed to update document`,q.S3_OPERATION_ERROR);return 1}else throw new Le(`${K}: Invalid document or schema`,q.DOCUMENT_VALIDATION_ERROR)}if(d&&"upsert"in d&&d.upsert){if(!await this.insert(h))throw new le(`${K}: Failed to update document`,q.S3_OPERATION_ERROR);return 1}return 0}catch(_){throw _ instanceof ie?_:new ie(`${K}: UpdateOne operation failed: ${_.message}`,q.UPDATE_ONE_ERROR)}}async delete(l={}){try{if(l==null)throw new ie(`${K}: Query is required`,q.MISSING_ARGUMENT);let h=await this._loadData();if(h.length===0)return 0;let d=h.length,_=h.filter(O=>!Ye(O,l));if(!await this._saveData(_))throw new le(`${K}: Failed to delete document`,q.S3_OPERATION_ERROR);return d-_.length}catch(h){throw h instanceof le?h:new ie(`${K}: Delete operation failed: ${h.message}`,q.DELETE_ERROR)}}async deleteAll(){try{let h=(await this._loadData()).length;if(!await this._saveData([]))throw new le(`${K}: Failed to delete document`,q.S3_OPERATION_ERROR);return h}catch(l){throw l instanceof le?l:new ie(`${K}: Delete operation failed: ${l.message}`,q.DELETE_ERROR)}}async count(l={}){try{return(await this.find(l)).length}catch(h){throw new ie(`${K}: Count operation failed: ${h.message}`,q.COUNT_ERROR)}}async renameCollection(l,h=this._schema){try{if(qe(l),await this._s3.fileExists(`${this._dirPrefix}${Oe}${l}${Re}`))throw new ie(`${K}: Collection ${l} already exists`,q.COLLECTION_EXISTS);let _=h||this.getAvroSchema(),g=await this._loadData(),O=new kt(l,_,this._s3,this._dirPrefix,this._safeWrite,this._chunkSize);return await O._saveData(g),await this._s3.delete(`${this._dirPrefix}${Oe}${this._colName}${Re}`),O}catch(d){throw d instanceof ie?d:new ie(`${K}: Rename collection failed: ${d.message}`,q.RENAME_COLLECTION_ERROR)}}};export{yr as lowstorage,ie as lowstorageError,q as lowstorage_ERROR_CODES}; //# sourceMappingURL=lowstorage.min.js.map diff --git a/build/lowstorage.min.js.map b/build/lowstorage.min.js.map index 47c749c..08bab5d 100644 --- a/build/lowstorage.min.js.map +++ b/build/lowstorage.min.js.map @@ -1,7 +1,7 @@ { "version": 3, "sources": [""], - "sourcesContent": ["import __import_BUFFER from \"buffer\";\nimport __import_CRYPTO from \"crypto\";\nimport __import_UTIL from \"util\";\nimport __import_STREAM from \"stream\";\nimport __import_ZLIB from \"zlib\";\nimport __import_EVENTS from \"events\";\nimport __import_FS from \"fs\";\nimport __import_PATH from \"path\";\n\nvar __create = Object.create;\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __getProtoOf = Object.getPrototypeOf;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __require = /* @__PURE__ */ ((x2) => typeof require !== \"undefined\" ? require : typeof Proxy !== \"undefined\" ? new Proxy(x2, {\n get: (a, b2) => (typeof require !== \"undefined\" ? require : a)[b2]\n}) : x2)(function(x2) {\n if (typeof require !== \"undefined\") return require.apply(this, arguments);\n throw Error('Dynamic require of \"' + x2 + '\" is not supported');\n});\nvar __commonJS = (cb, mod) => function __require2() {\n return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(\n // If the importer is in node compatibility mode or this is not an ESM\n // file that has been converted to a CommonJS file using a Babel-\n // compatible transform (i.e. \"__esModule\" has not been set), then set\n // \"default\" to the CommonJS \"module.exports\" for node compatibility.\n isNodeMode || !mod || !mod.__esModule ? __defProp(target, \"default\", { value: mod, enumerable: true }) : target,\n mod\n));\n\n// node_modules/avsc/lib/utils.js\nvar require_utils = __commonJS({\n \"node_modules/avsc/lib/utils.js\"(exports, module) {\n \"use strict\";\n var buffer = __import_BUFFER;\n var crypto2 = __import_CRYPTO;\n var util = __import_UTIL;\n var Buffer2 = buffer.Buffer;\n var POOL = new BufferPool(4096);\n var NAME_PATTERN = /^[A-Za-z_][A-Za-z0-9_]*$/;\n var f2 = util.format;\n function newBuffer(size) {\n if (typeof Buffer2.alloc == \"function\") {\n return Buffer2.alloc(size);\n } else {\n return new Buffer2(size);\n }\n }\n function bufferFrom(data, enc) {\n if (typeof Buffer2.from == \"function\") {\n return Buffer2.from(data, enc);\n } else {\n return new Buffer2(data, enc);\n }\n }\n function capitalize(s) {\n return s.charAt(0).toUpperCase() + s.slice(1);\n }\n function compare(n1, n2) {\n return n1 === n2 ? 0 : n1 < n2 ? -1 : 1;\n }\n function getOption(opts, key, def) {\n var value = opts[key];\n return value === void 0 ? def : value;\n }\n function getHash(str, algorithm) {\n algorithm = algorithm || \"md5\";\n var hash = crypto2.createHash(algorithm);\n hash.end(str);\n return hash.read();\n }\n function singleIndexOf(arr, v2) {\n var pos = -1;\n var i, l;\n if (!arr) {\n return -1;\n }\n for (i = 0, l = arr.length; i < l; i++) {\n if (arr[i] === v2) {\n if (pos >= 0) {\n return -2;\n }\n pos = i;\n }\n }\n return pos;\n }\n function toMap(arr, fn) {\n var obj = {};\n var i, elem;\n for (i = 0; i < arr.length; i++) {\n elem = arr[i];\n obj[fn(elem)] = elem;\n }\n return obj;\n }\n function objectValues(obj) {\n return Object.keys(obj).map(function(key) {\n return obj[key];\n });\n }\n function hasDuplicates(arr, fn) {\n var obj = /* @__PURE__ */ Object.create(null);\n var i, l, elem;\n for (i = 0, l = arr.length; i < l; i++) {\n elem = arr[i];\n if (fn) {\n elem = fn(elem);\n }\n if (obj[elem]) {\n return true;\n }\n obj[elem] = true;\n }\n return false;\n }\n function copyOwnProperties(src, dst, overwrite) {\n var names = Object.getOwnPropertyNames(src);\n var i, l, name;\n for (i = 0, l = names.length; i < l; i++) {\n name = names[i];\n if (!dst.hasOwnProperty(name) || overwrite) {\n var descriptor = Object.getOwnPropertyDescriptor(src, name);\n Object.defineProperty(dst, name, descriptor);\n }\n }\n return dst;\n }\n function isValidName(str) {\n return NAME_PATTERN.test(str);\n }\n function qualify(name, namespace) {\n if (~name.indexOf(\".\")) {\n name = name.replace(/^\\./, \"\");\n } else if (namespace) {\n name = namespace + \".\" + name;\n }\n name.split(\".\").forEach(function(part) {\n if (!isValidName(part)) {\n throw new Error(f2(\"invalid name: %j\", name));\n }\n });\n return name;\n }\n function unqualify(name) {\n var parts = name.split(\".\");\n return parts[parts.length - 1];\n }\n function impliedNamespace(name) {\n var match = /^(.*)\\.[^.]+$/.exec(name);\n return match ? match[1] : void 0;\n }\n function jsonEnd(str, pos) {\n pos = pos | 0;\n var c = str.charAt(pos++);\n if (/[\\d-]/.test(c)) {\n while (/[eE\\d.+-]/.test(str.charAt(pos))) {\n pos++;\n }\n return pos;\n } else if (/true|null/.test(str.slice(pos - 1, pos + 3))) {\n return pos + 3;\n } else if (/false/.test(str.slice(pos - 1, pos + 4))) {\n return pos + 4;\n }\n var depth = 0;\n var literal = false;\n do {\n switch (c) {\n case \"{\":\n case \"[\":\n if (!literal) {\n depth++;\n }\n break;\n case \"}\":\n case \"]\":\n if (!literal && !--depth) {\n return pos;\n }\n break;\n case '\"':\n literal = !literal;\n if (!depth && !literal) {\n return pos;\n }\n break;\n case \"\\\\\":\n pos++;\n }\n } while (c = str.charAt(pos++));\n return -1;\n }\n function abstractFunction() {\n throw new Error(\"abstract\");\n }\n function addDeprecatedGetters(obj, props) {\n var proto = obj.prototype;\n var i, l, prop, getter;\n for (i = 0, l = props.length; i < l; i++) {\n prop = props[i];\n getter = \"get\" + capitalize(prop);\n proto[getter] = util.deprecate(\n createGetter(prop),\n \"use `.\" + prop + \"` instead of `.\" + getter + \"()`\"\n );\n }\n function createGetter(prop2) {\n return function() {\n var delegate = this[prop2];\n return typeof delegate == \"function\" ? delegate.apply(this, arguments) : delegate;\n };\n }\n }\n function BufferPool(len) {\n this._len = len | 0;\n this._pos = 0;\n this._slab = newBuffer(this._len);\n }\n BufferPool.prototype.alloc = function(len) {\n if (len < 0) {\n throw new Error(\"negative length\");\n }\n var maxLen = this._len;\n if (len > maxLen) {\n return newBuffer(len);\n }\n if (this._pos + len > maxLen) {\n this._slab = newBuffer(maxLen);\n this._pos = 0;\n }\n return this._slab.slice(this._pos, this._pos += len);\n };\n function Lcg(seed) {\n var a = 1103515245;\n var c = 12345;\n var m2 = Math.pow(2, 31);\n var state = Math.floor(seed || Math.random() * (m2 - 1));\n this._max = m2;\n this._nextInt = function() {\n return state = (a * state + c) % m2;\n };\n }\n Lcg.prototype.nextBoolean = function() {\n return !!(this._nextInt() % 2);\n };\n Lcg.prototype.nextInt = function(start, end) {\n if (end === void 0) {\n end = start;\n start = 0;\n }\n end = end === void 0 ? this._max : end;\n return start + Math.floor(this.nextFloat() * (end - start));\n };\n Lcg.prototype.nextFloat = function(start, end) {\n if (end === void 0) {\n end = start;\n start = 0;\n }\n end = end === void 0 ? 1 : end;\n return start + (end - start) * this._nextInt() / this._max;\n };\n Lcg.prototype.nextString = function(len, flags) {\n len |= 0;\n flags = flags || \"aA\";\n var mask = \"\";\n if (flags.indexOf(\"a\") > -1) {\n mask += \"abcdefghijklmnopqrstuvwxyz\";\n }\n if (flags.indexOf(\"A\") > -1) {\n mask += \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\";\n }\n if (flags.indexOf(\"#\") > -1) {\n mask += \"0123456789\";\n }\n if (flags.indexOf(\"!\") > -1) {\n mask += \"~`!@#$%^&*()_+-={}[]:\\\";'<>?,./|\\\\\";\n }\n var result = [];\n for (var i = 0; i < len; i++) {\n result.push(this.choice(mask));\n }\n return result.join(\"\");\n };\n Lcg.prototype.nextBuffer = function(len) {\n var arr = [];\n var i;\n for (i = 0; i < len; i++) {\n arr.push(this.nextInt(256));\n }\n return bufferFrom(arr);\n };\n Lcg.prototype.choice = function(arr) {\n var len = arr.length;\n if (!len) {\n throw new Error(\"choosing from empty array\");\n }\n return arr[this.nextInt(len)];\n };\n function OrderedQueue() {\n this._index = 0;\n this._items = [];\n }\n OrderedQueue.prototype.push = function(item) {\n var items = this._items;\n var i = items.length | 0;\n var j2;\n items.push(item);\n while (i > 0 && items[i].index < items[j2 = i - 1 >> 1].index) {\n item = items[i];\n items[i] = items[j2];\n items[j2] = item;\n i = j2;\n }\n };\n OrderedQueue.prototype.pop = function() {\n var items = this._items;\n var len = items.length - 1 | 0;\n var first = items[0];\n if (!first || first.index > this._index) {\n return null;\n }\n this._index++;\n if (!len) {\n items.pop();\n return first;\n }\n items[0] = items.pop();\n var mid = len >> 1;\n var i = 0;\n var i1, i2, j2, item, c, c1, c2;\n while (i < mid) {\n item = items[i];\n i1 = (i << 1) + 1;\n i2 = i + 1 << 1;\n c1 = items[i1];\n c2 = items[i2];\n if (!c2 || c1.index <= c2.index) {\n c = c1;\n j2 = i1;\n } else {\n c = c2;\n j2 = i2;\n }\n if (c.index >= item.index) {\n break;\n }\n items[j2] = item;\n items[i] = c;\n i = j2;\n }\n return first;\n };\n function Tap(buf, pos) {\n this.buf = buf;\n this.pos = pos | 0;\n if (this.pos < 0) {\n throw new Error(\"negative offset\");\n }\n }\n Tap.prototype.isValid = function() {\n return this.pos <= this.buf.length;\n };\n Tap.prototype._invalidate = function() {\n this.pos = this.buf.length + 1;\n };\n Tap.prototype.readBoolean = function() {\n return !!this.buf[this.pos++];\n };\n Tap.prototype.skipBoolean = function() {\n this.pos++;\n };\n Tap.prototype.writeBoolean = function(b2) {\n this.buf[this.pos++] = !!b2;\n };\n Tap.prototype.readInt = Tap.prototype.readLong = function() {\n var n = 0;\n var k2 = 0;\n var buf = this.buf;\n var b2, h, f3, fk;\n do {\n b2 = buf[this.pos++];\n h = b2 & 128;\n n |= (b2 & 127) << k2;\n k2 += 7;\n } while (h && k2 < 28);\n if (h) {\n f3 = n;\n fk = 268435456;\n do {\n b2 = buf[this.pos++];\n f3 += (b2 & 127) * fk;\n fk *= 128;\n } while (b2 & 128);\n return (f3 % 2 ? -(f3 + 1) : f3) / 2;\n }\n return n >> 1 ^ -(n & 1);\n };\n Tap.prototype.skipInt = Tap.prototype.skipLong = function() {\n var buf = this.buf;\n while (buf[this.pos++] & 128) {\n }\n };\n Tap.prototype.writeInt = Tap.prototype.writeLong = function(n) {\n var buf = this.buf;\n var f3, m2;\n if (n >= -1073741824 && n < 1073741824) {\n m2 = n >= 0 ? n << 1 : ~n << 1 | 1;\n do {\n buf[this.pos] = m2 & 127;\n m2 >>= 7;\n } while (m2 && (buf[this.pos++] |= 128));\n } else {\n f3 = n >= 0 ? n * 2 : -n * 2 - 1;\n do {\n buf[this.pos] = f3 & 127;\n f3 /= 128;\n } while (f3 >= 1 && (buf[this.pos++] |= 128));\n }\n this.pos++;\n };\n Tap.prototype.readFloat = function() {\n var buf = this.buf;\n var pos = this.pos;\n this.pos += 4;\n if (this.pos > buf.length) {\n return 0;\n }\n return this.buf.readFloatLE(pos);\n };\n Tap.prototype.skipFloat = function() {\n this.pos += 4;\n };\n Tap.prototype.writeFloat = function(f3) {\n var buf = this.buf;\n var pos = this.pos;\n this.pos += 4;\n if (this.pos > buf.length) {\n return;\n }\n return this.buf.writeFloatLE(f3, pos);\n };\n Tap.prototype.readDouble = function() {\n var buf = this.buf;\n var pos = this.pos;\n this.pos += 8;\n if (this.pos > buf.length) {\n return 0;\n }\n return this.buf.readDoubleLE(pos);\n };\n Tap.prototype.skipDouble = function() {\n this.pos += 8;\n };\n Tap.prototype.writeDouble = function(d) {\n var buf = this.buf;\n var pos = this.pos;\n this.pos += 8;\n if (this.pos > buf.length) {\n return;\n }\n return this.buf.writeDoubleLE(d, pos);\n };\n Tap.prototype.readFixed = function(len) {\n var pos = this.pos;\n this.pos += len;\n if (this.pos > this.buf.length) {\n return;\n }\n var fixed = POOL.alloc(len);\n this.buf.copy(fixed, 0, pos, pos + len);\n return fixed;\n };\n Tap.prototype.skipFixed = function(len) {\n this.pos += len;\n };\n Tap.prototype.writeFixed = function(buf, len) {\n len = len || buf.length;\n var pos = this.pos;\n this.pos += len;\n if (this.pos > this.buf.length) {\n return;\n }\n buf.copy(this.buf, pos, 0, len);\n };\n Tap.prototype.readBytes = function() {\n var len = this.readLong();\n if (len < 0) {\n this._invalidate();\n return;\n }\n return this.readFixed(len);\n };\n Tap.prototype.skipBytes = function() {\n var len = this.readLong();\n if (len < 0) {\n this._invalidate();\n return;\n }\n this.pos += len;\n };\n Tap.prototype.writeBytes = function(buf) {\n var len = buf.length;\n this.writeLong(len);\n this.writeFixed(buf, len);\n };\n if (typeof Buffer2.prototype.utf8Slice == \"function\") {\n Tap.prototype.readString = function() {\n var len = this.readLong();\n if (len < 0) {\n this._invalidate();\n return \"\";\n }\n var pos = this.pos;\n var buf = this.buf;\n this.pos += len;\n if (this.pos > buf.length) {\n return;\n }\n return this.buf.utf8Slice(pos, pos + len);\n };\n } else {\n Tap.prototype.readString = function() {\n var len = this.readLong();\n if (len < 0) {\n this._invalidate();\n return \"\";\n }\n var pos = this.pos;\n var buf = this.buf;\n this.pos += len;\n if (this.pos > buf.length) {\n return;\n }\n return this.buf.slice(pos, pos + len).toString();\n };\n }\n Tap.prototype.skipString = function() {\n var len = this.readLong();\n if (len < 0) {\n this._invalidate();\n return;\n }\n this.pos += len;\n };\n Tap.prototype.writeString = function(s) {\n var len = Buffer2.byteLength(s);\n var buf = this.buf;\n this.writeLong(len);\n var pos = this.pos;\n this.pos += len;\n if (this.pos > buf.length) {\n return;\n }\n if (len > 64 && typeof Buffer2.prototype.utf8Write == \"function\") {\n buf.utf8Write(s, pos, len);\n } else {\n var i, l, c1, c2;\n for (i = 0, l = len; i < l; i++) {\n c1 = s.charCodeAt(i);\n if (c1 < 128) {\n buf[pos++] = c1;\n } else if (c1 < 2048) {\n buf[pos++] = c1 >> 6 | 192;\n buf[pos++] = c1 & 63 | 128;\n } else if ((c1 & 64512) === 55296 && ((c2 = s.charCodeAt(i + 1)) & 64512) === 56320) {\n c1 = 65536 + ((c1 & 1023) << 10) + (c2 & 1023);\n i++;\n buf[pos++] = c1 >> 18 | 240;\n buf[pos++] = c1 >> 12 & 63 | 128;\n buf[pos++] = c1 >> 6 & 63 | 128;\n buf[pos++] = c1 & 63 | 128;\n } else {\n buf[pos++] = c1 >> 12 | 224;\n buf[pos++] = c1 >> 6 & 63 | 128;\n buf[pos++] = c1 & 63 | 128;\n }\n }\n }\n };\n if (typeof Buffer2.prototype.latin1Write == \"function\") {\n Tap.prototype.writeBinary = function(str, len) {\n var pos = this.pos;\n this.pos += len;\n if (this.pos > this.buf.length) {\n return;\n }\n this.buf.latin1Write(str, pos, len);\n };\n } else if (typeof Buffer2.prototype.binaryWrite == \"function\") {\n Tap.prototype.writeBinary = function(str, len) {\n var pos = this.pos;\n this.pos += len;\n if (this.pos > this.buf.length) {\n return;\n }\n this.buf.binaryWrite(str, pos, len);\n };\n } else {\n Tap.prototype.writeBinary = function(s, len) {\n var pos = this.pos;\n this.pos += len;\n if (this.pos > this.buf.length) {\n return;\n }\n this.buf.write(s, pos, len, \"binary\");\n };\n }\n Tap.prototype.matchBoolean = function(tap) {\n return this.buf[this.pos++] - tap.buf[tap.pos++];\n };\n Tap.prototype.matchInt = Tap.prototype.matchLong = function(tap) {\n var n1 = this.readLong();\n var n2 = tap.readLong();\n return n1 === n2 ? 0 : n1 < n2 ? -1 : 1;\n };\n Tap.prototype.matchFloat = function(tap) {\n var n1 = this.readFloat();\n var n2 = tap.readFloat();\n return n1 === n2 ? 0 : n1 < n2 ? -1 : 1;\n };\n Tap.prototype.matchDouble = function(tap) {\n var n1 = this.readDouble();\n var n2 = tap.readDouble();\n return n1 === n2 ? 0 : n1 < n2 ? -1 : 1;\n };\n Tap.prototype.matchFixed = function(tap, len) {\n return this.readFixed(len).compare(tap.readFixed(len));\n };\n Tap.prototype.matchBytes = Tap.prototype.matchString = function(tap) {\n var l1 = this.readLong();\n var p1 = this.pos;\n this.pos += l1;\n var l2 = tap.readLong();\n var p2 = tap.pos;\n tap.pos += l2;\n var b1 = this.buf.slice(p1, this.pos);\n var b2 = tap.buf.slice(p2, tap.pos);\n return b1.compare(b2);\n };\n Tap.prototype.unpackLongBytes = function() {\n var res = newBuffer(8);\n var n = 0;\n var i = 0;\n var j2 = 6;\n var buf = this.buf;\n var b2, neg;\n b2 = buf[this.pos++];\n neg = b2 & 1;\n res.fill(0);\n n |= (b2 & 127) >> 1;\n while (b2 & 128) {\n b2 = buf[this.pos++];\n n |= (b2 & 127) << j2;\n j2 += 7;\n if (j2 >= 8) {\n j2 -= 8;\n res[i++] = n;\n n >>= 8;\n }\n }\n res[i] = n;\n if (neg) {\n invert(res, 8);\n }\n return res;\n };\n Tap.prototype.packLongBytes = function(buf) {\n var neg = (buf[7] & 128) >> 7;\n var res = this.buf;\n var j2 = 1;\n var k2 = 0;\n var m2 = 3;\n var n;\n if (neg) {\n invert(buf, 8);\n n = 1;\n } else {\n n = 0;\n }\n var parts = [\n buf.readUIntLE(0, 3),\n buf.readUIntLE(3, 3),\n buf.readUIntLE(6, 2)\n ];\n while (m2 && !parts[--m2]) {\n }\n while (k2 < m2) {\n n |= parts[k2++] << j2;\n j2 += 24;\n while (j2 > 7) {\n res[this.pos++] = n & 127 | 128;\n n >>= 7;\n j2 -= 7;\n }\n }\n n |= parts[m2] << j2;\n do {\n res[this.pos] = n & 127;\n n >>= 7;\n } while (n && (res[this.pos++] |= 128));\n this.pos++;\n if (neg) {\n invert(buf, 8);\n }\n };\n function invert(buf, len) {\n while (len--) {\n buf[len] = ~buf[len];\n }\n }\n module.exports = {\n abstractFunction,\n addDeprecatedGetters,\n bufferFrom,\n capitalize,\n copyOwnProperties,\n getHash,\n compare,\n getOption,\n impliedNamespace,\n isValidName,\n jsonEnd,\n newBuffer,\n objectValues,\n qualify,\n toMap,\n singleIndexOf,\n hasDuplicates,\n unqualify,\n BufferPool,\n Lcg,\n OrderedQueue,\n Tap\n };\n }\n});\n\n// node_modules/avsc/lib/types.js\nvar require_types = __commonJS({\n \"node_modules/avsc/lib/types.js\"(exports, module) {\n \"use strict\";\n var utils = require_utils();\n var buffer = __import_BUFFER;\n var util = __import_UTIL;\n var Buffer2 = buffer.Buffer;\n var SlowBuffer = buffer.SlowBuffer;\n var Tap = utils.Tap;\n var debug = util.debuglog(\"avsc:types\");\n var f2 = util.format;\n var TYPES = {\n \"array\": ArrayType,\n \"boolean\": BooleanType,\n \"bytes\": BytesType,\n \"double\": DoubleType,\n \"enum\": EnumType,\n \"error\": RecordType,\n \"fixed\": FixedType,\n \"float\": FloatType,\n \"int\": IntType,\n \"long\": LongType,\n \"map\": MapType,\n \"null\": NullType,\n \"record\": RecordType,\n \"string\": StringType\n };\n var RANDOM = new utils.Lcg();\n var TAP = new Tap(new SlowBuffer(1024));\n var LOGICAL_TYPE = null;\n var UNDERLYING_TYPES = [];\n function Type(schema, opts) {\n var type;\n if (LOGICAL_TYPE) {\n type = LOGICAL_TYPE;\n UNDERLYING_TYPES.push([LOGICAL_TYPE, this]);\n LOGICAL_TYPE = null;\n } else {\n type = this;\n }\n this._hash = new Hash();\n this.name = void 0;\n this.aliases = void 0;\n this.doc = schema && schema.doc ? \"\" + schema.doc : void 0;\n if (schema) {\n var name = schema.name;\n var namespace = schema.namespace === void 0 ? opts && opts.namespace : schema.namespace;\n if (name !== void 0) {\n name = maybeQualify(name, namespace);\n if (isPrimitive(name)) {\n throw new Error(f2(\"cannot rename primitive type: %j\", name));\n }\n var registry = opts && opts.registry;\n if (registry) {\n if (registry[name] !== void 0) {\n throw new Error(f2(\"duplicate type name: %s\", name));\n }\n registry[name] = type;\n }\n } else if (opts && opts.noAnonymousTypes) {\n throw new Error(f2(\"missing name property in schema: %j\", schema));\n }\n this.name = name;\n this.aliases = schema.aliases ? schema.aliases.map(function(s) {\n return maybeQualify(s, namespace);\n }) : [];\n }\n }\n Type.forSchema = function(schema, opts) {\n opts = opts || {};\n opts.registry = opts.registry || {};\n var UnionType2 = function(wrapUnions) {\n if (wrapUnions === true) {\n wrapUnions = \"always\";\n } else if (wrapUnions === false) {\n wrapUnions = \"never\";\n } else if (wrapUnions === void 0) {\n wrapUnions = \"auto\";\n } else if (typeof wrapUnions == \"string\") {\n wrapUnions = wrapUnions.toLowerCase();\n }\n switch (wrapUnions) {\n case \"always\":\n return WrappedUnionType;\n case \"never\":\n return UnwrappedUnionType;\n case \"auto\":\n return void 0;\n default:\n throw new Error(f2(\"invalid wrap unions option: %j\", wrapUnions));\n }\n }(opts.wrapUnions);\n if (schema === null) {\n throw new Error('invalid type: null (did you mean \"null\"?)');\n }\n if (Type.isType(schema)) {\n return schema;\n }\n var type;\n if (opts.typeHook && (type = opts.typeHook(schema, opts))) {\n if (!Type.isType(type)) {\n throw new Error(f2(\"invalid typehook return value: %j\", type));\n }\n return type;\n }\n if (typeof schema == \"string\") {\n schema = maybeQualify(schema, opts.namespace);\n type = opts.registry[schema];\n if (type) {\n return type;\n }\n if (isPrimitive(schema)) {\n return opts.registry[schema] = Type.forSchema({ type: schema }, opts);\n }\n throw new Error(f2(\"undefined type name: %s\", schema));\n }\n if (schema.logicalType && opts.logicalTypes && !LOGICAL_TYPE) {\n var DerivedType = opts.logicalTypes[schema.logicalType];\n if (DerivedType) {\n var namespace = opts.namespace;\n var registry = {};\n Object.keys(opts.registry).forEach(function(key) {\n registry[key] = opts.registry[key];\n });\n try {\n debug(\"instantiating logical type for %s\", schema.logicalType);\n return new DerivedType(schema, opts);\n } catch (err) {\n debug(\"failed to instantiate logical type for %s\", schema.logicalType);\n if (opts.assertLogicalTypes) {\n throw err;\n }\n LOGICAL_TYPE = null;\n opts.namespace = namespace;\n opts.registry = registry;\n }\n }\n }\n if (Array.isArray(schema)) {\n var logicalType = LOGICAL_TYPE;\n LOGICAL_TYPE = null;\n var types = schema.map(function(obj) {\n return Type.forSchema(obj, opts);\n });\n if (!UnionType2) {\n UnionType2 = isAmbiguous(types) ? WrappedUnionType : UnwrappedUnionType;\n }\n LOGICAL_TYPE = logicalType;\n type = new UnionType2(types, opts);\n } else {\n type = function(typeName) {\n var Type2 = TYPES[typeName];\n if (Type2 === void 0) {\n throw new Error(f2(\"unknown type: %j\", typeName));\n }\n return new Type2(schema, opts);\n }(schema.type);\n }\n return type;\n };\n Type.forValue = function(val, opts) {\n opts = opts || {};\n opts.emptyArrayType = opts.emptyArrayType || Type.forSchema({\n type: \"array\",\n items: \"null\"\n });\n if (opts.valueHook) {\n var type = opts.valueHook(val, opts);\n if (type !== void 0) {\n if (!Type.isType(type)) {\n throw new Error(f2(\"invalid value hook return value: %j\", type));\n }\n return type;\n }\n }\n switch (typeof val) {\n case \"string\":\n return Type.forSchema(\"string\", opts);\n case \"boolean\":\n return Type.forSchema(\"boolean\", opts);\n case \"number\":\n if ((val | 0) === val) {\n return Type.forSchema(\"int\", opts);\n } else if (Math.abs(val) < 9007199254740991) {\n return Type.forSchema(\"float\", opts);\n }\n return Type.forSchema(\"double\", opts);\n case \"object\":\n if (val === null) {\n return Type.forSchema(\"null\", opts);\n } else if (Array.isArray(val)) {\n if (!val.length) {\n return opts.emptyArrayType;\n }\n return Type.forSchema({\n type: \"array\",\n items: Type.forTypes(\n val.map(function(v2) {\n return Type.forValue(v2, opts);\n }),\n opts\n )\n }, opts);\n } else if (Buffer2.isBuffer(val)) {\n return Type.forSchema(\"bytes\", opts);\n }\n var fieldNames = Object.keys(val);\n if (fieldNames.some(function(s) {\n return !utils.isValidName(s);\n })) {\n return Type.forSchema({\n type: \"map\",\n values: Type.forTypes(fieldNames.map(function(s) {\n return Type.forValue(val[s], opts);\n }), opts)\n }, opts);\n }\n return Type.forSchema({\n type: \"record\",\n fields: fieldNames.map(function(s) {\n return { name: s, type: Type.forValue(val[s], opts) };\n })\n }, opts);\n default:\n throw new Error(f2(\"cannot infer type from: %j\", val));\n }\n };\n Type.forTypes = function(types, opts) {\n if (!types.length) {\n throw new Error(\"no types to combine\");\n }\n if (types.length === 1) {\n return types[0];\n }\n opts = opts || {};\n var expanded = [];\n var numWrappedUnions = 0;\n var isValidWrappedUnion = true;\n types.forEach(function(type) {\n switch (type.typeName) {\n case \"union:unwrapped\":\n isValidWrappedUnion = false;\n expanded = expanded.concat(type.types);\n break;\n case \"union:wrapped\":\n numWrappedUnions++;\n expanded = expanded.concat(type.types);\n break;\n case \"null\":\n expanded.push(type);\n break;\n default:\n isValidWrappedUnion = false;\n expanded.push(type);\n }\n });\n if (numWrappedUnions) {\n if (!isValidWrappedUnion) {\n throw new Error(\"cannot combine wrapped union\");\n }\n var branchTypes = {};\n expanded.forEach(function(type) {\n var name = type.branchName;\n var branchType = branchTypes[name];\n if (!branchType) {\n branchTypes[name] = type;\n } else if (!type.equals(branchType)) {\n throw new Error(\"inconsistent branch type\");\n }\n });\n var wrapUnions = opts.wrapUnions;\n var unionType;\n opts.wrapUnions = true;\n try {\n unionType = Type.forSchema(Object.keys(branchTypes).map(function(name) {\n return branchTypes[name];\n }), opts);\n } catch (err) {\n opts.wrapUnions = wrapUnions;\n throw err;\n }\n opts.wrapUnions = wrapUnions;\n return unionType;\n }\n var bucketized = {};\n expanded.forEach(function(type) {\n var bucket = getTypeBucket(type);\n var bucketTypes = bucketized[bucket];\n if (!bucketTypes) {\n bucketized[bucket] = bucketTypes = [];\n }\n bucketTypes.push(type);\n });\n var buckets = Object.keys(bucketized);\n var augmented = buckets.map(function(bucket) {\n var bucketTypes = bucketized[bucket];\n if (bucketTypes.length === 1) {\n return bucketTypes[0];\n } else {\n switch (bucket) {\n case \"null\":\n case \"boolean\":\n return bucketTypes[0];\n case \"number\":\n return combineNumbers(bucketTypes);\n case \"string\":\n return combineStrings(bucketTypes, opts);\n case \"buffer\":\n return combineBuffers(bucketTypes, opts);\n case \"array\":\n bucketTypes = bucketTypes.filter(function(t) {\n return t !== opts.emptyArrayType;\n });\n if (!bucketTypes.length) {\n return opts.emptyArrayType;\n }\n return Type.forSchema({\n type: \"array\",\n items: Type.forTypes(bucketTypes.map(function(t) {\n return t.itemsType;\n }), opts)\n }, opts);\n default:\n return combineObjects(bucketTypes, opts);\n }\n }\n });\n if (augmented.length === 1) {\n return augmented[0];\n } else {\n return Type.forSchema(augmented, opts);\n }\n };\n Type.isType = function() {\n var l = arguments.length;\n if (!l) {\n return false;\n }\n var any = arguments[0];\n if (!any || typeof any._update != \"function\" || typeof any.fingerprint != \"function\") {\n return false;\n }\n if (l === 1) {\n return true;\n }\n var typeName = any.typeName;\n var i;\n for (i = 1; i < l; i++) {\n if (typeName.indexOf(arguments[i]) === 0) {\n return true;\n }\n }\n return false;\n };\n Type.__reset = function(size) {\n debug(\"resetting type buffer to %d\", size);\n TAP.buf = new SlowBuffer(size);\n };\n Object.defineProperty(Type.prototype, \"branchName\", {\n enumerable: true,\n get: function() {\n var type = Type.isType(this, \"logical\") ? this.underlyingType : this;\n if (type.name) {\n return type.name;\n }\n if (Type.isType(type, \"abstract\")) {\n return type._concreteTypeName;\n }\n return Type.isType(type, \"union\") ? void 0 : type.typeName;\n }\n });\n Type.prototype.clone = function(val, opts) {\n if (opts) {\n opts = {\n coerce: !!opts.coerceBuffers | 0,\n // Coerce JSON to Buffer.\n fieldHook: opts.fieldHook,\n qualifyNames: !!opts.qualifyNames,\n skip: !!opts.skipMissingFields,\n wrap: !!opts.wrapUnions | 0\n // Wrap first match into union.\n };\n return this._copy(val, opts);\n } else {\n return this.fromBuffer(this.toBuffer(val));\n }\n };\n Type.prototype.compare = utils.abstractFunction;\n Type.prototype.compareBuffers = function(buf1, buf2) {\n return this._match(new Tap(buf1), new Tap(buf2));\n };\n Type.prototype.createResolver = function(type, opts) {\n if (!Type.isType(type)) {\n throw new Error(f2(\"not a type: %j\", type));\n }\n if (!Type.isType(this, \"union\", \"logical\") && Type.isType(type, \"logical\")) {\n return this.createResolver(type.underlyingType, opts);\n }\n opts = opts || {};\n opts.registry = opts.registry || {};\n var resolver, key;\n if (Type.isType(this, \"record\", \"error\") && Type.isType(type, \"record\", \"error\")) {\n key = this.name + \":\" + type.name;\n resolver = opts.registry[key];\n if (resolver) {\n return resolver;\n }\n }\n resolver = new Resolver(this);\n if (key) {\n opts.registry[key] = resolver;\n }\n if (Type.isType(type, \"union\")) {\n var resolvers = type.types.map(function(t) {\n return this.createResolver(t, opts);\n }, this);\n resolver._read = function(tap) {\n var index = tap.readLong();\n var resolver2 = resolvers[index];\n if (resolver2 === void 0) {\n throw new Error(f2(\"invalid union index: %s\", index));\n }\n return resolvers[index]._read(tap);\n };\n } else {\n this._update(resolver, type, opts);\n }\n if (!resolver._read) {\n throw new Error(f2(\"cannot read %s as %s\", type, this));\n }\n return Object.freeze(resolver);\n };\n Type.prototype.decode = function(buf, pos, resolver) {\n var tap = new Tap(buf, pos);\n var val = readValue(this, tap, resolver);\n if (!tap.isValid()) {\n return { value: void 0, offset: -1 };\n }\n return { value: val, offset: tap.pos };\n };\n Type.prototype.encode = function(val, buf, pos) {\n var tap = new Tap(buf, pos);\n this._write(tap, val);\n if (!tap.isValid()) {\n return buf.length - tap.pos;\n }\n return tap.pos;\n };\n Type.prototype.equals = function(type, opts) {\n var canon = (\n // Canonical equality.\n Type.isType(type) && this.fingerprint().equals(type.fingerprint())\n );\n if (!canon || !(opts && opts.strict)) {\n return canon;\n }\n return JSON.stringify(this.schema({ exportAttrs: true })) === JSON.stringify(type.schema({ exportAttrs: true }));\n };\n Type.prototype.fingerprint = function(algorithm) {\n if (!algorithm) {\n if (!this._hash.str) {\n var schemaStr = JSON.stringify(this.schema());\n this._hash.str = utils.getHash(schemaStr).toString(\"binary\");\n }\n return utils.bufferFrom(this._hash.str, \"binary\");\n } else {\n return utils.getHash(JSON.stringify(this.schema()), algorithm);\n }\n };\n Type.prototype.fromBuffer = function(buf, resolver, noCheck) {\n var tap = new Tap(buf);\n var val = readValue(this, tap, resolver, noCheck);\n if (!tap.isValid()) {\n throw new Error(\"truncated buffer\");\n }\n if (!noCheck && tap.pos < buf.length) {\n throw new Error(\"trailing data\");\n }\n return val;\n };\n Type.prototype.fromString = function(str) {\n return this._copy(JSON.parse(str), { coerce: 2 });\n };\n Type.prototype.inspect = function() {\n var typeName = this.typeName;\n var className = getClassName(typeName);\n if (isPrimitive(typeName)) {\n return f2(\"<%s>\", className);\n } else {\n var obj = this.schema({ exportAttrs: true, noDeref: true });\n if (typeof obj == \"object\" && !Type.isType(this, \"logical\")) {\n obj.type = void 0;\n }\n return f2(\"<%s %j>\", className, obj);\n }\n };\n Type.prototype.isValid = function(val, opts) {\n var flags = (opts && opts.noUndeclaredFields) | 0;\n var errorHook = opts && opts.errorHook;\n var hook, path;\n if (errorHook) {\n path = [];\n hook = function(any, type) {\n errorHook.call(this, path.slice(), any, type, val);\n };\n }\n return this._check(val, flags, hook, path);\n };\n Type.prototype.random = utils.abstractFunction;\n Type.prototype.schema = function(opts) {\n return this._attrs({\n exportAttrs: !!(opts && opts.exportAttrs),\n noDeref: !!(opts && opts.noDeref)\n });\n };\n Type.prototype.toBuffer = function(val) {\n TAP.pos = 0;\n this._write(TAP, val);\n var buf = utils.newBuffer(TAP.pos);\n if (TAP.isValid()) {\n TAP.buf.copy(buf, 0, 0, TAP.pos);\n } else {\n this._write(new Tap(buf), val);\n }\n return buf;\n };\n Type.prototype.toJSON = function() {\n return this.schema({ exportAttrs: true });\n };\n Type.prototype.toString = function(val) {\n if (val === void 0) {\n return JSON.stringify(this.schema({ noDeref: true }));\n }\n return JSON.stringify(this._copy(val, { coerce: 3 }));\n };\n Type.prototype.wrap = function(val) {\n var Branch = this._branchConstructor;\n return Branch === null ? null : new Branch(val);\n };\n Type.prototype._attrs = function(opts) {\n opts.derefed = opts.derefed || {};\n var name = this.name;\n if (name !== void 0) {\n if (opts.noDeref || opts.derefed[name]) {\n return name;\n }\n opts.derefed[name] = true;\n }\n var schema = {};\n if (this.name !== void 0) {\n schema.name = name;\n }\n schema.type = this.typeName;\n var derefedSchema = this._deref(schema, opts);\n if (derefedSchema !== void 0) {\n schema = derefedSchema;\n }\n if (opts.exportAttrs) {\n if (this.aliases && this.aliases.length) {\n schema.aliases = this.aliases;\n }\n if (this.doc !== void 0) {\n schema.doc = this.doc;\n }\n }\n return schema;\n };\n Type.prototype._createBranchConstructor = function() {\n var name = this.branchName;\n if (name === \"null\") {\n return null;\n }\n var attr = ~name.indexOf(\".\") ? \"this['\" + name + \"']\" : \"this.\" + name;\n var body = \"return function Branch$(val) { \" + attr + \" = val; };\";\n var Branch = new Function(body)();\n Branch.type = this;\n Branch.prototype.unwrap = new Function(\"return \" + attr + \";\");\n Branch.prototype.unwrapped = Branch.prototype.unwrap;\n return Branch;\n };\n Type.prototype._peek = function(tap) {\n var pos = tap.pos;\n var val = this._read(tap);\n tap.pos = pos;\n return val;\n };\n Type.prototype._check = utils.abstractFunction;\n Type.prototype._copy = utils.abstractFunction;\n Type.prototype._deref = utils.abstractFunction;\n Type.prototype._match = utils.abstractFunction;\n Type.prototype._read = utils.abstractFunction;\n Type.prototype._skip = utils.abstractFunction;\n Type.prototype._update = utils.abstractFunction;\n Type.prototype._write = utils.abstractFunction;\n Type.prototype.getAliases = function() {\n return this.aliases;\n };\n Type.prototype.getFingerprint = Type.prototype.fingerprint;\n Type.prototype.getName = function(asBranch) {\n return this.name || !asBranch ? this.name : this.branchName;\n };\n Type.prototype.getSchema = Type.prototype.schema;\n Type.prototype.getTypeName = function() {\n return this.typeName;\n };\n function PrimitiveType(noFreeze) {\n Type.call(this);\n this._branchConstructor = this._createBranchConstructor();\n if (!noFreeze) {\n Object.freeze(this);\n }\n }\n util.inherits(PrimitiveType, Type);\n PrimitiveType.prototype._update = function(resolver, type) {\n if (type.typeName === this.typeName) {\n resolver._read = this._read;\n }\n };\n PrimitiveType.prototype._copy = function(val) {\n this._check(val, void 0, throwInvalidError);\n return val;\n };\n PrimitiveType.prototype._deref = function() {\n return this.typeName;\n };\n PrimitiveType.prototype.compare = utils.compare;\n function NullType() {\n PrimitiveType.call(this);\n }\n util.inherits(NullType, PrimitiveType);\n NullType.prototype._check = function(val, flags, hook) {\n var b2 = val === null;\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n NullType.prototype._read = function() {\n return null;\n };\n NullType.prototype._skip = function() {\n };\n NullType.prototype._write = function(tap, val) {\n if (val !== null) {\n throwInvalidError(val, this);\n }\n };\n NullType.prototype._match = function() {\n return 0;\n };\n NullType.prototype.compare = NullType.prototype._match;\n NullType.prototype.typeName = \"null\";\n NullType.prototype.random = NullType.prototype._read;\n function BooleanType() {\n PrimitiveType.call(this);\n }\n util.inherits(BooleanType, PrimitiveType);\n BooleanType.prototype._check = function(val, flags, hook) {\n var b2 = typeof val == \"boolean\";\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n BooleanType.prototype._read = function(tap) {\n return tap.readBoolean();\n };\n BooleanType.prototype._skip = function(tap) {\n tap.skipBoolean();\n };\n BooleanType.prototype._write = function(tap, val) {\n if (typeof val != \"boolean\") {\n throwInvalidError(val, this);\n }\n tap.writeBoolean(val);\n };\n BooleanType.prototype._match = function(tap1, tap2) {\n return tap1.matchBoolean(tap2);\n };\n BooleanType.prototype.typeName = \"boolean\";\n BooleanType.prototype.random = function() {\n return RANDOM.nextBoolean();\n };\n function IntType() {\n PrimitiveType.call(this);\n }\n util.inherits(IntType, PrimitiveType);\n IntType.prototype._check = function(val, flags, hook) {\n var b2 = val === (val | 0);\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n IntType.prototype._read = function(tap) {\n return tap.readInt();\n };\n IntType.prototype._skip = function(tap) {\n tap.skipInt();\n };\n IntType.prototype._write = function(tap, val) {\n if (val !== (val | 0)) {\n throwInvalidError(val, this);\n }\n tap.writeInt(val);\n };\n IntType.prototype._match = function(tap1, tap2) {\n return tap1.matchInt(tap2);\n };\n IntType.prototype.typeName = \"int\";\n IntType.prototype.random = function() {\n return RANDOM.nextInt(1e3) | 0;\n };\n function LongType() {\n PrimitiveType.call(this);\n }\n util.inherits(LongType, PrimitiveType);\n LongType.prototype._check = function(val, flags, hook) {\n var b2 = typeof val == \"number\" && val % 1 === 0 && isSafeLong(val);\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n LongType.prototype._read = function(tap) {\n var n = tap.readLong();\n if (!isSafeLong(n)) {\n throw new Error(\"potential precision loss\");\n }\n return n;\n };\n LongType.prototype._skip = function(tap) {\n tap.skipLong();\n };\n LongType.prototype._write = function(tap, val) {\n if (typeof val != \"number\" || val % 1 || !isSafeLong(val)) {\n throwInvalidError(val, this);\n }\n tap.writeLong(val);\n };\n LongType.prototype._match = function(tap1, tap2) {\n return tap1.matchLong(tap2);\n };\n LongType.prototype._update = function(resolver, type) {\n switch (type.typeName) {\n case \"int\":\n resolver._read = type._read;\n break;\n case \"abstract:long\":\n case \"long\":\n resolver._read = this._read;\n }\n };\n LongType.prototype.typeName = \"long\";\n LongType.prototype.random = function() {\n return RANDOM.nextInt();\n };\n LongType.__with = function(methods, noUnpack) {\n methods = methods || {};\n var mapping = {\n toBuffer: \"_toBuffer\",\n fromBuffer: \"_fromBuffer\",\n fromJSON: \"_fromJSON\",\n toJSON: \"_toJSON\",\n isValid: \"_isValid\",\n compare: \"compare\"\n };\n var type = new AbstractLongType(noUnpack);\n Object.keys(mapping).forEach(function(name) {\n if (methods[name] === void 0) {\n throw new Error(f2(\"missing method implementation: %s\", name));\n }\n type[mapping[name]] = methods[name];\n });\n return Object.freeze(type);\n };\n function FloatType() {\n PrimitiveType.call(this);\n }\n util.inherits(FloatType, PrimitiveType);\n FloatType.prototype._check = function(val, flags, hook) {\n var b2 = typeof val == \"number\";\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n FloatType.prototype._read = function(tap) {\n return tap.readFloat();\n };\n FloatType.prototype._skip = function(tap) {\n tap.skipFloat();\n };\n FloatType.prototype._write = function(tap, val) {\n if (typeof val != \"number\") {\n throwInvalidError(val, this);\n }\n tap.writeFloat(val);\n };\n FloatType.prototype._match = function(tap1, tap2) {\n return tap1.matchFloat(tap2);\n };\n FloatType.prototype._update = function(resolver, type) {\n switch (type.typeName) {\n case \"float\":\n case \"int\":\n resolver._read = type._read;\n break;\n case \"abstract:long\":\n case \"long\":\n resolver._read = function(tap) {\n return tap.readLong();\n };\n }\n };\n FloatType.prototype.typeName = \"float\";\n FloatType.prototype.random = function() {\n return RANDOM.nextFloat(1e3);\n };\n function DoubleType() {\n PrimitiveType.call(this);\n }\n util.inherits(DoubleType, PrimitiveType);\n DoubleType.prototype._check = function(val, flags, hook) {\n var b2 = typeof val == \"number\";\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n DoubleType.prototype._read = function(tap) {\n return tap.readDouble();\n };\n DoubleType.prototype._skip = function(tap) {\n tap.skipDouble();\n };\n DoubleType.prototype._write = function(tap, val) {\n if (typeof val != \"number\") {\n throwInvalidError(val, this);\n }\n tap.writeDouble(val);\n };\n DoubleType.prototype._match = function(tap1, tap2) {\n return tap1.matchDouble(tap2);\n };\n DoubleType.prototype._update = function(resolver, type) {\n switch (type.typeName) {\n case \"double\":\n case \"float\":\n case \"int\":\n resolver._read = type._read;\n break;\n case \"abstract:long\":\n case \"long\":\n resolver._read = function(tap) {\n return tap.readLong();\n };\n }\n };\n DoubleType.prototype.typeName = \"double\";\n DoubleType.prototype.random = function() {\n return RANDOM.nextFloat();\n };\n function StringType() {\n PrimitiveType.call(this);\n }\n util.inherits(StringType, PrimitiveType);\n StringType.prototype._check = function(val, flags, hook) {\n var b2 = typeof val == \"string\";\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n StringType.prototype._read = function(tap) {\n return tap.readString();\n };\n StringType.prototype._skip = function(tap) {\n tap.skipString();\n };\n StringType.prototype._write = function(tap, val) {\n if (typeof val != \"string\") {\n throwInvalidError(val, this);\n }\n tap.writeString(val);\n };\n StringType.prototype._match = function(tap1, tap2) {\n return tap1.matchString(tap2);\n };\n StringType.prototype._update = function(resolver, type) {\n switch (type.typeName) {\n case \"bytes\":\n case \"string\":\n resolver._read = this._read;\n }\n };\n StringType.prototype.typeName = \"string\";\n StringType.prototype.random = function() {\n return RANDOM.nextString(RANDOM.nextInt(32));\n };\n function BytesType() {\n PrimitiveType.call(this);\n }\n util.inherits(BytesType, PrimitiveType);\n BytesType.prototype._check = function(val, flags, hook) {\n var b2 = Buffer2.isBuffer(val);\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n BytesType.prototype._read = function(tap) {\n return tap.readBytes();\n };\n BytesType.prototype._skip = function(tap) {\n tap.skipBytes();\n };\n BytesType.prototype._write = function(tap, val) {\n if (!Buffer2.isBuffer(val)) {\n throwInvalidError(val, this);\n }\n tap.writeBytes(val);\n };\n BytesType.prototype._match = function(tap1, tap2) {\n return tap1.matchBytes(tap2);\n };\n BytesType.prototype._update = StringType.prototype._update;\n BytesType.prototype._copy = function(obj, opts) {\n var buf;\n switch ((opts && opts.coerce) | 0) {\n case 3:\n this._check(obj, void 0, throwInvalidError);\n return obj.toString(\"binary\");\n case 2:\n if (typeof obj != \"string\") {\n throw new Error(f2(\"cannot coerce to buffer: %j\", obj));\n }\n buf = utils.bufferFrom(obj, \"binary\");\n this._check(buf, void 0, throwInvalidError);\n return buf;\n case 1:\n if (!isJsonBuffer(obj)) {\n throw new Error(f2(\"cannot coerce to buffer: %j\", obj));\n }\n buf = utils.bufferFrom(obj.data);\n this._check(buf, void 0, throwInvalidError);\n return buf;\n default:\n this._check(obj, void 0, throwInvalidError);\n return utils.bufferFrom(obj);\n }\n };\n BytesType.prototype.compare = Buffer2.compare;\n BytesType.prototype.typeName = \"bytes\";\n BytesType.prototype.random = function() {\n return RANDOM.nextBuffer(RANDOM.nextInt(32));\n };\n function UnionType(schema, opts) {\n Type.call(this);\n if (!Array.isArray(schema)) {\n throw new Error(f2(\"non-array union schema: %j\", schema));\n }\n if (!schema.length) {\n throw new Error(\"empty union\");\n }\n this.types = Object.freeze(schema.map(function(obj) {\n return Type.forSchema(obj, opts);\n }));\n this._branchIndices = {};\n this.types.forEach(function(type, i) {\n if (Type.isType(type, \"union\")) {\n throw new Error(\"unions cannot be directly nested\");\n }\n var branch = type.branchName;\n if (this._branchIndices[branch] !== void 0) {\n throw new Error(f2(\"duplicate union branch name: %j\", branch));\n }\n this._branchIndices[branch] = i;\n }, this);\n }\n util.inherits(UnionType, Type);\n UnionType.prototype._branchConstructor = function() {\n throw new Error(\"unions cannot be directly wrapped\");\n };\n UnionType.prototype._skip = function(tap) {\n this.types[tap.readLong()]._skip(tap);\n };\n UnionType.prototype._match = function(tap1, tap2) {\n var n1 = tap1.readLong();\n var n2 = tap2.readLong();\n if (n1 === n2) {\n return this.types[n1]._match(tap1, tap2);\n } else {\n return n1 < n2 ? -1 : 1;\n }\n };\n UnionType.prototype._deref = function(schema, opts) {\n return this.types.map(function(t) {\n return t._attrs(opts);\n });\n };\n UnionType.prototype.getTypes = function() {\n return this.types;\n };\n function UnwrappedUnionType(schema, opts) {\n UnionType.call(this, schema, opts);\n this._dynamicBranches = null;\n this._bucketIndices = {};\n this.types.forEach(function(type, index) {\n if (Type.isType(type, \"abstract\", \"logical\")) {\n if (!this._dynamicBranches) {\n this._dynamicBranches = [];\n }\n this._dynamicBranches.push({ index, type });\n } else {\n var bucket = getTypeBucket(type);\n if (this._bucketIndices[bucket] !== void 0) {\n throw new Error(f2(\"ambiguous unwrapped union: %j\", this));\n }\n this._bucketIndices[bucket] = index;\n }\n }, this);\n Object.freeze(this);\n }\n util.inherits(UnwrappedUnionType, UnionType);\n UnwrappedUnionType.prototype._getIndex = function(val) {\n var index = this._bucketIndices[getValueBucket(val)];\n if (this._dynamicBranches) {\n index = this._getBranchIndex(val, index);\n }\n return index;\n };\n UnwrappedUnionType.prototype._getBranchIndex = function(any, index) {\n var logicalBranches = this._dynamicBranches;\n var i, l, branch;\n for (i = 0, l = logicalBranches.length; i < l; i++) {\n branch = logicalBranches[i];\n if (branch.type._check(any)) {\n if (index === void 0) {\n index = branch.index;\n } else {\n throw new Error(\"ambiguous conversion\");\n }\n }\n }\n return index;\n };\n UnwrappedUnionType.prototype._check = function(val, flags, hook, path) {\n var index = this._getIndex(val);\n var b2 = index !== void 0;\n if (b2) {\n return this.types[index]._check(val, flags, hook, path);\n }\n if (hook) {\n hook(val, this);\n }\n return b2;\n };\n UnwrappedUnionType.prototype._read = function(tap) {\n var index = tap.readLong();\n var branchType = this.types[index];\n if (branchType) {\n return branchType._read(tap);\n } else {\n throw new Error(f2(\"invalid union index: %s\", index));\n }\n };\n UnwrappedUnionType.prototype._write = function(tap, val) {\n var index = this._getIndex(val);\n if (index === void 0) {\n throwInvalidError(val, this);\n }\n tap.writeLong(index);\n if (val !== null) {\n this.types[index]._write(tap, val);\n }\n };\n UnwrappedUnionType.prototype._update = function(resolver, type, opts) {\n var i, l, typeResolver;\n for (i = 0, l = this.types.length; i < l; i++) {\n try {\n typeResolver = this.types[i].createResolver(type, opts);\n } catch (err) {\n continue;\n }\n resolver._read = function(tap) {\n return typeResolver._read(tap);\n };\n return;\n }\n };\n UnwrappedUnionType.prototype._copy = function(val, opts) {\n var coerce = opts && opts.coerce | 0;\n var wrap = opts && opts.wrap | 0;\n var index;\n if (wrap === 2) {\n index = 0;\n } else {\n switch (coerce) {\n case 1:\n if (isJsonBuffer(val) && this._bucketIndices.buffer !== void 0) {\n index = this._bucketIndices.buffer;\n } else {\n index = this._getIndex(val);\n }\n break;\n case 2:\n if (val === null) {\n index = this._bucketIndices[\"null\"];\n } else if (typeof val === \"object\") {\n var keys = Object.keys(val);\n if (keys.length === 1) {\n index = this._branchIndices[keys[0]];\n val = val[keys[0]];\n }\n }\n break;\n default:\n index = this._getIndex(val);\n }\n if (index === void 0) {\n throwInvalidError(val, this);\n }\n }\n var type = this.types[index];\n if (val === null || wrap === 3) {\n return type._copy(val, opts);\n } else {\n switch (coerce) {\n case 3:\n var obj = {};\n obj[type.branchName] = type._copy(val, opts);\n return obj;\n default:\n return type._copy(val, opts);\n }\n }\n };\n UnwrappedUnionType.prototype.compare = function(val1, val2) {\n var index1 = this._getIndex(val1);\n var index2 = this._getIndex(val2);\n if (index1 === void 0) {\n throwInvalidError(val1, this);\n } else if (index2 === void 0) {\n throwInvalidError(val2, this);\n } else if (index1 === index2) {\n return this.types[index1].compare(val1, val2);\n } else {\n return utils.compare(index1, index2);\n }\n };\n UnwrappedUnionType.prototype.typeName = \"union:unwrapped\";\n UnwrappedUnionType.prototype.random = function() {\n var index = RANDOM.nextInt(this.types.length);\n return this.types[index].random();\n };\n function WrappedUnionType(schema, opts) {\n UnionType.call(this, schema, opts);\n Object.freeze(this);\n }\n util.inherits(WrappedUnionType, UnionType);\n WrappedUnionType.prototype._check = function(val, flags, hook, path) {\n var b2 = false;\n if (val === null) {\n b2 = this._branchIndices[\"null\"] !== void 0;\n } else if (typeof val == \"object\") {\n var keys = Object.keys(val);\n if (keys.length === 1) {\n var name = keys[0];\n var index = this._branchIndices[name];\n if (index !== void 0) {\n if (hook) {\n path.push(name);\n b2 = this.types[index]._check(val[name], flags, hook, path);\n path.pop();\n return b2;\n } else {\n return this.types[index]._check(val[name], flags);\n }\n }\n }\n }\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n WrappedUnionType.prototype._read = function(tap) {\n var type = this.types[tap.readLong()];\n if (!type) {\n throw new Error(f2(\"invalid union index\"));\n }\n var Branch = type._branchConstructor;\n if (Branch === null) {\n return null;\n } else {\n return new Branch(type._read(tap));\n }\n };\n WrappedUnionType.prototype._write = function(tap, val) {\n var index, keys, name;\n if (val === null) {\n index = this._branchIndices[\"null\"];\n if (index === void 0) {\n throwInvalidError(val, this);\n }\n tap.writeLong(index);\n } else {\n keys = Object.keys(val);\n if (keys.length === 1) {\n name = keys[0];\n index = this._branchIndices[name];\n }\n if (index === void 0) {\n throwInvalidError(val, this);\n }\n tap.writeLong(index);\n this.types[index]._write(tap, val[name]);\n }\n };\n WrappedUnionType.prototype._update = function(resolver, type, opts) {\n var i, l, typeResolver, Branch;\n for (i = 0, l = this.types.length; i < l; i++) {\n try {\n typeResolver = this.types[i].createResolver(type, opts);\n } catch (err) {\n continue;\n }\n Branch = this.types[i]._branchConstructor;\n if (Branch) {\n resolver._read = function(tap) {\n return new Branch(typeResolver._read(tap));\n };\n } else {\n resolver._read = function() {\n return null;\n };\n }\n return;\n }\n };\n WrappedUnionType.prototype._copy = function(val, opts) {\n var wrap = opts && opts.wrap | 0;\n if (wrap === 2) {\n var firstType = this.types[0];\n if (val === null && firstType.typeName === \"null\") {\n return null;\n }\n return new firstType._branchConstructor(firstType._copy(val, opts));\n }\n if (val === null && this._branchIndices[\"null\"] !== void 0) {\n return null;\n }\n var i, l, obj;\n if (typeof val == \"object\") {\n var keys = Object.keys(val);\n if (keys.length === 1) {\n var name = keys[0];\n i = this._branchIndices[name];\n if (i === void 0 && opts.qualifyNames) {\n var j2, type;\n for (j2 = 0, l = this.types.length; j2 < l; j2++) {\n type = this.types[j2];\n if (type.name && name === utils.unqualify(type.name)) {\n i = j2;\n break;\n }\n }\n }\n if (i !== void 0) {\n obj = this.types[i]._copy(val[name], opts);\n }\n }\n }\n if (wrap === 1 && obj === void 0) {\n i = 0;\n l = this.types.length;\n while (i < l && obj === void 0) {\n try {\n obj = this.types[i]._copy(val, opts);\n } catch (err) {\n i++;\n }\n }\n }\n if (obj !== void 0) {\n return wrap === 3 ? obj : new this.types[i]._branchConstructor(obj);\n }\n throwInvalidError(val, this);\n };\n WrappedUnionType.prototype.compare = function(val1, val2) {\n var name1 = val1 === null ? \"null\" : Object.keys(val1)[0];\n var name2 = val2 === null ? \"null\" : Object.keys(val2)[0];\n var index = this._branchIndices[name1];\n if (name1 === name2) {\n return name1 === \"null\" ? 0 : this.types[index].compare(val1[name1], val2[name1]);\n } else {\n return utils.compare(index, this._branchIndices[name2]);\n }\n };\n WrappedUnionType.prototype.typeName = \"union:wrapped\";\n WrappedUnionType.prototype.random = function() {\n var index = RANDOM.nextInt(this.types.length);\n var type = this.types[index];\n var Branch = type._branchConstructor;\n if (!Branch) {\n return null;\n }\n return new Branch(type.random());\n };\n function EnumType(schema, opts) {\n Type.call(this, schema, opts);\n if (!Array.isArray(schema.symbols) || !schema.symbols.length) {\n throw new Error(f2(\"invalid enum symbols: %j\", schema.symbols));\n }\n this.symbols = Object.freeze(schema.symbols.slice());\n this._indices = {};\n this.symbols.forEach(function(symbol, i) {\n if (!utils.isValidName(symbol)) {\n throw new Error(f2(\"invalid %s symbol: %j\", this, symbol));\n }\n if (this._indices[symbol] !== void 0) {\n throw new Error(f2(\"duplicate %s symbol: %j\", this, symbol));\n }\n this._indices[symbol] = i;\n }, this);\n this.default = schema.default;\n if (this.default !== void 0 && this._indices[this.default] === void 0) {\n throw new Error(f2(\"invalid %s default: %j\", this, this.default));\n }\n this._branchConstructor = this._createBranchConstructor();\n Object.freeze(this);\n }\n util.inherits(EnumType, Type);\n EnumType.prototype._check = function(val, flags, hook) {\n var b2 = this._indices[val] !== void 0;\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n EnumType.prototype._read = function(tap) {\n var index = tap.readLong();\n var symbol = this.symbols[index];\n if (symbol === void 0) {\n throw new Error(f2(\"invalid %s enum index: %s\", this.name, index));\n }\n return symbol;\n };\n EnumType.prototype._skip = function(tap) {\n tap.skipLong();\n };\n EnumType.prototype._write = function(tap, val) {\n var index = this._indices[val];\n if (index === void 0) {\n throwInvalidError(val, this);\n }\n tap.writeLong(index);\n };\n EnumType.prototype._match = function(tap1, tap2) {\n return tap1.matchLong(tap2);\n };\n EnumType.prototype.compare = function(val1, val2) {\n return utils.compare(this._indices[val1], this._indices[val2]);\n };\n EnumType.prototype._update = function(resolver, type, opts) {\n var symbols = this.symbols;\n if (type.typeName === \"enum\" && hasCompatibleName(this, type, !opts.ignoreNamespaces) && (type.symbols.every(function(s) {\n return ~symbols.indexOf(s);\n }) || this.default !== void 0)) {\n resolver.symbols = type.symbols.map(function(s) {\n return this._indices[s] === void 0 ? this.default : s;\n }, this);\n resolver._read = type._read;\n }\n };\n EnumType.prototype._copy = function(val) {\n this._check(val, void 0, throwInvalidError);\n return val;\n };\n EnumType.prototype._deref = function(schema) {\n schema.symbols = this.symbols;\n };\n EnumType.prototype.getSymbols = function() {\n return this.symbols;\n };\n EnumType.prototype.typeName = \"enum\";\n EnumType.prototype.random = function() {\n return RANDOM.choice(this.symbols);\n };\n function FixedType(schema, opts) {\n Type.call(this, schema, opts);\n if (schema.size !== (schema.size | 0) || schema.size < 0) {\n throw new Error(f2(\"invalid %s size\", this.branchName));\n }\n this.size = schema.size | 0;\n this._branchConstructor = this._createBranchConstructor();\n Object.freeze(this);\n }\n util.inherits(FixedType, Type);\n FixedType.prototype._check = function(val, flags, hook) {\n var b2 = Buffer2.isBuffer(val) && val.length === this.size;\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n FixedType.prototype._read = function(tap) {\n return tap.readFixed(this.size);\n };\n FixedType.prototype._skip = function(tap) {\n tap.skipFixed(this.size);\n };\n FixedType.prototype._write = function(tap, val) {\n if (!Buffer2.isBuffer(val) || val.length !== this.size) {\n throwInvalidError(val, this);\n }\n tap.writeFixed(val, this.size);\n };\n FixedType.prototype._match = function(tap1, tap2) {\n return tap1.matchFixed(tap2, this.size);\n };\n FixedType.prototype.compare = Buffer2.compare;\n FixedType.prototype._update = function(resolver, type, opts) {\n if (type.typeName === \"fixed\" && this.size === type.size && hasCompatibleName(this, type, !opts.ignoreNamespaces)) {\n resolver.size = this.size;\n resolver._read = this._read;\n }\n };\n FixedType.prototype._copy = BytesType.prototype._copy;\n FixedType.prototype._deref = function(schema) {\n schema.size = this.size;\n };\n FixedType.prototype.getSize = function() {\n return this.size;\n };\n FixedType.prototype.typeName = \"fixed\";\n FixedType.prototype.random = function() {\n return RANDOM.nextBuffer(this.size);\n };\n function MapType(schema, opts) {\n Type.call(this);\n if (!schema.values) {\n throw new Error(f2(\"missing map values: %j\", schema));\n }\n this.valuesType = Type.forSchema(schema.values, opts);\n this._branchConstructor = this._createBranchConstructor();\n Object.freeze(this);\n }\n util.inherits(MapType, Type);\n MapType.prototype._check = function(val, flags, hook, path) {\n if (!val || typeof val != \"object\" || Array.isArray(val)) {\n if (hook) {\n hook(val, this);\n }\n return false;\n }\n var keys = Object.keys(val);\n var b2 = true;\n var i, l, j2, key;\n if (hook) {\n j2 = path.length;\n path.push(\"\");\n for (i = 0, l = keys.length; i < l; i++) {\n key = path[j2] = keys[i];\n if (!this.valuesType._check(val[key], flags, hook, path)) {\n b2 = false;\n }\n }\n path.pop();\n } else {\n for (i = 0, l = keys.length; i < l; i++) {\n if (!this.valuesType._check(val[keys[i]], flags)) {\n return false;\n }\n }\n }\n return b2;\n };\n MapType.prototype._read = function(tap) {\n var values = this.valuesType;\n var val = {};\n var n;\n while (n = readArraySize(tap)) {\n while (n--) {\n var key = tap.readString();\n val[key] = values._read(tap);\n }\n }\n return val;\n };\n MapType.prototype._skip = function(tap) {\n var values = this.valuesType;\n var len, n;\n while (n = tap.readLong()) {\n if (n < 0) {\n len = tap.readLong();\n tap.pos += len;\n } else {\n while (n--) {\n tap.skipString();\n values._skip(tap);\n }\n }\n }\n };\n MapType.prototype._write = function(tap, val) {\n if (!val || typeof val != \"object\" || Array.isArray(val)) {\n throwInvalidError(val, this);\n }\n var values = this.valuesType;\n var keys = Object.keys(val);\n var n = keys.length;\n var i, key;\n if (n) {\n tap.writeLong(n);\n for (i = 0; i < n; i++) {\n key = keys[i];\n tap.writeString(key);\n values._write(tap, val[key]);\n }\n }\n tap.writeLong(0);\n };\n MapType.prototype._match = function() {\n throw new Error(\"maps cannot be compared\");\n };\n MapType.prototype._update = function(rsv, type, opts) {\n if (type.typeName === \"map\") {\n rsv.valuesType = this.valuesType.createResolver(type.valuesType, opts);\n rsv._read = this._read;\n }\n };\n MapType.prototype._copy = function(val, opts) {\n if (val && typeof val == \"object\" && !Array.isArray(val)) {\n var values = this.valuesType;\n var keys = Object.keys(val);\n var i, l, key;\n var copy = {};\n for (i = 0, l = keys.length; i < l; i++) {\n key = keys[i];\n copy[key] = values._copy(val[key], opts);\n }\n return copy;\n }\n throwInvalidError(val, this);\n };\n MapType.prototype.compare = MapType.prototype._match;\n MapType.prototype.typeName = \"map\";\n MapType.prototype.getValuesType = function() {\n return this.valuesType;\n };\n MapType.prototype.random = function() {\n var val = {};\n var i, l;\n for (i = 0, l = RANDOM.nextInt(10); i < l; i++) {\n val[RANDOM.nextString(RANDOM.nextInt(20))] = this.valuesType.random();\n }\n return val;\n };\n MapType.prototype._deref = function(schema, opts) {\n schema.values = this.valuesType._attrs(opts);\n };\n function ArrayType(schema, opts) {\n Type.call(this);\n if (!schema.items) {\n throw new Error(f2(\"missing array items: %j\", schema));\n }\n this.itemsType = Type.forSchema(schema.items, opts);\n this._branchConstructor = this._createBranchConstructor();\n Object.freeze(this);\n }\n util.inherits(ArrayType, Type);\n ArrayType.prototype._check = function(val, flags, hook, path) {\n if (!Array.isArray(val)) {\n if (hook) {\n hook(val, this);\n }\n return false;\n }\n var items = this.itemsType;\n var b2 = true;\n var i, l, j2;\n if (hook) {\n j2 = path.length;\n path.push(\"\");\n for (i = 0, l = val.length; i < l; i++) {\n path[j2] = \"\" + i;\n if (!items._check(val[i], flags, hook, path)) {\n b2 = false;\n }\n }\n path.pop();\n } else {\n for (i = 0, l = val.length; i < l; i++) {\n if (!items._check(val[i], flags)) {\n return false;\n }\n }\n }\n return b2;\n };\n ArrayType.prototype._read = function(tap) {\n var items = this.itemsType;\n var i = 0;\n var val, n;\n while (n = tap.readLong()) {\n if (n < 0) {\n n = -n;\n tap.skipLong();\n }\n val = val || new Array(n);\n while (n--) {\n val[i++] = items._read(tap);\n }\n }\n return val || [];\n };\n ArrayType.prototype._skip = function(tap) {\n var items = this.itemsType;\n var len, n;\n while (n = tap.readLong()) {\n if (n < 0) {\n len = tap.readLong();\n tap.pos += len;\n } else {\n while (n--) {\n items._skip(tap);\n }\n }\n }\n };\n ArrayType.prototype._write = function(tap, val) {\n if (!Array.isArray(val)) {\n throwInvalidError(val, this);\n }\n var items = this.itemsType;\n var n = val.length;\n var i;\n if (n) {\n tap.writeLong(n);\n for (i = 0; i < n; i++) {\n items._write(tap, val[i]);\n }\n }\n tap.writeLong(0);\n };\n ArrayType.prototype._match = function(tap1, tap2) {\n var n1 = tap1.readLong();\n var n2 = tap2.readLong();\n var f3;\n while (n1 && n2) {\n f3 = this.itemsType._match(tap1, tap2);\n if (f3) {\n return f3;\n }\n if (!--n1) {\n n1 = readArraySize(tap1);\n }\n if (!--n2) {\n n2 = readArraySize(tap2);\n }\n }\n return utils.compare(n1, n2);\n };\n ArrayType.prototype._update = function(resolver, type, opts) {\n if (type.typeName === \"array\") {\n resolver.itemsType = this.itemsType.createResolver(type.itemsType, opts);\n resolver._read = this._read;\n }\n };\n ArrayType.prototype._copy = function(val, opts) {\n if (!Array.isArray(val)) {\n throwInvalidError(val, this);\n }\n var items = new Array(val.length);\n var i, l;\n for (i = 0, l = val.length; i < l; i++) {\n items[i] = this.itemsType._copy(val[i], opts);\n }\n return items;\n };\n ArrayType.prototype._deref = function(schema, opts) {\n schema.items = this.itemsType._attrs(opts);\n };\n ArrayType.prototype.compare = function(val1, val2) {\n var n1 = val1.length;\n var n2 = val2.length;\n var i, l, f3;\n for (i = 0, l = Math.min(n1, n2); i < l; i++) {\n if (f3 = this.itemsType.compare(val1[i], val2[i])) {\n return f3;\n }\n }\n return utils.compare(n1, n2);\n };\n ArrayType.prototype.getItemsType = function() {\n return this.itemsType;\n };\n ArrayType.prototype.typeName = \"array\";\n ArrayType.prototype.random = function() {\n var arr = [];\n var i, l;\n for (i = 0, l = RANDOM.nextInt(10); i < l; i++) {\n arr.push(this.itemsType.random());\n }\n return arr;\n };\n function RecordType(schema, opts) {\n opts = opts || {};\n var namespace = opts.namespace;\n if (schema.namespace !== void 0) {\n opts.namespace = schema.namespace;\n } else if (schema.name) {\n var ns = utils.impliedNamespace(schema.name);\n if (ns !== void 0) {\n opts.namespace = ns;\n }\n }\n Type.call(this, schema, opts);\n if (!Array.isArray(schema.fields)) {\n throw new Error(f2(\"non-array record fields: %j\", schema.fields));\n }\n if (utils.hasDuplicates(schema.fields, function(f3) {\n return f3.name;\n })) {\n throw new Error(f2(\"duplicate field name: %j\", schema.fields));\n }\n this._fieldsByName = {};\n this.fields = Object.freeze(schema.fields.map(function(f3) {\n var field = new Field(f3, opts);\n this._fieldsByName[field.name] = field;\n return field;\n }, this));\n this._branchConstructor = this._createBranchConstructor();\n this._isError = schema.type === \"error\";\n this.recordConstructor = this._createConstructor(\n opts.errorStackTraces,\n opts.omitRecordMethods\n );\n this._read = this._createReader();\n this._skip = this._createSkipper();\n this._write = this._createWriter();\n this._check = this._createChecker();\n opts.namespace = namespace;\n Object.freeze(this);\n }\n util.inherits(RecordType, Type);\n RecordType.prototype._getConstructorName = function() {\n return this.name ? utils.capitalize(utils.unqualify(this.name)) : this._isError ? \"Error$\" : \"Record$\";\n };\n RecordType.prototype._createConstructor = function(errorStack, plainRecords) {\n var outerArgs = [];\n var innerArgs = [];\n var ds = [];\n var innerBody = \"\";\n var i, l, field, name, defaultValue, hasDefault, stackField;\n for (i = 0, l = this.fields.length; i < l; i++) {\n field = this.fields[i];\n defaultValue = field.defaultValue;\n hasDefault = defaultValue() !== void 0;\n name = field.name;\n if (errorStack && this._isError && name === \"stack\" && Type.isType(field.type, \"string\") && !hasDefault) {\n stackField = field;\n }\n innerArgs.push(\"v\" + i);\n innerBody += \" \";\n if (!hasDefault) {\n innerBody += \"this.\" + name + \" = v\" + i + \";\\n\";\n } else {\n innerBody += \"if (v\" + i + \" === undefined) { \";\n innerBody += \"this.\" + name + \" = d\" + ds.length + \"(); \";\n innerBody += \"} else { this.\" + name + \" = v\" + i + \"; }\\n\";\n outerArgs.push(\"d\" + ds.length);\n ds.push(defaultValue);\n }\n }\n if (stackField) {\n innerBody += \" if (this.stack === undefined) { \";\n if (typeof Error.captureStackTrace == \"function\") {\n innerBody += \"Error.captureStackTrace(this, this.constructor);\";\n } else {\n innerBody += \"this.stack = Error().stack;\";\n }\n innerBody += \" }\\n\";\n }\n var outerBody = \"return function \" + this._getConstructorName() + \"(\";\n outerBody += innerArgs.join() + \") {\\n\" + innerBody + \"};\";\n var Record = new Function(outerArgs.join(), outerBody).apply(void 0, ds);\n if (plainRecords) {\n return Record;\n }\n var self = this;\n Record.getType = function() {\n return self;\n };\n Record.type = self;\n if (this._isError) {\n util.inherits(Record, Error);\n Record.prototype.name = this._getConstructorName();\n }\n Record.prototype.clone = function(o) {\n return self.clone(this, o);\n };\n Record.prototype.compare = function(v2) {\n return self.compare(this, v2);\n };\n Record.prototype.isValid = function(o) {\n return self.isValid(this, o);\n };\n Record.prototype.toBuffer = function() {\n return self.toBuffer(this);\n };\n Record.prototype.toString = function() {\n return self.toString(this);\n };\n Record.prototype.wrap = function() {\n return self.wrap(this);\n };\n Record.prototype.wrapped = Record.prototype.wrap;\n return Record;\n };\n RecordType.prototype._createChecker = function() {\n var names = [];\n var values = [];\n var name = this._getConstructorName();\n var body = \"return function check\" + name + \"(v, f, h, p) {\\n\";\n body += \" if (\\n\";\n body += \" v === null ||\\n\";\n body += \" typeof v != 'object' ||\\n\";\n body += \" (f && !this._checkFields(v))\\n\";\n body += \" ) {\\n\";\n body += \" if (h) { h(v, this); }\\n\";\n body += \" return false;\\n\";\n body += \" }\\n\";\n if (!this.fields.length) {\n body += \" return true;\\n\";\n } else {\n for (i = 0, l = this.fields.length; i < l; i++) {\n field = this.fields[i];\n names.push(\"t\" + i);\n values.push(field.type);\n if (field.defaultValue() !== void 0) {\n body += \" var v\" + i + \" = v.\" + field.name + \";\\n\";\n }\n }\n body += \" if (h) {\\n\";\n body += \" var b = 1;\\n\";\n body += \" var j = p.length;\\n\";\n body += \" p.push('');\\n\";\n var i, l, field;\n for (i = 0, l = this.fields.length; i < l; i++) {\n field = this.fields[i];\n body += \" p[j] = '\" + field.name + \"';\\n\";\n body += \" b &= \";\n if (field.defaultValue() === void 0) {\n body += \"t\" + i + \"._check(v.\" + field.name + \", f, h, p);\\n\";\n } else {\n body += \"v\" + i + \" === undefined || \";\n body += \"t\" + i + \"._check(v\" + i + \", f, h, p);\\n\";\n }\n }\n body += \" p.pop();\\n\";\n body += \" return !!b;\\n\";\n body += \" } else {\\n return (\\n \";\n body += this.fields.map(function(field2, i2) {\n return field2.defaultValue() === void 0 ? \"t\" + i2 + \"._check(v.\" + field2.name + \", f)\" : \"(v\" + i2 + \" === undefined || t\" + i2 + \"._check(v\" + i2 + \", f))\";\n }).join(\" &&\\n \");\n body += \"\\n );\\n }\\n\";\n }\n body += \"};\";\n return new Function(names.join(), body).apply(void 0, values);\n };\n RecordType.prototype._createReader = function() {\n var names = [];\n var values = [this.recordConstructor];\n var i, l;\n for (i = 0, l = this.fields.length; i < l; i++) {\n names.push(\"t\" + i);\n values.push(this.fields[i].type);\n }\n var name = this._getConstructorName();\n var body = \"return function read\" + name + \"(t) {\\n\";\n body += \" return new \" + name + \"(\\n \";\n body += names.map(function(s) {\n return s + \"._read(t)\";\n }).join(\",\\n \");\n body += \"\\n );\\n};\";\n names.unshift(name);\n return new Function(names.join(), body).apply(void 0, values);\n };\n RecordType.prototype._createSkipper = function() {\n var args = [];\n var body = \"return function skip\" + this._getConstructorName() + \"(t) {\\n\";\n var values = [];\n var i, l;\n for (i = 0, l = this.fields.length; i < l; i++) {\n args.push(\"t\" + i);\n values.push(this.fields[i].type);\n body += \" t\" + i + \"._skip(t);\\n\";\n }\n body += \"}\";\n return new Function(args.join(), body).apply(void 0, values);\n };\n RecordType.prototype._createWriter = function() {\n var args = [];\n var name = this._getConstructorName();\n var body = \"return function write\" + name + \"(t, v) {\\n\";\n var values = [];\n var i, l, field, value;\n for (i = 0, l = this.fields.length; i < l; i++) {\n field = this.fields[i];\n args.push(\"t\" + i);\n values.push(field.type);\n body += \" \";\n if (field.defaultValue() === void 0) {\n body += \"t\" + i + \"._write(t, v.\" + field.name + \");\\n\";\n } else {\n value = field.type.toBuffer(field.defaultValue()).toString(\"binary\");\n args.push(\"d\" + i);\n values.push(value);\n body += \"var v\" + i + \" = v.\" + field.name + \";\\n\";\n body += \"if (v\" + i + \" === undefined) {\\n\";\n body += \" t.writeBinary(d\" + i + \", \" + value.length + \");\\n\";\n body += \" } else {\\n t\" + i + \"._write(t, v\" + i + \");\\n }\\n\";\n }\n }\n body += \"}\";\n return new Function(args.join(), body).apply(void 0, values);\n };\n RecordType.prototype._update = function(resolver, type, opts) {\n if (!hasCompatibleName(this, type, !opts.ignoreNamespaces)) {\n throw new Error(f2(\"no alias found for %s\", type.name));\n }\n var rFields = this.fields;\n var wFields = type.fields;\n var wFieldsMap = utils.toMap(wFields, function(f3) {\n return f3.name;\n });\n var innerArgs = [];\n var resolvers = {};\n var i, j2, field, name, names, matches, fieldResolver;\n for (i = 0; i < rFields.length; i++) {\n field = rFields[i];\n names = getAliases(field);\n matches = [];\n for (j2 = 0; j2 < names.length; j2++) {\n name = names[j2];\n if (wFieldsMap[name]) {\n matches.push(name);\n }\n }\n if (matches.length > 1) {\n throw new Error(\n f2(\"ambiguous aliasing for %s.%s (%s)\", type.name, field.name, matches)\n );\n }\n if (!matches.length) {\n if (field.defaultValue() === void 0) {\n throw new Error(\n f2(\"no matching field for default-less %s.%s\", type.name, field.name)\n );\n }\n innerArgs.push(\"undefined\");\n } else {\n name = matches[0];\n fieldResolver = {\n resolver: field.type.createResolver(wFieldsMap[name].type, opts),\n name: \"_\" + field.name\n // Reader field name.\n };\n if (!resolvers[name]) {\n resolvers[name] = [fieldResolver];\n } else {\n resolvers[name].push(fieldResolver);\n }\n innerArgs.push(fieldResolver.name);\n }\n }\n var lazyIndex = -1;\n i = wFields.length;\n while (i && resolvers[wFields[--i].name] === void 0) {\n lazyIndex = i;\n }\n var uname = this._getConstructorName();\n var args = [uname];\n var values = [this.recordConstructor];\n var body = \" return function read\" + uname + \"(t, b) {\\n\";\n for (i = 0; i < wFields.length; i++) {\n if (i === lazyIndex) {\n body += \" if (!b) {\\n\";\n }\n field = type.fields[i];\n name = field.name;\n if (resolvers[name] === void 0) {\n body += ~lazyIndex && i >= lazyIndex ? \" \" : \" \";\n args.push(\"r\" + i);\n values.push(field.type);\n body += \"r\" + i + \"._skip(t);\\n\";\n } else {\n j2 = resolvers[name].length;\n while (j2--) {\n body += ~lazyIndex && i >= lazyIndex ? \" \" : \" \";\n args.push(\"r\" + i + \"f\" + j2);\n fieldResolver = resolvers[name][j2];\n values.push(fieldResolver.resolver);\n body += \"var \" + fieldResolver.name + \" = \";\n body += \"r\" + i + \"f\" + j2 + \"._\" + (j2 ? \"peek\" : \"read\") + \"(t);\\n\";\n }\n }\n }\n if (~lazyIndex) {\n body += \" }\\n\";\n }\n body += \" return new \" + uname + \"(\" + innerArgs.join() + \");\\n};\";\n resolver._read = new Function(args.join(), body).apply(void 0, values);\n };\n RecordType.prototype._match = function(tap1, tap2) {\n var fields = this.fields;\n var i, l, field, order, type;\n for (i = 0, l = fields.length; i < l; i++) {\n field = fields[i];\n order = field._order;\n type = field.type;\n if (order) {\n order *= type._match(tap1, tap2);\n if (order) {\n return order;\n }\n } else {\n type._skip(tap1);\n type._skip(tap2);\n }\n }\n return 0;\n };\n RecordType.prototype._checkFields = function(obj) {\n var keys = Object.keys(obj);\n var i, l;\n for (i = 0, l = keys.length; i < l; i++) {\n if (!this._fieldsByName[keys[i]]) {\n return false;\n }\n }\n return true;\n };\n RecordType.prototype._copy = function(val, opts) {\n var hook = opts && opts.fieldHook;\n var values = [void 0];\n var i, l, field, value;\n for (i = 0, l = this.fields.length; i < l; i++) {\n field = this.fields[i];\n value = val[field.name];\n if (value === void 0 && field.hasOwnProperty(\"defaultValue\")) {\n value = field.defaultValue();\n }\n if (opts && !opts.skip || value !== void 0) {\n value = field.type._copy(value, opts);\n }\n if (hook) {\n value = hook(field, value, this);\n }\n values.push(value);\n }\n var Record = this.recordConstructor;\n return new (Record.bind.apply(Record, values))();\n };\n RecordType.prototype._deref = function(schema, opts) {\n schema.fields = this.fields.map(function(field) {\n var fieldType = field.type;\n var fieldSchema = {\n name: field.name,\n type: fieldType._attrs(opts)\n };\n if (opts.exportAttrs) {\n var val = field.defaultValue();\n if (val !== void 0) {\n fieldSchema[\"default\"] = fieldType._copy(val, { coerce: 3, wrap: 3 });\n }\n var fieldOrder = field.order;\n if (fieldOrder !== \"ascending\") {\n fieldSchema.order = fieldOrder;\n }\n var fieldAliases = field.aliases;\n if (fieldAliases.length) {\n fieldSchema.aliases = fieldAliases;\n }\n var fieldDoc = field.doc;\n if (fieldDoc !== void 0) {\n fieldSchema.doc = fieldDoc;\n }\n }\n return fieldSchema;\n });\n };\n RecordType.prototype.compare = function(val1, val2) {\n var fields = this.fields;\n var i, l, field, name, order, type;\n for (i = 0, l = fields.length; i < l; i++) {\n field = fields[i];\n name = field.name;\n order = field._order;\n type = field.type;\n if (order) {\n order *= type.compare(val1[name], val2[name]);\n if (order) {\n return order;\n }\n }\n }\n return 0;\n };\n RecordType.prototype.random = function() {\n var fields = this.fields.map(function(f3) {\n return f3.type.random();\n });\n fields.unshift(void 0);\n var Record = this.recordConstructor;\n return new (Record.bind.apply(Record, fields))();\n };\n RecordType.prototype.field = function(name) {\n return this._fieldsByName[name];\n };\n RecordType.prototype.getField = RecordType.prototype.field;\n RecordType.prototype.getFields = function() {\n return this.fields;\n };\n RecordType.prototype.getRecordConstructor = function() {\n return this.recordConstructor;\n };\n Object.defineProperty(RecordType.prototype, \"typeName\", {\n enumerable: true,\n get: function() {\n return this._isError ? \"error\" : \"record\";\n }\n });\n function LogicalType(schema, opts) {\n this._logicalTypeName = schema.logicalType;\n Type.call(this);\n LOGICAL_TYPE = this;\n try {\n this._underlyingType = Type.forSchema(schema, opts);\n } finally {\n LOGICAL_TYPE = null;\n var l = UNDERLYING_TYPES.length;\n if (l && UNDERLYING_TYPES[l - 1][0] === this) {\n UNDERLYING_TYPES.pop();\n }\n }\n if (Type.isType(this.underlyingType, \"union\")) {\n this._branchConstructor = this.underlyingType._branchConstructor;\n } else {\n this._branchConstructor = this.underlyingType._createBranchConstructor();\n }\n }\n util.inherits(LogicalType, Type);\n Object.defineProperty(LogicalType.prototype, \"typeName\", {\n enumerable: true,\n get: function() {\n return \"logical:\" + this._logicalTypeName;\n }\n });\n Object.defineProperty(LogicalType.prototype, \"underlyingType\", {\n enumerable: true,\n get: function() {\n if (this._underlyingType) {\n return this._underlyingType;\n }\n var i, l, arr;\n for (i = 0, l = UNDERLYING_TYPES.length; i < l; i++) {\n arr = UNDERLYING_TYPES[i];\n if (arr[0] === this) {\n return arr[1];\n }\n }\n }\n });\n LogicalType.prototype.getUnderlyingType = function() {\n return this.underlyingType;\n };\n LogicalType.prototype._read = function(tap) {\n return this._fromValue(this.underlyingType._read(tap));\n };\n LogicalType.prototype._write = function(tap, any) {\n this.underlyingType._write(tap, this._toValue(any));\n };\n LogicalType.prototype._check = function(any, flags, hook, path) {\n try {\n var val = this._toValue(any);\n } catch (err) {\n }\n if (val === void 0) {\n if (hook) {\n hook(any, this);\n }\n return false;\n }\n return this.underlyingType._check(val, flags, hook, path);\n };\n LogicalType.prototype._copy = function(any, opts) {\n var type = this.underlyingType;\n switch (opts && opts.coerce) {\n case 3:\n return type._copy(this._toValue(any), opts);\n case 2:\n return this._fromValue(type._copy(any, opts));\n default:\n return this._fromValue(type._copy(this._toValue(any), opts));\n }\n };\n LogicalType.prototype._update = function(resolver, type, opts) {\n var _fromValue = this._resolve(type, opts);\n if (_fromValue) {\n resolver._read = function(tap) {\n return _fromValue(type._read(tap));\n };\n }\n };\n LogicalType.prototype.compare = function(obj1, obj2) {\n var val1 = this._toValue(obj1);\n var val2 = this._toValue(obj2);\n return this.underlyingType.compare(val1, val2);\n };\n LogicalType.prototype.random = function() {\n return this._fromValue(this.underlyingType.random());\n };\n LogicalType.prototype._deref = function(schema, opts) {\n var type = this.underlyingType;\n var isVisited = type.name !== void 0 && opts.derefed[type.name];\n schema = type._attrs(opts);\n if (!isVisited && opts.exportAttrs) {\n if (typeof schema == \"string\") {\n schema = { type: schema };\n }\n schema.logicalType = this._logicalTypeName;\n this._export(schema);\n }\n return schema;\n };\n LogicalType.prototype._skip = function(tap) {\n this.underlyingType._skip(tap);\n };\n LogicalType.prototype._export = function() {\n };\n LogicalType.prototype._fromValue = utils.abstractFunction;\n LogicalType.prototype._toValue = utils.abstractFunction;\n LogicalType.prototype._resolve = utils.abstractFunction;\n function AbstractLongType(noUnpack) {\n this._concreteTypeName = \"long\";\n PrimitiveType.call(this, true);\n this._noUnpack = !!noUnpack;\n }\n util.inherits(AbstractLongType, LongType);\n AbstractLongType.prototype.typeName = \"abstract:long\";\n AbstractLongType.prototype._check = function(val, flags, hook) {\n var b2 = this._isValid(val);\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n AbstractLongType.prototype._read = function(tap) {\n var buf, pos;\n if (this._noUnpack) {\n pos = tap.pos;\n tap.skipLong();\n buf = tap.buf.slice(pos, tap.pos);\n } else {\n buf = tap.unpackLongBytes(tap);\n }\n if (tap.isValid()) {\n return this._fromBuffer(buf);\n }\n };\n AbstractLongType.prototype._write = function(tap, val) {\n if (!this._isValid(val)) {\n throwInvalidError(val, this);\n }\n var buf = this._toBuffer(val);\n if (this._noUnpack) {\n tap.writeFixed(buf);\n } else {\n tap.packLongBytes(buf);\n }\n };\n AbstractLongType.prototype._copy = function(val, opts) {\n switch (opts && opts.coerce) {\n case 3:\n return this._toJSON(val);\n case 2:\n return this._fromJSON(val);\n default:\n return this._fromJSON(this._toJSON(val));\n }\n };\n AbstractLongType.prototype._deref = function() {\n return \"long\";\n };\n AbstractLongType.prototype._update = function(resolver, type) {\n var self = this;\n switch (type.typeName) {\n case \"int\":\n resolver._read = function(tap) {\n return self._fromJSON(type._read(tap));\n };\n break;\n case \"abstract:long\":\n case \"long\":\n resolver._read = function(tap) {\n return self._read(tap);\n };\n }\n };\n AbstractLongType.prototype.random = function() {\n return this._fromJSON(LongType.prototype.random());\n };\n AbstractLongType.prototype._fromBuffer = utils.abstractFunction;\n AbstractLongType.prototype._toBuffer = utils.abstractFunction;\n AbstractLongType.prototype._fromJSON = utils.abstractFunction;\n AbstractLongType.prototype._toJSON = utils.abstractFunction;\n AbstractLongType.prototype._isValid = utils.abstractFunction;\n AbstractLongType.prototype.compare = utils.abstractFunction;\n function Field(schema, opts) {\n var name = schema.name;\n if (typeof name != \"string\" || !utils.isValidName(name)) {\n throw new Error(f2(\"invalid field name: %s\", name));\n }\n this.name = name;\n this.type = Type.forSchema(schema.type, opts);\n this.aliases = schema.aliases || [];\n this.doc = schema.doc !== void 0 ? \"\" + schema.doc : void 0;\n this._order = function(order) {\n switch (order) {\n case \"ascending\":\n return 1;\n case \"descending\":\n return -1;\n case \"ignore\":\n return 0;\n default:\n throw new Error(f2(\"invalid order: %j\", order));\n }\n }(schema.order === void 0 ? \"ascending\" : schema.order);\n var value = schema[\"default\"];\n if (value !== void 0) {\n var type = this.type;\n var val;\n try {\n val = type._copy(value, { coerce: 2, wrap: 2 });\n } catch (err) {\n var msg = f2(\"incompatible field default %j (%s)\", value, err.message);\n if (Type.isType(type, \"union\")) {\n msg += f2(\n \", union defaults must match the first branch's type (%j)\",\n type.types[0]\n );\n }\n throw new Error(msg);\n }\n if (isPrimitive(type.typeName) && type.typeName !== \"bytes\") {\n this.defaultValue = function() {\n return val;\n };\n } else {\n this.defaultValue = function() {\n return type._copy(val);\n };\n }\n }\n Object.freeze(this);\n }\n Field.prototype.defaultValue = function() {\n };\n Object.defineProperty(Field.prototype, \"order\", {\n enumerable: true,\n get: function() {\n return [\"descending\", \"ignore\", \"ascending\"][this._order + 1];\n }\n });\n Field.prototype.getAliases = function() {\n return this.aliases;\n };\n Field.prototype.getDefault = Field.prototype.defaultValue;\n Field.prototype.getName = function() {\n return this.name;\n };\n Field.prototype.getOrder = function() {\n return this.order;\n };\n Field.prototype.getType = function() {\n return this.type;\n };\n function Resolver(readerType) {\n this._readerType = readerType;\n this._read = null;\n this.itemsType = null;\n this.size = 0;\n this.symbols = null;\n this.valuesType = null;\n }\n Resolver.prototype._peek = Type.prototype._peek;\n Resolver.prototype.inspect = function() {\n return \"\";\n };\n function Hash() {\n this.str = void 0;\n }\n function readValue(type, tap, resolver, lazy) {\n if (resolver) {\n if (resolver._readerType !== type) {\n throw new Error(\"invalid resolver\");\n }\n return resolver._read(tap, lazy);\n } else {\n return type._read(tap);\n }\n }\n function getAliases(obj) {\n var names = {};\n if (obj.name) {\n names[obj.name] = true;\n }\n var aliases = obj.aliases;\n var i, l;\n for (i = 0, l = aliases.length; i < l; i++) {\n names[aliases[i]] = true;\n }\n return Object.keys(names);\n }\n function hasCompatibleName(reader, writer, strict) {\n if (!writer.name) {\n return true;\n }\n var name = strict ? writer.name : utils.unqualify(writer.name);\n var aliases = getAliases(reader);\n var i, l, alias;\n for (i = 0, l = aliases.length; i < l; i++) {\n alias = aliases[i];\n if (!strict) {\n alias = utils.unqualify(alias);\n }\n if (alias === name) {\n return true;\n }\n }\n return false;\n }\n function isPrimitive(typeName) {\n var type = TYPES[typeName];\n return type && type.prototype instanceof PrimitiveType;\n }\n function getClassName(typeName) {\n if (typeName === \"error\") {\n typeName = \"record\";\n } else {\n var match = /^([^:]+):(.*)$/.exec(typeName);\n if (match) {\n if (match[1] === \"union\") {\n typeName = match[2] + \"Union\";\n } else {\n typeName = match[1];\n }\n }\n }\n return utils.capitalize(typeName) + \"Type\";\n }\n function readArraySize(tap) {\n var n = tap.readLong();\n if (n < 0) {\n n = -n;\n tap.skipLong();\n }\n return n;\n }\n function isSafeLong(n) {\n return n >= -9007199254740990 && n <= 9007199254740990;\n }\n function isJsonBuffer(obj) {\n return obj && obj.type === \"Buffer\" && Array.isArray(obj.data);\n }\n function throwInvalidError(val, type) {\n throw new Error(f2(\"invalid %j: %j\", type.schema(), val));\n }\n function maybeQualify(name, ns) {\n var unqualified = utils.unqualify(name);\n return isPrimitive(unqualified) ? unqualified : utils.qualify(name, ns);\n }\n function getTypeBucket(type) {\n var typeName = type.typeName;\n switch (typeName) {\n case \"double\":\n case \"float\":\n case \"int\":\n case \"long\":\n return \"number\";\n case \"bytes\":\n case \"fixed\":\n return \"buffer\";\n case \"enum\":\n return \"string\";\n case \"map\":\n case \"error\":\n case \"record\":\n return \"object\";\n default:\n return typeName;\n }\n }\n function getValueBucket(val) {\n if (val === null) {\n return \"null\";\n }\n var bucket = typeof val;\n if (bucket === \"object\") {\n if (Array.isArray(val)) {\n return \"array\";\n } else if (Buffer2.isBuffer(val)) {\n return \"buffer\";\n }\n }\n return bucket;\n }\n function isAmbiguous(types) {\n var buckets = {};\n var i, l, bucket, type;\n for (i = 0, l = types.length; i < l; i++) {\n type = types[i];\n if (!Type.isType(type, \"logical\")) {\n bucket = getTypeBucket(type);\n if (buckets[bucket]) {\n return true;\n }\n buckets[bucket] = true;\n }\n }\n return false;\n }\n function combineNumbers(types) {\n var typeNames = [\"int\", \"long\", \"float\", \"double\"];\n var superIndex = -1;\n var superType = null;\n var i, l, type, index;\n for (i = 0, l = types.length; i < l; i++) {\n type = types[i];\n index = typeNames.indexOf(type.typeName);\n if (index > superIndex) {\n superIndex = index;\n superType = type;\n }\n }\n return superType;\n }\n function combineStrings(types, opts) {\n var symbols = {};\n var i, l, type, typeSymbols;\n for (i = 0, l = types.length; i < l; i++) {\n type = types[i];\n if (type.typeName === \"string\") {\n return type;\n }\n typeSymbols = type.symbols;\n var j2, m2;\n for (j2 = 0, m2 = typeSymbols.length; j2 < m2; j2++) {\n symbols[typeSymbols[j2]] = true;\n }\n }\n return Type.forSchema({ type: \"enum\", symbols: Object.keys(symbols) }, opts);\n }\n function combineBuffers(types, opts) {\n var size = -1;\n var i, l, type;\n for (i = 0, l = types.length; i < l; i++) {\n type = types[i];\n if (type.typeName === \"bytes\") {\n return type;\n }\n if (size === -1) {\n size = type.size;\n } else if (type.size !== size) {\n size = -2;\n }\n }\n return size < 0 ? Type.forSchema(\"bytes\", opts) : types[0];\n }\n function combineObjects(types, opts) {\n var allTypes = [];\n var fieldTypes = {};\n var fieldDefaults = {};\n var isValidRecord = true;\n var i, l, type, fields;\n for (i = 0, l = types.length; i < l; i++) {\n type = types[i];\n if (type.typeName === \"map\") {\n isValidRecord = false;\n allTypes.push(type.valuesType);\n } else {\n fields = type.fields;\n var j2, m2, field, fieldDefault, fieldName, fieldType;\n for (j2 = 0, m2 = fields.length; j2 < m2; j2++) {\n field = fields[j2];\n fieldName = field.name;\n fieldType = field.type;\n allTypes.push(fieldType);\n if (isValidRecord) {\n if (!fieldTypes[fieldName]) {\n fieldTypes[fieldName] = [];\n }\n fieldTypes[fieldName].push(fieldType);\n fieldDefault = field.defaultValue();\n if (fieldDefault !== void 0) {\n fieldDefaults[fieldName] = fieldDefault;\n }\n }\n }\n }\n }\n if (isValidRecord) {\n var fieldNames = Object.keys(fieldTypes);\n for (i = 0, l = fieldNames.length; i < l; i++) {\n fieldName = fieldNames[i];\n if (fieldTypes[fieldName].length < types.length && fieldDefaults[fieldName] === void 0) {\n if (opts && opts.strictDefaults) {\n isValidRecord = false;\n } else {\n fieldTypes[fieldName].unshift(Type.forSchema(\"null\", opts));\n fieldDefaults[fieldName] = null;\n }\n }\n }\n }\n var schema;\n if (isValidRecord) {\n schema = {\n type: \"record\",\n fields: fieldNames.map(function(s) {\n var fieldType2 = Type.forTypes(fieldTypes[s], opts);\n var fieldDefault2 = fieldDefaults[s];\n if (fieldDefault2 !== void 0 && ~fieldType2.typeName.indexOf(\"union\")) {\n var unionTypes = fieldType2.types.slice();\n var i2, l2;\n for (i2 = 0, l2 = unionTypes.length; i2 < l2; i2++) {\n if (unionTypes[i2].isValid(fieldDefault2)) {\n break;\n }\n }\n if (i2 > 0) {\n var unionType = unionTypes[0];\n unionTypes[0] = unionTypes[i2];\n unionTypes[i2] = unionType;\n fieldType2 = Type.forSchema(unionTypes, opts);\n }\n }\n return {\n name: s,\n type: fieldType2,\n \"default\": fieldDefaults[s]\n };\n })\n };\n } else {\n schema = {\n type: \"map\",\n values: Type.forTypes(allTypes, opts)\n };\n }\n return Type.forSchema(schema, opts);\n }\n module.exports = {\n Type,\n getTypeBucket,\n getValueBucket,\n isPrimitive,\n builtins: function() {\n var types = {\n LogicalType,\n UnwrappedUnionType,\n WrappedUnionType\n };\n var typeNames = Object.keys(TYPES);\n var i, l, typeName;\n for (i = 0, l = typeNames.length; i < l; i++) {\n typeName = typeNames[i];\n types[getClassName(typeName)] = TYPES[typeName];\n }\n return types;\n }()\n };\n }\n});\n\n// node_modules/avsc/lib/containers.js\nvar require_containers = __commonJS({\n \"node_modules/avsc/lib/containers.js\"(exports, module) {\n \"use strict\";\n var types = require_types();\n var utils = require_utils();\n var buffer = __import_BUFFER;\n var stream = __import_STREAM;\n var util = __import_UTIL;\n var zlib = __import_ZLIB;\n var Buffer2 = buffer.Buffer;\n var OPTS = { namespace: \"org.apache.avro.file\" };\n var LONG_TYPE = types.Type.forSchema(\"long\", OPTS);\n var MAP_BYTES_TYPE = types.Type.forSchema({ type: \"map\", values: \"bytes\" }, OPTS);\n var HEADER_TYPE = types.Type.forSchema({\n name: \"Header\",\n type: \"record\",\n fields: [\n { name: \"magic\", type: { type: \"fixed\", name: \"Magic\", size: 4 } },\n { name: \"meta\", type: MAP_BYTES_TYPE },\n { name: \"sync\", type: { type: \"fixed\", name: \"Sync\", size: 16 } }\n ]\n }, OPTS);\n var BLOCK_TYPE = types.Type.forSchema({\n name: \"Block\",\n type: \"record\",\n fields: [\n { name: \"count\", type: \"long\" },\n { name: \"data\", type: \"bytes\" },\n { name: \"sync\", type: \"Sync\" }\n ]\n }, OPTS);\n var MAGIC_BYTES = utils.bufferFrom(\"Obj\u0001\");\n var f2 = util.format;\n var Tap = utils.Tap;\n function RawDecoder(schema, opts) {\n opts = opts || {};\n var noDecode = !!opts.noDecode;\n stream.Duplex.call(this, {\n readableObjectMode: !noDecode,\n allowHalfOpen: false\n });\n this._type = types.Type.forSchema(schema);\n this._tap = new Tap(utils.newBuffer(0));\n this._writeCb = null;\n this._needPush = false;\n this._readValue = createReader(noDecode, this._type);\n this._finished = false;\n this.on(\"finish\", function() {\n this._finished = true;\n this._read();\n });\n }\n util.inherits(RawDecoder, stream.Duplex);\n RawDecoder.prototype._write = function(chunk, encoding, cb) {\n this._writeCb = cb;\n var tap = this._tap;\n tap.buf = Buffer2.concat([tap.buf.slice(tap.pos), chunk]);\n tap.pos = 0;\n if (this._needPush) {\n this._needPush = false;\n this._read();\n }\n };\n RawDecoder.prototype._read = function() {\n this._needPush = false;\n var tap = this._tap;\n var pos = tap.pos;\n var val = this._readValue(tap);\n if (tap.isValid()) {\n this.push(val);\n } else if (!this._finished) {\n tap.pos = pos;\n this._needPush = true;\n if (this._writeCb) {\n this._writeCb();\n }\n } else {\n this.push(null);\n }\n };\n function BlockDecoder(opts) {\n opts = opts || {};\n var noDecode = !!opts.noDecode;\n stream.Duplex.call(this, {\n allowHalfOpen: true,\n // For async decompressors.\n readableObjectMode: !noDecode\n });\n this._rType = opts.readerSchema !== void 0 ? types.Type.forSchema(opts.readerSchema) : void 0;\n this._wType = null;\n this._codecs = opts.codecs;\n this._codec = void 0;\n this._parseHook = opts.parseHook;\n this._tap = new Tap(utils.newBuffer(0));\n this._blockTap = new Tap(utils.newBuffer(0));\n this._syncMarker = null;\n this._readValue = null;\n this._noDecode = noDecode;\n this._queue = new utils.OrderedQueue();\n this._decompress = null;\n this._index = 0;\n this._remaining = void 0;\n this._needPush = false;\n this._finished = false;\n this.on(\"finish\", function() {\n this._finished = true;\n if (this._needPush) {\n this._read();\n }\n });\n }\n util.inherits(BlockDecoder, stream.Duplex);\n BlockDecoder.defaultCodecs = function() {\n return {\n \"null\": function(buf, cb) {\n cb(null, buf);\n },\n \"deflate\": zlib.inflateRaw\n };\n };\n BlockDecoder.getDefaultCodecs = BlockDecoder.defaultCodecs;\n BlockDecoder.prototype._decodeHeader = function() {\n var tap = this._tap;\n if (tap.buf.length < MAGIC_BYTES.length) {\n return false;\n }\n if (!MAGIC_BYTES.equals(tap.buf.slice(0, MAGIC_BYTES.length))) {\n this.emit(\"error\", new Error(\"invalid magic bytes\"));\n return false;\n }\n var header = HEADER_TYPE._read(tap);\n if (!tap.isValid()) {\n return false;\n }\n this._codec = (header.meta[\"avro.codec\"] || \"null\").toString();\n var codecs = this._codecs || BlockDecoder.getDefaultCodecs();\n this._decompress = codecs[this._codec];\n if (!this._decompress) {\n this.emit(\"error\", new Error(f2(\"unknown codec: %s\", this._codec)));\n return;\n }\n try {\n var schema = JSON.parse(header.meta[\"avro.schema\"].toString());\n if (this._parseHook) {\n schema = this._parseHook(schema);\n }\n this._wType = types.Type.forSchema(schema);\n } catch (err) {\n this.emit(\"error\", err);\n return;\n }\n try {\n this._readValue = createReader(this._noDecode, this._wType, this._rType);\n } catch (err) {\n this.emit(\"error\", err);\n return;\n }\n this._syncMarker = header.sync;\n this.emit(\"metadata\", this._wType, this._codec, header);\n return true;\n };\n BlockDecoder.prototype._write = function(chunk, encoding, cb) {\n var tap = this._tap;\n tap.buf = Buffer2.concat([tap.buf, chunk]);\n tap.pos = 0;\n if (!this._decodeHeader()) {\n process.nextTick(cb);\n return;\n }\n this._write = this._writeChunk;\n this._write(utils.newBuffer(0), encoding, cb);\n };\n BlockDecoder.prototype._writeChunk = function(chunk, encoding, cb) {\n var tap = this._tap;\n tap.buf = Buffer2.concat([tap.buf.slice(tap.pos), chunk]);\n tap.pos = 0;\n var nBlocks = 1;\n var block;\n while (block = tryReadBlock(tap)) {\n if (!this._syncMarker.equals(block.sync)) {\n this.emit(\"error\", new Error(\"invalid sync marker\"));\n return;\n }\n nBlocks++;\n this._decompress(\n block.data,\n this._createBlockCallback(block.data.length, block.count, chunkCb)\n );\n }\n chunkCb();\n function chunkCb() {\n if (!--nBlocks) {\n cb();\n }\n }\n };\n BlockDecoder.prototype._createBlockCallback = function(size, count, cb) {\n var self = this;\n var index = this._index++;\n return function(cause, data) {\n if (cause) {\n var err = new Error(f2(\"%s codec decompression error\", self._codec));\n err.cause = cause;\n self.emit(\"error\", err);\n cb();\n } else {\n self.emit(\"block\", new BlockInfo(count, data.length, size));\n self._queue.push(new BlockData(index, data, cb, count));\n if (self._needPush) {\n self._read();\n }\n }\n };\n };\n BlockDecoder.prototype._read = function() {\n this._needPush = false;\n var tap = this._blockTap;\n if (!this._remaining) {\n var data = this._queue.pop();\n if (!data || !data.count) {\n if (this._finished) {\n this.push(null);\n } else {\n this._needPush = true;\n }\n if (data) {\n data.cb();\n }\n return;\n }\n data.cb();\n this._remaining = data.count;\n tap.buf = data.buf;\n tap.pos = 0;\n }\n this._remaining--;\n var val;\n try {\n val = this._readValue(tap);\n if (!tap.isValid()) {\n throw new Error(\"truncated block\");\n }\n } catch (err) {\n this._remaining = 0;\n this.emit(\"error\", err);\n return;\n }\n this.push(val);\n };\n function RawEncoder(schema, opts) {\n opts = opts || {};\n stream.Transform.call(this, {\n writableObjectMode: true,\n allowHalfOpen: false\n });\n this._type = types.Type.forSchema(schema);\n this._writeValue = function(tap, val) {\n try {\n this._type._write(tap, val);\n } catch (err) {\n this.emit(\"typeError\", err, val, this._type);\n }\n };\n this._tap = new Tap(utils.newBuffer(opts.batchSize || 65536));\n this.on(\"typeError\", function(err) {\n this.emit(\"error\", err);\n });\n }\n util.inherits(RawEncoder, stream.Transform);\n RawEncoder.prototype._transform = function(val, encoding, cb) {\n var tap = this._tap;\n var buf = tap.buf;\n var pos = tap.pos;\n this._writeValue(tap, val);\n if (!tap.isValid()) {\n if (pos) {\n this.push(copyBuffer(tap.buf, 0, pos));\n }\n var len = tap.pos - pos;\n if (len > buf.length) {\n tap.buf = utils.newBuffer(2 * len);\n }\n tap.pos = 0;\n this._writeValue(tap, val);\n }\n cb();\n };\n RawEncoder.prototype._flush = function(cb) {\n var tap = this._tap;\n var pos = tap.pos;\n if (pos) {\n this.push(tap.buf.slice(0, pos));\n }\n cb();\n };\n function BlockEncoder(schema, opts) {\n opts = opts || {};\n stream.Duplex.call(this, {\n allowHalfOpen: true,\n // To support async compressors.\n writableObjectMode: true\n });\n var type;\n if (types.Type.isType(schema)) {\n type = schema;\n schema = void 0;\n } else {\n type = types.Type.forSchema(schema);\n }\n this._schema = schema;\n this._type = type;\n this._writeValue = function(tap, val) {\n try {\n this._type._write(tap, val);\n } catch (err) {\n this.emit(\"typeError\", err, val, this._type);\n return false;\n }\n return true;\n };\n this._blockSize = opts.blockSize || 65536;\n this._tap = new Tap(utils.newBuffer(this._blockSize));\n this._codecs = opts.codecs;\n this._codec = opts.codec || \"null\";\n this._blockCount = 0;\n this._syncMarker = opts.syncMarker || new utils.Lcg().nextBuffer(16);\n this._queue = new utils.OrderedQueue();\n this._pending = 0;\n this._finished = false;\n this._needHeader = false;\n this._needPush = false;\n this._metadata = opts.metadata || {};\n if (!MAP_BYTES_TYPE.isValid(this._metadata)) {\n throw new Error(\"invalid metadata\");\n }\n var codec = this._codec;\n this._compress = (this._codecs || BlockEncoder.getDefaultCodecs())[codec];\n if (!this._compress) {\n throw new Error(f2(\"unsupported codec: %s\", codec));\n }\n if (opts.omitHeader !== void 0) {\n opts.writeHeader = opts.omitHeader ? \"never\" : \"auto\";\n }\n switch (opts.writeHeader) {\n case false:\n case \"never\":\n break;\n case void 0:\n case \"auto\":\n this._needHeader = true;\n break;\n default:\n this._writeHeader();\n }\n this.on(\"finish\", function() {\n this._finished = true;\n if (this._blockCount) {\n this._flushChunk();\n } else if (this._finished && this._needPush) {\n this.push(null);\n }\n });\n this.on(\"typeError\", function(err) {\n this.emit(\"error\", err);\n });\n }\n util.inherits(BlockEncoder, stream.Duplex);\n BlockEncoder.defaultCodecs = function() {\n return {\n \"null\": function(buf, cb) {\n cb(null, buf);\n },\n \"deflate\": zlib.deflateRaw\n };\n };\n BlockEncoder.getDefaultCodecs = BlockEncoder.defaultCodecs;\n BlockEncoder.prototype._writeHeader = function() {\n var schema = JSON.stringify(\n this._schema ? this._schema : this._type.getSchema({ exportAttrs: true })\n );\n var meta = utils.copyOwnProperties(\n this._metadata,\n { \"avro.schema\": utils.bufferFrom(schema), \"avro.codec\": utils.bufferFrom(this._codec) },\n true\n // Overwrite.\n );\n var Header = HEADER_TYPE.getRecordConstructor();\n var header = new Header(MAGIC_BYTES, meta, this._syncMarker);\n this.push(header.toBuffer());\n };\n BlockEncoder.prototype._write = function(val, encoding, cb) {\n if (this._needHeader) {\n this._writeHeader();\n this._needHeader = false;\n }\n var tap = this._tap;\n var pos = tap.pos;\n var flushing = false;\n if (this._writeValue(tap, val)) {\n if (!tap.isValid()) {\n if (pos) {\n this._flushChunk(pos, cb);\n flushing = true;\n }\n var len = tap.pos - pos;\n if (len > this._blockSize) {\n this._blockSize = len * 2;\n }\n tap.buf = utils.newBuffer(this._blockSize);\n tap.pos = 0;\n this._writeValue(tap, val);\n }\n this._blockCount++;\n } else {\n tap.pos = pos;\n }\n if (!flushing) {\n cb();\n }\n };\n BlockEncoder.prototype._flushChunk = function(pos, cb) {\n var tap = this._tap;\n pos = pos || tap.pos;\n this._compress(tap.buf.slice(0, pos), this._createBlockCallback(pos, cb));\n this._blockCount = 0;\n };\n BlockEncoder.prototype._read = function() {\n var self = this;\n var data = this._queue.pop();\n if (!data) {\n if (this._finished && !this._pending) {\n process.nextTick(function() {\n self.push(null);\n });\n } else {\n this._needPush = true;\n }\n return;\n }\n this.push(LONG_TYPE.toBuffer(data.count, true));\n this.push(LONG_TYPE.toBuffer(data.buf.length, true));\n this.push(data.buf);\n this.push(this._syncMarker);\n if (!this._finished) {\n data.cb();\n }\n };\n BlockEncoder.prototype._createBlockCallback = function(size, cb) {\n var self = this;\n var index = this._index++;\n var count = this._blockCount;\n this._pending++;\n return function(cause, data) {\n if (cause) {\n var err = new Error(f2(\"%s codec compression error\", self._codec));\n err.cause = cause;\n self.emit(\"error\", err);\n return;\n }\n self._pending--;\n self.emit(\"block\", new BlockInfo(count, size, data.length));\n self._queue.push(new BlockData(index, data, cb, count));\n if (self._needPush) {\n self._needPush = false;\n self._read();\n }\n };\n };\n function BlockInfo(count, raw, compressed) {\n this.valueCount = count;\n this.rawDataLength = raw;\n this.compressedDataLength = compressed;\n }\n function BlockData(index, buf, cb, count) {\n this.index = index;\n this.buf = buf;\n this.cb = cb;\n this.count = count | 0;\n }\n function tryReadBlock(tap) {\n var pos = tap.pos;\n var block = BLOCK_TYPE._read(tap);\n if (!tap.isValid()) {\n tap.pos = pos;\n return null;\n }\n return block;\n }\n function createReader(noDecode, writerType, readerType) {\n if (noDecode) {\n return /* @__PURE__ */ function(skipper) {\n return function(tap) {\n var pos = tap.pos;\n skipper(tap);\n return tap.buf.slice(pos, tap.pos);\n };\n }(writerType._skip);\n } else if (readerType) {\n var resolver = readerType.createResolver(writerType);\n return function(tap) {\n return resolver._read(tap);\n };\n } else {\n return function(tap) {\n return writerType._read(tap);\n };\n }\n }\n function copyBuffer(buf, pos, len) {\n var copy = utils.newBuffer(len);\n buf.copy(copy, 0, pos, pos + len);\n return copy;\n }\n module.exports = {\n BLOCK_TYPE,\n // For tests.\n HEADER_TYPE,\n // Idem.\n MAGIC_BYTES,\n // Idem.\n streams: {\n BlockDecoder,\n BlockEncoder,\n RawDecoder,\n RawEncoder\n }\n };\n }\n});\n\n// node_modules/avsc/lib/services.js\nvar require_services = __commonJS({\n \"node_modules/avsc/lib/services.js\"(exports, module) {\n \"use strict\";\n var types = require_types();\n var utils = require_utils();\n var buffer = __import_BUFFER;\n var events = __import_EVENTS;\n var stream = __import_STREAM;\n var util = __import_UTIL;\n var Buffer2 = buffer.Buffer;\n var Tap = utils.Tap;\n var Type = types.Type;\n var debug = util.debuglog(\"avsc:services\");\n var f2 = util.format;\n var OPTS = { namespace: \"org.apache.avro.ipc\" };\n var BOOLEAN_TYPE = Type.forSchema(\"boolean\", OPTS);\n var MAP_BYTES_TYPE = Type.forSchema({ type: \"map\", values: \"bytes\" }, OPTS);\n var STRING_TYPE = Type.forSchema(\"string\", OPTS);\n var HANDSHAKE_REQUEST_TYPE = Type.forSchema({\n name: \"HandshakeRequest\",\n type: \"record\",\n fields: [\n { name: \"clientHash\", type: { name: \"MD5\", type: \"fixed\", size: 16 } },\n { name: \"clientProtocol\", type: [\"null\", \"string\"], \"default\": null },\n { name: \"serverHash\", type: \"MD5\" },\n { name: \"meta\", type: [\"null\", MAP_BYTES_TYPE], \"default\": null }\n ]\n }, OPTS);\n var HANDSHAKE_RESPONSE_TYPE = Type.forSchema({\n name: \"HandshakeResponse\",\n type: \"record\",\n fields: [\n {\n name: \"match\",\n type: {\n name: \"HandshakeMatch\",\n type: \"enum\",\n symbols: [\"BOTH\", \"CLIENT\", \"NONE\"]\n }\n },\n { name: \"serverProtocol\", type: [\"null\", \"string\"], \"default\": null },\n { name: \"serverHash\", type: [\"null\", \"MD5\"], \"default\": null },\n { name: \"meta\", type: [\"null\", MAP_BYTES_TYPE], \"default\": null }\n ]\n }, OPTS);\n var PREFIX_LENGTH = 16;\n var PING_MESSAGE = new Message(\n \"\",\n // Empty name (invalid for other \"normal\" messages).\n Type.forSchema({ name: \"PingRequest\", type: \"record\", fields: [] }, OPTS),\n Type.forSchema([\"string\"], OPTS),\n Type.forSchema(\"null\", OPTS)\n );\n function Message(name, reqType, errType, resType, oneWay, doc) {\n this.name = name;\n if (!Type.isType(reqType, \"record\")) {\n throw new Error(\"invalid request type\");\n }\n this.requestType = reqType;\n if (!Type.isType(errType, \"union\") || !Type.isType(errType.getTypes()[0], \"string\")) {\n throw new Error(\"invalid error type\");\n }\n this.errorType = errType;\n if (oneWay) {\n if (!Type.isType(resType, \"null\") || errType.getTypes().length > 1) {\n throw new Error(\"inapplicable one-way parameter\");\n }\n }\n this.responseType = resType;\n this.oneWay = !!oneWay;\n this.doc = doc !== void 0 ? \"\" + doc : void 0;\n Object.freeze(this);\n }\n Message.forSchema = function(name, schema, opts) {\n opts = opts || {};\n if (!utils.isValidName(name)) {\n throw new Error(f2(\"invalid message name: %s\", name));\n }\n if (!Array.isArray(schema.request)) {\n throw new Error(f2(\"invalid message request: %s\", name));\n }\n var recordName = f2(\"%s.%sRequest\", OPTS.namespace, utils.capitalize(name));\n var reqType = Type.forSchema({\n name: recordName,\n type: \"record\",\n namespace: opts.namespace || \"\",\n // Don't leak request namespace.\n fields: schema.request\n }, opts);\n delete opts.registry[recordName];\n if (!schema.response) {\n throw new Error(f2(\"invalid message response: %s\", name));\n }\n var resType = Type.forSchema(schema.response, opts);\n if (schema.errors !== void 0 && !Array.isArray(schema.errors)) {\n throw new Error(f2(\"invalid message errors: %s\", name));\n }\n var errType = Type.forSchema([\"string\"].concat(schema.errors || []), opts);\n var oneWay = !!schema[\"one-way\"];\n return new Message(name, reqType, errType, resType, oneWay, schema.doc);\n };\n Message.prototype.schema = Type.prototype.getSchema;\n Message.prototype._attrs = function(opts) {\n var reqSchema = this.requestType._attrs(opts);\n var schema = {\n request: reqSchema.fields,\n response: this.responseType._attrs(opts)\n };\n var msgDoc = this.doc;\n if (msgDoc !== void 0) {\n schema.doc = msgDoc;\n }\n var errSchema = this.errorType._attrs(opts);\n if (errSchema.length > 1) {\n schema.errors = errSchema.slice(1);\n }\n if (this.oneWay) {\n schema[\"one-way\"] = true;\n }\n return schema;\n };\n utils.addDeprecatedGetters(\n Message,\n [\"name\", \"errorType\", \"requestType\", \"responseType\"]\n );\n Message.prototype.isOneWay = util.deprecate(\n function() {\n return this.oneWay;\n },\n \"use `.oneWay` directly instead of `.isOneWay()`\"\n );\n function Service(name, messages, types2, ptcl, server) {\n if (typeof name != \"string\") {\n return Service.forProtocol(name, messages);\n }\n this.name = name;\n this._messagesByName = messages || {};\n this.messages = Object.freeze(utils.objectValues(this._messagesByName));\n this._typesByName = types2 || {};\n this.types = Object.freeze(utils.objectValues(this._typesByName));\n this.protocol = ptcl;\n this._hashStr = utils.getHash(JSON.stringify(ptcl)).toString(\"binary\");\n this.doc = ptcl.doc ? \"\" + ptcl.doc : void 0;\n this._server = server || this.createServer({ silent: true });\n Object.freeze(this);\n }\n Service.Client = Client;\n Service.Server = Server;\n Service.compatible = function(clientSvc, serverSvc) {\n try {\n createReaders(clientSvc, serverSvc);\n } catch (err) {\n return false;\n }\n return true;\n };\n Service.forProtocol = function(ptcl, opts) {\n opts = opts || {};\n var name = ptcl.protocol;\n if (!name) {\n throw new Error(\"missing protocol name\");\n }\n if (ptcl.namespace !== void 0) {\n opts.namespace = ptcl.namespace;\n } else {\n var match = /^(.*)\\.[^.]+$/.exec(name);\n if (match) {\n opts.namespace = match[1];\n }\n }\n name = utils.qualify(name, opts.namespace);\n if (ptcl.types) {\n ptcl.types.forEach(function(obj) {\n Type.forSchema(obj, opts);\n });\n }\n var msgs;\n if (ptcl.messages) {\n msgs = {};\n Object.keys(ptcl.messages).forEach(function(key) {\n msgs[key] = Message.forSchema(key, ptcl.messages[key], opts);\n });\n }\n return new Service(name, msgs, opts.registry, ptcl);\n };\n Service.isService = function(any) {\n return !!any && any.hasOwnProperty(\"_hashStr\");\n };\n Service.prototype.createClient = function(opts) {\n var client = new Client(this, opts);\n process.nextTick(function() {\n if (opts && opts.server) {\n var obj = { objectMode: true };\n var pts = [new stream.PassThrough(obj), new stream.PassThrough(obj)];\n opts.server.createChannel({ readable: pts[0], writable: pts[1] }, obj);\n client.createChannel({ readable: pts[1], writable: pts[0] }, obj);\n } else if (opts && opts.transport) {\n client.createChannel(opts.transport);\n }\n });\n return client;\n };\n Service.prototype.createServer = function(opts) {\n return new Server(this, opts);\n };\n Object.defineProperty(Service.prototype, \"hash\", {\n enumerable: true,\n get: function() {\n return utils.bufferFrom(this._hashStr, \"binary\");\n }\n });\n Service.prototype.message = function(name) {\n return this._messagesByName[name];\n };\n Service.prototype.type = function(name) {\n return this._typesByName[name];\n };\n Service.prototype.inspect = function() {\n return f2(\"\", this.name);\n };\n utils.addDeprecatedGetters(\n Service,\n [\"message\", \"messages\", \"name\", \"type\", \"types\"]\n );\n Service.prototype.createEmitter = util.deprecate(\n function(transport, opts) {\n opts = opts || {};\n var client = this.createClient({\n cache: opts.cache,\n buffering: false,\n strictTypes: opts.strictErrors,\n timeout: opts.timeout\n });\n var channel = client.createChannel(transport, opts);\n forwardErrors(client, channel);\n return channel;\n },\n \"use `.createClient()` instead of `.createEmitter()`\"\n );\n Service.prototype.createListener = util.deprecate(\n function(transport, opts) {\n if (opts && opts.strictErrors) {\n throw new Error(\"use `.createServer()` to support strict errors\");\n }\n return this._server.createChannel(transport, opts);\n },\n \"use `.createServer().createChannel()` instead of `.createListener()`\"\n );\n Service.prototype.emit = util.deprecate(\n function(name, req, channel, cb) {\n if (!channel || !this.equals(channel.client._svc$)) {\n throw new Error(\"invalid emitter\");\n }\n var client = channel.client;\n Client.prototype.emitMessage.call(client, name, req, cb && cb.bind(this));\n return channel.getPending();\n },\n \"create a client via `.createClient()` to emit messages instead of `.emit()`\"\n );\n Service.prototype.equals = util.deprecate(\n function(any) {\n return Service.isService(any) && this.getFingerprint().equals(any.getFingerprint());\n },\n \"equality testing is deprecated, compare the `.protocol`s instead\"\n );\n Service.prototype.getFingerprint = util.deprecate(\n function(algorithm) {\n return utils.getHash(JSON.stringify(this.protocol), algorithm);\n },\n \"use `.hash` instead of `.getFingerprint()`\"\n );\n Service.prototype.getSchema = util.deprecate(\n Type.prototype.getSchema,\n \"use `.protocol` instead of `.getSchema()`\"\n );\n Service.prototype.on = util.deprecate(\n function(name, handler) {\n var self = this;\n this._server.onMessage(name, function(req, cb) {\n return handler.call(self, req, this.channel, cb);\n });\n return this;\n },\n \"use `.createServer().onMessage()` instead of `.on()`\"\n );\n Service.prototype.subprotocol = util.deprecate(\n function() {\n var parent = this._server;\n var opts = { strictTypes: parent._strict, cache: parent._cache };\n var server = new Server(parent.service, opts);\n server._handlers = Object.create(parent._handlers);\n return new Service(\n this.name,\n this._messagesByName,\n this._typesByName,\n this.protocol,\n server\n );\n },\n \"`.subprotocol()` will be removed in 5.1\"\n );\n Service.prototype._attrs = function(opts) {\n var ptcl = { protocol: this.name };\n var types2 = [];\n this.types.forEach(function(t) {\n if (t.getName() === void 0) {\n return;\n }\n var typeSchema = t._attrs(opts);\n if (typeof typeSchema != \"string\") {\n types2.push(typeSchema);\n }\n });\n if (types2.length) {\n ptcl.types = types2;\n }\n var msgNames = Object.keys(this._messagesByName);\n if (msgNames.length) {\n ptcl.messages = {};\n msgNames.forEach(function(name) {\n ptcl.messages[name] = this._messagesByName[name]._attrs(opts);\n }, this);\n }\n if (opts && opts.exportAttrs && this.doc !== void 0) {\n ptcl.doc = this.doc;\n }\n return ptcl;\n };\n function discoverProtocol(transport, opts, cb) {\n if (cb === void 0 && typeof opts == \"function\") {\n cb = opts;\n opts = void 0;\n }\n var svc = new Service({ protocol: \"Empty\" }, OPTS);\n var ptclStr;\n svc.createClient({ timeout: opts && opts.timeout }).createChannel(transport, {\n scope: opts && opts.scope,\n endWritable: typeof transport == \"function\"\n // Stateless transports only.\n }).once(\"handshake\", function(hreq, hres) {\n ptclStr = hres.serverProtocol;\n this.destroy(true);\n }).once(\"eot\", function(pending, err) {\n if (err && !/interrupted/.test(err)) {\n cb(err);\n } else {\n cb(null, JSON.parse(ptclStr));\n }\n });\n }\n function Client(svc, opts) {\n opts = opts || {};\n events.EventEmitter.call(this);\n this._svc$ = svc;\n this._channels$ = [];\n this._fns$ = [];\n this._buffering$ = !!opts.buffering;\n this._cache$ = opts.cache || {};\n this._policy$ = opts.channelPolicy;\n this._strict$ = !!opts.strictTypes;\n this._timeout$ = utils.getOption(opts, \"timeout\", 1e4);\n if (opts.remoteProtocols) {\n insertRemoteProtocols(this._cache$, opts.remoteProtocols, svc, true);\n }\n this._svc$.messages.forEach(function(msg) {\n this[msg.name] = this._createMessageHandler$(msg);\n }, this);\n }\n util.inherits(Client, events.EventEmitter);\n Client.prototype.activeChannels = function() {\n return this._channels$.slice();\n };\n Client.prototype.createChannel = function(transport, opts) {\n var objectMode = opts && opts.objectMode;\n var channel;\n if (typeof transport == \"function\") {\n var writableFactory;\n if (objectMode) {\n writableFactory = transport;\n } else {\n writableFactory = function(cb) {\n var encoder2 = new FrameEncoder();\n var writable2 = transport(function(err, readable2) {\n if (err) {\n cb(err);\n return;\n }\n var decoder2 = new FrameDecoder().once(\"error\", function(err2) {\n channel.destroy(err2);\n });\n cb(null, readable2.pipe(decoder2));\n });\n if (writable2) {\n encoder2.pipe(writable2);\n return encoder2;\n }\n };\n }\n channel = new StatelessClientChannel(this, writableFactory, opts);\n } else {\n var readable, writable;\n if (isStream(transport)) {\n readable = writable = transport;\n } else {\n readable = transport.readable;\n writable = transport.writable;\n }\n if (!objectMode) {\n var decoder = new NettyDecoder();\n readable = readable.pipe(decoder);\n var encoder = new NettyEncoder();\n encoder.pipe(writable);\n writable = encoder;\n }\n channel = new StatefulClientChannel(this, readable, writable, opts);\n if (!objectMode) {\n channel.once(\"eot\", function() {\n readable.unpipe(decoder);\n encoder.unpipe(writable);\n });\n decoder.once(\"error\", function(err) {\n channel.destroy(err);\n });\n }\n }\n var channels = this._channels$;\n channels.push(channel);\n channel.once(\"_drain\", function() {\n channels.splice(channels.indexOf(this), 1);\n });\n this._buffering$ = false;\n this.emit(\"channel\", channel);\n return channel;\n };\n Client.prototype.destroyChannels = function(opts) {\n this._channels$.forEach(function(channel) {\n channel.destroy(opts && opts.noWait);\n });\n };\n Client.prototype.emitMessage = function(name, req, opts, cb) {\n var msg = getExistingMessage(this._svc$, name);\n var wreq = new WrappedRequest(msg, {}, req);\n this._emitMessage$(wreq, opts, cb);\n };\n Client.prototype.remoteProtocols = function() {\n return getRemoteProtocols(this._cache$, true);\n };\n Object.defineProperty(Client.prototype, \"service\", {\n enumerable: true,\n get: function() {\n return this._svc$;\n }\n });\n Client.prototype.use = function() {\n var i, l, fn;\n for (i = 0, l = arguments.length; i < l; i++) {\n fn = arguments[i];\n this._fns$.push(fn.length < 3 ? fn(this) : fn);\n }\n return this;\n };\n Client.prototype._emitMessage$ = function(wreq, opts, cb) {\n if (!cb && typeof opts === \"function\") {\n cb = opts;\n opts = void 0;\n }\n var self = this;\n var channels = this._channels$;\n var numChannels = channels.length;\n if (!numChannels) {\n if (this._buffering$) {\n debug(\"no active client channels, buffering call\");\n this.once(\"channel\", function() {\n this._emitMessage$(wreq, opts, cb);\n });\n } else {\n var err = new Error(\"no active channels\");\n process.nextTick(function() {\n if (cb) {\n cb.call(new CallContext(wreq._msg), err);\n } else {\n self.emit(\"error\", err);\n }\n });\n }\n return;\n }\n opts = opts || {};\n if (opts.timeout === void 0) {\n opts.timeout = this._timeout$;\n }\n var channel;\n if (numChannels === 1) {\n channel = channels[0];\n } else if (this._policy$) {\n channel = this._policy$(this._channels$.slice());\n if (!channel) {\n debug(\"policy returned no channel, skipping call\");\n return;\n }\n } else {\n channel = channels[Math.floor(Math.random() * numChannels)];\n }\n channel._emit(wreq, opts, function(err2, wres) {\n var ctx = this;\n var errType = ctx.message.errorType;\n if (err2) {\n if (self._strict$) {\n err2 = errType.clone(err2.message, { wrapUnions: true });\n }\n done(err2);\n return;\n }\n if (!wres) {\n done();\n return;\n }\n err2 = wres.error;\n if (!self._strict$) {\n if (err2 === void 0) {\n err2 = null;\n } else {\n if (Type.isType(errType, \"union:unwrapped\")) {\n if (typeof err2 == \"string\") {\n err2 = new Error(err2);\n }\n } else if (err2 && err2.string && typeof err2.string == \"string\") {\n err2 = new Error(err2.string);\n }\n }\n }\n done(err2, wres.response);\n function done(err3, res) {\n if (cb) {\n cb.call(ctx, err3, res);\n } else if (err3) {\n self.emit(\"error\", err3);\n }\n }\n });\n };\n Client.prototype._createMessageHandler$ = function(msg) {\n var fields = msg.requestType.getFields();\n var names = fields.map(function(f3) {\n return f3.getName();\n });\n var body = \"return function \" + msg.name + \"(\";\n if (names.length) {\n body += names.join(\", \") + \", \";\n }\n body += \"opts, cb) {\\n\";\n body += \" var req = {\";\n body += names.map(function(n) {\n return n + \": \" + n;\n }).join(\", \");\n body += \"};\\n\";\n body += \" return this.emitMessage('\" + msg.name + \"', req, opts, cb);\\n\";\n body += \"};\";\n return new Function(body)();\n };\n function Server(svc, opts) {\n opts = opts || {};\n events.EventEmitter.call(this);\n this.service = svc;\n this._handlers = {};\n this._fns = [];\n this._channels = {};\n this._nextChannelId = 1;\n this._cache = opts.cache || {};\n this._defaultHandler = opts.defaultHandler;\n this._sysErrFormatter = opts.systemErrorFormatter;\n this._silent = !!opts.silent;\n this._strict = !!opts.strictTypes;\n if (opts.remoteProtocols) {\n insertRemoteProtocols(this._cache, opts.remoteProtocols, svc, false);\n }\n svc.messages.forEach(function(msg) {\n var name = msg.name;\n if (!opts.noCapitalize) {\n name = utils.capitalize(name);\n }\n this[\"on\" + name] = this._createMessageHandler(msg);\n }, this);\n }\n util.inherits(Server, events.EventEmitter);\n Server.prototype.activeChannels = function() {\n return utils.objectValues(this._channels);\n };\n Server.prototype.createChannel = function(transport, opts) {\n var objectMode = opts && opts.objectMode;\n var channel;\n if (typeof transport == \"function\") {\n var readableFactory;\n if (objectMode) {\n readableFactory = transport;\n } else {\n readableFactory = function(cb) {\n var decoder2 = new FrameDecoder().once(\"error\", function(err) {\n channel.destroy(err);\n });\n return transport(function(err, writable2) {\n if (err) {\n cb(err);\n return;\n }\n var encoder2 = new FrameEncoder();\n encoder2.pipe(writable2);\n cb(null, encoder2);\n }).pipe(decoder2);\n };\n }\n channel = new StatelessServerChannel(this, readableFactory, opts);\n } else {\n var readable, writable;\n if (isStream(transport)) {\n readable = writable = transport;\n } else {\n readable = transport.readable;\n writable = transport.writable;\n }\n if (!objectMode) {\n var decoder = new NettyDecoder();\n readable = readable.pipe(decoder);\n var encoder = new NettyEncoder();\n encoder.pipe(writable);\n writable = encoder;\n }\n channel = new StatefulServerChannel(this, readable, writable, opts);\n if (!objectMode) {\n channel.once(\"eot\", function() {\n readable.unpipe(decoder);\n encoder.unpipe(writable);\n });\n decoder.once(\"error\", function(err) {\n channel.destroy(err);\n });\n }\n }\n if (!this.listeners(\"error\").length) {\n this.on(\"error\", this._onError);\n }\n var channelId = this._nextChannelId++;\n var channels = this._channels;\n channels[channelId] = channel.once(\"eot\", function() {\n delete channels[channelId];\n });\n this.emit(\"channel\", channel);\n return channel;\n };\n Server.prototype.onMessage = function(name, handler) {\n getExistingMessage(this.service, name);\n this._handlers[name] = handler;\n return this;\n };\n Server.prototype.remoteProtocols = function() {\n return getRemoteProtocols(this._cache, false);\n };\n Server.prototype.use = function() {\n var i, l, fn;\n for (i = 0, l = arguments.length; i < l; i++) {\n fn = arguments[i];\n this._fns.push(fn.length < 3 ? fn(this) : fn);\n }\n return this;\n };\n Server.prototype._createMessageHandler = function(msg) {\n var name = msg.name;\n var fields = msg.requestType.fields;\n var numArgs = fields.length;\n var args = fields.length ? \", \" + fields.map(function(f3) {\n return \"req.\" + f3.name;\n }).join(\", \") : \"\";\n var body = \"return function (handler) {\\n\";\n body += \" if (handler.length > \" + numArgs + \") {\\n\";\n body += \" return this.onMessage('\" + name + \"', function (req, cb) {\\n\";\n body += \" return handler.call(this\" + args + \", cb);\\n\";\n body += \" });\\n\";\n body += \" } else {\\n\";\n body += \" return this.onMessage('\" + name + \"', function (req) {\\n\";\n body += \" return handler.call(this\" + args + \");\\n\";\n body += \" });\\n\";\n body += \" }\\n\";\n body += \"};\\n\";\n return new Function(body)();\n };\n Server.prototype._onError = function(err) {\n if (!this._silent && err.rpcCode !== \"UNKNOWN_PROTOCOL\") {\n console.error();\n if (err.rpcCode) {\n console.error(err.rpcCode);\n console.error(err.cause);\n } else {\n console.error(\"INTERNAL_SERVER_ERROR\");\n console.error(err);\n }\n }\n };\n function ClientChannel(client, opts) {\n opts = opts || {};\n events.EventEmitter.call(this);\n this.client = client;\n this.timeout = utils.getOption(opts, \"timeout\", client._timeout$);\n this._endWritable = !!utils.getOption(opts, \"endWritable\", true);\n this._prefix = normalizedPrefix(opts.scope);\n var cache = client._cache$;\n var clientSvc = client._svc$;\n var hash = opts.serverHash;\n if (!hash) {\n hash = clientSvc.hash;\n }\n var adapter = cache[hash];\n if (!adapter) {\n hash = clientSvc.hash;\n adapter = cache[hash] = new Adapter(clientSvc, clientSvc, hash);\n }\n this._adapter = adapter;\n this._registry = new Registry(this, PREFIX_LENGTH);\n this.pending = 0;\n this.destroyed = false;\n this.draining = false;\n this.once(\"_eot\", function(pending, err) {\n debug(\"client channel EOT\");\n this.destroyed = true;\n this.emit(\"eot\", pending, err);\n });\n }\n util.inherits(ClientChannel, events.EventEmitter);\n ClientChannel.prototype.destroy = function(noWait) {\n debug(\"destroying client channel\");\n if (!this.draining) {\n this.draining = true;\n this.emit(\"_drain\");\n }\n var registry = this._registry;\n var pending = this.pending;\n if (noWait) {\n registry.clear();\n }\n if (noWait || !pending) {\n if (isError(noWait)) {\n debug(\"fatal client channel error: %s\", noWait);\n this.emit(\"_eot\", pending, noWait);\n } else {\n this.emit(\"_eot\", pending);\n }\n } else {\n debug(\"client channel entering drain mode (%s pending)\", pending);\n }\n };\n ClientChannel.prototype.ping = function(timeout, cb) {\n if (!cb && typeof timeout == \"function\") {\n cb = timeout;\n timeout = void 0;\n }\n var self = this;\n var wreq = new WrappedRequest(PING_MESSAGE);\n this._emit(wreq, { timeout }, function(err) {\n if (cb) {\n cb.call(self, err);\n } else if (err) {\n self.destroy(err);\n }\n });\n };\n ClientChannel.prototype._createHandshakeRequest = function(adapter, noSvc) {\n var svc = this.client._svc$;\n return {\n clientHash: svc.hash,\n clientProtocol: noSvc ? null : JSON.stringify(svc.protocol),\n serverHash: adapter._hash\n };\n };\n ClientChannel.prototype._emit = function(wreq, opts, cb) {\n var msg = wreq._msg;\n var wres = msg.oneWay ? void 0 : new WrappedResponse(msg, {});\n var ctx = new CallContext(msg, this);\n var self = this;\n this.pending++;\n process.nextTick(function() {\n if (!msg.name) {\n onTransition(wreq, wres, onCompletion);\n } else {\n self.emit(\"outgoingCall\", ctx, opts);\n var fns = self.client._fns$;\n debug(\"starting client middleware chain (%s middleware)\", fns.length);\n chainMiddleware({\n fns,\n ctx,\n wreq,\n wres,\n onTransition,\n onCompletion,\n onError\n });\n }\n });\n function onTransition(wreq2, wres2, prev) {\n var err, reqBuf;\n if (self.destroyed) {\n err = new Error(\"channel destroyed\");\n } else {\n try {\n reqBuf = wreq2.toBuffer();\n } catch (cause) {\n err = serializationError(\n f2(\"invalid %j request\", msg.name),\n wreq2,\n [\n { name: \"headers\", type: MAP_BYTES_TYPE },\n { name: \"request\", type: msg.requestType }\n ]\n );\n }\n }\n if (err) {\n prev(err);\n return;\n }\n var timeout = opts && opts.timeout !== void 0 ? opts.timeout : self.timeout;\n var id = self._registry.add(timeout, function(err2, resBuf, adapter) {\n if (!err2 && !msg.oneWay) {\n try {\n adapter._decodeResponse(resBuf, wres2, msg);\n } catch (cause) {\n err2 = cause;\n }\n }\n prev(err2);\n });\n id |= self._prefix;\n debug(\"sending message %s\", id);\n self._send(id, reqBuf, !!msg && msg.oneWay);\n }\n function onCompletion(err) {\n self.pending--;\n cb.call(ctx, err, wres);\n if (self.draining && !self.destroyed && !self.pending) {\n self.destroy();\n }\n }\n function onError(err) {\n self.client.emit(\"error\", err, self);\n }\n };\n ClientChannel.prototype._getAdapter = function(hres) {\n var hash = hres.serverHash;\n var cache = this.client._cache$;\n var adapter = cache[hash];\n if (adapter) {\n return adapter;\n }\n var ptcl = JSON.parse(hres.serverProtocol);\n var serverSvc = Service.forProtocol(ptcl);\n adapter = new Adapter(this.client._svc$, serverSvc, hash, true);\n return cache[hash] = adapter;\n };\n ClientChannel.prototype._matchesPrefix = function(id) {\n return matchesPrefix(id, this._prefix);\n };\n ClientChannel.prototype._send = utils.abstractFunction;\n utils.addDeprecatedGetters(ClientChannel, [\"pending\", \"timeout\"]);\n ClientChannel.prototype.getCache = util.deprecate(\n function() {\n return this.client._cache$;\n },\n \"use `.remoteProtocols()` instead of `.getCache()`\"\n );\n ClientChannel.prototype.getProtocol = util.deprecate(\n function() {\n return this.client._svc$;\n },\n \"use `.service` instead or `.getProtocol()`\"\n );\n ClientChannel.prototype.isDestroyed = util.deprecate(\n function() {\n return this.destroyed;\n },\n \"use `.destroyed` instead of `.isDestroyed`\"\n );\n function StatelessClientChannel(client, writableFactory, opts) {\n ClientChannel.call(this, client, opts);\n this._writableFactory = writableFactory;\n if (!opts || !opts.noPing) {\n debug(\"emitting ping request\");\n this.ping();\n }\n }\n util.inherits(StatelessClientChannel, ClientChannel);\n StatelessClientChannel.prototype._send = function(id, reqBuf) {\n var cb = this._registry.get(id);\n var adapter = this._adapter;\n var self = this;\n process.nextTick(emit);\n return true;\n function emit(retry) {\n if (self.destroyed) {\n return;\n }\n var hreq = self._createHandshakeRequest(adapter, !retry);\n var writable = self._writableFactory.call(self, function(err, readable) {\n if (err) {\n cb(err);\n return;\n }\n readable.on(\"data\", function(obj) {\n debug(\"received response %s\", obj.id);\n var buf = Buffer2.concat(obj.payload);\n try {\n var parts = readHead(HANDSHAKE_RESPONSE_TYPE, buf);\n var hres = parts.head;\n if (hres.serverHash) {\n adapter = self._getAdapter(hres);\n }\n } catch (cause) {\n cb(cause);\n return;\n }\n var match = hres.match;\n debug(\"handshake match: %s\", match);\n self.emit(\"handshake\", hreq, hres);\n if (match === \"NONE\") {\n process.nextTick(function() {\n emit(true);\n });\n } else {\n self._adapter = adapter;\n cb(null, parts.tail, adapter);\n }\n });\n });\n if (!writable) {\n cb(new Error(\"invalid writable stream\"));\n return;\n }\n writable.write({\n id,\n payload: [HANDSHAKE_REQUEST_TYPE.toBuffer(hreq), reqBuf]\n });\n if (self._endWritable) {\n writable.end();\n }\n }\n };\n function StatefulClientChannel(client, readable, writable, opts) {\n ClientChannel.call(this, client, opts);\n this._readable = readable;\n this._writable = writable;\n this._connected = !!(opts && opts.noPing);\n this._readable.on(\"end\", onEnd);\n this._writable.on(\"finish\", onFinish);\n var self = this;\n var timer = null;\n this.once(\"eot\", function() {\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n if (!self._connected) {\n self.emit(\"_ready\");\n }\n this._writable.removeListener(\"finish\", onFinish);\n if (this._endWritable) {\n debug(\"ending transport\");\n this._writable.end();\n }\n this._readable.removeListener(\"data\", onPing).removeListener(\"data\", onMessage).removeListener(\"end\", onEnd);\n });\n var hreq;\n if (this._connected) {\n this._readable.on(\"data\", onMessage);\n } else {\n this._readable.on(\"data\", onPing);\n process.nextTick(ping);\n if (self.timeout) {\n timer = setTimeout(function() {\n self.destroy(new Error(\"timeout\"));\n }, self.timeout);\n }\n }\n function ping(retry) {\n if (self.destroyed) {\n return;\n }\n hreq = self._createHandshakeRequest(self._adapter, !retry);\n var payload = [\n HANDSHAKE_REQUEST_TYPE.toBuffer(hreq),\n utils.bufferFrom([0, 0])\n // No header, no data (empty message name).\n ];\n self._writable.write({ id: self._prefix, payload });\n }\n function onPing(obj) {\n if (!self._matchesPrefix(obj.id)) {\n debug(\"discarding unscoped response %s (still connecting)\", obj.id);\n return;\n }\n var buf = Buffer2.concat(obj.payload);\n try {\n var hres = readHead(HANDSHAKE_RESPONSE_TYPE, buf).head;\n if (hres.serverHash) {\n self._adapter = self._getAdapter(hres);\n }\n } catch (cause) {\n self.destroy(cause);\n return;\n }\n var match = hres.match;\n debug(\"handshake match: %s\", match);\n self.emit(\"handshake\", hreq, hres);\n if (match === \"NONE\") {\n process.nextTick(function() {\n ping(true);\n });\n } else {\n debug(\"successfully connected\");\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n self._readable.removeListener(\"data\", onPing).on(\"data\", onMessage);\n self._connected = true;\n self.emit(\"_ready\");\n hreq = null;\n }\n }\n function onMessage(obj) {\n var id = obj.id;\n if (!self._matchesPrefix(id)) {\n debug(\"discarding unscoped message %s\", id);\n return;\n }\n var cb = self._registry.get(id);\n if (cb) {\n process.nextTick(function() {\n debug(\"received message %s\", id);\n cb(null, Buffer2.concat(obj.payload), self._adapter);\n });\n }\n }\n function onEnd() {\n self.destroy(true);\n }\n function onFinish() {\n self.destroy();\n }\n }\n util.inherits(StatefulClientChannel, ClientChannel);\n StatefulClientChannel.prototype._emit = function() {\n if (this._connected || this.draining) {\n ClientChannel.prototype._emit.apply(this, arguments);\n } else {\n debug(\"queuing request\");\n var args = [];\n var i, l;\n for (i = 0, l = arguments.length; i < l; i++) {\n args.push(arguments[i]);\n }\n this.once(\"_ready\", function() {\n this._emit.apply(this, args);\n });\n }\n };\n StatefulClientChannel.prototype._send = function(id, reqBuf, oneWay) {\n if (oneWay) {\n var self = this;\n process.nextTick(function() {\n self._registry.get(id)(null, utils.bufferFrom([0, 0, 0]), self._adapter);\n });\n }\n return this._writable.write({ id, payload: [reqBuf] });\n };\n function ServerChannel(server, opts) {\n opts = opts || {};\n events.EventEmitter.call(this);\n this.server = server;\n this._endWritable = !!utils.getOption(opts, \"endWritable\", true);\n this._prefix = normalizedPrefix(opts.scope);\n var cache = server._cache;\n var svc = server.service;\n var hash = svc.hash;\n if (!cache[hash]) {\n cache[hash] = new Adapter(svc, svc, hash);\n }\n this._adapter = null;\n this.destroyed = false;\n this.draining = false;\n this.pending = 0;\n this.once(\"_eot\", function(pending, err) {\n debug(\"server channel EOT\");\n this.emit(\"eot\", pending, err);\n });\n }\n util.inherits(ServerChannel, events.EventEmitter);\n ServerChannel.prototype.destroy = function(noWait) {\n if (!this.draining) {\n this.draining = true;\n this.emit(\"_drain\");\n }\n if (noWait || !this.pending) {\n this.destroyed = true;\n if (isError(noWait)) {\n debug(\"fatal server channel error: %s\", noWait);\n this.emit(\"_eot\", this.pending, noWait);\n } else {\n this.emit(\"_eot\", this.pending);\n }\n }\n };\n ServerChannel.prototype._createHandshakeResponse = function(err, hreq) {\n var svc = this.server.service;\n var buf = svc.hash;\n var serverMatch = hreq && hreq.serverHash.equals(buf);\n return {\n match: err ? \"NONE\" : serverMatch ? \"BOTH\" : \"CLIENT\",\n serverProtocol: serverMatch ? null : JSON.stringify(svc.protocol),\n serverHash: serverMatch ? null : buf\n };\n };\n ServerChannel.prototype._getAdapter = function(hreq) {\n var hash = hreq.clientHash;\n var adapter = this.server._cache[hash];\n if (adapter) {\n return adapter;\n }\n if (!hreq.clientProtocol) {\n throw toRpcError(\"UNKNOWN_PROTOCOL\");\n }\n var ptcl = JSON.parse(hreq.clientProtocol);\n var clientSvc = Service.forProtocol(ptcl);\n adapter = new Adapter(clientSvc, this.server.service, hash, true);\n return this.server._cache[hash] = adapter;\n };\n ServerChannel.prototype._matchesPrefix = function(id) {\n return matchesPrefix(id, this._prefix);\n };\n ServerChannel.prototype._receive = function(reqBuf, adapter, cb) {\n var self = this;\n var wreq;\n try {\n wreq = adapter._decodeRequest(reqBuf);\n } catch (cause) {\n cb(self._encodeSystemError(toRpcError(\"INVALID_REQUEST\", cause)));\n return;\n }\n var msg = wreq._msg;\n var wres = new WrappedResponse(msg, {});\n if (!msg.name) {\n wres.response = null;\n cb(wres.toBuffer(), false);\n return;\n }\n var ctx = new CallContext(msg, this);\n self.emit(\"incomingCall\", ctx);\n var fns = this.server._fns;\n debug(\"starting server middleware chain (%s middleware)\", fns.length);\n self.pending++;\n chainMiddleware({\n fns,\n ctx,\n wreq,\n wres,\n onTransition,\n onCompletion,\n onError\n });\n function onTransition(wreq2, wres2, prev) {\n var handler = self.server._handlers[msg.name];\n if (!handler) {\n var defaultHandler = self.server._defaultHandler;\n if (defaultHandler) {\n defaultHandler.call(ctx, wreq2, wres2, prev);\n } else {\n var cause = new Error(f2(\"no handler for %s\", msg.name));\n prev(toRpcError(\"NOT_IMPLEMENTED\", cause));\n }\n } else {\n var pending = !msg.oneWay;\n try {\n if (pending) {\n handler.call(ctx, wreq2.request, function(err, res) {\n pending = false;\n wres2.error = err;\n wres2.response = res;\n prev();\n });\n } else {\n handler.call(ctx, wreq2.request);\n prev();\n }\n } catch (err) {\n if (pending) {\n pending = false;\n prev(err);\n } else {\n onError(err);\n }\n }\n }\n }\n function onCompletion(err) {\n self.pending--;\n var server = self.server;\n var resBuf;\n if (!err) {\n var resErr = wres.error;\n var isStrict = server._strict;\n if (!isStrict) {\n if (isError(resErr)) {\n wres.error = msg.errorType.clone(resErr.message, { wrapUnions: true });\n } else if (resErr === null) {\n resErr = wres.error = void 0;\n }\n if (resErr === void 0 && wres.response === void 0 && msg.responseType.isValid(null)) {\n wres.response = null;\n }\n }\n try {\n resBuf = wres.toBuffer();\n } catch (cause) {\n if (wres.error !== void 0) {\n err = serializationError(\n f2(\"invalid %j error\", msg.name),\n // Sic.\n wres,\n [\n { name: \"headers\", type: MAP_BYTES_TYPE },\n { name: \"error\", type: msg.errorType }\n ]\n );\n } else {\n err = serializationError(\n f2(\"invalid %j response\", msg.name),\n wres,\n [\n { name: \"headers\", type: MAP_BYTES_TYPE },\n { name: \"response\", type: msg.responseType }\n ]\n );\n }\n }\n }\n if (!resBuf) {\n resBuf = self._encodeSystemError(err, wres.headers);\n } else if (resErr !== void 0) {\n server.emit(\"error\", toRpcError(\"APPLICATION_ERROR\", resErr));\n }\n cb(resBuf, msg.oneWay);\n if (self.draining && !self.pending) {\n self.destroy();\n }\n }\n function onError(err) {\n self.server.emit(\"error\", err, self);\n }\n };\n utils.addDeprecatedGetters(ServerChannel, [\"pending\"]);\n ServerChannel.prototype.getCache = util.deprecate(\n function() {\n return this.server._cache;\n },\n \"use `.remoteProtocols()` instead of `.getCache()`\"\n );\n ServerChannel.prototype.getProtocol = util.deprecate(\n function() {\n return this.server.service;\n },\n \"use `.service` instead of `.getProtocol()`\"\n );\n ServerChannel.prototype.isDestroyed = util.deprecate(\n function() {\n return this.destroyed;\n },\n \"use `.destroyed` instead of `.isDestroyed`\"\n );\n ServerChannel.prototype._encodeSystemError = function(err, header) {\n var server = this.server;\n server.emit(\"error\", err, this);\n var errStr;\n if (server._sysErrFormatter) {\n errStr = server._sysErrFormatter.call(this, err);\n } else if (err.rpcCode) {\n errStr = err.message;\n }\n var hdrBuf;\n if (header) {\n try {\n hdrBuf = MAP_BYTES_TYPE.toBuffer(header);\n } catch (cause) {\n server.emit(\"error\", cause, this);\n }\n }\n return Buffer2.concat([\n hdrBuf || utils.bufferFrom([0]),\n utils.bufferFrom([1, 0]),\n // Error flag and first union index.\n STRING_TYPE.toBuffer(errStr || \"internal server error\")\n ]);\n };\n function StatelessServerChannel(server, readableFactory, opts) {\n ServerChannel.call(this, server, opts);\n this._writable = void 0;\n var self = this;\n var readable;\n process.nextTick(function() {\n readable = readableFactory.call(self, function(err, writable) {\n process.nextTick(function() {\n if (err) {\n onFinish(err);\n return;\n }\n self._writable = writable.on(\"finish\", onFinish);\n self.emit(\"_writable\");\n });\n }).on(\"data\", onRequest).on(\"end\", onEnd);\n });\n function onRequest(obj) {\n var id = obj.id;\n var buf = Buffer2.concat(obj.payload);\n var err;\n try {\n var parts = readHead(HANDSHAKE_REQUEST_TYPE, buf);\n var hreq = parts.head;\n var adapter = self._getAdapter(hreq);\n } catch (cause) {\n err = toRpcError(\"INVALID_HANDSHAKE_REQUEST\", cause);\n }\n var hres = self._createHandshakeResponse(err, hreq);\n self.emit(\"handshake\", hreq, hres);\n if (err) {\n done(self._encodeSystemError(err));\n } else {\n self._receive(parts.tail, adapter, done);\n }\n function done(resBuf) {\n if (!self.destroyed) {\n if (!self._writable) {\n self.once(\"_writable\", function() {\n done(resBuf);\n });\n return;\n }\n self._writable.write({\n id,\n payload: [HANDSHAKE_RESPONSE_TYPE.toBuffer(hres), resBuf]\n });\n }\n if (self._writable && self._endWritable) {\n self._writable.end();\n }\n }\n }\n function onEnd() {\n self.destroy();\n }\n function onFinish(err) {\n readable.removeListener(\"data\", onRequest).removeListener(\"end\", onEnd);\n self.destroy(err || true);\n }\n }\n util.inherits(StatelessServerChannel, ServerChannel);\n function StatefulServerChannel(server, readable, writable, opts) {\n ServerChannel.call(this, server, opts);\n this._adapter = void 0;\n this._writable = writable.on(\"finish\", onFinish);\n this._readable = readable.on(\"data\", onHandshake).on(\"end\", onEnd);\n this.once(\"_drain\", function() {\n this._readable.removeListener(\"data\", onHandshake).removeListener(\"data\", onRequest).removeListener(\"end\", onEnd);\n }).once(\"eot\", function() {\n this._writable.removeListener(\"finish\", onFinish);\n if (this._endWritable) {\n this._writable.end();\n }\n });\n var self = this;\n function onHandshake(obj) {\n var id = obj.id;\n if (!self._matchesPrefix(id)) {\n return;\n }\n var buf = Buffer2.concat(obj.payload);\n var err;\n try {\n var parts = readHead(HANDSHAKE_REQUEST_TYPE, buf);\n var hreq = parts.head;\n self._adapter = self._getAdapter(hreq);\n } catch (cause) {\n err = toRpcError(\"INVALID_HANDSHAKE_REQUEST\", cause);\n }\n var hres = self._createHandshakeResponse(err, hreq);\n self.emit(\"handshake\", hreq, hres);\n if (err) {\n done(self._encodeSystemError(err));\n } else {\n self._readable.removeListener(\"data\", onHandshake).on(\"data\", onRequest);\n self._receive(parts.tail, self._adapter, done);\n }\n function done(resBuf) {\n if (self.destroyed) {\n return;\n }\n self._writable.write({\n id,\n payload: [HANDSHAKE_RESPONSE_TYPE.toBuffer(hres), resBuf]\n });\n }\n }\n function onRequest(obj) {\n var id = obj.id;\n if (!self._matchesPrefix(id)) {\n return;\n }\n var reqBuf = Buffer2.concat(obj.payload);\n self._receive(reqBuf, self._adapter, function(resBuf, oneWay) {\n if (self.destroyed || oneWay) {\n return;\n }\n self._writable.write({ id, payload: [resBuf] });\n });\n }\n function onEnd() {\n self.destroy();\n }\n function onFinish() {\n self.destroy(true);\n }\n }\n util.inherits(StatefulServerChannel, ServerChannel);\n function WrappedRequest(msg, hdrs, req) {\n this._msg = msg;\n this.headers = hdrs || {};\n this.request = req || {};\n }\n WrappedRequest.prototype.toBuffer = function() {\n var msg = this._msg;\n return Buffer2.concat([\n MAP_BYTES_TYPE.toBuffer(this.headers),\n STRING_TYPE.toBuffer(msg.name),\n msg.requestType.toBuffer(this.request)\n ]);\n };\n function WrappedResponse(msg, hdr, err, res) {\n this._msg = msg;\n this.headers = hdr;\n this.error = err;\n this.response = res;\n }\n WrappedResponse.prototype.toBuffer = function() {\n var hdr = MAP_BYTES_TYPE.toBuffer(this.headers);\n var hasError = this.error !== void 0;\n return Buffer2.concat([\n hdr,\n BOOLEAN_TYPE.toBuffer(hasError),\n hasError ? this._msg.errorType.toBuffer(this.error) : this._msg.responseType.toBuffer(this.response)\n ]);\n };\n function CallContext(msg, channel) {\n this.channel = channel;\n this.locals = {};\n this.message = msg;\n Object.freeze(this);\n }\n function Registry(ctx, prefixLength) {\n this._ctx = ctx;\n this._mask = ~0 >>> (prefixLength | 0);\n this._id = 0;\n this._n = 0;\n this._cbs = {};\n }\n Registry.prototype.get = function(id) {\n return this._cbs[id & this._mask];\n };\n Registry.prototype.add = function(timeout, fn) {\n this._id = this._id + 1 & this._mask;\n var self = this;\n var id = this._id;\n var timer;\n if (timeout > 0) {\n timer = setTimeout(function() {\n cb(new Error(\"timeout\"));\n }, timeout);\n }\n this._cbs[id] = cb;\n this._n++;\n return id;\n function cb() {\n if (!self._cbs[id]) {\n return;\n }\n delete self._cbs[id];\n self._n--;\n if (timer) {\n clearTimeout(timer);\n }\n fn.apply(self._ctx, arguments);\n }\n };\n Registry.prototype.clear = function() {\n Object.keys(this._cbs).forEach(function(id) {\n this._cbs[id](new Error(\"interrupted\"));\n }, this);\n };\n function Adapter(clientSvc, serverSvc, hash, isRemote) {\n this._clientSvc = clientSvc;\n this._serverSvc = serverSvc;\n this._hash = hash;\n this._isRemote = !!isRemote;\n this._readers = createReaders(clientSvc, serverSvc);\n }\n Adapter.prototype._decodeRequest = function(buf) {\n var tap = new Tap(buf);\n var hdr = MAP_BYTES_TYPE._read(tap);\n var name = STRING_TYPE._read(tap);\n var msg, req;\n if (name) {\n msg = this._serverSvc.message(name);\n req = this._readers[name + \"?\"]._read(tap);\n } else {\n msg = PING_MESSAGE;\n }\n if (!tap.isValid()) {\n throw new Error(f2(\"truncated %s request\", name || \"ping$\"));\n }\n return new WrappedRequest(msg, hdr, req);\n };\n Adapter.prototype._decodeResponse = function(buf, wres, msg) {\n var tap = new Tap(buf);\n utils.copyOwnProperties(MAP_BYTES_TYPE._read(tap), wres.headers, true);\n var isError2 = BOOLEAN_TYPE._read(tap);\n var name = msg.name;\n if (name) {\n var reader = this._readers[name + (isError2 ? \"*\" : \"!\")];\n msg = this._clientSvc.message(name);\n if (isError2) {\n wres.error = reader._read(tap);\n } else {\n wres.response = reader._read(tap);\n }\n if (!tap.isValid()) {\n throw new Error(f2(\"truncated %s response\", name));\n }\n } else {\n msg = PING_MESSAGE;\n }\n };\n function FrameDecoder() {\n stream.Transform.call(this, { readableObjectMode: true });\n this._id = void 0;\n this._buf = utils.newBuffer(0);\n this._bufs = [];\n this.on(\"finish\", function() {\n this.push(null);\n });\n }\n util.inherits(FrameDecoder, stream.Transform);\n FrameDecoder.prototype._transform = function(buf, encoding, cb) {\n buf = Buffer2.concat([this._buf, buf]);\n var frameLength;\n while (buf.length >= 4 && buf.length >= (frameLength = buf.readInt32BE(0)) + 4) {\n if (frameLength) {\n this._bufs.push(buf.slice(4, frameLength + 4));\n } else {\n var bufs = this._bufs;\n this._bufs = [];\n this.push({ id: null, payload: bufs });\n }\n buf = buf.slice(frameLength + 4);\n }\n this._buf = buf;\n cb();\n };\n FrameDecoder.prototype._flush = function(cb) {\n if (this._buf.length || this._bufs.length) {\n var bufs = this._bufs.slice();\n bufs.unshift(this._buf);\n var err = toRpcError(\"TRAILING_DATA\");\n err.trailingData = Buffer2.concat(bufs).toString();\n this.emit(\"error\", err);\n }\n cb();\n };\n function FrameEncoder() {\n stream.Transform.call(this, { writableObjectMode: true });\n this.on(\"finish\", function() {\n this.push(null);\n });\n }\n util.inherits(FrameEncoder, stream.Transform);\n FrameEncoder.prototype._transform = function(obj, encoding, cb) {\n var bufs = obj.payload;\n var i, l, buf;\n for (i = 0, l = bufs.length; i < l; i++) {\n buf = bufs[i];\n this.push(intBuffer(buf.length));\n this.push(buf);\n }\n this.push(intBuffer(0));\n cb();\n };\n function NettyDecoder() {\n stream.Transform.call(this, { readableObjectMode: true });\n this._id = void 0;\n this._frameCount = 0;\n this._buf = utils.newBuffer(0);\n this._bufs = [];\n this.on(\"finish\", function() {\n this.push(null);\n });\n }\n util.inherits(NettyDecoder, stream.Transform);\n NettyDecoder.prototype._transform = function(buf, encoding, cb) {\n buf = Buffer2.concat([this._buf, buf]);\n while (true) {\n if (this._id === void 0) {\n if (buf.length < 8) {\n this._buf = buf;\n cb();\n return;\n }\n this._id = buf.readInt32BE(0);\n this._frameCount = buf.readInt32BE(4);\n buf = buf.slice(8);\n }\n var frameLength;\n while (this._frameCount && buf.length >= 4 && buf.length >= (frameLength = buf.readInt32BE(0)) + 4) {\n this._frameCount--;\n this._bufs.push(buf.slice(4, frameLength + 4));\n buf = buf.slice(frameLength + 4);\n }\n if (this._frameCount) {\n this._buf = buf;\n cb();\n return;\n } else {\n var obj = { id: this._id, payload: this._bufs };\n this._bufs = [];\n this._id = void 0;\n this.push(obj);\n }\n }\n };\n NettyDecoder.prototype._flush = FrameDecoder.prototype._flush;\n function NettyEncoder() {\n stream.Transform.call(this, { writableObjectMode: true });\n this.on(\"finish\", function() {\n this.push(null);\n });\n }\n util.inherits(NettyEncoder, stream.Transform);\n NettyEncoder.prototype._transform = function(obj, encoding, cb) {\n var bufs = obj.payload;\n var l = bufs.length;\n var buf;\n buf = utils.newBuffer(8);\n buf.writeInt32BE(obj.id, 0);\n buf.writeInt32BE(l, 4);\n this.push(buf);\n var i;\n for (i = 0; i < l; i++) {\n buf = bufs[i];\n this.push(intBuffer(buf.length));\n this.push(buf);\n }\n cb();\n };\n function intBuffer(n) {\n var buf = utils.newBuffer(4);\n buf.writeInt32BE(n);\n return buf;\n }\n function readHead(type, buf) {\n var tap = new Tap(buf);\n var head = type._read(tap);\n if (!tap.isValid()) {\n throw new Error(f2(\"truncated %j\", type.schema()));\n }\n return { head, tail: tap.buf.slice(tap.pos) };\n }\n function createReader(rtype, wtype) {\n return rtype.equals(wtype) ? rtype : rtype.createResolver(wtype);\n }\n function createReaders(clientSvc, serverSvc) {\n var obj = {};\n clientSvc.messages.forEach(function(c) {\n var n = c.name;\n var s = serverSvc.message(n);\n try {\n if (!s) {\n throw new Error(f2(\"missing server message: %s\", n));\n }\n if (s.oneWay !== c.oneWay) {\n throw new Error(f2(\"inconsistent one-way message: %s\", n));\n }\n obj[n + \"?\"] = createReader(s.requestType, c.requestType);\n obj[n + \"*\"] = createReader(c.errorType, s.errorType);\n obj[n + \"!\"] = createReader(c.responseType, s.responseType);\n } catch (cause) {\n throw toRpcError(\"INCOMPATIBLE_PROTOCOL\", cause);\n }\n });\n return obj;\n }\n function insertRemoteProtocols(cache, ptcls, svc, isClient) {\n Object.keys(ptcls).forEach(function(hash) {\n var ptcl = ptcls[hash];\n var clientSvc, serverSvc;\n if (isClient) {\n clientSvc = svc;\n serverSvc = Service.forProtocol(ptcl);\n } else {\n clientSvc = Service.forProtocol(ptcl);\n serverSvc = svc;\n }\n cache[hash] = new Adapter(clientSvc, serverSvc, hash, true);\n });\n }\n function getRemoteProtocols(cache, isClient) {\n var ptcls = {};\n Object.keys(cache).forEach(function(hs) {\n var adapter = cache[hs];\n if (adapter._isRemote) {\n var svc = isClient ? adapter._serverSvc : adapter._clientSvc;\n ptcls[hs] = svc.protocol;\n }\n });\n return ptcls;\n }\n function isError(any) {\n return !!any && Object.prototype.toString.call(any) === \"[object Error]\";\n }\n function forwardErrors(src, dst) {\n return src.on(\"error\", function(err) {\n dst.emit(\"error\", err, src);\n });\n }\n function toError(msg, cause) {\n var err = new Error(msg);\n err.cause = cause;\n return err;\n }\n function toRpcError(rpcCode, cause) {\n var err = toError(rpcCode.toLowerCase().replace(/_/g, \" \"), cause);\n err.rpcCode = cause && cause.rpcCode ? cause.rpcCode : rpcCode;\n return err;\n }\n function serializationError(msg, obj, fields) {\n var details = [];\n var i, l, field;\n for (i = 0, l = fields.length; i < l; i++) {\n field = fields[i];\n field.type.isValid(obj[field.name], { errorHook });\n }\n var detailsStr = details.map(function(obj2) {\n return f2(\"%s = %j but expected %s\", obj2.path, obj2.value, obj2.type);\n }).join(\", \");\n var err = new Error(f2(\"%s (%s)\", msg, detailsStr));\n err.details = details;\n return err;\n function errorHook(parts, any, type) {\n var strs = [];\n var i2, l2, part;\n for (i2 = 0, l2 = parts.length; i2 < l2; i2++) {\n part = parts[i2];\n if (isNaN(part)) {\n strs.push(\".\" + part);\n } else {\n strs.push(\"[\" + part + \"]\");\n }\n }\n details.push({\n path: field.name + strs.join(\"\"),\n value: any,\n type\n });\n }\n }\n function normalizedPrefix(scope) {\n return scope ? utils.getHash(scope).readInt16BE(0) << 32 - PREFIX_LENGTH : 0;\n }\n function matchesPrefix(id, prefix) {\n return (id ^ prefix) >> 32 - PREFIX_LENGTH === 0;\n }\n function isStream(any) {\n return !!(any && any.pipe);\n }\n function getExistingMessage(svc, name) {\n var msg = svc.message(name);\n if (!msg) {\n throw new Error(f2(\"unknown message: %s\", name));\n }\n return msg;\n }\n function chainMiddleware(params) {\n var args = [params.wreq, params.wres];\n var cbs = [];\n var cause;\n forward(0);\n function forward(pos) {\n var isDone = false;\n if (pos < params.fns.length) {\n params.fns[pos].apply(params.ctx, args.concat(function(err, cb) {\n if (isDone) {\n params.onError(toError(\"duplicate forward middleware call\", err));\n return;\n }\n isDone = true;\n if (err || params.wres && // Non one-way messages.\n (params.wres.error !== void 0 || params.wres.response !== void 0)) {\n cause = err;\n backward();\n return;\n }\n if (cb) {\n cbs.push(cb);\n }\n forward(++pos);\n }));\n } else {\n params.onTransition.apply(params.ctx, args.concat(function(err) {\n if (isDone) {\n params.onError(toError(\"duplicate handler call\", err));\n return;\n }\n isDone = true;\n cause = err;\n process.nextTick(backward);\n }));\n }\n }\n function backward() {\n var cb = cbs.pop();\n if (cb) {\n var isDone = false;\n cb.call(params.ctx, cause, function(err) {\n if (isDone) {\n params.onError(toError(\"duplicate backward middleware call\", err));\n return;\n }\n cause = err;\n isDone = true;\n backward();\n });\n } else {\n params.onCompletion.call(params.ctx, cause);\n }\n }\n }\n module.exports = {\n Adapter,\n HANDSHAKE_REQUEST_TYPE,\n HANDSHAKE_RESPONSE_TYPE,\n Message,\n Registry,\n Service,\n discoverProtocol,\n streams: {\n FrameDecoder,\n FrameEncoder,\n NettyDecoder,\n NettyEncoder\n }\n };\n }\n});\n\n// node_modules/avsc/lib/files.js\nvar require_files = __commonJS({\n \"node_modules/avsc/lib/files.js\"(exports, module) {\n \"use strict\";\n var fs = __import_FS;\n var path = __import_PATH;\n function createImportHook() {\n var imports = {};\n return function(fpath, kind, cb) {\n fpath = path.resolve(fpath);\n if (imports[fpath]) {\n process.nextTick(cb);\n return;\n }\n imports[fpath] = true;\n fs.readFile(fpath, { encoding: \"utf8\" }, cb);\n };\n }\n function createSyncImportHook() {\n var imports = {};\n return function(fpath, kind, cb) {\n fpath = path.resolve(fpath);\n if (imports[fpath]) {\n cb();\n } else {\n imports[fpath] = true;\n cb(null, fs.readFileSync(fpath, { encoding: \"utf8\" }));\n }\n };\n }\n module.exports = {\n createImportHook,\n createSyncImportHook,\n // Proxy a few methods to better shim them for browserify.\n existsSync: fs.existsSync,\n readFileSync: fs.readFileSync\n };\n }\n});\n\n// node_modules/avsc/lib/specs.js\nvar require_specs = __commonJS({\n \"node_modules/avsc/lib/specs.js\"(exports, module) {\n \"use strict\";\n var files = require_files();\n var utils = require_utils();\n var path = __import_PATH;\n var util = __import_UTIL;\n var f2 = util.format;\n var TYPE_REFS = {\n date: { type: \"int\", logicalType: \"date\" },\n decimal: { type: \"bytes\", logicalType: \"decimal\" },\n time_ms: { type: \"long\", logicalType: \"time-millis\" },\n timestamp_ms: { type: \"long\", logicalType: \"timestamp-millis\" }\n };\n function assembleProtocol(fpath, opts, cb) {\n if (!cb && typeof opts == \"function\") {\n cb = opts;\n opts = void 0;\n }\n opts = opts || {};\n if (!opts.importHook) {\n opts.importHook = files.createImportHook();\n }\n importFile(fpath, function(err, protocol) {\n if (err) {\n cb(err);\n return;\n }\n if (!protocol) {\n cb(new Error(\"empty root import\"));\n return;\n }\n var schemas = protocol.types;\n if (schemas) {\n var namespace = protocolNamespace(protocol) || \"\";\n schemas.forEach(function(schema) {\n if (schema.namespace === namespace) {\n delete schema.namespace;\n }\n });\n }\n cb(null, protocol);\n });\n function importFile(fpath2, cb2) {\n opts.importHook(fpath2, \"idl\", function(err, str) {\n if (err) {\n cb2(err);\n return;\n }\n if (str === void 0) {\n cb2();\n return;\n }\n try {\n var reader = new Reader(str, opts);\n var obj = reader._readProtocol(str, opts);\n } catch (err2) {\n err2.path = fpath2;\n cb2(err2);\n return;\n }\n fetchImports(obj.protocol, obj.imports, path.dirname(fpath2), cb2);\n });\n }\n function fetchImports(protocol, imports, dpath, cb2) {\n var importedProtocols = [];\n next();\n function next() {\n var info = imports.shift();\n if (!info) {\n importedProtocols.reverse();\n try {\n importedProtocols.forEach(function(imported) {\n mergeImport(protocol, imported);\n });\n } catch (err) {\n cb2(err);\n return;\n }\n cb2(null, protocol);\n return;\n }\n var importPath = path.join(dpath, info.name);\n if (info.kind === \"idl\") {\n importFile(importPath, function(err, imported) {\n if (err) {\n cb2(err);\n return;\n }\n if (imported) {\n importedProtocols.push(imported);\n }\n next();\n });\n } else {\n opts.importHook(importPath, info.kind, function(err, str) {\n if (err) {\n cb2(err);\n return;\n }\n switch (info.kind) {\n case \"protocol\":\n case \"schema\":\n if (str === void 0) {\n next();\n return;\n }\n try {\n var obj = JSON.parse(str);\n } catch (err2) {\n err2.path = importPath;\n cb2(err2);\n return;\n }\n var imported = info.kind === \"schema\" ? { types: [obj] } : obj;\n importedProtocols.push(imported);\n next();\n return;\n default:\n cb2(new Error(f2(\"invalid import kind: %s\", info.kind)));\n }\n });\n }\n }\n }\n function mergeImport(protocol, imported) {\n var schemas = imported.types || [];\n schemas.reverse();\n schemas.forEach(function(schema) {\n if (!protocol.types) {\n protocol.types = [];\n }\n if (schema.namespace === void 0) {\n schema.namespace = protocolNamespace(imported) || \"\";\n }\n protocol.types.unshift(schema);\n });\n Object.keys(imported.messages || {}).forEach(function(name) {\n if (!protocol.messages) {\n protocol.messages = {};\n }\n if (protocol.messages[name]) {\n throw new Error(f2(\"duplicate message: %s\", name));\n }\n protocol.messages[name] = imported.messages[name];\n });\n }\n }\n function read(str) {\n var schema;\n if (typeof str == \"string\" && ~str.indexOf(path.sep) && files.existsSync(str)) {\n var contents = files.readFileSync(str, { encoding: \"utf8\" });\n try {\n return JSON.parse(contents);\n } catch (err) {\n var opts = { importHook: files.createSyncImportHook() };\n assembleProtocol(str, opts, function(err2, protocolSchema) {\n schema = err2 ? contents : protocolSchema;\n });\n }\n } else {\n schema = str;\n }\n if (typeof schema != \"string\" || schema === \"null\") {\n return schema;\n }\n try {\n return JSON.parse(schema);\n } catch (err) {\n try {\n return Reader.readProtocol(schema);\n } catch (err2) {\n try {\n return Reader.readSchema(schema);\n } catch (err3) {\n return schema;\n }\n }\n }\n }\n function Reader(str, opts) {\n opts = opts || {};\n this._tk = new Tokenizer(str);\n this._ackVoidMessages = !!opts.ackVoidMessages;\n this._implicitTags = !opts.delimitedCollections;\n this._typeRefs = opts.typeRefs || TYPE_REFS;\n }\n Reader.readProtocol = function(str, opts) {\n var reader = new Reader(str, opts);\n var protocol = reader._readProtocol();\n if (protocol.imports.length) {\n throw new Error(\"unresolvable import\");\n }\n return protocol.protocol;\n };\n Reader.readSchema = function(str, opts) {\n var reader = new Reader(str, opts);\n var doc = reader._readJavadoc();\n var schema = reader._readType(doc === void 0 ? {} : { doc }, true);\n reader._tk.next({ id: \"(eof)\" });\n return schema;\n };\n Reader.prototype._readProtocol = function() {\n var tk = this._tk;\n var imports = [];\n var types = [];\n var messages = {};\n var pos;\n this._readImports(imports);\n var protocolSchema = {};\n var protocolJavadoc = this._readJavadoc();\n if (protocolJavadoc !== void 0) {\n protocolSchema.doc = protocolJavadoc;\n }\n this._readAnnotations(protocolSchema);\n tk.next({ val: \"protocol\" });\n if (!tk.next({ val: \"{\", silent: true })) {\n protocolSchema.protocol = tk.next({ id: \"name\" }).val;\n tk.next({ val: \"{\" });\n }\n while (!tk.next({ val: \"}\", silent: true })) {\n if (!this._readImports(imports)) {\n var javadoc = this._readJavadoc();\n var typeSchema = this._readType({}, true);\n var numImports = this._readImports(imports, true);\n var message = void 0;\n pos = tk.pos;\n if (!numImports && (message = this._readMessage(typeSchema))) {\n if (javadoc !== void 0 && message.schema.doc === void 0) {\n message.schema.doc = javadoc;\n }\n var oneWay = false;\n if (message.schema.response === \"void\" || message.schema.response.type === \"void\") {\n oneWay = !this._ackVoidMessages && !message.schema.errors;\n if (message.schema.response === \"void\") {\n message.schema.response = \"null\";\n } else {\n message.schema.response.type = \"null\";\n }\n }\n if (oneWay) {\n message.schema[\"one-way\"] = true;\n }\n if (messages[message.name]) {\n throw new Error(f2(\"duplicate message: %s\", message.name));\n }\n messages[message.name] = message.schema;\n } else {\n if (javadoc) {\n if (typeof typeSchema == \"string\") {\n typeSchema = { doc: javadoc, type: typeSchema };\n } else if (typeSchema.doc === void 0) {\n typeSchema.doc = javadoc;\n }\n }\n types.push(typeSchema);\n tk.pos = pos;\n tk.next({ val: \";\", silent: true });\n }\n javadoc = void 0;\n }\n }\n tk.next({ id: \"(eof)\" });\n if (types.length) {\n protocolSchema.types = types;\n }\n if (Object.keys(messages).length) {\n protocolSchema.messages = messages;\n }\n return { protocol: protocolSchema, imports };\n };\n Reader.prototype._readAnnotations = function(schema) {\n var tk = this._tk;\n while (tk.next({ val: \"@\", silent: true })) {\n var parts = [];\n while (!tk.next({ val: \"(\", silent: true })) {\n parts.push(tk.next().val);\n }\n schema[parts.join(\"\")] = tk.next({ id: \"json\" }).val;\n tk.next({ val: \")\" });\n }\n };\n Reader.prototype._readMessage = function(responseSchema) {\n var tk = this._tk;\n var schema = { request: [], response: responseSchema };\n this._readAnnotations(schema);\n var name = tk.next().val;\n if (tk.next().val !== \"(\") {\n return;\n }\n if (!tk.next({ val: \")\", silent: true })) {\n do {\n schema.request.push(this._readField());\n } while (!tk.next({ val: \")\", silent: true }) && tk.next({ val: \",\" }));\n }\n var token = tk.next();\n switch (token.val) {\n case \"throws\":\n schema.errors = [];\n do {\n schema.errors.push(this._readType());\n } while (!tk.next({ val: \";\", silent: true }) && tk.next({ val: \",\" }));\n break;\n case \"oneway\":\n schema[\"one-way\"] = true;\n tk.next({ val: \";\" });\n break;\n case \";\":\n break;\n default:\n throw tk.error(\"invalid message suffix\", token);\n }\n return { name, schema };\n };\n Reader.prototype._readJavadoc = function() {\n var token = this._tk.next({ id: \"javadoc\", emitJavadoc: true, silent: true });\n if (token) {\n return token.val;\n }\n };\n Reader.prototype._readField = function() {\n var tk = this._tk;\n var javadoc = this._readJavadoc();\n var schema = { type: this._readType() };\n if (javadoc !== void 0 && schema.doc === void 0) {\n schema.doc = javadoc;\n }\n this._readAnnotations(schema);\n schema.name = tk.next({ id: \"name\" }).val;\n if (tk.next({ val: \"=\", silent: true })) {\n schema[\"default\"] = tk.next({ id: \"json\" }).val;\n }\n return schema;\n };\n Reader.prototype._readType = function(schema, top) {\n schema = schema || {};\n this._readAnnotations(schema);\n schema.type = this._tk.next({ id: \"name\" }).val;\n switch (schema.type) {\n case \"record\":\n case \"error\":\n return this._readRecord(schema);\n case \"fixed\":\n return this._readFixed(schema);\n case \"enum\":\n return this._readEnum(schema, top);\n case \"map\":\n return this._readMap(schema);\n case \"array\":\n return this._readArray(schema);\n case \"union\":\n if (Object.keys(schema).length > 1) {\n throw new Error(\"union annotations are not supported\");\n }\n return this._readUnion();\n default:\n var ref = this._typeRefs[schema.type];\n if (ref) {\n delete schema.type;\n utils.copyOwnProperties(ref, schema);\n }\n return Object.keys(schema).length > 1 ? schema : schema.type;\n }\n };\n Reader.prototype._readFixed = function(schema) {\n var tk = this._tk;\n if (!tk.next({ val: \"(\", silent: true })) {\n schema.name = tk.next({ id: \"name\" }).val;\n tk.next({ val: \"(\" });\n }\n schema.size = parseInt(tk.next({ id: \"number\" }).val);\n tk.next({ val: \")\" });\n return schema;\n };\n Reader.prototype._readMap = function(schema) {\n var tk = this._tk;\n var silent = this._implicitTags;\n var implicitTags = tk.next({ val: \"<\", silent }) === void 0;\n schema.values = this._readType();\n tk.next({ val: \">\", silent: implicitTags });\n return schema;\n };\n Reader.prototype._readArray = function(schema) {\n var tk = this._tk;\n var silent = this._implicitTags;\n var implicitTags = tk.next({ val: \"<\", silent }) === void 0;\n schema.items = this._readType();\n tk.next({ val: \">\", silent: implicitTags });\n return schema;\n };\n Reader.prototype._readEnum = function(schema, top) {\n var tk = this._tk;\n if (!tk.next({ val: \"{\", silent: true })) {\n schema.name = tk.next({ id: \"name\" }).val;\n tk.next({ val: \"{\" });\n }\n schema.symbols = [];\n do {\n schema.symbols.push(tk.next().val);\n } while (!tk.next({ val: \"}\", silent: true }) && tk.next({ val: \",\" }));\n if (top && tk.next({ val: \"=\", silent: true })) {\n schema.default = tk.next().val;\n tk.next({ val: \";\" });\n }\n return schema;\n };\n Reader.prototype._readUnion = function() {\n var tk = this._tk;\n var arr = [];\n tk.next({ val: \"{\" });\n do {\n arr.push(this._readType());\n } while (!tk.next({ val: \"}\", silent: true }) && tk.next({ val: \",\" }));\n return arr;\n };\n Reader.prototype._readRecord = function(schema) {\n var tk = this._tk;\n if (!tk.next({ val: \"{\", silent: true })) {\n schema.name = tk.next({ id: \"name\" }).val;\n tk.next({ val: \"{\" });\n }\n schema.fields = [];\n while (!tk.next({ val: \"}\", silent: true })) {\n schema.fields.push(this._readField());\n tk.next({ val: \";\" });\n }\n return schema;\n };\n Reader.prototype._readImports = function(imports, maybeMessage) {\n var tk = this._tk;\n var numImports = 0;\n var pos = tk.pos;\n while (tk.next({ val: \"import\", silent: true })) {\n if (!numImports && maybeMessage && tk.next({ val: \"(\", silent: true })) {\n tk.pos = pos;\n return;\n }\n var kind = tk.next({ id: \"name\" }).val;\n var fname = JSON.parse(tk.next({ id: \"string\" }).val);\n tk.next({ val: \";\" });\n imports.push({ kind, name: fname });\n numImports++;\n }\n return numImports;\n };\n function Tokenizer(str) {\n this._str = str;\n this.pos = 0;\n }\n Tokenizer.prototype.next = function(opts) {\n var token = { pos: this.pos, id: void 0, val: void 0 };\n var javadoc = this._skip(opts && opts.emitJavadoc);\n if (typeof javadoc == \"string\") {\n token.id = \"javadoc\";\n token.val = javadoc;\n } else {\n var pos = this.pos;\n var str = this._str;\n var c = str.charAt(pos);\n if (!c) {\n token.id = \"(eof)\";\n } else {\n if (opts && opts.id === \"json\") {\n token.id = \"json\";\n this.pos = this._endOfJson();\n } else if (c === '\"') {\n token.id = \"string\";\n this.pos = this._endOfString();\n } else if (/[0-9]/.test(c)) {\n token.id = \"number\";\n this.pos = this._endOf(/[0-9]/);\n } else if (/[`A-Za-z_.]/.test(c)) {\n token.id = \"name\";\n this.pos = this._endOf(/[`A-Za-z0-9_.]/);\n } else {\n token.id = \"operator\";\n this.pos = pos + 1;\n }\n token.val = str.slice(pos, this.pos);\n if (token.id === \"json\") {\n try {\n token.val = JSON.parse(token.val);\n } catch (err2) {\n throw this.error(\"invalid JSON\", token);\n }\n } else if (token.id === \"name\") {\n token.val = token.val.replace(/`/g, \"\");\n }\n }\n }\n var err;\n if (opts && opts.id && opts.id !== token.id) {\n err = this.error(f2(\"expected ID %s\", opts.id), token);\n } else if (opts && opts.val && opts.val !== token.val) {\n err = this.error(f2(\"expected value %s\", opts.val), token);\n }\n if (!err) {\n return token;\n } else if (opts && opts.silent) {\n this.pos = token.pos;\n return void 0;\n } else {\n throw err;\n }\n };\n Tokenizer.prototype.error = function(reason, context) {\n var isToken = typeof context != \"number\";\n var pos = isToken ? context.pos : context;\n var str = this._str;\n var lineNum = 1;\n var lineStart = 0;\n var i;\n for (i = 0; i < pos; i++) {\n if (str.charAt(i) === \"\\n\") {\n lineNum++;\n lineStart = i;\n }\n }\n var msg = isToken ? f2(\"invalid token %j: %s\", context, reason) : reason;\n var err = new Error(msg);\n err.token = isToken ? context : void 0;\n err.lineNum = lineNum;\n err.colNum = pos - lineStart;\n return err;\n };\n Tokenizer.prototype._skip = function(emitJavadoc) {\n var str = this._str;\n var isJavadoc = false;\n var pos, c;\n while ((c = str.charAt(this.pos)) && /\\s/.test(c)) {\n this.pos++;\n }\n pos = this.pos;\n if (c === \"/\") {\n switch (str.charAt(this.pos + 1)) {\n case \"/\":\n this.pos += 2;\n while ((c = str.charAt(this.pos)) && c !== \"\\n\") {\n this.pos++;\n }\n return this._skip(emitJavadoc);\n case \"*\":\n this.pos += 2;\n if (str.charAt(this.pos) === \"*\") {\n isJavadoc = true;\n }\n while (c = str.charAt(this.pos++)) {\n if (c === \"*\" && str.charAt(this.pos) === \"/\") {\n this.pos++;\n if (isJavadoc && emitJavadoc) {\n return extractJavadoc(str.slice(pos + 3, this.pos - 2));\n }\n return this._skip(emitJavadoc);\n }\n }\n throw this.error(\"unterminated comment\", pos);\n }\n }\n };\n Tokenizer.prototype._endOf = function(pat) {\n var pos = this.pos;\n var str = this._str;\n while (pat.test(str.charAt(pos))) {\n pos++;\n }\n return pos;\n };\n Tokenizer.prototype._endOfString = function() {\n var pos = this.pos + 1;\n var str = this._str;\n var c;\n while (c = str.charAt(pos)) {\n if (c === '\"') {\n return pos + 1;\n }\n if (c === \"\\\\\") {\n pos += 2;\n } else {\n pos++;\n }\n }\n throw this.error(\"unterminated string\", pos - 1);\n };\n Tokenizer.prototype._endOfJson = function() {\n var pos = utils.jsonEnd(this._str, this.pos);\n if (pos < 0) {\n throw this.error(\"invalid JSON\", pos);\n }\n return pos;\n };\n function extractJavadoc(str) {\n var lines = str.replace(/^[ \\t]+|[ \\t]+$/g, \"\").split(\"\\n\").map(function(line, i) {\n return i ? line.replace(/^\\s*\\*\\s?/, \"\") : line;\n });\n while (lines.length && !lines[0]) {\n lines.shift();\n }\n while (lines.length && !lines[lines.length - 1]) {\n lines.pop();\n }\n return lines.join(\"\\n\");\n }\n function protocolNamespace(protocol) {\n if (protocol.namespace) {\n return protocol.namespace;\n }\n var match = /^(.*)\\.[^.]+$/.exec(protocol.protocol);\n return match ? match[1] : void 0;\n }\n module.exports = {\n Tokenizer,\n assembleProtocol,\n read,\n readProtocol: Reader.readProtocol,\n readSchema: Reader.readSchema\n };\n }\n});\n\n// node_modules/avsc/lib/index.js\nvar require_lib = __commonJS({\n \"node_modules/avsc/lib/index.js\"(exports, module) {\n \"use strict\";\n var containers = require_containers();\n var services = require_services();\n var specs = require_specs();\n var types = require_types();\n var utils = require_utils();\n var buffer = __import_BUFFER;\n var fs = __import_FS;\n var util = __import_UTIL;\n var Buffer2 = buffer.Buffer;\n function parse2(any, opts) {\n var schemaOrProtocol = specs.read(any);\n return schemaOrProtocol.protocol ? services.Service.forProtocol(schemaOrProtocol, opts) : types.Type.forSchema(schemaOrProtocol, opts);\n }\n function extractFileHeader(path, opts) {\n opts = opts || {};\n var decode = opts.decode === void 0 ? true : !!opts.decode;\n var size = Math.max(opts.size || 4096, 4);\n var buf = utils.newBuffer(size);\n var fd = fs.openSync(path, \"r\");\n try {\n var pos = fs.readSync(fd, buf, 0, size);\n if (pos < 4 || !containers.MAGIC_BYTES.equals(buf.slice(0, 4))) {\n return null;\n }\n var tap = new utils.Tap(buf);\n var header = null;\n do {\n header = containers.HEADER_TYPE._read(tap);\n } while (!isValid());\n if (decode !== false) {\n var meta = header.meta;\n meta[\"avro.schema\"] = JSON.parse(meta[\"avro.schema\"].toString());\n if (meta[\"avro.codec\"] !== void 0) {\n meta[\"avro.codec\"] = meta[\"avro.codec\"].toString();\n }\n }\n return header;\n } finally {\n fs.closeSync(fd);\n }\n function isValid() {\n if (tap.isValid()) {\n return true;\n }\n var len = 2 * tap.buf.length;\n var buf2 = utils.newBuffer(len);\n len = fs.readSync(fd, buf2, 0, len);\n tap.buf = Buffer2.concat([tap.buf, buf2]);\n tap.pos = 0;\n return false;\n }\n }\n function createFileDecoder(path, opts) {\n return fs.createReadStream(path).pipe(new containers.streams.BlockDecoder(opts));\n }\n function createFileEncoder(path, schema, opts) {\n var encoder = new containers.streams.BlockEncoder(schema, opts);\n encoder.pipe(fs.createWriteStream(path, { defaultEncoding: \"binary\" }));\n return encoder;\n }\n module.exports = {\n Service: services.Service,\n Type: types.Type,\n assembleProtocol: specs.assembleProtocol,\n createFileDecoder,\n createFileEncoder,\n discoverProtocol: services.discoverProtocol,\n extractFileHeader,\n parse: parse2,\n readProtocol: specs.readProtocol,\n readSchema: specs.readSchema,\n streams: containers.streams,\n types: types.builtins,\n // Deprecated exports.\n Protocol: services.Service,\n assemble: util.deprecate(\n specs.assembleProtocol,\n \"use `assembleProtocol` instead\"\n ),\n combine: util.deprecate(\n types.Type.forTypes,\n \"use `Type.forTypes` intead\"\n ),\n infer: util.deprecate(\n types.Type.forValue,\n \"use `Type.forValue` instead\"\n )\n };\n }\n});\n\n// node_modules/ultralight-s3/lib/index.min.js\nvar x = \"AWS4-HMAC-SHA256\";\nvar K = \"aws4_request\";\nvar O = \"s3\";\nvar v = \"2\";\nvar E = \"UNSIGNED-PAYLOAD\";\nvar W = \"application/octet-stream\";\nvar M = \"application/xml\";\nvar w = \"application/json\";\nvar X = [\"accessKeyId\", \"secretAccessKey\", \"sessionToken\", \"password\"];\nvar f = \"x-amz-content-sha256\";\nvar Z = \"x-amz-date\";\nvar V = \"host\";\nvar J = \"Authorization\";\nvar m = \"Content-Type\";\nvar T = \"Content-Length\";\nvar P = \"etag\";\nvar C = \"last-modified\";\nvar u = \"ultralight-s3 Module: \";\nvar ee = `${u}accessKeyId must be a non-empty string`;\nvar te = `${u}secretAccessKey must be a non-empty string`;\nvar se = `${u}endpoint must be a non-empty string`;\nvar re = `${u}bucketName must be a non-empty string`;\nvar j = `${u}key must be a non-empty string`;\nvar $ = `${u}uploadId must be a non-empty string`;\nvar L = `${u}parts must be a non-empty array`;\nvar k = `${u}Each part must have a partNumber (number) and ETag (string)`;\nvar D = `${u}data must be a Buffer or string`;\nvar B = `${u}prefix must be a string`;\nvar F = `${u}maxKeys must be a positive integer`;\nvar G = `${u}delimiter must be a string`;\nvar z = crypto.createHmac || (await import(\"node:crypto\")).createHmac;\nvar Q = crypto.createHash || (await import(\"node:crypto\")).createHash;\ntypeof z > \"u\" && typeof Q > \"u\" && console.error(\"ultralight-S3 Module: Crypto functions are not available, please report the issue with necessary description: https://github.com/sentienhq/ultralight-s3/issues\");\nvar ne = { contents: true };\nvar oe = (p) => `%${p.charCodeAt(0).toString(16).toUpperCase()}`;\nvar q = (p) => encodeURIComponent(p).replace(/[!'()*]/g, oe);\nvar y = (p) => q(p).replace(/%2F/g, \"/\");\nvar N = class {\n constructor({ accessKeyId: e, secretAccessKey: t, endpoint: r, bucketName: n, region: o = \"auto\", maxRequestSizeInBytes: i = 5242880, requestAbortTimeout: a = void 0, logger: c = void 0 }) {\n this.getBucketName = () => this.bucketName, this.setBucketName = (s) => {\n this.bucketName = s;\n }, this.getRegion = () => this.region, this.setRegion = (s) => {\n this.region = s;\n }, this.getEndpoint = () => this.endpoint, this.setEndpoint = (s) => {\n this.endpoint = s;\n }, this.getMaxRequestSizeInBytes = () => this.maxRequestSizeInBytes, this.setMaxRequestSizeInBytes = (s) => {\n this.maxRequestSizeInBytes = s;\n }, this.sanitizeETag = (s) => H(s), this.getProps = () => ({ accessKeyId: this.accessKeyId, secretAccessKey: this.secretAccessKey, region: this.region, bucket: this.bucketName, endpoint: this.endpoint, maxRequestSizeInBytes: this.maxRequestSizeInBytes, requestAbortTimeout: this.requestAbortTimeout, logger: this.logger }), this.setProps = (s) => {\n this._validateConstructorParams(s.accessKeyId, s.secretAccessKey, s.bucketName, s.endpoint), this.accessKeyId = s.accessKeyId, this.secretAccessKey = s.secretAccessKey, this.region = s.region || \"auto\", this.bucketName = s.bucketName, this.endpoint = s.endpoint, this.maxRequestSizeInBytes = s.maxRequestSizeInBytes || 5242880, this.requestAbortTimeout = s.requestAbortTimeout, this.logger = s.logger;\n }, this._validateConstructorParams(e, t, r, n), this.accessKeyId = e, this.secretAccessKey = t, this.endpoint = r, this.bucketName = n, this.region = o, this.maxRequestSizeInBytes = i, this.requestAbortTimeout = a, this.logger = c;\n }\n _validateConstructorParams(e, t, r, n) {\n if (typeof e != \"string\" || e.trim().length === 0) throw new TypeError(ee);\n if (typeof t != \"string\" || t.trim().length === 0) throw new TypeError(te);\n if (typeof r != \"string\" || r.trim().length === 0) throw new TypeError(se);\n if (typeof n != \"string\" || n.trim().length === 0) throw new TypeError(re);\n }\n _checkMethodHeadnGet(e) {\n if (e !== \"GET\" && e !== \"HEAD\") throw this._log(\"error\", `${u}method must be either GET or HEAD`), new Error(\"method must be either GET or HEAD\");\n }\n _checkKey(e) {\n if (typeof e != \"string\" || e.trim().length === 0) throw this._log(\"error\", j), new TypeError(j);\n }\n _checkDelimiter(e) {\n if (typeof e != \"string\" || e.trim().length === 0) throw this._log(\"error\", G), new TypeError(G);\n }\n _checkPrefix(e) {\n if (typeof e != \"string\") throw this._log(\"error\", B), new TypeError(B);\n }\n _checkMaxKeys(e) {\n if (typeof e != \"number\" || e <= 0) throw this._log(\"error\", F), new TypeError(F);\n }\n _checkOpts(e) {\n if (typeof e != \"object\") throw this._log(\"error\", `${u}opts must be an object`), new TypeError(`${u}opts must be an object`);\n }\n _log(e, t, r = {}) {\n if (this.logger && typeof this.logger[e] == \"function\") {\n let n = (a) => typeof a != \"object\" || a === null ? a : Object.keys(a).reduce((c, s) => (X.includes(s.toLowerCase()) ? c[s] = \"[REDACTED]\" : typeof a[s] == \"object\" && a[s] !== null ? c[s] = n(a[s]) : c[s] = a[s], c), Array.isArray(a) ? [] : {}), o = n(r), i = { timestamp: (/* @__PURE__ */ new Date()).toISOString(), level: e, message: t, ...o, context: n({ bucketName: this.bucketName, region: this.region, endpoint: this.endpoint, accessKeyId: this.accessKeyId ? `${this.accessKeyId.substring(0, 4)}...` : void 0 }) };\n this.logger[e](i);\n }\n }\n async getContentLength(e) {\n this._checkKey(e);\n let t = { [f]: E }, r = y(e), { url: n, headers: o } = await this._sign(\"HEAD\", r, {}, t, \"\"), a = (await this._sendRequest(n, \"HEAD\", o)).headers.get(T);\n return a ? parseInt(a, 10) : 0;\n }\n async bucketExists() {\n let e = { [f]: E }, { url: t, headers: r } = await this._sign(\"HEAD\", \"\", {}, e, \"\"), n = await this._sendRequest(t, \"HEAD\", r);\n return !!(n.ok && n.status === 200);\n }\n async fileExists(e, t = {}) {\n this._checkKey(e);\n let { filteredOpts: r, conditionalHeaders: n } = this._filterIfHeaders(t), o = { [f]: E, ...n }, i = y(e), { url: a, headers: c } = await this._sign(\"HEAD\", i, r, o, \"\");\n try {\n let s = await this._sendRequest(a, \"HEAD\", c, \"\", [200, 404, 412, 304]);\n return s.status === 404 ? false : s.status === 412 || s.status === 304 ? null : s.ok && s.status === 200 ? true : (this._handleErrorResponse(s), false);\n } catch (s) {\n let l = s instanceof Error ? s.message : String(s);\n throw this._log(\"error\", `${u}Failed to check if file exists: ${l}`), new Error(`${u}Failed to check if file exists: ${l}`);\n }\n }\n async _sign(e, t, r, n, o) {\n let i = (/* @__PURE__ */ new Date()).toISOString().replace(/[:-]|\\.\\d{3}/g, \"\"), a = typeof t == \"string\" && t.length > 0 ? new URL(t, this.endpoint) : new URL(this.endpoint);\n a.pathname = `/${encodeURI(this.bucketName)}${a.pathname}`, n[f] = o ? await U(o) : E, n[Z] = i, n[V] = a.host;\n let c = this._buildCanonicalHeaders(n), s = Object.keys(n).map((_) => _.toLowerCase()).sort().join(\";\"), l = await this._buildCanonicalRequest(e, a, r, c, s, o), h = await this._buildStringToSign(i, l), d = await this._calculateSignature(i, h), g = this._buildAuthorizationHeader(i, s, d);\n return n[J] = g, { url: a.toString(), headers: n };\n }\n _buildCanonicalHeaders(e) {\n return Object.entries(e).map(([t, r]) => `${t.toLowerCase()}:${String(r).trim()}`).sort().join(`\n`);\n }\n async _buildCanonicalRequest(e, t, r, n, o, i) {\n return [e, t.pathname, this._buildCanonicalQueryString(r), `${n}\n`, o, i ? await U(i) : E].join(`\n`);\n }\n async _buildStringToSign(e, t) {\n let r = [e.slice(0, 8), this.region, O, K].join(\"/\");\n return [x, e, r, await U(t)].join(`\n`);\n }\n async _calculateSignature(e, t) {\n let r = await this._getSignatureKey(e.slice(0, 8));\n return A(r, t, \"hex\");\n }\n _buildAuthorizationHeader(e, t, r) {\n let n = [e.slice(0, 8), this.region, O, K].join(\"/\");\n return [`${x} Credential=${this.accessKeyId}/${n}`, `SignedHeaders=${t}`, `Signature=${r}`].join(\", \");\n }\n _filterIfHeaders(e) {\n let t = {}, r = {}, n = [\"if-match\", \"if-none-match\", \"if-modified-since\", \"if-unmodified-since\"];\n for (let [o, i] of Object.entries(e)) n.includes(o) ? r[o] = i : t[o] = i;\n return { filteredOpts: t, conditionalHeaders: r };\n }\n async list(e = \"/\", t = \"\", r = 1e3, n = \"GET\", o = {}) {\n this._checkDelimiter(e), this._checkPrefix(t), this._checkMaxKeys(r), this._checkMethodHeadnGet(n), this._checkOpts(o), this._log(\"info\", `Listing objects in ${t}`);\n let i = { \"list-type\": v, \"max-keys\": String(r), ...o };\n t.length > 0 && (i.prefix = t);\n let a = { [m]: w, [f]: E }, c = e === \"/\" ? e : q(e), { url: s, headers: l } = await this._sign(\"GET\", c, i, a, \"\"), h = `${s}?${new URLSearchParams(i)}`, d = await this._sendRequest(h, \"GET\", l), g = await d.text();\n if (n === \"HEAD\") {\n let R = d.headers.get(T), S = d.headers.get(C), Y = d.headers.get(P);\n return { size: R ? +R : void 0, mtime: S ? new Date(S) : void 0, ETag: Y || void 0 };\n }\n let _ = b(g), I = _.listBucketResult || _.error || _;\n return I.contents || I;\n }\n async listMultiPartUploads(e = \"/\", t = \"\", r = \"GET\", n = {}) {\n var o, i, a;\n this._checkDelimiter(e), this._checkPrefix(t), this._checkMethodHeadnGet(r), this._checkOpts(n), this._log(\"info\", `Listing multipart uploads in ${t}`);\n let c = { uploads: \"\", ...n }, s = { [m]: w, [f]: E }, l = e === \"/\" ? e : q(e), { url: h, headers: d } = await this._sign(\"GET\", l, c, s, \"\"), g = `${h}?${new URLSearchParams(c)}`, _ = await this._sendRequest(g, \"GET\", d), I = await _.text();\n if (r === \"HEAD\") return { size: +((o = _.headers.get(T)) !== null && o !== void 0 ? o : \"0\"), mtime: new Date((i = _.headers.get(C)) !== null && i !== void 0 ? i : \"\"), ETag: (a = _.headers.get(P)) !== null && a !== void 0 ? a : \"\" };\n let R = b(I), S = R.listMultipartUploadsResult || R.error || R;\n return S.uploads || S;\n }\n async get(e, t = {}) {\n this._checkKey(e), this._log(\"info\", `Getting object ${e}`);\n let { filteredOpts: r, conditionalHeaders: n } = this._filterIfHeaders(t), o = { [m]: w, [f]: E, ...n }, i = y(e), { url: a, headers: c } = await this._sign(\"GET\", i, r, o, \"\"), s = await this._sendRequest(a, \"GET\", c, \"\", [200, 404, 412, 304]);\n if (s.status === 404 || s.status === 412 || s.status === 304) return this._log(\"error\", `Failed to get object. Status: ${s.status}`), null;\n if (!s.ok) throw this._log(\"error\", `Failed to get object. Status: ${s.status}`), new Error(`Failed to get object. Status: ${s.status}`);\n return s.text();\n }\n async getObjectWithETag(e, t = {}) {\n this._checkKey(e), this._log(\"info\", `Getting object ${e}`);\n let { filteredOpts: r, conditionalHeaders: n } = this._filterIfHeaders(t), o = { [m]: w, [f]: E, ...n }, i = y(e), { url: a, headers: c } = await this._sign(\"GET\", i, r, o, \"\");\n try {\n let s = await this._sendRequest(a, \"GET\", c, \"\", [200, 404, 412, 304]);\n if (s.status === 404 || s.status === 412 || s.status === 304) return this._log(\"error\", `Failed to get object. Status: ${s.status}`), { etag: null, data: null };\n if (!s.ok) throw this._log(\"error\", `Failed to get object. Status: ${s.status}`), new Error(`Failed to get object. Status: ${s.status}`);\n let l = s.headers.get(\"etag\");\n if (!l) throw new Error(\"ETag not found in response headers\");\n let h = await s.text();\n return { etag: H(l), data: h };\n } catch (s) {\n throw this._log(\"error\", `Error getting object ${e} with ETag: ${s}`), s;\n }\n }\n async getEtag(e, t = {}) {\n this._checkKey(e), this._log(\"info\", `Getting etag object ${e}`);\n let { filteredOpts: r, conditionalHeaders: n } = this._filterIfHeaders(t), o = { [m]: w, [f]: E, ...n }, i = y(e), { url: a, headers: c } = await this._sign(\"HEAD\", i, r, o, \"\"), s = await this._sendRequest(a, \"HEAD\", c, \"\", [200, 412, 304]);\n if (this._log(\"info\", `Response status: ${s.status, s.statusText}`), s.status === 412 || s.status === 304) return null;\n let l = s.headers.get(\"etag\");\n if (!l) throw this._log(\"error\", \"ETag not found in response headers\"), new Error(\"ETag not found in response headers\");\n return H(l);\n }\n async getResponse(e, t = true, r = 0, n = this.maxRequestSizeInBytes, o = {}) {\n this._checkKey(e);\n let { filteredOpts: i, conditionalHeaders: a } = this._filterIfHeaders({ ...o }), c = { [m]: w, [f]: E, ...t ? {} : { range: `bytes=${r}-${n - 1}` }, ...a }, s = y(e), { url: l, headers: h } = await this._sign(\"GET\", s, i, c, \"\"), d = `${l}?${new URLSearchParams(i)}`;\n return this._sendRequest(d, \"GET\", h);\n }\n async put(e, t) {\n if (this._checkKey(e), !(t instanceof Buffer || typeof t == \"string\")) throw this._log(\"error\", D), new TypeError(D);\n this._log(\"info\", `Uploading object ${e}`);\n let r = typeof t == \"string\" ? Buffer.byteLength(t) : t.length, n = { [T]: r }, o = y(e), { url: i, headers: a } = await this._sign(\"PUT\", o, {}, n, t);\n return await this._sendRequest(i, \"PUT\", a, t);\n }\n async getMultipartUploadId(e, t = W) {\n if (this._checkKey(e), typeof t != \"string\") throw this._log(\"error\", `${u}fileType must be a string`), new TypeError(`${u}fileType must be a string`);\n this._log(\"info\", `Initiating multipart upload for object ${e}`);\n let r = { uploads: \"\" }, n = { [m]: t, [f]: E }, o = y(e), { url: i, headers: a } = await this._sign(\"POST\", o, r, n, \"\"), c = `${i}?${new URLSearchParams(r)}`, l = await (await this._sendRequest(c, \"POST\", a)).text(), h = b(l);\n if (typeof h == \"object\" && h !== null && \"error\" in h && typeof h.error == \"object\" && h.error !== null && \"message\" in h.error) {\n let d = String(h.error.message);\n throw this._log(\"error\", `${u}Failed to abort multipart upload: ${d}`), new Error(`${u}Failed to abort multipart upload: ${d}`);\n }\n if (typeof h == \"object\" && h !== null) {\n if (!h.initiateMultipartUploadResult || !h.initiateMultipartUploadResult.uploadId) throw this._log(\"error\", `${u}Failed to create multipart upload: no uploadId in response`), new Error(`${u}Failed to create multipart upload: Missing upload ID in response`);\n return h.initiateMultipartUploadResult.uploadId;\n } else throw this._log(\"error\", `${u}Failed to create multipart upload: unexpected response format`), new Error(`${u}Failed to create multipart upload: Unexpected response format`);\n }\n async uploadPart(e, t, r, n, o = {}) {\n this._validateUploadPartParams(e, t, r, n, o);\n let i = { uploadId: r, partNumber: n, ...o }, a = { [T]: t.length }, c = y(e), { url: s, headers: l } = await this._sign(\"PUT\", c, i, a, t), h = `${s}?${new URLSearchParams(i)}`, d = await this._sendRequest(h, \"PUT\", l, t), g = H(d.headers.get(\"etag\") || \"\");\n return { partNumber: n, ETag: g };\n }\n _validateUploadPartParams(e, t, r, n, o) {\n if (this._checkKey(e), !(t instanceof Buffer || typeof t == \"string\")) throw this._log(\"error\", D), new TypeError(D);\n if (typeof r != \"string\" || r.trim().length === 0) throw this._log(\"error\", $), new TypeError($);\n if (!Number.isInteger(n) || n <= 0) throw this._log(\"error\", `${u}partNumber must be a positive integer`), new TypeError(`${u}partNumber must be a positive integer`);\n this._checkOpts(o);\n }\n async completeMultipartUpload(e, t, r) {\n if (this._checkKey(e), typeof t != \"string\" || t.trim().length === 0) throw this._log(\"error\", $), new TypeError($);\n if (!Array.isArray(r) || r.length === 0) throw this._log(\"error\", L), new TypeError(L);\n if (!r.every((_) => typeof _.partNumber == \"number\" && typeof _.ETag == \"string\")) throw this._log(\"error\", k), new TypeError(k);\n this._log(\"info\", `Complete multipart upload ${t} for object ${e}`);\n let n = { uploadId: t }, o = this._buildCompleteMultipartUploadXml(r), i = { [m]: M, [T]: Buffer.byteLength(o).toString(), [f]: await U(o) }, a = y(e), { url: c, headers: s } = await this._sign(\"POST\", a, n, i, o), l = `${c}?${new URLSearchParams(n)}`, d = await (await this._sendRequest(l, \"POST\", s, o)).text(), g = b(d);\n if (typeof g == \"object\" && g !== null && \"error\" in g && typeof g.error == \"object\" && g.error !== null && \"message\" in g.error) {\n let _ = String(g.error.message);\n throw this._log(\"error\", `${u}Failed to abort multipart upload: ${_}`), new Error(`${u}Failed to abort multipart upload: ${_}`);\n }\n return g.completeMultipartUploadResult;\n }\n async abortMultipartUpload(e, t) {\n if (this._checkKey(e), typeof t != \"string\" || t.trim().length === 0) throw this._log(\"error\", $), new TypeError($);\n this._log(\"info\", `Aborting multipart upload ${t} for object ${e}`);\n let r = { uploadId: t }, n = { [m]: M, [f]: E };\n try {\n let o = y(e), { url: i, headers: a } = await this._sign(\"DELETE\", o, r, n, \"\"), c = `${i}?${new URLSearchParams(r)}`, s = await this._sendRequest(c, \"DELETE\", a);\n if (s.ok) {\n let l = await s.text(), h = b(l);\n if (typeof h == \"object\" && h !== null && \"error\" in h && typeof h.error == \"object\" && h.error !== null && \"message\" in h.error) {\n let d = String(h.error.message);\n throw this._log(\"error\", `${u}Failed to abort multipart upload: ${d}`), new Error(`${u}Failed to abort multipart upload: ${d}`);\n }\n return { status: \"Aborted\", key: e, uploadId: t, response: h };\n } else throw this._log(\"error\", `${u}Abort request failed with status ${s.status}`), new Error(`${u}Abort request failed with status ${s.status}`);\n } catch (o) {\n let i = o instanceof Error ? o.message : String(o);\n throw this._log(\"error\", `${u}Failed to abort multipart upload for key ${e}: ${i}`), new Error(`${u}Failed to abort multipart upload for key ${e}: ${i}`);\n }\n }\n _buildCompleteMultipartUploadXml(e) {\n return `\n \n ${e.map((t) => `\n \n ${t.partNumber}\n ${t.ETag}\n \n `).join(\"\")}\n \n `;\n }\n async delete(e) {\n this._checkKey(e), this._log(\"info\", `Deleting object ${e}`);\n let t = { [m]: w, [f]: E }, r = y(e), { url: n, headers: o } = await this._sign(\"DELETE\", r, {}, t, \"\"), i = await this._sendRequest(n, \"DELETE\", o);\n return i.status === 204 || i.status === 200;\n }\n async _sendRequest(e, t, r, n, o = []) {\n this._log(\"info\", `Sending ${t} request to ${e}, headers: ${JSON.stringify(r)}`);\n let i = await fetch(e, { method: t, headers: r, body: [\"GET\", \"HEAD\"].includes(t) ? void 0 : n, signal: this.requestAbortTimeout !== void 0 ? AbortSignal.timeout(this.requestAbortTimeout) : void 0 });\n return !i.ok && !o.includes(i.status) && await this._handleErrorResponse(i), i;\n }\n async _handleErrorResponse(e) {\n let t = await e.text(), r = e.headers.get(\"x-amz-error-code\") || \"Unknown\", n = e.headers.get(\"x-amz-error-message\") || e.statusText;\n throw this._log(\"error\", `${u}Request failed with status ${e.status}: ${r} - ${n},err body: ${t}`), new Error(`${u}Request failed with status ${e.status}: ${r} - ${n}, err body: ${t}`);\n }\n _buildCanonicalQueryString(e) {\n return Object.keys(e).length < 1 ? \"\" : Object.keys(e).sort().map((t) => `${encodeURIComponent(t)}=${encodeURIComponent(e[t])}`).join(\"&\");\n }\n async _getSignatureKey(e) {\n let t = await A(`AWS4${this.secretAccessKey}`, e), r = await A(t, this.region), n = await A(r, O);\n return A(n, K);\n }\n};\nvar U = async (p) => {\n let e = Q(\"sha256\");\n return e.update(p), e.digest(\"hex\");\n};\nvar A = async (p, e, t) => {\n let r = z(\"sha256\", p);\n return r.update(e), r.digest(t);\n};\nvar H = (p) => {\n let e = { '\"': \"\", \""\": \"\", \""\": \"\", \""\": \"\", \""\": \"\" };\n return p.replace(/^(\"|"|")|(\"|"|")$/g, (t) => e[t]);\n};\nvar b = (p) => {\n let e = (o) => o.replace(/"/g, '\"').replace(/'/g, \"'\").replace(/</g, \"<\").replace(/>/g, \">\").replace(/&/g, \"&\"), t = {}, r = /<(\\w)([-\\w]+)(?:\\/|[^>]*>((?:(?!<\\1)[\\s\\S])*)<\\/\\1\\2)>/gm, n;\n for (; n = r.exec(p); ) {\n let [, o, i, a] = n, c = o.toLowerCase() + i, s = a != null ? b(a) : true;\n typeof s == \"string\" ? t[c] = H(e(s)) : Array.isArray(t[c]) ? t[c].push(s) : t[c] = t[c] != null ? [t[c], s] : ne[c] ? [s] : s;\n }\n return Object.keys(t).length ? t : e(p);\n};\n\n// src/lowstorage.ts\nvar import_avsc = __toESM(require_lib(), 1);\n\n// src/errors.ts\nvar lowstorage_ERROR_CODES = {\n MISSING_ARGUMENT: \"MISSING_ARGUMENT\",\n COLLECTION_EXISTS: \"COLLECTION_EXISTS\",\n CREATE_COLLECTION_ERROR: \"CREATE_COLLECTION_ERROR\",\n RENAME_COLLECTION_ERROR: \"RENAME_COLLECTION_ERROR\",\n REMOVE_COLLECTION_ERROR: \"REMOVE_COLLECTION_ERROR\",\n UPDATE_COLLECTION_SCHEMA_ERROR: \"UPDATE_COLLECTION_SCHEMA_ERROR\",\n COLLECTION_NOT_FOUND: \"COLLECTION_NOT_FOUND\",\n SCHEMA_VALIDATION_ERROR: \"SCHEMA_VALIDATION_ERROR\",\n DOCUMENT_VALIDATION_ERROR: \"DOCUMENT_VALIDATION_ERROR\",\n S3_OPERATION_ERROR: \"S3_OPERATION_ERROR\",\n FIND_ERROR: \"FIND_ERROR\",\n FIND_ONE_ERROR: \"FIND_ONE_ERROR\",\n SAVE_DATA_ERROR: \"SAVE_DATA_ERROR\",\n INSERT_ERROR: \"INSERT_ERROR\",\n UPDATE_ERROR: \"UPDATE_ERROR\",\n UPDATE_ONE_ERROR: \"UPDATE_ONE_ERROR\",\n DELETE_ERROR: \"DELETE_ERROR\",\n COUNT_ERROR: \"COUNT_ERROR\",\n UNKNOWN_ERROR: \"UNKNOWN_ERROR\"\n};\nvar lowstorageError = class extends Error {\n constructor(message, code = lowstorage_ERROR_CODES.UNKNOWN_ERROR) {\n super(`lowstorageError: ${message} :: code: ${code}`);\n this.name = this.constructor.name;\n this.code = code;\n Error.captureStackTrace(this, this.constructor);\n }\n};\nvar SchemaValidationError = class extends lowstorageError {\n constructor(message, code = lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR) {\n super(message, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR);\n }\n};\nvar DocumentValidationError = class extends lowstorageError {\n constructor(message, code = lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR) {\n super(message, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR);\n }\n};\nvar S3OperationError = class extends lowstorageError {\n constructor(message, operation) {\n super(`S3 ${operation} operation failed: ${message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n};\n\n// src/helpers.ts\nimport { randomUUID } from \"node:crypto\";\nvar matchesQuery = (document, query) => {\n return Object.keys(query).every((key) => document[key] === query[key]);\n};\nvar generateUUID = async () => {\n if (typeof randomUUID !== \"undefined\" && typeof randomUUID === \"function\") {\n return randomUUID();\n }\n if (typeof crypto !== \"undefined\" && typeof crypto === \"object\" && typeof crypto.randomUUID === \"function\") {\n return crypto.randomUUID();\n }\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, function(c) {\n var r = Math.random() * 16 | 0, v2 = c === \"x\" ? r : r & 3 | 8;\n return v2.toString(16);\n });\n};\nvar ensureIdFieldInSchema = (schema) => {\n const idField = {\n name: \"_id\",\n type: \"string\",\n size: 16,\n logicalType: \"UUID\"\n };\n if (typeof schema === \"undefined\" || schema === null) {\n return schema;\n }\n if (\"type\" in schema && schema.type === \"record\" && \"fields\" in schema && Array.isArray(schema.fields)) {\n const hasIdField = schema.fields.some((field) => field.name === \"_id\");\n if (!hasIdField) {\n schema.fields.unshift(idField);\n }\n } else if (\"type\" in schema && schema.type === \"array\" && \"items\" in schema && schema.items !== null && typeof schema.items === \"object\" && \"type\" in schema.items && schema.items.type === \"record\" && \"fields\" in schema.items && Array.isArray(schema.items.fields)) {\n const hasIdField = schema.items.fields.some((field) => field.name === \"_id\");\n if (!hasIdField) {\n schema.items.fields.unshift(idField);\n }\n }\n return schema;\n};\n\n// src/lowstorage.ts\nvar MODULE_NAME = \"lowstorage\";\nvar DEFAULT_DELIMITER = \"/\";\nvar PROJECT_DIR_PREFIX = \"lowstorage\";\nvar COL_SUFFIX = \".avro\";\nvar CHUNG_1MB = 1024 * 1024;\nvar CHUNG_5MB = 5 * CHUNG_1MB;\nvar EMPTY_DATA = Buffer.from(\"\", \"utf8\");\nvar errorValidationFn = (errorCode = lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR) => {\n throw new DocumentValidationError(`${MODULE_NAME}: Invalid document or schema ${errorCode}`);\n};\nvar _hasColName = (colName = \"\") => {\n if (colName.trim() === \"\" || colName === null || typeof colName === \"undefined\" || colName.length > 255 || colName === null) {\n throw new lowstorageError(`${MODULE_NAME}: Collection name is required, null or too long`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n }\n};\nvar lowstorage = class {\n constructor(options) {\n this._checkArgs = (args) => {\n const requiredFields = [\"accessKeyId\", \"secretAccessKey\", \"endpoint\", \"bucketName\"];\n for (const field of requiredFields) {\n if (!args[field]) {\n throw new lowstorageError(`${MODULE_NAME}: ${field} is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n }\n }\n };\n /**\n * Get the S3 instance associated with the lowstorage instance.\n * @returns {S3} The S3 instance. Use this to perform S3 operations. Check for ultralight-s3 for more details.\n */\n this.s3 = () => {\n return this._s3;\n };\n this._checkArgs(options);\n this._schemas = /* @__PURE__ */ new Map();\n this._s3 = new N(options);\n this._dirPrefix = options.dirPrefix || PROJECT_DIR_PREFIX;\n this._avroParse = import_avsc.Type;\n }\n /**\n * List all collections.\n * @returns {Promise} An array of collection names.\n * @throws {S3OperationError} If there's an error during S3 operation.\n */\n async listCollections() {\n try {\n const listed = await this._s3.list(DEFAULT_DELIMITER, this._dirPrefix);\n if (Array.isArray(listed)) {\n return listed.map((entry) => entry.key.slice(this._dirPrefix.length + 1, -COL_SUFFIX.length));\n } else if (typeof listed === \"object\" && listed !== null && \"keyCount\" in listed && listed.keyCount === \"0\") {\n return [];\n }\n return [];\n } catch (error) {\n throw new S3OperationError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n }\n /**\n * Check if a collection exists.\n * @param {string} colName - The name of the collection.\n * @returns {Promise} True if the collection exists, false otherwise.\n * @throws {lowstorageError} If there's an error.\n */\n async collectionExists(colName = \"\") {\n try {\n _hasColName(colName);\n const exists = await this._s3.fileExists(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`);\n return !!exists;\n } catch (error) {\n if (error.message.includes(\"Not Found\")) {\n return false;\n }\n throw new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND);\n }\n }\n /**\n * Create a new collection.\n * @param {string} colName - The name of the collection.\n * @param {Object} [schema] - The schema for the collection.\n * @param {Array} [data=[]] - The initial data for the collection.\n * @returns {Promise} A Promise that resolves to a Collection object.\n * @throws {lowstorageError} If there's an error.\n */\n async createCollection(colName = \"\", schema, data = []) {\n try {\n _hasColName(colName);\n const exists = await this.collectionExists(colName);\n if (!exists) {\n if (typeof schema !== \"undefined\" && schema !== null) {\n try {\n const type = this._avroParse.forSchema(schema);\n if (!type) {\n throw new SchemaValidationError(\n `${MODULE_NAME}: Schema is invalid: ${schema} ${lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR}`\n );\n } else {\n this._schemas.set(colName, schema);\n }\n } catch (error) {\n throw new SchemaValidationError(`${MODULE_NAME}: Schema is invalid: ${schema}`, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR);\n }\n }\n if (data.length > 0 && schema) {\n const wrapperType = this._avroParse.forSchema({ type: \"array\", items: schema });\n await this._s3.put(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`, wrapperType.toBuffer(data));\n } else {\n await this._s3.put(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`, EMPTY_DATA);\n }\n return this.collection(colName, schema, false);\n }\n throw new lowstorageError(`${MODULE_NAME}: Collection ${colName} already exists`, lowstorage_ERROR_CODES.COLLECTION_EXISTS);\n } catch (error) {\n if (error instanceof lowstorageError) {\n throw error;\n }\n throw new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.CREATE_COLLECTION_ERROR);\n }\n }\n /**\n * Remove a collection.\n * @param {string} colName - The name of the collection.\n * @returns {Promise} A Promise that resolves to true if the collection is removed, false otherwise.\n * @throws {lowstorageError} If there's an error.\n */\n async removeCollection(colName = \"\") {\n try {\n _hasColName(colName);\n const exists = await this.collectionExists(colName);\n if (exists) {\n await this._s3.delete(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`);\n const exists2 = await this.collectionExists(colName);\n if (typeof exists2 === \"boolean\") {\n if (!exists2) {\n this._schemas.delete(colName);\n return true;\n }\n throw new lowstorageError(`${MODULE_NAME}: Failed to delete collection ${colName}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n throw new S3OperationError(`${MODULE_NAME}: Failed to delete collection ${colName}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n throw new lowstorageError(`${MODULE_NAME}: Collection ${colName} does not exist`, lowstorage_ERROR_CODES.REMOVE_COLLECTION_ERROR);\n } catch (error) {\n if (error instanceof S3OperationError) {\n throw error;\n }\n throw new lowstorageError(\n `${MODULE_NAME}: Failed to remove collection: ${error.message}`,\n lowstorage_ERROR_CODES.REMOVE_COLLECTION_ERROR\n );\n }\n }\n /**\n * Get or create a collection.\n * @param {string} colName - The name of the collection.\n * @param {Object} [schema] - The schema for the collection.\n * @param {boolean} [autoCreate=true] - Whether to automatically create the collection if it doesn't exist.\n * @returns {Promise} A Promise that resolves to a Collection object.\n * @throws {lowstorageError} If there's an error.\n */\n async collection(colName = \"\", schema, autoCreate = true) {\n try {\n _hasColName(colName);\n const colPath = `${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`;\n const exists = await this._s3.fileExists(colPath);\n if (!exists) {\n if (!autoCreate) {\n throw new lowstorageError(`${MODULE_NAME}: Collection ${colName} does not exist`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND);\n }\n await this._s3.put(colPath, EMPTY_DATA);\n }\n const colSchema = schema || this._schemas.get(colName) || void 0;\n return new Collection(colName, colSchema, this._s3, this._dirPrefix);\n } catch (error) {\n if (error.message.includes(\"unknown type\")) {\n throw new SchemaValidationError(\n `${MODULE_NAME}: Schema input is invalid: ${error.message}`,\n lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR\n );\n }\n throw new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND);\n }\n }\n};\nvar Collection = class _Collection {\n constructor(colName = \"\", schema, s3, dirPrefix = PROJECT_DIR_PREFIX, safeWrite = false, chunkSize = CHUNG_5MB) {\n this.getProps = () => ({\n colName: this._colName,\n s3: this._s3,\n schema: this._schema,\n avroParse: this._avroParse,\n avroType: this._avroType,\n dirPrefix: this._dirPrefix,\n safeWrite: this._safeWrite,\n chunkSize: this._chunkSize\n });\n this.setProps = (props) => {\n this._colName = props.colName;\n this._schema = props.schema;\n this._s3 = props.s3;\n this._avroParse = props.avroParse;\n this._avroType = props.avroType;\n this._dirPrefix = props.dirPrefix;\n this._safeWrite = props.safeWrite;\n this._chunkSize = props.chunkSize;\n };\n this.setSafeWrite = (safeWrite) => {\n this._safeWrite = safeWrite;\n };\n this.getSafeWrite = () => {\n return this._safeWrite;\n };\n this.getAvroSchema = () => {\n return this._schema;\n };\n this.setAvroSchema = (schema) => {\n try {\n this._schema = ensureIdFieldInSchema(schema);\n this._avroType = typeof schema === \"undefined\" ? null : this._avroParse.forSchema(schema);\n } catch (error) {\n throw new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR);\n }\n };\n this.getCollectionETag = () => {\n return this._lastETag;\n };\n this.inferAvroSchema = (data, type = \"record\") => {\n if (Array.isArray(data)) {\n data = data[0];\n }\n const inferedType = this._avroParse.forValue(data);\n const schema = inferedType.schema();\n return ensureIdFieldInSchema(schema);\n };\n this._colName = colName.trim();\n this._s3 = s3;\n this._schema = ensureIdFieldInSchema(schema);\n this._dirPrefix = dirPrefix;\n this._safeWrite = safeWrite;\n this._chunkSize = chunkSize || CHUNG_5MB;\n this._s3.setMaxRequestSizeInBytes(this._chunkSize);\n this._avroParse = import_avsc.Type;\n this._lastETag = \"\";\n this._dataCache = [];\n this._avroType = typeof schema === \"undefined\" ? null : this._avroParse.forSchema(schema);\n this._key = `${this._dirPrefix}${DEFAULT_DELIMITER}${this._colName}${COL_SUFFIX}`;\n }\n async forceLoadData() {\n try {\n this._lastETag = \"\";\n const data = await this._loadData();\n this._dataCache = data;\n return true;\n } catch (error) {\n throw new lowstorageError(`${MODULE_NAME}: Failed to force update data: ${error.message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n }\n async _loadData() {\n try {\n if (this._avroType === null || typeof this._avroType === \"undefined\") {\n throw new lowstorageError(\n `${MODULE_NAME}: Missing type definition. Configure before operations `,\n lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR\n );\n }\n const { etag, data } = await this._s3.getObjectWithETag(this._key, { \"if-none-match\": this._lastETag });\n if (data === null) {\n return this._dataCache;\n }\n this._lastETag = etag === null ? this._lastETag : etag;\n const wrapperType = this._avroParse.forSchema({ type: \"array\", items: this._avroType });\n if (data.length < this._chunkSize) {\n this._dataCache = data.length > 0 ? wrapperType.fromBuffer(Buffer.from(data, \"utf8\")) : [];\n return this._dataCache;\n }\n let offset = this._chunkSize;\n let bufferArr = [Buffer.from(data, \"utf8\")];\n let repeat = true;\n while (repeat) {\n const nextDataResponse = await this._s3.getResponse(this._key, false, offset, offset + this._chunkSize);\n const nextDataBody = await nextDataResponse.text();\n bufferArr.push(Buffer.from(nextDataBody, \"utf8\"));\n offset += this._chunkSize;\n const contentLength = parseInt(nextDataResponse.headers.get(\"content-length\") || nextDataBody.length.toString());\n if (contentLength < this._chunkSize) {\n repeat = false;\n }\n }\n const bufferedData = Buffer.concat(bufferArr);\n this._dataCache = wrapperType.fromBuffer(bufferedData);\n return this._dataCache;\n } catch (error) {\n if (error.toString().indexOf(\"status 404: Unknown - Not Found\") > -1) {\n this._dataCache = [];\n return this._dataCache;\n }\n throw new S3OperationError(`${MODULE_NAME}: Failed to load data: ${error.message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n }\n async _saveData(data) {\n try {\n if (this._avroType === null || typeof this._avroType === \"undefined\") {\n throw new lowstorageError(\n `${MODULE_NAME}: Missing type definition. Configure before operations `,\n lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR\n );\n }\n const wrapperType = this._avroParse.forSchema({ type: \"array\", items: this._avroType });\n const dataBuffer = data.length > 0 ? wrapperType.toBuffer(data) : EMPTY_DATA;\n if (this._safeWrite && this._lastETag !== \"\") {\n const currentETag = await this._s3.getEtag(this._key);\n if (currentETag !== null && currentETag !== this._lastETag) {\n return false;\n }\n }\n const resp = await this._s3.put(this._key, dataBuffer);\n if (typeof resp === \"object\" && \"status\" in resp && resp.status !== 200) {\n throw new S3OperationError(`${MODULE_NAME}: Failed to save data`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n const newETag = resp.headers?.get(\"etag\") || \"\";\n if (newETag && newETag.length > 0) {\n this._lastETag = this._s3.sanitizeETag(newETag);\n this._dataCache = data;\n }\n return true;\n } catch (error) {\n if (error instanceof S3OperationError) {\n throw error;\n }\n throw new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.SAVE_DATA_ERROR);\n }\n }\n /**\n * Insert a document into the collection.\n * @param {Object|Array} doc - The document to insert.\n * @param {Object} [schema=undefined] - The schema for the document.\n * @returns {Promise} A Promise that resolves to the array of inserted document(s).\n * @throws {lowstorageError} If there's an error.\n */\n async insert(doc, schema) {\n try {\n if (doc === void 0 || doc === null) {\n throw new lowstorageError(`${MODULE_NAME}: Document is required for insert`, lowstorage_ERROR_CODES.INSERT_ERROR);\n }\n if (typeof doc !== \"object\" && !Array.isArray(doc)) {\n throw new DocumentValidationError(\n `${MODULE_NAME}: Document must be an object or an array`,\n lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR\n );\n }\n const items = !Array.isArray(doc) ? [doc] : doc;\n const schemaWithId = schema ? ensureIdFieldInSchema(schema) : this._schema || this.inferAvroSchema(items[0]);\n const avroType = this._avroParse.forSchema(schemaWithId);\n if (!avroType) {\n throw new SchemaValidationError(\n `${MODULE_NAME}: Schema is required - Pass a schema to the insert method`,\n lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR\n );\n }\n this._avroType = avroType;\n const data = await this._loadData();\n for (let item of items) {\n if (typeof item !== \"object\" || item === null) {\n throw new DocumentValidationError(\n `${MODULE_NAME}: Invalid input: input must be an object or an array of objects`,\n lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR\n );\n }\n item._id = item._id || await generateUUID();\n const validBuffer = this._avroType.isValid(item, {\n errorHook: errorValidationFn,\n noUndeclaredFields: true\n });\n if (validBuffer === true) {\n data.push(item);\n } else {\n throw new DocumentValidationError(`${MODULE_NAME}: Invalid document or schema`, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR);\n }\n }\n const success = await this._saveData(data);\n if (!success) {\n throw new S3OperationError(`${MODULE_NAME}: Failed to insert document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n this.setAvroSchema(schemaWithId);\n return items;\n } catch (error) {\n if (error.message.includes(\"unknown type\")) {\n throw new SchemaValidationError(\n `${MODULE_NAME}: Schema input is invalid: ${error.message}`,\n lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR\n );\n }\n if (error instanceof lowstorageError) {\n throw error;\n }\n throw new lowstorageError(`${MODULE_NAME} Insert operation failed: ${error.message}`, lowstorage_ERROR_CODES.INSERT_ERROR);\n }\n }\n /**\n * Find documents in the collection.\n * @param {Object} [query={}] - The query to filter documents.\n * @param {Object} [options={}] - The options for pagination.\n * @param {number} [options.skip=0] - The number of documents to skip. Default is 0.\n * @param {number} [options.limit=undefined] - The maximum number of documents to return. Default is undefined, which means no limit.\n * @returns {Promise} A Promise that resolves to an array of matching documents.\n * @throws {lowstorageError} If there's an error.\n */\n async find(query = {}, options = {}) {\n try {\n if (query === void 0 || query === null) {\n throw new lowstorageError(`${MODULE_NAME}: Query is required for update`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n }\n const data = await this._loadData();\n const start = options.skip !== void 0 ? parseInt(String(options.skip), 10) : 0;\n const end = options.limit !== void 0 ? start + parseInt(String(options.limit), 10) : void 0;\n const filteredData = data.filter((doc) => matchesQuery(doc, query)).slice(start, end);\n return filteredData;\n } catch (error) {\n throw new lowstorageError(`${MODULE_NAME}: Find operation failed: ${error.message}`, lowstorage_ERROR_CODES.FIND_ERROR);\n }\n }\n /**\n * Find the first document in the collection that matches the query.\n * @param {Object} [query={}] - The query to filter documents.\n * @returns {Promise} A Promise that resolves to the first matching document or null if no match is found.\n * @throws {lowstorageError} If there's an error.\n */\n async findOne(query = {}) {\n try {\n if (query === null) {\n throw new lowstorageError(`${MODULE_NAME}: Query cannot be null`, lowstorage_ERROR_CODES.INVALID_ARGUMENT);\n }\n const result = await this.find(query, { limit: 1 });\n return result[0] || null;\n } catch (error) {\n if (error instanceof lowstorageError) {\n throw error;\n }\n throw new lowstorageError(`${MODULE_NAME}: FindOne operation failed: ${error.message}`, lowstorage_ERROR_CODES.FIND_ONE_ERROR);\n }\n }\n /**\n * Update a single document in the collection that matches the query.\n * @param {Object} [query={}] - The query to filter the document to update.\n * @param {Object} [update={}] - The update operations to apply to the matching document.\n * @returns {Promise} A Promise that resolves to number of documents updated.\n * @throws {lowstorageError} If the updateOne operation fails.\n * @throws {SchemaValidationError} If the schema is not defined for the collection.\n * @throws {DocumentValidationError} If the updated document is invalid.\n * @throws {S3OperationError} If the S3 operation fails.\n */\n async update(query = {}, update = {}, options = {}) {\n try {\n if (query === void 0 || query === null || update === void 0 || update === null) {\n throw new lowstorageError(\n `${MODULE_NAME}: Query and update values are required for update`,\n lowstorage_ERROR_CODES.MISSING_ARGUMENT\n );\n }\n if (!this._avroType) {\n throw new SchemaValidationError(\n `${MODULE_NAME}: Schema is not defined for this collection`,\n lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR\n );\n }\n const data = await this._loadData();\n if (data.length === 0) return 0;\n let updatedCount = 0;\n for (let i = 0; i < data.length; i++) {\n if (matchesQuery(data[i], query)) {\n const updatedDoc = { ...data[i], ...update };\n const isValid = this._avroType.isValid(updatedDoc, {\n errorHook: errorValidationFn,\n noUndeclaredFields: true\n });\n if (isValid === true) {\n data[i] = updatedDoc;\n updatedCount++;\n } else {\n throw new DocumentValidationError(\n `${MODULE_NAME}: Invalid document or schema`,\n lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR\n );\n }\n }\n }\n if (updatedCount > 0) {\n const success = await this._saveData(data);\n if (!success) {\n throw new S3OperationError(`${MODULE_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n } else if (options && \"upsert\" in options && options.upsert) {\n const success = await this.insert(update);\n if (!success) {\n throw new S3OperationError(`${MODULE_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n updatedCount = 1;\n }\n return updatedCount;\n } catch (error) {\n if (error instanceof S3OperationError) {\n throw error;\n }\n throw new lowstorageError(`${MODULE_NAME}: Update operation failed: ${error.message}`, lowstorage_ERROR_CODES.UPDATE_ERROR);\n }\n }\n /**\n * Update a single document in the collection that matches the query.\n * @param {Object} [query={}] - The query to filter the document to update.\n * @param {Object} [update={}] - The update operations to apply to the matching document.\n * @returns {Promise} A Promise that resolves to 1 if a document was updated, 0 otherwise.\n /**\n * Update a single document in the collection that matches the query.\n * @throws {lowstorageError} If the updateOne operation fails.\n * @throws {SchemaValidationError} If the schema is not defined for the collection.\n * @throws {DocumentValidationError} If the updated document is invalid.\n * @throws {S3OperationError} If the S3 operation fails.\n */\n async updateOne(query = {}, update = {}, options = {}) {\n try {\n if (query === void 0 || query === null || update === void 0 || update === null) {\n throw new lowstorageError(`${MODULE_NAME}: Query is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n }\n if (!this._avroType) {\n throw new SchemaValidationError(\n `${MODULE_NAME}: Schema is not defined for this collection`,\n lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR\n );\n }\n const data = await this._loadData();\n if (data.length === 0) return 0;\n const docIndex = data.findIndex((doc) => matchesQuery(doc, query));\n if (docIndex !== -1) {\n const updatedDoc = { ...data[docIndex], ...update };\n const isValid = this._avroType.isValid(updatedDoc, {\n errorHook: errorValidationFn,\n noUndeclaredFields: true\n });\n if (isValid === true) {\n data[docIndex] = updatedDoc;\n const success = await this._saveData(data);\n if (!success) {\n throw new S3OperationError(`${MODULE_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n return 1;\n } else {\n throw new DocumentValidationError(`${MODULE_NAME}: Invalid document or schema`, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR);\n }\n }\n if (options && \"upsert\" in options && options.upsert) {\n const success = await this.insert(update);\n if (!success) {\n throw new S3OperationError(`${MODULE_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n return 1;\n }\n return 0;\n } catch (error) {\n if (error instanceof lowstorageError) {\n throw error;\n }\n throw new lowstorageError(`${MODULE_NAME}: UpdateOne operation failed: ${error.message}`, lowstorage_ERROR_CODES.UPDATE_ONE_ERROR);\n }\n }\n /**\n * Delete documents from the collection.\n * @param {Object} [query={}] - The query to filter documents to delete.\n * @returns {Promise} A Promise that resolves to the number of documents deleted.\n * @throws {lowstorageError} If the delete operation fails.\n * @throws {S3OperationError} If the S3 operation fails.\n */\n async delete(query = {}) {\n try {\n if (query === void 0 || query === null) {\n throw new lowstorageError(`${MODULE_NAME}: Query is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n }\n const data = await this._loadData();\n if (data.length === 0) return 0;\n const initialLength = data.length;\n const newData = data.filter((doc) => !matchesQuery(doc, query));\n const success = await this._saveData(newData);\n if (!success) {\n throw new S3OperationError(`${MODULE_NAME}: Failed to delete document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n return initialLength - newData.length;\n } catch (error) {\n if (error instanceof S3OperationError) {\n throw error;\n }\n throw new lowstorageError(`${MODULE_NAME}: Delete operation failed: ${error.message}`, lowstorage_ERROR_CODES.DELETE_ERROR);\n }\n }\n /**\n * Delete all documents from the collection.\n * @returns {Promise} A Promise that resolves to the number of documents deleted.\n * @throws {lowstorageError} If the delete operation fails.\n * @throws {S3OperationError} If the S3 operation fails.\n */\n async deleteAll() {\n try {\n const data = await this._loadData();\n const initialLength = data.length;\n const success = await this._saveData([]);\n if (!success) {\n throw new S3OperationError(`${MODULE_NAME}: Failed to delete document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n return initialLength;\n } catch (error) {\n if (error instanceof S3OperationError) {\n throw error;\n }\n throw new lowstorageError(`${MODULE_NAME}: Delete operation failed: ${error.message}`, lowstorage_ERROR_CODES.DELETE_ERROR);\n }\n }\n /**\n * Count the number of documents in the collection.\n * @param {Object} [query={}] - The query to filter documents.\n * @returns {Promise} A Promise that resolves to the number of documents in the collection.\n * @throws {lowstorageError} If the count operation fails.\n */\n async count(query = {}) {\n try {\n const data = await this.find(query);\n return data.length;\n } catch (error) {\n throw new lowstorageError(`${MODULE_NAME}: Count operation failed: ${error.message}`, lowstorage_ERROR_CODES.COUNT_ERROR);\n }\n }\n async renameCollection(newColName, newSchema = this._schema) {\n try {\n _hasColName(newColName);\n const exists = await this._s3.fileExists(`${this._dirPrefix}${DEFAULT_DELIMITER}${newColName}${COL_SUFFIX}`);\n if (!!exists) {\n throw new lowstorageError(`${MODULE_NAME}: Collection ${newColName} already exists`, lowstorage_ERROR_CODES.COLLECTION_EXISTS);\n }\n const schema = newSchema || this.getAvroSchema();\n const data = await this._loadData();\n const createNew = new _Collection(newColName, schema, this._s3, this._dirPrefix, this._safeWrite, this._chunkSize);\n await createNew._saveData(data);\n await this._s3.delete(`${this._dirPrefix}${DEFAULT_DELIMITER}${this._colName}${COL_SUFFIX}`);\n return createNew;\n } catch (error) {\n if (error instanceof lowstorageError) {\n throw error;\n }\n throw new lowstorageError(\n `${MODULE_NAME}: Rename collection failed: ${error.message}`,\n lowstorage_ERROR_CODES.RENAME_COLLECTION_ERROR\n );\n }\n }\n};\nexport {\n lowstorage,\n lowstorageError,\n lowstorage_ERROR_CODES\n};\n\n"], - "mappings": "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", - "names": ["__import_BUFFER", "__import_CRYPTO", "__import_UTIL", "__import_STREAM", "__import_ZLIB", "__import_EVENTS", "__import_FS", "__import_PATH", "randomUUID", "__create", "__defProp", "__getOwnPropDesc", "__getOwnPropNames", "__getProtoOf", "__hasOwnProp", "__commonJS", "cb", "mod", "__getOwnPropNames", "__copyProps", "to", "from", "except", "desc", "key", "__hasOwnProp", "__defProp", "__getOwnPropDesc", "__toESM", "isNodeMode", "target", "__create", "__getProtoOf", "require_utils", "exports", "module", "buffer", "__import_BUFFER", "crypto2", "__import_CRYPTO", "util", "__import_UTIL", "Buffer2", "POOL", "BufferPool", "NAME_PATTERN", "f2", "newBuffer", "size", "bufferFrom", "data", "enc", "capitalize", "s", "compare", "n1", "n2", "getOption", "opts", "def", "value", "getHash", "str", "algorithm", "hash", "singleIndexOf", "arr", "v2", "pos", "i", "l", "toMap", "fn", "obj", "elem", "objectValues", "hasDuplicates", "copyOwnProperties", "src", "dst", "overwrite", "names", "name", "descriptor", "isValidName", "qualify", "namespace", "part", "unqualify", "parts", "impliedNamespace", "match", "jsonEnd", "c", "depth", "literal", "abstractFunction", "addDeprecatedGetters", "props", "proto", "prop", "getter", "createGetter", "prop2", "delegate", "len", "maxLen", "Lcg", "seed", "a", "m2", "state", "start", "end", "flags", "mask", "result", "OrderedQueue", "item", "items", "j2", "first", "mid", "i1", "i2", "c1", "c2", "Tap", "buf", "b2", "n", "k2", "h", "f3", "fk", "d", "fixed", "tap", "l1", "p1", "l2", "p2", "b1", "res", "neg", "invert", "require_types", "utils", "SlowBuffer", "debug", "TYPES", "ArrayType", "BooleanType", "BytesType", "DoubleType", "EnumType", "RecordType", "FixedType", "FloatType", "IntType", "LongType", "MapType", "NullType", "StringType", "RANDOM", "TAP", "LOGICAL_TYPE", "UNDERLYING_TYPES", "Type", "schema", "type", "Hash", "maybeQualify", "isPrimitive", "registry", "UnionType2", "wrapUnions", "WrappedUnionType", "UnwrappedUnionType", "DerivedType", "err", "logicalType", "types", "isAmbiguous", "typeName", "Type2", "val", "fieldNames", "expanded", "numWrappedUnions", "isValidWrappedUnion", "branchTypes", "branchType", "unionType", "bucketized", "bucket", "getTypeBucket", "bucketTypes", "buckets", "augmented", "combineNumbers", "combineStrings", "combineBuffers", "t", "combineObjects", "any", "buf1", "buf2", "resolver", "Resolver", "resolvers", "index", "resolver2", "readValue", "canon", "schemaStr", "noCheck", "className", "getClassName", "errorHook", "hook", "path", "Branch", "derefedSchema", "attr", "body", "asBranch", "PrimitiveType", "noFreeze", "throwInvalidError", "tap1", "tap2", "isSafeLong", "methods", "noUnpack", "mapping", "AbstractLongType", "isJsonBuffer", "UnionType", "branch", "getValueBucket", "logicalBranches", "typeResolver", "coerce", "wrap", "keys", "val1", "val2", "index1", "index2", "firstType", "name1", "name2", "symbol", "symbols", "hasCompatibleName", "values", "readArraySize", "rsv", "copy", "ns", "field", "Field", "errorStack", "plainRecords", "outerArgs", "innerArgs", "ds", "innerBody", "defaultValue", "hasDefault", "stackField", "outerBody", "Record", "self", "o", "field2", "args", "rFields", "wFields", "wFieldsMap", "matches", "fieldResolver", "getAliases", "lazyIndex", "uname", "fields", "order", "fieldType", "fieldSchema", "fieldOrder", "fieldAliases", "fieldDoc", "LogicalType", "_fromValue", "obj1", "obj2", "isVisited", "msg", "readerType", "lazy", "aliases", "reader", "writer", "strict", "alias", "unqualified", "typeNames", "superIndex", "superType", "typeSymbols", "allTypes", "fieldTypes", "fieldDefaults", "isValidRecord", "fieldDefault", "fieldName", "fieldType2", "fieldDefault2", "unionTypes", "require_containers", "stream", "__import_STREAM", "zlib", "__import_ZLIB", "OPTS", "LONG_TYPE", "MAP_BYTES_TYPE", "HEADER_TYPE", "BLOCK_TYPE", "MAGIC_BYTES", "RawDecoder", "noDecode", "createReader", "chunk", "encoding", "BlockDecoder", "header", "codecs", "nBlocks", "block", "tryReadBlock", "chunkCb", "count", "cause", "BlockInfo", "BlockData", "RawEncoder", "copyBuffer", "BlockEncoder", "codec", "meta", "Header", "flushing", "raw", "compressed", "writerType", "skipper", "require_services", "events", "__import_EVENTS", "BOOLEAN_TYPE", "STRING_TYPE", "HANDSHAKE_REQUEST_TYPE", "HANDSHAKE_RESPONSE_TYPE", "PREFIX_LENGTH", "PING_MESSAGE", "Message", "reqType", "errType", "resType", "oneWay", "doc", "recordName", "reqSchema", "msgDoc", "errSchema", "Service", "messages", "types2", "ptcl", "server", "Client", "Server", "clientSvc", "serverSvc", "createReaders", "msgs", "client", "pts", "transport", "channel", "forwardErrors", "req", "handler", "parent", "typeSchema", "msgNames", "discoverProtocol", "svc", "ptclStr", "hreq", "hres", "pending", "insertRemoteProtocols", "objectMode", "writableFactory", "encoder2", "FrameEncoder", "writable2", "readable2", "decoder2", "FrameDecoder", "err2", "StatelessClientChannel", "readable", "writable", "isStream", "decoder", "NettyDecoder", "encoder", "NettyEncoder", "StatefulClientChannel", "channels", "getExistingMessage", "wreq", "WrappedRequest", "getRemoteProtocols", "numChannels", "CallContext", "wres", "ctx", "done", "err3", "readableFactory", "StatelessServerChannel", "StatefulServerChannel", "channelId", "numArgs", "ClientChannel", "normalizedPrefix", "cache", "adapter", "Adapter", "Registry", "noWait", "isError", "timeout", "noSvc", "WrappedResponse", "onTransition", "onCompletion", "fns", "chainMiddleware", "onError", "wreq2", "wres2", "prev", "reqBuf", "serializationError", "id", "resBuf", "matchesPrefix", "emit", "retry", "readHead", "onEnd", "onFinish", "timer", "onPing", "onMessage", "ping", "payload", "ServerChannel", "serverMatch", "toRpcError", "defaultHandler", "resErr", "isStrict", "errStr", "hdrBuf", "onRequest", "onHandshake", "hdrs", "hdr", "hasError", "prefixLength", "isRemote", "isError2", "frameLength", "bufs", "intBuffer", "head", "rtype", "wtype", "ptcls", "isClient", "hs", "toError", "rpcCode", "details", "detailsStr", "strs", "scope", "prefix", "params", "cbs", "forward", "isDone", "backward", "require_files", "fs", "__import_FS", "__import_PATH", "createImportHook", "imports", "fpath", "kind", "createSyncImportHook", "require_specs", "files", "TYPE_REFS", "assembleProtocol", "importFile", "protocol", "schemas", "protocolNamespace", "fpath2", "cb2", "Reader", "fetchImports", "dpath", "importedProtocols", "next", "info", "imported", "mergeImport", "importPath", "read", "contents", "protocolSchema", "Tokenizer", "tk", "protocolJavadoc", "javadoc", "numImports", "message", "responseSchema", "token", "top", "ref", "silent", "implicitTags", "maybeMessage", "fname", "reason", "context", "isToken", "lineNum", "lineStart", "emitJavadoc", "isJavadoc", "extractJavadoc", "pat", "lines", "line", "require_lib", "containers", "services", "specs", "parse2", "schemaOrProtocol", "extractFileHeader", "decode", "fd", "isValid", "createFileDecoder", "createFileEncoder", "x", "K", "O", "v", "E", "W", "M", "w", "X", "f", "Z", "V", "J", "m", "T", "P", "C", "u", "ee", "te", "se", "re", "j", "$", "L", "k", "D", "B", "F", "G", "z", "Q", "ne", "oe", "p", "q", "y", "N", "e", "r", "H", "U", "_", "g", "A", "R", "S", "Y", "b", "I", "import_avsc", "lowstorage_ERROR_CODES", "lowstorageError", "code", "SchemaValidationError", "DocumentValidationError", "S3OperationError", "operation", "matchesQuery", "document", "query", "generateUUID", "randomUUID", "ensureIdFieldInSchema", "idField", "MODULE_NAME", "DEFAULT_DELIMITER", "PROJECT_DIR_PREFIX", "COL_SUFFIX", "CHUNG_1MB", "CHUNG_5MB", "EMPTY_DATA", "errorValidationFn", "errorCode", "_hasColName", "colName", "lowstorage", "options", "requiredFields", "listed", "entry", "error", "wrapperType", "exists2", "autoCreate", "colPath", "colSchema", "Collection", "_Collection", "s3", "dirPrefix", "safeWrite", "chunkSize", "etag", "offset", "bufferArr", "repeat", "nextDataResponse", "nextDataBody", "bufferedData", "dataBuffer", "currentETag", "resp", "newETag", "schemaWithId", "avroType", "update", "updatedCount", "updatedDoc", "docIndex", "initialLength", "newData", "newColName", "newSchema", "createNew"] + "sourcesContent": ["import __import_BUFFER from \"buffer\";\nimport __import_CRYPTO from \"crypto\";\nimport __import_UTIL from \"util\";\nimport __import_STREAM from \"stream\";\nimport __import_ZLIB from \"zlib\";\nimport __import_EVENTS from \"events\";\nimport __import_FS from \"fs\";\nimport __import_PATH from \"path\";\n\nvar __create = Object.create;\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __getProtoOf = Object.getPrototypeOf;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __require = /* @__PURE__ */ ((x2) => typeof require !== \"undefined\" ? require : typeof Proxy !== \"undefined\" ? new Proxy(x2, {\n get: (a, b2) => (typeof require !== \"undefined\" ? require : a)[b2]\n}) : x2)(function(x2) {\n if (typeof require !== \"undefined\") return require.apply(this, arguments);\n throw Error('Dynamic require of \"' + x2 + '\" is not supported');\n});\nvar __commonJS = (cb, mod) => function __require2() {\n return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(\n // If the importer is in node compatibility mode or this is not an ESM\n // file that has been converted to a CommonJS file using a Babel-\n // compatible transform (i.e. \"__esModule\" has not been set), then set\n // \"default\" to the CommonJS \"module.exports\" for node compatibility.\n isNodeMode || !mod || !mod.__esModule ? __defProp(target, \"default\", { value: mod, enumerable: true }) : target,\n mod\n));\n\n// node_modules/avsc/lib/utils.js\nvar require_utils = __commonJS({\n \"node_modules/avsc/lib/utils.js\"(exports, module) {\n \"use strict\";\n var buffer = __import_BUFFER;\n var crypto2 = __import_CRYPTO;\n var util = __import_UTIL;\n var Buffer2 = buffer.Buffer;\n var POOL = new BufferPool(4096);\n var NAME_PATTERN = /^[A-Za-z_][A-Za-z0-9_]*$/;\n var f2 = util.format;\n function newBuffer(size) {\n if (typeof Buffer2.alloc == \"function\") {\n return Buffer2.alloc(size);\n } else {\n return new Buffer2(size);\n }\n }\n function bufferFrom(data, enc) {\n if (typeof Buffer2.from == \"function\") {\n return Buffer2.from(data, enc);\n } else {\n return new Buffer2(data, enc);\n }\n }\n function capitalize(s) {\n return s.charAt(0).toUpperCase() + s.slice(1);\n }\n function compare(n1, n2) {\n return n1 === n2 ? 0 : n1 < n2 ? -1 : 1;\n }\n function getOption(opts, key, def) {\n var value = opts[key];\n return value === void 0 ? def : value;\n }\n function getHash(str, algorithm) {\n algorithm = algorithm || \"md5\";\n var hash = crypto2.createHash(algorithm);\n hash.end(str);\n return hash.read();\n }\n function singleIndexOf(arr, v2) {\n var pos = -1;\n var i, l;\n if (!arr) {\n return -1;\n }\n for (i = 0, l = arr.length; i < l; i++) {\n if (arr[i] === v2) {\n if (pos >= 0) {\n return -2;\n }\n pos = i;\n }\n }\n return pos;\n }\n function toMap(arr, fn) {\n var obj = {};\n var i, elem;\n for (i = 0; i < arr.length; i++) {\n elem = arr[i];\n obj[fn(elem)] = elem;\n }\n return obj;\n }\n function objectValues(obj) {\n return Object.keys(obj).map(function(key) {\n return obj[key];\n });\n }\n function hasDuplicates(arr, fn) {\n var obj = /* @__PURE__ */ Object.create(null);\n var i, l, elem;\n for (i = 0, l = arr.length; i < l; i++) {\n elem = arr[i];\n if (fn) {\n elem = fn(elem);\n }\n if (obj[elem]) {\n return true;\n }\n obj[elem] = true;\n }\n return false;\n }\n function copyOwnProperties(src, dst, overwrite) {\n var names = Object.getOwnPropertyNames(src);\n var i, l, name;\n for (i = 0, l = names.length; i < l; i++) {\n name = names[i];\n if (!dst.hasOwnProperty(name) || overwrite) {\n var descriptor = Object.getOwnPropertyDescriptor(src, name);\n Object.defineProperty(dst, name, descriptor);\n }\n }\n return dst;\n }\n function isValidName(str) {\n return NAME_PATTERN.test(str);\n }\n function qualify(name, namespace) {\n if (~name.indexOf(\".\")) {\n name = name.replace(/^\\./, \"\");\n } else if (namespace) {\n name = namespace + \".\" + name;\n }\n name.split(\".\").forEach(function(part) {\n if (!isValidName(part)) {\n throw new Error(f2(\"invalid name: %j\", name));\n }\n });\n return name;\n }\n function unqualify(name) {\n var parts = name.split(\".\");\n return parts[parts.length - 1];\n }\n function impliedNamespace(name) {\n var match = /^(.*)\\.[^.]+$/.exec(name);\n return match ? match[1] : void 0;\n }\n function jsonEnd(str, pos) {\n pos = pos | 0;\n var c = str.charAt(pos++);\n if (/[\\d-]/.test(c)) {\n while (/[eE\\d.+-]/.test(str.charAt(pos))) {\n pos++;\n }\n return pos;\n } else if (/true|null/.test(str.slice(pos - 1, pos + 3))) {\n return pos + 3;\n } else if (/false/.test(str.slice(pos - 1, pos + 4))) {\n return pos + 4;\n }\n var depth = 0;\n var literal = false;\n do {\n switch (c) {\n case \"{\":\n case \"[\":\n if (!literal) {\n depth++;\n }\n break;\n case \"}\":\n case \"]\":\n if (!literal && !--depth) {\n return pos;\n }\n break;\n case '\"':\n literal = !literal;\n if (!depth && !literal) {\n return pos;\n }\n break;\n case \"\\\\\":\n pos++;\n }\n } while (c = str.charAt(pos++));\n return -1;\n }\n function abstractFunction() {\n throw new Error(\"abstract\");\n }\n function addDeprecatedGetters(obj, props) {\n var proto = obj.prototype;\n var i, l, prop, getter;\n for (i = 0, l = props.length; i < l; i++) {\n prop = props[i];\n getter = \"get\" + capitalize(prop);\n proto[getter] = util.deprecate(\n createGetter(prop),\n \"use `.\" + prop + \"` instead of `.\" + getter + \"()`\"\n );\n }\n function createGetter(prop2) {\n return function() {\n var delegate = this[prop2];\n return typeof delegate == \"function\" ? delegate.apply(this, arguments) : delegate;\n };\n }\n }\n function BufferPool(len) {\n this._len = len | 0;\n this._pos = 0;\n this._slab = newBuffer(this._len);\n }\n BufferPool.prototype.alloc = function(len) {\n if (len < 0) {\n throw new Error(\"negative length\");\n }\n var maxLen = this._len;\n if (len > maxLen) {\n return newBuffer(len);\n }\n if (this._pos + len > maxLen) {\n this._slab = newBuffer(maxLen);\n this._pos = 0;\n }\n return this._slab.slice(this._pos, this._pos += len);\n };\n function Lcg(seed) {\n var a = 1103515245;\n var c = 12345;\n var m2 = Math.pow(2, 31);\n var state = Math.floor(seed || Math.random() * (m2 - 1));\n this._max = m2;\n this._nextInt = function() {\n return state = (a * state + c) % m2;\n };\n }\n Lcg.prototype.nextBoolean = function() {\n return !!(this._nextInt() % 2);\n };\n Lcg.prototype.nextInt = function(start, end) {\n if (end === void 0) {\n end = start;\n start = 0;\n }\n end = end === void 0 ? this._max : end;\n return start + Math.floor(this.nextFloat() * (end - start));\n };\n Lcg.prototype.nextFloat = function(start, end) {\n if (end === void 0) {\n end = start;\n start = 0;\n }\n end = end === void 0 ? 1 : end;\n return start + (end - start) * this._nextInt() / this._max;\n };\n Lcg.prototype.nextString = function(len, flags) {\n len |= 0;\n flags = flags || \"aA\";\n var mask = \"\";\n if (flags.indexOf(\"a\") > -1) {\n mask += \"abcdefghijklmnopqrstuvwxyz\";\n }\n if (flags.indexOf(\"A\") > -1) {\n mask += \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\";\n }\n if (flags.indexOf(\"#\") > -1) {\n mask += \"0123456789\";\n }\n if (flags.indexOf(\"!\") > -1) {\n mask += \"~`!@#$%^&*()_+-={}[]:\\\";'<>?,./|\\\\\";\n }\n var result = [];\n for (var i = 0; i < len; i++) {\n result.push(this.choice(mask));\n }\n return result.join(\"\");\n };\n Lcg.prototype.nextBuffer = function(len) {\n var arr = [];\n var i;\n for (i = 0; i < len; i++) {\n arr.push(this.nextInt(256));\n }\n return bufferFrom(arr);\n };\n Lcg.prototype.choice = function(arr) {\n var len = arr.length;\n if (!len) {\n throw new Error(\"choosing from empty array\");\n }\n return arr[this.nextInt(len)];\n };\n function OrderedQueue() {\n this._index = 0;\n this._items = [];\n }\n OrderedQueue.prototype.push = function(item) {\n var items = this._items;\n var i = items.length | 0;\n var j2;\n items.push(item);\n while (i > 0 && items[i].index < items[j2 = i - 1 >> 1].index) {\n item = items[i];\n items[i] = items[j2];\n items[j2] = item;\n i = j2;\n }\n };\n OrderedQueue.prototype.pop = function() {\n var items = this._items;\n var len = items.length - 1 | 0;\n var first = items[0];\n if (!first || first.index > this._index) {\n return null;\n }\n this._index++;\n if (!len) {\n items.pop();\n return first;\n }\n items[0] = items.pop();\n var mid = len >> 1;\n var i = 0;\n var i1, i2, j2, item, c, c1, c2;\n while (i < mid) {\n item = items[i];\n i1 = (i << 1) + 1;\n i2 = i + 1 << 1;\n c1 = items[i1];\n c2 = items[i2];\n if (!c2 || c1.index <= c2.index) {\n c = c1;\n j2 = i1;\n } else {\n c = c2;\n j2 = i2;\n }\n if (c.index >= item.index) {\n break;\n }\n items[j2] = item;\n items[i] = c;\n i = j2;\n }\n return first;\n };\n function Tap(buf, pos) {\n this.buf = buf;\n this.pos = pos | 0;\n if (this.pos < 0) {\n throw new Error(\"negative offset\");\n }\n }\n Tap.prototype.isValid = function() {\n return this.pos <= this.buf.length;\n };\n Tap.prototype._invalidate = function() {\n this.pos = this.buf.length + 1;\n };\n Tap.prototype.readBoolean = function() {\n return !!this.buf[this.pos++];\n };\n Tap.prototype.skipBoolean = function() {\n this.pos++;\n };\n Tap.prototype.writeBoolean = function(b2) {\n this.buf[this.pos++] = !!b2;\n };\n Tap.prototype.readInt = Tap.prototype.readLong = function() {\n var n = 0;\n var k2 = 0;\n var buf = this.buf;\n var b2, h, f3, fk;\n do {\n b2 = buf[this.pos++];\n h = b2 & 128;\n n |= (b2 & 127) << k2;\n k2 += 7;\n } while (h && k2 < 28);\n if (h) {\n f3 = n;\n fk = 268435456;\n do {\n b2 = buf[this.pos++];\n f3 += (b2 & 127) * fk;\n fk *= 128;\n } while (b2 & 128);\n return (f3 % 2 ? -(f3 + 1) : f3) / 2;\n }\n return n >> 1 ^ -(n & 1);\n };\n Tap.prototype.skipInt = Tap.prototype.skipLong = function() {\n var buf = this.buf;\n while (buf[this.pos++] & 128) {\n }\n };\n Tap.prototype.writeInt = Tap.prototype.writeLong = function(n) {\n var buf = this.buf;\n var f3, m2;\n if (n >= -1073741824 && n < 1073741824) {\n m2 = n >= 0 ? n << 1 : ~n << 1 | 1;\n do {\n buf[this.pos] = m2 & 127;\n m2 >>= 7;\n } while (m2 && (buf[this.pos++] |= 128));\n } else {\n f3 = n >= 0 ? n * 2 : -n * 2 - 1;\n do {\n buf[this.pos] = f3 & 127;\n f3 /= 128;\n } while (f3 >= 1 && (buf[this.pos++] |= 128));\n }\n this.pos++;\n };\n Tap.prototype.readFloat = function() {\n var buf = this.buf;\n var pos = this.pos;\n this.pos += 4;\n if (this.pos > buf.length) {\n return 0;\n }\n return this.buf.readFloatLE(pos);\n };\n Tap.prototype.skipFloat = function() {\n this.pos += 4;\n };\n Tap.prototype.writeFloat = function(f3) {\n var buf = this.buf;\n var pos = this.pos;\n this.pos += 4;\n if (this.pos > buf.length) {\n return;\n }\n return this.buf.writeFloatLE(f3, pos);\n };\n Tap.prototype.readDouble = function() {\n var buf = this.buf;\n var pos = this.pos;\n this.pos += 8;\n if (this.pos > buf.length) {\n return 0;\n }\n return this.buf.readDoubleLE(pos);\n };\n Tap.prototype.skipDouble = function() {\n this.pos += 8;\n };\n Tap.prototype.writeDouble = function(d) {\n var buf = this.buf;\n var pos = this.pos;\n this.pos += 8;\n if (this.pos > buf.length) {\n return;\n }\n return this.buf.writeDoubleLE(d, pos);\n };\n Tap.prototype.readFixed = function(len) {\n var pos = this.pos;\n this.pos += len;\n if (this.pos > this.buf.length) {\n return;\n }\n var fixed = POOL.alloc(len);\n this.buf.copy(fixed, 0, pos, pos + len);\n return fixed;\n };\n Tap.prototype.skipFixed = function(len) {\n this.pos += len;\n };\n Tap.prototype.writeFixed = function(buf, len) {\n len = len || buf.length;\n var pos = this.pos;\n this.pos += len;\n if (this.pos > this.buf.length) {\n return;\n }\n buf.copy(this.buf, pos, 0, len);\n };\n Tap.prototype.readBytes = function() {\n var len = this.readLong();\n if (len < 0) {\n this._invalidate();\n return;\n }\n return this.readFixed(len);\n };\n Tap.prototype.skipBytes = function() {\n var len = this.readLong();\n if (len < 0) {\n this._invalidate();\n return;\n }\n this.pos += len;\n };\n Tap.prototype.writeBytes = function(buf) {\n var len = buf.length;\n this.writeLong(len);\n this.writeFixed(buf, len);\n };\n if (typeof Buffer2.prototype.utf8Slice == \"function\") {\n Tap.prototype.readString = function() {\n var len = this.readLong();\n if (len < 0) {\n this._invalidate();\n return \"\";\n }\n var pos = this.pos;\n var buf = this.buf;\n this.pos += len;\n if (this.pos > buf.length) {\n return;\n }\n return this.buf.utf8Slice(pos, pos + len);\n };\n } else {\n Tap.prototype.readString = function() {\n var len = this.readLong();\n if (len < 0) {\n this._invalidate();\n return \"\";\n }\n var pos = this.pos;\n var buf = this.buf;\n this.pos += len;\n if (this.pos > buf.length) {\n return;\n }\n return this.buf.slice(pos, pos + len).toString();\n };\n }\n Tap.prototype.skipString = function() {\n var len = this.readLong();\n if (len < 0) {\n this._invalidate();\n return;\n }\n this.pos += len;\n };\n Tap.prototype.writeString = function(s) {\n var len = Buffer2.byteLength(s);\n var buf = this.buf;\n this.writeLong(len);\n var pos = this.pos;\n this.pos += len;\n if (this.pos > buf.length) {\n return;\n }\n if (len > 64 && typeof Buffer2.prototype.utf8Write == \"function\") {\n buf.utf8Write(s, pos, len);\n } else {\n var i, l, c1, c2;\n for (i = 0, l = len; i < l; i++) {\n c1 = s.charCodeAt(i);\n if (c1 < 128) {\n buf[pos++] = c1;\n } else if (c1 < 2048) {\n buf[pos++] = c1 >> 6 | 192;\n buf[pos++] = c1 & 63 | 128;\n } else if ((c1 & 64512) === 55296 && ((c2 = s.charCodeAt(i + 1)) & 64512) === 56320) {\n c1 = 65536 + ((c1 & 1023) << 10) + (c2 & 1023);\n i++;\n buf[pos++] = c1 >> 18 | 240;\n buf[pos++] = c1 >> 12 & 63 | 128;\n buf[pos++] = c1 >> 6 & 63 | 128;\n buf[pos++] = c1 & 63 | 128;\n } else {\n buf[pos++] = c1 >> 12 | 224;\n buf[pos++] = c1 >> 6 & 63 | 128;\n buf[pos++] = c1 & 63 | 128;\n }\n }\n }\n };\n if (typeof Buffer2.prototype.latin1Write == \"function\") {\n Tap.prototype.writeBinary = function(str, len) {\n var pos = this.pos;\n this.pos += len;\n if (this.pos > this.buf.length) {\n return;\n }\n this.buf.latin1Write(str, pos, len);\n };\n } else if (typeof Buffer2.prototype.binaryWrite == \"function\") {\n Tap.prototype.writeBinary = function(str, len) {\n var pos = this.pos;\n this.pos += len;\n if (this.pos > this.buf.length) {\n return;\n }\n this.buf.binaryWrite(str, pos, len);\n };\n } else {\n Tap.prototype.writeBinary = function(s, len) {\n var pos = this.pos;\n this.pos += len;\n if (this.pos > this.buf.length) {\n return;\n }\n this.buf.write(s, pos, len, \"binary\");\n };\n }\n Tap.prototype.matchBoolean = function(tap) {\n return this.buf[this.pos++] - tap.buf[tap.pos++];\n };\n Tap.prototype.matchInt = Tap.prototype.matchLong = function(tap) {\n var n1 = this.readLong();\n var n2 = tap.readLong();\n return n1 === n2 ? 0 : n1 < n2 ? -1 : 1;\n };\n Tap.prototype.matchFloat = function(tap) {\n var n1 = this.readFloat();\n var n2 = tap.readFloat();\n return n1 === n2 ? 0 : n1 < n2 ? -1 : 1;\n };\n Tap.prototype.matchDouble = function(tap) {\n var n1 = this.readDouble();\n var n2 = tap.readDouble();\n return n1 === n2 ? 0 : n1 < n2 ? -1 : 1;\n };\n Tap.prototype.matchFixed = function(tap, len) {\n return this.readFixed(len).compare(tap.readFixed(len));\n };\n Tap.prototype.matchBytes = Tap.prototype.matchString = function(tap) {\n var l1 = this.readLong();\n var p1 = this.pos;\n this.pos += l1;\n var l2 = tap.readLong();\n var p2 = tap.pos;\n tap.pos += l2;\n var b1 = this.buf.slice(p1, this.pos);\n var b2 = tap.buf.slice(p2, tap.pos);\n return b1.compare(b2);\n };\n Tap.prototype.unpackLongBytes = function() {\n var res = newBuffer(8);\n var n = 0;\n var i = 0;\n var j2 = 6;\n var buf = this.buf;\n var b2, neg;\n b2 = buf[this.pos++];\n neg = b2 & 1;\n res.fill(0);\n n |= (b2 & 127) >> 1;\n while (b2 & 128) {\n b2 = buf[this.pos++];\n n |= (b2 & 127) << j2;\n j2 += 7;\n if (j2 >= 8) {\n j2 -= 8;\n res[i++] = n;\n n >>= 8;\n }\n }\n res[i] = n;\n if (neg) {\n invert(res, 8);\n }\n return res;\n };\n Tap.prototype.packLongBytes = function(buf) {\n var neg = (buf[7] & 128) >> 7;\n var res = this.buf;\n var j2 = 1;\n var k2 = 0;\n var m2 = 3;\n var n;\n if (neg) {\n invert(buf, 8);\n n = 1;\n } else {\n n = 0;\n }\n var parts = [\n buf.readUIntLE(0, 3),\n buf.readUIntLE(3, 3),\n buf.readUIntLE(6, 2)\n ];\n while (m2 && !parts[--m2]) {\n }\n while (k2 < m2) {\n n |= parts[k2++] << j2;\n j2 += 24;\n while (j2 > 7) {\n res[this.pos++] = n & 127 | 128;\n n >>= 7;\n j2 -= 7;\n }\n }\n n |= parts[m2] << j2;\n do {\n res[this.pos] = n & 127;\n n >>= 7;\n } while (n && (res[this.pos++] |= 128));\n this.pos++;\n if (neg) {\n invert(buf, 8);\n }\n };\n function invert(buf, len) {\n while (len--) {\n buf[len] = ~buf[len];\n }\n }\n module.exports = {\n abstractFunction,\n addDeprecatedGetters,\n bufferFrom,\n capitalize,\n copyOwnProperties,\n getHash,\n compare,\n getOption,\n impliedNamespace,\n isValidName,\n jsonEnd,\n newBuffer,\n objectValues,\n qualify,\n toMap,\n singleIndexOf,\n hasDuplicates,\n unqualify,\n BufferPool,\n Lcg,\n OrderedQueue,\n Tap\n };\n }\n});\n\n// node_modules/avsc/lib/types.js\nvar require_types = __commonJS({\n \"node_modules/avsc/lib/types.js\"(exports, module) {\n \"use strict\";\n var utils = require_utils();\n var buffer = __import_BUFFER;\n var util = __import_UTIL;\n var Buffer2 = buffer.Buffer;\n var SlowBuffer = buffer.SlowBuffer;\n var Tap = utils.Tap;\n var debug = util.debuglog(\"avsc:types\");\n var f2 = util.format;\n var TYPES = {\n \"array\": ArrayType,\n \"boolean\": BooleanType,\n \"bytes\": BytesType,\n \"double\": DoubleType,\n \"enum\": EnumType,\n \"error\": RecordType,\n \"fixed\": FixedType,\n \"float\": FloatType,\n \"int\": IntType,\n \"long\": LongType,\n \"map\": MapType,\n \"null\": NullType,\n \"record\": RecordType,\n \"string\": StringType\n };\n var RANDOM = new utils.Lcg();\n var TAP = new Tap(new SlowBuffer(1024));\n var LOGICAL_TYPE = null;\n var UNDERLYING_TYPES = [];\n function Type(schema, opts) {\n var type;\n if (LOGICAL_TYPE) {\n type = LOGICAL_TYPE;\n UNDERLYING_TYPES.push([LOGICAL_TYPE, this]);\n LOGICAL_TYPE = null;\n } else {\n type = this;\n }\n this._hash = new Hash();\n this.name = void 0;\n this.aliases = void 0;\n this.doc = schema && schema.doc ? \"\" + schema.doc : void 0;\n if (schema) {\n var name = schema.name;\n var namespace = schema.namespace === void 0 ? opts && opts.namespace : schema.namespace;\n if (name !== void 0) {\n name = maybeQualify(name, namespace);\n if (isPrimitive(name)) {\n throw new Error(f2(\"cannot rename primitive type: %j\", name));\n }\n var registry = opts && opts.registry;\n if (registry) {\n if (registry[name] !== void 0) {\n throw new Error(f2(\"duplicate type name: %s\", name));\n }\n registry[name] = type;\n }\n } else if (opts && opts.noAnonymousTypes) {\n throw new Error(f2(\"missing name property in schema: %j\", schema));\n }\n this.name = name;\n this.aliases = schema.aliases ? schema.aliases.map(function(s) {\n return maybeQualify(s, namespace);\n }) : [];\n }\n }\n Type.forSchema = function(schema, opts) {\n opts = opts || {};\n opts.registry = opts.registry || {};\n var UnionType2 = function(wrapUnions) {\n if (wrapUnions === true) {\n wrapUnions = \"always\";\n } else if (wrapUnions === false) {\n wrapUnions = \"never\";\n } else if (wrapUnions === void 0) {\n wrapUnions = \"auto\";\n } else if (typeof wrapUnions == \"string\") {\n wrapUnions = wrapUnions.toLowerCase();\n }\n switch (wrapUnions) {\n case \"always\":\n return WrappedUnionType;\n case \"never\":\n return UnwrappedUnionType;\n case \"auto\":\n return void 0;\n default:\n throw new Error(f2(\"invalid wrap unions option: %j\", wrapUnions));\n }\n }(opts.wrapUnions);\n if (schema === null) {\n throw new Error('invalid type: null (did you mean \"null\"?)');\n }\n if (Type.isType(schema)) {\n return schema;\n }\n var type;\n if (opts.typeHook && (type = opts.typeHook(schema, opts))) {\n if (!Type.isType(type)) {\n throw new Error(f2(\"invalid typehook return value: %j\", type));\n }\n return type;\n }\n if (typeof schema == \"string\") {\n schema = maybeQualify(schema, opts.namespace);\n type = opts.registry[schema];\n if (type) {\n return type;\n }\n if (isPrimitive(schema)) {\n return opts.registry[schema] = Type.forSchema({ type: schema }, opts);\n }\n throw new Error(f2(\"undefined type name: %s\", schema));\n }\n if (schema.logicalType && opts.logicalTypes && !LOGICAL_TYPE) {\n var DerivedType = opts.logicalTypes[schema.logicalType];\n if (DerivedType) {\n var namespace = opts.namespace;\n var registry = {};\n Object.keys(opts.registry).forEach(function(key) {\n registry[key] = opts.registry[key];\n });\n try {\n debug(\"instantiating logical type for %s\", schema.logicalType);\n return new DerivedType(schema, opts);\n } catch (err) {\n debug(\"failed to instantiate logical type for %s\", schema.logicalType);\n if (opts.assertLogicalTypes) {\n throw err;\n }\n LOGICAL_TYPE = null;\n opts.namespace = namespace;\n opts.registry = registry;\n }\n }\n }\n if (Array.isArray(schema)) {\n var logicalType = LOGICAL_TYPE;\n LOGICAL_TYPE = null;\n var types = schema.map(function(obj) {\n return Type.forSchema(obj, opts);\n });\n if (!UnionType2) {\n UnionType2 = isAmbiguous(types) ? WrappedUnionType : UnwrappedUnionType;\n }\n LOGICAL_TYPE = logicalType;\n type = new UnionType2(types, opts);\n } else {\n type = function(typeName) {\n var Type2 = TYPES[typeName];\n if (Type2 === void 0) {\n throw new Error(f2(\"unknown type: %j\", typeName));\n }\n return new Type2(schema, opts);\n }(schema.type);\n }\n return type;\n };\n Type.forValue = function(val, opts) {\n opts = opts || {};\n opts.emptyArrayType = opts.emptyArrayType || Type.forSchema({\n type: \"array\",\n items: \"null\"\n });\n if (opts.valueHook) {\n var type = opts.valueHook(val, opts);\n if (type !== void 0) {\n if (!Type.isType(type)) {\n throw new Error(f2(\"invalid value hook return value: %j\", type));\n }\n return type;\n }\n }\n switch (typeof val) {\n case \"string\":\n return Type.forSchema(\"string\", opts);\n case \"boolean\":\n return Type.forSchema(\"boolean\", opts);\n case \"number\":\n if ((val | 0) === val) {\n return Type.forSchema(\"int\", opts);\n } else if (Math.abs(val) < 9007199254740991) {\n return Type.forSchema(\"float\", opts);\n }\n return Type.forSchema(\"double\", opts);\n case \"object\":\n if (val === null) {\n return Type.forSchema(\"null\", opts);\n } else if (Array.isArray(val)) {\n if (!val.length) {\n return opts.emptyArrayType;\n }\n return Type.forSchema({\n type: \"array\",\n items: Type.forTypes(\n val.map(function(v2) {\n return Type.forValue(v2, opts);\n }),\n opts\n )\n }, opts);\n } else if (Buffer2.isBuffer(val)) {\n return Type.forSchema(\"bytes\", opts);\n }\n var fieldNames = Object.keys(val);\n if (fieldNames.some(function(s) {\n return !utils.isValidName(s);\n })) {\n return Type.forSchema({\n type: \"map\",\n values: Type.forTypes(fieldNames.map(function(s) {\n return Type.forValue(val[s], opts);\n }), opts)\n }, opts);\n }\n return Type.forSchema({\n type: \"record\",\n fields: fieldNames.map(function(s) {\n return { name: s, type: Type.forValue(val[s], opts) };\n })\n }, opts);\n default:\n throw new Error(f2(\"cannot infer type from: %j\", val));\n }\n };\n Type.forTypes = function(types, opts) {\n if (!types.length) {\n throw new Error(\"no types to combine\");\n }\n if (types.length === 1) {\n return types[0];\n }\n opts = opts || {};\n var expanded = [];\n var numWrappedUnions = 0;\n var isValidWrappedUnion = true;\n types.forEach(function(type) {\n switch (type.typeName) {\n case \"union:unwrapped\":\n isValidWrappedUnion = false;\n expanded = expanded.concat(type.types);\n break;\n case \"union:wrapped\":\n numWrappedUnions++;\n expanded = expanded.concat(type.types);\n break;\n case \"null\":\n expanded.push(type);\n break;\n default:\n isValidWrappedUnion = false;\n expanded.push(type);\n }\n });\n if (numWrappedUnions) {\n if (!isValidWrappedUnion) {\n throw new Error(\"cannot combine wrapped union\");\n }\n var branchTypes = {};\n expanded.forEach(function(type) {\n var name = type.branchName;\n var branchType = branchTypes[name];\n if (!branchType) {\n branchTypes[name] = type;\n } else if (!type.equals(branchType)) {\n throw new Error(\"inconsistent branch type\");\n }\n });\n var wrapUnions = opts.wrapUnions;\n var unionType;\n opts.wrapUnions = true;\n try {\n unionType = Type.forSchema(Object.keys(branchTypes).map(function(name) {\n return branchTypes[name];\n }), opts);\n } catch (err) {\n opts.wrapUnions = wrapUnions;\n throw err;\n }\n opts.wrapUnions = wrapUnions;\n return unionType;\n }\n var bucketized = {};\n expanded.forEach(function(type) {\n var bucket = getTypeBucket(type);\n var bucketTypes = bucketized[bucket];\n if (!bucketTypes) {\n bucketized[bucket] = bucketTypes = [];\n }\n bucketTypes.push(type);\n });\n var buckets = Object.keys(bucketized);\n var augmented = buckets.map(function(bucket) {\n var bucketTypes = bucketized[bucket];\n if (bucketTypes.length === 1) {\n return bucketTypes[0];\n } else {\n switch (bucket) {\n case \"null\":\n case \"boolean\":\n return bucketTypes[0];\n case \"number\":\n return combineNumbers(bucketTypes);\n case \"string\":\n return combineStrings(bucketTypes, opts);\n case \"buffer\":\n return combineBuffers(bucketTypes, opts);\n case \"array\":\n bucketTypes = bucketTypes.filter(function(t) {\n return t !== opts.emptyArrayType;\n });\n if (!bucketTypes.length) {\n return opts.emptyArrayType;\n }\n return Type.forSchema({\n type: \"array\",\n items: Type.forTypes(bucketTypes.map(function(t) {\n return t.itemsType;\n }), opts)\n }, opts);\n default:\n return combineObjects(bucketTypes, opts);\n }\n }\n });\n if (augmented.length === 1) {\n return augmented[0];\n } else {\n return Type.forSchema(augmented, opts);\n }\n };\n Type.isType = function() {\n var l = arguments.length;\n if (!l) {\n return false;\n }\n var any = arguments[0];\n if (!any || typeof any._update != \"function\" || typeof any.fingerprint != \"function\") {\n return false;\n }\n if (l === 1) {\n return true;\n }\n var typeName = any.typeName;\n var i;\n for (i = 1; i < l; i++) {\n if (typeName.indexOf(arguments[i]) === 0) {\n return true;\n }\n }\n return false;\n };\n Type.__reset = function(size) {\n debug(\"resetting type buffer to %d\", size);\n TAP.buf = new SlowBuffer(size);\n };\n Object.defineProperty(Type.prototype, \"branchName\", {\n enumerable: true,\n get: function() {\n var type = Type.isType(this, \"logical\") ? this.underlyingType : this;\n if (type.name) {\n return type.name;\n }\n if (Type.isType(type, \"abstract\")) {\n return type._concreteTypeName;\n }\n return Type.isType(type, \"union\") ? void 0 : type.typeName;\n }\n });\n Type.prototype.clone = function(val, opts) {\n if (opts) {\n opts = {\n coerce: !!opts.coerceBuffers | 0,\n // Coerce JSON to Buffer.\n fieldHook: opts.fieldHook,\n qualifyNames: !!opts.qualifyNames,\n skip: !!opts.skipMissingFields,\n wrap: !!opts.wrapUnions | 0\n // Wrap first match into union.\n };\n return this._copy(val, opts);\n } else {\n return this.fromBuffer(this.toBuffer(val));\n }\n };\n Type.prototype.compare = utils.abstractFunction;\n Type.prototype.compareBuffers = function(buf1, buf2) {\n return this._match(new Tap(buf1), new Tap(buf2));\n };\n Type.prototype.createResolver = function(type, opts) {\n if (!Type.isType(type)) {\n throw new Error(f2(\"not a type: %j\", type));\n }\n if (!Type.isType(this, \"union\", \"logical\") && Type.isType(type, \"logical\")) {\n return this.createResolver(type.underlyingType, opts);\n }\n opts = opts || {};\n opts.registry = opts.registry || {};\n var resolver, key;\n if (Type.isType(this, \"record\", \"error\") && Type.isType(type, \"record\", \"error\")) {\n key = this.name + \":\" + type.name;\n resolver = opts.registry[key];\n if (resolver) {\n return resolver;\n }\n }\n resolver = new Resolver(this);\n if (key) {\n opts.registry[key] = resolver;\n }\n if (Type.isType(type, \"union\")) {\n var resolvers = type.types.map(function(t) {\n return this.createResolver(t, opts);\n }, this);\n resolver._read = function(tap) {\n var index = tap.readLong();\n var resolver2 = resolvers[index];\n if (resolver2 === void 0) {\n throw new Error(f2(\"invalid union index: %s\", index));\n }\n return resolvers[index]._read(tap);\n };\n } else {\n this._update(resolver, type, opts);\n }\n if (!resolver._read) {\n throw new Error(f2(\"cannot read %s as %s\", type, this));\n }\n return Object.freeze(resolver);\n };\n Type.prototype.decode = function(buf, pos, resolver) {\n var tap = new Tap(buf, pos);\n var val = readValue(this, tap, resolver);\n if (!tap.isValid()) {\n return { value: void 0, offset: -1 };\n }\n return { value: val, offset: tap.pos };\n };\n Type.prototype.encode = function(val, buf, pos) {\n var tap = new Tap(buf, pos);\n this._write(tap, val);\n if (!tap.isValid()) {\n return buf.length - tap.pos;\n }\n return tap.pos;\n };\n Type.prototype.equals = function(type, opts) {\n var canon = (\n // Canonical equality.\n Type.isType(type) && this.fingerprint().equals(type.fingerprint())\n );\n if (!canon || !(opts && opts.strict)) {\n return canon;\n }\n return JSON.stringify(this.schema({ exportAttrs: true })) === JSON.stringify(type.schema({ exportAttrs: true }));\n };\n Type.prototype.fingerprint = function(algorithm) {\n if (!algorithm) {\n if (!this._hash.str) {\n var schemaStr = JSON.stringify(this.schema());\n this._hash.str = utils.getHash(schemaStr).toString(\"binary\");\n }\n return utils.bufferFrom(this._hash.str, \"binary\");\n } else {\n return utils.getHash(JSON.stringify(this.schema()), algorithm);\n }\n };\n Type.prototype.fromBuffer = function(buf, resolver, noCheck) {\n var tap = new Tap(buf);\n var val = readValue(this, tap, resolver, noCheck);\n if (!tap.isValid()) {\n throw new Error(\"truncated buffer\");\n }\n if (!noCheck && tap.pos < buf.length) {\n throw new Error(\"trailing data\");\n }\n return val;\n };\n Type.prototype.fromString = function(str) {\n return this._copy(JSON.parse(str), { coerce: 2 });\n };\n Type.prototype.inspect = function() {\n var typeName = this.typeName;\n var className = getClassName(typeName);\n if (isPrimitive(typeName)) {\n return f2(\"<%s>\", className);\n } else {\n var obj = this.schema({ exportAttrs: true, noDeref: true });\n if (typeof obj == \"object\" && !Type.isType(this, \"logical\")) {\n obj.type = void 0;\n }\n return f2(\"<%s %j>\", className, obj);\n }\n };\n Type.prototype.isValid = function(val, opts) {\n var flags = (opts && opts.noUndeclaredFields) | 0;\n var errorHook = opts && opts.errorHook;\n var hook, path;\n if (errorHook) {\n path = [];\n hook = function(any, type) {\n errorHook.call(this, path.slice(), any, type, val);\n };\n }\n return this._check(val, flags, hook, path);\n };\n Type.prototype.random = utils.abstractFunction;\n Type.prototype.schema = function(opts) {\n return this._attrs({\n exportAttrs: !!(opts && opts.exportAttrs),\n noDeref: !!(opts && opts.noDeref)\n });\n };\n Type.prototype.toBuffer = function(val) {\n TAP.pos = 0;\n this._write(TAP, val);\n var buf = utils.newBuffer(TAP.pos);\n if (TAP.isValid()) {\n TAP.buf.copy(buf, 0, 0, TAP.pos);\n } else {\n this._write(new Tap(buf), val);\n }\n return buf;\n };\n Type.prototype.toJSON = function() {\n return this.schema({ exportAttrs: true });\n };\n Type.prototype.toString = function(val) {\n if (val === void 0) {\n return JSON.stringify(this.schema({ noDeref: true }));\n }\n return JSON.stringify(this._copy(val, { coerce: 3 }));\n };\n Type.prototype.wrap = function(val) {\n var Branch = this._branchConstructor;\n return Branch === null ? null : new Branch(val);\n };\n Type.prototype._attrs = function(opts) {\n opts.derefed = opts.derefed || {};\n var name = this.name;\n if (name !== void 0) {\n if (opts.noDeref || opts.derefed[name]) {\n return name;\n }\n opts.derefed[name] = true;\n }\n var schema = {};\n if (this.name !== void 0) {\n schema.name = name;\n }\n schema.type = this.typeName;\n var derefedSchema = this._deref(schema, opts);\n if (derefedSchema !== void 0) {\n schema = derefedSchema;\n }\n if (opts.exportAttrs) {\n if (this.aliases && this.aliases.length) {\n schema.aliases = this.aliases;\n }\n if (this.doc !== void 0) {\n schema.doc = this.doc;\n }\n }\n return schema;\n };\n Type.prototype._createBranchConstructor = function() {\n var name = this.branchName;\n if (name === \"null\") {\n return null;\n }\n var attr = ~name.indexOf(\".\") ? \"this['\" + name + \"']\" : \"this.\" + name;\n var body = \"return function Branch$(val) { \" + attr + \" = val; };\";\n var Branch = new Function(body)();\n Branch.type = this;\n Branch.prototype.unwrap = new Function(\"return \" + attr + \";\");\n Branch.prototype.unwrapped = Branch.prototype.unwrap;\n return Branch;\n };\n Type.prototype._peek = function(tap) {\n var pos = tap.pos;\n var val = this._read(tap);\n tap.pos = pos;\n return val;\n };\n Type.prototype._check = utils.abstractFunction;\n Type.prototype._copy = utils.abstractFunction;\n Type.prototype._deref = utils.abstractFunction;\n Type.prototype._match = utils.abstractFunction;\n Type.prototype._read = utils.abstractFunction;\n Type.prototype._skip = utils.abstractFunction;\n Type.prototype._update = utils.abstractFunction;\n Type.prototype._write = utils.abstractFunction;\n Type.prototype.getAliases = function() {\n return this.aliases;\n };\n Type.prototype.getFingerprint = Type.prototype.fingerprint;\n Type.prototype.getName = function(asBranch) {\n return this.name || !asBranch ? this.name : this.branchName;\n };\n Type.prototype.getSchema = Type.prototype.schema;\n Type.prototype.getTypeName = function() {\n return this.typeName;\n };\n function PrimitiveType(noFreeze) {\n Type.call(this);\n this._branchConstructor = this._createBranchConstructor();\n if (!noFreeze) {\n Object.freeze(this);\n }\n }\n util.inherits(PrimitiveType, Type);\n PrimitiveType.prototype._update = function(resolver, type) {\n if (type.typeName === this.typeName) {\n resolver._read = this._read;\n }\n };\n PrimitiveType.prototype._copy = function(val) {\n this._check(val, void 0, throwInvalidError);\n return val;\n };\n PrimitiveType.prototype._deref = function() {\n return this.typeName;\n };\n PrimitiveType.prototype.compare = utils.compare;\n function NullType() {\n PrimitiveType.call(this);\n }\n util.inherits(NullType, PrimitiveType);\n NullType.prototype._check = function(val, flags, hook) {\n var b2 = val === null;\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n NullType.prototype._read = function() {\n return null;\n };\n NullType.prototype._skip = function() {\n };\n NullType.prototype._write = function(tap, val) {\n if (val !== null) {\n throwInvalidError(val, this);\n }\n };\n NullType.prototype._match = function() {\n return 0;\n };\n NullType.prototype.compare = NullType.prototype._match;\n NullType.prototype.typeName = \"null\";\n NullType.prototype.random = NullType.prototype._read;\n function BooleanType() {\n PrimitiveType.call(this);\n }\n util.inherits(BooleanType, PrimitiveType);\n BooleanType.prototype._check = function(val, flags, hook) {\n var b2 = typeof val == \"boolean\";\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n BooleanType.prototype._read = function(tap) {\n return tap.readBoolean();\n };\n BooleanType.prototype._skip = function(tap) {\n tap.skipBoolean();\n };\n BooleanType.prototype._write = function(tap, val) {\n if (typeof val != \"boolean\") {\n throwInvalidError(val, this);\n }\n tap.writeBoolean(val);\n };\n BooleanType.prototype._match = function(tap1, tap2) {\n return tap1.matchBoolean(tap2);\n };\n BooleanType.prototype.typeName = \"boolean\";\n BooleanType.prototype.random = function() {\n return RANDOM.nextBoolean();\n };\n function IntType() {\n PrimitiveType.call(this);\n }\n util.inherits(IntType, PrimitiveType);\n IntType.prototype._check = function(val, flags, hook) {\n var b2 = val === (val | 0);\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n IntType.prototype._read = function(tap) {\n return tap.readInt();\n };\n IntType.prototype._skip = function(tap) {\n tap.skipInt();\n };\n IntType.prototype._write = function(tap, val) {\n if (val !== (val | 0)) {\n throwInvalidError(val, this);\n }\n tap.writeInt(val);\n };\n IntType.prototype._match = function(tap1, tap2) {\n return tap1.matchInt(tap2);\n };\n IntType.prototype.typeName = \"int\";\n IntType.prototype.random = function() {\n return RANDOM.nextInt(1e3) | 0;\n };\n function LongType() {\n PrimitiveType.call(this);\n }\n util.inherits(LongType, PrimitiveType);\n LongType.prototype._check = function(val, flags, hook) {\n var b2 = typeof val == \"number\" && val % 1 === 0 && isSafeLong(val);\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n LongType.prototype._read = function(tap) {\n var n = tap.readLong();\n if (!isSafeLong(n)) {\n throw new Error(\"potential precision loss\");\n }\n return n;\n };\n LongType.prototype._skip = function(tap) {\n tap.skipLong();\n };\n LongType.prototype._write = function(tap, val) {\n if (typeof val != \"number\" || val % 1 || !isSafeLong(val)) {\n throwInvalidError(val, this);\n }\n tap.writeLong(val);\n };\n LongType.prototype._match = function(tap1, tap2) {\n return tap1.matchLong(tap2);\n };\n LongType.prototype._update = function(resolver, type) {\n switch (type.typeName) {\n case \"int\":\n resolver._read = type._read;\n break;\n case \"abstract:long\":\n case \"long\":\n resolver._read = this._read;\n }\n };\n LongType.prototype.typeName = \"long\";\n LongType.prototype.random = function() {\n return RANDOM.nextInt();\n };\n LongType.__with = function(methods, noUnpack) {\n methods = methods || {};\n var mapping = {\n toBuffer: \"_toBuffer\",\n fromBuffer: \"_fromBuffer\",\n fromJSON: \"_fromJSON\",\n toJSON: \"_toJSON\",\n isValid: \"_isValid\",\n compare: \"compare\"\n };\n var type = new AbstractLongType(noUnpack);\n Object.keys(mapping).forEach(function(name) {\n if (methods[name] === void 0) {\n throw new Error(f2(\"missing method implementation: %s\", name));\n }\n type[mapping[name]] = methods[name];\n });\n return Object.freeze(type);\n };\n function FloatType() {\n PrimitiveType.call(this);\n }\n util.inherits(FloatType, PrimitiveType);\n FloatType.prototype._check = function(val, flags, hook) {\n var b2 = typeof val == \"number\";\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n FloatType.prototype._read = function(tap) {\n return tap.readFloat();\n };\n FloatType.prototype._skip = function(tap) {\n tap.skipFloat();\n };\n FloatType.prototype._write = function(tap, val) {\n if (typeof val != \"number\") {\n throwInvalidError(val, this);\n }\n tap.writeFloat(val);\n };\n FloatType.prototype._match = function(tap1, tap2) {\n return tap1.matchFloat(tap2);\n };\n FloatType.prototype._update = function(resolver, type) {\n switch (type.typeName) {\n case \"float\":\n case \"int\":\n resolver._read = type._read;\n break;\n case \"abstract:long\":\n case \"long\":\n resolver._read = function(tap) {\n return tap.readLong();\n };\n }\n };\n FloatType.prototype.typeName = \"float\";\n FloatType.prototype.random = function() {\n return RANDOM.nextFloat(1e3);\n };\n function DoubleType() {\n PrimitiveType.call(this);\n }\n util.inherits(DoubleType, PrimitiveType);\n DoubleType.prototype._check = function(val, flags, hook) {\n var b2 = typeof val == \"number\";\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n DoubleType.prototype._read = function(tap) {\n return tap.readDouble();\n };\n DoubleType.prototype._skip = function(tap) {\n tap.skipDouble();\n };\n DoubleType.prototype._write = function(tap, val) {\n if (typeof val != \"number\") {\n throwInvalidError(val, this);\n }\n tap.writeDouble(val);\n };\n DoubleType.prototype._match = function(tap1, tap2) {\n return tap1.matchDouble(tap2);\n };\n DoubleType.prototype._update = function(resolver, type) {\n switch (type.typeName) {\n case \"double\":\n case \"float\":\n case \"int\":\n resolver._read = type._read;\n break;\n case \"abstract:long\":\n case \"long\":\n resolver._read = function(tap) {\n return tap.readLong();\n };\n }\n };\n DoubleType.prototype.typeName = \"double\";\n DoubleType.prototype.random = function() {\n return RANDOM.nextFloat();\n };\n function StringType() {\n PrimitiveType.call(this);\n }\n util.inherits(StringType, PrimitiveType);\n StringType.prototype._check = function(val, flags, hook) {\n var b2 = typeof val == \"string\";\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n StringType.prototype._read = function(tap) {\n return tap.readString();\n };\n StringType.prototype._skip = function(tap) {\n tap.skipString();\n };\n StringType.prototype._write = function(tap, val) {\n if (typeof val != \"string\") {\n throwInvalidError(val, this);\n }\n tap.writeString(val);\n };\n StringType.prototype._match = function(tap1, tap2) {\n return tap1.matchString(tap2);\n };\n StringType.prototype._update = function(resolver, type) {\n switch (type.typeName) {\n case \"bytes\":\n case \"string\":\n resolver._read = this._read;\n }\n };\n StringType.prototype.typeName = \"string\";\n StringType.prototype.random = function() {\n return RANDOM.nextString(RANDOM.nextInt(32));\n };\n function BytesType() {\n PrimitiveType.call(this);\n }\n util.inherits(BytesType, PrimitiveType);\n BytesType.prototype._check = function(val, flags, hook) {\n var b2 = Buffer2.isBuffer(val);\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n BytesType.prototype._read = function(tap) {\n return tap.readBytes();\n };\n BytesType.prototype._skip = function(tap) {\n tap.skipBytes();\n };\n BytesType.prototype._write = function(tap, val) {\n if (!Buffer2.isBuffer(val)) {\n throwInvalidError(val, this);\n }\n tap.writeBytes(val);\n };\n BytesType.prototype._match = function(tap1, tap2) {\n return tap1.matchBytes(tap2);\n };\n BytesType.prototype._update = StringType.prototype._update;\n BytesType.prototype._copy = function(obj, opts) {\n var buf;\n switch ((opts && opts.coerce) | 0) {\n case 3:\n this._check(obj, void 0, throwInvalidError);\n return obj.toString(\"binary\");\n case 2:\n if (typeof obj != \"string\") {\n throw new Error(f2(\"cannot coerce to buffer: %j\", obj));\n }\n buf = utils.bufferFrom(obj, \"binary\");\n this._check(buf, void 0, throwInvalidError);\n return buf;\n case 1:\n if (!isJsonBuffer(obj)) {\n throw new Error(f2(\"cannot coerce to buffer: %j\", obj));\n }\n buf = utils.bufferFrom(obj.data);\n this._check(buf, void 0, throwInvalidError);\n return buf;\n default:\n this._check(obj, void 0, throwInvalidError);\n return utils.bufferFrom(obj);\n }\n };\n BytesType.prototype.compare = Buffer2.compare;\n BytesType.prototype.typeName = \"bytes\";\n BytesType.prototype.random = function() {\n return RANDOM.nextBuffer(RANDOM.nextInt(32));\n };\n function UnionType(schema, opts) {\n Type.call(this);\n if (!Array.isArray(schema)) {\n throw new Error(f2(\"non-array union schema: %j\", schema));\n }\n if (!schema.length) {\n throw new Error(\"empty union\");\n }\n this.types = Object.freeze(schema.map(function(obj) {\n return Type.forSchema(obj, opts);\n }));\n this._branchIndices = {};\n this.types.forEach(function(type, i) {\n if (Type.isType(type, \"union\")) {\n throw new Error(\"unions cannot be directly nested\");\n }\n var branch = type.branchName;\n if (this._branchIndices[branch] !== void 0) {\n throw new Error(f2(\"duplicate union branch name: %j\", branch));\n }\n this._branchIndices[branch] = i;\n }, this);\n }\n util.inherits(UnionType, Type);\n UnionType.prototype._branchConstructor = function() {\n throw new Error(\"unions cannot be directly wrapped\");\n };\n UnionType.prototype._skip = function(tap) {\n this.types[tap.readLong()]._skip(tap);\n };\n UnionType.prototype._match = function(tap1, tap2) {\n var n1 = tap1.readLong();\n var n2 = tap2.readLong();\n if (n1 === n2) {\n return this.types[n1]._match(tap1, tap2);\n } else {\n return n1 < n2 ? -1 : 1;\n }\n };\n UnionType.prototype._deref = function(schema, opts) {\n return this.types.map(function(t) {\n return t._attrs(opts);\n });\n };\n UnionType.prototype.getTypes = function() {\n return this.types;\n };\n function UnwrappedUnionType(schema, opts) {\n UnionType.call(this, schema, opts);\n this._dynamicBranches = null;\n this._bucketIndices = {};\n this.types.forEach(function(type, index) {\n if (Type.isType(type, \"abstract\", \"logical\")) {\n if (!this._dynamicBranches) {\n this._dynamicBranches = [];\n }\n this._dynamicBranches.push({ index, type });\n } else {\n var bucket = getTypeBucket(type);\n if (this._bucketIndices[bucket] !== void 0) {\n throw new Error(f2(\"ambiguous unwrapped union: %j\", this));\n }\n this._bucketIndices[bucket] = index;\n }\n }, this);\n Object.freeze(this);\n }\n util.inherits(UnwrappedUnionType, UnionType);\n UnwrappedUnionType.prototype._getIndex = function(val) {\n var index = this._bucketIndices[getValueBucket(val)];\n if (this._dynamicBranches) {\n index = this._getBranchIndex(val, index);\n }\n return index;\n };\n UnwrappedUnionType.prototype._getBranchIndex = function(any, index) {\n var logicalBranches = this._dynamicBranches;\n var i, l, branch;\n for (i = 0, l = logicalBranches.length; i < l; i++) {\n branch = logicalBranches[i];\n if (branch.type._check(any)) {\n if (index === void 0) {\n index = branch.index;\n } else {\n throw new Error(\"ambiguous conversion\");\n }\n }\n }\n return index;\n };\n UnwrappedUnionType.prototype._check = function(val, flags, hook, path) {\n var index = this._getIndex(val);\n var b2 = index !== void 0;\n if (b2) {\n return this.types[index]._check(val, flags, hook, path);\n }\n if (hook) {\n hook(val, this);\n }\n return b2;\n };\n UnwrappedUnionType.prototype._read = function(tap) {\n var index = tap.readLong();\n var branchType = this.types[index];\n if (branchType) {\n return branchType._read(tap);\n } else {\n throw new Error(f2(\"invalid union index: %s\", index));\n }\n };\n UnwrappedUnionType.prototype._write = function(tap, val) {\n var index = this._getIndex(val);\n if (index === void 0) {\n throwInvalidError(val, this);\n }\n tap.writeLong(index);\n if (val !== null) {\n this.types[index]._write(tap, val);\n }\n };\n UnwrappedUnionType.prototype._update = function(resolver, type, opts) {\n var i, l, typeResolver;\n for (i = 0, l = this.types.length; i < l; i++) {\n try {\n typeResolver = this.types[i].createResolver(type, opts);\n } catch (err) {\n continue;\n }\n resolver._read = function(tap) {\n return typeResolver._read(tap);\n };\n return;\n }\n };\n UnwrappedUnionType.prototype._copy = function(val, opts) {\n var coerce = opts && opts.coerce | 0;\n var wrap = opts && opts.wrap | 0;\n var index;\n if (wrap === 2) {\n index = 0;\n } else {\n switch (coerce) {\n case 1:\n if (isJsonBuffer(val) && this._bucketIndices.buffer !== void 0) {\n index = this._bucketIndices.buffer;\n } else {\n index = this._getIndex(val);\n }\n break;\n case 2:\n if (val === null) {\n index = this._bucketIndices[\"null\"];\n } else if (typeof val === \"object\") {\n var keys = Object.keys(val);\n if (keys.length === 1) {\n index = this._branchIndices[keys[0]];\n val = val[keys[0]];\n }\n }\n break;\n default:\n index = this._getIndex(val);\n }\n if (index === void 0) {\n throwInvalidError(val, this);\n }\n }\n var type = this.types[index];\n if (val === null || wrap === 3) {\n return type._copy(val, opts);\n } else {\n switch (coerce) {\n case 3:\n var obj = {};\n obj[type.branchName] = type._copy(val, opts);\n return obj;\n default:\n return type._copy(val, opts);\n }\n }\n };\n UnwrappedUnionType.prototype.compare = function(val1, val2) {\n var index1 = this._getIndex(val1);\n var index2 = this._getIndex(val2);\n if (index1 === void 0) {\n throwInvalidError(val1, this);\n } else if (index2 === void 0) {\n throwInvalidError(val2, this);\n } else if (index1 === index2) {\n return this.types[index1].compare(val1, val2);\n } else {\n return utils.compare(index1, index2);\n }\n };\n UnwrappedUnionType.prototype.typeName = \"union:unwrapped\";\n UnwrappedUnionType.prototype.random = function() {\n var index = RANDOM.nextInt(this.types.length);\n return this.types[index].random();\n };\n function WrappedUnionType(schema, opts) {\n UnionType.call(this, schema, opts);\n Object.freeze(this);\n }\n util.inherits(WrappedUnionType, UnionType);\n WrappedUnionType.prototype._check = function(val, flags, hook, path) {\n var b2 = false;\n if (val === null) {\n b2 = this._branchIndices[\"null\"] !== void 0;\n } else if (typeof val == \"object\") {\n var keys = Object.keys(val);\n if (keys.length === 1) {\n var name = keys[0];\n var index = this._branchIndices[name];\n if (index !== void 0) {\n if (hook) {\n path.push(name);\n b2 = this.types[index]._check(val[name], flags, hook, path);\n path.pop();\n return b2;\n } else {\n return this.types[index]._check(val[name], flags);\n }\n }\n }\n }\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n WrappedUnionType.prototype._read = function(tap) {\n var type = this.types[tap.readLong()];\n if (!type) {\n throw new Error(f2(\"invalid union index\"));\n }\n var Branch = type._branchConstructor;\n if (Branch === null) {\n return null;\n } else {\n return new Branch(type._read(tap));\n }\n };\n WrappedUnionType.prototype._write = function(tap, val) {\n var index, keys, name;\n if (val === null) {\n index = this._branchIndices[\"null\"];\n if (index === void 0) {\n throwInvalidError(val, this);\n }\n tap.writeLong(index);\n } else {\n keys = Object.keys(val);\n if (keys.length === 1) {\n name = keys[0];\n index = this._branchIndices[name];\n }\n if (index === void 0) {\n throwInvalidError(val, this);\n }\n tap.writeLong(index);\n this.types[index]._write(tap, val[name]);\n }\n };\n WrappedUnionType.prototype._update = function(resolver, type, opts) {\n var i, l, typeResolver, Branch;\n for (i = 0, l = this.types.length; i < l; i++) {\n try {\n typeResolver = this.types[i].createResolver(type, opts);\n } catch (err) {\n continue;\n }\n Branch = this.types[i]._branchConstructor;\n if (Branch) {\n resolver._read = function(tap) {\n return new Branch(typeResolver._read(tap));\n };\n } else {\n resolver._read = function() {\n return null;\n };\n }\n return;\n }\n };\n WrappedUnionType.prototype._copy = function(val, opts) {\n var wrap = opts && opts.wrap | 0;\n if (wrap === 2) {\n var firstType = this.types[0];\n if (val === null && firstType.typeName === \"null\") {\n return null;\n }\n return new firstType._branchConstructor(firstType._copy(val, opts));\n }\n if (val === null && this._branchIndices[\"null\"] !== void 0) {\n return null;\n }\n var i, l, obj;\n if (typeof val == \"object\") {\n var keys = Object.keys(val);\n if (keys.length === 1) {\n var name = keys[0];\n i = this._branchIndices[name];\n if (i === void 0 && opts.qualifyNames) {\n var j2, type;\n for (j2 = 0, l = this.types.length; j2 < l; j2++) {\n type = this.types[j2];\n if (type.name && name === utils.unqualify(type.name)) {\n i = j2;\n break;\n }\n }\n }\n if (i !== void 0) {\n obj = this.types[i]._copy(val[name], opts);\n }\n }\n }\n if (wrap === 1 && obj === void 0) {\n i = 0;\n l = this.types.length;\n while (i < l && obj === void 0) {\n try {\n obj = this.types[i]._copy(val, opts);\n } catch (err) {\n i++;\n }\n }\n }\n if (obj !== void 0) {\n return wrap === 3 ? obj : new this.types[i]._branchConstructor(obj);\n }\n throwInvalidError(val, this);\n };\n WrappedUnionType.prototype.compare = function(val1, val2) {\n var name1 = val1 === null ? \"null\" : Object.keys(val1)[0];\n var name2 = val2 === null ? \"null\" : Object.keys(val2)[0];\n var index = this._branchIndices[name1];\n if (name1 === name2) {\n return name1 === \"null\" ? 0 : this.types[index].compare(val1[name1], val2[name1]);\n } else {\n return utils.compare(index, this._branchIndices[name2]);\n }\n };\n WrappedUnionType.prototype.typeName = \"union:wrapped\";\n WrappedUnionType.prototype.random = function() {\n var index = RANDOM.nextInt(this.types.length);\n var type = this.types[index];\n var Branch = type._branchConstructor;\n if (!Branch) {\n return null;\n }\n return new Branch(type.random());\n };\n function EnumType(schema, opts) {\n Type.call(this, schema, opts);\n if (!Array.isArray(schema.symbols) || !schema.symbols.length) {\n throw new Error(f2(\"invalid enum symbols: %j\", schema.symbols));\n }\n this.symbols = Object.freeze(schema.symbols.slice());\n this._indices = {};\n this.symbols.forEach(function(symbol, i) {\n if (!utils.isValidName(symbol)) {\n throw new Error(f2(\"invalid %s symbol: %j\", this, symbol));\n }\n if (this._indices[symbol] !== void 0) {\n throw new Error(f2(\"duplicate %s symbol: %j\", this, symbol));\n }\n this._indices[symbol] = i;\n }, this);\n this.default = schema.default;\n if (this.default !== void 0 && this._indices[this.default] === void 0) {\n throw new Error(f2(\"invalid %s default: %j\", this, this.default));\n }\n this._branchConstructor = this._createBranchConstructor();\n Object.freeze(this);\n }\n util.inherits(EnumType, Type);\n EnumType.prototype._check = function(val, flags, hook) {\n var b2 = this._indices[val] !== void 0;\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n EnumType.prototype._read = function(tap) {\n var index = tap.readLong();\n var symbol = this.symbols[index];\n if (symbol === void 0) {\n throw new Error(f2(\"invalid %s enum index: %s\", this.name, index));\n }\n return symbol;\n };\n EnumType.prototype._skip = function(tap) {\n tap.skipLong();\n };\n EnumType.prototype._write = function(tap, val) {\n var index = this._indices[val];\n if (index === void 0) {\n throwInvalidError(val, this);\n }\n tap.writeLong(index);\n };\n EnumType.prototype._match = function(tap1, tap2) {\n return tap1.matchLong(tap2);\n };\n EnumType.prototype.compare = function(val1, val2) {\n return utils.compare(this._indices[val1], this._indices[val2]);\n };\n EnumType.prototype._update = function(resolver, type, opts) {\n var symbols = this.symbols;\n if (type.typeName === \"enum\" && hasCompatibleName(this, type, !opts.ignoreNamespaces) && (type.symbols.every(function(s) {\n return ~symbols.indexOf(s);\n }) || this.default !== void 0)) {\n resolver.symbols = type.symbols.map(function(s) {\n return this._indices[s] === void 0 ? this.default : s;\n }, this);\n resolver._read = type._read;\n }\n };\n EnumType.prototype._copy = function(val) {\n this._check(val, void 0, throwInvalidError);\n return val;\n };\n EnumType.prototype._deref = function(schema) {\n schema.symbols = this.symbols;\n };\n EnumType.prototype.getSymbols = function() {\n return this.symbols;\n };\n EnumType.prototype.typeName = \"enum\";\n EnumType.prototype.random = function() {\n return RANDOM.choice(this.symbols);\n };\n function FixedType(schema, opts) {\n Type.call(this, schema, opts);\n if (schema.size !== (schema.size | 0) || schema.size < 0) {\n throw new Error(f2(\"invalid %s size\", this.branchName));\n }\n this.size = schema.size | 0;\n this._branchConstructor = this._createBranchConstructor();\n Object.freeze(this);\n }\n util.inherits(FixedType, Type);\n FixedType.prototype._check = function(val, flags, hook) {\n var b2 = Buffer2.isBuffer(val) && val.length === this.size;\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n FixedType.prototype._read = function(tap) {\n return tap.readFixed(this.size);\n };\n FixedType.prototype._skip = function(tap) {\n tap.skipFixed(this.size);\n };\n FixedType.prototype._write = function(tap, val) {\n if (!Buffer2.isBuffer(val) || val.length !== this.size) {\n throwInvalidError(val, this);\n }\n tap.writeFixed(val, this.size);\n };\n FixedType.prototype._match = function(tap1, tap2) {\n return tap1.matchFixed(tap2, this.size);\n };\n FixedType.prototype.compare = Buffer2.compare;\n FixedType.prototype._update = function(resolver, type, opts) {\n if (type.typeName === \"fixed\" && this.size === type.size && hasCompatibleName(this, type, !opts.ignoreNamespaces)) {\n resolver.size = this.size;\n resolver._read = this._read;\n }\n };\n FixedType.prototype._copy = BytesType.prototype._copy;\n FixedType.prototype._deref = function(schema) {\n schema.size = this.size;\n };\n FixedType.prototype.getSize = function() {\n return this.size;\n };\n FixedType.prototype.typeName = \"fixed\";\n FixedType.prototype.random = function() {\n return RANDOM.nextBuffer(this.size);\n };\n function MapType(schema, opts) {\n Type.call(this);\n if (!schema.values) {\n throw new Error(f2(\"missing map values: %j\", schema));\n }\n this.valuesType = Type.forSchema(schema.values, opts);\n this._branchConstructor = this._createBranchConstructor();\n Object.freeze(this);\n }\n util.inherits(MapType, Type);\n MapType.prototype._check = function(val, flags, hook, path) {\n if (!val || typeof val != \"object\" || Array.isArray(val)) {\n if (hook) {\n hook(val, this);\n }\n return false;\n }\n var keys = Object.keys(val);\n var b2 = true;\n var i, l, j2, key;\n if (hook) {\n j2 = path.length;\n path.push(\"\");\n for (i = 0, l = keys.length; i < l; i++) {\n key = path[j2] = keys[i];\n if (!this.valuesType._check(val[key], flags, hook, path)) {\n b2 = false;\n }\n }\n path.pop();\n } else {\n for (i = 0, l = keys.length; i < l; i++) {\n if (!this.valuesType._check(val[keys[i]], flags)) {\n return false;\n }\n }\n }\n return b2;\n };\n MapType.prototype._read = function(tap) {\n var values = this.valuesType;\n var val = {};\n var n;\n while (n = readArraySize(tap)) {\n while (n--) {\n var key = tap.readString();\n val[key] = values._read(tap);\n }\n }\n return val;\n };\n MapType.prototype._skip = function(tap) {\n var values = this.valuesType;\n var len, n;\n while (n = tap.readLong()) {\n if (n < 0) {\n len = tap.readLong();\n tap.pos += len;\n } else {\n while (n--) {\n tap.skipString();\n values._skip(tap);\n }\n }\n }\n };\n MapType.prototype._write = function(tap, val) {\n if (!val || typeof val != \"object\" || Array.isArray(val)) {\n throwInvalidError(val, this);\n }\n var values = this.valuesType;\n var keys = Object.keys(val);\n var n = keys.length;\n var i, key;\n if (n) {\n tap.writeLong(n);\n for (i = 0; i < n; i++) {\n key = keys[i];\n tap.writeString(key);\n values._write(tap, val[key]);\n }\n }\n tap.writeLong(0);\n };\n MapType.prototype._match = function() {\n throw new Error(\"maps cannot be compared\");\n };\n MapType.prototype._update = function(rsv, type, opts) {\n if (type.typeName === \"map\") {\n rsv.valuesType = this.valuesType.createResolver(type.valuesType, opts);\n rsv._read = this._read;\n }\n };\n MapType.prototype._copy = function(val, opts) {\n if (val && typeof val == \"object\" && !Array.isArray(val)) {\n var values = this.valuesType;\n var keys = Object.keys(val);\n var i, l, key;\n var copy = {};\n for (i = 0, l = keys.length; i < l; i++) {\n key = keys[i];\n copy[key] = values._copy(val[key], opts);\n }\n return copy;\n }\n throwInvalidError(val, this);\n };\n MapType.prototype.compare = MapType.prototype._match;\n MapType.prototype.typeName = \"map\";\n MapType.prototype.getValuesType = function() {\n return this.valuesType;\n };\n MapType.prototype.random = function() {\n var val = {};\n var i, l;\n for (i = 0, l = RANDOM.nextInt(10); i < l; i++) {\n val[RANDOM.nextString(RANDOM.nextInt(20))] = this.valuesType.random();\n }\n return val;\n };\n MapType.prototype._deref = function(schema, opts) {\n schema.values = this.valuesType._attrs(opts);\n };\n function ArrayType(schema, opts) {\n Type.call(this);\n if (!schema.items) {\n throw new Error(f2(\"missing array items: %j\", schema));\n }\n this.itemsType = Type.forSchema(schema.items, opts);\n this._branchConstructor = this._createBranchConstructor();\n Object.freeze(this);\n }\n util.inherits(ArrayType, Type);\n ArrayType.prototype._check = function(val, flags, hook, path) {\n if (!Array.isArray(val)) {\n if (hook) {\n hook(val, this);\n }\n return false;\n }\n var items = this.itemsType;\n var b2 = true;\n var i, l, j2;\n if (hook) {\n j2 = path.length;\n path.push(\"\");\n for (i = 0, l = val.length; i < l; i++) {\n path[j2] = \"\" + i;\n if (!items._check(val[i], flags, hook, path)) {\n b2 = false;\n }\n }\n path.pop();\n } else {\n for (i = 0, l = val.length; i < l; i++) {\n if (!items._check(val[i], flags)) {\n return false;\n }\n }\n }\n return b2;\n };\n ArrayType.prototype._read = function(tap) {\n var items = this.itemsType;\n var i = 0;\n var val, n;\n while (n = tap.readLong()) {\n if (n < 0) {\n n = -n;\n tap.skipLong();\n }\n val = val || new Array(n);\n while (n--) {\n val[i++] = items._read(tap);\n }\n }\n return val || [];\n };\n ArrayType.prototype._skip = function(tap) {\n var items = this.itemsType;\n var len, n;\n while (n = tap.readLong()) {\n if (n < 0) {\n len = tap.readLong();\n tap.pos += len;\n } else {\n while (n--) {\n items._skip(tap);\n }\n }\n }\n };\n ArrayType.prototype._write = function(tap, val) {\n if (!Array.isArray(val)) {\n throwInvalidError(val, this);\n }\n var items = this.itemsType;\n var n = val.length;\n var i;\n if (n) {\n tap.writeLong(n);\n for (i = 0; i < n; i++) {\n items._write(tap, val[i]);\n }\n }\n tap.writeLong(0);\n };\n ArrayType.prototype._match = function(tap1, tap2) {\n var n1 = tap1.readLong();\n var n2 = tap2.readLong();\n var f3;\n while (n1 && n2) {\n f3 = this.itemsType._match(tap1, tap2);\n if (f3) {\n return f3;\n }\n if (!--n1) {\n n1 = readArraySize(tap1);\n }\n if (!--n2) {\n n2 = readArraySize(tap2);\n }\n }\n return utils.compare(n1, n2);\n };\n ArrayType.prototype._update = function(resolver, type, opts) {\n if (type.typeName === \"array\") {\n resolver.itemsType = this.itemsType.createResolver(type.itemsType, opts);\n resolver._read = this._read;\n }\n };\n ArrayType.prototype._copy = function(val, opts) {\n if (!Array.isArray(val)) {\n throwInvalidError(val, this);\n }\n var items = new Array(val.length);\n var i, l;\n for (i = 0, l = val.length; i < l; i++) {\n items[i] = this.itemsType._copy(val[i], opts);\n }\n return items;\n };\n ArrayType.prototype._deref = function(schema, opts) {\n schema.items = this.itemsType._attrs(opts);\n };\n ArrayType.prototype.compare = function(val1, val2) {\n var n1 = val1.length;\n var n2 = val2.length;\n var i, l, f3;\n for (i = 0, l = Math.min(n1, n2); i < l; i++) {\n if (f3 = this.itemsType.compare(val1[i], val2[i])) {\n return f3;\n }\n }\n return utils.compare(n1, n2);\n };\n ArrayType.prototype.getItemsType = function() {\n return this.itemsType;\n };\n ArrayType.prototype.typeName = \"array\";\n ArrayType.prototype.random = function() {\n var arr = [];\n var i, l;\n for (i = 0, l = RANDOM.nextInt(10); i < l; i++) {\n arr.push(this.itemsType.random());\n }\n return arr;\n };\n function RecordType(schema, opts) {\n opts = opts || {};\n var namespace = opts.namespace;\n if (schema.namespace !== void 0) {\n opts.namespace = schema.namespace;\n } else if (schema.name) {\n var ns = utils.impliedNamespace(schema.name);\n if (ns !== void 0) {\n opts.namespace = ns;\n }\n }\n Type.call(this, schema, opts);\n if (!Array.isArray(schema.fields)) {\n throw new Error(f2(\"non-array record fields: %j\", schema.fields));\n }\n if (utils.hasDuplicates(schema.fields, function(f3) {\n return f3.name;\n })) {\n throw new Error(f2(\"duplicate field name: %j\", schema.fields));\n }\n this._fieldsByName = {};\n this.fields = Object.freeze(schema.fields.map(function(f3) {\n var field = new Field(f3, opts);\n this._fieldsByName[field.name] = field;\n return field;\n }, this));\n this._branchConstructor = this._createBranchConstructor();\n this._isError = schema.type === \"error\";\n this.recordConstructor = this._createConstructor(\n opts.errorStackTraces,\n opts.omitRecordMethods\n );\n this._read = this._createReader();\n this._skip = this._createSkipper();\n this._write = this._createWriter();\n this._check = this._createChecker();\n opts.namespace = namespace;\n Object.freeze(this);\n }\n util.inherits(RecordType, Type);\n RecordType.prototype._getConstructorName = function() {\n return this.name ? utils.capitalize(utils.unqualify(this.name)) : this._isError ? \"Error$\" : \"Record$\";\n };\n RecordType.prototype._createConstructor = function(errorStack, plainRecords) {\n var outerArgs = [];\n var innerArgs = [];\n var ds = [];\n var innerBody = \"\";\n var i, l, field, name, defaultValue, hasDefault, stackField;\n for (i = 0, l = this.fields.length; i < l; i++) {\n field = this.fields[i];\n defaultValue = field.defaultValue;\n hasDefault = defaultValue() !== void 0;\n name = field.name;\n if (errorStack && this._isError && name === \"stack\" && Type.isType(field.type, \"string\") && !hasDefault) {\n stackField = field;\n }\n innerArgs.push(\"v\" + i);\n innerBody += \" \";\n if (!hasDefault) {\n innerBody += \"this.\" + name + \" = v\" + i + \";\\n\";\n } else {\n innerBody += \"if (v\" + i + \" === undefined) { \";\n innerBody += \"this.\" + name + \" = d\" + ds.length + \"(); \";\n innerBody += \"} else { this.\" + name + \" = v\" + i + \"; }\\n\";\n outerArgs.push(\"d\" + ds.length);\n ds.push(defaultValue);\n }\n }\n if (stackField) {\n innerBody += \" if (this.stack === undefined) { \";\n if (typeof Error.captureStackTrace == \"function\") {\n innerBody += \"Error.captureStackTrace(this, this.constructor);\";\n } else {\n innerBody += \"this.stack = Error().stack;\";\n }\n innerBody += \" }\\n\";\n }\n var outerBody = \"return function \" + this._getConstructorName() + \"(\";\n outerBody += innerArgs.join() + \") {\\n\" + innerBody + \"};\";\n var Record = new Function(outerArgs.join(), outerBody).apply(void 0, ds);\n if (plainRecords) {\n return Record;\n }\n var self = this;\n Record.getType = function() {\n return self;\n };\n Record.type = self;\n if (this._isError) {\n util.inherits(Record, Error);\n Record.prototype.name = this._getConstructorName();\n }\n Record.prototype.clone = function(o) {\n return self.clone(this, o);\n };\n Record.prototype.compare = function(v2) {\n return self.compare(this, v2);\n };\n Record.prototype.isValid = function(o) {\n return self.isValid(this, o);\n };\n Record.prototype.toBuffer = function() {\n return self.toBuffer(this);\n };\n Record.prototype.toString = function() {\n return self.toString(this);\n };\n Record.prototype.wrap = function() {\n return self.wrap(this);\n };\n Record.prototype.wrapped = Record.prototype.wrap;\n return Record;\n };\n RecordType.prototype._createChecker = function() {\n var names = [];\n var values = [];\n var name = this._getConstructorName();\n var body = \"return function check\" + name + \"(v, f, h, p) {\\n\";\n body += \" if (\\n\";\n body += \" v === null ||\\n\";\n body += \" typeof v != 'object' ||\\n\";\n body += \" (f && !this._checkFields(v))\\n\";\n body += \" ) {\\n\";\n body += \" if (h) { h(v, this); }\\n\";\n body += \" return false;\\n\";\n body += \" }\\n\";\n if (!this.fields.length) {\n body += \" return true;\\n\";\n } else {\n for (i = 0, l = this.fields.length; i < l; i++) {\n field = this.fields[i];\n names.push(\"t\" + i);\n values.push(field.type);\n if (field.defaultValue() !== void 0) {\n body += \" var v\" + i + \" = v.\" + field.name + \";\\n\";\n }\n }\n body += \" if (h) {\\n\";\n body += \" var b = 1;\\n\";\n body += \" var j = p.length;\\n\";\n body += \" p.push('');\\n\";\n var i, l, field;\n for (i = 0, l = this.fields.length; i < l; i++) {\n field = this.fields[i];\n body += \" p[j] = '\" + field.name + \"';\\n\";\n body += \" b &= \";\n if (field.defaultValue() === void 0) {\n body += \"t\" + i + \"._check(v.\" + field.name + \", f, h, p);\\n\";\n } else {\n body += \"v\" + i + \" === undefined || \";\n body += \"t\" + i + \"._check(v\" + i + \", f, h, p);\\n\";\n }\n }\n body += \" p.pop();\\n\";\n body += \" return !!b;\\n\";\n body += \" } else {\\n return (\\n \";\n body += this.fields.map(function(field2, i2) {\n return field2.defaultValue() === void 0 ? \"t\" + i2 + \"._check(v.\" + field2.name + \", f)\" : \"(v\" + i2 + \" === undefined || t\" + i2 + \"._check(v\" + i2 + \", f))\";\n }).join(\" &&\\n \");\n body += \"\\n );\\n }\\n\";\n }\n body += \"};\";\n return new Function(names.join(), body).apply(void 0, values);\n };\n RecordType.prototype._createReader = function() {\n var names = [];\n var values = [this.recordConstructor];\n var i, l;\n for (i = 0, l = this.fields.length; i < l; i++) {\n names.push(\"t\" + i);\n values.push(this.fields[i].type);\n }\n var name = this._getConstructorName();\n var body = \"return function read\" + name + \"(t) {\\n\";\n body += \" return new \" + name + \"(\\n \";\n body += names.map(function(s) {\n return s + \"._read(t)\";\n }).join(\",\\n \");\n body += \"\\n );\\n};\";\n names.unshift(name);\n return new Function(names.join(), body).apply(void 0, values);\n };\n RecordType.prototype._createSkipper = function() {\n var args = [];\n var body = \"return function skip\" + this._getConstructorName() + \"(t) {\\n\";\n var values = [];\n var i, l;\n for (i = 0, l = this.fields.length; i < l; i++) {\n args.push(\"t\" + i);\n values.push(this.fields[i].type);\n body += \" t\" + i + \"._skip(t);\\n\";\n }\n body += \"}\";\n return new Function(args.join(), body).apply(void 0, values);\n };\n RecordType.prototype._createWriter = function() {\n var args = [];\n var name = this._getConstructorName();\n var body = \"return function write\" + name + \"(t, v) {\\n\";\n var values = [];\n var i, l, field, value;\n for (i = 0, l = this.fields.length; i < l; i++) {\n field = this.fields[i];\n args.push(\"t\" + i);\n values.push(field.type);\n body += \" \";\n if (field.defaultValue() === void 0) {\n body += \"t\" + i + \"._write(t, v.\" + field.name + \");\\n\";\n } else {\n value = field.type.toBuffer(field.defaultValue()).toString(\"binary\");\n args.push(\"d\" + i);\n values.push(value);\n body += \"var v\" + i + \" = v.\" + field.name + \";\\n\";\n body += \"if (v\" + i + \" === undefined) {\\n\";\n body += \" t.writeBinary(d\" + i + \", \" + value.length + \");\\n\";\n body += \" } else {\\n t\" + i + \"._write(t, v\" + i + \");\\n }\\n\";\n }\n }\n body += \"}\";\n return new Function(args.join(), body).apply(void 0, values);\n };\n RecordType.prototype._update = function(resolver, type, opts) {\n if (!hasCompatibleName(this, type, !opts.ignoreNamespaces)) {\n throw new Error(f2(\"no alias found for %s\", type.name));\n }\n var rFields = this.fields;\n var wFields = type.fields;\n var wFieldsMap = utils.toMap(wFields, function(f3) {\n return f3.name;\n });\n var innerArgs = [];\n var resolvers = {};\n var i, j2, field, name, names, matches, fieldResolver;\n for (i = 0; i < rFields.length; i++) {\n field = rFields[i];\n names = getAliases(field);\n matches = [];\n for (j2 = 0; j2 < names.length; j2++) {\n name = names[j2];\n if (wFieldsMap[name]) {\n matches.push(name);\n }\n }\n if (matches.length > 1) {\n throw new Error(\n f2(\"ambiguous aliasing for %s.%s (%s)\", type.name, field.name, matches)\n );\n }\n if (!matches.length) {\n if (field.defaultValue() === void 0) {\n throw new Error(\n f2(\"no matching field for default-less %s.%s\", type.name, field.name)\n );\n }\n innerArgs.push(\"undefined\");\n } else {\n name = matches[0];\n fieldResolver = {\n resolver: field.type.createResolver(wFieldsMap[name].type, opts),\n name: \"_\" + field.name\n // Reader field name.\n };\n if (!resolvers[name]) {\n resolvers[name] = [fieldResolver];\n } else {\n resolvers[name].push(fieldResolver);\n }\n innerArgs.push(fieldResolver.name);\n }\n }\n var lazyIndex = -1;\n i = wFields.length;\n while (i && resolvers[wFields[--i].name] === void 0) {\n lazyIndex = i;\n }\n var uname = this._getConstructorName();\n var args = [uname];\n var values = [this.recordConstructor];\n var body = \" return function read\" + uname + \"(t, b) {\\n\";\n for (i = 0; i < wFields.length; i++) {\n if (i === lazyIndex) {\n body += \" if (!b) {\\n\";\n }\n field = type.fields[i];\n name = field.name;\n if (resolvers[name] === void 0) {\n body += ~lazyIndex && i >= lazyIndex ? \" \" : \" \";\n args.push(\"r\" + i);\n values.push(field.type);\n body += \"r\" + i + \"._skip(t);\\n\";\n } else {\n j2 = resolvers[name].length;\n while (j2--) {\n body += ~lazyIndex && i >= lazyIndex ? \" \" : \" \";\n args.push(\"r\" + i + \"f\" + j2);\n fieldResolver = resolvers[name][j2];\n values.push(fieldResolver.resolver);\n body += \"var \" + fieldResolver.name + \" = \";\n body += \"r\" + i + \"f\" + j2 + \"._\" + (j2 ? \"peek\" : \"read\") + \"(t);\\n\";\n }\n }\n }\n if (~lazyIndex) {\n body += \" }\\n\";\n }\n body += \" return new \" + uname + \"(\" + innerArgs.join() + \");\\n};\";\n resolver._read = new Function(args.join(), body).apply(void 0, values);\n };\n RecordType.prototype._match = function(tap1, tap2) {\n var fields = this.fields;\n var i, l, field, order, type;\n for (i = 0, l = fields.length; i < l; i++) {\n field = fields[i];\n order = field._order;\n type = field.type;\n if (order) {\n order *= type._match(tap1, tap2);\n if (order) {\n return order;\n }\n } else {\n type._skip(tap1);\n type._skip(tap2);\n }\n }\n return 0;\n };\n RecordType.prototype._checkFields = function(obj) {\n var keys = Object.keys(obj);\n var i, l;\n for (i = 0, l = keys.length; i < l; i++) {\n if (!this._fieldsByName[keys[i]]) {\n return false;\n }\n }\n return true;\n };\n RecordType.prototype._copy = function(val, opts) {\n var hook = opts && opts.fieldHook;\n var values = [void 0];\n var i, l, field, value;\n for (i = 0, l = this.fields.length; i < l; i++) {\n field = this.fields[i];\n value = val[field.name];\n if (value === void 0 && field.hasOwnProperty(\"defaultValue\")) {\n value = field.defaultValue();\n }\n if (opts && !opts.skip || value !== void 0) {\n value = field.type._copy(value, opts);\n }\n if (hook) {\n value = hook(field, value, this);\n }\n values.push(value);\n }\n var Record = this.recordConstructor;\n return new (Record.bind.apply(Record, values))();\n };\n RecordType.prototype._deref = function(schema, opts) {\n schema.fields = this.fields.map(function(field) {\n var fieldType = field.type;\n var fieldSchema = {\n name: field.name,\n type: fieldType._attrs(opts)\n };\n if (opts.exportAttrs) {\n var val = field.defaultValue();\n if (val !== void 0) {\n fieldSchema[\"default\"] = fieldType._copy(val, { coerce: 3, wrap: 3 });\n }\n var fieldOrder = field.order;\n if (fieldOrder !== \"ascending\") {\n fieldSchema.order = fieldOrder;\n }\n var fieldAliases = field.aliases;\n if (fieldAliases.length) {\n fieldSchema.aliases = fieldAliases;\n }\n var fieldDoc = field.doc;\n if (fieldDoc !== void 0) {\n fieldSchema.doc = fieldDoc;\n }\n }\n return fieldSchema;\n });\n };\n RecordType.prototype.compare = function(val1, val2) {\n var fields = this.fields;\n var i, l, field, name, order, type;\n for (i = 0, l = fields.length; i < l; i++) {\n field = fields[i];\n name = field.name;\n order = field._order;\n type = field.type;\n if (order) {\n order *= type.compare(val1[name], val2[name]);\n if (order) {\n return order;\n }\n }\n }\n return 0;\n };\n RecordType.prototype.random = function() {\n var fields = this.fields.map(function(f3) {\n return f3.type.random();\n });\n fields.unshift(void 0);\n var Record = this.recordConstructor;\n return new (Record.bind.apply(Record, fields))();\n };\n RecordType.prototype.field = function(name) {\n return this._fieldsByName[name];\n };\n RecordType.prototype.getField = RecordType.prototype.field;\n RecordType.prototype.getFields = function() {\n return this.fields;\n };\n RecordType.prototype.getRecordConstructor = function() {\n return this.recordConstructor;\n };\n Object.defineProperty(RecordType.prototype, \"typeName\", {\n enumerable: true,\n get: function() {\n return this._isError ? \"error\" : \"record\";\n }\n });\n function LogicalType(schema, opts) {\n this._logicalTypeName = schema.logicalType;\n Type.call(this);\n LOGICAL_TYPE = this;\n try {\n this._underlyingType = Type.forSchema(schema, opts);\n } finally {\n LOGICAL_TYPE = null;\n var l = UNDERLYING_TYPES.length;\n if (l && UNDERLYING_TYPES[l - 1][0] === this) {\n UNDERLYING_TYPES.pop();\n }\n }\n if (Type.isType(this.underlyingType, \"union\")) {\n this._branchConstructor = this.underlyingType._branchConstructor;\n } else {\n this._branchConstructor = this.underlyingType._createBranchConstructor();\n }\n }\n util.inherits(LogicalType, Type);\n Object.defineProperty(LogicalType.prototype, \"typeName\", {\n enumerable: true,\n get: function() {\n return \"logical:\" + this._logicalTypeName;\n }\n });\n Object.defineProperty(LogicalType.prototype, \"underlyingType\", {\n enumerable: true,\n get: function() {\n if (this._underlyingType) {\n return this._underlyingType;\n }\n var i, l, arr;\n for (i = 0, l = UNDERLYING_TYPES.length; i < l; i++) {\n arr = UNDERLYING_TYPES[i];\n if (arr[0] === this) {\n return arr[1];\n }\n }\n }\n });\n LogicalType.prototype.getUnderlyingType = function() {\n return this.underlyingType;\n };\n LogicalType.prototype._read = function(tap) {\n return this._fromValue(this.underlyingType._read(tap));\n };\n LogicalType.prototype._write = function(tap, any) {\n this.underlyingType._write(tap, this._toValue(any));\n };\n LogicalType.prototype._check = function(any, flags, hook, path) {\n try {\n var val = this._toValue(any);\n } catch (err) {\n }\n if (val === void 0) {\n if (hook) {\n hook(any, this);\n }\n return false;\n }\n return this.underlyingType._check(val, flags, hook, path);\n };\n LogicalType.prototype._copy = function(any, opts) {\n var type = this.underlyingType;\n switch (opts && opts.coerce) {\n case 3:\n return type._copy(this._toValue(any), opts);\n case 2:\n return this._fromValue(type._copy(any, opts));\n default:\n return this._fromValue(type._copy(this._toValue(any), opts));\n }\n };\n LogicalType.prototype._update = function(resolver, type, opts) {\n var _fromValue = this._resolve(type, opts);\n if (_fromValue) {\n resolver._read = function(tap) {\n return _fromValue(type._read(tap));\n };\n }\n };\n LogicalType.prototype.compare = function(obj1, obj2) {\n var val1 = this._toValue(obj1);\n var val2 = this._toValue(obj2);\n return this.underlyingType.compare(val1, val2);\n };\n LogicalType.prototype.random = function() {\n return this._fromValue(this.underlyingType.random());\n };\n LogicalType.prototype._deref = function(schema, opts) {\n var type = this.underlyingType;\n var isVisited = type.name !== void 0 && opts.derefed[type.name];\n schema = type._attrs(opts);\n if (!isVisited && opts.exportAttrs) {\n if (typeof schema == \"string\") {\n schema = { type: schema };\n }\n schema.logicalType = this._logicalTypeName;\n this._export(schema);\n }\n return schema;\n };\n LogicalType.prototype._skip = function(tap) {\n this.underlyingType._skip(tap);\n };\n LogicalType.prototype._export = function() {\n };\n LogicalType.prototype._fromValue = utils.abstractFunction;\n LogicalType.prototype._toValue = utils.abstractFunction;\n LogicalType.prototype._resolve = utils.abstractFunction;\n function AbstractLongType(noUnpack) {\n this._concreteTypeName = \"long\";\n PrimitiveType.call(this, true);\n this._noUnpack = !!noUnpack;\n }\n util.inherits(AbstractLongType, LongType);\n AbstractLongType.prototype.typeName = \"abstract:long\";\n AbstractLongType.prototype._check = function(val, flags, hook) {\n var b2 = this._isValid(val);\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n AbstractLongType.prototype._read = function(tap) {\n var buf, pos;\n if (this._noUnpack) {\n pos = tap.pos;\n tap.skipLong();\n buf = tap.buf.slice(pos, tap.pos);\n } else {\n buf = tap.unpackLongBytes(tap);\n }\n if (tap.isValid()) {\n return this._fromBuffer(buf);\n }\n };\n AbstractLongType.prototype._write = function(tap, val) {\n if (!this._isValid(val)) {\n throwInvalidError(val, this);\n }\n var buf = this._toBuffer(val);\n if (this._noUnpack) {\n tap.writeFixed(buf);\n } else {\n tap.packLongBytes(buf);\n }\n };\n AbstractLongType.prototype._copy = function(val, opts) {\n switch (opts && opts.coerce) {\n case 3:\n return this._toJSON(val);\n case 2:\n return this._fromJSON(val);\n default:\n return this._fromJSON(this._toJSON(val));\n }\n };\n AbstractLongType.prototype._deref = function() {\n return \"long\";\n };\n AbstractLongType.prototype._update = function(resolver, type) {\n var self = this;\n switch (type.typeName) {\n case \"int\":\n resolver._read = function(tap) {\n return self._fromJSON(type._read(tap));\n };\n break;\n case \"abstract:long\":\n case \"long\":\n resolver._read = function(tap) {\n return self._read(tap);\n };\n }\n };\n AbstractLongType.prototype.random = function() {\n return this._fromJSON(LongType.prototype.random());\n };\n AbstractLongType.prototype._fromBuffer = utils.abstractFunction;\n AbstractLongType.prototype._toBuffer = utils.abstractFunction;\n AbstractLongType.prototype._fromJSON = utils.abstractFunction;\n AbstractLongType.prototype._toJSON = utils.abstractFunction;\n AbstractLongType.prototype._isValid = utils.abstractFunction;\n AbstractLongType.prototype.compare = utils.abstractFunction;\n function Field(schema, opts) {\n var name = schema.name;\n if (typeof name != \"string\" || !utils.isValidName(name)) {\n throw new Error(f2(\"invalid field name: %s\", name));\n }\n this.name = name;\n this.type = Type.forSchema(schema.type, opts);\n this.aliases = schema.aliases || [];\n this.doc = schema.doc !== void 0 ? \"\" + schema.doc : void 0;\n this._order = function(order) {\n switch (order) {\n case \"ascending\":\n return 1;\n case \"descending\":\n return -1;\n case \"ignore\":\n return 0;\n default:\n throw new Error(f2(\"invalid order: %j\", order));\n }\n }(schema.order === void 0 ? \"ascending\" : schema.order);\n var value = schema[\"default\"];\n if (value !== void 0) {\n var type = this.type;\n var val;\n try {\n val = type._copy(value, { coerce: 2, wrap: 2 });\n } catch (err) {\n var msg = f2(\"incompatible field default %j (%s)\", value, err.message);\n if (Type.isType(type, \"union\")) {\n msg += f2(\n \", union defaults must match the first branch's type (%j)\",\n type.types[0]\n );\n }\n throw new Error(msg);\n }\n if (isPrimitive(type.typeName) && type.typeName !== \"bytes\") {\n this.defaultValue = function() {\n return val;\n };\n } else {\n this.defaultValue = function() {\n return type._copy(val);\n };\n }\n }\n Object.freeze(this);\n }\n Field.prototype.defaultValue = function() {\n };\n Object.defineProperty(Field.prototype, \"order\", {\n enumerable: true,\n get: function() {\n return [\"descending\", \"ignore\", \"ascending\"][this._order + 1];\n }\n });\n Field.prototype.getAliases = function() {\n return this.aliases;\n };\n Field.prototype.getDefault = Field.prototype.defaultValue;\n Field.prototype.getName = function() {\n return this.name;\n };\n Field.prototype.getOrder = function() {\n return this.order;\n };\n Field.prototype.getType = function() {\n return this.type;\n };\n function Resolver(readerType) {\n this._readerType = readerType;\n this._read = null;\n this.itemsType = null;\n this.size = 0;\n this.symbols = null;\n this.valuesType = null;\n }\n Resolver.prototype._peek = Type.prototype._peek;\n Resolver.prototype.inspect = function() {\n return \"\";\n };\n function Hash() {\n this.str = void 0;\n }\n function readValue(type, tap, resolver, lazy) {\n if (resolver) {\n if (resolver._readerType !== type) {\n throw new Error(\"invalid resolver\");\n }\n return resolver._read(tap, lazy);\n } else {\n return type._read(tap);\n }\n }\n function getAliases(obj) {\n var names = {};\n if (obj.name) {\n names[obj.name] = true;\n }\n var aliases = obj.aliases;\n var i, l;\n for (i = 0, l = aliases.length; i < l; i++) {\n names[aliases[i]] = true;\n }\n return Object.keys(names);\n }\n function hasCompatibleName(reader, writer, strict) {\n if (!writer.name) {\n return true;\n }\n var name = strict ? writer.name : utils.unqualify(writer.name);\n var aliases = getAliases(reader);\n var i, l, alias;\n for (i = 0, l = aliases.length; i < l; i++) {\n alias = aliases[i];\n if (!strict) {\n alias = utils.unqualify(alias);\n }\n if (alias === name) {\n return true;\n }\n }\n return false;\n }\n function isPrimitive(typeName) {\n var type = TYPES[typeName];\n return type && type.prototype instanceof PrimitiveType;\n }\n function getClassName(typeName) {\n if (typeName === \"error\") {\n typeName = \"record\";\n } else {\n var match = /^([^:]+):(.*)$/.exec(typeName);\n if (match) {\n if (match[1] === \"union\") {\n typeName = match[2] + \"Union\";\n } else {\n typeName = match[1];\n }\n }\n }\n return utils.capitalize(typeName) + \"Type\";\n }\n function readArraySize(tap) {\n var n = tap.readLong();\n if (n < 0) {\n n = -n;\n tap.skipLong();\n }\n return n;\n }\n function isSafeLong(n) {\n return n >= -9007199254740990 && n <= 9007199254740990;\n }\n function isJsonBuffer(obj) {\n return obj && obj.type === \"Buffer\" && Array.isArray(obj.data);\n }\n function throwInvalidError(val, type) {\n throw new Error(f2(\"invalid %j: %j\", type.schema(), val));\n }\n function maybeQualify(name, ns) {\n var unqualified = utils.unqualify(name);\n return isPrimitive(unqualified) ? unqualified : utils.qualify(name, ns);\n }\n function getTypeBucket(type) {\n var typeName = type.typeName;\n switch (typeName) {\n case \"double\":\n case \"float\":\n case \"int\":\n case \"long\":\n return \"number\";\n case \"bytes\":\n case \"fixed\":\n return \"buffer\";\n case \"enum\":\n return \"string\";\n case \"map\":\n case \"error\":\n case \"record\":\n return \"object\";\n default:\n return typeName;\n }\n }\n function getValueBucket(val) {\n if (val === null) {\n return \"null\";\n }\n var bucket = typeof val;\n if (bucket === \"object\") {\n if (Array.isArray(val)) {\n return \"array\";\n } else if (Buffer2.isBuffer(val)) {\n return \"buffer\";\n }\n }\n return bucket;\n }\n function isAmbiguous(types) {\n var buckets = {};\n var i, l, bucket, type;\n for (i = 0, l = types.length; i < l; i++) {\n type = types[i];\n if (!Type.isType(type, \"logical\")) {\n bucket = getTypeBucket(type);\n if (buckets[bucket]) {\n return true;\n }\n buckets[bucket] = true;\n }\n }\n return false;\n }\n function combineNumbers(types) {\n var typeNames = [\"int\", \"long\", \"float\", \"double\"];\n var superIndex = -1;\n var superType = null;\n var i, l, type, index;\n for (i = 0, l = types.length; i < l; i++) {\n type = types[i];\n index = typeNames.indexOf(type.typeName);\n if (index > superIndex) {\n superIndex = index;\n superType = type;\n }\n }\n return superType;\n }\n function combineStrings(types, opts) {\n var symbols = {};\n var i, l, type, typeSymbols;\n for (i = 0, l = types.length; i < l; i++) {\n type = types[i];\n if (type.typeName === \"string\") {\n return type;\n }\n typeSymbols = type.symbols;\n var j2, m2;\n for (j2 = 0, m2 = typeSymbols.length; j2 < m2; j2++) {\n symbols[typeSymbols[j2]] = true;\n }\n }\n return Type.forSchema({ type: \"enum\", symbols: Object.keys(symbols) }, opts);\n }\n function combineBuffers(types, opts) {\n var size = -1;\n var i, l, type;\n for (i = 0, l = types.length; i < l; i++) {\n type = types[i];\n if (type.typeName === \"bytes\") {\n return type;\n }\n if (size === -1) {\n size = type.size;\n } else if (type.size !== size) {\n size = -2;\n }\n }\n return size < 0 ? Type.forSchema(\"bytes\", opts) : types[0];\n }\n function combineObjects(types, opts) {\n var allTypes = [];\n var fieldTypes = {};\n var fieldDefaults = {};\n var isValidRecord = true;\n var i, l, type, fields;\n for (i = 0, l = types.length; i < l; i++) {\n type = types[i];\n if (type.typeName === \"map\") {\n isValidRecord = false;\n allTypes.push(type.valuesType);\n } else {\n fields = type.fields;\n var j2, m2, field, fieldDefault, fieldName, fieldType;\n for (j2 = 0, m2 = fields.length; j2 < m2; j2++) {\n field = fields[j2];\n fieldName = field.name;\n fieldType = field.type;\n allTypes.push(fieldType);\n if (isValidRecord) {\n if (!fieldTypes[fieldName]) {\n fieldTypes[fieldName] = [];\n }\n fieldTypes[fieldName].push(fieldType);\n fieldDefault = field.defaultValue();\n if (fieldDefault !== void 0) {\n fieldDefaults[fieldName] = fieldDefault;\n }\n }\n }\n }\n }\n if (isValidRecord) {\n var fieldNames = Object.keys(fieldTypes);\n for (i = 0, l = fieldNames.length; i < l; i++) {\n fieldName = fieldNames[i];\n if (fieldTypes[fieldName].length < types.length && fieldDefaults[fieldName] === void 0) {\n if (opts && opts.strictDefaults) {\n isValidRecord = false;\n } else {\n fieldTypes[fieldName].unshift(Type.forSchema(\"null\", opts));\n fieldDefaults[fieldName] = null;\n }\n }\n }\n }\n var schema;\n if (isValidRecord) {\n schema = {\n type: \"record\",\n fields: fieldNames.map(function(s) {\n var fieldType2 = Type.forTypes(fieldTypes[s], opts);\n var fieldDefault2 = fieldDefaults[s];\n if (fieldDefault2 !== void 0 && ~fieldType2.typeName.indexOf(\"union\")) {\n var unionTypes = fieldType2.types.slice();\n var i2, l2;\n for (i2 = 0, l2 = unionTypes.length; i2 < l2; i2++) {\n if (unionTypes[i2].isValid(fieldDefault2)) {\n break;\n }\n }\n if (i2 > 0) {\n var unionType = unionTypes[0];\n unionTypes[0] = unionTypes[i2];\n unionTypes[i2] = unionType;\n fieldType2 = Type.forSchema(unionTypes, opts);\n }\n }\n return {\n name: s,\n type: fieldType2,\n \"default\": fieldDefaults[s]\n };\n })\n };\n } else {\n schema = {\n type: \"map\",\n values: Type.forTypes(allTypes, opts)\n };\n }\n return Type.forSchema(schema, opts);\n }\n module.exports = {\n Type,\n getTypeBucket,\n getValueBucket,\n isPrimitive,\n builtins: function() {\n var types = {\n LogicalType,\n UnwrappedUnionType,\n WrappedUnionType\n };\n var typeNames = Object.keys(TYPES);\n var i, l, typeName;\n for (i = 0, l = typeNames.length; i < l; i++) {\n typeName = typeNames[i];\n types[getClassName(typeName)] = TYPES[typeName];\n }\n return types;\n }()\n };\n }\n});\n\n// node_modules/avsc/lib/containers.js\nvar require_containers = __commonJS({\n \"node_modules/avsc/lib/containers.js\"(exports, module) {\n \"use strict\";\n var types = require_types();\n var utils = require_utils();\n var buffer = __import_BUFFER;\n var stream = __import_STREAM;\n var util = __import_UTIL;\n var zlib = __import_ZLIB;\n var Buffer2 = buffer.Buffer;\n var OPTS = { namespace: \"org.apache.avro.file\" };\n var LONG_TYPE = types.Type.forSchema(\"long\", OPTS);\n var MAP_BYTES_TYPE = types.Type.forSchema({ type: \"map\", values: \"bytes\" }, OPTS);\n var HEADER_TYPE = types.Type.forSchema({\n name: \"Header\",\n type: \"record\",\n fields: [\n { name: \"magic\", type: { type: \"fixed\", name: \"Magic\", size: 4 } },\n { name: \"meta\", type: MAP_BYTES_TYPE },\n { name: \"sync\", type: { type: \"fixed\", name: \"Sync\", size: 16 } }\n ]\n }, OPTS);\n var BLOCK_TYPE = types.Type.forSchema({\n name: \"Block\",\n type: \"record\",\n fields: [\n { name: \"count\", type: \"long\" },\n { name: \"data\", type: \"bytes\" },\n { name: \"sync\", type: \"Sync\" }\n ]\n }, OPTS);\n var MAGIC_BYTES = utils.bufferFrom(\"Obj\u0001\");\n var f2 = util.format;\n var Tap = utils.Tap;\n function RawDecoder(schema, opts) {\n opts = opts || {};\n var noDecode = !!opts.noDecode;\n stream.Duplex.call(this, {\n readableObjectMode: !noDecode,\n allowHalfOpen: false\n });\n this._type = types.Type.forSchema(schema);\n this._tap = new Tap(utils.newBuffer(0));\n this._writeCb = null;\n this._needPush = false;\n this._readValue = createReader(noDecode, this._type);\n this._finished = false;\n this.on(\"finish\", function() {\n this._finished = true;\n this._read();\n });\n }\n util.inherits(RawDecoder, stream.Duplex);\n RawDecoder.prototype._write = function(chunk, encoding, cb) {\n this._writeCb = cb;\n var tap = this._tap;\n tap.buf = Buffer2.concat([tap.buf.slice(tap.pos), chunk]);\n tap.pos = 0;\n if (this._needPush) {\n this._needPush = false;\n this._read();\n }\n };\n RawDecoder.prototype._read = function() {\n this._needPush = false;\n var tap = this._tap;\n var pos = tap.pos;\n var val = this._readValue(tap);\n if (tap.isValid()) {\n this.push(val);\n } else if (!this._finished) {\n tap.pos = pos;\n this._needPush = true;\n if (this._writeCb) {\n this._writeCb();\n }\n } else {\n this.push(null);\n }\n };\n function BlockDecoder(opts) {\n opts = opts || {};\n var noDecode = !!opts.noDecode;\n stream.Duplex.call(this, {\n allowHalfOpen: true,\n // For async decompressors.\n readableObjectMode: !noDecode\n });\n this._rType = opts.readerSchema !== void 0 ? types.Type.forSchema(opts.readerSchema) : void 0;\n this._wType = null;\n this._codecs = opts.codecs;\n this._codec = void 0;\n this._parseHook = opts.parseHook;\n this._tap = new Tap(utils.newBuffer(0));\n this._blockTap = new Tap(utils.newBuffer(0));\n this._syncMarker = null;\n this._readValue = null;\n this._noDecode = noDecode;\n this._queue = new utils.OrderedQueue();\n this._decompress = null;\n this._index = 0;\n this._remaining = void 0;\n this._needPush = false;\n this._finished = false;\n this.on(\"finish\", function() {\n this._finished = true;\n if (this._needPush) {\n this._read();\n }\n });\n }\n util.inherits(BlockDecoder, stream.Duplex);\n BlockDecoder.defaultCodecs = function() {\n return {\n \"null\": function(buf, cb) {\n cb(null, buf);\n },\n \"deflate\": zlib.inflateRaw\n };\n };\n BlockDecoder.getDefaultCodecs = BlockDecoder.defaultCodecs;\n BlockDecoder.prototype._decodeHeader = function() {\n var tap = this._tap;\n if (tap.buf.length < MAGIC_BYTES.length) {\n return false;\n }\n if (!MAGIC_BYTES.equals(tap.buf.slice(0, MAGIC_BYTES.length))) {\n this.emit(\"error\", new Error(\"invalid magic bytes\"));\n return false;\n }\n var header = HEADER_TYPE._read(tap);\n if (!tap.isValid()) {\n return false;\n }\n this._codec = (header.meta[\"avro.codec\"] || \"null\").toString();\n var codecs = this._codecs || BlockDecoder.getDefaultCodecs();\n this._decompress = codecs[this._codec];\n if (!this._decompress) {\n this.emit(\"error\", new Error(f2(\"unknown codec: %s\", this._codec)));\n return;\n }\n try {\n var schema = JSON.parse(header.meta[\"avro.schema\"].toString());\n if (this._parseHook) {\n schema = this._parseHook(schema);\n }\n this._wType = types.Type.forSchema(schema);\n } catch (err) {\n this.emit(\"error\", err);\n return;\n }\n try {\n this._readValue = createReader(this._noDecode, this._wType, this._rType);\n } catch (err) {\n this.emit(\"error\", err);\n return;\n }\n this._syncMarker = header.sync;\n this.emit(\"metadata\", this._wType, this._codec, header);\n return true;\n };\n BlockDecoder.prototype._write = function(chunk, encoding, cb) {\n var tap = this._tap;\n tap.buf = Buffer2.concat([tap.buf, chunk]);\n tap.pos = 0;\n if (!this._decodeHeader()) {\n process.nextTick(cb);\n return;\n }\n this._write = this._writeChunk;\n this._write(utils.newBuffer(0), encoding, cb);\n };\n BlockDecoder.prototype._writeChunk = function(chunk, encoding, cb) {\n var tap = this._tap;\n tap.buf = Buffer2.concat([tap.buf.slice(tap.pos), chunk]);\n tap.pos = 0;\n var nBlocks = 1;\n var block;\n while (block = tryReadBlock(tap)) {\n if (!this._syncMarker.equals(block.sync)) {\n this.emit(\"error\", new Error(\"invalid sync marker\"));\n return;\n }\n nBlocks++;\n this._decompress(\n block.data,\n this._createBlockCallback(block.data.length, block.count, chunkCb)\n );\n }\n chunkCb();\n function chunkCb() {\n if (!--nBlocks) {\n cb();\n }\n }\n };\n BlockDecoder.prototype._createBlockCallback = function(size, count, cb) {\n var self = this;\n var index = this._index++;\n return function(cause, data) {\n if (cause) {\n var err = new Error(f2(\"%s codec decompression error\", self._codec));\n err.cause = cause;\n self.emit(\"error\", err);\n cb();\n } else {\n self.emit(\"block\", new BlockInfo(count, data.length, size));\n self._queue.push(new BlockData(index, data, cb, count));\n if (self._needPush) {\n self._read();\n }\n }\n };\n };\n BlockDecoder.prototype._read = function() {\n this._needPush = false;\n var tap = this._blockTap;\n if (!this._remaining) {\n var data = this._queue.pop();\n if (!data || !data.count) {\n if (this._finished) {\n this.push(null);\n } else {\n this._needPush = true;\n }\n if (data) {\n data.cb();\n }\n return;\n }\n data.cb();\n this._remaining = data.count;\n tap.buf = data.buf;\n tap.pos = 0;\n }\n this._remaining--;\n var val;\n try {\n val = this._readValue(tap);\n if (!tap.isValid()) {\n throw new Error(\"truncated block\");\n }\n } catch (err) {\n this._remaining = 0;\n this.emit(\"error\", err);\n return;\n }\n this.push(val);\n };\n function RawEncoder(schema, opts) {\n opts = opts || {};\n stream.Transform.call(this, {\n writableObjectMode: true,\n allowHalfOpen: false\n });\n this._type = types.Type.forSchema(schema);\n this._writeValue = function(tap, val) {\n try {\n this._type._write(tap, val);\n } catch (err) {\n this.emit(\"typeError\", err, val, this._type);\n }\n };\n this._tap = new Tap(utils.newBuffer(opts.batchSize || 65536));\n this.on(\"typeError\", function(err) {\n this.emit(\"error\", err);\n });\n }\n util.inherits(RawEncoder, stream.Transform);\n RawEncoder.prototype._transform = function(val, encoding, cb) {\n var tap = this._tap;\n var buf = tap.buf;\n var pos = tap.pos;\n this._writeValue(tap, val);\n if (!tap.isValid()) {\n if (pos) {\n this.push(copyBuffer(tap.buf, 0, pos));\n }\n var len = tap.pos - pos;\n if (len > buf.length) {\n tap.buf = utils.newBuffer(2 * len);\n }\n tap.pos = 0;\n this._writeValue(tap, val);\n }\n cb();\n };\n RawEncoder.prototype._flush = function(cb) {\n var tap = this._tap;\n var pos = tap.pos;\n if (pos) {\n this.push(tap.buf.slice(0, pos));\n }\n cb();\n };\n function BlockEncoder(schema, opts) {\n opts = opts || {};\n stream.Duplex.call(this, {\n allowHalfOpen: true,\n // To support async compressors.\n writableObjectMode: true\n });\n var type;\n if (types.Type.isType(schema)) {\n type = schema;\n schema = void 0;\n } else {\n type = types.Type.forSchema(schema);\n }\n this._schema = schema;\n this._type = type;\n this._writeValue = function(tap, val) {\n try {\n this._type._write(tap, val);\n } catch (err) {\n this.emit(\"typeError\", err, val, this._type);\n return false;\n }\n return true;\n };\n this._blockSize = opts.blockSize || 65536;\n this._tap = new Tap(utils.newBuffer(this._blockSize));\n this._codecs = opts.codecs;\n this._codec = opts.codec || \"null\";\n this._blockCount = 0;\n this._syncMarker = opts.syncMarker || new utils.Lcg().nextBuffer(16);\n this._queue = new utils.OrderedQueue();\n this._pending = 0;\n this._finished = false;\n this._needHeader = false;\n this._needPush = false;\n this._metadata = opts.metadata || {};\n if (!MAP_BYTES_TYPE.isValid(this._metadata)) {\n throw new Error(\"invalid metadata\");\n }\n var codec = this._codec;\n this._compress = (this._codecs || BlockEncoder.getDefaultCodecs())[codec];\n if (!this._compress) {\n throw new Error(f2(\"unsupported codec: %s\", codec));\n }\n if (opts.omitHeader !== void 0) {\n opts.writeHeader = opts.omitHeader ? \"never\" : \"auto\";\n }\n switch (opts.writeHeader) {\n case false:\n case \"never\":\n break;\n case void 0:\n case \"auto\":\n this._needHeader = true;\n break;\n default:\n this._writeHeader();\n }\n this.on(\"finish\", function() {\n this._finished = true;\n if (this._blockCount) {\n this._flushChunk();\n } else if (this._finished && this._needPush) {\n this.push(null);\n }\n });\n this.on(\"typeError\", function(err) {\n this.emit(\"error\", err);\n });\n }\n util.inherits(BlockEncoder, stream.Duplex);\n BlockEncoder.defaultCodecs = function() {\n return {\n \"null\": function(buf, cb) {\n cb(null, buf);\n },\n \"deflate\": zlib.deflateRaw\n };\n };\n BlockEncoder.getDefaultCodecs = BlockEncoder.defaultCodecs;\n BlockEncoder.prototype._writeHeader = function() {\n var schema = JSON.stringify(\n this._schema ? this._schema : this._type.getSchema({ exportAttrs: true })\n );\n var meta = utils.copyOwnProperties(\n this._metadata,\n { \"avro.schema\": utils.bufferFrom(schema), \"avro.codec\": utils.bufferFrom(this._codec) },\n true\n // Overwrite.\n );\n var Header = HEADER_TYPE.getRecordConstructor();\n var header = new Header(MAGIC_BYTES, meta, this._syncMarker);\n this.push(header.toBuffer());\n };\n BlockEncoder.prototype._write = function(val, encoding, cb) {\n if (this._needHeader) {\n this._writeHeader();\n this._needHeader = false;\n }\n var tap = this._tap;\n var pos = tap.pos;\n var flushing = false;\n if (this._writeValue(tap, val)) {\n if (!tap.isValid()) {\n if (pos) {\n this._flushChunk(pos, cb);\n flushing = true;\n }\n var len = tap.pos - pos;\n if (len > this._blockSize) {\n this._blockSize = len * 2;\n }\n tap.buf = utils.newBuffer(this._blockSize);\n tap.pos = 0;\n this._writeValue(tap, val);\n }\n this._blockCount++;\n } else {\n tap.pos = pos;\n }\n if (!flushing) {\n cb();\n }\n };\n BlockEncoder.prototype._flushChunk = function(pos, cb) {\n var tap = this._tap;\n pos = pos || tap.pos;\n this._compress(tap.buf.slice(0, pos), this._createBlockCallback(pos, cb));\n this._blockCount = 0;\n };\n BlockEncoder.prototype._read = function() {\n var self = this;\n var data = this._queue.pop();\n if (!data) {\n if (this._finished && !this._pending) {\n process.nextTick(function() {\n self.push(null);\n });\n } else {\n this._needPush = true;\n }\n return;\n }\n this.push(LONG_TYPE.toBuffer(data.count, true));\n this.push(LONG_TYPE.toBuffer(data.buf.length, true));\n this.push(data.buf);\n this.push(this._syncMarker);\n if (!this._finished) {\n data.cb();\n }\n };\n BlockEncoder.prototype._createBlockCallback = function(size, cb) {\n var self = this;\n var index = this._index++;\n var count = this._blockCount;\n this._pending++;\n return function(cause, data) {\n if (cause) {\n var err = new Error(f2(\"%s codec compression error\", self._codec));\n err.cause = cause;\n self.emit(\"error\", err);\n return;\n }\n self._pending--;\n self.emit(\"block\", new BlockInfo(count, size, data.length));\n self._queue.push(new BlockData(index, data, cb, count));\n if (self._needPush) {\n self._needPush = false;\n self._read();\n }\n };\n };\n function BlockInfo(count, raw, compressed) {\n this.valueCount = count;\n this.rawDataLength = raw;\n this.compressedDataLength = compressed;\n }\n function BlockData(index, buf, cb, count) {\n this.index = index;\n this.buf = buf;\n this.cb = cb;\n this.count = count | 0;\n }\n function tryReadBlock(tap) {\n var pos = tap.pos;\n var block = BLOCK_TYPE._read(tap);\n if (!tap.isValid()) {\n tap.pos = pos;\n return null;\n }\n return block;\n }\n function createReader(noDecode, writerType, readerType) {\n if (noDecode) {\n return /* @__PURE__ */ function(skipper) {\n return function(tap) {\n var pos = tap.pos;\n skipper(tap);\n return tap.buf.slice(pos, tap.pos);\n };\n }(writerType._skip);\n } else if (readerType) {\n var resolver = readerType.createResolver(writerType);\n return function(tap) {\n return resolver._read(tap);\n };\n } else {\n return function(tap) {\n return writerType._read(tap);\n };\n }\n }\n function copyBuffer(buf, pos, len) {\n var copy = utils.newBuffer(len);\n buf.copy(copy, 0, pos, pos + len);\n return copy;\n }\n module.exports = {\n BLOCK_TYPE,\n // For tests.\n HEADER_TYPE,\n // Idem.\n MAGIC_BYTES,\n // Idem.\n streams: {\n BlockDecoder,\n BlockEncoder,\n RawDecoder,\n RawEncoder\n }\n };\n }\n});\n\n// node_modules/avsc/lib/services.js\nvar require_services = __commonJS({\n \"node_modules/avsc/lib/services.js\"(exports, module) {\n \"use strict\";\n var types = require_types();\n var utils = require_utils();\n var buffer = __import_BUFFER;\n var events = __import_EVENTS;\n var stream = __import_STREAM;\n var util = __import_UTIL;\n var Buffer2 = buffer.Buffer;\n var Tap = utils.Tap;\n var Type = types.Type;\n var debug = util.debuglog(\"avsc:services\");\n var f2 = util.format;\n var OPTS = { namespace: \"org.apache.avro.ipc\" };\n var BOOLEAN_TYPE = Type.forSchema(\"boolean\", OPTS);\n var MAP_BYTES_TYPE = Type.forSchema({ type: \"map\", values: \"bytes\" }, OPTS);\n var STRING_TYPE = Type.forSchema(\"string\", OPTS);\n var HANDSHAKE_REQUEST_TYPE = Type.forSchema({\n name: \"HandshakeRequest\",\n type: \"record\",\n fields: [\n { name: \"clientHash\", type: { name: \"MD5\", type: \"fixed\", size: 16 } },\n { name: \"clientProtocol\", type: [\"null\", \"string\"], \"default\": null },\n { name: \"serverHash\", type: \"MD5\" },\n { name: \"meta\", type: [\"null\", MAP_BYTES_TYPE], \"default\": null }\n ]\n }, OPTS);\n var HANDSHAKE_RESPONSE_TYPE = Type.forSchema({\n name: \"HandshakeResponse\",\n type: \"record\",\n fields: [\n {\n name: \"match\",\n type: {\n name: \"HandshakeMatch\",\n type: \"enum\",\n symbols: [\"BOTH\", \"CLIENT\", \"NONE\"]\n }\n },\n { name: \"serverProtocol\", type: [\"null\", \"string\"], \"default\": null },\n { name: \"serverHash\", type: [\"null\", \"MD5\"], \"default\": null },\n { name: \"meta\", type: [\"null\", MAP_BYTES_TYPE], \"default\": null }\n ]\n }, OPTS);\n var PREFIX_LENGTH = 16;\n var PING_MESSAGE = new Message(\n \"\",\n // Empty name (invalid for other \"normal\" messages).\n Type.forSchema({ name: \"PingRequest\", type: \"record\", fields: [] }, OPTS),\n Type.forSchema([\"string\"], OPTS),\n Type.forSchema(\"null\", OPTS)\n );\n function Message(name, reqType, errType, resType, oneWay, doc) {\n this.name = name;\n if (!Type.isType(reqType, \"record\")) {\n throw new Error(\"invalid request type\");\n }\n this.requestType = reqType;\n if (!Type.isType(errType, \"union\") || !Type.isType(errType.getTypes()[0], \"string\")) {\n throw new Error(\"invalid error type\");\n }\n this.errorType = errType;\n if (oneWay) {\n if (!Type.isType(resType, \"null\") || errType.getTypes().length > 1) {\n throw new Error(\"inapplicable one-way parameter\");\n }\n }\n this.responseType = resType;\n this.oneWay = !!oneWay;\n this.doc = doc !== void 0 ? \"\" + doc : void 0;\n Object.freeze(this);\n }\n Message.forSchema = function(name, schema, opts) {\n opts = opts || {};\n if (!utils.isValidName(name)) {\n throw new Error(f2(\"invalid message name: %s\", name));\n }\n if (!Array.isArray(schema.request)) {\n throw new Error(f2(\"invalid message request: %s\", name));\n }\n var recordName = f2(\"%s.%sRequest\", OPTS.namespace, utils.capitalize(name));\n var reqType = Type.forSchema({\n name: recordName,\n type: \"record\",\n namespace: opts.namespace || \"\",\n // Don't leak request namespace.\n fields: schema.request\n }, opts);\n delete opts.registry[recordName];\n if (!schema.response) {\n throw new Error(f2(\"invalid message response: %s\", name));\n }\n var resType = Type.forSchema(schema.response, opts);\n if (schema.errors !== void 0 && !Array.isArray(schema.errors)) {\n throw new Error(f2(\"invalid message errors: %s\", name));\n }\n var errType = Type.forSchema([\"string\"].concat(schema.errors || []), opts);\n var oneWay = !!schema[\"one-way\"];\n return new Message(name, reqType, errType, resType, oneWay, schema.doc);\n };\n Message.prototype.schema = Type.prototype.getSchema;\n Message.prototype._attrs = function(opts) {\n var reqSchema = this.requestType._attrs(opts);\n var schema = {\n request: reqSchema.fields,\n response: this.responseType._attrs(opts)\n };\n var msgDoc = this.doc;\n if (msgDoc !== void 0) {\n schema.doc = msgDoc;\n }\n var errSchema = this.errorType._attrs(opts);\n if (errSchema.length > 1) {\n schema.errors = errSchema.slice(1);\n }\n if (this.oneWay) {\n schema[\"one-way\"] = true;\n }\n return schema;\n };\n utils.addDeprecatedGetters(\n Message,\n [\"name\", \"errorType\", \"requestType\", \"responseType\"]\n );\n Message.prototype.isOneWay = util.deprecate(\n function() {\n return this.oneWay;\n },\n \"use `.oneWay` directly instead of `.isOneWay()`\"\n );\n function Service(name, messages, types2, ptcl, server) {\n if (typeof name != \"string\") {\n return Service.forProtocol(name, messages);\n }\n this.name = name;\n this._messagesByName = messages || {};\n this.messages = Object.freeze(utils.objectValues(this._messagesByName));\n this._typesByName = types2 || {};\n this.types = Object.freeze(utils.objectValues(this._typesByName));\n this.protocol = ptcl;\n this._hashStr = utils.getHash(JSON.stringify(ptcl)).toString(\"binary\");\n this.doc = ptcl.doc ? \"\" + ptcl.doc : void 0;\n this._server = server || this.createServer({ silent: true });\n Object.freeze(this);\n }\n Service.Client = Client;\n Service.Server = Server;\n Service.compatible = function(clientSvc, serverSvc) {\n try {\n createReaders(clientSvc, serverSvc);\n } catch (err) {\n return false;\n }\n return true;\n };\n Service.forProtocol = function(ptcl, opts) {\n opts = opts || {};\n var name = ptcl.protocol;\n if (!name) {\n throw new Error(\"missing protocol name\");\n }\n if (ptcl.namespace !== void 0) {\n opts.namespace = ptcl.namespace;\n } else {\n var match = /^(.*)\\.[^.]+$/.exec(name);\n if (match) {\n opts.namespace = match[1];\n }\n }\n name = utils.qualify(name, opts.namespace);\n if (ptcl.types) {\n ptcl.types.forEach(function(obj) {\n Type.forSchema(obj, opts);\n });\n }\n var msgs;\n if (ptcl.messages) {\n msgs = {};\n Object.keys(ptcl.messages).forEach(function(key) {\n msgs[key] = Message.forSchema(key, ptcl.messages[key], opts);\n });\n }\n return new Service(name, msgs, opts.registry, ptcl);\n };\n Service.isService = function(any) {\n return !!any && any.hasOwnProperty(\"_hashStr\");\n };\n Service.prototype.createClient = function(opts) {\n var client = new Client(this, opts);\n process.nextTick(function() {\n if (opts && opts.server) {\n var obj = { objectMode: true };\n var pts = [new stream.PassThrough(obj), new stream.PassThrough(obj)];\n opts.server.createChannel({ readable: pts[0], writable: pts[1] }, obj);\n client.createChannel({ readable: pts[1], writable: pts[0] }, obj);\n } else if (opts && opts.transport) {\n client.createChannel(opts.transport);\n }\n });\n return client;\n };\n Service.prototype.createServer = function(opts) {\n return new Server(this, opts);\n };\n Object.defineProperty(Service.prototype, \"hash\", {\n enumerable: true,\n get: function() {\n return utils.bufferFrom(this._hashStr, \"binary\");\n }\n });\n Service.prototype.message = function(name) {\n return this._messagesByName[name];\n };\n Service.prototype.type = function(name) {\n return this._typesByName[name];\n };\n Service.prototype.inspect = function() {\n return f2(\"\", this.name);\n };\n utils.addDeprecatedGetters(\n Service,\n [\"message\", \"messages\", \"name\", \"type\", \"types\"]\n );\n Service.prototype.createEmitter = util.deprecate(\n function(transport, opts) {\n opts = opts || {};\n var client = this.createClient({\n cache: opts.cache,\n buffering: false,\n strictTypes: opts.strictErrors,\n timeout: opts.timeout\n });\n var channel = client.createChannel(transport, opts);\n forwardErrors(client, channel);\n return channel;\n },\n \"use `.createClient()` instead of `.createEmitter()`\"\n );\n Service.prototype.createListener = util.deprecate(\n function(transport, opts) {\n if (opts && opts.strictErrors) {\n throw new Error(\"use `.createServer()` to support strict errors\");\n }\n return this._server.createChannel(transport, opts);\n },\n \"use `.createServer().createChannel()` instead of `.createListener()`\"\n );\n Service.prototype.emit = util.deprecate(\n function(name, req, channel, cb) {\n if (!channel || !this.equals(channel.client._svc$)) {\n throw new Error(\"invalid emitter\");\n }\n var client = channel.client;\n Client.prototype.emitMessage.call(client, name, req, cb && cb.bind(this));\n return channel.getPending();\n },\n \"create a client via `.createClient()` to emit messages instead of `.emit()`\"\n );\n Service.prototype.equals = util.deprecate(\n function(any) {\n return Service.isService(any) && this.getFingerprint().equals(any.getFingerprint());\n },\n \"equality testing is deprecated, compare the `.protocol`s instead\"\n );\n Service.prototype.getFingerprint = util.deprecate(\n function(algorithm) {\n return utils.getHash(JSON.stringify(this.protocol), algorithm);\n },\n \"use `.hash` instead of `.getFingerprint()`\"\n );\n Service.prototype.getSchema = util.deprecate(\n Type.prototype.getSchema,\n \"use `.protocol` instead of `.getSchema()`\"\n );\n Service.prototype.on = util.deprecate(\n function(name, handler) {\n var self = this;\n this._server.onMessage(name, function(req, cb) {\n return handler.call(self, req, this.channel, cb);\n });\n return this;\n },\n \"use `.createServer().onMessage()` instead of `.on()`\"\n );\n Service.prototype.subprotocol = util.deprecate(\n function() {\n var parent = this._server;\n var opts = { strictTypes: parent._strict, cache: parent._cache };\n var server = new Server(parent.service, opts);\n server._handlers = Object.create(parent._handlers);\n return new Service(\n this.name,\n this._messagesByName,\n this._typesByName,\n this.protocol,\n server\n );\n },\n \"`.subprotocol()` will be removed in 5.1\"\n );\n Service.prototype._attrs = function(opts) {\n var ptcl = { protocol: this.name };\n var types2 = [];\n this.types.forEach(function(t) {\n if (t.getName() === void 0) {\n return;\n }\n var typeSchema = t._attrs(opts);\n if (typeof typeSchema != \"string\") {\n types2.push(typeSchema);\n }\n });\n if (types2.length) {\n ptcl.types = types2;\n }\n var msgNames = Object.keys(this._messagesByName);\n if (msgNames.length) {\n ptcl.messages = {};\n msgNames.forEach(function(name) {\n ptcl.messages[name] = this._messagesByName[name]._attrs(opts);\n }, this);\n }\n if (opts && opts.exportAttrs && this.doc !== void 0) {\n ptcl.doc = this.doc;\n }\n return ptcl;\n };\n function discoverProtocol(transport, opts, cb) {\n if (cb === void 0 && typeof opts == \"function\") {\n cb = opts;\n opts = void 0;\n }\n var svc = new Service({ protocol: \"Empty\" }, OPTS);\n var ptclStr;\n svc.createClient({ timeout: opts && opts.timeout }).createChannel(transport, {\n scope: opts && opts.scope,\n endWritable: typeof transport == \"function\"\n // Stateless transports only.\n }).once(\"handshake\", function(hreq, hres) {\n ptclStr = hres.serverProtocol;\n this.destroy(true);\n }).once(\"eot\", function(pending, err) {\n if (err && !/interrupted/.test(err)) {\n cb(err);\n } else {\n cb(null, JSON.parse(ptclStr));\n }\n });\n }\n function Client(svc, opts) {\n opts = opts || {};\n events.EventEmitter.call(this);\n this._svc$ = svc;\n this._channels$ = [];\n this._fns$ = [];\n this._buffering$ = !!opts.buffering;\n this._cache$ = opts.cache || {};\n this._policy$ = opts.channelPolicy;\n this._strict$ = !!opts.strictTypes;\n this._timeout$ = utils.getOption(opts, \"timeout\", 1e4);\n if (opts.remoteProtocols) {\n insertRemoteProtocols(this._cache$, opts.remoteProtocols, svc, true);\n }\n this._svc$.messages.forEach(function(msg) {\n this[msg.name] = this._createMessageHandler$(msg);\n }, this);\n }\n util.inherits(Client, events.EventEmitter);\n Client.prototype.activeChannels = function() {\n return this._channels$.slice();\n };\n Client.prototype.createChannel = function(transport, opts) {\n var objectMode = opts && opts.objectMode;\n var channel;\n if (typeof transport == \"function\") {\n var writableFactory;\n if (objectMode) {\n writableFactory = transport;\n } else {\n writableFactory = function(cb) {\n var encoder2 = new FrameEncoder();\n var writable2 = transport(function(err, readable2) {\n if (err) {\n cb(err);\n return;\n }\n var decoder2 = new FrameDecoder().once(\"error\", function(err2) {\n channel.destroy(err2);\n });\n cb(null, readable2.pipe(decoder2));\n });\n if (writable2) {\n encoder2.pipe(writable2);\n return encoder2;\n }\n };\n }\n channel = new StatelessClientChannel(this, writableFactory, opts);\n } else {\n var readable, writable;\n if (isStream(transport)) {\n readable = writable = transport;\n } else {\n readable = transport.readable;\n writable = transport.writable;\n }\n if (!objectMode) {\n var decoder = new NettyDecoder();\n readable = readable.pipe(decoder);\n var encoder = new NettyEncoder();\n encoder.pipe(writable);\n writable = encoder;\n }\n channel = new StatefulClientChannel(this, readable, writable, opts);\n if (!objectMode) {\n channel.once(\"eot\", function() {\n readable.unpipe(decoder);\n encoder.unpipe(writable);\n });\n decoder.once(\"error\", function(err) {\n channel.destroy(err);\n });\n }\n }\n var channels = this._channels$;\n channels.push(channel);\n channel.once(\"_drain\", function() {\n channels.splice(channels.indexOf(this), 1);\n });\n this._buffering$ = false;\n this.emit(\"channel\", channel);\n return channel;\n };\n Client.prototype.destroyChannels = function(opts) {\n this._channels$.forEach(function(channel) {\n channel.destroy(opts && opts.noWait);\n });\n };\n Client.prototype.emitMessage = function(name, req, opts, cb) {\n var msg = getExistingMessage(this._svc$, name);\n var wreq = new WrappedRequest(msg, {}, req);\n this._emitMessage$(wreq, opts, cb);\n };\n Client.prototype.remoteProtocols = function() {\n return getRemoteProtocols(this._cache$, true);\n };\n Object.defineProperty(Client.prototype, \"service\", {\n enumerable: true,\n get: function() {\n return this._svc$;\n }\n });\n Client.prototype.use = function() {\n var i, l, fn;\n for (i = 0, l = arguments.length; i < l; i++) {\n fn = arguments[i];\n this._fns$.push(fn.length < 3 ? fn(this) : fn);\n }\n return this;\n };\n Client.prototype._emitMessage$ = function(wreq, opts, cb) {\n if (!cb && typeof opts === \"function\") {\n cb = opts;\n opts = void 0;\n }\n var self = this;\n var channels = this._channels$;\n var numChannels = channels.length;\n if (!numChannels) {\n if (this._buffering$) {\n debug(\"no active client channels, buffering call\");\n this.once(\"channel\", function() {\n this._emitMessage$(wreq, opts, cb);\n });\n } else {\n var err = new Error(\"no active channels\");\n process.nextTick(function() {\n if (cb) {\n cb.call(new CallContext(wreq._msg), err);\n } else {\n self.emit(\"error\", err);\n }\n });\n }\n return;\n }\n opts = opts || {};\n if (opts.timeout === void 0) {\n opts.timeout = this._timeout$;\n }\n var channel;\n if (numChannels === 1) {\n channel = channels[0];\n } else if (this._policy$) {\n channel = this._policy$(this._channels$.slice());\n if (!channel) {\n debug(\"policy returned no channel, skipping call\");\n return;\n }\n } else {\n channel = channels[Math.floor(Math.random() * numChannels)];\n }\n channel._emit(wreq, opts, function(err2, wres) {\n var ctx = this;\n var errType = ctx.message.errorType;\n if (err2) {\n if (self._strict$) {\n err2 = errType.clone(err2.message, { wrapUnions: true });\n }\n done(err2);\n return;\n }\n if (!wres) {\n done();\n return;\n }\n err2 = wres.error;\n if (!self._strict$) {\n if (err2 === void 0) {\n err2 = null;\n } else {\n if (Type.isType(errType, \"union:unwrapped\")) {\n if (typeof err2 == \"string\") {\n err2 = new Error(err2);\n }\n } else if (err2 && err2.string && typeof err2.string == \"string\") {\n err2 = new Error(err2.string);\n }\n }\n }\n done(err2, wres.response);\n function done(err3, res) {\n if (cb) {\n cb.call(ctx, err3, res);\n } else if (err3) {\n self.emit(\"error\", err3);\n }\n }\n });\n };\n Client.prototype._createMessageHandler$ = function(msg) {\n var fields = msg.requestType.getFields();\n var names = fields.map(function(f3) {\n return f3.getName();\n });\n var body = \"return function \" + msg.name + \"(\";\n if (names.length) {\n body += names.join(\", \") + \", \";\n }\n body += \"opts, cb) {\\n\";\n body += \" var req = {\";\n body += names.map(function(n) {\n return n + \": \" + n;\n }).join(\", \");\n body += \"};\\n\";\n body += \" return this.emitMessage('\" + msg.name + \"', req, opts, cb);\\n\";\n body += \"};\";\n return new Function(body)();\n };\n function Server(svc, opts) {\n opts = opts || {};\n events.EventEmitter.call(this);\n this.service = svc;\n this._handlers = {};\n this._fns = [];\n this._channels = {};\n this._nextChannelId = 1;\n this._cache = opts.cache || {};\n this._defaultHandler = opts.defaultHandler;\n this._sysErrFormatter = opts.systemErrorFormatter;\n this._silent = !!opts.silent;\n this._strict = !!opts.strictTypes;\n if (opts.remoteProtocols) {\n insertRemoteProtocols(this._cache, opts.remoteProtocols, svc, false);\n }\n svc.messages.forEach(function(msg) {\n var name = msg.name;\n if (!opts.noCapitalize) {\n name = utils.capitalize(name);\n }\n this[\"on\" + name] = this._createMessageHandler(msg);\n }, this);\n }\n util.inherits(Server, events.EventEmitter);\n Server.prototype.activeChannels = function() {\n return utils.objectValues(this._channels);\n };\n Server.prototype.createChannel = function(transport, opts) {\n var objectMode = opts && opts.objectMode;\n var channel;\n if (typeof transport == \"function\") {\n var readableFactory;\n if (objectMode) {\n readableFactory = transport;\n } else {\n readableFactory = function(cb) {\n var decoder2 = new FrameDecoder().once(\"error\", function(err) {\n channel.destroy(err);\n });\n return transport(function(err, writable2) {\n if (err) {\n cb(err);\n return;\n }\n var encoder2 = new FrameEncoder();\n encoder2.pipe(writable2);\n cb(null, encoder2);\n }).pipe(decoder2);\n };\n }\n channel = new StatelessServerChannel(this, readableFactory, opts);\n } else {\n var readable, writable;\n if (isStream(transport)) {\n readable = writable = transport;\n } else {\n readable = transport.readable;\n writable = transport.writable;\n }\n if (!objectMode) {\n var decoder = new NettyDecoder();\n readable = readable.pipe(decoder);\n var encoder = new NettyEncoder();\n encoder.pipe(writable);\n writable = encoder;\n }\n channel = new StatefulServerChannel(this, readable, writable, opts);\n if (!objectMode) {\n channel.once(\"eot\", function() {\n readable.unpipe(decoder);\n encoder.unpipe(writable);\n });\n decoder.once(\"error\", function(err) {\n channel.destroy(err);\n });\n }\n }\n if (!this.listeners(\"error\").length) {\n this.on(\"error\", this._onError);\n }\n var channelId = this._nextChannelId++;\n var channels = this._channels;\n channels[channelId] = channel.once(\"eot\", function() {\n delete channels[channelId];\n });\n this.emit(\"channel\", channel);\n return channel;\n };\n Server.prototype.onMessage = function(name, handler) {\n getExistingMessage(this.service, name);\n this._handlers[name] = handler;\n return this;\n };\n Server.prototype.remoteProtocols = function() {\n return getRemoteProtocols(this._cache, false);\n };\n Server.prototype.use = function() {\n var i, l, fn;\n for (i = 0, l = arguments.length; i < l; i++) {\n fn = arguments[i];\n this._fns.push(fn.length < 3 ? fn(this) : fn);\n }\n return this;\n };\n Server.prototype._createMessageHandler = function(msg) {\n var name = msg.name;\n var fields = msg.requestType.fields;\n var numArgs = fields.length;\n var args = fields.length ? \", \" + fields.map(function(f3) {\n return \"req.\" + f3.name;\n }).join(\", \") : \"\";\n var body = \"return function (handler) {\\n\";\n body += \" if (handler.length > \" + numArgs + \") {\\n\";\n body += \" return this.onMessage('\" + name + \"', function (req, cb) {\\n\";\n body += \" return handler.call(this\" + args + \", cb);\\n\";\n body += \" });\\n\";\n body += \" } else {\\n\";\n body += \" return this.onMessage('\" + name + \"', function (req) {\\n\";\n body += \" return handler.call(this\" + args + \");\\n\";\n body += \" });\\n\";\n body += \" }\\n\";\n body += \"};\\n\";\n return new Function(body)();\n };\n Server.prototype._onError = function(err) {\n if (!this._silent && err.rpcCode !== \"UNKNOWN_PROTOCOL\") {\n console.error();\n if (err.rpcCode) {\n console.error(err.rpcCode);\n console.error(err.cause);\n } else {\n console.error(\"INTERNAL_SERVER_ERROR\");\n console.error(err);\n }\n }\n };\n function ClientChannel(client, opts) {\n opts = opts || {};\n events.EventEmitter.call(this);\n this.client = client;\n this.timeout = utils.getOption(opts, \"timeout\", client._timeout$);\n this._endWritable = !!utils.getOption(opts, \"endWritable\", true);\n this._prefix = normalizedPrefix(opts.scope);\n var cache = client._cache$;\n var clientSvc = client._svc$;\n var hash = opts.serverHash;\n if (!hash) {\n hash = clientSvc.hash;\n }\n var adapter = cache[hash];\n if (!adapter) {\n hash = clientSvc.hash;\n adapter = cache[hash] = new Adapter(clientSvc, clientSvc, hash);\n }\n this._adapter = adapter;\n this._registry = new Registry(this, PREFIX_LENGTH);\n this.pending = 0;\n this.destroyed = false;\n this.draining = false;\n this.once(\"_eot\", function(pending, err) {\n debug(\"client channel EOT\");\n this.destroyed = true;\n this.emit(\"eot\", pending, err);\n });\n }\n util.inherits(ClientChannel, events.EventEmitter);\n ClientChannel.prototype.destroy = function(noWait) {\n debug(\"destroying client channel\");\n if (!this.draining) {\n this.draining = true;\n this.emit(\"_drain\");\n }\n var registry = this._registry;\n var pending = this.pending;\n if (noWait) {\n registry.clear();\n }\n if (noWait || !pending) {\n if (isError(noWait)) {\n debug(\"fatal client channel error: %s\", noWait);\n this.emit(\"_eot\", pending, noWait);\n } else {\n this.emit(\"_eot\", pending);\n }\n } else {\n debug(\"client channel entering drain mode (%s pending)\", pending);\n }\n };\n ClientChannel.prototype.ping = function(timeout, cb) {\n if (!cb && typeof timeout == \"function\") {\n cb = timeout;\n timeout = void 0;\n }\n var self = this;\n var wreq = new WrappedRequest(PING_MESSAGE);\n this._emit(wreq, { timeout }, function(err) {\n if (cb) {\n cb.call(self, err);\n } else if (err) {\n self.destroy(err);\n }\n });\n };\n ClientChannel.prototype._createHandshakeRequest = function(adapter, noSvc) {\n var svc = this.client._svc$;\n return {\n clientHash: svc.hash,\n clientProtocol: noSvc ? null : JSON.stringify(svc.protocol),\n serverHash: adapter._hash\n };\n };\n ClientChannel.prototype._emit = function(wreq, opts, cb) {\n var msg = wreq._msg;\n var wres = msg.oneWay ? void 0 : new WrappedResponse(msg, {});\n var ctx = new CallContext(msg, this);\n var self = this;\n this.pending++;\n process.nextTick(function() {\n if (!msg.name) {\n onTransition(wreq, wres, onCompletion);\n } else {\n self.emit(\"outgoingCall\", ctx, opts);\n var fns = self.client._fns$;\n debug(\"starting client middleware chain (%s middleware)\", fns.length);\n chainMiddleware({\n fns,\n ctx,\n wreq,\n wres,\n onTransition,\n onCompletion,\n onError\n });\n }\n });\n function onTransition(wreq2, wres2, prev) {\n var err, reqBuf;\n if (self.destroyed) {\n err = new Error(\"channel destroyed\");\n } else {\n try {\n reqBuf = wreq2.toBuffer();\n } catch (cause) {\n err = serializationError(\n f2(\"invalid %j request\", msg.name),\n wreq2,\n [\n { name: \"headers\", type: MAP_BYTES_TYPE },\n { name: \"request\", type: msg.requestType }\n ]\n );\n }\n }\n if (err) {\n prev(err);\n return;\n }\n var timeout = opts && opts.timeout !== void 0 ? opts.timeout : self.timeout;\n var id = self._registry.add(timeout, function(err2, resBuf, adapter) {\n if (!err2 && !msg.oneWay) {\n try {\n adapter._decodeResponse(resBuf, wres2, msg);\n } catch (cause) {\n err2 = cause;\n }\n }\n prev(err2);\n });\n id |= self._prefix;\n debug(\"sending message %s\", id);\n self._send(id, reqBuf, !!msg && msg.oneWay);\n }\n function onCompletion(err) {\n self.pending--;\n cb.call(ctx, err, wres);\n if (self.draining && !self.destroyed && !self.pending) {\n self.destroy();\n }\n }\n function onError(err) {\n self.client.emit(\"error\", err, self);\n }\n };\n ClientChannel.prototype._getAdapter = function(hres) {\n var hash = hres.serverHash;\n var cache = this.client._cache$;\n var adapter = cache[hash];\n if (adapter) {\n return adapter;\n }\n var ptcl = JSON.parse(hres.serverProtocol);\n var serverSvc = Service.forProtocol(ptcl);\n adapter = new Adapter(this.client._svc$, serverSvc, hash, true);\n return cache[hash] = adapter;\n };\n ClientChannel.prototype._matchesPrefix = function(id) {\n return matchesPrefix(id, this._prefix);\n };\n ClientChannel.prototype._send = utils.abstractFunction;\n utils.addDeprecatedGetters(ClientChannel, [\"pending\", \"timeout\"]);\n ClientChannel.prototype.getCache = util.deprecate(\n function() {\n return this.client._cache$;\n },\n \"use `.remoteProtocols()` instead of `.getCache()`\"\n );\n ClientChannel.prototype.getProtocol = util.deprecate(\n function() {\n return this.client._svc$;\n },\n \"use `.service` instead or `.getProtocol()`\"\n );\n ClientChannel.prototype.isDestroyed = util.deprecate(\n function() {\n return this.destroyed;\n },\n \"use `.destroyed` instead of `.isDestroyed`\"\n );\n function StatelessClientChannel(client, writableFactory, opts) {\n ClientChannel.call(this, client, opts);\n this._writableFactory = writableFactory;\n if (!opts || !opts.noPing) {\n debug(\"emitting ping request\");\n this.ping();\n }\n }\n util.inherits(StatelessClientChannel, ClientChannel);\n StatelessClientChannel.prototype._send = function(id, reqBuf) {\n var cb = this._registry.get(id);\n var adapter = this._adapter;\n var self = this;\n process.nextTick(emit);\n return true;\n function emit(retry) {\n if (self.destroyed) {\n return;\n }\n var hreq = self._createHandshakeRequest(adapter, !retry);\n var writable = self._writableFactory.call(self, function(err, readable) {\n if (err) {\n cb(err);\n return;\n }\n readable.on(\"data\", function(obj) {\n debug(\"received response %s\", obj.id);\n var buf = Buffer2.concat(obj.payload);\n try {\n var parts = readHead(HANDSHAKE_RESPONSE_TYPE, buf);\n var hres = parts.head;\n if (hres.serverHash) {\n adapter = self._getAdapter(hres);\n }\n } catch (cause) {\n cb(cause);\n return;\n }\n var match = hres.match;\n debug(\"handshake match: %s\", match);\n self.emit(\"handshake\", hreq, hres);\n if (match === \"NONE\") {\n process.nextTick(function() {\n emit(true);\n });\n } else {\n self._adapter = adapter;\n cb(null, parts.tail, adapter);\n }\n });\n });\n if (!writable) {\n cb(new Error(\"invalid writable stream\"));\n return;\n }\n writable.write({\n id,\n payload: [HANDSHAKE_REQUEST_TYPE.toBuffer(hreq), reqBuf]\n });\n if (self._endWritable) {\n writable.end();\n }\n }\n };\n function StatefulClientChannel(client, readable, writable, opts) {\n ClientChannel.call(this, client, opts);\n this._readable = readable;\n this._writable = writable;\n this._connected = !!(opts && opts.noPing);\n this._readable.on(\"end\", onEnd);\n this._writable.on(\"finish\", onFinish);\n var self = this;\n var timer = null;\n this.once(\"eot\", function() {\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n if (!self._connected) {\n self.emit(\"_ready\");\n }\n this._writable.removeListener(\"finish\", onFinish);\n if (this._endWritable) {\n debug(\"ending transport\");\n this._writable.end();\n }\n this._readable.removeListener(\"data\", onPing).removeListener(\"data\", onMessage).removeListener(\"end\", onEnd);\n });\n var hreq;\n if (this._connected) {\n this._readable.on(\"data\", onMessage);\n } else {\n this._readable.on(\"data\", onPing);\n process.nextTick(ping);\n if (self.timeout) {\n timer = setTimeout(function() {\n self.destroy(new Error(\"timeout\"));\n }, self.timeout);\n }\n }\n function ping(retry) {\n if (self.destroyed) {\n return;\n }\n hreq = self._createHandshakeRequest(self._adapter, !retry);\n var payload = [\n HANDSHAKE_REQUEST_TYPE.toBuffer(hreq),\n utils.bufferFrom([0, 0])\n // No header, no data (empty message name).\n ];\n self._writable.write({ id: self._prefix, payload });\n }\n function onPing(obj) {\n if (!self._matchesPrefix(obj.id)) {\n debug(\"discarding unscoped response %s (still connecting)\", obj.id);\n return;\n }\n var buf = Buffer2.concat(obj.payload);\n try {\n var hres = readHead(HANDSHAKE_RESPONSE_TYPE, buf).head;\n if (hres.serverHash) {\n self._adapter = self._getAdapter(hres);\n }\n } catch (cause) {\n self.destroy(cause);\n return;\n }\n var match = hres.match;\n debug(\"handshake match: %s\", match);\n self.emit(\"handshake\", hreq, hres);\n if (match === \"NONE\") {\n process.nextTick(function() {\n ping(true);\n });\n } else {\n debug(\"successfully connected\");\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n self._readable.removeListener(\"data\", onPing).on(\"data\", onMessage);\n self._connected = true;\n self.emit(\"_ready\");\n hreq = null;\n }\n }\n function onMessage(obj) {\n var id = obj.id;\n if (!self._matchesPrefix(id)) {\n debug(\"discarding unscoped message %s\", id);\n return;\n }\n var cb = self._registry.get(id);\n if (cb) {\n process.nextTick(function() {\n debug(\"received message %s\", id);\n cb(null, Buffer2.concat(obj.payload), self._adapter);\n });\n }\n }\n function onEnd() {\n self.destroy(true);\n }\n function onFinish() {\n self.destroy();\n }\n }\n util.inherits(StatefulClientChannel, ClientChannel);\n StatefulClientChannel.prototype._emit = function() {\n if (this._connected || this.draining) {\n ClientChannel.prototype._emit.apply(this, arguments);\n } else {\n debug(\"queuing request\");\n var args = [];\n var i, l;\n for (i = 0, l = arguments.length; i < l; i++) {\n args.push(arguments[i]);\n }\n this.once(\"_ready\", function() {\n this._emit.apply(this, args);\n });\n }\n };\n StatefulClientChannel.prototype._send = function(id, reqBuf, oneWay) {\n if (oneWay) {\n var self = this;\n process.nextTick(function() {\n self._registry.get(id)(null, utils.bufferFrom([0, 0, 0]), self._adapter);\n });\n }\n return this._writable.write({ id, payload: [reqBuf] });\n };\n function ServerChannel(server, opts) {\n opts = opts || {};\n events.EventEmitter.call(this);\n this.server = server;\n this._endWritable = !!utils.getOption(opts, \"endWritable\", true);\n this._prefix = normalizedPrefix(opts.scope);\n var cache = server._cache;\n var svc = server.service;\n var hash = svc.hash;\n if (!cache[hash]) {\n cache[hash] = new Adapter(svc, svc, hash);\n }\n this._adapter = null;\n this.destroyed = false;\n this.draining = false;\n this.pending = 0;\n this.once(\"_eot\", function(pending, err) {\n debug(\"server channel EOT\");\n this.emit(\"eot\", pending, err);\n });\n }\n util.inherits(ServerChannel, events.EventEmitter);\n ServerChannel.prototype.destroy = function(noWait) {\n if (!this.draining) {\n this.draining = true;\n this.emit(\"_drain\");\n }\n if (noWait || !this.pending) {\n this.destroyed = true;\n if (isError(noWait)) {\n debug(\"fatal server channel error: %s\", noWait);\n this.emit(\"_eot\", this.pending, noWait);\n } else {\n this.emit(\"_eot\", this.pending);\n }\n }\n };\n ServerChannel.prototype._createHandshakeResponse = function(err, hreq) {\n var svc = this.server.service;\n var buf = svc.hash;\n var serverMatch = hreq && hreq.serverHash.equals(buf);\n return {\n match: err ? \"NONE\" : serverMatch ? \"BOTH\" : \"CLIENT\",\n serverProtocol: serverMatch ? null : JSON.stringify(svc.protocol),\n serverHash: serverMatch ? null : buf\n };\n };\n ServerChannel.prototype._getAdapter = function(hreq) {\n var hash = hreq.clientHash;\n var adapter = this.server._cache[hash];\n if (adapter) {\n return adapter;\n }\n if (!hreq.clientProtocol) {\n throw toRpcError(\"UNKNOWN_PROTOCOL\");\n }\n var ptcl = JSON.parse(hreq.clientProtocol);\n var clientSvc = Service.forProtocol(ptcl);\n adapter = new Adapter(clientSvc, this.server.service, hash, true);\n return this.server._cache[hash] = adapter;\n };\n ServerChannel.prototype._matchesPrefix = function(id) {\n return matchesPrefix(id, this._prefix);\n };\n ServerChannel.prototype._receive = function(reqBuf, adapter, cb) {\n var self = this;\n var wreq;\n try {\n wreq = adapter._decodeRequest(reqBuf);\n } catch (cause) {\n cb(self._encodeSystemError(toRpcError(\"INVALID_REQUEST\", cause)));\n return;\n }\n var msg = wreq._msg;\n var wres = new WrappedResponse(msg, {});\n if (!msg.name) {\n wres.response = null;\n cb(wres.toBuffer(), false);\n return;\n }\n var ctx = new CallContext(msg, this);\n self.emit(\"incomingCall\", ctx);\n var fns = this.server._fns;\n debug(\"starting server middleware chain (%s middleware)\", fns.length);\n self.pending++;\n chainMiddleware({\n fns,\n ctx,\n wreq,\n wres,\n onTransition,\n onCompletion,\n onError\n });\n function onTransition(wreq2, wres2, prev) {\n var handler = self.server._handlers[msg.name];\n if (!handler) {\n var defaultHandler = self.server._defaultHandler;\n if (defaultHandler) {\n defaultHandler.call(ctx, wreq2, wres2, prev);\n } else {\n var cause = new Error(f2(\"no handler for %s\", msg.name));\n prev(toRpcError(\"NOT_IMPLEMENTED\", cause));\n }\n } else {\n var pending = !msg.oneWay;\n try {\n if (pending) {\n handler.call(ctx, wreq2.request, function(err, res) {\n pending = false;\n wres2.error = err;\n wres2.response = res;\n prev();\n });\n } else {\n handler.call(ctx, wreq2.request);\n prev();\n }\n } catch (err) {\n if (pending) {\n pending = false;\n prev(err);\n } else {\n onError(err);\n }\n }\n }\n }\n function onCompletion(err) {\n self.pending--;\n var server = self.server;\n var resBuf;\n if (!err) {\n var resErr = wres.error;\n var isStrict = server._strict;\n if (!isStrict) {\n if (isError(resErr)) {\n wres.error = msg.errorType.clone(resErr.message, { wrapUnions: true });\n } else if (resErr === null) {\n resErr = wres.error = void 0;\n }\n if (resErr === void 0 && wres.response === void 0 && msg.responseType.isValid(null)) {\n wres.response = null;\n }\n }\n try {\n resBuf = wres.toBuffer();\n } catch (cause) {\n if (wres.error !== void 0) {\n err = serializationError(\n f2(\"invalid %j error\", msg.name),\n // Sic.\n wres,\n [\n { name: \"headers\", type: MAP_BYTES_TYPE },\n { name: \"error\", type: msg.errorType }\n ]\n );\n } else {\n err = serializationError(\n f2(\"invalid %j response\", msg.name),\n wres,\n [\n { name: \"headers\", type: MAP_BYTES_TYPE },\n { name: \"response\", type: msg.responseType }\n ]\n );\n }\n }\n }\n if (!resBuf) {\n resBuf = self._encodeSystemError(err, wres.headers);\n } else if (resErr !== void 0) {\n server.emit(\"error\", toRpcError(\"APPLICATION_ERROR\", resErr));\n }\n cb(resBuf, msg.oneWay);\n if (self.draining && !self.pending) {\n self.destroy();\n }\n }\n function onError(err) {\n self.server.emit(\"error\", err, self);\n }\n };\n utils.addDeprecatedGetters(ServerChannel, [\"pending\"]);\n ServerChannel.prototype.getCache = util.deprecate(\n function() {\n return this.server._cache;\n },\n \"use `.remoteProtocols()` instead of `.getCache()`\"\n );\n ServerChannel.prototype.getProtocol = util.deprecate(\n function() {\n return this.server.service;\n },\n \"use `.service` instead of `.getProtocol()`\"\n );\n ServerChannel.prototype.isDestroyed = util.deprecate(\n function() {\n return this.destroyed;\n },\n \"use `.destroyed` instead of `.isDestroyed`\"\n );\n ServerChannel.prototype._encodeSystemError = function(err, header) {\n var server = this.server;\n server.emit(\"error\", err, this);\n var errStr;\n if (server._sysErrFormatter) {\n errStr = server._sysErrFormatter.call(this, err);\n } else if (err.rpcCode) {\n errStr = err.message;\n }\n var hdrBuf;\n if (header) {\n try {\n hdrBuf = MAP_BYTES_TYPE.toBuffer(header);\n } catch (cause) {\n server.emit(\"error\", cause, this);\n }\n }\n return Buffer2.concat([\n hdrBuf || utils.bufferFrom([0]),\n utils.bufferFrom([1, 0]),\n // Error flag and first union index.\n STRING_TYPE.toBuffer(errStr || \"internal server error\")\n ]);\n };\n function StatelessServerChannel(server, readableFactory, opts) {\n ServerChannel.call(this, server, opts);\n this._writable = void 0;\n var self = this;\n var readable;\n process.nextTick(function() {\n readable = readableFactory.call(self, function(err, writable) {\n process.nextTick(function() {\n if (err) {\n onFinish(err);\n return;\n }\n self._writable = writable.on(\"finish\", onFinish);\n self.emit(\"_writable\");\n });\n }).on(\"data\", onRequest).on(\"end\", onEnd);\n });\n function onRequest(obj) {\n var id = obj.id;\n var buf = Buffer2.concat(obj.payload);\n var err;\n try {\n var parts = readHead(HANDSHAKE_REQUEST_TYPE, buf);\n var hreq = parts.head;\n var adapter = self._getAdapter(hreq);\n } catch (cause) {\n err = toRpcError(\"INVALID_HANDSHAKE_REQUEST\", cause);\n }\n var hres = self._createHandshakeResponse(err, hreq);\n self.emit(\"handshake\", hreq, hres);\n if (err) {\n done(self._encodeSystemError(err));\n } else {\n self._receive(parts.tail, adapter, done);\n }\n function done(resBuf) {\n if (!self.destroyed) {\n if (!self._writable) {\n self.once(\"_writable\", function() {\n done(resBuf);\n });\n return;\n }\n self._writable.write({\n id,\n payload: [HANDSHAKE_RESPONSE_TYPE.toBuffer(hres), resBuf]\n });\n }\n if (self._writable && self._endWritable) {\n self._writable.end();\n }\n }\n }\n function onEnd() {\n self.destroy();\n }\n function onFinish(err) {\n readable.removeListener(\"data\", onRequest).removeListener(\"end\", onEnd);\n self.destroy(err || true);\n }\n }\n util.inherits(StatelessServerChannel, ServerChannel);\n function StatefulServerChannel(server, readable, writable, opts) {\n ServerChannel.call(this, server, opts);\n this._adapter = void 0;\n this._writable = writable.on(\"finish\", onFinish);\n this._readable = readable.on(\"data\", onHandshake).on(\"end\", onEnd);\n this.once(\"_drain\", function() {\n this._readable.removeListener(\"data\", onHandshake).removeListener(\"data\", onRequest).removeListener(\"end\", onEnd);\n }).once(\"eot\", function() {\n this._writable.removeListener(\"finish\", onFinish);\n if (this._endWritable) {\n this._writable.end();\n }\n });\n var self = this;\n function onHandshake(obj) {\n var id = obj.id;\n if (!self._matchesPrefix(id)) {\n return;\n }\n var buf = Buffer2.concat(obj.payload);\n var err;\n try {\n var parts = readHead(HANDSHAKE_REQUEST_TYPE, buf);\n var hreq = parts.head;\n self._adapter = self._getAdapter(hreq);\n } catch (cause) {\n err = toRpcError(\"INVALID_HANDSHAKE_REQUEST\", cause);\n }\n var hres = self._createHandshakeResponse(err, hreq);\n self.emit(\"handshake\", hreq, hres);\n if (err) {\n done(self._encodeSystemError(err));\n } else {\n self._readable.removeListener(\"data\", onHandshake).on(\"data\", onRequest);\n self._receive(parts.tail, self._adapter, done);\n }\n function done(resBuf) {\n if (self.destroyed) {\n return;\n }\n self._writable.write({\n id,\n payload: [HANDSHAKE_RESPONSE_TYPE.toBuffer(hres), resBuf]\n });\n }\n }\n function onRequest(obj) {\n var id = obj.id;\n if (!self._matchesPrefix(id)) {\n return;\n }\n var reqBuf = Buffer2.concat(obj.payload);\n self._receive(reqBuf, self._adapter, function(resBuf, oneWay) {\n if (self.destroyed || oneWay) {\n return;\n }\n self._writable.write({ id, payload: [resBuf] });\n });\n }\n function onEnd() {\n self.destroy();\n }\n function onFinish() {\n self.destroy(true);\n }\n }\n util.inherits(StatefulServerChannel, ServerChannel);\n function WrappedRequest(msg, hdrs, req) {\n this._msg = msg;\n this.headers = hdrs || {};\n this.request = req || {};\n }\n WrappedRequest.prototype.toBuffer = function() {\n var msg = this._msg;\n return Buffer2.concat([\n MAP_BYTES_TYPE.toBuffer(this.headers),\n STRING_TYPE.toBuffer(msg.name),\n msg.requestType.toBuffer(this.request)\n ]);\n };\n function WrappedResponse(msg, hdr, err, res) {\n this._msg = msg;\n this.headers = hdr;\n this.error = err;\n this.response = res;\n }\n WrappedResponse.prototype.toBuffer = function() {\n var hdr = MAP_BYTES_TYPE.toBuffer(this.headers);\n var hasError = this.error !== void 0;\n return Buffer2.concat([\n hdr,\n BOOLEAN_TYPE.toBuffer(hasError),\n hasError ? this._msg.errorType.toBuffer(this.error) : this._msg.responseType.toBuffer(this.response)\n ]);\n };\n function CallContext(msg, channel) {\n this.channel = channel;\n this.locals = {};\n this.message = msg;\n Object.freeze(this);\n }\n function Registry(ctx, prefixLength) {\n this._ctx = ctx;\n this._mask = ~0 >>> (prefixLength | 0);\n this._id = 0;\n this._n = 0;\n this._cbs = {};\n }\n Registry.prototype.get = function(id) {\n return this._cbs[id & this._mask];\n };\n Registry.prototype.add = function(timeout, fn) {\n this._id = this._id + 1 & this._mask;\n var self = this;\n var id = this._id;\n var timer;\n if (timeout > 0) {\n timer = setTimeout(function() {\n cb(new Error(\"timeout\"));\n }, timeout);\n }\n this._cbs[id] = cb;\n this._n++;\n return id;\n function cb() {\n if (!self._cbs[id]) {\n return;\n }\n delete self._cbs[id];\n self._n--;\n if (timer) {\n clearTimeout(timer);\n }\n fn.apply(self._ctx, arguments);\n }\n };\n Registry.prototype.clear = function() {\n Object.keys(this._cbs).forEach(function(id) {\n this._cbs[id](new Error(\"interrupted\"));\n }, this);\n };\n function Adapter(clientSvc, serverSvc, hash, isRemote) {\n this._clientSvc = clientSvc;\n this._serverSvc = serverSvc;\n this._hash = hash;\n this._isRemote = !!isRemote;\n this._readers = createReaders(clientSvc, serverSvc);\n }\n Adapter.prototype._decodeRequest = function(buf) {\n var tap = new Tap(buf);\n var hdr = MAP_BYTES_TYPE._read(tap);\n var name = STRING_TYPE._read(tap);\n var msg, req;\n if (name) {\n msg = this._serverSvc.message(name);\n req = this._readers[name + \"?\"]._read(tap);\n } else {\n msg = PING_MESSAGE;\n }\n if (!tap.isValid()) {\n throw new Error(f2(\"truncated %s request\", name || \"ping$\"));\n }\n return new WrappedRequest(msg, hdr, req);\n };\n Adapter.prototype._decodeResponse = function(buf, wres, msg) {\n var tap = new Tap(buf);\n utils.copyOwnProperties(MAP_BYTES_TYPE._read(tap), wres.headers, true);\n var isError2 = BOOLEAN_TYPE._read(tap);\n var name = msg.name;\n if (name) {\n var reader = this._readers[name + (isError2 ? \"*\" : \"!\")];\n msg = this._clientSvc.message(name);\n if (isError2) {\n wres.error = reader._read(tap);\n } else {\n wres.response = reader._read(tap);\n }\n if (!tap.isValid()) {\n throw new Error(f2(\"truncated %s response\", name));\n }\n } else {\n msg = PING_MESSAGE;\n }\n };\n function FrameDecoder() {\n stream.Transform.call(this, { readableObjectMode: true });\n this._id = void 0;\n this._buf = utils.newBuffer(0);\n this._bufs = [];\n this.on(\"finish\", function() {\n this.push(null);\n });\n }\n util.inherits(FrameDecoder, stream.Transform);\n FrameDecoder.prototype._transform = function(buf, encoding, cb) {\n buf = Buffer2.concat([this._buf, buf]);\n var frameLength;\n while (buf.length >= 4 && buf.length >= (frameLength = buf.readInt32BE(0)) + 4) {\n if (frameLength) {\n this._bufs.push(buf.slice(4, frameLength + 4));\n } else {\n var bufs = this._bufs;\n this._bufs = [];\n this.push({ id: null, payload: bufs });\n }\n buf = buf.slice(frameLength + 4);\n }\n this._buf = buf;\n cb();\n };\n FrameDecoder.prototype._flush = function(cb) {\n if (this._buf.length || this._bufs.length) {\n var bufs = this._bufs.slice();\n bufs.unshift(this._buf);\n var err = toRpcError(\"TRAILING_DATA\");\n err.trailingData = Buffer2.concat(bufs).toString();\n this.emit(\"error\", err);\n }\n cb();\n };\n function FrameEncoder() {\n stream.Transform.call(this, { writableObjectMode: true });\n this.on(\"finish\", function() {\n this.push(null);\n });\n }\n util.inherits(FrameEncoder, stream.Transform);\n FrameEncoder.prototype._transform = function(obj, encoding, cb) {\n var bufs = obj.payload;\n var i, l, buf;\n for (i = 0, l = bufs.length; i < l; i++) {\n buf = bufs[i];\n this.push(intBuffer(buf.length));\n this.push(buf);\n }\n this.push(intBuffer(0));\n cb();\n };\n function NettyDecoder() {\n stream.Transform.call(this, { readableObjectMode: true });\n this._id = void 0;\n this._frameCount = 0;\n this._buf = utils.newBuffer(0);\n this._bufs = [];\n this.on(\"finish\", function() {\n this.push(null);\n });\n }\n util.inherits(NettyDecoder, stream.Transform);\n NettyDecoder.prototype._transform = function(buf, encoding, cb) {\n buf = Buffer2.concat([this._buf, buf]);\n while (true) {\n if (this._id === void 0) {\n if (buf.length < 8) {\n this._buf = buf;\n cb();\n return;\n }\n this._id = buf.readInt32BE(0);\n this._frameCount = buf.readInt32BE(4);\n buf = buf.slice(8);\n }\n var frameLength;\n while (this._frameCount && buf.length >= 4 && buf.length >= (frameLength = buf.readInt32BE(0)) + 4) {\n this._frameCount--;\n this._bufs.push(buf.slice(4, frameLength + 4));\n buf = buf.slice(frameLength + 4);\n }\n if (this._frameCount) {\n this._buf = buf;\n cb();\n return;\n } else {\n var obj = { id: this._id, payload: this._bufs };\n this._bufs = [];\n this._id = void 0;\n this.push(obj);\n }\n }\n };\n NettyDecoder.prototype._flush = FrameDecoder.prototype._flush;\n function NettyEncoder() {\n stream.Transform.call(this, { writableObjectMode: true });\n this.on(\"finish\", function() {\n this.push(null);\n });\n }\n util.inherits(NettyEncoder, stream.Transform);\n NettyEncoder.prototype._transform = function(obj, encoding, cb) {\n var bufs = obj.payload;\n var l = bufs.length;\n var buf;\n buf = utils.newBuffer(8);\n buf.writeInt32BE(obj.id, 0);\n buf.writeInt32BE(l, 4);\n this.push(buf);\n var i;\n for (i = 0; i < l; i++) {\n buf = bufs[i];\n this.push(intBuffer(buf.length));\n this.push(buf);\n }\n cb();\n };\n function intBuffer(n) {\n var buf = utils.newBuffer(4);\n buf.writeInt32BE(n);\n return buf;\n }\n function readHead(type, buf) {\n var tap = new Tap(buf);\n var head = type._read(tap);\n if (!tap.isValid()) {\n throw new Error(f2(\"truncated %j\", type.schema()));\n }\n return { head, tail: tap.buf.slice(tap.pos) };\n }\n function createReader(rtype, wtype) {\n return rtype.equals(wtype) ? rtype : rtype.createResolver(wtype);\n }\n function createReaders(clientSvc, serverSvc) {\n var obj = {};\n clientSvc.messages.forEach(function(c) {\n var n = c.name;\n var s = serverSvc.message(n);\n try {\n if (!s) {\n throw new Error(f2(\"missing server message: %s\", n));\n }\n if (s.oneWay !== c.oneWay) {\n throw new Error(f2(\"inconsistent one-way message: %s\", n));\n }\n obj[n + \"?\"] = createReader(s.requestType, c.requestType);\n obj[n + \"*\"] = createReader(c.errorType, s.errorType);\n obj[n + \"!\"] = createReader(c.responseType, s.responseType);\n } catch (cause) {\n throw toRpcError(\"INCOMPATIBLE_PROTOCOL\", cause);\n }\n });\n return obj;\n }\n function insertRemoteProtocols(cache, ptcls, svc, isClient) {\n Object.keys(ptcls).forEach(function(hash) {\n var ptcl = ptcls[hash];\n var clientSvc, serverSvc;\n if (isClient) {\n clientSvc = svc;\n serverSvc = Service.forProtocol(ptcl);\n } else {\n clientSvc = Service.forProtocol(ptcl);\n serverSvc = svc;\n }\n cache[hash] = new Adapter(clientSvc, serverSvc, hash, true);\n });\n }\n function getRemoteProtocols(cache, isClient) {\n var ptcls = {};\n Object.keys(cache).forEach(function(hs) {\n var adapter = cache[hs];\n if (adapter._isRemote) {\n var svc = isClient ? adapter._serverSvc : adapter._clientSvc;\n ptcls[hs] = svc.protocol;\n }\n });\n return ptcls;\n }\n function isError(any) {\n return !!any && Object.prototype.toString.call(any) === \"[object Error]\";\n }\n function forwardErrors(src, dst) {\n return src.on(\"error\", function(err) {\n dst.emit(\"error\", err, src);\n });\n }\n function toError(msg, cause) {\n var err = new Error(msg);\n err.cause = cause;\n return err;\n }\n function toRpcError(rpcCode, cause) {\n var err = toError(rpcCode.toLowerCase().replace(/_/g, \" \"), cause);\n err.rpcCode = cause && cause.rpcCode ? cause.rpcCode : rpcCode;\n return err;\n }\n function serializationError(msg, obj, fields) {\n var details = [];\n var i, l, field;\n for (i = 0, l = fields.length; i < l; i++) {\n field = fields[i];\n field.type.isValid(obj[field.name], { errorHook });\n }\n var detailsStr = details.map(function(obj2) {\n return f2(\"%s = %j but expected %s\", obj2.path, obj2.value, obj2.type);\n }).join(\", \");\n var err = new Error(f2(\"%s (%s)\", msg, detailsStr));\n err.details = details;\n return err;\n function errorHook(parts, any, type) {\n var strs = [];\n var i2, l2, part;\n for (i2 = 0, l2 = parts.length; i2 < l2; i2++) {\n part = parts[i2];\n if (isNaN(part)) {\n strs.push(\".\" + part);\n } else {\n strs.push(\"[\" + part + \"]\");\n }\n }\n details.push({\n path: field.name + strs.join(\"\"),\n value: any,\n type\n });\n }\n }\n function normalizedPrefix(scope) {\n return scope ? utils.getHash(scope).readInt16BE(0) << 32 - PREFIX_LENGTH : 0;\n }\n function matchesPrefix(id, prefix) {\n return (id ^ prefix) >> 32 - PREFIX_LENGTH === 0;\n }\n function isStream(any) {\n return !!(any && any.pipe);\n }\n function getExistingMessage(svc, name) {\n var msg = svc.message(name);\n if (!msg) {\n throw new Error(f2(\"unknown message: %s\", name));\n }\n return msg;\n }\n function chainMiddleware(params) {\n var args = [params.wreq, params.wres];\n var cbs = [];\n var cause;\n forward(0);\n function forward(pos) {\n var isDone = false;\n if (pos < params.fns.length) {\n params.fns[pos].apply(params.ctx, args.concat(function(err, cb) {\n if (isDone) {\n params.onError(toError(\"duplicate forward middleware call\", err));\n return;\n }\n isDone = true;\n if (err || params.wres && // Non one-way messages.\n (params.wres.error !== void 0 || params.wres.response !== void 0)) {\n cause = err;\n backward();\n return;\n }\n if (cb) {\n cbs.push(cb);\n }\n forward(++pos);\n }));\n } else {\n params.onTransition.apply(params.ctx, args.concat(function(err) {\n if (isDone) {\n params.onError(toError(\"duplicate handler call\", err));\n return;\n }\n isDone = true;\n cause = err;\n process.nextTick(backward);\n }));\n }\n }\n function backward() {\n var cb = cbs.pop();\n if (cb) {\n var isDone = false;\n cb.call(params.ctx, cause, function(err) {\n if (isDone) {\n params.onError(toError(\"duplicate backward middleware call\", err));\n return;\n }\n cause = err;\n isDone = true;\n backward();\n });\n } else {\n params.onCompletion.call(params.ctx, cause);\n }\n }\n }\n module.exports = {\n Adapter,\n HANDSHAKE_REQUEST_TYPE,\n HANDSHAKE_RESPONSE_TYPE,\n Message,\n Registry,\n Service,\n discoverProtocol,\n streams: {\n FrameDecoder,\n FrameEncoder,\n NettyDecoder,\n NettyEncoder\n }\n };\n }\n});\n\n// node_modules/avsc/lib/files.js\nvar require_files = __commonJS({\n \"node_modules/avsc/lib/files.js\"(exports, module) {\n \"use strict\";\n var fs = __import_FS;\n var path = __import_PATH;\n function createImportHook() {\n var imports = {};\n return function(fpath, kind, cb) {\n fpath = path.resolve(fpath);\n if (imports[fpath]) {\n process.nextTick(cb);\n return;\n }\n imports[fpath] = true;\n fs.readFile(fpath, { encoding: \"utf8\" }, cb);\n };\n }\n function createSyncImportHook() {\n var imports = {};\n return function(fpath, kind, cb) {\n fpath = path.resolve(fpath);\n if (imports[fpath]) {\n cb();\n } else {\n imports[fpath] = true;\n cb(null, fs.readFileSync(fpath, { encoding: \"utf8\" }));\n }\n };\n }\n module.exports = {\n createImportHook,\n createSyncImportHook,\n // Proxy a few methods to better shim them for browserify.\n existsSync: fs.existsSync,\n readFileSync: fs.readFileSync\n };\n }\n});\n\n// node_modules/avsc/lib/specs.js\nvar require_specs = __commonJS({\n \"node_modules/avsc/lib/specs.js\"(exports, module) {\n \"use strict\";\n var files = require_files();\n var utils = require_utils();\n var path = __import_PATH;\n var util = __import_UTIL;\n var f2 = util.format;\n var TYPE_REFS = {\n date: { type: \"int\", logicalType: \"date\" },\n decimal: { type: \"bytes\", logicalType: \"decimal\" },\n time_ms: { type: \"long\", logicalType: \"time-millis\" },\n timestamp_ms: { type: \"long\", logicalType: \"timestamp-millis\" }\n };\n function assembleProtocol(fpath, opts, cb) {\n if (!cb && typeof opts == \"function\") {\n cb = opts;\n opts = void 0;\n }\n opts = opts || {};\n if (!opts.importHook) {\n opts.importHook = files.createImportHook();\n }\n importFile(fpath, function(err, protocol) {\n if (err) {\n cb(err);\n return;\n }\n if (!protocol) {\n cb(new Error(\"empty root import\"));\n return;\n }\n var schemas = protocol.types;\n if (schemas) {\n var namespace = protocolNamespace(protocol) || \"\";\n schemas.forEach(function(schema) {\n if (schema.namespace === namespace) {\n delete schema.namespace;\n }\n });\n }\n cb(null, protocol);\n });\n function importFile(fpath2, cb2) {\n opts.importHook(fpath2, \"idl\", function(err, str) {\n if (err) {\n cb2(err);\n return;\n }\n if (str === void 0) {\n cb2();\n return;\n }\n try {\n var reader = new Reader(str, opts);\n var obj = reader._readProtocol(str, opts);\n } catch (err2) {\n err2.path = fpath2;\n cb2(err2);\n return;\n }\n fetchImports(obj.protocol, obj.imports, path.dirname(fpath2), cb2);\n });\n }\n function fetchImports(protocol, imports, dpath, cb2) {\n var importedProtocols = [];\n next();\n function next() {\n var info = imports.shift();\n if (!info) {\n importedProtocols.reverse();\n try {\n importedProtocols.forEach(function(imported) {\n mergeImport(protocol, imported);\n });\n } catch (err) {\n cb2(err);\n return;\n }\n cb2(null, protocol);\n return;\n }\n var importPath = path.join(dpath, info.name);\n if (info.kind === \"idl\") {\n importFile(importPath, function(err, imported) {\n if (err) {\n cb2(err);\n return;\n }\n if (imported) {\n importedProtocols.push(imported);\n }\n next();\n });\n } else {\n opts.importHook(importPath, info.kind, function(err, str) {\n if (err) {\n cb2(err);\n return;\n }\n switch (info.kind) {\n case \"protocol\":\n case \"schema\":\n if (str === void 0) {\n next();\n return;\n }\n try {\n var obj = JSON.parse(str);\n } catch (err2) {\n err2.path = importPath;\n cb2(err2);\n return;\n }\n var imported = info.kind === \"schema\" ? { types: [obj] } : obj;\n importedProtocols.push(imported);\n next();\n return;\n default:\n cb2(new Error(f2(\"invalid import kind: %s\", info.kind)));\n }\n });\n }\n }\n }\n function mergeImport(protocol, imported) {\n var schemas = imported.types || [];\n schemas.reverse();\n schemas.forEach(function(schema) {\n if (!protocol.types) {\n protocol.types = [];\n }\n if (schema.namespace === void 0) {\n schema.namespace = protocolNamespace(imported) || \"\";\n }\n protocol.types.unshift(schema);\n });\n Object.keys(imported.messages || {}).forEach(function(name) {\n if (!protocol.messages) {\n protocol.messages = {};\n }\n if (protocol.messages[name]) {\n throw new Error(f2(\"duplicate message: %s\", name));\n }\n protocol.messages[name] = imported.messages[name];\n });\n }\n }\n function read(str) {\n var schema;\n if (typeof str == \"string\" && ~str.indexOf(path.sep) && files.existsSync(str)) {\n var contents = files.readFileSync(str, { encoding: \"utf8\" });\n try {\n return JSON.parse(contents);\n } catch (err) {\n var opts = { importHook: files.createSyncImportHook() };\n assembleProtocol(str, opts, function(err2, protocolSchema) {\n schema = err2 ? contents : protocolSchema;\n });\n }\n } else {\n schema = str;\n }\n if (typeof schema != \"string\" || schema === \"null\") {\n return schema;\n }\n try {\n return JSON.parse(schema);\n } catch (err) {\n try {\n return Reader.readProtocol(schema);\n } catch (err2) {\n try {\n return Reader.readSchema(schema);\n } catch (err3) {\n return schema;\n }\n }\n }\n }\n function Reader(str, opts) {\n opts = opts || {};\n this._tk = new Tokenizer(str);\n this._ackVoidMessages = !!opts.ackVoidMessages;\n this._implicitTags = !opts.delimitedCollections;\n this._typeRefs = opts.typeRefs || TYPE_REFS;\n }\n Reader.readProtocol = function(str, opts) {\n var reader = new Reader(str, opts);\n var protocol = reader._readProtocol();\n if (protocol.imports.length) {\n throw new Error(\"unresolvable import\");\n }\n return protocol.protocol;\n };\n Reader.readSchema = function(str, opts) {\n var reader = new Reader(str, opts);\n var doc = reader._readJavadoc();\n var schema = reader._readType(doc === void 0 ? {} : { doc }, true);\n reader._tk.next({ id: \"(eof)\" });\n return schema;\n };\n Reader.prototype._readProtocol = function() {\n var tk = this._tk;\n var imports = [];\n var types = [];\n var messages = {};\n var pos;\n this._readImports(imports);\n var protocolSchema = {};\n var protocolJavadoc = this._readJavadoc();\n if (protocolJavadoc !== void 0) {\n protocolSchema.doc = protocolJavadoc;\n }\n this._readAnnotations(protocolSchema);\n tk.next({ val: \"protocol\" });\n if (!tk.next({ val: \"{\", silent: true })) {\n protocolSchema.protocol = tk.next({ id: \"name\" }).val;\n tk.next({ val: \"{\" });\n }\n while (!tk.next({ val: \"}\", silent: true })) {\n if (!this._readImports(imports)) {\n var javadoc = this._readJavadoc();\n var typeSchema = this._readType({}, true);\n var numImports = this._readImports(imports, true);\n var message = void 0;\n pos = tk.pos;\n if (!numImports && (message = this._readMessage(typeSchema))) {\n if (javadoc !== void 0 && message.schema.doc === void 0) {\n message.schema.doc = javadoc;\n }\n var oneWay = false;\n if (message.schema.response === \"void\" || message.schema.response.type === \"void\") {\n oneWay = !this._ackVoidMessages && !message.schema.errors;\n if (message.schema.response === \"void\") {\n message.schema.response = \"null\";\n } else {\n message.schema.response.type = \"null\";\n }\n }\n if (oneWay) {\n message.schema[\"one-way\"] = true;\n }\n if (messages[message.name]) {\n throw new Error(f2(\"duplicate message: %s\", message.name));\n }\n messages[message.name] = message.schema;\n } else {\n if (javadoc) {\n if (typeof typeSchema == \"string\") {\n typeSchema = { doc: javadoc, type: typeSchema };\n } else if (typeSchema.doc === void 0) {\n typeSchema.doc = javadoc;\n }\n }\n types.push(typeSchema);\n tk.pos = pos;\n tk.next({ val: \";\", silent: true });\n }\n javadoc = void 0;\n }\n }\n tk.next({ id: \"(eof)\" });\n if (types.length) {\n protocolSchema.types = types;\n }\n if (Object.keys(messages).length) {\n protocolSchema.messages = messages;\n }\n return { protocol: protocolSchema, imports };\n };\n Reader.prototype._readAnnotations = function(schema) {\n var tk = this._tk;\n while (tk.next({ val: \"@\", silent: true })) {\n var parts = [];\n while (!tk.next({ val: \"(\", silent: true })) {\n parts.push(tk.next().val);\n }\n schema[parts.join(\"\")] = tk.next({ id: \"json\" }).val;\n tk.next({ val: \")\" });\n }\n };\n Reader.prototype._readMessage = function(responseSchema) {\n var tk = this._tk;\n var schema = { request: [], response: responseSchema };\n this._readAnnotations(schema);\n var name = tk.next().val;\n if (tk.next().val !== \"(\") {\n return;\n }\n if (!tk.next({ val: \")\", silent: true })) {\n do {\n schema.request.push(this._readField());\n } while (!tk.next({ val: \")\", silent: true }) && tk.next({ val: \",\" }));\n }\n var token = tk.next();\n switch (token.val) {\n case \"throws\":\n schema.errors = [];\n do {\n schema.errors.push(this._readType());\n } while (!tk.next({ val: \";\", silent: true }) && tk.next({ val: \",\" }));\n break;\n case \"oneway\":\n schema[\"one-way\"] = true;\n tk.next({ val: \";\" });\n break;\n case \";\":\n break;\n default:\n throw tk.error(\"invalid message suffix\", token);\n }\n return { name, schema };\n };\n Reader.prototype._readJavadoc = function() {\n var token = this._tk.next({ id: \"javadoc\", emitJavadoc: true, silent: true });\n if (token) {\n return token.val;\n }\n };\n Reader.prototype._readField = function() {\n var tk = this._tk;\n var javadoc = this._readJavadoc();\n var schema = { type: this._readType() };\n if (javadoc !== void 0 && schema.doc === void 0) {\n schema.doc = javadoc;\n }\n this._readAnnotations(schema);\n schema.name = tk.next({ id: \"name\" }).val;\n if (tk.next({ val: \"=\", silent: true })) {\n schema[\"default\"] = tk.next({ id: \"json\" }).val;\n }\n return schema;\n };\n Reader.prototype._readType = function(schema, top) {\n schema = schema || {};\n this._readAnnotations(schema);\n schema.type = this._tk.next({ id: \"name\" }).val;\n switch (schema.type) {\n case \"record\":\n case \"error\":\n return this._readRecord(schema);\n case \"fixed\":\n return this._readFixed(schema);\n case \"enum\":\n return this._readEnum(schema, top);\n case \"map\":\n return this._readMap(schema);\n case \"array\":\n return this._readArray(schema);\n case \"union\":\n if (Object.keys(schema).length > 1) {\n throw new Error(\"union annotations are not supported\");\n }\n return this._readUnion();\n default:\n var ref = this._typeRefs[schema.type];\n if (ref) {\n delete schema.type;\n utils.copyOwnProperties(ref, schema);\n }\n return Object.keys(schema).length > 1 ? schema : schema.type;\n }\n };\n Reader.prototype._readFixed = function(schema) {\n var tk = this._tk;\n if (!tk.next({ val: \"(\", silent: true })) {\n schema.name = tk.next({ id: \"name\" }).val;\n tk.next({ val: \"(\" });\n }\n schema.size = parseInt(tk.next({ id: \"number\" }).val);\n tk.next({ val: \")\" });\n return schema;\n };\n Reader.prototype._readMap = function(schema) {\n var tk = this._tk;\n var silent = this._implicitTags;\n var implicitTags = tk.next({ val: \"<\", silent }) === void 0;\n schema.values = this._readType();\n tk.next({ val: \">\", silent: implicitTags });\n return schema;\n };\n Reader.prototype._readArray = function(schema) {\n var tk = this._tk;\n var silent = this._implicitTags;\n var implicitTags = tk.next({ val: \"<\", silent }) === void 0;\n schema.items = this._readType();\n tk.next({ val: \">\", silent: implicitTags });\n return schema;\n };\n Reader.prototype._readEnum = function(schema, top) {\n var tk = this._tk;\n if (!tk.next({ val: \"{\", silent: true })) {\n schema.name = tk.next({ id: \"name\" }).val;\n tk.next({ val: \"{\" });\n }\n schema.symbols = [];\n do {\n schema.symbols.push(tk.next().val);\n } while (!tk.next({ val: \"}\", silent: true }) && tk.next({ val: \",\" }));\n if (top && tk.next({ val: \"=\", silent: true })) {\n schema.default = tk.next().val;\n tk.next({ val: \";\" });\n }\n return schema;\n };\n Reader.prototype._readUnion = function() {\n var tk = this._tk;\n var arr = [];\n tk.next({ val: \"{\" });\n do {\n arr.push(this._readType());\n } while (!tk.next({ val: \"}\", silent: true }) && tk.next({ val: \",\" }));\n return arr;\n };\n Reader.prototype._readRecord = function(schema) {\n var tk = this._tk;\n if (!tk.next({ val: \"{\", silent: true })) {\n schema.name = tk.next({ id: \"name\" }).val;\n tk.next({ val: \"{\" });\n }\n schema.fields = [];\n while (!tk.next({ val: \"}\", silent: true })) {\n schema.fields.push(this._readField());\n tk.next({ val: \";\" });\n }\n return schema;\n };\n Reader.prototype._readImports = function(imports, maybeMessage) {\n var tk = this._tk;\n var numImports = 0;\n var pos = tk.pos;\n while (tk.next({ val: \"import\", silent: true })) {\n if (!numImports && maybeMessage && tk.next({ val: \"(\", silent: true })) {\n tk.pos = pos;\n return;\n }\n var kind = tk.next({ id: \"name\" }).val;\n var fname = JSON.parse(tk.next({ id: \"string\" }).val);\n tk.next({ val: \";\" });\n imports.push({ kind, name: fname });\n numImports++;\n }\n return numImports;\n };\n function Tokenizer(str) {\n this._str = str;\n this.pos = 0;\n }\n Tokenizer.prototype.next = function(opts) {\n var token = { pos: this.pos, id: void 0, val: void 0 };\n var javadoc = this._skip(opts && opts.emitJavadoc);\n if (typeof javadoc == \"string\") {\n token.id = \"javadoc\";\n token.val = javadoc;\n } else {\n var pos = this.pos;\n var str = this._str;\n var c = str.charAt(pos);\n if (!c) {\n token.id = \"(eof)\";\n } else {\n if (opts && opts.id === \"json\") {\n token.id = \"json\";\n this.pos = this._endOfJson();\n } else if (c === '\"') {\n token.id = \"string\";\n this.pos = this._endOfString();\n } else if (/[0-9]/.test(c)) {\n token.id = \"number\";\n this.pos = this._endOf(/[0-9]/);\n } else if (/[`A-Za-z_.]/.test(c)) {\n token.id = \"name\";\n this.pos = this._endOf(/[`A-Za-z0-9_.]/);\n } else {\n token.id = \"operator\";\n this.pos = pos + 1;\n }\n token.val = str.slice(pos, this.pos);\n if (token.id === \"json\") {\n try {\n token.val = JSON.parse(token.val);\n } catch (err2) {\n throw this.error(\"invalid JSON\", token);\n }\n } else if (token.id === \"name\") {\n token.val = token.val.replace(/`/g, \"\");\n }\n }\n }\n var err;\n if (opts && opts.id && opts.id !== token.id) {\n err = this.error(f2(\"expected ID %s\", opts.id), token);\n } else if (opts && opts.val && opts.val !== token.val) {\n err = this.error(f2(\"expected value %s\", opts.val), token);\n }\n if (!err) {\n return token;\n } else if (opts && opts.silent) {\n this.pos = token.pos;\n return void 0;\n } else {\n throw err;\n }\n };\n Tokenizer.prototype.error = function(reason, context) {\n var isToken = typeof context != \"number\";\n var pos = isToken ? context.pos : context;\n var str = this._str;\n var lineNum = 1;\n var lineStart = 0;\n var i;\n for (i = 0; i < pos; i++) {\n if (str.charAt(i) === \"\\n\") {\n lineNum++;\n lineStart = i;\n }\n }\n var msg = isToken ? f2(\"invalid token %j: %s\", context, reason) : reason;\n var err = new Error(msg);\n err.token = isToken ? context : void 0;\n err.lineNum = lineNum;\n err.colNum = pos - lineStart;\n return err;\n };\n Tokenizer.prototype._skip = function(emitJavadoc) {\n var str = this._str;\n var isJavadoc = false;\n var pos, c;\n while ((c = str.charAt(this.pos)) && /\\s/.test(c)) {\n this.pos++;\n }\n pos = this.pos;\n if (c === \"/\") {\n switch (str.charAt(this.pos + 1)) {\n case \"/\":\n this.pos += 2;\n while ((c = str.charAt(this.pos)) && c !== \"\\n\") {\n this.pos++;\n }\n return this._skip(emitJavadoc);\n case \"*\":\n this.pos += 2;\n if (str.charAt(this.pos) === \"*\") {\n isJavadoc = true;\n }\n while (c = str.charAt(this.pos++)) {\n if (c === \"*\" && str.charAt(this.pos) === \"/\") {\n this.pos++;\n if (isJavadoc && emitJavadoc) {\n return extractJavadoc(str.slice(pos + 3, this.pos - 2));\n }\n return this._skip(emitJavadoc);\n }\n }\n throw this.error(\"unterminated comment\", pos);\n }\n }\n };\n Tokenizer.prototype._endOf = function(pat) {\n var pos = this.pos;\n var str = this._str;\n while (pat.test(str.charAt(pos))) {\n pos++;\n }\n return pos;\n };\n Tokenizer.prototype._endOfString = function() {\n var pos = this.pos + 1;\n var str = this._str;\n var c;\n while (c = str.charAt(pos)) {\n if (c === '\"') {\n return pos + 1;\n }\n if (c === \"\\\\\") {\n pos += 2;\n } else {\n pos++;\n }\n }\n throw this.error(\"unterminated string\", pos - 1);\n };\n Tokenizer.prototype._endOfJson = function() {\n var pos = utils.jsonEnd(this._str, this.pos);\n if (pos < 0) {\n throw this.error(\"invalid JSON\", pos);\n }\n return pos;\n };\n function extractJavadoc(str) {\n var lines = str.replace(/^[ \\t]+|[ \\t]+$/g, \"\").split(\"\\n\").map(function(line, i) {\n return i ? line.replace(/^\\s*\\*\\s?/, \"\") : line;\n });\n while (lines.length && !lines[0]) {\n lines.shift();\n }\n while (lines.length && !lines[lines.length - 1]) {\n lines.pop();\n }\n return lines.join(\"\\n\");\n }\n function protocolNamespace(protocol) {\n if (protocol.namespace) {\n return protocol.namespace;\n }\n var match = /^(.*)\\.[^.]+$/.exec(protocol.protocol);\n return match ? match[1] : void 0;\n }\n module.exports = {\n Tokenizer,\n assembleProtocol,\n read,\n readProtocol: Reader.readProtocol,\n readSchema: Reader.readSchema\n };\n }\n});\n\n// node_modules/avsc/lib/index.js\nvar require_lib = __commonJS({\n \"node_modules/avsc/lib/index.js\"(exports, module) {\n \"use strict\";\n var containers = require_containers();\n var services = require_services();\n var specs = require_specs();\n var types = require_types();\n var utils = require_utils();\n var buffer = __import_BUFFER;\n var fs = __import_FS;\n var util = __import_UTIL;\n var Buffer2 = buffer.Buffer;\n function parse2(any, opts) {\n var schemaOrProtocol = specs.read(any);\n return schemaOrProtocol.protocol ? services.Service.forProtocol(schemaOrProtocol, opts) : types.Type.forSchema(schemaOrProtocol, opts);\n }\n function extractFileHeader(path, opts) {\n opts = opts || {};\n var decode = opts.decode === void 0 ? true : !!opts.decode;\n var size = Math.max(opts.size || 4096, 4);\n var buf = utils.newBuffer(size);\n var fd = fs.openSync(path, \"r\");\n try {\n var pos = fs.readSync(fd, buf, 0, size);\n if (pos < 4 || !containers.MAGIC_BYTES.equals(buf.slice(0, 4))) {\n return null;\n }\n var tap = new utils.Tap(buf);\n var header = null;\n do {\n header = containers.HEADER_TYPE._read(tap);\n } while (!isValid());\n if (decode !== false) {\n var meta = header.meta;\n meta[\"avro.schema\"] = JSON.parse(meta[\"avro.schema\"].toString());\n if (meta[\"avro.codec\"] !== void 0) {\n meta[\"avro.codec\"] = meta[\"avro.codec\"].toString();\n }\n }\n return header;\n } finally {\n fs.closeSync(fd);\n }\n function isValid() {\n if (tap.isValid()) {\n return true;\n }\n var len = 2 * tap.buf.length;\n var buf2 = utils.newBuffer(len);\n len = fs.readSync(fd, buf2, 0, len);\n tap.buf = Buffer2.concat([tap.buf, buf2]);\n tap.pos = 0;\n return false;\n }\n }\n function createFileDecoder(path, opts) {\n return fs.createReadStream(path).pipe(new containers.streams.BlockDecoder(opts));\n }\n function createFileEncoder(path, schema, opts) {\n var encoder = new containers.streams.BlockEncoder(schema, opts);\n encoder.pipe(fs.createWriteStream(path, { defaultEncoding: \"binary\" }));\n return encoder;\n }\n module.exports = {\n Service: services.Service,\n Type: types.Type,\n assembleProtocol: specs.assembleProtocol,\n createFileDecoder,\n createFileEncoder,\n discoverProtocol: services.discoverProtocol,\n extractFileHeader,\n parse: parse2,\n readProtocol: specs.readProtocol,\n readSchema: specs.readSchema,\n streams: containers.streams,\n types: types.builtins,\n // Deprecated exports.\n Protocol: services.Service,\n assemble: util.deprecate(\n specs.assembleProtocol,\n \"use `assembleProtocol` instead\"\n ),\n combine: util.deprecate(\n types.Type.forTypes,\n \"use `Type.forTypes` intead\"\n ),\n infer: util.deprecate(\n types.Type.forValue,\n \"use `Type.forValue` instead\"\n )\n };\n }\n});\n\n// node_modules/ultralight-s3/lib/index.min.js\nvar N = \"AWS4-HMAC-SHA256\";\nvar K = \"aws4_request\";\nvar O = \"s3\";\nvar v = \"2\";\nvar f = \"UNSIGNED-PAYLOAD\";\nvar W = \"application/octet-stream\";\nvar q = \"application/xml\";\nvar w = \"application/json\";\nvar X = [\"accessKeyId\", \"secretAccessKey\", \"sessionToken\", \"password\"];\nvar E = \"x-amz-content-sha256\";\nvar Z = \"x-amz-date\";\nvar V = \"host\";\nvar J = \"Authorization\";\nvar m = \"Content-Type\";\nvar R = \"Content-Length\";\nvar P = \"etag\";\nvar M = \"last-modified\";\nvar u = \"ultralight-s3 Module: \";\nvar ee = `${u}accessKeyId must be a non-empty string`;\nvar te = `${u}secretAccessKey must be a non-empty string`;\nvar se = `${u}endpoint must be a non-empty string`;\nvar re = `${u}bucketName must be a non-empty string`;\nvar L = `${u}key must be a non-empty string`;\nvar $ = `${u}uploadId must be a non-empty string`;\nvar j = `${u}parts must be a non-empty array`;\nvar k = `${u}Each part must have a partNumber (number) and ETag (string)`;\nvar U = `${u}data must be a Buffer or string`;\nvar B = `${u}prefix must be a string`;\nvar F = `${u}maxKeys must be a positive integer`;\nvar G = `${u}delimiter must be a string`;\nvar z = crypto.createHmac || (await import(\"node:crypto\")).createHmac;\nvar Q = crypto.createHash || (await import(\"node:crypto\")).createHash;\ntypeof z > \"u\" && typeof Q > \"u\" && console.error(\"ultralight-S3 Module: Crypto functions are not available, please report the issue with necessary description: https://github.com/sentienhq/ultralight-s3/issues\");\nvar ne = { contents: true };\nvar oe = (p) => `%${p.charCodeAt(0).toString(16).toUpperCase()}`;\nvar C = (p) => encodeURIComponent(p).replace(/[!'()*]/g, oe);\nvar y = (p) => C(p).replace(/%2F/g, \"/\");\nvar x = class {\n constructor({ accessKeyId: e, secretAccessKey: t, endpoint: r, bucketName: n, region: o = \"auto\", maxRequestSizeInBytes: i = 5242880, requestAbortTimeout: a = void 0, logger: c = void 0 }) {\n this.getBucketName = () => this.bucketName, this.setBucketName = (s) => {\n this.bucketName = s;\n }, this.getRegion = () => this.region, this.setRegion = (s) => {\n this.region = s;\n }, this.getEndpoint = () => this.endpoint, this.setEndpoint = (s) => {\n this.endpoint = s;\n }, this.getMaxRequestSizeInBytes = () => this.maxRequestSizeInBytes, this.setMaxRequestSizeInBytes = (s) => {\n this.maxRequestSizeInBytes = s;\n }, this.sanitizeETag = (s) => I(s), this.getProps = () => ({ accessKeyId: this.accessKeyId, secretAccessKey: this.secretAccessKey, region: this.region, bucket: this.bucketName, endpoint: this.endpoint, maxRequestSizeInBytes: this.maxRequestSizeInBytes, requestAbortTimeout: this.requestAbortTimeout, logger: this.logger }), this.setProps = (s) => {\n this._validateConstructorParams(s.accessKeyId, s.secretAccessKey, s.bucketName, s.endpoint), this.accessKeyId = s.accessKeyId, this.secretAccessKey = s.secretAccessKey, this.region = s.region || \"auto\", this.bucketName = s.bucketName, this.endpoint = s.endpoint, this.maxRequestSizeInBytes = s.maxRequestSizeInBytes || 5242880, this.requestAbortTimeout = s.requestAbortTimeout, this.logger = s.logger;\n }, this._validateConstructorParams(e, t, r, n), this.accessKeyId = e, this.secretAccessKey = t, this.endpoint = r, this.bucketName = n, this.region = o, this.maxRequestSizeInBytes = i, this.requestAbortTimeout = a, this.logger = c;\n }\n _validateConstructorParams(e, t, r, n) {\n if (typeof e != \"string\" || e.trim().length === 0) throw new TypeError(ee);\n if (typeof t != \"string\" || t.trim().length === 0) throw new TypeError(te);\n if (typeof r != \"string\" || r.trim().length === 0) throw new TypeError(se);\n if (typeof n != \"string\" || n.trim().length === 0) throw new TypeError(re);\n }\n _checkMethodHeadnGet(e) {\n if (e !== \"GET\" && e !== \"HEAD\") throw this._log(\"error\", `${u}method must be either GET or HEAD`), new Error(\"method must be either GET or HEAD\");\n }\n _checkKey(e) {\n if (typeof e != \"string\" || e.trim().length === 0) throw this._log(\"error\", L), new TypeError(L);\n }\n _checkDelimiter(e) {\n if (typeof e != \"string\" || e.trim().length === 0) throw this._log(\"error\", G), new TypeError(G);\n }\n _checkPrefix(e) {\n if (typeof e != \"string\") throw this._log(\"error\", B), new TypeError(B);\n }\n _checkMaxKeys(e) {\n if (typeof e != \"number\" || e <= 0) throw this._log(\"error\", F), new TypeError(F);\n }\n _checkOpts(e) {\n if (typeof e != \"object\") throw this._log(\"error\", `${u}opts must be an object`), new TypeError(`${u}opts must be an object`);\n }\n _log(e, t, r = {}) {\n if (this.logger && typeof this.logger[e] == \"function\") {\n let n = (a) => typeof a != \"object\" || a === null ? a : Object.keys(a).reduce((c, s) => (X.includes(s.toLowerCase()) ? c[s] = \"[REDACTED]\" : typeof a[s] == \"object\" && a[s] !== null ? c[s] = n(a[s]) : c[s] = a[s], c), Array.isArray(a) ? [] : {}), o = n(r), i = { timestamp: (/* @__PURE__ */ new Date()).toISOString(), level: e, message: t, ...o, context: n({ bucketName: this.bucketName, region: this.region, endpoint: this.endpoint, accessKeyId: this.accessKeyId ? `${this.accessKeyId.substring(0, 4)}...` : void 0 }) };\n this.logger[e](i);\n }\n }\n async getContentLength(e) {\n this._checkKey(e);\n let t = { [E]: f }, r = y(e), { url: n, headers: o } = await this._sign(\"HEAD\", r, {}, t, \"\"), a = (await this._sendRequest(n, \"HEAD\", o)).headers.get(R);\n return a ? parseInt(a, 10) : 0;\n }\n async bucketExists() {\n let e = { [E]: f }, { url: t, headers: r } = await this._sign(\"HEAD\", \"\", {}, e, \"\"), n = await this._sendRequest(t, \"HEAD\", r, \"\", [200, 404, 403]);\n return this._log(\"error\", `Response status: ${n.status, n.statusText}`), !!(n.ok && n.status === 200);\n }\n async createBucket() {\n let e = `\n \n ${this.region}\n \n `, t = { [m]: q, [R]: Buffer.byteLength(e).toString(), [E]: await A(e) }, r = encodeURI(\"\"), { url: n, headers: o } = await this._sign(\"PUT\", r, {}, t, \"\"), i = await this._sendRequest(n, \"PUT\", o, e, [200, 404, 403]);\n return !!(i.ok && i.status === 200);\n }\n async fileExists(e, t = {}) {\n this._checkKey(e);\n let { filteredOpts: r, conditionalHeaders: n } = this._filterIfHeaders(t), o = { [E]: f, ...n }, i = y(e), { url: a, headers: c } = await this._sign(\"HEAD\", i, r, o, \"\");\n try {\n let s = await this._sendRequest(a, \"HEAD\", c, \"\", [200, 404, 412, 304]);\n return s.status === 404 ? false : s.status === 412 || s.status === 304 ? null : s.ok && s.status === 200 ? true : (this._handleErrorResponse(s), false);\n } catch (s) {\n let l = s instanceof Error ? s.message : String(s);\n throw this._log(\"error\", `${u}Failed to check if file exists: ${l}`), new Error(`${u}Failed to check if file exists: ${l}`);\n }\n }\n async _sign(e, t, r = {}, n, o) {\n let i = (/* @__PURE__ */ new Date()).toISOString().replace(/[:-]|\\.\\d{3}/g, \"\"), a = typeof t == \"string\" && t.length > 0 ? new URL(t, this.endpoint) : new URL(this.endpoint);\n a.pathname = `/${encodeURI(this.bucketName)}${a.pathname}`, n[E] = o ? await A(o) : f, n[Z] = i, n[V] = a.host;\n let c = this._buildCanonicalHeaders(n), s = Object.keys(n).map((_) => _.toLowerCase()).sort().join(\";\"), l = await this._buildCanonicalRequest(e, a, r, c, s, o), h = await this._buildStringToSign(i, l), d = await this._calculateSignature(i, h), g = this._buildAuthorizationHeader(i, s, d);\n return n[J] = g, { url: a.toString(), headers: n };\n }\n _buildCanonicalHeaders(e) {\n return Object.entries(e).map(([t, r]) => `${t.toLowerCase()}:${String(r).trim()}`).sort().join(`\n`);\n }\n async _buildCanonicalRequest(e, t, r, n, o, i) {\n return [e, t.pathname, this._buildCanonicalQueryString(r), `${n}\n`, o, i ? await A(i) : f].join(`\n`);\n }\n async _buildStringToSign(e, t) {\n let r = [e.slice(0, 8), this.region, O, K].join(\"/\");\n return [N, e, r, await A(t)].join(`\n`);\n }\n async _calculateSignature(e, t) {\n let r = await this._getSignatureKey(e.slice(0, 8));\n return H(r, t, \"hex\");\n }\n _buildAuthorizationHeader(e, t, r) {\n let n = [e.slice(0, 8), this.region, O, K].join(\"/\");\n return [`${N} Credential=${this.accessKeyId}/${n}`, `SignedHeaders=${t}`, `Signature=${r}`].join(\", \");\n }\n _filterIfHeaders(e) {\n let t = {}, r = {}, n = [\"if-match\", \"if-none-match\", \"if-modified-since\", \"if-unmodified-since\"];\n for (let [o, i] of Object.entries(e)) n.includes(o) ? r[o] = i : t[o] = i;\n return { filteredOpts: t, conditionalHeaders: r };\n }\n async list(e = \"/\", t = \"\", r = 1e3, n = \"GET\", o = {}) {\n this._checkDelimiter(e), this._checkPrefix(t), this._checkMaxKeys(r), this._checkMethodHeadnGet(n), this._checkOpts(o), this._log(\"info\", `Listing objects in ${t}`);\n let i = { \"list-type\": v, \"max-keys\": String(r), ...o };\n t.length > 0 && (i.prefix = t);\n let a = { [m]: w, [E]: f }, c = e === \"/\" ? e : C(e), { url: s, headers: l } = await this._sign(\"GET\", c, i, a, \"\"), h = `${s}?${new URLSearchParams(i)}`, d = await this._sendRequest(h, \"GET\", l), g = await d.text();\n if (n === \"HEAD\") {\n let T = d.headers.get(R), S = d.headers.get(M), Y = d.headers.get(P);\n return { size: T ? +T : void 0, mtime: S ? new Date(S) : void 0, ETag: Y || void 0 };\n }\n let _ = b(g), D = _.listBucketResult || _.error || _;\n return D.contents || D;\n }\n async listMultiPartUploads(e = \"/\", t = \"\", r = \"GET\", n = {}) {\n var o, i, a;\n this._checkDelimiter(e), this._checkPrefix(t), this._checkMethodHeadnGet(r), this._checkOpts(n), this._log(\"info\", `Listing multipart uploads in ${t}`);\n let c = { uploads: \"\", ...n }, s = { [m]: w, [E]: f }, l = e === \"/\" ? e : C(e), { url: h, headers: d } = await this._sign(\"GET\", l, c, s, \"\"), g = `${h}?${new URLSearchParams(c)}`, _ = await this._sendRequest(g, \"GET\", d), D = await _.text();\n if (r === \"HEAD\") return { size: +((o = _.headers.get(R)) !== null && o !== void 0 ? o : \"0\"), mtime: new Date((i = _.headers.get(M)) !== null && i !== void 0 ? i : \"\"), ETag: (a = _.headers.get(P)) !== null && a !== void 0 ? a : \"\" };\n let T = b(D), S = T.listMultipartUploadsResult || T.error || T;\n return S.uploads || S;\n }\n async get(e, t = {}) {\n this._checkKey(e), this._log(\"info\", `Getting object ${e}`);\n let { filteredOpts: r, conditionalHeaders: n } = this._filterIfHeaders(t), o = { [m]: w, [E]: f, ...n }, i = y(e), { url: a, headers: c } = await this._sign(\"GET\", i, r, o, \"\"), s = await this._sendRequest(a, \"GET\", c, \"\", [200, 404, 412, 304]);\n if (s.status === 404 || s.status === 412 || s.status === 304) return this._log(\"error\", `Failed to get object. Status: ${s.status}`), null;\n if (!s.ok) throw this._log(\"error\", `Failed to get object. Status: ${s.status}`), new Error(`Failed to get object. Status: ${s.status}`);\n return s;\n }\n async getObjectWithETag(e, t = {}) {\n this._checkKey(e), this._log(\"info\", `Getting object ${e}`);\n let { filteredOpts: r, conditionalHeaders: n } = this._filterIfHeaders(t), o = { [m]: w, [E]: f, ...n }, i = y(e), { url: a, headers: c } = await this._sign(\"GET\", i, r, o, \"\");\n try {\n let s = await this._sendRequest(a, \"GET\", c, \"\", [200, 404, 412, 304]);\n if (s.status === 404 || s.status === 412 || s.status === 304) return this._log(\"error\", `Failed to get object. Status: ${s.status}`), { etag: null, data: null };\n if (!s.ok) throw this._log(\"error\", `Failed to get object. Status: ${s.status}`), new Error(`Failed to get object. Status: ${s.status}`);\n let l = s.headers.get(\"etag\");\n if (!l) throw new Error(\"ETag not found in response headers\");\n let h = await s.text();\n return { etag: I(l), data: h };\n } catch (s) {\n throw this._log(\"error\", `Error getting object ${e} with ETag: ${s}`), s;\n }\n }\n async getEtag(e, t = {}) {\n this._checkKey(e), this._log(\"info\", `Getting etag object ${e}`);\n let { filteredOpts: r, conditionalHeaders: n } = this._filterIfHeaders(t), o = { [m]: w, [E]: f, ...n }, i = y(e), { url: a, headers: c } = await this._sign(\"HEAD\", i, r, o, \"\"), s = await this._sendRequest(a, \"HEAD\", c, \"\", [200, 412, 304]);\n if (this._log(\"info\", `Response status: ${s.status, s.statusText}`), s.status === 412 || s.status === 304) return null;\n let l = s.headers.get(\"etag\");\n if (!l) throw this._log(\"error\", \"ETag not found in response headers\"), new Error(\"ETag not found in response headers\");\n return I(l);\n }\n async getResponse(e, t = true, r = 0, n = this.maxRequestSizeInBytes, o = {}) {\n this._checkKey(e);\n let { filteredOpts: i, conditionalHeaders: a } = this._filterIfHeaders({ ...o }), c = { [m]: w, [E]: f, ...t ? {} : { range: `bytes=${r}-${n - 1}` }, ...a }, s = y(e), { url: l, headers: h } = await this._sign(\"GET\", s, i, c, \"\"), d = `${l}?${new URLSearchParams(i)}`;\n return this._sendRequest(d, \"GET\", h);\n }\n async put(e, t) {\n if (this._checkKey(e), !(t instanceof Buffer || typeof t == \"string\")) throw this._log(\"error\", U), new TypeError(U);\n this._log(\"info\", `Uploading object ${e}`);\n let r = typeof t == \"string\" ? Buffer.byteLength(t) : t.length, n = { [R]: r }, o = y(e), { url: i, headers: a } = await this._sign(\"PUT\", o, {}, n, t);\n return this._sendRequest(i, \"PUT\", a, t, [200]);\n }\n async getMultipartUploadId(e, t = W) {\n if (this._checkKey(e), typeof t != \"string\") throw this._log(\"error\", `${u}fileType must be a string`), new TypeError(`${u}fileType must be a string`);\n this._log(\"info\", `Initiating multipart upload for object ${e}`);\n let r = { uploads: \"\" }, n = { [m]: t, [E]: f }, o = y(e), { url: i, headers: a } = await this._sign(\"POST\", o, r, n, \"\"), c = `${i}?${new URLSearchParams(r)}`, l = await (await this._sendRequest(c, \"POST\", a)).text(), h = b(l);\n if (typeof h == \"object\" && h !== null && \"error\" in h && typeof h.error == \"object\" && h.error !== null && \"message\" in h.error) {\n let d = String(h.error.message);\n throw this._log(\"error\", `${u}Failed to abort multipart upload: ${d}`), new Error(`${u}Failed to abort multipart upload: ${d}`);\n }\n if (typeof h == \"object\" && h !== null) {\n if (!h.initiateMultipartUploadResult || !h.initiateMultipartUploadResult.uploadId) throw this._log(\"error\", `${u}Failed to create multipart upload: no uploadId in response`), new Error(`${u}Failed to create multipart upload: Missing upload ID in response`);\n return h.initiateMultipartUploadResult.uploadId;\n } else throw this._log(\"error\", `${u}Failed to create multipart upload: unexpected response format`), new Error(`${u}Failed to create multipart upload: Unexpected response format`);\n }\n async uploadPart(e, t, r, n, o = {}) {\n this._validateUploadPartParams(e, t, r, n, o);\n let i = { uploadId: r, partNumber: n, ...o }, a = { [R]: t.length }, c = y(e), { url: s, headers: l } = await this._sign(\"PUT\", c, i, a, t), h = `${s}?${new URLSearchParams(i)}`, d = await this._sendRequest(h, \"PUT\", l, t), g = I(d.headers.get(\"etag\") || \"\");\n return { partNumber: n, ETag: g };\n }\n _validateUploadPartParams(e, t, r, n, o) {\n if (this._checkKey(e), !(t instanceof Buffer || typeof t == \"string\")) throw this._log(\"error\", U), new TypeError(U);\n if (typeof r != \"string\" || r.trim().length === 0) throw this._log(\"error\", $), new TypeError($);\n if (!Number.isInteger(n) || n <= 0) throw this._log(\"error\", `${u}partNumber must be a positive integer`), new TypeError(`${u}partNumber must be a positive integer`);\n this._checkOpts(o);\n }\n async completeMultipartUpload(e, t, r) {\n if (this._checkKey(e), typeof t != \"string\" || t.trim().length === 0) throw this._log(\"error\", $), new TypeError($);\n if (!Array.isArray(r) || r.length === 0) throw this._log(\"error\", j), new TypeError(j);\n if (!r.every((_) => typeof _.partNumber == \"number\" && typeof _.ETag == \"string\")) throw this._log(\"error\", k), new TypeError(k);\n this._log(\"info\", `Complete multipart upload ${t} for object ${e}`);\n let n = { uploadId: t }, o = this._buildCompleteMultipartUploadXml(r), i = { [m]: q, [R]: Buffer.byteLength(o).toString(), [E]: await A(o) }, a = y(e), { url: c, headers: s } = await this._sign(\"POST\", a, n, i, o), l = `${c}?${new URLSearchParams(n)}`, d = await (await this._sendRequest(l, \"POST\", s, o)).text(), g = b(d);\n if (typeof g == \"object\" && g !== null && \"error\" in g && typeof g.error == \"object\" && g.error !== null && \"message\" in g.error) {\n let _ = String(g.error.message);\n throw this._log(\"error\", `${u}Failed to abort multipart upload: ${_}`), new Error(`${u}Failed to abort multipart upload: ${_}`);\n }\n return g.completeMultipartUploadResult;\n }\n async abortMultipartUpload(e, t) {\n if (this._checkKey(e), typeof t != \"string\" || t.trim().length === 0) throw this._log(\"error\", $), new TypeError($);\n this._log(\"info\", `Aborting multipart upload ${t} for object ${e}`);\n let r = { uploadId: t }, n = { [m]: q, [E]: f };\n try {\n let o = y(e), { url: i, headers: a } = await this._sign(\"DELETE\", o, r, n, \"\"), c = `${i}?${new URLSearchParams(r)}`, s = await this._sendRequest(c, \"DELETE\", a);\n if (s.ok) {\n let l = await s.text(), h = b(l);\n if (typeof h == \"object\" && h !== null && \"error\" in h && typeof h.error == \"object\" && h.error !== null && \"message\" in h.error) {\n let d = String(h.error.message);\n throw this._log(\"error\", `${u}Failed to abort multipart upload: ${d}`), new Error(`${u}Failed to abort multipart upload: ${d}`);\n }\n return { status: \"Aborted\", key: e, uploadId: t, response: h };\n } else throw this._log(\"error\", `${u}Abort request failed with status ${s.status}`), new Error(`${u}Abort request failed with status ${s.status}`);\n } catch (o) {\n let i = o instanceof Error ? o.message : String(o);\n throw this._log(\"error\", `${u}Failed to abort multipart upload for key ${e}: ${i}`), new Error(`${u}Failed to abort multipart upload for key ${e}: ${i}`);\n }\n }\n _buildCompleteMultipartUploadXml(e) {\n return `\n \n ${e.map((t) => `\n \n ${t.partNumber}\n ${t.ETag}\n \n `).join(\"\")}\n \n `;\n }\n async delete(e) {\n this._checkKey(e), this._log(\"info\", `Deleting object ${e}`);\n let t = { [m]: w, [E]: f }, r = y(e), { url: n, headers: o } = await this._sign(\"DELETE\", r, {}, t, \"\"), i = await this._sendRequest(n, \"DELETE\", o);\n return i.status === 204 || i.status === 200;\n }\n async _sendRequest(e, t, r, n, o = []) {\n this._log(\"info\", `Sending ${t} request to ${e}, headers: ${JSON.stringify(r)}`);\n let i = await fetch(e, { method: t, headers: r, body: [\"GET\", \"HEAD\"].includes(t) ? void 0 : n, signal: this.requestAbortTimeout !== void 0 ? AbortSignal.timeout(this.requestAbortTimeout) : void 0 });\n return this._log(\"info\", `Response status: ${i.status, o}`), !i.ok && !o.includes(i.status) && await this._handleErrorResponse(i), i;\n }\n async _handleErrorResponse(e) {\n let t = await e.text(), r = e.headers.get(\"x-amz-error-code\") || \"Unknown\", n = e.headers.get(\"x-amz-error-message\") || e.statusText;\n throw this._log(\"error\", `${u}Request failed with status ${e.status}: ${r} - ${n},err body: ${t}`), new Error(`${u}Request failed with status ${e.status}: ${r} - ${n}, err body: ${t}`);\n }\n _buildCanonicalQueryString(e) {\n return Object.keys(e).length < 1 ? \"\" : Object.keys(e).sort().map((t) => `${encodeURIComponent(t)}=${encodeURIComponent(e[t])}`).join(\"&\");\n }\n async _getSignatureKey(e) {\n let t = await H(`AWS4${this.secretAccessKey}`, e), r = await H(t, this.region), n = await H(r, O);\n return H(n, K);\n }\n};\nvar A = async (p) => {\n let e = Q(\"sha256\");\n return e.update(p), e.digest(\"hex\");\n};\nvar H = async (p, e, t) => {\n let r = z(\"sha256\", p);\n return r.update(e), r.digest(t);\n};\nvar I = (p) => {\n let e = { '\"': \"\", \""\": \"\", \""\": \"\", \""\": \"\", \""\": \"\" };\n return p.replace(/^(\"|"|")|(\"|"|")$/g, (t) => e[t]);\n};\nvar b = (p) => {\n let e = (o) => o.replace(/"/g, '\"').replace(/'/g, \"'\").replace(/</g, \"<\").replace(/>/g, \">\").replace(/&/g, \"&\"), t = {}, r = /<(\\w)([-\\w]+)(?:\\/|[^>]*>((?:(?!<\\1)[\\s\\S])*)<\\/\\1\\2)>/gm, n;\n for (; n = r.exec(p); ) {\n let [, o, i, a] = n, c = o.toLowerCase() + i, s = a != null ? b(a) : true;\n typeof s == \"string\" ? t[c] = I(e(s)) : Array.isArray(t[c]) ? t[c].push(s) : t[c] = t[c] != null ? [t[c], s] : ne[c] ? [s] : s;\n }\n return Object.keys(t).length ? t : e(p);\n};\n\n// src/lowstorage.ts\nvar import_avsc = __toESM(require_lib(), 1);\n\n// src/errors.ts\nvar lowstorage_ERROR_CODES = {\n MISSING_ARGUMENT: \"MISSING_ARGUMENT\",\n COLLECTION_EXISTS: \"COLLECTION_EXISTS\",\n CREATE_COLLECTION_ERROR: \"CREATE_COLLECTION_ERROR\",\n RENAME_COLLECTION_ERROR: \"RENAME_COLLECTION_ERROR\",\n REMOVE_COLLECTION_ERROR: \"REMOVE_COLLECTION_ERROR\",\n UPDATE_COLLECTION_SCHEMA_ERROR: \"UPDATE_COLLECTION_SCHEMA_ERROR\",\n COLLECTION_NOT_FOUND: \"COLLECTION_NOT_FOUND\",\n SCHEMA_VALIDATION_ERROR: \"SCHEMA_VALIDATION_ERROR\",\n DOCUMENT_VALIDATION_ERROR: \"DOCUMENT_VALIDATION_ERROR\",\n S3_OPERATION_ERROR: \"S3_OPERATION_ERROR\",\n FIND_ERROR: \"FIND_ERROR\",\n FIND_ONE_ERROR: \"FIND_ONE_ERROR\",\n SAVE_DATA_ERROR: \"SAVE_DATA_ERROR\",\n INSERT_ERROR: \"INSERT_ERROR\",\n UPDATE_ERROR: \"UPDATE_ERROR\",\n UPDATE_ONE_ERROR: \"UPDATE_ONE_ERROR\",\n DELETE_ERROR: \"DELETE_ERROR\",\n COUNT_ERROR: \"COUNT_ERROR\",\n UNKNOWN_ERROR: \"UNKNOWN_ERROR\"\n};\nvar lowstorageError = class extends Error {\n constructor(message, code = lowstorage_ERROR_CODES.UNKNOWN_ERROR) {\n super(`lowstorageError: ${message} :: code: ${code}`);\n this.name = this.constructor.name;\n this.code = code;\n Error.captureStackTrace(this, this.constructor);\n }\n};\nvar SchemaValidationError = class extends lowstorageError {\n constructor(message, code = lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR) {\n super(message, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR);\n }\n};\nvar DocumentValidationError = class extends lowstorageError {\n constructor(message, code = lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR) {\n super(message, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR);\n }\n};\nvar S3OperationError = class extends lowstorageError {\n constructor(message, operation) {\n super(`S3 ${operation} operation failed: ${message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n};\n\n// src/helpers.ts\nimport { randomUUID } from \"node:crypto\";\nvar matchesQuery = (document, query) => {\n return Object.keys(query).every((key) => document[key] === query[key]);\n};\nvar generateUUID = async () => {\n if (typeof randomUUID !== \"undefined\" && typeof randomUUID === \"function\") {\n return randomUUID();\n }\n if (typeof crypto !== \"undefined\" && typeof crypto === \"object\" && typeof crypto.randomUUID === \"function\") {\n return crypto.randomUUID();\n }\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, function(c) {\n var r = Math.random() * 16 | 0, v2 = c === \"x\" ? r : r & 3 | 8;\n return v2.toString(16);\n });\n};\nvar ensureIdFieldInSchema = (schema) => {\n const idField = {\n name: \"_id\",\n type: \"string\",\n size: 16,\n logicalType: \"UUID\"\n };\n if (typeof schema === \"undefined\" || schema === null) {\n return schema;\n }\n if (\"type\" in schema && schema.type === \"record\" && \"fields\" in schema && Array.isArray(schema.fields)) {\n const hasIdField = schema.fields.some((field) => field.name === \"_id\");\n if (!hasIdField) {\n schema.fields.unshift(idField);\n }\n } else if (\"type\" in schema && schema.type === \"array\" && \"items\" in schema && schema.items !== null && typeof schema.items === \"object\" && \"type\" in schema.items && schema.items.type === \"record\" && \"fields\" in schema.items && Array.isArray(schema.items.fields)) {\n const hasIdField = schema.items.fields.some((field) => field.name === \"_id\");\n if (!hasIdField) {\n schema.items.fields.unshift(idField);\n }\n }\n return schema;\n};\n\n// src/lowstorage.ts\nvar MODULE_NAME = \"lowstorage\";\nvar DEFAULT_DELIMITER = \"/\";\nvar PROJECT_DIR_PREFIX = \"lowstorage\";\nvar COL_SUFFIX = \".avro\";\nvar CHUNG_1MB = 1024 * 1024;\nvar CHUNG_5MB = 5 * CHUNG_1MB;\nvar EMPTY_DATA = Buffer.from(\"\", \"utf8\");\nvar errorValidationFn = (errorCode = lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR) => {\n throw new DocumentValidationError(`${MODULE_NAME}: Invalid document or schema ${errorCode}`);\n};\nvar _hasColName = (colName = \"\") => {\n if (colName.trim() === \"\" || colName === null || typeof colName === \"undefined\" || colName.length > 255 || colName === null) {\n throw new lowstorageError(`${MODULE_NAME}: Collection name is required, null or too long`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n }\n};\nvar lowstorage = class {\n constructor(options) {\n this._checkArgs = (args) => {\n const requiredFields = [\"accessKeyId\", \"secretAccessKey\", \"endpoint\", \"bucketName\"];\n for (const field of requiredFields) {\n if (!args[field]) {\n throw new lowstorageError(`${MODULE_NAME}: ${field} is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n }\n }\n };\n /**\n * Get the S3 instance associated with the lowstorage instance.\n * @returns {S3} The S3 instance. Use this to perform S3 operations. Check for ultralight-s3 for more details.\n */\n this.s3 = () => {\n return this._s3;\n };\n this._checkArgs(options);\n this._schemas = /* @__PURE__ */ new Map();\n this._s3 = new x(options);\n this._dirPrefix = options.dirPrefix || PROJECT_DIR_PREFIX;\n this._avroParse = import_avsc.Type;\n }\n /**\n * Check if a bucket exists.\n * @returns {Promise} True if the bucket exists, false otherwise.\n * @throws {lowstorageError} If there's an error.\n */\n async checkIfStorageExists() {\n try {\n const exists = await this._s3.bucketExists();\n return !!exists;\n } catch (error) {\n if (error.message.includes(\"Not Found\")) {\n return false;\n }\n throw new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n }\n /**\n * Create a new storage bucket if it doesn't exist.\n * @returns {Promise} A Promise that resolves to true if the bucket was created or already exists, false otherwise.\n * @throws {lowstorageError} If there's an error.\n */\n async createStorage() {\n try {\n const exists = await this.checkIfStorageExists();\n if (!exists) {\n const createdBucket = await this._s3.createBucket();\n return createdBucket;\n }\n return exists;\n throw new lowstorageError(`${MODULE_NAME}: Bucket already exists`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n } catch (error) {\n if (error instanceof lowstorageError) {\n throw error;\n }\n throw new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n }\n /**\n * List all collections.\n * @returns {Promise} An array of collection names.\n * @throws {S3OperationError} If there's an error during S3 operation.\n */\n async listCollections() {\n try {\n const listed = await this._s3.list(DEFAULT_DELIMITER, this._dirPrefix);\n if (Array.isArray(listed)) {\n return listed.map((entry) => entry.key.slice(this._dirPrefix.length + 1, -COL_SUFFIX.length));\n } else if (typeof listed === \"object\" && listed !== null && \"keyCount\" in listed && listed.keyCount === \"0\") {\n return [];\n }\n return [];\n } catch (error) {\n throw new S3OperationError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n }\n /**\n * Check if a collection exists.\n * @param {string} colName - The name of the collection.\n * @returns {Promise} True if the collection exists, false otherwise.\n * @throws {lowstorageError} If there's an error.\n */\n async collectionExists(colName = \"\") {\n try {\n _hasColName(colName);\n const exists = await this._s3.fileExists(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`);\n return !!exists;\n } catch (error) {\n if (error.message.includes(\"Not Found\")) {\n return false;\n }\n throw new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND);\n }\n }\n /**\n * Create a new collection.\n * @param {string} colName - The name of the collection.\n * @param {Object} [schema] - The schema for the collection.\n * @param {Array} [data=[]] - The initial data for the collection.\n * @returns {Promise} A Promise that resolves to a Collection object.\n * @throws {lowstorageError} If there's an error.\n */\n async createCollection(colName = \"\", schema, data = []) {\n try {\n _hasColName(colName);\n const exists = await this.collectionExists(colName);\n if (!exists) {\n if (typeof schema !== \"undefined\" && schema !== null) {\n try {\n const type = this._avroParse.forSchema(schema);\n if (!type) {\n throw new SchemaValidationError(\n `${MODULE_NAME}: Schema is invalid: ${schema} ${lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR}`\n );\n } else {\n this._schemas.set(colName, schema);\n }\n } catch (error) {\n throw new SchemaValidationError(`${MODULE_NAME}: Schema is invalid: ${schema}`, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR);\n }\n }\n if (data.length > 0 && schema) {\n const wrapperType = this._avroParse.forSchema({ type: \"array\", items: schema });\n await this._s3.put(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`, wrapperType.toBuffer(data));\n } else {\n await this._s3.put(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`, EMPTY_DATA);\n }\n return this.collection(colName, schema, false);\n }\n throw new lowstorageError(`${MODULE_NAME}: Collection ${colName} already exists`, lowstorage_ERROR_CODES.COLLECTION_EXISTS);\n } catch (error) {\n if (error instanceof lowstorageError) {\n throw error;\n }\n throw new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.CREATE_COLLECTION_ERROR);\n }\n }\n /**\n * Remove a collection.\n * @param {string} colName - The name of the collection.\n * @returns {Promise} A Promise that resolves to true if the collection is removed, false otherwise.\n * @throws {lowstorageError} If there's an error.\n */\n async removeCollection(colName = \"\") {\n try {\n _hasColName(colName);\n const exists = await this.collectionExists(colName);\n if (exists) {\n await this._s3.delete(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`);\n const exists2 = await this.collectionExists(colName);\n if (typeof exists2 === \"boolean\") {\n if (!exists2) {\n this._schemas.delete(colName);\n return true;\n }\n throw new lowstorageError(`${MODULE_NAME}: Failed to delete collection ${colName}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n throw new S3OperationError(`${MODULE_NAME}: Failed to delete collection ${colName}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n throw new lowstorageError(`${MODULE_NAME}: Collection ${colName} does not exist`, lowstorage_ERROR_CODES.REMOVE_COLLECTION_ERROR);\n } catch (error) {\n if (error instanceof S3OperationError) {\n throw error;\n }\n throw new lowstorageError(\n `${MODULE_NAME}: Failed to remove collection: ${error.message}`,\n lowstorage_ERROR_CODES.REMOVE_COLLECTION_ERROR\n );\n }\n }\n /**\n * Get or create a collection.\n * @param {string} colName - The name of the collection.\n * @param {Object} [schema] - The schema for the collection.\n * @param {boolean} [autoCreate=true] - Whether to automatically create the collection if it doesn't exist.\n * @returns {Promise} A Promise that resolves to a Collection object.\n * @throws {lowstorageError} If there's an error.\n */\n async collection(colName = \"\", schema, autoCreate = true) {\n try {\n _hasColName(colName);\n const colPath = `${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`;\n const exists = await this._s3.fileExists(colPath);\n if (!exists) {\n if (!autoCreate) {\n throw new lowstorageError(`${MODULE_NAME}: Collection ${colName} does not exist`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND);\n }\n await this._s3.put(colPath, EMPTY_DATA);\n }\n const colSchema = schema || this._schemas.get(colName) || void 0;\n return new Collection(colName, colSchema, this._s3, this._dirPrefix);\n } catch (error) {\n if (error.message.includes(\"unknown type\")) {\n throw new SchemaValidationError(\n `${MODULE_NAME}: Schema input is invalid: ${error.message}`,\n lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR\n );\n }\n throw new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND);\n }\n }\n};\nvar Collection = class _Collection {\n constructor(colName = \"\", schema, s3, dirPrefix = PROJECT_DIR_PREFIX, safeWrite = false, chunkSize = CHUNG_5MB) {\n this.getProps = () => ({\n colName: this._colName,\n s3: this._s3,\n schema: this._schema,\n avroParse: this._avroParse,\n avroType: this._avroType,\n dirPrefix: this._dirPrefix,\n safeWrite: this._safeWrite,\n chunkSize: this._chunkSize\n });\n this.setProps = (props) => {\n this._colName = props.colName;\n this._schema = props.schema;\n this._s3 = props.s3;\n this._avroParse = props.avroParse;\n this._avroType = props.avroType;\n this._dirPrefix = props.dirPrefix;\n this._safeWrite = props.safeWrite;\n this._chunkSize = props.chunkSize;\n };\n this.setSafeWrite = (safeWrite) => {\n this._safeWrite = safeWrite;\n };\n this.getSafeWrite = () => {\n return this._safeWrite;\n };\n this.getAvroSchema = () => {\n return this._schema;\n };\n this.setAvroSchema = (schema) => {\n try {\n this._schema = ensureIdFieldInSchema(schema);\n this._avroType = typeof schema === \"undefined\" ? null : this._avroParse.forSchema(schema);\n } catch (error) {\n throw new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR);\n }\n };\n this.getCollectionETag = () => {\n return this._lastETag;\n };\n this.inferAvroSchema = (data, type = \"record\") => {\n if (Array.isArray(data)) {\n data = data[0];\n }\n const inferedType = this._avroParse.forValue(data);\n const schema = inferedType.schema();\n return ensureIdFieldInSchema(schema);\n };\n this._colName = colName.trim();\n this._s3 = s3;\n this._schema = ensureIdFieldInSchema(schema);\n this._dirPrefix = dirPrefix;\n this._safeWrite = safeWrite;\n this._chunkSize = chunkSize || CHUNG_5MB;\n this._s3.setMaxRequestSizeInBytes(this._chunkSize);\n this._avroParse = import_avsc.Type;\n this._lastETag = \"\";\n this._dataCache = [];\n this._avroType = typeof schema === \"undefined\" ? null : this._avroParse.forSchema(schema);\n this._key = `${this._dirPrefix}${DEFAULT_DELIMITER}${this._colName}${COL_SUFFIX}`;\n }\n async forceLoadData() {\n try {\n this._lastETag = \"\";\n const data = await this._loadData();\n this._dataCache = data;\n return true;\n } catch (error) {\n throw new lowstorageError(`${MODULE_NAME}: Failed to force update data: ${error.message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n }\n async _loadData() {\n try {\n if (this._avroType === null || typeof this._avroType === \"undefined\") {\n throw new lowstorageError(\n `${MODULE_NAME}: Missing type definition. Configure before operations `,\n lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR\n );\n }\n const { etag, data } = await this._s3.getObjectWithETag(this._key, { \"if-none-match\": this._lastETag });\n if (data === null) {\n return this._dataCache;\n }\n this._lastETag = etag === null ? this._lastETag : etag;\n const wrapperType = this._avroParse.forSchema({ type: \"array\", items: this._avroType });\n if (data.length < this._chunkSize) {\n this._dataCache = data.length > 0 ? wrapperType.fromBuffer(Buffer.from(data, \"utf8\")) : [];\n return this._dataCache;\n }\n let offset = this._chunkSize;\n let bufferArr = [Buffer.from(data, \"utf8\")];\n let repeat = true;\n while (repeat) {\n const nextDataResponse = await this._s3.getResponse(this._key, false, offset, offset + this._chunkSize);\n const nextDataBody = await nextDataResponse.text();\n bufferArr.push(Buffer.from(nextDataBody, \"utf8\"));\n offset += this._chunkSize;\n const contentLength = parseInt(nextDataResponse.headers.get(\"content-length\") || nextDataBody.length.toString());\n if (contentLength < this._chunkSize) {\n repeat = false;\n }\n }\n const bufferedData = Buffer.concat(bufferArr);\n this._dataCache = wrapperType.fromBuffer(bufferedData);\n return this._dataCache;\n } catch (error) {\n if (error.toString().indexOf(\"status 404: Unknown - Not Found\") > -1) {\n this._dataCache = [];\n return this._dataCache;\n }\n throw new S3OperationError(`${MODULE_NAME}: Failed to load data: ${error.message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n }\n async _saveData(data) {\n try {\n if (this._avroType === null || typeof this._avroType === \"undefined\") {\n throw new lowstorageError(\n `${MODULE_NAME}: Missing type definition. Configure before operations `,\n lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR\n );\n }\n const wrapperType = this._avroParse.forSchema({ type: \"array\", items: this._avroType });\n const dataBuffer = data.length > 0 ? wrapperType.toBuffer(data) : EMPTY_DATA;\n if (this._safeWrite && this._lastETag !== \"\") {\n const currentETag = await this._s3.getEtag(this._key);\n if (currentETag !== null && currentETag !== this._lastETag) {\n return false;\n }\n }\n const resp = await this._s3.put(this._key, dataBuffer);\n if (typeof resp === \"object\" && \"status\" in resp && resp.status !== 200) {\n throw new S3OperationError(`${MODULE_NAME}: Failed to save data`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n const newETag = resp.headers?.get(\"etag\") || \"\";\n if (newETag && newETag.length > 0) {\n this._lastETag = this._s3.sanitizeETag(newETag);\n this._dataCache = data;\n }\n return true;\n } catch (error) {\n if (error instanceof S3OperationError) {\n throw error;\n }\n throw new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.SAVE_DATA_ERROR);\n }\n }\n /**\n * Insert a document into the collection.\n * @param {Object|Array} doc - The document to insert.\n * @param {Object} [schema=undefined] - The schema for the document.\n * @returns {Promise} A Promise that resolves to the array of inserted document(s).\n * @throws {lowstorageError} If there's an error.\n */\n async insert(doc, schema) {\n try {\n if (doc === void 0 || doc === null) {\n throw new lowstorageError(`${MODULE_NAME}: Document is required for insert`, lowstorage_ERROR_CODES.INSERT_ERROR);\n }\n if (typeof doc !== \"object\" && !Array.isArray(doc)) {\n throw new DocumentValidationError(\n `${MODULE_NAME}: Document must be an object or an array`,\n lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR\n );\n }\n const items = !Array.isArray(doc) ? [doc] : doc;\n const schemaWithId = schema ? ensureIdFieldInSchema(schema) : this._schema || this.inferAvroSchema(items[0]);\n const avroType = this._avroParse.forSchema(schemaWithId);\n if (!avroType) {\n throw new SchemaValidationError(\n `${MODULE_NAME}: Schema is required - Pass a schema to the insert method`,\n lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR\n );\n }\n this._avroType = avroType;\n const data = await this._loadData();\n for (let item of items) {\n if (typeof item !== \"object\" || item === null) {\n throw new DocumentValidationError(\n `${MODULE_NAME}: Invalid input: input must be an object or an array of objects`,\n lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR\n );\n }\n item._id = item._id || await generateUUID();\n const validBuffer = this._avroType.isValid(item, {\n errorHook: errorValidationFn,\n noUndeclaredFields: true\n });\n if (validBuffer === true) {\n data.push(item);\n } else {\n throw new DocumentValidationError(`${MODULE_NAME}: Invalid document or schema`, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR);\n }\n }\n const success = await this._saveData(data);\n if (!success) {\n throw new S3OperationError(`${MODULE_NAME}: Failed to insert document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n this.setAvroSchema(schemaWithId);\n return items;\n } catch (error) {\n if (error.message.includes(\"unknown type\")) {\n throw new SchemaValidationError(\n `${MODULE_NAME}: Schema input is invalid: ${error.message}`,\n lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR\n );\n }\n if (error instanceof lowstorageError) {\n throw error;\n }\n throw new lowstorageError(`${MODULE_NAME} Insert operation failed: ${error.message}`, lowstorage_ERROR_CODES.INSERT_ERROR);\n }\n }\n /**\n * Find documents in the collection.\n * @param {Object} [query={}] - The query to filter documents.\n * @param {Object} [options={}] - The options for pagination.\n * @param {number} [options.skip=0] - The number of documents to skip. Default is 0.\n * @param {number} [options.limit=undefined] - The maximum number of documents to return. Default is undefined, which means no limit.\n * @returns {Promise} A Promise that resolves to an array of matching documents.\n * @throws {lowstorageError} If there's an error.\n */\n async find(query = {}, options = {}) {\n try {\n if (query === void 0 || query === null) {\n throw new lowstorageError(`${MODULE_NAME}: Query is required for update`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n }\n const data = await this._loadData();\n const start = options.skip !== void 0 ? parseInt(String(options.skip), 10) : 0;\n const end = options.limit !== void 0 ? start + parseInt(String(options.limit), 10) : void 0;\n const filteredData = data.filter((doc) => matchesQuery(doc, query)).slice(start, end);\n return filteredData;\n } catch (error) {\n throw new lowstorageError(`${MODULE_NAME}: Find operation failed: ${error.message}`, lowstorage_ERROR_CODES.FIND_ERROR);\n }\n }\n /**\n * Find the first document in the collection that matches the query.\n * @param {Object} [query={}] - The query to filter documents.\n * @returns {Promise} A Promise that resolves to the first matching document or null if no match is found.\n * @throws {lowstorageError} If there's an error.\n */\n async findOne(query = {}) {\n try {\n if (query === null) {\n throw new lowstorageError(`${MODULE_NAME}: Query cannot be null`, lowstorage_ERROR_CODES.INVALID_ARGUMENT);\n }\n const result = await this.find(query, { limit: 1 });\n return result[0] || null;\n } catch (error) {\n if (error instanceof lowstorageError) {\n throw error;\n }\n throw new lowstorageError(`${MODULE_NAME}: FindOne operation failed: ${error.message}`, lowstorage_ERROR_CODES.FIND_ONE_ERROR);\n }\n }\n /**\n * Update a single document in the collection that matches the query.\n * @param {Object} [query={}] - The query to filter the document to update.\n * @param {Object} [update={}] - The update operations to apply to the matching document.\n * @returns {Promise} A Promise that resolves to number of documents updated.\n * @throws {lowstorageError} If the updateOne operation fails.\n * @throws {SchemaValidationError} If the schema is not defined for the collection.\n * @throws {DocumentValidationError} If the updated document is invalid.\n * @throws {S3OperationError} If the S3 operation fails.\n */\n async update(query = {}, update = {}, options = {}) {\n try {\n if (query === void 0 || query === null || update === void 0 || update === null) {\n throw new lowstorageError(\n `${MODULE_NAME}: Query and update values are required for update`,\n lowstorage_ERROR_CODES.MISSING_ARGUMENT\n );\n }\n if (!this._avroType) {\n throw new SchemaValidationError(\n `${MODULE_NAME}: Schema is not defined for this collection`,\n lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR\n );\n }\n const data = await this._loadData();\n if (data.length === 0) return 0;\n let updatedCount = 0;\n for (let i = 0; i < data.length; i++) {\n if (matchesQuery(data[i], query)) {\n const updatedDoc = { ...data[i], ...update };\n const isValid = this._avroType.isValid(updatedDoc, {\n errorHook: errorValidationFn,\n noUndeclaredFields: true\n });\n if (isValid === true) {\n data[i] = updatedDoc;\n updatedCount++;\n } else {\n throw new DocumentValidationError(\n `${MODULE_NAME}: Invalid document or schema`,\n lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR\n );\n }\n }\n }\n if (updatedCount > 0) {\n const success = await this._saveData(data);\n if (!success) {\n throw new S3OperationError(`${MODULE_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n } else if (options && \"upsert\" in options && options.upsert) {\n const success = await this.insert(update);\n if (!success) {\n throw new S3OperationError(`${MODULE_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n updatedCount = 1;\n }\n return updatedCount;\n } catch (error) {\n if (error instanceof S3OperationError) {\n throw error;\n }\n throw new lowstorageError(`${MODULE_NAME}: Update operation failed: ${error.message}`, lowstorage_ERROR_CODES.UPDATE_ERROR);\n }\n }\n /**\n * Update a single document in the collection that matches the query.\n * @param {Object} [query={}] - The query to filter the document to update.\n * @param {Object} [update={}] - The update operations to apply to the matching document.\n * @returns {Promise} A Promise that resolves to 1 if a document was updated, 0 otherwise.\n /**\n * Update a single document in the collection that matches the query.\n * @throws {lowstorageError} If the updateOne operation fails.\n * @throws {SchemaValidationError} If the schema is not defined for the collection.\n * @throws {DocumentValidationError} If the updated document is invalid.\n * @throws {S3OperationError} If the S3 operation fails.\n */\n async updateOne(query = {}, update = {}, options = {}) {\n try {\n if (query === void 0 || query === null || update === void 0 || update === null) {\n throw new lowstorageError(`${MODULE_NAME}: Query is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n }\n if (!this._avroType) {\n throw new SchemaValidationError(\n `${MODULE_NAME}: Schema is not defined for this collection`,\n lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR\n );\n }\n const data = await this._loadData();\n if (data.length === 0) return 0;\n const docIndex = data.findIndex((doc) => matchesQuery(doc, query));\n if (docIndex !== -1) {\n const updatedDoc = { ...data[docIndex], ...update };\n const isValid = this._avroType.isValid(updatedDoc, {\n errorHook: errorValidationFn,\n noUndeclaredFields: true\n });\n if (isValid === true) {\n data[docIndex] = updatedDoc;\n const success = await this._saveData(data);\n if (!success) {\n throw new S3OperationError(`${MODULE_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n return 1;\n } else {\n throw new DocumentValidationError(`${MODULE_NAME}: Invalid document or schema`, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR);\n }\n }\n if (options && \"upsert\" in options && options.upsert) {\n const success = await this.insert(update);\n if (!success) {\n throw new S3OperationError(`${MODULE_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n return 1;\n }\n return 0;\n } catch (error) {\n if (error instanceof lowstorageError) {\n throw error;\n }\n throw new lowstorageError(`${MODULE_NAME}: UpdateOne operation failed: ${error.message}`, lowstorage_ERROR_CODES.UPDATE_ONE_ERROR);\n }\n }\n /**\n * Delete documents from the collection.\n * @param {Object} [query={}] - The query to filter documents to delete.\n * @returns {Promise} A Promise that resolves to the number of documents deleted.\n * @throws {lowstorageError} If the delete operation fails.\n * @throws {S3OperationError} If the S3 operation fails.\n */\n async delete(query = {}) {\n try {\n if (query === void 0 || query === null) {\n throw new lowstorageError(`${MODULE_NAME}: Query is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n }\n const data = await this._loadData();\n if (data.length === 0) return 0;\n const initialLength = data.length;\n const newData = data.filter((doc) => !matchesQuery(doc, query));\n const success = await this._saveData(newData);\n if (!success) {\n throw new S3OperationError(`${MODULE_NAME}: Failed to delete document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n return initialLength - newData.length;\n } catch (error) {\n if (error instanceof S3OperationError) {\n throw error;\n }\n throw new lowstorageError(`${MODULE_NAME}: Delete operation failed: ${error.message}`, lowstorage_ERROR_CODES.DELETE_ERROR);\n }\n }\n /**\n * Delete all documents from the collection.\n * @returns {Promise} A Promise that resolves to the number of documents deleted.\n * @throws {lowstorageError} If the delete operation fails.\n * @throws {S3OperationError} If the S3 operation fails.\n */\n async deleteAll() {\n try {\n const data = await this._loadData();\n const initialLength = data.length;\n const success = await this._saveData([]);\n if (!success) {\n throw new S3OperationError(`${MODULE_NAME}: Failed to delete document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n return initialLength;\n } catch (error) {\n if (error instanceof S3OperationError) {\n throw error;\n }\n throw new lowstorageError(`${MODULE_NAME}: Delete operation failed: ${error.message}`, lowstorage_ERROR_CODES.DELETE_ERROR);\n }\n }\n /**\n * Count the number of documents in the collection.\n * @param {Object} [query={}] - The query to filter documents.\n * @returns {Promise} A Promise that resolves to the number of documents in the collection.\n * @throws {lowstorageError} If the count operation fails.\n */\n async count(query = {}) {\n try {\n const data = await this.find(query);\n return data.length;\n } catch (error) {\n throw new lowstorageError(`${MODULE_NAME}: Count operation failed: ${error.message}`, lowstorage_ERROR_CODES.COUNT_ERROR);\n }\n }\n async renameCollection(newColName, newSchema = this._schema) {\n try {\n _hasColName(newColName);\n const exists = await this._s3.fileExists(`${this._dirPrefix}${DEFAULT_DELIMITER}${newColName}${COL_SUFFIX}`);\n if (!!exists) {\n throw new lowstorageError(`${MODULE_NAME}: Collection ${newColName} already exists`, lowstorage_ERROR_CODES.COLLECTION_EXISTS);\n }\n const schema = newSchema || this.getAvroSchema();\n const data = await this._loadData();\n const createNew = new _Collection(newColName, schema, this._s3, this._dirPrefix, this._safeWrite, this._chunkSize);\n await createNew._saveData(data);\n await this._s3.delete(`${this._dirPrefix}${DEFAULT_DELIMITER}${this._colName}${COL_SUFFIX}`);\n return createNew;\n } catch (error) {\n if (error instanceof lowstorageError) {\n throw error;\n }\n throw new lowstorageError(\n `${MODULE_NAME}: Rename collection failed: ${error.message}`,\n lowstorage_ERROR_CODES.RENAME_COLLECTION_ERROR\n );\n }\n }\n};\nexport {\n lowstorage,\n lowstorageError,\n lowstorage_ERROR_CODES\n};\n\n"], + "mappings": "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", + "names": ["__import_BUFFER", "__import_CRYPTO", "__import_UTIL", "__import_STREAM", "__import_ZLIB", "__import_EVENTS", "__import_FS", "__import_PATH", "randomUUID", "__create", "__defProp", "__getOwnPropDesc", "__getOwnPropNames", "__getProtoOf", "__hasOwnProp", "__commonJS", "cb", "mod", "__getOwnPropNames", "__copyProps", "to", "from", "except", "desc", "key", "__hasOwnProp", "__defProp", "__getOwnPropDesc", "__toESM", "isNodeMode", "target", "__create", "__getProtoOf", "require_utils", "exports", "module", "buffer", "__import_BUFFER", "crypto2", "__import_CRYPTO", "util", "__import_UTIL", "Buffer2", "POOL", "BufferPool", "NAME_PATTERN", "f2", "newBuffer", "size", "bufferFrom", "data", "enc", "capitalize", "s", "compare", "n1", "n2", "getOption", "opts", "def", "value", "getHash", "str", "algorithm", "hash", "singleIndexOf", "arr", "v2", "pos", "i", "l", "toMap", "fn", "obj", "elem", "objectValues", "hasDuplicates", "copyOwnProperties", "src", "dst", "overwrite", "names", "name", "descriptor", "isValidName", "qualify", "namespace", "part", "unqualify", "parts", "impliedNamespace", "match", "jsonEnd", "c", "depth", "literal", "abstractFunction", "addDeprecatedGetters", "props", "proto", "prop", "getter", "createGetter", "prop2", "delegate", "len", "maxLen", "Lcg", "seed", "a", "m2", "state", "start", "end", "flags", "mask", "result", "OrderedQueue", "item", "items", "j2", "first", "mid", "i1", "i2", "c1", "c2", "Tap", "buf", "b2", "n", "k2", "h", "f3", "fk", "d", "fixed", "tap", "l1", "p1", "l2", "p2", "b1", "res", "neg", "invert", "require_types", "utils", "SlowBuffer", "debug", "TYPES", "ArrayType", "BooleanType", "BytesType", "DoubleType", "EnumType", "RecordType", "FixedType", "FloatType", "IntType", "LongType", "MapType", "NullType", "StringType", "RANDOM", "TAP", "LOGICAL_TYPE", "UNDERLYING_TYPES", "Type", "schema", "type", "Hash", "maybeQualify", "isPrimitive", "registry", "UnionType2", "wrapUnions", "WrappedUnionType", "UnwrappedUnionType", "DerivedType", "err", "logicalType", "types", "isAmbiguous", "typeName", "Type2", "val", "fieldNames", "expanded", "numWrappedUnions", "isValidWrappedUnion", "branchTypes", "branchType", "unionType", "bucketized", "bucket", "getTypeBucket", "bucketTypes", "buckets", "augmented", "combineNumbers", "combineStrings", "combineBuffers", "t", "combineObjects", "any", "buf1", "buf2", "resolver", "Resolver", "resolvers", "index", "resolver2", "readValue", "canon", "schemaStr", "noCheck", "className", "getClassName", "errorHook", "hook", "path", "Branch", "derefedSchema", "attr", "body", "asBranch", "PrimitiveType", "noFreeze", "throwInvalidError", "tap1", "tap2", "isSafeLong", "methods", "noUnpack", "mapping", "AbstractLongType", "isJsonBuffer", "UnionType", "branch", "getValueBucket", "logicalBranches", "typeResolver", "coerce", "wrap", "keys", "val1", "val2", "index1", "index2", "firstType", "name1", "name2", "symbol", "symbols", "hasCompatibleName", "values", "readArraySize", "rsv", "copy", "ns", "field", "Field", "errorStack", "plainRecords", "outerArgs", "innerArgs", "ds", "innerBody", "defaultValue", "hasDefault", "stackField", "outerBody", "Record", "self", "o", "field2", "args", "rFields", "wFields", "wFieldsMap", "matches", "fieldResolver", "getAliases", "lazyIndex", "uname", "fields", "order", "fieldType", "fieldSchema", "fieldOrder", "fieldAliases", "fieldDoc", "LogicalType", "_fromValue", "obj1", "obj2", "isVisited", "msg", "readerType", "lazy", "aliases", "reader", "writer", "strict", "alias", "unqualified", "typeNames", "superIndex", "superType", "typeSymbols", "allTypes", "fieldTypes", "fieldDefaults", "isValidRecord", "fieldDefault", "fieldName", "fieldType2", "fieldDefault2", "unionTypes", "require_containers", "stream", "__import_STREAM", "zlib", "__import_ZLIB", "OPTS", "LONG_TYPE", "MAP_BYTES_TYPE", "HEADER_TYPE", "BLOCK_TYPE", "MAGIC_BYTES", "RawDecoder", "noDecode", "createReader", "chunk", "encoding", "BlockDecoder", "header", "codecs", "nBlocks", "block", "tryReadBlock", "chunkCb", "count", "cause", "BlockInfo", "BlockData", "RawEncoder", "copyBuffer", "BlockEncoder", "codec", "meta", "Header", "flushing", "raw", "compressed", "writerType", "skipper", "require_services", "events", "__import_EVENTS", "BOOLEAN_TYPE", "STRING_TYPE", "HANDSHAKE_REQUEST_TYPE", "HANDSHAKE_RESPONSE_TYPE", "PREFIX_LENGTH", "PING_MESSAGE", "Message", "reqType", "errType", "resType", "oneWay", "doc", "recordName", "reqSchema", "msgDoc", "errSchema", "Service", "messages", "types2", "ptcl", "server", "Client", "Server", "clientSvc", "serverSvc", "createReaders", "msgs", "client", "pts", "transport", "channel", "forwardErrors", "req", "handler", "parent", "typeSchema", "msgNames", "discoverProtocol", "svc", "ptclStr", "hreq", "hres", "pending", "insertRemoteProtocols", "objectMode", "writableFactory", "encoder2", "FrameEncoder", "writable2", "readable2", "decoder2", "FrameDecoder", "err2", "StatelessClientChannel", "readable", "writable", "isStream", "decoder", "NettyDecoder", "encoder", "NettyEncoder", "StatefulClientChannel", "channels", "getExistingMessage", "wreq", "WrappedRequest", "getRemoteProtocols", "numChannels", "CallContext", "wres", "ctx", "done", "err3", "readableFactory", "StatelessServerChannel", "StatefulServerChannel", "channelId", "numArgs", "ClientChannel", "normalizedPrefix", "cache", "adapter", "Adapter", "Registry", "noWait", "isError", "timeout", "noSvc", "WrappedResponse", "onTransition", "onCompletion", "fns", "chainMiddleware", "onError", "wreq2", "wres2", "prev", "reqBuf", "serializationError", "id", "resBuf", "matchesPrefix", "emit", "retry", "readHead", "onEnd", "onFinish", "timer", "onPing", "onMessage", "ping", "payload", "ServerChannel", "serverMatch", "toRpcError", "defaultHandler", "resErr", "isStrict", "errStr", "hdrBuf", "onRequest", "onHandshake", "hdrs", "hdr", "hasError", "prefixLength", "isRemote", "isError2", "frameLength", "bufs", "intBuffer", "head", "rtype", "wtype", "ptcls", "isClient", "hs", "toError", "rpcCode", "details", "detailsStr", "strs", "scope", "prefix", "params", "cbs", "forward", "isDone", "backward", "require_files", "fs", "__import_FS", "__import_PATH", "createImportHook", "imports", "fpath", "kind", "createSyncImportHook", "require_specs", "files", "TYPE_REFS", "assembleProtocol", "importFile", "protocol", "schemas", "protocolNamespace", "fpath2", "cb2", "Reader", "fetchImports", "dpath", "importedProtocols", "next", "info", "imported", "mergeImport", "importPath", "read", "contents", "protocolSchema", "Tokenizer", "tk", "protocolJavadoc", "javadoc", "numImports", "message", "responseSchema", "token", "top", "ref", "silent", "implicitTags", "maybeMessage", "fname", "reason", "context", "isToken", "lineNum", "lineStart", "emitJavadoc", "isJavadoc", "extractJavadoc", "pat", "lines", "line", "require_lib", "containers", "services", "specs", "parse2", "schemaOrProtocol", "extractFileHeader", "decode", "fd", "isValid", "createFileDecoder", "createFileEncoder", "N", "K", "O", "v", "f", "W", "q", "w", "X", "E", "Z", "V", "J", "m", "R", "P", "M", "u", "ee", "te", "se", "re", "L", "$", "j", "k", "U", "B", "F", "G", "z", "Q", "ne", "oe", "p", "C", "y", "x", "e", "r", "I", "A", "_", "g", "H", "T", "S", "Y", "b", "D", "import_avsc", "lowstorage_ERROR_CODES", "lowstorageError", "code", "SchemaValidationError", "DocumentValidationError", "S3OperationError", "operation", "matchesQuery", "document", "query", "generateUUID", "randomUUID", "ensureIdFieldInSchema", "idField", "MODULE_NAME", "DEFAULT_DELIMITER", "PROJECT_DIR_PREFIX", "COL_SUFFIX", "CHUNG_1MB", "CHUNG_5MB", "EMPTY_DATA", "errorValidationFn", "errorCode", "_hasColName", "colName", "lowstorage", "options", "requiredFields", "error", "exists", "listed", "entry", "wrapperType", "exists2", "autoCreate", "colPath", "colSchema", "Collection", "_Collection", "s3", "dirPrefix", "safeWrite", "chunkSize", "etag", "offset", "bufferArr", "repeat", "nextDataResponse", "nextDataBody", "bufferedData", "dataBuffer", "currentETag", "resp", "newETag", "schemaWithId", "avroType", "update", "updatedCount", "updatedDoc", "docIndex", "initialLength", "newData", "newColName", "newSchema", "createNew"] } diff --git a/jest.config.json b/general.jest.config.json similarity index 60% rename from jest.config.json rename to general.jest.config.json index a3fc781..d328c5c 100644 --- a/jest.config.json +++ b/general.jest.config.json @@ -1,8 +1,9 @@ { + "displayName": "lowstorage tests on general S3 (cloudflare)", "verbose": true, "collectCoverage": false, "testMatch": ["**/src/*.test.js"], "testEnvironment": "node", - "testTimeout": 20000, + "testTimeout": 70000, "silent": false } diff --git a/lib/lowstorage.d.ts b/lib/lowstorage.d.ts index 315db9d..5d3ddea 100644 --- a/lib/lowstorage.d.ts +++ b/lib/lowstorage.d.ts @@ -71,6 +71,18 @@ declare class lowstorage { private _avroParse; constructor(options: S3Options); _checkArgs: (args: S3Options) => void; + /** + * Check if a bucket exists. + * @returns {Promise} True if the bucket exists, false otherwise. + * @throws {lowstorageError} If there's an error. + */ + checkIfStorageExists(): Promise; + /** + * Create a new storage bucket if it doesn't exist. + * @returns {Promise} A Promise that resolves to true if the bucket was created or already exists, false otherwise. + * @throws {lowstorageError} If there's an error. + */ + createStorage(): Promise; /** * List all collections. * @returns {Promise} An array of collection names. diff --git a/lib/lowstorage.js b/lib/lowstorage.js index 0b40122..ea623c1 100644 --- a/lib/lowstorage.js +++ b/lib/lowstorage.js @@ -79,6 +79,45 @@ class lowstorage { this._dirPrefix = options.dirPrefix || PROJECT_DIR_PREFIX; this._avroParse = parse; } + /** + * Check if a bucket exists. + * @returns {Promise} True if the bucket exists, false otherwise. + * @throws {lowstorageError} If there's an error. + */ + async checkIfStorageExists() { + try { + const exists = await this._s3.bucketExists(); + return !!exists; + } + catch (error) { + if (error.message.includes('Not Found')) { + return false; + } + throw new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); + } + } + /** + * Create a new storage bucket if it doesn't exist. + * @returns {Promise} A Promise that resolves to true if the bucket was created or already exists, false otherwise. + * @throws {lowstorageError} If there's an error. + */ + async createStorage() { + try { + const exists = await this.checkIfStorageExists(); + if (!exists) { + const createdBucket = await this._s3.createBucket(); + return createdBucket; + } + return exists; + throw new lowstorageError(`${MODULE_NAME}: Bucket already exists`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); + } + catch (error) { + if (error instanceof lowstorageError) { + throw error; + } + throw new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); + } + } /** * List all collections. * @returns {Promise} An array of collection names. diff --git a/lib/lowstorage.js.map b/lib/lowstorage.js.map index 2d8105d..753cf2f 100644 --- a/lib/lowstorage.js.map +++ b/lib/lowstorage.js.map @@ -1 +1 @@ -{"version":3,"file":"lowstorage.js","sourceRoot":"","sources":["../src/lowstorage.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"lowstorage.js","sourceRoot":"","sources":["../src/lowstorage.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAwBb,6BAA6B;AAC7B,kBAAkB;AAClB,mBAAmB;AACnB,KAAK;AAEL,yBAAyB;AACzB,qBAAqB;AACrB,KAAK;AAEL,OAAO,EAAE,EAAE,EAAE,MAAM,eAAe,CAAC;AACnC,OAAO,EAAE,IAAI,IAAI,KAAK,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,sBAAsB,EAAE,eAAe,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAC;AACnI,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAE5E,MAAM,WAAW,GAAW,YAAY,CAAC;AACzC,MAAM,iBAAiB,GAAW,GAAG,CAAC;AACtC,MAAM,kBAAkB,GAAW,YAAY,CAAC;AAChD,MAAM,UAAU,GAAW,OAAO,CAAC;AACnC,MAAM,SAAS,GAAW,IAAI,GAAG,IAAI,CAAC;AACtC,MAAM,SAAS,GAAW,CAAC,GAAG,SAAS,CAAC;AACxC,MAAM,UAAU,GAAW,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;AAEnD,MAAM,iBAAiB,GAAG,CAAC,YAAoB,sBAAsB,CAAC,yBAAyB,EAAQ,EAAE;IACxG,MAAM,IAAI,uBAAuB,CAAC,GAAG,WAAW,gCAAgC,SAAS,EAAE,CAAC,CAAC;AAC9F,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,UAAkB,EAAE,EAAQ,EAAE;IAClD,IAAI,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,CAAC,MAAM,GAAG,GAAG,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QAC7H,MAAM,IAAI,eAAe,CAAC,GAAG,WAAW,iDAAiD,EAAE,sBAAsB,CAAC,gBAAgB,CAAC,CAAC;IACrI,CAAC;AACF,CAAC,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,MAAM,UAAU;IAmBf,YAAY,OAAkB;QAQ9B,eAAU,GAAG,CAAC,IAAe,EAAQ,EAAE;YACtC,MAAM,cAAc,GAAG,CAAC,aAAa,EAAE,iBAAiB,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC;YACpF,KAAK,MAAM,KAAK,IAAI,cAAc,EAAE,CAAC;gBACpC,IAAI,CAAC,IAAI,CAAC,KAAwB,CAAC,EAAE,CAAC;oBACrC,MAAM,IAAI,eAAe,CAAC,GAAG,WAAW,KAAK,KAAK,cAAc,EAAE,sBAAsB,CAAC,gBAAgB,CAAC,CAAC;gBAC5G,CAAC;YACF,CAAC;QACF,CAAC,CAAC;QAgMF;;;WAGG;QACH,OAAE,GAAG,GAAG,EAAE;YACT,OAAO,IAAI,CAAC,GAAG,CAAC;QACjB,CAAC,CAAC;QApND,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QACzB,IAAI,CAAC,QAAQ,GAAG,IAAI,GAAG,EAAE,CAAC;QAC1B,IAAI,CAAC,GAAG,GAAG,IAAI,EAAE,CAAC,OAAO,CAAC,CAAC;QAC3B,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,SAAS,IAAI,kBAAkB,CAAC;QAC1D,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;IACzB,CAAC;IAWD;;;;OAIG;IACH,KAAK,CAAC,oBAAoB;QACzB,IAAI,CAAC;YACJ,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;YAC7C,OAAO,CAAC,CAAC,MAAM,CAAC;QACjB,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACrB,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;gBACzC,OAAO,KAAK,CAAC;YACd,CAAC;YACD,MAAM,IAAI,eAAe,CAAC,GAAG,WAAW,KAAK,KAAK,CAAC,OAAO,EAAE,EAAE,sBAAsB,CAAC,kBAAkB,CAAC,CAAC;QAC1G,CAAC;IACF,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,aAAa;QAClB,IAAI,CAAC;YACJ,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,oBAAoB,EAAE,CAAC;YACjD,IAAI,CAAC,MAAM,EAAE,CAAC;gBACb,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;gBACpD,OAAO,aAAa,CAAC;YACtB,CAAC;YACD,OAAO,MAAM,CAAC;YACd,MAAM,IAAI,eAAe,CAAC,GAAG,WAAW,yBAAyB,EAAE,sBAAsB,CAAC,kBAAkB,CAAC,CAAC;QAC/G,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACrB,IAAI,KAAK,YAAY,eAAe,EAAE,CAAC;gBACtC,MAAM,KAAK,CAAC;YACb,CAAC;YACD,MAAM,IAAI,eAAe,CAAC,GAAG,WAAW,KAAK,KAAK,CAAC,OAAO,EAAE,EAAE,sBAAsB,CAAC,kBAAkB,CAAC,CAAC;QAC1G,CAAC;IACF,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,eAAe;QACpB,IAAI,CAAC;YACJ,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;YACvE,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC3B,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;YAC/F,CAAC;iBAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,UAAU,IAAI,MAAM,IAAI,MAAM,CAAC,QAAQ,KAAK,GAAG,EAAE,CAAC;gBAC7G,OAAO,EAAE,CAAC;YACX,CAAC;YACD,OAAO,EAAE,CAAC;QACX,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACrB,MAAM,IAAI,gBAAgB,CAAC,GAAG,WAAW,KAAK,KAAK,CAAC,OAAO,EAAE,EAAE,sBAAsB,CAAC,kBAAkB,CAAC,CAAC;QAC3G,CAAC;IACF,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,gBAAgB,CAAC,UAAkB,EAAE;QAC1C,IAAI,CAAC;YACJ,WAAW,CAAC,OAAO,CAAC,CAAC;YACrB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,UAAU,GAAG,iBAAiB,GAAG,OAAO,GAAG,UAAU,EAAE,CAAC,CAAC;YAC1G,OAAO,CAAC,CAAC,MAAM,CAAC;QACjB,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACrB,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;gBACzC,OAAO,KAAK,CAAC;YACd,CAAC;YACD,MAAM,IAAI,eAAe,CAAC,GAAG,WAAW,KAAK,KAAK,CAAC,OAAO,EAAE,EAAE,sBAAsB,CAAC,oBAAoB,CAAC,CAAC;QAC5G,CAAC;IACF,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,gBAAgB,CAAC,UAAkB,EAAE,EAAE,MAAe,EAAE,OAAc,EAAE;QAC7E,IAAI,CAAC;YACJ,WAAW,CAAC,OAAO,CAAC,CAAC;YACrB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;YACpD,IAAI,CAAC,MAAM,EAAE,CAAC;gBACb,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;oBACtD,IAAI,CAAC;wBACJ,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;wBAC/C,IAAI,CAAC,IAAI,EAAE,CAAC;4BACX,MAAM,IAAI,qBAAqB,CAC9B,GAAG,WAAW,wBAAwB,MAAM,IAAI,sBAAsB,CAAC,uBAAuB,EAAE,CAChG,CAAC;wBACH,CAAC;6BAAM,CAAC;4BACP,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;wBACpC,CAAC;oBACF,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBAChB,MAAM,IAAI,qBAAqB,CAAC,GAAG,WAAW,wBAAwB,MAAM,EAAE,EAAE,sBAAsB,CAAC,uBAAuB,CAAC,CAAC;oBACjI,CAAC;gBACF,CAAC;gBACD,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,EAAE,CAAC;oBAC/B,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;oBAChF,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,UAAU,GAAG,iBAAiB,GAAG,OAAO,GAAG,UAAU,EAAE,EAAE,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;gBACjH,CAAC;qBAAM,CAAC;oBACP,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,UAAU,GAAG,iBAAiB,GAAG,OAAO,GAAG,UAAU,EAAE,EAAE,UAAU,CAAC,CAAC;gBACjG,CAAC;gBACD,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;YAChD,CAAC;YACD,MAAM,IAAI,eAAe,CAAC,GAAG,WAAW,gBAAgB,OAAO,iBAAiB,EAAE,sBAAsB,CAAC,iBAAiB,CAAC,CAAC;QAC7H,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACrB,IAAI,KAAK,YAAY,eAAe,EAAE,CAAC;gBACtC,MAAM,KAAK,CAAC;YACb,CAAC;YACD,MAAM,IAAI,eAAe,CAAC,GAAG,WAAW,KAAK,KAAK,CAAC,OAAO,EAAE,EAAE,sBAAsB,CAAC,uBAAuB,CAAC,CAAC;QAC/G,CAAC;IACF,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,gBAAgB,CAAC,UAAkB,EAAE;QAC1C,IAAI,CAAC;YACJ,WAAW,CAAC,OAAO,CAAC,CAAC;YACrB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;YACpD,IAAI,MAAM,EAAE,CAAC;gBACZ,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,UAAU,GAAG,iBAAiB,GAAG,OAAO,GAAG,UAAU,EAAE,CAAC,CAAC;gBACvF,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;gBACrD,IAAI,OAAO,OAAO,KAAK,SAAS,EAAE,CAAC;oBAClC,IAAI,CAAC,OAAO,EAAE,CAAC;wBACd,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;wBAC9B,OAAO,IAAI,CAAC;oBACb,CAAC;oBACD,MAAM,IAAI,eAAe,CAAC,GAAG,WAAW,iCAAiC,OAAO,EAAE,EAAE,sBAAsB,CAAC,kBAAkB,CAAC,CAAC;gBAChI,CAAC;gBACD,MAAM,IAAI,gBAAgB,CAAC,GAAG,WAAW,iCAAiC,OAAO,EAAE,EAAE,sBAAsB,CAAC,kBAAkB,CAAC,CAAC;YACjI,CAAC;YACD,MAAM,IAAI,eAAe,CAAC,GAAG,WAAW,gBAAgB,OAAO,iBAAiB,EAAE,sBAAsB,CAAC,uBAAuB,CAAC,CAAC;QACnI,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACrB,IAAI,KAAK,YAAY,gBAAgB,EAAE,CAAC;gBACvC,MAAM,KAAK,CAAC;YACb,CAAC;YACD,MAAM,IAAI,eAAe,CACxB,GAAG,WAAW,kCAAkC,KAAK,CAAC,OAAO,EAAE,EAC/D,sBAAsB,CAAC,uBAAuB,CAC9C,CAAC;QACH,CAAC;IACF,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,UAAU,CAAC,UAAkB,EAAE,EAAE,MAAe,EAAE,aAAsB,IAAI;QACjF,IAAI,CAAC;YACJ,WAAW,CAAC,OAAO,CAAC,CAAC;YACrB,MAAM,OAAO,GAAG,GAAG,IAAI,CAAC,UAAU,GAAG,iBAAiB,GAAG,OAAO,GAAG,UAAU,EAAE,CAAC;YAChF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YAClD,IAAI,CAAC,MAAM,EAAE,CAAC;gBACb,IAAI,CAAC,UAAU,EAAE,CAAC;oBACjB,MAAM,IAAI,eAAe,CAAC,GAAG,WAAW,gBAAgB,OAAO,iBAAiB,EAAE,sBAAsB,CAAC,oBAAoB,CAAC,CAAC;gBAChI,CAAC;gBACD,4DAA4D;gBAC5D,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;YACzC,CAAC;YACD,MAAM,SAAS,GAAG,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,SAAS,CAAC;YACpE,OAAO,IAAI,UAAU,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QACtE,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACrB,4FAA4F;YAC5F,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;gBAC5C,MAAM,IAAI,qBAAqB,CAC9B,GAAG,WAAW,8BAA8B,KAAK,CAAC,OAAO,EAAE,EAC3D,sBAAsB,CAAC,uBAAuB,CAC9C,CAAC;YACH,CAAC;YAED,MAAM,IAAI,eAAe,CAAC,GAAG,WAAW,KAAK,KAAK,CAAC,OAAO,EAAE,EAAE,sBAAsB,CAAC,oBAAoB,CAAC,CAAC;QAC5G,CAAC;IACF,CAAC;CASD;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,UAAU;IAsBf,YACC,UAAkB,EAAE,EACpB,MAAW,EACX,EAAM,EACN,YAAoB,kBAAkB,EACtC,YAAqB,KAAK,EAC1B,YAAoB,SAAS;QAgB9B,aAAQ,GAAG,GAAoB,EAAE,CAAC,CAAC;YAClC,OAAO,EAAE,IAAI,CAAC,QAAQ;YACtB,EAAE,EAAE,IAAI,CAAC,GAAG;YACZ,MAAM,EAAE,IAAI,CAAC,OAAO;YACpB,SAAS,EAAE,IAAI,CAAC,UAAU;YAC1B,QAAQ,EAAE,IAAI,CAAC,SAAS;YACxB,SAAS,EAAE,IAAI,CAAC,UAAU;YAC1B,SAAS,EAAE,IAAI,CAAC,UAAU;YAC1B,SAAS,EAAE,IAAI,CAAC,UAAU;SAC1B,CAAC,CAAC;QAEH,aAAQ,GAAG,CAAC,KAAsB,EAAQ,EAAE;YAC3C,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC;YAC9B,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC;YAC5B,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC,EAAE,CAAC;YACpB,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,SAAS,CAAC;YAClC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,QAAQ,CAAC;YAChC,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,SAAS,CAAC;YAClC,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,SAAS,CAAC;YAClC,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,SAAS,CAAC;QACnC,CAAC,CAAC;QAEF,iBAAY,GAAG,CAAC,SAAkB,EAAQ,EAAE;YAC3C,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAC7B,CAAC,CAAC;QAEF,iBAAY,GAAG,GAAY,EAAE;YAC5B,OAAO,IAAI,CAAC,UAAU,CAAC;QACxB,CAAC,CAAC;QAEF,kBAAa,GAAG,GAAW,EAAE;YAC5B,OAAO,IAAI,CAAC,OAAO,CAAC;QACrB,CAAC,CAAC;QAEF,kBAAa,GAAG,CAAC,MAAc,EAAQ,EAAE;YACxC,IAAI,CAAC;gBACJ,IAAI,CAAC,OAAO,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;gBAC7C,IAAI,CAAC,SAAS,GAAG,OAAO,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YAC3F,CAAC;YAAC,OAAO,KAAU,EAAE,CAAC;gBACrB,MAAM,IAAI,eAAe,CAAC,GAAG,WAAW,KAAK,KAAK,CAAC,OAAO,EAAE,EAAE,sBAAsB,CAAC,uBAAuB,CAAC,CAAC;YAC/G,CAAC;QACF,CAAC,CAAC;QAEF,sBAAiB,GAAG,GAAW,EAAE;YAChC,OAAO,IAAI,CAAC,SAAS,CAAC;QACvB,CAAC,CAAC;QAEF,oBAAe,GAAG,CAAC,IAA2D,EAAE,IAAI,GAAG,QAAQ,EAAE,EAAE;YAClG,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;gBACzB,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YAChB,CAAC;YACD,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACnD,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC;YACpC,OAAO,qBAAqB,CAAC,MAAM,CAAC,CAAC;QACtC,CAAC,CAAC;QApED,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;QAC/B,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;QACd,IAAI,CAAC,OAAO,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;QAC7C,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAC5B,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAC5B,IAAI,CAAC,UAAU,GAAG,SAAS,IAAI,SAAS,CAAC;QACzC,IAAI,CAAC,GAAG,CAAC,wBAAwB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACnD,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QACxB,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;QACpB,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;QACrB,IAAI,CAAC,SAAS,GAAG,OAAO,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAC1F,IAAI,CAAC,IAAI,GAAG,GAAG,IAAI,CAAC,UAAU,GAAG,iBAAiB,GAAG,IAAI,CAAC,QAAQ,GAAG,UAAU,EAAE,CAAC;IACnF,CAAC;IA0DD,KAAK,CAAC,aAAa;QAClB,IAAI,CAAC;YACJ,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;YACpB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;YACpC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;YACvB,OAAO,IAAI,CAAC;QACb,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACrB,MAAM,IAAI,eAAe,CAAC,GAAG,WAAW,kCAAkC,KAAK,CAAC,OAAO,EAAE,EAAE,sBAAsB,CAAC,kBAAkB,CAAC,CAAC;QACvI,CAAC;IACF,CAAC;IAED,KAAK,CAAC,SAAS;QACd,IAAI,CAAC;YACJ,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,IAAI,OAAO,IAAI,CAAC,SAAS,KAAK,WAAW,EAAE,CAAC;gBACtE,MAAM,IAAI,eAAe,CACxB,GAAG,WAAW,yDAAyD,EACvE,sBAAsB,CAAC,uBAAuB,CAC9C,CAAC;YACH,CAAC;YACD,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,eAAe,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;YACxG,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;gBACnB,OAAO,IAAI,CAAC,UAAU,CAAC;YACxB,CAAC;YACD,IAAI,CAAC,SAAS,GAAG,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;YACvD,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;YACxF,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;gBACnC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC3F,OAAO,IAAI,CAAC,UAAU,CAAC;YACxB,CAAC;YACD,IAAI,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC;YAC7B,IAAI,SAAS,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;YAC5C,IAAI,MAAM,GAAG,IAAI,CAAC;YAClB,OAAO,MAAM,EAAE,CAAC;gBACf,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;gBACxG,MAAM,YAAY,GAAG,MAAM,gBAAgB,CAAC,IAAI,EAAE,CAAC;gBACnD,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC;gBAClD,MAAM,IAAI,IAAI,CAAC,UAAU,CAAC;gBAC1B,MAAM,aAAa,GAAG,QAAQ,CAAC,gBAAgB,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,YAAY,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;gBACjH,IAAI,aAAa,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;oBACrC,MAAM,GAAG,KAAK,CAAC;gBAChB,CAAC;YACF,CAAC;YACD,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAC9C,IAAI,CAAC,UAAU,GAAG,WAAW,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;YACvD,OAAO,IAAI,CAAC,UAAU,CAAC;QACxB,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACrB,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,iCAAiC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;gBACtE,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;gBACrB,OAAO,IAAI,CAAC,UAAU,CAAC;YACxB,CAAC;YACD,MAAM,IAAI,gBAAgB,CAAC,GAAG,WAAW,0BAA0B,KAAK,CAAC,OAAO,EAAE,EAAE,sBAAsB,CAAC,kBAAkB,CAAC,CAAC;QAChI,CAAC;IACF,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,IAAc;QAC7B,IAAI,CAAC;YACJ,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,IAAI,OAAO,IAAI,CAAC,SAAS,KAAK,WAAW,EAAE,CAAC;gBACtE,MAAM,IAAI,eAAe,CACxB,GAAG,WAAW,yDAAyD,EACvE,sBAAsB,CAAC,uBAAuB,CAC9C,CAAC;YACH,CAAC;YACD,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;YACxF,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,4DAA4D;YAE1I,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,SAAS,KAAK,EAAE,EAAE,CAAC;gBAC9C,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACtD,qEAAqE;gBACrE,IAAI,WAAW,KAAK,IAAI,IAAI,WAAW,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC;oBAC5D,OAAO,KAAK,CAAC;gBACd,CAAC;YACF,CAAC;YAED,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;YACvD,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,QAAQ,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBACzE,MAAM,IAAI,gBAAgB,CAAC,GAAG,WAAW,uBAAuB,EAAE,sBAAsB,CAAC,kBAAkB,CAAC,CAAC;YAC9G,CAAC;YAED,yBAAyB;YACzB,MAAM,OAAO,GAAI,IAAY,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YACzD,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACnC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;gBAChD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;YACxB,CAAC;YACD,OAAO,IAAI,CAAC;QACb,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACrB,IAAI,KAAK,YAAY,gBAAgB,EAAE,CAAC;gBACvC,MAAM,KAAK,CAAC;YACb,CAAC;YACD,MAAM,IAAI,eAAe,CAAC,GAAG,WAAW,KAAK,KAAK,CAAC,OAAO,EAAE,EAAE,sBAAsB,CAAC,eAAe,CAAC,CAAC;QACvG,CAAC;IACF,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,MAAM,CAAC,GAA2B,EAAE,MAAe;QACxD,IAAI,CAAC;YACJ,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;gBACvC,MAAM,IAAI,eAAe,CAAC,GAAG,WAAW,mCAAmC,EAAE,sBAAsB,CAAC,YAAY,CAAC,CAAC;YACnH,CAAC;YACD,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;gBACpD,MAAM,IAAI,uBAAuB,CAChC,GAAG,WAAW,0CAA0C,EACxD,sBAAsB,CAAC,yBAAyB,CAChD,CAAC;YACH,CAAC;YACD,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;YAEhD,MAAM,YAAY,GAAG,MAAM,CAAC,CAAC,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7G,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;YACzD,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACf,MAAM,IAAI,qBAAqB,CAC9B,GAAG,WAAW,2DAA2D,EACzE,sBAAsB,CAAC,uBAAuB,CAC9C,CAAC;YACH,CAAC;YACD,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;YAC1B,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;YACpC,KAAK,IAAI,IAAI,IAAI,KAAK,EAAE,CAAC;gBACxB,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;oBAC/C,MAAM,IAAI,uBAAuB,CAChC,GAAG,WAAW,iEAAiE,EAC/E,sBAAsB,CAAC,yBAAyB,CAChD,CAAC;gBACH,CAAC;gBACD,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,YAAY,EAAE,CAAC,CAAC;gBAC9C,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE;oBAChD,SAAS,EAAE,iBAAiB;oBAC5B,kBAAkB,EAAE,IAAI;iBACxB,CAAC,CAAC;gBACH,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;oBAC1B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACjB,CAAC;qBAAM,CAAC;oBACP,MAAM,IAAI,uBAAuB,CAAC,GAAG,WAAW,8BAA8B,EAAE,sBAAsB,CAAC,yBAAyB,CAAC,CAAC;gBACnI,CAAC;YACF,CAAC;YACD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YAC3C,IAAI,CAAC,OAAO,EAAE,CAAC;gBACd,MAAM,IAAI,gBAAgB,CAAC,GAAG,WAAW,6BAA6B,EAAE,sBAAsB,CAAC,kBAAkB,CAAC,CAAC;YACpH,CAAC;YACD,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;YACjC,OAAO,KAAK,CAAC;QACd,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACrB,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;gBAC5C,MAAM,IAAI,qBAAqB,CAC9B,GAAG,WAAW,8BAA8B,KAAK,CAAC,OAAO,EAAE,EAC3D,sBAAsB,CAAC,uBAAuB,CAC9C,CAAC;YACH,CAAC;YACD,IAAI,KAAK,YAAY,eAAe,EAAE,CAAC;gBACtC,MAAM,KAAK,CAAC;YACb,CAAC;YACD,MAAM,IAAI,eAAe,CAAC,GAAG,WAAW,6BAA6B,KAAK,CAAC,OAAO,EAAE,EAAE,sBAAsB,CAAC,YAAY,CAAC,CAAC;QAC5H,CAAC;IACF,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,IAAI,CAAC,QAAgB,EAAE,EAAE,UAAkB,EAAE;QAClD,IAAI,CAAC;YACJ,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBAC3C,MAAM,IAAI,eAAe,CAAC,GAAG,WAAW,gCAAgC,EAAE,sBAAsB,CAAC,gBAAgB,CAAC,CAAC;YACpH,CAAC;YACD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;YACpC,MAAM,KAAK,GAAI,OAA6B,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAE,OAA6B,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAChI,MAAM,GAAG,GACP,OAA8B,CAAC,KAAK,KAAK,SAAS;gBAClD,CAAC,CAAC,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAE,OAA8B,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;gBACrE,CAAC,CAAC,SAAS,CAAC;YACd,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YACtF,OAAO,YAAY,CAAC;QACrB,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACrB,MAAM,IAAI,eAAe,CAAC,GAAG,WAAW,4BAA4B,KAAK,CAAC,OAAO,EAAE,EAAE,sBAAsB,CAAC,UAAU,CAAC,CAAC;QACzH,CAAC;IACF,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,OAAO,CAAC,QAAgB,EAAE;QAC/B,IAAI,CAAC;YACJ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBACpB,MAAM,IAAI,eAAe,CAAC,GAAG,WAAW,wBAAwB,EAAE,sBAAsB,CAAC,gBAAgB,CAAC,CAAC;YAC5G,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;YACpD,OAAO,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;QAC1B,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACrB,IAAI,KAAK,YAAY,eAAe,EAAE,CAAC;gBACtC,MAAM,KAAK,CAAC;YACb,CAAC;YACD,MAAM,IAAI,eAAe,CAAC,GAAG,WAAW,+BAA+B,KAAK,CAAC,OAAO,EAAE,EAAE,sBAAsB,CAAC,cAAc,CAAC,CAAC;QAChI,CAAC;IACF,CAAC;IAED;;;;;;;;;OASG;IACH,KAAK,CAAC,MAAM,CAAC,QAAgB,EAAE,EAAE,SAAiB,EAAE,EAAE,UAAkB,EAAE;QACzE,IAAI,CAAC;YACJ,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;gBACtF,MAAM,IAAI,eAAe,CACxB,GAAG,WAAW,mDAAmD,EACjE,sBAAsB,CAAC,gBAAgB,CACvC,CAAC;YACH,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;gBACrB,MAAM,IAAI,qBAAqB,CAC9B,GAAG,WAAW,6CAA6C,EAC3D,sBAAsB,CAAC,uBAAuB,CAC9C,CAAC;YACH,CAAC;YACD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;YACpC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,CAAC,CAAC;YAChC,IAAI,YAAY,GAAG,CAAC,CAAC;YACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACtC,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC;oBAClC,MAAM,UAAU,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,CAAC;oBAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,EAAE;wBAClD,SAAS,EAAE,iBAAiB;wBAC5B,kBAAkB,EAAE,IAAI;qBACxB,CAAC,CAAC;oBACH,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;wBACtB,IAAI,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC;wBACrB,YAAY,EAAE,CAAC;oBAChB,CAAC;yBAAM,CAAC;wBACP,MAAM,IAAI,uBAAuB,CAChC,GAAG,WAAW,8BAA8B,EAC5C,sBAAsB,CAAC,yBAAyB,CAChD,CAAC;oBACH,CAAC;gBACF,CAAC;YACF,CAAC;YAED,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;gBACtB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;gBAC3C,IAAI,CAAC,OAAO,EAAE,CAAC;oBACd,MAAM,IAAI,gBAAgB,CAAC,GAAG,WAAW,6BAA6B,EAAE,sBAAsB,CAAC,kBAAkB,CAAC,CAAC;gBACpH,CAAC;YACF,CAAC;iBAAM,IAAI,OAAO,IAAI,QAAQ,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;gBAC7D,oDAAoD;gBACpD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBAC1C,IAAI,CAAC,OAAO,EAAE,CAAC;oBACd,MAAM,IAAI,gBAAgB,CAAC,GAAG,WAAW,6BAA6B,EAAE,sBAAsB,CAAC,kBAAkB,CAAC,CAAC;gBACpH,CAAC;gBACD,YAAY,GAAG,CAAC,CAAC;YAClB,CAAC;YACD,OAAO,YAAY,CAAC;QACrB,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACrB,IAAI,KAAK,YAAY,gBAAgB,EAAE,CAAC;gBACvC,MAAM,KAAK,CAAC;YACb,CAAC;YACD,MAAM,IAAI,eAAe,CAAC,GAAG,WAAW,8BAA8B,KAAK,CAAC,OAAO,EAAE,EAAE,sBAAsB,CAAC,YAAY,CAAC,CAAC;QAC7H,CAAC;IACF,CAAC;IAED;;;;;;;;;;;OAWG;IACH,KAAK,CAAC,SAAS,CAAC,QAA6B,EAAE,EAAE,SAA8B,EAAE,EAAE,UAA+B,EAAE;QACnH,IAAI,CAAC;YACJ,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;gBACtF,MAAM,IAAI,eAAe,CAAC,GAAG,WAAW,qBAAqB,EAAE,sBAAsB,CAAC,gBAAgB,CAAC,CAAC;YACzG,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;gBACrB,MAAM,IAAI,qBAAqB,CAC9B,GAAG,WAAW,6CAA6C,EAC3D,sBAAsB,CAAC,uBAAuB,CAC9C,CAAC;YACH,CAAC;YACD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;YACpC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,CAAC,CAAC;YAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;YAEnE,IAAI,QAAQ,KAAK,CAAC,CAAC,EAAE,CAAC;gBACrB,MAAM,UAAU,GAAG,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,MAAM,EAAE,CAAC;gBACpD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,EAAE;oBAClD,SAAS,EAAE,iBAAiB;oBAC5B,kBAAkB,EAAE,IAAI;iBACxB,CAAC,CAAC;gBACH,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;oBACtB,IAAI,CAAC,QAAQ,CAAC,GAAG,UAAU,CAAC;oBAC5B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;oBAC3C,IAAI,CAAC,OAAO,EAAE,CAAC;wBACd,MAAM,IAAI,gBAAgB,CAAC,GAAG,WAAW,6BAA6B,EAAE,sBAAsB,CAAC,kBAAkB,CAAC,CAAC;oBACpH,CAAC;oBACD,OAAO,CAAC,CAAC;gBACV,CAAC;qBAAM,CAAC;oBACP,MAAM,IAAI,uBAAuB,CAAC,GAAG,WAAW,8BAA8B,EAAE,sBAAsB,CAAC,yBAAyB,CAAC,CAAC;gBACnI,CAAC;YACF,CAAC;YACD,IAAI,OAAO,IAAI,QAAQ,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;gBACtD,oDAAoD;gBACpD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBAC1C,IAAI,CAAC,OAAO,EAAE,CAAC;oBACd,MAAM,IAAI,gBAAgB,CAAC,GAAG,WAAW,6BAA6B,EAAE,sBAAsB,CAAC,kBAAkB,CAAC,CAAC;gBACpH,CAAC;gBACD,OAAO,CAAC,CAAC;YACV,CAAC;YACD,OAAO,CAAC,CAAC;QACV,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACrB,IAAI,KAAK,YAAY,eAAe,EAAE,CAAC;gBACtC,MAAM,KAAK,CAAC;YACb,CAAC;YACD,MAAM,IAAI,eAAe,CAAC,GAAG,WAAW,iCAAiC,KAAK,CAAC,OAAO,EAAE,EAAE,sBAAsB,CAAC,gBAAgB,CAAC,CAAC;QACpI,CAAC;IACF,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,MAAM,CAAC,QAAgB,EAAE;QAC9B,IAAI,CAAC;YACJ,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBAC3C,MAAM,IAAI,eAAe,CAAC,GAAG,WAAW,qBAAqB,EAAE,sBAAsB,CAAC,gBAAgB,CAAC,CAAC;YACzG,CAAC;YACD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;YACpC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,CAAC,CAAC;YAChC,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC;YAElC,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;YAChE,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YAC9C,IAAI,CAAC,OAAO,EAAE,CAAC;gBACd,MAAM,IAAI,gBAAgB,CAAC,GAAG,WAAW,6BAA6B,EAAE,sBAAsB,CAAC,kBAAkB,CAAC,CAAC;YACpH,CAAC;YACD,OAAO,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC;QACvC,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACrB,IAAI,KAAK,YAAY,gBAAgB,EAAE,CAAC;gBACvC,MAAM,KAAK,CAAC;YACb,CAAC;YACD,MAAM,IAAI,eAAe,CAAC,GAAG,WAAW,8BAA8B,KAAK,CAAC,OAAO,EAAE,EAAE,sBAAsB,CAAC,YAAY,CAAC,CAAC;QAC7H,CAAC;IACF,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,SAAS;QACd,IAAI,CAAC;YACJ,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;YACpC,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC;YAClC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;YACzC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACd,MAAM,IAAI,gBAAgB,CAAC,GAAG,WAAW,6BAA6B,EAAE,sBAAsB,CAAC,kBAAkB,CAAC,CAAC;YACpH,CAAC;YACD,OAAO,aAAa,CAAC;QACtB,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACrB,IAAI,KAAK,YAAY,gBAAgB,EAAE,CAAC;gBACvC,MAAM,KAAK,CAAC;YACb,CAAC;YACD,MAAM,IAAI,eAAe,CAAC,GAAG,WAAW,8BAA8B,KAAK,CAAC,OAAO,EAAE,EAAE,sBAAsB,CAAC,YAAY,CAAC,CAAC;QAC7H,CAAC;IACF,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,KAAK,CAAC,QAAgB,EAAE;QAC7B,IAAI,CAAC;YACJ,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACpC,OAAO,IAAI,CAAC,MAAM,CAAC;QACpB,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACrB,MAAM,IAAI,eAAe,CAAC,GAAG,WAAW,6BAA6B,KAAK,CAAC,OAAO,EAAE,EAAE,sBAAsB,CAAC,WAAW,CAAC,CAAC;QAC3H,CAAC;IACF,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,UAAkB,EAAE,YAAoB,IAAI,CAAC,OAAO;QAC1E,IAAI,CAAC;YACJ,WAAW,CAAC,UAAU,CAAC,CAAC;YACxB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,UAAU,GAAG,iBAAiB,GAAG,UAAU,GAAG,UAAU,EAAE,CAAC,CAAC;YAC7G,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;gBACd,MAAM,IAAI,eAAe,CAAC,GAAG,WAAW,gBAAgB,UAAU,iBAAiB,EAAE,sBAAsB,CAAC,iBAAiB,CAAC,CAAC;YAChI,CAAC;YACD,MAAM,MAAM,GAAG,SAAS,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACjD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;YACpC,MAAM,SAAS,GAAG,IAAI,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;YAClH,MAAM,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YAChC,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,UAAU,GAAG,iBAAiB,GAAG,IAAI,CAAC,QAAQ,GAAG,UAAU,EAAE,CAAC,CAAC;YAC7F,OAAO,SAAS,CAAC;QAClB,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACrB,IAAI,KAAK,YAAY,eAAe,EAAE,CAAC;gBACtC,MAAM,KAAK,CAAC;YACb,CAAC;YACD,MAAM,IAAI,eAAe,CACxB,GAAG,WAAW,+BAA+B,KAAK,CAAC,OAAO,EAAE,EAC5D,sBAAsB,CAAC,uBAAuB,CAC9C,CAAC;QACH,CAAC;IACF,CAAC;CACD;AAED,6BAA6B;AAC7B,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,sBAAsB,EAAE,CAAC"} \ No newline at end of file diff --git a/minio.jest.config.json b/minio.jest.config.json new file mode 100644 index 0000000..71fd8be --- /dev/null +++ b/minio.jest.config.json @@ -0,0 +1,11 @@ +{ + "displayName": "lowstorage tests on minio S3", + "testTimeout": 30000, + "silent": false, + "verbose": true, + "testEnvironment": "node", + "setupFilesAfterEnv": ["/test_ops/setup.js"], + "globalSetup": "./test_ops/setup.js", + "globalTeardown": "./test_ops/teardown.js", + "testMatch": ["/src/*.test.js"] +} diff --git a/package-lock.json b/package-lock.json index 0327fbf..1ee0181 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,7 @@ "license": "MIT", "dependencies": { "avsc": "^5.7.7", - "ultralight-s3": "^0.0.5" + "ultralight-s3": "^0.0.6" }, "devDependencies": { "esbuild": "^0.23.0", @@ -4374,9 +4374,9 @@ "dev": true }, "node_modules/ultralight-s3": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/ultralight-s3/-/ultralight-s3-0.0.5.tgz", - "integrity": "sha512-rCjL5ZJq2lgmWlofm8ShLNzShSB61dOTJ3IaRObDGjbaye8HVX6jxaxfx0UyVQlMS1tpochBxpynKumk+IZ5vw==", + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/ultralight-s3/-/ultralight-s3-0.0.6.tgz", + "integrity": "sha512-dACVSBp0mlRilt1cvtdevzNYxJGTEf6vscwC9M5LAPHDibL/QrGIhRPUq/nv6eNcUn8n7iQ9xGSBt1P3WwW20w==", "engines": { "node": ">=16" } @@ -8194,9 +8194,9 @@ "dev": true }, "ultralight-s3": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/ultralight-s3/-/ultralight-s3-0.0.5.tgz", - "integrity": "sha512-rCjL5ZJq2lgmWlofm8ShLNzShSB61dOTJ3IaRObDGjbaye8HVX6jxaxfx0UyVQlMS1tpochBxpynKumk+IZ5vw==" + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/ultralight-s3/-/ultralight-s3-0.0.6.tgz", + "integrity": "sha512-dACVSBp0mlRilt1cvtdevzNYxJGTEf6vscwC9M5LAPHDibL/QrGIhRPUq/nv6eNcUn8n7iQ9xGSBt1P3WwW20w==" }, "undici": { "version": "5.28.4", diff --git a/package.json b/package.json index b598163..1453cd5 100644 --- a/package.json +++ b/package.json @@ -28,10 +28,12 @@ } }, "scripts": { - "prepublishOnly": "npm run clear && npm run prettier:fix && npm run build && npm run test", + "prepublishOnly": "npm run clear && npm run prettier:fix && npm run build && npm run test:all", "prettier:fix": "prettier --write \"src/**/*.ts\" \"src/**/*.js\"", - "test": "node --env-file ./.env --experimental-vm-modules node_modules/jest/bin/jest.js --config=jest.config.json --no-cache", "build": "tsc && esbuild --bundle --platform=node --target=node20 --format=esm ./src/lowstorage.js | node importify-esbuild-output.js | esbuild --bundle --minify --sourcemap --platform=node --target=node20 --format=esm --outfile=build/lowstorage.min.js", + "test:all": "npm run test:cf && npm run test:minio", + "test:cf": "node --env-file ./.env --experimental-vm-modules node_modules/jest/bin/jest.js --config=general.jest.config.json --no-cache", + "test:minio": "node --experimental-vm-modules node_modules/jest/bin/jest.js --config=minio.jest.config.json --no-cache", "clear": "rm -rf build && rm -rf lib" }, "license": "MIT", @@ -53,7 +55,7 @@ }, "dependencies": { "avsc": "^5.7.7", - "ultralight-s3": "^0.0.5" + "ultralight-s3": "^0.0.6" }, "keywords": [ "storage", diff --git a/src/lowstorage.test.js b/src/lowstorage.test.js index 8f46ed4..0107080 100644 --- a/src/lowstorage.test.js +++ b/src/lowstorage.test.js @@ -1,28 +1,15 @@ import { env } from 'node:process'; import { lowstorage, lowstorageError, lowstorage_ERROR_CODES } from '../build/lowstorage.min.js'; -const configCF = { - endpoint: env.CF_ENDPOINT, - region: env.CF_REGION, - accessKeyId: env.CF_ACCESS_KEY_ID, - secretAccessKey: env.CF_SECRET_ACCESS_KEY, - bucketName: env.CF_BUCKET_NAME, +const config = { + endpoint: env.ENDPOINT || process.env.ENDPOINT || 'http://127.0.0.1:9000', + region: env.REGION || process.env.region || 'auto', + accessKeyId: env.ACCESS_KEY_ID || process.env.ACCESS_KEY_ID || 'minio_user', + secretAccessKey: env.SECRET_ACCESS_KEY || process.env.SECRET_ACCESS_KEY || 'minio_password', + bucketName: env.BUCKET_NAME || process.env.BUCKET_NAME || 'lowstorage-test', }; -console.log('🏃 Running tests...', configCF); - -const configMinio = { - endPoint: env.MINIO_ENDPOINT, - region: env.MINIO_REGION, - accessKey: env.MINIO_ACCESS_KEY, - secretKey: env.MINIO_SECRET_KEY, - bucketName: env.MINIO_BUCKET_NAME, -}; -const usersToInsert = [ - { name: 'Alice', age: 30 }, - { name: 'Bob', age: 25 }, - { name: 'Charlie', age: 25 }, -]; +console.log('🏃 Running tests...', config); const userAvroSchema = { type: 'record', @@ -50,9 +37,16 @@ let lStorage; beforeAll(async () => { console.time('lowstorage-test'); - lStorage = new lowstorage(configCF); + lStorage = new lowstorage(config); + const exists = await lStorage.createStorage(); + if (!exists) { + console.log('🚨 Failed to create storage, exiting...'); + console.log(`Check if the bucket ${config.bucketName} exists and if your s3 credentials allow bucket creation. Or make it manually.`); + process.exit(1); + } // clean up any existing collections const listCollections = await lStorage.listCollections(); + console.log('🧹 Cleaning up collections...', listCollections); for (const col of listCollections) { await lStorage.removeCollection(col); } @@ -427,7 +421,7 @@ test('Document | cachcing and race conditions', async () => { if (exsists) { await lStorage.removeCollection(colName); } - const lStorage2 = new lowstorage(configCF); + const lStorage2 = new lowstorage(config); const col2 = await lStorage2.collection(colName); const col = await lStorage.collection(colName); diff --git a/src/lowstorage.ts b/src/lowstorage.ts index 6e7ab91..2016388 100644 --- a/src/lowstorage.ts +++ b/src/lowstorage.ts @@ -121,6 +121,45 @@ class lowstorage { } }; + /** + * Check if a bucket exists. + * @returns {Promise} True if the bucket exists, false otherwise. + * @throws {lowstorageError} If there's an error. + */ + async checkIfStorageExists(): Promise { + try { + const exists = await this._s3.bucketExists(); + return !!exists; + } catch (error: any) { + if (error.message.includes('Not Found')) { + return false; + } + throw new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); + } + } + + /** + * Create a new storage bucket if it doesn't exist. + * @returns {Promise} A Promise that resolves to true if the bucket was created or already exists, false otherwise. + * @throws {lowstorageError} If there's an error. + */ + async createStorage(): Promise { + try { + const exists = await this.checkIfStorageExists(); + if (!exists) { + const createdBucket = await this._s3.createBucket(); + return createdBucket; + } + return exists; + throw new lowstorageError(`${MODULE_NAME}: Bucket already exists`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); + } catch (error: any) { + if (error instanceof lowstorageError) { + throw error; + } + throw new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); + } + } + /** * List all collections. * @returns {Promise} An array of collection names. diff --git a/test_ops/compose.yaml b/test_ops/compose.yaml new file mode 100644 index 0000000..3123929 --- /dev/null +++ b/test_ops/compose.yaml @@ -0,0 +1,15 @@ +services: + minio: + image: quay.io/minio/minio:RELEASE.2024-06-06T09-36-42Z + volumes: + - ./data:/data + ports: + - 9000:9000 + - 9001:9001 + restart: always + environment: + MINIO_ROOT_USER: 'minio_user' + MINIO_ROOT_PASSWORD: 'minio_password' + MINIO_ADDRESS: ':9000' + MINIO_CONSOLE_ADDRESS: ':9001' + command: minio server /data diff --git a/test_ops/setup.js b/test_ops/setup.js new file mode 100644 index 0000000..d2cadac --- /dev/null +++ b/test_ops/setup.js @@ -0,0 +1,39 @@ +'use strict'; +import { join, resolve } from 'path'; +import { spawn } from 'child_process'; + +const CWD = resolve('.'); +const composeFile = join(CWD, 'test_ops', 'compose.yaml'); + +const upAll = () => { + return new Promise((resolve, reject) => { + const dockerCompose = spawn('docker', ['compose', '-f', composeFile, 'up', '-d'], { cwd: CWD }); + + dockerCompose.stdout.on('data', (data) => { + console.log(`stdout: ${data}`); + }); + + dockerCompose.stderr.on('data', (data) => { + console.error(`stderr: ${data}`); + }); + + dockerCompose.on('close', (code) => { + if (code === 0) { + resolve(); + } else { + reject(new Error(`Docker Compose exited with code ${code}`)); + } + }); + }); +}; + +export default async (globalConfig, projectConfig) => { + try { + console.log('Starting MinIO container...'); + await upAll(); + console.log('MinIO container started successfully.'); + } catch (err) { + console.error('Failed to start MinIO container:', err); + process.exit(1); + } +}; diff --git a/test_ops/teardown.js b/test_ops/teardown.js new file mode 100644 index 0000000..a2102df --- /dev/null +++ b/test_ops/teardown.js @@ -0,0 +1,37 @@ +'use strict'; +import { join, resolve } from 'path'; +import { spawn } from 'child_process'; + +const CWD = resolve('.'); +const composeFile = join(CWD, 'test_ops', 'compose.yaml'); + +const downAll = () => { + return new Promise((resolve, reject) => { + const dockerCompose = spawn('docker', ['compose', '-f', composeFile, 'down'], { cwd: CWD }); + + dockerCompose.stdout.on('data', (data) => { + console.log(`stdout: ${data}`); + }); + + dockerCompose.stderr.on('data', (data) => { + console.error(`stderr: ${data}`); + }); + + dockerCompose.on('close', (code) => { + if (code === 0) { + resolve(); + } else { + reject(new Error(`Docker Compose exited with code ${code}`)); + } + }); + }); +}; +export default async () => { + try { + console.log('Stopping MinIO container...'); + await downAll(); + console.log('MinIO container stopped successfully.'); + } catch (err) { + console.error('Failed to stop MinIO container:', err); + } +}; From aa7209ba2625d6e045c740a89495db47dd4c016d Mon Sep 17 00:00:00 2001 From: Jolly Good <1671375+good-lly@users.noreply.github.com> Date: Thu, 22 Aug 2024 16:27:45 +0200 Subject: [PATCH 17/18] #17 fix test path in minio workflow --- .github/workflows/test-minio-dev.yml | 2 +- .github/workflows/test-minio-master.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test-minio-dev.yml b/.github/workflows/test-minio-dev.yml index e3fb8e8..2670324 100644 --- a/.github/workflows/test-minio-dev.yml +++ b/.github/workflows/test-minio-dev.yml @@ -17,7 +17,7 @@ jobs: run: docker --version && docker compose version - name: Start Docker image - run: docker compose -f ./tests/compose.yaml up -d && sleep 10 + run: docker compose -f ./test_ops/compose.yaml up -d && sleep 10 - uses: actions/setup-node@v4 with: diff --git a/.github/workflows/test-minio-master.yml b/.github/workflows/test-minio-master.yml index 22900d4..2b37097 100644 --- a/.github/workflows/test-minio-master.yml +++ b/.github/workflows/test-minio-master.yml @@ -17,7 +17,7 @@ jobs: run: docker --version && docker compose version - name: Start Docker image - run: docker compose -f ./tests/compose.yaml up -d && sleep 10 + run: docker compose -f ./test_ops/compose.yaml up -d && sleep 10 - uses: actions/setup-node@v4 with: From 7aeded2f57972e6999df8b8e9d04a2fde0f5a6f6 Mon Sep 17 00:00:00 2001 From: Jolly Good <1671375+good-lly@users.noreply.github.com> Date: Mon, 26 Aug 2024 13:15:36 +0200 Subject: [PATCH 18/18] minor changes, review fixies, etc --- build/lowstorage.min.js | 38 +++---- build/lowstorage.min.js.map | 6 +- lib/errors.js | 1 + lib/errors.js.map | 2 +- lib/helpers.js | 2 +- lib/helpers.js.map | 2 +- lib/lowstorage.d.ts | 9 +- lib/lowstorage.js | 164 ++++++++++++++------------- lib/lowstorage.js.map | 2 +- package.json | 6 +- src/errors.ts | 1 + src/helpers.ts | 2 +- src/lowstorage.ts | 213 ++++++++++++++++-------------------- 13 files changed, 215 insertions(+), 233 deletions(-) diff --git a/build/lowstorage.min.js b/build/lowstorage.min.js index 86f463a..02fe77e 100644 --- a/build/lowstorage.min.js +++ b/build/lowstorage.min.js @@ -1,8 +1,8 @@ -import Ue from"buffer";import xt from"crypto";import De from"util";import vt from"stream";import Nt from"zlib";import At from"events";import mt from"fs";import gt from"path";import{randomUUID as tt}from"node:crypto";var It=Object.create,wt=Object.defineProperty,$t=Object.getOwnPropertyDescriptor,bt=Object.getOwnPropertyNames,Ct=Object.getPrototypeOf,Pt=Object.prototype.hasOwnProperty;var Ie=(u,l)=>function(){return l||(0,u[bt(u)[0]])((l={exports:{}}).exports,l),l.exports},Bt=(u,l,h,d)=>{if(l&&typeof l=="object"||typeof l=="function")for(let _ of bt(l))!Pt.call(u,_)&&_!==h&&wt(u,_,{get:()=>l[_],enumerable:!(d=$t(l,_))||d.enumerable});return u},Lt=(u,l,h)=>(h=u!=null?It(Ct(u)):{},Bt(l||!u||!u.__esModule?wt(h,"default",{value:u,enumerable:!0}):h,u)),ze=Ie({"node_modules/avsc/lib/utils.js"(u,l){"use strict";var h=Ue,d=xt,_=De,g=h.Buffer,O=new k(4096),T=/^[A-Za-z_][A-Za-z0-9_]*$/,v=_.format;function R(c){return typeof g.alloc=="function"?g.alloc(c):new g(c)}function C(c,p){return typeof g.from=="function"?g.from(c,p):new g(c,p)}function P(c){return c.charAt(0).toUpperCase()+c.slice(1)}function Q(c,p){return c===p?0:c=0)return-2;b=A}return b}function w(c,p){var b={},A,V;for(A=0;Ap?R(c):(this._pos+c>p&&(this._slab=R(p),this._pos=0),this._slab.slice(this._pos,this._pos+=c))};function N(c){var p=1103515245,b=12345,A=Math.pow(2,31),V=Math.floor(c||Math.random()*(A-1));this._max=A,this._nextInt=function(){return V=(p*V+b)%A}}N.prototype.nextBoolean=function(){return!!(this._nextInt()%2)},N.prototype.nextInt=function(c,p){return p===void 0&&(p=c,c=0),p=p===void 0?this._max:p,c+Math.floor(this.nextFloat()*(p-c))},N.prototype.nextFloat=function(c,p){return p===void 0&&(p=c,c=0),p=p===void 0?1:p,c+(p-c)*this._nextInt()/this._max},N.prototype.nextString=function(c,p){c|=0,p=p||"aA";var b="";p.indexOf("a")>-1&&(b+="abcdefghijklmnopqrstuvwxyz"),p.indexOf("A")>-1&&(b+="ABCDEFGHIJKLMNOPQRSTUVWXYZ"),p.indexOf("#")>-1&&(b+="0123456789"),p.indexOf("!")>-1&&(b+="~`!@#$%^&*()_+-={}[]:\";'<>?,./|\\");for(var A=[],V=0;V0&&p[b].index>1].index;)c=p[b],p[b]=p[A],p[A]=c,b=A},x.prototype.pop=function(){var c=this._items,p=c.length-1|0,b=c[0];if(!b||b.index>this._index)return null;if(this._index++,!p)return c.pop(),b;c[0]=c.pop();for(var A=p>>1,V=0,ee,J,he,pe,fe,ge,ve;V=pe.index));)c[he]=pe,c[V]=fe,V=he;return b};function I(c,p){if(this.buf=c,this.pos=p|0,this.pos<0)throw new Error("negative offset")}I.prototype.isValid=function(){return this.pos<=this.buf.length},I.prototype._invalidate=function(){this.pos=this.buf.length+1},I.prototype.readBoolean=function(){return!!this.buf[this.pos++]},I.prototype.skipBoolean=function(){this.pos++},I.prototype.writeBoolean=function(c){this.buf[this.pos++]=!!c},I.prototype.readInt=I.prototype.readLong=function(){var c=0,p=0,b=this.buf,A,V,ee,J;do A=b[this.pos++],V=A&128,c|=(A&127)<>1^-(c&1)},I.prototype.skipInt=I.prototype.skipLong=function(){for(var c=this.buf;c[this.pos++]&128;);},I.prototype.writeInt=I.prototype.writeLong=function(c){var p=this.buf,b,A;if(c>=-1073741824&&c<1073741824){A=c>=0?c<<1:~c<<1|1;do p[this.pos]=A&127,A>>=7;while(A&&(p[this.pos++]|=128))}else{b=c>=0?c*2:-c*2-1;do p[this.pos]=b&127,b/=128;while(b>=1&&(p[this.pos++]|=128))}this.pos++},I.prototype.readFloat=function(){var c=this.buf,p=this.pos;return this.pos+=4,this.pos>c.length?0:this.buf.readFloatLE(p)},I.prototype.skipFloat=function(){this.pos+=4},I.prototype.writeFloat=function(c){var p=this.buf,b=this.pos;if(this.pos+=4,!(this.pos>p.length))return this.buf.writeFloatLE(c,b)},I.prototype.readDouble=function(){var c=this.buf,p=this.pos;return this.pos+=8,this.pos>c.length?0:this.buf.readDoubleLE(p)},I.prototype.skipDouble=function(){this.pos+=8},I.prototype.writeDouble=function(c){var p=this.buf,b=this.pos;if(this.pos+=8,!(this.pos>p.length))return this.buf.writeDoubleLE(c,b)},I.prototype.readFixed=function(c){var p=this.pos;if(this.pos+=c,!(this.pos>this.buf.length)){var b=O.alloc(c);return this.buf.copy(b,0,p,p+c),b}},I.prototype.skipFixed=function(c){this.pos+=c},I.prototype.writeFixed=function(c,p){p=p||c.length;var b=this.pos;this.pos+=p,!(this.pos>this.buf.length)&&c.copy(this.buf,b,0,p)},I.prototype.readBytes=function(){var c=this.readLong();if(c<0){this._invalidate();return}return this.readFixed(c)},I.prototype.skipBytes=function(){var c=this.readLong();if(c<0){this._invalidate();return}this.pos+=c},I.prototype.writeBytes=function(c){var p=c.length;this.writeLong(p),this.writeFixed(c,p)},typeof g.prototype.utf8Slice=="function"?I.prototype.readString=function(){var c=this.readLong();if(c<0)return this._invalidate(),"";var p=this.pos,b=this.buf;if(this.pos+=c,!(this.pos>b.length))return this.buf.utf8Slice(p,p+c)}:I.prototype.readString=function(){var c=this.readLong();if(c<0)return this._invalidate(),"";var p=this.pos,b=this.buf;if(this.pos+=c,!(this.pos>b.length))return this.buf.slice(p,p+c).toString()},I.prototype.skipString=function(){var c=this.readLong();if(c<0){this._invalidate();return}this.pos+=c},I.prototype.writeString=function(c){var p=g.byteLength(c),b=this.buf;this.writeLong(p);var A=this.pos;if(this.pos+=p,!(this.pos>b.length))if(p>64&&typeof g.prototype.utf8Write=="function")b.utf8Write(c,A,p);else{var V,ee,J,he;for(V=0,ee=p;V>6|192,b[A++]=J&63|128):(J&64512)===55296&&((he=c.charCodeAt(V+1))&64512)===56320?(J=65536+((J&1023)<<10)+(he&1023),V++,b[A++]=J>>18|240,b[A++]=J>>12&63|128,b[A++]=J>>6&63|128,b[A++]=J&63|128):(b[A++]=J>>12|224,b[A++]=J>>6&63|128,b[A++]=J&63|128)}},typeof g.prototype.latin1Write=="function"?I.prototype.writeBinary=function(c,p){var b=this.pos;this.pos+=p,!(this.pos>this.buf.length)&&this.buf.latin1Write(c,b,p)}:typeof g.prototype.binaryWrite=="function"?I.prototype.writeBinary=function(c,p){var b=this.pos;this.pos+=p,!(this.pos>this.buf.length)&&this.buf.binaryWrite(c,b,p)}:I.prototype.writeBinary=function(c,p){var b=this.pos;this.pos+=p,!(this.pos>this.buf.length)&&this.buf.write(c,b,p,"binary")},I.prototype.matchBoolean=function(c){return this.buf[this.pos++]-c.buf[c.pos++]},I.prototype.matchInt=I.prototype.matchLong=function(c){var p=this.readLong(),b=c.readLong();return p===b?0:p>1;ee&128;)ee=V[this.pos++],p|=(ee&127)<=8&&(A-=8,c[b++]=p,p>>=8);return c[b]=p,J&&Z(c,8),c},I.prototype.packLongBytes=function(c){var p=(c[7]&128)>>7,b=this.buf,A=1,V=0,ee=3,J;p?(Z(c,8),J=1):J=0;for(var he=[c.readUIntLE(0,3),c.readUIntLE(3,3),c.readUIntLE(6,2)];ee&&!he[--ee];);for(;V7;)b[this.pos++]=J&127|128,J>>=7,A-=7;J|=he[ee]<>=7;while(J&&(b[this.pos++]|=128));this.pos++,p&&Z(c,8)};function Z(c,p){for(;p--;)c[p]=~c[p]}l.exports={abstractFunction:oe,addDeprecatedGetters:E,bufferFrom:C,capitalize:P,copyOwnProperties:te,getHash:m,compare:Q,getOption:re,impliedNamespace:X,isValidName:M,jsonEnd:U,newBuffer:R,objectValues:j,qualify:G,toMap:w,singleIndexOf:a,hasDuplicates:z,unqualify:D,BufferPool:k,Lcg:N,OrderedQueue:x,Tap:I}}}),ot=Ie({"node_modules/avsc/lib/types.js"(u,l){"use strict";var h=ze(),d=Ue,_=De,g=d.Buffer,O=d.SlowBuffer,T=h.Tap,v=_.debuglog("avsc:types"),R=_.format,C={array:Z,boolean:z,bytes:U,double:D,enum:N,error:c,fixed:x,float:G,int:te,long:M,map:I,null:j,record:c,string:X},P=new h.Lcg,Q=new T(new O(1024)),re=null,m=[];function a(t,i){var e;if(re?(e=re,m.push([re,this]),re=null):e=this,this._hash=new ee,this.name=void 0,this.aliases=void 0,this.doc=t&&t.doc?""+t.doc:void 0,t){var r=t.name,n=t.namespace===void 0?i&&i.namespace:t.namespace;if(r!==void 0){if(r=ke(r,n),fe(r))throw new Error(R("cannot rename primitive type: %j",r));var o=i&&i.registry;if(o){if(o[r]!==void 0)throw new Error(R("duplicate type name: %s",r));o[r]=e}}else if(i&&i.noAnonymousTypes)throw new Error(R("missing name property in schema: %j",t));this.name=r,this.aliases=t.aliases?t.aliases.map(function(s){return ke(s,n)}):[]}}a.forSchema=function(t,i){i=i||{},i.registry=i.registry||{};var e=function(S){switch(S===!0?S="always":S===!1?S="never":S===void 0?S="auto":typeof S=="string"&&(S=S.toLowerCase()),S){case"always":return k;case"never":return E;case"auto":return;default:throw new Error(R("invalid wrap unions option: %j",S))}}(i.wrapUnions);if(t===null)throw new Error('invalid type: null (did you mean "null"?)');if(a.isType(t))return t;var r;if(i.typeHook&&(r=i.typeHook(t,i))){if(!a.isType(r))throw new Error(R("invalid typehook return value: %j",r));return r}if(typeof t=="string"){if(t=ke(t,i.namespace),r=i.registry[t],r)return r;if(fe(t))return i.registry[t]=a.forSchema({type:t},i);throw new Error(R("undefined type name: %s",t))}if(t.logicalType&&i.logicalTypes&&!re){var n=i.logicalTypes[t.logicalType];if(n){var o=i.namespace,s={};Object.keys(i.registry).forEach(function(S){s[S]=i.registry[S]});try{return v("instantiating logical type for %s",t.logicalType),new n(t,i)}catch(S){if(v("failed to instantiate logical type for %s",t.logicalType),i.assertLogicalTypes)throw S;re=null,i.namespace=o,i.registry=s}}}if(Array.isArray(t)){var f=re;re=null;var y=t.map(function(S){return a.forSchema(S,i)});e||(e=Te(y)?k:E),re=f,r=new e(y,i)}else r=function(S){var $=C[S];if($===void 0)throw new Error(R("unknown type: %j",S));return new $(t,i)}(t.type);return r},a.forValue=function(t,i){if(i=i||{},i.emptyArrayType=i.emptyArrayType||a.forSchema({type:"array",items:"null"}),i.valueHook){var e=i.valueHook(t,i);if(e!==void 0){if(!a.isType(e))throw new Error(R("invalid value hook return value: %j",e));return e}}switch(typeof t){case"string":return a.forSchema("string",i);case"boolean":return a.forSchema("boolean",i);case"number":return(t|0)===t?a.forSchema("int",i):Math.abs(t)<9007199254740991?a.forSchema("float",i):a.forSchema("double",i);case"object":if(t===null)return a.forSchema("null",i);if(Array.isArray(t))return t.length?a.forSchema({type:"array",items:a.forTypes(t.map(function(n){return a.forValue(n,i)}),i)},i):i.emptyArrayType;if(g.isBuffer(t))return a.forSchema("bytes",i);var r=Object.keys(t);return r.some(function(n){return!h.isValidName(n)})?a.forSchema({type:"map",values:a.forTypes(r.map(function(n){return a.forValue(t[n],i)}),i)},i):a.forSchema({type:"record",fields:r.map(function(n){return{name:n,type:a.forValue(t[n],i)}})},i);default:throw new Error(R("cannot infer type from: %j",t))}},a.forTypes=function(t,i){if(!t.length)throw new Error("no types to combine");if(t.length===1)return t[0];i=i||{};var e=[],r=0,n=!0;if(t.forEach(function(L){switch(L.typeName){case"union:unwrapped":n=!1,e=e.concat(L.types);break;case"union:wrapped":r++,e=e.concat(L.types);break;case"null":e.push(L);break;default:n=!1,e.push(L)}}),r){if(!n)throw new Error("cannot combine wrapped union");var o={};e.forEach(function(L){var F=L.branchName,W=o[F];if(!W)o[F]=L;else if(!L.equals(W))throw new Error("inconsistent branch type")});var s=i.wrapUnions,f;i.wrapUnions=!0;try{f=a.forSchema(Object.keys(o).map(function(L){return o[L]}),i)}catch(L){throw i.wrapUnions=s,L}return i.wrapUnions=s,f}var y={};e.forEach(function(L){var F=Ce(L),W=y[F];W||(y[F]=W=[]),W.push(L)});var S=Object.keys(y),$=S.map(function(L){var F=y[L];if(F.length===1)return F[0];switch(L){case"null":case"boolean":return F[0];case"number":return Fe(F);case"string":return Ge(F,i);case"buffer":return Ke(F,i);case"array":return F=F.filter(function(W){return W!==i.emptyArrayType}),F.length?a.forSchema({type:"array",items:a.forTypes(F.map(function(W){return W.itemsType}),i)},i):i.emptyArrayType;default:return Je(F,i)}});return $.length===1?$[0]:a.forSchema($,i)},a.isType=function(){var t=arguments.length;if(!t)return!1;var i=arguments[0];if(!i||typeof i._update!="function"||typeof i.fingerprint!="function")return!1;if(t===1)return!0;var e=i.typeName,r;for(r=1;r",i);var e=this.schema({exportAttrs:!0,noDeref:!0});return typeof e=="object"&&!a.isType(this,"logical")&&(e.type=void 0),R("<%s %j>",i,e)},a.prototype.isValid=function(t,i){var e=(i&&i.noUndeclaredFields)|0,r=i&&i.errorHook,n,o;return r&&(o=[],n=function(s,f){r.call(this,o.slice(),s,f,t)}),this._check(t,e,n,o)},a.prototype.random=h.abstractFunction,a.prototype.schema=function(t){return this._attrs({exportAttrs:!!(t&&t.exportAttrs),noDeref:!!(t&&t.noDeref)})},a.prototype.toBuffer=function(t){Q.pos=0,this._write(Q,t);var i=h.newBuffer(Q.pos);return Q.isValid()?Q.buf.copy(i,0,0,Q.pos):this._write(new T(i),t),i},a.prototype.toJSON=function(){return this.schema({exportAttrs:!0})},a.prototype.toString=function(t){return JSON.stringify(t===void 0?this.schema({noDeref:!0}):this._copy(t,{coerce:3}))},a.prototype.wrap=function(t){var i=this._branchConstructor;return i===null?null:new i(t)},a.prototype._attrs=function(t){t.derefed=t.derefed||{};var i=this.name;if(i!==void 0){if(t.noDeref||t.derefed[i])return i;t.derefed[i]=!0}var e={};this.name!==void 0&&(e.name=i),e.type=this.typeName;var r=this._deref(e,t);return r!==void 0&&(e=r),t.exportAttrs&&(this.aliases&&this.aliases.length&&(e.aliases=this.aliases),this.doc!==void 0&&(e.doc=this.doc)),e},a.prototype._createBranchConstructor=function(){var t=this.branchName;if(t==="null")return null;var i=~t.indexOf(".")?"this['"+t+"']":"this."+t,e="return function Branch$(val) { "+i+" = val; };",r=new Function(e)();return r.type=this,r.prototype.unwrap=new Function("return "+i+";"),r.prototype.unwrapped=r.prototype.unwrap,r},a.prototype._peek=function(t){var i=t.pos,e=this._read(t);return t.pos=i,e},a.prototype._check=h.abstractFunction,a.prototype._copy=h.abstractFunction,a.prototype._deref=h.abstractFunction,a.prototype._match=h.abstractFunction,a.prototype._read=h.abstractFunction,a.prototype._skip=h.abstractFunction,a.prototype._update=h.abstractFunction,a.prototype._write=h.abstractFunction,a.prototype.getAliases=function(){return this.aliases},a.prototype.getFingerprint=a.prototype.fingerprint,a.prototype.getName=function(t){return this.name||!t?this.name:this.branchName},a.prototype.getSchema=a.prototype.schema,a.prototype.getTypeName=function(){return this.typeName};function w(t){a.call(this),this._branchConstructor=this._createBranchConstructor(),t||Object.freeze(this)}_.inherits(w,a),w.prototype._update=function(t,i){i.typeName===this.typeName&&(t._read=this._read)},w.prototype._copy=function(t){return this._check(t,void 0,ue),t},w.prototype._deref=function(){return this.typeName},w.prototype.compare=h.compare;function j(){w.call(this)}_.inherits(j,w),j.prototype._check=function(t,i,e){var r=t===null;return!r&&e&&e(t,this),r},j.prototype._read=function(){return null},j.prototype._skip=function(){},j.prototype._write=function(t,i){i!==null&&ue(i,this)},j.prototype._match=function(){return 0},j.prototype.compare=j.prototype._match,j.prototype.typeName="null",j.prototype.random=j.prototype._read;function z(){w.call(this)}_.inherits(z,w),z.prototype._check=function(t,i,e){var r=typeof t=="boolean";return!r&&e&&e(t,this),r},z.prototype._read=function(t){return t.readBoolean()},z.prototype._skip=function(t){t.skipBoolean()},z.prototype._write=function(t,i){typeof i!="boolean"&&ue(i,this),t.writeBoolean(i)},z.prototype._match=function(t,i){return t.matchBoolean(i)},z.prototype.typeName="boolean",z.prototype.random=function(){return P.nextBoolean()};function te(){w.call(this)}_.inherits(te,w),te.prototype._check=function(t,i,e){var r=t===(t|0);return!r&&e&&e(t,this),r},te.prototype._read=function(t){return t.readInt()},te.prototype._skip=function(t){t.skipInt()},te.prototype._write=function(t,i){i!==(i|0)&&ue(i,this),t.writeInt(i)},te.prototype._match=function(t,i){return t.matchInt(i)},te.prototype.typeName="int",te.prototype.random=function(){return P.nextInt(1e3)|0};function M(){w.call(this)}_.inherits(M,w),M.prototype._check=function(t,i,e){var r=typeof t=="number"&&t%1===0&&$e(t);return!r&&e&&e(t,this),r},M.prototype._read=function(t){var i=t.readLong();if(!$e(i))throw new Error("potential precision loss");return i},M.prototype._skip=function(t){t.skipLong()},M.prototype._write=function(t,i){(typeof i!="number"||i%1||!$e(i))&&ue(i,this),t.writeLong(i)},M.prototype._match=function(t,i){return t.matchLong(i)},M.prototype._update=function(t,i){switch(i.typeName){case"int":t._read=i._read;break;case"abstract:long":case"long":t._read=this._read}},M.prototype.typeName="long",M.prototype.random=function(){return P.nextInt()},M.__with=function(t,i){t=t||{};var e={toBuffer:"_toBuffer",fromBuffer:"_fromBuffer",fromJSON:"_fromJSON",toJSON:"_toJSON",isValid:"_isValid",compare:"compare"},r=new b(i);return Object.keys(e).forEach(function(n){if(t[n]===void 0)throw new Error(R("missing method implementation: %s",n));r[e[n]]=t[n]}),Object.freeze(r)};function G(){w.call(this)}_.inherits(G,w),G.prototype._check=function(t,i,e){var r=typeof t=="number";return!r&&e&&e(t,this),r},G.prototype._read=function(t){return t.readFloat()},G.prototype._skip=function(t){t.skipFloat()},G.prototype._write=function(t,i){typeof i!="number"&&ue(i,this),t.writeFloat(i)},G.prototype._match=function(t,i){return t.matchFloat(i)},G.prototype._update=function(t,i){switch(i.typeName){case"float":case"int":t._read=i._read;break;case"abstract:long":case"long":t._read=function(e){return e.readLong()}}},G.prototype.typeName="float",G.prototype.random=function(){return P.nextFloat(1e3)};function D(){w.call(this)}_.inherits(D,w),D.prototype._check=function(t,i,e){var r=typeof t=="number";return!r&&e&&e(t,this),r},D.prototype._read=function(t){return t.readDouble()},D.prototype._skip=function(t){t.skipDouble()},D.prototype._write=function(t,i){typeof i!="number"&&ue(i,this),t.writeDouble(i)},D.prototype._match=function(t,i){return t.matchDouble(i)},D.prototype._update=function(t,i){switch(i.typeName){case"double":case"float":case"int":t._read=i._read;break;case"abstract:long":case"long":t._read=function(e){return e.readLong()}}},D.prototype.typeName="double",D.prototype.random=function(){return P.nextFloat()};function X(){w.call(this)}_.inherits(X,w),X.prototype._check=function(t,i,e){var r=typeof t=="string";return!r&&e&&e(t,this),r},X.prototype._read=function(t){return t.readString()},X.prototype._skip=function(t){t.skipString()},X.prototype._write=function(t,i){typeof i!="string"&&ue(i,this),t.writeString(i)},X.prototype._match=function(t,i){return t.matchString(i)},X.prototype._update=function(t,i){switch(i.typeName){case"bytes":case"string":t._read=this._read}},X.prototype.typeName="string",X.prototype.random=function(){return P.nextString(P.nextInt(32))};function U(){w.call(this)}_.inherits(U,w),U.prototype._check=function(t,i,e){var r=g.isBuffer(t);return!r&&e&&e(t,this),r},U.prototype._read=function(t){return t.readBytes()},U.prototype._skip=function(t){t.skipBytes()},U.prototype._write=function(t,i){g.isBuffer(i)||ue(i,this),t.writeBytes(i)},U.prototype._match=function(t,i){return t.matchBytes(i)},U.prototype._update=X.prototype._update,U.prototype._copy=function(t,i){var e;switch((i&&i.coerce)|0){case 3:return this._check(t,void 0,ue),t.toString("binary");case 2:if(typeof t!="string")throw new Error(R("cannot coerce to buffer: %j",t));return e=h.bufferFrom(t,"binary"),this._check(e,void 0,ue),e;case 1:if(!je(t))throw new Error(R("cannot coerce to buffer: %j",t));return e=h.bufferFrom(t.data),this._check(e,void 0,ue),e;default:return this._check(t,void 0,ue),h.bufferFrom(t)}},U.prototype.compare=g.compare,U.prototype.typeName="bytes",U.prototype.random=function(){return P.nextBuffer(P.nextInt(32))};function oe(t,i){if(a.call(this),!Array.isArray(t))throw new Error(R("non-array union schema: %j",t));if(!t.length)throw new Error("empty union");this.types=Object.freeze(t.map(function(e){return a.forSchema(e,i)})),this._branchIndices={},this.types.forEach(function(e,r){if(a.isType(e,"union"))throw new Error("unions cannot be directly nested");var n=e.branchName;if(this._branchIndices[n]!==void 0)throw new Error(R("duplicate union branch name: %j",n));this._branchIndices[n]=r},this)}_.inherits(oe,a),oe.prototype._branchConstructor=function(){throw new Error("unions cannot be directly wrapped")},oe.prototype._skip=function(t){this.types[t.readLong()]._skip(t)},oe.prototype._match=function(t,i){var e=t.readLong(),r=i.readLong();return e===r?this.types[e]._match(t,i):efunction(){return l||(0,u[bt(u)[0]])((l={exports:{}}).exports,l),l.exports},Bt=(u,l,h,d)=>{if(l&&typeof l=="object"||typeof l=="function")for(let _ of bt(l))!Pt.call(u,_)&&_!==h&&wt(u,_,{get:()=>l[_],enumerable:!(d=Ct(l,_))||d.enumerable});return u},Lt=(u,l,h)=>(h=u!=null?It($t(u)):{},Bt(l||!u||!u.__esModule?wt(h,"default",{value:u,enumerable:!0}):h,u)),ze=Ie({"node_modules/avsc/lib/utils.js"(u,l){"use strict";var h=Ue,d=xt,_=De,g=h.Buffer,O=new S(4096),T=/^[A-Za-z_][A-Za-z0-9_]*$/,v=_.format;function R(c){return typeof g.alloc=="function"?g.alloc(c):new g(c)}function $(c,p){return typeof g.from=="function"?g.from(c,p):new g(c,p)}function P(c){return c.charAt(0).toUpperCase()+c.slice(1)}function Y(c,p){return c===p?0:c=0)return-2;b=A}return b}function w(c,p){var b={},A,V;for(A=0;Ap?R(c):(this._pos+c>p&&(this._slab=R(p),this._pos=0),this._slab.slice(this._pos,this._pos+=c))};function N(c){var p=1103515245,b=12345,A=Math.pow(2,31),V=Math.floor(c||Math.random()*(A-1));this._max=A,this._nextInt=function(){return V=(p*V+b)%A}}N.prototype.nextBoolean=function(){return!!(this._nextInt()%2)},N.prototype.nextInt=function(c,p){return p===void 0&&(p=c,c=0),p=p===void 0?this._max:p,c+Math.floor(this.nextFloat()*(p-c))},N.prototype.nextFloat=function(c,p){return p===void 0&&(p=c,c=0),p=p===void 0?1:p,c+(p-c)*this._nextInt()/this._max},N.prototype.nextString=function(c,p){c|=0,p=p||"aA";var b="";p.indexOf("a")>-1&&(b+="abcdefghijklmnopqrstuvwxyz"),p.indexOf("A")>-1&&(b+="ABCDEFGHIJKLMNOPQRSTUVWXYZ"),p.indexOf("#")>-1&&(b+="0123456789"),p.indexOf("!")>-1&&(b+="~`!@#$%^&*()_+-={}[]:\";'<>?,./|\\");for(var A=[],V=0;V0&&p[b].index>1].index;)c=p[b],p[b]=p[A],p[A]=c,b=A},x.prototype.pop=function(){var c=this._items,p=c.length-1|0,b=c[0];if(!b||b.index>this._index)return null;if(this._index++,!p)return c.pop(),b;c[0]=c.pop();for(var A=p>>1,V=0,Z,K,ce,pe,he,ge,ve;V=pe.index));)c[ce]=pe,c[V]=he,V=ce;return b};function I(c,p){if(this.buf=c,this.pos=p|0,this.pos<0)throw new Error("negative offset")}I.prototype.isValid=function(){return this.pos<=this.buf.length},I.prototype._invalidate=function(){this.pos=this.buf.length+1},I.prototype.readBoolean=function(){return!!this.buf[this.pos++]},I.prototype.skipBoolean=function(){this.pos++},I.prototype.writeBoolean=function(c){this.buf[this.pos++]=!!c},I.prototype.readInt=I.prototype.readLong=function(){var c=0,p=0,b=this.buf,A,V,Z,K;do A=b[this.pos++],V=A&128,c|=(A&127)<>1^-(c&1)},I.prototype.skipInt=I.prototype.skipLong=function(){for(var c=this.buf;c[this.pos++]&128;);},I.prototype.writeInt=I.prototype.writeLong=function(c){var p=this.buf,b,A;if(c>=-1073741824&&c<1073741824){A=c>=0?c<<1:~c<<1|1;do p[this.pos]=A&127,A>>=7;while(A&&(p[this.pos++]|=128))}else{b=c>=0?c*2:-c*2-1;do p[this.pos]=b&127,b/=128;while(b>=1&&(p[this.pos++]|=128))}this.pos++},I.prototype.readFloat=function(){var c=this.buf,p=this.pos;return this.pos+=4,this.pos>c.length?0:this.buf.readFloatLE(p)},I.prototype.skipFloat=function(){this.pos+=4},I.prototype.writeFloat=function(c){var p=this.buf,b=this.pos;if(this.pos+=4,!(this.pos>p.length))return this.buf.writeFloatLE(c,b)},I.prototype.readDouble=function(){var c=this.buf,p=this.pos;return this.pos+=8,this.pos>c.length?0:this.buf.readDoubleLE(p)},I.prototype.skipDouble=function(){this.pos+=8},I.prototype.writeDouble=function(c){var p=this.buf,b=this.pos;if(this.pos+=8,!(this.pos>p.length))return this.buf.writeDoubleLE(c,b)},I.prototype.readFixed=function(c){var p=this.pos;if(this.pos+=c,!(this.pos>this.buf.length)){var b=O.alloc(c);return this.buf.copy(b,0,p,p+c),b}},I.prototype.skipFixed=function(c){this.pos+=c},I.prototype.writeFixed=function(c,p){p=p||c.length;var b=this.pos;this.pos+=p,!(this.pos>this.buf.length)&&c.copy(this.buf,b,0,p)},I.prototype.readBytes=function(){var c=this.readLong();if(c<0){this._invalidate();return}return this.readFixed(c)},I.prototype.skipBytes=function(){var c=this.readLong();if(c<0){this._invalidate();return}this.pos+=c},I.prototype.writeBytes=function(c){var p=c.length;this.writeLong(p),this.writeFixed(c,p)},typeof g.prototype.utf8Slice=="function"?I.prototype.readString=function(){var c=this.readLong();if(c<0)return this._invalidate(),"";var p=this.pos,b=this.buf;if(this.pos+=c,!(this.pos>b.length))return this.buf.utf8Slice(p,p+c)}:I.prototype.readString=function(){var c=this.readLong();if(c<0)return this._invalidate(),"";var p=this.pos,b=this.buf;if(this.pos+=c,!(this.pos>b.length))return this.buf.slice(p,p+c).toString()},I.prototype.skipString=function(){var c=this.readLong();if(c<0){this._invalidate();return}this.pos+=c},I.prototype.writeString=function(c){var p=g.byteLength(c),b=this.buf;this.writeLong(p);var A=this.pos;if(this.pos+=p,!(this.pos>b.length))if(p>64&&typeof g.prototype.utf8Write=="function")b.utf8Write(c,A,p);else{var V,Z,K,ce;for(V=0,Z=p;V>6|192,b[A++]=K&63|128):(K&64512)===55296&&((ce=c.charCodeAt(V+1))&64512)===56320?(K=65536+((K&1023)<<10)+(ce&1023),V++,b[A++]=K>>18|240,b[A++]=K>>12&63|128,b[A++]=K>>6&63|128,b[A++]=K&63|128):(b[A++]=K>>12|224,b[A++]=K>>6&63|128,b[A++]=K&63|128)}},typeof g.prototype.latin1Write=="function"?I.prototype.writeBinary=function(c,p){var b=this.pos;this.pos+=p,!(this.pos>this.buf.length)&&this.buf.latin1Write(c,b,p)}:typeof g.prototype.binaryWrite=="function"?I.prototype.writeBinary=function(c,p){var b=this.pos;this.pos+=p,!(this.pos>this.buf.length)&&this.buf.binaryWrite(c,b,p)}:I.prototype.writeBinary=function(c,p){var b=this.pos;this.pos+=p,!(this.pos>this.buf.length)&&this.buf.write(c,b,p,"binary")},I.prototype.matchBoolean=function(c){return this.buf[this.pos++]-c.buf[c.pos++]},I.prototype.matchInt=I.prototype.matchLong=function(c){var p=this.readLong(),b=c.readLong();return p===b?0:p>1;Z&128;)Z=V[this.pos++],p|=(Z&127)<=8&&(A-=8,c[b++]=p,p>>=8);return c[b]=p,K&&X(c,8),c},I.prototype.packLongBytes=function(c){var p=(c[7]&128)>>7,b=this.buf,A=1,V=0,Z=3,K;p?(X(c,8),K=1):K=0;for(var ce=[c.readUIntLE(0,3),c.readUIntLE(3,3),c.readUIntLE(6,2)];Z&&!ce[--Z];);for(;V7;)b[this.pos++]=K&127|128,K>>=7,A-=7;K|=ce[Z]<>=7;while(K&&(b[this.pos++]|=128));this.pos++,p&&X(c,8)};function X(c,p){for(;p--;)c[p]=~c[p]}l.exports={abstractFunction:ne,addDeprecatedGetters:E,bufferFrom:$,capitalize:P,copyOwnProperties:ee,getHash:m,compare:Y,getOption:te,impliedNamespace:Q,isValidName:M,jsonEnd:q,newBuffer:R,objectValues:j,qualify:G,toMap:w,singleIndexOf:a,hasDuplicates:z,unqualify:D,BufferPool:S,Lcg:N,OrderedQueue:x,Tap:I}}}),ot=Ie({"node_modules/avsc/lib/types.js"(u,l){"use strict";var h=ze(),d=Ue,_=De,g=d.Buffer,O=d.SlowBuffer,T=h.Tap,v=_.debuglog("avsc:types"),R=_.format,$={array:X,boolean:z,bytes:q,double:D,enum:N,error:c,fixed:x,float:G,int:ee,long:M,map:I,null:j,record:c,string:Q},P=new h.Lcg,Y=new T(new O(1024)),te=null,m=[];function a(t,i){var e;if(te?(e=te,m.push([te,this]),te=null):e=this,this._hash=new Z,this.name=void 0,this.aliases=void 0,this.doc=t&&t.doc?""+t.doc:void 0,t){var r=t.name,n=t.namespace===void 0?i&&i.namespace:t.namespace;if(r!==void 0){if(r=ke(r,n),he(r))throw new Error(R("cannot rename primitive type: %j",r));var o=i&&i.registry;if(o){if(o[r]!==void 0)throw new Error(R("duplicate type name: %s",r));o[r]=e}}else if(i&&i.noAnonymousTypes)throw new Error(R("missing name property in schema: %j",t));this.name=r,this.aliases=t.aliases?t.aliases.map(function(s){return ke(s,n)}):[]}}a.forSchema=function(t,i){i=i||{},i.registry=i.registry||{};var e=function(k){switch(k===!0?k="always":k===!1?k="never":k===void 0?k="auto":typeof k=="string"&&(k=k.toLowerCase()),k){case"always":return S;case"never":return E;case"auto":return;default:throw new Error(R("invalid wrap unions option: %j",k))}}(i.wrapUnions);if(t===null)throw new Error('invalid type: null (did you mean "null"?)');if(a.isType(t))return t;var r;if(i.typeHook&&(r=i.typeHook(t,i))){if(!a.isType(r))throw new Error(R("invalid typehook return value: %j",r));return r}if(typeof t=="string"){if(t=ke(t,i.namespace),r=i.registry[t],r)return r;if(he(t))return i.registry[t]=a.forSchema({type:t},i);throw new Error(R("undefined type name: %s",t))}if(t.logicalType&&i.logicalTypes&&!te){var n=i.logicalTypes[t.logicalType];if(n){var o=i.namespace,s={};Object.keys(i.registry).forEach(function(k){s[k]=i.registry[k]});try{return v("instantiating logical type for %s",t.logicalType),new n(t,i)}catch(k){if(v("failed to instantiate logical type for %s",t.logicalType),i.assertLogicalTypes)throw k;te=null,i.namespace=o,i.registry=s}}}if(Array.isArray(t)){var f=te;te=null;var y=t.map(function(k){return a.forSchema(k,i)});e||(e=Te(y)?S:E),te=f,r=new e(y,i)}else r=function(k){var C=$[k];if(C===void 0)throw new Error(R("unknown type: %j",k));return new C(t,i)}(t.type);return r},a.forValue=function(t,i){if(i=i||{},i.emptyArrayType=i.emptyArrayType||a.forSchema({type:"array",items:"null"}),i.valueHook){var e=i.valueHook(t,i);if(e!==void 0){if(!a.isType(e))throw new Error(R("invalid value hook return value: %j",e));return e}}switch(typeof t){case"string":return a.forSchema("string",i);case"boolean":return a.forSchema("boolean",i);case"number":return(t|0)===t?a.forSchema("int",i):Math.abs(t)<9007199254740991?a.forSchema("float",i):a.forSchema("double",i);case"object":if(t===null)return a.forSchema("null",i);if(Array.isArray(t))return t.length?a.forSchema({type:"array",items:a.forTypes(t.map(function(n){return a.forValue(n,i)}),i)},i):i.emptyArrayType;if(g.isBuffer(t))return a.forSchema("bytes",i);var r=Object.keys(t);return r.some(function(n){return!h.isValidName(n)})?a.forSchema({type:"map",values:a.forTypes(r.map(function(n){return a.forValue(t[n],i)}),i)},i):a.forSchema({type:"record",fields:r.map(function(n){return{name:n,type:a.forValue(t[n],i)}})},i);default:throw new Error(R("cannot infer type from: %j",t))}},a.forTypes=function(t,i){if(!t.length)throw new Error("no types to combine");if(t.length===1)return t[0];i=i||{};var e=[],r=0,n=!0;if(t.forEach(function(L){switch(L.typeName){case"union:unwrapped":n=!1,e=e.concat(L.types);break;case"union:wrapped":r++,e=e.concat(L.types);break;case"null":e.push(L);break;default:n=!1,e.push(L)}}),r){if(!n)throw new Error("cannot combine wrapped union");var o={};e.forEach(function(L){var F=L.branchName,J=o[F];if(!J)o[F]=L;else if(!L.equals(J))throw new Error("inconsistent branch type")});var s=i.wrapUnions,f;i.wrapUnions=!0;try{f=a.forSchema(Object.keys(o).map(function(L){return o[L]}),i)}catch(L){throw i.wrapUnions=s,L}return i.wrapUnions=s,f}var y={};e.forEach(function(L){var F=$e(L),J=y[F];J||(y[F]=J=[]),J.push(L)});var k=Object.keys(y),C=k.map(function(L){var F=y[L];if(F.length===1)return F[0];switch(L){case"null":case"boolean":return F[0];case"number":return Fe(F);case"string":return Ge(F,i);case"buffer":return Ke(F,i);case"array":return F=F.filter(function(J){return J!==i.emptyArrayType}),F.length?a.forSchema({type:"array",items:a.forTypes(F.map(function(J){return J.itemsType}),i)},i):i.emptyArrayType;default:return Je(F,i)}});return C.length===1?C[0]:a.forSchema(C,i)},a.isType=function(){var t=arguments.length;if(!t)return!1;var i=arguments[0];if(!i||typeof i._update!="function"||typeof i.fingerprint!="function")return!1;if(t===1)return!0;var e=i.typeName,r;for(r=1;r",i);var e=this.schema({exportAttrs:!0,noDeref:!0});return typeof e=="object"&&!a.isType(this,"logical")&&(e.type=void 0),R("<%s %j>",i,e)},a.prototype.isValid=function(t,i){var e=(i&&i.noUndeclaredFields)|0,r=i&&i.errorHook,n,o;return r&&(o=[],n=function(s,f){r.call(this,o.slice(),s,f,t)}),this._check(t,e,n,o)},a.prototype.random=h.abstractFunction,a.prototype.schema=function(t){return this._attrs({exportAttrs:!!(t&&t.exportAttrs),noDeref:!!(t&&t.noDeref)})},a.prototype.toBuffer=function(t){Y.pos=0,this._write(Y,t);var i=h.newBuffer(Y.pos);return Y.isValid()?Y.buf.copy(i,0,0,Y.pos):this._write(new T(i),t),i},a.prototype.toJSON=function(){return this.schema({exportAttrs:!0})},a.prototype.toString=function(t){return JSON.stringify(t===void 0?this.schema({noDeref:!0}):this._copy(t,{coerce:3}))},a.prototype.wrap=function(t){var i=this._branchConstructor;return i===null?null:new i(t)},a.prototype._attrs=function(t){t.derefed=t.derefed||{};var i=this.name;if(i!==void 0){if(t.noDeref||t.derefed[i])return i;t.derefed[i]=!0}var e={};this.name!==void 0&&(e.name=i),e.type=this.typeName;var r=this._deref(e,t);return r!==void 0&&(e=r),t.exportAttrs&&(this.aliases&&this.aliases.length&&(e.aliases=this.aliases),this.doc!==void 0&&(e.doc=this.doc)),e},a.prototype._createBranchConstructor=function(){var t=this.branchName;if(t==="null")return null;var i=~t.indexOf(".")?"this['"+t+"']":"this."+t,e="return function Branch$(val) { "+i+" = val; };",r=new Function(e)();return r.type=this,r.prototype.unwrap=new Function("return "+i+";"),r.prototype.unwrapped=r.prototype.unwrap,r},a.prototype._peek=function(t){var i=t.pos,e=this._read(t);return t.pos=i,e},a.prototype._check=h.abstractFunction,a.prototype._copy=h.abstractFunction,a.prototype._deref=h.abstractFunction,a.prototype._match=h.abstractFunction,a.prototype._read=h.abstractFunction,a.prototype._skip=h.abstractFunction,a.prototype._update=h.abstractFunction,a.prototype._write=h.abstractFunction,a.prototype.getAliases=function(){return this.aliases},a.prototype.getFingerprint=a.prototype.fingerprint,a.prototype.getName=function(t){return this.name||!t?this.name:this.branchName},a.prototype.getSchema=a.prototype.schema,a.prototype.getTypeName=function(){return this.typeName};function w(t){a.call(this),this._branchConstructor=this._createBranchConstructor(),t||Object.freeze(this)}_.inherits(w,a),w.prototype._update=function(t,i){i.typeName===this.typeName&&(t._read=this._read)},w.prototype._copy=function(t){return this._check(t,void 0,ae),t},w.prototype._deref=function(){return this.typeName},w.prototype.compare=h.compare;function j(){w.call(this)}_.inherits(j,w),j.prototype._check=function(t,i,e){var r=t===null;return!r&&e&&e(t,this),r},j.prototype._read=function(){return null},j.prototype._skip=function(){},j.prototype._write=function(t,i){i!==null&&ae(i,this)},j.prototype._match=function(){return 0},j.prototype.compare=j.prototype._match,j.prototype.typeName="null",j.prototype.random=j.prototype._read;function z(){w.call(this)}_.inherits(z,w),z.prototype._check=function(t,i,e){var r=typeof t=="boolean";return!r&&e&&e(t,this),r},z.prototype._read=function(t){return t.readBoolean()},z.prototype._skip=function(t){t.skipBoolean()},z.prototype._write=function(t,i){typeof i!="boolean"&&ae(i,this),t.writeBoolean(i)},z.prototype._match=function(t,i){return t.matchBoolean(i)},z.prototype.typeName="boolean",z.prototype.random=function(){return P.nextBoolean()};function ee(){w.call(this)}_.inherits(ee,w),ee.prototype._check=function(t,i,e){var r=t===(t|0);return!r&&e&&e(t,this),r},ee.prototype._read=function(t){return t.readInt()},ee.prototype._skip=function(t){t.skipInt()},ee.prototype._write=function(t,i){i!==(i|0)&&ae(i,this),t.writeInt(i)},ee.prototype._match=function(t,i){return t.matchInt(i)},ee.prototype.typeName="int",ee.prototype.random=function(){return P.nextInt(1e3)|0};function M(){w.call(this)}_.inherits(M,w),M.prototype._check=function(t,i,e){var r=typeof t=="number"&&t%1===0&&Ce(t);return!r&&e&&e(t,this),r},M.prototype._read=function(t){var i=t.readLong();if(!Ce(i))throw new Error("potential precision loss");return i},M.prototype._skip=function(t){t.skipLong()},M.prototype._write=function(t,i){(typeof i!="number"||i%1||!Ce(i))&&ae(i,this),t.writeLong(i)},M.prototype._match=function(t,i){return t.matchLong(i)},M.prototype._update=function(t,i){switch(i.typeName){case"int":t._read=i._read;break;case"abstract:long":case"long":t._read=this._read}},M.prototype.typeName="long",M.prototype.random=function(){return P.nextInt()},M.__with=function(t,i){t=t||{};var e={toBuffer:"_toBuffer",fromBuffer:"_fromBuffer",fromJSON:"_fromJSON",toJSON:"_toJSON",isValid:"_isValid",compare:"compare"},r=new b(i);return Object.keys(e).forEach(function(n){if(t[n]===void 0)throw new Error(R("missing method implementation: %s",n));r[e[n]]=t[n]}),Object.freeze(r)};function G(){w.call(this)}_.inherits(G,w),G.prototype._check=function(t,i,e){var r=typeof t=="number";return!r&&e&&e(t,this),r},G.prototype._read=function(t){return t.readFloat()},G.prototype._skip=function(t){t.skipFloat()},G.prototype._write=function(t,i){typeof i!="number"&&ae(i,this),t.writeFloat(i)},G.prototype._match=function(t,i){return t.matchFloat(i)},G.prototype._update=function(t,i){switch(i.typeName){case"float":case"int":t._read=i._read;break;case"abstract:long":case"long":t._read=function(e){return e.readLong()}}},G.prototype.typeName="float",G.prototype.random=function(){return P.nextFloat(1e3)};function D(){w.call(this)}_.inherits(D,w),D.prototype._check=function(t,i,e){var r=typeof t=="number";return!r&&e&&e(t,this),r},D.prototype._read=function(t){return t.readDouble()},D.prototype._skip=function(t){t.skipDouble()},D.prototype._write=function(t,i){typeof i!="number"&&ae(i,this),t.writeDouble(i)},D.prototype._match=function(t,i){return t.matchDouble(i)},D.prototype._update=function(t,i){switch(i.typeName){case"double":case"float":case"int":t._read=i._read;break;case"abstract:long":case"long":t._read=function(e){return e.readLong()}}},D.prototype.typeName="double",D.prototype.random=function(){return P.nextFloat()};function Q(){w.call(this)}_.inherits(Q,w),Q.prototype._check=function(t,i,e){var r=typeof t=="string";return!r&&e&&e(t,this),r},Q.prototype._read=function(t){return t.readString()},Q.prototype._skip=function(t){t.skipString()},Q.prototype._write=function(t,i){typeof i!="string"&&ae(i,this),t.writeString(i)},Q.prototype._match=function(t,i){return t.matchString(i)},Q.prototype._update=function(t,i){switch(i.typeName){case"bytes":case"string":t._read=this._read}},Q.prototype.typeName="string",Q.prototype.random=function(){return P.nextString(P.nextInt(32))};function q(){w.call(this)}_.inherits(q,w),q.prototype._check=function(t,i,e){var r=g.isBuffer(t);return!r&&e&&e(t,this),r},q.prototype._read=function(t){return t.readBytes()},q.prototype._skip=function(t){t.skipBytes()},q.prototype._write=function(t,i){g.isBuffer(i)||ae(i,this),t.writeBytes(i)},q.prototype._match=function(t,i){return t.matchBytes(i)},q.prototype._update=Q.prototype._update,q.prototype._copy=function(t,i){var e;switch((i&&i.coerce)|0){case 3:return this._check(t,void 0,ae),t.toString("binary");case 2:if(typeof t!="string")throw new Error(R("cannot coerce to buffer: %j",t));return e=h.bufferFrom(t,"binary"),this._check(e,void 0,ae),e;case 1:if(!je(t))throw new Error(R("cannot coerce to buffer: %j",t));return e=h.bufferFrom(t.data),this._check(e,void 0,ae),e;default:return this._check(t,void 0,ae),h.bufferFrom(t)}},q.prototype.compare=g.compare,q.prototype.typeName="bytes",q.prototype.random=function(){return P.nextBuffer(P.nextInt(32))};function ne(t,i){if(a.call(this),!Array.isArray(t))throw new Error(R("non-array union schema: %j",t));if(!t.length)throw new Error("empty union");this.types=Object.freeze(t.map(function(e){return a.forSchema(e,i)})),this._branchIndices={},this.types.forEach(function(e,r){if(a.isType(e,"union"))throw new Error("unions cannot be directly nested");var n=e.branchName;if(this._branchIndices[n]!==void 0)throw new Error(R("duplicate union branch name: %j",n));this._branchIndices[n]=r},this)}_.inherits(ne,a),ne.prototype._branchConstructor=function(){throw new Error("unions cannot be directly wrapped")},ne.prototype._skip=function(t){this.types[t.readLong()]._skip(t)},ne.prototype._match=function(t,i){var e=t.readLong(),r=i.readLong();return e===r?this.types[e]._match(t,i):e1)throw new Error(R("ambiguous aliasing for %s.%s (%s)",i.name,$.name,W));if(W.length)L=W[0],B={resolver:$.type.createResolver(o[L].type,e),name:"_"+$.name},f[L]?f[L].push(B):f[L]=[B],s.push(B.name);else{if($.defaultValue()===void 0)throw new Error(R("no matching field for default-less %s.%s",i.name,$.name));s.push("undefined")}}var H=-1;for(y=n.length;y&&f[n[--y].name]===void 0;)H=y;var Y=this._getConstructorName(),ne=[Y],ae=[this.recordConstructor],ce=" return function read"+Y+`(t, b) { -`;for(y=0;y=H?" ":" ",ne.push("r"+y),ae.push($.type),ce+="r"+y+`._skip(t); -`;else for(S=f[L].length;S--;)ce+=~H&&y>=H?" ":" ",ne.push("r"+y+"f"+S),B=f[L][S],ae.push(B.resolver),ce+="var "+B.name+" = ",ce+="r"+y+"f"+S+"._"+(S?"peek":"read")+`(t); -`;~H&&(ce+=` } -`),ce+=" return new "+Y+"("+s.join()+`); -};`,t._read=new Function(ne.join(),ce).apply(void 0,ae)},c.prototype._match=function(t,i){var e=this.fields,r,n,o,s,f;for(r=0,n=e.length;r"};function ee(){this.str=void 0}function J(t,i,e,r){if(e){if(e._readerType!==t)throw new Error("invalid resolver");return e._read(i,r)}else return t._read(i)}function he(t){var i={};t.name&&(i[t.name]=!0);var e=t.aliases,r,n;for(r=0,n=e.length;r=-9007199254740990&&t<=9007199254740990}function je(t){return t&&t.type==="Buffer"&&Array.isArray(t.data)}function ue(t,i){throw new Error(R("invalid %j: %j",i.schema(),t))}function ke(t,i){var e=h.unqualify(t);return fe(e)?e:h.qualify(t,i)}function Ce(t){var i=t.typeName;switch(i){case"double":case"float":case"int":case"long":return"number";case"bytes":case"fixed":return"buffer";case"enum":return"string";case"map":case"error":case"record":return"object";default:return i}}function Se(t){if(t===null)return"null";var i=typeof t;if(i==="object"){if(Array.isArray(t))return"array";if(g.isBuffer(t))return"buffer"}return i}function Te(t){var i={},e,r,n,o;for(e=0,r=t.length;ee&&(e=f,r=s);return r}function Ge(t,i){var e={},r,n,o,s;for(r=0,n=t.length;r0){var St=ye[0];ye[0]=ye[be],ye[be]=St,ce=a.forSchema(ye,i)}}return{name:ae,type:ce,default:n[ae]}})}:ne={type:"map",values:a.forTypes(e,i)},a.forSchema(ne,i)}l.exports={Type:a,getTypeBucket:Ce,getValueBucket:Se,isPrimitive:fe,builtins:function(){var t={LogicalType:p,UnwrappedUnionType:E,WrappedUnionType:k},i=Object.keys(C),e,r,n;for(e=0,r=i.length;eI.length&&(x.buf=d.newBuffer(2*c)),x.pos=0,this._writeValue(x,E)}N()},te.prototype._flush=function(E){var k=this._tap,N=k.pos;N&&this.push(k.buf.slice(0,N)),E()};function M(E,k){k=k||{},g.Duplex.call(this,{allowHalfOpen:!0,writableObjectMode:!0});var N;if(h.Type.isType(E)?(N=E,E=void 0):N=h.Type.forSchema(E),this._schema=E,this._type=N,this._writeValue=function(I,Z){try{this._type._write(I,Z)}catch(c){return this.emit("typeError",c,Z,this._type),!1}return!0},this._blockSize=k.blockSize||65536,this._tap=new w(d.newBuffer(this._blockSize)),this._codecs=k.codecs,this._codec=k.codec||"null",this._blockCount=0,this._syncMarker=k.syncMarker||new d.Lcg().nextBuffer(16),this._queue=new d.OrderedQueue,this._pending=0,this._finished=!1,this._needHeader=!1,this._needPush=!1,this._metadata=k.metadata||{},!P.isValid(this._metadata))throw new Error("invalid metadata");var x=this._codec;if(this._compress=(this._codecs||M.getDefaultCodecs())[x],!this._compress)throw new Error(a("unsupported codec: %s",x));switch(k.omitHeader!==void 0&&(k.writeHeader=k.omitHeader?"never":"auto"),k.writeHeader){case!1:case"never":break;case void 0:case"auto":this._needHeader=!0;break;default:this._writeHeader()}this.on("finish",function(){this._finished=!0,this._blockCount?this._flushChunk():this._finished&&this._needPush&&this.push(null)}),this.on("typeError",function(I){this.emit("error",I)})}O.inherits(M,g.Duplex),M.defaultCodecs=function(){return{null:function(E,k){k(null,E)},deflate:T.deflateRaw}},M.getDefaultCodecs=M.defaultCodecs,M.prototype._writeHeader=function(){var E=JSON.stringify(this._schema?this._schema:this._type.getSchema({exportAttrs:!0})),k=d.copyOwnProperties(this._metadata,{"avro.schema":d.bufferFrom(E),"avro.codec":d.bufferFrom(this._codec)},!0),N=Q.getRecordConstructor(),x=new N(m,k,this._syncMarker);this.push(x.toBuffer())},M.prototype._write=function(E,k,N){this._needHeader&&(this._writeHeader(),this._needHeader=!1);var x=this._tap,I=x.pos,Z=!1;if(this._writeValue(x,E)){if(!x.isValid()){I&&(this._flushChunk(I,N),Z=!0);var c=x.pos-I;c>this._blockSize&&(this._blockSize=c*2),x.buf=d.newBuffer(this._blockSize),x.pos=0,this._writeValue(x,E)}this._blockCount++}else x.pos=I;Z||N()},M.prototype._flushChunk=function(E,k){var N=this._tap;E=E||N.pos,this._compress(N.buf.slice(0,E),this._createBlockCallback(E,k)),this._blockCount=0},M.prototype._read=function(){var E=this,k=this._queue.pop();if(!k){this._finished&&!this._pending?process.nextTick(function(){E.push(null)}):this._needPush=!0;return}this.push(C.toBuffer(k.count,!0)),this.push(C.toBuffer(k.buf.length,!0)),this.push(k.buf),this.push(this._syncMarker),this._finished||k.cb()},M.prototype._createBlockCallback=function(E,k){var N=this,x=this._index++,I=this._blockCount;return this._pending++,function(Z,c){if(Z){var p=new Error(a("%s codec compression error",N._codec));p.cause=Z,N.emit("error",p);return}N._pending--,N.emit("block",new G(I,E,c.length)),N._queue.push(new D(x,c,k,I)),N._needPush&&(N._needPush=!1,N._read())}};function G(E,k,N){this.valueCount=E,this.rawDataLength=k,this.compressedDataLength=N}function D(E,k,N,x){this.index=E,this.buf=k,this.cb=N,this.count=x|0}function X(E){var k=E.pos,N=re._read(E);return E.isValid()?N:(E.pos=k,null)}function U(E,k,N){if(E)return function(I){return function(Z){var c=Z.pos;return I(Z),Z.buf.slice(c,Z.pos)}}(k._skip);if(N){var x=N.createResolver(k);return function(I){return x._read(I)}}else return function(I){return k._read(I)}}function oe(E,k,N){var x=d.newBuffer(N);return E.copy(x,0,k,k+N),x}l.exports={BLOCK_TYPE:re,HEADER_TYPE:Q,MAGIC_BYTES:m,streams:{BlockDecoder:z,BlockEncoder:M,RawDecoder:j,RawEncoder:te}}}}),jt=Ie({"node_modules/avsc/lib/services.js"(u,l){"use strict";var h=ot(),d=ze(),_=Ue,g=At,O=vt,T=De,v=_.Buffer,R=d.Tap,C=h.Type,P=T.debuglog("avsc:services"),Q=T.format,re={namespace:"org.apache.avro.ipc"},m=C.forSchema("boolean",re),a=C.forSchema({type:"map",values:"bytes"},re),w=C.forSchema("string",re),j=C.forSchema({name:"HandshakeRequest",type:"record",fields:[{name:"clientHash",type:{name:"MD5",type:"fixed",size:16}},{name:"clientProtocol",type:["null","string"],default:null},{name:"serverHash",type:"MD5"},{name:"meta",type:["null",a],default:null}]},re),z=C.forSchema({name:"HandshakeResponse",type:"record",fields:[{name:"match",type:{name:"HandshakeMatch",type:"enum",symbols:["BOTH","CLIENT","NONE"]}},{name:"serverProtocol",type:["null","string"],default:null},{name:"serverHash",type:["null","MD5"],default:null},{name:"meta",type:["null",a],default:null}]},re),te=16,M=new G("",C.forSchema({name:"PingRequest",type:"record",fields:[]},re),C.forSchema(["string"],re),C.forSchema("null",re));function G(e,r,n,o,s,f){if(this.name=e,!C.isType(r,"record"))throw new Error("invalid request type");if(this.requestType=r,!C.isType(n,"union")||!C.isType(n.getTypes()[0],"string"))throw new Error("invalid error type");if(this.errorType=n,s&&(!C.isType(o,"null")||n.getTypes().length>1))throw new Error("inapplicable one-way parameter");this.responseType=o,this.oneWay=!!s,this.doc=f!==void 0?""+f:void 0,Object.freeze(this)}G.forSchema=function(e,r,n){if(n=n||{},!d.isValidName(e))throw new Error(Q("invalid message name: %s",e));if(!Array.isArray(r.request))throw new Error(Q("invalid message request: %s",e));var o=Q("%s.%sRequest",re.namespace,d.capitalize(e)),s=C.forSchema({name:o,type:"record",namespace:n.namespace||"",fields:r.request},n);if(delete n.registry[o],!r.response)throw new Error(Q("invalid message response: %s",e));var f=C.forSchema(r.response,n);if(r.errors!==void 0&&!Array.isArray(r.errors))throw new Error(Q("invalid message errors: %s",e));var y=C.forSchema(["string"].concat(r.errors||[]),n),S=!!r["one-way"];return new G(e,s,y,f,S,r.doc)},G.prototype.schema=C.prototype.getSchema,G.prototype._attrs=function(e){var r=this.requestType._attrs(e),n={request:r.fields,response:this.responseType._attrs(e)},o=this.doc;o!==void 0&&(n.doc=o);var s=this.errorType._attrs(e);return s.length>1&&(n.errors=s.slice(1)),this.oneWay&&(n["one-way"]=!0),n},d.addDeprecatedGetters(G,["name","errorType","requestType","responseType"]),G.prototype.isOneWay=T.deprecate(function(){return this.oneWay},"use `.oneWay` directly instead of `.isOneWay()`");function D(e,r,n,o,s){if(typeof e!="string")return D.forProtocol(e,r);this.name=e,this._messagesByName=r||{},this.messages=Object.freeze(d.objectValues(this._messagesByName)),this._typesByName=n||{},this.types=Object.freeze(d.objectValues(this._typesByName)),this.protocol=o,this._hashStr=d.getHash(JSON.stringify(o)).toString("binary"),this.doc=o.doc?""+o.doc:void 0,this._server=s||this.createServer({silent:!0}),Object.freeze(this)}D.Client=U,D.Server=oe,D.compatible=function(e,r){try{$e(e,r)}catch{return!1}return!0},D.forProtocol=function(e,r){r=r||{};var n=e.protocol;if(!n)throw new Error("missing protocol name");if(e.namespace!==void 0)r.namespace=e.namespace;else{var o=/^(.*)\.[^.]+$/.exec(n);o&&(r.namespace=o[1])}n=d.qualify(n,r.namespace),e.types&&e.types.forEach(function(f){C.forSchema(f,r)});var s;return e.messages&&(s={},Object.keys(e.messages).forEach(function(f){s[f]=G.forSchema(f,e.messages[f],r)})),new D(n,s,r.registry,e)},D.isService=function(e){return!!e&&e.hasOwnProperty("_hashStr")},D.prototype.createClient=function(e){var r=new U(this,e);return process.nextTick(function(){if(e&&e.server){var n={objectMode:!0},o=[new O.PassThrough(n),new O.PassThrough(n)];e.server.createChannel({readable:o[0],writable:o[1]},n),r.createChannel({readable:o[1],writable:o[0]},n)}else e&&e.transport&&r.createChannel(e.transport)}),r},D.prototype.createServer=function(e){return new oe(this,e)},Object.defineProperty(D.prototype,"hash",{enumerable:!0,get:function(){return d.bufferFrom(this._hashStr,"binary")}}),D.prototype.message=function(e){return this._messagesByName[e]},D.prototype.type=function(e){return this._typesByName[e]},D.prototype.inspect=function(){return Q("",this.name)},d.addDeprecatedGetters(D,["message","messages","name","type","types"]),D.prototype.createEmitter=T.deprecate(function(e,r){r=r||{};var n=this.createClient({cache:r.cache,buffering:!1,strictTypes:r.strictErrors,timeout:r.timeout}),o=n.createChannel(e,r);return Ce(n,o),o},"use `.createClient()` instead of `.createEmitter()`"),D.prototype.createListener=T.deprecate(function(e,r){if(r&&r.strictErrors)throw new Error("use `.createServer()` to support strict errors");return this._server.createChannel(e,r)},"use `.createServer().createChannel()` instead of `.createListener()`"),D.prototype.emit=T.deprecate(function(e,r,n,o){if(!n||!this.equals(n.client._svc$))throw new Error("invalid emitter");var s=n.client;return U.prototype.emitMessage.call(s,e,r,o&&o.bind(this)),n.getPending()},"create a client via `.createClient()` to emit messages instead of `.emit()`"),D.prototype.equals=T.deprecate(function(e){return D.isService(e)&&this.getFingerprint().equals(e.getFingerprint())},"equality testing is deprecated, compare the `.protocol`s instead"),D.prototype.getFingerprint=T.deprecate(function(e){return d.getHash(JSON.stringify(this.protocol),e)},"use `.hash` instead of `.getFingerprint()`"),D.prototype.getSchema=T.deprecate(C.prototype.getSchema,"use `.protocol` instead of `.getSchema()`"),D.prototype.on=T.deprecate(function(e,r){var n=this;return this._server.onMessage(e,function(o,s){return r.call(n,o,this.channel,s)}),this},"use `.createServer().onMessage()` instead of `.on()`"),D.prototype.subprotocol=T.deprecate(function(){var e=this._server,r={strictTypes:e._strict,cache:e._cache},n=new oe(e.service,r);return n._handlers=Object.create(e._handlers),new D(this.name,this._messagesByName,this._typesByName,this.protocol,n)},"`.subprotocol()` will be removed in 5.1"),D.prototype._attrs=function(e){var r={protocol:this.name},n=[];this.types.forEach(function(s){if(s.getName()!==void 0){var f=s._attrs(e);typeof f!="string"&&n.push(f)}}),n.length&&(r.types=n);var o=Object.keys(this._messagesByName);return o.length&&(r.messages={},o.forEach(function(s){r.messages[s]=this._messagesByName[s]._attrs(e)},this)),e&&e.exportAttrs&&this.doc!==void 0&&(r.doc=this.doc),r};function X(e,r,n){n===void 0&&typeof r=="function"&&(n=r,r=void 0);var o=new D({protocol:"Empty"},re),s;o.createClient({timeout:r&&r.timeout}).createChannel(e,{scope:r&&r.scope,endWritable:typeof e=="function"}).once("handshake",function(f,y){s=y.serverProtocol,this.destroy(!0)}).once("eot",function(f,y){y&&!/interrupted/.test(y)?n(y):n(null,JSON.parse(s))})}function U(e,r){r=r||{},g.EventEmitter.call(this),this._svc$=e,this._channels$=[],this._fns$=[],this._buffering$=!!r.buffering,this._cache$=r.cache||{},this._policy$=r.channelPolicy,this._strict$=!!r.strictTypes,this._timeout$=d.getOption(r,"timeout",1e4),r.remoteProtocols&&je(this._cache$,r.remoteProtocols,e,!0),this._svc$.messages.forEach(function(n){this[n.name]=this._createMessageHandler$(n)},this)}T.inherits(U,g.EventEmitter),U.prototype.activeChannels=function(){return this._channels$.slice()},U.prototype.createChannel=function(e,r){var n=r&&r.objectMode,o;if(typeof e=="function"){var s;n?s=e:s=function(F){var W=new J,B=e(function(H,Y){if(H){F(H);return}var ne=new ee().once("error",function(ae){o.destroy(ae)});F(null,Y.pipe(ne))});if(B)return W.pipe(B),W},o=new k(this,s,r)}else{var f,y;if(Je(e)?f=y=e:(f=e.readable,y=e.writable),!n){var S=new he;f=f.pipe(S);var $=new pe;$.pipe(y),y=$}o=new N(this,f,y,r),n||(o.once("eot",function(){f.unpipe(S),$.unpipe(y)}),S.once("error",function(F){o.destroy(F)}))}var L=this._channels$;return L.push(o),o.once("_drain",function(){L.splice(L.indexOf(this),1)}),this._buffering$=!1,this.emit("channel",o),o},U.prototype.destroyChannels=function(e){this._channels$.forEach(function(r){r.destroy(e&&e.noWait)})},U.prototype.emitMessage=function(e,r,n,o){var s=t(this._svc$,e),f=new c(s,{},r);this._emitMessage$(f,n,o)},U.prototype.remoteProtocols=function(){return ue(this._cache$,!0)},Object.defineProperty(U.prototype,"service",{enumerable:!0,get:function(){return this._svc$}}),U.prototype.use=function(){var e,r,n;for(e=0,r=arguments.length;e1)throw new Error(R("ambiguous aliasing for %s.%s (%s)",i.name,C.name,J));if(J.length)L=J[0],B={resolver:C.type.createResolver(o[L].type,e),name:"_"+C.name},f[L]?f[L].push(B):f[L]=[B],s.push(B.name);else{if(C.defaultValue()===void 0)throw new Error(R("no matching field for default-less %s.%s",i.name,C.name));s.push("undefined")}}var H=-1;for(y=n.length;y&&f[n[--y].name]===void 0;)H=y;var W=this._getConstructorName(),ie=[W],se=[this.recordConstructor],ue=" return function read"+W+`(t, b) { +`;for(y=0;y=H?" ":" ",ie.push("r"+y),se.push(C.type),ue+="r"+y+`._skip(t); +`;else for(k=f[L].length;k--;)ue+=~H&&y>=H?" ":" ",ie.push("r"+y+"f"+k),B=f[L][k],se.push(B.resolver),ue+="var "+B.name+" = ",ue+="r"+y+"f"+k+"._"+(k?"peek":"read")+`(t); +`;~H&&(ue+=` } +`),ue+=" return new "+W+"("+s.join()+`); +};`,t._read=new Function(ie.join(),ue).apply(void 0,se)},c.prototype._match=function(t,i){var e=this.fields,r,n,o,s,f;for(r=0,n=e.length;r"};function Z(){this.str=void 0}function K(t,i,e,r){if(e){if(e._readerType!==t)throw new Error("invalid resolver");return e._read(i,r)}else return t._read(i)}function ce(t){var i={};t.name&&(i[t.name]=!0);var e=t.aliases,r,n;for(r=0,n=e.length;r=-9007199254740990&&t<=9007199254740990}function je(t){return t&&t.type==="Buffer"&&Array.isArray(t.data)}function ae(t,i){throw new Error(R("invalid %j: %j",i.schema(),t))}function ke(t,i){var e=h.unqualify(t);return he(e)?e:h.qualify(t,i)}function $e(t){var i=t.typeName;switch(i){case"double":case"float":case"int":case"long":return"number";case"bytes":case"fixed":return"buffer";case"enum":return"string";case"map":case"error":case"record":return"object";default:return i}}function xe(t){if(t===null)return"null";var i=typeof t;if(i==="object"){if(Array.isArray(t))return"array";if(g.isBuffer(t))return"buffer"}return i}function Te(t){var i={},e,r,n,o;for(e=0,r=t.length;ee&&(e=f,r=s);return r}function Ge(t,i){var e={},r,n,o,s;for(r=0,n=t.length;r0){var kt=ye[0];ye[0]=ye[be],ye[be]=kt,ue=a.forSchema(ye,i)}}return{name:se,type:ue,default:n[se]}})}:ie={type:"map",values:a.forTypes(e,i)},a.forSchema(ie,i)}l.exports={Type:a,getTypeBucket:$e,getValueBucket:xe,isPrimitive:he,builtins:function(){var t={LogicalType:p,UnwrappedUnionType:E,WrappedUnionType:S},i=Object.keys($),e,r,n;for(e=0,r=i.length;eI.length&&(x.buf=d.newBuffer(2*c)),x.pos=0,this._writeValue(x,E)}N()},ee.prototype._flush=function(E){var S=this._tap,N=S.pos;N&&this.push(S.buf.slice(0,N)),E()};function M(E,S){S=S||{},g.Duplex.call(this,{allowHalfOpen:!0,writableObjectMode:!0});var N;if(h.Type.isType(E)?(N=E,E=void 0):N=h.Type.forSchema(E),this._schema=E,this._type=N,this._writeValue=function(I,X){try{this._type._write(I,X)}catch(c){return this.emit("typeError",c,X,this._type),!1}return!0},this._blockSize=S.blockSize||65536,this._tap=new w(d.newBuffer(this._blockSize)),this._codecs=S.codecs,this._codec=S.codec||"null",this._blockCount=0,this._syncMarker=S.syncMarker||new d.Lcg().nextBuffer(16),this._queue=new d.OrderedQueue,this._pending=0,this._finished=!1,this._needHeader=!1,this._needPush=!1,this._metadata=S.metadata||{},!P.isValid(this._metadata))throw new Error("invalid metadata");var x=this._codec;if(this._compress=(this._codecs||M.getDefaultCodecs())[x],!this._compress)throw new Error(a("unsupported codec: %s",x));switch(S.omitHeader!==void 0&&(S.writeHeader=S.omitHeader?"never":"auto"),S.writeHeader){case!1:case"never":break;case void 0:case"auto":this._needHeader=!0;break;default:this._writeHeader()}this.on("finish",function(){this._finished=!0,this._blockCount?this._flushChunk():this._finished&&this._needPush&&this.push(null)}),this.on("typeError",function(I){this.emit("error",I)})}O.inherits(M,g.Duplex),M.defaultCodecs=function(){return{null:function(E,S){S(null,E)},deflate:T.deflateRaw}},M.getDefaultCodecs=M.defaultCodecs,M.prototype._writeHeader=function(){var E=JSON.stringify(this._schema?this._schema:this._type.getSchema({exportAttrs:!0})),S=d.copyOwnProperties(this._metadata,{"avro.schema":d.bufferFrom(E),"avro.codec":d.bufferFrom(this._codec)},!0),N=Y.getRecordConstructor(),x=new N(m,S,this._syncMarker);this.push(x.toBuffer())},M.prototype._write=function(E,S,N){this._needHeader&&(this._writeHeader(),this._needHeader=!1);var x=this._tap,I=x.pos,X=!1;if(this._writeValue(x,E)){if(!x.isValid()){I&&(this._flushChunk(I,N),X=!0);var c=x.pos-I;c>this._blockSize&&(this._blockSize=c*2),x.buf=d.newBuffer(this._blockSize),x.pos=0,this._writeValue(x,E)}this._blockCount++}else x.pos=I;X||N()},M.prototype._flushChunk=function(E,S){var N=this._tap;E=E||N.pos,this._compress(N.buf.slice(0,E),this._createBlockCallback(E,S)),this._blockCount=0},M.prototype._read=function(){var E=this,S=this._queue.pop();if(!S){this._finished&&!this._pending?process.nextTick(function(){E.push(null)}):this._needPush=!0;return}this.push($.toBuffer(S.count,!0)),this.push($.toBuffer(S.buf.length,!0)),this.push(S.buf),this.push(this._syncMarker),this._finished||S.cb()},M.prototype._createBlockCallback=function(E,S){var N=this,x=this._index++,I=this._blockCount;return this._pending++,function(X,c){if(X){var p=new Error(a("%s codec compression error",N._codec));p.cause=X,N.emit("error",p);return}N._pending--,N.emit("block",new G(I,E,c.length)),N._queue.push(new D(x,c,S,I)),N._needPush&&(N._needPush=!1,N._read())}};function G(E,S,N){this.valueCount=E,this.rawDataLength=S,this.compressedDataLength=N}function D(E,S,N,x){this.index=E,this.buf=S,this.cb=N,this.count=x|0}function Q(E){var S=E.pos,N=te._read(E);return E.isValid()?N:(E.pos=S,null)}function q(E,S,N){if(E)return function(I){return function(X){var c=X.pos;return I(X),X.buf.slice(c,X.pos)}}(S._skip);if(N){var x=N.createResolver(S);return function(I){return x._read(I)}}else return function(I){return S._read(I)}}function ne(E,S,N){var x=d.newBuffer(N);return E.copy(x,0,S,S+N),x}l.exports={BLOCK_TYPE:te,HEADER_TYPE:Y,MAGIC_BYTES:m,streams:{BlockDecoder:z,BlockEncoder:M,RawDecoder:j,RawEncoder:ee}}}}),jt=Ie({"node_modules/avsc/lib/services.js"(u,l){"use strict";var h=ot(),d=ze(),_=Ue,g=At,O=vt,T=De,v=_.Buffer,R=d.Tap,$=h.Type,P=T.debuglog("avsc:services"),Y=T.format,te={namespace:"org.apache.avro.ipc"},m=$.forSchema("boolean",te),a=$.forSchema({type:"map",values:"bytes"},te),w=$.forSchema("string",te),j=$.forSchema({name:"HandshakeRequest",type:"record",fields:[{name:"clientHash",type:{name:"MD5",type:"fixed",size:16}},{name:"clientProtocol",type:["null","string"],default:null},{name:"serverHash",type:"MD5"},{name:"meta",type:["null",a],default:null}]},te),z=$.forSchema({name:"HandshakeResponse",type:"record",fields:[{name:"match",type:{name:"HandshakeMatch",type:"enum",symbols:["BOTH","CLIENT","NONE"]}},{name:"serverProtocol",type:["null","string"],default:null},{name:"serverHash",type:["null","MD5"],default:null},{name:"meta",type:["null",a],default:null}]},te),ee=16,M=new G("",$.forSchema({name:"PingRequest",type:"record",fields:[]},te),$.forSchema(["string"],te),$.forSchema("null",te));function G(e,r,n,o,s,f){if(this.name=e,!$.isType(r,"record"))throw new Error("invalid request type");if(this.requestType=r,!$.isType(n,"union")||!$.isType(n.getTypes()[0],"string"))throw new Error("invalid error type");if(this.errorType=n,s&&(!$.isType(o,"null")||n.getTypes().length>1))throw new Error("inapplicable one-way parameter");this.responseType=o,this.oneWay=!!s,this.doc=f!==void 0?""+f:void 0,Object.freeze(this)}G.forSchema=function(e,r,n){if(n=n||{},!d.isValidName(e))throw new Error(Y("invalid message name: %s",e));if(!Array.isArray(r.request))throw new Error(Y("invalid message request: %s",e));var o=Y("%s.%sRequest",te.namespace,d.capitalize(e)),s=$.forSchema({name:o,type:"record",namespace:n.namespace||"",fields:r.request},n);if(delete n.registry[o],!r.response)throw new Error(Y("invalid message response: %s",e));var f=$.forSchema(r.response,n);if(r.errors!==void 0&&!Array.isArray(r.errors))throw new Error(Y("invalid message errors: %s",e));var y=$.forSchema(["string"].concat(r.errors||[]),n),k=!!r["one-way"];return new G(e,s,y,f,k,r.doc)},G.prototype.schema=$.prototype.getSchema,G.prototype._attrs=function(e){var r=this.requestType._attrs(e),n={request:r.fields,response:this.responseType._attrs(e)},o=this.doc;o!==void 0&&(n.doc=o);var s=this.errorType._attrs(e);return s.length>1&&(n.errors=s.slice(1)),this.oneWay&&(n["one-way"]=!0),n},d.addDeprecatedGetters(G,["name","errorType","requestType","responseType"]),G.prototype.isOneWay=T.deprecate(function(){return this.oneWay},"use `.oneWay` directly instead of `.isOneWay()`");function D(e,r,n,o,s){if(typeof e!="string")return D.forProtocol(e,r);this.name=e,this._messagesByName=r||{},this.messages=Object.freeze(d.objectValues(this._messagesByName)),this._typesByName=n||{},this.types=Object.freeze(d.objectValues(this._typesByName)),this.protocol=o,this._hashStr=d.getHash(JSON.stringify(o)).toString("binary"),this.doc=o.doc?""+o.doc:void 0,this._server=s||this.createServer({silent:!0}),Object.freeze(this)}D.Client=q,D.Server=ne,D.compatible=function(e,r){try{Ce(e,r)}catch{return!1}return!0},D.forProtocol=function(e,r){r=r||{};var n=e.protocol;if(!n)throw new Error("missing protocol name");if(e.namespace!==void 0)r.namespace=e.namespace;else{var o=/^(.*)\.[^.]+$/.exec(n);o&&(r.namespace=o[1])}n=d.qualify(n,r.namespace),e.types&&e.types.forEach(function(f){$.forSchema(f,r)});var s;return e.messages&&(s={},Object.keys(e.messages).forEach(function(f){s[f]=G.forSchema(f,e.messages[f],r)})),new D(n,s,r.registry,e)},D.isService=function(e){return!!e&&e.hasOwnProperty("_hashStr")},D.prototype.createClient=function(e){var r=new q(this,e);return process.nextTick(function(){if(e&&e.server){var n={objectMode:!0},o=[new O.PassThrough(n),new O.PassThrough(n)];e.server.createChannel({readable:o[0],writable:o[1]},n),r.createChannel({readable:o[1],writable:o[0]},n)}else e&&e.transport&&r.createChannel(e.transport)}),r},D.prototype.createServer=function(e){return new ne(this,e)},Object.defineProperty(D.prototype,"hash",{enumerable:!0,get:function(){return d.bufferFrom(this._hashStr,"binary")}}),D.prototype.message=function(e){return this._messagesByName[e]},D.prototype.type=function(e){return this._typesByName[e]},D.prototype.inspect=function(){return Y("",this.name)},d.addDeprecatedGetters(D,["message","messages","name","type","types"]),D.prototype.createEmitter=T.deprecate(function(e,r){r=r||{};var n=this.createClient({cache:r.cache,buffering:!1,strictTypes:r.strictErrors,timeout:r.timeout}),o=n.createChannel(e,r);return $e(n,o),o},"use `.createClient()` instead of `.createEmitter()`"),D.prototype.createListener=T.deprecate(function(e,r){if(r&&r.strictErrors)throw new Error("use `.createServer()` to support strict errors");return this._server.createChannel(e,r)},"use `.createServer().createChannel()` instead of `.createListener()`"),D.prototype.emit=T.deprecate(function(e,r,n,o){if(!n||!this.equals(n.client._svc$))throw new Error("invalid emitter");var s=n.client;return q.prototype.emitMessage.call(s,e,r,o&&o.bind(this)),n.getPending()},"create a client via `.createClient()` to emit messages instead of `.emit()`"),D.prototype.equals=T.deprecate(function(e){return D.isService(e)&&this.getFingerprint().equals(e.getFingerprint())},"equality testing is deprecated, compare the `.protocol`s instead"),D.prototype.getFingerprint=T.deprecate(function(e){return d.getHash(JSON.stringify(this.protocol),e)},"use `.hash` instead of `.getFingerprint()`"),D.prototype.getSchema=T.deprecate($.prototype.getSchema,"use `.protocol` instead of `.getSchema()`"),D.prototype.on=T.deprecate(function(e,r){var n=this;return this._server.onMessage(e,function(o,s){return r.call(n,o,this.channel,s)}),this},"use `.createServer().onMessage()` instead of `.on()`"),D.prototype.subprotocol=T.deprecate(function(){var e=this._server,r={strictTypes:e._strict,cache:e._cache},n=new ne(e.service,r);return n._handlers=Object.create(e._handlers),new D(this.name,this._messagesByName,this._typesByName,this.protocol,n)},"`.subprotocol()` will be removed in 5.1"),D.prototype._attrs=function(e){var r={protocol:this.name},n=[];this.types.forEach(function(s){if(s.getName()!==void 0){var f=s._attrs(e);typeof f!="string"&&n.push(f)}}),n.length&&(r.types=n);var o=Object.keys(this._messagesByName);return o.length&&(r.messages={},o.forEach(function(s){r.messages[s]=this._messagesByName[s]._attrs(e)},this)),e&&e.exportAttrs&&this.doc!==void 0&&(r.doc=this.doc),r};function Q(e,r,n){n===void 0&&typeof r=="function"&&(n=r,r=void 0);var o=new D({protocol:"Empty"},te),s;o.createClient({timeout:r&&r.timeout}).createChannel(e,{scope:r&&r.scope,endWritable:typeof e=="function"}).once("handshake",function(f,y){s=y.serverProtocol,this.destroy(!0)}).once("eot",function(f,y){y&&!/interrupted/.test(y)?n(y):n(null,JSON.parse(s))})}function q(e,r){r=r||{},g.EventEmitter.call(this),this._svc$=e,this._channels$=[],this._fns$=[],this._buffering$=!!r.buffering,this._cache$=r.cache||{},this._policy$=r.channelPolicy,this._strict$=!!r.strictTypes,this._timeout$=d.getOption(r,"timeout",1e4),r.remoteProtocols&&je(this._cache$,r.remoteProtocols,e,!0),this._svc$.messages.forEach(function(n){this[n.name]=this._createMessageHandler$(n)},this)}T.inherits(q,g.EventEmitter),q.prototype.activeChannels=function(){return this._channels$.slice()},q.prototype.createChannel=function(e,r){var n=r&&r.objectMode,o;if(typeof e=="function"){var s;n?s=e:s=function(F){var J=new K,B=e(function(H,W){if(H){F(H);return}var ie=new Z().once("error",function(se){o.destroy(se)});F(null,W.pipe(ie))});if(B)return J.pipe(B),J},o=new S(this,s,r)}else{var f,y;if(Je(e)?f=y=e:(f=e.readable,y=e.writable),!n){var k=new ce;f=f.pipe(k);var C=new pe;C.pipe(y),y=C}o=new N(this,f,y,r),n||(o.once("eot",function(){f.unpipe(k),C.unpipe(y)}),k.once("error",function(F){o.destroy(F)}))}var L=this._channels$;return L.push(o),o.once("_drain",function(){L.splice(L.indexOf(this),1)}),this._buffering$=!1,this.emit("channel",o),o},q.prototype.destroyChannels=function(e){this._channels$.forEach(function(r){r.destroy(e&&e.noWait)})},q.prototype.emitMessage=function(e,r,n,o){var s=t(this._svc$,e),f=new c(s,{},r);this._emitMessage$(f,n,o)},q.prototype.remoteProtocols=function(){return ae(this._cache$,!0)},Object.defineProperty(q.prototype,"service",{enumerable:!0,get:function(){return this._svc$}}),q.prototype.use=function(){var e,r,n;for(e=0,r=arguments.length;e>>(r|0),this._id=0,this._n=0,this._cbs={}}A.prototype.get=function(e){return this._cbs[e&this._mask]},A.prototype.add=function(e,r){this._id=this._id+1&this._mask;var n=this,o=this._id,s;return e>0&&(s=setTimeout(function(){f(new Error("timeout"))},e)),this._cbs[o]=f,this._n++,o;function f(){n._cbs[o]&&(delete n._cbs[o],n._n--,s&&clearTimeout(s),r.apply(n._ctx,arguments))}},A.prototype.clear=function(){Object.keys(this._cbs).forEach(function(e){this._cbs[e](new Error("interrupted"))},this)};function V(e,r,n,o){this._clientSvc=e,this._serverSvc=r,this._hash=n,this._isRemote=!!o,this._readers=$e(e,r)}V.prototype._decodeRequest=function(e){var r=new R(e),n=a._read(r),o=w._read(r),s,f;if(o?(s=this._serverSvc.message(o),f=this._readers[o+"?"]._read(r)):s=M,!r.isValid())throw new Error(Q("truncated %s request",o||"ping$"));return new c(s,n,f)},V.prototype._decodeResponse=function(e,r,n){var o=new R(e);d.copyOwnProperties(a._read(o),r.headers,!0);var s=m._read(o),f=n.name;if(f){var y=this._readers[f+(s?"*":"!")];if(n=this._clientSvc.message(f),s?r.error=y._read(o):r.response=y._read(o),!o.isValid())throw new Error(Q("truncated %s response",f))}else n=M};function ee(){O.Transform.call(this,{readableObjectMode:!0}),this._id=void 0,this._buf=d.newBuffer(0),this._bufs=[],this.on("finish",function(){this.push(null)})}T.inherits(ee,O.Transform),ee.prototype._transform=function(e,r,n){e=v.concat([this._buf,e]);for(var o;e.length>=4&&e.length>=(o=e.readInt32BE(0))+4;){if(o)this._bufs.push(e.slice(4,o+4));else{var s=this._bufs;this._bufs=[],this.push({id:null,payload:s})}e=e.slice(o+4)}this._buf=e,n()},ee.prototype._flush=function(e){if(this._buf.length||this._bufs.length){var r=this._bufs.slice();r.unshift(this._buf);var n=Te("TRAILING_DATA");n.trailingData=v.concat(r).toString(),this.emit("error",n)}e()};function J(){O.Transform.call(this,{writableObjectMode:!0}),this.on("finish",function(){this.push(null)})}T.inherits(J,O.Transform),J.prototype._transform=function(e,r,n){var o=e.payload,s,f,y;for(s=0,f=o.length;s=4&&e.length>=(o=e.readInt32BE(0))+4;)this._frameCount--,this._bufs.push(e.slice(4,o+4)),e=e.slice(o+4);if(this._frameCount){this._buf=e,n();return}else{var s={id:this._id,payload:this._bufs};this._bufs=[],this._id=void 0,this.push(s)}}},he.prototype._flush=ee.prototype._flush;function pe(){O.Transform.call(this,{writableObjectMode:!0}),this.on("finish",function(){this.push(null)})}T.inherits(pe,O.Transform),pe.prototype._transform=function(e,r,n){var o=e.payload,s=o.length,f;f=d.newBuffer(8),f.writeInt32BE(e.id,0),f.writeInt32BE(s,4),this.push(f);var y;for(y=0;y>32-te===0}function Je(e){return!!(e&&e.pipe)}function t(e,r){var n=e.message(r);if(!n)throw new Error(Q("unknown message: %s",r));return n}function i(e){var r=[e.wreq,e.wres],n=[],o;s(0);function s(y){var S=!1;y1)throw new Error("union annotations are not supported");return this._readUnion();default:var w=this._typeRefs[m.type];return w&&(delete m.type,d.copyOwnProperties(w,m)),Object.keys(m).length>1?m:m.type}},C.prototype._readFixed=function(m){var a=this._tk;return a.next({val:"(",silent:!0})||(m.name=a.next({id:"name"}).val,a.next({val:"("})),m.size=parseInt(a.next({id:"number"}).val),a.next({val:")"}),m},C.prototype._readMap=function(m){var a=this._tk,w=this._implicitTags,j=a.next({val:"<",silent:w})===void 0;return m.values=this._readType(),a.next({val:">",silent:j}),m},C.prototype._readArray=function(m){var a=this._tk,w=this._implicitTags,j=a.next({val:"<",silent:w})===void 0;return m.items=this._readType(),a.next({val:">",silent:j}),m},C.prototype._readEnum=function(m,a){var w=this._tk;w.next({val:"{",silent:!0})||(m.name=w.next({id:"name"}).val,w.next({val:"{"})),m.symbols=[];do m.symbols.push(w.next().val);while(!w.next({val:"}",silent:!0})&&w.next({val:","}));return a&&w.next({val:"=",silent:!0})&&(m.default=w.next().val,w.next({val:";"})),m},C.prototype._readUnion=function(){var m=this._tk,a=[];m.next({val:"{"});do a.push(this._readType());while(!m.next({val:"}",silent:!0})&&m.next({val:","}));return a},C.prototype._readRecord=function(m){var a=this._tk;for(a.next({val:"{",silent:!0})||(m.name=a.next({id:"name"}).val,a.next({val:"{"})),m.fields=[];!a.next({val:"}",silent:!0});)m.fields.push(this._readField()),a.next({val:";"});return m},C.prototype._readImports=function(m,a){for(var w=this._tk,j=0,z=w.pos;w.next({val:"import",silent:!0});){if(!j&&a&&w.next({val:"(",silent:!0})){w.pos=z;return}var te=w.next({id:"name"}).val,M=JSON.parse(w.next({id:"string"}).val);w.next({val:";"}),m.push({kind:te,name:M}),j++}return j};function P(m){this._str=m,this.pos=0}P.prototype.next=function(m){var a={pos:this.pos,id:void 0,val:void 0},w=this._skip(m&&m.emitJavadoc);if(typeof w=="string")a.id="javadoc",a.val=w;else{var j=this.pos,z=this._str,te=z.charAt(j);if(!te)a.id="(eof)";else if(m&&m.id==="json"?(a.id="json",this.pos=this._endOfJson()):te==='"'?(a.id="string",this.pos=this._endOfString()):/[0-9]/.test(te)?(a.id="number",this.pos=this._endOf(/[0-9]/)):/[`A-Za-z_.]/.test(te)?(a.id="name",this.pos=this._endOf(/[`A-Za-z0-9_.]/)):(a.id="operator",this.pos=j+1),a.val=z.slice(j,this.pos),a.id==="json")try{a.val=JSON.parse(a.val)}catch{throw this.error("invalid JSON",a)}else a.id==="name"&&(a.val=a.val.replace(/`/g,""))}var M;if(m&&m.id&&m.id!==a.id?M=this.error(O("expected ID %s",m.id),a):m&&m.val&&m.val!==a.val&&(M=this.error(O("expected value %s",m.val),a)),M)if(m&&m.silent){this.pos=a.pos;return}else throw M;else return a},P.prototype.error=function(m,a){var w=typeof a!="number",j=w?a.pos:a,z=this._str,te=1,M=0,G;for(G=0;G>>(r|0),this._id=0,this._n=0,this._cbs={}}A.prototype.get=function(e){return this._cbs[e&this._mask]},A.prototype.add=function(e,r){this._id=this._id+1&this._mask;var n=this,o=this._id,s;return e>0&&(s=setTimeout(function(){f(new Error("timeout"))},e)),this._cbs[o]=f,this._n++,o;function f(){n._cbs[o]&&(delete n._cbs[o],n._n--,s&&clearTimeout(s),r.apply(n._ctx,arguments))}},A.prototype.clear=function(){Object.keys(this._cbs).forEach(function(e){this._cbs[e](new Error("interrupted"))},this)};function V(e,r,n,o){this._clientSvc=e,this._serverSvc=r,this._hash=n,this._isRemote=!!o,this._readers=Ce(e,r)}V.prototype._decodeRequest=function(e){var r=new R(e),n=a._read(r),o=w._read(r),s,f;if(o?(s=this._serverSvc.message(o),f=this._readers[o+"?"]._read(r)):s=M,!r.isValid())throw new Error(Y("truncated %s request",o||"ping$"));return new c(s,n,f)},V.prototype._decodeResponse=function(e,r,n){var o=new R(e);d.copyOwnProperties(a._read(o),r.headers,!0);var s=m._read(o),f=n.name;if(f){var y=this._readers[f+(s?"*":"!")];if(n=this._clientSvc.message(f),s?r.error=y._read(o):r.response=y._read(o),!o.isValid())throw new Error(Y("truncated %s response",f))}else n=M};function Z(){O.Transform.call(this,{readableObjectMode:!0}),this._id=void 0,this._buf=d.newBuffer(0),this._bufs=[],this.on("finish",function(){this.push(null)})}T.inherits(Z,O.Transform),Z.prototype._transform=function(e,r,n){e=v.concat([this._buf,e]);for(var o;e.length>=4&&e.length>=(o=e.readInt32BE(0))+4;){if(o)this._bufs.push(e.slice(4,o+4));else{var s=this._bufs;this._bufs=[],this.push({id:null,payload:s})}e=e.slice(o+4)}this._buf=e,n()},Z.prototype._flush=function(e){if(this._buf.length||this._bufs.length){var r=this._bufs.slice();r.unshift(this._buf);var n=Te("TRAILING_DATA");n.trailingData=v.concat(r).toString(),this.emit("error",n)}e()};function K(){O.Transform.call(this,{writableObjectMode:!0}),this.on("finish",function(){this.push(null)})}T.inherits(K,O.Transform),K.prototype._transform=function(e,r,n){var o=e.payload,s,f,y;for(s=0,f=o.length;s=4&&e.length>=(o=e.readInt32BE(0))+4;)this._frameCount--,this._bufs.push(e.slice(4,o+4)),e=e.slice(o+4);if(this._frameCount){this._buf=e,n();return}else{var s={id:this._id,payload:this._bufs};this._bufs=[],this._id=void 0,this.push(s)}}},ce.prototype._flush=Z.prototype._flush;function pe(){O.Transform.call(this,{writableObjectMode:!0}),this.on("finish",function(){this.push(null)})}T.inherits(pe,O.Transform),pe.prototype._transform=function(e,r,n){var o=e.payload,s=o.length,f;f=d.newBuffer(8),f.writeInt32BE(e.id,0),f.writeInt32BE(s,4),this.push(f);var y;for(y=0;y>32-ee===0}function Je(e){return!!(e&&e.pipe)}function t(e,r){var n=e.message(r);if(!n)throw new Error(Y("unknown message: %s",r));return n}function i(e){var r=[e.wreq,e.wres],n=[],o;s(0);function s(y){var k=!1;y1)throw new Error("union annotations are not supported");return this._readUnion();default:var w=this._typeRefs[m.type];return w&&(delete m.type,d.copyOwnProperties(w,m)),Object.keys(m).length>1?m:m.type}},$.prototype._readFixed=function(m){var a=this._tk;return a.next({val:"(",silent:!0})||(m.name=a.next({id:"name"}).val,a.next({val:"("})),m.size=parseInt(a.next({id:"number"}).val),a.next({val:")"}),m},$.prototype._readMap=function(m){var a=this._tk,w=this._implicitTags,j=a.next({val:"<",silent:w})===void 0;return m.values=this._readType(),a.next({val:">",silent:j}),m},$.prototype._readArray=function(m){var a=this._tk,w=this._implicitTags,j=a.next({val:"<",silent:w})===void 0;return m.items=this._readType(),a.next({val:">",silent:j}),m},$.prototype._readEnum=function(m,a){var w=this._tk;w.next({val:"{",silent:!0})||(m.name=w.next({id:"name"}).val,w.next({val:"{"})),m.symbols=[];do m.symbols.push(w.next().val);while(!w.next({val:"}",silent:!0})&&w.next({val:","}));return a&&w.next({val:"=",silent:!0})&&(m.default=w.next().val,w.next({val:";"})),m},$.prototype._readUnion=function(){var m=this._tk,a=[];m.next({val:"{"});do a.push(this._readType());while(!m.next({val:"}",silent:!0})&&m.next({val:","}));return a},$.prototype._readRecord=function(m){var a=this._tk;for(a.next({val:"{",silent:!0})||(m.name=a.next({id:"name"}).val,a.next({val:"{"})),m.fields=[];!a.next({val:"}",silent:!0});)m.fields.push(this._readField()),a.next({val:";"});return m},$.prototype._readImports=function(m,a){for(var w=this._tk,j=0,z=w.pos;w.next({val:"import",silent:!0});){if(!j&&a&&w.next({val:"(",silent:!0})){w.pos=z;return}var ee=w.next({id:"name"}).val,M=JSON.parse(w.next({id:"string"}).val);w.next({val:";"}),m.push({kind:ee,name:M}),j++}return j};function P(m){this._str=m,this.pos=0}P.prototype.next=function(m){var a={pos:this.pos,id:void 0,val:void 0},w=this._skip(m&&m.emitJavadoc);if(typeof w=="string")a.id="javadoc",a.val=w;else{var j=this.pos,z=this._str,ee=z.charAt(j);if(!ee)a.id="(eof)";else if(m&&m.id==="json"?(a.id="json",this.pos=this._endOfJson()):ee==='"'?(a.id="string",this.pos=this._endOfString()):/[0-9]/.test(ee)?(a.id="number",this.pos=this._endOf(/[0-9]/)):/[`A-Za-z_.]/.test(ee)?(a.id="name",this.pos=this._endOf(/[`A-Za-z0-9_.]/)):(a.id="operator",this.pos=j+1),a.val=z.slice(j,this.pos),a.id==="json")try{a.val=JSON.parse(a.val)}catch{throw this.error("invalid JSON",a)}else a.id==="name"&&(a.val=a.val.replace(/`/g,""))}var M;if(m&&m.id&&m.id!==a.id?M=this.error(O("expected ID %s",m.id),a):m&&m.val&&m.val!==a.val&&(M=this.error(O("expected value %s",m.val),a)),M)if(m&&m.silent){this.pos=a.pos;return}else throw M;else return a},P.prototype.error=function(m,a){var w=typeof a!="number",j=w?a.pos:a,z=this._str,ee=1,M=0,G;for(G=0;G"u"&&typeof Tt>"u"&&console.error("ultralight-S3 Module: Crypto functions are not available, please report the issue with necessary description: https://github.com/sentienhq/ultralight-s3/issues");var Xt={contents:!0},Zt=u=>`%${u.charCodeAt(0).toString(16).toUpperCase()}`,it=u=>encodeURIComponent(u).replace(/[!'()*]/g,Zt),me=u=>it(u).replace(/%2F/g,"/"),er=class{constructor({accessKeyId:u,secretAccessKey:l,endpoint:h,bucketName:d,region:_="auto",maxRequestSizeInBytes:g=5242880,requestAbortTimeout:O=void 0,logger:T=void 0}){this.getBucketName=()=>this.bucketName,this.setBucketName=v=>{this.bucketName=v},this.getRegion=()=>this.region,this.setRegion=v=>{this.region=v},this.getEndpoint=()=>this.endpoint,this.setEndpoint=v=>{this.endpoint=v},this.getMaxRequestSizeInBytes=()=>this.maxRequestSizeInBytes,this.setMaxRequestSizeInBytes=v=>{this.maxRequestSizeInBytes=v},this.sanitizeETag=v=>Ve(v),this.getProps=()=>({accessKeyId:this.accessKeyId,secretAccessKey:this.secretAccessKey,region:this.region,bucket:this.bucketName,endpoint:this.endpoint,maxRequestSizeInBytes:this.maxRequestSizeInBytes,requestAbortTimeout:this.requestAbortTimeout,logger:this.logger}),this.setProps=v=>{this._validateConstructorParams(v.accessKeyId,v.secretAccessKey,v.bucketName,v.endpoint),this.accessKeyId=v.accessKeyId,this.secretAccessKey=v.secretAccessKey,this.region=v.region||"auto",this.bucketName=v.bucketName,this.endpoint=v.endpoint,this.maxRequestSizeInBytes=v.maxRequestSizeInBytes||5242880,this.requestAbortTimeout=v.requestAbortTimeout,this.logger=v.logger},this._validateConstructorParams(u,l,h,d),this.accessKeyId=u,this.secretAccessKey=l,this.endpoint=h,this.bucketName=d,this.region=_,this.maxRequestSizeInBytes=g,this.requestAbortTimeout=O,this.logger=T}_validateConstructorParams(u,l,h,d){if(typeof u!="string"||u.trim().length===0)throw new TypeError(Jt);if(typeof l!="string"||l.trim().length===0)throw new TypeError(Wt);if(typeof h!="string"||h.trim().length===0)throw new TypeError(Yt);if(typeof d!="string"||d.trim().length===0)throw new TypeError(Qt)}_checkMethodHeadnGet(u){if(u!=="GET"&&u!=="HEAD")throw this._log("error",`${se}method must be either GET or HEAD`),new Error("method must be either GET or HEAD")}_checkKey(u){if(typeof u!="string"||u.trim().length===0)throw this._log("error",ht),new TypeError(ht)}_checkDelimiter(u){if(typeof u!="string"||u.trim().length===0)throw this._log("error",yt),new TypeError(yt)}_checkPrefix(u){if(typeof u!="string")throw this._log("error",pt),new TypeError(pt)}_checkMaxKeys(u){if(typeof u!="number"||u<=0)throw this._log("error",dt),new TypeError(dt)}_checkOpts(u){if(typeof u!="object")throw this._log("error",`${se}opts must be an object`),new TypeError(`${se}opts must be an object`)}_log(u,l,h={}){if(this.logger&&typeof this.logger[u]=="function"){let d=O=>typeof O!="object"||O===null?O:Object.keys(O).reduce((T,v)=>(Ut.includes(v.toLowerCase())?T[v]="[REDACTED]":typeof O[v]=="object"&&O[v]!==null?T[v]=d(O[v]):T[v]=O[v],T),Array.isArray(O)?[]:{}),_=d(h),g={timestamp:new Date().toISOString(),level:u,message:l,..._,context:d({bucketName:this.bucketName,region:this.region,endpoint:this.endpoint,accessKeyId:this.accessKeyId?`${this.accessKeyId.substring(0,4)}...`:void 0})};this.logger[u](g)}}async getContentLength(u){this._checkKey(u);let l={[de]:_e},h=me(u),{url:d,headers:_}=await this._sign("HEAD",h,{},l,""),g=(await this._sendRequest(d,"HEAD",_)).headers.get(Ne);return g?parseInt(g,10):0}async bucketExists(){let u={[de]:_e},{url:l,headers:h}=await this._sign("HEAD","",{},u,""),d=await this._sendRequest(l,"HEAD",h,"",[200,404,403]);return this._log("error",`Response status: ${d.status,d.statusText}`),!!(d.ok&&d.status===200)}async createBucket(){let u=` +`)}function te(m){if(m.namespace)return m.namespace;var a=/^(.*)\.[^.]+$/.exec(m.protocol);return a?a[1]:void 0}l.exports={Tokenizer:P,assembleProtocol:v,read:R,readProtocol:$.readProtocol,readSchema:$.readSchema}}}),Ht=Ie({"node_modules/avsc/lib/index.js"(u,l){"use strict";var h=Dt(),d=jt(),_=Mt(),g=ot(),O=ze(),T=Ue,v=mt,R=De,$=T.Buffer;function P(a,w){var j=_.read(a);return j.protocol?d.Service.forProtocol(j,w):g.Type.forSchema(j,w)}function Y(a,w){w=w||{};var j=w.decode===void 0?!0:!!w.decode,z=Math.max(w.size||4096,4),ee=O.newBuffer(z),M=v.openSync(a,"r");try{var G=v.readSync(M,ee,0,z);if(G<4||!h.MAGIC_BYTES.equals(ee.slice(0,4)))return null;var D=new O.Tap(ee),Q=null;do Q=h.HEADER_TYPE._read(D);while(!ne());if(j!==!1){var q=Q.meta;q["avro.schema"]=JSON.parse(q["avro.schema"].toString()),q["avro.codec"]!==void 0&&(q["avro.codec"]=q["avro.codec"].toString())}return Q}finally{v.closeSync(M)}function ne(){if(D.isValid())return!0;var E=2*D.buf.length,S=O.newBuffer(E);return E=v.readSync(M,S,0,E),D.buf=$.concat([D.buf,S]),D.pos=0,!1}}function te(a,w){return v.createReadStream(a).pipe(new h.streams.BlockDecoder(w))}function m(a,w,j){var z=new h.streams.BlockEncoder(w,j);return z.pipe(v.createWriteStream(a,{defaultEncoding:"binary"})),z}l.exports={Service:d.Service,Type:g.Type,assembleProtocol:_.assembleProtocol,createFileDecoder:te,createFileEncoder:m,discoverProtocol:d.discoverProtocol,extractFileHeader:Y,parse:P,readProtocol:_.readProtocol,readSchema:_.readSchema,streams:h.streams,types:g.builtins,Protocol:d.Service,assemble:R.deprecate(_.assembleProtocol,"use `assembleProtocol` instead"),combine:R.deprecate(g.Type.forTypes,"use `Type.forTypes` intead"),infer:R.deprecate(g.Type.forValue,"use `Type.forValue` instead")}}}),at="AWS4-HMAC-SHA256",Xe="aws4_request",Ze="s3",Vt="2",_e="UNSIGNED-PAYLOAD",qt="application/octet-stream",et="application/xml",Ne="application/json",Ut=["accessKeyId","secretAccessKey","sessionToken","password"],de="x-amz-content-sha256",zt="x-amz-date",Gt="host",Kt="Authorization",Ee="Content-Type",Ae="Content-Length",ut="etag",ct="last-modified",oe="ultralight-s3 Module: ",Jt=`${oe}accessKeyId must be a non-empty string`,Wt=`${oe}secretAccessKey must be a non-empty string`,Yt=`${oe}endpoint must be a non-empty string`,Qt=`${oe}bucketName must be a non-empty string`,ht=`${oe}key must be a non-empty string`,Pe=`${oe}uploadId must be a non-empty string`,ft=`${oe}parts must be a non-empty array`,lt=`${oe}Each part must have a partNumber (number) and ETag (string)`,We=`${oe}data must be a Buffer or string`,pt=`${oe}prefix must be a string`,dt=`${oe}maxKeys must be a positive integer`,yt=`${oe}delimiter must be a string`,Et=crypto.createHmac||(await import("node:crypto")).createHmac,Tt=crypto.createHash||(await import("node:crypto")).createHash;typeof Et>"u"&&typeof Tt>"u"&&console.error("ultralight-S3 Module: Crypto functions are not available, please report the issue with necessary description: https://github.com/sentienhq/ultralight-s3/issues");var Xt={contents:!0},Zt=u=>`%${u.charCodeAt(0).toString(16).toUpperCase()}`,it=u=>encodeURIComponent(u).replace(/[!'()*]/g,Zt),me=u=>it(u).replace(/%2F/g,"/"),er=class{constructor({accessKeyId:u,secretAccessKey:l,endpoint:h,bucketName:d,region:_="auto",maxRequestSizeInBytes:g=5242880,requestAbortTimeout:O=void 0,logger:T=void 0}){this.getBucketName=()=>this.bucketName,this.setBucketName=v=>{this.bucketName=v},this.getRegion=()=>this.region,this.setRegion=v=>{this.region=v},this.getEndpoint=()=>this.endpoint,this.setEndpoint=v=>{this.endpoint=v},this.getMaxRequestSizeInBytes=()=>this.maxRequestSizeInBytes,this.setMaxRequestSizeInBytes=v=>{this.maxRequestSizeInBytes=v},this.sanitizeETag=v=>Ve(v),this.getProps=()=>({accessKeyId:this.accessKeyId,secretAccessKey:this.secretAccessKey,region:this.region,bucket:this.bucketName,endpoint:this.endpoint,maxRequestSizeInBytes:this.maxRequestSizeInBytes,requestAbortTimeout:this.requestAbortTimeout,logger:this.logger}),this.setProps=v=>{this._validateConstructorParams(v.accessKeyId,v.secretAccessKey,v.bucketName,v.endpoint),this.accessKeyId=v.accessKeyId,this.secretAccessKey=v.secretAccessKey,this.region=v.region||"auto",this.bucketName=v.bucketName,this.endpoint=v.endpoint,this.maxRequestSizeInBytes=v.maxRequestSizeInBytes||5242880,this.requestAbortTimeout=v.requestAbortTimeout,this.logger=v.logger},this._validateConstructorParams(u,l,h,d),this.accessKeyId=u,this.secretAccessKey=l,this.endpoint=h,this.bucketName=d,this.region=_,this.maxRequestSizeInBytes=g,this.requestAbortTimeout=O,this.logger=T}_validateConstructorParams(u,l,h,d){if(typeof u!="string"||u.trim().length===0)throw new TypeError(Jt);if(typeof l!="string"||l.trim().length===0)throw new TypeError(Wt);if(typeof h!="string"||h.trim().length===0)throw new TypeError(Yt);if(typeof d!="string"||d.trim().length===0)throw new TypeError(Qt)}_checkMethodHeadnGet(u){if(u!=="GET"&&u!=="HEAD")throw this._log("error",`${oe}method must be either GET or HEAD`),new Error("method must be either GET or HEAD")}_checkKey(u){if(typeof u!="string"||u.trim().length===0)throw this._log("error",ht),new TypeError(ht)}_checkDelimiter(u){if(typeof u!="string"||u.trim().length===0)throw this._log("error",yt),new TypeError(yt)}_checkPrefix(u){if(typeof u!="string")throw this._log("error",pt),new TypeError(pt)}_checkMaxKeys(u){if(typeof u!="number"||u<=0)throw this._log("error",dt),new TypeError(dt)}_checkOpts(u){if(typeof u!="object")throw this._log("error",`${oe}opts must be an object`),new TypeError(`${oe}opts must be an object`)}_log(u,l,h={}){if(this.logger&&typeof this.logger[u]=="function"){let d=O=>typeof O!="object"||O===null?O:Object.keys(O).reduce((T,v)=>(Ut.includes(v.toLowerCase())?T[v]="[REDACTED]":typeof O[v]=="object"&&O[v]!==null?T[v]=d(O[v]):T[v]=O[v],T),Array.isArray(O)?[]:{}),_=d(h),g={timestamp:new Date().toISOString(),level:u,message:l,..._,context:d({bucketName:this.bucketName,region:this.region,endpoint:this.endpoint,accessKeyId:this.accessKeyId?`${this.accessKeyId.substring(0,4)}...`:void 0})};this.logger[u](g)}}async getContentLength(u){this._checkKey(u);let l={[de]:_e},h=me(u),{url:d,headers:_}=await this._sign("HEAD",h,{},l,""),g=(await this._sendRequest(d,"HEAD",_)).headers.get(Ae);return g?parseInt(g,10):0}async bucketExists(){let u={[de]:_e},{url:l,headers:h}=await this._sign("HEAD","",{},u,""),d=await this._sendRequest(l,"HEAD",h,"",[200,404,403]);return this._log("error",`Response status: ${d.status,d.statusText}`),!!(d.ok&&d.status===200)}async createBucket(){let u=` ${this.region} - `,l={[Ee]:et,[Ne]:Buffer.byteLength(u).toString(),[de]:await Me(u)},h=encodeURI(""),{url:d,headers:_}=await this._sign("PUT",h,{},l,""),g=await this._sendRequest(d,"PUT",_,u,[200,404,403]);return!!(g.ok&&g.status===200)}async fileExists(u,l={}){this._checkKey(u);let{filteredOpts:h,conditionalHeaders:d}=this._filterIfHeaders(l),_={[de]:_e,...d},g=me(u),{url:O,headers:T}=await this._sign("HEAD",g,h,_,"");try{let v=await this._sendRequest(O,"HEAD",T,"",[200,404,412,304]);return v.status===404?!1:v.status===412||v.status===304?null:v.ok&&v.status===200?!0:(this._handleErrorResponse(v),!1)}catch(v){let R=v instanceof Error?v.message:String(v);throw this._log("error",`${se}Failed to check if file exists: ${R}`),new Error(`${se}Failed to check if file exists: ${R}`)}}async _sign(u,l,h={},d,_){let g=new Date().toISOString().replace(/[:-]|\.\d{3}/g,""),O=typeof l=="string"&&l.length>0?new URL(l,this.endpoint):new URL(this.endpoint);O.pathname=`/${encodeURI(this.bucketName)}${O.pathname}`,d[de]=_?await Me(_):_e,d[zt]=g,d[Gt]=O.host;let T=this._buildCanonicalHeaders(d),v=Object.keys(d).map(re=>re.toLowerCase()).sort().join(";"),R=await this._buildCanonicalRequest(u,O,h,T,v,_),C=await this._buildStringToSign(g,R),P=await this._calculateSignature(g,C),Q=this._buildAuthorizationHeader(g,v,P);return d[Kt]=Q,{url:O.toString(),headers:d}}_buildCanonicalHeaders(u){return Object.entries(u).map(([l,h])=>`${l.toLowerCase()}:${String(h).trim()}`).sort().join(` + `,l={[Ee]:et,[Ae]:Buffer.byteLength(u).toString(),[de]:await Me(u)},h=encodeURI(""),{url:d,headers:_}=await this._sign("PUT",h,{},l,""),g=await this._sendRequest(d,"PUT",_,u,[200,404,403]);return!!(g.ok&&g.status===200)}async fileExists(u,l={}){this._checkKey(u);let{filteredOpts:h,conditionalHeaders:d}=this._filterIfHeaders(l),_={[de]:_e,...d},g=me(u),{url:O,headers:T}=await this._sign("HEAD",g,h,_,"");try{let v=await this._sendRequest(O,"HEAD",T,"",[200,404,412,304]);return v.status===404?!1:v.status===412||v.status===304?null:v.ok&&v.status===200?!0:(this._handleErrorResponse(v),!1)}catch(v){let R=v instanceof Error?v.message:String(v);throw this._log("error",`${oe}Failed to check if file exists: ${R}`),new Error(`${oe}Failed to check if file exists: ${R}`)}}async _sign(u,l,h={},d,_){let g=new Date().toISOString().replace(/[:-]|\.\d{3}/g,""),O=typeof l=="string"&&l.length>0?new URL(l,this.endpoint):new URL(this.endpoint);O.pathname=`/${encodeURI(this.bucketName)}${O.pathname}`,d[de]=_?await Me(_):_e,d[zt]=g,d[Gt]=O.host;let T=this._buildCanonicalHeaders(d),v=Object.keys(d).map(te=>te.toLowerCase()).sort().join(";"),R=await this._buildCanonicalRequest(u,O,h,T,v,_),$=await this._buildStringToSign(g,R),P=await this._calculateSignature(g,$),Y=this._buildAuthorizationHeader(g,v,P);return d[Kt]=Y,{url:O.toString(),headers:d}}_buildCanonicalHeaders(u){return Object.entries(u).map(([l,h])=>`${l.toLowerCase()}:${String(h).trim()}`).sort().join(` `)}async _buildCanonicalRequest(u,l,h,d,_,g){return[u,l.pathname,this._buildCanonicalQueryString(h),`${d} `,_,g?await Me(g):_e].join(` `)}async _buildStringToSign(u,l){let h=[u.slice(0,8),this.region,Ze,Xe].join("/");return[at,u,h,await Me(l)].join(` -`)}async _calculateSignature(u,l){let h=await this._getSignatureKey(u.slice(0,8));return He(h,l,"hex")}_buildAuthorizationHeader(u,l,h){let d=[u.slice(0,8),this.region,Ze,Xe].join("/");return[`${at} Credential=${this.accessKeyId}/${d}`,`SignedHeaders=${l}`,`Signature=${h}`].join(", ")}_filterIfHeaders(u){let l={},h={},d=["if-match","if-none-match","if-modified-since","if-unmodified-since"];for(let[_,g]of Object.entries(u))d.includes(_)?h[_]=g:l[_]=g;return{filteredOpts:l,conditionalHeaders:h}}async list(u="/",l="",h=1e3,d="GET",_={}){this._checkDelimiter(u),this._checkPrefix(l),this._checkMaxKeys(h),this._checkMethodHeadnGet(d),this._checkOpts(_),this._log("info",`Listing objects in ${l}`);let g={"list-type":Vt,"max-keys":String(h),..._};l.length>0&&(g.prefix=l);let O={[Ee]:xe,[de]:_e},T=u==="/"?u:it(u),{url:v,headers:R}=await this._sign("GET",T,g,O,""),C=`${v}?${new URLSearchParams(g)}`,P=await this._sendRequest(C,"GET",R),Q=await P.text();if(d==="HEAD"){let a=P.headers.get(Ne),w=P.headers.get(ct),j=P.headers.get(ut);return{size:a?+a:void 0,mtime:w?new Date(w):void 0,ETag:j||void 0}}let re=Be(Q),m=re.listBucketResult||re.error||re;return m.contents||m}async listMultiPartUploads(u="/",l="",h="GET",d={}){var _,g,O;this._checkDelimiter(u),this._checkPrefix(l),this._checkMethodHeadnGet(h),this._checkOpts(d),this._log("info",`Listing multipart uploads in ${l}`);let T={uploads:"",...d},v={[Ee]:xe,[de]:_e},R=u==="/"?u:it(u),{url:C,headers:P}=await this._sign("GET",R,T,v,""),Q=`${C}?${new URLSearchParams(T)}`,re=await this._sendRequest(Q,"GET",P),m=await re.text();if(h==="HEAD")return{size:+((_=re.headers.get(Ne))!==null&&_!==void 0?_:"0"),mtime:new Date((g=re.headers.get(ct))!==null&&g!==void 0?g:""),ETag:(O=re.headers.get(ut))!==null&&O!==void 0?O:""};let a=Be(m),w=a.listMultipartUploadsResult||a.error||a;return w.uploads||w}async get(u,l={}){this._checkKey(u),this._log("info",`Getting object ${u}`);let{filteredOpts:h,conditionalHeaders:d}=this._filterIfHeaders(l),_={[Ee]:xe,[de]:_e,...d},g=me(u),{url:O,headers:T}=await this._sign("GET",g,h,_,""),v=await this._sendRequest(O,"GET",T,"",[200,404,412,304]);if(v.status===404||v.status===412||v.status===304)return this._log("error",`Failed to get object. Status: ${v.status}`),null;if(!v.ok)throw this._log("error",`Failed to get object. Status: ${v.status}`),new Error(`Failed to get object. Status: ${v.status}`);return v}async getObjectWithETag(u,l={}){this._checkKey(u),this._log("info",`Getting object ${u}`);let{filteredOpts:h,conditionalHeaders:d}=this._filterIfHeaders(l),_={[Ee]:xe,[de]:_e,...d},g=me(u),{url:O,headers:T}=await this._sign("GET",g,h,_,"");try{let v=await this._sendRequest(O,"GET",T,"",[200,404,412,304]);if(v.status===404||v.status===412||v.status===304)return this._log("error",`Failed to get object. Status: ${v.status}`),{etag:null,data:null};if(!v.ok)throw this._log("error",`Failed to get object. Status: ${v.status}`),new Error(`Failed to get object. Status: ${v.status}`);let R=v.headers.get("etag");if(!R)throw new Error("ETag not found in response headers");let C=await v.text();return{etag:Ve(R),data:C}}catch(v){throw this._log("error",`Error getting object ${u} with ETag: ${v}`),v}}async getEtag(u,l={}){this._checkKey(u),this._log("info",`Getting etag object ${u}`);let{filteredOpts:h,conditionalHeaders:d}=this._filterIfHeaders(l),_={[Ee]:xe,[de]:_e,...d},g=me(u),{url:O,headers:T}=await this._sign("HEAD",g,h,_,""),v=await this._sendRequest(O,"HEAD",T,"",[200,412,304]);if(this._log("info",`Response status: ${v.status,v.statusText}`),v.status===412||v.status===304)return null;let R=v.headers.get("etag");if(!R)throw this._log("error","ETag not found in response headers"),new Error("ETag not found in response headers");return Ve(R)}async getResponse(u,l=!0,h=0,d=this.maxRequestSizeInBytes,_={}){this._checkKey(u);let{filteredOpts:g,conditionalHeaders:O}=this._filterIfHeaders({..._}),T={[Ee]:xe,[de]:_e,...l?{}:{range:`bytes=${h}-${d-1}`},...O},v=me(u),{url:R,headers:C}=await this._sign("GET",v,g,T,""),P=`${R}?${new URLSearchParams(g)}`;return this._sendRequest(P,"GET",C)}async put(u,l){if(this._checkKey(u),!(l instanceof Buffer||typeof l=="string"))throw this._log("error",We),new TypeError(We);this._log("info",`Uploading object ${u}`);let h=typeof l=="string"?Buffer.byteLength(l):l.length,d={[Ne]:h},_=me(u),{url:g,headers:O}=await this._sign("PUT",_,{},d,l);return this._sendRequest(g,"PUT",O,l,[200])}async getMultipartUploadId(u,l=qt){if(this._checkKey(u),typeof l!="string")throw this._log("error",`${se}fileType must be a string`),new TypeError(`${se}fileType must be a string`);this._log("info",`Initiating multipart upload for object ${u}`);let h={uploads:""},d={[Ee]:l,[de]:_e},_=me(u),{url:g,headers:O}=await this._sign("POST",_,h,d,""),T=`${g}?${new URLSearchParams(h)}`,v=await(await this._sendRequest(T,"POST",O)).text(),R=Be(v);if(typeof R=="object"&&R!==null&&"error"in R&&typeof R.error=="object"&&R.error!==null&&"message"in R.error){let C=String(R.error.message);throw this._log("error",`${se}Failed to abort multipart upload: ${C}`),new Error(`${se}Failed to abort multipart upload: ${C}`)}if(typeof R=="object"&&R!==null){if(!R.initiateMultipartUploadResult||!R.initiateMultipartUploadResult.uploadId)throw this._log("error",`${se}Failed to create multipart upload: no uploadId in response`),new Error(`${se}Failed to create multipart upload: Missing upload ID in response`);return R.initiateMultipartUploadResult.uploadId}else throw this._log("error",`${se}Failed to create multipart upload: unexpected response format`),new Error(`${se}Failed to create multipart upload: Unexpected response format`)}async uploadPart(u,l,h,d,_={}){this._validateUploadPartParams(u,l,h,d,_);let g={uploadId:h,partNumber:d,..._},O={[Ne]:l.length},T=me(u),{url:v,headers:R}=await this._sign("PUT",T,g,O,l),C=`${v}?${new URLSearchParams(g)}`,P=await this._sendRequest(C,"PUT",R,l),Q=Ve(P.headers.get("etag")||"");return{partNumber:d,ETag:Q}}_validateUploadPartParams(u,l,h,d,_){if(this._checkKey(u),!(l instanceof Buffer||typeof l=="string"))throw this._log("error",We),new TypeError(We);if(typeof h!="string"||h.trim().length===0)throw this._log("error",Pe),new TypeError(Pe);if(!Number.isInteger(d)||d<=0)throw this._log("error",`${se}partNumber must be a positive integer`),new TypeError(`${se}partNumber must be a positive integer`);this._checkOpts(_)}async completeMultipartUpload(u,l,h){if(this._checkKey(u),typeof l!="string"||l.trim().length===0)throw this._log("error",Pe),new TypeError(Pe);if(!Array.isArray(h)||h.length===0)throw this._log("error",ft),new TypeError(ft);if(!h.every(Q=>typeof Q.partNumber=="number"&&typeof Q.ETag=="string"))throw this._log("error",lt),new TypeError(lt);this._log("info",`Complete multipart upload ${l} for object ${u}`);let d={uploadId:l},_=this._buildCompleteMultipartUploadXml(h),g={[Ee]:et,[Ne]:Buffer.byteLength(_).toString(),[de]:await Me(_)},O=me(u),{url:T,headers:v}=await this._sign("POST",O,d,g,_),R=`${T}?${new URLSearchParams(d)}`,C=await(await this._sendRequest(R,"POST",v,_)).text(),P=Be(C);if(typeof P=="object"&&P!==null&&"error"in P&&typeof P.error=="object"&&P.error!==null&&"message"in P.error){let Q=String(P.error.message);throw this._log("error",`${se}Failed to abort multipart upload: ${Q}`),new Error(`${se}Failed to abort multipart upload: ${Q}`)}return P.completeMultipartUploadResult}async abortMultipartUpload(u,l){if(this._checkKey(u),typeof l!="string"||l.trim().length===0)throw this._log("error",Pe),new TypeError(Pe);this._log("info",`Aborting multipart upload ${l} for object ${u}`);let h={uploadId:l},d={[Ee]:et,[de]:_e};try{let _=me(u),{url:g,headers:O}=await this._sign("DELETE",_,h,d,""),T=`${g}?${new URLSearchParams(h)}`,v=await this._sendRequest(T,"DELETE",O);if(v.ok){let R=await v.text(),C=Be(R);if(typeof C=="object"&&C!==null&&"error"in C&&typeof C.error=="object"&&C.error!==null&&"message"in C.error){let P=String(C.error.message);throw this._log("error",`${se}Failed to abort multipart upload: ${P}`),new Error(`${se}Failed to abort multipart upload: ${P}`)}return{status:"Aborted",key:u,uploadId:l,response:C}}else throw this._log("error",`${se}Abort request failed with status ${v.status}`),new Error(`${se}Abort request failed with status ${v.status}`)}catch(_){let g=_ instanceof Error?_.message:String(_);throw this._log("error",`${se}Failed to abort multipart upload for key ${u}: ${g}`),new Error(`${se}Failed to abort multipart upload for key ${u}: ${g}`)}}_buildCompleteMultipartUploadXml(u){return` +`)}async _calculateSignature(u,l){let h=await this._getSignatureKey(u.slice(0,8));return He(h,l,"hex")}_buildAuthorizationHeader(u,l,h){let d=[u.slice(0,8),this.region,Ze,Xe].join("/");return[`${at} Credential=${this.accessKeyId}/${d}`,`SignedHeaders=${l}`,`Signature=${h}`].join(", ")}_filterIfHeaders(u){let l={},h={},d=["if-match","if-none-match","if-modified-since","if-unmodified-since"];for(let[_,g]of Object.entries(u))d.includes(_)?h[_]=g:l[_]=g;return{filteredOpts:l,conditionalHeaders:h}}async list(u="/",l="",h=1e3,d="GET",_={}){this._checkDelimiter(u),this._checkPrefix(l),this._checkMaxKeys(h),this._checkMethodHeadnGet(d),this._checkOpts(_),this._log("info",`Listing objects in ${l}`);let g={"list-type":Vt,"max-keys":String(h),..._};l.length>0&&(g.prefix=l);let O={[Ee]:Ne,[de]:_e},T=u==="/"?u:it(u),{url:v,headers:R}=await this._sign("GET",T,g,O,""),$=`${v}?${new URLSearchParams(g)}`,P=await this._sendRequest($,"GET",R),Y=await P.text();if(d==="HEAD"){let a=P.headers.get(Ae),w=P.headers.get(ct),j=P.headers.get(ut);return{size:a?+a:void 0,mtime:w?new Date(w):void 0,ETag:j||void 0}}let te=Be(Y),m=te.listBucketResult||te.error||te;return m.contents||m}async listMultiPartUploads(u="/",l="",h="GET",d={}){var _,g,O;this._checkDelimiter(u),this._checkPrefix(l),this._checkMethodHeadnGet(h),this._checkOpts(d),this._log("info",`Listing multipart uploads in ${l}`);let T={uploads:"",...d},v={[Ee]:Ne,[de]:_e},R=u==="/"?u:it(u),{url:$,headers:P}=await this._sign("GET",R,T,v,""),Y=`${$}?${new URLSearchParams(T)}`,te=await this._sendRequest(Y,"GET",P),m=await te.text();if(h==="HEAD")return{size:+((_=te.headers.get(Ae))!==null&&_!==void 0?_:"0"),mtime:new Date((g=te.headers.get(ct))!==null&&g!==void 0?g:""),ETag:(O=te.headers.get(ut))!==null&&O!==void 0?O:""};let a=Be(m),w=a.listMultipartUploadsResult||a.error||a;return w.uploads||w}async get(u,l={}){this._checkKey(u),this._log("info",`Getting object ${u}`);let{filteredOpts:h,conditionalHeaders:d}=this._filterIfHeaders(l),_={[Ee]:Ne,[de]:_e,...d},g=me(u),{url:O,headers:T}=await this._sign("GET",g,h,_,""),v=await this._sendRequest(O,"GET",T,"",[200,404,412,304]);if(v.status===404||v.status===412||v.status===304)return this._log("error",`Failed to get object. Status: ${v.status}`),null;if(!v.ok)throw this._log("error",`Failed to get object. Status: ${v.status}`),new Error(`Failed to get object. Status: ${v.status}`);return v}async getObjectWithETag(u,l={}){this._checkKey(u),this._log("info",`Getting object ${u}`);let{filteredOpts:h,conditionalHeaders:d}=this._filterIfHeaders(l),_={[Ee]:Ne,[de]:_e,...d},g=me(u),{url:O,headers:T}=await this._sign("GET",g,h,_,"");try{let v=await this._sendRequest(O,"GET",T,"",[200,404,412,304]);if(v.status===404||v.status===412||v.status===304)return this._log("error",`Failed to get object. Status: ${v.status}`),{etag:null,data:null};if(!v.ok)throw this._log("error",`Failed to get object. Status: ${v.status}`),new Error(`Failed to get object. Status: ${v.status}`);let R=v.headers.get("etag");if(!R)throw new Error("ETag not found in response headers");let $=await v.text();return{etag:Ve(R),data:$}}catch(v){throw this._log("error",`Error getting object ${u} with ETag: ${v}`),v}}async getEtag(u,l={}){this._checkKey(u),this._log("info",`Getting etag object ${u}`);let{filteredOpts:h,conditionalHeaders:d}=this._filterIfHeaders(l),_={[Ee]:Ne,[de]:_e,...d},g=me(u),{url:O,headers:T}=await this._sign("HEAD",g,h,_,""),v=await this._sendRequest(O,"HEAD",T,"",[200,412,304]);if(this._log("info",`Response status: ${v.status,v.statusText}`),v.status===412||v.status===304)return null;let R=v.headers.get("etag");if(!R)throw this._log("error","ETag not found in response headers"),new Error("ETag not found in response headers");return Ve(R)}async getResponse(u,l=!0,h=0,d=this.maxRequestSizeInBytes,_={}){this._checkKey(u);let{filteredOpts:g,conditionalHeaders:O}=this._filterIfHeaders({..._}),T={[Ee]:Ne,[de]:_e,...l?{}:{range:`bytes=${h}-${d-1}`},...O},v=me(u),{url:R,headers:$}=await this._sign("GET",v,g,T,""),P=`${R}?${new URLSearchParams(g)}`;return this._sendRequest(P,"GET",$)}async put(u,l){if(this._checkKey(u),!(l instanceof Buffer||typeof l=="string"))throw this._log("error",We),new TypeError(We);this._log("info",`Uploading object ${u}`);let h=typeof l=="string"?Buffer.byteLength(l):l.length,d={[Ae]:h},_=me(u),{url:g,headers:O}=await this._sign("PUT",_,{},d,l);return this._sendRequest(g,"PUT",O,l,[200])}async getMultipartUploadId(u,l=qt){if(this._checkKey(u),typeof l!="string")throw this._log("error",`${oe}fileType must be a string`),new TypeError(`${oe}fileType must be a string`);this._log("info",`Initiating multipart upload for object ${u}`);let h={uploads:""},d={[Ee]:l,[de]:_e},_=me(u),{url:g,headers:O}=await this._sign("POST",_,h,d,""),T=`${g}?${new URLSearchParams(h)}`,v=await(await this._sendRequest(T,"POST",O)).text(),R=Be(v);if(typeof R=="object"&&R!==null&&"error"in R&&typeof R.error=="object"&&R.error!==null&&"message"in R.error){let $=String(R.error.message);throw this._log("error",`${oe}Failed to abort multipart upload: ${$}`),new Error(`${oe}Failed to abort multipart upload: ${$}`)}if(typeof R=="object"&&R!==null){if(!R.initiateMultipartUploadResult||!R.initiateMultipartUploadResult.uploadId)throw this._log("error",`${oe}Failed to create multipart upload: no uploadId in response`),new Error(`${oe}Failed to create multipart upload: Missing upload ID in response`);return R.initiateMultipartUploadResult.uploadId}else throw this._log("error",`${oe}Failed to create multipart upload: unexpected response format`),new Error(`${oe}Failed to create multipart upload: Unexpected response format`)}async uploadPart(u,l,h,d,_={}){this._validateUploadPartParams(u,l,h,d,_);let g={uploadId:h,partNumber:d,..._},O={[Ae]:l.length},T=me(u),{url:v,headers:R}=await this._sign("PUT",T,g,O,l),$=`${v}?${new URLSearchParams(g)}`,P=await this._sendRequest($,"PUT",R,l),Y=Ve(P.headers.get("etag")||"");return{partNumber:d,ETag:Y}}_validateUploadPartParams(u,l,h,d,_){if(this._checkKey(u),!(l instanceof Buffer||typeof l=="string"))throw this._log("error",We),new TypeError(We);if(typeof h!="string"||h.trim().length===0)throw this._log("error",Pe),new TypeError(Pe);if(!Number.isInteger(d)||d<=0)throw this._log("error",`${oe}partNumber must be a positive integer`),new TypeError(`${oe}partNumber must be a positive integer`);this._checkOpts(_)}async completeMultipartUpload(u,l,h){if(this._checkKey(u),typeof l!="string"||l.trim().length===0)throw this._log("error",Pe),new TypeError(Pe);if(!Array.isArray(h)||h.length===0)throw this._log("error",ft),new TypeError(ft);if(!h.every(Y=>typeof Y.partNumber=="number"&&typeof Y.ETag=="string"))throw this._log("error",lt),new TypeError(lt);this._log("info",`Complete multipart upload ${l} for object ${u}`);let d={uploadId:l},_=this._buildCompleteMultipartUploadXml(h),g={[Ee]:et,[Ae]:Buffer.byteLength(_).toString(),[de]:await Me(_)},O=me(u),{url:T,headers:v}=await this._sign("POST",O,d,g,_),R=`${T}?${new URLSearchParams(d)}`,$=await(await this._sendRequest(R,"POST",v,_)).text(),P=Be($);if(typeof P=="object"&&P!==null&&"error"in P&&typeof P.error=="object"&&P.error!==null&&"message"in P.error){let Y=String(P.error.message);throw this._log("error",`${oe}Failed to abort multipart upload: ${Y}`),new Error(`${oe}Failed to abort multipart upload: ${Y}`)}return P.completeMultipartUploadResult}async abortMultipartUpload(u,l){if(this._checkKey(u),typeof l!="string"||l.trim().length===0)throw this._log("error",Pe),new TypeError(Pe);this._log("info",`Aborting multipart upload ${l} for object ${u}`);let h={uploadId:l},d={[Ee]:et,[de]:_e};try{let _=me(u),{url:g,headers:O}=await this._sign("DELETE",_,h,d,""),T=`${g}?${new URLSearchParams(h)}`,v=await this._sendRequest(T,"DELETE",O);if(v.ok){let R=await v.text(),$=Be(R);if(typeof $=="object"&&$!==null&&"error"in $&&typeof $.error=="object"&&$.error!==null&&"message"in $.error){let P=String($.error.message);throw this._log("error",`${oe}Failed to abort multipart upload: ${P}`),new Error(`${oe}Failed to abort multipart upload: ${P}`)}return{status:"Aborted",key:u,uploadId:l,response:$}}else throw this._log("error",`${oe}Abort request failed with status ${v.status}`),new Error(`${oe}Abort request failed with status ${v.status}`)}catch(_){let g=_ instanceof Error?_.message:String(_);throw this._log("error",`${oe}Failed to abort multipart upload for key ${u}: ${g}`),new Error(`${oe}Failed to abort multipart upload for key ${u}: ${g}`)}}_buildCompleteMultipartUploadXml(u){return` ${u.map(l=>` @@ -84,5 +84,5 @@ import Ue from"buffer";import xt from"crypto";import De from"util";import vt fro `).join("")} - `}async delete(u){this._checkKey(u),this._log("info",`Deleting object ${u}`);let l={[Ee]:xe,[de]:_e},h=me(u),{url:d,headers:_}=await this._sign("DELETE",h,{},l,""),g=await this._sendRequest(d,"DELETE",_);return g.status===204||g.status===200}async _sendRequest(u,l,h,d,_=[]){this._log("info",`Sending ${l} request to ${u}, headers: ${JSON.stringify(h)}`);let g=await fetch(u,{method:l,headers:h,body:["GET","HEAD"].includes(l)?void 0:d,signal:this.requestAbortTimeout!==void 0?AbortSignal.timeout(this.requestAbortTimeout):void 0});return this._log("info",`Response status: ${g.status,_}`),!g.ok&&!_.includes(g.status)&&await this._handleErrorResponse(g),g}async _handleErrorResponse(u){let l=await u.text(),h=u.headers.get("x-amz-error-code")||"Unknown",d=u.headers.get("x-amz-error-message")||u.statusText;throw this._log("error",`${se}Request failed with status ${u.status}: ${h} - ${d},err body: ${l}`),new Error(`${se}Request failed with status ${u.status}: ${h} - ${d}, err body: ${l}`)}_buildCanonicalQueryString(u){return Object.keys(u).length<1?"":Object.keys(u).sort().map(l=>`${encodeURIComponent(l)}=${encodeURIComponent(u[l])}`).join("&")}async _getSignatureKey(u){let l=await He(`AWS4${this.secretAccessKey}`,u),h=await He(l,this.region),d=await He(h,Ze);return He(d,Xe)}},Me=async u=>{let l=Tt("sha256");return l.update(u),l.digest("hex")},He=async(u,l,h)=>{let d=Et("sha256",u);return d.update(l),d.digest(h)},Ve=u=>{let l={'"':"",""":"",""":"",""":"",""":""};return u.replace(/^("|"|")|("|"|")$/g,h=>l[h])},Be=u=>{let l=g=>g.replace(/"/g,'"').replace(/'/g,"'").replace(/</g,"<").replace(/>/g,">").replace(/&/g,"&"),h={},d=/<(\w)([-\w]+)(?:\/|[^>]*>((?:(?!<\1)[\s\S])*)<\/\1\2)>/gm,_;for(;_=d.exec(u);){let[,g,O,T]=_,v=g.toLowerCase()+O,R=T!=null?Be(T):!0;typeof R=="string"?h[v]=Ve(l(R)):Array.isArray(h[v])?h[v].push(R):h[v]=h[v]!=null?[h[v],R]:Xt[v]?[R]:R}return Object.keys(h).length?h:l(u)},Ot=Lt(Ht(),1),q={MISSING_ARGUMENT:"MISSING_ARGUMENT",COLLECTION_EXISTS:"COLLECTION_EXISTS",CREATE_COLLECTION_ERROR:"CREATE_COLLECTION_ERROR",RENAME_COLLECTION_ERROR:"RENAME_COLLECTION_ERROR",REMOVE_COLLECTION_ERROR:"REMOVE_COLLECTION_ERROR",UPDATE_COLLECTION_SCHEMA_ERROR:"UPDATE_COLLECTION_SCHEMA_ERROR",COLLECTION_NOT_FOUND:"COLLECTION_NOT_FOUND",SCHEMA_VALIDATION_ERROR:"SCHEMA_VALIDATION_ERROR",DOCUMENT_VALIDATION_ERROR:"DOCUMENT_VALIDATION_ERROR",S3_OPERATION_ERROR:"S3_OPERATION_ERROR",FIND_ERROR:"FIND_ERROR",FIND_ONE_ERROR:"FIND_ONE_ERROR",SAVE_DATA_ERROR:"SAVE_DATA_ERROR",INSERT_ERROR:"INSERT_ERROR",UPDATE_ERROR:"UPDATE_ERROR",UPDATE_ONE_ERROR:"UPDATE_ONE_ERROR",DELETE_ERROR:"DELETE_ERROR",COUNT_ERROR:"COUNT_ERROR",UNKNOWN_ERROR:"UNKNOWN_ERROR"},ie=class extends Error{constructor(u,l=q.UNKNOWN_ERROR){super(`lowstorageError: ${u} :: code: ${l}`),this.name=this.constructor.name,this.code=l,Error.captureStackTrace(this,this.constructor)}},Ae=class extends ie{constructor(u,l=q.SCHEMA_VALIDATION_ERROR){super(u,q.SCHEMA_VALIDATION_ERROR)}},Le=class extends ie{constructor(u,l=q.DOCUMENT_VALIDATION_ERROR){super(u,q.DOCUMENT_VALIDATION_ERROR)}},le=class extends ie{constructor(u,l){super(`S3 ${l} operation failed: ${u}`,q.S3_OPERATION_ERROR)}},Ye=(u,l)=>Object.keys(l).every(h=>u[h]===l[h]),tr=async()=>typeof tt<"u"&&typeof tt=="function"?tt():typeof crypto<"u"&&typeof crypto=="object"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(u){var l=Math.random()*16|0,h=u==="x"?l:l&3|8;return h.toString(16)}),Qe=u=>{let l={name:"_id",type:"string",size:16,logicalType:"UUID"};return typeof u>"u"||u===null||("type"in u&&u.type==="record"&&"fields"in u&&Array.isArray(u.fields)?u.fields.some(d=>d.name==="_id")||u.fields.unshift(l):"type"in u&&u.type==="array"&&"items"in u&&u.items!==null&&typeof u.items=="object"&&"type"in u.items&&u.items.type==="record"&&"fields"in u.items&&Array.isArray(u.items.fields)&&(u.items.fields.some(d=>d.name==="_id")||u.items.fields.unshift(l))),u},K="lowstorage",Oe="/",Rt="lowstorage",Re=".avro",rr=1024*1024,_t=5*rr,nt=Buffer.from("","utf8"),rt=(u=q.DOCUMENT_VALIDATION_ERROR)=>{throw new Le(`${K}: Invalid document or schema ${u}`)},qe=(u="")=>{if(u.trim()===""||u===null||typeof u>"u"||u.length>255||u===null)throw new ie(`${K}: Collection name is required, null or too long`,q.MISSING_ARGUMENT)},yr=class{constructor(u){this._checkArgs=l=>{let h=["accessKeyId","secretAccessKey","endpoint","bucketName"];for(let d of h)if(!l[d])throw new ie(`${K}: ${d} is required`,q.MISSING_ARGUMENT)},this.s3=()=>this._s3,this._checkArgs(u),this._schemas=new Map,this._s3=new er(u),this._dirPrefix=u.dirPrefix||Rt,this._avroParse=Ot.Type}async checkIfStorageExists(){try{return!!await this._s3.bucketExists()}catch(u){if(u.message.includes("Not Found"))return!1;throw new ie(`${K}: ${u.message}`,q.S3_OPERATION_ERROR)}}async createStorage(){try{let u=await this.checkIfStorageExists();return u||await this._s3.createBucket()}catch(u){throw u instanceof ie?u:new ie(`${K}: ${u.message}`,q.S3_OPERATION_ERROR)}}async listCollections(){try{let u=await this._s3.list(Oe,this._dirPrefix);return Array.isArray(u)?u.map(l=>l.key.slice(this._dirPrefix.length+1,-Re.length)):typeof u=="object"&&u!==null&&"keyCount"in u&&u.keyCount==="0"?[]:[]}catch(u){throw new le(`${K}: ${u.message}`,q.S3_OPERATION_ERROR)}}async collectionExists(u=""){try{return qe(u),!!await this._s3.fileExists(`${this._dirPrefix}${Oe}${u}${Re}`)}catch(l){if(l.message.includes("Not Found"))return!1;throw new ie(`${K}: ${l.message}`,q.COLLECTION_NOT_FOUND)}}async createCollection(u="",l,h=[]){try{if(qe(u),!await this.collectionExists(u)){if(typeof l<"u"&&l!==null)try{if(this._avroParse.forSchema(l))this._schemas.set(u,l);else throw new Ae(`${K}: Schema is invalid: ${l} ${q.SCHEMA_VALIDATION_ERROR}`)}catch{throw new Ae(`${K}: Schema is invalid: ${l}`,q.SCHEMA_VALIDATION_ERROR)}if(h.length>0&&l){let _=this._avroParse.forSchema({type:"array",items:l});await this._s3.put(`${this._dirPrefix}${Oe}${u}${Re}`,_.toBuffer(h))}else await this._s3.put(`${this._dirPrefix}${Oe}${u}${Re}`,nt);return this.collection(u,l,!1)}throw new ie(`${K}: Collection ${u} already exists`,q.COLLECTION_EXISTS)}catch(d){throw d instanceof ie?d:new ie(`${K}: ${d.message}`,q.CREATE_COLLECTION_ERROR)}}async removeCollection(u=""){try{if(qe(u),await this.collectionExists(u)){await this._s3.delete(`${this._dirPrefix}${Oe}${u}${Re}`);let h=await this.collectionExists(u);if(typeof h=="boolean"){if(!h)return this._schemas.delete(u),!0;throw new ie(`${K}: Failed to delete collection ${u}`,q.S3_OPERATION_ERROR)}throw new le(`${K}: Failed to delete collection ${u}`,q.S3_OPERATION_ERROR)}throw new ie(`${K}: Collection ${u} does not exist`,q.REMOVE_COLLECTION_ERROR)}catch(l){throw l instanceof le?l:new ie(`${K}: Failed to remove collection: ${l.message}`,q.REMOVE_COLLECTION_ERROR)}}async collection(u="",l,h=!0){try{qe(u);let d=`${this._dirPrefix}${Oe}${u}${Re}`;if(!await this._s3.fileExists(d)){if(!h)throw new ie(`${K}: Collection ${u} does not exist`,q.COLLECTION_NOT_FOUND);await this._s3.put(d,nt)}let g=l||this._schemas.get(u)||void 0;return new ir(u,g,this._s3,this._dirPrefix)}catch(d){throw d.message.includes("unknown type")?new Ae(`${K}: Schema input is invalid: ${d.message}`,q.SCHEMA_VALIDATION_ERROR):new ie(`${K}: ${d.message}`,q.COLLECTION_NOT_FOUND)}}},ir=class kt{constructor(l="",h,d,_=Rt,g=!1,O=_t){this.getProps=()=>({colName:this._colName,s3:this._s3,schema:this._schema,avroParse:this._avroParse,avroType:this._avroType,dirPrefix:this._dirPrefix,safeWrite:this._safeWrite,chunkSize:this._chunkSize}),this.setProps=T=>{this._colName=T.colName,this._schema=T.schema,this._s3=T.s3,this._avroParse=T.avroParse,this._avroType=T.avroType,this._dirPrefix=T.dirPrefix,this._safeWrite=T.safeWrite,this._chunkSize=T.chunkSize},this.setSafeWrite=T=>{this._safeWrite=T},this.getSafeWrite=()=>this._safeWrite,this.getAvroSchema=()=>this._schema,this.setAvroSchema=T=>{try{this._schema=Qe(T),this._avroType=typeof T>"u"?null:this._avroParse.forSchema(T)}catch(v){throw new ie(`${K}: ${v.message}`,q.SCHEMA_VALIDATION_ERROR)}},this.getCollectionETag=()=>this._lastETag,this.inferAvroSchema=(T,v="record")=>{Array.isArray(T)&&(T=T[0]);let C=this._avroParse.forValue(T).schema();return Qe(C)},this._colName=l.trim(),this._s3=d,this._schema=Qe(h),this._dirPrefix=_,this._safeWrite=g,this._chunkSize=O||_t,this._s3.setMaxRequestSizeInBytes(this._chunkSize),this._avroParse=Ot.Type,this._lastETag="",this._dataCache=[],this._avroType=typeof h>"u"?null:this._avroParse.forSchema(h),this._key=`${this._dirPrefix}${Oe}${this._colName}${Re}`}async forceLoadData(){try{this._lastETag="";let l=await this._loadData();return this._dataCache=l,!0}catch(l){throw new ie(`${K}: Failed to force update data: ${l.message}`,q.S3_OPERATION_ERROR)}}async _loadData(){try{if(this._avroType===null||typeof this._avroType>"u")throw new ie(`${K}: Missing type definition. Configure before operations `,q.SCHEMA_VALIDATION_ERROR);let{etag:l,data:h}=await this._s3.getObjectWithETag(this._key,{"if-none-match":this._lastETag});if(h===null)return this._dataCache;this._lastETag=l===null?this._lastETag:l;let d=this._avroParse.forSchema({type:"array",items:this._avroType});if(h.length0?d.fromBuffer(Buffer.from(h,"utf8")):[],this._dataCache;let _=this._chunkSize,g=[Buffer.from(h,"utf8")],O=!0;for(;O;){let v=await this._s3.getResponse(this._key,!1,_,_+this._chunkSize),R=await v.text();g.push(Buffer.from(R,"utf8")),_+=this._chunkSize,parseInt(v.headers.get("content-length")||R.length.toString())-1)return this._dataCache=[],this._dataCache;throw new le(`${K}: Failed to load data: ${l.message}`,q.S3_OPERATION_ERROR)}}async _saveData(l){try{if(this._avroType===null||typeof this._avroType>"u")throw new ie(`${K}: Missing type definition. Configure before operations `,q.SCHEMA_VALIDATION_ERROR);let h=this._avroParse.forSchema({type:"array",items:this._avroType}),d=l.length>0?h.toBuffer(l):nt;if(this._safeWrite&&this._lastETag!==""){let O=await this._s3.getEtag(this._key);if(O!==null&&O!==this._lastETag)return!1}let _=await this._s3.put(this._key,d);if(typeof _=="object"&&"status"in _&&_.status!==200)throw new le(`${K}: Failed to save data`,q.S3_OPERATION_ERROR);let g=_.headers?.get("etag")||"";return g&&g.length>0&&(this._lastETag=this._s3.sanitizeETag(g),this._dataCache=l),!0}catch(h){throw h instanceof le?h:new ie(`${K}: ${h.message}`,q.SAVE_DATA_ERROR)}}async insert(l,h){try{if(l==null)throw new ie(`${K}: Document is required for insert`,q.INSERT_ERROR);if(typeof l!="object"&&!Array.isArray(l))throw new Le(`${K}: Document must be an object or an array`,q.DOCUMENT_VALIDATION_ERROR);let d=Array.isArray(l)?l:[l],_=h?Qe(h):this._schema||this.inferAvroSchema(d[0]),g=this._avroParse.forSchema(_);if(!g)throw new Ae(`${K}: Schema is required - Pass a schema to the insert method`,q.SCHEMA_VALIDATION_ERROR);this._avroType=g;let O=await this._loadData();for(let v of d){if(typeof v!="object"||v===null)throw new Le(`${K}: Invalid input: input must be an object or an array of objects`,q.DOCUMENT_VALIDATION_ERROR);if(v._id=v._id||await tr(),this._avroType.isValid(v,{errorHook:rt,noUndeclaredFields:!0})===!0)O.push(v);else throw new Le(`${K}: Invalid document or schema`,q.DOCUMENT_VALIDATION_ERROR)}if(!await this._saveData(O))throw new le(`${K}: Failed to insert document`,q.S3_OPERATION_ERROR);return this.setAvroSchema(_),d}catch(d){throw d.message.includes("unknown type")?new Ae(`${K}: Schema input is invalid: ${d.message}`,q.SCHEMA_VALIDATION_ERROR):d instanceof ie?d:new ie(`${K} Insert operation failed: ${d.message}`,q.INSERT_ERROR)}}async find(l={},h={}){try{if(l==null)throw new ie(`${K}: Query is required for update`,q.MISSING_ARGUMENT);let d=await this._loadData(),_=h.skip!==void 0?parseInt(String(h.skip),10):0,g=h.limit!==void 0?_+parseInt(String(h.limit),10):void 0;return d.filter(T=>Ye(T,l)).slice(_,g)}catch(d){throw new ie(`${K}: Find operation failed: ${d.message}`,q.FIND_ERROR)}}async findOne(l={}){try{if(l===null)throw new ie(`${K}: Query cannot be null`,q.INVALID_ARGUMENT);return(await this.find(l,{limit:1}))[0]||null}catch(h){throw h instanceof ie?h:new ie(`${K}: FindOne operation failed: ${h.message}`,q.FIND_ONE_ERROR)}}async update(l={},h={},d={}){try{if(l==null||h===void 0||h===null)throw new ie(`${K}: Query and update values are required for update`,q.MISSING_ARGUMENT);if(!this._avroType)throw new Ae(`${K}: Schema is not defined for this collection`,q.SCHEMA_VALIDATION_ERROR);let _=await this._loadData();if(_.length===0)return 0;let g=0;for(let O=0;O<_.length;O++)if(Ye(_[O],l)){let T={..._[O],...h};if(this._avroType.isValid(T,{errorHook:rt,noUndeclaredFields:!0})===!0)_[O]=T,g++;else throw new Le(`${K}: Invalid document or schema`,q.DOCUMENT_VALIDATION_ERROR)}if(g>0){if(!await this._saveData(_))throw new le(`${K}: Failed to update document`,q.S3_OPERATION_ERROR)}else if(d&&"upsert"in d&&d.upsert){if(!await this.insert(h))throw new le(`${K}: Failed to update document`,q.S3_OPERATION_ERROR);g=1}return g}catch(_){throw _ instanceof le?_:new ie(`${K}: Update operation failed: ${_.message}`,q.UPDATE_ERROR)}}async updateOne(l={},h={},d={}){try{if(l==null||h===void 0||h===null)throw new ie(`${K}: Query is required`,q.MISSING_ARGUMENT);if(!this._avroType)throw new Ae(`${K}: Schema is not defined for this collection`,q.SCHEMA_VALIDATION_ERROR);let _=await this._loadData();if(_.length===0)return 0;let g=_.findIndex(O=>Ye(O,l));if(g!==-1){let O={..._[g],...h};if(this._avroType.isValid(O,{errorHook:rt,noUndeclaredFields:!0})===!0){if(_[g]=O,!await this._saveData(_))throw new le(`${K}: Failed to update document`,q.S3_OPERATION_ERROR);return 1}else throw new Le(`${K}: Invalid document or schema`,q.DOCUMENT_VALIDATION_ERROR)}if(d&&"upsert"in d&&d.upsert){if(!await this.insert(h))throw new le(`${K}: Failed to update document`,q.S3_OPERATION_ERROR);return 1}return 0}catch(_){throw _ instanceof ie?_:new ie(`${K}: UpdateOne operation failed: ${_.message}`,q.UPDATE_ONE_ERROR)}}async delete(l={}){try{if(l==null)throw new ie(`${K}: Query is required`,q.MISSING_ARGUMENT);let h=await this._loadData();if(h.length===0)return 0;let d=h.length,_=h.filter(O=>!Ye(O,l));if(!await this._saveData(_))throw new le(`${K}: Failed to delete document`,q.S3_OPERATION_ERROR);return d-_.length}catch(h){throw h instanceof le?h:new ie(`${K}: Delete operation failed: ${h.message}`,q.DELETE_ERROR)}}async deleteAll(){try{let h=(await this._loadData()).length;if(!await this._saveData([]))throw new le(`${K}: Failed to delete document`,q.S3_OPERATION_ERROR);return h}catch(l){throw l instanceof le?l:new ie(`${K}: Delete operation failed: ${l.message}`,q.DELETE_ERROR)}}async count(l={}){try{return(await this.find(l)).length}catch(h){throw new ie(`${K}: Count operation failed: ${h.message}`,q.COUNT_ERROR)}}async renameCollection(l,h=this._schema){try{if(qe(l),await this._s3.fileExists(`${this._dirPrefix}${Oe}${l}${Re}`))throw new ie(`${K}: Collection ${l} already exists`,q.COLLECTION_EXISTS);let _=h||this.getAvroSchema(),g=await this._loadData(),O=new kt(l,_,this._s3,this._dirPrefix,this._safeWrite,this._chunkSize);return await O._saveData(g),await this._s3.delete(`${this._dirPrefix}${Oe}${this._colName}${Re}`),O}catch(d){throw d instanceof ie?d:new ie(`${K}: Rename collection failed: ${d.message}`,q.RENAME_COLLECTION_ERROR)}}};export{yr as lowstorage,ie as lowstorageError,q as lowstorage_ERROR_CODES}; + `}async delete(u){this._checkKey(u),this._log("info",`Deleting object ${u}`);let l={[Ee]:Ne,[de]:_e},h=me(u),{url:d,headers:_}=await this._sign("DELETE",h,{},l,""),g=await this._sendRequest(d,"DELETE",_);return g.status===204||g.status===200}async _sendRequest(u,l,h,d,_=[]){this._log("info",`Sending ${l} request to ${u}, headers: ${JSON.stringify(h)}`);let g=await fetch(u,{method:l,headers:h,body:["GET","HEAD"].includes(l)?void 0:d,signal:this.requestAbortTimeout!==void 0?AbortSignal.timeout(this.requestAbortTimeout):void 0});return this._log("info",`Response status: ${g.status,_}`),!g.ok&&!_.includes(g.status)&&await this._handleErrorResponse(g),g}async _handleErrorResponse(u){let l=await u.text(),h=u.headers.get("x-amz-error-code")||"Unknown",d=u.headers.get("x-amz-error-message")||u.statusText;throw this._log("error",`${oe}Request failed with status ${u.status}: ${h} - ${d},err body: ${l}`),new Error(`${oe}Request failed with status ${u.status}: ${h} - ${d}, err body: ${l}`)}_buildCanonicalQueryString(u){return Object.keys(u).length<1?"":Object.keys(u).sort().map(l=>`${encodeURIComponent(l)}=${encodeURIComponent(u[l])}`).join("&")}async _getSignatureKey(u){let l=await He(`AWS4${this.secretAccessKey}`,u),h=await He(l,this.region),d=await He(h,Ze);return He(d,Xe)}},Me=async u=>{let l=Tt("sha256");return l.update(u),l.digest("hex")},He=async(u,l,h)=>{let d=Et("sha256",u);return d.update(l),d.digest(h)},Ve=u=>{let l={'"':"",""":"",""":"",""":"",""":""};return u.replace(/^("|"|")|("|"|")$/g,h=>l[h])},Be=u=>{let l=g=>g.replace(/"/g,'"').replace(/'/g,"'").replace(/</g,"<").replace(/>/g,">").replace(/&/g,"&"),h={},d=/<(\w)([-\w]+)(?:\/|[^>]*>((?:(?!<\1)[\s\S])*)<\/\1\2)>/gm,_;for(;_=d.exec(u);){let[,g,O,T]=_,v=g.toLowerCase()+O,R=T!=null?Be(T):!0;typeof R=="string"?h[v]=Ve(l(R)):Array.isArray(h[v])?h[v].push(R):h[v]=h[v]!=null?[h[v],R]:Xt[v]?[R]:R}return Object.keys(h).length?h:l(u)},Ot=Lt(Ht(),1),U={MISSING_ARGUMENT:"MISSING_ARGUMENT",COLLECTION_EXISTS:"COLLECTION_EXISTS",CREATE_COLLECTION_ERROR:"CREATE_COLLECTION_ERROR",LIST_COLLECTIONS_ERROR:"LIST_COLLECTIONS_ERROR",RENAME_COLLECTION_ERROR:"RENAME_COLLECTION_ERROR",REMOVE_COLLECTION_ERROR:"REMOVE_COLLECTION_ERROR",UPDATE_COLLECTION_SCHEMA_ERROR:"UPDATE_COLLECTION_SCHEMA_ERROR",COLLECTION_NOT_FOUND:"COLLECTION_NOT_FOUND",SCHEMA_VALIDATION_ERROR:"SCHEMA_VALIDATION_ERROR",DOCUMENT_VALIDATION_ERROR:"DOCUMENT_VALIDATION_ERROR",S3_OPERATION_ERROR:"S3_OPERATION_ERROR",FIND_ERROR:"FIND_ERROR",FIND_ONE_ERROR:"FIND_ONE_ERROR",SAVE_DATA_ERROR:"SAVE_DATA_ERROR",INSERT_ERROR:"INSERT_ERROR",UPDATE_ERROR:"UPDATE_ERROR",UPDATE_ONE_ERROR:"UPDATE_ONE_ERROR",DELETE_ERROR:"DELETE_ERROR",COUNT_ERROR:"COUNT_ERROR",UNKNOWN_ERROR:"UNKNOWN_ERROR"},re=class extends Error{constructor(u,l=U.UNKNOWN_ERROR){super(`lowstorageError: ${u} :: code: ${l}`),this.name=this.constructor.name,this.code=l,Error.captureStackTrace(this,this.constructor)}},Se=class extends re{constructor(u,l=U.SCHEMA_VALIDATION_ERROR){super(u,U.SCHEMA_VALIDATION_ERROR)}},Le=class extends re{constructor(u,l=U.DOCUMENT_VALIDATION_ERROR){super(u,U.DOCUMENT_VALIDATION_ERROR)}},le=class extends re{constructor(u,l){super(`S3 ${l} operation failed: ${u}`,U.S3_OPERATION_ERROR)}},Ye=(u,l)=>Object.keys(l).every(h=>u[h]===l[h]),tr=async()=>typeof tt<"u"&&typeof tt=="function"?tt():typeof crypto<"u"&&typeof crypto=="object"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(u){var l=Math.random()*16|0,h=u==="x"?l:l&3|8;return h.toString(16)}),Qe=u=>{let l={name:"_id",type:"string",size:16,logicalType:"UUID"};return(typeof u>"u"||u===null)&&(typeof u!="object"||!Array.isArray(u))||("type"in u&&u.type==="record"&&"fields"in u&&Array.isArray(u.fields)?u.fields.some(d=>d.name==="_id")||u.fields.unshift(l):"type"in u&&u.type==="array"&&"items"in u&&u.items!==null&&typeof u.items=="object"&&"type"in u.items&&u.items.type==="record"&&"fields"in u.items&&Array.isArray(u.items.fields)&&(u.items.fields.some(d=>d.name==="_id")||u.items.fields.unshift(l))),u},fe="lowstorage",Oe="/",Rt="lowstorage",Re=".avro",rr=1024*1024,_t=5*rr,nt=Buffer.from("","utf8"),rt=(u=U.DOCUMENT_VALIDATION_ERROR)=>{throw new Le(`${fe}: Invalid document or schema ${u}`)},qe=(u="")=>{if(u.trim()===""||u===null||typeof u>"u"||u.length>255)throw new re("Collection name is required, null or too long",U.MISSING_ARGUMENT)},yr=class{constructor(u){this._checkArgs=l=>{let h=["accessKeyId","secretAccessKey","endpoint","bucketName"];for(let d of h)if(!l[d])throw new re(`${d} is required`,U.MISSING_ARGUMENT)},this.s3=()=>this._s3,this._checkArgs(u),this._schemas=new Map,this._s3=new er(u),this._dirPrefix=u.dirPrefix||Rt,this._avroParse=Ot.Type}async checkIfStorageExists(){try{return!!await this._s3.bucketExists()}catch(u){if(u.message.includes("Not Found"))return!1;throw new re(`${u.message}`,U.S3_OPERATION_ERROR)}}async createStorage(){try{let u=await this.checkIfStorageExists();return u||!!await this._s3.createBucket()}catch(u){throw u instanceof re?u:new re(`${u.message}`,U.S3_OPERATION_ERROR)}}async listCollections(){try{let u=await this._s3.list(Oe,this._dirPrefix);return Array.isArray(u)?u.map(l=>l.key.slice(this._dirPrefix.length+1,-Re.length)):typeof u=="object"&&u!==null&&"keyCount"in u&&u.keyCount==="0"?[]:[]}catch(u){throw u instanceof le?u:new re(`${u.message}`,U.LIST_COLLECTIONS_ERROR)}}async collectionExists(u=""){try{return qe(u),!!await this._s3.fileExists(`${this._dirPrefix}${Oe}${u}${Re}`)}catch(l){if(l.message.includes("Not Found"))return!1;throw new re(`${l.message}`,U.COLLECTION_NOT_FOUND)}}async createCollection(u="",l,h=[]){try{if(qe(u),!await this.collectionExists(u)){if(typeof l<"u"&&l!==null)try{if(this._avroParse.forSchema(l))this._schemas.set(u,l);else throw new Se(`Schema is invalid: ${l}`,U.SCHEMA_VALIDATION_ERROR)}catch(_){throw new Se(`Schema is invalid: ${_.message} in ${l} `,U.SCHEMA_VALIDATION_ERROR)}if(h.length>0&&l){let _=this._avroParse.forSchema({type:"array",items:l});await this._s3.put(`${this._dirPrefix}${Oe}${u}${Re}`,_.toBuffer(h))}else await this._s3.put(`${this._dirPrefix}${Oe}${u}${Re}`,nt);return this.collection(u,l,!1)}throw new re(`Collection ${u} already exists`,U.COLLECTION_EXISTS)}catch(d){throw d instanceof Se?d:new re(`${d.message}`,U.CREATE_COLLECTION_ERROR)}}async removeCollection(u=""){try{if(qe(u),await this.collectionExists(u)){await this._s3.delete(`${this._dirPrefix}${Oe}${u}${Re}`);let h=await this.collectionExists(u);if(typeof h=="boolean"){if(!h)return this._schemas.delete(u),!0;throw new re(`Failed to delete collection ${u}`,U.S3_OPERATION_ERROR)}throw new le(`${fe}: Failed to delete collection ${u}`,U.S3_OPERATION_ERROR)}throw new re(`Collection ${u} does not exist`,U.REMOVE_COLLECTION_ERROR)}catch(l){throw l instanceof le?l:new re(`Failed to remove collection: ${l.message}`,U.REMOVE_COLLECTION_ERROR)}}async collection(u="",l,h=!0){try{qe(u);let d=`${this._dirPrefix}${Oe}${u}${Re}`;if(!await this._s3.fileExists(d)){if(!h)throw new re(`Collection ${u} does not exist`,U.COLLECTION_NOT_FOUND);await this._s3.put(d,nt)}let g=l||this._schemas.get(u)||void 0;return new ir(u,g,this._s3,this._dirPrefix)}catch(d){throw d.message.includes("unknown type")?new Se(`Schema input is invalid: ${d.message}`,U.SCHEMA_VALIDATION_ERROR):d instanceof re?d:new re(`${d.message}`,U.COLLECTION_NOT_FOUND)}}},ir=class St{constructor(l="",h,d,_=Rt,g=!1,O=_t){this.getProps=()=>({colName:this._colName,s3:this._s3,schema:this._schema,avroParse:this._avroParse,avroType:this._avroType,dirPrefix:this._dirPrefix,safeWrite:this._safeWrite,chunkSize:this._chunkSize}),this.setProps=T=>{this._colName=T.colName,this._schema=T.schema,this._s3=T.s3,this._avroParse=T.avroParse,this._avroType=T.avroType,this._dirPrefix=T.dirPrefix,this._safeWrite=T.safeWrite,this._chunkSize=T.chunkSize},this.setSafeWrite=T=>{this._safeWrite=T},this.getSafeWrite=()=>this._safeWrite,this.getAvroSchema=()=>this._schema,this.setAvroSchema=T=>{try{this._schema=Qe(T),this._avroType=typeof T>"u"?null:this._avroParse.forSchema(T)}catch(v){throw new Se(`Schema is invalid: ${v.message}`,U.SCHEMA_VALIDATION_ERROR)}},this.getCollectionETag=()=>this._lastETag,this.inferAvroSchema=(T,v="record")=>{Array.isArray(T)&&(T=T[0]);let $=this._avroParse.forValue(T).schema();return Qe($)},this._colName=l.trim(),this._s3=d,this._schema=Qe(h),this._dirPrefix=_,this._safeWrite=g,this._chunkSize=O||_t,this._s3.setMaxRequestSizeInBytes(this._chunkSize),this._avroParse=Ot.Type,this._lastETag="",this._dataCache=[],this._avroType=typeof h>"u"?null:this._avroParse.forSchema(h),this._key=`${this._dirPrefix}${Oe}${this._colName}${Re}`}async forceLoadData(){try{this._lastETag="";let l=await this._loadData();return this._dataCache=l,!0}catch(l){throw new re(`Failed to force update data: ${l.message}`,U.S3_OPERATION_ERROR)}}async _loadData(){try{if(this._avroType===null||typeof this._avroType>"u")throw new re("Missing type definition. Configure before operations ",U.SCHEMA_VALIDATION_ERROR);let{etag:l,data:h}=await this._s3.getObjectWithETag(this._key,{"if-none-match":this._lastETag});if(h===null)return this._dataCache;this._lastETag=l===null?this._lastETag:l;let d=this._avroParse.forSchema({type:"array",items:this._avroType});if(h.length0?d.fromBuffer(Buffer.from(h,"utf8")):[],this._dataCache;let _=this._chunkSize,g=[Buffer.from(h,"utf8")],O=!0;for(;O;){let v=await this._s3.getResponse(this._key,!1,_,_+this._chunkSize),R=await v.text();g.push(Buffer.from(R,"utf8")),_+=this._chunkSize,parseInt(v.headers.get("content-length")||R.length.toString())-1)return this._dataCache=[],this._dataCache;throw new le(`${fe}: Failed to load data: ${l.message}`,U.S3_OPERATION_ERROR)}}async _saveData(l){try{if(this._avroType===null||typeof this._avroType>"u")throw new re("Missing type definition. Configure before operations ",U.SCHEMA_VALIDATION_ERROR);let h=this._avroParse.forSchema({type:"array",items:this._avroType}),d=l.length>0?h.toBuffer(l):nt;if(this._safeWrite&&this._lastETag!==""){let O=await this._s3.getEtag(this._key);if(O!==null&&O!==this._lastETag)return!1}let _=await this._s3.put(this._key,d);if(typeof _=="object"&&"status"in _&&_.status!==200)throw new le(`${fe}: Failed to save data`,U.S3_OPERATION_ERROR);let g=_.headers?.get("etag")||"";return g&&g.length>0&&(this._lastETag=this._s3.sanitizeETag(g),this._dataCache=l),!0}catch(h){throw h instanceof le||h instanceof re?h:new re(`${h.message}`,U.SAVE_DATA_ERROR)}}async insert(l,h){try{if(l==null)throw new re("Document is required for insert",U.INSERT_ERROR);if(typeof l!="object"&&!Array.isArray(l))throw new Le(`${fe}: Document must be an object or an array`,U.DOCUMENT_VALIDATION_ERROR);let d=Array.isArray(l)?l:[l],_=h?Qe(h):this._schema||this.inferAvroSchema(d[0]),g=this._avroParse.forSchema(_);if(!g)throw new Se("Schema is required - Pass a schema to the insert method",U.SCHEMA_VALIDATION_ERROR);this._avroType=g;let O=await this._loadData();for(let v of d){if(typeof v!="object"||v===null)throw new Le(`${fe}: Invalid input: input must be an object or an array of objects`,U.DOCUMENT_VALIDATION_ERROR);if(v._id=v._id||await tr(),this._avroType.isValid(v,{errorHook:rt,noUndeclaredFields:!0})===!0)O.push(v);else throw new Le(`${fe}: Invalid document or schema`,U.DOCUMENT_VALIDATION_ERROR)}if(!await this._saveData(O))throw new le(`${fe}: Failed to insert document`,U.S3_OPERATION_ERROR);return this.setAvroSchema(_),d}catch(d){throw d.message.includes("unknown type")?new Se(`Schema input is invalid: ${d.message}`,U.SCHEMA_VALIDATION_ERROR):d instanceof re?d:new re(`Insert operation failed: ${d.message}`,U.INSERT_ERROR)}}async find(l={},h={}){try{if(l==null)throw new re("Query is required for update",U.MISSING_ARGUMENT);let d=await this._loadData(),_=h.skip!==void 0?parseInt(String(h.skip),10):0,g=h.limit!==void 0?_+parseInt(String(h.limit),10):void 0;return d.filter(T=>Ye(T,l)).slice(_,g)}catch(d){throw new re(`Find operation failed: ${d.message}`,U.FIND_ERROR)}}async findOne(l={}){try{if(l===null)throw new re(`${fe}: Query cannot be null`,U.INVALID_ARGUMENT);return(await this.find(l,{limit:1}))[0]||null}catch(h){throw h instanceof re?h:new re(`${fe}: FindOne operation failed: ${h.message}`,U.FIND_ONE_ERROR)}}async update(l={},h={},d={}){try{if(l==null||h===void 0||h===null)throw new re("Query and update values are required for update",U.MISSING_ARGUMENT);if(!this._avroType)throw new Se("Schema is not defined for this collection",U.SCHEMA_VALIDATION_ERROR);let _=await this._loadData();if(_.length===0)return 0;let g=0;for(let O=0;O<_.length;O++)if(Ye(_[O],l)){let T={..._[O],...h};if(this._avroType.isValid(T,{errorHook:rt,noUndeclaredFields:!0})===!0)_[O]=T,g++;else throw new Le(`${fe}: Invalid document or schema`,U.DOCUMENT_VALIDATION_ERROR)}if(g>0){if(!await this._saveData(_))throw new le(`${fe}: Failed to update document`,U.S3_OPERATION_ERROR)}else if(d&&"upsert"in d&&d.upsert){if(!await this.insert(h))throw new le(`${fe}: Failed to update document`,U.S3_OPERATION_ERROR);g=1}return g}catch(_){throw _ instanceof le?_:new re(`Update operation failed: ${_.message}`,U.UPDATE_ERROR)}}async updateOne(l={},h={},d={}){try{if(l==null||h===void 0||h===null)throw new re("Query is required",U.MISSING_ARGUMENT);if(!this._avroType)throw new Se("Schema is not defined for this collection",U.SCHEMA_VALIDATION_ERROR);let _=await this._loadData();if(_.length===0)return 0;let g=_.findIndex(O=>Ye(O,l));if(g!==-1){let O={..._[g],...h};if(this._avroType.isValid(O,{errorHook:rt,noUndeclaredFields:!0})===!0){if(_[g]=O,!await this._saveData(_))throw new le(`${fe}: Failed to update document`,U.S3_OPERATION_ERROR);return 1}else throw new Le(`${fe}: Invalid document or schema`,U.DOCUMENT_VALIDATION_ERROR)}if(d&&"upsert"in d&&d.upsert){if(!await this.insert(h))throw new le(`${fe}: Failed to update document`,U.S3_OPERATION_ERROR);return 1}return 0}catch(_){throw _ instanceof re?_:new re(`UpdateOne operation failed: ${_.message}`,U.UPDATE_ONE_ERROR)}}async delete(l={}){try{if(l==null)throw new re("Query is required",U.MISSING_ARGUMENT);let h=await this._loadData();if(h.length===0)return 0;let d=h.length,_=h.filter(O=>!Ye(O,l));if(!await this._saveData(_))throw new le(`${fe}: Failed to delete document`,U.S3_OPERATION_ERROR);return d-_.length}catch(h){throw h instanceof le?h:new re(`Delete operation failed: ${h.message}`,U.DELETE_ERROR)}}async deleteAll(){try{let h=(await this._loadData()).length;if(!await this._saveData([]))throw new le(`${fe}: Failed to delete document`,U.S3_OPERATION_ERROR);return h}catch(l){throw l instanceof le?l:new re(`Delete operation failed: ${l.message}`,U.DELETE_ERROR)}}async count(l={}){try{return(await this.find(l)).length}catch(h){throw new re(`Count operation failed: ${h.message}`,U.COUNT_ERROR)}}async renameCollection(l,h=this._schema){try{if(qe(l),await this._s3.fileExists(`${this._dirPrefix}${Oe}${l}${Re}`))throw new re(`${fe}: Collection ${l} already exists`,U.COLLECTION_EXISTS);let _=h||this.getAvroSchema(),g=await this._loadData(),O=new St(l,_,this._s3,this._dirPrefix,this._safeWrite,this._chunkSize);return await O._saveData(g),await this._s3.delete(`${this._dirPrefix}${Oe}${this._colName}${Re}`),O}catch(d){throw d instanceof re?d:new re(`Rename collection failed: ${d.message}`,U.RENAME_COLLECTION_ERROR)}}};export{yr as lowstorage,re as lowstorageError,U as lowstorage_ERROR_CODES}; //# sourceMappingURL=lowstorage.min.js.map diff --git a/build/lowstorage.min.js.map b/build/lowstorage.min.js.map index 08bab5d..d823949 100644 --- a/build/lowstorage.min.js.map +++ b/build/lowstorage.min.js.map @@ -1,7 +1,7 @@ { "version": 3, "sources": [""], - "sourcesContent": ["import __import_BUFFER from \"buffer\";\nimport __import_CRYPTO from \"crypto\";\nimport __import_UTIL from \"util\";\nimport __import_STREAM from \"stream\";\nimport __import_ZLIB from \"zlib\";\nimport __import_EVENTS from \"events\";\nimport __import_FS from \"fs\";\nimport __import_PATH from \"path\";\n\nvar __create = Object.create;\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __getProtoOf = Object.getPrototypeOf;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __require = /* @__PURE__ */ ((x2) => typeof require !== \"undefined\" ? require : typeof Proxy !== \"undefined\" ? new Proxy(x2, {\n get: (a, b2) => (typeof require !== \"undefined\" ? require : a)[b2]\n}) : x2)(function(x2) {\n if (typeof require !== \"undefined\") return require.apply(this, arguments);\n throw Error('Dynamic require of \"' + x2 + '\" is not supported');\n});\nvar __commonJS = (cb, mod) => function __require2() {\n return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(\n // If the importer is in node compatibility mode or this is not an ESM\n // file that has been converted to a CommonJS file using a Babel-\n // compatible transform (i.e. \"__esModule\" has not been set), then set\n // \"default\" to the CommonJS \"module.exports\" for node compatibility.\n isNodeMode || !mod || !mod.__esModule ? __defProp(target, \"default\", { value: mod, enumerable: true }) : target,\n mod\n));\n\n// node_modules/avsc/lib/utils.js\nvar require_utils = __commonJS({\n \"node_modules/avsc/lib/utils.js\"(exports, module) {\n \"use strict\";\n var buffer = __import_BUFFER;\n var crypto2 = __import_CRYPTO;\n var util = __import_UTIL;\n var Buffer2 = buffer.Buffer;\n var POOL = new BufferPool(4096);\n var NAME_PATTERN = /^[A-Za-z_][A-Za-z0-9_]*$/;\n var f2 = util.format;\n function newBuffer(size) {\n if (typeof Buffer2.alloc == \"function\") {\n return Buffer2.alloc(size);\n } else {\n return new Buffer2(size);\n }\n }\n function bufferFrom(data, enc) {\n if (typeof Buffer2.from == \"function\") {\n return Buffer2.from(data, enc);\n } else {\n return new Buffer2(data, enc);\n }\n }\n function capitalize(s) {\n return s.charAt(0).toUpperCase() + s.slice(1);\n }\n function compare(n1, n2) {\n return n1 === n2 ? 0 : n1 < n2 ? -1 : 1;\n }\n function getOption(opts, key, def) {\n var value = opts[key];\n return value === void 0 ? def : value;\n }\n function getHash(str, algorithm) {\n algorithm = algorithm || \"md5\";\n var hash = crypto2.createHash(algorithm);\n hash.end(str);\n return hash.read();\n }\n function singleIndexOf(arr, v2) {\n var pos = -1;\n var i, l;\n if (!arr) {\n return -1;\n }\n for (i = 0, l = arr.length; i < l; i++) {\n if (arr[i] === v2) {\n if (pos >= 0) {\n return -2;\n }\n pos = i;\n }\n }\n return pos;\n }\n function toMap(arr, fn) {\n var obj = {};\n var i, elem;\n for (i = 0; i < arr.length; i++) {\n elem = arr[i];\n obj[fn(elem)] = elem;\n }\n return obj;\n }\n function objectValues(obj) {\n return Object.keys(obj).map(function(key) {\n return obj[key];\n });\n }\n function hasDuplicates(arr, fn) {\n var obj = /* @__PURE__ */ Object.create(null);\n var i, l, elem;\n for (i = 0, l = arr.length; i < l; i++) {\n elem = arr[i];\n if (fn) {\n elem = fn(elem);\n }\n if (obj[elem]) {\n return true;\n }\n obj[elem] = true;\n }\n return false;\n }\n function copyOwnProperties(src, dst, overwrite) {\n var names = Object.getOwnPropertyNames(src);\n var i, l, name;\n for (i = 0, l = names.length; i < l; i++) {\n name = names[i];\n if (!dst.hasOwnProperty(name) || overwrite) {\n var descriptor = Object.getOwnPropertyDescriptor(src, name);\n Object.defineProperty(dst, name, descriptor);\n }\n }\n return dst;\n }\n function isValidName(str) {\n return NAME_PATTERN.test(str);\n }\n function qualify(name, namespace) {\n if (~name.indexOf(\".\")) {\n name = name.replace(/^\\./, \"\");\n } else if (namespace) {\n name = namespace + \".\" + name;\n }\n name.split(\".\").forEach(function(part) {\n if (!isValidName(part)) {\n throw new Error(f2(\"invalid name: %j\", name));\n }\n });\n return name;\n }\n function unqualify(name) {\n var parts = name.split(\".\");\n return parts[parts.length - 1];\n }\n function impliedNamespace(name) {\n var match = /^(.*)\\.[^.]+$/.exec(name);\n return match ? match[1] : void 0;\n }\n function jsonEnd(str, pos) {\n pos = pos | 0;\n var c = str.charAt(pos++);\n if (/[\\d-]/.test(c)) {\n while (/[eE\\d.+-]/.test(str.charAt(pos))) {\n pos++;\n }\n return pos;\n } else if (/true|null/.test(str.slice(pos - 1, pos + 3))) {\n return pos + 3;\n } else if (/false/.test(str.slice(pos - 1, pos + 4))) {\n return pos + 4;\n }\n var depth = 0;\n var literal = false;\n do {\n switch (c) {\n case \"{\":\n case \"[\":\n if (!literal) {\n depth++;\n }\n break;\n case \"}\":\n case \"]\":\n if (!literal && !--depth) {\n return pos;\n }\n break;\n case '\"':\n literal = !literal;\n if (!depth && !literal) {\n return pos;\n }\n break;\n case \"\\\\\":\n pos++;\n }\n } while (c = str.charAt(pos++));\n return -1;\n }\n function abstractFunction() {\n throw new Error(\"abstract\");\n }\n function addDeprecatedGetters(obj, props) {\n var proto = obj.prototype;\n var i, l, prop, getter;\n for (i = 0, l = props.length; i < l; i++) {\n prop = props[i];\n getter = \"get\" + capitalize(prop);\n proto[getter] = util.deprecate(\n createGetter(prop),\n \"use `.\" + prop + \"` instead of `.\" + getter + \"()`\"\n );\n }\n function createGetter(prop2) {\n return function() {\n var delegate = this[prop2];\n return typeof delegate == \"function\" ? delegate.apply(this, arguments) : delegate;\n };\n }\n }\n function BufferPool(len) {\n this._len = len | 0;\n this._pos = 0;\n this._slab = newBuffer(this._len);\n }\n BufferPool.prototype.alloc = function(len) {\n if (len < 0) {\n throw new Error(\"negative length\");\n }\n var maxLen = this._len;\n if (len > maxLen) {\n return newBuffer(len);\n }\n if (this._pos + len > maxLen) {\n this._slab = newBuffer(maxLen);\n this._pos = 0;\n }\n return this._slab.slice(this._pos, this._pos += len);\n };\n function Lcg(seed) {\n var a = 1103515245;\n var c = 12345;\n var m2 = Math.pow(2, 31);\n var state = Math.floor(seed || Math.random() * (m2 - 1));\n this._max = m2;\n this._nextInt = function() {\n return state = (a * state + c) % m2;\n };\n }\n Lcg.prototype.nextBoolean = function() {\n return !!(this._nextInt() % 2);\n };\n Lcg.prototype.nextInt = function(start, end) {\n if (end === void 0) {\n end = start;\n start = 0;\n }\n end = end === void 0 ? this._max : end;\n return start + Math.floor(this.nextFloat() * (end - start));\n };\n Lcg.prototype.nextFloat = function(start, end) {\n if (end === void 0) {\n end = start;\n start = 0;\n }\n end = end === void 0 ? 1 : end;\n return start + (end - start) * this._nextInt() / this._max;\n };\n Lcg.prototype.nextString = function(len, flags) {\n len |= 0;\n flags = flags || \"aA\";\n var mask = \"\";\n if (flags.indexOf(\"a\") > -1) {\n mask += \"abcdefghijklmnopqrstuvwxyz\";\n }\n if (flags.indexOf(\"A\") > -1) {\n mask += \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\";\n }\n if (flags.indexOf(\"#\") > -1) {\n mask += \"0123456789\";\n }\n if (flags.indexOf(\"!\") > -1) {\n mask += \"~`!@#$%^&*()_+-={}[]:\\\";'<>?,./|\\\\\";\n }\n var result = [];\n for (var i = 0; i < len; i++) {\n result.push(this.choice(mask));\n }\n return result.join(\"\");\n };\n Lcg.prototype.nextBuffer = function(len) {\n var arr = [];\n var i;\n for (i = 0; i < len; i++) {\n arr.push(this.nextInt(256));\n }\n return bufferFrom(arr);\n };\n Lcg.prototype.choice = function(arr) {\n var len = arr.length;\n if (!len) {\n throw new Error(\"choosing from empty array\");\n }\n return arr[this.nextInt(len)];\n };\n function OrderedQueue() {\n this._index = 0;\n this._items = [];\n }\n OrderedQueue.prototype.push = function(item) {\n var items = this._items;\n var i = items.length | 0;\n var j2;\n items.push(item);\n while (i > 0 && items[i].index < items[j2 = i - 1 >> 1].index) {\n item = items[i];\n items[i] = items[j2];\n items[j2] = item;\n i = j2;\n }\n };\n OrderedQueue.prototype.pop = function() {\n var items = this._items;\n var len = items.length - 1 | 0;\n var first = items[0];\n if (!first || first.index > this._index) {\n return null;\n }\n this._index++;\n if (!len) {\n items.pop();\n return first;\n }\n items[0] = items.pop();\n var mid = len >> 1;\n var i = 0;\n var i1, i2, j2, item, c, c1, c2;\n while (i < mid) {\n item = items[i];\n i1 = (i << 1) + 1;\n i2 = i + 1 << 1;\n c1 = items[i1];\n c2 = items[i2];\n if (!c2 || c1.index <= c2.index) {\n c = c1;\n j2 = i1;\n } else {\n c = c2;\n j2 = i2;\n }\n if (c.index >= item.index) {\n break;\n }\n items[j2] = item;\n items[i] = c;\n i = j2;\n }\n return first;\n };\n function Tap(buf, pos) {\n this.buf = buf;\n this.pos = pos | 0;\n if (this.pos < 0) {\n throw new Error(\"negative offset\");\n }\n }\n Tap.prototype.isValid = function() {\n return this.pos <= this.buf.length;\n };\n Tap.prototype._invalidate = function() {\n this.pos = this.buf.length + 1;\n };\n Tap.prototype.readBoolean = function() {\n return !!this.buf[this.pos++];\n };\n Tap.prototype.skipBoolean = function() {\n this.pos++;\n };\n Tap.prototype.writeBoolean = function(b2) {\n this.buf[this.pos++] = !!b2;\n };\n Tap.prototype.readInt = Tap.prototype.readLong = function() {\n var n = 0;\n var k2 = 0;\n var buf = this.buf;\n var b2, h, f3, fk;\n do {\n b2 = buf[this.pos++];\n h = b2 & 128;\n n |= (b2 & 127) << k2;\n k2 += 7;\n } while (h && k2 < 28);\n if (h) {\n f3 = n;\n fk = 268435456;\n do {\n b2 = buf[this.pos++];\n f3 += (b2 & 127) * fk;\n fk *= 128;\n } while (b2 & 128);\n return (f3 % 2 ? -(f3 + 1) : f3) / 2;\n }\n return n >> 1 ^ -(n & 1);\n };\n Tap.prototype.skipInt = Tap.prototype.skipLong = function() {\n var buf = this.buf;\n while (buf[this.pos++] & 128) {\n }\n };\n Tap.prototype.writeInt = Tap.prototype.writeLong = function(n) {\n var buf = this.buf;\n var f3, m2;\n if (n >= -1073741824 && n < 1073741824) {\n m2 = n >= 0 ? n << 1 : ~n << 1 | 1;\n do {\n buf[this.pos] = m2 & 127;\n m2 >>= 7;\n } while (m2 && (buf[this.pos++] |= 128));\n } else {\n f3 = n >= 0 ? n * 2 : -n * 2 - 1;\n do {\n buf[this.pos] = f3 & 127;\n f3 /= 128;\n } while (f3 >= 1 && (buf[this.pos++] |= 128));\n }\n this.pos++;\n };\n Tap.prototype.readFloat = function() {\n var buf = this.buf;\n var pos = this.pos;\n this.pos += 4;\n if (this.pos > buf.length) {\n return 0;\n }\n return this.buf.readFloatLE(pos);\n };\n Tap.prototype.skipFloat = function() {\n this.pos += 4;\n };\n Tap.prototype.writeFloat = function(f3) {\n var buf = this.buf;\n var pos = this.pos;\n this.pos += 4;\n if (this.pos > buf.length) {\n return;\n }\n return this.buf.writeFloatLE(f3, pos);\n };\n Tap.prototype.readDouble = function() {\n var buf = this.buf;\n var pos = this.pos;\n this.pos += 8;\n if (this.pos > buf.length) {\n return 0;\n }\n return this.buf.readDoubleLE(pos);\n };\n Tap.prototype.skipDouble = function() {\n this.pos += 8;\n };\n Tap.prototype.writeDouble = function(d) {\n var buf = this.buf;\n var pos = this.pos;\n this.pos += 8;\n if (this.pos > buf.length) {\n return;\n }\n return this.buf.writeDoubleLE(d, pos);\n };\n Tap.prototype.readFixed = function(len) {\n var pos = this.pos;\n this.pos += len;\n if (this.pos > this.buf.length) {\n return;\n }\n var fixed = POOL.alloc(len);\n this.buf.copy(fixed, 0, pos, pos + len);\n return fixed;\n };\n Tap.prototype.skipFixed = function(len) {\n this.pos += len;\n };\n Tap.prototype.writeFixed = function(buf, len) {\n len = len || buf.length;\n var pos = this.pos;\n this.pos += len;\n if (this.pos > this.buf.length) {\n return;\n }\n buf.copy(this.buf, pos, 0, len);\n };\n Tap.prototype.readBytes = function() {\n var len = this.readLong();\n if (len < 0) {\n this._invalidate();\n return;\n }\n return this.readFixed(len);\n };\n Tap.prototype.skipBytes = function() {\n var len = this.readLong();\n if (len < 0) {\n this._invalidate();\n return;\n }\n this.pos += len;\n };\n Tap.prototype.writeBytes = function(buf) {\n var len = buf.length;\n this.writeLong(len);\n this.writeFixed(buf, len);\n };\n if (typeof Buffer2.prototype.utf8Slice == \"function\") {\n Tap.prototype.readString = function() {\n var len = this.readLong();\n if (len < 0) {\n this._invalidate();\n return \"\";\n }\n var pos = this.pos;\n var buf = this.buf;\n this.pos += len;\n if (this.pos > buf.length) {\n return;\n }\n return this.buf.utf8Slice(pos, pos + len);\n };\n } else {\n Tap.prototype.readString = function() {\n var len = this.readLong();\n if (len < 0) {\n this._invalidate();\n return \"\";\n }\n var pos = this.pos;\n var buf = this.buf;\n this.pos += len;\n if (this.pos > buf.length) {\n return;\n }\n return this.buf.slice(pos, pos + len).toString();\n };\n }\n Tap.prototype.skipString = function() {\n var len = this.readLong();\n if (len < 0) {\n this._invalidate();\n return;\n }\n this.pos += len;\n };\n Tap.prototype.writeString = function(s) {\n var len = Buffer2.byteLength(s);\n var buf = this.buf;\n this.writeLong(len);\n var pos = this.pos;\n this.pos += len;\n if (this.pos > buf.length) {\n return;\n }\n if (len > 64 && typeof Buffer2.prototype.utf8Write == \"function\") {\n buf.utf8Write(s, pos, len);\n } else {\n var i, l, c1, c2;\n for (i = 0, l = len; i < l; i++) {\n c1 = s.charCodeAt(i);\n if (c1 < 128) {\n buf[pos++] = c1;\n } else if (c1 < 2048) {\n buf[pos++] = c1 >> 6 | 192;\n buf[pos++] = c1 & 63 | 128;\n } else if ((c1 & 64512) === 55296 && ((c2 = s.charCodeAt(i + 1)) & 64512) === 56320) {\n c1 = 65536 + ((c1 & 1023) << 10) + (c2 & 1023);\n i++;\n buf[pos++] = c1 >> 18 | 240;\n buf[pos++] = c1 >> 12 & 63 | 128;\n buf[pos++] = c1 >> 6 & 63 | 128;\n buf[pos++] = c1 & 63 | 128;\n } else {\n buf[pos++] = c1 >> 12 | 224;\n buf[pos++] = c1 >> 6 & 63 | 128;\n buf[pos++] = c1 & 63 | 128;\n }\n }\n }\n };\n if (typeof Buffer2.prototype.latin1Write == \"function\") {\n Tap.prototype.writeBinary = function(str, len) {\n var pos = this.pos;\n this.pos += len;\n if (this.pos > this.buf.length) {\n return;\n }\n this.buf.latin1Write(str, pos, len);\n };\n } else if (typeof Buffer2.prototype.binaryWrite == \"function\") {\n Tap.prototype.writeBinary = function(str, len) {\n var pos = this.pos;\n this.pos += len;\n if (this.pos > this.buf.length) {\n return;\n }\n this.buf.binaryWrite(str, pos, len);\n };\n } else {\n Tap.prototype.writeBinary = function(s, len) {\n var pos = this.pos;\n this.pos += len;\n if (this.pos > this.buf.length) {\n return;\n }\n this.buf.write(s, pos, len, \"binary\");\n };\n }\n Tap.prototype.matchBoolean = function(tap) {\n return this.buf[this.pos++] - tap.buf[tap.pos++];\n };\n Tap.prototype.matchInt = Tap.prototype.matchLong = function(tap) {\n var n1 = this.readLong();\n var n2 = tap.readLong();\n return n1 === n2 ? 0 : n1 < n2 ? -1 : 1;\n };\n Tap.prototype.matchFloat = function(tap) {\n var n1 = this.readFloat();\n var n2 = tap.readFloat();\n return n1 === n2 ? 0 : n1 < n2 ? -1 : 1;\n };\n Tap.prototype.matchDouble = function(tap) {\n var n1 = this.readDouble();\n var n2 = tap.readDouble();\n return n1 === n2 ? 0 : n1 < n2 ? -1 : 1;\n };\n Tap.prototype.matchFixed = function(tap, len) {\n return this.readFixed(len).compare(tap.readFixed(len));\n };\n Tap.prototype.matchBytes = Tap.prototype.matchString = function(tap) {\n var l1 = this.readLong();\n var p1 = this.pos;\n this.pos += l1;\n var l2 = tap.readLong();\n var p2 = tap.pos;\n tap.pos += l2;\n var b1 = this.buf.slice(p1, this.pos);\n var b2 = tap.buf.slice(p2, tap.pos);\n return b1.compare(b2);\n };\n Tap.prototype.unpackLongBytes = function() {\n var res = newBuffer(8);\n var n = 0;\n var i = 0;\n var j2 = 6;\n var buf = this.buf;\n var b2, neg;\n b2 = buf[this.pos++];\n neg = b2 & 1;\n res.fill(0);\n n |= (b2 & 127) >> 1;\n while (b2 & 128) {\n b2 = buf[this.pos++];\n n |= (b2 & 127) << j2;\n j2 += 7;\n if (j2 >= 8) {\n j2 -= 8;\n res[i++] = n;\n n >>= 8;\n }\n }\n res[i] = n;\n if (neg) {\n invert(res, 8);\n }\n return res;\n };\n Tap.prototype.packLongBytes = function(buf) {\n var neg = (buf[7] & 128) >> 7;\n var res = this.buf;\n var j2 = 1;\n var k2 = 0;\n var m2 = 3;\n var n;\n if (neg) {\n invert(buf, 8);\n n = 1;\n } else {\n n = 0;\n }\n var parts = [\n buf.readUIntLE(0, 3),\n buf.readUIntLE(3, 3),\n buf.readUIntLE(6, 2)\n ];\n while (m2 && !parts[--m2]) {\n }\n while (k2 < m2) {\n n |= parts[k2++] << j2;\n j2 += 24;\n while (j2 > 7) {\n res[this.pos++] = n & 127 | 128;\n n >>= 7;\n j2 -= 7;\n }\n }\n n |= parts[m2] << j2;\n do {\n res[this.pos] = n & 127;\n n >>= 7;\n } while (n && (res[this.pos++] |= 128));\n this.pos++;\n if (neg) {\n invert(buf, 8);\n }\n };\n function invert(buf, len) {\n while (len--) {\n buf[len] = ~buf[len];\n }\n }\n module.exports = {\n abstractFunction,\n addDeprecatedGetters,\n bufferFrom,\n capitalize,\n copyOwnProperties,\n getHash,\n compare,\n getOption,\n impliedNamespace,\n isValidName,\n jsonEnd,\n newBuffer,\n objectValues,\n qualify,\n toMap,\n singleIndexOf,\n hasDuplicates,\n unqualify,\n BufferPool,\n Lcg,\n OrderedQueue,\n Tap\n };\n }\n});\n\n// node_modules/avsc/lib/types.js\nvar require_types = __commonJS({\n \"node_modules/avsc/lib/types.js\"(exports, module) {\n \"use strict\";\n var utils = require_utils();\n var buffer = __import_BUFFER;\n var util = __import_UTIL;\n var Buffer2 = buffer.Buffer;\n var SlowBuffer = buffer.SlowBuffer;\n var Tap = utils.Tap;\n var debug = util.debuglog(\"avsc:types\");\n var f2 = util.format;\n var TYPES = {\n \"array\": ArrayType,\n \"boolean\": BooleanType,\n \"bytes\": BytesType,\n \"double\": DoubleType,\n \"enum\": EnumType,\n \"error\": RecordType,\n \"fixed\": FixedType,\n \"float\": FloatType,\n \"int\": IntType,\n \"long\": LongType,\n \"map\": MapType,\n \"null\": NullType,\n \"record\": RecordType,\n \"string\": StringType\n };\n var RANDOM = new utils.Lcg();\n var TAP = new Tap(new SlowBuffer(1024));\n var LOGICAL_TYPE = null;\n var UNDERLYING_TYPES = [];\n function Type(schema, opts) {\n var type;\n if (LOGICAL_TYPE) {\n type = LOGICAL_TYPE;\n UNDERLYING_TYPES.push([LOGICAL_TYPE, this]);\n LOGICAL_TYPE = null;\n } else {\n type = this;\n }\n this._hash = new Hash();\n this.name = void 0;\n this.aliases = void 0;\n this.doc = schema && schema.doc ? \"\" + schema.doc : void 0;\n if (schema) {\n var name = schema.name;\n var namespace = schema.namespace === void 0 ? opts && opts.namespace : schema.namespace;\n if (name !== void 0) {\n name = maybeQualify(name, namespace);\n if (isPrimitive(name)) {\n throw new Error(f2(\"cannot rename primitive type: %j\", name));\n }\n var registry = opts && opts.registry;\n if (registry) {\n if (registry[name] !== void 0) {\n throw new Error(f2(\"duplicate type name: %s\", name));\n }\n registry[name] = type;\n }\n } else if (opts && opts.noAnonymousTypes) {\n throw new Error(f2(\"missing name property in schema: %j\", schema));\n }\n this.name = name;\n this.aliases = schema.aliases ? schema.aliases.map(function(s) {\n return maybeQualify(s, namespace);\n }) : [];\n }\n }\n Type.forSchema = function(schema, opts) {\n opts = opts || {};\n opts.registry = opts.registry || {};\n var UnionType2 = function(wrapUnions) {\n if (wrapUnions === true) {\n wrapUnions = \"always\";\n } else if (wrapUnions === false) {\n wrapUnions = \"never\";\n } else if (wrapUnions === void 0) {\n wrapUnions = \"auto\";\n } else if (typeof wrapUnions == \"string\") {\n wrapUnions = wrapUnions.toLowerCase();\n }\n switch (wrapUnions) {\n case \"always\":\n return WrappedUnionType;\n case \"never\":\n return UnwrappedUnionType;\n case \"auto\":\n return void 0;\n default:\n throw new Error(f2(\"invalid wrap unions option: %j\", wrapUnions));\n }\n }(opts.wrapUnions);\n if (schema === null) {\n throw new Error('invalid type: null (did you mean \"null\"?)');\n }\n if (Type.isType(schema)) {\n return schema;\n }\n var type;\n if (opts.typeHook && (type = opts.typeHook(schema, opts))) {\n if (!Type.isType(type)) {\n throw new Error(f2(\"invalid typehook return value: %j\", type));\n }\n return type;\n }\n if (typeof schema == \"string\") {\n schema = maybeQualify(schema, opts.namespace);\n type = opts.registry[schema];\n if (type) {\n return type;\n }\n if (isPrimitive(schema)) {\n return opts.registry[schema] = Type.forSchema({ type: schema }, opts);\n }\n throw new Error(f2(\"undefined type name: %s\", schema));\n }\n if (schema.logicalType && opts.logicalTypes && !LOGICAL_TYPE) {\n var DerivedType = opts.logicalTypes[schema.logicalType];\n if (DerivedType) {\n var namespace = opts.namespace;\n var registry = {};\n Object.keys(opts.registry).forEach(function(key) {\n registry[key] = opts.registry[key];\n });\n try {\n debug(\"instantiating logical type for %s\", schema.logicalType);\n return new DerivedType(schema, opts);\n } catch (err) {\n debug(\"failed to instantiate logical type for %s\", schema.logicalType);\n if (opts.assertLogicalTypes) {\n throw err;\n }\n LOGICAL_TYPE = null;\n opts.namespace = namespace;\n opts.registry = registry;\n }\n }\n }\n if (Array.isArray(schema)) {\n var logicalType = LOGICAL_TYPE;\n LOGICAL_TYPE = null;\n var types = schema.map(function(obj) {\n return Type.forSchema(obj, opts);\n });\n if (!UnionType2) {\n UnionType2 = isAmbiguous(types) ? WrappedUnionType : UnwrappedUnionType;\n }\n LOGICAL_TYPE = logicalType;\n type = new UnionType2(types, opts);\n } else {\n type = function(typeName) {\n var Type2 = TYPES[typeName];\n if (Type2 === void 0) {\n throw new Error(f2(\"unknown type: %j\", typeName));\n }\n return new Type2(schema, opts);\n }(schema.type);\n }\n return type;\n };\n Type.forValue = function(val, opts) {\n opts = opts || {};\n opts.emptyArrayType = opts.emptyArrayType || Type.forSchema({\n type: \"array\",\n items: \"null\"\n });\n if (opts.valueHook) {\n var type = opts.valueHook(val, opts);\n if (type !== void 0) {\n if (!Type.isType(type)) {\n throw new Error(f2(\"invalid value hook return value: %j\", type));\n }\n return type;\n }\n }\n switch (typeof val) {\n case \"string\":\n return Type.forSchema(\"string\", opts);\n case \"boolean\":\n return Type.forSchema(\"boolean\", opts);\n case \"number\":\n if ((val | 0) === val) {\n return Type.forSchema(\"int\", opts);\n } else if (Math.abs(val) < 9007199254740991) {\n return Type.forSchema(\"float\", opts);\n }\n return Type.forSchema(\"double\", opts);\n case \"object\":\n if (val === null) {\n return Type.forSchema(\"null\", opts);\n } else if (Array.isArray(val)) {\n if (!val.length) {\n return opts.emptyArrayType;\n }\n return Type.forSchema({\n type: \"array\",\n items: Type.forTypes(\n val.map(function(v2) {\n return Type.forValue(v2, opts);\n }),\n opts\n )\n }, opts);\n } else if (Buffer2.isBuffer(val)) {\n return Type.forSchema(\"bytes\", opts);\n }\n var fieldNames = Object.keys(val);\n if (fieldNames.some(function(s) {\n return !utils.isValidName(s);\n })) {\n return Type.forSchema({\n type: \"map\",\n values: Type.forTypes(fieldNames.map(function(s) {\n return Type.forValue(val[s], opts);\n }), opts)\n }, opts);\n }\n return Type.forSchema({\n type: \"record\",\n fields: fieldNames.map(function(s) {\n return { name: s, type: Type.forValue(val[s], opts) };\n })\n }, opts);\n default:\n throw new Error(f2(\"cannot infer type from: %j\", val));\n }\n };\n Type.forTypes = function(types, opts) {\n if (!types.length) {\n throw new Error(\"no types to combine\");\n }\n if (types.length === 1) {\n return types[0];\n }\n opts = opts || {};\n var expanded = [];\n var numWrappedUnions = 0;\n var isValidWrappedUnion = true;\n types.forEach(function(type) {\n switch (type.typeName) {\n case \"union:unwrapped\":\n isValidWrappedUnion = false;\n expanded = expanded.concat(type.types);\n break;\n case \"union:wrapped\":\n numWrappedUnions++;\n expanded = expanded.concat(type.types);\n break;\n case \"null\":\n expanded.push(type);\n break;\n default:\n isValidWrappedUnion = false;\n expanded.push(type);\n }\n });\n if (numWrappedUnions) {\n if (!isValidWrappedUnion) {\n throw new Error(\"cannot combine wrapped union\");\n }\n var branchTypes = {};\n expanded.forEach(function(type) {\n var name = type.branchName;\n var branchType = branchTypes[name];\n if (!branchType) {\n branchTypes[name] = type;\n } else if (!type.equals(branchType)) {\n throw new Error(\"inconsistent branch type\");\n }\n });\n var wrapUnions = opts.wrapUnions;\n var unionType;\n opts.wrapUnions = true;\n try {\n unionType = Type.forSchema(Object.keys(branchTypes).map(function(name) {\n return branchTypes[name];\n }), opts);\n } catch (err) {\n opts.wrapUnions = wrapUnions;\n throw err;\n }\n opts.wrapUnions = wrapUnions;\n return unionType;\n }\n var bucketized = {};\n expanded.forEach(function(type) {\n var bucket = getTypeBucket(type);\n var bucketTypes = bucketized[bucket];\n if (!bucketTypes) {\n bucketized[bucket] = bucketTypes = [];\n }\n bucketTypes.push(type);\n });\n var buckets = Object.keys(bucketized);\n var augmented = buckets.map(function(bucket) {\n var bucketTypes = bucketized[bucket];\n if (bucketTypes.length === 1) {\n return bucketTypes[0];\n } else {\n switch (bucket) {\n case \"null\":\n case \"boolean\":\n return bucketTypes[0];\n case \"number\":\n return combineNumbers(bucketTypes);\n case \"string\":\n return combineStrings(bucketTypes, opts);\n case \"buffer\":\n return combineBuffers(bucketTypes, opts);\n case \"array\":\n bucketTypes = bucketTypes.filter(function(t) {\n return t !== opts.emptyArrayType;\n });\n if (!bucketTypes.length) {\n return opts.emptyArrayType;\n }\n return Type.forSchema({\n type: \"array\",\n items: Type.forTypes(bucketTypes.map(function(t) {\n return t.itemsType;\n }), opts)\n }, opts);\n default:\n return combineObjects(bucketTypes, opts);\n }\n }\n });\n if (augmented.length === 1) {\n return augmented[0];\n } else {\n return Type.forSchema(augmented, opts);\n }\n };\n Type.isType = function() {\n var l = arguments.length;\n if (!l) {\n return false;\n }\n var any = arguments[0];\n if (!any || typeof any._update != \"function\" || typeof any.fingerprint != \"function\") {\n return false;\n }\n if (l === 1) {\n return true;\n }\n var typeName = any.typeName;\n var i;\n for (i = 1; i < l; i++) {\n if (typeName.indexOf(arguments[i]) === 0) {\n return true;\n }\n }\n return false;\n };\n Type.__reset = function(size) {\n debug(\"resetting type buffer to %d\", size);\n TAP.buf = new SlowBuffer(size);\n };\n Object.defineProperty(Type.prototype, \"branchName\", {\n enumerable: true,\n get: function() {\n var type = Type.isType(this, \"logical\") ? this.underlyingType : this;\n if (type.name) {\n return type.name;\n }\n if (Type.isType(type, \"abstract\")) {\n return type._concreteTypeName;\n }\n return Type.isType(type, \"union\") ? void 0 : type.typeName;\n }\n });\n Type.prototype.clone = function(val, opts) {\n if (opts) {\n opts = {\n coerce: !!opts.coerceBuffers | 0,\n // Coerce JSON to Buffer.\n fieldHook: opts.fieldHook,\n qualifyNames: !!opts.qualifyNames,\n skip: !!opts.skipMissingFields,\n wrap: !!opts.wrapUnions | 0\n // Wrap first match into union.\n };\n return this._copy(val, opts);\n } else {\n return this.fromBuffer(this.toBuffer(val));\n }\n };\n Type.prototype.compare = utils.abstractFunction;\n Type.prototype.compareBuffers = function(buf1, buf2) {\n return this._match(new Tap(buf1), new Tap(buf2));\n };\n Type.prototype.createResolver = function(type, opts) {\n if (!Type.isType(type)) {\n throw new Error(f2(\"not a type: %j\", type));\n }\n if (!Type.isType(this, \"union\", \"logical\") && Type.isType(type, \"logical\")) {\n return this.createResolver(type.underlyingType, opts);\n }\n opts = opts || {};\n opts.registry = opts.registry || {};\n var resolver, key;\n if (Type.isType(this, \"record\", \"error\") && Type.isType(type, \"record\", \"error\")) {\n key = this.name + \":\" + type.name;\n resolver = opts.registry[key];\n if (resolver) {\n return resolver;\n }\n }\n resolver = new Resolver(this);\n if (key) {\n opts.registry[key] = resolver;\n }\n if (Type.isType(type, \"union\")) {\n var resolvers = type.types.map(function(t) {\n return this.createResolver(t, opts);\n }, this);\n resolver._read = function(tap) {\n var index = tap.readLong();\n var resolver2 = resolvers[index];\n if (resolver2 === void 0) {\n throw new Error(f2(\"invalid union index: %s\", index));\n }\n return resolvers[index]._read(tap);\n };\n } else {\n this._update(resolver, type, opts);\n }\n if (!resolver._read) {\n throw new Error(f2(\"cannot read %s as %s\", type, this));\n }\n return Object.freeze(resolver);\n };\n Type.prototype.decode = function(buf, pos, resolver) {\n var tap = new Tap(buf, pos);\n var val = readValue(this, tap, resolver);\n if (!tap.isValid()) {\n return { value: void 0, offset: -1 };\n }\n return { value: val, offset: tap.pos };\n };\n Type.prototype.encode = function(val, buf, pos) {\n var tap = new Tap(buf, pos);\n this._write(tap, val);\n if (!tap.isValid()) {\n return buf.length - tap.pos;\n }\n return tap.pos;\n };\n Type.prototype.equals = function(type, opts) {\n var canon = (\n // Canonical equality.\n Type.isType(type) && this.fingerprint().equals(type.fingerprint())\n );\n if (!canon || !(opts && opts.strict)) {\n return canon;\n }\n return JSON.stringify(this.schema({ exportAttrs: true })) === JSON.stringify(type.schema({ exportAttrs: true }));\n };\n Type.prototype.fingerprint = function(algorithm) {\n if (!algorithm) {\n if (!this._hash.str) {\n var schemaStr = JSON.stringify(this.schema());\n this._hash.str = utils.getHash(schemaStr).toString(\"binary\");\n }\n return utils.bufferFrom(this._hash.str, \"binary\");\n } else {\n return utils.getHash(JSON.stringify(this.schema()), algorithm);\n }\n };\n Type.prototype.fromBuffer = function(buf, resolver, noCheck) {\n var tap = new Tap(buf);\n var val = readValue(this, tap, resolver, noCheck);\n if (!tap.isValid()) {\n throw new Error(\"truncated buffer\");\n }\n if (!noCheck && tap.pos < buf.length) {\n throw new Error(\"trailing data\");\n }\n return val;\n };\n Type.prototype.fromString = function(str) {\n return this._copy(JSON.parse(str), { coerce: 2 });\n };\n Type.prototype.inspect = function() {\n var typeName = this.typeName;\n var className = getClassName(typeName);\n if (isPrimitive(typeName)) {\n return f2(\"<%s>\", className);\n } else {\n var obj = this.schema({ exportAttrs: true, noDeref: true });\n if (typeof obj == \"object\" && !Type.isType(this, \"logical\")) {\n obj.type = void 0;\n }\n return f2(\"<%s %j>\", className, obj);\n }\n };\n Type.prototype.isValid = function(val, opts) {\n var flags = (opts && opts.noUndeclaredFields) | 0;\n var errorHook = opts && opts.errorHook;\n var hook, path;\n if (errorHook) {\n path = [];\n hook = function(any, type) {\n errorHook.call(this, path.slice(), any, type, val);\n };\n }\n return this._check(val, flags, hook, path);\n };\n Type.prototype.random = utils.abstractFunction;\n Type.prototype.schema = function(opts) {\n return this._attrs({\n exportAttrs: !!(opts && opts.exportAttrs),\n noDeref: !!(opts && opts.noDeref)\n });\n };\n Type.prototype.toBuffer = function(val) {\n TAP.pos = 0;\n this._write(TAP, val);\n var buf = utils.newBuffer(TAP.pos);\n if (TAP.isValid()) {\n TAP.buf.copy(buf, 0, 0, TAP.pos);\n } else {\n this._write(new Tap(buf), val);\n }\n return buf;\n };\n Type.prototype.toJSON = function() {\n return this.schema({ exportAttrs: true });\n };\n Type.prototype.toString = function(val) {\n if (val === void 0) {\n return JSON.stringify(this.schema({ noDeref: true }));\n }\n return JSON.stringify(this._copy(val, { coerce: 3 }));\n };\n Type.prototype.wrap = function(val) {\n var Branch = this._branchConstructor;\n return Branch === null ? null : new Branch(val);\n };\n Type.prototype._attrs = function(opts) {\n opts.derefed = opts.derefed || {};\n var name = this.name;\n if (name !== void 0) {\n if (opts.noDeref || opts.derefed[name]) {\n return name;\n }\n opts.derefed[name] = true;\n }\n var schema = {};\n if (this.name !== void 0) {\n schema.name = name;\n }\n schema.type = this.typeName;\n var derefedSchema = this._deref(schema, opts);\n if (derefedSchema !== void 0) {\n schema = derefedSchema;\n }\n if (opts.exportAttrs) {\n if (this.aliases && this.aliases.length) {\n schema.aliases = this.aliases;\n }\n if (this.doc !== void 0) {\n schema.doc = this.doc;\n }\n }\n return schema;\n };\n Type.prototype._createBranchConstructor = function() {\n var name = this.branchName;\n if (name === \"null\") {\n return null;\n }\n var attr = ~name.indexOf(\".\") ? \"this['\" + name + \"']\" : \"this.\" + name;\n var body = \"return function Branch$(val) { \" + attr + \" = val; };\";\n var Branch = new Function(body)();\n Branch.type = this;\n Branch.prototype.unwrap = new Function(\"return \" + attr + \";\");\n Branch.prototype.unwrapped = Branch.prototype.unwrap;\n return Branch;\n };\n Type.prototype._peek = function(tap) {\n var pos = tap.pos;\n var val = this._read(tap);\n tap.pos = pos;\n return val;\n };\n Type.prototype._check = utils.abstractFunction;\n Type.prototype._copy = utils.abstractFunction;\n Type.prototype._deref = utils.abstractFunction;\n Type.prototype._match = utils.abstractFunction;\n Type.prototype._read = utils.abstractFunction;\n Type.prototype._skip = utils.abstractFunction;\n Type.prototype._update = utils.abstractFunction;\n Type.prototype._write = utils.abstractFunction;\n Type.prototype.getAliases = function() {\n return this.aliases;\n };\n Type.prototype.getFingerprint = Type.prototype.fingerprint;\n Type.prototype.getName = function(asBranch) {\n return this.name || !asBranch ? this.name : this.branchName;\n };\n Type.prototype.getSchema = Type.prototype.schema;\n Type.prototype.getTypeName = function() {\n return this.typeName;\n };\n function PrimitiveType(noFreeze) {\n Type.call(this);\n this._branchConstructor = this._createBranchConstructor();\n if (!noFreeze) {\n Object.freeze(this);\n }\n }\n util.inherits(PrimitiveType, Type);\n PrimitiveType.prototype._update = function(resolver, type) {\n if (type.typeName === this.typeName) {\n resolver._read = this._read;\n }\n };\n PrimitiveType.prototype._copy = function(val) {\n this._check(val, void 0, throwInvalidError);\n return val;\n };\n PrimitiveType.prototype._deref = function() {\n return this.typeName;\n };\n PrimitiveType.prototype.compare = utils.compare;\n function NullType() {\n PrimitiveType.call(this);\n }\n util.inherits(NullType, PrimitiveType);\n NullType.prototype._check = function(val, flags, hook) {\n var b2 = val === null;\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n NullType.prototype._read = function() {\n return null;\n };\n NullType.prototype._skip = function() {\n };\n NullType.prototype._write = function(tap, val) {\n if (val !== null) {\n throwInvalidError(val, this);\n }\n };\n NullType.prototype._match = function() {\n return 0;\n };\n NullType.prototype.compare = NullType.prototype._match;\n NullType.prototype.typeName = \"null\";\n NullType.prototype.random = NullType.prototype._read;\n function BooleanType() {\n PrimitiveType.call(this);\n }\n util.inherits(BooleanType, PrimitiveType);\n BooleanType.prototype._check = function(val, flags, hook) {\n var b2 = typeof val == \"boolean\";\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n BooleanType.prototype._read = function(tap) {\n return tap.readBoolean();\n };\n BooleanType.prototype._skip = function(tap) {\n tap.skipBoolean();\n };\n BooleanType.prototype._write = function(tap, val) {\n if (typeof val != \"boolean\") {\n throwInvalidError(val, this);\n }\n tap.writeBoolean(val);\n };\n BooleanType.prototype._match = function(tap1, tap2) {\n return tap1.matchBoolean(tap2);\n };\n BooleanType.prototype.typeName = \"boolean\";\n BooleanType.prototype.random = function() {\n return RANDOM.nextBoolean();\n };\n function IntType() {\n PrimitiveType.call(this);\n }\n util.inherits(IntType, PrimitiveType);\n IntType.prototype._check = function(val, flags, hook) {\n var b2 = val === (val | 0);\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n IntType.prototype._read = function(tap) {\n return tap.readInt();\n };\n IntType.prototype._skip = function(tap) {\n tap.skipInt();\n };\n IntType.prototype._write = function(tap, val) {\n if (val !== (val | 0)) {\n throwInvalidError(val, this);\n }\n tap.writeInt(val);\n };\n IntType.prototype._match = function(tap1, tap2) {\n return tap1.matchInt(tap2);\n };\n IntType.prototype.typeName = \"int\";\n IntType.prototype.random = function() {\n return RANDOM.nextInt(1e3) | 0;\n };\n function LongType() {\n PrimitiveType.call(this);\n }\n util.inherits(LongType, PrimitiveType);\n LongType.prototype._check = function(val, flags, hook) {\n var b2 = typeof val == \"number\" && val % 1 === 0 && isSafeLong(val);\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n LongType.prototype._read = function(tap) {\n var n = tap.readLong();\n if (!isSafeLong(n)) {\n throw new Error(\"potential precision loss\");\n }\n return n;\n };\n LongType.prototype._skip = function(tap) {\n tap.skipLong();\n };\n LongType.prototype._write = function(tap, val) {\n if (typeof val != \"number\" || val % 1 || !isSafeLong(val)) {\n throwInvalidError(val, this);\n }\n tap.writeLong(val);\n };\n LongType.prototype._match = function(tap1, tap2) {\n return tap1.matchLong(tap2);\n };\n LongType.prototype._update = function(resolver, type) {\n switch (type.typeName) {\n case \"int\":\n resolver._read = type._read;\n break;\n case \"abstract:long\":\n case \"long\":\n resolver._read = this._read;\n }\n };\n LongType.prototype.typeName = \"long\";\n LongType.prototype.random = function() {\n return RANDOM.nextInt();\n };\n LongType.__with = function(methods, noUnpack) {\n methods = methods || {};\n var mapping = {\n toBuffer: \"_toBuffer\",\n fromBuffer: \"_fromBuffer\",\n fromJSON: \"_fromJSON\",\n toJSON: \"_toJSON\",\n isValid: \"_isValid\",\n compare: \"compare\"\n };\n var type = new AbstractLongType(noUnpack);\n Object.keys(mapping).forEach(function(name) {\n if (methods[name] === void 0) {\n throw new Error(f2(\"missing method implementation: %s\", name));\n }\n type[mapping[name]] = methods[name];\n });\n return Object.freeze(type);\n };\n function FloatType() {\n PrimitiveType.call(this);\n }\n util.inherits(FloatType, PrimitiveType);\n FloatType.prototype._check = function(val, flags, hook) {\n var b2 = typeof val == \"number\";\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n FloatType.prototype._read = function(tap) {\n return tap.readFloat();\n };\n FloatType.prototype._skip = function(tap) {\n tap.skipFloat();\n };\n FloatType.prototype._write = function(tap, val) {\n if (typeof val != \"number\") {\n throwInvalidError(val, this);\n }\n tap.writeFloat(val);\n };\n FloatType.prototype._match = function(tap1, tap2) {\n return tap1.matchFloat(tap2);\n };\n FloatType.prototype._update = function(resolver, type) {\n switch (type.typeName) {\n case \"float\":\n case \"int\":\n resolver._read = type._read;\n break;\n case \"abstract:long\":\n case \"long\":\n resolver._read = function(tap) {\n return tap.readLong();\n };\n }\n };\n FloatType.prototype.typeName = \"float\";\n FloatType.prototype.random = function() {\n return RANDOM.nextFloat(1e3);\n };\n function DoubleType() {\n PrimitiveType.call(this);\n }\n util.inherits(DoubleType, PrimitiveType);\n DoubleType.prototype._check = function(val, flags, hook) {\n var b2 = typeof val == \"number\";\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n DoubleType.prototype._read = function(tap) {\n return tap.readDouble();\n };\n DoubleType.prototype._skip = function(tap) {\n tap.skipDouble();\n };\n DoubleType.prototype._write = function(tap, val) {\n if (typeof val != \"number\") {\n throwInvalidError(val, this);\n }\n tap.writeDouble(val);\n };\n DoubleType.prototype._match = function(tap1, tap2) {\n return tap1.matchDouble(tap2);\n };\n DoubleType.prototype._update = function(resolver, type) {\n switch (type.typeName) {\n case \"double\":\n case \"float\":\n case \"int\":\n resolver._read = type._read;\n break;\n case \"abstract:long\":\n case \"long\":\n resolver._read = function(tap) {\n return tap.readLong();\n };\n }\n };\n DoubleType.prototype.typeName = \"double\";\n DoubleType.prototype.random = function() {\n return RANDOM.nextFloat();\n };\n function StringType() {\n PrimitiveType.call(this);\n }\n util.inherits(StringType, PrimitiveType);\n StringType.prototype._check = function(val, flags, hook) {\n var b2 = typeof val == \"string\";\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n StringType.prototype._read = function(tap) {\n return tap.readString();\n };\n StringType.prototype._skip = function(tap) {\n tap.skipString();\n };\n StringType.prototype._write = function(tap, val) {\n if (typeof val != \"string\") {\n throwInvalidError(val, this);\n }\n tap.writeString(val);\n };\n StringType.prototype._match = function(tap1, tap2) {\n return tap1.matchString(tap2);\n };\n StringType.prototype._update = function(resolver, type) {\n switch (type.typeName) {\n case \"bytes\":\n case \"string\":\n resolver._read = this._read;\n }\n };\n StringType.prototype.typeName = \"string\";\n StringType.prototype.random = function() {\n return RANDOM.nextString(RANDOM.nextInt(32));\n };\n function BytesType() {\n PrimitiveType.call(this);\n }\n util.inherits(BytesType, PrimitiveType);\n BytesType.prototype._check = function(val, flags, hook) {\n var b2 = Buffer2.isBuffer(val);\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n BytesType.prototype._read = function(tap) {\n return tap.readBytes();\n };\n BytesType.prototype._skip = function(tap) {\n tap.skipBytes();\n };\n BytesType.prototype._write = function(tap, val) {\n if (!Buffer2.isBuffer(val)) {\n throwInvalidError(val, this);\n }\n tap.writeBytes(val);\n };\n BytesType.prototype._match = function(tap1, tap2) {\n return tap1.matchBytes(tap2);\n };\n BytesType.prototype._update = StringType.prototype._update;\n BytesType.prototype._copy = function(obj, opts) {\n var buf;\n switch ((opts && opts.coerce) | 0) {\n case 3:\n this._check(obj, void 0, throwInvalidError);\n return obj.toString(\"binary\");\n case 2:\n if (typeof obj != \"string\") {\n throw new Error(f2(\"cannot coerce to buffer: %j\", obj));\n }\n buf = utils.bufferFrom(obj, \"binary\");\n this._check(buf, void 0, throwInvalidError);\n return buf;\n case 1:\n if (!isJsonBuffer(obj)) {\n throw new Error(f2(\"cannot coerce to buffer: %j\", obj));\n }\n buf = utils.bufferFrom(obj.data);\n this._check(buf, void 0, throwInvalidError);\n return buf;\n default:\n this._check(obj, void 0, throwInvalidError);\n return utils.bufferFrom(obj);\n }\n };\n BytesType.prototype.compare = Buffer2.compare;\n BytesType.prototype.typeName = \"bytes\";\n BytesType.prototype.random = function() {\n return RANDOM.nextBuffer(RANDOM.nextInt(32));\n };\n function UnionType(schema, opts) {\n Type.call(this);\n if (!Array.isArray(schema)) {\n throw new Error(f2(\"non-array union schema: %j\", schema));\n }\n if (!schema.length) {\n throw new Error(\"empty union\");\n }\n this.types = Object.freeze(schema.map(function(obj) {\n return Type.forSchema(obj, opts);\n }));\n this._branchIndices = {};\n this.types.forEach(function(type, i) {\n if (Type.isType(type, \"union\")) {\n throw new Error(\"unions cannot be directly nested\");\n }\n var branch = type.branchName;\n if (this._branchIndices[branch] !== void 0) {\n throw new Error(f2(\"duplicate union branch name: %j\", branch));\n }\n this._branchIndices[branch] = i;\n }, this);\n }\n util.inherits(UnionType, Type);\n UnionType.prototype._branchConstructor = function() {\n throw new Error(\"unions cannot be directly wrapped\");\n };\n UnionType.prototype._skip = function(tap) {\n this.types[tap.readLong()]._skip(tap);\n };\n UnionType.prototype._match = function(tap1, tap2) {\n var n1 = tap1.readLong();\n var n2 = tap2.readLong();\n if (n1 === n2) {\n return this.types[n1]._match(tap1, tap2);\n } else {\n return n1 < n2 ? -1 : 1;\n }\n };\n UnionType.prototype._deref = function(schema, opts) {\n return this.types.map(function(t) {\n return t._attrs(opts);\n });\n };\n UnionType.prototype.getTypes = function() {\n return this.types;\n };\n function UnwrappedUnionType(schema, opts) {\n UnionType.call(this, schema, opts);\n this._dynamicBranches = null;\n this._bucketIndices = {};\n this.types.forEach(function(type, index) {\n if (Type.isType(type, \"abstract\", \"logical\")) {\n if (!this._dynamicBranches) {\n this._dynamicBranches = [];\n }\n this._dynamicBranches.push({ index, type });\n } else {\n var bucket = getTypeBucket(type);\n if (this._bucketIndices[bucket] !== void 0) {\n throw new Error(f2(\"ambiguous unwrapped union: %j\", this));\n }\n this._bucketIndices[bucket] = index;\n }\n }, this);\n Object.freeze(this);\n }\n util.inherits(UnwrappedUnionType, UnionType);\n UnwrappedUnionType.prototype._getIndex = function(val) {\n var index = this._bucketIndices[getValueBucket(val)];\n if (this._dynamicBranches) {\n index = this._getBranchIndex(val, index);\n }\n return index;\n };\n UnwrappedUnionType.prototype._getBranchIndex = function(any, index) {\n var logicalBranches = this._dynamicBranches;\n var i, l, branch;\n for (i = 0, l = logicalBranches.length; i < l; i++) {\n branch = logicalBranches[i];\n if (branch.type._check(any)) {\n if (index === void 0) {\n index = branch.index;\n } else {\n throw new Error(\"ambiguous conversion\");\n }\n }\n }\n return index;\n };\n UnwrappedUnionType.prototype._check = function(val, flags, hook, path) {\n var index = this._getIndex(val);\n var b2 = index !== void 0;\n if (b2) {\n return this.types[index]._check(val, flags, hook, path);\n }\n if (hook) {\n hook(val, this);\n }\n return b2;\n };\n UnwrappedUnionType.prototype._read = function(tap) {\n var index = tap.readLong();\n var branchType = this.types[index];\n if (branchType) {\n return branchType._read(tap);\n } else {\n throw new Error(f2(\"invalid union index: %s\", index));\n }\n };\n UnwrappedUnionType.prototype._write = function(tap, val) {\n var index = this._getIndex(val);\n if (index === void 0) {\n throwInvalidError(val, this);\n }\n tap.writeLong(index);\n if (val !== null) {\n this.types[index]._write(tap, val);\n }\n };\n UnwrappedUnionType.prototype._update = function(resolver, type, opts) {\n var i, l, typeResolver;\n for (i = 0, l = this.types.length; i < l; i++) {\n try {\n typeResolver = this.types[i].createResolver(type, opts);\n } catch (err) {\n continue;\n }\n resolver._read = function(tap) {\n return typeResolver._read(tap);\n };\n return;\n }\n };\n UnwrappedUnionType.prototype._copy = function(val, opts) {\n var coerce = opts && opts.coerce | 0;\n var wrap = opts && opts.wrap | 0;\n var index;\n if (wrap === 2) {\n index = 0;\n } else {\n switch (coerce) {\n case 1:\n if (isJsonBuffer(val) && this._bucketIndices.buffer !== void 0) {\n index = this._bucketIndices.buffer;\n } else {\n index = this._getIndex(val);\n }\n break;\n case 2:\n if (val === null) {\n index = this._bucketIndices[\"null\"];\n } else if (typeof val === \"object\") {\n var keys = Object.keys(val);\n if (keys.length === 1) {\n index = this._branchIndices[keys[0]];\n val = val[keys[0]];\n }\n }\n break;\n default:\n index = this._getIndex(val);\n }\n if (index === void 0) {\n throwInvalidError(val, this);\n }\n }\n var type = this.types[index];\n if (val === null || wrap === 3) {\n return type._copy(val, opts);\n } else {\n switch (coerce) {\n case 3:\n var obj = {};\n obj[type.branchName] = type._copy(val, opts);\n return obj;\n default:\n return type._copy(val, opts);\n }\n }\n };\n UnwrappedUnionType.prototype.compare = function(val1, val2) {\n var index1 = this._getIndex(val1);\n var index2 = this._getIndex(val2);\n if (index1 === void 0) {\n throwInvalidError(val1, this);\n } else if (index2 === void 0) {\n throwInvalidError(val2, this);\n } else if (index1 === index2) {\n return this.types[index1].compare(val1, val2);\n } else {\n return utils.compare(index1, index2);\n }\n };\n UnwrappedUnionType.prototype.typeName = \"union:unwrapped\";\n UnwrappedUnionType.prototype.random = function() {\n var index = RANDOM.nextInt(this.types.length);\n return this.types[index].random();\n };\n function WrappedUnionType(schema, opts) {\n UnionType.call(this, schema, opts);\n Object.freeze(this);\n }\n util.inherits(WrappedUnionType, UnionType);\n WrappedUnionType.prototype._check = function(val, flags, hook, path) {\n var b2 = false;\n if (val === null) {\n b2 = this._branchIndices[\"null\"] !== void 0;\n } else if (typeof val == \"object\") {\n var keys = Object.keys(val);\n if (keys.length === 1) {\n var name = keys[0];\n var index = this._branchIndices[name];\n if (index !== void 0) {\n if (hook) {\n path.push(name);\n b2 = this.types[index]._check(val[name], flags, hook, path);\n path.pop();\n return b2;\n } else {\n return this.types[index]._check(val[name], flags);\n }\n }\n }\n }\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n WrappedUnionType.prototype._read = function(tap) {\n var type = this.types[tap.readLong()];\n if (!type) {\n throw new Error(f2(\"invalid union index\"));\n }\n var Branch = type._branchConstructor;\n if (Branch === null) {\n return null;\n } else {\n return new Branch(type._read(tap));\n }\n };\n WrappedUnionType.prototype._write = function(tap, val) {\n var index, keys, name;\n if (val === null) {\n index = this._branchIndices[\"null\"];\n if (index === void 0) {\n throwInvalidError(val, this);\n }\n tap.writeLong(index);\n } else {\n keys = Object.keys(val);\n if (keys.length === 1) {\n name = keys[0];\n index = this._branchIndices[name];\n }\n if (index === void 0) {\n throwInvalidError(val, this);\n }\n tap.writeLong(index);\n this.types[index]._write(tap, val[name]);\n }\n };\n WrappedUnionType.prototype._update = function(resolver, type, opts) {\n var i, l, typeResolver, Branch;\n for (i = 0, l = this.types.length; i < l; i++) {\n try {\n typeResolver = this.types[i].createResolver(type, opts);\n } catch (err) {\n continue;\n }\n Branch = this.types[i]._branchConstructor;\n if (Branch) {\n resolver._read = function(tap) {\n return new Branch(typeResolver._read(tap));\n };\n } else {\n resolver._read = function() {\n return null;\n };\n }\n return;\n }\n };\n WrappedUnionType.prototype._copy = function(val, opts) {\n var wrap = opts && opts.wrap | 0;\n if (wrap === 2) {\n var firstType = this.types[0];\n if (val === null && firstType.typeName === \"null\") {\n return null;\n }\n return new firstType._branchConstructor(firstType._copy(val, opts));\n }\n if (val === null && this._branchIndices[\"null\"] !== void 0) {\n return null;\n }\n var i, l, obj;\n if (typeof val == \"object\") {\n var keys = Object.keys(val);\n if (keys.length === 1) {\n var name = keys[0];\n i = this._branchIndices[name];\n if (i === void 0 && opts.qualifyNames) {\n var j2, type;\n for (j2 = 0, l = this.types.length; j2 < l; j2++) {\n type = this.types[j2];\n if (type.name && name === utils.unqualify(type.name)) {\n i = j2;\n break;\n }\n }\n }\n if (i !== void 0) {\n obj = this.types[i]._copy(val[name], opts);\n }\n }\n }\n if (wrap === 1 && obj === void 0) {\n i = 0;\n l = this.types.length;\n while (i < l && obj === void 0) {\n try {\n obj = this.types[i]._copy(val, opts);\n } catch (err) {\n i++;\n }\n }\n }\n if (obj !== void 0) {\n return wrap === 3 ? obj : new this.types[i]._branchConstructor(obj);\n }\n throwInvalidError(val, this);\n };\n WrappedUnionType.prototype.compare = function(val1, val2) {\n var name1 = val1 === null ? \"null\" : Object.keys(val1)[0];\n var name2 = val2 === null ? \"null\" : Object.keys(val2)[0];\n var index = this._branchIndices[name1];\n if (name1 === name2) {\n return name1 === \"null\" ? 0 : this.types[index].compare(val1[name1], val2[name1]);\n } else {\n return utils.compare(index, this._branchIndices[name2]);\n }\n };\n WrappedUnionType.prototype.typeName = \"union:wrapped\";\n WrappedUnionType.prototype.random = function() {\n var index = RANDOM.nextInt(this.types.length);\n var type = this.types[index];\n var Branch = type._branchConstructor;\n if (!Branch) {\n return null;\n }\n return new Branch(type.random());\n };\n function EnumType(schema, opts) {\n Type.call(this, schema, opts);\n if (!Array.isArray(schema.symbols) || !schema.symbols.length) {\n throw new Error(f2(\"invalid enum symbols: %j\", schema.symbols));\n }\n this.symbols = Object.freeze(schema.symbols.slice());\n this._indices = {};\n this.symbols.forEach(function(symbol, i) {\n if (!utils.isValidName(symbol)) {\n throw new Error(f2(\"invalid %s symbol: %j\", this, symbol));\n }\n if (this._indices[symbol] !== void 0) {\n throw new Error(f2(\"duplicate %s symbol: %j\", this, symbol));\n }\n this._indices[symbol] = i;\n }, this);\n this.default = schema.default;\n if (this.default !== void 0 && this._indices[this.default] === void 0) {\n throw new Error(f2(\"invalid %s default: %j\", this, this.default));\n }\n this._branchConstructor = this._createBranchConstructor();\n Object.freeze(this);\n }\n util.inherits(EnumType, Type);\n EnumType.prototype._check = function(val, flags, hook) {\n var b2 = this._indices[val] !== void 0;\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n EnumType.prototype._read = function(tap) {\n var index = tap.readLong();\n var symbol = this.symbols[index];\n if (symbol === void 0) {\n throw new Error(f2(\"invalid %s enum index: %s\", this.name, index));\n }\n return symbol;\n };\n EnumType.prototype._skip = function(tap) {\n tap.skipLong();\n };\n EnumType.prototype._write = function(tap, val) {\n var index = this._indices[val];\n if (index === void 0) {\n throwInvalidError(val, this);\n }\n tap.writeLong(index);\n };\n EnumType.prototype._match = function(tap1, tap2) {\n return tap1.matchLong(tap2);\n };\n EnumType.prototype.compare = function(val1, val2) {\n return utils.compare(this._indices[val1], this._indices[val2]);\n };\n EnumType.prototype._update = function(resolver, type, opts) {\n var symbols = this.symbols;\n if (type.typeName === \"enum\" && hasCompatibleName(this, type, !opts.ignoreNamespaces) && (type.symbols.every(function(s) {\n return ~symbols.indexOf(s);\n }) || this.default !== void 0)) {\n resolver.symbols = type.symbols.map(function(s) {\n return this._indices[s] === void 0 ? this.default : s;\n }, this);\n resolver._read = type._read;\n }\n };\n EnumType.prototype._copy = function(val) {\n this._check(val, void 0, throwInvalidError);\n return val;\n };\n EnumType.prototype._deref = function(schema) {\n schema.symbols = this.symbols;\n };\n EnumType.prototype.getSymbols = function() {\n return this.symbols;\n };\n EnumType.prototype.typeName = \"enum\";\n EnumType.prototype.random = function() {\n return RANDOM.choice(this.symbols);\n };\n function FixedType(schema, opts) {\n Type.call(this, schema, opts);\n if (schema.size !== (schema.size | 0) || schema.size < 0) {\n throw new Error(f2(\"invalid %s size\", this.branchName));\n }\n this.size = schema.size | 0;\n this._branchConstructor = this._createBranchConstructor();\n Object.freeze(this);\n }\n util.inherits(FixedType, Type);\n FixedType.prototype._check = function(val, flags, hook) {\n var b2 = Buffer2.isBuffer(val) && val.length === this.size;\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n FixedType.prototype._read = function(tap) {\n return tap.readFixed(this.size);\n };\n FixedType.prototype._skip = function(tap) {\n tap.skipFixed(this.size);\n };\n FixedType.prototype._write = function(tap, val) {\n if (!Buffer2.isBuffer(val) || val.length !== this.size) {\n throwInvalidError(val, this);\n }\n tap.writeFixed(val, this.size);\n };\n FixedType.prototype._match = function(tap1, tap2) {\n return tap1.matchFixed(tap2, this.size);\n };\n FixedType.prototype.compare = Buffer2.compare;\n FixedType.prototype._update = function(resolver, type, opts) {\n if (type.typeName === \"fixed\" && this.size === type.size && hasCompatibleName(this, type, !opts.ignoreNamespaces)) {\n resolver.size = this.size;\n resolver._read = this._read;\n }\n };\n FixedType.prototype._copy = BytesType.prototype._copy;\n FixedType.prototype._deref = function(schema) {\n schema.size = this.size;\n };\n FixedType.prototype.getSize = function() {\n return this.size;\n };\n FixedType.prototype.typeName = \"fixed\";\n FixedType.prototype.random = function() {\n return RANDOM.nextBuffer(this.size);\n };\n function MapType(schema, opts) {\n Type.call(this);\n if (!schema.values) {\n throw new Error(f2(\"missing map values: %j\", schema));\n }\n this.valuesType = Type.forSchema(schema.values, opts);\n this._branchConstructor = this._createBranchConstructor();\n Object.freeze(this);\n }\n util.inherits(MapType, Type);\n MapType.prototype._check = function(val, flags, hook, path) {\n if (!val || typeof val != \"object\" || Array.isArray(val)) {\n if (hook) {\n hook(val, this);\n }\n return false;\n }\n var keys = Object.keys(val);\n var b2 = true;\n var i, l, j2, key;\n if (hook) {\n j2 = path.length;\n path.push(\"\");\n for (i = 0, l = keys.length; i < l; i++) {\n key = path[j2] = keys[i];\n if (!this.valuesType._check(val[key], flags, hook, path)) {\n b2 = false;\n }\n }\n path.pop();\n } else {\n for (i = 0, l = keys.length; i < l; i++) {\n if (!this.valuesType._check(val[keys[i]], flags)) {\n return false;\n }\n }\n }\n return b2;\n };\n MapType.prototype._read = function(tap) {\n var values = this.valuesType;\n var val = {};\n var n;\n while (n = readArraySize(tap)) {\n while (n--) {\n var key = tap.readString();\n val[key] = values._read(tap);\n }\n }\n return val;\n };\n MapType.prototype._skip = function(tap) {\n var values = this.valuesType;\n var len, n;\n while (n = tap.readLong()) {\n if (n < 0) {\n len = tap.readLong();\n tap.pos += len;\n } else {\n while (n--) {\n tap.skipString();\n values._skip(tap);\n }\n }\n }\n };\n MapType.prototype._write = function(tap, val) {\n if (!val || typeof val != \"object\" || Array.isArray(val)) {\n throwInvalidError(val, this);\n }\n var values = this.valuesType;\n var keys = Object.keys(val);\n var n = keys.length;\n var i, key;\n if (n) {\n tap.writeLong(n);\n for (i = 0; i < n; i++) {\n key = keys[i];\n tap.writeString(key);\n values._write(tap, val[key]);\n }\n }\n tap.writeLong(0);\n };\n MapType.prototype._match = function() {\n throw new Error(\"maps cannot be compared\");\n };\n MapType.prototype._update = function(rsv, type, opts) {\n if (type.typeName === \"map\") {\n rsv.valuesType = this.valuesType.createResolver(type.valuesType, opts);\n rsv._read = this._read;\n }\n };\n MapType.prototype._copy = function(val, opts) {\n if (val && typeof val == \"object\" && !Array.isArray(val)) {\n var values = this.valuesType;\n var keys = Object.keys(val);\n var i, l, key;\n var copy = {};\n for (i = 0, l = keys.length; i < l; i++) {\n key = keys[i];\n copy[key] = values._copy(val[key], opts);\n }\n return copy;\n }\n throwInvalidError(val, this);\n };\n MapType.prototype.compare = MapType.prototype._match;\n MapType.prototype.typeName = \"map\";\n MapType.prototype.getValuesType = function() {\n return this.valuesType;\n };\n MapType.prototype.random = function() {\n var val = {};\n var i, l;\n for (i = 0, l = RANDOM.nextInt(10); i < l; i++) {\n val[RANDOM.nextString(RANDOM.nextInt(20))] = this.valuesType.random();\n }\n return val;\n };\n MapType.prototype._deref = function(schema, opts) {\n schema.values = this.valuesType._attrs(opts);\n };\n function ArrayType(schema, opts) {\n Type.call(this);\n if (!schema.items) {\n throw new Error(f2(\"missing array items: %j\", schema));\n }\n this.itemsType = Type.forSchema(schema.items, opts);\n this._branchConstructor = this._createBranchConstructor();\n Object.freeze(this);\n }\n util.inherits(ArrayType, Type);\n ArrayType.prototype._check = function(val, flags, hook, path) {\n if (!Array.isArray(val)) {\n if (hook) {\n hook(val, this);\n }\n return false;\n }\n var items = this.itemsType;\n var b2 = true;\n var i, l, j2;\n if (hook) {\n j2 = path.length;\n path.push(\"\");\n for (i = 0, l = val.length; i < l; i++) {\n path[j2] = \"\" + i;\n if (!items._check(val[i], flags, hook, path)) {\n b2 = false;\n }\n }\n path.pop();\n } else {\n for (i = 0, l = val.length; i < l; i++) {\n if (!items._check(val[i], flags)) {\n return false;\n }\n }\n }\n return b2;\n };\n ArrayType.prototype._read = function(tap) {\n var items = this.itemsType;\n var i = 0;\n var val, n;\n while (n = tap.readLong()) {\n if (n < 0) {\n n = -n;\n tap.skipLong();\n }\n val = val || new Array(n);\n while (n--) {\n val[i++] = items._read(tap);\n }\n }\n return val || [];\n };\n ArrayType.prototype._skip = function(tap) {\n var items = this.itemsType;\n var len, n;\n while (n = tap.readLong()) {\n if (n < 0) {\n len = tap.readLong();\n tap.pos += len;\n } else {\n while (n--) {\n items._skip(tap);\n }\n }\n }\n };\n ArrayType.prototype._write = function(tap, val) {\n if (!Array.isArray(val)) {\n throwInvalidError(val, this);\n }\n var items = this.itemsType;\n var n = val.length;\n var i;\n if (n) {\n tap.writeLong(n);\n for (i = 0; i < n; i++) {\n items._write(tap, val[i]);\n }\n }\n tap.writeLong(0);\n };\n ArrayType.prototype._match = function(tap1, tap2) {\n var n1 = tap1.readLong();\n var n2 = tap2.readLong();\n var f3;\n while (n1 && n2) {\n f3 = this.itemsType._match(tap1, tap2);\n if (f3) {\n return f3;\n }\n if (!--n1) {\n n1 = readArraySize(tap1);\n }\n if (!--n2) {\n n2 = readArraySize(tap2);\n }\n }\n return utils.compare(n1, n2);\n };\n ArrayType.prototype._update = function(resolver, type, opts) {\n if (type.typeName === \"array\") {\n resolver.itemsType = this.itemsType.createResolver(type.itemsType, opts);\n resolver._read = this._read;\n }\n };\n ArrayType.prototype._copy = function(val, opts) {\n if (!Array.isArray(val)) {\n throwInvalidError(val, this);\n }\n var items = new Array(val.length);\n var i, l;\n for (i = 0, l = val.length; i < l; i++) {\n items[i] = this.itemsType._copy(val[i], opts);\n }\n return items;\n };\n ArrayType.prototype._deref = function(schema, opts) {\n schema.items = this.itemsType._attrs(opts);\n };\n ArrayType.prototype.compare = function(val1, val2) {\n var n1 = val1.length;\n var n2 = val2.length;\n var i, l, f3;\n for (i = 0, l = Math.min(n1, n2); i < l; i++) {\n if (f3 = this.itemsType.compare(val1[i], val2[i])) {\n return f3;\n }\n }\n return utils.compare(n1, n2);\n };\n ArrayType.prototype.getItemsType = function() {\n return this.itemsType;\n };\n ArrayType.prototype.typeName = \"array\";\n ArrayType.prototype.random = function() {\n var arr = [];\n var i, l;\n for (i = 0, l = RANDOM.nextInt(10); i < l; i++) {\n arr.push(this.itemsType.random());\n }\n return arr;\n };\n function RecordType(schema, opts) {\n opts = opts || {};\n var namespace = opts.namespace;\n if (schema.namespace !== void 0) {\n opts.namespace = schema.namespace;\n } else if (schema.name) {\n var ns = utils.impliedNamespace(schema.name);\n if (ns !== void 0) {\n opts.namespace = ns;\n }\n }\n Type.call(this, schema, opts);\n if (!Array.isArray(schema.fields)) {\n throw new Error(f2(\"non-array record fields: %j\", schema.fields));\n }\n if (utils.hasDuplicates(schema.fields, function(f3) {\n return f3.name;\n })) {\n throw new Error(f2(\"duplicate field name: %j\", schema.fields));\n }\n this._fieldsByName = {};\n this.fields = Object.freeze(schema.fields.map(function(f3) {\n var field = new Field(f3, opts);\n this._fieldsByName[field.name] = field;\n return field;\n }, this));\n this._branchConstructor = this._createBranchConstructor();\n this._isError = schema.type === \"error\";\n this.recordConstructor = this._createConstructor(\n opts.errorStackTraces,\n opts.omitRecordMethods\n );\n this._read = this._createReader();\n this._skip = this._createSkipper();\n this._write = this._createWriter();\n this._check = this._createChecker();\n opts.namespace = namespace;\n Object.freeze(this);\n }\n util.inherits(RecordType, Type);\n RecordType.prototype._getConstructorName = function() {\n return this.name ? utils.capitalize(utils.unqualify(this.name)) : this._isError ? \"Error$\" : \"Record$\";\n };\n RecordType.prototype._createConstructor = function(errorStack, plainRecords) {\n var outerArgs = [];\n var innerArgs = [];\n var ds = [];\n var innerBody = \"\";\n var i, l, field, name, defaultValue, hasDefault, stackField;\n for (i = 0, l = this.fields.length; i < l; i++) {\n field = this.fields[i];\n defaultValue = field.defaultValue;\n hasDefault = defaultValue() !== void 0;\n name = field.name;\n if (errorStack && this._isError && name === \"stack\" && Type.isType(field.type, \"string\") && !hasDefault) {\n stackField = field;\n }\n innerArgs.push(\"v\" + i);\n innerBody += \" \";\n if (!hasDefault) {\n innerBody += \"this.\" + name + \" = v\" + i + \";\\n\";\n } else {\n innerBody += \"if (v\" + i + \" === undefined) { \";\n innerBody += \"this.\" + name + \" = d\" + ds.length + \"(); \";\n innerBody += \"} else { this.\" + name + \" = v\" + i + \"; }\\n\";\n outerArgs.push(\"d\" + ds.length);\n ds.push(defaultValue);\n }\n }\n if (stackField) {\n innerBody += \" if (this.stack === undefined) { \";\n if (typeof Error.captureStackTrace == \"function\") {\n innerBody += \"Error.captureStackTrace(this, this.constructor);\";\n } else {\n innerBody += \"this.stack = Error().stack;\";\n }\n innerBody += \" }\\n\";\n }\n var outerBody = \"return function \" + this._getConstructorName() + \"(\";\n outerBody += innerArgs.join() + \") {\\n\" + innerBody + \"};\";\n var Record = new Function(outerArgs.join(), outerBody).apply(void 0, ds);\n if (plainRecords) {\n return Record;\n }\n var self = this;\n Record.getType = function() {\n return self;\n };\n Record.type = self;\n if (this._isError) {\n util.inherits(Record, Error);\n Record.prototype.name = this._getConstructorName();\n }\n Record.prototype.clone = function(o) {\n return self.clone(this, o);\n };\n Record.prototype.compare = function(v2) {\n return self.compare(this, v2);\n };\n Record.prototype.isValid = function(o) {\n return self.isValid(this, o);\n };\n Record.prototype.toBuffer = function() {\n return self.toBuffer(this);\n };\n Record.prototype.toString = function() {\n return self.toString(this);\n };\n Record.prototype.wrap = function() {\n return self.wrap(this);\n };\n Record.prototype.wrapped = Record.prototype.wrap;\n return Record;\n };\n RecordType.prototype._createChecker = function() {\n var names = [];\n var values = [];\n var name = this._getConstructorName();\n var body = \"return function check\" + name + \"(v, f, h, p) {\\n\";\n body += \" if (\\n\";\n body += \" v === null ||\\n\";\n body += \" typeof v != 'object' ||\\n\";\n body += \" (f && !this._checkFields(v))\\n\";\n body += \" ) {\\n\";\n body += \" if (h) { h(v, this); }\\n\";\n body += \" return false;\\n\";\n body += \" }\\n\";\n if (!this.fields.length) {\n body += \" return true;\\n\";\n } else {\n for (i = 0, l = this.fields.length; i < l; i++) {\n field = this.fields[i];\n names.push(\"t\" + i);\n values.push(field.type);\n if (field.defaultValue() !== void 0) {\n body += \" var v\" + i + \" = v.\" + field.name + \";\\n\";\n }\n }\n body += \" if (h) {\\n\";\n body += \" var b = 1;\\n\";\n body += \" var j = p.length;\\n\";\n body += \" p.push('');\\n\";\n var i, l, field;\n for (i = 0, l = this.fields.length; i < l; i++) {\n field = this.fields[i];\n body += \" p[j] = '\" + field.name + \"';\\n\";\n body += \" b &= \";\n if (field.defaultValue() === void 0) {\n body += \"t\" + i + \"._check(v.\" + field.name + \", f, h, p);\\n\";\n } else {\n body += \"v\" + i + \" === undefined || \";\n body += \"t\" + i + \"._check(v\" + i + \", f, h, p);\\n\";\n }\n }\n body += \" p.pop();\\n\";\n body += \" return !!b;\\n\";\n body += \" } else {\\n return (\\n \";\n body += this.fields.map(function(field2, i2) {\n return field2.defaultValue() === void 0 ? \"t\" + i2 + \"._check(v.\" + field2.name + \", f)\" : \"(v\" + i2 + \" === undefined || t\" + i2 + \"._check(v\" + i2 + \", f))\";\n }).join(\" &&\\n \");\n body += \"\\n );\\n }\\n\";\n }\n body += \"};\";\n return new Function(names.join(), body).apply(void 0, values);\n };\n RecordType.prototype._createReader = function() {\n var names = [];\n var values = [this.recordConstructor];\n var i, l;\n for (i = 0, l = this.fields.length; i < l; i++) {\n names.push(\"t\" + i);\n values.push(this.fields[i].type);\n }\n var name = this._getConstructorName();\n var body = \"return function read\" + name + \"(t) {\\n\";\n body += \" return new \" + name + \"(\\n \";\n body += names.map(function(s) {\n return s + \"._read(t)\";\n }).join(\",\\n \");\n body += \"\\n );\\n};\";\n names.unshift(name);\n return new Function(names.join(), body).apply(void 0, values);\n };\n RecordType.prototype._createSkipper = function() {\n var args = [];\n var body = \"return function skip\" + this._getConstructorName() + \"(t) {\\n\";\n var values = [];\n var i, l;\n for (i = 0, l = this.fields.length; i < l; i++) {\n args.push(\"t\" + i);\n values.push(this.fields[i].type);\n body += \" t\" + i + \"._skip(t);\\n\";\n }\n body += \"}\";\n return new Function(args.join(), body).apply(void 0, values);\n };\n RecordType.prototype._createWriter = function() {\n var args = [];\n var name = this._getConstructorName();\n var body = \"return function write\" + name + \"(t, v) {\\n\";\n var values = [];\n var i, l, field, value;\n for (i = 0, l = this.fields.length; i < l; i++) {\n field = this.fields[i];\n args.push(\"t\" + i);\n values.push(field.type);\n body += \" \";\n if (field.defaultValue() === void 0) {\n body += \"t\" + i + \"._write(t, v.\" + field.name + \");\\n\";\n } else {\n value = field.type.toBuffer(field.defaultValue()).toString(\"binary\");\n args.push(\"d\" + i);\n values.push(value);\n body += \"var v\" + i + \" = v.\" + field.name + \";\\n\";\n body += \"if (v\" + i + \" === undefined) {\\n\";\n body += \" t.writeBinary(d\" + i + \", \" + value.length + \");\\n\";\n body += \" } else {\\n t\" + i + \"._write(t, v\" + i + \");\\n }\\n\";\n }\n }\n body += \"}\";\n return new Function(args.join(), body).apply(void 0, values);\n };\n RecordType.prototype._update = function(resolver, type, opts) {\n if (!hasCompatibleName(this, type, !opts.ignoreNamespaces)) {\n throw new Error(f2(\"no alias found for %s\", type.name));\n }\n var rFields = this.fields;\n var wFields = type.fields;\n var wFieldsMap = utils.toMap(wFields, function(f3) {\n return f3.name;\n });\n var innerArgs = [];\n var resolvers = {};\n var i, j2, field, name, names, matches, fieldResolver;\n for (i = 0; i < rFields.length; i++) {\n field = rFields[i];\n names = getAliases(field);\n matches = [];\n for (j2 = 0; j2 < names.length; j2++) {\n name = names[j2];\n if (wFieldsMap[name]) {\n matches.push(name);\n }\n }\n if (matches.length > 1) {\n throw new Error(\n f2(\"ambiguous aliasing for %s.%s (%s)\", type.name, field.name, matches)\n );\n }\n if (!matches.length) {\n if (field.defaultValue() === void 0) {\n throw new Error(\n f2(\"no matching field for default-less %s.%s\", type.name, field.name)\n );\n }\n innerArgs.push(\"undefined\");\n } else {\n name = matches[0];\n fieldResolver = {\n resolver: field.type.createResolver(wFieldsMap[name].type, opts),\n name: \"_\" + field.name\n // Reader field name.\n };\n if (!resolvers[name]) {\n resolvers[name] = [fieldResolver];\n } else {\n resolvers[name].push(fieldResolver);\n }\n innerArgs.push(fieldResolver.name);\n }\n }\n var lazyIndex = -1;\n i = wFields.length;\n while (i && resolvers[wFields[--i].name] === void 0) {\n lazyIndex = i;\n }\n var uname = this._getConstructorName();\n var args = [uname];\n var values = [this.recordConstructor];\n var body = \" return function read\" + uname + \"(t, b) {\\n\";\n for (i = 0; i < wFields.length; i++) {\n if (i === lazyIndex) {\n body += \" if (!b) {\\n\";\n }\n field = type.fields[i];\n name = field.name;\n if (resolvers[name] === void 0) {\n body += ~lazyIndex && i >= lazyIndex ? \" \" : \" \";\n args.push(\"r\" + i);\n values.push(field.type);\n body += \"r\" + i + \"._skip(t);\\n\";\n } else {\n j2 = resolvers[name].length;\n while (j2--) {\n body += ~lazyIndex && i >= lazyIndex ? \" \" : \" \";\n args.push(\"r\" + i + \"f\" + j2);\n fieldResolver = resolvers[name][j2];\n values.push(fieldResolver.resolver);\n body += \"var \" + fieldResolver.name + \" = \";\n body += \"r\" + i + \"f\" + j2 + \"._\" + (j2 ? \"peek\" : \"read\") + \"(t);\\n\";\n }\n }\n }\n if (~lazyIndex) {\n body += \" }\\n\";\n }\n body += \" return new \" + uname + \"(\" + innerArgs.join() + \");\\n};\";\n resolver._read = new Function(args.join(), body).apply(void 0, values);\n };\n RecordType.prototype._match = function(tap1, tap2) {\n var fields = this.fields;\n var i, l, field, order, type;\n for (i = 0, l = fields.length; i < l; i++) {\n field = fields[i];\n order = field._order;\n type = field.type;\n if (order) {\n order *= type._match(tap1, tap2);\n if (order) {\n return order;\n }\n } else {\n type._skip(tap1);\n type._skip(tap2);\n }\n }\n return 0;\n };\n RecordType.prototype._checkFields = function(obj) {\n var keys = Object.keys(obj);\n var i, l;\n for (i = 0, l = keys.length; i < l; i++) {\n if (!this._fieldsByName[keys[i]]) {\n return false;\n }\n }\n return true;\n };\n RecordType.prototype._copy = function(val, opts) {\n var hook = opts && opts.fieldHook;\n var values = [void 0];\n var i, l, field, value;\n for (i = 0, l = this.fields.length; i < l; i++) {\n field = this.fields[i];\n value = val[field.name];\n if (value === void 0 && field.hasOwnProperty(\"defaultValue\")) {\n value = field.defaultValue();\n }\n if (opts && !opts.skip || value !== void 0) {\n value = field.type._copy(value, opts);\n }\n if (hook) {\n value = hook(field, value, this);\n }\n values.push(value);\n }\n var Record = this.recordConstructor;\n return new (Record.bind.apply(Record, values))();\n };\n RecordType.prototype._deref = function(schema, opts) {\n schema.fields = this.fields.map(function(field) {\n var fieldType = field.type;\n var fieldSchema = {\n name: field.name,\n type: fieldType._attrs(opts)\n };\n if (opts.exportAttrs) {\n var val = field.defaultValue();\n if (val !== void 0) {\n fieldSchema[\"default\"] = fieldType._copy(val, { coerce: 3, wrap: 3 });\n }\n var fieldOrder = field.order;\n if (fieldOrder !== \"ascending\") {\n fieldSchema.order = fieldOrder;\n }\n var fieldAliases = field.aliases;\n if (fieldAliases.length) {\n fieldSchema.aliases = fieldAliases;\n }\n var fieldDoc = field.doc;\n if (fieldDoc !== void 0) {\n fieldSchema.doc = fieldDoc;\n }\n }\n return fieldSchema;\n });\n };\n RecordType.prototype.compare = function(val1, val2) {\n var fields = this.fields;\n var i, l, field, name, order, type;\n for (i = 0, l = fields.length; i < l; i++) {\n field = fields[i];\n name = field.name;\n order = field._order;\n type = field.type;\n if (order) {\n order *= type.compare(val1[name], val2[name]);\n if (order) {\n return order;\n }\n }\n }\n return 0;\n };\n RecordType.prototype.random = function() {\n var fields = this.fields.map(function(f3) {\n return f3.type.random();\n });\n fields.unshift(void 0);\n var Record = this.recordConstructor;\n return new (Record.bind.apply(Record, fields))();\n };\n RecordType.prototype.field = function(name) {\n return this._fieldsByName[name];\n };\n RecordType.prototype.getField = RecordType.prototype.field;\n RecordType.prototype.getFields = function() {\n return this.fields;\n };\n RecordType.prototype.getRecordConstructor = function() {\n return this.recordConstructor;\n };\n Object.defineProperty(RecordType.prototype, \"typeName\", {\n enumerable: true,\n get: function() {\n return this._isError ? \"error\" : \"record\";\n }\n });\n function LogicalType(schema, opts) {\n this._logicalTypeName = schema.logicalType;\n Type.call(this);\n LOGICAL_TYPE = this;\n try {\n this._underlyingType = Type.forSchema(schema, opts);\n } finally {\n LOGICAL_TYPE = null;\n var l = UNDERLYING_TYPES.length;\n if (l && UNDERLYING_TYPES[l - 1][0] === this) {\n UNDERLYING_TYPES.pop();\n }\n }\n if (Type.isType(this.underlyingType, \"union\")) {\n this._branchConstructor = this.underlyingType._branchConstructor;\n } else {\n this._branchConstructor = this.underlyingType._createBranchConstructor();\n }\n }\n util.inherits(LogicalType, Type);\n Object.defineProperty(LogicalType.prototype, \"typeName\", {\n enumerable: true,\n get: function() {\n return \"logical:\" + this._logicalTypeName;\n }\n });\n Object.defineProperty(LogicalType.prototype, \"underlyingType\", {\n enumerable: true,\n get: function() {\n if (this._underlyingType) {\n return this._underlyingType;\n }\n var i, l, arr;\n for (i = 0, l = UNDERLYING_TYPES.length; i < l; i++) {\n arr = UNDERLYING_TYPES[i];\n if (arr[0] === this) {\n return arr[1];\n }\n }\n }\n });\n LogicalType.prototype.getUnderlyingType = function() {\n return this.underlyingType;\n };\n LogicalType.prototype._read = function(tap) {\n return this._fromValue(this.underlyingType._read(tap));\n };\n LogicalType.prototype._write = function(tap, any) {\n this.underlyingType._write(tap, this._toValue(any));\n };\n LogicalType.prototype._check = function(any, flags, hook, path) {\n try {\n var val = this._toValue(any);\n } catch (err) {\n }\n if (val === void 0) {\n if (hook) {\n hook(any, this);\n }\n return false;\n }\n return this.underlyingType._check(val, flags, hook, path);\n };\n LogicalType.prototype._copy = function(any, opts) {\n var type = this.underlyingType;\n switch (opts && opts.coerce) {\n case 3:\n return type._copy(this._toValue(any), opts);\n case 2:\n return this._fromValue(type._copy(any, opts));\n default:\n return this._fromValue(type._copy(this._toValue(any), opts));\n }\n };\n LogicalType.prototype._update = function(resolver, type, opts) {\n var _fromValue = this._resolve(type, opts);\n if (_fromValue) {\n resolver._read = function(tap) {\n return _fromValue(type._read(tap));\n };\n }\n };\n LogicalType.prototype.compare = function(obj1, obj2) {\n var val1 = this._toValue(obj1);\n var val2 = this._toValue(obj2);\n return this.underlyingType.compare(val1, val2);\n };\n LogicalType.prototype.random = function() {\n return this._fromValue(this.underlyingType.random());\n };\n LogicalType.prototype._deref = function(schema, opts) {\n var type = this.underlyingType;\n var isVisited = type.name !== void 0 && opts.derefed[type.name];\n schema = type._attrs(opts);\n if (!isVisited && opts.exportAttrs) {\n if (typeof schema == \"string\") {\n schema = { type: schema };\n }\n schema.logicalType = this._logicalTypeName;\n this._export(schema);\n }\n return schema;\n };\n LogicalType.prototype._skip = function(tap) {\n this.underlyingType._skip(tap);\n };\n LogicalType.prototype._export = function() {\n };\n LogicalType.prototype._fromValue = utils.abstractFunction;\n LogicalType.prototype._toValue = utils.abstractFunction;\n LogicalType.prototype._resolve = utils.abstractFunction;\n function AbstractLongType(noUnpack) {\n this._concreteTypeName = \"long\";\n PrimitiveType.call(this, true);\n this._noUnpack = !!noUnpack;\n }\n util.inherits(AbstractLongType, LongType);\n AbstractLongType.prototype.typeName = \"abstract:long\";\n AbstractLongType.prototype._check = function(val, flags, hook) {\n var b2 = this._isValid(val);\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n AbstractLongType.prototype._read = function(tap) {\n var buf, pos;\n if (this._noUnpack) {\n pos = tap.pos;\n tap.skipLong();\n buf = tap.buf.slice(pos, tap.pos);\n } else {\n buf = tap.unpackLongBytes(tap);\n }\n if (tap.isValid()) {\n return this._fromBuffer(buf);\n }\n };\n AbstractLongType.prototype._write = function(tap, val) {\n if (!this._isValid(val)) {\n throwInvalidError(val, this);\n }\n var buf = this._toBuffer(val);\n if (this._noUnpack) {\n tap.writeFixed(buf);\n } else {\n tap.packLongBytes(buf);\n }\n };\n AbstractLongType.prototype._copy = function(val, opts) {\n switch (opts && opts.coerce) {\n case 3:\n return this._toJSON(val);\n case 2:\n return this._fromJSON(val);\n default:\n return this._fromJSON(this._toJSON(val));\n }\n };\n AbstractLongType.prototype._deref = function() {\n return \"long\";\n };\n AbstractLongType.prototype._update = function(resolver, type) {\n var self = this;\n switch (type.typeName) {\n case \"int\":\n resolver._read = function(tap) {\n return self._fromJSON(type._read(tap));\n };\n break;\n case \"abstract:long\":\n case \"long\":\n resolver._read = function(tap) {\n return self._read(tap);\n };\n }\n };\n AbstractLongType.prototype.random = function() {\n return this._fromJSON(LongType.prototype.random());\n };\n AbstractLongType.prototype._fromBuffer = utils.abstractFunction;\n AbstractLongType.prototype._toBuffer = utils.abstractFunction;\n AbstractLongType.prototype._fromJSON = utils.abstractFunction;\n AbstractLongType.prototype._toJSON = utils.abstractFunction;\n AbstractLongType.prototype._isValid = utils.abstractFunction;\n AbstractLongType.prototype.compare = utils.abstractFunction;\n function Field(schema, opts) {\n var name = schema.name;\n if (typeof name != \"string\" || !utils.isValidName(name)) {\n throw new Error(f2(\"invalid field name: %s\", name));\n }\n this.name = name;\n this.type = Type.forSchema(schema.type, opts);\n this.aliases = schema.aliases || [];\n this.doc = schema.doc !== void 0 ? \"\" + schema.doc : void 0;\n this._order = function(order) {\n switch (order) {\n case \"ascending\":\n return 1;\n case \"descending\":\n return -1;\n case \"ignore\":\n return 0;\n default:\n throw new Error(f2(\"invalid order: %j\", order));\n }\n }(schema.order === void 0 ? \"ascending\" : schema.order);\n var value = schema[\"default\"];\n if (value !== void 0) {\n var type = this.type;\n var val;\n try {\n val = type._copy(value, { coerce: 2, wrap: 2 });\n } catch (err) {\n var msg = f2(\"incompatible field default %j (%s)\", value, err.message);\n if (Type.isType(type, \"union\")) {\n msg += f2(\n \", union defaults must match the first branch's type (%j)\",\n type.types[0]\n );\n }\n throw new Error(msg);\n }\n if (isPrimitive(type.typeName) && type.typeName !== \"bytes\") {\n this.defaultValue = function() {\n return val;\n };\n } else {\n this.defaultValue = function() {\n return type._copy(val);\n };\n }\n }\n Object.freeze(this);\n }\n Field.prototype.defaultValue = function() {\n };\n Object.defineProperty(Field.prototype, \"order\", {\n enumerable: true,\n get: function() {\n return [\"descending\", \"ignore\", \"ascending\"][this._order + 1];\n }\n });\n Field.prototype.getAliases = function() {\n return this.aliases;\n };\n Field.prototype.getDefault = Field.prototype.defaultValue;\n Field.prototype.getName = function() {\n return this.name;\n };\n Field.prototype.getOrder = function() {\n return this.order;\n };\n Field.prototype.getType = function() {\n return this.type;\n };\n function Resolver(readerType) {\n this._readerType = readerType;\n this._read = null;\n this.itemsType = null;\n this.size = 0;\n this.symbols = null;\n this.valuesType = null;\n }\n Resolver.prototype._peek = Type.prototype._peek;\n Resolver.prototype.inspect = function() {\n return \"\";\n };\n function Hash() {\n this.str = void 0;\n }\n function readValue(type, tap, resolver, lazy) {\n if (resolver) {\n if (resolver._readerType !== type) {\n throw new Error(\"invalid resolver\");\n }\n return resolver._read(tap, lazy);\n } else {\n return type._read(tap);\n }\n }\n function getAliases(obj) {\n var names = {};\n if (obj.name) {\n names[obj.name] = true;\n }\n var aliases = obj.aliases;\n var i, l;\n for (i = 0, l = aliases.length; i < l; i++) {\n names[aliases[i]] = true;\n }\n return Object.keys(names);\n }\n function hasCompatibleName(reader, writer, strict) {\n if (!writer.name) {\n return true;\n }\n var name = strict ? writer.name : utils.unqualify(writer.name);\n var aliases = getAliases(reader);\n var i, l, alias;\n for (i = 0, l = aliases.length; i < l; i++) {\n alias = aliases[i];\n if (!strict) {\n alias = utils.unqualify(alias);\n }\n if (alias === name) {\n return true;\n }\n }\n return false;\n }\n function isPrimitive(typeName) {\n var type = TYPES[typeName];\n return type && type.prototype instanceof PrimitiveType;\n }\n function getClassName(typeName) {\n if (typeName === \"error\") {\n typeName = \"record\";\n } else {\n var match = /^([^:]+):(.*)$/.exec(typeName);\n if (match) {\n if (match[1] === \"union\") {\n typeName = match[2] + \"Union\";\n } else {\n typeName = match[1];\n }\n }\n }\n return utils.capitalize(typeName) + \"Type\";\n }\n function readArraySize(tap) {\n var n = tap.readLong();\n if (n < 0) {\n n = -n;\n tap.skipLong();\n }\n return n;\n }\n function isSafeLong(n) {\n return n >= -9007199254740990 && n <= 9007199254740990;\n }\n function isJsonBuffer(obj) {\n return obj && obj.type === \"Buffer\" && Array.isArray(obj.data);\n }\n function throwInvalidError(val, type) {\n throw new Error(f2(\"invalid %j: %j\", type.schema(), val));\n }\n function maybeQualify(name, ns) {\n var unqualified = utils.unqualify(name);\n return isPrimitive(unqualified) ? unqualified : utils.qualify(name, ns);\n }\n function getTypeBucket(type) {\n var typeName = type.typeName;\n switch (typeName) {\n case \"double\":\n case \"float\":\n case \"int\":\n case \"long\":\n return \"number\";\n case \"bytes\":\n case \"fixed\":\n return \"buffer\";\n case \"enum\":\n return \"string\";\n case \"map\":\n case \"error\":\n case \"record\":\n return \"object\";\n default:\n return typeName;\n }\n }\n function getValueBucket(val) {\n if (val === null) {\n return \"null\";\n }\n var bucket = typeof val;\n if (bucket === \"object\") {\n if (Array.isArray(val)) {\n return \"array\";\n } else if (Buffer2.isBuffer(val)) {\n return \"buffer\";\n }\n }\n return bucket;\n }\n function isAmbiguous(types) {\n var buckets = {};\n var i, l, bucket, type;\n for (i = 0, l = types.length; i < l; i++) {\n type = types[i];\n if (!Type.isType(type, \"logical\")) {\n bucket = getTypeBucket(type);\n if (buckets[bucket]) {\n return true;\n }\n buckets[bucket] = true;\n }\n }\n return false;\n }\n function combineNumbers(types) {\n var typeNames = [\"int\", \"long\", \"float\", \"double\"];\n var superIndex = -1;\n var superType = null;\n var i, l, type, index;\n for (i = 0, l = types.length; i < l; i++) {\n type = types[i];\n index = typeNames.indexOf(type.typeName);\n if (index > superIndex) {\n superIndex = index;\n superType = type;\n }\n }\n return superType;\n }\n function combineStrings(types, opts) {\n var symbols = {};\n var i, l, type, typeSymbols;\n for (i = 0, l = types.length; i < l; i++) {\n type = types[i];\n if (type.typeName === \"string\") {\n return type;\n }\n typeSymbols = type.symbols;\n var j2, m2;\n for (j2 = 0, m2 = typeSymbols.length; j2 < m2; j2++) {\n symbols[typeSymbols[j2]] = true;\n }\n }\n return Type.forSchema({ type: \"enum\", symbols: Object.keys(symbols) }, opts);\n }\n function combineBuffers(types, opts) {\n var size = -1;\n var i, l, type;\n for (i = 0, l = types.length; i < l; i++) {\n type = types[i];\n if (type.typeName === \"bytes\") {\n return type;\n }\n if (size === -1) {\n size = type.size;\n } else if (type.size !== size) {\n size = -2;\n }\n }\n return size < 0 ? Type.forSchema(\"bytes\", opts) : types[0];\n }\n function combineObjects(types, opts) {\n var allTypes = [];\n var fieldTypes = {};\n var fieldDefaults = {};\n var isValidRecord = true;\n var i, l, type, fields;\n for (i = 0, l = types.length; i < l; i++) {\n type = types[i];\n if (type.typeName === \"map\") {\n isValidRecord = false;\n allTypes.push(type.valuesType);\n } else {\n fields = type.fields;\n var j2, m2, field, fieldDefault, fieldName, fieldType;\n for (j2 = 0, m2 = fields.length; j2 < m2; j2++) {\n field = fields[j2];\n fieldName = field.name;\n fieldType = field.type;\n allTypes.push(fieldType);\n if (isValidRecord) {\n if (!fieldTypes[fieldName]) {\n fieldTypes[fieldName] = [];\n }\n fieldTypes[fieldName].push(fieldType);\n fieldDefault = field.defaultValue();\n if (fieldDefault !== void 0) {\n fieldDefaults[fieldName] = fieldDefault;\n }\n }\n }\n }\n }\n if (isValidRecord) {\n var fieldNames = Object.keys(fieldTypes);\n for (i = 0, l = fieldNames.length; i < l; i++) {\n fieldName = fieldNames[i];\n if (fieldTypes[fieldName].length < types.length && fieldDefaults[fieldName] === void 0) {\n if (opts && opts.strictDefaults) {\n isValidRecord = false;\n } else {\n fieldTypes[fieldName].unshift(Type.forSchema(\"null\", opts));\n fieldDefaults[fieldName] = null;\n }\n }\n }\n }\n var schema;\n if (isValidRecord) {\n schema = {\n type: \"record\",\n fields: fieldNames.map(function(s) {\n var fieldType2 = Type.forTypes(fieldTypes[s], opts);\n var fieldDefault2 = fieldDefaults[s];\n if (fieldDefault2 !== void 0 && ~fieldType2.typeName.indexOf(\"union\")) {\n var unionTypes = fieldType2.types.slice();\n var i2, l2;\n for (i2 = 0, l2 = unionTypes.length; i2 < l2; i2++) {\n if (unionTypes[i2].isValid(fieldDefault2)) {\n break;\n }\n }\n if (i2 > 0) {\n var unionType = unionTypes[0];\n unionTypes[0] = unionTypes[i2];\n unionTypes[i2] = unionType;\n fieldType2 = Type.forSchema(unionTypes, opts);\n }\n }\n return {\n name: s,\n type: fieldType2,\n \"default\": fieldDefaults[s]\n };\n })\n };\n } else {\n schema = {\n type: \"map\",\n values: Type.forTypes(allTypes, opts)\n };\n }\n return Type.forSchema(schema, opts);\n }\n module.exports = {\n Type,\n getTypeBucket,\n getValueBucket,\n isPrimitive,\n builtins: function() {\n var types = {\n LogicalType,\n UnwrappedUnionType,\n WrappedUnionType\n };\n var typeNames = Object.keys(TYPES);\n var i, l, typeName;\n for (i = 0, l = typeNames.length; i < l; i++) {\n typeName = typeNames[i];\n types[getClassName(typeName)] = TYPES[typeName];\n }\n return types;\n }()\n };\n }\n});\n\n// node_modules/avsc/lib/containers.js\nvar require_containers = __commonJS({\n \"node_modules/avsc/lib/containers.js\"(exports, module) {\n \"use strict\";\n var types = require_types();\n var utils = require_utils();\n var buffer = __import_BUFFER;\n var stream = __import_STREAM;\n var util = __import_UTIL;\n var zlib = __import_ZLIB;\n var Buffer2 = buffer.Buffer;\n var OPTS = { namespace: \"org.apache.avro.file\" };\n var LONG_TYPE = types.Type.forSchema(\"long\", OPTS);\n var MAP_BYTES_TYPE = types.Type.forSchema({ type: \"map\", values: \"bytes\" }, OPTS);\n var HEADER_TYPE = types.Type.forSchema({\n name: \"Header\",\n type: \"record\",\n fields: [\n { name: \"magic\", type: { type: \"fixed\", name: \"Magic\", size: 4 } },\n { name: \"meta\", type: MAP_BYTES_TYPE },\n { name: \"sync\", type: { type: \"fixed\", name: \"Sync\", size: 16 } }\n ]\n }, OPTS);\n var BLOCK_TYPE = types.Type.forSchema({\n name: \"Block\",\n type: \"record\",\n fields: [\n { name: \"count\", type: \"long\" },\n { name: \"data\", type: \"bytes\" },\n { name: \"sync\", type: \"Sync\" }\n ]\n }, OPTS);\n var MAGIC_BYTES = utils.bufferFrom(\"Obj\u0001\");\n var f2 = util.format;\n var Tap = utils.Tap;\n function RawDecoder(schema, opts) {\n opts = opts || {};\n var noDecode = !!opts.noDecode;\n stream.Duplex.call(this, {\n readableObjectMode: !noDecode,\n allowHalfOpen: false\n });\n this._type = types.Type.forSchema(schema);\n this._tap = new Tap(utils.newBuffer(0));\n this._writeCb = null;\n this._needPush = false;\n this._readValue = createReader(noDecode, this._type);\n this._finished = false;\n this.on(\"finish\", function() {\n this._finished = true;\n this._read();\n });\n }\n util.inherits(RawDecoder, stream.Duplex);\n RawDecoder.prototype._write = function(chunk, encoding, cb) {\n this._writeCb = cb;\n var tap = this._tap;\n tap.buf = Buffer2.concat([tap.buf.slice(tap.pos), chunk]);\n tap.pos = 0;\n if (this._needPush) {\n this._needPush = false;\n this._read();\n }\n };\n RawDecoder.prototype._read = function() {\n this._needPush = false;\n var tap = this._tap;\n var pos = tap.pos;\n var val = this._readValue(tap);\n if (tap.isValid()) {\n this.push(val);\n } else if (!this._finished) {\n tap.pos = pos;\n this._needPush = true;\n if (this._writeCb) {\n this._writeCb();\n }\n } else {\n this.push(null);\n }\n };\n function BlockDecoder(opts) {\n opts = opts || {};\n var noDecode = !!opts.noDecode;\n stream.Duplex.call(this, {\n allowHalfOpen: true,\n // For async decompressors.\n readableObjectMode: !noDecode\n });\n this._rType = opts.readerSchema !== void 0 ? types.Type.forSchema(opts.readerSchema) : void 0;\n this._wType = null;\n this._codecs = opts.codecs;\n this._codec = void 0;\n this._parseHook = opts.parseHook;\n this._tap = new Tap(utils.newBuffer(0));\n this._blockTap = new Tap(utils.newBuffer(0));\n this._syncMarker = null;\n this._readValue = null;\n this._noDecode = noDecode;\n this._queue = new utils.OrderedQueue();\n this._decompress = null;\n this._index = 0;\n this._remaining = void 0;\n this._needPush = false;\n this._finished = false;\n this.on(\"finish\", function() {\n this._finished = true;\n if (this._needPush) {\n this._read();\n }\n });\n }\n util.inherits(BlockDecoder, stream.Duplex);\n BlockDecoder.defaultCodecs = function() {\n return {\n \"null\": function(buf, cb) {\n cb(null, buf);\n },\n \"deflate\": zlib.inflateRaw\n };\n };\n BlockDecoder.getDefaultCodecs = BlockDecoder.defaultCodecs;\n BlockDecoder.prototype._decodeHeader = function() {\n var tap = this._tap;\n if (tap.buf.length < MAGIC_BYTES.length) {\n return false;\n }\n if (!MAGIC_BYTES.equals(tap.buf.slice(0, MAGIC_BYTES.length))) {\n this.emit(\"error\", new Error(\"invalid magic bytes\"));\n return false;\n }\n var header = HEADER_TYPE._read(tap);\n if (!tap.isValid()) {\n return false;\n }\n this._codec = (header.meta[\"avro.codec\"] || \"null\").toString();\n var codecs = this._codecs || BlockDecoder.getDefaultCodecs();\n this._decompress = codecs[this._codec];\n if (!this._decompress) {\n this.emit(\"error\", new Error(f2(\"unknown codec: %s\", this._codec)));\n return;\n }\n try {\n var schema = JSON.parse(header.meta[\"avro.schema\"].toString());\n if (this._parseHook) {\n schema = this._parseHook(schema);\n }\n this._wType = types.Type.forSchema(schema);\n } catch (err) {\n this.emit(\"error\", err);\n return;\n }\n try {\n this._readValue = createReader(this._noDecode, this._wType, this._rType);\n } catch (err) {\n this.emit(\"error\", err);\n return;\n }\n this._syncMarker = header.sync;\n this.emit(\"metadata\", this._wType, this._codec, header);\n return true;\n };\n BlockDecoder.prototype._write = function(chunk, encoding, cb) {\n var tap = this._tap;\n tap.buf = Buffer2.concat([tap.buf, chunk]);\n tap.pos = 0;\n if (!this._decodeHeader()) {\n process.nextTick(cb);\n return;\n }\n this._write = this._writeChunk;\n this._write(utils.newBuffer(0), encoding, cb);\n };\n BlockDecoder.prototype._writeChunk = function(chunk, encoding, cb) {\n var tap = this._tap;\n tap.buf = Buffer2.concat([tap.buf.slice(tap.pos), chunk]);\n tap.pos = 0;\n var nBlocks = 1;\n var block;\n while (block = tryReadBlock(tap)) {\n if (!this._syncMarker.equals(block.sync)) {\n this.emit(\"error\", new Error(\"invalid sync marker\"));\n return;\n }\n nBlocks++;\n this._decompress(\n block.data,\n this._createBlockCallback(block.data.length, block.count, chunkCb)\n );\n }\n chunkCb();\n function chunkCb() {\n if (!--nBlocks) {\n cb();\n }\n }\n };\n BlockDecoder.prototype._createBlockCallback = function(size, count, cb) {\n var self = this;\n var index = this._index++;\n return function(cause, data) {\n if (cause) {\n var err = new Error(f2(\"%s codec decompression error\", self._codec));\n err.cause = cause;\n self.emit(\"error\", err);\n cb();\n } else {\n self.emit(\"block\", new BlockInfo(count, data.length, size));\n self._queue.push(new BlockData(index, data, cb, count));\n if (self._needPush) {\n self._read();\n }\n }\n };\n };\n BlockDecoder.prototype._read = function() {\n this._needPush = false;\n var tap = this._blockTap;\n if (!this._remaining) {\n var data = this._queue.pop();\n if (!data || !data.count) {\n if (this._finished) {\n this.push(null);\n } else {\n this._needPush = true;\n }\n if (data) {\n data.cb();\n }\n return;\n }\n data.cb();\n this._remaining = data.count;\n tap.buf = data.buf;\n tap.pos = 0;\n }\n this._remaining--;\n var val;\n try {\n val = this._readValue(tap);\n if (!tap.isValid()) {\n throw new Error(\"truncated block\");\n }\n } catch (err) {\n this._remaining = 0;\n this.emit(\"error\", err);\n return;\n }\n this.push(val);\n };\n function RawEncoder(schema, opts) {\n opts = opts || {};\n stream.Transform.call(this, {\n writableObjectMode: true,\n allowHalfOpen: false\n });\n this._type = types.Type.forSchema(schema);\n this._writeValue = function(tap, val) {\n try {\n this._type._write(tap, val);\n } catch (err) {\n this.emit(\"typeError\", err, val, this._type);\n }\n };\n this._tap = new Tap(utils.newBuffer(opts.batchSize || 65536));\n this.on(\"typeError\", function(err) {\n this.emit(\"error\", err);\n });\n }\n util.inherits(RawEncoder, stream.Transform);\n RawEncoder.prototype._transform = function(val, encoding, cb) {\n var tap = this._tap;\n var buf = tap.buf;\n var pos = tap.pos;\n this._writeValue(tap, val);\n if (!tap.isValid()) {\n if (pos) {\n this.push(copyBuffer(tap.buf, 0, pos));\n }\n var len = tap.pos - pos;\n if (len > buf.length) {\n tap.buf = utils.newBuffer(2 * len);\n }\n tap.pos = 0;\n this._writeValue(tap, val);\n }\n cb();\n };\n RawEncoder.prototype._flush = function(cb) {\n var tap = this._tap;\n var pos = tap.pos;\n if (pos) {\n this.push(tap.buf.slice(0, pos));\n }\n cb();\n };\n function BlockEncoder(schema, opts) {\n opts = opts || {};\n stream.Duplex.call(this, {\n allowHalfOpen: true,\n // To support async compressors.\n writableObjectMode: true\n });\n var type;\n if (types.Type.isType(schema)) {\n type = schema;\n schema = void 0;\n } else {\n type = types.Type.forSchema(schema);\n }\n this._schema = schema;\n this._type = type;\n this._writeValue = function(tap, val) {\n try {\n this._type._write(tap, val);\n } catch (err) {\n this.emit(\"typeError\", err, val, this._type);\n return false;\n }\n return true;\n };\n this._blockSize = opts.blockSize || 65536;\n this._tap = new Tap(utils.newBuffer(this._blockSize));\n this._codecs = opts.codecs;\n this._codec = opts.codec || \"null\";\n this._blockCount = 0;\n this._syncMarker = opts.syncMarker || new utils.Lcg().nextBuffer(16);\n this._queue = new utils.OrderedQueue();\n this._pending = 0;\n this._finished = false;\n this._needHeader = false;\n this._needPush = false;\n this._metadata = opts.metadata || {};\n if (!MAP_BYTES_TYPE.isValid(this._metadata)) {\n throw new Error(\"invalid metadata\");\n }\n var codec = this._codec;\n this._compress = (this._codecs || BlockEncoder.getDefaultCodecs())[codec];\n if (!this._compress) {\n throw new Error(f2(\"unsupported codec: %s\", codec));\n }\n if (opts.omitHeader !== void 0) {\n opts.writeHeader = opts.omitHeader ? \"never\" : \"auto\";\n }\n switch (opts.writeHeader) {\n case false:\n case \"never\":\n break;\n case void 0:\n case \"auto\":\n this._needHeader = true;\n break;\n default:\n this._writeHeader();\n }\n this.on(\"finish\", function() {\n this._finished = true;\n if (this._blockCount) {\n this._flushChunk();\n } else if (this._finished && this._needPush) {\n this.push(null);\n }\n });\n this.on(\"typeError\", function(err) {\n this.emit(\"error\", err);\n });\n }\n util.inherits(BlockEncoder, stream.Duplex);\n BlockEncoder.defaultCodecs = function() {\n return {\n \"null\": function(buf, cb) {\n cb(null, buf);\n },\n \"deflate\": zlib.deflateRaw\n };\n };\n BlockEncoder.getDefaultCodecs = BlockEncoder.defaultCodecs;\n BlockEncoder.prototype._writeHeader = function() {\n var schema = JSON.stringify(\n this._schema ? this._schema : this._type.getSchema({ exportAttrs: true })\n );\n var meta = utils.copyOwnProperties(\n this._metadata,\n { \"avro.schema\": utils.bufferFrom(schema), \"avro.codec\": utils.bufferFrom(this._codec) },\n true\n // Overwrite.\n );\n var Header = HEADER_TYPE.getRecordConstructor();\n var header = new Header(MAGIC_BYTES, meta, this._syncMarker);\n this.push(header.toBuffer());\n };\n BlockEncoder.prototype._write = function(val, encoding, cb) {\n if (this._needHeader) {\n this._writeHeader();\n this._needHeader = false;\n }\n var tap = this._tap;\n var pos = tap.pos;\n var flushing = false;\n if (this._writeValue(tap, val)) {\n if (!tap.isValid()) {\n if (pos) {\n this._flushChunk(pos, cb);\n flushing = true;\n }\n var len = tap.pos - pos;\n if (len > this._blockSize) {\n this._blockSize = len * 2;\n }\n tap.buf = utils.newBuffer(this._blockSize);\n tap.pos = 0;\n this._writeValue(tap, val);\n }\n this._blockCount++;\n } else {\n tap.pos = pos;\n }\n if (!flushing) {\n cb();\n }\n };\n BlockEncoder.prototype._flushChunk = function(pos, cb) {\n var tap = this._tap;\n pos = pos || tap.pos;\n this._compress(tap.buf.slice(0, pos), this._createBlockCallback(pos, cb));\n this._blockCount = 0;\n };\n BlockEncoder.prototype._read = function() {\n var self = this;\n var data = this._queue.pop();\n if (!data) {\n if (this._finished && !this._pending) {\n process.nextTick(function() {\n self.push(null);\n });\n } else {\n this._needPush = true;\n }\n return;\n }\n this.push(LONG_TYPE.toBuffer(data.count, true));\n this.push(LONG_TYPE.toBuffer(data.buf.length, true));\n this.push(data.buf);\n this.push(this._syncMarker);\n if (!this._finished) {\n data.cb();\n }\n };\n BlockEncoder.prototype._createBlockCallback = function(size, cb) {\n var self = this;\n var index = this._index++;\n var count = this._blockCount;\n this._pending++;\n return function(cause, data) {\n if (cause) {\n var err = new Error(f2(\"%s codec compression error\", self._codec));\n err.cause = cause;\n self.emit(\"error\", err);\n return;\n }\n self._pending--;\n self.emit(\"block\", new BlockInfo(count, size, data.length));\n self._queue.push(new BlockData(index, data, cb, count));\n if (self._needPush) {\n self._needPush = false;\n self._read();\n }\n };\n };\n function BlockInfo(count, raw, compressed) {\n this.valueCount = count;\n this.rawDataLength = raw;\n this.compressedDataLength = compressed;\n }\n function BlockData(index, buf, cb, count) {\n this.index = index;\n this.buf = buf;\n this.cb = cb;\n this.count = count | 0;\n }\n function tryReadBlock(tap) {\n var pos = tap.pos;\n var block = BLOCK_TYPE._read(tap);\n if (!tap.isValid()) {\n tap.pos = pos;\n return null;\n }\n return block;\n }\n function createReader(noDecode, writerType, readerType) {\n if (noDecode) {\n return /* @__PURE__ */ function(skipper) {\n return function(tap) {\n var pos = tap.pos;\n skipper(tap);\n return tap.buf.slice(pos, tap.pos);\n };\n }(writerType._skip);\n } else if (readerType) {\n var resolver = readerType.createResolver(writerType);\n return function(tap) {\n return resolver._read(tap);\n };\n } else {\n return function(tap) {\n return writerType._read(tap);\n };\n }\n }\n function copyBuffer(buf, pos, len) {\n var copy = utils.newBuffer(len);\n buf.copy(copy, 0, pos, pos + len);\n return copy;\n }\n module.exports = {\n BLOCK_TYPE,\n // For tests.\n HEADER_TYPE,\n // Idem.\n MAGIC_BYTES,\n // Idem.\n streams: {\n BlockDecoder,\n BlockEncoder,\n RawDecoder,\n RawEncoder\n }\n };\n }\n});\n\n// node_modules/avsc/lib/services.js\nvar require_services = __commonJS({\n \"node_modules/avsc/lib/services.js\"(exports, module) {\n \"use strict\";\n var types = require_types();\n var utils = require_utils();\n var buffer = __import_BUFFER;\n var events = __import_EVENTS;\n var stream = __import_STREAM;\n var util = __import_UTIL;\n var Buffer2 = buffer.Buffer;\n var Tap = utils.Tap;\n var Type = types.Type;\n var debug = util.debuglog(\"avsc:services\");\n var f2 = util.format;\n var OPTS = { namespace: \"org.apache.avro.ipc\" };\n var BOOLEAN_TYPE = Type.forSchema(\"boolean\", OPTS);\n var MAP_BYTES_TYPE = Type.forSchema({ type: \"map\", values: \"bytes\" }, OPTS);\n var STRING_TYPE = Type.forSchema(\"string\", OPTS);\n var HANDSHAKE_REQUEST_TYPE = Type.forSchema({\n name: \"HandshakeRequest\",\n type: \"record\",\n fields: [\n { name: \"clientHash\", type: { name: \"MD5\", type: \"fixed\", size: 16 } },\n { name: \"clientProtocol\", type: [\"null\", \"string\"], \"default\": null },\n { name: \"serverHash\", type: \"MD5\" },\n { name: \"meta\", type: [\"null\", MAP_BYTES_TYPE], \"default\": null }\n ]\n }, OPTS);\n var HANDSHAKE_RESPONSE_TYPE = Type.forSchema({\n name: \"HandshakeResponse\",\n type: \"record\",\n fields: [\n {\n name: \"match\",\n type: {\n name: \"HandshakeMatch\",\n type: \"enum\",\n symbols: [\"BOTH\", \"CLIENT\", \"NONE\"]\n }\n },\n { name: \"serverProtocol\", type: [\"null\", \"string\"], \"default\": null },\n { name: \"serverHash\", type: [\"null\", \"MD5\"], \"default\": null },\n { name: \"meta\", type: [\"null\", MAP_BYTES_TYPE], \"default\": null }\n ]\n }, OPTS);\n var PREFIX_LENGTH = 16;\n var PING_MESSAGE = new Message(\n \"\",\n // Empty name (invalid for other \"normal\" messages).\n Type.forSchema({ name: \"PingRequest\", type: \"record\", fields: [] }, OPTS),\n Type.forSchema([\"string\"], OPTS),\n Type.forSchema(\"null\", OPTS)\n );\n function Message(name, reqType, errType, resType, oneWay, doc) {\n this.name = name;\n if (!Type.isType(reqType, \"record\")) {\n throw new Error(\"invalid request type\");\n }\n this.requestType = reqType;\n if (!Type.isType(errType, \"union\") || !Type.isType(errType.getTypes()[0], \"string\")) {\n throw new Error(\"invalid error type\");\n }\n this.errorType = errType;\n if (oneWay) {\n if (!Type.isType(resType, \"null\") || errType.getTypes().length > 1) {\n throw new Error(\"inapplicable one-way parameter\");\n }\n }\n this.responseType = resType;\n this.oneWay = !!oneWay;\n this.doc = doc !== void 0 ? \"\" + doc : void 0;\n Object.freeze(this);\n }\n Message.forSchema = function(name, schema, opts) {\n opts = opts || {};\n if (!utils.isValidName(name)) {\n throw new Error(f2(\"invalid message name: %s\", name));\n }\n if (!Array.isArray(schema.request)) {\n throw new Error(f2(\"invalid message request: %s\", name));\n }\n var recordName = f2(\"%s.%sRequest\", OPTS.namespace, utils.capitalize(name));\n var reqType = Type.forSchema({\n name: recordName,\n type: \"record\",\n namespace: opts.namespace || \"\",\n // Don't leak request namespace.\n fields: schema.request\n }, opts);\n delete opts.registry[recordName];\n if (!schema.response) {\n throw new Error(f2(\"invalid message response: %s\", name));\n }\n var resType = Type.forSchema(schema.response, opts);\n if (schema.errors !== void 0 && !Array.isArray(schema.errors)) {\n throw new Error(f2(\"invalid message errors: %s\", name));\n }\n var errType = Type.forSchema([\"string\"].concat(schema.errors || []), opts);\n var oneWay = !!schema[\"one-way\"];\n return new Message(name, reqType, errType, resType, oneWay, schema.doc);\n };\n Message.prototype.schema = Type.prototype.getSchema;\n Message.prototype._attrs = function(opts) {\n var reqSchema = this.requestType._attrs(opts);\n var schema = {\n request: reqSchema.fields,\n response: this.responseType._attrs(opts)\n };\n var msgDoc = this.doc;\n if (msgDoc !== void 0) {\n schema.doc = msgDoc;\n }\n var errSchema = this.errorType._attrs(opts);\n if (errSchema.length > 1) {\n schema.errors = errSchema.slice(1);\n }\n if (this.oneWay) {\n schema[\"one-way\"] = true;\n }\n return schema;\n };\n utils.addDeprecatedGetters(\n Message,\n [\"name\", \"errorType\", \"requestType\", \"responseType\"]\n );\n Message.prototype.isOneWay = util.deprecate(\n function() {\n return this.oneWay;\n },\n \"use `.oneWay` directly instead of `.isOneWay()`\"\n );\n function Service(name, messages, types2, ptcl, server) {\n if (typeof name != \"string\") {\n return Service.forProtocol(name, messages);\n }\n this.name = name;\n this._messagesByName = messages || {};\n this.messages = Object.freeze(utils.objectValues(this._messagesByName));\n this._typesByName = types2 || {};\n this.types = Object.freeze(utils.objectValues(this._typesByName));\n this.protocol = ptcl;\n this._hashStr = utils.getHash(JSON.stringify(ptcl)).toString(\"binary\");\n this.doc = ptcl.doc ? \"\" + ptcl.doc : void 0;\n this._server = server || this.createServer({ silent: true });\n Object.freeze(this);\n }\n Service.Client = Client;\n Service.Server = Server;\n Service.compatible = function(clientSvc, serverSvc) {\n try {\n createReaders(clientSvc, serverSvc);\n } catch (err) {\n return false;\n }\n return true;\n };\n Service.forProtocol = function(ptcl, opts) {\n opts = opts || {};\n var name = ptcl.protocol;\n if (!name) {\n throw new Error(\"missing protocol name\");\n }\n if (ptcl.namespace !== void 0) {\n opts.namespace = ptcl.namespace;\n } else {\n var match = /^(.*)\\.[^.]+$/.exec(name);\n if (match) {\n opts.namespace = match[1];\n }\n }\n name = utils.qualify(name, opts.namespace);\n if (ptcl.types) {\n ptcl.types.forEach(function(obj) {\n Type.forSchema(obj, opts);\n });\n }\n var msgs;\n if (ptcl.messages) {\n msgs = {};\n Object.keys(ptcl.messages).forEach(function(key) {\n msgs[key] = Message.forSchema(key, ptcl.messages[key], opts);\n });\n }\n return new Service(name, msgs, opts.registry, ptcl);\n };\n Service.isService = function(any) {\n return !!any && any.hasOwnProperty(\"_hashStr\");\n };\n Service.prototype.createClient = function(opts) {\n var client = new Client(this, opts);\n process.nextTick(function() {\n if (opts && opts.server) {\n var obj = { objectMode: true };\n var pts = [new stream.PassThrough(obj), new stream.PassThrough(obj)];\n opts.server.createChannel({ readable: pts[0], writable: pts[1] }, obj);\n client.createChannel({ readable: pts[1], writable: pts[0] }, obj);\n } else if (opts && opts.transport) {\n client.createChannel(opts.transport);\n }\n });\n return client;\n };\n Service.prototype.createServer = function(opts) {\n return new Server(this, opts);\n };\n Object.defineProperty(Service.prototype, \"hash\", {\n enumerable: true,\n get: function() {\n return utils.bufferFrom(this._hashStr, \"binary\");\n }\n });\n Service.prototype.message = function(name) {\n return this._messagesByName[name];\n };\n Service.prototype.type = function(name) {\n return this._typesByName[name];\n };\n Service.prototype.inspect = function() {\n return f2(\"\", this.name);\n };\n utils.addDeprecatedGetters(\n Service,\n [\"message\", \"messages\", \"name\", \"type\", \"types\"]\n );\n Service.prototype.createEmitter = util.deprecate(\n function(transport, opts) {\n opts = opts || {};\n var client = this.createClient({\n cache: opts.cache,\n buffering: false,\n strictTypes: opts.strictErrors,\n timeout: opts.timeout\n });\n var channel = client.createChannel(transport, opts);\n forwardErrors(client, channel);\n return channel;\n },\n \"use `.createClient()` instead of `.createEmitter()`\"\n );\n Service.prototype.createListener = util.deprecate(\n function(transport, opts) {\n if (opts && opts.strictErrors) {\n throw new Error(\"use `.createServer()` to support strict errors\");\n }\n return this._server.createChannel(transport, opts);\n },\n \"use `.createServer().createChannel()` instead of `.createListener()`\"\n );\n Service.prototype.emit = util.deprecate(\n function(name, req, channel, cb) {\n if (!channel || !this.equals(channel.client._svc$)) {\n throw new Error(\"invalid emitter\");\n }\n var client = channel.client;\n Client.prototype.emitMessage.call(client, name, req, cb && cb.bind(this));\n return channel.getPending();\n },\n \"create a client via `.createClient()` to emit messages instead of `.emit()`\"\n );\n Service.prototype.equals = util.deprecate(\n function(any) {\n return Service.isService(any) && this.getFingerprint().equals(any.getFingerprint());\n },\n \"equality testing is deprecated, compare the `.protocol`s instead\"\n );\n Service.prototype.getFingerprint = util.deprecate(\n function(algorithm) {\n return utils.getHash(JSON.stringify(this.protocol), algorithm);\n },\n \"use `.hash` instead of `.getFingerprint()`\"\n );\n Service.prototype.getSchema = util.deprecate(\n Type.prototype.getSchema,\n \"use `.protocol` instead of `.getSchema()`\"\n );\n Service.prototype.on = util.deprecate(\n function(name, handler) {\n var self = this;\n this._server.onMessage(name, function(req, cb) {\n return handler.call(self, req, this.channel, cb);\n });\n return this;\n },\n \"use `.createServer().onMessage()` instead of `.on()`\"\n );\n Service.prototype.subprotocol = util.deprecate(\n function() {\n var parent = this._server;\n var opts = { strictTypes: parent._strict, cache: parent._cache };\n var server = new Server(parent.service, opts);\n server._handlers = Object.create(parent._handlers);\n return new Service(\n this.name,\n this._messagesByName,\n this._typesByName,\n this.protocol,\n server\n );\n },\n \"`.subprotocol()` will be removed in 5.1\"\n );\n Service.prototype._attrs = function(opts) {\n var ptcl = { protocol: this.name };\n var types2 = [];\n this.types.forEach(function(t) {\n if (t.getName() === void 0) {\n return;\n }\n var typeSchema = t._attrs(opts);\n if (typeof typeSchema != \"string\") {\n types2.push(typeSchema);\n }\n });\n if (types2.length) {\n ptcl.types = types2;\n }\n var msgNames = Object.keys(this._messagesByName);\n if (msgNames.length) {\n ptcl.messages = {};\n msgNames.forEach(function(name) {\n ptcl.messages[name] = this._messagesByName[name]._attrs(opts);\n }, this);\n }\n if (opts && opts.exportAttrs && this.doc !== void 0) {\n ptcl.doc = this.doc;\n }\n return ptcl;\n };\n function discoverProtocol(transport, opts, cb) {\n if (cb === void 0 && typeof opts == \"function\") {\n cb = opts;\n opts = void 0;\n }\n var svc = new Service({ protocol: \"Empty\" }, OPTS);\n var ptclStr;\n svc.createClient({ timeout: opts && opts.timeout }).createChannel(transport, {\n scope: opts && opts.scope,\n endWritable: typeof transport == \"function\"\n // Stateless transports only.\n }).once(\"handshake\", function(hreq, hres) {\n ptclStr = hres.serverProtocol;\n this.destroy(true);\n }).once(\"eot\", function(pending, err) {\n if (err && !/interrupted/.test(err)) {\n cb(err);\n } else {\n cb(null, JSON.parse(ptclStr));\n }\n });\n }\n function Client(svc, opts) {\n opts = opts || {};\n events.EventEmitter.call(this);\n this._svc$ = svc;\n this._channels$ = [];\n this._fns$ = [];\n this._buffering$ = !!opts.buffering;\n this._cache$ = opts.cache || {};\n this._policy$ = opts.channelPolicy;\n this._strict$ = !!opts.strictTypes;\n this._timeout$ = utils.getOption(opts, \"timeout\", 1e4);\n if (opts.remoteProtocols) {\n insertRemoteProtocols(this._cache$, opts.remoteProtocols, svc, true);\n }\n this._svc$.messages.forEach(function(msg) {\n this[msg.name] = this._createMessageHandler$(msg);\n }, this);\n }\n util.inherits(Client, events.EventEmitter);\n Client.prototype.activeChannels = function() {\n return this._channels$.slice();\n };\n Client.prototype.createChannel = function(transport, opts) {\n var objectMode = opts && opts.objectMode;\n var channel;\n if (typeof transport == \"function\") {\n var writableFactory;\n if (objectMode) {\n writableFactory = transport;\n } else {\n writableFactory = function(cb) {\n var encoder2 = new FrameEncoder();\n var writable2 = transport(function(err, readable2) {\n if (err) {\n cb(err);\n return;\n }\n var decoder2 = new FrameDecoder().once(\"error\", function(err2) {\n channel.destroy(err2);\n });\n cb(null, readable2.pipe(decoder2));\n });\n if (writable2) {\n encoder2.pipe(writable2);\n return encoder2;\n }\n };\n }\n channel = new StatelessClientChannel(this, writableFactory, opts);\n } else {\n var readable, writable;\n if (isStream(transport)) {\n readable = writable = transport;\n } else {\n readable = transport.readable;\n writable = transport.writable;\n }\n if (!objectMode) {\n var decoder = new NettyDecoder();\n readable = readable.pipe(decoder);\n var encoder = new NettyEncoder();\n encoder.pipe(writable);\n writable = encoder;\n }\n channel = new StatefulClientChannel(this, readable, writable, opts);\n if (!objectMode) {\n channel.once(\"eot\", function() {\n readable.unpipe(decoder);\n encoder.unpipe(writable);\n });\n decoder.once(\"error\", function(err) {\n channel.destroy(err);\n });\n }\n }\n var channels = this._channels$;\n channels.push(channel);\n channel.once(\"_drain\", function() {\n channels.splice(channels.indexOf(this), 1);\n });\n this._buffering$ = false;\n this.emit(\"channel\", channel);\n return channel;\n };\n Client.prototype.destroyChannels = function(opts) {\n this._channels$.forEach(function(channel) {\n channel.destroy(opts && opts.noWait);\n });\n };\n Client.prototype.emitMessage = function(name, req, opts, cb) {\n var msg = getExistingMessage(this._svc$, name);\n var wreq = new WrappedRequest(msg, {}, req);\n this._emitMessage$(wreq, opts, cb);\n };\n Client.prototype.remoteProtocols = function() {\n return getRemoteProtocols(this._cache$, true);\n };\n Object.defineProperty(Client.prototype, \"service\", {\n enumerable: true,\n get: function() {\n return this._svc$;\n }\n });\n Client.prototype.use = function() {\n var i, l, fn;\n for (i = 0, l = arguments.length; i < l; i++) {\n fn = arguments[i];\n this._fns$.push(fn.length < 3 ? fn(this) : fn);\n }\n return this;\n };\n Client.prototype._emitMessage$ = function(wreq, opts, cb) {\n if (!cb && typeof opts === \"function\") {\n cb = opts;\n opts = void 0;\n }\n var self = this;\n var channels = this._channels$;\n var numChannels = channels.length;\n if (!numChannels) {\n if (this._buffering$) {\n debug(\"no active client channels, buffering call\");\n this.once(\"channel\", function() {\n this._emitMessage$(wreq, opts, cb);\n });\n } else {\n var err = new Error(\"no active channels\");\n process.nextTick(function() {\n if (cb) {\n cb.call(new CallContext(wreq._msg), err);\n } else {\n self.emit(\"error\", err);\n }\n });\n }\n return;\n }\n opts = opts || {};\n if (opts.timeout === void 0) {\n opts.timeout = this._timeout$;\n }\n var channel;\n if (numChannels === 1) {\n channel = channels[0];\n } else if (this._policy$) {\n channel = this._policy$(this._channels$.slice());\n if (!channel) {\n debug(\"policy returned no channel, skipping call\");\n return;\n }\n } else {\n channel = channels[Math.floor(Math.random() * numChannels)];\n }\n channel._emit(wreq, opts, function(err2, wres) {\n var ctx = this;\n var errType = ctx.message.errorType;\n if (err2) {\n if (self._strict$) {\n err2 = errType.clone(err2.message, { wrapUnions: true });\n }\n done(err2);\n return;\n }\n if (!wres) {\n done();\n return;\n }\n err2 = wres.error;\n if (!self._strict$) {\n if (err2 === void 0) {\n err2 = null;\n } else {\n if (Type.isType(errType, \"union:unwrapped\")) {\n if (typeof err2 == \"string\") {\n err2 = new Error(err2);\n }\n } else if (err2 && err2.string && typeof err2.string == \"string\") {\n err2 = new Error(err2.string);\n }\n }\n }\n done(err2, wres.response);\n function done(err3, res) {\n if (cb) {\n cb.call(ctx, err3, res);\n } else if (err3) {\n self.emit(\"error\", err3);\n }\n }\n });\n };\n Client.prototype._createMessageHandler$ = function(msg) {\n var fields = msg.requestType.getFields();\n var names = fields.map(function(f3) {\n return f3.getName();\n });\n var body = \"return function \" + msg.name + \"(\";\n if (names.length) {\n body += names.join(\", \") + \", \";\n }\n body += \"opts, cb) {\\n\";\n body += \" var req = {\";\n body += names.map(function(n) {\n return n + \": \" + n;\n }).join(\", \");\n body += \"};\\n\";\n body += \" return this.emitMessage('\" + msg.name + \"', req, opts, cb);\\n\";\n body += \"};\";\n return new Function(body)();\n };\n function Server(svc, opts) {\n opts = opts || {};\n events.EventEmitter.call(this);\n this.service = svc;\n this._handlers = {};\n this._fns = [];\n this._channels = {};\n this._nextChannelId = 1;\n this._cache = opts.cache || {};\n this._defaultHandler = opts.defaultHandler;\n this._sysErrFormatter = opts.systemErrorFormatter;\n this._silent = !!opts.silent;\n this._strict = !!opts.strictTypes;\n if (opts.remoteProtocols) {\n insertRemoteProtocols(this._cache, opts.remoteProtocols, svc, false);\n }\n svc.messages.forEach(function(msg) {\n var name = msg.name;\n if (!opts.noCapitalize) {\n name = utils.capitalize(name);\n }\n this[\"on\" + name] = this._createMessageHandler(msg);\n }, this);\n }\n util.inherits(Server, events.EventEmitter);\n Server.prototype.activeChannels = function() {\n return utils.objectValues(this._channels);\n };\n Server.prototype.createChannel = function(transport, opts) {\n var objectMode = opts && opts.objectMode;\n var channel;\n if (typeof transport == \"function\") {\n var readableFactory;\n if (objectMode) {\n readableFactory = transport;\n } else {\n readableFactory = function(cb) {\n var decoder2 = new FrameDecoder().once(\"error\", function(err) {\n channel.destroy(err);\n });\n return transport(function(err, writable2) {\n if (err) {\n cb(err);\n return;\n }\n var encoder2 = new FrameEncoder();\n encoder2.pipe(writable2);\n cb(null, encoder2);\n }).pipe(decoder2);\n };\n }\n channel = new StatelessServerChannel(this, readableFactory, opts);\n } else {\n var readable, writable;\n if (isStream(transport)) {\n readable = writable = transport;\n } else {\n readable = transport.readable;\n writable = transport.writable;\n }\n if (!objectMode) {\n var decoder = new NettyDecoder();\n readable = readable.pipe(decoder);\n var encoder = new NettyEncoder();\n encoder.pipe(writable);\n writable = encoder;\n }\n channel = new StatefulServerChannel(this, readable, writable, opts);\n if (!objectMode) {\n channel.once(\"eot\", function() {\n readable.unpipe(decoder);\n encoder.unpipe(writable);\n });\n decoder.once(\"error\", function(err) {\n channel.destroy(err);\n });\n }\n }\n if (!this.listeners(\"error\").length) {\n this.on(\"error\", this._onError);\n }\n var channelId = this._nextChannelId++;\n var channels = this._channels;\n channels[channelId] = channel.once(\"eot\", function() {\n delete channels[channelId];\n });\n this.emit(\"channel\", channel);\n return channel;\n };\n Server.prototype.onMessage = function(name, handler) {\n getExistingMessage(this.service, name);\n this._handlers[name] = handler;\n return this;\n };\n Server.prototype.remoteProtocols = function() {\n return getRemoteProtocols(this._cache, false);\n };\n Server.prototype.use = function() {\n var i, l, fn;\n for (i = 0, l = arguments.length; i < l; i++) {\n fn = arguments[i];\n this._fns.push(fn.length < 3 ? fn(this) : fn);\n }\n return this;\n };\n Server.prototype._createMessageHandler = function(msg) {\n var name = msg.name;\n var fields = msg.requestType.fields;\n var numArgs = fields.length;\n var args = fields.length ? \", \" + fields.map(function(f3) {\n return \"req.\" + f3.name;\n }).join(\", \") : \"\";\n var body = \"return function (handler) {\\n\";\n body += \" if (handler.length > \" + numArgs + \") {\\n\";\n body += \" return this.onMessage('\" + name + \"', function (req, cb) {\\n\";\n body += \" return handler.call(this\" + args + \", cb);\\n\";\n body += \" });\\n\";\n body += \" } else {\\n\";\n body += \" return this.onMessage('\" + name + \"', function (req) {\\n\";\n body += \" return handler.call(this\" + args + \");\\n\";\n body += \" });\\n\";\n body += \" }\\n\";\n body += \"};\\n\";\n return new Function(body)();\n };\n Server.prototype._onError = function(err) {\n if (!this._silent && err.rpcCode !== \"UNKNOWN_PROTOCOL\") {\n console.error();\n if (err.rpcCode) {\n console.error(err.rpcCode);\n console.error(err.cause);\n } else {\n console.error(\"INTERNAL_SERVER_ERROR\");\n console.error(err);\n }\n }\n };\n function ClientChannel(client, opts) {\n opts = opts || {};\n events.EventEmitter.call(this);\n this.client = client;\n this.timeout = utils.getOption(opts, \"timeout\", client._timeout$);\n this._endWritable = !!utils.getOption(opts, \"endWritable\", true);\n this._prefix = normalizedPrefix(opts.scope);\n var cache = client._cache$;\n var clientSvc = client._svc$;\n var hash = opts.serverHash;\n if (!hash) {\n hash = clientSvc.hash;\n }\n var adapter = cache[hash];\n if (!adapter) {\n hash = clientSvc.hash;\n adapter = cache[hash] = new Adapter(clientSvc, clientSvc, hash);\n }\n this._adapter = adapter;\n this._registry = new Registry(this, PREFIX_LENGTH);\n this.pending = 0;\n this.destroyed = false;\n this.draining = false;\n this.once(\"_eot\", function(pending, err) {\n debug(\"client channel EOT\");\n this.destroyed = true;\n this.emit(\"eot\", pending, err);\n });\n }\n util.inherits(ClientChannel, events.EventEmitter);\n ClientChannel.prototype.destroy = function(noWait) {\n debug(\"destroying client channel\");\n if (!this.draining) {\n this.draining = true;\n this.emit(\"_drain\");\n }\n var registry = this._registry;\n var pending = this.pending;\n if (noWait) {\n registry.clear();\n }\n if (noWait || !pending) {\n if (isError(noWait)) {\n debug(\"fatal client channel error: %s\", noWait);\n this.emit(\"_eot\", pending, noWait);\n } else {\n this.emit(\"_eot\", pending);\n }\n } else {\n debug(\"client channel entering drain mode (%s pending)\", pending);\n }\n };\n ClientChannel.prototype.ping = function(timeout, cb) {\n if (!cb && typeof timeout == \"function\") {\n cb = timeout;\n timeout = void 0;\n }\n var self = this;\n var wreq = new WrappedRequest(PING_MESSAGE);\n this._emit(wreq, { timeout }, function(err) {\n if (cb) {\n cb.call(self, err);\n } else if (err) {\n self.destroy(err);\n }\n });\n };\n ClientChannel.prototype._createHandshakeRequest = function(adapter, noSvc) {\n var svc = this.client._svc$;\n return {\n clientHash: svc.hash,\n clientProtocol: noSvc ? null : JSON.stringify(svc.protocol),\n serverHash: adapter._hash\n };\n };\n ClientChannel.prototype._emit = function(wreq, opts, cb) {\n var msg = wreq._msg;\n var wres = msg.oneWay ? void 0 : new WrappedResponse(msg, {});\n var ctx = new CallContext(msg, this);\n var self = this;\n this.pending++;\n process.nextTick(function() {\n if (!msg.name) {\n onTransition(wreq, wres, onCompletion);\n } else {\n self.emit(\"outgoingCall\", ctx, opts);\n var fns = self.client._fns$;\n debug(\"starting client middleware chain (%s middleware)\", fns.length);\n chainMiddleware({\n fns,\n ctx,\n wreq,\n wres,\n onTransition,\n onCompletion,\n onError\n });\n }\n });\n function onTransition(wreq2, wres2, prev) {\n var err, reqBuf;\n if (self.destroyed) {\n err = new Error(\"channel destroyed\");\n } else {\n try {\n reqBuf = wreq2.toBuffer();\n } catch (cause) {\n err = serializationError(\n f2(\"invalid %j request\", msg.name),\n wreq2,\n [\n { name: \"headers\", type: MAP_BYTES_TYPE },\n { name: \"request\", type: msg.requestType }\n ]\n );\n }\n }\n if (err) {\n prev(err);\n return;\n }\n var timeout = opts && opts.timeout !== void 0 ? opts.timeout : self.timeout;\n var id = self._registry.add(timeout, function(err2, resBuf, adapter) {\n if (!err2 && !msg.oneWay) {\n try {\n adapter._decodeResponse(resBuf, wres2, msg);\n } catch (cause) {\n err2 = cause;\n }\n }\n prev(err2);\n });\n id |= self._prefix;\n debug(\"sending message %s\", id);\n self._send(id, reqBuf, !!msg && msg.oneWay);\n }\n function onCompletion(err) {\n self.pending--;\n cb.call(ctx, err, wres);\n if (self.draining && !self.destroyed && !self.pending) {\n self.destroy();\n }\n }\n function onError(err) {\n self.client.emit(\"error\", err, self);\n }\n };\n ClientChannel.prototype._getAdapter = function(hres) {\n var hash = hres.serverHash;\n var cache = this.client._cache$;\n var adapter = cache[hash];\n if (adapter) {\n return adapter;\n }\n var ptcl = JSON.parse(hres.serverProtocol);\n var serverSvc = Service.forProtocol(ptcl);\n adapter = new Adapter(this.client._svc$, serverSvc, hash, true);\n return cache[hash] = adapter;\n };\n ClientChannel.prototype._matchesPrefix = function(id) {\n return matchesPrefix(id, this._prefix);\n };\n ClientChannel.prototype._send = utils.abstractFunction;\n utils.addDeprecatedGetters(ClientChannel, [\"pending\", \"timeout\"]);\n ClientChannel.prototype.getCache = util.deprecate(\n function() {\n return this.client._cache$;\n },\n \"use `.remoteProtocols()` instead of `.getCache()`\"\n );\n ClientChannel.prototype.getProtocol = util.deprecate(\n function() {\n return this.client._svc$;\n },\n \"use `.service` instead or `.getProtocol()`\"\n );\n ClientChannel.prototype.isDestroyed = util.deprecate(\n function() {\n return this.destroyed;\n },\n \"use `.destroyed` instead of `.isDestroyed`\"\n );\n function StatelessClientChannel(client, writableFactory, opts) {\n ClientChannel.call(this, client, opts);\n this._writableFactory = writableFactory;\n if (!opts || !opts.noPing) {\n debug(\"emitting ping request\");\n this.ping();\n }\n }\n util.inherits(StatelessClientChannel, ClientChannel);\n StatelessClientChannel.prototype._send = function(id, reqBuf) {\n var cb = this._registry.get(id);\n var adapter = this._adapter;\n var self = this;\n process.nextTick(emit);\n return true;\n function emit(retry) {\n if (self.destroyed) {\n return;\n }\n var hreq = self._createHandshakeRequest(adapter, !retry);\n var writable = self._writableFactory.call(self, function(err, readable) {\n if (err) {\n cb(err);\n return;\n }\n readable.on(\"data\", function(obj) {\n debug(\"received response %s\", obj.id);\n var buf = Buffer2.concat(obj.payload);\n try {\n var parts = readHead(HANDSHAKE_RESPONSE_TYPE, buf);\n var hres = parts.head;\n if (hres.serverHash) {\n adapter = self._getAdapter(hres);\n }\n } catch (cause) {\n cb(cause);\n return;\n }\n var match = hres.match;\n debug(\"handshake match: %s\", match);\n self.emit(\"handshake\", hreq, hres);\n if (match === \"NONE\") {\n process.nextTick(function() {\n emit(true);\n });\n } else {\n self._adapter = adapter;\n cb(null, parts.tail, adapter);\n }\n });\n });\n if (!writable) {\n cb(new Error(\"invalid writable stream\"));\n return;\n }\n writable.write({\n id,\n payload: [HANDSHAKE_REQUEST_TYPE.toBuffer(hreq), reqBuf]\n });\n if (self._endWritable) {\n writable.end();\n }\n }\n };\n function StatefulClientChannel(client, readable, writable, opts) {\n ClientChannel.call(this, client, opts);\n this._readable = readable;\n this._writable = writable;\n this._connected = !!(opts && opts.noPing);\n this._readable.on(\"end\", onEnd);\n this._writable.on(\"finish\", onFinish);\n var self = this;\n var timer = null;\n this.once(\"eot\", function() {\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n if (!self._connected) {\n self.emit(\"_ready\");\n }\n this._writable.removeListener(\"finish\", onFinish);\n if (this._endWritable) {\n debug(\"ending transport\");\n this._writable.end();\n }\n this._readable.removeListener(\"data\", onPing).removeListener(\"data\", onMessage).removeListener(\"end\", onEnd);\n });\n var hreq;\n if (this._connected) {\n this._readable.on(\"data\", onMessage);\n } else {\n this._readable.on(\"data\", onPing);\n process.nextTick(ping);\n if (self.timeout) {\n timer = setTimeout(function() {\n self.destroy(new Error(\"timeout\"));\n }, self.timeout);\n }\n }\n function ping(retry) {\n if (self.destroyed) {\n return;\n }\n hreq = self._createHandshakeRequest(self._adapter, !retry);\n var payload = [\n HANDSHAKE_REQUEST_TYPE.toBuffer(hreq),\n utils.bufferFrom([0, 0])\n // No header, no data (empty message name).\n ];\n self._writable.write({ id: self._prefix, payload });\n }\n function onPing(obj) {\n if (!self._matchesPrefix(obj.id)) {\n debug(\"discarding unscoped response %s (still connecting)\", obj.id);\n return;\n }\n var buf = Buffer2.concat(obj.payload);\n try {\n var hres = readHead(HANDSHAKE_RESPONSE_TYPE, buf).head;\n if (hres.serverHash) {\n self._adapter = self._getAdapter(hres);\n }\n } catch (cause) {\n self.destroy(cause);\n return;\n }\n var match = hres.match;\n debug(\"handshake match: %s\", match);\n self.emit(\"handshake\", hreq, hres);\n if (match === \"NONE\") {\n process.nextTick(function() {\n ping(true);\n });\n } else {\n debug(\"successfully connected\");\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n self._readable.removeListener(\"data\", onPing).on(\"data\", onMessage);\n self._connected = true;\n self.emit(\"_ready\");\n hreq = null;\n }\n }\n function onMessage(obj) {\n var id = obj.id;\n if (!self._matchesPrefix(id)) {\n debug(\"discarding unscoped message %s\", id);\n return;\n }\n var cb = self._registry.get(id);\n if (cb) {\n process.nextTick(function() {\n debug(\"received message %s\", id);\n cb(null, Buffer2.concat(obj.payload), self._adapter);\n });\n }\n }\n function onEnd() {\n self.destroy(true);\n }\n function onFinish() {\n self.destroy();\n }\n }\n util.inherits(StatefulClientChannel, ClientChannel);\n StatefulClientChannel.prototype._emit = function() {\n if (this._connected || this.draining) {\n ClientChannel.prototype._emit.apply(this, arguments);\n } else {\n debug(\"queuing request\");\n var args = [];\n var i, l;\n for (i = 0, l = arguments.length; i < l; i++) {\n args.push(arguments[i]);\n }\n this.once(\"_ready\", function() {\n this._emit.apply(this, args);\n });\n }\n };\n StatefulClientChannel.prototype._send = function(id, reqBuf, oneWay) {\n if (oneWay) {\n var self = this;\n process.nextTick(function() {\n self._registry.get(id)(null, utils.bufferFrom([0, 0, 0]), self._adapter);\n });\n }\n return this._writable.write({ id, payload: [reqBuf] });\n };\n function ServerChannel(server, opts) {\n opts = opts || {};\n events.EventEmitter.call(this);\n this.server = server;\n this._endWritable = !!utils.getOption(opts, \"endWritable\", true);\n this._prefix = normalizedPrefix(opts.scope);\n var cache = server._cache;\n var svc = server.service;\n var hash = svc.hash;\n if (!cache[hash]) {\n cache[hash] = new Adapter(svc, svc, hash);\n }\n this._adapter = null;\n this.destroyed = false;\n this.draining = false;\n this.pending = 0;\n this.once(\"_eot\", function(pending, err) {\n debug(\"server channel EOT\");\n this.emit(\"eot\", pending, err);\n });\n }\n util.inherits(ServerChannel, events.EventEmitter);\n ServerChannel.prototype.destroy = function(noWait) {\n if (!this.draining) {\n this.draining = true;\n this.emit(\"_drain\");\n }\n if (noWait || !this.pending) {\n this.destroyed = true;\n if (isError(noWait)) {\n debug(\"fatal server channel error: %s\", noWait);\n this.emit(\"_eot\", this.pending, noWait);\n } else {\n this.emit(\"_eot\", this.pending);\n }\n }\n };\n ServerChannel.prototype._createHandshakeResponse = function(err, hreq) {\n var svc = this.server.service;\n var buf = svc.hash;\n var serverMatch = hreq && hreq.serverHash.equals(buf);\n return {\n match: err ? \"NONE\" : serverMatch ? \"BOTH\" : \"CLIENT\",\n serverProtocol: serverMatch ? null : JSON.stringify(svc.protocol),\n serverHash: serverMatch ? null : buf\n };\n };\n ServerChannel.prototype._getAdapter = function(hreq) {\n var hash = hreq.clientHash;\n var adapter = this.server._cache[hash];\n if (adapter) {\n return adapter;\n }\n if (!hreq.clientProtocol) {\n throw toRpcError(\"UNKNOWN_PROTOCOL\");\n }\n var ptcl = JSON.parse(hreq.clientProtocol);\n var clientSvc = Service.forProtocol(ptcl);\n adapter = new Adapter(clientSvc, this.server.service, hash, true);\n return this.server._cache[hash] = adapter;\n };\n ServerChannel.prototype._matchesPrefix = function(id) {\n return matchesPrefix(id, this._prefix);\n };\n ServerChannel.prototype._receive = function(reqBuf, adapter, cb) {\n var self = this;\n var wreq;\n try {\n wreq = adapter._decodeRequest(reqBuf);\n } catch (cause) {\n cb(self._encodeSystemError(toRpcError(\"INVALID_REQUEST\", cause)));\n return;\n }\n var msg = wreq._msg;\n var wres = new WrappedResponse(msg, {});\n if (!msg.name) {\n wres.response = null;\n cb(wres.toBuffer(), false);\n return;\n }\n var ctx = new CallContext(msg, this);\n self.emit(\"incomingCall\", ctx);\n var fns = this.server._fns;\n debug(\"starting server middleware chain (%s middleware)\", fns.length);\n self.pending++;\n chainMiddleware({\n fns,\n ctx,\n wreq,\n wres,\n onTransition,\n onCompletion,\n onError\n });\n function onTransition(wreq2, wres2, prev) {\n var handler = self.server._handlers[msg.name];\n if (!handler) {\n var defaultHandler = self.server._defaultHandler;\n if (defaultHandler) {\n defaultHandler.call(ctx, wreq2, wres2, prev);\n } else {\n var cause = new Error(f2(\"no handler for %s\", msg.name));\n prev(toRpcError(\"NOT_IMPLEMENTED\", cause));\n }\n } else {\n var pending = !msg.oneWay;\n try {\n if (pending) {\n handler.call(ctx, wreq2.request, function(err, res) {\n pending = false;\n wres2.error = err;\n wres2.response = res;\n prev();\n });\n } else {\n handler.call(ctx, wreq2.request);\n prev();\n }\n } catch (err) {\n if (pending) {\n pending = false;\n prev(err);\n } else {\n onError(err);\n }\n }\n }\n }\n function onCompletion(err) {\n self.pending--;\n var server = self.server;\n var resBuf;\n if (!err) {\n var resErr = wres.error;\n var isStrict = server._strict;\n if (!isStrict) {\n if (isError(resErr)) {\n wres.error = msg.errorType.clone(resErr.message, { wrapUnions: true });\n } else if (resErr === null) {\n resErr = wres.error = void 0;\n }\n if (resErr === void 0 && wres.response === void 0 && msg.responseType.isValid(null)) {\n wres.response = null;\n }\n }\n try {\n resBuf = wres.toBuffer();\n } catch (cause) {\n if (wres.error !== void 0) {\n err = serializationError(\n f2(\"invalid %j error\", msg.name),\n // Sic.\n wres,\n [\n { name: \"headers\", type: MAP_BYTES_TYPE },\n { name: \"error\", type: msg.errorType }\n ]\n );\n } else {\n err = serializationError(\n f2(\"invalid %j response\", msg.name),\n wres,\n [\n { name: \"headers\", type: MAP_BYTES_TYPE },\n { name: \"response\", type: msg.responseType }\n ]\n );\n }\n }\n }\n if (!resBuf) {\n resBuf = self._encodeSystemError(err, wres.headers);\n } else if (resErr !== void 0) {\n server.emit(\"error\", toRpcError(\"APPLICATION_ERROR\", resErr));\n }\n cb(resBuf, msg.oneWay);\n if (self.draining && !self.pending) {\n self.destroy();\n }\n }\n function onError(err) {\n self.server.emit(\"error\", err, self);\n }\n };\n utils.addDeprecatedGetters(ServerChannel, [\"pending\"]);\n ServerChannel.prototype.getCache = util.deprecate(\n function() {\n return this.server._cache;\n },\n \"use `.remoteProtocols()` instead of `.getCache()`\"\n );\n ServerChannel.prototype.getProtocol = util.deprecate(\n function() {\n return this.server.service;\n },\n \"use `.service` instead of `.getProtocol()`\"\n );\n ServerChannel.prototype.isDestroyed = util.deprecate(\n function() {\n return this.destroyed;\n },\n \"use `.destroyed` instead of `.isDestroyed`\"\n );\n ServerChannel.prototype._encodeSystemError = function(err, header) {\n var server = this.server;\n server.emit(\"error\", err, this);\n var errStr;\n if (server._sysErrFormatter) {\n errStr = server._sysErrFormatter.call(this, err);\n } else if (err.rpcCode) {\n errStr = err.message;\n }\n var hdrBuf;\n if (header) {\n try {\n hdrBuf = MAP_BYTES_TYPE.toBuffer(header);\n } catch (cause) {\n server.emit(\"error\", cause, this);\n }\n }\n return Buffer2.concat([\n hdrBuf || utils.bufferFrom([0]),\n utils.bufferFrom([1, 0]),\n // Error flag and first union index.\n STRING_TYPE.toBuffer(errStr || \"internal server error\")\n ]);\n };\n function StatelessServerChannel(server, readableFactory, opts) {\n ServerChannel.call(this, server, opts);\n this._writable = void 0;\n var self = this;\n var readable;\n process.nextTick(function() {\n readable = readableFactory.call(self, function(err, writable) {\n process.nextTick(function() {\n if (err) {\n onFinish(err);\n return;\n }\n self._writable = writable.on(\"finish\", onFinish);\n self.emit(\"_writable\");\n });\n }).on(\"data\", onRequest).on(\"end\", onEnd);\n });\n function onRequest(obj) {\n var id = obj.id;\n var buf = Buffer2.concat(obj.payload);\n var err;\n try {\n var parts = readHead(HANDSHAKE_REQUEST_TYPE, buf);\n var hreq = parts.head;\n var adapter = self._getAdapter(hreq);\n } catch (cause) {\n err = toRpcError(\"INVALID_HANDSHAKE_REQUEST\", cause);\n }\n var hres = self._createHandshakeResponse(err, hreq);\n self.emit(\"handshake\", hreq, hres);\n if (err) {\n done(self._encodeSystemError(err));\n } else {\n self._receive(parts.tail, adapter, done);\n }\n function done(resBuf) {\n if (!self.destroyed) {\n if (!self._writable) {\n self.once(\"_writable\", function() {\n done(resBuf);\n });\n return;\n }\n self._writable.write({\n id,\n payload: [HANDSHAKE_RESPONSE_TYPE.toBuffer(hres), resBuf]\n });\n }\n if (self._writable && self._endWritable) {\n self._writable.end();\n }\n }\n }\n function onEnd() {\n self.destroy();\n }\n function onFinish(err) {\n readable.removeListener(\"data\", onRequest).removeListener(\"end\", onEnd);\n self.destroy(err || true);\n }\n }\n util.inherits(StatelessServerChannel, ServerChannel);\n function StatefulServerChannel(server, readable, writable, opts) {\n ServerChannel.call(this, server, opts);\n this._adapter = void 0;\n this._writable = writable.on(\"finish\", onFinish);\n this._readable = readable.on(\"data\", onHandshake).on(\"end\", onEnd);\n this.once(\"_drain\", function() {\n this._readable.removeListener(\"data\", onHandshake).removeListener(\"data\", onRequest).removeListener(\"end\", onEnd);\n }).once(\"eot\", function() {\n this._writable.removeListener(\"finish\", onFinish);\n if (this._endWritable) {\n this._writable.end();\n }\n });\n var self = this;\n function onHandshake(obj) {\n var id = obj.id;\n if (!self._matchesPrefix(id)) {\n return;\n }\n var buf = Buffer2.concat(obj.payload);\n var err;\n try {\n var parts = readHead(HANDSHAKE_REQUEST_TYPE, buf);\n var hreq = parts.head;\n self._adapter = self._getAdapter(hreq);\n } catch (cause) {\n err = toRpcError(\"INVALID_HANDSHAKE_REQUEST\", cause);\n }\n var hres = self._createHandshakeResponse(err, hreq);\n self.emit(\"handshake\", hreq, hres);\n if (err) {\n done(self._encodeSystemError(err));\n } else {\n self._readable.removeListener(\"data\", onHandshake).on(\"data\", onRequest);\n self._receive(parts.tail, self._adapter, done);\n }\n function done(resBuf) {\n if (self.destroyed) {\n return;\n }\n self._writable.write({\n id,\n payload: [HANDSHAKE_RESPONSE_TYPE.toBuffer(hres), resBuf]\n });\n }\n }\n function onRequest(obj) {\n var id = obj.id;\n if (!self._matchesPrefix(id)) {\n return;\n }\n var reqBuf = Buffer2.concat(obj.payload);\n self._receive(reqBuf, self._adapter, function(resBuf, oneWay) {\n if (self.destroyed || oneWay) {\n return;\n }\n self._writable.write({ id, payload: [resBuf] });\n });\n }\n function onEnd() {\n self.destroy();\n }\n function onFinish() {\n self.destroy(true);\n }\n }\n util.inherits(StatefulServerChannel, ServerChannel);\n function WrappedRequest(msg, hdrs, req) {\n this._msg = msg;\n this.headers = hdrs || {};\n this.request = req || {};\n }\n WrappedRequest.prototype.toBuffer = function() {\n var msg = this._msg;\n return Buffer2.concat([\n MAP_BYTES_TYPE.toBuffer(this.headers),\n STRING_TYPE.toBuffer(msg.name),\n msg.requestType.toBuffer(this.request)\n ]);\n };\n function WrappedResponse(msg, hdr, err, res) {\n this._msg = msg;\n this.headers = hdr;\n this.error = err;\n this.response = res;\n }\n WrappedResponse.prototype.toBuffer = function() {\n var hdr = MAP_BYTES_TYPE.toBuffer(this.headers);\n var hasError = this.error !== void 0;\n return Buffer2.concat([\n hdr,\n BOOLEAN_TYPE.toBuffer(hasError),\n hasError ? this._msg.errorType.toBuffer(this.error) : this._msg.responseType.toBuffer(this.response)\n ]);\n };\n function CallContext(msg, channel) {\n this.channel = channel;\n this.locals = {};\n this.message = msg;\n Object.freeze(this);\n }\n function Registry(ctx, prefixLength) {\n this._ctx = ctx;\n this._mask = ~0 >>> (prefixLength | 0);\n this._id = 0;\n this._n = 0;\n this._cbs = {};\n }\n Registry.prototype.get = function(id) {\n return this._cbs[id & this._mask];\n };\n Registry.prototype.add = function(timeout, fn) {\n this._id = this._id + 1 & this._mask;\n var self = this;\n var id = this._id;\n var timer;\n if (timeout > 0) {\n timer = setTimeout(function() {\n cb(new Error(\"timeout\"));\n }, timeout);\n }\n this._cbs[id] = cb;\n this._n++;\n return id;\n function cb() {\n if (!self._cbs[id]) {\n return;\n }\n delete self._cbs[id];\n self._n--;\n if (timer) {\n clearTimeout(timer);\n }\n fn.apply(self._ctx, arguments);\n }\n };\n Registry.prototype.clear = function() {\n Object.keys(this._cbs).forEach(function(id) {\n this._cbs[id](new Error(\"interrupted\"));\n }, this);\n };\n function Adapter(clientSvc, serverSvc, hash, isRemote) {\n this._clientSvc = clientSvc;\n this._serverSvc = serverSvc;\n this._hash = hash;\n this._isRemote = !!isRemote;\n this._readers = createReaders(clientSvc, serverSvc);\n }\n Adapter.prototype._decodeRequest = function(buf) {\n var tap = new Tap(buf);\n var hdr = MAP_BYTES_TYPE._read(tap);\n var name = STRING_TYPE._read(tap);\n var msg, req;\n if (name) {\n msg = this._serverSvc.message(name);\n req = this._readers[name + \"?\"]._read(tap);\n } else {\n msg = PING_MESSAGE;\n }\n if (!tap.isValid()) {\n throw new Error(f2(\"truncated %s request\", name || \"ping$\"));\n }\n return new WrappedRequest(msg, hdr, req);\n };\n Adapter.prototype._decodeResponse = function(buf, wres, msg) {\n var tap = new Tap(buf);\n utils.copyOwnProperties(MAP_BYTES_TYPE._read(tap), wres.headers, true);\n var isError2 = BOOLEAN_TYPE._read(tap);\n var name = msg.name;\n if (name) {\n var reader = this._readers[name + (isError2 ? \"*\" : \"!\")];\n msg = this._clientSvc.message(name);\n if (isError2) {\n wres.error = reader._read(tap);\n } else {\n wres.response = reader._read(tap);\n }\n if (!tap.isValid()) {\n throw new Error(f2(\"truncated %s response\", name));\n }\n } else {\n msg = PING_MESSAGE;\n }\n };\n function FrameDecoder() {\n stream.Transform.call(this, { readableObjectMode: true });\n this._id = void 0;\n this._buf = utils.newBuffer(0);\n this._bufs = [];\n this.on(\"finish\", function() {\n this.push(null);\n });\n }\n util.inherits(FrameDecoder, stream.Transform);\n FrameDecoder.prototype._transform = function(buf, encoding, cb) {\n buf = Buffer2.concat([this._buf, buf]);\n var frameLength;\n while (buf.length >= 4 && buf.length >= (frameLength = buf.readInt32BE(0)) + 4) {\n if (frameLength) {\n this._bufs.push(buf.slice(4, frameLength + 4));\n } else {\n var bufs = this._bufs;\n this._bufs = [];\n this.push({ id: null, payload: bufs });\n }\n buf = buf.slice(frameLength + 4);\n }\n this._buf = buf;\n cb();\n };\n FrameDecoder.prototype._flush = function(cb) {\n if (this._buf.length || this._bufs.length) {\n var bufs = this._bufs.slice();\n bufs.unshift(this._buf);\n var err = toRpcError(\"TRAILING_DATA\");\n err.trailingData = Buffer2.concat(bufs).toString();\n this.emit(\"error\", err);\n }\n cb();\n };\n function FrameEncoder() {\n stream.Transform.call(this, { writableObjectMode: true });\n this.on(\"finish\", function() {\n this.push(null);\n });\n }\n util.inherits(FrameEncoder, stream.Transform);\n FrameEncoder.prototype._transform = function(obj, encoding, cb) {\n var bufs = obj.payload;\n var i, l, buf;\n for (i = 0, l = bufs.length; i < l; i++) {\n buf = bufs[i];\n this.push(intBuffer(buf.length));\n this.push(buf);\n }\n this.push(intBuffer(0));\n cb();\n };\n function NettyDecoder() {\n stream.Transform.call(this, { readableObjectMode: true });\n this._id = void 0;\n this._frameCount = 0;\n this._buf = utils.newBuffer(0);\n this._bufs = [];\n this.on(\"finish\", function() {\n this.push(null);\n });\n }\n util.inherits(NettyDecoder, stream.Transform);\n NettyDecoder.prototype._transform = function(buf, encoding, cb) {\n buf = Buffer2.concat([this._buf, buf]);\n while (true) {\n if (this._id === void 0) {\n if (buf.length < 8) {\n this._buf = buf;\n cb();\n return;\n }\n this._id = buf.readInt32BE(0);\n this._frameCount = buf.readInt32BE(4);\n buf = buf.slice(8);\n }\n var frameLength;\n while (this._frameCount && buf.length >= 4 && buf.length >= (frameLength = buf.readInt32BE(0)) + 4) {\n this._frameCount--;\n this._bufs.push(buf.slice(4, frameLength + 4));\n buf = buf.slice(frameLength + 4);\n }\n if (this._frameCount) {\n this._buf = buf;\n cb();\n return;\n } else {\n var obj = { id: this._id, payload: this._bufs };\n this._bufs = [];\n this._id = void 0;\n this.push(obj);\n }\n }\n };\n NettyDecoder.prototype._flush = FrameDecoder.prototype._flush;\n function NettyEncoder() {\n stream.Transform.call(this, { writableObjectMode: true });\n this.on(\"finish\", function() {\n this.push(null);\n });\n }\n util.inherits(NettyEncoder, stream.Transform);\n NettyEncoder.prototype._transform = function(obj, encoding, cb) {\n var bufs = obj.payload;\n var l = bufs.length;\n var buf;\n buf = utils.newBuffer(8);\n buf.writeInt32BE(obj.id, 0);\n buf.writeInt32BE(l, 4);\n this.push(buf);\n var i;\n for (i = 0; i < l; i++) {\n buf = bufs[i];\n this.push(intBuffer(buf.length));\n this.push(buf);\n }\n cb();\n };\n function intBuffer(n) {\n var buf = utils.newBuffer(4);\n buf.writeInt32BE(n);\n return buf;\n }\n function readHead(type, buf) {\n var tap = new Tap(buf);\n var head = type._read(tap);\n if (!tap.isValid()) {\n throw new Error(f2(\"truncated %j\", type.schema()));\n }\n return { head, tail: tap.buf.slice(tap.pos) };\n }\n function createReader(rtype, wtype) {\n return rtype.equals(wtype) ? rtype : rtype.createResolver(wtype);\n }\n function createReaders(clientSvc, serverSvc) {\n var obj = {};\n clientSvc.messages.forEach(function(c) {\n var n = c.name;\n var s = serverSvc.message(n);\n try {\n if (!s) {\n throw new Error(f2(\"missing server message: %s\", n));\n }\n if (s.oneWay !== c.oneWay) {\n throw new Error(f2(\"inconsistent one-way message: %s\", n));\n }\n obj[n + \"?\"] = createReader(s.requestType, c.requestType);\n obj[n + \"*\"] = createReader(c.errorType, s.errorType);\n obj[n + \"!\"] = createReader(c.responseType, s.responseType);\n } catch (cause) {\n throw toRpcError(\"INCOMPATIBLE_PROTOCOL\", cause);\n }\n });\n return obj;\n }\n function insertRemoteProtocols(cache, ptcls, svc, isClient) {\n Object.keys(ptcls).forEach(function(hash) {\n var ptcl = ptcls[hash];\n var clientSvc, serverSvc;\n if (isClient) {\n clientSvc = svc;\n serverSvc = Service.forProtocol(ptcl);\n } else {\n clientSvc = Service.forProtocol(ptcl);\n serverSvc = svc;\n }\n cache[hash] = new Adapter(clientSvc, serverSvc, hash, true);\n });\n }\n function getRemoteProtocols(cache, isClient) {\n var ptcls = {};\n Object.keys(cache).forEach(function(hs) {\n var adapter = cache[hs];\n if (adapter._isRemote) {\n var svc = isClient ? adapter._serverSvc : adapter._clientSvc;\n ptcls[hs] = svc.protocol;\n }\n });\n return ptcls;\n }\n function isError(any) {\n return !!any && Object.prototype.toString.call(any) === \"[object Error]\";\n }\n function forwardErrors(src, dst) {\n return src.on(\"error\", function(err) {\n dst.emit(\"error\", err, src);\n });\n }\n function toError(msg, cause) {\n var err = new Error(msg);\n err.cause = cause;\n return err;\n }\n function toRpcError(rpcCode, cause) {\n var err = toError(rpcCode.toLowerCase().replace(/_/g, \" \"), cause);\n err.rpcCode = cause && cause.rpcCode ? cause.rpcCode : rpcCode;\n return err;\n }\n function serializationError(msg, obj, fields) {\n var details = [];\n var i, l, field;\n for (i = 0, l = fields.length; i < l; i++) {\n field = fields[i];\n field.type.isValid(obj[field.name], { errorHook });\n }\n var detailsStr = details.map(function(obj2) {\n return f2(\"%s = %j but expected %s\", obj2.path, obj2.value, obj2.type);\n }).join(\", \");\n var err = new Error(f2(\"%s (%s)\", msg, detailsStr));\n err.details = details;\n return err;\n function errorHook(parts, any, type) {\n var strs = [];\n var i2, l2, part;\n for (i2 = 0, l2 = parts.length; i2 < l2; i2++) {\n part = parts[i2];\n if (isNaN(part)) {\n strs.push(\".\" + part);\n } else {\n strs.push(\"[\" + part + \"]\");\n }\n }\n details.push({\n path: field.name + strs.join(\"\"),\n value: any,\n type\n });\n }\n }\n function normalizedPrefix(scope) {\n return scope ? utils.getHash(scope).readInt16BE(0) << 32 - PREFIX_LENGTH : 0;\n }\n function matchesPrefix(id, prefix) {\n return (id ^ prefix) >> 32 - PREFIX_LENGTH === 0;\n }\n function isStream(any) {\n return !!(any && any.pipe);\n }\n function getExistingMessage(svc, name) {\n var msg = svc.message(name);\n if (!msg) {\n throw new Error(f2(\"unknown message: %s\", name));\n }\n return msg;\n }\n function chainMiddleware(params) {\n var args = [params.wreq, params.wres];\n var cbs = [];\n var cause;\n forward(0);\n function forward(pos) {\n var isDone = false;\n if (pos < params.fns.length) {\n params.fns[pos].apply(params.ctx, args.concat(function(err, cb) {\n if (isDone) {\n params.onError(toError(\"duplicate forward middleware call\", err));\n return;\n }\n isDone = true;\n if (err || params.wres && // Non one-way messages.\n (params.wres.error !== void 0 || params.wres.response !== void 0)) {\n cause = err;\n backward();\n return;\n }\n if (cb) {\n cbs.push(cb);\n }\n forward(++pos);\n }));\n } else {\n params.onTransition.apply(params.ctx, args.concat(function(err) {\n if (isDone) {\n params.onError(toError(\"duplicate handler call\", err));\n return;\n }\n isDone = true;\n cause = err;\n process.nextTick(backward);\n }));\n }\n }\n function backward() {\n var cb = cbs.pop();\n if (cb) {\n var isDone = false;\n cb.call(params.ctx, cause, function(err) {\n if (isDone) {\n params.onError(toError(\"duplicate backward middleware call\", err));\n return;\n }\n cause = err;\n isDone = true;\n backward();\n });\n } else {\n params.onCompletion.call(params.ctx, cause);\n }\n }\n }\n module.exports = {\n Adapter,\n HANDSHAKE_REQUEST_TYPE,\n HANDSHAKE_RESPONSE_TYPE,\n Message,\n Registry,\n Service,\n discoverProtocol,\n streams: {\n FrameDecoder,\n FrameEncoder,\n NettyDecoder,\n NettyEncoder\n }\n };\n }\n});\n\n// node_modules/avsc/lib/files.js\nvar require_files = __commonJS({\n \"node_modules/avsc/lib/files.js\"(exports, module) {\n \"use strict\";\n var fs = __import_FS;\n var path = __import_PATH;\n function createImportHook() {\n var imports = {};\n return function(fpath, kind, cb) {\n fpath = path.resolve(fpath);\n if (imports[fpath]) {\n process.nextTick(cb);\n return;\n }\n imports[fpath] = true;\n fs.readFile(fpath, { encoding: \"utf8\" }, cb);\n };\n }\n function createSyncImportHook() {\n var imports = {};\n return function(fpath, kind, cb) {\n fpath = path.resolve(fpath);\n if (imports[fpath]) {\n cb();\n } else {\n imports[fpath] = true;\n cb(null, fs.readFileSync(fpath, { encoding: \"utf8\" }));\n }\n };\n }\n module.exports = {\n createImportHook,\n createSyncImportHook,\n // Proxy a few methods to better shim them for browserify.\n existsSync: fs.existsSync,\n readFileSync: fs.readFileSync\n };\n }\n});\n\n// node_modules/avsc/lib/specs.js\nvar require_specs = __commonJS({\n \"node_modules/avsc/lib/specs.js\"(exports, module) {\n \"use strict\";\n var files = require_files();\n var utils = require_utils();\n var path = __import_PATH;\n var util = __import_UTIL;\n var f2 = util.format;\n var TYPE_REFS = {\n date: { type: \"int\", logicalType: \"date\" },\n decimal: { type: \"bytes\", logicalType: \"decimal\" },\n time_ms: { type: \"long\", logicalType: \"time-millis\" },\n timestamp_ms: { type: \"long\", logicalType: \"timestamp-millis\" }\n };\n function assembleProtocol(fpath, opts, cb) {\n if (!cb && typeof opts == \"function\") {\n cb = opts;\n opts = void 0;\n }\n opts = opts || {};\n if (!opts.importHook) {\n opts.importHook = files.createImportHook();\n }\n importFile(fpath, function(err, protocol) {\n if (err) {\n cb(err);\n return;\n }\n if (!protocol) {\n cb(new Error(\"empty root import\"));\n return;\n }\n var schemas = protocol.types;\n if (schemas) {\n var namespace = protocolNamespace(protocol) || \"\";\n schemas.forEach(function(schema) {\n if (schema.namespace === namespace) {\n delete schema.namespace;\n }\n });\n }\n cb(null, protocol);\n });\n function importFile(fpath2, cb2) {\n opts.importHook(fpath2, \"idl\", function(err, str) {\n if (err) {\n cb2(err);\n return;\n }\n if (str === void 0) {\n cb2();\n return;\n }\n try {\n var reader = new Reader(str, opts);\n var obj = reader._readProtocol(str, opts);\n } catch (err2) {\n err2.path = fpath2;\n cb2(err2);\n return;\n }\n fetchImports(obj.protocol, obj.imports, path.dirname(fpath2), cb2);\n });\n }\n function fetchImports(protocol, imports, dpath, cb2) {\n var importedProtocols = [];\n next();\n function next() {\n var info = imports.shift();\n if (!info) {\n importedProtocols.reverse();\n try {\n importedProtocols.forEach(function(imported) {\n mergeImport(protocol, imported);\n });\n } catch (err) {\n cb2(err);\n return;\n }\n cb2(null, protocol);\n return;\n }\n var importPath = path.join(dpath, info.name);\n if (info.kind === \"idl\") {\n importFile(importPath, function(err, imported) {\n if (err) {\n cb2(err);\n return;\n }\n if (imported) {\n importedProtocols.push(imported);\n }\n next();\n });\n } else {\n opts.importHook(importPath, info.kind, function(err, str) {\n if (err) {\n cb2(err);\n return;\n }\n switch (info.kind) {\n case \"protocol\":\n case \"schema\":\n if (str === void 0) {\n next();\n return;\n }\n try {\n var obj = JSON.parse(str);\n } catch (err2) {\n err2.path = importPath;\n cb2(err2);\n return;\n }\n var imported = info.kind === \"schema\" ? { types: [obj] } : obj;\n importedProtocols.push(imported);\n next();\n return;\n default:\n cb2(new Error(f2(\"invalid import kind: %s\", info.kind)));\n }\n });\n }\n }\n }\n function mergeImport(protocol, imported) {\n var schemas = imported.types || [];\n schemas.reverse();\n schemas.forEach(function(schema) {\n if (!protocol.types) {\n protocol.types = [];\n }\n if (schema.namespace === void 0) {\n schema.namespace = protocolNamespace(imported) || \"\";\n }\n protocol.types.unshift(schema);\n });\n Object.keys(imported.messages || {}).forEach(function(name) {\n if (!protocol.messages) {\n protocol.messages = {};\n }\n if (protocol.messages[name]) {\n throw new Error(f2(\"duplicate message: %s\", name));\n }\n protocol.messages[name] = imported.messages[name];\n });\n }\n }\n function read(str) {\n var schema;\n if (typeof str == \"string\" && ~str.indexOf(path.sep) && files.existsSync(str)) {\n var contents = files.readFileSync(str, { encoding: \"utf8\" });\n try {\n return JSON.parse(contents);\n } catch (err) {\n var opts = { importHook: files.createSyncImportHook() };\n assembleProtocol(str, opts, function(err2, protocolSchema) {\n schema = err2 ? contents : protocolSchema;\n });\n }\n } else {\n schema = str;\n }\n if (typeof schema != \"string\" || schema === \"null\") {\n return schema;\n }\n try {\n return JSON.parse(schema);\n } catch (err) {\n try {\n return Reader.readProtocol(schema);\n } catch (err2) {\n try {\n return Reader.readSchema(schema);\n } catch (err3) {\n return schema;\n }\n }\n }\n }\n function Reader(str, opts) {\n opts = opts || {};\n this._tk = new Tokenizer(str);\n this._ackVoidMessages = !!opts.ackVoidMessages;\n this._implicitTags = !opts.delimitedCollections;\n this._typeRefs = opts.typeRefs || TYPE_REFS;\n }\n Reader.readProtocol = function(str, opts) {\n var reader = new Reader(str, opts);\n var protocol = reader._readProtocol();\n if (protocol.imports.length) {\n throw new Error(\"unresolvable import\");\n }\n return protocol.protocol;\n };\n Reader.readSchema = function(str, opts) {\n var reader = new Reader(str, opts);\n var doc = reader._readJavadoc();\n var schema = reader._readType(doc === void 0 ? {} : { doc }, true);\n reader._tk.next({ id: \"(eof)\" });\n return schema;\n };\n Reader.prototype._readProtocol = function() {\n var tk = this._tk;\n var imports = [];\n var types = [];\n var messages = {};\n var pos;\n this._readImports(imports);\n var protocolSchema = {};\n var protocolJavadoc = this._readJavadoc();\n if (protocolJavadoc !== void 0) {\n protocolSchema.doc = protocolJavadoc;\n }\n this._readAnnotations(protocolSchema);\n tk.next({ val: \"protocol\" });\n if (!tk.next({ val: \"{\", silent: true })) {\n protocolSchema.protocol = tk.next({ id: \"name\" }).val;\n tk.next({ val: \"{\" });\n }\n while (!tk.next({ val: \"}\", silent: true })) {\n if (!this._readImports(imports)) {\n var javadoc = this._readJavadoc();\n var typeSchema = this._readType({}, true);\n var numImports = this._readImports(imports, true);\n var message = void 0;\n pos = tk.pos;\n if (!numImports && (message = this._readMessage(typeSchema))) {\n if (javadoc !== void 0 && message.schema.doc === void 0) {\n message.schema.doc = javadoc;\n }\n var oneWay = false;\n if (message.schema.response === \"void\" || message.schema.response.type === \"void\") {\n oneWay = !this._ackVoidMessages && !message.schema.errors;\n if (message.schema.response === \"void\") {\n message.schema.response = \"null\";\n } else {\n message.schema.response.type = \"null\";\n }\n }\n if (oneWay) {\n message.schema[\"one-way\"] = true;\n }\n if (messages[message.name]) {\n throw new Error(f2(\"duplicate message: %s\", message.name));\n }\n messages[message.name] = message.schema;\n } else {\n if (javadoc) {\n if (typeof typeSchema == \"string\") {\n typeSchema = { doc: javadoc, type: typeSchema };\n } else if (typeSchema.doc === void 0) {\n typeSchema.doc = javadoc;\n }\n }\n types.push(typeSchema);\n tk.pos = pos;\n tk.next({ val: \";\", silent: true });\n }\n javadoc = void 0;\n }\n }\n tk.next({ id: \"(eof)\" });\n if (types.length) {\n protocolSchema.types = types;\n }\n if (Object.keys(messages).length) {\n protocolSchema.messages = messages;\n }\n return { protocol: protocolSchema, imports };\n };\n Reader.prototype._readAnnotations = function(schema) {\n var tk = this._tk;\n while (tk.next({ val: \"@\", silent: true })) {\n var parts = [];\n while (!tk.next({ val: \"(\", silent: true })) {\n parts.push(tk.next().val);\n }\n schema[parts.join(\"\")] = tk.next({ id: \"json\" }).val;\n tk.next({ val: \")\" });\n }\n };\n Reader.prototype._readMessage = function(responseSchema) {\n var tk = this._tk;\n var schema = { request: [], response: responseSchema };\n this._readAnnotations(schema);\n var name = tk.next().val;\n if (tk.next().val !== \"(\") {\n return;\n }\n if (!tk.next({ val: \")\", silent: true })) {\n do {\n schema.request.push(this._readField());\n } while (!tk.next({ val: \")\", silent: true }) && tk.next({ val: \",\" }));\n }\n var token = tk.next();\n switch (token.val) {\n case \"throws\":\n schema.errors = [];\n do {\n schema.errors.push(this._readType());\n } while (!tk.next({ val: \";\", silent: true }) && tk.next({ val: \",\" }));\n break;\n case \"oneway\":\n schema[\"one-way\"] = true;\n tk.next({ val: \";\" });\n break;\n case \";\":\n break;\n default:\n throw tk.error(\"invalid message suffix\", token);\n }\n return { name, schema };\n };\n Reader.prototype._readJavadoc = function() {\n var token = this._tk.next({ id: \"javadoc\", emitJavadoc: true, silent: true });\n if (token) {\n return token.val;\n }\n };\n Reader.prototype._readField = function() {\n var tk = this._tk;\n var javadoc = this._readJavadoc();\n var schema = { type: this._readType() };\n if (javadoc !== void 0 && schema.doc === void 0) {\n schema.doc = javadoc;\n }\n this._readAnnotations(schema);\n schema.name = tk.next({ id: \"name\" }).val;\n if (tk.next({ val: \"=\", silent: true })) {\n schema[\"default\"] = tk.next({ id: \"json\" }).val;\n }\n return schema;\n };\n Reader.prototype._readType = function(schema, top) {\n schema = schema || {};\n this._readAnnotations(schema);\n schema.type = this._tk.next({ id: \"name\" }).val;\n switch (schema.type) {\n case \"record\":\n case \"error\":\n return this._readRecord(schema);\n case \"fixed\":\n return this._readFixed(schema);\n case \"enum\":\n return this._readEnum(schema, top);\n case \"map\":\n return this._readMap(schema);\n case \"array\":\n return this._readArray(schema);\n case \"union\":\n if (Object.keys(schema).length > 1) {\n throw new Error(\"union annotations are not supported\");\n }\n return this._readUnion();\n default:\n var ref = this._typeRefs[schema.type];\n if (ref) {\n delete schema.type;\n utils.copyOwnProperties(ref, schema);\n }\n return Object.keys(schema).length > 1 ? schema : schema.type;\n }\n };\n Reader.prototype._readFixed = function(schema) {\n var tk = this._tk;\n if (!tk.next({ val: \"(\", silent: true })) {\n schema.name = tk.next({ id: \"name\" }).val;\n tk.next({ val: \"(\" });\n }\n schema.size = parseInt(tk.next({ id: \"number\" }).val);\n tk.next({ val: \")\" });\n return schema;\n };\n Reader.prototype._readMap = function(schema) {\n var tk = this._tk;\n var silent = this._implicitTags;\n var implicitTags = tk.next({ val: \"<\", silent }) === void 0;\n schema.values = this._readType();\n tk.next({ val: \">\", silent: implicitTags });\n return schema;\n };\n Reader.prototype._readArray = function(schema) {\n var tk = this._tk;\n var silent = this._implicitTags;\n var implicitTags = tk.next({ val: \"<\", silent }) === void 0;\n schema.items = this._readType();\n tk.next({ val: \">\", silent: implicitTags });\n return schema;\n };\n Reader.prototype._readEnum = function(schema, top) {\n var tk = this._tk;\n if (!tk.next({ val: \"{\", silent: true })) {\n schema.name = tk.next({ id: \"name\" }).val;\n tk.next({ val: \"{\" });\n }\n schema.symbols = [];\n do {\n schema.symbols.push(tk.next().val);\n } while (!tk.next({ val: \"}\", silent: true }) && tk.next({ val: \",\" }));\n if (top && tk.next({ val: \"=\", silent: true })) {\n schema.default = tk.next().val;\n tk.next({ val: \";\" });\n }\n return schema;\n };\n Reader.prototype._readUnion = function() {\n var tk = this._tk;\n var arr = [];\n tk.next({ val: \"{\" });\n do {\n arr.push(this._readType());\n } while (!tk.next({ val: \"}\", silent: true }) && tk.next({ val: \",\" }));\n return arr;\n };\n Reader.prototype._readRecord = function(schema) {\n var tk = this._tk;\n if (!tk.next({ val: \"{\", silent: true })) {\n schema.name = tk.next({ id: \"name\" }).val;\n tk.next({ val: \"{\" });\n }\n schema.fields = [];\n while (!tk.next({ val: \"}\", silent: true })) {\n schema.fields.push(this._readField());\n tk.next({ val: \";\" });\n }\n return schema;\n };\n Reader.prototype._readImports = function(imports, maybeMessage) {\n var tk = this._tk;\n var numImports = 0;\n var pos = tk.pos;\n while (tk.next({ val: \"import\", silent: true })) {\n if (!numImports && maybeMessage && tk.next({ val: \"(\", silent: true })) {\n tk.pos = pos;\n return;\n }\n var kind = tk.next({ id: \"name\" }).val;\n var fname = JSON.parse(tk.next({ id: \"string\" }).val);\n tk.next({ val: \";\" });\n imports.push({ kind, name: fname });\n numImports++;\n }\n return numImports;\n };\n function Tokenizer(str) {\n this._str = str;\n this.pos = 0;\n }\n Tokenizer.prototype.next = function(opts) {\n var token = { pos: this.pos, id: void 0, val: void 0 };\n var javadoc = this._skip(opts && opts.emitJavadoc);\n if (typeof javadoc == \"string\") {\n token.id = \"javadoc\";\n token.val = javadoc;\n } else {\n var pos = this.pos;\n var str = this._str;\n var c = str.charAt(pos);\n if (!c) {\n token.id = \"(eof)\";\n } else {\n if (opts && opts.id === \"json\") {\n token.id = \"json\";\n this.pos = this._endOfJson();\n } else if (c === '\"') {\n token.id = \"string\";\n this.pos = this._endOfString();\n } else if (/[0-9]/.test(c)) {\n token.id = \"number\";\n this.pos = this._endOf(/[0-9]/);\n } else if (/[`A-Za-z_.]/.test(c)) {\n token.id = \"name\";\n this.pos = this._endOf(/[`A-Za-z0-9_.]/);\n } else {\n token.id = \"operator\";\n this.pos = pos + 1;\n }\n token.val = str.slice(pos, this.pos);\n if (token.id === \"json\") {\n try {\n token.val = JSON.parse(token.val);\n } catch (err2) {\n throw this.error(\"invalid JSON\", token);\n }\n } else if (token.id === \"name\") {\n token.val = token.val.replace(/`/g, \"\");\n }\n }\n }\n var err;\n if (opts && opts.id && opts.id !== token.id) {\n err = this.error(f2(\"expected ID %s\", opts.id), token);\n } else if (opts && opts.val && opts.val !== token.val) {\n err = this.error(f2(\"expected value %s\", opts.val), token);\n }\n if (!err) {\n return token;\n } else if (opts && opts.silent) {\n this.pos = token.pos;\n return void 0;\n } else {\n throw err;\n }\n };\n Tokenizer.prototype.error = function(reason, context) {\n var isToken = typeof context != \"number\";\n var pos = isToken ? context.pos : context;\n var str = this._str;\n var lineNum = 1;\n var lineStart = 0;\n var i;\n for (i = 0; i < pos; i++) {\n if (str.charAt(i) === \"\\n\") {\n lineNum++;\n lineStart = i;\n }\n }\n var msg = isToken ? f2(\"invalid token %j: %s\", context, reason) : reason;\n var err = new Error(msg);\n err.token = isToken ? context : void 0;\n err.lineNum = lineNum;\n err.colNum = pos - lineStart;\n return err;\n };\n Tokenizer.prototype._skip = function(emitJavadoc) {\n var str = this._str;\n var isJavadoc = false;\n var pos, c;\n while ((c = str.charAt(this.pos)) && /\\s/.test(c)) {\n this.pos++;\n }\n pos = this.pos;\n if (c === \"/\") {\n switch (str.charAt(this.pos + 1)) {\n case \"/\":\n this.pos += 2;\n while ((c = str.charAt(this.pos)) && c !== \"\\n\") {\n this.pos++;\n }\n return this._skip(emitJavadoc);\n case \"*\":\n this.pos += 2;\n if (str.charAt(this.pos) === \"*\") {\n isJavadoc = true;\n }\n while (c = str.charAt(this.pos++)) {\n if (c === \"*\" && str.charAt(this.pos) === \"/\") {\n this.pos++;\n if (isJavadoc && emitJavadoc) {\n return extractJavadoc(str.slice(pos + 3, this.pos - 2));\n }\n return this._skip(emitJavadoc);\n }\n }\n throw this.error(\"unterminated comment\", pos);\n }\n }\n };\n Tokenizer.prototype._endOf = function(pat) {\n var pos = this.pos;\n var str = this._str;\n while (pat.test(str.charAt(pos))) {\n pos++;\n }\n return pos;\n };\n Tokenizer.prototype._endOfString = function() {\n var pos = this.pos + 1;\n var str = this._str;\n var c;\n while (c = str.charAt(pos)) {\n if (c === '\"') {\n return pos + 1;\n }\n if (c === \"\\\\\") {\n pos += 2;\n } else {\n pos++;\n }\n }\n throw this.error(\"unterminated string\", pos - 1);\n };\n Tokenizer.prototype._endOfJson = function() {\n var pos = utils.jsonEnd(this._str, this.pos);\n if (pos < 0) {\n throw this.error(\"invalid JSON\", pos);\n }\n return pos;\n };\n function extractJavadoc(str) {\n var lines = str.replace(/^[ \\t]+|[ \\t]+$/g, \"\").split(\"\\n\").map(function(line, i) {\n return i ? line.replace(/^\\s*\\*\\s?/, \"\") : line;\n });\n while (lines.length && !lines[0]) {\n lines.shift();\n }\n while (lines.length && !lines[lines.length - 1]) {\n lines.pop();\n }\n return lines.join(\"\\n\");\n }\n function protocolNamespace(protocol) {\n if (protocol.namespace) {\n return protocol.namespace;\n }\n var match = /^(.*)\\.[^.]+$/.exec(protocol.protocol);\n return match ? match[1] : void 0;\n }\n module.exports = {\n Tokenizer,\n assembleProtocol,\n read,\n readProtocol: Reader.readProtocol,\n readSchema: Reader.readSchema\n };\n }\n});\n\n// node_modules/avsc/lib/index.js\nvar require_lib = __commonJS({\n \"node_modules/avsc/lib/index.js\"(exports, module) {\n \"use strict\";\n var containers = require_containers();\n var services = require_services();\n var specs = require_specs();\n var types = require_types();\n var utils = require_utils();\n var buffer = __import_BUFFER;\n var fs = __import_FS;\n var util = __import_UTIL;\n var Buffer2 = buffer.Buffer;\n function parse2(any, opts) {\n var schemaOrProtocol = specs.read(any);\n return schemaOrProtocol.protocol ? services.Service.forProtocol(schemaOrProtocol, opts) : types.Type.forSchema(schemaOrProtocol, opts);\n }\n function extractFileHeader(path, opts) {\n opts = opts || {};\n var decode = opts.decode === void 0 ? true : !!opts.decode;\n var size = Math.max(opts.size || 4096, 4);\n var buf = utils.newBuffer(size);\n var fd = fs.openSync(path, \"r\");\n try {\n var pos = fs.readSync(fd, buf, 0, size);\n if (pos < 4 || !containers.MAGIC_BYTES.equals(buf.slice(0, 4))) {\n return null;\n }\n var tap = new utils.Tap(buf);\n var header = null;\n do {\n header = containers.HEADER_TYPE._read(tap);\n } while (!isValid());\n if (decode !== false) {\n var meta = header.meta;\n meta[\"avro.schema\"] = JSON.parse(meta[\"avro.schema\"].toString());\n if (meta[\"avro.codec\"] !== void 0) {\n meta[\"avro.codec\"] = meta[\"avro.codec\"].toString();\n }\n }\n return header;\n } finally {\n fs.closeSync(fd);\n }\n function isValid() {\n if (tap.isValid()) {\n return true;\n }\n var len = 2 * tap.buf.length;\n var buf2 = utils.newBuffer(len);\n len = fs.readSync(fd, buf2, 0, len);\n tap.buf = Buffer2.concat([tap.buf, buf2]);\n tap.pos = 0;\n return false;\n }\n }\n function createFileDecoder(path, opts) {\n return fs.createReadStream(path).pipe(new containers.streams.BlockDecoder(opts));\n }\n function createFileEncoder(path, schema, opts) {\n var encoder = new containers.streams.BlockEncoder(schema, opts);\n encoder.pipe(fs.createWriteStream(path, { defaultEncoding: \"binary\" }));\n return encoder;\n }\n module.exports = {\n Service: services.Service,\n Type: types.Type,\n assembleProtocol: specs.assembleProtocol,\n createFileDecoder,\n createFileEncoder,\n discoverProtocol: services.discoverProtocol,\n extractFileHeader,\n parse: parse2,\n readProtocol: specs.readProtocol,\n readSchema: specs.readSchema,\n streams: containers.streams,\n types: types.builtins,\n // Deprecated exports.\n Protocol: services.Service,\n assemble: util.deprecate(\n specs.assembleProtocol,\n \"use `assembleProtocol` instead\"\n ),\n combine: util.deprecate(\n types.Type.forTypes,\n \"use `Type.forTypes` intead\"\n ),\n infer: util.deprecate(\n types.Type.forValue,\n \"use `Type.forValue` instead\"\n )\n };\n }\n});\n\n// node_modules/ultralight-s3/lib/index.min.js\nvar N = \"AWS4-HMAC-SHA256\";\nvar K = \"aws4_request\";\nvar O = \"s3\";\nvar v = \"2\";\nvar f = \"UNSIGNED-PAYLOAD\";\nvar W = \"application/octet-stream\";\nvar q = \"application/xml\";\nvar w = \"application/json\";\nvar X = [\"accessKeyId\", \"secretAccessKey\", \"sessionToken\", \"password\"];\nvar E = \"x-amz-content-sha256\";\nvar Z = \"x-amz-date\";\nvar V = \"host\";\nvar J = \"Authorization\";\nvar m = \"Content-Type\";\nvar R = \"Content-Length\";\nvar P = \"etag\";\nvar M = \"last-modified\";\nvar u = \"ultralight-s3 Module: \";\nvar ee = `${u}accessKeyId must be a non-empty string`;\nvar te = `${u}secretAccessKey must be a non-empty string`;\nvar se = `${u}endpoint must be a non-empty string`;\nvar re = `${u}bucketName must be a non-empty string`;\nvar L = `${u}key must be a non-empty string`;\nvar $ = `${u}uploadId must be a non-empty string`;\nvar j = `${u}parts must be a non-empty array`;\nvar k = `${u}Each part must have a partNumber (number) and ETag (string)`;\nvar U = `${u}data must be a Buffer or string`;\nvar B = `${u}prefix must be a string`;\nvar F = `${u}maxKeys must be a positive integer`;\nvar G = `${u}delimiter must be a string`;\nvar z = crypto.createHmac || (await import(\"node:crypto\")).createHmac;\nvar Q = crypto.createHash || (await import(\"node:crypto\")).createHash;\ntypeof z > \"u\" && typeof Q > \"u\" && console.error(\"ultralight-S3 Module: Crypto functions are not available, please report the issue with necessary description: https://github.com/sentienhq/ultralight-s3/issues\");\nvar ne = { contents: true };\nvar oe = (p) => `%${p.charCodeAt(0).toString(16).toUpperCase()}`;\nvar C = (p) => encodeURIComponent(p).replace(/[!'()*]/g, oe);\nvar y = (p) => C(p).replace(/%2F/g, \"/\");\nvar x = class {\n constructor({ accessKeyId: e, secretAccessKey: t, endpoint: r, bucketName: n, region: o = \"auto\", maxRequestSizeInBytes: i = 5242880, requestAbortTimeout: a = void 0, logger: c = void 0 }) {\n this.getBucketName = () => this.bucketName, this.setBucketName = (s) => {\n this.bucketName = s;\n }, this.getRegion = () => this.region, this.setRegion = (s) => {\n this.region = s;\n }, this.getEndpoint = () => this.endpoint, this.setEndpoint = (s) => {\n this.endpoint = s;\n }, this.getMaxRequestSizeInBytes = () => this.maxRequestSizeInBytes, this.setMaxRequestSizeInBytes = (s) => {\n this.maxRequestSizeInBytes = s;\n }, this.sanitizeETag = (s) => I(s), this.getProps = () => ({ accessKeyId: this.accessKeyId, secretAccessKey: this.secretAccessKey, region: this.region, bucket: this.bucketName, endpoint: this.endpoint, maxRequestSizeInBytes: this.maxRequestSizeInBytes, requestAbortTimeout: this.requestAbortTimeout, logger: this.logger }), this.setProps = (s) => {\n this._validateConstructorParams(s.accessKeyId, s.secretAccessKey, s.bucketName, s.endpoint), this.accessKeyId = s.accessKeyId, this.secretAccessKey = s.secretAccessKey, this.region = s.region || \"auto\", this.bucketName = s.bucketName, this.endpoint = s.endpoint, this.maxRequestSizeInBytes = s.maxRequestSizeInBytes || 5242880, this.requestAbortTimeout = s.requestAbortTimeout, this.logger = s.logger;\n }, this._validateConstructorParams(e, t, r, n), this.accessKeyId = e, this.secretAccessKey = t, this.endpoint = r, this.bucketName = n, this.region = o, this.maxRequestSizeInBytes = i, this.requestAbortTimeout = a, this.logger = c;\n }\n _validateConstructorParams(e, t, r, n) {\n if (typeof e != \"string\" || e.trim().length === 0) throw new TypeError(ee);\n if (typeof t != \"string\" || t.trim().length === 0) throw new TypeError(te);\n if (typeof r != \"string\" || r.trim().length === 0) throw new TypeError(se);\n if (typeof n != \"string\" || n.trim().length === 0) throw new TypeError(re);\n }\n _checkMethodHeadnGet(e) {\n if (e !== \"GET\" && e !== \"HEAD\") throw this._log(\"error\", `${u}method must be either GET or HEAD`), new Error(\"method must be either GET or HEAD\");\n }\n _checkKey(e) {\n if (typeof e != \"string\" || e.trim().length === 0) throw this._log(\"error\", L), new TypeError(L);\n }\n _checkDelimiter(e) {\n if (typeof e != \"string\" || e.trim().length === 0) throw this._log(\"error\", G), new TypeError(G);\n }\n _checkPrefix(e) {\n if (typeof e != \"string\") throw this._log(\"error\", B), new TypeError(B);\n }\n _checkMaxKeys(e) {\n if (typeof e != \"number\" || e <= 0) throw this._log(\"error\", F), new TypeError(F);\n }\n _checkOpts(e) {\n if (typeof e != \"object\") throw this._log(\"error\", `${u}opts must be an object`), new TypeError(`${u}opts must be an object`);\n }\n _log(e, t, r = {}) {\n if (this.logger && typeof this.logger[e] == \"function\") {\n let n = (a) => typeof a != \"object\" || a === null ? a : Object.keys(a).reduce((c, s) => (X.includes(s.toLowerCase()) ? c[s] = \"[REDACTED]\" : typeof a[s] == \"object\" && a[s] !== null ? c[s] = n(a[s]) : c[s] = a[s], c), Array.isArray(a) ? [] : {}), o = n(r), i = { timestamp: (/* @__PURE__ */ new Date()).toISOString(), level: e, message: t, ...o, context: n({ bucketName: this.bucketName, region: this.region, endpoint: this.endpoint, accessKeyId: this.accessKeyId ? `${this.accessKeyId.substring(0, 4)}...` : void 0 }) };\n this.logger[e](i);\n }\n }\n async getContentLength(e) {\n this._checkKey(e);\n let t = { [E]: f }, r = y(e), { url: n, headers: o } = await this._sign(\"HEAD\", r, {}, t, \"\"), a = (await this._sendRequest(n, \"HEAD\", o)).headers.get(R);\n return a ? parseInt(a, 10) : 0;\n }\n async bucketExists() {\n let e = { [E]: f }, { url: t, headers: r } = await this._sign(\"HEAD\", \"\", {}, e, \"\"), n = await this._sendRequest(t, \"HEAD\", r, \"\", [200, 404, 403]);\n return this._log(\"error\", `Response status: ${n.status, n.statusText}`), !!(n.ok && n.status === 200);\n }\n async createBucket() {\n let e = `\n \n ${this.region}\n \n `, t = { [m]: q, [R]: Buffer.byteLength(e).toString(), [E]: await A(e) }, r = encodeURI(\"\"), { url: n, headers: o } = await this._sign(\"PUT\", r, {}, t, \"\"), i = await this._sendRequest(n, \"PUT\", o, e, [200, 404, 403]);\n return !!(i.ok && i.status === 200);\n }\n async fileExists(e, t = {}) {\n this._checkKey(e);\n let { filteredOpts: r, conditionalHeaders: n } = this._filterIfHeaders(t), o = { [E]: f, ...n }, i = y(e), { url: a, headers: c } = await this._sign(\"HEAD\", i, r, o, \"\");\n try {\n let s = await this._sendRequest(a, \"HEAD\", c, \"\", [200, 404, 412, 304]);\n return s.status === 404 ? false : s.status === 412 || s.status === 304 ? null : s.ok && s.status === 200 ? true : (this._handleErrorResponse(s), false);\n } catch (s) {\n let l = s instanceof Error ? s.message : String(s);\n throw this._log(\"error\", `${u}Failed to check if file exists: ${l}`), new Error(`${u}Failed to check if file exists: ${l}`);\n }\n }\n async _sign(e, t, r = {}, n, o) {\n let i = (/* @__PURE__ */ new Date()).toISOString().replace(/[:-]|\\.\\d{3}/g, \"\"), a = typeof t == \"string\" && t.length > 0 ? new URL(t, this.endpoint) : new URL(this.endpoint);\n a.pathname = `/${encodeURI(this.bucketName)}${a.pathname}`, n[E] = o ? await A(o) : f, n[Z] = i, n[V] = a.host;\n let c = this._buildCanonicalHeaders(n), s = Object.keys(n).map((_) => _.toLowerCase()).sort().join(\";\"), l = await this._buildCanonicalRequest(e, a, r, c, s, o), h = await this._buildStringToSign(i, l), d = await this._calculateSignature(i, h), g = this._buildAuthorizationHeader(i, s, d);\n return n[J] = g, { url: a.toString(), headers: n };\n }\n _buildCanonicalHeaders(e) {\n return Object.entries(e).map(([t, r]) => `${t.toLowerCase()}:${String(r).trim()}`).sort().join(`\n`);\n }\n async _buildCanonicalRequest(e, t, r, n, o, i) {\n return [e, t.pathname, this._buildCanonicalQueryString(r), `${n}\n`, o, i ? await A(i) : f].join(`\n`);\n }\n async _buildStringToSign(e, t) {\n let r = [e.slice(0, 8), this.region, O, K].join(\"/\");\n return [N, e, r, await A(t)].join(`\n`);\n }\n async _calculateSignature(e, t) {\n let r = await this._getSignatureKey(e.slice(0, 8));\n return H(r, t, \"hex\");\n }\n _buildAuthorizationHeader(e, t, r) {\n let n = [e.slice(0, 8), this.region, O, K].join(\"/\");\n return [`${N} Credential=${this.accessKeyId}/${n}`, `SignedHeaders=${t}`, `Signature=${r}`].join(\", \");\n }\n _filterIfHeaders(e) {\n let t = {}, r = {}, n = [\"if-match\", \"if-none-match\", \"if-modified-since\", \"if-unmodified-since\"];\n for (let [o, i] of Object.entries(e)) n.includes(o) ? r[o] = i : t[o] = i;\n return { filteredOpts: t, conditionalHeaders: r };\n }\n async list(e = \"/\", t = \"\", r = 1e3, n = \"GET\", o = {}) {\n this._checkDelimiter(e), this._checkPrefix(t), this._checkMaxKeys(r), this._checkMethodHeadnGet(n), this._checkOpts(o), this._log(\"info\", `Listing objects in ${t}`);\n let i = { \"list-type\": v, \"max-keys\": String(r), ...o };\n t.length > 0 && (i.prefix = t);\n let a = { [m]: w, [E]: f }, c = e === \"/\" ? e : C(e), { url: s, headers: l } = await this._sign(\"GET\", c, i, a, \"\"), h = `${s}?${new URLSearchParams(i)}`, d = await this._sendRequest(h, \"GET\", l), g = await d.text();\n if (n === \"HEAD\") {\n let T = d.headers.get(R), S = d.headers.get(M), Y = d.headers.get(P);\n return { size: T ? +T : void 0, mtime: S ? new Date(S) : void 0, ETag: Y || void 0 };\n }\n let _ = b(g), D = _.listBucketResult || _.error || _;\n return D.contents || D;\n }\n async listMultiPartUploads(e = \"/\", t = \"\", r = \"GET\", n = {}) {\n var o, i, a;\n this._checkDelimiter(e), this._checkPrefix(t), this._checkMethodHeadnGet(r), this._checkOpts(n), this._log(\"info\", `Listing multipart uploads in ${t}`);\n let c = { uploads: \"\", ...n }, s = { [m]: w, [E]: f }, l = e === \"/\" ? e : C(e), { url: h, headers: d } = await this._sign(\"GET\", l, c, s, \"\"), g = `${h}?${new URLSearchParams(c)}`, _ = await this._sendRequest(g, \"GET\", d), D = await _.text();\n if (r === \"HEAD\") return { size: +((o = _.headers.get(R)) !== null && o !== void 0 ? o : \"0\"), mtime: new Date((i = _.headers.get(M)) !== null && i !== void 0 ? i : \"\"), ETag: (a = _.headers.get(P)) !== null && a !== void 0 ? a : \"\" };\n let T = b(D), S = T.listMultipartUploadsResult || T.error || T;\n return S.uploads || S;\n }\n async get(e, t = {}) {\n this._checkKey(e), this._log(\"info\", `Getting object ${e}`);\n let { filteredOpts: r, conditionalHeaders: n } = this._filterIfHeaders(t), o = { [m]: w, [E]: f, ...n }, i = y(e), { url: a, headers: c } = await this._sign(\"GET\", i, r, o, \"\"), s = await this._sendRequest(a, \"GET\", c, \"\", [200, 404, 412, 304]);\n if (s.status === 404 || s.status === 412 || s.status === 304) return this._log(\"error\", `Failed to get object. Status: ${s.status}`), null;\n if (!s.ok) throw this._log(\"error\", `Failed to get object. Status: ${s.status}`), new Error(`Failed to get object. Status: ${s.status}`);\n return s;\n }\n async getObjectWithETag(e, t = {}) {\n this._checkKey(e), this._log(\"info\", `Getting object ${e}`);\n let { filteredOpts: r, conditionalHeaders: n } = this._filterIfHeaders(t), o = { [m]: w, [E]: f, ...n }, i = y(e), { url: a, headers: c } = await this._sign(\"GET\", i, r, o, \"\");\n try {\n let s = await this._sendRequest(a, \"GET\", c, \"\", [200, 404, 412, 304]);\n if (s.status === 404 || s.status === 412 || s.status === 304) return this._log(\"error\", `Failed to get object. Status: ${s.status}`), { etag: null, data: null };\n if (!s.ok) throw this._log(\"error\", `Failed to get object. Status: ${s.status}`), new Error(`Failed to get object. Status: ${s.status}`);\n let l = s.headers.get(\"etag\");\n if (!l) throw new Error(\"ETag not found in response headers\");\n let h = await s.text();\n return { etag: I(l), data: h };\n } catch (s) {\n throw this._log(\"error\", `Error getting object ${e} with ETag: ${s}`), s;\n }\n }\n async getEtag(e, t = {}) {\n this._checkKey(e), this._log(\"info\", `Getting etag object ${e}`);\n let { filteredOpts: r, conditionalHeaders: n } = this._filterIfHeaders(t), o = { [m]: w, [E]: f, ...n }, i = y(e), { url: a, headers: c } = await this._sign(\"HEAD\", i, r, o, \"\"), s = await this._sendRequest(a, \"HEAD\", c, \"\", [200, 412, 304]);\n if (this._log(\"info\", `Response status: ${s.status, s.statusText}`), s.status === 412 || s.status === 304) return null;\n let l = s.headers.get(\"etag\");\n if (!l) throw this._log(\"error\", \"ETag not found in response headers\"), new Error(\"ETag not found in response headers\");\n return I(l);\n }\n async getResponse(e, t = true, r = 0, n = this.maxRequestSizeInBytes, o = {}) {\n this._checkKey(e);\n let { filteredOpts: i, conditionalHeaders: a } = this._filterIfHeaders({ ...o }), c = { [m]: w, [E]: f, ...t ? {} : { range: `bytes=${r}-${n - 1}` }, ...a }, s = y(e), { url: l, headers: h } = await this._sign(\"GET\", s, i, c, \"\"), d = `${l}?${new URLSearchParams(i)}`;\n return this._sendRequest(d, \"GET\", h);\n }\n async put(e, t) {\n if (this._checkKey(e), !(t instanceof Buffer || typeof t == \"string\")) throw this._log(\"error\", U), new TypeError(U);\n this._log(\"info\", `Uploading object ${e}`);\n let r = typeof t == \"string\" ? Buffer.byteLength(t) : t.length, n = { [R]: r }, o = y(e), { url: i, headers: a } = await this._sign(\"PUT\", o, {}, n, t);\n return this._sendRequest(i, \"PUT\", a, t, [200]);\n }\n async getMultipartUploadId(e, t = W) {\n if (this._checkKey(e), typeof t != \"string\") throw this._log(\"error\", `${u}fileType must be a string`), new TypeError(`${u}fileType must be a string`);\n this._log(\"info\", `Initiating multipart upload for object ${e}`);\n let r = { uploads: \"\" }, n = { [m]: t, [E]: f }, o = y(e), { url: i, headers: a } = await this._sign(\"POST\", o, r, n, \"\"), c = `${i}?${new URLSearchParams(r)}`, l = await (await this._sendRequest(c, \"POST\", a)).text(), h = b(l);\n if (typeof h == \"object\" && h !== null && \"error\" in h && typeof h.error == \"object\" && h.error !== null && \"message\" in h.error) {\n let d = String(h.error.message);\n throw this._log(\"error\", `${u}Failed to abort multipart upload: ${d}`), new Error(`${u}Failed to abort multipart upload: ${d}`);\n }\n if (typeof h == \"object\" && h !== null) {\n if (!h.initiateMultipartUploadResult || !h.initiateMultipartUploadResult.uploadId) throw this._log(\"error\", `${u}Failed to create multipart upload: no uploadId in response`), new Error(`${u}Failed to create multipart upload: Missing upload ID in response`);\n return h.initiateMultipartUploadResult.uploadId;\n } else throw this._log(\"error\", `${u}Failed to create multipart upload: unexpected response format`), new Error(`${u}Failed to create multipart upload: Unexpected response format`);\n }\n async uploadPart(e, t, r, n, o = {}) {\n this._validateUploadPartParams(e, t, r, n, o);\n let i = { uploadId: r, partNumber: n, ...o }, a = { [R]: t.length }, c = y(e), { url: s, headers: l } = await this._sign(\"PUT\", c, i, a, t), h = `${s}?${new URLSearchParams(i)}`, d = await this._sendRequest(h, \"PUT\", l, t), g = I(d.headers.get(\"etag\") || \"\");\n return { partNumber: n, ETag: g };\n }\n _validateUploadPartParams(e, t, r, n, o) {\n if (this._checkKey(e), !(t instanceof Buffer || typeof t == \"string\")) throw this._log(\"error\", U), new TypeError(U);\n if (typeof r != \"string\" || r.trim().length === 0) throw this._log(\"error\", $), new TypeError($);\n if (!Number.isInteger(n) || n <= 0) throw this._log(\"error\", `${u}partNumber must be a positive integer`), new TypeError(`${u}partNumber must be a positive integer`);\n this._checkOpts(o);\n }\n async completeMultipartUpload(e, t, r) {\n if (this._checkKey(e), typeof t != \"string\" || t.trim().length === 0) throw this._log(\"error\", $), new TypeError($);\n if (!Array.isArray(r) || r.length === 0) throw this._log(\"error\", j), new TypeError(j);\n if (!r.every((_) => typeof _.partNumber == \"number\" && typeof _.ETag == \"string\")) throw this._log(\"error\", k), new TypeError(k);\n this._log(\"info\", `Complete multipart upload ${t} for object ${e}`);\n let n = { uploadId: t }, o = this._buildCompleteMultipartUploadXml(r), i = { [m]: q, [R]: Buffer.byteLength(o).toString(), [E]: await A(o) }, a = y(e), { url: c, headers: s } = await this._sign(\"POST\", a, n, i, o), l = `${c}?${new URLSearchParams(n)}`, d = await (await this._sendRequest(l, \"POST\", s, o)).text(), g = b(d);\n if (typeof g == \"object\" && g !== null && \"error\" in g && typeof g.error == \"object\" && g.error !== null && \"message\" in g.error) {\n let _ = String(g.error.message);\n throw this._log(\"error\", `${u}Failed to abort multipart upload: ${_}`), new Error(`${u}Failed to abort multipart upload: ${_}`);\n }\n return g.completeMultipartUploadResult;\n }\n async abortMultipartUpload(e, t) {\n if (this._checkKey(e), typeof t != \"string\" || t.trim().length === 0) throw this._log(\"error\", $), new TypeError($);\n this._log(\"info\", `Aborting multipart upload ${t} for object ${e}`);\n let r = { uploadId: t }, n = { [m]: q, [E]: f };\n try {\n let o = y(e), { url: i, headers: a } = await this._sign(\"DELETE\", o, r, n, \"\"), c = `${i}?${new URLSearchParams(r)}`, s = await this._sendRequest(c, \"DELETE\", a);\n if (s.ok) {\n let l = await s.text(), h = b(l);\n if (typeof h == \"object\" && h !== null && \"error\" in h && typeof h.error == \"object\" && h.error !== null && \"message\" in h.error) {\n let d = String(h.error.message);\n throw this._log(\"error\", `${u}Failed to abort multipart upload: ${d}`), new Error(`${u}Failed to abort multipart upload: ${d}`);\n }\n return { status: \"Aborted\", key: e, uploadId: t, response: h };\n } else throw this._log(\"error\", `${u}Abort request failed with status ${s.status}`), new Error(`${u}Abort request failed with status ${s.status}`);\n } catch (o) {\n let i = o instanceof Error ? o.message : String(o);\n throw this._log(\"error\", `${u}Failed to abort multipart upload for key ${e}: ${i}`), new Error(`${u}Failed to abort multipart upload for key ${e}: ${i}`);\n }\n }\n _buildCompleteMultipartUploadXml(e) {\n return `\n \n ${e.map((t) => `\n \n ${t.partNumber}\n ${t.ETag}\n \n `).join(\"\")}\n \n `;\n }\n async delete(e) {\n this._checkKey(e), this._log(\"info\", `Deleting object ${e}`);\n let t = { [m]: w, [E]: f }, r = y(e), { url: n, headers: o } = await this._sign(\"DELETE\", r, {}, t, \"\"), i = await this._sendRequest(n, \"DELETE\", o);\n return i.status === 204 || i.status === 200;\n }\n async _sendRequest(e, t, r, n, o = []) {\n this._log(\"info\", `Sending ${t} request to ${e}, headers: ${JSON.stringify(r)}`);\n let i = await fetch(e, { method: t, headers: r, body: [\"GET\", \"HEAD\"].includes(t) ? void 0 : n, signal: this.requestAbortTimeout !== void 0 ? AbortSignal.timeout(this.requestAbortTimeout) : void 0 });\n return this._log(\"info\", `Response status: ${i.status, o}`), !i.ok && !o.includes(i.status) && await this._handleErrorResponse(i), i;\n }\n async _handleErrorResponse(e) {\n let t = await e.text(), r = e.headers.get(\"x-amz-error-code\") || \"Unknown\", n = e.headers.get(\"x-amz-error-message\") || e.statusText;\n throw this._log(\"error\", `${u}Request failed with status ${e.status}: ${r} - ${n},err body: ${t}`), new Error(`${u}Request failed with status ${e.status}: ${r} - ${n}, err body: ${t}`);\n }\n _buildCanonicalQueryString(e) {\n return Object.keys(e).length < 1 ? \"\" : Object.keys(e).sort().map((t) => `${encodeURIComponent(t)}=${encodeURIComponent(e[t])}`).join(\"&\");\n }\n async _getSignatureKey(e) {\n let t = await H(`AWS4${this.secretAccessKey}`, e), r = await H(t, this.region), n = await H(r, O);\n return H(n, K);\n }\n};\nvar A = async (p) => {\n let e = Q(\"sha256\");\n return e.update(p), e.digest(\"hex\");\n};\nvar H = async (p, e, t) => {\n let r = z(\"sha256\", p);\n return r.update(e), r.digest(t);\n};\nvar I = (p) => {\n let e = { '\"': \"\", \""\": \"\", \""\": \"\", \""\": \"\", \""\": \"\" };\n return p.replace(/^(\"|"|")|(\"|"|")$/g, (t) => e[t]);\n};\nvar b = (p) => {\n let e = (o) => o.replace(/"/g, '\"').replace(/'/g, \"'\").replace(/</g, \"<\").replace(/>/g, \">\").replace(/&/g, \"&\"), t = {}, r = /<(\\w)([-\\w]+)(?:\\/|[^>]*>((?:(?!<\\1)[\\s\\S])*)<\\/\\1\\2)>/gm, n;\n for (; n = r.exec(p); ) {\n let [, o, i, a] = n, c = o.toLowerCase() + i, s = a != null ? b(a) : true;\n typeof s == \"string\" ? t[c] = I(e(s)) : Array.isArray(t[c]) ? t[c].push(s) : t[c] = t[c] != null ? [t[c], s] : ne[c] ? [s] : s;\n }\n return Object.keys(t).length ? t : e(p);\n};\n\n// src/lowstorage.ts\nvar import_avsc = __toESM(require_lib(), 1);\n\n// src/errors.ts\nvar lowstorage_ERROR_CODES = {\n MISSING_ARGUMENT: \"MISSING_ARGUMENT\",\n COLLECTION_EXISTS: \"COLLECTION_EXISTS\",\n CREATE_COLLECTION_ERROR: \"CREATE_COLLECTION_ERROR\",\n RENAME_COLLECTION_ERROR: \"RENAME_COLLECTION_ERROR\",\n REMOVE_COLLECTION_ERROR: \"REMOVE_COLLECTION_ERROR\",\n UPDATE_COLLECTION_SCHEMA_ERROR: \"UPDATE_COLLECTION_SCHEMA_ERROR\",\n COLLECTION_NOT_FOUND: \"COLLECTION_NOT_FOUND\",\n SCHEMA_VALIDATION_ERROR: \"SCHEMA_VALIDATION_ERROR\",\n DOCUMENT_VALIDATION_ERROR: \"DOCUMENT_VALIDATION_ERROR\",\n S3_OPERATION_ERROR: \"S3_OPERATION_ERROR\",\n FIND_ERROR: \"FIND_ERROR\",\n FIND_ONE_ERROR: \"FIND_ONE_ERROR\",\n SAVE_DATA_ERROR: \"SAVE_DATA_ERROR\",\n INSERT_ERROR: \"INSERT_ERROR\",\n UPDATE_ERROR: \"UPDATE_ERROR\",\n UPDATE_ONE_ERROR: \"UPDATE_ONE_ERROR\",\n DELETE_ERROR: \"DELETE_ERROR\",\n COUNT_ERROR: \"COUNT_ERROR\",\n UNKNOWN_ERROR: \"UNKNOWN_ERROR\"\n};\nvar lowstorageError = class extends Error {\n constructor(message, code = lowstorage_ERROR_CODES.UNKNOWN_ERROR) {\n super(`lowstorageError: ${message} :: code: ${code}`);\n this.name = this.constructor.name;\n this.code = code;\n Error.captureStackTrace(this, this.constructor);\n }\n};\nvar SchemaValidationError = class extends lowstorageError {\n constructor(message, code = lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR) {\n super(message, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR);\n }\n};\nvar DocumentValidationError = class extends lowstorageError {\n constructor(message, code = lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR) {\n super(message, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR);\n }\n};\nvar S3OperationError = class extends lowstorageError {\n constructor(message, operation) {\n super(`S3 ${operation} operation failed: ${message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n};\n\n// src/helpers.ts\nimport { randomUUID } from \"node:crypto\";\nvar matchesQuery = (document, query) => {\n return Object.keys(query).every((key) => document[key] === query[key]);\n};\nvar generateUUID = async () => {\n if (typeof randomUUID !== \"undefined\" && typeof randomUUID === \"function\") {\n return randomUUID();\n }\n if (typeof crypto !== \"undefined\" && typeof crypto === \"object\" && typeof crypto.randomUUID === \"function\") {\n return crypto.randomUUID();\n }\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, function(c) {\n var r = Math.random() * 16 | 0, v2 = c === \"x\" ? r : r & 3 | 8;\n return v2.toString(16);\n });\n};\nvar ensureIdFieldInSchema = (schema) => {\n const idField = {\n name: \"_id\",\n type: \"string\",\n size: 16,\n logicalType: \"UUID\"\n };\n if (typeof schema === \"undefined\" || schema === null) {\n return schema;\n }\n if (\"type\" in schema && schema.type === \"record\" && \"fields\" in schema && Array.isArray(schema.fields)) {\n const hasIdField = schema.fields.some((field) => field.name === \"_id\");\n if (!hasIdField) {\n schema.fields.unshift(idField);\n }\n } else if (\"type\" in schema && schema.type === \"array\" && \"items\" in schema && schema.items !== null && typeof schema.items === \"object\" && \"type\" in schema.items && schema.items.type === \"record\" && \"fields\" in schema.items && Array.isArray(schema.items.fields)) {\n const hasIdField = schema.items.fields.some((field) => field.name === \"_id\");\n if (!hasIdField) {\n schema.items.fields.unshift(idField);\n }\n }\n return schema;\n};\n\n// src/lowstorage.ts\nvar MODULE_NAME = \"lowstorage\";\nvar DEFAULT_DELIMITER = \"/\";\nvar PROJECT_DIR_PREFIX = \"lowstorage\";\nvar COL_SUFFIX = \".avro\";\nvar CHUNG_1MB = 1024 * 1024;\nvar CHUNG_5MB = 5 * CHUNG_1MB;\nvar EMPTY_DATA = Buffer.from(\"\", \"utf8\");\nvar errorValidationFn = (errorCode = lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR) => {\n throw new DocumentValidationError(`${MODULE_NAME}: Invalid document or schema ${errorCode}`);\n};\nvar _hasColName = (colName = \"\") => {\n if (colName.trim() === \"\" || colName === null || typeof colName === \"undefined\" || colName.length > 255 || colName === null) {\n throw new lowstorageError(`${MODULE_NAME}: Collection name is required, null or too long`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n }\n};\nvar lowstorage = class {\n constructor(options) {\n this._checkArgs = (args) => {\n const requiredFields = [\"accessKeyId\", \"secretAccessKey\", \"endpoint\", \"bucketName\"];\n for (const field of requiredFields) {\n if (!args[field]) {\n throw new lowstorageError(`${MODULE_NAME}: ${field} is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n }\n }\n };\n /**\n * Get the S3 instance associated with the lowstorage instance.\n * @returns {S3} The S3 instance. Use this to perform S3 operations. Check for ultralight-s3 for more details.\n */\n this.s3 = () => {\n return this._s3;\n };\n this._checkArgs(options);\n this._schemas = /* @__PURE__ */ new Map();\n this._s3 = new x(options);\n this._dirPrefix = options.dirPrefix || PROJECT_DIR_PREFIX;\n this._avroParse = import_avsc.Type;\n }\n /**\n * Check if a bucket exists.\n * @returns {Promise} True if the bucket exists, false otherwise.\n * @throws {lowstorageError} If there's an error.\n */\n async checkIfStorageExists() {\n try {\n const exists = await this._s3.bucketExists();\n return !!exists;\n } catch (error) {\n if (error.message.includes(\"Not Found\")) {\n return false;\n }\n throw new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n }\n /**\n * Create a new storage bucket if it doesn't exist.\n * @returns {Promise} A Promise that resolves to true if the bucket was created or already exists, false otherwise.\n * @throws {lowstorageError} If there's an error.\n */\n async createStorage() {\n try {\n const exists = await this.checkIfStorageExists();\n if (!exists) {\n const createdBucket = await this._s3.createBucket();\n return createdBucket;\n }\n return exists;\n throw new lowstorageError(`${MODULE_NAME}: Bucket already exists`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n } catch (error) {\n if (error instanceof lowstorageError) {\n throw error;\n }\n throw new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n }\n /**\n * List all collections.\n * @returns {Promise} An array of collection names.\n * @throws {S3OperationError} If there's an error during S3 operation.\n */\n async listCollections() {\n try {\n const listed = await this._s3.list(DEFAULT_DELIMITER, this._dirPrefix);\n if (Array.isArray(listed)) {\n return listed.map((entry) => entry.key.slice(this._dirPrefix.length + 1, -COL_SUFFIX.length));\n } else if (typeof listed === \"object\" && listed !== null && \"keyCount\" in listed && listed.keyCount === \"0\") {\n return [];\n }\n return [];\n } catch (error) {\n throw new S3OperationError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n }\n /**\n * Check if a collection exists.\n * @param {string} colName - The name of the collection.\n * @returns {Promise} True if the collection exists, false otherwise.\n * @throws {lowstorageError} If there's an error.\n */\n async collectionExists(colName = \"\") {\n try {\n _hasColName(colName);\n const exists = await this._s3.fileExists(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`);\n return !!exists;\n } catch (error) {\n if (error.message.includes(\"Not Found\")) {\n return false;\n }\n throw new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND);\n }\n }\n /**\n * Create a new collection.\n * @param {string} colName - The name of the collection.\n * @param {Object} [schema] - The schema for the collection.\n * @param {Array} [data=[]] - The initial data for the collection.\n * @returns {Promise} A Promise that resolves to a Collection object.\n * @throws {lowstorageError} If there's an error.\n */\n async createCollection(colName = \"\", schema, data = []) {\n try {\n _hasColName(colName);\n const exists = await this.collectionExists(colName);\n if (!exists) {\n if (typeof schema !== \"undefined\" && schema !== null) {\n try {\n const type = this._avroParse.forSchema(schema);\n if (!type) {\n throw new SchemaValidationError(\n `${MODULE_NAME}: Schema is invalid: ${schema} ${lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR}`\n );\n } else {\n this._schemas.set(colName, schema);\n }\n } catch (error) {\n throw new SchemaValidationError(`${MODULE_NAME}: Schema is invalid: ${schema}`, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR);\n }\n }\n if (data.length > 0 && schema) {\n const wrapperType = this._avroParse.forSchema({ type: \"array\", items: schema });\n await this._s3.put(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`, wrapperType.toBuffer(data));\n } else {\n await this._s3.put(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`, EMPTY_DATA);\n }\n return this.collection(colName, schema, false);\n }\n throw new lowstorageError(`${MODULE_NAME}: Collection ${colName} already exists`, lowstorage_ERROR_CODES.COLLECTION_EXISTS);\n } catch (error) {\n if (error instanceof lowstorageError) {\n throw error;\n }\n throw new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.CREATE_COLLECTION_ERROR);\n }\n }\n /**\n * Remove a collection.\n * @param {string} colName - The name of the collection.\n * @returns {Promise} A Promise that resolves to true if the collection is removed, false otherwise.\n * @throws {lowstorageError} If there's an error.\n */\n async removeCollection(colName = \"\") {\n try {\n _hasColName(colName);\n const exists = await this.collectionExists(colName);\n if (exists) {\n await this._s3.delete(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`);\n const exists2 = await this.collectionExists(colName);\n if (typeof exists2 === \"boolean\") {\n if (!exists2) {\n this._schemas.delete(colName);\n return true;\n }\n throw new lowstorageError(`${MODULE_NAME}: Failed to delete collection ${colName}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n throw new S3OperationError(`${MODULE_NAME}: Failed to delete collection ${colName}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n throw new lowstorageError(`${MODULE_NAME}: Collection ${colName} does not exist`, lowstorage_ERROR_CODES.REMOVE_COLLECTION_ERROR);\n } catch (error) {\n if (error instanceof S3OperationError) {\n throw error;\n }\n throw new lowstorageError(\n `${MODULE_NAME}: Failed to remove collection: ${error.message}`,\n lowstorage_ERROR_CODES.REMOVE_COLLECTION_ERROR\n );\n }\n }\n /**\n * Get or create a collection.\n * @param {string} colName - The name of the collection.\n * @param {Object} [schema] - The schema for the collection.\n * @param {boolean} [autoCreate=true] - Whether to automatically create the collection if it doesn't exist.\n * @returns {Promise} A Promise that resolves to a Collection object.\n * @throws {lowstorageError} If there's an error.\n */\n async collection(colName = \"\", schema, autoCreate = true) {\n try {\n _hasColName(colName);\n const colPath = `${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`;\n const exists = await this._s3.fileExists(colPath);\n if (!exists) {\n if (!autoCreate) {\n throw new lowstorageError(`${MODULE_NAME}: Collection ${colName} does not exist`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND);\n }\n await this._s3.put(colPath, EMPTY_DATA);\n }\n const colSchema = schema || this._schemas.get(colName) || void 0;\n return new Collection(colName, colSchema, this._s3, this._dirPrefix);\n } catch (error) {\n if (error.message.includes(\"unknown type\")) {\n throw new SchemaValidationError(\n `${MODULE_NAME}: Schema input is invalid: ${error.message}`,\n lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR\n );\n }\n throw new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND);\n }\n }\n};\nvar Collection = class _Collection {\n constructor(colName = \"\", schema, s3, dirPrefix = PROJECT_DIR_PREFIX, safeWrite = false, chunkSize = CHUNG_5MB) {\n this.getProps = () => ({\n colName: this._colName,\n s3: this._s3,\n schema: this._schema,\n avroParse: this._avroParse,\n avroType: this._avroType,\n dirPrefix: this._dirPrefix,\n safeWrite: this._safeWrite,\n chunkSize: this._chunkSize\n });\n this.setProps = (props) => {\n this._colName = props.colName;\n this._schema = props.schema;\n this._s3 = props.s3;\n this._avroParse = props.avroParse;\n this._avroType = props.avroType;\n this._dirPrefix = props.dirPrefix;\n this._safeWrite = props.safeWrite;\n this._chunkSize = props.chunkSize;\n };\n this.setSafeWrite = (safeWrite) => {\n this._safeWrite = safeWrite;\n };\n this.getSafeWrite = () => {\n return this._safeWrite;\n };\n this.getAvroSchema = () => {\n return this._schema;\n };\n this.setAvroSchema = (schema) => {\n try {\n this._schema = ensureIdFieldInSchema(schema);\n this._avroType = typeof schema === \"undefined\" ? null : this._avroParse.forSchema(schema);\n } catch (error) {\n throw new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR);\n }\n };\n this.getCollectionETag = () => {\n return this._lastETag;\n };\n this.inferAvroSchema = (data, type = \"record\") => {\n if (Array.isArray(data)) {\n data = data[0];\n }\n const inferedType = this._avroParse.forValue(data);\n const schema = inferedType.schema();\n return ensureIdFieldInSchema(schema);\n };\n this._colName = colName.trim();\n this._s3 = s3;\n this._schema = ensureIdFieldInSchema(schema);\n this._dirPrefix = dirPrefix;\n this._safeWrite = safeWrite;\n this._chunkSize = chunkSize || CHUNG_5MB;\n this._s3.setMaxRequestSizeInBytes(this._chunkSize);\n this._avroParse = import_avsc.Type;\n this._lastETag = \"\";\n this._dataCache = [];\n this._avroType = typeof schema === \"undefined\" ? null : this._avroParse.forSchema(schema);\n this._key = `${this._dirPrefix}${DEFAULT_DELIMITER}${this._colName}${COL_SUFFIX}`;\n }\n async forceLoadData() {\n try {\n this._lastETag = \"\";\n const data = await this._loadData();\n this._dataCache = data;\n return true;\n } catch (error) {\n throw new lowstorageError(`${MODULE_NAME}: Failed to force update data: ${error.message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n }\n async _loadData() {\n try {\n if (this._avroType === null || typeof this._avroType === \"undefined\") {\n throw new lowstorageError(\n `${MODULE_NAME}: Missing type definition. Configure before operations `,\n lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR\n );\n }\n const { etag, data } = await this._s3.getObjectWithETag(this._key, { \"if-none-match\": this._lastETag });\n if (data === null) {\n return this._dataCache;\n }\n this._lastETag = etag === null ? this._lastETag : etag;\n const wrapperType = this._avroParse.forSchema({ type: \"array\", items: this._avroType });\n if (data.length < this._chunkSize) {\n this._dataCache = data.length > 0 ? wrapperType.fromBuffer(Buffer.from(data, \"utf8\")) : [];\n return this._dataCache;\n }\n let offset = this._chunkSize;\n let bufferArr = [Buffer.from(data, \"utf8\")];\n let repeat = true;\n while (repeat) {\n const nextDataResponse = await this._s3.getResponse(this._key, false, offset, offset + this._chunkSize);\n const nextDataBody = await nextDataResponse.text();\n bufferArr.push(Buffer.from(nextDataBody, \"utf8\"));\n offset += this._chunkSize;\n const contentLength = parseInt(nextDataResponse.headers.get(\"content-length\") || nextDataBody.length.toString());\n if (contentLength < this._chunkSize) {\n repeat = false;\n }\n }\n const bufferedData = Buffer.concat(bufferArr);\n this._dataCache = wrapperType.fromBuffer(bufferedData);\n return this._dataCache;\n } catch (error) {\n if (error.toString().indexOf(\"status 404: Unknown - Not Found\") > -1) {\n this._dataCache = [];\n return this._dataCache;\n }\n throw new S3OperationError(`${MODULE_NAME}: Failed to load data: ${error.message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n }\n async _saveData(data) {\n try {\n if (this._avroType === null || typeof this._avroType === \"undefined\") {\n throw new lowstorageError(\n `${MODULE_NAME}: Missing type definition. Configure before operations `,\n lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR\n );\n }\n const wrapperType = this._avroParse.forSchema({ type: \"array\", items: this._avroType });\n const dataBuffer = data.length > 0 ? wrapperType.toBuffer(data) : EMPTY_DATA;\n if (this._safeWrite && this._lastETag !== \"\") {\n const currentETag = await this._s3.getEtag(this._key);\n if (currentETag !== null && currentETag !== this._lastETag) {\n return false;\n }\n }\n const resp = await this._s3.put(this._key, dataBuffer);\n if (typeof resp === \"object\" && \"status\" in resp && resp.status !== 200) {\n throw new S3OperationError(`${MODULE_NAME}: Failed to save data`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n const newETag = resp.headers?.get(\"etag\") || \"\";\n if (newETag && newETag.length > 0) {\n this._lastETag = this._s3.sanitizeETag(newETag);\n this._dataCache = data;\n }\n return true;\n } catch (error) {\n if (error instanceof S3OperationError) {\n throw error;\n }\n throw new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.SAVE_DATA_ERROR);\n }\n }\n /**\n * Insert a document into the collection.\n * @param {Object|Array} doc - The document to insert.\n * @param {Object} [schema=undefined] - The schema for the document.\n * @returns {Promise} A Promise that resolves to the array of inserted document(s).\n * @throws {lowstorageError} If there's an error.\n */\n async insert(doc, schema) {\n try {\n if (doc === void 0 || doc === null) {\n throw new lowstorageError(`${MODULE_NAME}: Document is required for insert`, lowstorage_ERROR_CODES.INSERT_ERROR);\n }\n if (typeof doc !== \"object\" && !Array.isArray(doc)) {\n throw new DocumentValidationError(\n `${MODULE_NAME}: Document must be an object or an array`,\n lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR\n );\n }\n const items = !Array.isArray(doc) ? [doc] : doc;\n const schemaWithId = schema ? ensureIdFieldInSchema(schema) : this._schema || this.inferAvroSchema(items[0]);\n const avroType = this._avroParse.forSchema(schemaWithId);\n if (!avroType) {\n throw new SchemaValidationError(\n `${MODULE_NAME}: Schema is required - Pass a schema to the insert method`,\n lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR\n );\n }\n this._avroType = avroType;\n const data = await this._loadData();\n for (let item of items) {\n if (typeof item !== \"object\" || item === null) {\n throw new DocumentValidationError(\n `${MODULE_NAME}: Invalid input: input must be an object or an array of objects`,\n lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR\n );\n }\n item._id = item._id || await generateUUID();\n const validBuffer = this._avroType.isValid(item, {\n errorHook: errorValidationFn,\n noUndeclaredFields: true\n });\n if (validBuffer === true) {\n data.push(item);\n } else {\n throw new DocumentValidationError(`${MODULE_NAME}: Invalid document or schema`, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR);\n }\n }\n const success = await this._saveData(data);\n if (!success) {\n throw new S3OperationError(`${MODULE_NAME}: Failed to insert document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n this.setAvroSchema(schemaWithId);\n return items;\n } catch (error) {\n if (error.message.includes(\"unknown type\")) {\n throw new SchemaValidationError(\n `${MODULE_NAME}: Schema input is invalid: ${error.message}`,\n lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR\n );\n }\n if (error instanceof lowstorageError) {\n throw error;\n }\n throw new lowstorageError(`${MODULE_NAME} Insert operation failed: ${error.message}`, lowstorage_ERROR_CODES.INSERT_ERROR);\n }\n }\n /**\n * Find documents in the collection.\n * @param {Object} [query={}] - The query to filter documents.\n * @param {Object} [options={}] - The options for pagination.\n * @param {number} [options.skip=0] - The number of documents to skip. Default is 0.\n * @param {number} [options.limit=undefined] - The maximum number of documents to return. Default is undefined, which means no limit.\n * @returns {Promise} A Promise that resolves to an array of matching documents.\n * @throws {lowstorageError} If there's an error.\n */\n async find(query = {}, options = {}) {\n try {\n if (query === void 0 || query === null) {\n throw new lowstorageError(`${MODULE_NAME}: Query is required for update`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n }\n const data = await this._loadData();\n const start = options.skip !== void 0 ? parseInt(String(options.skip), 10) : 0;\n const end = options.limit !== void 0 ? start + parseInt(String(options.limit), 10) : void 0;\n const filteredData = data.filter((doc) => matchesQuery(doc, query)).slice(start, end);\n return filteredData;\n } catch (error) {\n throw new lowstorageError(`${MODULE_NAME}: Find operation failed: ${error.message}`, lowstorage_ERROR_CODES.FIND_ERROR);\n }\n }\n /**\n * Find the first document in the collection that matches the query.\n * @param {Object} [query={}] - The query to filter documents.\n * @returns {Promise} A Promise that resolves to the first matching document or null if no match is found.\n * @throws {lowstorageError} If there's an error.\n */\n async findOne(query = {}) {\n try {\n if (query === null) {\n throw new lowstorageError(`${MODULE_NAME}: Query cannot be null`, lowstorage_ERROR_CODES.INVALID_ARGUMENT);\n }\n const result = await this.find(query, { limit: 1 });\n return result[0] || null;\n } catch (error) {\n if (error instanceof lowstorageError) {\n throw error;\n }\n throw new lowstorageError(`${MODULE_NAME}: FindOne operation failed: ${error.message}`, lowstorage_ERROR_CODES.FIND_ONE_ERROR);\n }\n }\n /**\n * Update a single document in the collection that matches the query.\n * @param {Object} [query={}] - The query to filter the document to update.\n * @param {Object} [update={}] - The update operations to apply to the matching document.\n * @returns {Promise} A Promise that resolves to number of documents updated.\n * @throws {lowstorageError} If the updateOne operation fails.\n * @throws {SchemaValidationError} If the schema is not defined for the collection.\n * @throws {DocumentValidationError} If the updated document is invalid.\n * @throws {S3OperationError} If the S3 operation fails.\n */\n async update(query = {}, update = {}, options = {}) {\n try {\n if (query === void 0 || query === null || update === void 0 || update === null) {\n throw new lowstorageError(\n `${MODULE_NAME}: Query and update values are required for update`,\n lowstorage_ERROR_CODES.MISSING_ARGUMENT\n );\n }\n if (!this._avroType) {\n throw new SchemaValidationError(\n `${MODULE_NAME}: Schema is not defined for this collection`,\n lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR\n );\n }\n const data = await this._loadData();\n if (data.length === 0) return 0;\n let updatedCount = 0;\n for (let i = 0; i < data.length; i++) {\n if (matchesQuery(data[i], query)) {\n const updatedDoc = { ...data[i], ...update };\n const isValid = this._avroType.isValid(updatedDoc, {\n errorHook: errorValidationFn,\n noUndeclaredFields: true\n });\n if (isValid === true) {\n data[i] = updatedDoc;\n updatedCount++;\n } else {\n throw new DocumentValidationError(\n `${MODULE_NAME}: Invalid document or schema`,\n lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR\n );\n }\n }\n }\n if (updatedCount > 0) {\n const success = await this._saveData(data);\n if (!success) {\n throw new S3OperationError(`${MODULE_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n } else if (options && \"upsert\" in options && options.upsert) {\n const success = await this.insert(update);\n if (!success) {\n throw new S3OperationError(`${MODULE_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n updatedCount = 1;\n }\n return updatedCount;\n } catch (error) {\n if (error instanceof S3OperationError) {\n throw error;\n }\n throw new lowstorageError(`${MODULE_NAME}: Update operation failed: ${error.message}`, lowstorage_ERROR_CODES.UPDATE_ERROR);\n }\n }\n /**\n * Update a single document in the collection that matches the query.\n * @param {Object} [query={}] - The query to filter the document to update.\n * @param {Object} [update={}] - The update operations to apply to the matching document.\n * @returns {Promise} A Promise that resolves to 1 if a document was updated, 0 otherwise.\n /**\n * Update a single document in the collection that matches the query.\n * @throws {lowstorageError} If the updateOne operation fails.\n * @throws {SchemaValidationError} If the schema is not defined for the collection.\n * @throws {DocumentValidationError} If the updated document is invalid.\n * @throws {S3OperationError} If the S3 operation fails.\n */\n async updateOne(query = {}, update = {}, options = {}) {\n try {\n if (query === void 0 || query === null || update === void 0 || update === null) {\n throw new lowstorageError(`${MODULE_NAME}: Query is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n }\n if (!this._avroType) {\n throw new SchemaValidationError(\n `${MODULE_NAME}: Schema is not defined for this collection`,\n lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR\n );\n }\n const data = await this._loadData();\n if (data.length === 0) return 0;\n const docIndex = data.findIndex((doc) => matchesQuery(doc, query));\n if (docIndex !== -1) {\n const updatedDoc = { ...data[docIndex], ...update };\n const isValid = this._avroType.isValid(updatedDoc, {\n errorHook: errorValidationFn,\n noUndeclaredFields: true\n });\n if (isValid === true) {\n data[docIndex] = updatedDoc;\n const success = await this._saveData(data);\n if (!success) {\n throw new S3OperationError(`${MODULE_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n return 1;\n } else {\n throw new DocumentValidationError(`${MODULE_NAME}: Invalid document or schema`, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR);\n }\n }\n if (options && \"upsert\" in options && options.upsert) {\n const success = await this.insert(update);\n if (!success) {\n throw new S3OperationError(`${MODULE_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n return 1;\n }\n return 0;\n } catch (error) {\n if (error instanceof lowstorageError) {\n throw error;\n }\n throw new lowstorageError(`${MODULE_NAME}: UpdateOne operation failed: ${error.message}`, lowstorage_ERROR_CODES.UPDATE_ONE_ERROR);\n }\n }\n /**\n * Delete documents from the collection.\n * @param {Object} [query={}] - The query to filter documents to delete.\n * @returns {Promise} A Promise that resolves to the number of documents deleted.\n * @throws {lowstorageError} If the delete operation fails.\n * @throws {S3OperationError} If the S3 operation fails.\n */\n async delete(query = {}) {\n try {\n if (query === void 0 || query === null) {\n throw new lowstorageError(`${MODULE_NAME}: Query is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n }\n const data = await this._loadData();\n if (data.length === 0) return 0;\n const initialLength = data.length;\n const newData = data.filter((doc) => !matchesQuery(doc, query));\n const success = await this._saveData(newData);\n if (!success) {\n throw new S3OperationError(`${MODULE_NAME}: Failed to delete document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n return initialLength - newData.length;\n } catch (error) {\n if (error instanceof S3OperationError) {\n throw error;\n }\n throw new lowstorageError(`${MODULE_NAME}: Delete operation failed: ${error.message}`, lowstorage_ERROR_CODES.DELETE_ERROR);\n }\n }\n /**\n * Delete all documents from the collection.\n * @returns {Promise} A Promise that resolves to the number of documents deleted.\n * @throws {lowstorageError} If the delete operation fails.\n * @throws {S3OperationError} If the S3 operation fails.\n */\n async deleteAll() {\n try {\n const data = await this._loadData();\n const initialLength = data.length;\n const success = await this._saveData([]);\n if (!success) {\n throw new S3OperationError(`${MODULE_NAME}: Failed to delete document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n return initialLength;\n } catch (error) {\n if (error instanceof S3OperationError) {\n throw error;\n }\n throw new lowstorageError(`${MODULE_NAME}: Delete operation failed: ${error.message}`, lowstorage_ERROR_CODES.DELETE_ERROR);\n }\n }\n /**\n * Count the number of documents in the collection.\n * @param {Object} [query={}] - The query to filter documents.\n * @returns {Promise} A Promise that resolves to the number of documents in the collection.\n * @throws {lowstorageError} If the count operation fails.\n */\n async count(query = {}) {\n try {\n const data = await this.find(query);\n return data.length;\n } catch (error) {\n throw new lowstorageError(`${MODULE_NAME}: Count operation failed: ${error.message}`, lowstorage_ERROR_CODES.COUNT_ERROR);\n }\n }\n async renameCollection(newColName, newSchema = this._schema) {\n try {\n _hasColName(newColName);\n const exists = await this._s3.fileExists(`${this._dirPrefix}${DEFAULT_DELIMITER}${newColName}${COL_SUFFIX}`);\n if (!!exists) {\n throw new lowstorageError(`${MODULE_NAME}: Collection ${newColName} already exists`, lowstorage_ERROR_CODES.COLLECTION_EXISTS);\n }\n const schema = newSchema || this.getAvroSchema();\n const data = await this._loadData();\n const createNew = new _Collection(newColName, schema, this._s3, this._dirPrefix, this._safeWrite, this._chunkSize);\n await createNew._saveData(data);\n await this._s3.delete(`${this._dirPrefix}${DEFAULT_DELIMITER}${this._colName}${COL_SUFFIX}`);\n return createNew;\n } catch (error) {\n if (error instanceof lowstorageError) {\n throw error;\n }\n throw new lowstorageError(\n `${MODULE_NAME}: Rename collection failed: ${error.message}`,\n lowstorage_ERROR_CODES.RENAME_COLLECTION_ERROR\n );\n }\n }\n};\nexport {\n lowstorage,\n lowstorageError,\n lowstorage_ERROR_CODES\n};\n\n"], - "mappings": "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", - "names": ["__import_BUFFER", "__import_CRYPTO", "__import_UTIL", "__import_STREAM", "__import_ZLIB", "__import_EVENTS", "__import_FS", "__import_PATH", "randomUUID", "__create", "__defProp", "__getOwnPropDesc", "__getOwnPropNames", "__getProtoOf", "__hasOwnProp", "__commonJS", "cb", "mod", "__getOwnPropNames", "__copyProps", "to", "from", "except", "desc", "key", "__hasOwnProp", "__defProp", "__getOwnPropDesc", "__toESM", "isNodeMode", "target", "__create", "__getProtoOf", "require_utils", "exports", "module", "buffer", "__import_BUFFER", "crypto2", "__import_CRYPTO", "util", "__import_UTIL", "Buffer2", "POOL", "BufferPool", "NAME_PATTERN", "f2", "newBuffer", "size", "bufferFrom", "data", "enc", "capitalize", "s", "compare", "n1", "n2", "getOption", "opts", "def", "value", "getHash", "str", "algorithm", "hash", "singleIndexOf", "arr", "v2", "pos", "i", "l", "toMap", "fn", "obj", "elem", "objectValues", "hasDuplicates", "copyOwnProperties", "src", "dst", "overwrite", "names", "name", "descriptor", "isValidName", "qualify", "namespace", "part", "unqualify", "parts", "impliedNamespace", "match", "jsonEnd", "c", "depth", "literal", "abstractFunction", "addDeprecatedGetters", "props", "proto", "prop", "getter", "createGetter", "prop2", "delegate", "len", "maxLen", "Lcg", "seed", "a", "m2", "state", "start", "end", "flags", "mask", "result", "OrderedQueue", "item", "items", "j2", "first", "mid", "i1", "i2", "c1", "c2", "Tap", "buf", "b2", "n", "k2", "h", "f3", "fk", "d", "fixed", "tap", "l1", "p1", "l2", "p2", "b1", "res", "neg", "invert", "require_types", "utils", "SlowBuffer", "debug", "TYPES", "ArrayType", "BooleanType", "BytesType", "DoubleType", "EnumType", "RecordType", "FixedType", "FloatType", "IntType", "LongType", "MapType", "NullType", "StringType", "RANDOM", "TAP", "LOGICAL_TYPE", "UNDERLYING_TYPES", "Type", "schema", "type", "Hash", "maybeQualify", "isPrimitive", "registry", "UnionType2", "wrapUnions", "WrappedUnionType", "UnwrappedUnionType", "DerivedType", "err", "logicalType", "types", "isAmbiguous", "typeName", "Type2", "val", "fieldNames", "expanded", "numWrappedUnions", "isValidWrappedUnion", "branchTypes", "branchType", "unionType", "bucketized", "bucket", "getTypeBucket", "bucketTypes", "buckets", "augmented", "combineNumbers", "combineStrings", "combineBuffers", "t", "combineObjects", "any", "buf1", "buf2", "resolver", "Resolver", "resolvers", "index", "resolver2", "readValue", "canon", "schemaStr", "noCheck", "className", "getClassName", "errorHook", "hook", "path", "Branch", "derefedSchema", "attr", "body", "asBranch", "PrimitiveType", "noFreeze", "throwInvalidError", "tap1", "tap2", "isSafeLong", "methods", "noUnpack", "mapping", "AbstractLongType", "isJsonBuffer", "UnionType", "branch", "getValueBucket", "logicalBranches", "typeResolver", "coerce", "wrap", "keys", "val1", "val2", "index1", "index2", "firstType", "name1", "name2", "symbol", "symbols", "hasCompatibleName", "values", "readArraySize", "rsv", "copy", "ns", "field", "Field", "errorStack", "plainRecords", "outerArgs", "innerArgs", "ds", "innerBody", "defaultValue", "hasDefault", "stackField", "outerBody", "Record", "self", "o", "field2", "args", "rFields", "wFields", "wFieldsMap", "matches", "fieldResolver", "getAliases", "lazyIndex", "uname", "fields", "order", "fieldType", "fieldSchema", "fieldOrder", "fieldAliases", "fieldDoc", "LogicalType", "_fromValue", "obj1", "obj2", "isVisited", "msg", "readerType", "lazy", "aliases", "reader", "writer", "strict", "alias", "unqualified", "typeNames", "superIndex", "superType", "typeSymbols", "allTypes", "fieldTypes", "fieldDefaults", "isValidRecord", "fieldDefault", "fieldName", "fieldType2", "fieldDefault2", "unionTypes", "require_containers", "stream", "__import_STREAM", "zlib", "__import_ZLIB", "OPTS", "LONG_TYPE", "MAP_BYTES_TYPE", "HEADER_TYPE", "BLOCK_TYPE", "MAGIC_BYTES", "RawDecoder", "noDecode", "createReader", "chunk", "encoding", "BlockDecoder", "header", "codecs", "nBlocks", "block", "tryReadBlock", "chunkCb", "count", "cause", "BlockInfo", "BlockData", "RawEncoder", "copyBuffer", "BlockEncoder", "codec", "meta", "Header", "flushing", "raw", "compressed", "writerType", "skipper", "require_services", "events", "__import_EVENTS", "BOOLEAN_TYPE", "STRING_TYPE", "HANDSHAKE_REQUEST_TYPE", "HANDSHAKE_RESPONSE_TYPE", "PREFIX_LENGTH", "PING_MESSAGE", "Message", "reqType", "errType", "resType", "oneWay", "doc", "recordName", "reqSchema", "msgDoc", "errSchema", "Service", "messages", "types2", "ptcl", "server", "Client", "Server", "clientSvc", "serverSvc", "createReaders", "msgs", "client", "pts", "transport", "channel", "forwardErrors", "req", "handler", "parent", "typeSchema", "msgNames", "discoverProtocol", "svc", "ptclStr", "hreq", "hres", "pending", "insertRemoteProtocols", "objectMode", "writableFactory", "encoder2", "FrameEncoder", "writable2", "readable2", "decoder2", "FrameDecoder", "err2", "StatelessClientChannel", "readable", "writable", "isStream", "decoder", "NettyDecoder", "encoder", "NettyEncoder", "StatefulClientChannel", "channels", "getExistingMessage", "wreq", "WrappedRequest", "getRemoteProtocols", "numChannels", "CallContext", "wres", "ctx", "done", "err3", "readableFactory", "StatelessServerChannel", "StatefulServerChannel", "channelId", "numArgs", "ClientChannel", "normalizedPrefix", "cache", "adapter", "Adapter", "Registry", "noWait", "isError", "timeout", "noSvc", "WrappedResponse", "onTransition", "onCompletion", "fns", "chainMiddleware", "onError", "wreq2", "wres2", "prev", "reqBuf", "serializationError", "id", "resBuf", "matchesPrefix", "emit", "retry", "readHead", "onEnd", "onFinish", "timer", "onPing", "onMessage", "ping", "payload", "ServerChannel", "serverMatch", "toRpcError", "defaultHandler", "resErr", "isStrict", "errStr", "hdrBuf", "onRequest", "onHandshake", "hdrs", "hdr", "hasError", "prefixLength", "isRemote", "isError2", "frameLength", "bufs", "intBuffer", "head", "rtype", "wtype", "ptcls", "isClient", "hs", "toError", "rpcCode", "details", "detailsStr", "strs", "scope", "prefix", "params", "cbs", "forward", "isDone", "backward", "require_files", "fs", "__import_FS", "__import_PATH", "createImportHook", "imports", "fpath", "kind", "createSyncImportHook", "require_specs", "files", "TYPE_REFS", "assembleProtocol", "importFile", "protocol", "schemas", "protocolNamespace", "fpath2", "cb2", "Reader", "fetchImports", "dpath", "importedProtocols", "next", "info", "imported", "mergeImport", "importPath", "read", "contents", "protocolSchema", "Tokenizer", "tk", "protocolJavadoc", "javadoc", "numImports", "message", "responseSchema", "token", "top", "ref", "silent", "implicitTags", "maybeMessage", "fname", "reason", "context", "isToken", "lineNum", "lineStart", "emitJavadoc", "isJavadoc", "extractJavadoc", "pat", "lines", "line", "require_lib", "containers", "services", "specs", "parse2", "schemaOrProtocol", "extractFileHeader", "decode", "fd", "isValid", "createFileDecoder", "createFileEncoder", "N", "K", "O", "v", "f", "W", "q", "w", "X", "E", "Z", "V", "J", "m", "R", "P", "M", "u", "ee", "te", "se", "re", "L", "$", "j", "k", "U", "B", "F", "G", "z", "Q", "ne", "oe", "p", "C", "y", "x", "e", "r", "I", "A", "_", "g", "H", "T", "S", "Y", "b", "D", "import_avsc", "lowstorage_ERROR_CODES", "lowstorageError", "code", "SchemaValidationError", "DocumentValidationError", "S3OperationError", "operation", "matchesQuery", "document", "query", "generateUUID", "randomUUID", "ensureIdFieldInSchema", "idField", "MODULE_NAME", "DEFAULT_DELIMITER", "PROJECT_DIR_PREFIX", "COL_SUFFIX", "CHUNG_1MB", "CHUNG_5MB", "EMPTY_DATA", "errorValidationFn", "errorCode", "_hasColName", "colName", "lowstorage", "options", "requiredFields", "error", "exists", "listed", "entry", "wrapperType", "exists2", "autoCreate", "colPath", "colSchema", "Collection", "_Collection", "s3", "dirPrefix", "safeWrite", "chunkSize", "etag", "offset", "bufferArr", "repeat", "nextDataResponse", "nextDataBody", "bufferedData", "dataBuffer", "currentETag", "resp", "newETag", "schemaWithId", "avroType", "update", "updatedCount", "updatedDoc", "docIndex", "initialLength", "newData", "newColName", "newSchema", "createNew"] + "sourcesContent": ["import __import_BUFFER from \"buffer\";\nimport __import_CRYPTO from \"crypto\";\nimport __import_UTIL from \"util\";\nimport __import_STREAM from \"stream\";\nimport __import_ZLIB from \"zlib\";\nimport __import_EVENTS from \"events\";\nimport __import_FS from \"fs\";\nimport __import_PATH from \"path\";\n\nvar __create = Object.create;\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __getProtoOf = Object.getPrototypeOf;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __require = /* @__PURE__ */ ((x2) => typeof require !== \"undefined\" ? require : typeof Proxy !== \"undefined\" ? new Proxy(x2, {\n get: (a, b2) => (typeof require !== \"undefined\" ? require : a)[b2]\n}) : x2)(function(x2) {\n if (typeof require !== \"undefined\") return require.apply(this, arguments);\n throw Error('Dynamic require of \"' + x2 + '\" is not supported');\n});\nvar __commonJS = (cb, mod) => function __require2() {\n return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(\n // If the importer is in node compatibility mode or this is not an ESM\n // file that has been converted to a CommonJS file using a Babel-\n // compatible transform (i.e. \"__esModule\" has not been set), then set\n // \"default\" to the CommonJS \"module.exports\" for node compatibility.\n isNodeMode || !mod || !mod.__esModule ? __defProp(target, \"default\", { value: mod, enumerable: true }) : target,\n mod\n));\n\n// node_modules/avsc/lib/utils.js\nvar require_utils = __commonJS({\n \"node_modules/avsc/lib/utils.js\"(exports, module) {\n \"use strict\";\n var buffer = __import_BUFFER;\n var crypto2 = __import_CRYPTO;\n var util = __import_UTIL;\n var Buffer2 = buffer.Buffer;\n var POOL = new BufferPool(4096);\n var NAME_PATTERN = /^[A-Za-z_][A-Za-z0-9_]*$/;\n var f2 = util.format;\n function newBuffer(size) {\n if (typeof Buffer2.alloc == \"function\") {\n return Buffer2.alloc(size);\n } else {\n return new Buffer2(size);\n }\n }\n function bufferFrom(data, enc) {\n if (typeof Buffer2.from == \"function\") {\n return Buffer2.from(data, enc);\n } else {\n return new Buffer2(data, enc);\n }\n }\n function capitalize(s) {\n return s.charAt(0).toUpperCase() + s.slice(1);\n }\n function compare(n1, n2) {\n return n1 === n2 ? 0 : n1 < n2 ? -1 : 1;\n }\n function getOption(opts, key, def) {\n var value = opts[key];\n return value === void 0 ? def : value;\n }\n function getHash(str, algorithm) {\n algorithm = algorithm || \"md5\";\n var hash = crypto2.createHash(algorithm);\n hash.end(str);\n return hash.read();\n }\n function singleIndexOf(arr, v2) {\n var pos = -1;\n var i, l;\n if (!arr) {\n return -1;\n }\n for (i = 0, l = arr.length; i < l; i++) {\n if (arr[i] === v2) {\n if (pos >= 0) {\n return -2;\n }\n pos = i;\n }\n }\n return pos;\n }\n function toMap(arr, fn) {\n var obj = {};\n var i, elem;\n for (i = 0; i < arr.length; i++) {\n elem = arr[i];\n obj[fn(elem)] = elem;\n }\n return obj;\n }\n function objectValues(obj) {\n return Object.keys(obj).map(function(key) {\n return obj[key];\n });\n }\n function hasDuplicates(arr, fn) {\n var obj = /* @__PURE__ */ Object.create(null);\n var i, l, elem;\n for (i = 0, l = arr.length; i < l; i++) {\n elem = arr[i];\n if (fn) {\n elem = fn(elem);\n }\n if (obj[elem]) {\n return true;\n }\n obj[elem] = true;\n }\n return false;\n }\n function copyOwnProperties(src, dst, overwrite) {\n var names = Object.getOwnPropertyNames(src);\n var i, l, name;\n for (i = 0, l = names.length; i < l; i++) {\n name = names[i];\n if (!dst.hasOwnProperty(name) || overwrite) {\n var descriptor = Object.getOwnPropertyDescriptor(src, name);\n Object.defineProperty(dst, name, descriptor);\n }\n }\n return dst;\n }\n function isValidName(str) {\n return NAME_PATTERN.test(str);\n }\n function qualify(name, namespace) {\n if (~name.indexOf(\".\")) {\n name = name.replace(/^\\./, \"\");\n } else if (namespace) {\n name = namespace + \".\" + name;\n }\n name.split(\".\").forEach(function(part) {\n if (!isValidName(part)) {\n throw new Error(f2(\"invalid name: %j\", name));\n }\n });\n return name;\n }\n function unqualify(name) {\n var parts = name.split(\".\");\n return parts[parts.length - 1];\n }\n function impliedNamespace(name) {\n var match = /^(.*)\\.[^.]+$/.exec(name);\n return match ? match[1] : void 0;\n }\n function jsonEnd(str, pos) {\n pos = pos | 0;\n var c = str.charAt(pos++);\n if (/[\\d-]/.test(c)) {\n while (/[eE\\d.+-]/.test(str.charAt(pos))) {\n pos++;\n }\n return pos;\n } else if (/true|null/.test(str.slice(pos - 1, pos + 3))) {\n return pos + 3;\n } else if (/false/.test(str.slice(pos - 1, pos + 4))) {\n return pos + 4;\n }\n var depth = 0;\n var literal = false;\n do {\n switch (c) {\n case \"{\":\n case \"[\":\n if (!literal) {\n depth++;\n }\n break;\n case \"}\":\n case \"]\":\n if (!literal && !--depth) {\n return pos;\n }\n break;\n case '\"':\n literal = !literal;\n if (!depth && !literal) {\n return pos;\n }\n break;\n case \"\\\\\":\n pos++;\n }\n } while (c = str.charAt(pos++));\n return -1;\n }\n function abstractFunction() {\n throw new Error(\"abstract\");\n }\n function addDeprecatedGetters(obj, props) {\n var proto = obj.prototype;\n var i, l, prop, getter;\n for (i = 0, l = props.length; i < l; i++) {\n prop = props[i];\n getter = \"get\" + capitalize(prop);\n proto[getter] = util.deprecate(\n createGetter(prop),\n \"use `.\" + prop + \"` instead of `.\" + getter + \"()`\"\n );\n }\n function createGetter(prop2) {\n return function() {\n var delegate = this[prop2];\n return typeof delegate == \"function\" ? delegate.apply(this, arguments) : delegate;\n };\n }\n }\n function BufferPool(len) {\n this._len = len | 0;\n this._pos = 0;\n this._slab = newBuffer(this._len);\n }\n BufferPool.prototype.alloc = function(len) {\n if (len < 0) {\n throw new Error(\"negative length\");\n }\n var maxLen = this._len;\n if (len > maxLen) {\n return newBuffer(len);\n }\n if (this._pos + len > maxLen) {\n this._slab = newBuffer(maxLen);\n this._pos = 0;\n }\n return this._slab.slice(this._pos, this._pos += len);\n };\n function Lcg(seed) {\n var a = 1103515245;\n var c = 12345;\n var m2 = Math.pow(2, 31);\n var state = Math.floor(seed || Math.random() * (m2 - 1));\n this._max = m2;\n this._nextInt = function() {\n return state = (a * state + c) % m2;\n };\n }\n Lcg.prototype.nextBoolean = function() {\n return !!(this._nextInt() % 2);\n };\n Lcg.prototype.nextInt = function(start, end) {\n if (end === void 0) {\n end = start;\n start = 0;\n }\n end = end === void 0 ? this._max : end;\n return start + Math.floor(this.nextFloat() * (end - start));\n };\n Lcg.prototype.nextFloat = function(start, end) {\n if (end === void 0) {\n end = start;\n start = 0;\n }\n end = end === void 0 ? 1 : end;\n return start + (end - start) * this._nextInt() / this._max;\n };\n Lcg.prototype.nextString = function(len, flags) {\n len |= 0;\n flags = flags || \"aA\";\n var mask = \"\";\n if (flags.indexOf(\"a\") > -1) {\n mask += \"abcdefghijklmnopqrstuvwxyz\";\n }\n if (flags.indexOf(\"A\") > -1) {\n mask += \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\";\n }\n if (flags.indexOf(\"#\") > -1) {\n mask += \"0123456789\";\n }\n if (flags.indexOf(\"!\") > -1) {\n mask += \"~`!@#$%^&*()_+-={}[]:\\\";'<>?,./|\\\\\";\n }\n var result = [];\n for (var i = 0; i < len; i++) {\n result.push(this.choice(mask));\n }\n return result.join(\"\");\n };\n Lcg.prototype.nextBuffer = function(len) {\n var arr = [];\n var i;\n for (i = 0; i < len; i++) {\n arr.push(this.nextInt(256));\n }\n return bufferFrom(arr);\n };\n Lcg.prototype.choice = function(arr) {\n var len = arr.length;\n if (!len) {\n throw new Error(\"choosing from empty array\");\n }\n return arr[this.nextInt(len)];\n };\n function OrderedQueue() {\n this._index = 0;\n this._items = [];\n }\n OrderedQueue.prototype.push = function(item) {\n var items = this._items;\n var i = items.length | 0;\n var j2;\n items.push(item);\n while (i > 0 && items[i].index < items[j2 = i - 1 >> 1].index) {\n item = items[i];\n items[i] = items[j2];\n items[j2] = item;\n i = j2;\n }\n };\n OrderedQueue.prototype.pop = function() {\n var items = this._items;\n var len = items.length - 1 | 0;\n var first = items[0];\n if (!first || first.index > this._index) {\n return null;\n }\n this._index++;\n if (!len) {\n items.pop();\n return first;\n }\n items[0] = items.pop();\n var mid = len >> 1;\n var i = 0;\n var i1, i2, j2, item, c, c1, c2;\n while (i < mid) {\n item = items[i];\n i1 = (i << 1) + 1;\n i2 = i + 1 << 1;\n c1 = items[i1];\n c2 = items[i2];\n if (!c2 || c1.index <= c2.index) {\n c = c1;\n j2 = i1;\n } else {\n c = c2;\n j2 = i2;\n }\n if (c.index >= item.index) {\n break;\n }\n items[j2] = item;\n items[i] = c;\n i = j2;\n }\n return first;\n };\n function Tap(buf, pos) {\n this.buf = buf;\n this.pos = pos | 0;\n if (this.pos < 0) {\n throw new Error(\"negative offset\");\n }\n }\n Tap.prototype.isValid = function() {\n return this.pos <= this.buf.length;\n };\n Tap.prototype._invalidate = function() {\n this.pos = this.buf.length + 1;\n };\n Tap.prototype.readBoolean = function() {\n return !!this.buf[this.pos++];\n };\n Tap.prototype.skipBoolean = function() {\n this.pos++;\n };\n Tap.prototype.writeBoolean = function(b2) {\n this.buf[this.pos++] = !!b2;\n };\n Tap.prototype.readInt = Tap.prototype.readLong = function() {\n var n = 0;\n var k2 = 0;\n var buf = this.buf;\n var b2, h, f3, fk;\n do {\n b2 = buf[this.pos++];\n h = b2 & 128;\n n |= (b2 & 127) << k2;\n k2 += 7;\n } while (h && k2 < 28);\n if (h) {\n f3 = n;\n fk = 268435456;\n do {\n b2 = buf[this.pos++];\n f3 += (b2 & 127) * fk;\n fk *= 128;\n } while (b2 & 128);\n return (f3 % 2 ? -(f3 + 1) : f3) / 2;\n }\n return n >> 1 ^ -(n & 1);\n };\n Tap.prototype.skipInt = Tap.prototype.skipLong = function() {\n var buf = this.buf;\n while (buf[this.pos++] & 128) {\n }\n };\n Tap.prototype.writeInt = Tap.prototype.writeLong = function(n) {\n var buf = this.buf;\n var f3, m2;\n if (n >= -1073741824 && n < 1073741824) {\n m2 = n >= 0 ? n << 1 : ~n << 1 | 1;\n do {\n buf[this.pos] = m2 & 127;\n m2 >>= 7;\n } while (m2 && (buf[this.pos++] |= 128));\n } else {\n f3 = n >= 0 ? n * 2 : -n * 2 - 1;\n do {\n buf[this.pos] = f3 & 127;\n f3 /= 128;\n } while (f3 >= 1 && (buf[this.pos++] |= 128));\n }\n this.pos++;\n };\n Tap.prototype.readFloat = function() {\n var buf = this.buf;\n var pos = this.pos;\n this.pos += 4;\n if (this.pos > buf.length) {\n return 0;\n }\n return this.buf.readFloatLE(pos);\n };\n Tap.prototype.skipFloat = function() {\n this.pos += 4;\n };\n Tap.prototype.writeFloat = function(f3) {\n var buf = this.buf;\n var pos = this.pos;\n this.pos += 4;\n if (this.pos > buf.length) {\n return;\n }\n return this.buf.writeFloatLE(f3, pos);\n };\n Tap.prototype.readDouble = function() {\n var buf = this.buf;\n var pos = this.pos;\n this.pos += 8;\n if (this.pos > buf.length) {\n return 0;\n }\n return this.buf.readDoubleLE(pos);\n };\n Tap.prototype.skipDouble = function() {\n this.pos += 8;\n };\n Tap.prototype.writeDouble = function(d) {\n var buf = this.buf;\n var pos = this.pos;\n this.pos += 8;\n if (this.pos > buf.length) {\n return;\n }\n return this.buf.writeDoubleLE(d, pos);\n };\n Tap.prototype.readFixed = function(len) {\n var pos = this.pos;\n this.pos += len;\n if (this.pos > this.buf.length) {\n return;\n }\n var fixed = POOL.alloc(len);\n this.buf.copy(fixed, 0, pos, pos + len);\n return fixed;\n };\n Tap.prototype.skipFixed = function(len) {\n this.pos += len;\n };\n Tap.prototype.writeFixed = function(buf, len) {\n len = len || buf.length;\n var pos = this.pos;\n this.pos += len;\n if (this.pos > this.buf.length) {\n return;\n }\n buf.copy(this.buf, pos, 0, len);\n };\n Tap.prototype.readBytes = function() {\n var len = this.readLong();\n if (len < 0) {\n this._invalidate();\n return;\n }\n return this.readFixed(len);\n };\n Tap.prototype.skipBytes = function() {\n var len = this.readLong();\n if (len < 0) {\n this._invalidate();\n return;\n }\n this.pos += len;\n };\n Tap.prototype.writeBytes = function(buf) {\n var len = buf.length;\n this.writeLong(len);\n this.writeFixed(buf, len);\n };\n if (typeof Buffer2.prototype.utf8Slice == \"function\") {\n Tap.prototype.readString = function() {\n var len = this.readLong();\n if (len < 0) {\n this._invalidate();\n return \"\";\n }\n var pos = this.pos;\n var buf = this.buf;\n this.pos += len;\n if (this.pos > buf.length) {\n return;\n }\n return this.buf.utf8Slice(pos, pos + len);\n };\n } else {\n Tap.prototype.readString = function() {\n var len = this.readLong();\n if (len < 0) {\n this._invalidate();\n return \"\";\n }\n var pos = this.pos;\n var buf = this.buf;\n this.pos += len;\n if (this.pos > buf.length) {\n return;\n }\n return this.buf.slice(pos, pos + len).toString();\n };\n }\n Tap.prototype.skipString = function() {\n var len = this.readLong();\n if (len < 0) {\n this._invalidate();\n return;\n }\n this.pos += len;\n };\n Tap.prototype.writeString = function(s) {\n var len = Buffer2.byteLength(s);\n var buf = this.buf;\n this.writeLong(len);\n var pos = this.pos;\n this.pos += len;\n if (this.pos > buf.length) {\n return;\n }\n if (len > 64 && typeof Buffer2.prototype.utf8Write == \"function\") {\n buf.utf8Write(s, pos, len);\n } else {\n var i, l, c1, c2;\n for (i = 0, l = len; i < l; i++) {\n c1 = s.charCodeAt(i);\n if (c1 < 128) {\n buf[pos++] = c1;\n } else if (c1 < 2048) {\n buf[pos++] = c1 >> 6 | 192;\n buf[pos++] = c1 & 63 | 128;\n } else if ((c1 & 64512) === 55296 && ((c2 = s.charCodeAt(i + 1)) & 64512) === 56320) {\n c1 = 65536 + ((c1 & 1023) << 10) + (c2 & 1023);\n i++;\n buf[pos++] = c1 >> 18 | 240;\n buf[pos++] = c1 >> 12 & 63 | 128;\n buf[pos++] = c1 >> 6 & 63 | 128;\n buf[pos++] = c1 & 63 | 128;\n } else {\n buf[pos++] = c1 >> 12 | 224;\n buf[pos++] = c1 >> 6 & 63 | 128;\n buf[pos++] = c1 & 63 | 128;\n }\n }\n }\n };\n if (typeof Buffer2.prototype.latin1Write == \"function\") {\n Tap.prototype.writeBinary = function(str, len) {\n var pos = this.pos;\n this.pos += len;\n if (this.pos > this.buf.length) {\n return;\n }\n this.buf.latin1Write(str, pos, len);\n };\n } else if (typeof Buffer2.prototype.binaryWrite == \"function\") {\n Tap.prototype.writeBinary = function(str, len) {\n var pos = this.pos;\n this.pos += len;\n if (this.pos > this.buf.length) {\n return;\n }\n this.buf.binaryWrite(str, pos, len);\n };\n } else {\n Tap.prototype.writeBinary = function(s, len) {\n var pos = this.pos;\n this.pos += len;\n if (this.pos > this.buf.length) {\n return;\n }\n this.buf.write(s, pos, len, \"binary\");\n };\n }\n Tap.prototype.matchBoolean = function(tap) {\n return this.buf[this.pos++] - tap.buf[tap.pos++];\n };\n Tap.prototype.matchInt = Tap.prototype.matchLong = function(tap) {\n var n1 = this.readLong();\n var n2 = tap.readLong();\n return n1 === n2 ? 0 : n1 < n2 ? -1 : 1;\n };\n Tap.prototype.matchFloat = function(tap) {\n var n1 = this.readFloat();\n var n2 = tap.readFloat();\n return n1 === n2 ? 0 : n1 < n2 ? -1 : 1;\n };\n Tap.prototype.matchDouble = function(tap) {\n var n1 = this.readDouble();\n var n2 = tap.readDouble();\n return n1 === n2 ? 0 : n1 < n2 ? -1 : 1;\n };\n Tap.prototype.matchFixed = function(tap, len) {\n return this.readFixed(len).compare(tap.readFixed(len));\n };\n Tap.prototype.matchBytes = Tap.prototype.matchString = function(tap) {\n var l1 = this.readLong();\n var p1 = this.pos;\n this.pos += l1;\n var l2 = tap.readLong();\n var p2 = tap.pos;\n tap.pos += l2;\n var b1 = this.buf.slice(p1, this.pos);\n var b2 = tap.buf.slice(p2, tap.pos);\n return b1.compare(b2);\n };\n Tap.prototype.unpackLongBytes = function() {\n var res = newBuffer(8);\n var n = 0;\n var i = 0;\n var j2 = 6;\n var buf = this.buf;\n var b2, neg;\n b2 = buf[this.pos++];\n neg = b2 & 1;\n res.fill(0);\n n |= (b2 & 127) >> 1;\n while (b2 & 128) {\n b2 = buf[this.pos++];\n n |= (b2 & 127) << j2;\n j2 += 7;\n if (j2 >= 8) {\n j2 -= 8;\n res[i++] = n;\n n >>= 8;\n }\n }\n res[i] = n;\n if (neg) {\n invert(res, 8);\n }\n return res;\n };\n Tap.prototype.packLongBytes = function(buf) {\n var neg = (buf[7] & 128) >> 7;\n var res = this.buf;\n var j2 = 1;\n var k2 = 0;\n var m2 = 3;\n var n;\n if (neg) {\n invert(buf, 8);\n n = 1;\n } else {\n n = 0;\n }\n var parts = [\n buf.readUIntLE(0, 3),\n buf.readUIntLE(3, 3),\n buf.readUIntLE(6, 2)\n ];\n while (m2 && !parts[--m2]) {\n }\n while (k2 < m2) {\n n |= parts[k2++] << j2;\n j2 += 24;\n while (j2 > 7) {\n res[this.pos++] = n & 127 | 128;\n n >>= 7;\n j2 -= 7;\n }\n }\n n |= parts[m2] << j2;\n do {\n res[this.pos] = n & 127;\n n >>= 7;\n } while (n && (res[this.pos++] |= 128));\n this.pos++;\n if (neg) {\n invert(buf, 8);\n }\n };\n function invert(buf, len) {\n while (len--) {\n buf[len] = ~buf[len];\n }\n }\n module.exports = {\n abstractFunction,\n addDeprecatedGetters,\n bufferFrom,\n capitalize,\n copyOwnProperties,\n getHash,\n compare,\n getOption,\n impliedNamespace,\n isValidName,\n jsonEnd,\n newBuffer,\n objectValues,\n qualify,\n toMap,\n singleIndexOf,\n hasDuplicates,\n unqualify,\n BufferPool,\n Lcg,\n OrderedQueue,\n Tap\n };\n }\n});\n\n// node_modules/avsc/lib/types.js\nvar require_types = __commonJS({\n \"node_modules/avsc/lib/types.js\"(exports, module) {\n \"use strict\";\n var utils = require_utils();\n var buffer = __import_BUFFER;\n var util = __import_UTIL;\n var Buffer2 = buffer.Buffer;\n var SlowBuffer = buffer.SlowBuffer;\n var Tap = utils.Tap;\n var debug = util.debuglog(\"avsc:types\");\n var f2 = util.format;\n var TYPES = {\n \"array\": ArrayType,\n \"boolean\": BooleanType,\n \"bytes\": BytesType,\n \"double\": DoubleType,\n \"enum\": EnumType,\n \"error\": RecordType,\n \"fixed\": FixedType,\n \"float\": FloatType,\n \"int\": IntType,\n \"long\": LongType,\n \"map\": MapType,\n \"null\": NullType,\n \"record\": RecordType,\n \"string\": StringType\n };\n var RANDOM = new utils.Lcg();\n var TAP = new Tap(new SlowBuffer(1024));\n var LOGICAL_TYPE = null;\n var UNDERLYING_TYPES = [];\n function Type(schema, opts) {\n var type;\n if (LOGICAL_TYPE) {\n type = LOGICAL_TYPE;\n UNDERLYING_TYPES.push([LOGICAL_TYPE, this]);\n LOGICAL_TYPE = null;\n } else {\n type = this;\n }\n this._hash = new Hash();\n this.name = void 0;\n this.aliases = void 0;\n this.doc = schema && schema.doc ? \"\" + schema.doc : void 0;\n if (schema) {\n var name = schema.name;\n var namespace = schema.namespace === void 0 ? opts && opts.namespace : schema.namespace;\n if (name !== void 0) {\n name = maybeQualify(name, namespace);\n if (isPrimitive(name)) {\n throw new Error(f2(\"cannot rename primitive type: %j\", name));\n }\n var registry = opts && opts.registry;\n if (registry) {\n if (registry[name] !== void 0) {\n throw new Error(f2(\"duplicate type name: %s\", name));\n }\n registry[name] = type;\n }\n } else if (opts && opts.noAnonymousTypes) {\n throw new Error(f2(\"missing name property in schema: %j\", schema));\n }\n this.name = name;\n this.aliases = schema.aliases ? schema.aliases.map(function(s) {\n return maybeQualify(s, namespace);\n }) : [];\n }\n }\n Type.forSchema = function(schema, opts) {\n opts = opts || {};\n opts.registry = opts.registry || {};\n var UnionType2 = function(wrapUnions) {\n if (wrapUnions === true) {\n wrapUnions = \"always\";\n } else if (wrapUnions === false) {\n wrapUnions = \"never\";\n } else if (wrapUnions === void 0) {\n wrapUnions = \"auto\";\n } else if (typeof wrapUnions == \"string\") {\n wrapUnions = wrapUnions.toLowerCase();\n }\n switch (wrapUnions) {\n case \"always\":\n return WrappedUnionType;\n case \"never\":\n return UnwrappedUnionType;\n case \"auto\":\n return void 0;\n default:\n throw new Error(f2(\"invalid wrap unions option: %j\", wrapUnions));\n }\n }(opts.wrapUnions);\n if (schema === null) {\n throw new Error('invalid type: null (did you mean \"null\"?)');\n }\n if (Type.isType(schema)) {\n return schema;\n }\n var type;\n if (opts.typeHook && (type = opts.typeHook(schema, opts))) {\n if (!Type.isType(type)) {\n throw new Error(f2(\"invalid typehook return value: %j\", type));\n }\n return type;\n }\n if (typeof schema == \"string\") {\n schema = maybeQualify(schema, opts.namespace);\n type = opts.registry[schema];\n if (type) {\n return type;\n }\n if (isPrimitive(schema)) {\n return opts.registry[schema] = Type.forSchema({ type: schema }, opts);\n }\n throw new Error(f2(\"undefined type name: %s\", schema));\n }\n if (schema.logicalType && opts.logicalTypes && !LOGICAL_TYPE) {\n var DerivedType = opts.logicalTypes[schema.logicalType];\n if (DerivedType) {\n var namespace = opts.namespace;\n var registry = {};\n Object.keys(opts.registry).forEach(function(key) {\n registry[key] = opts.registry[key];\n });\n try {\n debug(\"instantiating logical type for %s\", schema.logicalType);\n return new DerivedType(schema, opts);\n } catch (err) {\n debug(\"failed to instantiate logical type for %s\", schema.logicalType);\n if (opts.assertLogicalTypes) {\n throw err;\n }\n LOGICAL_TYPE = null;\n opts.namespace = namespace;\n opts.registry = registry;\n }\n }\n }\n if (Array.isArray(schema)) {\n var logicalType = LOGICAL_TYPE;\n LOGICAL_TYPE = null;\n var types = schema.map(function(obj) {\n return Type.forSchema(obj, opts);\n });\n if (!UnionType2) {\n UnionType2 = isAmbiguous(types) ? WrappedUnionType : UnwrappedUnionType;\n }\n LOGICAL_TYPE = logicalType;\n type = new UnionType2(types, opts);\n } else {\n type = function(typeName) {\n var Type2 = TYPES[typeName];\n if (Type2 === void 0) {\n throw new Error(f2(\"unknown type: %j\", typeName));\n }\n return new Type2(schema, opts);\n }(schema.type);\n }\n return type;\n };\n Type.forValue = function(val, opts) {\n opts = opts || {};\n opts.emptyArrayType = opts.emptyArrayType || Type.forSchema({\n type: \"array\",\n items: \"null\"\n });\n if (opts.valueHook) {\n var type = opts.valueHook(val, opts);\n if (type !== void 0) {\n if (!Type.isType(type)) {\n throw new Error(f2(\"invalid value hook return value: %j\", type));\n }\n return type;\n }\n }\n switch (typeof val) {\n case \"string\":\n return Type.forSchema(\"string\", opts);\n case \"boolean\":\n return Type.forSchema(\"boolean\", opts);\n case \"number\":\n if ((val | 0) === val) {\n return Type.forSchema(\"int\", opts);\n } else if (Math.abs(val) < 9007199254740991) {\n return Type.forSchema(\"float\", opts);\n }\n return Type.forSchema(\"double\", opts);\n case \"object\":\n if (val === null) {\n return Type.forSchema(\"null\", opts);\n } else if (Array.isArray(val)) {\n if (!val.length) {\n return opts.emptyArrayType;\n }\n return Type.forSchema({\n type: \"array\",\n items: Type.forTypes(\n val.map(function(v2) {\n return Type.forValue(v2, opts);\n }),\n opts\n )\n }, opts);\n } else if (Buffer2.isBuffer(val)) {\n return Type.forSchema(\"bytes\", opts);\n }\n var fieldNames = Object.keys(val);\n if (fieldNames.some(function(s) {\n return !utils.isValidName(s);\n })) {\n return Type.forSchema({\n type: \"map\",\n values: Type.forTypes(fieldNames.map(function(s) {\n return Type.forValue(val[s], opts);\n }), opts)\n }, opts);\n }\n return Type.forSchema({\n type: \"record\",\n fields: fieldNames.map(function(s) {\n return { name: s, type: Type.forValue(val[s], opts) };\n })\n }, opts);\n default:\n throw new Error(f2(\"cannot infer type from: %j\", val));\n }\n };\n Type.forTypes = function(types, opts) {\n if (!types.length) {\n throw new Error(\"no types to combine\");\n }\n if (types.length === 1) {\n return types[0];\n }\n opts = opts || {};\n var expanded = [];\n var numWrappedUnions = 0;\n var isValidWrappedUnion = true;\n types.forEach(function(type) {\n switch (type.typeName) {\n case \"union:unwrapped\":\n isValidWrappedUnion = false;\n expanded = expanded.concat(type.types);\n break;\n case \"union:wrapped\":\n numWrappedUnions++;\n expanded = expanded.concat(type.types);\n break;\n case \"null\":\n expanded.push(type);\n break;\n default:\n isValidWrappedUnion = false;\n expanded.push(type);\n }\n });\n if (numWrappedUnions) {\n if (!isValidWrappedUnion) {\n throw new Error(\"cannot combine wrapped union\");\n }\n var branchTypes = {};\n expanded.forEach(function(type) {\n var name = type.branchName;\n var branchType = branchTypes[name];\n if (!branchType) {\n branchTypes[name] = type;\n } else if (!type.equals(branchType)) {\n throw new Error(\"inconsistent branch type\");\n }\n });\n var wrapUnions = opts.wrapUnions;\n var unionType;\n opts.wrapUnions = true;\n try {\n unionType = Type.forSchema(Object.keys(branchTypes).map(function(name) {\n return branchTypes[name];\n }), opts);\n } catch (err) {\n opts.wrapUnions = wrapUnions;\n throw err;\n }\n opts.wrapUnions = wrapUnions;\n return unionType;\n }\n var bucketized = {};\n expanded.forEach(function(type) {\n var bucket = getTypeBucket(type);\n var bucketTypes = bucketized[bucket];\n if (!bucketTypes) {\n bucketized[bucket] = bucketTypes = [];\n }\n bucketTypes.push(type);\n });\n var buckets = Object.keys(bucketized);\n var augmented = buckets.map(function(bucket) {\n var bucketTypes = bucketized[bucket];\n if (bucketTypes.length === 1) {\n return bucketTypes[0];\n } else {\n switch (bucket) {\n case \"null\":\n case \"boolean\":\n return bucketTypes[0];\n case \"number\":\n return combineNumbers(bucketTypes);\n case \"string\":\n return combineStrings(bucketTypes, opts);\n case \"buffer\":\n return combineBuffers(bucketTypes, opts);\n case \"array\":\n bucketTypes = bucketTypes.filter(function(t) {\n return t !== opts.emptyArrayType;\n });\n if (!bucketTypes.length) {\n return opts.emptyArrayType;\n }\n return Type.forSchema({\n type: \"array\",\n items: Type.forTypes(bucketTypes.map(function(t) {\n return t.itemsType;\n }), opts)\n }, opts);\n default:\n return combineObjects(bucketTypes, opts);\n }\n }\n });\n if (augmented.length === 1) {\n return augmented[0];\n } else {\n return Type.forSchema(augmented, opts);\n }\n };\n Type.isType = function() {\n var l = arguments.length;\n if (!l) {\n return false;\n }\n var any = arguments[0];\n if (!any || typeof any._update != \"function\" || typeof any.fingerprint != \"function\") {\n return false;\n }\n if (l === 1) {\n return true;\n }\n var typeName = any.typeName;\n var i;\n for (i = 1; i < l; i++) {\n if (typeName.indexOf(arguments[i]) === 0) {\n return true;\n }\n }\n return false;\n };\n Type.__reset = function(size) {\n debug(\"resetting type buffer to %d\", size);\n TAP.buf = new SlowBuffer(size);\n };\n Object.defineProperty(Type.prototype, \"branchName\", {\n enumerable: true,\n get: function() {\n var type = Type.isType(this, \"logical\") ? this.underlyingType : this;\n if (type.name) {\n return type.name;\n }\n if (Type.isType(type, \"abstract\")) {\n return type._concreteTypeName;\n }\n return Type.isType(type, \"union\") ? void 0 : type.typeName;\n }\n });\n Type.prototype.clone = function(val, opts) {\n if (opts) {\n opts = {\n coerce: !!opts.coerceBuffers | 0,\n // Coerce JSON to Buffer.\n fieldHook: opts.fieldHook,\n qualifyNames: !!opts.qualifyNames,\n skip: !!opts.skipMissingFields,\n wrap: !!opts.wrapUnions | 0\n // Wrap first match into union.\n };\n return this._copy(val, opts);\n } else {\n return this.fromBuffer(this.toBuffer(val));\n }\n };\n Type.prototype.compare = utils.abstractFunction;\n Type.prototype.compareBuffers = function(buf1, buf2) {\n return this._match(new Tap(buf1), new Tap(buf2));\n };\n Type.prototype.createResolver = function(type, opts) {\n if (!Type.isType(type)) {\n throw new Error(f2(\"not a type: %j\", type));\n }\n if (!Type.isType(this, \"union\", \"logical\") && Type.isType(type, \"logical\")) {\n return this.createResolver(type.underlyingType, opts);\n }\n opts = opts || {};\n opts.registry = opts.registry || {};\n var resolver, key;\n if (Type.isType(this, \"record\", \"error\") && Type.isType(type, \"record\", \"error\")) {\n key = this.name + \":\" + type.name;\n resolver = opts.registry[key];\n if (resolver) {\n return resolver;\n }\n }\n resolver = new Resolver(this);\n if (key) {\n opts.registry[key] = resolver;\n }\n if (Type.isType(type, \"union\")) {\n var resolvers = type.types.map(function(t) {\n return this.createResolver(t, opts);\n }, this);\n resolver._read = function(tap) {\n var index = tap.readLong();\n var resolver2 = resolvers[index];\n if (resolver2 === void 0) {\n throw new Error(f2(\"invalid union index: %s\", index));\n }\n return resolvers[index]._read(tap);\n };\n } else {\n this._update(resolver, type, opts);\n }\n if (!resolver._read) {\n throw new Error(f2(\"cannot read %s as %s\", type, this));\n }\n return Object.freeze(resolver);\n };\n Type.prototype.decode = function(buf, pos, resolver) {\n var tap = new Tap(buf, pos);\n var val = readValue(this, tap, resolver);\n if (!tap.isValid()) {\n return { value: void 0, offset: -1 };\n }\n return { value: val, offset: tap.pos };\n };\n Type.prototype.encode = function(val, buf, pos) {\n var tap = new Tap(buf, pos);\n this._write(tap, val);\n if (!tap.isValid()) {\n return buf.length - tap.pos;\n }\n return tap.pos;\n };\n Type.prototype.equals = function(type, opts) {\n var canon = (\n // Canonical equality.\n Type.isType(type) && this.fingerprint().equals(type.fingerprint())\n );\n if (!canon || !(opts && opts.strict)) {\n return canon;\n }\n return JSON.stringify(this.schema({ exportAttrs: true })) === JSON.stringify(type.schema({ exportAttrs: true }));\n };\n Type.prototype.fingerprint = function(algorithm) {\n if (!algorithm) {\n if (!this._hash.str) {\n var schemaStr = JSON.stringify(this.schema());\n this._hash.str = utils.getHash(schemaStr).toString(\"binary\");\n }\n return utils.bufferFrom(this._hash.str, \"binary\");\n } else {\n return utils.getHash(JSON.stringify(this.schema()), algorithm);\n }\n };\n Type.prototype.fromBuffer = function(buf, resolver, noCheck) {\n var tap = new Tap(buf);\n var val = readValue(this, tap, resolver, noCheck);\n if (!tap.isValid()) {\n throw new Error(\"truncated buffer\");\n }\n if (!noCheck && tap.pos < buf.length) {\n throw new Error(\"trailing data\");\n }\n return val;\n };\n Type.prototype.fromString = function(str) {\n return this._copy(JSON.parse(str), { coerce: 2 });\n };\n Type.prototype.inspect = function() {\n var typeName = this.typeName;\n var className = getClassName(typeName);\n if (isPrimitive(typeName)) {\n return f2(\"<%s>\", className);\n } else {\n var obj = this.schema({ exportAttrs: true, noDeref: true });\n if (typeof obj == \"object\" && !Type.isType(this, \"logical\")) {\n obj.type = void 0;\n }\n return f2(\"<%s %j>\", className, obj);\n }\n };\n Type.prototype.isValid = function(val, opts) {\n var flags = (opts && opts.noUndeclaredFields) | 0;\n var errorHook = opts && opts.errorHook;\n var hook, path;\n if (errorHook) {\n path = [];\n hook = function(any, type) {\n errorHook.call(this, path.slice(), any, type, val);\n };\n }\n return this._check(val, flags, hook, path);\n };\n Type.prototype.random = utils.abstractFunction;\n Type.prototype.schema = function(opts) {\n return this._attrs({\n exportAttrs: !!(opts && opts.exportAttrs),\n noDeref: !!(opts && opts.noDeref)\n });\n };\n Type.prototype.toBuffer = function(val) {\n TAP.pos = 0;\n this._write(TAP, val);\n var buf = utils.newBuffer(TAP.pos);\n if (TAP.isValid()) {\n TAP.buf.copy(buf, 0, 0, TAP.pos);\n } else {\n this._write(new Tap(buf), val);\n }\n return buf;\n };\n Type.prototype.toJSON = function() {\n return this.schema({ exportAttrs: true });\n };\n Type.prototype.toString = function(val) {\n if (val === void 0) {\n return JSON.stringify(this.schema({ noDeref: true }));\n }\n return JSON.stringify(this._copy(val, { coerce: 3 }));\n };\n Type.prototype.wrap = function(val) {\n var Branch = this._branchConstructor;\n return Branch === null ? null : new Branch(val);\n };\n Type.prototype._attrs = function(opts) {\n opts.derefed = opts.derefed || {};\n var name = this.name;\n if (name !== void 0) {\n if (opts.noDeref || opts.derefed[name]) {\n return name;\n }\n opts.derefed[name] = true;\n }\n var schema = {};\n if (this.name !== void 0) {\n schema.name = name;\n }\n schema.type = this.typeName;\n var derefedSchema = this._deref(schema, opts);\n if (derefedSchema !== void 0) {\n schema = derefedSchema;\n }\n if (opts.exportAttrs) {\n if (this.aliases && this.aliases.length) {\n schema.aliases = this.aliases;\n }\n if (this.doc !== void 0) {\n schema.doc = this.doc;\n }\n }\n return schema;\n };\n Type.prototype._createBranchConstructor = function() {\n var name = this.branchName;\n if (name === \"null\") {\n return null;\n }\n var attr = ~name.indexOf(\".\") ? \"this['\" + name + \"']\" : \"this.\" + name;\n var body = \"return function Branch$(val) { \" + attr + \" = val; };\";\n var Branch = new Function(body)();\n Branch.type = this;\n Branch.prototype.unwrap = new Function(\"return \" + attr + \";\");\n Branch.prototype.unwrapped = Branch.prototype.unwrap;\n return Branch;\n };\n Type.prototype._peek = function(tap) {\n var pos = tap.pos;\n var val = this._read(tap);\n tap.pos = pos;\n return val;\n };\n Type.prototype._check = utils.abstractFunction;\n Type.prototype._copy = utils.abstractFunction;\n Type.prototype._deref = utils.abstractFunction;\n Type.prototype._match = utils.abstractFunction;\n Type.prototype._read = utils.abstractFunction;\n Type.prototype._skip = utils.abstractFunction;\n Type.prototype._update = utils.abstractFunction;\n Type.prototype._write = utils.abstractFunction;\n Type.prototype.getAliases = function() {\n return this.aliases;\n };\n Type.prototype.getFingerprint = Type.prototype.fingerprint;\n Type.prototype.getName = function(asBranch) {\n return this.name || !asBranch ? this.name : this.branchName;\n };\n Type.prototype.getSchema = Type.prototype.schema;\n Type.prototype.getTypeName = function() {\n return this.typeName;\n };\n function PrimitiveType(noFreeze) {\n Type.call(this);\n this._branchConstructor = this._createBranchConstructor();\n if (!noFreeze) {\n Object.freeze(this);\n }\n }\n util.inherits(PrimitiveType, Type);\n PrimitiveType.prototype._update = function(resolver, type) {\n if (type.typeName === this.typeName) {\n resolver._read = this._read;\n }\n };\n PrimitiveType.prototype._copy = function(val) {\n this._check(val, void 0, throwInvalidError);\n return val;\n };\n PrimitiveType.prototype._deref = function() {\n return this.typeName;\n };\n PrimitiveType.prototype.compare = utils.compare;\n function NullType() {\n PrimitiveType.call(this);\n }\n util.inherits(NullType, PrimitiveType);\n NullType.prototype._check = function(val, flags, hook) {\n var b2 = val === null;\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n NullType.prototype._read = function() {\n return null;\n };\n NullType.prototype._skip = function() {\n };\n NullType.prototype._write = function(tap, val) {\n if (val !== null) {\n throwInvalidError(val, this);\n }\n };\n NullType.prototype._match = function() {\n return 0;\n };\n NullType.prototype.compare = NullType.prototype._match;\n NullType.prototype.typeName = \"null\";\n NullType.prototype.random = NullType.prototype._read;\n function BooleanType() {\n PrimitiveType.call(this);\n }\n util.inherits(BooleanType, PrimitiveType);\n BooleanType.prototype._check = function(val, flags, hook) {\n var b2 = typeof val == \"boolean\";\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n BooleanType.prototype._read = function(tap) {\n return tap.readBoolean();\n };\n BooleanType.prototype._skip = function(tap) {\n tap.skipBoolean();\n };\n BooleanType.prototype._write = function(tap, val) {\n if (typeof val != \"boolean\") {\n throwInvalidError(val, this);\n }\n tap.writeBoolean(val);\n };\n BooleanType.prototype._match = function(tap1, tap2) {\n return tap1.matchBoolean(tap2);\n };\n BooleanType.prototype.typeName = \"boolean\";\n BooleanType.prototype.random = function() {\n return RANDOM.nextBoolean();\n };\n function IntType() {\n PrimitiveType.call(this);\n }\n util.inherits(IntType, PrimitiveType);\n IntType.prototype._check = function(val, flags, hook) {\n var b2 = val === (val | 0);\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n IntType.prototype._read = function(tap) {\n return tap.readInt();\n };\n IntType.prototype._skip = function(tap) {\n tap.skipInt();\n };\n IntType.prototype._write = function(tap, val) {\n if (val !== (val | 0)) {\n throwInvalidError(val, this);\n }\n tap.writeInt(val);\n };\n IntType.prototype._match = function(tap1, tap2) {\n return tap1.matchInt(tap2);\n };\n IntType.prototype.typeName = \"int\";\n IntType.prototype.random = function() {\n return RANDOM.nextInt(1e3) | 0;\n };\n function LongType() {\n PrimitiveType.call(this);\n }\n util.inherits(LongType, PrimitiveType);\n LongType.prototype._check = function(val, flags, hook) {\n var b2 = typeof val == \"number\" && val % 1 === 0 && isSafeLong(val);\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n LongType.prototype._read = function(tap) {\n var n = tap.readLong();\n if (!isSafeLong(n)) {\n throw new Error(\"potential precision loss\");\n }\n return n;\n };\n LongType.prototype._skip = function(tap) {\n tap.skipLong();\n };\n LongType.prototype._write = function(tap, val) {\n if (typeof val != \"number\" || val % 1 || !isSafeLong(val)) {\n throwInvalidError(val, this);\n }\n tap.writeLong(val);\n };\n LongType.prototype._match = function(tap1, tap2) {\n return tap1.matchLong(tap2);\n };\n LongType.prototype._update = function(resolver, type) {\n switch (type.typeName) {\n case \"int\":\n resolver._read = type._read;\n break;\n case \"abstract:long\":\n case \"long\":\n resolver._read = this._read;\n }\n };\n LongType.prototype.typeName = \"long\";\n LongType.prototype.random = function() {\n return RANDOM.nextInt();\n };\n LongType.__with = function(methods, noUnpack) {\n methods = methods || {};\n var mapping = {\n toBuffer: \"_toBuffer\",\n fromBuffer: \"_fromBuffer\",\n fromJSON: \"_fromJSON\",\n toJSON: \"_toJSON\",\n isValid: \"_isValid\",\n compare: \"compare\"\n };\n var type = new AbstractLongType(noUnpack);\n Object.keys(mapping).forEach(function(name) {\n if (methods[name] === void 0) {\n throw new Error(f2(\"missing method implementation: %s\", name));\n }\n type[mapping[name]] = methods[name];\n });\n return Object.freeze(type);\n };\n function FloatType() {\n PrimitiveType.call(this);\n }\n util.inherits(FloatType, PrimitiveType);\n FloatType.prototype._check = function(val, flags, hook) {\n var b2 = typeof val == \"number\";\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n FloatType.prototype._read = function(tap) {\n return tap.readFloat();\n };\n FloatType.prototype._skip = function(tap) {\n tap.skipFloat();\n };\n FloatType.prototype._write = function(tap, val) {\n if (typeof val != \"number\") {\n throwInvalidError(val, this);\n }\n tap.writeFloat(val);\n };\n FloatType.prototype._match = function(tap1, tap2) {\n return tap1.matchFloat(tap2);\n };\n FloatType.prototype._update = function(resolver, type) {\n switch (type.typeName) {\n case \"float\":\n case \"int\":\n resolver._read = type._read;\n break;\n case \"abstract:long\":\n case \"long\":\n resolver._read = function(tap) {\n return tap.readLong();\n };\n }\n };\n FloatType.prototype.typeName = \"float\";\n FloatType.prototype.random = function() {\n return RANDOM.nextFloat(1e3);\n };\n function DoubleType() {\n PrimitiveType.call(this);\n }\n util.inherits(DoubleType, PrimitiveType);\n DoubleType.prototype._check = function(val, flags, hook) {\n var b2 = typeof val == \"number\";\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n DoubleType.prototype._read = function(tap) {\n return tap.readDouble();\n };\n DoubleType.prototype._skip = function(tap) {\n tap.skipDouble();\n };\n DoubleType.prototype._write = function(tap, val) {\n if (typeof val != \"number\") {\n throwInvalidError(val, this);\n }\n tap.writeDouble(val);\n };\n DoubleType.prototype._match = function(tap1, tap2) {\n return tap1.matchDouble(tap2);\n };\n DoubleType.prototype._update = function(resolver, type) {\n switch (type.typeName) {\n case \"double\":\n case \"float\":\n case \"int\":\n resolver._read = type._read;\n break;\n case \"abstract:long\":\n case \"long\":\n resolver._read = function(tap) {\n return tap.readLong();\n };\n }\n };\n DoubleType.prototype.typeName = \"double\";\n DoubleType.prototype.random = function() {\n return RANDOM.nextFloat();\n };\n function StringType() {\n PrimitiveType.call(this);\n }\n util.inherits(StringType, PrimitiveType);\n StringType.prototype._check = function(val, flags, hook) {\n var b2 = typeof val == \"string\";\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n StringType.prototype._read = function(tap) {\n return tap.readString();\n };\n StringType.prototype._skip = function(tap) {\n tap.skipString();\n };\n StringType.prototype._write = function(tap, val) {\n if (typeof val != \"string\") {\n throwInvalidError(val, this);\n }\n tap.writeString(val);\n };\n StringType.prototype._match = function(tap1, tap2) {\n return tap1.matchString(tap2);\n };\n StringType.prototype._update = function(resolver, type) {\n switch (type.typeName) {\n case \"bytes\":\n case \"string\":\n resolver._read = this._read;\n }\n };\n StringType.prototype.typeName = \"string\";\n StringType.prototype.random = function() {\n return RANDOM.nextString(RANDOM.nextInt(32));\n };\n function BytesType() {\n PrimitiveType.call(this);\n }\n util.inherits(BytesType, PrimitiveType);\n BytesType.prototype._check = function(val, flags, hook) {\n var b2 = Buffer2.isBuffer(val);\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n BytesType.prototype._read = function(tap) {\n return tap.readBytes();\n };\n BytesType.prototype._skip = function(tap) {\n tap.skipBytes();\n };\n BytesType.prototype._write = function(tap, val) {\n if (!Buffer2.isBuffer(val)) {\n throwInvalidError(val, this);\n }\n tap.writeBytes(val);\n };\n BytesType.prototype._match = function(tap1, tap2) {\n return tap1.matchBytes(tap2);\n };\n BytesType.prototype._update = StringType.prototype._update;\n BytesType.prototype._copy = function(obj, opts) {\n var buf;\n switch ((opts && opts.coerce) | 0) {\n case 3:\n this._check(obj, void 0, throwInvalidError);\n return obj.toString(\"binary\");\n case 2:\n if (typeof obj != \"string\") {\n throw new Error(f2(\"cannot coerce to buffer: %j\", obj));\n }\n buf = utils.bufferFrom(obj, \"binary\");\n this._check(buf, void 0, throwInvalidError);\n return buf;\n case 1:\n if (!isJsonBuffer(obj)) {\n throw new Error(f2(\"cannot coerce to buffer: %j\", obj));\n }\n buf = utils.bufferFrom(obj.data);\n this._check(buf, void 0, throwInvalidError);\n return buf;\n default:\n this._check(obj, void 0, throwInvalidError);\n return utils.bufferFrom(obj);\n }\n };\n BytesType.prototype.compare = Buffer2.compare;\n BytesType.prototype.typeName = \"bytes\";\n BytesType.prototype.random = function() {\n return RANDOM.nextBuffer(RANDOM.nextInt(32));\n };\n function UnionType(schema, opts) {\n Type.call(this);\n if (!Array.isArray(schema)) {\n throw new Error(f2(\"non-array union schema: %j\", schema));\n }\n if (!schema.length) {\n throw new Error(\"empty union\");\n }\n this.types = Object.freeze(schema.map(function(obj) {\n return Type.forSchema(obj, opts);\n }));\n this._branchIndices = {};\n this.types.forEach(function(type, i) {\n if (Type.isType(type, \"union\")) {\n throw new Error(\"unions cannot be directly nested\");\n }\n var branch = type.branchName;\n if (this._branchIndices[branch] !== void 0) {\n throw new Error(f2(\"duplicate union branch name: %j\", branch));\n }\n this._branchIndices[branch] = i;\n }, this);\n }\n util.inherits(UnionType, Type);\n UnionType.prototype._branchConstructor = function() {\n throw new Error(\"unions cannot be directly wrapped\");\n };\n UnionType.prototype._skip = function(tap) {\n this.types[tap.readLong()]._skip(tap);\n };\n UnionType.prototype._match = function(tap1, tap2) {\n var n1 = tap1.readLong();\n var n2 = tap2.readLong();\n if (n1 === n2) {\n return this.types[n1]._match(tap1, tap2);\n } else {\n return n1 < n2 ? -1 : 1;\n }\n };\n UnionType.prototype._deref = function(schema, opts) {\n return this.types.map(function(t) {\n return t._attrs(opts);\n });\n };\n UnionType.prototype.getTypes = function() {\n return this.types;\n };\n function UnwrappedUnionType(schema, opts) {\n UnionType.call(this, schema, opts);\n this._dynamicBranches = null;\n this._bucketIndices = {};\n this.types.forEach(function(type, index) {\n if (Type.isType(type, \"abstract\", \"logical\")) {\n if (!this._dynamicBranches) {\n this._dynamicBranches = [];\n }\n this._dynamicBranches.push({ index, type });\n } else {\n var bucket = getTypeBucket(type);\n if (this._bucketIndices[bucket] !== void 0) {\n throw new Error(f2(\"ambiguous unwrapped union: %j\", this));\n }\n this._bucketIndices[bucket] = index;\n }\n }, this);\n Object.freeze(this);\n }\n util.inherits(UnwrappedUnionType, UnionType);\n UnwrappedUnionType.prototype._getIndex = function(val) {\n var index = this._bucketIndices[getValueBucket(val)];\n if (this._dynamicBranches) {\n index = this._getBranchIndex(val, index);\n }\n return index;\n };\n UnwrappedUnionType.prototype._getBranchIndex = function(any, index) {\n var logicalBranches = this._dynamicBranches;\n var i, l, branch;\n for (i = 0, l = logicalBranches.length; i < l; i++) {\n branch = logicalBranches[i];\n if (branch.type._check(any)) {\n if (index === void 0) {\n index = branch.index;\n } else {\n throw new Error(\"ambiguous conversion\");\n }\n }\n }\n return index;\n };\n UnwrappedUnionType.prototype._check = function(val, flags, hook, path) {\n var index = this._getIndex(val);\n var b2 = index !== void 0;\n if (b2) {\n return this.types[index]._check(val, flags, hook, path);\n }\n if (hook) {\n hook(val, this);\n }\n return b2;\n };\n UnwrappedUnionType.prototype._read = function(tap) {\n var index = tap.readLong();\n var branchType = this.types[index];\n if (branchType) {\n return branchType._read(tap);\n } else {\n throw new Error(f2(\"invalid union index: %s\", index));\n }\n };\n UnwrappedUnionType.prototype._write = function(tap, val) {\n var index = this._getIndex(val);\n if (index === void 0) {\n throwInvalidError(val, this);\n }\n tap.writeLong(index);\n if (val !== null) {\n this.types[index]._write(tap, val);\n }\n };\n UnwrappedUnionType.prototype._update = function(resolver, type, opts) {\n var i, l, typeResolver;\n for (i = 0, l = this.types.length; i < l; i++) {\n try {\n typeResolver = this.types[i].createResolver(type, opts);\n } catch (err) {\n continue;\n }\n resolver._read = function(tap) {\n return typeResolver._read(tap);\n };\n return;\n }\n };\n UnwrappedUnionType.prototype._copy = function(val, opts) {\n var coerce = opts && opts.coerce | 0;\n var wrap = opts && opts.wrap | 0;\n var index;\n if (wrap === 2) {\n index = 0;\n } else {\n switch (coerce) {\n case 1:\n if (isJsonBuffer(val) && this._bucketIndices.buffer !== void 0) {\n index = this._bucketIndices.buffer;\n } else {\n index = this._getIndex(val);\n }\n break;\n case 2:\n if (val === null) {\n index = this._bucketIndices[\"null\"];\n } else if (typeof val === \"object\") {\n var keys = Object.keys(val);\n if (keys.length === 1) {\n index = this._branchIndices[keys[0]];\n val = val[keys[0]];\n }\n }\n break;\n default:\n index = this._getIndex(val);\n }\n if (index === void 0) {\n throwInvalidError(val, this);\n }\n }\n var type = this.types[index];\n if (val === null || wrap === 3) {\n return type._copy(val, opts);\n } else {\n switch (coerce) {\n case 3:\n var obj = {};\n obj[type.branchName] = type._copy(val, opts);\n return obj;\n default:\n return type._copy(val, opts);\n }\n }\n };\n UnwrappedUnionType.prototype.compare = function(val1, val2) {\n var index1 = this._getIndex(val1);\n var index2 = this._getIndex(val2);\n if (index1 === void 0) {\n throwInvalidError(val1, this);\n } else if (index2 === void 0) {\n throwInvalidError(val2, this);\n } else if (index1 === index2) {\n return this.types[index1].compare(val1, val2);\n } else {\n return utils.compare(index1, index2);\n }\n };\n UnwrappedUnionType.prototype.typeName = \"union:unwrapped\";\n UnwrappedUnionType.prototype.random = function() {\n var index = RANDOM.nextInt(this.types.length);\n return this.types[index].random();\n };\n function WrappedUnionType(schema, opts) {\n UnionType.call(this, schema, opts);\n Object.freeze(this);\n }\n util.inherits(WrappedUnionType, UnionType);\n WrappedUnionType.prototype._check = function(val, flags, hook, path) {\n var b2 = false;\n if (val === null) {\n b2 = this._branchIndices[\"null\"] !== void 0;\n } else if (typeof val == \"object\") {\n var keys = Object.keys(val);\n if (keys.length === 1) {\n var name = keys[0];\n var index = this._branchIndices[name];\n if (index !== void 0) {\n if (hook) {\n path.push(name);\n b2 = this.types[index]._check(val[name], flags, hook, path);\n path.pop();\n return b2;\n } else {\n return this.types[index]._check(val[name], flags);\n }\n }\n }\n }\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n WrappedUnionType.prototype._read = function(tap) {\n var type = this.types[tap.readLong()];\n if (!type) {\n throw new Error(f2(\"invalid union index\"));\n }\n var Branch = type._branchConstructor;\n if (Branch === null) {\n return null;\n } else {\n return new Branch(type._read(tap));\n }\n };\n WrappedUnionType.prototype._write = function(tap, val) {\n var index, keys, name;\n if (val === null) {\n index = this._branchIndices[\"null\"];\n if (index === void 0) {\n throwInvalidError(val, this);\n }\n tap.writeLong(index);\n } else {\n keys = Object.keys(val);\n if (keys.length === 1) {\n name = keys[0];\n index = this._branchIndices[name];\n }\n if (index === void 0) {\n throwInvalidError(val, this);\n }\n tap.writeLong(index);\n this.types[index]._write(tap, val[name]);\n }\n };\n WrappedUnionType.prototype._update = function(resolver, type, opts) {\n var i, l, typeResolver, Branch;\n for (i = 0, l = this.types.length; i < l; i++) {\n try {\n typeResolver = this.types[i].createResolver(type, opts);\n } catch (err) {\n continue;\n }\n Branch = this.types[i]._branchConstructor;\n if (Branch) {\n resolver._read = function(tap) {\n return new Branch(typeResolver._read(tap));\n };\n } else {\n resolver._read = function() {\n return null;\n };\n }\n return;\n }\n };\n WrappedUnionType.prototype._copy = function(val, opts) {\n var wrap = opts && opts.wrap | 0;\n if (wrap === 2) {\n var firstType = this.types[0];\n if (val === null && firstType.typeName === \"null\") {\n return null;\n }\n return new firstType._branchConstructor(firstType._copy(val, opts));\n }\n if (val === null && this._branchIndices[\"null\"] !== void 0) {\n return null;\n }\n var i, l, obj;\n if (typeof val == \"object\") {\n var keys = Object.keys(val);\n if (keys.length === 1) {\n var name = keys[0];\n i = this._branchIndices[name];\n if (i === void 0 && opts.qualifyNames) {\n var j2, type;\n for (j2 = 0, l = this.types.length; j2 < l; j2++) {\n type = this.types[j2];\n if (type.name && name === utils.unqualify(type.name)) {\n i = j2;\n break;\n }\n }\n }\n if (i !== void 0) {\n obj = this.types[i]._copy(val[name], opts);\n }\n }\n }\n if (wrap === 1 && obj === void 0) {\n i = 0;\n l = this.types.length;\n while (i < l && obj === void 0) {\n try {\n obj = this.types[i]._copy(val, opts);\n } catch (err) {\n i++;\n }\n }\n }\n if (obj !== void 0) {\n return wrap === 3 ? obj : new this.types[i]._branchConstructor(obj);\n }\n throwInvalidError(val, this);\n };\n WrappedUnionType.prototype.compare = function(val1, val2) {\n var name1 = val1 === null ? \"null\" : Object.keys(val1)[0];\n var name2 = val2 === null ? \"null\" : Object.keys(val2)[0];\n var index = this._branchIndices[name1];\n if (name1 === name2) {\n return name1 === \"null\" ? 0 : this.types[index].compare(val1[name1], val2[name1]);\n } else {\n return utils.compare(index, this._branchIndices[name2]);\n }\n };\n WrappedUnionType.prototype.typeName = \"union:wrapped\";\n WrappedUnionType.prototype.random = function() {\n var index = RANDOM.nextInt(this.types.length);\n var type = this.types[index];\n var Branch = type._branchConstructor;\n if (!Branch) {\n return null;\n }\n return new Branch(type.random());\n };\n function EnumType(schema, opts) {\n Type.call(this, schema, opts);\n if (!Array.isArray(schema.symbols) || !schema.symbols.length) {\n throw new Error(f2(\"invalid enum symbols: %j\", schema.symbols));\n }\n this.symbols = Object.freeze(schema.symbols.slice());\n this._indices = {};\n this.symbols.forEach(function(symbol, i) {\n if (!utils.isValidName(symbol)) {\n throw new Error(f2(\"invalid %s symbol: %j\", this, symbol));\n }\n if (this._indices[symbol] !== void 0) {\n throw new Error(f2(\"duplicate %s symbol: %j\", this, symbol));\n }\n this._indices[symbol] = i;\n }, this);\n this.default = schema.default;\n if (this.default !== void 0 && this._indices[this.default] === void 0) {\n throw new Error(f2(\"invalid %s default: %j\", this, this.default));\n }\n this._branchConstructor = this._createBranchConstructor();\n Object.freeze(this);\n }\n util.inherits(EnumType, Type);\n EnumType.prototype._check = function(val, flags, hook) {\n var b2 = this._indices[val] !== void 0;\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n EnumType.prototype._read = function(tap) {\n var index = tap.readLong();\n var symbol = this.symbols[index];\n if (symbol === void 0) {\n throw new Error(f2(\"invalid %s enum index: %s\", this.name, index));\n }\n return symbol;\n };\n EnumType.prototype._skip = function(tap) {\n tap.skipLong();\n };\n EnumType.prototype._write = function(tap, val) {\n var index = this._indices[val];\n if (index === void 0) {\n throwInvalidError(val, this);\n }\n tap.writeLong(index);\n };\n EnumType.prototype._match = function(tap1, tap2) {\n return tap1.matchLong(tap2);\n };\n EnumType.prototype.compare = function(val1, val2) {\n return utils.compare(this._indices[val1], this._indices[val2]);\n };\n EnumType.prototype._update = function(resolver, type, opts) {\n var symbols = this.symbols;\n if (type.typeName === \"enum\" && hasCompatibleName(this, type, !opts.ignoreNamespaces) && (type.symbols.every(function(s) {\n return ~symbols.indexOf(s);\n }) || this.default !== void 0)) {\n resolver.symbols = type.symbols.map(function(s) {\n return this._indices[s] === void 0 ? this.default : s;\n }, this);\n resolver._read = type._read;\n }\n };\n EnumType.prototype._copy = function(val) {\n this._check(val, void 0, throwInvalidError);\n return val;\n };\n EnumType.prototype._deref = function(schema) {\n schema.symbols = this.symbols;\n };\n EnumType.prototype.getSymbols = function() {\n return this.symbols;\n };\n EnumType.prototype.typeName = \"enum\";\n EnumType.prototype.random = function() {\n return RANDOM.choice(this.symbols);\n };\n function FixedType(schema, opts) {\n Type.call(this, schema, opts);\n if (schema.size !== (schema.size | 0) || schema.size < 0) {\n throw new Error(f2(\"invalid %s size\", this.branchName));\n }\n this.size = schema.size | 0;\n this._branchConstructor = this._createBranchConstructor();\n Object.freeze(this);\n }\n util.inherits(FixedType, Type);\n FixedType.prototype._check = function(val, flags, hook) {\n var b2 = Buffer2.isBuffer(val) && val.length === this.size;\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n FixedType.prototype._read = function(tap) {\n return tap.readFixed(this.size);\n };\n FixedType.prototype._skip = function(tap) {\n tap.skipFixed(this.size);\n };\n FixedType.prototype._write = function(tap, val) {\n if (!Buffer2.isBuffer(val) || val.length !== this.size) {\n throwInvalidError(val, this);\n }\n tap.writeFixed(val, this.size);\n };\n FixedType.prototype._match = function(tap1, tap2) {\n return tap1.matchFixed(tap2, this.size);\n };\n FixedType.prototype.compare = Buffer2.compare;\n FixedType.prototype._update = function(resolver, type, opts) {\n if (type.typeName === \"fixed\" && this.size === type.size && hasCompatibleName(this, type, !opts.ignoreNamespaces)) {\n resolver.size = this.size;\n resolver._read = this._read;\n }\n };\n FixedType.prototype._copy = BytesType.prototype._copy;\n FixedType.prototype._deref = function(schema) {\n schema.size = this.size;\n };\n FixedType.prototype.getSize = function() {\n return this.size;\n };\n FixedType.prototype.typeName = \"fixed\";\n FixedType.prototype.random = function() {\n return RANDOM.nextBuffer(this.size);\n };\n function MapType(schema, opts) {\n Type.call(this);\n if (!schema.values) {\n throw new Error(f2(\"missing map values: %j\", schema));\n }\n this.valuesType = Type.forSchema(schema.values, opts);\n this._branchConstructor = this._createBranchConstructor();\n Object.freeze(this);\n }\n util.inherits(MapType, Type);\n MapType.prototype._check = function(val, flags, hook, path) {\n if (!val || typeof val != \"object\" || Array.isArray(val)) {\n if (hook) {\n hook(val, this);\n }\n return false;\n }\n var keys = Object.keys(val);\n var b2 = true;\n var i, l, j2, key;\n if (hook) {\n j2 = path.length;\n path.push(\"\");\n for (i = 0, l = keys.length; i < l; i++) {\n key = path[j2] = keys[i];\n if (!this.valuesType._check(val[key], flags, hook, path)) {\n b2 = false;\n }\n }\n path.pop();\n } else {\n for (i = 0, l = keys.length; i < l; i++) {\n if (!this.valuesType._check(val[keys[i]], flags)) {\n return false;\n }\n }\n }\n return b2;\n };\n MapType.prototype._read = function(tap) {\n var values = this.valuesType;\n var val = {};\n var n;\n while (n = readArraySize(tap)) {\n while (n--) {\n var key = tap.readString();\n val[key] = values._read(tap);\n }\n }\n return val;\n };\n MapType.prototype._skip = function(tap) {\n var values = this.valuesType;\n var len, n;\n while (n = tap.readLong()) {\n if (n < 0) {\n len = tap.readLong();\n tap.pos += len;\n } else {\n while (n--) {\n tap.skipString();\n values._skip(tap);\n }\n }\n }\n };\n MapType.prototype._write = function(tap, val) {\n if (!val || typeof val != \"object\" || Array.isArray(val)) {\n throwInvalidError(val, this);\n }\n var values = this.valuesType;\n var keys = Object.keys(val);\n var n = keys.length;\n var i, key;\n if (n) {\n tap.writeLong(n);\n for (i = 0; i < n; i++) {\n key = keys[i];\n tap.writeString(key);\n values._write(tap, val[key]);\n }\n }\n tap.writeLong(0);\n };\n MapType.prototype._match = function() {\n throw new Error(\"maps cannot be compared\");\n };\n MapType.prototype._update = function(rsv, type, opts) {\n if (type.typeName === \"map\") {\n rsv.valuesType = this.valuesType.createResolver(type.valuesType, opts);\n rsv._read = this._read;\n }\n };\n MapType.prototype._copy = function(val, opts) {\n if (val && typeof val == \"object\" && !Array.isArray(val)) {\n var values = this.valuesType;\n var keys = Object.keys(val);\n var i, l, key;\n var copy = {};\n for (i = 0, l = keys.length; i < l; i++) {\n key = keys[i];\n copy[key] = values._copy(val[key], opts);\n }\n return copy;\n }\n throwInvalidError(val, this);\n };\n MapType.prototype.compare = MapType.prototype._match;\n MapType.prototype.typeName = \"map\";\n MapType.prototype.getValuesType = function() {\n return this.valuesType;\n };\n MapType.prototype.random = function() {\n var val = {};\n var i, l;\n for (i = 0, l = RANDOM.nextInt(10); i < l; i++) {\n val[RANDOM.nextString(RANDOM.nextInt(20))] = this.valuesType.random();\n }\n return val;\n };\n MapType.prototype._deref = function(schema, opts) {\n schema.values = this.valuesType._attrs(opts);\n };\n function ArrayType(schema, opts) {\n Type.call(this);\n if (!schema.items) {\n throw new Error(f2(\"missing array items: %j\", schema));\n }\n this.itemsType = Type.forSchema(schema.items, opts);\n this._branchConstructor = this._createBranchConstructor();\n Object.freeze(this);\n }\n util.inherits(ArrayType, Type);\n ArrayType.prototype._check = function(val, flags, hook, path) {\n if (!Array.isArray(val)) {\n if (hook) {\n hook(val, this);\n }\n return false;\n }\n var items = this.itemsType;\n var b2 = true;\n var i, l, j2;\n if (hook) {\n j2 = path.length;\n path.push(\"\");\n for (i = 0, l = val.length; i < l; i++) {\n path[j2] = \"\" + i;\n if (!items._check(val[i], flags, hook, path)) {\n b2 = false;\n }\n }\n path.pop();\n } else {\n for (i = 0, l = val.length; i < l; i++) {\n if (!items._check(val[i], flags)) {\n return false;\n }\n }\n }\n return b2;\n };\n ArrayType.prototype._read = function(tap) {\n var items = this.itemsType;\n var i = 0;\n var val, n;\n while (n = tap.readLong()) {\n if (n < 0) {\n n = -n;\n tap.skipLong();\n }\n val = val || new Array(n);\n while (n--) {\n val[i++] = items._read(tap);\n }\n }\n return val || [];\n };\n ArrayType.prototype._skip = function(tap) {\n var items = this.itemsType;\n var len, n;\n while (n = tap.readLong()) {\n if (n < 0) {\n len = tap.readLong();\n tap.pos += len;\n } else {\n while (n--) {\n items._skip(tap);\n }\n }\n }\n };\n ArrayType.prototype._write = function(tap, val) {\n if (!Array.isArray(val)) {\n throwInvalidError(val, this);\n }\n var items = this.itemsType;\n var n = val.length;\n var i;\n if (n) {\n tap.writeLong(n);\n for (i = 0; i < n; i++) {\n items._write(tap, val[i]);\n }\n }\n tap.writeLong(0);\n };\n ArrayType.prototype._match = function(tap1, tap2) {\n var n1 = tap1.readLong();\n var n2 = tap2.readLong();\n var f3;\n while (n1 && n2) {\n f3 = this.itemsType._match(tap1, tap2);\n if (f3) {\n return f3;\n }\n if (!--n1) {\n n1 = readArraySize(tap1);\n }\n if (!--n2) {\n n2 = readArraySize(tap2);\n }\n }\n return utils.compare(n1, n2);\n };\n ArrayType.prototype._update = function(resolver, type, opts) {\n if (type.typeName === \"array\") {\n resolver.itemsType = this.itemsType.createResolver(type.itemsType, opts);\n resolver._read = this._read;\n }\n };\n ArrayType.prototype._copy = function(val, opts) {\n if (!Array.isArray(val)) {\n throwInvalidError(val, this);\n }\n var items = new Array(val.length);\n var i, l;\n for (i = 0, l = val.length; i < l; i++) {\n items[i] = this.itemsType._copy(val[i], opts);\n }\n return items;\n };\n ArrayType.prototype._deref = function(schema, opts) {\n schema.items = this.itemsType._attrs(opts);\n };\n ArrayType.prototype.compare = function(val1, val2) {\n var n1 = val1.length;\n var n2 = val2.length;\n var i, l, f3;\n for (i = 0, l = Math.min(n1, n2); i < l; i++) {\n if (f3 = this.itemsType.compare(val1[i], val2[i])) {\n return f3;\n }\n }\n return utils.compare(n1, n2);\n };\n ArrayType.prototype.getItemsType = function() {\n return this.itemsType;\n };\n ArrayType.prototype.typeName = \"array\";\n ArrayType.prototype.random = function() {\n var arr = [];\n var i, l;\n for (i = 0, l = RANDOM.nextInt(10); i < l; i++) {\n arr.push(this.itemsType.random());\n }\n return arr;\n };\n function RecordType(schema, opts) {\n opts = opts || {};\n var namespace = opts.namespace;\n if (schema.namespace !== void 0) {\n opts.namespace = schema.namespace;\n } else if (schema.name) {\n var ns = utils.impliedNamespace(schema.name);\n if (ns !== void 0) {\n opts.namespace = ns;\n }\n }\n Type.call(this, schema, opts);\n if (!Array.isArray(schema.fields)) {\n throw new Error(f2(\"non-array record fields: %j\", schema.fields));\n }\n if (utils.hasDuplicates(schema.fields, function(f3) {\n return f3.name;\n })) {\n throw new Error(f2(\"duplicate field name: %j\", schema.fields));\n }\n this._fieldsByName = {};\n this.fields = Object.freeze(schema.fields.map(function(f3) {\n var field = new Field(f3, opts);\n this._fieldsByName[field.name] = field;\n return field;\n }, this));\n this._branchConstructor = this._createBranchConstructor();\n this._isError = schema.type === \"error\";\n this.recordConstructor = this._createConstructor(\n opts.errorStackTraces,\n opts.omitRecordMethods\n );\n this._read = this._createReader();\n this._skip = this._createSkipper();\n this._write = this._createWriter();\n this._check = this._createChecker();\n opts.namespace = namespace;\n Object.freeze(this);\n }\n util.inherits(RecordType, Type);\n RecordType.prototype._getConstructorName = function() {\n return this.name ? utils.capitalize(utils.unqualify(this.name)) : this._isError ? \"Error$\" : \"Record$\";\n };\n RecordType.prototype._createConstructor = function(errorStack, plainRecords) {\n var outerArgs = [];\n var innerArgs = [];\n var ds = [];\n var innerBody = \"\";\n var i, l, field, name, defaultValue, hasDefault, stackField;\n for (i = 0, l = this.fields.length; i < l; i++) {\n field = this.fields[i];\n defaultValue = field.defaultValue;\n hasDefault = defaultValue() !== void 0;\n name = field.name;\n if (errorStack && this._isError && name === \"stack\" && Type.isType(field.type, \"string\") && !hasDefault) {\n stackField = field;\n }\n innerArgs.push(\"v\" + i);\n innerBody += \" \";\n if (!hasDefault) {\n innerBody += \"this.\" + name + \" = v\" + i + \";\\n\";\n } else {\n innerBody += \"if (v\" + i + \" === undefined) { \";\n innerBody += \"this.\" + name + \" = d\" + ds.length + \"(); \";\n innerBody += \"} else { this.\" + name + \" = v\" + i + \"; }\\n\";\n outerArgs.push(\"d\" + ds.length);\n ds.push(defaultValue);\n }\n }\n if (stackField) {\n innerBody += \" if (this.stack === undefined) { \";\n if (typeof Error.captureStackTrace == \"function\") {\n innerBody += \"Error.captureStackTrace(this, this.constructor);\";\n } else {\n innerBody += \"this.stack = Error().stack;\";\n }\n innerBody += \" }\\n\";\n }\n var outerBody = \"return function \" + this._getConstructorName() + \"(\";\n outerBody += innerArgs.join() + \") {\\n\" + innerBody + \"};\";\n var Record = new Function(outerArgs.join(), outerBody).apply(void 0, ds);\n if (plainRecords) {\n return Record;\n }\n var self = this;\n Record.getType = function() {\n return self;\n };\n Record.type = self;\n if (this._isError) {\n util.inherits(Record, Error);\n Record.prototype.name = this._getConstructorName();\n }\n Record.prototype.clone = function(o) {\n return self.clone(this, o);\n };\n Record.prototype.compare = function(v2) {\n return self.compare(this, v2);\n };\n Record.prototype.isValid = function(o) {\n return self.isValid(this, o);\n };\n Record.prototype.toBuffer = function() {\n return self.toBuffer(this);\n };\n Record.prototype.toString = function() {\n return self.toString(this);\n };\n Record.prototype.wrap = function() {\n return self.wrap(this);\n };\n Record.prototype.wrapped = Record.prototype.wrap;\n return Record;\n };\n RecordType.prototype._createChecker = function() {\n var names = [];\n var values = [];\n var name = this._getConstructorName();\n var body = \"return function check\" + name + \"(v, f, h, p) {\\n\";\n body += \" if (\\n\";\n body += \" v === null ||\\n\";\n body += \" typeof v != 'object' ||\\n\";\n body += \" (f && !this._checkFields(v))\\n\";\n body += \" ) {\\n\";\n body += \" if (h) { h(v, this); }\\n\";\n body += \" return false;\\n\";\n body += \" }\\n\";\n if (!this.fields.length) {\n body += \" return true;\\n\";\n } else {\n for (i = 0, l = this.fields.length; i < l; i++) {\n field = this.fields[i];\n names.push(\"t\" + i);\n values.push(field.type);\n if (field.defaultValue() !== void 0) {\n body += \" var v\" + i + \" = v.\" + field.name + \";\\n\";\n }\n }\n body += \" if (h) {\\n\";\n body += \" var b = 1;\\n\";\n body += \" var j = p.length;\\n\";\n body += \" p.push('');\\n\";\n var i, l, field;\n for (i = 0, l = this.fields.length; i < l; i++) {\n field = this.fields[i];\n body += \" p[j] = '\" + field.name + \"';\\n\";\n body += \" b &= \";\n if (field.defaultValue() === void 0) {\n body += \"t\" + i + \"._check(v.\" + field.name + \", f, h, p);\\n\";\n } else {\n body += \"v\" + i + \" === undefined || \";\n body += \"t\" + i + \"._check(v\" + i + \", f, h, p);\\n\";\n }\n }\n body += \" p.pop();\\n\";\n body += \" return !!b;\\n\";\n body += \" } else {\\n return (\\n \";\n body += this.fields.map(function(field2, i2) {\n return field2.defaultValue() === void 0 ? \"t\" + i2 + \"._check(v.\" + field2.name + \", f)\" : \"(v\" + i2 + \" === undefined || t\" + i2 + \"._check(v\" + i2 + \", f))\";\n }).join(\" &&\\n \");\n body += \"\\n );\\n }\\n\";\n }\n body += \"};\";\n return new Function(names.join(), body).apply(void 0, values);\n };\n RecordType.prototype._createReader = function() {\n var names = [];\n var values = [this.recordConstructor];\n var i, l;\n for (i = 0, l = this.fields.length; i < l; i++) {\n names.push(\"t\" + i);\n values.push(this.fields[i].type);\n }\n var name = this._getConstructorName();\n var body = \"return function read\" + name + \"(t) {\\n\";\n body += \" return new \" + name + \"(\\n \";\n body += names.map(function(s) {\n return s + \"._read(t)\";\n }).join(\",\\n \");\n body += \"\\n );\\n};\";\n names.unshift(name);\n return new Function(names.join(), body).apply(void 0, values);\n };\n RecordType.prototype._createSkipper = function() {\n var args = [];\n var body = \"return function skip\" + this._getConstructorName() + \"(t) {\\n\";\n var values = [];\n var i, l;\n for (i = 0, l = this.fields.length; i < l; i++) {\n args.push(\"t\" + i);\n values.push(this.fields[i].type);\n body += \" t\" + i + \"._skip(t);\\n\";\n }\n body += \"}\";\n return new Function(args.join(), body).apply(void 0, values);\n };\n RecordType.prototype._createWriter = function() {\n var args = [];\n var name = this._getConstructorName();\n var body = \"return function write\" + name + \"(t, v) {\\n\";\n var values = [];\n var i, l, field, value;\n for (i = 0, l = this.fields.length; i < l; i++) {\n field = this.fields[i];\n args.push(\"t\" + i);\n values.push(field.type);\n body += \" \";\n if (field.defaultValue() === void 0) {\n body += \"t\" + i + \"._write(t, v.\" + field.name + \");\\n\";\n } else {\n value = field.type.toBuffer(field.defaultValue()).toString(\"binary\");\n args.push(\"d\" + i);\n values.push(value);\n body += \"var v\" + i + \" = v.\" + field.name + \";\\n\";\n body += \"if (v\" + i + \" === undefined) {\\n\";\n body += \" t.writeBinary(d\" + i + \", \" + value.length + \");\\n\";\n body += \" } else {\\n t\" + i + \"._write(t, v\" + i + \");\\n }\\n\";\n }\n }\n body += \"}\";\n return new Function(args.join(), body).apply(void 0, values);\n };\n RecordType.prototype._update = function(resolver, type, opts) {\n if (!hasCompatibleName(this, type, !opts.ignoreNamespaces)) {\n throw new Error(f2(\"no alias found for %s\", type.name));\n }\n var rFields = this.fields;\n var wFields = type.fields;\n var wFieldsMap = utils.toMap(wFields, function(f3) {\n return f3.name;\n });\n var innerArgs = [];\n var resolvers = {};\n var i, j2, field, name, names, matches, fieldResolver;\n for (i = 0; i < rFields.length; i++) {\n field = rFields[i];\n names = getAliases(field);\n matches = [];\n for (j2 = 0; j2 < names.length; j2++) {\n name = names[j2];\n if (wFieldsMap[name]) {\n matches.push(name);\n }\n }\n if (matches.length > 1) {\n throw new Error(\n f2(\"ambiguous aliasing for %s.%s (%s)\", type.name, field.name, matches)\n );\n }\n if (!matches.length) {\n if (field.defaultValue() === void 0) {\n throw new Error(\n f2(\"no matching field for default-less %s.%s\", type.name, field.name)\n );\n }\n innerArgs.push(\"undefined\");\n } else {\n name = matches[0];\n fieldResolver = {\n resolver: field.type.createResolver(wFieldsMap[name].type, opts),\n name: \"_\" + field.name\n // Reader field name.\n };\n if (!resolvers[name]) {\n resolvers[name] = [fieldResolver];\n } else {\n resolvers[name].push(fieldResolver);\n }\n innerArgs.push(fieldResolver.name);\n }\n }\n var lazyIndex = -1;\n i = wFields.length;\n while (i && resolvers[wFields[--i].name] === void 0) {\n lazyIndex = i;\n }\n var uname = this._getConstructorName();\n var args = [uname];\n var values = [this.recordConstructor];\n var body = \" return function read\" + uname + \"(t, b) {\\n\";\n for (i = 0; i < wFields.length; i++) {\n if (i === lazyIndex) {\n body += \" if (!b) {\\n\";\n }\n field = type.fields[i];\n name = field.name;\n if (resolvers[name] === void 0) {\n body += ~lazyIndex && i >= lazyIndex ? \" \" : \" \";\n args.push(\"r\" + i);\n values.push(field.type);\n body += \"r\" + i + \"._skip(t);\\n\";\n } else {\n j2 = resolvers[name].length;\n while (j2--) {\n body += ~lazyIndex && i >= lazyIndex ? \" \" : \" \";\n args.push(\"r\" + i + \"f\" + j2);\n fieldResolver = resolvers[name][j2];\n values.push(fieldResolver.resolver);\n body += \"var \" + fieldResolver.name + \" = \";\n body += \"r\" + i + \"f\" + j2 + \"._\" + (j2 ? \"peek\" : \"read\") + \"(t);\\n\";\n }\n }\n }\n if (~lazyIndex) {\n body += \" }\\n\";\n }\n body += \" return new \" + uname + \"(\" + innerArgs.join() + \");\\n};\";\n resolver._read = new Function(args.join(), body).apply(void 0, values);\n };\n RecordType.prototype._match = function(tap1, tap2) {\n var fields = this.fields;\n var i, l, field, order, type;\n for (i = 0, l = fields.length; i < l; i++) {\n field = fields[i];\n order = field._order;\n type = field.type;\n if (order) {\n order *= type._match(tap1, tap2);\n if (order) {\n return order;\n }\n } else {\n type._skip(tap1);\n type._skip(tap2);\n }\n }\n return 0;\n };\n RecordType.prototype._checkFields = function(obj) {\n var keys = Object.keys(obj);\n var i, l;\n for (i = 0, l = keys.length; i < l; i++) {\n if (!this._fieldsByName[keys[i]]) {\n return false;\n }\n }\n return true;\n };\n RecordType.prototype._copy = function(val, opts) {\n var hook = opts && opts.fieldHook;\n var values = [void 0];\n var i, l, field, value;\n for (i = 0, l = this.fields.length; i < l; i++) {\n field = this.fields[i];\n value = val[field.name];\n if (value === void 0 && field.hasOwnProperty(\"defaultValue\")) {\n value = field.defaultValue();\n }\n if (opts && !opts.skip || value !== void 0) {\n value = field.type._copy(value, opts);\n }\n if (hook) {\n value = hook(field, value, this);\n }\n values.push(value);\n }\n var Record = this.recordConstructor;\n return new (Record.bind.apply(Record, values))();\n };\n RecordType.prototype._deref = function(schema, opts) {\n schema.fields = this.fields.map(function(field) {\n var fieldType = field.type;\n var fieldSchema = {\n name: field.name,\n type: fieldType._attrs(opts)\n };\n if (opts.exportAttrs) {\n var val = field.defaultValue();\n if (val !== void 0) {\n fieldSchema[\"default\"] = fieldType._copy(val, { coerce: 3, wrap: 3 });\n }\n var fieldOrder = field.order;\n if (fieldOrder !== \"ascending\") {\n fieldSchema.order = fieldOrder;\n }\n var fieldAliases = field.aliases;\n if (fieldAliases.length) {\n fieldSchema.aliases = fieldAliases;\n }\n var fieldDoc = field.doc;\n if (fieldDoc !== void 0) {\n fieldSchema.doc = fieldDoc;\n }\n }\n return fieldSchema;\n });\n };\n RecordType.prototype.compare = function(val1, val2) {\n var fields = this.fields;\n var i, l, field, name, order, type;\n for (i = 0, l = fields.length; i < l; i++) {\n field = fields[i];\n name = field.name;\n order = field._order;\n type = field.type;\n if (order) {\n order *= type.compare(val1[name], val2[name]);\n if (order) {\n return order;\n }\n }\n }\n return 0;\n };\n RecordType.prototype.random = function() {\n var fields = this.fields.map(function(f3) {\n return f3.type.random();\n });\n fields.unshift(void 0);\n var Record = this.recordConstructor;\n return new (Record.bind.apply(Record, fields))();\n };\n RecordType.prototype.field = function(name) {\n return this._fieldsByName[name];\n };\n RecordType.prototype.getField = RecordType.prototype.field;\n RecordType.prototype.getFields = function() {\n return this.fields;\n };\n RecordType.prototype.getRecordConstructor = function() {\n return this.recordConstructor;\n };\n Object.defineProperty(RecordType.prototype, \"typeName\", {\n enumerable: true,\n get: function() {\n return this._isError ? \"error\" : \"record\";\n }\n });\n function LogicalType(schema, opts) {\n this._logicalTypeName = schema.logicalType;\n Type.call(this);\n LOGICAL_TYPE = this;\n try {\n this._underlyingType = Type.forSchema(schema, opts);\n } finally {\n LOGICAL_TYPE = null;\n var l = UNDERLYING_TYPES.length;\n if (l && UNDERLYING_TYPES[l - 1][0] === this) {\n UNDERLYING_TYPES.pop();\n }\n }\n if (Type.isType(this.underlyingType, \"union\")) {\n this._branchConstructor = this.underlyingType._branchConstructor;\n } else {\n this._branchConstructor = this.underlyingType._createBranchConstructor();\n }\n }\n util.inherits(LogicalType, Type);\n Object.defineProperty(LogicalType.prototype, \"typeName\", {\n enumerable: true,\n get: function() {\n return \"logical:\" + this._logicalTypeName;\n }\n });\n Object.defineProperty(LogicalType.prototype, \"underlyingType\", {\n enumerable: true,\n get: function() {\n if (this._underlyingType) {\n return this._underlyingType;\n }\n var i, l, arr;\n for (i = 0, l = UNDERLYING_TYPES.length; i < l; i++) {\n arr = UNDERLYING_TYPES[i];\n if (arr[0] === this) {\n return arr[1];\n }\n }\n }\n });\n LogicalType.prototype.getUnderlyingType = function() {\n return this.underlyingType;\n };\n LogicalType.prototype._read = function(tap) {\n return this._fromValue(this.underlyingType._read(tap));\n };\n LogicalType.prototype._write = function(tap, any) {\n this.underlyingType._write(tap, this._toValue(any));\n };\n LogicalType.prototype._check = function(any, flags, hook, path) {\n try {\n var val = this._toValue(any);\n } catch (err) {\n }\n if (val === void 0) {\n if (hook) {\n hook(any, this);\n }\n return false;\n }\n return this.underlyingType._check(val, flags, hook, path);\n };\n LogicalType.prototype._copy = function(any, opts) {\n var type = this.underlyingType;\n switch (opts && opts.coerce) {\n case 3:\n return type._copy(this._toValue(any), opts);\n case 2:\n return this._fromValue(type._copy(any, opts));\n default:\n return this._fromValue(type._copy(this._toValue(any), opts));\n }\n };\n LogicalType.prototype._update = function(resolver, type, opts) {\n var _fromValue = this._resolve(type, opts);\n if (_fromValue) {\n resolver._read = function(tap) {\n return _fromValue(type._read(tap));\n };\n }\n };\n LogicalType.prototype.compare = function(obj1, obj2) {\n var val1 = this._toValue(obj1);\n var val2 = this._toValue(obj2);\n return this.underlyingType.compare(val1, val2);\n };\n LogicalType.prototype.random = function() {\n return this._fromValue(this.underlyingType.random());\n };\n LogicalType.prototype._deref = function(schema, opts) {\n var type = this.underlyingType;\n var isVisited = type.name !== void 0 && opts.derefed[type.name];\n schema = type._attrs(opts);\n if (!isVisited && opts.exportAttrs) {\n if (typeof schema == \"string\") {\n schema = { type: schema };\n }\n schema.logicalType = this._logicalTypeName;\n this._export(schema);\n }\n return schema;\n };\n LogicalType.prototype._skip = function(tap) {\n this.underlyingType._skip(tap);\n };\n LogicalType.prototype._export = function() {\n };\n LogicalType.prototype._fromValue = utils.abstractFunction;\n LogicalType.prototype._toValue = utils.abstractFunction;\n LogicalType.prototype._resolve = utils.abstractFunction;\n function AbstractLongType(noUnpack) {\n this._concreteTypeName = \"long\";\n PrimitiveType.call(this, true);\n this._noUnpack = !!noUnpack;\n }\n util.inherits(AbstractLongType, LongType);\n AbstractLongType.prototype.typeName = \"abstract:long\";\n AbstractLongType.prototype._check = function(val, flags, hook) {\n var b2 = this._isValid(val);\n if (!b2 && hook) {\n hook(val, this);\n }\n return b2;\n };\n AbstractLongType.prototype._read = function(tap) {\n var buf, pos;\n if (this._noUnpack) {\n pos = tap.pos;\n tap.skipLong();\n buf = tap.buf.slice(pos, tap.pos);\n } else {\n buf = tap.unpackLongBytes(tap);\n }\n if (tap.isValid()) {\n return this._fromBuffer(buf);\n }\n };\n AbstractLongType.prototype._write = function(tap, val) {\n if (!this._isValid(val)) {\n throwInvalidError(val, this);\n }\n var buf = this._toBuffer(val);\n if (this._noUnpack) {\n tap.writeFixed(buf);\n } else {\n tap.packLongBytes(buf);\n }\n };\n AbstractLongType.prototype._copy = function(val, opts) {\n switch (opts && opts.coerce) {\n case 3:\n return this._toJSON(val);\n case 2:\n return this._fromJSON(val);\n default:\n return this._fromJSON(this._toJSON(val));\n }\n };\n AbstractLongType.prototype._deref = function() {\n return \"long\";\n };\n AbstractLongType.prototype._update = function(resolver, type) {\n var self = this;\n switch (type.typeName) {\n case \"int\":\n resolver._read = function(tap) {\n return self._fromJSON(type._read(tap));\n };\n break;\n case \"abstract:long\":\n case \"long\":\n resolver._read = function(tap) {\n return self._read(tap);\n };\n }\n };\n AbstractLongType.prototype.random = function() {\n return this._fromJSON(LongType.prototype.random());\n };\n AbstractLongType.prototype._fromBuffer = utils.abstractFunction;\n AbstractLongType.prototype._toBuffer = utils.abstractFunction;\n AbstractLongType.prototype._fromJSON = utils.abstractFunction;\n AbstractLongType.prototype._toJSON = utils.abstractFunction;\n AbstractLongType.prototype._isValid = utils.abstractFunction;\n AbstractLongType.prototype.compare = utils.abstractFunction;\n function Field(schema, opts) {\n var name = schema.name;\n if (typeof name != \"string\" || !utils.isValidName(name)) {\n throw new Error(f2(\"invalid field name: %s\", name));\n }\n this.name = name;\n this.type = Type.forSchema(schema.type, opts);\n this.aliases = schema.aliases || [];\n this.doc = schema.doc !== void 0 ? \"\" + schema.doc : void 0;\n this._order = function(order) {\n switch (order) {\n case \"ascending\":\n return 1;\n case \"descending\":\n return -1;\n case \"ignore\":\n return 0;\n default:\n throw new Error(f2(\"invalid order: %j\", order));\n }\n }(schema.order === void 0 ? \"ascending\" : schema.order);\n var value = schema[\"default\"];\n if (value !== void 0) {\n var type = this.type;\n var val;\n try {\n val = type._copy(value, { coerce: 2, wrap: 2 });\n } catch (err) {\n var msg = f2(\"incompatible field default %j (%s)\", value, err.message);\n if (Type.isType(type, \"union\")) {\n msg += f2(\n \", union defaults must match the first branch's type (%j)\",\n type.types[0]\n );\n }\n throw new Error(msg);\n }\n if (isPrimitive(type.typeName) && type.typeName !== \"bytes\") {\n this.defaultValue = function() {\n return val;\n };\n } else {\n this.defaultValue = function() {\n return type._copy(val);\n };\n }\n }\n Object.freeze(this);\n }\n Field.prototype.defaultValue = function() {\n };\n Object.defineProperty(Field.prototype, \"order\", {\n enumerable: true,\n get: function() {\n return [\"descending\", \"ignore\", \"ascending\"][this._order + 1];\n }\n });\n Field.prototype.getAliases = function() {\n return this.aliases;\n };\n Field.prototype.getDefault = Field.prototype.defaultValue;\n Field.prototype.getName = function() {\n return this.name;\n };\n Field.prototype.getOrder = function() {\n return this.order;\n };\n Field.prototype.getType = function() {\n return this.type;\n };\n function Resolver(readerType) {\n this._readerType = readerType;\n this._read = null;\n this.itemsType = null;\n this.size = 0;\n this.symbols = null;\n this.valuesType = null;\n }\n Resolver.prototype._peek = Type.prototype._peek;\n Resolver.prototype.inspect = function() {\n return \"\";\n };\n function Hash() {\n this.str = void 0;\n }\n function readValue(type, tap, resolver, lazy) {\n if (resolver) {\n if (resolver._readerType !== type) {\n throw new Error(\"invalid resolver\");\n }\n return resolver._read(tap, lazy);\n } else {\n return type._read(tap);\n }\n }\n function getAliases(obj) {\n var names = {};\n if (obj.name) {\n names[obj.name] = true;\n }\n var aliases = obj.aliases;\n var i, l;\n for (i = 0, l = aliases.length; i < l; i++) {\n names[aliases[i]] = true;\n }\n return Object.keys(names);\n }\n function hasCompatibleName(reader, writer, strict) {\n if (!writer.name) {\n return true;\n }\n var name = strict ? writer.name : utils.unqualify(writer.name);\n var aliases = getAliases(reader);\n var i, l, alias;\n for (i = 0, l = aliases.length; i < l; i++) {\n alias = aliases[i];\n if (!strict) {\n alias = utils.unqualify(alias);\n }\n if (alias === name) {\n return true;\n }\n }\n return false;\n }\n function isPrimitive(typeName) {\n var type = TYPES[typeName];\n return type && type.prototype instanceof PrimitiveType;\n }\n function getClassName(typeName) {\n if (typeName === \"error\") {\n typeName = \"record\";\n } else {\n var match = /^([^:]+):(.*)$/.exec(typeName);\n if (match) {\n if (match[1] === \"union\") {\n typeName = match[2] + \"Union\";\n } else {\n typeName = match[1];\n }\n }\n }\n return utils.capitalize(typeName) + \"Type\";\n }\n function readArraySize(tap) {\n var n = tap.readLong();\n if (n < 0) {\n n = -n;\n tap.skipLong();\n }\n return n;\n }\n function isSafeLong(n) {\n return n >= -9007199254740990 && n <= 9007199254740990;\n }\n function isJsonBuffer(obj) {\n return obj && obj.type === \"Buffer\" && Array.isArray(obj.data);\n }\n function throwInvalidError(val, type) {\n throw new Error(f2(\"invalid %j: %j\", type.schema(), val));\n }\n function maybeQualify(name, ns) {\n var unqualified = utils.unqualify(name);\n return isPrimitive(unqualified) ? unqualified : utils.qualify(name, ns);\n }\n function getTypeBucket(type) {\n var typeName = type.typeName;\n switch (typeName) {\n case \"double\":\n case \"float\":\n case \"int\":\n case \"long\":\n return \"number\";\n case \"bytes\":\n case \"fixed\":\n return \"buffer\";\n case \"enum\":\n return \"string\";\n case \"map\":\n case \"error\":\n case \"record\":\n return \"object\";\n default:\n return typeName;\n }\n }\n function getValueBucket(val) {\n if (val === null) {\n return \"null\";\n }\n var bucket = typeof val;\n if (bucket === \"object\") {\n if (Array.isArray(val)) {\n return \"array\";\n } else if (Buffer2.isBuffer(val)) {\n return \"buffer\";\n }\n }\n return bucket;\n }\n function isAmbiguous(types) {\n var buckets = {};\n var i, l, bucket, type;\n for (i = 0, l = types.length; i < l; i++) {\n type = types[i];\n if (!Type.isType(type, \"logical\")) {\n bucket = getTypeBucket(type);\n if (buckets[bucket]) {\n return true;\n }\n buckets[bucket] = true;\n }\n }\n return false;\n }\n function combineNumbers(types) {\n var typeNames = [\"int\", \"long\", \"float\", \"double\"];\n var superIndex = -1;\n var superType = null;\n var i, l, type, index;\n for (i = 0, l = types.length; i < l; i++) {\n type = types[i];\n index = typeNames.indexOf(type.typeName);\n if (index > superIndex) {\n superIndex = index;\n superType = type;\n }\n }\n return superType;\n }\n function combineStrings(types, opts) {\n var symbols = {};\n var i, l, type, typeSymbols;\n for (i = 0, l = types.length; i < l; i++) {\n type = types[i];\n if (type.typeName === \"string\") {\n return type;\n }\n typeSymbols = type.symbols;\n var j2, m2;\n for (j2 = 0, m2 = typeSymbols.length; j2 < m2; j2++) {\n symbols[typeSymbols[j2]] = true;\n }\n }\n return Type.forSchema({ type: \"enum\", symbols: Object.keys(symbols) }, opts);\n }\n function combineBuffers(types, opts) {\n var size = -1;\n var i, l, type;\n for (i = 0, l = types.length; i < l; i++) {\n type = types[i];\n if (type.typeName === \"bytes\") {\n return type;\n }\n if (size === -1) {\n size = type.size;\n } else if (type.size !== size) {\n size = -2;\n }\n }\n return size < 0 ? Type.forSchema(\"bytes\", opts) : types[0];\n }\n function combineObjects(types, opts) {\n var allTypes = [];\n var fieldTypes = {};\n var fieldDefaults = {};\n var isValidRecord = true;\n var i, l, type, fields;\n for (i = 0, l = types.length; i < l; i++) {\n type = types[i];\n if (type.typeName === \"map\") {\n isValidRecord = false;\n allTypes.push(type.valuesType);\n } else {\n fields = type.fields;\n var j2, m2, field, fieldDefault, fieldName, fieldType;\n for (j2 = 0, m2 = fields.length; j2 < m2; j2++) {\n field = fields[j2];\n fieldName = field.name;\n fieldType = field.type;\n allTypes.push(fieldType);\n if (isValidRecord) {\n if (!fieldTypes[fieldName]) {\n fieldTypes[fieldName] = [];\n }\n fieldTypes[fieldName].push(fieldType);\n fieldDefault = field.defaultValue();\n if (fieldDefault !== void 0) {\n fieldDefaults[fieldName] = fieldDefault;\n }\n }\n }\n }\n }\n if (isValidRecord) {\n var fieldNames = Object.keys(fieldTypes);\n for (i = 0, l = fieldNames.length; i < l; i++) {\n fieldName = fieldNames[i];\n if (fieldTypes[fieldName].length < types.length && fieldDefaults[fieldName] === void 0) {\n if (opts && opts.strictDefaults) {\n isValidRecord = false;\n } else {\n fieldTypes[fieldName].unshift(Type.forSchema(\"null\", opts));\n fieldDefaults[fieldName] = null;\n }\n }\n }\n }\n var schema;\n if (isValidRecord) {\n schema = {\n type: \"record\",\n fields: fieldNames.map(function(s) {\n var fieldType2 = Type.forTypes(fieldTypes[s], opts);\n var fieldDefault2 = fieldDefaults[s];\n if (fieldDefault2 !== void 0 && ~fieldType2.typeName.indexOf(\"union\")) {\n var unionTypes = fieldType2.types.slice();\n var i2, l2;\n for (i2 = 0, l2 = unionTypes.length; i2 < l2; i2++) {\n if (unionTypes[i2].isValid(fieldDefault2)) {\n break;\n }\n }\n if (i2 > 0) {\n var unionType = unionTypes[0];\n unionTypes[0] = unionTypes[i2];\n unionTypes[i2] = unionType;\n fieldType2 = Type.forSchema(unionTypes, opts);\n }\n }\n return {\n name: s,\n type: fieldType2,\n \"default\": fieldDefaults[s]\n };\n })\n };\n } else {\n schema = {\n type: \"map\",\n values: Type.forTypes(allTypes, opts)\n };\n }\n return Type.forSchema(schema, opts);\n }\n module.exports = {\n Type,\n getTypeBucket,\n getValueBucket,\n isPrimitive,\n builtins: function() {\n var types = {\n LogicalType,\n UnwrappedUnionType,\n WrappedUnionType\n };\n var typeNames = Object.keys(TYPES);\n var i, l, typeName;\n for (i = 0, l = typeNames.length; i < l; i++) {\n typeName = typeNames[i];\n types[getClassName(typeName)] = TYPES[typeName];\n }\n return types;\n }()\n };\n }\n});\n\n// node_modules/avsc/lib/containers.js\nvar require_containers = __commonJS({\n \"node_modules/avsc/lib/containers.js\"(exports, module) {\n \"use strict\";\n var types = require_types();\n var utils = require_utils();\n var buffer = __import_BUFFER;\n var stream = __import_STREAM;\n var util = __import_UTIL;\n var zlib = __import_ZLIB;\n var Buffer2 = buffer.Buffer;\n var OPTS = { namespace: \"org.apache.avro.file\" };\n var LONG_TYPE = types.Type.forSchema(\"long\", OPTS);\n var MAP_BYTES_TYPE = types.Type.forSchema({ type: \"map\", values: \"bytes\" }, OPTS);\n var HEADER_TYPE = types.Type.forSchema({\n name: \"Header\",\n type: \"record\",\n fields: [\n { name: \"magic\", type: { type: \"fixed\", name: \"Magic\", size: 4 } },\n { name: \"meta\", type: MAP_BYTES_TYPE },\n { name: \"sync\", type: { type: \"fixed\", name: \"Sync\", size: 16 } }\n ]\n }, OPTS);\n var BLOCK_TYPE = types.Type.forSchema({\n name: \"Block\",\n type: \"record\",\n fields: [\n { name: \"count\", type: \"long\" },\n { name: \"data\", type: \"bytes\" },\n { name: \"sync\", type: \"Sync\" }\n ]\n }, OPTS);\n var MAGIC_BYTES = utils.bufferFrom(\"Obj\u0001\");\n var f2 = util.format;\n var Tap = utils.Tap;\n function RawDecoder(schema, opts) {\n opts = opts || {};\n var noDecode = !!opts.noDecode;\n stream.Duplex.call(this, {\n readableObjectMode: !noDecode,\n allowHalfOpen: false\n });\n this._type = types.Type.forSchema(schema);\n this._tap = new Tap(utils.newBuffer(0));\n this._writeCb = null;\n this._needPush = false;\n this._readValue = createReader(noDecode, this._type);\n this._finished = false;\n this.on(\"finish\", function() {\n this._finished = true;\n this._read();\n });\n }\n util.inherits(RawDecoder, stream.Duplex);\n RawDecoder.prototype._write = function(chunk, encoding, cb) {\n this._writeCb = cb;\n var tap = this._tap;\n tap.buf = Buffer2.concat([tap.buf.slice(tap.pos), chunk]);\n tap.pos = 0;\n if (this._needPush) {\n this._needPush = false;\n this._read();\n }\n };\n RawDecoder.prototype._read = function() {\n this._needPush = false;\n var tap = this._tap;\n var pos = tap.pos;\n var val = this._readValue(tap);\n if (tap.isValid()) {\n this.push(val);\n } else if (!this._finished) {\n tap.pos = pos;\n this._needPush = true;\n if (this._writeCb) {\n this._writeCb();\n }\n } else {\n this.push(null);\n }\n };\n function BlockDecoder(opts) {\n opts = opts || {};\n var noDecode = !!opts.noDecode;\n stream.Duplex.call(this, {\n allowHalfOpen: true,\n // For async decompressors.\n readableObjectMode: !noDecode\n });\n this._rType = opts.readerSchema !== void 0 ? types.Type.forSchema(opts.readerSchema) : void 0;\n this._wType = null;\n this._codecs = opts.codecs;\n this._codec = void 0;\n this._parseHook = opts.parseHook;\n this._tap = new Tap(utils.newBuffer(0));\n this._blockTap = new Tap(utils.newBuffer(0));\n this._syncMarker = null;\n this._readValue = null;\n this._noDecode = noDecode;\n this._queue = new utils.OrderedQueue();\n this._decompress = null;\n this._index = 0;\n this._remaining = void 0;\n this._needPush = false;\n this._finished = false;\n this.on(\"finish\", function() {\n this._finished = true;\n if (this._needPush) {\n this._read();\n }\n });\n }\n util.inherits(BlockDecoder, stream.Duplex);\n BlockDecoder.defaultCodecs = function() {\n return {\n \"null\": function(buf, cb) {\n cb(null, buf);\n },\n \"deflate\": zlib.inflateRaw\n };\n };\n BlockDecoder.getDefaultCodecs = BlockDecoder.defaultCodecs;\n BlockDecoder.prototype._decodeHeader = function() {\n var tap = this._tap;\n if (tap.buf.length < MAGIC_BYTES.length) {\n return false;\n }\n if (!MAGIC_BYTES.equals(tap.buf.slice(0, MAGIC_BYTES.length))) {\n this.emit(\"error\", new Error(\"invalid magic bytes\"));\n return false;\n }\n var header = HEADER_TYPE._read(tap);\n if (!tap.isValid()) {\n return false;\n }\n this._codec = (header.meta[\"avro.codec\"] || \"null\").toString();\n var codecs = this._codecs || BlockDecoder.getDefaultCodecs();\n this._decompress = codecs[this._codec];\n if (!this._decompress) {\n this.emit(\"error\", new Error(f2(\"unknown codec: %s\", this._codec)));\n return;\n }\n try {\n var schema = JSON.parse(header.meta[\"avro.schema\"].toString());\n if (this._parseHook) {\n schema = this._parseHook(schema);\n }\n this._wType = types.Type.forSchema(schema);\n } catch (err) {\n this.emit(\"error\", err);\n return;\n }\n try {\n this._readValue = createReader(this._noDecode, this._wType, this._rType);\n } catch (err) {\n this.emit(\"error\", err);\n return;\n }\n this._syncMarker = header.sync;\n this.emit(\"metadata\", this._wType, this._codec, header);\n return true;\n };\n BlockDecoder.prototype._write = function(chunk, encoding, cb) {\n var tap = this._tap;\n tap.buf = Buffer2.concat([tap.buf, chunk]);\n tap.pos = 0;\n if (!this._decodeHeader()) {\n process.nextTick(cb);\n return;\n }\n this._write = this._writeChunk;\n this._write(utils.newBuffer(0), encoding, cb);\n };\n BlockDecoder.prototype._writeChunk = function(chunk, encoding, cb) {\n var tap = this._tap;\n tap.buf = Buffer2.concat([tap.buf.slice(tap.pos), chunk]);\n tap.pos = 0;\n var nBlocks = 1;\n var block;\n while (block = tryReadBlock(tap)) {\n if (!this._syncMarker.equals(block.sync)) {\n this.emit(\"error\", new Error(\"invalid sync marker\"));\n return;\n }\n nBlocks++;\n this._decompress(\n block.data,\n this._createBlockCallback(block.data.length, block.count, chunkCb)\n );\n }\n chunkCb();\n function chunkCb() {\n if (!--nBlocks) {\n cb();\n }\n }\n };\n BlockDecoder.prototype._createBlockCallback = function(size, count, cb) {\n var self = this;\n var index = this._index++;\n return function(cause, data) {\n if (cause) {\n var err = new Error(f2(\"%s codec decompression error\", self._codec));\n err.cause = cause;\n self.emit(\"error\", err);\n cb();\n } else {\n self.emit(\"block\", new BlockInfo(count, data.length, size));\n self._queue.push(new BlockData(index, data, cb, count));\n if (self._needPush) {\n self._read();\n }\n }\n };\n };\n BlockDecoder.prototype._read = function() {\n this._needPush = false;\n var tap = this._blockTap;\n if (!this._remaining) {\n var data = this._queue.pop();\n if (!data || !data.count) {\n if (this._finished) {\n this.push(null);\n } else {\n this._needPush = true;\n }\n if (data) {\n data.cb();\n }\n return;\n }\n data.cb();\n this._remaining = data.count;\n tap.buf = data.buf;\n tap.pos = 0;\n }\n this._remaining--;\n var val;\n try {\n val = this._readValue(tap);\n if (!tap.isValid()) {\n throw new Error(\"truncated block\");\n }\n } catch (err) {\n this._remaining = 0;\n this.emit(\"error\", err);\n return;\n }\n this.push(val);\n };\n function RawEncoder(schema, opts) {\n opts = opts || {};\n stream.Transform.call(this, {\n writableObjectMode: true,\n allowHalfOpen: false\n });\n this._type = types.Type.forSchema(schema);\n this._writeValue = function(tap, val) {\n try {\n this._type._write(tap, val);\n } catch (err) {\n this.emit(\"typeError\", err, val, this._type);\n }\n };\n this._tap = new Tap(utils.newBuffer(opts.batchSize || 65536));\n this.on(\"typeError\", function(err) {\n this.emit(\"error\", err);\n });\n }\n util.inherits(RawEncoder, stream.Transform);\n RawEncoder.prototype._transform = function(val, encoding, cb) {\n var tap = this._tap;\n var buf = tap.buf;\n var pos = tap.pos;\n this._writeValue(tap, val);\n if (!tap.isValid()) {\n if (pos) {\n this.push(copyBuffer(tap.buf, 0, pos));\n }\n var len = tap.pos - pos;\n if (len > buf.length) {\n tap.buf = utils.newBuffer(2 * len);\n }\n tap.pos = 0;\n this._writeValue(tap, val);\n }\n cb();\n };\n RawEncoder.prototype._flush = function(cb) {\n var tap = this._tap;\n var pos = tap.pos;\n if (pos) {\n this.push(tap.buf.slice(0, pos));\n }\n cb();\n };\n function BlockEncoder(schema, opts) {\n opts = opts || {};\n stream.Duplex.call(this, {\n allowHalfOpen: true,\n // To support async compressors.\n writableObjectMode: true\n });\n var type;\n if (types.Type.isType(schema)) {\n type = schema;\n schema = void 0;\n } else {\n type = types.Type.forSchema(schema);\n }\n this._schema = schema;\n this._type = type;\n this._writeValue = function(tap, val) {\n try {\n this._type._write(tap, val);\n } catch (err) {\n this.emit(\"typeError\", err, val, this._type);\n return false;\n }\n return true;\n };\n this._blockSize = opts.blockSize || 65536;\n this._tap = new Tap(utils.newBuffer(this._blockSize));\n this._codecs = opts.codecs;\n this._codec = opts.codec || \"null\";\n this._blockCount = 0;\n this._syncMarker = opts.syncMarker || new utils.Lcg().nextBuffer(16);\n this._queue = new utils.OrderedQueue();\n this._pending = 0;\n this._finished = false;\n this._needHeader = false;\n this._needPush = false;\n this._metadata = opts.metadata || {};\n if (!MAP_BYTES_TYPE.isValid(this._metadata)) {\n throw new Error(\"invalid metadata\");\n }\n var codec = this._codec;\n this._compress = (this._codecs || BlockEncoder.getDefaultCodecs())[codec];\n if (!this._compress) {\n throw new Error(f2(\"unsupported codec: %s\", codec));\n }\n if (opts.omitHeader !== void 0) {\n opts.writeHeader = opts.omitHeader ? \"never\" : \"auto\";\n }\n switch (opts.writeHeader) {\n case false:\n case \"never\":\n break;\n case void 0:\n case \"auto\":\n this._needHeader = true;\n break;\n default:\n this._writeHeader();\n }\n this.on(\"finish\", function() {\n this._finished = true;\n if (this._blockCount) {\n this._flushChunk();\n } else if (this._finished && this._needPush) {\n this.push(null);\n }\n });\n this.on(\"typeError\", function(err) {\n this.emit(\"error\", err);\n });\n }\n util.inherits(BlockEncoder, stream.Duplex);\n BlockEncoder.defaultCodecs = function() {\n return {\n \"null\": function(buf, cb) {\n cb(null, buf);\n },\n \"deflate\": zlib.deflateRaw\n };\n };\n BlockEncoder.getDefaultCodecs = BlockEncoder.defaultCodecs;\n BlockEncoder.prototype._writeHeader = function() {\n var schema = JSON.stringify(\n this._schema ? this._schema : this._type.getSchema({ exportAttrs: true })\n );\n var meta = utils.copyOwnProperties(\n this._metadata,\n { \"avro.schema\": utils.bufferFrom(schema), \"avro.codec\": utils.bufferFrom(this._codec) },\n true\n // Overwrite.\n );\n var Header = HEADER_TYPE.getRecordConstructor();\n var header = new Header(MAGIC_BYTES, meta, this._syncMarker);\n this.push(header.toBuffer());\n };\n BlockEncoder.prototype._write = function(val, encoding, cb) {\n if (this._needHeader) {\n this._writeHeader();\n this._needHeader = false;\n }\n var tap = this._tap;\n var pos = tap.pos;\n var flushing = false;\n if (this._writeValue(tap, val)) {\n if (!tap.isValid()) {\n if (pos) {\n this._flushChunk(pos, cb);\n flushing = true;\n }\n var len = tap.pos - pos;\n if (len > this._blockSize) {\n this._blockSize = len * 2;\n }\n tap.buf = utils.newBuffer(this._blockSize);\n tap.pos = 0;\n this._writeValue(tap, val);\n }\n this._blockCount++;\n } else {\n tap.pos = pos;\n }\n if (!flushing) {\n cb();\n }\n };\n BlockEncoder.prototype._flushChunk = function(pos, cb) {\n var tap = this._tap;\n pos = pos || tap.pos;\n this._compress(tap.buf.slice(0, pos), this._createBlockCallback(pos, cb));\n this._blockCount = 0;\n };\n BlockEncoder.prototype._read = function() {\n var self = this;\n var data = this._queue.pop();\n if (!data) {\n if (this._finished && !this._pending) {\n process.nextTick(function() {\n self.push(null);\n });\n } else {\n this._needPush = true;\n }\n return;\n }\n this.push(LONG_TYPE.toBuffer(data.count, true));\n this.push(LONG_TYPE.toBuffer(data.buf.length, true));\n this.push(data.buf);\n this.push(this._syncMarker);\n if (!this._finished) {\n data.cb();\n }\n };\n BlockEncoder.prototype._createBlockCallback = function(size, cb) {\n var self = this;\n var index = this._index++;\n var count = this._blockCount;\n this._pending++;\n return function(cause, data) {\n if (cause) {\n var err = new Error(f2(\"%s codec compression error\", self._codec));\n err.cause = cause;\n self.emit(\"error\", err);\n return;\n }\n self._pending--;\n self.emit(\"block\", new BlockInfo(count, size, data.length));\n self._queue.push(new BlockData(index, data, cb, count));\n if (self._needPush) {\n self._needPush = false;\n self._read();\n }\n };\n };\n function BlockInfo(count, raw, compressed) {\n this.valueCount = count;\n this.rawDataLength = raw;\n this.compressedDataLength = compressed;\n }\n function BlockData(index, buf, cb, count) {\n this.index = index;\n this.buf = buf;\n this.cb = cb;\n this.count = count | 0;\n }\n function tryReadBlock(tap) {\n var pos = tap.pos;\n var block = BLOCK_TYPE._read(tap);\n if (!tap.isValid()) {\n tap.pos = pos;\n return null;\n }\n return block;\n }\n function createReader(noDecode, writerType, readerType) {\n if (noDecode) {\n return /* @__PURE__ */ function(skipper) {\n return function(tap) {\n var pos = tap.pos;\n skipper(tap);\n return tap.buf.slice(pos, tap.pos);\n };\n }(writerType._skip);\n } else if (readerType) {\n var resolver = readerType.createResolver(writerType);\n return function(tap) {\n return resolver._read(tap);\n };\n } else {\n return function(tap) {\n return writerType._read(tap);\n };\n }\n }\n function copyBuffer(buf, pos, len) {\n var copy = utils.newBuffer(len);\n buf.copy(copy, 0, pos, pos + len);\n return copy;\n }\n module.exports = {\n BLOCK_TYPE,\n // For tests.\n HEADER_TYPE,\n // Idem.\n MAGIC_BYTES,\n // Idem.\n streams: {\n BlockDecoder,\n BlockEncoder,\n RawDecoder,\n RawEncoder\n }\n };\n }\n});\n\n// node_modules/avsc/lib/services.js\nvar require_services = __commonJS({\n \"node_modules/avsc/lib/services.js\"(exports, module) {\n \"use strict\";\n var types = require_types();\n var utils = require_utils();\n var buffer = __import_BUFFER;\n var events = __import_EVENTS;\n var stream = __import_STREAM;\n var util = __import_UTIL;\n var Buffer2 = buffer.Buffer;\n var Tap = utils.Tap;\n var Type = types.Type;\n var debug = util.debuglog(\"avsc:services\");\n var f2 = util.format;\n var OPTS = { namespace: \"org.apache.avro.ipc\" };\n var BOOLEAN_TYPE = Type.forSchema(\"boolean\", OPTS);\n var MAP_BYTES_TYPE = Type.forSchema({ type: \"map\", values: \"bytes\" }, OPTS);\n var STRING_TYPE = Type.forSchema(\"string\", OPTS);\n var HANDSHAKE_REQUEST_TYPE = Type.forSchema({\n name: \"HandshakeRequest\",\n type: \"record\",\n fields: [\n { name: \"clientHash\", type: { name: \"MD5\", type: \"fixed\", size: 16 } },\n { name: \"clientProtocol\", type: [\"null\", \"string\"], \"default\": null },\n { name: \"serverHash\", type: \"MD5\" },\n { name: \"meta\", type: [\"null\", MAP_BYTES_TYPE], \"default\": null }\n ]\n }, OPTS);\n var HANDSHAKE_RESPONSE_TYPE = Type.forSchema({\n name: \"HandshakeResponse\",\n type: \"record\",\n fields: [\n {\n name: \"match\",\n type: {\n name: \"HandshakeMatch\",\n type: \"enum\",\n symbols: [\"BOTH\", \"CLIENT\", \"NONE\"]\n }\n },\n { name: \"serverProtocol\", type: [\"null\", \"string\"], \"default\": null },\n { name: \"serverHash\", type: [\"null\", \"MD5\"], \"default\": null },\n { name: \"meta\", type: [\"null\", MAP_BYTES_TYPE], \"default\": null }\n ]\n }, OPTS);\n var PREFIX_LENGTH = 16;\n var PING_MESSAGE = new Message(\n \"\",\n // Empty name (invalid for other \"normal\" messages).\n Type.forSchema({ name: \"PingRequest\", type: \"record\", fields: [] }, OPTS),\n Type.forSchema([\"string\"], OPTS),\n Type.forSchema(\"null\", OPTS)\n );\n function Message(name, reqType, errType, resType, oneWay, doc) {\n this.name = name;\n if (!Type.isType(reqType, \"record\")) {\n throw new Error(\"invalid request type\");\n }\n this.requestType = reqType;\n if (!Type.isType(errType, \"union\") || !Type.isType(errType.getTypes()[0], \"string\")) {\n throw new Error(\"invalid error type\");\n }\n this.errorType = errType;\n if (oneWay) {\n if (!Type.isType(resType, \"null\") || errType.getTypes().length > 1) {\n throw new Error(\"inapplicable one-way parameter\");\n }\n }\n this.responseType = resType;\n this.oneWay = !!oneWay;\n this.doc = doc !== void 0 ? \"\" + doc : void 0;\n Object.freeze(this);\n }\n Message.forSchema = function(name, schema, opts) {\n opts = opts || {};\n if (!utils.isValidName(name)) {\n throw new Error(f2(\"invalid message name: %s\", name));\n }\n if (!Array.isArray(schema.request)) {\n throw new Error(f2(\"invalid message request: %s\", name));\n }\n var recordName = f2(\"%s.%sRequest\", OPTS.namespace, utils.capitalize(name));\n var reqType = Type.forSchema({\n name: recordName,\n type: \"record\",\n namespace: opts.namespace || \"\",\n // Don't leak request namespace.\n fields: schema.request\n }, opts);\n delete opts.registry[recordName];\n if (!schema.response) {\n throw new Error(f2(\"invalid message response: %s\", name));\n }\n var resType = Type.forSchema(schema.response, opts);\n if (schema.errors !== void 0 && !Array.isArray(schema.errors)) {\n throw new Error(f2(\"invalid message errors: %s\", name));\n }\n var errType = Type.forSchema([\"string\"].concat(schema.errors || []), opts);\n var oneWay = !!schema[\"one-way\"];\n return new Message(name, reqType, errType, resType, oneWay, schema.doc);\n };\n Message.prototype.schema = Type.prototype.getSchema;\n Message.prototype._attrs = function(opts) {\n var reqSchema = this.requestType._attrs(opts);\n var schema = {\n request: reqSchema.fields,\n response: this.responseType._attrs(opts)\n };\n var msgDoc = this.doc;\n if (msgDoc !== void 0) {\n schema.doc = msgDoc;\n }\n var errSchema = this.errorType._attrs(opts);\n if (errSchema.length > 1) {\n schema.errors = errSchema.slice(1);\n }\n if (this.oneWay) {\n schema[\"one-way\"] = true;\n }\n return schema;\n };\n utils.addDeprecatedGetters(\n Message,\n [\"name\", \"errorType\", \"requestType\", \"responseType\"]\n );\n Message.prototype.isOneWay = util.deprecate(\n function() {\n return this.oneWay;\n },\n \"use `.oneWay` directly instead of `.isOneWay()`\"\n );\n function Service(name, messages, types2, ptcl, server) {\n if (typeof name != \"string\") {\n return Service.forProtocol(name, messages);\n }\n this.name = name;\n this._messagesByName = messages || {};\n this.messages = Object.freeze(utils.objectValues(this._messagesByName));\n this._typesByName = types2 || {};\n this.types = Object.freeze(utils.objectValues(this._typesByName));\n this.protocol = ptcl;\n this._hashStr = utils.getHash(JSON.stringify(ptcl)).toString(\"binary\");\n this.doc = ptcl.doc ? \"\" + ptcl.doc : void 0;\n this._server = server || this.createServer({ silent: true });\n Object.freeze(this);\n }\n Service.Client = Client;\n Service.Server = Server;\n Service.compatible = function(clientSvc, serverSvc) {\n try {\n createReaders(clientSvc, serverSvc);\n } catch (err) {\n return false;\n }\n return true;\n };\n Service.forProtocol = function(ptcl, opts) {\n opts = opts || {};\n var name = ptcl.protocol;\n if (!name) {\n throw new Error(\"missing protocol name\");\n }\n if (ptcl.namespace !== void 0) {\n opts.namespace = ptcl.namespace;\n } else {\n var match = /^(.*)\\.[^.]+$/.exec(name);\n if (match) {\n opts.namespace = match[1];\n }\n }\n name = utils.qualify(name, opts.namespace);\n if (ptcl.types) {\n ptcl.types.forEach(function(obj) {\n Type.forSchema(obj, opts);\n });\n }\n var msgs;\n if (ptcl.messages) {\n msgs = {};\n Object.keys(ptcl.messages).forEach(function(key) {\n msgs[key] = Message.forSchema(key, ptcl.messages[key], opts);\n });\n }\n return new Service(name, msgs, opts.registry, ptcl);\n };\n Service.isService = function(any) {\n return !!any && any.hasOwnProperty(\"_hashStr\");\n };\n Service.prototype.createClient = function(opts) {\n var client = new Client(this, opts);\n process.nextTick(function() {\n if (opts && opts.server) {\n var obj = { objectMode: true };\n var pts = [new stream.PassThrough(obj), new stream.PassThrough(obj)];\n opts.server.createChannel({ readable: pts[0], writable: pts[1] }, obj);\n client.createChannel({ readable: pts[1], writable: pts[0] }, obj);\n } else if (opts && opts.transport) {\n client.createChannel(opts.transport);\n }\n });\n return client;\n };\n Service.prototype.createServer = function(opts) {\n return new Server(this, opts);\n };\n Object.defineProperty(Service.prototype, \"hash\", {\n enumerable: true,\n get: function() {\n return utils.bufferFrom(this._hashStr, \"binary\");\n }\n });\n Service.prototype.message = function(name) {\n return this._messagesByName[name];\n };\n Service.prototype.type = function(name) {\n return this._typesByName[name];\n };\n Service.prototype.inspect = function() {\n return f2(\"\", this.name);\n };\n utils.addDeprecatedGetters(\n Service,\n [\"message\", \"messages\", \"name\", \"type\", \"types\"]\n );\n Service.prototype.createEmitter = util.deprecate(\n function(transport, opts) {\n opts = opts || {};\n var client = this.createClient({\n cache: opts.cache,\n buffering: false,\n strictTypes: opts.strictErrors,\n timeout: opts.timeout\n });\n var channel = client.createChannel(transport, opts);\n forwardErrors(client, channel);\n return channel;\n },\n \"use `.createClient()` instead of `.createEmitter()`\"\n );\n Service.prototype.createListener = util.deprecate(\n function(transport, opts) {\n if (opts && opts.strictErrors) {\n throw new Error(\"use `.createServer()` to support strict errors\");\n }\n return this._server.createChannel(transport, opts);\n },\n \"use `.createServer().createChannel()` instead of `.createListener()`\"\n );\n Service.prototype.emit = util.deprecate(\n function(name, req, channel, cb) {\n if (!channel || !this.equals(channel.client._svc$)) {\n throw new Error(\"invalid emitter\");\n }\n var client = channel.client;\n Client.prototype.emitMessage.call(client, name, req, cb && cb.bind(this));\n return channel.getPending();\n },\n \"create a client via `.createClient()` to emit messages instead of `.emit()`\"\n );\n Service.prototype.equals = util.deprecate(\n function(any) {\n return Service.isService(any) && this.getFingerprint().equals(any.getFingerprint());\n },\n \"equality testing is deprecated, compare the `.protocol`s instead\"\n );\n Service.prototype.getFingerprint = util.deprecate(\n function(algorithm) {\n return utils.getHash(JSON.stringify(this.protocol), algorithm);\n },\n \"use `.hash` instead of `.getFingerprint()`\"\n );\n Service.prototype.getSchema = util.deprecate(\n Type.prototype.getSchema,\n \"use `.protocol` instead of `.getSchema()`\"\n );\n Service.prototype.on = util.deprecate(\n function(name, handler) {\n var self = this;\n this._server.onMessage(name, function(req, cb) {\n return handler.call(self, req, this.channel, cb);\n });\n return this;\n },\n \"use `.createServer().onMessage()` instead of `.on()`\"\n );\n Service.prototype.subprotocol = util.deprecate(\n function() {\n var parent = this._server;\n var opts = { strictTypes: parent._strict, cache: parent._cache };\n var server = new Server(parent.service, opts);\n server._handlers = Object.create(parent._handlers);\n return new Service(\n this.name,\n this._messagesByName,\n this._typesByName,\n this.protocol,\n server\n );\n },\n \"`.subprotocol()` will be removed in 5.1\"\n );\n Service.prototype._attrs = function(opts) {\n var ptcl = { protocol: this.name };\n var types2 = [];\n this.types.forEach(function(t) {\n if (t.getName() === void 0) {\n return;\n }\n var typeSchema = t._attrs(opts);\n if (typeof typeSchema != \"string\") {\n types2.push(typeSchema);\n }\n });\n if (types2.length) {\n ptcl.types = types2;\n }\n var msgNames = Object.keys(this._messagesByName);\n if (msgNames.length) {\n ptcl.messages = {};\n msgNames.forEach(function(name) {\n ptcl.messages[name] = this._messagesByName[name]._attrs(opts);\n }, this);\n }\n if (opts && opts.exportAttrs && this.doc !== void 0) {\n ptcl.doc = this.doc;\n }\n return ptcl;\n };\n function discoverProtocol(transport, opts, cb) {\n if (cb === void 0 && typeof opts == \"function\") {\n cb = opts;\n opts = void 0;\n }\n var svc = new Service({ protocol: \"Empty\" }, OPTS);\n var ptclStr;\n svc.createClient({ timeout: opts && opts.timeout }).createChannel(transport, {\n scope: opts && opts.scope,\n endWritable: typeof transport == \"function\"\n // Stateless transports only.\n }).once(\"handshake\", function(hreq, hres) {\n ptclStr = hres.serverProtocol;\n this.destroy(true);\n }).once(\"eot\", function(pending, err) {\n if (err && !/interrupted/.test(err)) {\n cb(err);\n } else {\n cb(null, JSON.parse(ptclStr));\n }\n });\n }\n function Client(svc, opts) {\n opts = opts || {};\n events.EventEmitter.call(this);\n this._svc$ = svc;\n this._channels$ = [];\n this._fns$ = [];\n this._buffering$ = !!opts.buffering;\n this._cache$ = opts.cache || {};\n this._policy$ = opts.channelPolicy;\n this._strict$ = !!opts.strictTypes;\n this._timeout$ = utils.getOption(opts, \"timeout\", 1e4);\n if (opts.remoteProtocols) {\n insertRemoteProtocols(this._cache$, opts.remoteProtocols, svc, true);\n }\n this._svc$.messages.forEach(function(msg) {\n this[msg.name] = this._createMessageHandler$(msg);\n }, this);\n }\n util.inherits(Client, events.EventEmitter);\n Client.prototype.activeChannels = function() {\n return this._channels$.slice();\n };\n Client.prototype.createChannel = function(transport, opts) {\n var objectMode = opts && opts.objectMode;\n var channel;\n if (typeof transport == \"function\") {\n var writableFactory;\n if (objectMode) {\n writableFactory = transport;\n } else {\n writableFactory = function(cb) {\n var encoder2 = new FrameEncoder();\n var writable2 = transport(function(err, readable2) {\n if (err) {\n cb(err);\n return;\n }\n var decoder2 = new FrameDecoder().once(\"error\", function(err2) {\n channel.destroy(err2);\n });\n cb(null, readable2.pipe(decoder2));\n });\n if (writable2) {\n encoder2.pipe(writable2);\n return encoder2;\n }\n };\n }\n channel = new StatelessClientChannel(this, writableFactory, opts);\n } else {\n var readable, writable;\n if (isStream(transport)) {\n readable = writable = transport;\n } else {\n readable = transport.readable;\n writable = transport.writable;\n }\n if (!objectMode) {\n var decoder = new NettyDecoder();\n readable = readable.pipe(decoder);\n var encoder = new NettyEncoder();\n encoder.pipe(writable);\n writable = encoder;\n }\n channel = new StatefulClientChannel(this, readable, writable, opts);\n if (!objectMode) {\n channel.once(\"eot\", function() {\n readable.unpipe(decoder);\n encoder.unpipe(writable);\n });\n decoder.once(\"error\", function(err) {\n channel.destroy(err);\n });\n }\n }\n var channels = this._channels$;\n channels.push(channel);\n channel.once(\"_drain\", function() {\n channels.splice(channels.indexOf(this), 1);\n });\n this._buffering$ = false;\n this.emit(\"channel\", channel);\n return channel;\n };\n Client.prototype.destroyChannels = function(opts) {\n this._channels$.forEach(function(channel) {\n channel.destroy(opts && opts.noWait);\n });\n };\n Client.prototype.emitMessage = function(name, req, opts, cb) {\n var msg = getExistingMessage(this._svc$, name);\n var wreq = new WrappedRequest(msg, {}, req);\n this._emitMessage$(wreq, opts, cb);\n };\n Client.prototype.remoteProtocols = function() {\n return getRemoteProtocols(this._cache$, true);\n };\n Object.defineProperty(Client.prototype, \"service\", {\n enumerable: true,\n get: function() {\n return this._svc$;\n }\n });\n Client.prototype.use = function() {\n var i, l, fn;\n for (i = 0, l = arguments.length; i < l; i++) {\n fn = arguments[i];\n this._fns$.push(fn.length < 3 ? fn(this) : fn);\n }\n return this;\n };\n Client.prototype._emitMessage$ = function(wreq, opts, cb) {\n if (!cb && typeof opts === \"function\") {\n cb = opts;\n opts = void 0;\n }\n var self = this;\n var channels = this._channels$;\n var numChannels = channels.length;\n if (!numChannels) {\n if (this._buffering$) {\n debug(\"no active client channels, buffering call\");\n this.once(\"channel\", function() {\n this._emitMessage$(wreq, opts, cb);\n });\n } else {\n var err = new Error(\"no active channels\");\n process.nextTick(function() {\n if (cb) {\n cb.call(new CallContext(wreq._msg), err);\n } else {\n self.emit(\"error\", err);\n }\n });\n }\n return;\n }\n opts = opts || {};\n if (opts.timeout === void 0) {\n opts.timeout = this._timeout$;\n }\n var channel;\n if (numChannels === 1) {\n channel = channels[0];\n } else if (this._policy$) {\n channel = this._policy$(this._channels$.slice());\n if (!channel) {\n debug(\"policy returned no channel, skipping call\");\n return;\n }\n } else {\n channel = channels[Math.floor(Math.random() * numChannels)];\n }\n channel._emit(wreq, opts, function(err2, wres) {\n var ctx = this;\n var errType = ctx.message.errorType;\n if (err2) {\n if (self._strict$) {\n err2 = errType.clone(err2.message, { wrapUnions: true });\n }\n done(err2);\n return;\n }\n if (!wres) {\n done();\n return;\n }\n err2 = wres.error;\n if (!self._strict$) {\n if (err2 === void 0) {\n err2 = null;\n } else {\n if (Type.isType(errType, \"union:unwrapped\")) {\n if (typeof err2 == \"string\") {\n err2 = new Error(err2);\n }\n } else if (err2 && err2.string && typeof err2.string == \"string\") {\n err2 = new Error(err2.string);\n }\n }\n }\n done(err2, wres.response);\n function done(err3, res) {\n if (cb) {\n cb.call(ctx, err3, res);\n } else if (err3) {\n self.emit(\"error\", err3);\n }\n }\n });\n };\n Client.prototype._createMessageHandler$ = function(msg) {\n var fields = msg.requestType.getFields();\n var names = fields.map(function(f3) {\n return f3.getName();\n });\n var body = \"return function \" + msg.name + \"(\";\n if (names.length) {\n body += names.join(\", \") + \", \";\n }\n body += \"opts, cb) {\\n\";\n body += \" var req = {\";\n body += names.map(function(n) {\n return n + \": \" + n;\n }).join(\", \");\n body += \"};\\n\";\n body += \" return this.emitMessage('\" + msg.name + \"', req, opts, cb);\\n\";\n body += \"};\";\n return new Function(body)();\n };\n function Server(svc, opts) {\n opts = opts || {};\n events.EventEmitter.call(this);\n this.service = svc;\n this._handlers = {};\n this._fns = [];\n this._channels = {};\n this._nextChannelId = 1;\n this._cache = opts.cache || {};\n this._defaultHandler = opts.defaultHandler;\n this._sysErrFormatter = opts.systemErrorFormatter;\n this._silent = !!opts.silent;\n this._strict = !!opts.strictTypes;\n if (opts.remoteProtocols) {\n insertRemoteProtocols(this._cache, opts.remoteProtocols, svc, false);\n }\n svc.messages.forEach(function(msg) {\n var name = msg.name;\n if (!opts.noCapitalize) {\n name = utils.capitalize(name);\n }\n this[\"on\" + name] = this._createMessageHandler(msg);\n }, this);\n }\n util.inherits(Server, events.EventEmitter);\n Server.prototype.activeChannels = function() {\n return utils.objectValues(this._channels);\n };\n Server.prototype.createChannel = function(transport, opts) {\n var objectMode = opts && opts.objectMode;\n var channel;\n if (typeof transport == \"function\") {\n var readableFactory;\n if (objectMode) {\n readableFactory = transport;\n } else {\n readableFactory = function(cb) {\n var decoder2 = new FrameDecoder().once(\"error\", function(err) {\n channel.destroy(err);\n });\n return transport(function(err, writable2) {\n if (err) {\n cb(err);\n return;\n }\n var encoder2 = new FrameEncoder();\n encoder2.pipe(writable2);\n cb(null, encoder2);\n }).pipe(decoder2);\n };\n }\n channel = new StatelessServerChannel(this, readableFactory, opts);\n } else {\n var readable, writable;\n if (isStream(transport)) {\n readable = writable = transport;\n } else {\n readable = transport.readable;\n writable = transport.writable;\n }\n if (!objectMode) {\n var decoder = new NettyDecoder();\n readable = readable.pipe(decoder);\n var encoder = new NettyEncoder();\n encoder.pipe(writable);\n writable = encoder;\n }\n channel = new StatefulServerChannel(this, readable, writable, opts);\n if (!objectMode) {\n channel.once(\"eot\", function() {\n readable.unpipe(decoder);\n encoder.unpipe(writable);\n });\n decoder.once(\"error\", function(err) {\n channel.destroy(err);\n });\n }\n }\n if (!this.listeners(\"error\").length) {\n this.on(\"error\", this._onError);\n }\n var channelId = this._nextChannelId++;\n var channels = this._channels;\n channels[channelId] = channel.once(\"eot\", function() {\n delete channels[channelId];\n });\n this.emit(\"channel\", channel);\n return channel;\n };\n Server.prototype.onMessage = function(name, handler) {\n getExistingMessage(this.service, name);\n this._handlers[name] = handler;\n return this;\n };\n Server.prototype.remoteProtocols = function() {\n return getRemoteProtocols(this._cache, false);\n };\n Server.prototype.use = function() {\n var i, l, fn;\n for (i = 0, l = arguments.length; i < l; i++) {\n fn = arguments[i];\n this._fns.push(fn.length < 3 ? fn(this) : fn);\n }\n return this;\n };\n Server.prototype._createMessageHandler = function(msg) {\n var name = msg.name;\n var fields = msg.requestType.fields;\n var numArgs = fields.length;\n var args = fields.length ? \", \" + fields.map(function(f3) {\n return \"req.\" + f3.name;\n }).join(\", \") : \"\";\n var body = \"return function (handler) {\\n\";\n body += \" if (handler.length > \" + numArgs + \") {\\n\";\n body += \" return this.onMessage('\" + name + \"', function (req, cb) {\\n\";\n body += \" return handler.call(this\" + args + \", cb);\\n\";\n body += \" });\\n\";\n body += \" } else {\\n\";\n body += \" return this.onMessage('\" + name + \"', function (req) {\\n\";\n body += \" return handler.call(this\" + args + \");\\n\";\n body += \" });\\n\";\n body += \" }\\n\";\n body += \"};\\n\";\n return new Function(body)();\n };\n Server.prototype._onError = function(err) {\n if (!this._silent && err.rpcCode !== \"UNKNOWN_PROTOCOL\") {\n console.error();\n if (err.rpcCode) {\n console.error(err.rpcCode);\n console.error(err.cause);\n } else {\n console.error(\"INTERNAL_SERVER_ERROR\");\n console.error(err);\n }\n }\n };\n function ClientChannel(client, opts) {\n opts = opts || {};\n events.EventEmitter.call(this);\n this.client = client;\n this.timeout = utils.getOption(opts, \"timeout\", client._timeout$);\n this._endWritable = !!utils.getOption(opts, \"endWritable\", true);\n this._prefix = normalizedPrefix(opts.scope);\n var cache = client._cache$;\n var clientSvc = client._svc$;\n var hash = opts.serverHash;\n if (!hash) {\n hash = clientSvc.hash;\n }\n var adapter = cache[hash];\n if (!adapter) {\n hash = clientSvc.hash;\n adapter = cache[hash] = new Adapter(clientSvc, clientSvc, hash);\n }\n this._adapter = adapter;\n this._registry = new Registry(this, PREFIX_LENGTH);\n this.pending = 0;\n this.destroyed = false;\n this.draining = false;\n this.once(\"_eot\", function(pending, err) {\n debug(\"client channel EOT\");\n this.destroyed = true;\n this.emit(\"eot\", pending, err);\n });\n }\n util.inherits(ClientChannel, events.EventEmitter);\n ClientChannel.prototype.destroy = function(noWait) {\n debug(\"destroying client channel\");\n if (!this.draining) {\n this.draining = true;\n this.emit(\"_drain\");\n }\n var registry = this._registry;\n var pending = this.pending;\n if (noWait) {\n registry.clear();\n }\n if (noWait || !pending) {\n if (isError(noWait)) {\n debug(\"fatal client channel error: %s\", noWait);\n this.emit(\"_eot\", pending, noWait);\n } else {\n this.emit(\"_eot\", pending);\n }\n } else {\n debug(\"client channel entering drain mode (%s pending)\", pending);\n }\n };\n ClientChannel.prototype.ping = function(timeout, cb) {\n if (!cb && typeof timeout == \"function\") {\n cb = timeout;\n timeout = void 0;\n }\n var self = this;\n var wreq = new WrappedRequest(PING_MESSAGE);\n this._emit(wreq, { timeout }, function(err) {\n if (cb) {\n cb.call(self, err);\n } else if (err) {\n self.destroy(err);\n }\n });\n };\n ClientChannel.prototype._createHandshakeRequest = function(adapter, noSvc) {\n var svc = this.client._svc$;\n return {\n clientHash: svc.hash,\n clientProtocol: noSvc ? null : JSON.stringify(svc.protocol),\n serverHash: adapter._hash\n };\n };\n ClientChannel.prototype._emit = function(wreq, opts, cb) {\n var msg = wreq._msg;\n var wres = msg.oneWay ? void 0 : new WrappedResponse(msg, {});\n var ctx = new CallContext(msg, this);\n var self = this;\n this.pending++;\n process.nextTick(function() {\n if (!msg.name) {\n onTransition(wreq, wres, onCompletion);\n } else {\n self.emit(\"outgoingCall\", ctx, opts);\n var fns = self.client._fns$;\n debug(\"starting client middleware chain (%s middleware)\", fns.length);\n chainMiddleware({\n fns,\n ctx,\n wreq,\n wres,\n onTransition,\n onCompletion,\n onError\n });\n }\n });\n function onTransition(wreq2, wres2, prev) {\n var err, reqBuf;\n if (self.destroyed) {\n err = new Error(\"channel destroyed\");\n } else {\n try {\n reqBuf = wreq2.toBuffer();\n } catch (cause) {\n err = serializationError(\n f2(\"invalid %j request\", msg.name),\n wreq2,\n [\n { name: \"headers\", type: MAP_BYTES_TYPE },\n { name: \"request\", type: msg.requestType }\n ]\n );\n }\n }\n if (err) {\n prev(err);\n return;\n }\n var timeout = opts && opts.timeout !== void 0 ? opts.timeout : self.timeout;\n var id = self._registry.add(timeout, function(err2, resBuf, adapter) {\n if (!err2 && !msg.oneWay) {\n try {\n adapter._decodeResponse(resBuf, wres2, msg);\n } catch (cause) {\n err2 = cause;\n }\n }\n prev(err2);\n });\n id |= self._prefix;\n debug(\"sending message %s\", id);\n self._send(id, reqBuf, !!msg && msg.oneWay);\n }\n function onCompletion(err) {\n self.pending--;\n cb.call(ctx, err, wres);\n if (self.draining && !self.destroyed && !self.pending) {\n self.destroy();\n }\n }\n function onError(err) {\n self.client.emit(\"error\", err, self);\n }\n };\n ClientChannel.prototype._getAdapter = function(hres) {\n var hash = hres.serverHash;\n var cache = this.client._cache$;\n var adapter = cache[hash];\n if (adapter) {\n return adapter;\n }\n var ptcl = JSON.parse(hres.serverProtocol);\n var serverSvc = Service.forProtocol(ptcl);\n adapter = new Adapter(this.client._svc$, serverSvc, hash, true);\n return cache[hash] = adapter;\n };\n ClientChannel.prototype._matchesPrefix = function(id) {\n return matchesPrefix(id, this._prefix);\n };\n ClientChannel.prototype._send = utils.abstractFunction;\n utils.addDeprecatedGetters(ClientChannel, [\"pending\", \"timeout\"]);\n ClientChannel.prototype.getCache = util.deprecate(\n function() {\n return this.client._cache$;\n },\n \"use `.remoteProtocols()` instead of `.getCache()`\"\n );\n ClientChannel.prototype.getProtocol = util.deprecate(\n function() {\n return this.client._svc$;\n },\n \"use `.service` instead or `.getProtocol()`\"\n );\n ClientChannel.prototype.isDestroyed = util.deprecate(\n function() {\n return this.destroyed;\n },\n \"use `.destroyed` instead of `.isDestroyed`\"\n );\n function StatelessClientChannel(client, writableFactory, opts) {\n ClientChannel.call(this, client, opts);\n this._writableFactory = writableFactory;\n if (!opts || !opts.noPing) {\n debug(\"emitting ping request\");\n this.ping();\n }\n }\n util.inherits(StatelessClientChannel, ClientChannel);\n StatelessClientChannel.prototype._send = function(id, reqBuf) {\n var cb = this._registry.get(id);\n var adapter = this._adapter;\n var self = this;\n process.nextTick(emit);\n return true;\n function emit(retry) {\n if (self.destroyed) {\n return;\n }\n var hreq = self._createHandshakeRequest(adapter, !retry);\n var writable = self._writableFactory.call(self, function(err, readable) {\n if (err) {\n cb(err);\n return;\n }\n readable.on(\"data\", function(obj) {\n debug(\"received response %s\", obj.id);\n var buf = Buffer2.concat(obj.payload);\n try {\n var parts = readHead(HANDSHAKE_RESPONSE_TYPE, buf);\n var hres = parts.head;\n if (hres.serverHash) {\n adapter = self._getAdapter(hres);\n }\n } catch (cause) {\n cb(cause);\n return;\n }\n var match = hres.match;\n debug(\"handshake match: %s\", match);\n self.emit(\"handshake\", hreq, hres);\n if (match === \"NONE\") {\n process.nextTick(function() {\n emit(true);\n });\n } else {\n self._adapter = adapter;\n cb(null, parts.tail, adapter);\n }\n });\n });\n if (!writable) {\n cb(new Error(\"invalid writable stream\"));\n return;\n }\n writable.write({\n id,\n payload: [HANDSHAKE_REQUEST_TYPE.toBuffer(hreq), reqBuf]\n });\n if (self._endWritable) {\n writable.end();\n }\n }\n };\n function StatefulClientChannel(client, readable, writable, opts) {\n ClientChannel.call(this, client, opts);\n this._readable = readable;\n this._writable = writable;\n this._connected = !!(opts && opts.noPing);\n this._readable.on(\"end\", onEnd);\n this._writable.on(\"finish\", onFinish);\n var self = this;\n var timer = null;\n this.once(\"eot\", function() {\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n if (!self._connected) {\n self.emit(\"_ready\");\n }\n this._writable.removeListener(\"finish\", onFinish);\n if (this._endWritable) {\n debug(\"ending transport\");\n this._writable.end();\n }\n this._readable.removeListener(\"data\", onPing).removeListener(\"data\", onMessage).removeListener(\"end\", onEnd);\n });\n var hreq;\n if (this._connected) {\n this._readable.on(\"data\", onMessage);\n } else {\n this._readable.on(\"data\", onPing);\n process.nextTick(ping);\n if (self.timeout) {\n timer = setTimeout(function() {\n self.destroy(new Error(\"timeout\"));\n }, self.timeout);\n }\n }\n function ping(retry) {\n if (self.destroyed) {\n return;\n }\n hreq = self._createHandshakeRequest(self._adapter, !retry);\n var payload = [\n HANDSHAKE_REQUEST_TYPE.toBuffer(hreq),\n utils.bufferFrom([0, 0])\n // No header, no data (empty message name).\n ];\n self._writable.write({ id: self._prefix, payload });\n }\n function onPing(obj) {\n if (!self._matchesPrefix(obj.id)) {\n debug(\"discarding unscoped response %s (still connecting)\", obj.id);\n return;\n }\n var buf = Buffer2.concat(obj.payload);\n try {\n var hres = readHead(HANDSHAKE_RESPONSE_TYPE, buf).head;\n if (hres.serverHash) {\n self._adapter = self._getAdapter(hres);\n }\n } catch (cause) {\n self.destroy(cause);\n return;\n }\n var match = hres.match;\n debug(\"handshake match: %s\", match);\n self.emit(\"handshake\", hreq, hres);\n if (match === \"NONE\") {\n process.nextTick(function() {\n ping(true);\n });\n } else {\n debug(\"successfully connected\");\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n self._readable.removeListener(\"data\", onPing).on(\"data\", onMessage);\n self._connected = true;\n self.emit(\"_ready\");\n hreq = null;\n }\n }\n function onMessage(obj) {\n var id = obj.id;\n if (!self._matchesPrefix(id)) {\n debug(\"discarding unscoped message %s\", id);\n return;\n }\n var cb = self._registry.get(id);\n if (cb) {\n process.nextTick(function() {\n debug(\"received message %s\", id);\n cb(null, Buffer2.concat(obj.payload), self._adapter);\n });\n }\n }\n function onEnd() {\n self.destroy(true);\n }\n function onFinish() {\n self.destroy();\n }\n }\n util.inherits(StatefulClientChannel, ClientChannel);\n StatefulClientChannel.prototype._emit = function() {\n if (this._connected || this.draining) {\n ClientChannel.prototype._emit.apply(this, arguments);\n } else {\n debug(\"queuing request\");\n var args = [];\n var i, l;\n for (i = 0, l = arguments.length; i < l; i++) {\n args.push(arguments[i]);\n }\n this.once(\"_ready\", function() {\n this._emit.apply(this, args);\n });\n }\n };\n StatefulClientChannel.prototype._send = function(id, reqBuf, oneWay) {\n if (oneWay) {\n var self = this;\n process.nextTick(function() {\n self._registry.get(id)(null, utils.bufferFrom([0, 0, 0]), self._adapter);\n });\n }\n return this._writable.write({ id, payload: [reqBuf] });\n };\n function ServerChannel(server, opts) {\n opts = opts || {};\n events.EventEmitter.call(this);\n this.server = server;\n this._endWritable = !!utils.getOption(opts, \"endWritable\", true);\n this._prefix = normalizedPrefix(opts.scope);\n var cache = server._cache;\n var svc = server.service;\n var hash = svc.hash;\n if (!cache[hash]) {\n cache[hash] = new Adapter(svc, svc, hash);\n }\n this._adapter = null;\n this.destroyed = false;\n this.draining = false;\n this.pending = 0;\n this.once(\"_eot\", function(pending, err) {\n debug(\"server channel EOT\");\n this.emit(\"eot\", pending, err);\n });\n }\n util.inherits(ServerChannel, events.EventEmitter);\n ServerChannel.prototype.destroy = function(noWait) {\n if (!this.draining) {\n this.draining = true;\n this.emit(\"_drain\");\n }\n if (noWait || !this.pending) {\n this.destroyed = true;\n if (isError(noWait)) {\n debug(\"fatal server channel error: %s\", noWait);\n this.emit(\"_eot\", this.pending, noWait);\n } else {\n this.emit(\"_eot\", this.pending);\n }\n }\n };\n ServerChannel.prototype._createHandshakeResponse = function(err, hreq) {\n var svc = this.server.service;\n var buf = svc.hash;\n var serverMatch = hreq && hreq.serverHash.equals(buf);\n return {\n match: err ? \"NONE\" : serverMatch ? \"BOTH\" : \"CLIENT\",\n serverProtocol: serverMatch ? null : JSON.stringify(svc.protocol),\n serverHash: serverMatch ? null : buf\n };\n };\n ServerChannel.prototype._getAdapter = function(hreq) {\n var hash = hreq.clientHash;\n var adapter = this.server._cache[hash];\n if (adapter) {\n return adapter;\n }\n if (!hreq.clientProtocol) {\n throw toRpcError(\"UNKNOWN_PROTOCOL\");\n }\n var ptcl = JSON.parse(hreq.clientProtocol);\n var clientSvc = Service.forProtocol(ptcl);\n adapter = new Adapter(clientSvc, this.server.service, hash, true);\n return this.server._cache[hash] = adapter;\n };\n ServerChannel.prototype._matchesPrefix = function(id) {\n return matchesPrefix(id, this._prefix);\n };\n ServerChannel.prototype._receive = function(reqBuf, adapter, cb) {\n var self = this;\n var wreq;\n try {\n wreq = adapter._decodeRequest(reqBuf);\n } catch (cause) {\n cb(self._encodeSystemError(toRpcError(\"INVALID_REQUEST\", cause)));\n return;\n }\n var msg = wreq._msg;\n var wres = new WrappedResponse(msg, {});\n if (!msg.name) {\n wres.response = null;\n cb(wres.toBuffer(), false);\n return;\n }\n var ctx = new CallContext(msg, this);\n self.emit(\"incomingCall\", ctx);\n var fns = this.server._fns;\n debug(\"starting server middleware chain (%s middleware)\", fns.length);\n self.pending++;\n chainMiddleware({\n fns,\n ctx,\n wreq,\n wres,\n onTransition,\n onCompletion,\n onError\n });\n function onTransition(wreq2, wres2, prev) {\n var handler = self.server._handlers[msg.name];\n if (!handler) {\n var defaultHandler = self.server._defaultHandler;\n if (defaultHandler) {\n defaultHandler.call(ctx, wreq2, wres2, prev);\n } else {\n var cause = new Error(f2(\"no handler for %s\", msg.name));\n prev(toRpcError(\"NOT_IMPLEMENTED\", cause));\n }\n } else {\n var pending = !msg.oneWay;\n try {\n if (pending) {\n handler.call(ctx, wreq2.request, function(err, res) {\n pending = false;\n wres2.error = err;\n wres2.response = res;\n prev();\n });\n } else {\n handler.call(ctx, wreq2.request);\n prev();\n }\n } catch (err) {\n if (pending) {\n pending = false;\n prev(err);\n } else {\n onError(err);\n }\n }\n }\n }\n function onCompletion(err) {\n self.pending--;\n var server = self.server;\n var resBuf;\n if (!err) {\n var resErr = wres.error;\n var isStrict = server._strict;\n if (!isStrict) {\n if (isError(resErr)) {\n wres.error = msg.errorType.clone(resErr.message, { wrapUnions: true });\n } else if (resErr === null) {\n resErr = wres.error = void 0;\n }\n if (resErr === void 0 && wres.response === void 0 && msg.responseType.isValid(null)) {\n wres.response = null;\n }\n }\n try {\n resBuf = wres.toBuffer();\n } catch (cause) {\n if (wres.error !== void 0) {\n err = serializationError(\n f2(\"invalid %j error\", msg.name),\n // Sic.\n wres,\n [\n { name: \"headers\", type: MAP_BYTES_TYPE },\n { name: \"error\", type: msg.errorType }\n ]\n );\n } else {\n err = serializationError(\n f2(\"invalid %j response\", msg.name),\n wres,\n [\n { name: \"headers\", type: MAP_BYTES_TYPE },\n { name: \"response\", type: msg.responseType }\n ]\n );\n }\n }\n }\n if (!resBuf) {\n resBuf = self._encodeSystemError(err, wres.headers);\n } else if (resErr !== void 0) {\n server.emit(\"error\", toRpcError(\"APPLICATION_ERROR\", resErr));\n }\n cb(resBuf, msg.oneWay);\n if (self.draining && !self.pending) {\n self.destroy();\n }\n }\n function onError(err) {\n self.server.emit(\"error\", err, self);\n }\n };\n utils.addDeprecatedGetters(ServerChannel, [\"pending\"]);\n ServerChannel.prototype.getCache = util.deprecate(\n function() {\n return this.server._cache;\n },\n \"use `.remoteProtocols()` instead of `.getCache()`\"\n );\n ServerChannel.prototype.getProtocol = util.deprecate(\n function() {\n return this.server.service;\n },\n \"use `.service` instead of `.getProtocol()`\"\n );\n ServerChannel.prototype.isDestroyed = util.deprecate(\n function() {\n return this.destroyed;\n },\n \"use `.destroyed` instead of `.isDestroyed`\"\n );\n ServerChannel.prototype._encodeSystemError = function(err, header) {\n var server = this.server;\n server.emit(\"error\", err, this);\n var errStr;\n if (server._sysErrFormatter) {\n errStr = server._sysErrFormatter.call(this, err);\n } else if (err.rpcCode) {\n errStr = err.message;\n }\n var hdrBuf;\n if (header) {\n try {\n hdrBuf = MAP_BYTES_TYPE.toBuffer(header);\n } catch (cause) {\n server.emit(\"error\", cause, this);\n }\n }\n return Buffer2.concat([\n hdrBuf || utils.bufferFrom([0]),\n utils.bufferFrom([1, 0]),\n // Error flag and first union index.\n STRING_TYPE.toBuffer(errStr || \"internal server error\")\n ]);\n };\n function StatelessServerChannel(server, readableFactory, opts) {\n ServerChannel.call(this, server, opts);\n this._writable = void 0;\n var self = this;\n var readable;\n process.nextTick(function() {\n readable = readableFactory.call(self, function(err, writable) {\n process.nextTick(function() {\n if (err) {\n onFinish(err);\n return;\n }\n self._writable = writable.on(\"finish\", onFinish);\n self.emit(\"_writable\");\n });\n }).on(\"data\", onRequest).on(\"end\", onEnd);\n });\n function onRequest(obj) {\n var id = obj.id;\n var buf = Buffer2.concat(obj.payload);\n var err;\n try {\n var parts = readHead(HANDSHAKE_REQUEST_TYPE, buf);\n var hreq = parts.head;\n var adapter = self._getAdapter(hreq);\n } catch (cause) {\n err = toRpcError(\"INVALID_HANDSHAKE_REQUEST\", cause);\n }\n var hres = self._createHandshakeResponse(err, hreq);\n self.emit(\"handshake\", hreq, hres);\n if (err) {\n done(self._encodeSystemError(err));\n } else {\n self._receive(parts.tail, adapter, done);\n }\n function done(resBuf) {\n if (!self.destroyed) {\n if (!self._writable) {\n self.once(\"_writable\", function() {\n done(resBuf);\n });\n return;\n }\n self._writable.write({\n id,\n payload: [HANDSHAKE_RESPONSE_TYPE.toBuffer(hres), resBuf]\n });\n }\n if (self._writable && self._endWritable) {\n self._writable.end();\n }\n }\n }\n function onEnd() {\n self.destroy();\n }\n function onFinish(err) {\n readable.removeListener(\"data\", onRequest).removeListener(\"end\", onEnd);\n self.destroy(err || true);\n }\n }\n util.inherits(StatelessServerChannel, ServerChannel);\n function StatefulServerChannel(server, readable, writable, opts) {\n ServerChannel.call(this, server, opts);\n this._adapter = void 0;\n this._writable = writable.on(\"finish\", onFinish);\n this._readable = readable.on(\"data\", onHandshake).on(\"end\", onEnd);\n this.once(\"_drain\", function() {\n this._readable.removeListener(\"data\", onHandshake).removeListener(\"data\", onRequest).removeListener(\"end\", onEnd);\n }).once(\"eot\", function() {\n this._writable.removeListener(\"finish\", onFinish);\n if (this._endWritable) {\n this._writable.end();\n }\n });\n var self = this;\n function onHandshake(obj) {\n var id = obj.id;\n if (!self._matchesPrefix(id)) {\n return;\n }\n var buf = Buffer2.concat(obj.payload);\n var err;\n try {\n var parts = readHead(HANDSHAKE_REQUEST_TYPE, buf);\n var hreq = parts.head;\n self._adapter = self._getAdapter(hreq);\n } catch (cause) {\n err = toRpcError(\"INVALID_HANDSHAKE_REQUEST\", cause);\n }\n var hres = self._createHandshakeResponse(err, hreq);\n self.emit(\"handshake\", hreq, hres);\n if (err) {\n done(self._encodeSystemError(err));\n } else {\n self._readable.removeListener(\"data\", onHandshake).on(\"data\", onRequest);\n self._receive(parts.tail, self._adapter, done);\n }\n function done(resBuf) {\n if (self.destroyed) {\n return;\n }\n self._writable.write({\n id,\n payload: [HANDSHAKE_RESPONSE_TYPE.toBuffer(hres), resBuf]\n });\n }\n }\n function onRequest(obj) {\n var id = obj.id;\n if (!self._matchesPrefix(id)) {\n return;\n }\n var reqBuf = Buffer2.concat(obj.payload);\n self._receive(reqBuf, self._adapter, function(resBuf, oneWay) {\n if (self.destroyed || oneWay) {\n return;\n }\n self._writable.write({ id, payload: [resBuf] });\n });\n }\n function onEnd() {\n self.destroy();\n }\n function onFinish() {\n self.destroy(true);\n }\n }\n util.inherits(StatefulServerChannel, ServerChannel);\n function WrappedRequest(msg, hdrs, req) {\n this._msg = msg;\n this.headers = hdrs || {};\n this.request = req || {};\n }\n WrappedRequest.prototype.toBuffer = function() {\n var msg = this._msg;\n return Buffer2.concat([\n MAP_BYTES_TYPE.toBuffer(this.headers),\n STRING_TYPE.toBuffer(msg.name),\n msg.requestType.toBuffer(this.request)\n ]);\n };\n function WrappedResponse(msg, hdr, err, res) {\n this._msg = msg;\n this.headers = hdr;\n this.error = err;\n this.response = res;\n }\n WrappedResponse.prototype.toBuffer = function() {\n var hdr = MAP_BYTES_TYPE.toBuffer(this.headers);\n var hasError = this.error !== void 0;\n return Buffer2.concat([\n hdr,\n BOOLEAN_TYPE.toBuffer(hasError),\n hasError ? this._msg.errorType.toBuffer(this.error) : this._msg.responseType.toBuffer(this.response)\n ]);\n };\n function CallContext(msg, channel) {\n this.channel = channel;\n this.locals = {};\n this.message = msg;\n Object.freeze(this);\n }\n function Registry(ctx, prefixLength) {\n this._ctx = ctx;\n this._mask = ~0 >>> (prefixLength | 0);\n this._id = 0;\n this._n = 0;\n this._cbs = {};\n }\n Registry.prototype.get = function(id) {\n return this._cbs[id & this._mask];\n };\n Registry.prototype.add = function(timeout, fn) {\n this._id = this._id + 1 & this._mask;\n var self = this;\n var id = this._id;\n var timer;\n if (timeout > 0) {\n timer = setTimeout(function() {\n cb(new Error(\"timeout\"));\n }, timeout);\n }\n this._cbs[id] = cb;\n this._n++;\n return id;\n function cb() {\n if (!self._cbs[id]) {\n return;\n }\n delete self._cbs[id];\n self._n--;\n if (timer) {\n clearTimeout(timer);\n }\n fn.apply(self._ctx, arguments);\n }\n };\n Registry.prototype.clear = function() {\n Object.keys(this._cbs).forEach(function(id) {\n this._cbs[id](new Error(\"interrupted\"));\n }, this);\n };\n function Adapter(clientSvc, serverSvc, hash, isRemote) {\n this._clientSvc = clientSvc;\n this._serverSvc = serverSvc;\n this._hash = hash;\n this._isRemote = !!isRemote;\n this._readers = createReaders(clientSvc, serverSvc);\n }\n Adapter.prototype._decodeRequest = function(buf) {\n var tap = new Tap(buf);\n var hdr = MAP_BYTES_TYPE._read(tap);\n var name = STRING_TYPE._read(tap);\n var msg, req;\n if (name) {\n msg = this._serverSvc.message(name);\n req = this._readers[name + \"?\"]._read(tap);\n } else {\n msg = PING_MESSAGE;\n }\n if (!tap.isValid()) {\n throw new Error(f2(\"truncated %s request\", name || \"ping$\"));\n }\n return new WrappedRequest(msg, hdr, req);\n };\n Adapter.prototype._decodeResponse = function(buf, wres, msg) {\n var tap = new Tap(buf);\n utils.copyOwnProperties(MAP_BYTES_TYPE._read(tap), wres.headers, true);\n var isError2 = BOOLEAN_TYPE._read(tap);\n var name = msg.name;\n if (name) {\n var reader = this._readers[name + (isError2 ? \"*\" : \"!\")];\n msg = this._clientSvc.message(name);\n if (isError2) {\n wres.error = reader._read(tap);\n } else {\n wres.response = reader._read(tap);\n }\n if (!tap.isValid()) {\n throw new Error(f2(\"truncated %s response\", name));\n }\n } else {\n msg = PING_MESSAGE;\n }\n };\n function FrameDecoder() {\n stream.Transform.call(this, { readableObjectMode: true });\n this._id = void 0;\n this._buf = utils.newBuffer(0);\n this._bufs = [];\n this.on(\"finish\", function() {\n this.push(null);\n });\n }\n util.inherits(FrameDecoder, stream.Transform);\n FrameDecoder.prototype._transform = function(buf, encoding, cb) {\n buf = Buffer2.concat([this._buf, buf]);\n var frameLength;\n while (buf.length >= 4 && buf.length >= (frameLength = buf.readInt32BE(0)) + 4) {\n if (frameLength) {\n this._bufs.push(buf.slice(4, frameLength + 4));\n } else {\n var bufs = this._bufs;\n this._bufs = [];\n this.push({ id: null, payload: bufs });\n }\n buf = buf.slice(frameLength + 4);\n }\n this._buf = buf;\n cb();\n };\n FrameDecoder.prototype._flush = function(cb) {\n if (this._buf.length || this._bufs.length) {\n var bufs = this._bufs.slice();\n bufs.unshift(this._buf);\n var err = toRpcError(\"TRAILING_DATA\");\n err.trailingData = Buffer2.concat(bufs).toString();\n this.emit(\"error\", err);\n }\n cb();\n };\n function FrameEncoder() {\n stream.Transform.call(this, { writableObjectMode: true });\n this.on(\"finish\", function() {\n this.push(null);\n });\n }\n util.inherits(FrameEncoder, stream.Transform);\n FrameEncoder.prototype._transform = function(obj, encoding, cb) {\n var bufs = obj.payload;\n var i, l, buf;\n for (i = 0, l = bufs.length; i < l; i++) {\n buf = bufs[i];\n this.push(intBuffer(buf.length));\n this.push(buf);\n }\n this.push(intBuffer(0));\n cb();\n };\n function NettyDecoder() {\n stream.Transform.call(this, { readableObjectMode: true });\n this._id = void 0;\n this._frameCount = 0;\n this._buf = utils.newBuffer(0);\n this._bufs = [];\n this.on(\"finish\", function() {\n this.push(null);\n });\n }\n util.inherits(NettyDecoder, stream.Transform);\n NettyDecoder.prototype._transform = function(buf, encoding, cb) {\n buf = Buffer2.concat([this._buf, buf]);\n while (true) {\n if (this._id === void 0) {\n if (buf.length < 8) {\n this._buf = buf;\n cb();\n return;\n }\n this._id = buf.readInt32BE(0);\n this._frameCount = buf.readInt32BE(4);\n buf = buf.slice(8);\n }\n var frameLength;\n while (this._frameCount && buf.length >= 4 && buf.length >= (frameLength = buf.readInt32BE(0)) + 4) {\n this._frameCount--;\n this._bufs.push(buf.slice(4, frameLength + 4));\n buf = buf.slice(frameLength + 4);\n }\n if (this._frameCount) {\n this._buf = buf;\n cb();\n return;\n } else {\n var obj = { id: this._id, payload: this._bufs };\n this._bufs = [];\n this._id = void 0;\n this.push(obj);\n }\n }\n };\n NettyDecoder.prototype._flush = FrameDecoder.prototype._flush;\n function NettyEncoder() {\n stream.Transform.call(this, { writableObjectMode: true });\n this.on(\"finish\", function() {\n this.push(null);\n });\n }\n util.inherits(NettyEncoder, stream.Transform);\n NettyEncoder.prototype._transform = function(obj, encoding, cb) {\n var bufs = obj.payload;\n var l = bufs.length;\n var buf;\n buf = utils.newBuffer(8);\n buf.writeInt32BE(obj.id, 0);\n buf.writeInt32BE(l, 4);\n this.push(buf);\n var i;\n for (i = 0; i < l; i++) {\n buf = bufs[i];\n this.push(intBuffer(buf.length));\n this.push(buf);\n }\n cb();\n };\n function intBuffer(n) {\n var buf = utils.newBuffer(4);\n buf.writeInt32BE(n);\n return buf;\n }\n function readHead(type, buf) {\n var tap = new Tap(buf);\n var head = type._read(tap);\n if (!tap.isValid()) {\n throw new Error(f2(\"truncated %j\", type.schema()));\n }\n return { head, tail: tap.buf.slice(tap.pos) };\n }\n function createReader(rtype, wtype) {\n return rtype.equals(wtype) ? rtype : rtype.createResolver(wtype);\n }\n function createReaders(clientSvc, serverSvc) {\n var obj = {};\n clientSvc.messages.forEach(function(c) {\n var n = c.name;\n var s = serverSvc.message(n);\n try {\n if (!s) {\n throw new Error(f2(\"missing server message: %s\", n));\n }\n if (s.oneWay !== c.oneWay) {\n throw new Error(f2(\"inconsistent one-way message: %s\", n));\n }\n obj[n + \"?\"] = createReader(s.requestType, c.requestType);\n obj[n + \"*\"] = createReader(c.errorType, s.errorType);\n obj[n + \"!\"] = createReader(c.responseType, s.responseType);\n } catch (cause) {\n throw toRpcError(\"INCOMPATIBLE_PROTOCOL\", cause);\n }\n });\n return obj;\n }\n function insertRemoteProtocols(cache, ptcls, svc, isClient) {\n Object.keys(ptcls).forEach(function(hash) {\n var ptcl = ptcls[hash];\n var clientSvc, serverSvc;\n if (isClient) {\n clientSvc = svc;\n serverSvc = Service.forProtocol(ptcl);\n } else {\n clientSvc = Service.forProtocol(ptcl);\n serverSvc = svc;\n }\n cache[hash] = new Adapter(clientSvc, serverSvc, hash, true);\n });\n }\n function getRemoteProtocols(cache, isClient) {\n var ptcls = {};\n Object.keys(cache).forEach(function(hs) {\n var adapter = cache[hs];\n if (adapter._isRemote) {\n var svc = isClient ? adapter._serverSvc : adapter._clientSvc;\n ptcls[hs] = svc.protocol;\n }\n });\n return ptcls;\n }\n function isError(any) {\n return !!any && Object.prototype.toString.call(any) === \"[object Error]\";\n }\n function forwardErrors(src, dst) {\n return src.on(\"error\", function(err) {\n dst.emit(\"error\", err, src);\n });\n }\n function toError(msg, cause) {\n var err = new Error(msg);\n err.cause = cause;\n return err;\n }\n function toRpcError(rpcCode, cause) {\n var err = toError(rpcCode.toLowerCase().replace(/_/g, \" \"), cause);\n err.rpcCode = cause && cause.rpcCode ? cause.rpcCode : rpcCode;\n return err;\n }\n function serializationError(msg, obj, fields) {\n var details = [];\n var i, l, field;\n for (i = 0, l = fields.length; i < l; i++) {\n field = fields[i];\n field.type.isValid(obj[field.name], { errorHook });\n }\n var detailsStr = details.map(function(obj2) {\n return f2(\"%s = %j but expected %s\", obj2.path, obj2.value, obj2.type);\n }).join(\", \");\n var err = new Error(f2(\"%s (%s)\", msg, detailsStr));\n err.details = details;\n return err;\n function errorHook(parts, any, type) {\n var strs = [];\n var i2, l2, part;\n for (i2 = 0, l2 = parts.length; i2 < l2; i2++) {\n part = parts[i2];\n if (isNaN(part)) {\n strs.push(\".\" + part);\n } else {\n strs.push(\"[\" + part + \"]\");\n }\n }\n details.push({\n path: field.name + strs.join(\"\"),\n value: any,\n type\n });\n }\n }\n function normalizedPrefix(scope) {\n return scope ? utils.getHash(scope).readInt16BE(0) << 32 - PREFIX_LENGTH : 0;\n }\n function matchesPrefix(id, prefix) {\n return (id ^ prefix) >> 32 - PREFIX_LENGTH === 0;\n }\n function isStream(any) {\n return !!(any && any.pipe);\n }\n function getExistingMessage(svc, name) {\n var msg = svc.message(name);\n if (!msg) {\n throw new Error(f2(\"unknown message: %s\", name));\n }\n return msg;\n }\n function chainMiddleware(params) {\n var args = [params.wreq, params.wres];\n var cbs = [];\n var cause;\n forward(0);\n function forward(pos) {\n var isDone = false;\n if (pos < params.fns.length) {\n params.fns[pos].apply(params.ctx, args.concat(function(err, cb) {\n if (isDone) {\n params.onError(toError(\"duplicate forward middleware call\", err));\n return;\n }\n isDone = true;\n if (err || params.wres && // Non one-way messages.\n (params.wres.error !== void 0 || params.wres.response !== void 0)) {\n cause = err;\n backward();\n return;\n }\n if (cb) {\n cbs.push(cb);\n }\n forward(++pos);\n }));\n } else {\n params.onTransition.apply(params.ctx, args.concat(function(err) {\n if (isDone) {\n params.onError(toError(\"duplicate handler call\", err));\n return;\n }\n isDone = true;\n cause = err;\n process.nextTick(backward);\n }));\n }\n }\n function backward() {\n var cb = cbs.pop();\n if (cb) {\n var isDone = false;\n cb.call(params.ctx, cause, function(err) {\n if (isDone) {\n params.onError(toError(\"duplicate backward middleware call\", err));\n return;\n }\n cause = err;\n isDone = true;\n backward();\n });\n } else {\n params.onCompletion.call(params.ctx, cause);\n }\n }\n }\n module.exports = {\n Adapter,\n HANDSHAKE_REQUEST_TYPE,\n HANDSHAKE_RESPONSE_TYPE,\n Message,\n Registry,\n Service,\n discoverProtocol,\n streams: {\n FrameDecoder,\n FrameEncoder,\n NettyDecoder,\n NettyEncoder\n }\n };\n }\n});\n\n// node_modules/avsc/lib/files.js\nvar require_files = __commonJS({\n \"node_modules/avsc/lib/files.js\"(exports, module) {\n \"use strict\";\n var fs = __import_FS;\n var path = __import_PATH;\n function createImportHook() {\n var imports = {};\n return function(fpath, kind, cb) {\n fpath = path.resolve(fpath);\n if (imports[fpath]) {\n process.nextTick(cb);\n return;\n }\n imports[fpath] = true;\n fs.readFile(fpath, { encoding: \"utf8\" }, cb);\n };\n }\n function createSyncImportHook() {\n var imports = {};\n return function(fpath, kind, cb) {\n fpath = path.resolve(fpath);\n if (imports[fpath]) {\n cb();\n } else {\n imports[fpath] = true;\n cb(null, fs.readFileSync(fpath, { encoding: \"utf8\" }));\n }\n };\n }\n module.exports = {\n createImportHook,\n createSyncImportHook,\n // Proxy a few methods to better shim them for browserify.\n existsSync: fs.existsSync,\n readFileSync: fs.readFileSync\n };\n }\n});\n\n// node_modules/avsc/lib/specs.js\nvar require_specs = __commonJS({\n \"node_modules/avsc/lib/specs.js\"(exports, module) {\n \"use strict\";\n var files = require_files();\n var utils = require_utils();\n var path = __import_PATH;\n var util = __import_UTIL;\n var f2 = util.format;\n var TYPE_REFS = {\n date: { type: \"int\", logicalType: \"date\" },\n decimal: { type: \"bytes\", logicalType: \"decimal\" },\n time_ms: { type: \"long\", logicalType: \"time-millis\" },\n timestamp_ms: { type: \"long\", logicalType: \"timestamp-millis\" }\n };\n function assembleProtocol(fpath, opts, cb) {\n if (!cb && typeof opts == \"function\") {\n cb = opts;\n opts = void 0;\n }\n opts = opts || {};\n if (!opts.importHook) {\n opts.importHook = files.createImportHook();\n }\n importFile(fpath, function(err, protocol) {\n if (err) {\n cb(err);\n return;\n }\n if (!protocol) {\n cb(new Error(\"empty root import\"));\n return;\n }\n var schemas = protocol.types;\n if (schemas) {\n var namespace = protocolNamespace(protocol) || \"\";\n schemas.forEach(function(schema) {\n if (schema.namespace === namespace) {\n delete schema.namespace;\n }\n });\n }\n cb(null, protocol);\n });\n function importFile(fpath2, cb2) {\n opts.importHook(fpath2, \"idl\", function(err, str) {\n if (err) {\n cb2(err);\n return;\n }\n if (str === void 0) {\n cb2();\n return;\n }\n try {\n var reader = new Reader(str, opts);\n var obj = reader._readProtocol(str, opts);\n } catch (err2) {\n err2.path = fpath2;\n cb2(err2);\n return;\n }\n fetchImports(obj.protocol, obj.imports, path.dirname(fpath2), cb2);\n });\n }\n function fetchImports(protocol, imports, dpath, cb2) {\n var importedProtocols = [];\n next();\n function next() {\n var info = imports.shift();\n if (!info) {\n importedProtocols.reverse();\n try {\n importedProtocols.forEach(function(imported) {\n mergeImport(protocol, imported);\n });\n } catch (err) {\n cb2(err);\n return;\n }\n cb2(null, protocol);\n return;\n }\n var importPath = path.join(dpath, info.name);\n if (info.kind === \"idl\") {\n importFile(importPath, function(err, imported) {\n if (err) {\n cb2(err);\n return;\n }\n if (imported) {\n importedProtocols.push(imported);\n }\n next();\n });\n } else {\n opts.importHook(importPath, info.kind, function(err, str) {\n if (err) {\n cb2(err);\n return;\n }\n switch (info.kind) {\n case \"protocol\":\n case \"schema\":\n if (str === void 0) {\n next();\n return;\n }\n try {\n var obj = JSON.parse(str);\n } catch (err2) {\n err2.path = importPath;\n cb2(err2);\n return;\n }\n var imported = info.kind === \"schema\" ? { types: [obj] } : obj;\n importedProtocols.push(imported);\n next();\n return;\n default:\n cb2(new Error(f2(\"invalid import kind: %s\", info.kind)));\n }\n });\n }\n }\n }\n function mergeImport(protocol, imported) {\n var schemas = imported.types || [];\n schemas.reverse();\n schemas.forEach(function(schema) {\n if (!protocol.types) {\n protocol.types = [];\n }\n if (schema.namespace === void 0) {\n schema.namespace = protocolNamespace(imported) || \"\";\n }\n protocol.types.unshift(schema);\n });\n Object.keys(imported.messages || {}).forEach(function(name) {\n if (!protocol.messages) {\n protocol.messages = {};\n }\n if (protocol.messages[name]) {\n throw new Error(f2(\"duplicate message: %s\", name));\n }\n protocol.messages[name] = imported.messages[name];\n });\n }\n }\n function read(str) {\n var schema;\n if (typeof str == \"string\" && ~str.indexOf(path.sep) && files.existsSync(str)) {\n var contents = files.readFileSync(str, { encoding: \"utf8\" });\n try {\n return JSON.parse(contents);\n } catch (err) {\n var opts = { importHook: files.createSyncImportHook() };\n assembleProtocol(str, opts, function(err2, protocolSchema) {\n schema = err2 ? contents : protocolSchema;\n });\n }\n } else {\n schema = str;\n }\n if (typeof schema != \"string\" || schema === \"null\") {\n return schema;\n }\n try {\n return JSON.parse(schema);\n } catch (err) {\n try {\n return Reader.readProtocol(schema);\n } catch (err2) {\n try {\n return Reader.readSchema(schema);\n } catch (err3) {\n return schema;\n }\n }\n }\n }\n function Reader(str, opts) {\n opts = opts || {};\n this._tk = new Tokenizer(str);\n this._ackVoidMessages = !!opts.ackVoidMessages;\n this._implicitTags = !opts.delimitedCollections;\n this._typeRefs = opts.typeRefs || TYPE_REFS;\n }\n Reader.readProtocol = function(str, opts) {\n var reader = new Reader(str, opts);\n var protocol = reader._readProtocol();\n if (protocol.imports.length) {\n throw new Error(\"unresolvable import\");\n }\n return protocol.protocol;\n };\n Reader.readSchema = function(str, opts) {\n var reader = new Reader(str, opts);\n var doc = reader._readJavadoc();\n var schema = reader._readType(doc === void 0 ? {} : { doc }, true);\n reader._tk.next({ id: \"(eof)\" });\n return schema;\n };\n Reader.prototype._readProtocol = function() {\n var tk = this._tk;\n var imports = [];\n var types = [];\n var messages = {};\n var pos;\n this._readImports(imports);\n var protocolSchema = {};\n var protocolJavadoc = this._readJavadoc();\n if (protocolJavadoc !== void 0) {\n protocolSchema.doc = protocolJavadoc;\n }\n this._readAnnotations(protocolSchema);\n tk.next({ val: \"protocol\" });\n if (!tk.next({ val: \"{\", silent: true })) {\n protocolSchema.protocol = tk.next({ id: \"name\" }).val;\n tk.next({ val: \"{\" });\n }\n while (!tk.next({ val: \"}\", silent: true })) {\n if (!this._readImports(imports)) {\n var javadoc = this._readJavadoc();\n var typeSchema = this._readType({}, true);\n var numImports = this._readImports(imports, true);\n var message = void 0;\n pos = tk.pos;\n if (!numImports && (message = this._readMessage(typeSchema))) {\n if (javadoc !== void 0 && message.schema.doc === void 0) {\n message.schema.doc = javadoc;\n }\n var oneWay = false;\n if (message.schema.response === \"void\" || message.schema.response.type === \"void\") {\n oneWay = !this._ackVoidMessages && !message.schema.errors;\n if (message.schema.response === \"void\") {\n message.schema.response = \"null\";\n } else {\n message.schema.response.type = \"null\";\n }\n }\n if (oneWay) {\n message.schema[\"one-way\"] = true;\n }\n if (messages[message.name]) {\n throw new Error(f2(\"duplicate message: %s\", message.name));\n }\n messages[message.name] = message.schema;\n } else {\n if (javadoc) {\n if (typeof typeSchema == \"string\") {\n typeSchema = { doc: javadoc, type: typeSchema };\n } else if (typeSchema.doc === void 0) {\n typeSchema.doc = javadoc;\n }\n }\n types.push(typeSchema);\n tk.pos = pos;\n tk.next({ val: \";\", silent: true });\n }\n javadoc = void 0;\n }\n }\n tk.next({ id: \"(eof)\" });\n if (types.length) {\n protocolSchema.types = types;\n }\n if (Object.keys(messages).length) {\n protocolSchema.messages = messages;\n }\n return { protocol: protocolSchema, imports };\n };\n Reader.prototype._readAnnotations = function(schema) {\n var tk = this._tk;\n while (tk.next({ val: \"@\", silent: true })) {\n var parts = [];\n while (!tk.next({ val: \"(\", silent: true })) {\n parts.push(tk.next().val);\n }\n schema[parts.join(\"\")] = tk.next({ id: \"json\" }).val;\n tk.next({ val: \")\" });\n }\n };\n Reader.prototype._readMessage = function(responseSchema) {\n var tk = this._tk;\n var schema = { request: [], response: responseSchema };\n this._readAnnotations(schema);\n var name = tk.next().val;\n if (tk.next().val !== \"(\") {\n return;\n }\n if (!tk.next({ val: \")\", silent: true })) {\n do {\n schema.request.push(this._readField());\n } while (!tk.next({ val: \")\", silent: true }) && tk.next({ val: \",\" }));\n }\n var token = tk.next();\n switch (token.val) {\n case \"throws\":\n schema.errors = [];\n do {\n schema.errors.push(this._readType());\n } while (!tk.next({ val: \";\", silent: true }) && tk.next({ val: \",\" }));\n break;\n case \"oneway\":\n schema[\"one-way\"] = true;\n tk.next({ val: \";\" });\n break;\n case \";\":\n break;\n default:\n throw tk.error(\"invalid message suffix\", token);\n }\n return { name, schema };\n };\n Reader.prototype._readJavadoc = function() {\n var token = this._tk.next({ id: \"javadoc\", emitJavadoc: true, silent: true });\n if (token) {\n return token.val;\n }\n };\n Reader.prototype._readField = function() {\n var tk = this._tk;\n var javadoc = this._readJavadoc();\n var schema = { type: this._readType() };\n if (javadoc !== void 0 && schema.doc === void 0) {\n schema.doc = javadoc;\n }\n this._readAnnotations(schema);\n schema.name = tk.next({ id: \"name\" }).val;\n if (tk.next({ val: \"=\", silent: true })) {\n schema[\"default\"] = tk.next({ id: \"json\" }).val;\n }\n return schema;\n };\n Reader.prototype._readType = function(schema, top) {\n schema = schema || {};\n this._readAnnotations(schema);\n schema.type = this._tk.next({ id: \"name\" }).val;\n switch (schema.type) {\n case \"record\":\n case \"error\":\n return this._readRecord(schema);\n case \"fixed\":\n return this._readFixed(schema);\n case \"enum\":\n return this._readEnum(schema, top);\n case \"map\":\n return this._readMap(schema);\n case \"array\":\n return this._readArray(schema);\n case \"union\":\n if (Object.keys(schema).length > 1) {\n throw new Error(\"union annotations are not supported\");\n }\n return this._readUnion();\n default:\n var ref = this._typeRefs[schema.type];\n if (ref) {\n delete schema.type;\n utils.copyOwnProperties(ref, schema);\n }\n return Object.keys(schema).length > 1 ? schema : schema.type;\n }\n };\n Reader.prototype._readFixed = function(schema) {\n var tk = this._tk;\n if (!tk.next({ val: \"(\", silent: true })) {\n schema.name = tk.next({ id: \"name\" }).val;\n tk.next({ val: \"(\" });\n }\n schema.size = parseInt(tk.next({ id: \"number\" }).val);\n tk.next({ val: \")\" });\n return schema;\n };\n Reader.prototype._readMap = function(schema) {\n var tk = this._tk;\n var silent = this._implicitTags;\n var implicitTags = tk.next({ val: \"<\", silent }) === void 0;\n schema.values = this._readType();\n tk.next({ val: \">\", silent: implicitTags });\n return schema;\n };\n Reader.prototype._readArray = function(schema) {\n var tk = this._tk;\n var silent = this._implicitTags;\n var implicitTags = tk.next({ val: \"<\", silent }) === void 0;\n schema.items = this._readType();\n tk.next({ val: \">\", silent: implicitTags });\n return schema;\n };\n Reader.prototype._readEnum = function(schema, top) {\n var tk = this._tk;\n if (!tk.next({ val: \"{\", silent: true })) {\n schema.name = tk.next({ id: \"name\" }).val;\n tk.next({ val: \"{\" });\n }\n schema.symbols = [];\n do {\n schema.symbols.push(tk.next().val);\n } while (!tk.next({ val: \"}\", silent: true }) && tk.next({ val: \",\" }));\n if (top && tk.next({ val: \"=\", silent: true })) {\n schema.default = tk.next().val;\n tk.next({ val: \";\" });\n }\n return schema;\n };\n Reader.prototype._readUnion = function() {\n var tk = this._tk;\n var arr = [];\n tk.next({ val: \"{\" });\n do {\n arr.push(this._readType());\n } while (!tk.next({ val: \"}\", silent: true }) && tk.next({ val: \",\" }));\n return arr;\n };\n Reader.prototype._readRecord = function(schema) {\n var tk = this._tk;\n if (!tk.next({ val: \"{\", silent: true })) {\n schema.name = tk.next({ id: \"name\" }).val;\n tk.next({ val: \"{\" });\n }\n schema.fields = [];\n while (!tk.next({ val: \"}\", silent: true })) {\n schema.fields.push(this._readField());\n tk.next({ val: \";\" });\n }\n return schema;\n };\n Reader.prototype._readImports = function(imports, maybeMessage) {\n var tk = this._tk;\n var numImports = 0;\n var pos = tk.pos;\n while (tk.next({ val: \"import\", silent: true })) {\n if (!numImports && maybeMessage && tk.next({ val: \"(\", silent: true })) {\n tk.pos = pos;\n return;\n }\n var kind = tk.next({ id: \"name\" }).val;\n var fname = JSON.parse(tk.next({ id: \"string\" }).val);\n tk.next({ val: \";\" });\n imports.push({ kind, name: fname });\n numImports++;\n }\n return numImports;\n };\n function Tokenizer(str) {\n this._str = str;\n this.pos = 0;\n }\n Tokenizer.prototype.next = function(opts) {\n var token = { pos: this.pos, id: void 0, val: void 0 };\n var javadoc = this._skip(opts && opts.emitJavadoc);\n if (typeof javadoc == \"string\") {\n token.id = \"javadoc\";\n token.val = javadoc;\n } else {\n var pos = this.pos;\n var str = this._str;\n var c = str.charAt(pos);\n if (!c) {\n token.id = \"(eof)\";\n } else {\n if (opts && opts.id === \"json\") {\n token.id = \"json\";\n this.pos = this._endOfJson();\n } else if (c === '\"') {\n token.id = \"string\";\n this.pos = this._endOfString();\n } else if (/[0-9]/.test(c)) {\n token.id = \"number\";\n this.pos = this._endOf(/[0-9]/);\n } else if (/[`A-Za-z_.]/.test(c)) {\n token.id = \"name\";\n this.pos = this._endOf(/[`A-Za-z0-9_.]/);\n } else {\n token.id = \"operator\";\n this.pos = pos + 1;\n }\n token.val = str.slice(pos, this.pos);\n if (token.id === \"json\") {\n try {\n token.val = JSON.parse(token.val);\n } catch (err2) {\n throw this.error(\"invalid JSON\", token);\n }\n } else if (token.id === \"name\") {\n token.val = token.val.replace(/`/g, \"\");\n }\n }\n }\n var err;\n if (opts && opts.id && opts.id !== token.id) {\n err = this.error(f2(\"expected ID %s\", opts.id), token);\n } else if (opts && opts.val && opts.val !== token.val) {\n err = this.error(f2(\"expected value %s\", opts.val), token);\n }\n if (!err) {\n return token;\n } else if (opts && opts.silent) {\n this.pos = token.pos;\n return void 0;\n } else {\n throw err;\n }\n };\n Tokenizer.prototype.error = function(reason, context) {\n var isToken = typeof context != \"number\";\n var pos = isToken ? context.pos : context;\n var str = this._str;\n var lineNum = 1;\n var lineStart = 0;\n var i;\n for (i = 0; i < pos; i++) {\n if (str.charAt(i) === \"\\n\") {\n lineNum++;\n lineStart = i;\n }\n }\n var msg = isToken ? f2(\"invalid token %j: %s\", context, reason) : reason;\n var err = new Error(msg);\n err.token = isToken ? context : void 0;\n err.lineNum = lineNum;\n err.colNum = pos - lineStart;\n return err;\n };\n Tokenizer.prototype._skip = function(emitJavadoc) {\n var str = this._str;\n var isJavadoc = false;\n var pos, c;\n while ((c = str.charAt(this.pos)) && /\\s/.test(c)) {\n this.pos++;\n }\n pos = this.pos;\n if (c === \"/\") {\n switch (str.charAt(this.pos + 1)) {\n case \"/\":\n this.pos += 2;\n while ((c = str.charAt(this.pos)) && c !== \"\\n\") {\n this.pos++;\n }\n return this._skip(emitJavadoc);\n case \"*\":\n this.pos += 2;\n if (str.charAt(this.pos) === \"*\") {\n isJavadoc = true;\n }\n while (c = str.charAt(this.pos++)) {\n if (c === \"*\" && str.charAt(this.pos) === \"/\") {\n this.pos++;\n if (isJavadoc && emitJavadoc) {\n return extractJavadoc(str.slice(pos + 3, this.pos - 2));\n }\n return this._skip(emitJavadoc);\n }\n }\n throw this.error(\"unterminated comment\", pos);\n }\n }\n };\n Tokenizer.prototype._endOf = function(pat) {\n var pos = this.pos;\n var str = this._str;\n while (pat.test(str.charAt(pos))) {\n pos++;\n }\n return pos;\n };\n Tokenizer.prototype._endOfString = function() {\n var pos = this.pos + 1;\n var str = this._str;\n var c;\n while (c = str.charAt(pos)) {\n if (c === '\"') {\n return pos + 1;\n }\n if (c === \"\\\\\") {\n pos += 2;\n } else {\n pos++;\n }\n }\n throw this.error(\"unterminated string\", pos - 1);\n };\n Tokenizer.prototype._endOfJson = function() {\n var pos = utils.jsonEnd(this._str, this.pos);\n if (pos < 0) {\n throw this.error(\"invalid JSON\", pos);\n }\n return pos;\n };\n function extractJavadoc(str) {\n var lines = str.replace(/^[ \\t]+|[ \\t]+$/g, \"\").split(\"\\n\").map(function(line, i) {\n return i ? line.replace(/^\\s*\\*\\s?/, \"\") : line;\n });\n while (lines.length && !lines[0]) {\n lines.shift();\n }\n while (lines.length && !lines[lines.length - 1]) {\n lines.pop();\n }\n return lines.join(\"\\n\");\n }\n function protocolNamespace(protocol) {\n if (protocol.namespace) {\n return protocol.namespace;\n }\n var match = /^(.*)\\.[^.]+$/.exec(protocol.protocol);\n return match ? match[1] : void 0;\n }\n module.exports = {\n Tokenizer,\n assembleProtocol,\n read,\n readProtocol: Reader.readProtocol,\n readSchema: Reader.readSchema\n };\n }\n});\n\n// node_modules/avsc/lib/index.js\nvar require_lib = __commonJS({\n \"node_modules/avsc/lib/index.js\"(exports, module) {\n \"use strict\";\n var containers = require_containers();\n var services = require_services();\n var specs = require_specs();\n var types = require_types();\n var utils = require_utils();\n var buffer = __import_BUFFER;\n var fs = __import_FS;\n var util = __import_UTIL;\n var Buffer2 = buffer.Buffer;\n function parse2(any, opts) {\n var schemaOrProtocol = specs.read(any);\n return schemaOrProtocol.protocol ? services.Service.forProtocol(schemaOrProtocol, opts) : types.Type.forSchema(schemaOrProtocol, opts);\n }\n function extractFileHeader(path, opts) {\n opts = opts || {};\n var decode = opts.decode === void 0 ? true : !!opts.decode;\n var size = Math.max(opts.size || 4096, 4);\n var buf = utils.newBuffer(size);\n var fd = fs.openSync(path, \"r\");\n try {\n var pos = fs.readSync(fd, buf, 0, size);\n if (pos < 4 || !containers.MAGIC_BYTES.equals(buf.slice(0, 4))) {\n return null;\n }\n var tap = new utils.Tap(buf);\n var header = null;\n do {\n header = containers.HEADER_TYPE._read(tap);\n } while (!isValid());\n if (decode !== false) {\n var meta = header.meta;\n meta[\"avro.schema\"] = JSON.parse(meta[\"avro.schema\"].toString());\n if (meta[\"avro.codec\"] !== void 0) {\n meta[\"avro.codec\"] = meta[\"avro.codec\"].toString();\n }\n }\n return header;\n } finally {\n fs.closeSync(fd);\n }\n function isValid() {\n if (tap.isValid()) {\n return true;\n }\n var len = 2 * tap.buf.length;\n var buf2 = utils.newBuffer(len);\n len = fs.readSync(fd, buf2, 0, len);\n tap.buf = Buffer2.concat([tap.buf, buf2]);\n tap.pos = 0;\n return false;\n }\n }\n function createFileDecoder(path, opts) {\n return fs.createReadStream(path).pipe(new containers.streams.BlockDecoder(opts));\n }\n function createFileEncoder(path, schema, opts) {\n var encoder = new containers.streams.BlockEncoder(schema, opts);\n encoder.pipe(fs.createWriteStream(path, { defaultEncoding: \"binary\" }));\n return encoder;\n }\n module.exports = {\n Service: services.Service,\n Type: types.Type,\n assembleProtocol: specs.assembleProtocol,\n createFileDecoder,\n createFileEncoder,\n discoverProtocol: services.discoverProtocol,\n extractFileHeader,\n parse: parse2,\n readProtocol: specs.readProtocol,\n readSchema: specs.readSchema,\n streams: containers.streams,\n types: types.builtins,\n // Deprecated exports.\n Protocol: services.Service,\n assemble: util.deprecate(\n specs.assembleProtocol,\n \"use `assembleProtocol` instead\"\n ),\n combine: util.deprecate(\n types.Type.forTypes,\n \"use `Type.forTypes` intead\"\n ),\n infer: util.deprecate(\n types.Type.forValue,\n \"use `Type.forValue` instead\"\n )\n };\n }\n});\n\n// node_modules/ultralight-s3/lib/index.min.js\nvar N = \"AWS4-HMAC-SHA256\";\nvar K = \"aws4_request\";\nvar O = \"s3\";\nvar v = \"2\";\nvar f = \"UNSIGNED-PAYLOAD\";\nvar W = \"application/octet-stream\";\nvar q = \"application/xml\";\nvar w = \"application/json\";\nvar X = [\"accessKeyId\", \"secretAccessKey\", \"sessionToken\", \"password\"];\nvar E = \"x-amz-content-sha256\";\nvar Z = \"x-amz-date\";\nvar V = \"host\";\nvar J = \"Authorization\";\nvar m = \"Content-Type\";\nvar R = \"Content-Length\";\nvar P = \"etag\";\nvar M = \"last-modified\";\nvar u = \"ultralight-s3 Module: \";\nvar ee = `${u}accessKeyId must be a non-empty string`;\nvar te = `${u}secretAccessKey must be a non-empty string`;\nvar se = `${u}endpoint must be a non-empty string`;\nvar re = `${u}bucketName must be a non-empty string`;\nvar L = `${u}key must be a non-empty string`;\nvar $ = `${u}uploadId must be a non-empty string`;\nvar j = `${u}parts must be a non-empty array`;\nvar k = `${u}Each part must have a partNumber (number) and ETag (string)`;\nvar U = `${u}data must be a Buffer or string`;\nvar B = `${u}prefix must be a string`;\nvar F = `${u}maxKeys must be a positive integer`;\nvar G = `${u}delimiter must be a string`;\nvar z = crypto.createHmac || (await import(\"node:crypto\")).createHmac;\nvar Q = crypto.createHash || (await import(\"node:crypto\")).createHash;\ntypeof z > \"u\" && typeof Q > \"u\" && console.error(\"ultralight-S3 Module: Crypto functions are not available, please report the issue with necessary description: https://github.com/sentienhq/ultralight-s3/issues\");\nvar ne = { contents: true };\nvar oe = (p) => `%${p.charCodeAt(0).toString(16).toUpperCase()}`;\nvar C = (p) => encodeURIComponent(p).replace(/[!'()*]/g, oe);\nvar y = (p) => C(p).replace(/%2F/g, \"/\");\nvar x = class {\n constructor({ accessKeyId: e, secretAccessKey: t, endpoint: r, bucketName: n, region: o = \"auto\", maxRequestSizeInBytes: i = 5242880, requestAbortTimeout: a = void 0, logger: c = void 0 }) {\n this.getBucketName = () => this.bucketName, this.setBucketName = (s) => {\n this.bucketName = s;\n }, this.getRegion = () => this.region, this.setRegion = (s) => {\n this.region = s;\n }, this.getEndpoint = () => this.endpoint, this.setEndpoint = (s) => {\n this.endpoint = s;\n }, this.getMaxRequestSizeInBytes = () => this.maxRequestSizeInBytes, this.setMaxRequestSizeInBytes = (s) => {\n this.maxRequestSizeInBytes = s;\n }, this.sanitizeETag = (s) => I(s), this.getProps = () => ({ accessKeyId: this.accessKeyId, secretAccessKey: this.secretAccessKey, region: this.region, bucket: this.bucketName, endpoint: this.endpoint, maxRequestSizeInBytes: this.maxRequestSizeInBytes, requestAbortTimeout: this.requestAbortTimeout, logger: this.logger }), this.setProps = (s) => {\n this._validateConstructorParams(s.accessKeyId, s.secretAccessKey, s.bucketName, s.endpoint), this.accessKeyId = s.accessKeyId, this.secretAccessKey = s.secretAccessKey, this.region = s.region || \"auto\", this.bucketName = s.bucketName, this.endpoint = s.endpoint, this.maxRequestSizeInBytes = s.maxRequestSizeInBytes || 5242880, this.requestAbortTimeout = s.requestAbortTimeout, this.logger = s.logger;\n }, this._validateConstructorParams(e, t, r, n), this.accessKeyId = e, this.secretAccessKey = t, this.endpoint = r, this.bucketName = n, this.region = o, this.maxRequestSizeInBytes = i, this.requestAbortTimeout = a, this.logger = c;\n }\n _validateConstructorParams(e, t, r, n) {\n if (typeof e != \"string\" || e.trim().length === 0) throw new TypeError(ee);\n if (typeof t != \"string\" || t.trim().length === 0) throw new TypeError(te);\n if (typeof r != \"string\" || r.trim().length === 0) throw new TypeError(se);\n if (typeof n != \"string\" || n.trim().length === 0) throw new TypeError(re);\n }\n _checkMethodHeadnGet(e) {\n if (e !== \"GET\" && e !== \"HEAD\") throw this._log(\"error\", `${u}method must be either GET or HEAD`), new Error(\"method must be either GET or HEAD\");\n }\n _checkKey(e) {\n if (typeof e != \"string\" || e.trim().length === 0) throw this._log(\"error\", L), new TypeError(L);\n }\n _checkDelimiter(e) {\n if (typeof e != \"string\" || e.trim().length === 0) throw this._log(\"error\", G), new TypeError(G);\n }\n _checkPrefix(e) {\n if (typeof e != \"string\") throw this._log(\"error\", B), new TypeError(B);\n }\n _checkMaxKeys(e) {\n if (typeof e != \"number\" || e <= 0) throw this._log(\"error\", F), new TypeError(F);\n }\n _checkOpts(e) {\n if (typeof e != \"object\") throw this._log(\"error\", `${u}opts must be an object`), new TypeError(`${u}opts must be an object`);\n }\n _log(e, t, r = {}) {\n if (this.logger && typeof this.logger[e] == \"function\") {\n let n = (a) => typeof a != \"object\" || a === null ? a : Object.keys(a).reduce((c, s) => (X.includes(s.toLowerCase()) ? c[s] = \"[REDACTED]\" : typeof a[s] == \"object\" && a[s] !== null ? c[s] = n(a[s]) : c[s] = a[s], c), Array.isArray(a) ? [] : {}), o = n(r), i = { timestamp: (/* @__PURE__ */ new Date()).toISOString(), level: e, message: t, ...o, context: n({ bucketName: this.bucketName, region: this.region, endpoint: this.endpoint, accessKeyId: this.accessKeyId ? `${this.accessKeyId.substring(0, 4)}...` : void 0 }) };\n this.logger[e](i);\n }\n }\n async getContentLength(e) {\n this._checkKey(e);\n let t = { [E]: f }, r = y(e), { url: n, headers: o } = await this._sign(\"HEAD\", r, {}, t, \"\"), a = (await this._sendRequest(n, \"HEAD\", o)).headers.get(R);\n return a ? parseInt(a, 10) : 0;\n }\n async bucketExists() {\n let e = { [E]: f }, { url: t, headers: r } = await this._sign(\"HEAD\", \"\", {}, e, \"\"), n = await this._sendRequest(t, \"HEAD\", r, \"\", [200, 404, 403]);\n return this._log(\"error\", `Response status: ${n.status, n.statusText}`), !!(n.ok && n.status === 200);\n }\n async createBucket() {\n let e = `\n \n ${this.region}\n \n `, t = { [m]: q, [R]: Buffer.byteLength(e).toString(), [E]: await A(e) }, r = encodeURI(\"\"), { url: n, headers: o } = await this._sign(\"PUT\", r, {}, t, \"\"), i = await this._sendRequest(n, \"PUT\", o, e, [200, 404, 403]);\n return !!(i.ok && i.status === 200);\n }\n async fileExists(e, t = {}) {\n this._checkKey(e);\n let { filteredOpts: r, conditionalHeaders: n } = this._filterIfHeaders(t), o = { [E]: f, ...n }, i = y(e), { url: a, headers: c } = await this._sign(\"HEAD\", i, r, o, \"\");\n try {\n let s = await this._sendRequest(a, \"HEAD\", c, \"\", [200, 404, 412, 304]);\n return s.status === 404 ? false : s.status === 412 || s.status === 304 ? null : s.ok && s.status === 200 ? true : (this._handleErrorResponse(s), false);\n } catch (s) {\n let l = s instanceof Error ? s.message : String(s);\n throw this._log(\"error\", `${u}Failed to check if file exists: ${l}`), new Error(`${u}Failed to check if file exists: ${l}`);\n }\n }\n async _sign(e, t, r = {}, n, o) {\n let i = (/* @__PURE__ */ new Date()).toISOString().replace(/[:-]|\\.\\d{3}/g, \"\"), a = typeof t == \"string\" && t.length > 0 ? new URL(t, this.endpoint) : new URL(this.endpoint);\n a.pathname = `/${encodeURI(this.bucketName)}${a.pathname}`, n[E] = o ? await A(o) : f, n[Z] = i, n[V] = a.host;\n let c = this._buildCanonicalHeaders(n), s = Object.keys(n).map((_) => _.toLowerCase()).sort().join(\";\"), l = await this._buildCanonicalRequest(e, a, r, c, s, o), h = await this._buildStringToSign(i, l), d = await this._calculateSignature(i, h), g = this._buildAuthorizationHeader(i, s, d);\n return n[J] = g, { url: a.toString(), headers: n };\n }\n _buildCanonicalHeaders(e) {\n return Object.entries(e).map(([t, r]) => `${t.toLowerCase()}:${String(r).trim()}`).sort().join(`\n`);\n }\n async _buildCanonicalRequest(e, t, r, n, o, i) {\n return [e, t.pathname, this._buildCanonicalQueryString(r), `${n}\n`, o, i ? await A(i) : f].join(`\n`);\n }\n async _buildStringToSign(e, t) {\n let r = [e.slice(0, 8), this.region, O, K].join(\"/\");\n return [N, e, r, await A(t)].join(`\n`);\n }\n async _calculateSignature(e, t) {\n let r = await this._getSignatureKey(e.slice(0, 8));\n return H(r, t, \"hex\");\n }\n _buildAuthorizationHeader(e, t, r) {\n let n = [e.slice(0, 8), this.region, O, K].join(\"/\");\n return [`${N} Credential=${this.accessKeyId}/${n}`, `SignedHeaders=${t}`, `Signature=${r}`].join(\", \");\n }\n _filterIfHeaders(e) {\n let t = {}, r = {}, n = [\"if-match\", \"if-none-match\", \"if-modified-since\", \"if-unmodified-since\"];\n for (let [o, i] of Object.entries(e)) n.includes(o) ? r[o] = i : t[o] = i;\n return { filteredOpts: t, conditionalHeaders: r };\n }\n async list(e = \"/\", t = \"\", r = 1e3, n = \"GET\", o = {}) {\n this._checkDelimiter(e), this._checkPrefix(t), this._checkMaxKeys(r), this._checkMethodHeadnGet(n), this._checkOpts(o), this._log(\"info\", `Listing objects in ${t}`);\n let i = { \"list-type\": v, \"max-keys\": String(r), ...o };\n t.length > 0 && (i.prefix = t);\n let a = { [m]: w, [E]: f }, c = e === \"/\" ? e : C(e), { url: s, headers: l } = await this._sign(\"GET\", c, i, a, \"\"), h = `${s}?${new URLSearchParams(i)}`, d = await this._sendRequest(h, \"GET\", l), g = await d.text();\n if (n === \"HEAD\") {\n let T = d.headers.get(R), S = d.headers.get(M), Y = d.headers.get(P);\n return { size: T ? +T : void 0, mtime: S ? new Date(S) : void 0, ETag: Y || void 0 };\n }\n let _ = b(g), D = _.listBucketResult || _.error || _;\n return D.contents || D;\n }\n async listMultiPartUploads(e = \"/\", t = \"\", r = \"GET\", n = {}) {\n var o, i, a;\n this._checkDelimiter(e), this._checkPrefix(t), this._checkMethodHeadnGet(r), this._checkOpts(n), this._log(\"info\", `Listing multipart uploads in ${t}`);\n let c = { uploads: \"\", ...n }, s = { [m]: w, [E]: f }, l = e === \"/\" ? e : C(e), { url: h, headers: d } = await this._sign(\"GET\", l, c, s, \"\"), g = `${h}?${new URLSearchParams(c)}`, _ = await this._sendRequest(g, \"GET\", d), D = await _.text();\n if (r === \"HEAD\") return { size: +((o = _.headers.get(R)) !== null && o !== void 0 ? o : \"0\"), mtime: new Date((i = _.headers.get(M)) !== null && i !== void 0 ? i : \"\"), ETag: (a = _.headers.get(P)) !== null && a !== void 0 ? a : \"\" };\n let T = b(D), S = T.listMultipartUploadsResult || T.error || T;\n return S.uploads || S;\n }\n async get(e, t = {}) {\n this._checkKey(e), this._log(\"info\", `Getting object ${e}`);\n let { filteredOpts: r, conditionalHeaders: n } = this._filterIfHeaders(t), o = { [m]: w, [E]: f, ...n }, i = y(e), { url: a, headers: c } = await this._sign(\"GET\", i, r, o, \"\"), s = await this._sendRequest(a, \"GET\", c, \"\", [200, 404, 412, 304]);\n if (s.status === 404 || s.status === 412 || s.status === 304) return this._log(\"error\", `Failed to get object. Status: ${s.status}`), null;\n if (!s.ok) throw this._log(\"error\", `Failed to get object. Status: ${s.status}`), new Error(`Failed to get object. Status: ${s.status}`);\n return s;\n }\n async getObjectWithETag(e, t = {}) {\n this._checkKey(e), this._log(\"info\", `Getting object ${e}`);\n let { filteredOpts: r, conditionalHeaders: n } = this._filterIfHeaders(t), o = { [m]: w, [E]: f, ...n }, i = y(e), { url: a, headers: c } = await this._sign(\"GET\", i, r, o, \"\");\n try {\n let s = await this._sendRequest(a, \"GET\", c, \"\", [200, 404, 412, 304]);\n if (s.status === 404 || s.status === 412 || s.status === 304) return this._log(\"error\", `Failed to get object. Status: ${s.status}`), { etag: null, data: null };\n if (!s.ok) throw this._log(\"error\", `Failed to get object. Status: ${s.status}`), new Error(`Failed to get object. Status: ${s.status}`);\n let l = s.headers.get(\"etag\");\n if (!l) throw new Error(\"ETag not found in response headers\");\n let h = await s.text();\n return { etag: I(l), data: h };\n } catch (s) {\n throw this._log(\"error\", `Error getting object ${e} with ETag: ${s}`), s;\n }\n }\n async getEtag(e, t = {}) {\n this._checkKey(e), this._log(\"info\", `Getting etag object ${e}`);\n let { filteredOpts: r, conditionalHeaders: n } = this._filterIfHeaders(t), o = { [m]: w, [E]: f, ...n }, i = y(e), { url: a, headers: c } = await this._sign(\"HEAD\", i, r, o, \"\"), s = await this._sendRequest(a, \"HEAD\", c, \"\", [200, 412, 304]);\n if (this._log(\"info\", `Response status: ${s.status, s.statusText}`), s.status === 412 || s.status === 304) return null;\n let l = s.headers.get(\"etag\");\n if (!l) throw this._log(\"error\", \"ETag not found in response headers\"), new Error(\"ETag not found in response headers\");\n return I(l);\n }\n async getResponse(e, t = true, r = 0, n = this.maxRequestSizeInBytes, o = {}) {\n this._checkKey(e);\n let { filteredOpts: i, conditionalHeaders: a } = this._filterIfHeaders({ ...o }), c = { [m]: w, [E]: f, ...t ? {} : { range: `bytes=${r}-${n - 1}` }, ...a }, s = y(e), { url: l, headers: h } = await this._sign(\"GET\", s, i, c, \"\"), d = `${l}?${new URLSearchParams(i)}`;\n return this._sendRequest(d, \"GET\", h);\n }\n async put(e, t) {\n if (this._checkKey(e), !(t instanceof Buffer || typeof t == \"string\")) throw this._log(\"error\", U), new TypeError(U);\n this._log(\"info\", `Uploading object ${e}`);\n let r = typeof t == \"string\" ? Buffer.byteLength(t) : t.length, n = { [R]: r }, o = y(e), { url: i, headers: a } = await this._sign(\"PUT\", o, {}, n, t);\n return this._sendRequest(i, \"PUT\", a, t, [200]);\n }\n async getMultipartUploadId(e, t = W) {\n if (this._checkKey(e), typeof t != \"string\") throw this._log(\"error\", `${u}fileType must be a string`), new TypeError(`${u}fileType must be a string`);\n this._log(\"info\", `Initiating multipart upload for object ${e}`);\n let r = { uploads: \"\" }, n = { [m]: t, [E]: f }, o = y(e), { url: i, headers: a } = await this._sign(\"POST\", o, r, n, \"\"), c = `${i}?${new URLSearchParams(r)}`, l = await (await this._sendRequest(c, \"POST\", a)).text(), h = b(l);\n if (typeof h == \"object\" && h !== null && \"error\" in h && typeof h.error == \"object\" && h.error !== null && \"message\" in h.error) {\n let d = String(h.error.message);\n throw this._log(\"error\", `${u}Failed to abort multipart upload: ${d}`), new Error(`${u}Failed to abort multipart upload: ${d}`);\n }\n if (typeof h == \"object\" && h !== null) {\n if (!h.initiateMultipartUploadResult || !h.initiateMultipartUploadResult.uploadId) throw this._log(\"error\", `${u}Failed to create multipart upload: no uploadId in response`), new Error(`${u}Failed to create multipart upload: Missing upload ID in response`);\n return h.initiateMultipartUploadResult.uploadId;\n } else throw this._log(\"error\", `${u}Failed to create multipart upload: unexpected response format`), new Error(`${u}Failed to create multipart upload: Unexpected response format`);\n }\n async uploadPart(e, t, r, n, o = {}) {\n this._validateUploadPartParams(e, t, r, n, o);\n let i = { uploadId: r, partNumber: n, ...o }, a = { [R]: t.length }, c = y(e), { url: s, headers: l } = await this._sign(\"PUT\", c, i, a, t), h = `${s}?${new URLSearchParams(i)}`, d = await this._sendRequest(h, \"PUT\", l, t), g = I(d.headers.get(\"etag\") || \"\");\n return { partNumber: n, ETag: g };\n }\n _validateUploadPartParams(e, t, r, n, o) {\n if (this._checkKey(e), !(t instanceof Buffer || typeof t == \"string\")) throw this._log(\"error\", U), new TypeError(U);\n if (typeof r != \"string\" || r.trim().length === 0) throw this._log(\"error\", $), new TypeError($);\n if (!Number.isInteger(n) || n <= 0) throw this._log(\"error\", `${u}partNumber must be a positive integer`), new TypeError(`${u}partNumber must be a positive integer`);\n this._checkOpts(o);\n }\n async completeMultipartUpload(e, t, r) {\n if (this._checkKey(e), typeof t != \"string\" || t.trim().length === 0) throw this._log(\"error\", $), new TypeError($);\n if (!Array.isArray(r) || r.length === 0) throw this._log(\"error\", j), new TypeError(j);\n if (!r.every((_) => typeof _.partNumber == \"number\" && typeof _.ETag == \"string\")) throw this._log(\"error\", k), new TypeError(k);\n this._log(\"info\", `Complete multipart upload ${t} for object ${e}`);\n let n = { uploadId: t }, o = this._buildCompleteMultipartUploadXml(r), i = { [m]: q, [R]: Buffer.byteLength(o).toString(), [E]: await A(o) }, a = y(e), { url: c, headers: s } = await this._sign(\"POST\", a, n, i, o), l = `${c}?${new URLSearchParams(n)}`, d = await (await this._sendRequest(l, \"POST\", s, o)).text(), g = b(d);\n if (typeof g == \"object\" && g !== null && \"error\" in g && typeof g.error == \"object\" && g.error !== null && \"message\" in g.error) {\n let _ = String(g.error.message);\n throw this._log(\"error\", `${u}Failed to abort multipart upload: ${_}`), new Error(`${u}Failed to abort multipart upload: ${_}`);\n }\n return g.completeMultipartUploadResult;\n }\n async abortMultipartUpload(e, t) {\n if (this._checkKey(e), typeof t != \"string\" || t.trim().length === 0) throw this._log(\"error\", $), new TypeError($);\n this._log(\"info\", `Aborting multipart upload ${t} for object ${e}`);\n let r = { uploadId: t }, n = { [m]: q, [E]: f };\n try {\n let o = y(e), { url: i, headers: a } = await this._sign(\"DELETE\", o, r, n, \"\"), c = `${i}?${new URLSearchParams(r)}`, s = await this._sendRequest(c, \"DELETE\", a);\n if (s.ok) {\n let l = await s.text(), h = b(l);\n if (typeof h == \"object\" && h !== null && \"error\" in h && typeof h.error == \"object\" && h.error !== null && \"message\" in h.error) {\n let d = String(h.error.message);\n throw this._log(\"error\", `${u}Failed to abort multipart upload: ${d}`), new Error(`${u}Failed to abort multipart upload: ${d}`);\n }\n return { status: \"Aborted\", key: e, uploadId: t, response: h };\n } else throw this._log(\"error\", `${u}Abort request failed with status ${s.status}`), new Error(`${u}Abort request failed with status ${s.status}`);\n } catch (o) {\n let i = o instanceof Error ? o.message : String(o);\n throw this._log(\"error\", `${u}Failed to abort multipart upload for key ${e}: ${i}`), new Error(`${u}Failed to abort multipart upload for key ${e}: ${i}`);\n }\n }\n _buildCompleteMultipartUploadXml(e) {\n return `\n \n ${e.map((t) => `\n \n ${t.partNumber}\n ${t.ETag}\n \n `).join(\"\")}\n \n `;\n }\n async delete(e) {\n this._checkKey(e), this._log(\"info\", `Deleting object ${e}`);\n let t = { [m]: w, [E]: f }, r = y(e), { url: n, headers: o } = await this._sign(\"DELETE\", r, {}, t, \"\"), i = await this._sendRequest(n, \"DELETE\", o);\n return i.status === 204 || i.status === 200;\n }\n async _sendRequest(e, t, r, n, o = []) {\n this._log(\"info\", `Sending ${t} request to ${e}, headers: ${JSON.stringify(r)}`);\n let i = await fetch(e, { method: t, headers: r, body: [\"GET\", \"HEAD\"].includes(t) ? void 0 : n, signal: this.requestAbortTimeout !== void 0 ? AbortSignal.timeout(this.requestAbortTimeout) : void 0 });\n return this._log(\"info\", `Response status: ${i.status, o}`), !i.ok && !o.includes(i.status) && await this._handleErrorResponse(i), i;\n }\n async _handleErrorResponse(e) {\n let t = await e.text(), r = e.headers.get(\"x-amz-error-code\") || \"Unknown\", n = e.headers.get(\"x-amz-error-message\") || e.statusText;\n throw this._log(\"error\", `${u}Request failed with status ${e.status}: ${r} - ${n},err body: ${t}`), new Error(`${u}Request failed with status ${e.status}: ${r} - ${n}, err body: ${t}`);\n }\n _buildCanonicalQueryString(e) {\n return Object.keys(e).length < 1 ? \"\" : Object.keys(e).sort().map((t) => `${encodeURIComponent(t)}=${encodeURIComponent(e[t])}`).join(\"&\");\n }\n async _getSignatureKey(e) {\n let t = await H(`AWS4${this.secretAccessKey}`, e), r = await H(t, this.region), n = await H(r, O);\n return H(n, K);\n }\n};\nvar A = async (p) => {\n let e = Q(\"sha256\");\n return e.update(p), e.digest(\"hex\");\n};\nvar H = async (p, e, t) => {\n let r = z(\"sha256\", p);\n return r.update(e), r.digest(t);\n};\nvar I = (p) => {\n let e = { '\"': \"\", \""\": \"\", \""\": \"\", \""\": \"\", \""\": \"\" };\n return p.replace(/^(\"|"|")|(\"|"|")$/g, (t) => e[t]);\n};\nvar b = (p) => {\n let e = (o) => o.replace(/"/g, '\"').replace(/'/g, \"'\").replace(/</g, \"<\").replace(/>/g, \">\").replace(/&/g, \"&\"), t = {}, r = /<(\\w)([-\\w]+)(?:\\/|[^>]*>((?:(?!<\\1)[\\s\\S])*)<\\/\\1\\2)>/gm, n;\n for (; n = r.exec(p); ) {\n let [, o, i, a] = n, c = o.toLowerCase() + i, s = a != null ? b(a) : true;\n typeof s == \"string\" ? t[c] = I(e(s)) : Array.isArray(t[c]) ? t[c].push(s) : t[c] = t[c] != null ? [t[c], s] : ne[c] ? [s] : s;\n }\n return Object.keys(t).length ? t : e(p);\n};\n\n// src/lowstorage.ts\nvar import_avsc = __toESM(require_lib(), 1);\n\n// src/errors.ts\nvar lowstorage_ERROR_CODES = {\n MISSING_ARGUMENT: \"MISSING_ARGUMENT\",\n COLLECTION_EXISTS: \"COLLECTION_EXISTS\",\n CREATE_COLLECTION_ERROR: \"CREATE_COLLECTION_ERROR\",\n LIST_COLLECTIONS_ERROR: \"LIST_COLLECTIONS_ERROR\",\n RENAME_COLLECTION_ERROR: \"RENAME_COLLECTION_ERROR\",\n REMOVE_COLLECTION_ERROR: \"REMOVE_COLLECTION_ERROR\",\n UPDATE_COLLECTION_SCHEMA_ERROR: \"UPDATE_COLLECTION_SCHEMA_ERROR\",\n COLLECTION_NOT_FOUND: \"COLLECTION_NOT_FOUND\",\n SCHEMA_VALIDATION_ERROR: \"SCHEMA_VALIDATION_ERROR\",\n DOCUMENT_VALIDATION_ERROR: \"DOCUMENT_VALIDATION_ERROR\",\n S3_OPERATION_ERROR: \"S3_OPERATION_ERROR\",\n FIND_ERROR: \"FIND_ERROR\",\n FIND_ONE_ERROR: \"FIND_ONE_ERROR\",\n SAVE_DATA_ERROR: \"SAVE_DATA_ERROR\",\n INSERT_ERROR: \"INSERT_ERROR\",\n UPDATE_ERROR: \"UPDATE_ERROR\",\n UPDATE_ONE_ERROR: \"UPDATE_ONE_ERROR\",\n DELETE_ERROR: \"DELETE_ERROR\",\n COUNT_ERROR: \"COUNT_ERROR\",\n UNKNOWN_ERROR: \"UNKNOWN_ERROR\"\n};\nvar lowstorageError = class extends Error {\n constructor(message, code = lowstorage_ERROR_CODES.UNKNOWN_ERROR) {\n super(`lowstorageError: ${message} :: code: ${code}`);\n this.name = this.constructor.name;\n this.code = code;\n Error.captureStackTrace(this, this.constructor);\n }\n};\nvar SchemaValidationError = class extends lowstorageError {\n constructor(message, code = lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR) {\n super(message, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR);\n }\n};\nvar DocumentValidationError = class extends lowstorageError {\n constructor(message, code = lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR) {\n super(message, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR);\n }\n};\nvar S3OperationError = class extends lowstorageError {\n constructor(message, operation) {\n super(`S3 ${operation} operation failed: ${message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n};\n\n// src/helpers.ts\nimport { randomUUID } from \"node:crypto\";\nvar matchesQuery = (document, query) => {\n return Object.keys(query).every((key) => document[key] === query[key]);\n};\nvar generateUUID = async () => {\n if (typeof randomUUID !== \"undefined\" && typeof randomUUID === \"function\") {\n return randomUUID();\n }\n if (typeof crypto !== \"undefined\" && typeof crypto === \"object\" && typeof crypto.randomUUID === \"function\") {\n return crypto.randomUUID();\n }\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, function(c) {\n var r = Math.random() * 16 | 0, v2 = c === \"x\" ? r : r & 3 | 8;\n return v2.toString(16);\n });\n};\nvar ensureIdFieldInSchema = (schema) => {\n const idField = {\n name: \"_id\",\n type: \"string\",\n size: 16,\n logicalType: \"UUID\"\n };\n if ((typeof schema === \"undefined\" || schema === null) && (typeof schema !== \"object\" || !Array.isArray(schema))) {\n return schema;\n }\n if (\"type\" in schema && schema.type === \"record\" && \"fields\" in schema && Array.isArray(schema.fields)) {\n const hasIdField = schema.fields.some((field) => field.name === \"_id\");\n if (!hasIdField) {\n schema.fields.unshift(idField);\n }\n } else if (\"type\" in schema && schema.type === \"array\" && \"items\" in schema && schema.items !== null && typeof schema.items === \"object\" && \"type\" in schema.items && schema.items.type === \"record\" && \"fields\" in schema.items && Array.isArray(schema.items.fields)) {\n const hasIdField = schema.items.fields.some((field) => field.name === \"_id\");\n if (!hasIdField) {\n schema.items.fields.unshift(idField);\n }\n }\n return schema;\n};\n\n// src/lowstorage.ts\nvar MOD_NAME = \"lowstorage\";\nvar DELIMITER = \"/\";\nvar DIR_PREFIX = \"lowstorage\";\nvar COL_SUFFIX = \".avro\";\nvar CHUNK_1MB = 1024 * 1024;\nvar CHUNK_5MB = 5 * CHUNK_1MB;\nvar EMPTY_DATA = Buffer.from(\"\", \"utf8\");\nvar errorValidationFn = (errorCode = lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR) => {\n throw new DocumentValidationError(`${MOD_NAME}: Invalid document or schema ${errorCode}`);\n};\nvar _hasColName = (colName = \"\") => {\n if (colName.trim() === \"\" || colName === null || typeof colName === \"undefined\" || colName.length > 255) {\n throw new lowstorageError(`Collection name is required, null or too long`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n }\n};\nvar lowstorage = class {\n constructor(options) {\n this._checkArgs = (args) => {\n const requiredFields = [\"accessKeyId\", \"secretAccessKey\", \"endpoint\", \"bucketName\"];\n for (const field of requiredFields) {\n if (!args[field]) {\n throw new lowstorageError(`${field} is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n }\n }\n };\n /**\n * Get the S3 instance associated with the lowstorage instance.\n * @returns {S3} The S3 instance. Use this to perform S3 operations. Check for ultralight-s3 for more details.\n */\n this.s3 = () => {\n return this._s3;\n };\n this._checkArgs(options);\n this._schemas = /* @__PURE__ */ new Map();\n this._s3 = new x(options);\n this._dirPrefix = options.dirPrefix || DIR_PREFIX;\n this._avroParse = import_avsc.Type;\n }\n /**\n * Check if a bucket exists.\n * @returns {Promise} True if the bucket exists, false otherwise.\n * @throws {lowstorageError} If there's an error.\n */\n async checkIfStorageExists() {\n try {\n const exists = await this._s3.bucketExists();\n return !!exists;\n } catch (error) {\n if (error.message.includes(\"Not Found\")) {\n return false;\n }\n throw new lowstorageError(`${error.message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n }\n /**\n * Create a new storage bucket if it doesn't exist.\n * @returns {Promise} A Promise that resolves to true if the bucket was created or already exists, false otherwise.\n * @throws {lowstorageError} If there's an error.\n */\n async createStorage() {\n try {\n const exists = await this.checkIfStorageExists();\n if (!exists) {\n const createdBucket = await this._s3.createBucket();\n return !!createdBucket;\n }\n return exists;\n } catch (error) {\n if (error instanceof lowstorageError) {\n throw error;\n }\n throw new lowstorageError(`${error.message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n }\n /**\n * List all collections.\n * @returns {Promise} An array of collection names.\n * @throws {S3OperationError} If there's an error during S3 operation.\n * @throws {lowstorageError} If there's an error.\n */\n async listCollections() {\n try {\n const listed = await this._s3.list(DELIMITER, this._dirPrefix);\n if (Array.isArray(listed)) {\n return listed.map((entry) => entry.key.slice(this._dirPrefix.length + 1, -COL_SUFFIX.length));\n } else if (typeof listed === \"object\" && listed !== null && \"keyCount\" in listed && listed.keyCount === \"0\") {\n return [];\n }\n return [];\n } catch (error) {\n if (error instanceof S3OperationError) {\n throw error;\n }\n throw new lowstorageError(`${error.message}`, lowstorage_ERROR_CODES.LIST_COLLECTIONS_ERROR);\n }\n }\n /**\n * Check if a collection exists.\n * @param {string} colName - The name of the collection.\n * @returns {Promise} True if the collection exists, false otherwise.\n * @throws {lowstorageError} If there's an error.\n */\n async collectionExists(colName = \"\") {\n try {\n _hasColName(colName);\n const exists = await this._s3.fileExists(`${this._dirPrefix}${DELIMITER}${colName}${COL_SUFFIX}`);\n return !!exists;\n } catch (error) {\n if (error.message.includes(\"Not Found\")) {\n return false;\n }\n throw new lowstorageError(`${error.message}`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND);\n }\n }\n /**\n * Create a new collection.\n * @param {string} colName - The name of the collection.\n * @param {Object} [schema] - The schema for the collection.\n * @param {Array} [data=[]] - The initial data for the collection.\n * @returns {Promise} A Promise that resolves to a Collection object.\n * @throws {lowstorageError} If there's an error.\n */\n async createCollection(colName = \"\", schema, data = []) {\n try {\n _hasColName(colName);\n const exists = await this.collectionExists(colName);\n if (!exists) {\n if (typeof schema !== \"undefined\" && schema !== null) {\n try {\n const type = this._avroParse.forSchema(schema);\n if (!type) {\n throw new SchemaValidationError(`Schema is invalid: ${schema}`, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR);\n } else {\n this._schemas.set(colName, schema);\n }\n } catch (error) {\n throw new SchemaValidationError(\n `Schema is invalid: ${error.message} in ${schema} `,\n lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR\n );\n }\n }\n if (data.length > 0 && schema) {\n const wrapperType = this._avroParse.forSchema({ type: \"array\", items: schema });\n await this._s3.put(`${this._dirPrefix}${DELIMITER}${colName}${COL_SUFFIX}`, wrapperType.toBuffer(data));\n } else {\n await this._s3.put(`${this._dirPrefix}${DELIMITER}${colName}${COL_SUFFIX}`, EMPTY_DATA);\n }\n return this.collection(colName, schema, false);\n }\n throw new lowstorageError(`Collection ${colName} already exists`, lowstorage_ERROR_CODES.COLLECTION_EXISTS);\n } catch (error) {\n if (error instanceof SchemaValidationError) {\n throw error;\n }\n throw new lowstorageError(`${error.message}`, lowstorage_ERROR_CODES.CREATE_COLLECTION_ERROR);\n }\n }\n /**\n * Remove a collection.\n * @param {string} colName - The name of the collection.\n * @returns {Promise} A Promise that resolves to true if the collection is removed, false otherwise.\n * @throws {lowstorageError} If there's an error.\n */\n async removeCollection(colName = \"\") {\n try {\n _hasColName(colName);\n const exists = await this.collectionExists(colName);\n if (exists) {\n await this._s3.delete(`${this._dirPrefix}${DELIMITER}${colName}${COL_SUFFIX}`);\n const exists2 = await this.collectionExists(colName);\n if (typeof exists2 === \"boolean\") {\n if (!exists2) {\n this._schemas.delete(colName);\n return true;\n }\n throw new lowstorageError(`Failed to delete collection ${colName}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n throw new S3OperationError(`${MOD_NAME}: Failed to delete collection ${colName}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n throw new lowstorageError(`Collection ${colName} does not exist`, lowstorage_ERROR_CODES.REMOVE_COLLECTION_ERROR);\n } catch (error) {\n if (error instanceof S3OperationError) {\n throw error;\n }\n throw new lowstorageError(`Failed to remove collection: ${error.message}`, lowstorage_ERROR_CODES.REMOVE_COLLECTION_ERROR);\n }\n }\n /**\n * Get or create a collection.\n * @param {string} colName - The name of the collection.\n * @param {Object} [schema] - The schema for the collection.\n * @param {boolean} [autoCreate=true] - Whether to automatically create the collection if it doesn't exist.\n * @returns {Promise} A Promise that resolves to a Collection object.\n * @throws {lowstorageError} If there's an error.\n */\n async collection(colName = \"\", schema, autoCreate = true) {\n try {\n _hasColName(colName);\n const colPath = `${this._dirPrefix}${DELIMITER}${colName}${COL_SUFFIX}`;\n const exists = await this._s3.fileExists(colPath);\n if (!exists) {\n if (!autoCreate) {\n throw new lowstorageError(`Collection ${colName} does not exist`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND);\n }\n await this._s3.put(colPath, EMPTY_DATA);\n }\n const colSchema = schema || this._schemas.get(colName) || void 0;\n return new Collection(colName, colSchema, this._s3, this._dirPrefix);\n } catch (error) {\n if (error.message.includes(\"unknown type\")) {\n throw new SchemaValidationError(`Schema input is invalid: ${error.message}`, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR);\n }\n if (error instanceof lowstorageError) {\n throw error;\n }\n throw new lowstorageError(`${error.message}`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND);\n }\n }\n};\nvar Collection = class _Collection {\n constructor(colName = \"\", schema, s3, dirPrefix = DIR_PREFIX, safeWrite = false, chunkSize = CHUNK_5MB) {\n this.getProps = () => ({\n colName: this._colName,\n s3: this._s3,\n schema: this._schema,\n avroParse: this._avroParse,\n avroType: this._avroType,\n dirPrefix: this._dirPrefix,\n safeWrite: this._safeWrite,\n chunkSize: this._chunkSize\n });\n this.setProps = (props) => {\n this._colName = props.colName;\n this._schema = props.schema;\n this._s3 = props.s3;\n this._avroParse = props.avroParse;\n this._avroType = props.avroType;\n this._dirPrefix = props.dirPrefix;\n this._safeWrite = props.safeWrite;\n this._chunkSize = props.chunkSize;\n };\n this.setSafeWrite = (safeWrite) => {\n this._safeWrite = safeWrite;\n };\n this.getSafeWrite = () => {\n return this._safeWrite;\n };\n this.getAvroSchema = () => {\n return this._schema;\n };\n this.setAvroSchema = (schema) => {\n try {\n this._schema = ensureIdFieldInSchema(schema);\n this._avroType = typeof schema === \"undefined\" ? null : this._avroParse.forSchema(schema);\n } catch (error) {\n throw new SchemaValidationError(`Schema is invalid: ${error.message}`, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR);\n }\n };\n this.getCollectionETag = () => {\n return this._lastETag;\n };\n this.inferAvroSchema = (data, type = \"record\") => {\n if (Array.isArray(data)) {\n data = data[0];\n }\n const inferedType = this._avroParse.forValue(data);\n const schema = inferedType.schema();\n return ensureIdFieldInSchema(schema);\n };\n this._colName = colName.trim();\n this._s3 = s3;\n this._schema = ensureIdFieldInSchema(schema);\n this._dirPrefix = dirPrefix;\n this._safeWrite = safeWrite;\n this._chunkSize = chunkSize || CHUNK_5MB;\n this._s3.setMaxRequestSizeInBytes(this._chunkSize);\n this._avroParse = import_avsc.Type;\n this._lastETag = \"\";\n this._dataCache = [];\n this._avroType = typeof schema === \"undefined\" ? null : this._avroParse.forSchema(schema);\n this._key = `${this._dirPrefix}${DELIMITER}${this._colName}${COL_SUFFIX}`;\n }\n async forceLoadData() {\n try {\n this._lastETag = \"\";\n const data = await this._loadData();\n this._dataCache = data;\n return true;\n } catch (error) {\n throw new lowstorageError(`Failed to force update data: ${error.message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n }\n async _loadData() {\n try {\n if (this._avroType === null || typeof this._avroType === \"undefined\") {\n throw new lowstorageError(`Missing type definition. Configure before operations `, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR);\n }\n const { etag, data } = await this._s3.getObjectWithETag(this._key, { \"if-none-match\": this._lastETag });\n if (data === null) {\n return this._dataCache;\n }\n this._lastETag = etag === null ? this._lastETag : etag;\n const wrapperType = this._avroParse.forSchema({ type: \"array\", items: this._avroType });\n if (data.length < this._chunkSize) {\n this._dataCache = data.length > 0 ? wrapperType.fromBuffer(Buffer.from(data, \"utf8\")) : [];\n return this._dataCache;\n }\n let offset = this._chunkSize;\n let bufferArr = [Buffer.from(data, \"utf8\")];\n let repeat = true;\n while (repeat) {\n const nextDataResponse = await this._s3.getResponse(this._key, false, offset, offset + this._chunkSize);\n const nextDataBody = await nextDataResponse.text();\n bufferArr.push(Buffer.from(nextDataBody, \"utf8\"));\n offset += this._chunkSize;\n const contentLength = parseInt(nextDataResponse.headers.get(\"content-length\") || nextDataBody.length.toString());\n if (contentLength < this._chunkSize) {\n repeat = false;\n }\n }\n const bufferedData = Buffer.concat(bufferArr);\n this._dataCache = wrapperType.fromBuffer(bufferedData);\n return this._dataCache;\n } catch (error) {\n if (error.toString().indexOf(\"status 404: Unknown - Not Found\") > -1) {\n this._dataCache = [];\n return this._dataCache;\n }\n throw new S3OperationError(`${MOD_NAME}: Failed to load data: ${error.message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n }\n async _saveData(data) {\n try {\n if (this._avroType === null || typeof this._avroType === \"undefined\") {\n throw new lowstorageError(`Missing type definition. Configure before operations `, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR);\n }\n const wrapperType = this._avroParse.forSchema({ type: \"array\", items: this._avroType });\n const dataBuffer = data.length > 0 ? wrapperType.toBuffer(data) : EMPTY_DATA;\n if (this._safeWrite && this._lastETag !== \"\") {\n const currentETag = await this._s3.getEtag(this._key);\n if (currentETag !== null && currentETag !== this._lastETag) {\n return false;\n }\n }\n const resp = await this._s3.put(this._key, dataBuffer);\n if (typeof resp === \"object\" && \"status\" in resp && resp.status !== 200) {\n throw new S3OperationError(`${MOD_NAME}: Failed to save data`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n const newETag = resp.headers?.get(\"etag\") || \"\";\n if (newETag && newETag.length > 0) {\n this._lastETag = this._s3.sanitizeETag(newETag);\n this._dataCache = data;\n }\n return true;\n } catch (error) {\n if (error instanceof S3OperationError || error instanceof lowstorageError) {\n throw error;\n }\n throw new lowstorageError(`${error.message}`, lowstorage_ERROR_CODES.SAVE_DATA_ERROR);\n }\n }\n /**\n * Insert a document into the collection.\n * @param {Object|Array} doc - The document to insert.\n * @param {Object} [schema=undefined] - The schema for the document.\n * @returns {Promise} A Promise that resolves to the array of inserted document(s).\n * @throws {lowstorageError} If there's an error.\n */\n async insert(doc, schema) {\n try {\n if (doc === void 0 || doc === null) {\n throw new lowstorageError(`Document is required for insert`, lowstorage_ERROR_CODES.INSERT_ERROR);\n }\n if (typeof doc !== \"object\" && !Array.isArray(doc)) {\n throw new DocumentValidationError(\n `${MOD_NAME}: Document must be an object or an array`,\n lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR\n );\n }\n const items = !Array.isArray(doc) ? [doc] : doc;\n const schemaWithId = schema ? ensureIdFieldInSchema(schema) : this._schema || this.inferAvroSchema(items[0]);\n const avroType = this._avroParse.forSchema(schemaWithId);\n if (!avroType) {\n throw new SchemaValidationError(\n `Schema is required - Pass a schema to the insert method`,\n lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR\n );\n }\n this._avroType = avroType;\n const data = await this._loadData();\n for (let item of items) {\n if (typeof item !== \"object\" || item === null) {\n throw new DocumentValidationError(\n `${MOD_NAME}: Invalid input: input must be an object or an array of objects`,\n lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR\n );\n }\n item._id = item._id || await generateUUID();\n const validBuffer = this._avroType.isValid(item, {\n errorHook: errorValidationFn,\n noUndeclaredFields: true\n });\n if (validBuffer === true) {\n data.push(item);\n } else {\n throw new DocumentValidationError(`${MOD_NAME}: Invalid document or schema`, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR);\n }\n }\n const success = await this._saveData(data);\n if (!success) {\n throw new S3OperationError(`${MOD_NAME}: Failed to insert document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n this.setAvroSchema(schemaWithId);\n return items;\n } catch (error) {\n if (error.message.includes(\"unknown type\")) {\n throw new SchemaValidationError(`Schema input is invalid: ${error.message}`, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR);\n }\n if (error instanceof lowstorageError) {\n throw error;\n }\n throw new lowstorageError(`Insert operation failed: ${error.message}`, lowstorage_ERROR_CODES.INSERT_ERROR);\n }\n }\n /**\n * Find documents in the collection.\n * @param {Object} [query={}] - The query to filter documents.\n * @param {Object} [options={}] - The options for pagination.\n * @param {number} [options.skip=0] - The number of documents to skip. Default is 0.\n * @param {number} [options.limit=undefined] - The maximum number of documents to return. Default is undefined, which means no limit.\n * @returns {Promise} A Promise that resolves to an array of matching documents.\n * @throws {lowstorageError} If there's an error.\n */\n async find(query = {}, options = {}) {\n try {\n if (query === void 0 || query === null) {\n throw new lowstorageError(`Query is required for update`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n }\n const data = await this._loadData();\n const start = options.skip !== void 0 ? parseInt(String(options.skip), 10) : 0;\n const end = options.limit !== void 0 ? start + parseInt(String(options.limit), 10) : void 0;\n const filteredData = data.filter((doc) => matchesQuery(doc, query)).slice(start, end);\n return filteredData;\n } catch (error) {\n throw new lowstorageError(`Find operation failed: ${error.message}`, lowstorage_ERROR_CODES.FIND_ERROR);\n }\n }\n /**\n * Find the first document in the collection that matches the query.\n * @param {Object} [query={}] - The query to filter documents.\n * @returns {Promise} A Promise that resolves to the first matching document or null if no match is found.\n * @throws {lowstorageError} If there's an error.\n */\n async findOne(query = {}) {\n try {\n if (query === null) {\n throw new lowstorageError(`${MOD_NAME}: Query cannot be null`, lowstorage_ERROR_CODES.INVALID_ARGUMENT);\n }\n const result = await this.find(query, { limit: 1 });\n return result[0] || null;\n } catch (error) {\n if (error instanceof lowstorageError) {\n throw error;\n }\n throw new lowstorageError(`${MOD_NAME}: FindOne operation failed: ${error.message}`, lowstorage_ERROR_CODES.FIND_ONE_ERROR);\n }\n }\n /**\n * Update a single document in the collection that matches the query.\n * @param {Object} [query={}] - The query to filter the document to update.\n * @param {Object} [update={}] - The update operations to apply to the matching document.\n * @returns {Promise} A Promise that resolves to number of documents updated.\n * @throws {lowstorageError} If the updateOne operation fails.\n * @throws {SchemaValidationError} If the schema is not defined for the collection.\n * @throws {DocumentValidationError} If the updated document is invalid.\n * @throws {S3OperationError} If the S3 operation fails.\n */\n async update(query = {}, update = {}, options = {}) {\n try {\n if (query === void 0 || query === null || update === void 0 || update === null) {\n throw new lowstorageError(`Query and update values are required for update`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n }\n if (!this._avroType) {\n throw new SchemaValidationError(`Schema is not defined for this collection`, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR);\n }\n const data = await this._loadData();\n if (data.length === 0) return 0;\n let updatedCount = 0;\n for (let i = 0; i < data.length; i++) {\n if (matchesQuery(data[i], query)) {\n const updatedDoc = { ...data[i], ...update };\n const isValid = this._avroType.isValid(updatedDoc, {\n errorHook: errorValidationFn,\n noUndeclaredFields: true\n });\n if (isValid === true) {\n data[i] = updatedDoc;\n updatedCount++;\n } else {\n throw new DocumentValidationError(`${MOD_NAME}: Invalid document or schema`, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR);\n }\n }\n }\n if (updatedCount > 0) {\n const success = await this._saveData(data);\n if (!success) {\n throw new S3OperationError(`${MOD_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n } else if (options && \"upsert\" in options && options.upsert) {\n const success = await this.insert(update);\n if (!success) {\n throw new S3OperationError(`${MOD_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n updatedCount = 1;\n }\n return updatedCount;\n } catch (error) {\n if (error instanceof S3OperationError) {\n throw error;\n }\n throw new lowstorageError(`Update operation failed: ${error.message}`, lowstorage_ERROR_CODES.UPDATE_ERROR);\n }\n }\n /**\n * Update a single document in the collection that matches the query.\n * @param {Object} [query={}] - The query to filter the document to update.\n * @param {Object} [update={}] - The update operations to apply to the matching document.\n * @returns {Promise} A Promise that resolves to 1 if a document was updated, 0 otherwise.\n /**\n * Update a single document in the collection that matches the query.\n * @throws {lowstorageError} If the updateOne operation fails.\n * @throws {SchemaValidationError} If the schema is not defined for the collection.\n * @throws {DocumentValidationError} If the updated document is invalid.\n * @throws {S3OperationError} If the S3 operation fails.\n */\n async updateOne(query = {}, update = {}, options = {}) {\n try {\n if (query === void 0 || query === null || update === void 0 || update === null) {\n throw new lowstorageError(`Query is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n }\n if (!this._avroType) {\n throw new SchemaValidationError(`Schema is not defined for this collection`, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR);\n }\n const data = await this._loadData();\n if (data.length === 0) return 0;\n const docIndex = data.findIndex((doc) => matchesQuery(doc, query));\n if (docIndex !== -1) {\n const updatedDoc = { ...data[docIndex], ...update };\n const isValid = this._avroType.isValid(updatedDoc, {\n errorHook: errorValidationFn,\n noUndeclaredFields: true\n });\n if (isValid === true) {\n data[docIndex] = updatedDoc;\n const success = await this._saveData(data);\n if (!success) {\n throw new S3OperationError(`${MOD_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n return 1;\n } else {\n throw new DocumentValidationError(`${MOD_NAME}: Invalid document or schema`, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR);\n }\n }\n if (options && \"upsert\" in options && options.upsert) {\n const success = await this.insert(update);\n if (!success) {\n throw new S3OperationError(`${MOD_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n return 1;\n }\n return 0;\n } catch (error) {\n if (error instanceof lowstorageError) {\n throw error;\n }\n throw new lowstorageError(`UpdateOne operation failed: ${error.message}`, lowstorage_ERROR_CODES.UPDATE_ONE_ERROR);\n }\n }\n /**\n * Delete documents from the collection.\n * @param {Object} [query={}] - The query to filter documents to delete.\n * @returns {Promise} A Promise that resolves to the number of documents deleted.\n * @throws {lowstorageError} If the delete operation fails.\n * @throws {S3OperationError} If the S3 operation fails.\n */\n async delete(query = {}) {\n try {\n if (query === void 0 || query === null) {\n throw new lowstorageError(`Query is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT);\n }\n const data = await this._loadData();\n if (data.length === 0) return 0;\n const initialLength = data.length;\n const newData = data.filter((doc) => !matchesQuery(doc, query));\n const success = await this._saveData(newData);\n if (!success) {\n throw new S3OperationError(`${MOD_NAME}: Failed to delete document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n return initialLength - newData.length;\n } catch (error) {\n if (error instanceof S3OperationError) {\n throw error;\n }\n throw new lowstorageError(`Delete operation failed: ${error.message}`, lowstorage_ERROR_CODES.DELETE_ERROR);\n }\n }\n /**\n * Delete all documents from the collection.\n * @returns {Promise} A Promise that resolves to the number of documents deleted.\n * @throws {lowstorageError} If the delete operation fails.\n * @throws {S3OperationError} If the S3 operation fails.\n */\n async deleteAll() {\n try {\n const data = await this._loadData();\n const initialLength = data.length;\n const success = await this._saveData([]);\n if (!success) {\n throw new S3OperationError(`${MOD_NAME}: Failed to delete document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR);\n }\n return initialLength;\n } catch (error) {\n if (error instanceof S3OperationError) {\n throw error;\n }\n throw new lowstorageError(`Delete operation failed: ${error.message}`, lowstorage_ERROR_CODES.DELETE_ERROR);\n }\n }\n /**\n * Count the number of documents in the collection.\n * @param {Object} [query={}] - The query to filter documents.\n * @returns {Promise} A Promise that resolves to the number of documents in the collection.\n * @throws {lowstorageError} If the count operation fails.\n */\n async count(query = {}) {\n try {\n const data = await this.find(query);\n return data.length;\n } catch (error) {\n throw new lowstorageError(`Count operation failed: ${error.message}`, lowstorage_ERROR_CODES.COUNT_ERROR);\n }\n }\n async renameCollection(newColName, newSchema = this._schema) {\n try {\n _hasColName(newColName);\n const exists = await this._s3.fileExists(`${this._dirPrefix}${DELIMITER}${newColName}${COL_SUFFIX}`);\n if (!!exists) {\n throw new lowstorageError(`${MOD_NAME}: Collection ${newColName} already exists`, lowstorage_ERROR_CODES.COLLECTION_EXISTS);\n }\n const schema = newSchema || this.getAvroSchema();\n const data = await this._loadData();\n const createNew = new _Collection(newColName, schema, this._s3, this._dirPrefix, this._safeWrite, this._chunkSize);\n await createNew._saveData(data);\n await this._s3.delete(`${this._dirPrefix}${DELIMITER}${this._colName}${COL_SUFFIX}`);\n return createNew;\n } catch (error) {\n if (error instanceof lowstorageError) {\n throw error;\n }\n throw new lowstorageError(`Rename collection failed: ${error.message}`, lowstorage_ERROR_CODES.RENAME_COLLECTION_ERROR);\n }\n }\n};\nexport {\n lowstorage,\n lowstorageError,\n lowstorage_ERROR_CODES\n};\n\n"], + "mappings": "AAAA,OAAOA,OAAqB,SAC5B,OAAOC,OAAqB,SAC5B,OAAOC,OAAmB,OAC1B,OAAOC,OAAqB,SAC5B,OAAOC,OAAmB,OAC1B,OAAOC,OAAqB,SAC5B,OAAOC,OAAiB,KACxB,OAAOC,OAAmB,OAqyN1B,OAAS,cAAAC,OAAkB,cAnyN3B,IAAIC,GAAW,OAAO,OAClBC,GAAY,OAAO,eACnBC,GAAmB,OAAO,yBAC1BC,GAAoB,OAAO,oBAC3BC,GAAe,OAAO,eACtBC,GAAe,OAAO,UAAU,eAOpC,IAAIC,GAAa,CAACC,EAAIC,IAAQ,UAAsB,CAClD,OAAOA,MAAWD,EAAGE,GAAkBF,CAAE,EAAE,CAAC,CAAC,IAAIC,EAAM,CAAE,QAAS,CAAC,CAAE,GAAG,QAASA,CAAG,EAAGA,EAAI,OAC7F,EACIE,GAAc,CAACC,EAAIC,EAAMC,EAAQC,IAAS,CAC5C,GAAIF,GAAQ,OAAOA,GAAS,UAAY,OAAOA,GAAS,WACtD,QAASG,KAAON,GAAkBG,CAAI,EAChC,CAACI,GAAa,KAAKL,EAAII,CAAG,GAAKA,IAAQF,GACzCI,GAAUN,EAAII,EAAK,CAAE,IAAK,IAAMH,EAAKG,CAAG,EAAG,WAAY,EAAED,EAAOI,GAAiBN,EAAMG,CAAG,IAAMD,EAAK,UAAW,CAAC,EAEvH,OAAOH,CACT,EACIQ,GAAU,CAACX,EAAKY,EAAYC,KAAYA,EAASb,GAAO,KAAOc,GAASC,GAAaf,CAAG,CAAC,EAAI,CAAC,EAAGE,GAKnGU,GAAc,CAACZ,GAAO,CAACA,EAAI,WAAaS,GAAUI,EAAQ,UAAW,CAAE,MAAOb,EAAK,WAAY,EAAK,CAAC,EAAIa,EACzGb,CACF,GAGIgB,GAAgBlB,GAAW,CAC7B,iCAAiCmB,EAASC,EAAQ,CAChD,aACA,IAAIC,EAASC,GACTC,EAAUC,GACVC,EAAOC,GACPC,EAAUN,EAAO,OACjBO,EAAO,IAAIC,EAAW,IAAI,EAC1BC,EAAe,2BACfC,EAAKN,EAAK,OACd,SAASO,EAAUC,EAAM,CACvB,OAAI,OAAON,EAAQ,OAAS,WACnBA,EAAQ,MAAMM,CAAI,EAElB,IAAIN,EAAQM,CAAI,CAE3B,CACA,SAASC,EAAWC,EAAMC,EAAK,CAC7B,OAAI,OAAOT,EAAQ,MAAQ,WAClBA,EAAQ,KAAKQ,EAAMC,CAAG,EAEtB,IAAIT,EAAQQ,EAAMC,CAAG,CAEhC,CACA,SAASC,EAAWC,EAAG,CACrB,OAAOA,EAAE,OAAO,CAAC,EAAE,YAAY,EAAIA,EAAE,MAAM,CAAC,CAC9C,CACA,SAASC,EAAQC,EAAIC,EAAI,CACvB,OAAOD,IAAOC,EAAK,EAAID,EAAKC,EAAK,GAAK,CACxC,CACA,SAASC,GAAUC,EAAMlC,EAAKmC,EAAK,CACjC,IAAIC,EAAQF,EAAKlC,CAAG,EACpB,OAAOoC,IAAU,OAASD,EAAMC,CAClC,CACA,SAASC,EAAQC,EAAKC,EAAW,CAC/BA,EAAYA,GAAa,MACzB,IAAIC,EAAO1B,EAAQ,WAAWyB,CAAS,EACvC,OAAAC,EAAK,IAAIF,CAAG,EACLE,EAAK,KAAK,CACnB,CACA,SAASC,EAAcC,EAAKC,EAAI,CAC9B,IAAIC,EAAM,GACNC,EAAGC,EACP,GAAI,CAACJ,EACH,MAAO,GAET,IAAKG,EAAI,EAAGC,EAAIJ,EAAI,OAAQG,EAAIC,EAAGD,IACjC,GAAIH,EAAIG,CAAC,IAAMF,EAAI,CACjB,GAAIC,GAAO,EACT,MAAO,GAETA,EAAMC,CACR,CAEF,OAAOD,CACT,CACA,SAASG,EAAML,EAAKM,EAAI,CACtB,IAAIC,EAAM,CAAC,EACPJ,EAAGK,EACP,IAAKL,EAAI,EAAGA,EAAIH,EAAI,OAAQG,IAC1BK,EAAOR,EAAIG,CAAC,EACZI,EAAID,EAAGE,CAAI,CAAC,EAAIA,EAElB,OAAOD,CACT,CACA,SAASE,EAAaF,EAAK,CACzB,OAAO,OAAO,KAAKA,CAAG,EAAE,IAAI,SAASjD,EAAK,CACxC,OAAOiD,EAAIjD,CAAG,CAChB,CAAC,CACH,CACA,SAASoD,EAAcV,EAAKM,EAAI,CAC9B,IAAIC,EAAsB,OAAO,OAAO,IAAI,EACxCJ,EAAGC,EAAGI,EACV,IAAKL,EAAI,EAAGC,EAAIJ,EAAI,OAAQG,EAAIC,EAAGD,IAAK,CAKtC,GAJAK,EAAOR,EAAIG,CAAC,EACRG,IACFE,EAAOF,EAAGE,CAAI,GAEZD,EAAIC,CAAI,EACV,MAAO,GAETD,EAAIC,CAAI,EAAI,EACd,CACA,MAAO,EACT,CACA,SAASG,GAAkBC,EAAKC,EAAKC,EAAW,CAC9C,IAAIC,EAAQ,OAAO,oBAAoBH,CAAG,EACtCT,EAAGC,EAAGY,EACV,IAAKb,EAAI,EAAGC,EAAIW,EAAM,OAAQZ,EAAIC,EAAGD,IAEnC,GADAa,EAAOD,EAAMZ,CAAC,EACV,CAACU,EAAI,eAAeG,CAAI,GAAKF,EAAW,CAC1C,IAAIG,GAAa,OAAO,yBAAyBL,EAAKI,CAAI,EAC1D,OAAO,eAAeH,EAAKG,EAAMC,EAAU,CAC7C,CAEF,OAAOJ,CACT,CACA,SAASK,EAAYtB,EAAK,CACxB,OAAOjB,EAAa,KAAKiB,CAAG,CAC9B,CACA,SAASuB,EAAQH,EAAMI,EAAW,CAChC,MAAI,CAACJ,EAAK,QAAQ,GAAG,EACnBA,EAAOA,EAAK,QAAQ,MAAO,EAAE,EACpBI,IACTJ,EAAOI,EAAY,IAAMJ,GAE3BA,EAAK,MAAM,GAAG,EAAE,QAAQ,SAASK,EAAM,CACrC,GAAI,CAACH,EAAYG,CAAI,EACnB,MAAM,IAAI,MAAMzC,EAAG,mBAAoBoC,CAAI,CAAC,CAEhD,CAAC,EACMA,CACT,CACA,SAASM,EAAUN,EAAM,CACvB,IAAIO,EAAQP,EAAK,MAAM,GAAG,EAC1B,OAAOO,EAAMA,EAAM,OAAS,CAAC,CAC/B,CACA,SAASC,EAAiBR,EAAM,CAC9B,IAAIS,EAAQ,gBAAgB,KAAKT,CAAI,EACrC,OAAOS,EAAQA,EAAM,CAAC,EAAI,MAC5B,CACA,SAASC,EAAQ9B,EAAKM,EAAK,CACzBA,EAAMA,EAAM,EACZ,IAAIyB,EAAI/B,EAAI,OAAOM,GAAK,EACxB,GAAI,QAAQ,KAAKyB,CAAC,EAAG,CACnB,KAAO,YAAY,KAAK/B,EAAI,OAAOM,CAAG,CAAC,GACrCA,IAEF,OAAOA,CACT,KAAO,IAAI,YAAY,KAAKN,EAAI,MAAMM,EAAM,EAAGA,EAAM,CAAC,CAAC,EACrD,OAAOA,EAAM,EACR,GAAI,QAAQ,KAAKN,EAAI,MAAMM,EAAM,EAAGA,EAAM,CAAC,CAAC,EACjD,OAAOA,EAAM,EAEf,IAAI0B,EAAQ,EACRC,EAAU,GACd,EACE,QAAQF,EAAG,CACT,IAAK,IACL,IAAK,IACEE,GACHD,IAEF,MACF,IAAK,IACL,IAAK,IACH,GAAI,CAACC,GAAW,CAAC,EAAED,EACjB,OAAO1B,EAET,MACF,IAAK,IAEH,GADA2B,EAAU,CAACA,EACP,CAACD,GAAS,CAACC,EACb,OAAO3B,EAET,MACF,IAAK,KACHA,GACJ,OACOyB,EAAI/B,EAAI,OAAOM,GAAK,GAC7B,MAAO,EACT,CACA,SAAS4B,IAAmB,CAC1B,MAAM,IAAI,MAAM,UAAU,CAC5B,CACA,SAASC,EAAqBxB,EAAKyB,EAAO,CACxC,IAAIC,EAAQ1B,EAAI,UACZJ,EAAGC,EAAG8B,EAAMC,EAChB,IAAKhC,EAAI,EAAGC,EAAI4B,EAAM,OAAQ7B,EAAIC,EAAGD,IACnC+B,EAAOF,EAAM7B,CAAC,EACdgC,EAAS,MAAQjD,EAAWgD,CAAI,EAChCD,EAAME,CAAM,EAAI7D,EAAK,UACnB8D,GAAaF,CAAI,EACjB,SAAWA,EAAO,kBAAoBC,EAAS,KACjD,EAEF,SAASC,GAAaC,GAAO,CAC3B,OAAO,UAAW,CAChB,IAAIC,GAAW,KAAKD,EAAK,EACzB,OAAO,OAAOC,IAAY,WAAaA,GAAS,MAAM,KAAM,SAAS,EAAIA,EAC3E,CACF,CACF,CACA,SAAS5D,EAAW6D,EAAK,CACvB,KAAK,KAAOA,EAAM,EAClB,KAAK,KAAO,EACZ,KAAK,MAAQ1D,EAAU,KAAK,IAAI,CAClC,CACAH,EAAW,UAAU,MAAQ,SAAS6D,EAAK,CACzC,GAAIA,EAAM,EACR,MAAM,IAAI,MAAM,iBAAiB,EAEnC,IAAIC,EAAS,KAAK,KAClB,OAAID,EAAMC,EACD3D,EAAU0D,CAAG,GAElB,KAAK,KAAOA,EAAMC,IACpB,KAAK,MAAQ3D,EAAU2D,CAAM,EAC7B,KAAK,KAAO,GAEP,KAAK,MAAM,MAAM,KAAK,KAAM,KAAK,MAAQD,CAAG,EACrD,EACA,SAASE,EAAIC,EAAM,CACjB,IAAIC,EAAI,WACJhB,EAAI,MACJiB,EAAK,KAAK,IAAI,EAAG,EAAE,EACnBC,EAAQ,KAAK,MAAMH,GAAQ,KAAK,OAAO,GAAKE,EAAK,EAAE,EACvD,KAAK,KAAOA,EACZ,KAAK,SAAW,UAAW,CACzB,OAAOC,GAASF,EAAIE,EAAQlB,GAAKiB,CACnC,CACF,CACAH,EAAI,UAAU,YAAc,UAAW,CACrC,MAAO,CAAC,EAAE,KAAK,SAAS,EAAI,EAC9B,EACAA,EAAI,UAAU,QAAU,SAASK,EAAOC,EAAK,CAC3C,OAAIA,IAAQ,SACVA,EAAMD,EACNA,EAAQ,GAEVC,EAAMA,IAAQ,OAAS,KAAK,KAAOA,EAC5BD,EAAQ,KAAK,MAAM,KAAK,UAAU,GAAKC,EAAMD,EAAM,CAC5D,EACAL,EAAI,UAAU,UAAY,SAASK,EAAOC,EAAK,CAC7C,OAAIA,IAAQ,SACVA,EAAMD,EACNA,EAAQ,GAEVC,EAAMA,IAAQ,OAAS,EAAIA,EACpBD,GAASC,EAAMD,GAAS,KAAK,SAAS,EAAI,KAAK,IACxD,EACAL,EAAI,UAAU,WAAa,SAASF,EAAKS,EAAO,CAC9CT,GAAO,EACPS,EAAQA,GAAS,KACjB,IAAIC,EAAO,GACPD,EAAM,QAAQ,GAAG,EAAI,KACvBC,GAAQ,8BAEND,EAAM,QAAQ,GAAG,EAAI,KACvBC,GAAQ,8BAEND,EAAM,QAAQ,GAAG,EAAI,KACvBC,GAAQ,cAEND,EAAM,QAAQ,GAAG,EAAI,KACvBC,GAAQ,sCAGV,QADIC,EAAS,CAAC,EACL/C,EAAI,EAAGA,EAAIoC,EAAKpC,IACvB+C,EAAO,KAAK,KAAK,OAAOD,CAAI,CAAC,EAE/B,OAAOC,EAAO,KAAK,EAAE,CACvB,EACAT,EAAI,UAAU,WAAa,SAASF,EAAK,CACvC,IAAIvC,EAAM,CAAC,EACPG,EACJ,IAAKA,EAAI,EAAGA,EAAIoC,EAAKpC,IACnBH,EAAI,KAAK,KAAK,QAAQ,GAAG,CAAC,EAE5B,OAAOjB,EAAWiB,CAAG,CACvB,EACAyC,EAAI,UAAU,OAAS,SAASzC,EAAK,CACnC,IAAIuC,EAAMvC,EAAI,OACd,GAAI,CAACuC,EACH,MAAM,IAAI,MAAM,2BAA2B,EAE7C,OAAOvC,EAAI,KAAK,QAAQuC,CAAG,CAAC,CAC9B,EACA,SAASY,GAAe,CACtB,KAAK,OAAS,EACd,KAAK,OAAS,CAAC,CACjB,CACAA,EAAa,UAAU,KAAO,SAASC,EAAM,CAC3C,IAAIC,EAAQ,KAAK,OACblD,EAAIkD,EAAM,OAAS,EACnBC,EAEJ,IADAD,EAAM,KAAKD,CAAI,EACRjD,EAAI,GAAKkD,EAAMlD,CAAC,EAAE,MAAQkD,EAAMC,EAAKnD,EAAI,GAAK,CAAC,EAAE,OACtDiD,EAAOC,EAAMlD,CAAC,EACdkD,EAAMlD,CAAC,EAAIkD,EAAMC,CAAE,EACnBD,EAAMC,CAAE,EAAIF,EACZjD,EAAImD,CAER,EACAH,EAAa,UAAU,IAAM,UAAW,CACtC,IAAIE,EAAQ,KAAK,OACbd,EAAMc,EAAM,OAAS,EAAI,EACzBE,EAAQF,EAAM,CAAC,EACnB,GAAI,CAACE,GAASA,EAAM,MAAQ,KAAK,OAC/B,OAAO,KAGT,GADA,KAAK,SACD,CAAChB,EACH,OAAAc,EAAM,IAAI,EACHE,EAETF,EAAM,CAAC,EAAIA,EAAM,IAAI,EAIrB,QAHIG,EAAMjB,GAAO,EACbpC,EAAI,EACJsD,EAAIC,EAAIJ,GAAIF,GAAMzB,GAAGgC,GAAIC,GACtBzD,EAAIqD,IACTJ,GAAOC,EAAMlD,CAAC,EACdsD,GAAMtD,GAAK,GAAK,EAChBuD,EAAKvD,EAAI,GAAK,EACdwD,GAAKN,EAAMI,CAAE,EACbG,GAAKP,EAAMK,CAAE,EACT,CAACE,IAAMD,GAAG,OAASC,GAAG,OACxBjC,GAAIgC,GACJL,GAAKG,IAEL9B,GAAIiC,GACJN,GAAKI,GAEH,EAAA/B,GAAE,OAASyB,GAAK,SAGpBC,EAAMC,EAAE,EAAIF,GACZC,EAAMlD,CAAC,EAAIwB,GACXxB,EAAImD,GAEN,OAAOC,CACT,EACA,SAASM,EAAIC,EAAK5D,EAAK,CAGrB,GAFA,KAAK,IAAM4D,EACX,KAAK,IAAM5D,EAAM,EACb,KAAK,IAAM,EACb,MAAM,IAAI,MAAM,iBAAiB,CAErC,CACA2D,EAAI,UAAU,QAAU,UAAW,CACjC,OAAO,KAAK,KAAO,KAAK,IAAI,MAC9B,EACAA,EAAI,UAAU,YAAc,UAAW,CACrC,KAAK,IAAM,KAAK,IAAI,OAAS,CAC/B,EACAA,EAAI,UAAU,YAAc,UAAW,CACrC,MAAO,CAAC,CAAC,KAAK,IAAI,KAAK,KAAK,CAC9B,EACAA,EAAI,UAAU,YAAc,UAAW,CACrC,KAAK,KACP,EACAA,EAAI,UAAU,aAAe,SAASE,EAAI,CACxC,KAAK,IAAI,KAAK,KAAK,EAAI,CAAC,CAACA,CAC3B,EACAF,EAAI,UAAU,QAAUA,EAAI,UAAU,SAAW,UAAW,CAC1D,IAAIG,EAAI,EACJC,EAAK,EACLH,EAAM,KAAK,IACXC,EAAIG,EAAGC,EAAIC,EACf,GACEL,EAAKD,EAAI,KAAK,KAAK,EACnBI,EAAIH,EAAK,IACTC,IAAMD,EAAK,MAAQE,EACnBA,GAAM,QACCC,GAAKD,EAAK,IACnB,GAAIC,EAAG,CACLC,EAAKH,EACLI,EAAK,UACL,GACEL,EAAKD,EAAI,KAAK,KAAK,EACnBK,IAAOJ,EAAK,KAAOK,EACnBA,GAAM,UACCL,EAAK,KACd,OAAQI,EAAK,EAAI,EAAEA,EAAK,GAAKA,GAAM,CACrC,CACA,OAAOH,GAAK,EAAI,EAAEA,EAAI,EACxB,EACAH,EAAI,UAAU,QAAUA,EAAI,UAAU,SAAW,UAAW,CAE1D,QADIC,EAAM,KAAK,IACRA,EAAI,KAAK,KAAK,EAAI,KAAK,CAEhC,EACAD,EAAI,UAAU,SAAWA,EAAI,UAAU,UAAY,SAASG,EAAG,CAC7D,IAAIF,EAAM,KAAK,IACXK,EAAIvB,EACR,GAAIoB,GAAK,aAAeA,EAAI,WAAY,CACtCpB,EAAKoB,GAAK,EAAIA,GAAK,EAAI,CAACA,GAAK,EAAI,EACjC,GACEF,EAAI,KAAK,GAAG,EAAIlB,EAAK,IACrBA,IAAO,QACAA,IAAOkB,EAAI,KAAK,KAAK,GAAK,KACrC,KAAO,CACLK,EAAKH,GAAK,EAAIA,EAAI,EAAI,CAACA,EAAI,EAAI,EAC/B,GACEF,EAAI,KAAK,GAAG,EAAIK,EAAK,IACrBA,GAAM,UACCA,GAAM,IAAML,EAAI,KAAK,KAAK,GAAK,KAC1C,CACA,KAAK,KACP,EACAD,EAAI,UAAU,UAAY,UAAW,CACnC,IAAIC,EAAM,KAAK,IACX5D,EAAM,KAAK,IAEf,OADA,KAAK,KAAO,EACR,KAAK,IAAM4D,EAAI,OACV,EAEF,KAAK,IAAI,YAAY5D,CAAG,CACjC,EACA2D,EAAI,UAAU,UAAY,UAAW,CACnC,KAAK,KAAO,CACd,EACAA,EAAI,UAAU,WAAa,SAASM,EAAI,CACtC,IAAIL,EAAM,KAAK,IACX5D,EAAM,KAAK,IAEf,GADA,KAAK,KAAO,EACR,OAAK,IAAM4D,EAAI,QAGnB,OAAO,KAAK,IAAI,aAAaK,EAAIjE,CAAG,CACtC,EACA2D,EAAI,UAAU,WAAa,UAAW,CACpC,IAAIC,EAAM,KAAK,IACX5D,EAAM,KAAK,IAEf,OADA,KAAK,KAAO,EACR,KAAK,IAAM4D,EAAI,OACV,EAEF,KAAK,IAAI,aAAa5D,CAAG,CAClC,EACA2D,EAAI,UAAU,WAAa,UAAW,CACpC,KAAK,KAAO,CACd,EACAA,EAAI,UAAU,YAAc,SAASQ,EAAG,CACtC,IAAIP,EAAM,KAAK,IACX5D,EAAM,KAAK,IAEf,GADA,KAAK,KAAO,EACR,OAAK,IAAM4D,EAAI,QAGnB,OAAO,KAAK,IAAI,cAAcO,EAAGnE,CAAG,CACtC,EACA2D,EAAI,UAAU,UAAY,SAAStB,EAAK,CACtC,IAAIrC,EAAM,KAAK,IAEf,GADA,KAAK,KAAOqC,EACR,OAAK,IAAM,KAAK,IAAI,QAGxB,KAAI+B,EAAQ7F,EAAK,MAAM8D,CAAG,EAC1B,YAAK,IAAI,KAAK+B,EAAO,EAAGpE,EAAKA,EAAMqC,CAAG,EAC/B+B,EACT,EACAT,EAAI,UAAU,UAAY,SAAStB,EAAK,CACtC,KAAK,KAAOA,CACd,EACAsB,EAAI,UAAU,WAAa,SAASC,EAAKvB,EAAK,CAC5CA,EAAMA,GAAOuB,EAAI,OACjB,IAAI5D,EAAM,KAAK,IACf,KAAK,KAAOqC,EACR,OAAK,IAAM,KAAK,IAAI,SAGxBuB,EAAI,KAAK,KAAK,IAAK5D,EAAK,EAAGqC,CAAG,CAChC,EACAsB,EAAI,UAAU,UAAY,UAAW,CACnC,IAAItB,EAAM,KAAK,SAAS,EACxB,GAAIA,EAAM,EAAG,CACX,KAAK,YAAY,EACjB,MACF,CACA,OAAO,KAAK,UAAUA,CAAG,CAC3B,EACAsB,EAAI,UAAU,UAAY,UAAW,CACnC,IAAItB,EAAM,KAAK,SAAS,EACxB,GAAIA,EAAM,EAAG,CACX,KAAK,YAAY,EACjB,MACF,CACA,KAAK,KAAOA,CACd,EACAsB,EAAI,UAAU,WAAa,SAASC,EAAK,CACvC,IAAIvB,EAAMuB,EAAI,OACd,KAAK,UAAUvB,CAAG,EAClB,KAAK,WAAWuB,EAAKvB,CAAG,CAC1B,EACI,OAAO/D,EAAQ,UAAU,WAAa,WACxCqF,EAAI,UAAU,WAAa,UAAW,CACpC,IAAItB,EAAM,KAAK,SAAS,EACxB,GAAIA,EAAM,EACR,YAAK,YAAY,EACV,GAET,IAAIrC,EAAM,KAAK,IACX4D,EAAM,KAAK,IAEf,GADA,KAAK,KAAOvB,EACR,OAAK,IAAMuB,EAAI,QAGnB,OAAO,KAAK,IAAI,UAAU5D,EAAKA,EAAMqC,CAAG,CAC1C,EAEAsB,EAAI,UAAU,WAAa,UAAW,CACpC,IAAItB,EAAM,KAAK,SAAS,EACxB,GAAIA,EAAM,EACR,YAAK,YAAY,EACV,GAET,IAAIrC,EAAM,KAAK,IACX4D,EAAM,KAAK,IAEf,GADA,KAAK,KAAOvB,EACR,OAAK,IAAMuB,EAAI,QAGnB,OAAO,KAAK,IAAI,MAAM5D,EAAKA,EAAMqC,CAAG,EAAE,SAAS,CACjD,EAEFsB,EAAI,UAAU,WAAa,UAAW,CACpC,IAAItB,EAAM,KAAK,SAAS,EACxB,GAAIA,EAAM,EAAG,CACX,KAAK,YAAY,EACjB,MACF,CACA,KAAK,KAAOA,CACd,EACAsB,EAAI,UAAU,YAAc,SAAS1E,EAAG,CACtC,IAAIoD,EAAM/D,EAAQ,WAAWW,CAAC,EAC1B2E,EAAM,KAAK,IACf,KAAK,UAAUvB,CAAG,EAClB,IAAIrC,EAAM,KAAK,IAEf,GADA,KAAK,KAAOqC,EACR,OAAK,IAAMuB,EAAI,QAGnB,GAAIvB,EAAM,IAAM,OAAO/D,EAAQ,UAAU,WAAa,WACpDsF,EAAI,UAAU3E,EAAGe,EAAKqC,CAAG,MACpB,CACL,IAAIpC,EAAGC,EAAGuD,EAAIC,GACd,IAAKzD,EAAI,EAAGC,EAAImC,EAAKpC,EAAIC,EAAGD,IAC1BwD,EAAKxE,EAAE,WAAWgB,CAAC,EACfwD,EAAK,IACPG,EAAI5D,GAAK,EAAIyD,EACJA,EAAK,MACdG,EAAI5D,GAAK,EAAIyD,GAAM,EAAI,IACvBG,EAAI5D,GAAK,EAAIyD,EAAK,GAAK,MACbA,EAAK,SAAW,SAAWC,GAAKzE,EAAE,WAAWgB,EAAI,CAAC,GAAK,SAAW,OAC5EwD,EAAK,QAAUA,EAAK,OAAS,KAAOC,GAAK,MACzCzD,IACA2D,EAAI5D,GAAK,EAAIyD,GAAM,GAAK,IACxBG,EAAI5D,GAAK,EAAIyD,GAAM,GAAK,GAAK,IAC7BG,EAAI5D,GAAK,EAAIyD,GAAM,EAAI,GAAK,IAC5BG,EAAI5D,GAAK,EAAIyD,EAAK,GAAK,MAEvBG,EAAI5D,GAAK,EAAIyD,GAAM,GAAK,IACxBG,EAAI5D,GAAK,EAAIyD,GAAM,EAAI,GAAK,IAC5BG,EAAI5D,GAAK,EAAIyD,EAAK,GAAK,IAG7B,CACF,EACI,OAAOnF,EAAQ,UAAU,aAAe,WAC1CqF,EAAI,UAAU,YAAc,SAASjE,EAAK2C,EAAK,CAC7C,IAAIrC,EAAM,KAAK,IACf,KAAK,KAAOqC,EACR,OAAK,IAAM,KAAK,IAAI,SAGxB,KAAK,IAAI,YAAY3C,EAAKM,EAAKqC,CAAG,CACpC,EACS,OAAO/D,EAAQ,UAAU,aAAe,WACjDqF,EAAI,UAAU,YAAc,SAASjE,EAAK2C,EAAK,CAC7C,IAAIrC,EAAM,KAAK,IACf,KAAK,KAAOqC,EACR,OAAK,IAAM,KAAK,IAAI,SAGxB,KAAK,IAAI,YAAY3C,EAAKM,EAAKqC,CAAG,CACpC,EAEAsB,EAAI,UAAU,YAAc,SAAS1E,EAAGoD,EAAK,CAC3C,IAAIrC,EAAM,KAAK,IACf,KAAK,KAAOqC,EACR,OAAK,IAAM,KAAK,IAAI,SAGxB,KAAK,IAAI,MAAMpD,EAAGe,EAAKqC,EAAK,QAAQ,CACtC,EAEFsB,EAAI,UAAU,aAAe,SAASU,EAAK,CACzC,OAAO,KAAK,IAAI,KAAK,KAAK,EAAIA,EAAI,IAAIA,EAAI,KAAK,CACjD,EACAV,EAAI,UAAU,SAAWA,EAAI,UAAU,UAAY,SAASU,EAAK,CAC/D,IAAIlF,EAAK,KAAK,SAAS,EACnBC,EAAKiF,EAAI,SAAS,EACtB,OAAOlF,IAAOC,EAAK,EAAID,EAAKC,EAAK,GAAK,CACxC,EACAuE,EAAI,UAAU,WAAa,SAASU,EAAK,CACvC,IAAIlF,EAAK,KAAK,UAAU,EACpBC,EAAKiF,EAAI,UAAU,EACvB,OAAOlF,IAAOC,EAAK,EAAID,EAAKC,EAAK,GAAK,CACxC,EACAuE,EAAI,UAAU,YAAc,SAASU,EAAK,CACxC,IAAIlF,EAAK,KAAK,WAAW,EACrBC,EAAKiF,EAAI,WAAW,EACxB,OAAOlF,IAAOC,EAAK,EAAID,EAAKC,EAAK,GAAK,CACxC,EACAuE,EAAI,UAAU,WAAa,SAASU,EAAKhC,EAAK,CAC5C,OAAO,KAAK,UAAUA,CAAG,EAAE,QAAQgC,EAAI,UAAUhC,CAAG,CAAC,CACvD,EACAsB,EAAI,UAAU,WAAaA,EAAI,UAAU,YAAc,SAASU,EAAK,CACnE,IAAIC,EAAK,KAAK,SAAS,EACnBC,EAAK,KAAK,IACd,KAAK,KAAOD,EACZ,IAAIE,EAAKH,EAAI,SAAS,EAClBI,EAAKJ,EAAI,IACbA,EAAI,KAAOG,EACX,IAAIE,EAAK,KAAK,IAAI,MAAMH,EAAI,KAAK,GAAG,EAChCV,EAAKQ,EAAI,IAAI,MAAMI,EAAIJ,EAAI,GAAG,EAClC,OAAOK,EAAG,QAAQb,CAAE,CACtB,EACAF,EAAI,UAAU,gBAAkB,UAAW,CACzC,IAAIgB,EAAMhG,EAAU,CAAC,EACjBmF,EAAI,EACJ7D,EAAI,EACJmD,EAAK,EACLQ,EAAM,KAAK,IACXC,EAAIe,EAKR,IAJAf,EAAKD,EAAI,KAAK,KAAK,EACnBgB,EAAMf,EAAK,EACXc,EAAI,KAAK,CAAC,EACVb,IAAMD,EAAK,MAAQ,EACZA,EAAK,KACVA,EAAKD,EAAI,KAAK,KAAK,EACnBE,IAAMD,EAAK,MAAQT,EACnBA,GAAM,EACFA,GAAM,IACRA,GAAM,EACNuB,EAAI1E,GAAG,EAAI6D,EACXA,IAAM,GAGV,OAAAa,EAAI1E,CAAC,EAAI6D,EACLc,GACFC,EAAOF,EAAK,CAAC,EAERA,CACT,EACAhB,EAAI,UAAU,cAAgB,SAASC,EAAK,CAC1C,IAAIgB,GAAOhB,EAAI,CAAC,EAAI,MAAQ,EACxBe,EAAM,KAAK,IACXvB,EAAK,EACLW,EAAK,EACLrB,EAAK,EACLoB,EACAc,GACFC,EAAOjB,EAAK,CAAC,EACbE,EAAI,GAEJA,EAAI,EAON,QALIzC,GAAQ,CACVuC,EAAI,WAAW,EAAG,CAAC,EACnBA,EAAI,WAAW,EAAG,CAAC,EACnBA,EAAI,WAAW,EAAG,CAAC,CACrB,EACOlB,GAAM,CAACrB,GAAM,EAAEqB,CAAE,GAAG,CAE3B,KAAOqB,EAAKrB,GAGV,IAFAoB,GAAKzC,GAAM0C,GAAI,GAAKX,EACpBA,GAAM,GACCA,EAAK,GACVuB,EAAI,KAAK,KAAK,EAAIb,EAAI,IAAM,IAC5BA,IAAM,EACNV,GAAM,EAGVU,GAAKzC,GAAMqB,CAAE,GAAKU,EAClB,GACEuB,EAAI,KAAK,GAAG,EAAIb,EAAI,IACpBA,IAAM,QACCA,IAAMa,EAAI,KAAK,KAAK,GAAK,MAClC,KAAK,MACDC,GACFC,EAAOjB,EAAK,CAAC,CAEjB,EACA,SAASiB,EAAOjB,EAAKvB,EAAK,CACxB,KAAOA,KACLuB,EAAIvB,CAAG,EAAI,CAACuB,EAAIvB,CAAG,CAEvB,CACAtE,EAAO,QAAU,CACf,iBAAA6D,GACA,qBAAAC,EACA,WAAAhD,EACA,WAAAG,EACA,kBAAAyB,GACA,QAAAhB,EACA,QAAAP,EACA,UAAAG,GACA,iBAAAiC,EACA,YAAAN,EACA,QAAAQ,EACA,UAAA7C,EACA,aAAA4B,EACA,QAAAU,EACA,MAAAd,EACA,cAAAN,EACA,cAAAW,EACA,UAAAY,EACA,WAAA5C,EACA,IAAA+D,EACA,aAAAU,EACA,IAAAU,CACF,CACF,CACF,CAAC,EAGGmB,GAAgBnI,GAAW,CAC7B,iCAAiCmB,EAASC,EAAQ,CAChD,aACA,IAAIgH,EAAQlH,GAAc,EACtBG,EAASC,GACTG,EAAOC,GACPC,EAAUN,EAAO,OACjBgH,EAAahH,EAAO,WACpB2F,EAAMoB,EAAM,IACZE,EAAQ7G,EAAK,SAAS,YAAY,EAClCM,EAAKN,EAAK,OACV8G,EAAQ,CACV,MAASC,EACT,QAAWC,EACX,MAASC,EACT,OAAUC,EACV,KAAQC,EACR,MAASC,EACT,MAASC,EACT,MAASC,EACT,IAAOC,GACP,KAAQC,EACR,IAAOC,EACP,KAAQC,EACR,OAAUN,EACV,OAAUO,CACZ,EACIC,EAAS,IAAIjB,EAAM,IACnBkB,EAAM,IAAItC,EAAI,IAAIqB,EAAW,IAAI,CAAC,EAClCkB,GAAe,KACfC,EAAmB,CAAC,EACxB,SAASC,EAAKC,EAAQ/G,EAAM,CAC1B,IAAIgH,EAYJ,GAXIJ,IACFI,EAAOJ,GACPC,EAAiB,KAAK,CAACD,GAAc,IAAI,CAAC,EAC1CA,GAAe,MAEfI,EAAO,KAET,KAAK,MAAQ,IAAIC,EACjB,KAAK,KAAO,OACZ,KAAK,QAAU,OACf,KAAK,IAAMF,GAAUA,EAAO,IAAM,GAAKA,EAAO,IAAM,OAChDA,EAAQ,CACV,IAAIvF,EAAOuF,EAAO,KACdnF,EAAYmF,EAAO,YAAc,OAAS/G,GAAQA,EAAK,UAAY+G,EAAO,UAC9E,GAAIvF,IAAS,OAAQ,CAEnB,GADAA,EAAO0F,GAAa1F,EAAMI,CAAS,EAC/BuF,GAAY3F,CAAI,EAClB,MAAM,IAAI,MAAMpC,EAAG,mCAAoCoC,CAAI,CAAC,EAE9D,IAAI4F,EAAWpH,GAAQA,EAAK,SAC5B,GAAIoH,EAAU,CACZ,GAAIA,EAAS5F,CAAI,IAAM,OACrB,MAAM,IAAI,MAAMpC,EAAG,0BAA2BoC,CAAI,CAAC,EAErD4F,EAAS5F,CAAI,EAAIwF,CACnB,CACF,SAAWhH,GAAQA,EAAK,iBACtB,MAAM,IAAI,MAAMZ,EAAG,sCAAuC2H,CAAM,CAAC,EAEnE,KAAK,KAAOvF,EACZ,KAAK,QAAUuF,EAAO,QAAUA,EAAO,QAAQ,IAAI,SAAS,EAAG,CAC7D,OAAOG,GAAa,EAAGtF,CAAS,CAClC,CAAC,EAAI,CAAC,CACR,CACF,CACAkF,EAAK,UAAY,SAASC,EAAQ/G,EAAM,CACtCA,EAAOA,GAAQ,CAAC,EAChBA,EAAK,SAAWA,EAAK,UAAY,CAAC,EAClC,IAAIqH,EAAa,SAASC,EAAY,CAUpC,OATIA,IAAe,GACjBA,EAAa,SACJA,IAAe,GACxBA,EAAa,QACJA,IAAe,OACxBA,EAAa,OACJ,OAAOA,GAAc,WAC9BA,EAAaA,EAAW,YAAY,GAE9BA,EAAY,CAClB,IAAK,SACH,OAAOC,EACT,IAAK,QACH,OAAOC,EACT,IAAK,OACH,OACF,QACE,MAAM,IAAI,MAAMpI,EAAG,iCAAkCkI,CAAU,CAAC,CACpE,CACF,EAAEtH,EAAK,UAAU,EACjB,GAAI+G,IAAW,KACb,MAAM,IAAI,MAAM,2CAA2C,EAE7D,GAAID,EAAK,OAAOC,CAAM,EACpB,OAAOA,EAET,IAAIC,EACJ,GAAIhH,EAAK,WAAagH,EAAOhH,EAAK,SAAS+G,EAAQ/G,CAAI,GAAI,CACzD,GAAI,CAAC8G,EAAK,OAAOE,CAAI,EACnB,MAAM,IAAI,MAAM5H,EAAG,oCAAqC4H,CAAI,CAAC,EAE/D,OAAOA,CACT,CACA,GAAI,OAAOD,GAAU,SAAU,CAG7B,GAFAA,EAASG,GAAaH,EAAQ/G,EAAK,SAAS,EAC5CgH,EAAOhH,EAAK,SAAS+G,CAAM,EACvBC,EACF,OAAOA,EAET,GAAIG,GAAYJ,CAAM,EACpB,OAAO/G,EAAK,SAAS+G,CAAM,EAAID,EAAK,UAAU,CAAE,KAAMC,CAAO,EAAG/G,CAAI,EAEtE,MAAM,IAAI,MAAMZ,EAAG,0BAA2B2H,CAAM,CAAC,CACvD,CACA,GAAIA,EAAO,aAAe/G,EAAK,cAAgB,CAAC4G,GAAc,CAC5D,IAAIa,EAAczH,EAAK,aAAa+G,EAAO,WAAW,EACtD,GAAIU,EAAa,CACf,IAAI7F,EAAY5B,EAAK,UACjBoH,EAAW,CAAC,EAChB,OAAO,KAAKpH,EAAK,QAAQ,EAAE,QAAQ,SAASlC,EAAK,CAC/CsJ,EAAStJ,CAAG,EAAIkC,EAAK,SAASlC,CAAG,CACnC,CAAC,EACD,GAAI,CACF,OAAA6H,EAAM,oCAAqCoB,EAAO,WAAW,EACtD,IAAIU,EAAYV,EAAQ/G,CAAI,CACrC,OAAS0H,EAAK,CAEZ,GADA/B,EAAM,4CAA6CoB,EAAO,WAAW,EACjE/G,EAAK,mBACP,MAAM0H,EAERd,GAAe,KACf5G,EAAK,UAAY4B,EACjB5B,EAAK,SAAWoH,CAClB,CACF,CACF,CACA,GAAI,MAAM,QAAQL,CAAM,EAAG,CACzB,IAAIY,EAAcf,GAClBA,GAAe,KACf,IAAIgB,EAAQb,EAAO,IAAI,SAAShG,EAAK,CACnC,OAAO+F,EAAK,UAAU/F,EAAKf,CAAI,CACjC,CAAC,EACIqH,IACHA,EAAaQ,GAAYD,CAAK,EAAIL,EAAmBC,GAEvDZ,GAAee,EACfX,EAAO,IAAIK,EAAWO,EAAO5H,CAAI,CACnC,MACEgH,EAAO,SAASc,EAAU,CACxB,IAAIC,EAAQnC,EAAMkC,CAAQ,EAC1B,GAAIC,IAAU,OACZ,MAAM,IAAI,MAAM3I,EAAG,mBAAoB0I,CAAQ,CAAC,EAElD,OAAO,IAAIC,EAAMhB,EAAQ/G,CAAI,CAC/B,EAAE+G,EAAO,IAAI,EAEf,OAAOC,CACT,EACAF,EAAK,SAAW,SAASkB,EAAKhI,EAAM,CAMlC,GALAA,EAAOA,GAAQ,CAAC,EAChBA,EAAK,eAAiBA,EAAK,gBAAkB8G,EAAK,UAAU,CAC1D,KAAM,QACN,MAAO,MACT,CAAC,EACG9G,EAAK,UAAW,CAClB,IAAIgH,EAAOhH,EAAK,UAAUgI,EAAKhI,CAAI,EACnC,GAAIgH,IAAS,OAAQ,CACnB,GAAI,CAACF,EAAK,OAAOE,CAAI,EACnB,MAAM,IAAI,MAAM5H,EAAG,sCAAuC4H,CAAI,CAAC,EAEjE,OAAOA,CACT,CACF,CACA,OAAQ,OAAOgB,EAAK,CAClB,IAAK,SACH,OAAOlB,EAAK,UAAU,SAAU9G,CAAI,EACtC,IAAK,UACH,OAAO8G,EAAK,UAAU,UAAW9G,CAAI,EACvC,IAAK,SACH,OAAKgI,EAAM,KAAOA,EACTlB,EAAK,UAAU,MAAO9G,CAAI,EACxB,KAAK,IAAIgI,CAAG,EAAI,iBAClBlB,EAAK,UAAU,QAAS9G,CAAI,EAE9B8G,EAAK,UAAU,SAAU9G,CAAI,EACtC,IAAK,SACH,GAAIgI,IAAQ,KACV,OAAOlB,EAAK,UAAU,OAAQ9G,CAAI,EAC7B,GAAI,MAAM,QAAQgI,CAAG,EAC1B,OAAKA,EAAI,OAGFlB,EAAK,UAAU,CACpB,KAAM,QACN,MAAOA,EAAK,SACVkB,EAAI,IAAI,SAASvH,EAAI,CACnB,OAAOqG,EAAK,SAASrG,EAAIT,CAAI,CAC/B,CAAC,EACDA,CACF,CACF,EAAGA,CAAI,EAVEA,EAAK,eAWT,GAAIhB,EAAQ,SAASgJ,CAAG,EAC7B,OAAOlB,EAAK,UAAU,QAAS9G,CAAI,EAErC,IAAIiI,EAAa,OAAO,KAAKD,CAAG,EAChC,OAAIC,EAAW,KAAK,SAAStI,EAAG,CAC9B,MAAO,CAAC8F,EAAM,YAAY9F,CAAC,CAC7B,CAAC,EACQmH,EAAK,UAAU,CACpB,KAAM,MACN,OAAQA,EAAK,SAASmB,EAAW,IAAI,SAAStI,EAAG,CAC/C,OAAOmH,EAAK,SAASkB,EAAIrI,CAAC,EAAGK,CAAI,CACnC,CAAC,EAAGA,CAAI,CACV,EAAGA,CAAI,EAEF8G,EAAK,UAAU,CACpB,KAAM,SACN,OAAQmB,EAAW,IAAI,SAAStI,EAAG,CACjC,MAAO,CAAE,KAAMA,EAAG,KAAMmH,EAAK,SAASkB,EAAIrI,CAAC,EAAGK,CAAI,CAAE,CACtD,CAAC,CACH,EAAGA,CAAI,EACT,QACE,MAAM,IAAI,MAAMZ,EAAG,6BAA8B4I,CAAG,CAAC,CACzD,CACF,EACAlB,EAAK,SAAW,SAASc,EAAO5H,EAAM,CACpC,GAAI,CAAC4H,EAAM,OACT,MAAM,IAAI,MAAM,qBAAqB,EAEvC,GAAIA,EAAM,SAAW,EACnB,OAAOA,EAAM,CAAC,EAEhB5H,EAAOA,GAAQ,CAAC,EAChB,IAAIkI,EAAW,CAAC,EACZC,EAAmB,EACnBC,EAAsB,GAmB1B,GAlBAR,EAAM,QAAQ,SAASZ,EAAM,CAC3B,OAAQA,EAAK,SAAU,CACrB,IAAK,kBACHoB,EAAsB,GACtBF,EAAWA,EAAS,OAAOlB,EAAK,KAAK,EACrC,MACF,IAAK,gBACHmB,IACAD,EAAWA,EAAS,OAAOlB,EAAK,KAAK,EACrC,MACF,IAAK,OACHkB,EAAS,KAAKlB,CAAI,EAClB,MACF,QACEoB,EAAsB,GACtBF,EAAS,KAAKlB,CAAI,CACtB,CACF,CAAC,EACGmB,EAAkB,CACpB,GAAI,CAACC,EACH,MAAM,IAAI,MAAM,8BAA8B,EAEhD,IAAIC,EAAc,CAAC,EACnBH,EAAS,QAAQ,SAASlB,EAAM,CAC9B,IAAIxF,EAAOwF,EAAK,WACZsB,EAAaD,EAAY7G,CAAI,EACjC,GAAI,CAAC8G,EACHD,EAAY7G,CAAI,EAAIwF,UACX,CAACA,EAAK,OAAOsB,CAAU,EAChC,MAAM,IAAI,MAAM,0BAA0B,CAE9C,CAAC,EACD,IAAIhB,EAAatH,EAAK,WAClBuI,EACJvI,EAAK,WAAa,GAClB,GAAI,CACFuI,EAAYzB,EAAK,UAAU,OAAO,KAAKuB,CAAW,EAAE,IAAI,SAAS7G,EAAM,CACrE,OAAO6G,EAAY7G,CAAI,CACzB,CAAC,EAAGxB,CAAI,CACV,OAAS0H,EAAK,CACZ,MAAA1H,EAAK,WAAasH,EACZI,CACR,CACA,OAAA1H,EAAK,WAAasH,EACXiB,CACT,CACA,IAAIC,EAAa,CAAC,EAClBN,EAAS,QAAQ,SAASlB,EAAM,CAC9B,IAAIyB,EAASC,GAAc1B,CAAI,EAC3B2B,EAAcH,EAAWC,CAAM,EAC9BE,IACHH,EAAWC,CAAM,EAAIE,EAAc,CAAC,GAEtCA,EAAY,KAAK3B,CAAI,CACvB,CAAC,EACD,IAAI4B,EAAU,OAAO,KAAKJ,CAAU,EAChCK,EAAYD,EAAQ,IAAI,SAASH,EAAQ,CAC3C,IAAIE,EAAcH,EAAWC,CAAM,EACnC,GAAIE,EAAY,SAAW,EACzB,OAAOA,EAAY,CAAC,EAEpB,OAAQF,EAAQ,CACd,IAAK,OACL,IAAK,UACH,OAAOE,EAAY,CAAC,EACtB,IAAK,SACH,OAAOG,GAAeH,CAAW,EACnC,IAAK,SACH,OAAOI,GAAeJ,EAAa3I,CAAI,EACzC,IAAK,SACH,OAAOgJ,GAAeL,EAAa3I,CAAI,EACzC,IAAK,QAIH,OAHA2I,EAAcA,EAAY,OAAO,SAASM,EAAG,CAC3C,OAAOA,IAAMjJ,EAAK,cACpB,CAAC,EACI2I,EAAY,OAGV7B,EAAK,UAAU,CACpB,KAAM,QACN,MAAOA,EAAK,SAAS6B,EAAY,IAAI,SAASM,EAAG,CAC/C,OAAOA,EAAE,SACX,CAAC,EAAGjJ,CAAI,CACV,EAAGA,CAAI,EAPEA,EAAK,eAQhB,QACE,OAAOkJ,GAAeP,EAAa3I,CAAI,CAC3C,CAEJ,CAAC,EACD,OAAI6I,EAAU,SAAW,EAChBA,EAAU,CAAC,EAEX/B,EAAK,UAAU+B,EAAW7I,CAAI,CAEzC,EACA8G,EAAK,OAAS,UAAW,CACvB,IAAIlG,EAAI,UAAU,OAClB,GAAI,CAACA,EACH,MAAO,GAET,IAAIuI,EAAM,UAAU,CAAC,EACrB,GAAI,CAACA,GAAO,OAAOA,EAAI,SAAW,YAAc,OAAOA,EAAI,aAAe,WACxE,MAAO,GAET,GAAIvI,IAAM,EACR,MAAO,GAET,IAAIkH,EAAWqB,EAAI,SACfxI,EACJ,IAAKA,EAAI,EAAGA,EAAIC,EAAGD,IACjB,GAAImH,EAAS,QAAQ,UAAUnH,CAAC,CAAC,IAAM,EACrC,MAAO,GAGX,MAAO,EACT,EACAmG,EAAK,QAAU,SAASxH,EAAM,CAC5BqG,EAAM,8BAA+BrG,CAAI,EACzCqH,EAAI,IAAM,IAAIjB,EAAWpG,CAAI,CAC/B,EACA,OAAO,eAAewH,EAAK,UAAW,aAAc,CAClD,WAAY,GACZ,IAAK,UAAW,CACd,IAAIE,EAAOF,EAAK,OAAO,KAAM,SAAS,EAAI,KAAK,eAAiB,KAChE,OAAIE,EAAK,KACAA,EAAK,KAEVF,EAAK,OAAOE,EAAM,UAAU,EACvBA,EAAK,kBAEPF,EAAK,OAAOE,EAAM,OAAO,EAAI,OAASA,EAAK,QACpD,CACF,CAAC,EACDF,EAAK,UAAU,MAAQ,SAASkB,EAAKhI,EAAM,CACzC,OAAIA,GACFA,EAAO,CACL,OAAQ,CAAC,CAACA,EAAK,cAAgB,EAE/B,UAAWA,EAAK,UAChB,aAAc,CAAC,CAACA,EAAK,aACrB,KAAM,CAAC,CAACA,EAAK,kBACb,KAAM,CAAC,CAACA,EAAK,WAAa,CAE5B,EACO,KAAK,MAAMgI,EAAKhI,CAAI,GAEpB,KAAK,WAAW,KAAK,SAASgI,CAAG,CAAC,CAE7C,EACAlB,EAAK,UAAU,QAAUrB,EAAM,iBAC/BqB,EAAK,UAAU,eAAiB,SAASsC,EAAMC,EAAM,CACnD,OAAO,KAAK,OAAO,IAAIhF,EAAI+E,CAAI,EAAG,IAAI/E,EAAIgF,CAAI,CAAC,CACjD,EACAvC,EAAK,UAAU,eAAiB,SAASE,EAAMhH,EAAM,CACnD,GAAI,CAAC8G,EAAK,OAAOE,CAAI,EACnB,MAAM,IAAI,MAAM5H,EAAG,iBAAkB4H,CAAI,CAAC,EAE5C,GAAI,CAACF,EAAK,OAAO,KAAM,QAAS,SAAS,GAAKA,EAAK,OAAOE,EAAM,SAAS,EACvE,OAAO,KAAK,eAAeA,EAAK,eAAgBhH,CAAI,EAEtDA,EAAOA,GAAQ,CAAC,EAChBA,EAAK,SAAWA,EAAK,UAAY,CAAC,EAClC,IAAIsJ,EAAUxL,EACd,GAAIgJ,EAAK,OAAO,KAAM,SAAU,OAAO,GAAKA,EAAK,OAAOE,EAAM,SAAU,OAAO,IAC7ElJ,EAAM,KAAK,KAAO,IAAMkJ,EAAK,KAC7BsC,EAAWtJ,EAAK,SAASlC,CAAG,EACxBwL,GACF,OAAOA,EAOX,GAJAA,EAAW,IAAIC,EAAS,IAAI,EACxBzL,IACFkC,EAAK,SAASlC,CAAG,EAAIwL,GAEnBxC,EAAK,OAAOE,EAAM,OAAO,EAAG,CAC9B,IAAIwC,EAAYxC,EAAK,MAAM,IAAI,SAASiC,EAAG,CACzC,OAAO,KAAK,eAAeA,EAAGjJ,CAAI,CACpC,EAAG,IAAI,EACPsJ,EAAS,MAAQ,SAASvE,EAAK,CAC7B,IAAI0E,EAAQ1E,EAAI,SAAS,EACrB2E,EAAYF,EAAUC,CAAK,EAC/B,GAAIC,IAAc,OAChB,MAAM,IAAI,MAAMtK,EAAG,0BAA2BqK,CAAK,CAAC,EAEtD,OAAOD,EAAUC,CAAK,EAAE,MAAM1E,CAAG,CACnC,CACF,MACE,KAAK,QAAQuE,EAAUtC,EAAMhH,CAAI,EAEnC,GAAI,CAACsJ,EAAS,MACZ,MAAM,IAAI,MAAMlK,EAAG,uBAAwB4H,EAAM,IAAI,CAAC,EAExD,OAAO,OAAO,OAAOsC,CAAQ,CAC/B,EACAxC,EAAK,UAAU,OAAS,SAASxC,EAAK5D,EAAK4I,EAAU,CACnD,IAAIvE,EAAM,IAAIV,EAAIC,EAAK5D,CAAG,EACtBsH,EAAM2B,EAAU,KAAM5E,EAAKuE,CAAQ,EACvC,OAAKvE,EAAI,QAAQ,EAGV,CAAE,MAAOiD,EAAK,OAAQjD,EAAI,GAAI,EAF5B,CAAE,MAAO,OAAQ,OAAQ,EAAG,CAGvC,EACA+B,EAAK,UAAU,OAAS,SAASkB,EAAK1D,EAAK5D,EAAK,CAC9C,IAAIqE,EAAM,IAAIV,EAAIC,EAAK5D,CAAG,EAE1B,OADA,KAAK,OAAOqE,EAAKiD,CAAG,EACfjD,EAAI,QAAQ,EAGVA,EAAI,IAFFT,EAAI,OAASS,EAAI,GAG5B,EACA+B,EAAK,UAAU,OAAS,SAASE,EAAMhH,EAAM,CAC3C,IAAI4J,EAEF9C,EAAK,OAAOE,CAAI,GAAK,KAAK,YAAY,EAAE,OAAOA,EAAK,YAAY,CAAC,EAEnE,MAAI,CAAC4C,GAAS,EAAE5J,GAAQA,EAAK,QACpB4J,EAEF,KAAK,UAAU,KAAK,OAAO,CAAE,YAAa,EAAK,CAAC,CAAC,IAAM,KAAK,UAAU5C,EAAK,OAAO,CAAE,YAAa,EAAK,CAAC,CAAC,CACjH,EACAF,EAAK,UAAU,YAAc,SAASzG,EAAW,CAC/C,GAAKA,EAOH,OAAOoF,EAAM,QAAQ,KAAK,UAAU,KAAK,OAAO,CAAC,EAAGpF,CAAS,EAN7D,GAAI,CAAC,KAAK,MAAM,IAAK,CACnB,IAAIwJ,EAAY,KAAK,UAAU,KAAK,OAAO,CAAC,EAC5C,KAAK,MAAM,IAAMpE,EAAM,QAAQoE,CAAS,EAAE,SAAS,QAAQ,CAC7D,CACA,OAAOpE,EAAM,WAAW,KAAK,MAAM,IAAK,QAAQ,CAIpD,EACAqB,EAAK,UAAU,WAAa,SAASxC,EAAKgF,EAAUQ,EAAS,CAC3D,IAAI/E,EAAM,IAAIV,EAAIC,CAAG,EACjB0D,EAAM2B,EAAU,KAAM5E,EAAKuE,EAAUQ,CAAO,EAChD,GAAI,CAAC/E,EAAI,QAAQ,EACf,MAAM,IAAI,MAAM,kBAAkB,EAEpC,GAAI,CAAC+E,GAAW/E,EAAI,IAAMT,EAAI,OAC5B,MAAM,IAAI,MAAM,eAAe,EAEjC,OAAO0D,CACT,EACAlB,EAAK,UAAU,WAAa,SAAS1G,EAAK,CACxC,OAAO,KAAK,MAAM,KAAK,MAAMA,CAAG,EAAG,CAAE,OAAQ,CAAE,CAAC,CAClD,EACA0G,EAAK,UAAU,QAAU,UAAW,CAClC,IAAIgB,EAAW,KAAK,SAChBiC,EAAYC,GAAalC,CAAQ,EACrC,GAAIX,GAAYW,CAAQ,EACtB,OAAO1I,EAAG,OAAQ2K,CAAS,EAE3B,IAAIhJ,EAAM,KAAK,OAAO,CAAE,YAAa,GAAM,QAAS,EAAK,CAAC,EAC1D,OAAI,OAAOA,GAAO,UAAY,CAAC+F,EAAK,OAAO,KAAM,SAAS,IACxD/F,EAAI,KAAO,QAEN3B,EAAG,UAAW2K,EAAWhJ,CAAG,CAEvC,EACA+F,EAAK,UAAU,QAAU,SAASkB,EAAKhI,EAAM,CAC3C,IAAIwD,GAASxD,GAAQA,EAAK,oBAAsB,EAC5CiK,EAAYjK,GAAQA,EAAK,UACzBkK,EAAMC,EACV,OAAIF,IACFE,EAAO,CAAC,EACRD,EAAO,SAASf,EAAKnC,EAAM,CACzBiD,EAAU,KAAK,KAAME,EAAK,MAAM,EAAGhB,EAAKnC,EAAMgB,CAAG,CACnD,GAEK,KAAK,OAAOA,EAAKxE,EAAO0G,EAAMC,CAAI,CAC3C,EACArD,EAAK,UAAU,OAASrB,EAAM,iBAC9BqB,EAAK,UAAU,OAAS,SAAS9G,EAAM,CACrC,OAAO,KAAK,OAAO,CACjB,YAAa,CAAC,EAAEA,GAAQA,EAAK,aAC7B,QAAS,CAAC,EAAEA,GAAQA,EAAK,QAC3B,CAAC,CACH,EACA8G,EAAK,UAAU,SAAW,SAASkB,EAAK,CACtCrB,EAAI,IAAM,EACV,KAAK,OAAOA,EAAKqB,CAAG,EACpB,IAAI1D,EAAMmB,EAAM,UAAUkB,EAAI,GAAG,EACjC,OAAIA,EAAI,QAAQ,EACdA,EAAI,IAAI,KAAKrC,EAAK,EAAG,EAAGqC,EAAI,GAAG,EAE/B,KAAK,OAAO,IAAItC,EAAIC,CAAG,EAAG0D,CAAG,EAExB1D,CACT,EACAwC,EAAK,UAAU,OAAS,UAAW,CACjC,OAAO,KAAK,OAAO,CAAE,YAAa,EAAK,CAAC,CAC1C,EACAA,EAAK,UAAU,SAAW,SAASkB,EAAK,CACtC,OACS,KAAK,UADVA,IAAQ,OACY,KAAK,OAAO,CAAE,QAAS,EAAK,CAAC,EAE/B,KAAK,MAAMA,EAAK,CAAE,OAAQ,CAAE,CAAC,CAFG,CAGxD,EACAlB,EAAK,UAAU,KAAO,SAASkB,EAAK,CAClC,IAAIoC,EAAS,KAAK,mBAClB,OAAOA,IAAW,KAAO,KAAO,IAAIA,EAAOpC,CAAG,CAChD,EACAlB,EAAK,UAAU,OAAS,SAAS9G,EAAM,CACrCA,EAAK,QAAUA,EAAK,SAAW,CAAC,EAChC,IAAIwB,EAAO,KAAK,KAChB,GAAIA,IAAS,OAAQ,CACnB,GAAIxB,EAAK,SAAWA,EAAK,QAAQwB,CAAI,EACnC,OAAOA,EAETxB,EAAK,QAAQwB,CAAI,EAAI,EACvB,CACA,IAAIuF,EAAS,CAAC,EACV,KAAK,OAAS,SAChBA,EAAO,KAAOvF,GAEhBuF,EAAO,KAAO,KAAK,SACnB,IAAIsD,EAAgB,KAAK,OAAOtD,EAAQ/G,CAAI,EAC5C,OAAIqK,IAAkB,SACpBtD,EAASsD,GAEPrK,EAAK,cACH,KAAK,SAAW,KAAK,QAAQ,SAC/B+G,EAAO,QAAU,KAAK,SAEpB,KAAK,MAAQ,SACfA,EAAO,IAAM,KAAK,MAGfA,CACT,EACAD,EAAK,UAAU,yBAA2B,UAAW,CACnD,IAAItF,EAAO,KAAK,WAChB,GAAIA,IAAS,OACX,OAAO,KAET,IAAI8I,EAAO,CAAC9I,EAAK,QAAQ,GAAG,EAAI,SAAWA,EAAO,KAAO,QAAUA,EAC/D+I,EAAO,kCAAoCD,EAAO,aAClDF,EAAS,IAAI,SAASG,CAAI,EAAE,EAChC,OAAAH,EAAO,KAAO,KACdA,EAAO,UAAU,OAAS,IAAI,SAAS,UAAYE,EAAO,GAAG,EAC7DF,EAAO,UAAU,UAAYA,EAAO,UAAU,OACvCA,CACT,EACAtD,EAAK,UAAU,MAAQ,SAAS/B,EAAK,CACnC,IAAIrE,EAAMqE,EAAI,IACViD,EAAM,KAAK,MAAMjD,CAAG,EACxB,OAAAA,EAAI,IAAMrE,EACHsH,CACT,EACAlB,EAAK,UAAU,OAASrB,EAAM,iBAC9BqB,EAAK,UAAU,MAAQrB,EAAM,iBAC7BqB,EAAK,UAAU,OAASrB,EAAM,iBAC9BqB,EAAK,UAAU,OAASrB,EAAM,iBAC9BqB,EAAK,UAAU,MAAQrB,EAAM,iBAC7BqB,EAAK,UAAU,MAAQrB,EAAM,iBAC7BqB,EAAK,UAAU,QAAUrB,EAAM,iBAC/BqB,EAAK,UAAU,OAASrB,EAAM,iBAC9BqB,EAAK,UAAU,WAAa,UAAW,CACrC,OAAO,KAAK,OACd,EACAA,EAAK,UAAU,eAAiBA,EAAK,UAAU,YAC/CA,EAAK,UAAU,QAAU,SAAS0D,EAAU,CAC1C,OAAO,KAAK,MAAQ,CAACA,EAAW,KAAK,KAAO,KAAK,UACnD,EACA1D,EAAK,UAAU,UAAYA,EAAK,UAAU,OAC1CA,EAAK,UAAU,YAAc,UAAW,CACtC,OAAO,KAAK,QACd,EACA,SAAS2D,EAAcC,EAAU,CAC/B5D,EAAK,KAAK,IAAI,EACd,KAAK,mBAAqB,KAAK,yBAAyB,EACnD4D,GACH,OAAO,OAAO,IAAI,CAEtB,CACA5L,EAAK,SAAS2L,EAAe3D,CAAI,EACjC2D,EAAc,UAAU,QAAU,SAASnB,EAAUtC,EAAM,CACrDA,EAAK,WAAa,KAAK,WACzBsC,EAAS,MAAQ,KAAK,MAE1B,EACAmB,EAAc,UAAU,MAAQ,SAASzC,EAAK,CAC5C,YAAK,OAAOA,EAAK,OAAQ2C,EAAiB,EACnC3C,CACT,EACAyC,EAAc,UAAU,OAAS,UAAW,CAC1C,OAAO,KAAK,QACd,EACAA,EAAc,UAAU,QAAUhF,EAAM,QACxC,SAASe,GAAW,CAClBiE,EAAc,KAAK,IAAI,CACzB,CACA3L,EAAK,SAAS0H,EAAUiE,CAAa,EACrCjE,EAAS,UAAU,OAAS,SAASwB,EAAKxE,EAAO0G,EAAM,CACrD,IAAI3F,EAAKyD,IAAQ,KACjB,MAAI,CAACzD,GAAM2F,GACTA,EAAKlC,EAAK,IAAI,EAETzD,CACT,EACAiC,EAAS,UAAU,MAAQ,UAAW,CACpC,OAAO,IACT,EACAA,EAAS,UAAU,MAAQ,UAAW,CACtC,EACAA,EAAS,UAAU,OAAS,SAASzB,EAAKiD,EAAK,CACzCA,IAAQ,MACV2C,GAAkB3C,EAAK,IAAI,CAE/B,EACAxB,EAAS,UAAU,OAAS,UAAW,CACrC,MAAO,EACT,EACAA,EAAS,UAAU,QAAUA,EAAS,UAAU,OAChDA,EAAS,UAAU,SAAW,OAC9BA,EAAS,UAAU,OAASA,EAAS,UAAU,MAC/C,SAASV,GAAc,CACrB2E,EAAc,KAAK,IAAI,CACzB,CACA3L,EAAK,SAASgH,EAAa2E,CAAa,EACxC3E,EAAY,UAAU,OAAS,SAASkC,EAAKxE,EAAO0G,EAAM,CACxD,IAAI3F,EAAK,OAAOyD,GAAO,UACvB,MAAI,CAACzD,GAAM2F,GACTA,EAAKlC,EAAK,IAAI,EAETzD,CACT,EACAuB,EAAY,UAAU,MAAQ,SAASf,EAAK,CAC1C,OAAOA,EAAI,YAAY,CACzB,EACAe,EAAY,UAAU,MAAQ,SAASf,EAAK,CAC1CA,EAAI,YAAY,CAClB,EACAe,EAAY,UAAU,OAAS,SAASf,EAAKiD,EAAK,CAC5C,OAAOA,GAAO,WAChB2C,GAAkB3C,EAAK,IAAI,EAE7BjD,EAAI,aAAaiD,CAAG,CACtB,EACAlC,EAAY,UAAU,OAAS,SAAS8E,EAAMC,EAAM,CAClD,OAAOD,EAAK,aAAaC,CAAI,CAC/B,EACA/E,EAAY,UAAU,SAAW,UACjCA,EAAY,UAAU,OAAS,UAAW,CACxC,OAAOY,EAAO,YAAY,CAC5B,EACA,SAASL,IAAU,CACjBoE,EAAc,KAAK,IAAI,CACzB,CACA3L,EAAK,SAASuH,GAASoE,CAAa,EACpCpE,GAAQ,UAAU,OAAS,SAAS2B,EAAKxE,EAAO0G,EAAM,CACpD,IAAI3F,EAAKyD,KAASA,EAAM,GACxB,MAAI,CAACzD,GAAM2F,GACTA,EAAKlC,EAAK,IAAI,EAETzD,CACT,EACA8B,GAAQ,UAAU,MAAQ,SAAStB,EAAK,CACtC,OAAOA,EAAI,QAAQ,CACrB,EACAsB,GAAQ,UAAU,MAAQ,SAAStB,EAAK,CACtCA,EAAI,QAAQ,CACd,EACAsB,GAAQ,UAAU,OAAS,SAAStB,EAAKiD,EAAK,CACxCA,KAASA,EAAM,IACjB2C,GAAkB3C,EAAK,IAAI,EAE7BjD,EAAI,SAASiD,CAAG,CAClB,EACA3B,GAAQ,UAAU,OAAS,SAASuE,EAAMC,EAAM,CAC9C,OAAOD,EAAK,SAASC,CAAI,CAC3B,EACAxE,GAAQ,UAAU,SAAW,MAC7BA,GAAQ,UAAU,OAAS,UAAW,CACpC,OAAOK,EAAO,QAAQ,GAAG,EAAI,CAC/B,EACA,SAASJ,GAAW,CAClBmE,EAAc,KAAK,IAAI,CACzB,CACA3L,EAAK,SAASwH,EAAUmE,CAAa,EACrCnE,EAAS,UAAU,OAAS,SAAS0B,EAAKxE,EAAO0G,EAAM,CACrD,IAAI3F,EAAK,OAAOyD,GAAO,UAAYA,EAAM,IAAM,GAAK8C,GAAW9C,CAAG,EAClE,MAAI,CAACzD,GAAM2F,GACTA,EAAKlC,EAAK,IAAI,EAETzD,CACT,EACA+B,EAAS,UAAU,MAAQ,SAASvB,EAAK,CACvC,IAAIP,EAAIO,EAAI,SAAS,EACrB,GAAI,CAAC+F,GAAWtG,CAAC,EACf,MAAM,IAAI,MAAM,0BAA0B,EAE5C,OAAOA,CACT,EACA8B,EAAS,UAAU,MAAQ,SAASvB,EAAK,CACvCA,EAAI,SAAS,CACf,EACAuB,EAAS,UAAU,OAAS,SAASvB,EAAKiD,EAAK,EACzC,OAAOA,GAAO,UAAYA,EAAM,GAAK,CAAC8C,GAAW9C,CAAG,IACtD2C,GAAkB3C,EAAK,IAAI,EAE7BjD,EAAI,UAAUiD,CAAG,CACnB,EACA1B,EAAS,UAAU,OAAS,SAASsE,EAAMC,EAAM,CAC/C,OAAOD,EAAK,UAAUC,CAAI,CAC5B,EACAvE,EAAS,UAAU,QAAU,SAASgD,EAAUtC,EAAM,CACpD,OAAQA,EAAK,SAAU,CACrB,IAAK,MACHsC,EAAS,MAAQtC,EAAK,MACtB,MACF,IAAK,gBACL,IAAK,OACHsC,EAAS,MAAQ,KAAK,KAC1B,CACF,EACAhD,EAAS,UAAU,SAAW,OAC9BA,EAAS,UAAU,OAAS,UAAW,CACrC,OAAOI,EAAO,QAAQ,CACxB,EACAJ,EAAS,OAAS,SAASyE,EAASC,EAAU,CAC5CD,EAAUA,GAAW,CAAC,EACtB,IAAIE,EAAU,CACZ,SAAU,YACV,WAAY,cACZ,SAAU,YACV,OAAQ,UACR,QAAS,WACT,QAAS,SACX,EACIjE,EAAO,IAAIkE,EAAiBF,CAAQ,EACxC,cAAO,KAAKC,CAAO,EAAE,QAAQ,SAASzJ,EAAM,CAC1C,GAAIuJ,EAAQvJ,CAAI,IAAM,OACpB,MAAM,IAAI,MAAMpC,EAAG,oCAAqCoC,CAAI,CAAC,EAE/DwF,EAAKiE,EAAQzJ,CAAI,CAAC,EAAIuJ,EAAQvJ,CAAI,CACpC,CAAC,EACM,OAAO,OAAOwF,CAAI,CAC3B,EACA,SAASZ,GAAY,CACnBqE,EAAc,KAAK,IAAI,CACzB,CACA3L,EAAK,SAASsH,EAAWqE,CAAa,EACtCrE,EAAU,UAAU,OAAS,SAAS4B,EAAKxE,EAAO0G,EAAM,CACtD,IAAI3F,EAAK,OAAOyD,GAAO,SACvB,MAAI,CAACzD,GAAM2F,GACTA,EAAKlC,EAAK,IAAI,EAETzD,CACT,EACA6B,EAAU,UAAU,MAAQ,SAASrB,EAAK,CACxC,OAAOA,EAAI,UAAU,CACvB,EACAqB,EAAU,UAAU,MAAQ,SAASrB,EAAK,CACxCA,EAAI,UAAU,CAChB,EACAqB,EAAU,UAAU,OAAS,SAASrB,EAAKiD,EAAK,CAC1C,OAAOA,GAAO,UAChB2C,GAAkB3C,EAAK,IAAI,EAE7BjD,EAAI,WAAWiD,CAAG,CACpB,EACA5B,EAAU,UAAU,OAAS,SAASwE,EAAMC,EAAM,CAChD,OAAOD,EAAK,WAAWC,CAAI,CAC7B,EACAzE,EAAU,UAAU,QAAU,SAASkD,EAAUtC,EAAM,CACrD,OAAQA,EAAK,SAAU,CACrB,IAAK,QACL,IAAK,MACHsC,EAAS,MAAQtC,EAAK,MACtB,MACF,IAAK,gBACL,IAAK,OACHsC,EAAS,MAAQ,SAASvE,EAAK,CAC7B,OAAOA,EAAI,SAAS,CACtB,CACJ,CACF,EACAqB,EAAU,UAAU,SAAW,QAC/BA,EAAU,UAAU,OAAS,UAAW,CACtC,OAAOM,EAAO,UAAU,GAAG,CAC7B,EACA,SAASV,GAAa,CACpByE,EAAc,KAAK,IAAI,CACzB,CACA3L,EAAK,SAASkH,EAAYyE,CAAa,EACvCzE,EAAW,UAAU,OAAS,SAASgC,EAAKxE,EAAO0G,EAAM,CACvD,IAAI3F,EAAK,OAAOyD,GAAO,SACvB,MAAI,CAACzD,GAAM2F,GACTA,EAAKlC,EAAK,IAAI,EAETzD,CACT,EACAyB,EAAW,UAAU,MAAQ,SAASjB,EAAK,CACzC,OAAOA,EAAI,WAAW,CACxB,EACAiB,EAAW,UAAU,MAAQ,SAASjB,EAAK,CACzCA,EAAI,WAAW,CACjB,EACAiB,EAAW,UAAU,OAAS,SAASjB,EAAKiD,EAAK,CAC3C,OAAOA,GAAO,UAChB2C,GAAkB3C,EAAK,IAAI,EAE7BjD,EAAI,YAAYiD,CAAG,CACrB,EACAhC,EAAW,UAAU,OAAS,SAAS4E,EAAMC,EAAM,CACjD,OAAOD,EAAK,YAAYC,CAAI,CAC9B,EACA7E,EAAW,UAAU,QAAU,SAASsD,EAAUtC,EAAM,CACtD,OAAQA,EAAK,SAAU,CACrB,IAAK,SACL,IAAK,QACL,IAAK,MACHsC,EAAS,MAAQtC,EAAK,MACtB,MACF,IAAK,gBACL,IAAK,OACHsC,EAAS,MAAQ,SAASvE,EAAK,CAC7B,OAAOA,EAAI,SAAS,CACtB,CACJ,CACF,EACAiB,EAAW,UAAU,SAAW,SAChCA,EAAW,UAAU,OAAS,UAAW,CACvC,OAAOU,EAAO,UAAU,CAC1B,EACA,SAASD,GAAa,CACpBgE,EAAc,KAAK,IAAI,CACzB,CACA3L,EAAK,SAAS2H,EAAYgE,CAAa,EACvChE,EAAW,UAAU,OAAS,SAASuB,EAAKxE,EAAO0G,EAAM,CACvD,IAAI3F,EAAK,OAAOyD,GAAO,SACvB,MAAI,CAACzD,GAAM2F,GACTA,EAAKlC,EAAK,IAAI,EAETzD,CACT,EACAkC,EAAW,UAAU,MAAQ,SAAS1B,EAAK,CACzC,OAAOA,EAAI,WAAW,CACxB,EACA0B,EAAW,UAAU,MAAQ,SAAS1B,EAAK,CACzCA,EAAI,WAAW,CACjB,EACA0B,EAAW,UAAU,OAAS,SAAS1B,EAAKiD,EAAK,CAC3C,OAAOA,GAAO,UAChB2C,GAAkB3C,EAAK,IAAI,EAE7BjD,EAAI,YAAYiD,CAAG,CACrB,EACAvB,EAAW,UAAU,OAAS,SAASmE,EAAMC,EAAM,CACjD,OAAOD,EAAK,YAAYC,CAAI,CAC9B,EACApE,EAAW,UAAU,QAAU,SAAS6C,EAAUtC,EAAM,CACtD,OAAQA,EAAK,SAAU,CACrB,IAAK,QACL,IAAK,SACHsC,EAAS,MAAQ,KAAK,KAC1B,CACF,EACA7C,EAAW,UAAU,SAAW,SAChCA,EAAW,UAAU,OAAS,UAAW,CACvC,OAAOC,EAAO,WAAWA,EAAO,QAAQ,EAAE,CAAC,CAC7C,EACA,SAASX,GAAY,CACnB0E,EAAc,KAAK,IAAI,CACzB,CACA3L,EAAK,SAASiH,EAAW0E,CAAa,EACtC1E,EAAU,UAAU,OAAS,SAASiC,EAAKxE,EAAO0G,EAAM,CACtD,IAAI3F,EAAKvF,EAAQ,SAASgJ,CAAG,EAC7B,MAAI,CAACzD,GAAM2F,GACTA,EAAKlC,EAAK,IAAI,EAETzD,CACT,EACAwB,EAAU,UAAU,MAAQ,SAAShB,EAAK,CACxC,OAAOA,EAAI,UAAU,CACvB,EACAgB,EAAU,UAAU,MAAQ,SAAShB,EAAK,CACxCA,EAAI,UAAU,CAChB,EACAgB,EAAU,UAAU,OAAS,SAAShB,EAAKiD,EAAK,CACzChJ,EAAQ,SAASgJ,CAAG,GACvB2C,GAAkB3C,EAAK,IAAI,EAE7BjD,EAAI,WAAWiD,CAAG,CACpB,EACAjC,EAAU,UAAU,OAAS,SAAS6E,EAAMC,EAAM,CAChD,OAAOD,EAAK,WAAWC,CAAI,CAC7B,EACA9E,EAAU,UAAU,QAAUU,EAAW,UAAU,QACnDV,EAAU,UAAU,MAAQ,SAAShF,EAAKf,EAAM,CAC9C,IAAIsE,EACJ,QAAStE,GAAQA,EAAK,QAAU,EAAG,CACjC,IAAK,GACH,YAAK,OAAOe,EAAK,OAAQ4J,EAAiB,EACnC5J,EAAI,SAAS,QAAQ,EAC9B,IAAK,GACH,GAAI,OAAOA,GAAO,SAChB,MAAM,IAAI,MAAM3B,EAAG,8BAA+B2B,CAAG,CAAC,EAExD,OAAAuD,EAAMmB,EAAM,WAAW1E,EAAK,QAAQ,EACpC,KAAK,OAAOuD,EAAK,OAAQqG,EAAiB,EACnCrG,EACT,IAAK,GACH,GAAI,CAAC6G,GAAapK,CAAG,EACnB,MAAM,IAAI,MAAM3B,EAAG,8BAA+B2B,CAAG,CAAC,EAExD,OAAAuD,EAAMmB,EAAM,WAAW1E,EAAI,IAAI,EAC/B,KAAK,OAAOuD,EAAK,OAAQqG,EAAiB,EACnCrG,EACT,QACE,YAAK,OAAOvD,EAAK,OAAQ4J,EAAiB,EACnClF,EAAM,WAAW1E,CAAG,CAC/B,CACF,EACAgF,EAAU,UAAU,QAAU/G,EAAQ,QACtC+G,EAAU,UAAU,SAAW,QAC/BA,EAAU,UAAU,OAAS,UAAW,CACtC,OAAOW,EAAO,WAAWA,EAAO,QAAQ,EAAE,CAAC,CAC7C,EACA,SAAS0E,GAAUrE,EAAQ/G,EAAM,CAE/B,GADA8G,EAAK,KAAK,IAAI,EACV,CAAC,MAAM,QAAQC,CAAM,EACvB,MAAM,IAAI,MAAM3H,EAAG,6BAA8B2H,CAAM,CAAC,EAE1D,GAAI,CAACA,EAAO,OACV,MAAM,IAAI,MAAM,aAAa,EAE/B,KAAK,MAAQ,OAAO,OAAOA,EAAO,IAAI,SAAShG,EAAK,CAClD,OAAO+F,EAAK,UAAU/F,EAAKf,CAAI,CACjC,CAAC,CAAC,EACF,KAAK,eAAiB,CAAC,EACvB,KAAK,MAAM,QAAQ,SAASgH,EAAMrG,EAAG,CACnC,GAAImG,EAAK,OAAOE,EAAM,OAAO,EAC3B,MAAM,IAAI,MAAM,kCAAkC,EAEpD,IAAIqE,EAASrE,EAAK,WAClB,GAAI,KAAK,eAAeqE,CAAM,IAAM,OAClC,MAAM,IAAI,MAAMjM,EAAG,kCAAmCiM,CAAM,CAAC,EAE/D,KAAK,eAAeA,CAAM,EAAI1K,CAChC,EAAG,IAAI,CACT,CACA7B,EAAK,SAASsM,GAAWtE,CAAI,EAC7BsE,GAAU,UAAU,mBAAqB,UAAW,CAClD,MAAM,IAAI,MAAM,mCAAmC,CACrD,EACAA,GAAU,UAAU,MAAQ,SAASrG,EAAK,CACxC,KAAK,MAAMA,EAAI,SAAS,CAAC,EAAE,MAAMA,CAAG,CACtC,EACAqG,GAAU,UAAU,OAAS,SAASR,EAAMC,EAAM,CAChD,IAAIhL,EAAK+K,EAAK,SAAS,EACnB9K,EAAK+K,EAAK,SAAS,EACvB,OAAIhL,IAAOC,EACF,KAAK,MAAMD,CAAE,EAAE,OAAO+K,EAAMC,CAAI,EAEhChL,EAAKC,EAAK,GAAK,CAE1B,EACAsL,GAAU,UAAU,OAAS,SAASrE,EAAQ/G,EAAM,CAClD,OAAO,KAAK,MAAM,IAAI,SAASiJ,EAAG,CAChC,OAAOA,EAAE,OAAOjJ,CAAI,CACtB,CAAC,CACH,EACAoL,GAAU,UAAU,SAAW,UAAW,CACxC,OAAO,KAAK,KACd,EACA,SAAS5D,EAAmBT,EAAQ/G,EAAM,CACxCoL,GAAU,KAAK,KAAMrE,EAAQ/G,CAAI,EACjC,KAAK,iBAAmB,KACxB,KAAK,eAAiB,CAAC,EACvB,KAAK,MAAM,QAAQ,SAASgH,EAAMyC,EAAO,CACvC,GAAI3C,EAAK,OAAOE,EAAM,WAAY,SAAS,EACpC,KAAK,mBACR,KAAK,iBAAmB,CAAC,GAE3B,KAAK,iBAAiB,KAAK,CAAE,MAAAyC,EAAO,KAAAzC,CAAK,CAAC,MACrC,CACL,IAAIyB,EAASC,GAAc1B,CAAI,EAC/B,GAAI,KAAK,eAAeyB,CAAM,IAAM,OAClC,MAAM,IAAI,MAAMrJ,EAAG,gCAAiC,IAAI,CAAC,EAE3D,KAAK,eAAeqJ,CAAM,EAAIgB,CAChC,CACF,EAAG,IAAI,EACP,OAAO,OAAO,IAAI,CACpB,CACA3K,EAAK,SAAS0I,EAAoB4D,EAAS,EAC3C5D,EAAmB,UAAU,UAAY,SAASQ,EAAK,CACrD,IAAIyB,EAAQ,KAAK,eAAe6B,GAAetD,CAAG,CAAC,EACnD,OAAI,KAAK,mBACPyB,EAAQ,KAAK,gBAAgBzB,EAAKyB,CAAK,GAElCA,CACT,EACAjC,EAAmB,UAAU,gBAAkB,SAAS2B,EAAKM,EAAO,CAClE,IAAI8B,EAAkB,KAAK,iBACvB5K,EAAGC,EAAGyK,EACV,IAAK1K,EAAI,EAAGC,EAAI2K,EAAgB,OAAQ5K,EAAIC,EAAGD,IAE7C,GADA0K,EAASE,EAAgB5K,CAAC,EACtB0K,EAAO,KAAK,OAAOlC,CAAG,EACxB,GAAIM,IAAU,OACZA,EAAQ4B,EAAO,UAEf,OAAM,IAAI,MAAM,sBAAsB,EAI5C,OAAO5B,CACT,EACAjC,EAAmB,UAAU,OAAS,SAASQ,EAAKxE,EAAO0G,EAAMC,EAAM,CACrE,IAAIV,EAAQ,KAAK,UAAUzB,CAAG,EAC1BzD,EAAKkF,IAAU,OACnB,OAAIlF,EACK,KAAK,MAAMkF,CAAK,EAAE,OAAOzB,EAAKxE,EAAO0G,EAAMC,CAAI,GAEpDD,GACFA,EAAKlC,EAAK,IAAI,EAETzD,EACT,EACAiD,EAAmB,UAAU,MAAQ,SAASzC,EAAK,CACjD,IAAI0E,EAAQ1E,EAAI,SAAS,EACrBuD,EAAa,KAAK,MAAMmB,CAAK,EACjC,GAAInB,EACF,OAAOA,EAAW,MAAMvD,CAAG,EAE3B,MAAM,IAAI,MAAM3F,EAAG,0BAA2BqK,CAAK,CAAC,CAExD,EACAjC,EAAmB,UAAU,OAAS,SAASzC,EAAKiD,EAAK,CACvD,IAAIyB,EAAQ,KAAK,UAAUzB,CAAG,EAC1ByB,IAAU,QACZkB,GAAkB3C,EAAK,IAAI,EAE7BjD,EAAI,UAAU0E,CAAK,EACfzB,IAAQ,MACV,KAAK,MAAMyB,CAAK,EAAE,OAAO1E,EAAKiD,CAAG,CAErC,EACAR,EAAmB,UAAU,QAAU,SAAS8B,EAAUtC,EAAMhH,EAAM,CACpE,IAAIW,EAAGC,EAAG4K,EACV,IAAK7K,EAAI,EAAGC,EAAI,KAAK,MAAM,OAAQD,EAAIC,EAAGD,IAAK,CAC7C,GAAI,CACF6K,EAAe,KAAK,MAAM7K,CAAC,EAAE,eAAeqG,EAAMhH,CAAI,CACxD,MAAc,CACZ,QACF,CACAsJ,EAAS,MAAQ,SAASvE,EAAK,CAC7B,OAAOyG,EAAa,MAAMzG,CAAG,CAC/B,EACA,MACF,CACF,EACAyC,EAAmB,UAAU,MAAQ,SAASQ,EAAKhI,EAAM,CACvD,IAAIyL,EAASzL,GAAQA,EAAK,OAAS,EAC/B0L,EAAO1L,GAAQA,EAAK,KAAO,EAC3ByJ,EACJ,GAAIiC,IAAS,EACXjC,EAAQ,MACH,CACL,OAAQgC,EAAQ,CACd,IAAK,GACCN,GAAanD,CAAG,GAAK,KAAK,eAAe,SAAW,OACtDyB,EAAQ,KAAK,eAAe,OAE5BA,EAAQ,KAAK,UAAUzB,CAAG,EAE5B,MACF,IAAK,GACH,GAAIA,IAAQ,KACVyB,EAAQ,KAAK,eAAe,aACnB,OAAOzB,GAAQ,SAAU,CAClC,IAAI2D,EAAO,OAAO,KAAK3D,CAAG,EACtB2D,EAAK,SAAW,IAClBlC,EAAQ,KAAK,eAAekC,EAAK,CAAC,CAAC,EACnC3D,EAAMA,EAAI2D,EAAK,CAAC,CAAC,EAErB,CACA,MACF,QACElC,EAAQ,KAAK,UAAUzB,CAAG,CAC9B,CACIyB,IAAU,QACZkB,GAAkB3C,EAAK,IAAI,CAE/B,CACA,IAAIhB,EAAO,KAAK,MAAMyC,CAAK,EAC3B,GAAIzB,IAAQ,MAAQ0D,IAAS,EAC3B,OAAO1E,EAAK,MAAMgB,EAAKhI,CAAI,EAE3B,OAAQyL,EAAQ,CACd,IAAK,GACH,IAAI1K,EAAM,CAAC,EACX,OAAAA,EAAIiG,EAAK,UAAU,EAAIA,EAAK,MAAMgB,EAAKhI,CAAI,EACpCe,EACT,QACE,OAAOiG,EAAK,MAAMgB,EAAKhI,CAAI,CAC/B,CAEJ,EACAwH,EAAmB,UAAU,QAAU,SAASoE,EAAMC,EAAM,CAC1D,IAAIC,EAAS,KAAK,UAAUF,CAAI,EAC5BG,EAAS,KAAK,UAAUF,CAAI,EAChC,GAAIC,IAAW,OACbnB,GAAkBiB,EAAM,IAAI,UACnBG,IAAW,OACpBpB,GAAkBkB,EAAM,IAAI,MACvB,QAAIC,IAAWC,EACb,KAAK,MAAMD,CAAM,EAAE,QAAQF,EAAMC,CAAI,EAErCpG,EAAM,QAAQqG,EAAQC,CAAM,CAEvC,EACAvE,EAAmB,UAAU,SAAW,kBACxCA,EAAmB,UAAU,OAAS,UAAW,CAC/C,IAAIiC,EAAQ/C,EAAO,QAAQ,KAAK,MAAM,MAAM,EAC5C,OAAO,KAAK,MAAM+C,CAAK,EAAE,OAAO,CAClC,EACA,SAASlC,EAAiBR,EAAQ/G,EAAM,CACtCoL,GAAU,KAAK,KAAMrE,EAAQ/G,CAAI,EACjC,OAAO,OAAO,IAAI,CACpB,CACAlB,EAAK,SAASyI,EAAkB6D,EAAS,EACzC7D,EAAiB,UAAU,OAAS,SAASS,EAAKxE,EAAO0G,EAAMC,EAAM,CACnE,IAAI5F,EAAK,GACT,GAAIyD,IAAQ,KACVzD,EAAK,KAAK,eAAe,OAAY,eAC5B,OAAOyD,GAAO,SAAU,CACjC,IAAI2D,EAAO,OAAO,KAAK3D,CAAG,EAC1B,GAAI2D,EAAK,SAAW,EAAG,CACrB,IAAInK,EAAOmK,EAAK,CAAC,EACblC,EAAQ,KAAK,eAAejI,CAAI,EACpC,GAAIiI,IAAU,OACZ,OAAIS,GACFC,EAAK,KAAK3I,CAAI,EACd+C,EAAK,KAAK,MAAMkF,CAAK,EAAE,OAAOzB,EAAIxG,CAAI,EAAGgC,EAAO0G,EAAMC,CAAI,EAC1DA,EAAK,IAAI,EACF5F,GAEA,KAAK,MAAMkF,CAAK,EAAE,OAAOzB,EAAIxG,CAAI,EAAGgC,CAAK,CAGtD,CACF,CACA,MAAI,CAACe,GAAM2F,GACTA,EAAKlC,EAAK,IAAI,EAETzD,CACT,EACAgD,EAAiB,UAAU,MAAQ,SAASxC,EAAK,CAC/C,IAAIiC,EAAO,KAAK,MAAMjC,EAAI,SAAS,CAAC,EACpC,GAAI,CAACiC,EACH,MAAM,IAAI,MAAM5H,EAAG,qBAAqB,CAAC,EAE3C,IAAIgL,EAASpD,EAAK,mBAClB,OAAIoD,IAAW,KACN,KAEA,IAAIA,EAAOpD,EAAK,MAAMjC,CAAG,CAAC,CAErC,EACAwC,EAAiB,UAAU,OAAS,SAASxC,EAAKiD,EAAK,CACrD,IAAIyB,EAAOkC,EAAMnK,EACbwG,IAAQ,MACVyB,EAAQ,KAAK,eAAe,KACxBA,IAAU,QACZkB,GAAkB3C,EAAK,IAAI,EAE7BjD,EAAI,UAAU0E,CAAK,IAEnBkC,EAAO,OAAO,KAAK3D,CAAG,EAClB2D,EAAK,SAAW,IAClBnK,EAAOmK,EAAK,CAAC,EACblC,EAAQ,KAAK,eAAejI,CAAI,GAE9BiI,IAAU,QACZkB,GAAkB3C,EAAK,IAAI,EAE7BjD,EAAI,UAAU0E,CAAK,EACnB,KAAK,MAAMA,CAAK,EAAE,OAAO1E,EAAKiD,EAAIxG,CAAI,CAAC,EAE3C,EACA+F,EAAiB,UAAU,QAAU,SAAS+B,EAAUtC,EAAMhH,EAAM,CAClE,IAAIW,EAAGC,EAAG4K,EAAcpB,EACxB,IAAKzJ,EAAI,EAAGC,EAAI,KAAK,MAAM,OAAQD,EAAIC,EAAGD,IAAK,CAC7C,GAAI,CACF6K,EAAe,KAAK,MAAM7K,CAAC,EAAE,eAAeqG,EAAMhH,CAAI,CACxD,MAAc,CACZ,QACF,CACAoK,EAAS,KAAK,MAAMzJ,CAAC,EAAE,mBACnByJ,EACFd,EAAS,MAAQ,SAASvE,EAAK,CAC7B,OAAO,IAAIqF,EAAOoB,EAAa,MAAMzG,CAAG,CAAC,CAC3C,EAEAuE,EAAS,MAAQ,UAAW,CAC1B,OAAO,IACT,EAEF,MACF,CACF,EACA/B,EAAiB,UAAU,MAAQ,SAASS,EAAKhI,EAAM,CACrD,IAAI0L,EAAO1L,GAAQA,EAAK,KAAO,EAC/B,GAAI0L,IAAS,EAAG,CACd,IAAIM,EAAY,KAAK,MAAM,CAAC,EAC5B,OAAIhE,IAAQ,MAAQgE,EAAU,WAAa,OAClC,KAEF,IAAIA,EAAU,mBAAmBA,EAAU,MAAMhE,EAAKhI,CAAI,CAAC,CACpE,CACA,GAAIgI,IAAQ,MAAQ,KAAK,eAAe,OAAY,OAClD,OAAO,KAET,IAAIrH,EAAGC,EAAGG,EACV,GAAI,OAAOiH,GAAO,SAAU,CAC1B,IAAI2D,EAAO,OAAO,KAAK3D,CAAG,EAC1B,GAAI2D,EAAK,SAAW,EAAG,CACrB,IAAInK,EAAOmK,EAAK,CAAC,EAEjB,GADAhL,EAAI,KAAK,eAAea,CAAI,EACxBb,IAAM,QAAUX,EAAK,aAAc,CACrC,IAAI8D,EAAIkD,EACR,IAAKlD,EAAK,EAAGlD,EAAI,KAAK,MAAM,OAAQkD,EAAKlD,EAAGkD,IAE1C,GADAkD,EAAO,KAAK,MAAMlD,CAAE,EAChBkD,EAAK,MAAQxF,IAASiE,EAAM,UAAUuB,EAAK,IAAI,EAAG,CACpDrG,EAAImD,EACJ,KACF,CAEJ,CACInD,IAAM,SACRI,EAAM,KAAK,MAAMJ,CAAC,EAAE,MAAMqH,EAAIxG,CAAI,EAAGxB,CAAI,EAE7C,CACF,CACA,GAAI0L,IAAS,GAAK3K,IAAQ,OAGxB,IAFAJ,EAAI,EACJC,EAAI,KAAK,MAAM,OACRD,EAAIC,GAAKG,IAAQ,QACtB,GAAI,CACFA,EAAM,KAAK,MAAMJ,CAAC,EAAE,MAAMqH,EAAKhI,CAAI,CACrC,MAAc,CACZW,GACF,CAGJ,GAAII,IAAQ,OACV,OAAO2K,IAAS,EAAI3K,EAAM,IAAI,KAAK,MAAMJ,CAAC,EAAE,mBAAmBI,CAAG,EAEpE4J,GAAkB3C,EAAK,IAAI,CAC7B,EACAT,EAAiB,UAAU,QAAU,SAASqE,EAAMC,EAAM,CACxD,IAAII,EAAQL,IAAS,KAAO,OAAS,OAAO,KAAKA,CAAI,EAAE,CAAC,EACpDM,EAAQL,IAAS,KAAO,OAAS,OAAO,KAAKA,CAAI,EAAE,CAAC,EACpDpC,EAAQ,KAAK,eAAewC,CAAK,EACrC,OAAIA,IAAUC,EACLD,IAAU,OAAS,EAAI,KAAK,MAAMxC,CAAK,EAAE,QAAQmC,EAAKK,CAAK,EAAGJ,EAAKI,CAAK,CAAC,EAEzExG,EAAM,QAAQgE,EAAO,KAAK,eAAeyC,CAAK,CAAC,CAE1D,EACA3E,EAAiB,UAAU,SAAW,gBACtCA,EAAiB,UAAU,OAAS,UAAW,CAC7C,IAAIkC,EAAQ/C,EAAO,QAAQ,KAAK,MAAM,MAAM,EACxCM,EAAO,KAAK,MAAMyC,CAAK,EACvBW,EAASpD,EAAK,mBAClB,OAAKoD,EAGE,IAAIA,EAAOpD,EAAK,OAAO,CAAC,EAFtB,IAGX,EACA,SAASf,EAASc,EAAQ/G,EAAM,CAE9B,GADA8G,EAAK,KAAK,KAAMC,EAAQ/G,CAAI,EACxB,CAAC,MAAM,QAAQ+G,EAAO,OAAO,GAAK,CAACA,EAAO,QAAQ,OACpD,MAAM,IAAI,MAAM3H,EAAG,2BAA4B2H,EAAO,OAAO,CAAC,EAchE,GAZA,KAAK,QAAU,OAAO,OAAOA,EAAO,QAAQ,MAAM,CAAC,EACnD,KAAK,SAAW,CAAC,EACjB,KAAK,QAAQ,QAAQ,SAASoF,EAAQxL,EAAG,CACvC,GAAI,CAAC8E,EAAM,YAAY0G,CAAM,EAC3B,MAAM,IAAI,MAAM/M,EAAG,wBAAyB,KAAM+M,CAAM,CAAC,EAE3D,GAAI,KAAK,SAASA,CAAM,IAAM,OAC5B,MAAM,IAAI,MAAM/M,EAAG,0BAA2B,KAAM+M,CAAM,CAAC,EAE7D,KAAK,SAASA,CAAM,EAAIxL,CAC1B,EAAG,IAAI,EACP,KAAK,QAAUoG,EAAO,QAClB,KAAK,UAAY,QAAU,KAAK,SAAS,KAAK,OAAO,IAAM,OAC7D,MAAM,IAAI,MAAM3H,EAAG,yBAA0B,KAAM,KAAK,OAAO,CAAC,EAElE,KAAK,mBAAqB,KAAK,yBAAyB,EACxD,OAAO,OAAO,IAAI,CACpB,CACAN,EAAK,SAASmH,EAAUa,CAAI,EAC5Bb,EAAS,UAAU,OAAS,SAAS+B,EAAKxE,EAAO0G,EAAM,CACrD,IAAI3F,EAAK,KAAK,SAASyD,CAAG,IAAM,OAChC,MAAI,CAACzD,GAAM2F,GACTA,EAAKlC,EAAK,IAAI,EAETzD,CACT,EACA0B,EAAS,UAAU,MAAQ,SAASlB,EAAK,CACvC,IAAI0E,EAAQ1E,EAAI,SAAS,EACrBoH,EAAS,KAAK,QAAQ1C,CAAK,EAC/B,GAAI0C,IAAW,OACb,MAAM,IAAI,MAAM/M,EAAG,4BAA6B,KAAK,KAAMqK,CAAK,CAAC,EAEnE,OAAO0C,CACT,EACAlG,EAAS,UAAU,MAAQ,SAASlB,EAAK,CACvCA,EAAI,SAAS,CACf,EACAkB,EAAS,UAAU,OAAS,SAASlB,EAAKiD,EAAK,CAC7C,IAAIyB,EAAQ,KAAK,SAASzB,CAAG,EACzByB,IAAU,QACZkB,GAAkB3C,EAAK,IAAI,EAE7BjD,EAAI,UAAU0E,CAAK,CACrB,EACAxD,EAAS,UAAU,OAAS,SAAS2E,EAAMC,EAAM,CAC/C,OAAOD,EAAK,UAAUC,CAAI,CAC5B,EACA5E,EAAS,UAAU,QAAU,SAAS2F,EAAMC,EAAM,CAChD,OAAOpG,EAAM,QAAQ,KAAK,SAASmG,CAAI,EAAG,KAAK,SAASC,CAAI,CAAC,CAC/D,EACA5F,EAAS,UAAU,QAAU,SAASqD,EAAUtC,EAAMhH,EAAM,CAC1D,IAAIoM,EAAU,KAAK,QACfpF,EAAK,WAAa,QAAUqF,GAAkB,KAAMrF,EAAM,CAAChH,EAAK,gBAAgB,IAAMgH,EAAK,QAAQ,MAAM,SAASrH,EAAG,CACvH,MAAO,CAACyM,EAAQ,QAAQzM,CAAC,CAC3B,CAAC,GAAK,KAAK,UAAY,UACrB2J,EAAS,QAAUtC,EAAK,QAAQ,IAAI,SAASrH,EAAG,CAC9C,OAAO,KAAK,SAASA,CAAC,IAAM,OAAS,KAAK,QAAUA,CACtD,EAAG,IAAI,EACP2J,EAAS,MAAQtC,EAAK,MAE1B,EACAf,EAAS,UAAU,MAAQ,SAAS+B,EAAK,CACvC,YAAK,OAAOA,EAAK,OAAQ2C,EAAiB,EACnC3C,CACT,EACA/B,EAAS,UAAU,OAAS,SAASc,EAAQ,CAC3CA,EAAO,QAAU,KAAK,OACxB,EACAd,EAAS,UAAU,WAAa,UAAW,CACzC,OAAO,KAAK,OACd,EACAA,EAAS,UAAU,SAAW,OAC9BA,EAAS,UAAU,OAAS,UAAW,CACrC,OAAOS,EAAO,OAAO,KAAK,OAAO,CACnC,EACA,SAASP,EAAUY,EAAQ/G,EAAM,CAE/B,GADA8G,EAAK,KAAK,KAAMC,EAAQ/G,CAAI,EACxB+G,EAAO,QAAUA,EAAO,KAAO,IAAMA,EAAO,KAAO,EACrD,MAAM,IAAI,MAAM3H,EAAG,kBAAmB,KAAK,UAAU,CAAC,EAExD,KAAK,KAAO2H,EAAO,KAAO,EAC1B,KAAK,mBAAqB,KAAK,yBAAyB,EACxD,OAAO,OAAO,IAAI,CACpB,CACAjI,EAAK,SAASqH,EAAWW,CAAI,EAC7BX,EAAU,UAAU,OAAS,SAAS6B,EAAKxE,EAAO0G,EAAM,CACtD,IAAI3F,EAAKvF,EAAQ,SAASgJ,CAAG,GAAKA,EAAI,SAAW,KAAK,KACtD,MAAI,CAACzD,GAAM2F,GACTA,EAAKlC,EAAK,IAAI,EAETzD,CACT,EACA4B,EAAU,UAAU,MAAQ,SAASpB,EAAK,CACxC,OAAOA,EAAI,UAAU,KAAK,IAAI,CAChC,EACAoB,EAAU,UAAU,MAAQ,SAASpB,EAAK,CACxCA,EAAI,UAAU,KAAK,IAAI,CACzB,EACAoB,EAAU,UAAU,OAAS,SAASpB,EAAKiD,EAAK,EAC1C,CAAChJ,EAAQ,SAASgJ,CAAG,GAAKA,EAAI,SAAW,KAAK,OAChD2C,GAAkB3C,EAAK,IAAI,EAE7BjD,EAAI,WAAWiD,EAAK,KAAK,IAAI,CAC/B,EACA7B,EAAU,UAAU,OAAS,SAASyE,EAAMC,EAAM,CAChD,OAAOD,EAAK,WAAWC,EAAM,KAAK,IAAI,CACxC,EACA1E,EAAU,UAAU,QAAUnH,EAAQ,QACtCmH,EAAU,UAAU,QAAU,SAASmD,EAAUtC,EAAMhH,EAAM,CACvDgH,EAAK,WAAa,SAAW,KAAK,OAASA,EAAK,MAAQqF,GAAkB,KAAMrF,EAAM,CAAChH,EAAK,gBAAgB,IAC9GsJ,EAAS,KAAO,KAAK,KACrBA,EAAS,MAAQ,KAAK,MAE1B,EACAnD,EAAU,UAAU,MAAQJ,EAAU,UAAU,MAChDI,EAAU,UAAU,OAAS,SAASY,EAAQ,CAC5CA,EAAO,KAAO,KAAK,IACrB,EACAZ,EAAU,UAAU,QAAU,UAAW,CACvC,OAAO,KAAK,IACd,EACAA,EAAU,UAAU,SAAW,QAC/BA,EAAU,UAAU,OAAS,UAAW,CACtC,OAAOO,EAAO,WAAW,KAAK,IAAI,CACpC,EACA,SAASH,EAAQQ,EAAQ/G,EAAM,CAE7B,GADA8G,EAAK,KAAK,IAAI,EACV,CAACC,EAAO,OACV,MAAM,IAAI,MAAM3H,EAAG,yBAA0B2H,CAAM,CAAC,EAEtD,KAAK,WAAaD,EAAK,UAAUC,EAAO,OAAQ/G,CAAI,EACpD,KAAK,mBAAqB,KAAK,yBAAyB,EACxD,OAAO,OAAO,IAAI,CACpB,CACAlB,EAAK,SAASyH,EAASO,CAAI,EAC3BP,EAAQ,UAAU,OAAS,SAASyB,EAAKxE,EAAO0G,EAAMC,EAAM,CAC1D,GAAI,CAACnC,GAAO,OAAOA,GAAO,UAAY,MAAM,QAAQA,CAAG,EACrD,OAAIkC,GACFA,EAAKlC,EAAK,IAAI,EAET,GAET,IAAI2D,EAAO,OAAO,KAAK3D,CAAG,EACtBzD,EAAK,GACL5D,EAAGC,EAAGkD,EAAIhG,EACd,GAAIoM,EAAM,CAGR,IAFApG,EAAKqG,EAAK,OACVA,EAAK,KAAK,EAAE,EACPxJ,EAAI,EAAGC,EAAI+K,EAAK,OAAQhL,EAAIC,EAAGD,IAClC7C,EAAMqM,EAAKrG,CAAE,EAAI6H,EAAKhL,CAAC,EAClB,KAAK,WAAW,OAAOqH,EAAIlK,CAAG,EAAG0F,EAAO0G,EAAMC,CAAI,IACrD5F,EAAK,IAGT4F,EAAK,IAAI,CACX,KACE,KAAKxJ,EAAI,EAAGC,EAAI+K,EAAK,OAAQhL,EAAIC,EAAGD,IAClC,GAAI,CAAC,KAAK,WAAW,OAAOqH,EAAI2D,EAAKhL,CAAC,CAAC,EAAG6C,CAAK,EAC7C,MAAO,GAIb,OAAOe,CACT,EACAgC,EAAQ,UAAU,MAAQ,SAASxB,EAAK,CAItC,QAHIuH,EAAS,KAAK,WACdtE,EAAM,CAAC,EACPxD,EACGA,EAAI+H,GAAcxH,CAAG,GAC1B,KAAOP,KAAK,CACV,IAAI1G,EAAMiH,EAAI,WAAW,EACzBiD,EAAIlK,CAAG,EAAIwO,EAAO,MAAMvH,CAAG,CAC7B,CAEF,OAAOiD,CACT,EACAzB,EAAQ,UAAU,MAAQ,SAASxB,EAAK,CAGtC,QAFIuH,EAAS,KAAK,WACdvJ,EAAKyB,EACFA,EAAIO,EAAI,SAAS,GACtB,GAAIP,EAAI,EACNzB,EAAMgC,EAAI,SAAS,EACnBA,EAAI,KAAOhC,MAEX,MAAOyB,KACLO,EAAI,WAAW,EACfuH,EAAO,MAAMvH,CAAG,CAIxB,EACAwB,EAAQ,UAAU,OAAS,SAASxB,EAAKiD,EAAK,EACxC,CAACA,GAAO,OAAOA,GAAO,UAAY,MAAM,QAAQA,CAAG,IACrD2C,GAAkB3C,EAAK,IAAI,EAE7B,IAAIsE,EAAS,KAAK,WACdX,EAAO,OAAO,KAAK3D,CAAG,EACtB,EAAI2D,EAAK,OACThL,EAAG7C,EACP,GAAI,EAEF,IADAiH,EAAI,UAAU,CAAC,EACVpE,EAAI,EAAGA,EAAI,EAAGA,IACjB7C,EAAM6N,EAAKhL,CAAC,EACZoE,EAAI,YAAYjH,CAAG,EACnBwO,EAAO,OAAOvH,EAAKiD,EAAIlK,CAAG,CAAC,EAG/BiH,EAAI,UAAU,CAAC,CACjB,EACAwB,EAAQ,UAAU,OAAS,UAAW,CACpC,MAAM,IAAI,MAAM,yBAAyB,CAC3C,EACAA,EAAQ,UAAU,QAAU,SAASiG,EAAKxF,EAAMhH,EAAM,CAChDgH,EAAK,WAAa,QACpBwF,EAAI,WAAa,KAAK,WAAW,eAAexF,EAAK,WAAYhH,CAAI,EACrEwM,EAAI,MAAQ,KAAK,MAErB,EACAjG,EAAQ,UAAU,MAAQ,SAASyB,EAAKhI,EAAM,CAC5C,GAAIgI,GAAO,OAAOA,GAAO,UAAY,CAAC,MAAM,QAAQA,CAAG,EAAG,CACxD,IAAIsE,EAAS,KAAK,WACdX,EAAO,OAAO,KAAK3D,CAAG,EACtBrH,EAAGC,EAAG9C,EACN2O,EAAO,CAAC,EACZ,IAAK9L,EAAI,EAAGC,EAAI+K,EAAK,OAAQhL,EAAIC,EAAGD,IAClC7C,EAAM6N,EAAKhL,CAAC,EACZ8L,EAAK3O,CAAG,EAAIwO,EAAO,MAAMtE,EAAIlK,CAAG,EAAGkC,CAAI,EAEzC,OAAOyM,CACT,CACA9B,GAAkB3C,EAAK,IAAI,CAC7B,EACAzB,EAAQ,UAAU,QAAUA,EAAQ,UAAU,OAC9CA,EAAQ,UAAU,SAAW,MAC7BA,EAAQ,UAAU,cAAgB,UAAW,CAC3C,OAAO,KAAK,UACd,EACAA,EAAQ,UAAU,OAAS,UAAW,CACpC,IAAIyB,EAAM,CAAC,EACP,EAAGpH,EACP,IAAK,EAAI,EAAGA,EAAI8F,EAAO,QAAQ,EAAE,EAAG,EAAI9F,EAAG,IACzCoH,EAAItB,EAAO,WAAWA,EAAO,QAAQ,EAAE,CAAC,CAAC,EAAI,KAAK,WAAW,OAAO,EAEtE,OAAOsB,CACT,EACAzB,EAAQ,UAAU,OAAS,SAASQ,EAAQ/G,EAAM,CAChD+G,EAAO,OAAS,KAAK,WAAW,OAAO/G,CAAI,CAC7C,EACA,SAAS6F,EAAUkB,EAAQ/G,EAAM,CAE/B,GADA8G,EAAK,KAAK,IAAI,EACV,CAACC,EAAO,MACV,MAAM,IAAI,MAAM3H,EAAG,0BAA2B2H,CAAM,CAAC,EAEvD,KAAK,UAAYD,EAAK,UAAUC,EAAO,MAAO/G,CAAI,EAClD,KAAK,mBAAqB,KAAK,yBAAyB,EACxD,OAAO,OAAO,IAAI,CACpB,CACAlB,EAAK,SAAS+G,EAAWiB,CAAI,EAC7BjB,EAAU,UAAU,OAAS,SAASmC,EAAKxE,EAAO0G,EAAMC,EAAM,CAC5D,GAAI,CAAC,MAAM,QAAQnC,CAAG,EACpB,OAAIkC,GACFA,EAAKlC,EAAK,IAAI,EAET,GAET,IAAInE,EAAQ,KAAK,UACbU,EAAK,GACL5D,EAAGC,EAAGkD,EACV,GAAIoG,EAAM,CAGR,IAFApG,EAAKqG,EAAK,OACVA,EAAK,KAAK,EAAE,EACPxJ,EAAI,EAAGC,EAAIoH,EAAI,OAAQrH,EAAIC,EAAGD,IACjCwJ,EAAKrG,CAAE,EAAI,GAAKnD,EACXkD,EAAM,OAAOmE,EAAIrH,CAAC,EAAG6C,EAAO0G,EAAMC,CAAI,IACzC5F,EAAK,IAGT4F,EAAK,IAAI,CACX,KACE,KAAKxJ,EAAI,EAAGC,EAAIoH,EAAI,OAAQrH,EAAIC,EAAGD,IACjC,GAAI,CAACkD,EAAM,OAAOmE,EAAIrH,CAAC,EAAG6C,CAAK,EAC7B,MAAO,GAIb,OAAOe,CACT,EACAsB,EAAU,UAAU,MAAQ,SAASd,EAAK,CAIxC,QAHIlB,EAAQ,KAAK,UACblD,EAAI,EACJqH,EAAK,EACF,EAAIjD,EAAI,SAAS,GAMtB,IALI,EAAI,IACN,EAAI,CAAC,EACLA,EAAI,SAAS,GAEfiD,EAAMA,GAAO,IAAI,MAAM,CAAC,EACjB,KACLA,EAAIrH,GAAG,EAAIkD,EAAM,MAAMkB,CAAG,EAG9B,OAAOiD,GAAO,CAAC,CACjB,EACAnC,EAAU,UAAU,MAAQ,SAASd,EAAK,CAGxC,QAFIlB,EAAQ,KAAK,UACbd,EAAKyB,EACFA,EAAIO,EAAI,SAAS,GACtB,GAAIP,EAAI,EACNzB,EAAMgC,EAAI,SAAS,EACnBA,EAAI,KAAOhC,MAEX,MAAOyB,KACLX,EAAM,MAAMkB,CAAG,CAIvB,EACAc,EAAU,UAAU,OAAS,SAASd,EAAKiD,EAAK,CACzC,MAAM,QAAQA,CAAG,GACpB2C,GAAkB3C,EAAK,IAAI,EAE7B,IAAInE,EAAQ,KAAK,UACbW,EAAIwD,EAAI,OACRrH,EACJ,GAAI6D,EAEF,IADAO,EAAI,UAAUP,CAAC,EACV7D,EAAI,EAAGA,EAAI6D,EAAG7D,IACjBkD,EAAM,OAAOkB,EAAKiD,EAAIrH,CAAC,CAAC,EAG5BoE,EAAI,UAAU,CAAC,CACjB,EACAc,EAAU,UAAU,OAAS,SAAS+E,EAAMC,EAAM,CAIhD,QAHIhL,EAAK+K,EAAK,SAAS,EACnB9K,EAAK+K,EAAK,SAAS,EACnBlG,EACG9E,GAAMC,GAAI,CAEf,GADA6E,EAAK,KAAK,UAAU,OAAOiG,EAAMC,CAAI,EACjClG,EACF,OAAOA,EAEJ,EAAE9E,IACLA,EAAK0M,GAAc3B,CAAI,GAEpB,EAAE9K,IACLA,EAAKyM,GAAc1B,CAAI,EAE3B,CACA,OAAOpF,EAAM,QAAQ5F,EAAIC,CAAE,CAC7B,EACA+F,EAAU,UAAU,QAAU,SAASyD,EAAUtC,EAAMhH,EAAM,CACvDgH,EAAK,WAAa,UACpBsC,EAAS,UAAY,KAAK,UAAU,eAAetC,EAAK,UAAWhH,CAAI,EACvEsJ,EAAS,MAAQ,KAAK,MAE1B,EACAzD,EAAU,UAAU,MAAQ,SAASmC,EAAKhI,EAAM,CACzC,MAAM,QAAQgI,CAAG,GACpB2C,GAAkB3C,EAAK,IAAI,EAE7B,IAAInE,EAAQ,IAAI,MAAMmE,EAAI,MAAM,EAC5BrH,EAAGC,EACP,IAAKD,EAAI,EAAGC,EAAIoH,EAAI,OAAQrH,EAAIC,EAAGD,IACjCkD,EAAMlD,CAAC,EAAI,KAAK,UAAU,MAAMqH,EAAIrH,CAAC,EAAGX,CAAI,EAE9C,OAAO6D,CACT,EACAgC,EAAU,UAAU,OAAS,SAASkB,EAAQ/G,EAAM,CAClD+G,EAAO,MAAQ,KAAK,UAAU,OAAO/G,CAAI,CAC3C,EACA6F,EAAU,UAAU,QAAU,SAAS+F,EAAMC,EAAM,CACjD,IAAIhM,EAAK+L,EAAK,OACV9L,EAAK+L,EAAK,OACVlL,EAAGC,EAAG+D,EACV,IAAKhE,EAAI,EAAGC,EAAI,KAAK,IAAIf,EAAIC,CAAE,EAAGa,EAAIC,EAAGD,IACvC,GAAIgE,EAAK,KAAK,UAAU,QAAQiH,EAAKjL,CAAC,EAAGkL,EAAKlL,CAAC,CAAC,EAC9C,OAAOgE,EAGX,OAAOc,EAAM,QAAQ5F,EAAIC,CAAE,CAC7B,EACA+F,EAAU,UAAU,aAAe,UAAW,CAC5C,OAAO,KAAK,SACd,EACAA,EAAU,UAAU,SAAW,QAC/BA,EAAU,UAAU,OAAS,UAAW,CACtC,IAAIrF,EAAM,CAAC,EACP,EAAGI,EACP,IAAK,EAAI,EAAGA,EAAI8F,EAAO,QAAQ,EAAE,EAAG,EAAI9F,EAAG,IACzCJ,EAAI,KAAK,KAAK,UAAU,OAAO,CAAC,EAElC,OAAOA,CACT,EACA,SAAS0F,EAAWa,EAAQ/G,EAAM,CAChCA,EAAOA,GAAQ,CAAC,EAChB,IAAI4B,EAAY5B,EAAK,UACrB,GAAI+G,EAAO,YAAc,OACvB/G,EAAK,UAAY+G,EAAO,kBACfA,EAAO,KAAM,CACtB,IAAI2F,EAAKjH,EAAM,iBAAiBsB,EAAO,IAAI,EACvC2F,IAAO,SACT1M,EAAK,UAAY0M,EAErB,CAEA,GADA5F,EAAK,KAAK,KAAMC,EAAQ/G,CAAI,EACxB,CAAC,MAAM,QAAQ+G,EAAO,MAAM,EAC9B,MAAM,IAAI,MAAM3H,EAAG,8BAA+B2H,EAAO,MAAM,CAAC,EAElE,GAAItB,EAAM,cAAcsB,EAAO,OAAQ,SAASpC,EAAI,CAClD,OAAOA,EAAG,IACZ,CAAC,EACC,MAAM,IAAI,MAAMvF,EAAG,2BAA4B2H,EAAO,MAAM,CAAC,EAE/D,KAAK,cAAgB,CAAC,EACtB,KAAK,OAAS,OAAO,OAAOA,EAAO,OAAO,IAAI,SAASpC,EAAI,CACzD,IAAIgI,EAAQ,IAAIC,EAAMjI,EAAI3E,CAAI,EAC9B,YAAK,cAAc2M,EAAM,IAAI,EAAIA,EAC1BA,CACT,EAAG,IAAI,CAAC,EACR,KAAK,mBAAqB,KAAK,yBAAyB,EACxD,KAAK,SAAW5F,EAAO,OAAS,QAChC,KAAK,kBAAoB,KAAK,mBAC5B/G,EAAK,iBACLA,EAAK,iBACP,EACA,KAAK,MAAQ,KAAK,cAAc,EAChC,KAAK,MAAQ,KAAK,eAAe,EACjC,KAAK,OAAS,KAAK,cAAc,EACjC,KAAK,OAAS,KAAK,eAAe,EAClCA,EAAK,UAAY4B,EACjB,OAAO,OAAO,IAAI,CACpB,CACA9C,EAAK,SAASoH,EAAYY,CAAI,EAC9BZ,EAAW,UAAU,oBAAsB,UAAW,CACpD,OAAO,KAAK,KAAOT,EAAM,WAAWA,EAAM,UAAU,KAAK,IAAI,CAAC,EAAI,KAAK,SAAW,SAAW,SAC/F,EACAS,EAAW,UAAU,mBAAqB,SAAS2G,EAAYC,EAAc,CAC3E,IAAIC,EAAY,CAAC,EACbC,EAAY,CAAC,EACbC,EAAK,CAAC,EACNC,EAAY,GACZvM,EAAGC,EAAG+L,EAAOnL,EAAM2L,EAAcC,EAAYC,EACjD,IAAK1M,EAAI,EAAGC,EAAI,KAAK,OAAO,OAAQD,EAAIC,EAAGD,IACzCgM,EAAQ,KAAK,OAAOhM,CAAC,EACrBwM,EAAeR,EAAM,aACrBS,EAAaD,EAAa,IAAM,OAChC3L,EAAOmL,EAAM,KACTE,GAAc,KAAK,UAAYrL,IAAS,SAAWsF,EAAK,OAAO6F,EAAM,KAAM,QAAQ,GAAK,CAACS,IAC3FC,EAAaV,GAEfK,EAAU,KAAK,IAAMrM,CAAC,EACtBuM,GAAa,KACRE,GAGHF,GAAa,QAAUvM,EAAI,qBAC3BuM,GAAa,QAAU1L,EAAO,OAASyL,EAAG,OAAS,OACnDC,GAAa,iBAAmB1L,EAAO,OAASb,EAAI;AAAA,EACpDoM,EAAU,KAAK,IAAME,EAAG,MAAM,EAC9BA,EAAG,KAAKE,CAAY,GANpBD,GAAa,QAAU1L,EAAO,OAASb,EAAI;AAAA,EAS3C0M,IACFH,GAAa,qCACT,OAAO,MAAM,mBAAqB,WACpCA,GAAa,mDAEbA,GAAa,8BAEfA,GAAa;AAAA,GAEf,IAAII,EAAY,mBAAqB,KAAK,oBAAoB,EAAI,IAClEA,GAAaN,EAAU,KAAK,EAAI;AAAA,EAAUE,EAAY,KACtD,IAAIK,EAAS,IAAI,SAASR,EAAU,KAAK,EAAGO,CAAS,EAAE,MAAM,OAAQL,CAAE,EACvE,GAAIH,EACF,OAAOS,EAET,IAAIC,EAAO,KACX,OAAAD,EAAO,QAAU,UAAW,CAC1B,OAAOC,CACT,EACAD,EAAO,KAAOC,EACV,KAAK,WACP1O,EAAK,SAASyO,EAAQ,KAAK,EAC3BA,EAAO,UAAU,KAAO,KAAK,oBAAoB,GAEnDA,EAAO,UAAU,MAAQ,SAASE,EAAG,CACnC,OAAOD,EAAK,MAAM,KAAMC,CAAC,CAC3B,EACAF,EAAO,UAAU,QAAU,SAAS9M,EAAI,CACtC,OAAO+M,EAAK,QAAQ,KAAM/M,CAAE,CAC9B,EACA8M,EAAO,UAAU,QAAU,SAASE,EAAG,CACrC,OAAOD,EAAK,QAAQ,KAAMC,CAAC,CAC7B,EACAF,EAAO,UAAU,SAAW,UAAW,CACrC,OAAOC,EAAK,SAAS,IAAI,CAC3B,EACAD,EAAO,UAAU,SAAW,UAAW,CACrC,OAAOC,EAAK,SAAS,IAAI,CAC3B,EACAD,EAAO,UAAU,KAAO,UAAW,CACjC,OAAOC,EAAK,KAAK,IAAI,CACvB,EACAD,EAAO,UAAU,QAAUA,EAAO,UAAU,KACrCA,CACT,EACArH,EAAW,UAAU,eAAiB,UAAW,CAC/C,IAAI3E,EAAQ,CAAC,EACT+K,EAAS,CAAC,EACV9K,EAAO,KAAK,oBAAoB,EAChC+I,EAAO,wBAA0B/I,EAAO;AAAA,EAS5C,GARA+I,GAAQ;AAAA,EACRA,GAAQ;AAAA,EACRA,GAAQ;AAAA,EACRA,GAAQ;AAAA,EACRA,GAAQ;AAAA,EACRA,GAAQ;AAAA,EACRA,GAAQ;AAAA,EACRA,GAAQ;AAAA,EACJ,CAAC,KAAK,OAAO,OACfA,GAAQ;AAAA,MACH,CACL,IAAK5J,EAAI,EAAGC,EAAI,KAAK,OAAO,OAAQD,EAAIC,EAAGD,IACzCgM,EAAQ,KAAK,OAAOhM,CAAC,EACrBY,EAAM,KAAK,IAAMZ,CAAC,EAClB2L,EAAO,KAAKK,EAAM,IAAI,EAClBA,EAAM,aAAa,IAAM,SAC3BpC,GAAQ,UAAY5J,EAAI,QAAUgM,EAAM,KAAO;AAAA,GAGnDpC,GAAQ;AAAA,EACRA,GAAQ;AAAA,EACRA,GAAQ;AAAA,EACRA,GAAQ;AAAA,EACR,IAAI5J,EAAGC,EAAG+L,EACV,IAAKhM,EAAI,EAAGC,EAAI,KAAK,OAAO,OAAQD,EAAIC,EAAGD,IACzCgM,EAAQ,KAAK,OAAOhM,CAAC,EACrB4J,GAAQ,eAAiBoC,EAAM,KAAO;AAAA,EACtCpC,GAAQ,YACJoC,EAAM,aAAa,IAAM,OAC3BpC,GAAQ,IAAM5J,EAAI,aAAegM,EAAM,KAAO;AAAA,GAE9CpC,GAAQ,IAAM5J,EAAI,qBAClB4J,GAAQ,IAAM5J,EAAI,YAAcA,EAAI;AAAA,GAGxC4J,GAAQ;AAAA,EACRA,GAAQ;AAAA,EACRA,GAAQ;AAAA;AAAA,QACRA,GAAQ,KAAK,OAAO,IAAI,SAASmD,EAAQxJ,EAAI,CAC3C,OAAOwJ,EAAO,aAAa,IAAM,OAAS,IAAMxJ,EAAK,aAAewJ,EAAO,KAAO,OAAS,KAAOxJ,EAAK,sBAAwBA,EAAK,YAAcA,EAAK,OACzJ,CAAC,EAAE,KAAK;AAAA,OAAa,EACrBqG,GAAQ;AAAA;AAAA;AAAA,CACV,CACA,OAAAA,GAAQ,KACD,IAAI,SAAShJ,EAAM,KAAK,EAAGgJ,CAAI,EAAE,MAAM,OAAQ+B,CAAM,CAC9D,EACApG,EAAW,UAAU,cAAgB,UAAW,CAC9C,IAAI3E,EAAQ,CAAC,EACT+K,EAAS,CAAC,KAAK,iBAAiB,EAChC3L,EAAGC,EACP,IAAKD,EAAI,EAAGC,EAAI,KAAK,OAAO,OAAQD,EAAIC,EAAGD,IACzCY,EAAM,KAAK,IAAMZ,CAAC,EAClB2L,EAAO,KAAK,KAAK,OAAO3L,CAAC,EAAE,IAAI,EAEjC,IAAIa,EAAO,KAAK,oBAAoB,EAChC+I,EAAO,uBAAyB/I,EAAO;AAAA,EAC3C,OAAA+I,GAAQ,gBAAkB/I,EAAO;AAAA,MACjC+I,GAAQhJ,EAAM,IAAI,SAAS,EAAG,CAC5B,OAAO,EAAI,WACb,CAAC,EAAE,KAAK;AAAA,KAAS,EACjBgJ,GAAQ;AAAA;AAAA,IACRhJ,EAAM,QAAQC,CAAI,EACX,IAAI,SAASD,EAAM,KAAK,EAAGgJ,CAAI,EAAE,MAAM,OAAQ+B,CAAM,CAC9D,EACApG,EAAW,UAAU,eAAiB,UAAW,CAC/C,IAAIyH,EAAO,CAAC,EACRpD,EAAO,uBAAyB,KAAK,oBAAoB,EAAI;AAAA,EAC7D+B,EAAS,CAAC,EACV3L,EAAGC,EACP,IAAKD,EAAI,EAAGC,EAAI,KAAK,OAAO,OAAQD,EAAIC,EAAGD,IACzCgN,EAAK,KAAK,IAAMhN,CAAC,EACjB2L,EAAO,KAAK,KAAK,OAAO3L,CAAC,EAAE,IAAI,EAC/B4J,GAAQ,MAAQ5J,EAAI;AAAA,EAEtB,OAAA4J,GAAQ,IACD,IAAI,SAASoD,EAAK,KAAK,EAAGpD,CAAI,EAAE,MAAM,OAAQ+B,CAAM,CAC7D,EACApG,EAAW,UAAU,cAAgB,UAAW,CAC9C,IAAIyH,EAAO,CAAC,EACRnM,EAAO,KAAK,oBAAoB,EAChC+I,EAAO,wBAA0B/I,EAAO;AAAA,EACxC8K,EAAS,CAAC,EACV3L,EAAGC,EAAG+L,EAAOzM,EACjB,IAAKS,EAAI,EAAGC,EAAI,KAAK,OAAO,OAAQD,EAAIC,EAAGD,IACzCgM,EAAQ,KAAK,OAAOhM,CAAC,EACrBgN,EAAK,KAAK,IAAMhN,CAAC,EACjB2L,EAAO,KAAKK,EAAM,IAAI,EACtBpC,GAAQ,KACJoC,EAAM,aAAa,IAAM,OAC3BpC,GAAQ,IAAM5J,EAAI,gBAAkBgM,EAAM,KAAO;AAAA,GAEjDzM,EAAQyM,EAAM,KAAK,SAASA,EAAM,aAAa,CAAC,EAAE,SAAS,QAAQ,EACnEgB,EAAK,KAAK,IAAMhN,CAAC,EACjB2L,EAAO,KAAKpM,CAAK,EACjBqK,GAAQ,QAAU5J,EAAI,QAAUgM,EAAM,KAAO;AAAA,EAC7CpC,GAAQ,QAAU5J,EAAI;AAAA,EACtB4J,GAAQ,sBAAwB5J,EAAI,KAAOT,EAAM,OAAS;AAAA,EAC1DqK,GAAQ;AAAA,OAAsB5J,EAAI,eAAiBA,EAAI;AAAA;AAAA,GAG3D,OAAA4J,GAAQ,IACD,IAAI,SAASoD,EAAK,KAAK,EAAGpD,CAAI,EAAE,MAAM,OAAQ+B,CAAM,CAC7D,EACApG,EAAW,UAAU,QAAU,SAASoD,EAAUtC,EAAMhH,EAAM,CAC5D,GAAI,CAACqM,GAAkB,KAAMrF,EAAM,CAAChH,EAAK,gBAAgB,EACvD,MAAM,IAAI,MAAMZ,EAAG,wBAAyB4H,EAAK,IAAI,CAAC,EAExD,IAAI4G,EAAU,KAAK,OACfC,EAAU7G,EAAK,OACf8G,EAAarI,EAAM,MAAMoI,EAAS,SAASlJ,GAAI,CACjD,OAAOA,GAAG,IACZ,CAAC,EACGqI,EAAY,CAAC,EACbxD,EAAY,CAAC,EACb7I,EAAGmD,EAAI6I,EAAOnL,EAAMD,EAAOwM,EAASC,EACxC,IAAKrN,EAAI,EAAGA,EAAIiN,EAAQ,OAAQjN,IAAK,CAInC,IAHAgM,EAAQiB,EAAQjN,CAAC,EACjBY,EAAQ0M,GAAWtB,CAAK,EACxBoB,EAAU,CAAC,EACNjK,EAAK,EAAGA,EAAKvC,EAAM,OAAQuC,IAC9BtC,EAAOD,EAAMuC,CAAE,EACXgK,EAAWtM,CAAI,GACjBuM,EAAQ,KAAKvM,CAAI,EAGrB,GAAIuM,EAAQ,OAAS,EACnB,MAAM,IAAI,MACR3O,EAAG,oCAAqC4H,EAAK,KAAM2F,EAAM,KAAMoB,CAAO,CACxE,EAEF,GAAKA,EAAQ,OAQXvM,EAAOuM,EAAQ,CAAC,EAChBC,EAAgB,CACd,SAAUrB,EAAM,KAAK,eAAemB,EAAWtM,CAAI,EAAE,KAAMxB,CAAI,EAC/D,KAAM,IAAM2M,EAAM,IAEpB,EACKnD,EAAUhI,CAAI,EAGjBgI,EAAUhI,CAAI,EAAE,KAAKwM,CAAa,EAFlCxE,EAAUhI,CAAI,EAAI,CAACwM,CAAa,EAIlChB,EAAU,KAAKgB,EAAc,IAAI,MAnBd,CACnB,GAAIrB,EAAM,aAAa,IAAM,OAC3B,MAAM,IAAI,MACRvN,EAAG,2CAA4C4H,EAAK,KAAM2F,EAAM,IAAI,CACtE,EAEFK,EAAU,KAAK,WAAW,CAC5B,CAcF,CACA,IAAIkB,EAAY,GAEhB,IADAvN,EAAIkN,EAAQ,OACLlN,GAAK6I,EAAUqE,EAAQ,EAAElN,CAAC,EAAE,IAAI,IAAM,QAC3CuN,EAAYvN,EAEd,IAAIwN,EAAQ,KAAK,oBAAoB,EACjCR,GAAO,CAACQ,CAAK,EACb7B,GAAS,CAAC,KAAK,iBAAiB,EAChC/B,GAAO,yBAA2B4D,EAAQ;AAAA,EAC9C,IAAKxN,EAAI,EAAGA,EAAIkN,EAAQ,OAAQlN,IAM9B,GALIA,IAAMuN,IACR3D,IAAQ;AAAA,GAEVoC,EAAQ3F,EAAK,OAAOrG,CAAC,EACrBa,EAAOmL,EAAM,KACTnD,EAAUhI,CAAI,IAAM,OACtB+I,IAAQ,CAAC2D,GAAavN,GAAKuN,EAAY,OAAS,KAChDP,GAAK,KAAK,IAAMhN,CAAC,EACjB2L,GAAO,KAAKK,EAAM,IAAI,EACtBpC,IAAQ,IAAM5J,EAAI;AAAA,MAGlB,KADAmD,EAAK0F,EAAUhI,CAAI,EAAE,OACdsC,KACLyG,IAAQ,CAAC2D,GAAavN,GAAKuN,EAAY,OAAS,KAChDP,GAAK,KAAK,IAAMhN,EAAI,IAAMmD,CAAE,EAC5BkK,EAAgBxE,EAAUhI,CAAI,EAAEsC,CAAE,EAClCwI,GAAO,KAAK0B,EAAc,QAAQ,EAClCzD,IAAQ,OAASyD,EAAc,KAAO,MACtCzD,IAAQ,IAAM5J,EAAI,IAAMmD,EAAK,MAAQA,EAAK,OAAS,QAAU;AAAA,EAI/D,CAACoK,IACH3D,IAAQ;AAAA,GAEVA,IAAQ,gBAAkB4D,EAAQ,IAAMnB,EAAU,KAAK,EAAI;AAAA,IAC3D1D,EAAS,MAAQ,IAAI,SAASqE,GAAK,KAAK,EAAGpD,EAAI,EAAE,MAAM,OAAQ+B,EAAM,CACvE,EACApG,EAAW,UAAU,OAAS,SAAS0E,EAAMC,EAAM,CACjD,IAAIuD,EAAS,KAAK,OACdzN,EAAGC,EAAG+L,EAAO0B,EAAOrH,EACxB,IAAKrG,EAAI,EAAGC,EAAIwN,EAAO,OAAQzN,EAAIC,EAAGD,IAIpC,GAHAgM,EAAQyB,EAAOzN,CAAC,EAChB0N,EAAQ1B,EAAM,OACd3F,EAAO2F,EAAM,KACT0B,GAEF,GADAA,GAASrH,EAAK,OAAO4D,EAAMC,CAAI,EAC3BwD,EACF,OAAOA,OAGTrH,EAAK,MAAM4D,CAAI,EACf5D,EAAK,MAAM6D,CAAI,EAGnB,MAAO,EACT,EACA3E,EAAW,UAAU,aAAe,SAASnF,EAAK,CAChD,IAAI4K,EAAO,OAAO,KAAK5K,CAAG,EACtBJ,EAAGC,EACP,IAAKD,EAAI,EAAGC,EAAI+K,EAAK,OAAQhL,EAAIC,EAAGD,IAClC,GAAI,CAAC,KAAK,cAAcgL,EAAKhL,CAAC,CAAC,EAC7B,MAAO,GAGX,MAAO,EACT,EACAuF,EAAW,UAAU,MAAQ,SAAS8B,EAAKhI,EAAM,CAC/C,IAAIkK,EAAOlK,GAAQA,EAAK,UACpBsM,EAAS,CAAC,MAAM,EAChB3L,EAAGC,EAAG+L,EAAOzM,EACjB,IAAKS,EAAI,EAAGC,EAAI,KAAK,OAAO,OAAQD,EAAIC,EAAGD,IACzCgM,EAAQ,KAAK,OAAOhM,CAAC,EACrBT,EAAQ8H,EAAI2E,EAAM,IAAI,EAClBzM,IAAU,QAAUyM,EAAM,eAAe,cAAc,IACzDzM,EAAQyM,EAAM,aAAa,IAEzB3M,GAAQ,CAACA,EAAK,MAAQE,IAAU,UAClCA,EAAQyM,EAAM,KAAK,MAAMzM,EAAOF,CAAI,GAElCkK,IACFhK,EAAQgK,EAAKyC,EAAOzM,EAAO,IAAI,GAEjCoM,EAAO,KAAKpM,CAAK,EAEnB,IAAIqN,EAAS,KAAK,kBAClB,OAAO,IAAKA,EAAO,KAAK,MAAMA,EAAQjB,CAAM,EAC9C,EACApG,EAAW,UAAU,OAAS,SAASa,EAAQ/G,EAAM,CACnD+G,EAAO,OAAS,KAAK,OAAO,IAAI,SAAS4F,EAAO,CAC9C,IAAI2B,EAAY3B,EAAM,KAClB4B,EAAc,CAChB,KAAM5B,EAAM,KACZ,KAAM2B,EAAU,OAAOtO,CAAI,CAC7B,EACA,GAAIA,EAAK,YAAa,CACpB,IAAIgI,EAAM2E,EAAM,aAAa,EACzB3E,IAAQ,SACVuG,EAAY,QAAaD,EAAU,MAAMtG,EAAK,CAAE,OAAQ,EAAG,KAAM,CAAE,CAAC,GAEtE,IAAIwG,EAAa7B,EAAM,MACnB6B,IAAe,cACjBD,EAAY,MAAQC,GAEtB,IAAIC,EAAe9B,EAAM,QACrB8B,EAAa,SACfF,EAAY,QAAUE,GAExB,IAAIC,EAAW/B,EAAM,IACjB+B,IAAa,SACfH,EAAY,IAAMG,EAEtB,CACA,OAAOH,CACT,CAAC,CACH,EACArI,EAAW,UAAU,QAAU,SAAS0F,EAAMC,EAAM,CAClD,IAAIuC,EAAS,KAAK,OACdzN,EAAGC,EAAG+L,EAAOnL,EAAM6M,EAAOrH,EAC9B,IAAKrG,EAAI,EAAGC,EAAIwN,EAAO,OAAQzN,EAAIC,EAAGD,IAKpC,GAJAgM,EAAQyB,EAAOzN,CAAC,EAChBa,EAAOmL,EAAM,KACb0B,EAAQ1B,EAAM,OACd3F,EAAO2F,EAAM,KACT0B,IACFA,GAASrH,EAAK,QAAQ4E,EAAKpK,CAAI,EAAGqK,EAAKrK,CAAI,CAAC,EACxC6M,GACF,OAAOA,EAIb,MAAO,EACT,EACAnI,EAAW,UAAU,OAAS,UAAW,CACvC,IAAIkI,EAAS,KAAK,OAAO,IAAI,SAASzJ,EAAI,CACxC,OAAOA,EAAG,KAAK,OAAO,CACxB,CAAC,EACDyJ,EAAO,QAAQ,MAAM,EACrB,IAAIb,EAAS,KAAK,kBAClB,OAAO,IAAKA,EAAO,KAAK,MAAMA,EAAQa,CAAM,EAC9C,EACAlI,EAAW,UAAU,MAAQ,SAAS1E,EAAM,CAC1C,OAAO,KAAK,cAAcA,CAAI,CAChC,EACA0E,EAAW,UAAU,SAAWA,EAAW,UAAU,MACrDA,EAAW,UAAU,UAAY,UAAW,CAC1C,OAAO,KAAK,MACd,EACAA,EAAW,UAAU,qBAAuB,UAAW,CACrD,OAAO,KAAK,iBACd,EACA,OAAO,eAAeA,EAAW,UAAW,WAAY,CACtD,WAAY,GACZ,IAAK,UAAW,CACd,OAAO,KAAK,SAAW,QAAU,QACnC,CACF,CAAC,EACD,SAASyI,EAAY5H,EAAQ/G,EAAM,CACjC,KAAK,iBAAmB+G,EAAO,YAC/BD,EAAK,KAAK,IAAI,EACdF,GAAe,KACf,GAAI,CACF,KAAK,gBAAkBE,EAAK,UAAUC,EAAQ/G,CAAI,CACpD,QAAE,CACA4G,GAAe,KACf,IAAIhG,EAAIiG,EAAiB,OACrBjG,GAAKiG,EAAiBjG,EAAI,CAAC,EAAE,CAAC,IAAM,MACtCiG,EAAiB,IAAI,CAEzB,CACIC,EAAK,OAAO,KAAK,eAAgB,OAAO,EAC1C,KAAK,mBAAqB,KAAK,eAAe,mBAE9C,KAAK,mBAAqB,KAAK,eAAe,yBAAyB,CAE3E,CACAhI,EAAK,SAAS6P,EAAa7H,CAAI,EAC/B,OAAO,eAAe6H,EAAY,UAAW,WAAY,CACvD,WAAY,GACZ,IAAK,UAAW,CACd,MAAO,WAAa,KAAK,gBAC3B,CACF,CAAC,EACD,OAAO,eAAeA,EAAY,UAAW,iBAAkB,CAC7D,WAAY,GACZ,IAAK,UAAW,CACd,GAAI,KAAK,gBACP,OAAO,KAAK,gBAEd,IAAIhO,EAAGC,EAAGJ,EACV,IAAKG,EAAI,EAAGC,EAAIiG,EAAiB,OAAQlG,EAAIC,EAAGD,IAE9C,GADAH,EAAMqG,EAAiBlG,CAAC,EACpBH,EAAI,CAAC,IAAM,KACb,OAAOA,EAAI,CAAC,CAGlB,CACF,CAAC,EACDmO,EAAY,UAAU,kBAAoB,UAAW,CACnD,OAAO,KAAK,cACd,EACAA,EAAY,UAAU,MAAQ,SAAS5J,EAAK,CAC1C,OAAO,KAAK,WAAW,KAAK,eAAe,MAAMA,CAAG,CAAC,CACvD,EACA4J,EAAY,UAAU,OAAS,SAAS5J,EAAKoE,EAAK,CAChD,KAAK,eAAe,OAAOpE,EAAK,KAAK,SAASoE,CAAG,CAAC,CACpD,EACAwF,EAAY,UAAU,OAAS,SAASxF,EAAK3F,EAAO0G,EAAMC,EAAM,CAC9D,GAAI,CACF,IAAInC,EAAM,KAAK,SAASmB,CAAG,CAC7B,MAAc,CACd,CACA,OAAInB,IAAQ,QACNkC,GACFA,EAAKf,EAAK,IAAI,EAET,IAEF,KAAK,eAAe,OAAOnB,EAAKxE,EAAO0G,EAAMC,CAAI,CAC1D,EACAwE,EAAY,UAAU,MAAQ,SAASxF,EAAKnJ,EAAM,CAChD,IAAIgH,EAAO,KAAK,eAChB,OAAQhH,GAAQA,EAAK,OAAQ,CAC3B,IAAK,GACH,OAAOgH,EAAK,MAAM,KAAK,SAASmC,CAAG,EAAGnJ,CAAI,EAC5C,IAAK,GACH,OAAO,KAAK,WAAWgH,EAAK,MAAMmC,EAAKnJ,CAAI,CAAC,EAC9C,QACE,OAAO,KAAK,WAAWgH,EAAK,MAAM,KAAK,SAASmC,CAAG,EAAGnJ,CAAI,CAAC,CAC/D,CACF,EACA2O,EAAY,UAAU,QAAU,SAASrF,EAAUtC,EAAMhH,EAAM,CAC7D,IAAI4O,EAAa,KAAK,SAAS5H,EAAMhH,CAAI,EACrC4O,IACFtF,EAAS,MAAQ,SAASvE,EAAK,CAC7B,OAAO6J,EAAW5H,EAAK,MAAMjC,CAAG,CAAC,CACnC,EAEJ,EACA4J,EAAY,UAAU,QAAU,SAASE,EAAMC,EAAM,CACnD,IAAIlD,EAAO,KAAK,SAASiD,CAAI,EACzBhD,EAAO,KAAK,SAASiD,CAAI,EAC7B,OAAO,KAAK,eAAe,QAAQlD,EAAMC,CAAI,CAC/C,EACA8C,EAAY,UAAU,OAAS,UAAW,CACxC,OAAO,KAAK,WAAW,KAAK,eAAe,OAAO,CAAC,CACrD,EACAA,EAAY,UAAU,OAAS,SAAS5H,EAAQ/G,EAAM,CACpD,IAAIgH,EAAO,KAAK,eACZ+H,EAAY/H,EAAK,OAAS,QAAUhH,EAAK,QAAQgH,EAAK,IAAI,EAC9D,OAAAD,EAASC,EAAK,OAAOhH,CAAI,EACrB,CAAC+O,GAAa/O,EAAK,cACjB,OAAO+G,GAAU,WACnBA,EAAS,CAAE,KAAMA,CAAO,GAE1BA,EAAO,YAAc,KAAK,iBAC1B,KAAK,QAAQA,CAAM,GAEdA,CACT,EACA4H,EAAY,UAAU,MAAQ,SAAS5J,EAAK,CAC1C,KAAK,eAAe,MAAMA,CAAG,CAC/B,EACA4J,EAAY,UAAU,QAAU,UAAW,CAC3C,EACAA,EAAY,UAAU,WAAalJ,EAAM,iBACzCkJ,EAAY,UAAU,SAAWlJ,EAAM,iBACvCkJ,EAAY,UAAU,SAAWlJ,EAAM,iBACvC,SAASyF,EAAiBF,EAAU,CAClC,KAAK,kBAAoB,OACzBP,EAAc,KAAK,KAAM,EAAI,EAC7B,KAAK,UAAY,CAAC,CAACO,CACrB,CACAlM,EAAK,SAASoM,EAAkB5E,CAAQ,EACxC4E,EAAiB,UAAU,SAAW,gBACtCA,EAAiB,UAAU,OAAS,SAASlD,EAAKxE,EAAO0G,EAAM,CAC7D,IAAI3F,EAAK,KAAK,SAASyD,CAAG,EAC1B,MAAI,CAACzD,GAAM2F,GACTA,EAAKlC,EAAK,IAAI,EAETzD,CACT,EACA2G,EAAiB,UAAU,MAAQ,SAASnG,EAAK,CAC/C,IAAIT,EAAK5D,EAQT,GAPI,KAAK,WACPA,EAAMqE,EAAI,IACVA,EAAI,SAAS,EACbT,EAAMS,EAAI,IAAI,MAAMrE,EAAKqE,EAAI,GAAG,GAEhCT,EAAMS,EAAI,gBAAgBA,CAAG,EAE3BA,EAAI,QAAQ,EACd,OAAO,KAAK,YAAYT,CAAG,CAE/B,EACA4G,EAAiB,UAAU,OAAS,SAASnG,EAAKiD,EAAK,CAChD,KAAK,SAASA,CAAG,GACpB2C,GAAkB3C,EAAK,IAAI,EAE7B,IAAI1D,EAAM,KAAK,UAAU0D,CAAG,EACxB,KAAK,UACPjD,EAAI,WAAWT,CAAG,EAElBS,EAAI,cAAcT,CAAG,CAEzB,EACA4G,EAAiB,UAAU,MAAQ,SAASlD,EAAKhI,EAAM,CACrD,OAAQA,GAAQA,EAAK,OAAQ,CAC3B,IAAK,GACH,OAAO,KAAK,QAAQgI,CAAG,EACzB,IAAK,GACH,OAAO,KAAK,UAAUA,CAAG,EAC3B,QACE,OAAO,KAAK,UAAU,KAAK,QAAQA,CAAG,CAAC,CAC3C,CACF,EACAkD,EAAiB,UAAU,OAAS,UAAW,CAC7C,MAAO,MACT,EACAA,EAAiB,UAAU,QAAU,SAAS5B,EAAUtC,EAAM,CAC5D,IAAIwG,EAAO,KACX,OAAQxG,EAAK,SAAU,CACrB,IAAK,MACHsC,EAAS,MAAQ,SAASvE,EAAK,CAC7B,OAAOyI,EAAK,UAAUxG,EAAK,MAAMjC,CAAG,CAAC,CACvC,EACA,MACF,IAAK,gBACL,IAAK,OACHuE,EAAS,MAAQ,SAASvE,EAAK,CAC7B,OAAOyI,EAAK,MAAMzI,CAAG,CACvB,CACJ,CACF,EACAmG,EAAiB,UAAU,OAAS,UAAW,CAC7C,OAAO,KAAK,UAAU5E,EAAS,UAAU,OAAO,CAAC,CACnD,EACA4E,EAAiB,UAAU,YAAczF,EAAM,iBAC/CyF,EAAiB,UAAU,UAAYzF,EAAM,iBAC7CyF,EAAiB,UAAU,UAAYzF,EAAM,iBAC7CyF,EAAiB,UAAU,QAAUzF,EAAM,iBAC3CyF,EAAiB,UAAU,SAAWzF,EAAM,iBAC5CyF,EAAiB,UAAU,QAAUzF,EAAM,iBAC3C,SAASmH,EAAM7F,EAAQ/G,EAAM,CAC3B,IAAIwB,EAAOuF,EAAO,KAClB,GAAI,OAAOvF,GAAQ,UAAY,CAACiE,EAAM,YAAYjE,CAAI,EACpD,MAAM,IAAI,MAAMpC,EAAG,yBAA0BoC,CAAI,CAAC,EAEpD,KAAK,KAAOA,EACZ,KAAK,KAAOsF,EAAK,UAAUC,EAAO,KAAM/G,CAAI,EAC5C,KAAK,QAAU+G,EAAO,SAAW,CAAC,EAClC,KAAK,IAAMA,EAAO,MAAQ,OAAS,GAAKA,EAAO,IAAM,OACrD,KAAK,OAAS,SAASsH,EAAO,CAC5B,OAAQA,EAAO,CACb,IAAK,YACH,MAAO,GACT,IAAK,aACH,MAAO,GACT,IAAK,SACH,MAAO,GACT,QACE,MAAM,IAAI,MAAMjP,EAAG,oBAAqBiP,CAAK,CAAC,CAClD,CACF,EAAEtH,EAAO,QAAU,OAAS,YAAcA,EAAO,KAAK,EACtD,IAAI7G,EAAQ6G,EAAO,QACnB,GAAI7G,IAAU,OAAQ,CACpB,IAAI8G,EAAO,KAAK,KACZgB,EACJ,GAAI,CACFA,EAAMhB,EAAK,MAAM9G,EAAO,CAAE,OAAQ,EAAG,KAAM,CAAE,CAAC,CAChD,OAASwH,EAAK,CACZ,IAAIsH,EAAM5P,EAAG,qCAAsCc,EAAOwH,EAAI,OAAO,EACrE,MAAIZ,EAAK,OAAOE,EAAM,OAAO,IAC3BgI,GAAO5P,EACL,2DACA4H,EAAK,MAAM,CAAC,CACd,GAEI,IAAI,MAAMgI,CAAG,CACrB,CACI7H,GAAYH,EAAK,QAAQ,GAAKA,EAAK,WAAa,QAClD,KAAK,aAAe,UAAW,CAC7B,OAAOgB,CACT,EAEA,KAAK,aAAe,UAAW,CAC7B,OAAOhB,EAAK,MAAMgB,CAAG,CACvB,CAEJ,CACA,OAAO,OAAO,IAAI,CACpB,CACA4E,EAAM,UAAU,aAAe,UAAW,CAC1C,EACA,OAAO,eAAeA,EAAM,UAAW,QAAS,CAC9C,WAAY,GACZ,IAAK,UAAW,CACd,MAAO,CAAC,aAAc,SAAU,WAAW,EAAE,KAAK,OAAS,CAAC,CAC9D,CACF,CAAC,EACDA,EAAM,UAAU,WAAa,UAAW,CACtC,OAAO,KAAK,OACd,EACAA,EAAM,UAAU,WAAaA,EAAM,UAAU,aAC7CA,EAAM,UAAU,QAAU,UAAW,CACnC,OAAO,KAAK,IACd,EACAA,EAAM,UAAU,SAAW,UAAW,CACpC,OAAO,KAAK,KACd,EACAA,EAAM,UAAU,QAAU,UAAW,CACnC,OAAO,KAAK,IACd,EACA,SAASrD,EAAS0F,EAAY,CAC5B,KAAK,YAAcA,EACnB,KAAK,MAAQ,KACb,KAAK,UAAY,KACjB,KAAK,KAAO,EACZ,KAAK,QAAU,KACf,KAAK,WAAa,IACpB,CACA1F,EAAS,UAAU,MAAQzC,EAAK,UAAU,MAC1CyC,EAAS,UAAU,QAAU,UAAW,CACtC,MAAO,YACT,EACA,SAAStC,GAAO,CACd,KAAK,IAAM,MACb,CACA,SAAS0C,EAAU3C,EAAMjC,EAAKuE,EAAU4F,EAAM,CAC5C,GAAI5F,EAAU,CACZ,GAAIA,EAAS,cAAgBtC,EAC3B,MAAM,IAAI,MAAM,kBAAkB,EAEpC,OAAOsC,EAAS,MAAMvE,EAAKmK,CAAI,CACjC,KACE,QAAOlI,EAAK,MAAMjC,CAAG,CAEzB,CACA,SAASkJ,GAAWlN,EAAK,CACvB,IAAIQ,EAAQ,CAAC,EACTR,EAAI,OACNQ,EAAMR,EAAI,IAAI,EAAI,IAEpB,IAAIoO,EAAUpO,EAAI,QACdJ,EAAGC,EACP,IAAKD,EAAI,EAAGC,EAAIuO,EAAQ,OAAQxO,EAAIC,EAAGD,IACrCY,EAAM4N,EAAQxO,CAAC,CAAC,EAAI,GAEtB,OAAO,OAAO,KAAKY,CAAK,CAC1B,CACA,SAAS8K,GAAkB+C,EAAQC,EAAQC,EAAQ,CACjD,GAAI,CAACD,EAAO,KACV,MAAO,GAET,IAAI7N,EAAO8N,EAASD,EAAO,KAAO5J,EAAM,UAAU4J,EAAO,IAAI,EACzDF,EAAUlB,GAAWmB,CAAM,EAC3BzO,EAAGC,EAAG2O,EACV,IAAK5O,EAAI,EAAGC,EAAIuO,EAAQ,OAAQxO,EAAIC,EAAGD,IAKrC,GAJA4O,EAAQJ,EAAQxO,CAAC,EACZ2O,IACHC,EAAQ9J,EAAM,UAAU8J,CAAK,GAE3BA,IAAU/N,EACZ,MAAO,GAGX,MAAO,EACT,CACA,SAAS2F,GAAYW,EAAU,CAC7B,IAAId,EAAOpB,EAAMkC,CAAQ,EACzB,OAAOd,GAAQA,EAAK,qBAAqByD,CAC3C,CACA,SAAST,GAAalC,EAAU,CAC9B,GAAIA,IAAa,QACfA,EAAW,aACN,CACL,IAAI7F,EAAQ,iBAAiB,KAAK6F,CAAQ,EACtC7F,IACEA,EAAM,CAAC,IAAM,QACf6F,EAAW7F,EAAM,CAAC,EAAI,QAEtB6F,EAAW7F,EAAM,CAAC,EAGxB,CACA,OAAOwD,EAAM,WAAWqC,CAAQ,EAAI,MACtC,CACA,SAASyE,GAAcxH,EAAK,CAC1B,IAAIP,EAAIO,EAAI,SAAS,EACrB,OAAIP,EAAI,IACNA,EAAI,CAACA,EACLO,EAAI,SAAS,GAERP,CACT,CACA,SAASsG,GAAWtG,EAAG,CACrB,OAAOA,GAAK,mBAAqBA,GAAK,gBACxC,CACA,SAAS2G,GAAapK,EAAK,CACzB,OAAOA,GAAOA,EAAI,OAAS,UAAY,MAAM,QAAQA,EAAI,IAAI,CAC/D,CACA,SAAS4J,GAAkB3C,EAAKhB,EAAM,CACpC,MAAM,IAAI,MAAM5H,EAAG,iBAAkB4H,EAAK,OAAO,EAAGgB,CAAG,CAAC,CAC1D,CACA,SAASd,GAAa1F,EAAMkL,EAAI,CAC9B,IAAI8C,EAAc/J,EAAM,UAAUjE,CAAI,EACtC,OAAO2F,GAAYqI,CAAW,EAAIA,EAAc/J,EAAM,QAAQjE,EAAMkL,CAAE,CACxE,CACA,SAAShE,GAAc1B,EAAM,CAC3B,IAAIc,EAAWd,EAAK,SACpB,OAAQc,EAAU,CAChB,IAAK,SACL,IAAK,QACL,IAAK,MACL,IAAK,OACH,MAAO,SACT,IAAK,QACL,IAAK,QACH,MAAO,SACT,IAAK,OACH,MAAO,SACT,IAAK,MACL,IAAK,QACL,IAAK,SACH,MAAO,SACT,QACE,OAAOA,CACX,CACF,CACA,SAASwD,GAAetD,EAAK,CAC3B,GAAIA,IAAQ,KACV,MAAO,OAET,IAAIS,EAAS,OAAOT,EACpB,GAAIS,IAAW,SAAU,CACvB,GAAI,MAAM,QAAQT,CAAG,EACnB,MAAO,QACF,GAAIhJ,EAAQ,SAASgJ,CAAG,EAC7B,MAAO,QAEX,CACA,OAAOS,CACT,CACA,SAASZ,GAAYD,EAAO,CAC1B,IAAIgB,EAAU,CAAC,EACXjI,EAAGC,EAAG6H,EAAQzB,EAClB,IAAKrG,EAAI,EAAGC,EAAIgH,EAAM,OAAQjH,EAAIC,EAAGD,IAEnC,GADAqG,EAAOY,EAAMjH,CAAC,EACV,CAACmG,EAAK,OAAOE,EAAM,SAAS,EAAG,CAEjC,GADAyB,EAASC,GAAc1B,CAAI,EACvB4B,EAAQH,CAAM,EAChB,MAAO,GAETG,EAAQH,CAAM,EAAI,EACpB,CAEF,MAAO,EACT,CACA,SAASK,GAAelB,EAAO,CAC7B,IAAI6H,EAAY,CAAC,MAAO,OAAQ,QAAS,QAAQ,EAC7CC,EAAa,GACbC,EAAY,KACZhP,EAAGC,EAAGoG,EAAMyC,EAChB,IAAK9I,EAAI,EAAGC,EAAIgH,EAAM,OAAQjH,EAAIC,EAAGD,IACnCqG,EAAOY,EAAMjH,CAAC,EACd8I,EAAQgG,EAAU,QAAQzI,EAAK,QAAQ,EACnCyC,EAAQiG,IACVA,EAAajG,EACbkG,EAAY3I,GAGhB,OAAO2I,CACT,CACA,SAAS5G,GAAenB,EAAO5H,EAAM,CACnC,IAAIoM,EAAU,CAAC,EACXzL,EAAGC,EAAGoG,EAAM4I,EAChB,IAAKjP,EAAI,EAAGC,EAAIgH,EAAM,OAAQjH,EAAIC,EAAGD,IAAK,CAExC,GADAqG,EAAOY,EAAMjH,CAAC,EACVqG,EAAK,WAAa,SACpB,OAAOA,EAET4I,EAAc5I,EAAK,QACnB,IAAIlD,EAAIV,EACR,IAAKU,EAAK,EAAGV,EAAKwM,EAAY,OAAQ9L,EAAKV,EAAIU,IAC7CsI,EAAQwD,EAAY9L,CAAE,CAAC,EAAI,EAE/B,CACA,OAAOgD,EAAK,UAAU,CAAE,KAAM,OAAQ,QAAS,OAAO,KAAKsF,CAAO,CAAE,EAAGpM,CAAI,CAC7E,CACA,SAASgJ,GAAepB,EAAO5H,EAAM,CACnC,IAAIV,EAAO,GACPqB,EAAGC,EAAGoG,EACV,IAAKrG,EAAI,EAAGC,EAAIgH,EAAM,OAAQjH,EAAIC,EAAGD,IAAK,CAExC,GADAqG,EAAOY,EAAMjH,CAAC,EACVqG,EAAK,WAAa,QACpB,OAAOA,EAEL1H,IAAS,GACXA,EAAO0H,EAAK,KACHA,EAAK,OAAS1H,IACvBA,EAAO,GAEX,CACA,OAAOA,EAAO,EAAIwH,EAAK,UAAU,QAAS9G,CAAI,EAAI4H,EAAM,CAAC,CAC3D,CACA,SAASsB,GAAetB,EAAO5H,EAAM,CACnC,IAAI6P,EAAW,CAAC,EACZC,EAAa,CAAC,EACdC,EAAgB,CAAC,EACjBC,EAAgB,GAChBrP,EAAGC,EAAGoG,EAAMoH,EAChB,IAAKzN,EAAI,EAAGC,EAAIgH,EAAM,OAAQjH,EAAIC,EAAGD,IAEnC,GADAqG,EAAOY,EAAMjH,CAAC,EACVqG,EAAK,WAAa,MACpBgJ,EAAgB,GAChBH,EAAS,KAAK7I,EAAK,UAAU,MACxB,CACLoH,EAASpH,EAAK,OACd,IAAIlD,EAAIV,EAAIuJ,EAAOsD,EAAcC,EAAW5B,EAC5C,IAAKxK,EAAK,EAAGV,EAAKgL,EAAO,OAAQtK,EAAKV,EAAIU,IACxC6I,EAAQyB,EAAOtK,CAAE,EACjBoM,EAAYvD,EAAM,KAClB2B,EAAY3B,EAAM,KAClBkD,EAAS,KAAKvB,CAAS,EACnB0B,IACGF,EAAWI,CAAS,IACvBJ,EAAWI,CAAS,EAAI,CAAC,GAE3BJ,EAAWI,CAAS,EAAE,KAAK5B,CAAS,EACpC2B,EAAetD,EAAM,aAAa,EAC9BsD,IAAiB,SACnBF,EAAcG,CAAS,EAAID,GAInC,CAEF,GAAID,EAAe,CACjB,IAAI/H,EAAa,OAAO,KAAK6H,CAAU,EACvC,IAAKnP,EAAI,EAAGC,EAAIqH,EAAW,OAAQtH,EAAIC,EAAGD,IACxCuP,EAAYjI,EAAWtH,CAAC,EACpBmP,EAAWI,CAAS,EAAE,OAAStI,EAAM,QAAUmI,EAAcG,CAAS,IAAM,SAC1ElQ,GAAQA,EAAK,eACfgQ,EAAgB,IAEhBF,EAAWI,CAAS,EAAE,QAAQpJ,EAAK,UAAU,OAAQ9G,CAAI,CAAC,EAC1D+P,EAAcG,CAAS,EAAI,MAInC,CACA,IAAInJ,GACJ,OAAIiJ,EACFjJ,GAAS,CACP,KAAM,SACN,OAAQkB,EAAW,IAAI,SAAStI,GAAG,CACjC,IAAIwQ,GAAarJ,EAAK,SAASgJ,EAAWnQ,EAAC,EAAGK,CAAI,EAC9CoQ,GAAgBL,EAAcpQ,EAAC,EACnC,GAAIyQ,KAAkB,QAAU,CAACD,GAAW,SAAS,QAAQ,OAAO,EAAG,CACrE,IAAIE,GAAaF,GAAW,MAAM,MAAM,EACpCjM,GAAIgB,GACR,IAAKhB,GAAK,EAAGgB,GAAKmL,GAAW,OAAQnM,GAAKgB,IACpC,CAAAmL,GAAWnM,EAAE,EAAE,QAAQkM,EAAa,EADIlM,KAC5C,CAIF,GAAIA,GAAK,EAAG,CACV,IAAIqE,GAAY8H,GAAW,CAAC,EAC5BA,GAAW,CAAC,EAAIA,GAAWnM,EAAE,EAC7BmM,GAAWnM,EAAE,EAAIqE,GACjB4H,GAAarJ,EAAK,UAAUuJ,GAAYrQ,CAAI,CAC9C,CACF,CACA,MAAO,CACL,KAAML,GACN,KAAMwQ,GACN,QAAWJ,EAAcpQ,EAAC,CAC5B,CACF,CAAC,CACH,EAEAoH,GAAS,CACP,KAAM,MACN,OAAQD,EAAK,SAAS+I,EAAU7P,CAAI,CACtC,EAEK8G,EAAK,UAAUC,GAAQ/G,CAAI,CACpC,CACAvB,EAAO,QAAU,CACf,KAAAqI,EACA,cAAA4B,GACA,eAAA4C,GACA,YAAAnE,GACA,SAAU,UAAW,CACnB,IAAIS,EAAQ,CACV,YAAA+G,EACA,mBAAAnH,EACA,iBAAAD,CACF,EACIkI,EAAY,OAAO,KAAK7J,CAAK,EAC7BjF,EAAGC,EAAGkH,EACV,IAAKnH,EAAI,EAAGC,EAAI6O,EAAU,OAAQ9O,EAAIC,EAAGD,IACvCmH,EAAW2H,EAAU9O,CAAC,EACtBiH,EAAMoC,GAAalC,CAAQ,CAAC,EAAIlC,EAAMkC,CAAQ,EAEhD,OAAOF,CACT,EAAE,CACJ,CACF,CACF,CAAC,EAGG0I,GAAqBjT,GAAW,CAClC,sCAAsCmB,EAASC,EAAQ,CACrD,aACA,IAAImJ,EAAQpC,GAAc,EACtBC,EAAQlH,GAAc,EACtBG,EAASC,GACT4R,EAASC,GACT1R,EAAOC,GACP0R,EAAOC,GACP1R,EAAUN,EAAO,OACjBiS,EAAO,CAAE,UAAW,sBAAuB,EAC3CC,EAAYhJ,EAAM,KAAK,UAAU,OAAQ+I,CAAI,EAC7CE,EAAiBjJ,EAAM,KAAK,UAAU,CAAE,KAAM,MAAO,OAAQ,OAAQ,EAAG+I,CAAI,EAC5EG,EAAclJ,EAAM,KAAK,UAAU,CACrC,KAAM,SACN,KAAM,SACN,OAAQ,CACN,CAAE,KAAM,QAAS,KAAM,CAAE,KAAM,QAAS,KAAM,QAAS,KAAM,CAAE,CAAE,EACjE,CAAE,KAAM,OAAQ,KAAMiJ,CAAe,EACrC,CAAE,KAAM,OAAQ,KAAM,CAAE,KAAM,QAAS,KAAM,OAAQ,KAAM,EAAG,CAAE,CAClE,CACF,EAAGF,CAAI,EACHI,GAAanJ,EAAM,KAAK,UAAU,CACpC,KAAM,QACN,KAAM,SACN,OAAQ,CACN,CAAE,KAAM,QAAS,KAAM,MAAO,EAC9B,CAAE,KAAM,OAAQ,KAAM,OAAQ,EAC9B,CAAE,KAAM,OAAQ,KAAM,MAAO,CAC/B,CACF,EAAG+I,CAAI,EACHK,EAAcvL,EAAM,WAAW,MAAM,EACrCrG,EAAKN,EAAK,OACVuF,EAAMoB,EAAM,IAChB,SAASwL,EAAWlK,EAAQ/G,EAAM,CAChCA,EAAOA,GAAQ,CAAC,EAChB,IAAIkR,EAAW,CAAC,CAAClR,EAAK,SACtBuQ,EAAO,OAAO,KAAK,KAAM,CACvB,mBAAoB,CAACW,EACrB,cAAe,EACjB,CAAC,EACD,KAAK,MAAQtJ,EAAM,KAAK,UAAUb,CAAM,EACxC,KAAK,KAAO,IAAI1C,EAAIoB,EAAM,UAAU,CAAC,CAAC,EACtC,KAAK,SAAW,KAChB,KAAK,UAAY,GACjB,KAAK,WAAa0L,EAAaD,EAAU,KAAK,KAAK,EACnD,KAAK,UAAY,GACjB,KAAK,GAAG,SAAU,UAAW,CAC3B,KAAK,UAAY,GACjB,KAAK,MAAM,CACb,CAAC,CACH,CACApS,EAAK,SAASmS,EAAYV,EAAO,MAAM,EACvCU,EAAW,UAAU,OAAS,SAASG,EAAOC,EAAU/T,EAAI,CAC1D,KAAK,SAAWA,EAChB,IAAIyH,EAAM,KAAK,KACfA,EAAI,IAAM/F,EAAQ,OAAO,CAAC+F,EAAI,IAAI,MAAMA,EAAI,GAAG,EAAGqM,CAAK,CAAC,EACxDrM,EAAI,IAAM,EACN,KAAK,YACP,KAAK,UAAY,GACjB,KAAK,MAAM,EAEf,EACAkM,EAAW,UAAU,MAAQ,UAAW,CACtC,KAAK,UAAY,GACjB,IAAIlM,EAAM,KAAK,KACXrE,EAAMqE,EAAI,IACViD,EAAM,KAAK,WAAWjD,CAAG,EACzBA,EAAI,QAAQ,EACd,KAAK,KAAKiD,CAAG,EACH,KAAK,UAOf,KAAK,KAAK,IAAI,GANdjD,EAAI,IAAMrE,EACV,KAAK,UAAY,GACb,KAAK,UACP,KAAK,SAAS,EAKpB,EACA,SAAS4Q,EAAatR,EAAM,CAC1BA,EAAOA,GAAQ,CAAC,EAChB,IAAIkR,EAAW,CAAC,CAAClR,EAAK,SACtBuQ,EAAO,OAAO,KAAK,KAAM,CACvB,cAAe,GAEf,mBAAoB,CAACW,CACvB,CAAC,EACD,KAAK,OAASlR,EAAK,eAAiB,OAAS4H,EAAM,KAAK,UAAU5H,EAAK,YAAY,EAAI,OACvF,KAAK,OAAS,KACd,KAAK,QAAUA,EAAK,OACpB,KAAK,OAAS,OACd,KAAK,WAAaA,EAAK,UACvB,KAAK,KAAO,IAAIqE,EAAIoB,EAAM,UAAU,CAAC,CAAC,EACtC,KAAK,UAAY,IAAIpB,EAAIoB,EAAM,UAAU,CAAC,CAAC,EAC3C,KAAK,YAAc,KACnB,KAAK,WAAa,KAClB,KAAK,UAAYyL,EACjB,KAAK,OAAS,IAAIzL,EAAM,aACxB,KAAK,YAAc,KACnB,KAAK,OAAS,EACd,KAAK,WAAa,OAClB,KAAK,UAAY,GACjB,KAAK,UAAY,GACjB,KAAK,GAAG,SAAU,UAAW,CAC3B,KAAK,UAAY,GACb,KAAK,WACP,KAAK,MAAM,CAEf,CAAC,CACH,CACA3G,EAAK,SAASwS,EAAcf,EAAO,MAAM,EACzCe,EAAa,cAAgB,UAAW,CACtC,MAAO,CACL,KAAQ,SAAShN,EAAKhH,EAAI,CACxBA,EAAG,KAAMgH,CAAG,CACd,EACA,QAAWmM,EAAK,UAClB,CACF,EACAa,EAAa,iBAAmBA,EAAa,cAC7CA,EAAa,UAAU,cAAgB,UAAW,CAChD,IAAIvM,EAAM,KAAK,KACf,GAAIA,EAAI,IAAI,OAASiM,EAAY,OAC/B,MAAO,GAET,GAAI,CAACA,EAAY,OAAOjM,EAAI,IAAI,MAAM,EAAGiM,EAAY,MAAM,CAAC,EAC1D,YAAK,KAAK,QAAS,IAAI,MAAM,qBAAqB,CAAC,EAC5C,GAET,IAAIO,EAAST,EAAY,MAAM/L,CAAG,EAClC,GAAI,CAACA,EAAI,QAAQ,EACf,MAAO,GAET,KAAK,QAAUwM,EAAO,KAAK,YAAY,GAAK,QAAQ,SAAS,EAC7D,IAAIC,EAAS,KAAK,SAAWF,EAAa,iBAAiB,EAE3D,GADA,KAAK,YAAcE,EAAO,KAAK,MAAM,EACjC,CAAC,KAAK,YAAa,CACrB,KAAK,KAAK,QAAS,IAAI,MAAMpS,EAAG,oBAAqB,KAAK,MAAM,CAAC,CAAC,EAClE,MACF,CACA,GAAI,CACF,IAAI2H,EAAS,KAAK,MAAMwK,EAAO,KAAK,aAAa,EAAE,SAAS,CAAC,EACzD,KAAK,aACPxK,EAAS,KAAK,WAAWA,CAAM,GAEjC,KAAK,OAASa,EAAM,KAAK,UAAUb,CAAM,CAC3C,OAASW,EAAK,CACZ,KAAK,KAAK,QAASA,CAAG,EACtB,MACF,CACA,GAAI,CACF,KAAK,WAAayJ,EAAa,KAAK,UAAW,KAAK,OAAQ,KAAK,MAAM,CACzE,OAASzJ,EAAK,CACZ,KAAK,KAAK,QAASA,CAAG,EACtB,MACF,CACA,YAAK,YAAc6J,EAAO,KAC1B,KAAK,KAAK,WAAY,KAAK,OAAQ,KAAK,OAAQA,CAAM,EAC/C,EACT,EACAD,EAAa,UAAU,OAAS,SAASF,EAAOC,EAAU/T,EAAI,CAC5D,IAAIyH,EAAM,KAAK,KAGf,GAFAA,EAAI,IAAM/F,EAAQ,OAAO,CAAC+F,EAAI,IAAKqM,CAAK,CAAC,EACzCrM,EAAI,IAAM,EACN,CAAC,KAAK,cAAc,EAAG,CACzB,QAAQ,SAASzH,CAAE,EACnB,MACF,CACA,KAAK,OAAS,KAAK,YACnB,KAAK,OAAOmI,EAAM,UAAU,CAAC,EAAG4L,EAAU/T,CAAE,CAC9C,EACAgU,EAAa,UAAU,YAAc,SAASF,EAAOC,EAAU/T,EAAI,CACjE,IAAIyH,EAAM,KAAK,KACfA,EAAI,IAAM/F,EAAQ,OAAO,CAAC+F,EAAI,IAAI,MAAMA,EAAI,GAAG,EAAGqM,CAAK,CAAC,EACxDrM,EAAI,IAAM,EAGV,QAFI0M,EAAU,EACVC,EACGA,EAAQC,EAAa5M,CAAG,GAAG,CAChC,GAAI,CAAC,KAAK,YAAY,OAAO2M,EAAM,IAAI,EAAG,CACxC,KAAK,KAAK,QAAS,IAAI,MAAM,qBAAqB,CAAC,EACnD,MACF,CACAD,IACA,KAAK,YACHC,EAAM,KACN,KAAK,qBAAqBA,EAAM,KAAK,OAAQA,EAAM,MAAOE,CAAO,CACnE,CACF,CACAA,EAAQ,EACR,SAASA,GAAU,CACZ,EAAEH,GACLnU,EAAG,CAEP,CACF,EACAgU,EAAa,UAAU,qBAAuB,SAAShS,EAAMuS,EAAOvU,EAAI,CACtE,IAAIkQ,EAAO,KACP/D,EAAQ,KAAK,SACjB,OAAO,SAASqI,EAAOtS,EAAM,CAC3B,GAAIsS,EAAO,CACT,IAAIpK,EAAM,IAAI,MAAMtI,EAAG,+BAAgCoO,EAAK,MAAM,CAAC,EACnE9F,EAAI,MAAQoK,EACZtE,EAAK,KAAK,QAAS9F,CAAG,EACtBpK,EAAG,CACL,MACEkQ,EAAK,KAAK,QAAS,IAAIuE,EAAUF,EAAOrS,EAAK,OAAQF,CAAI,CAAC,EAC1DkO,EAAK,OAAO,KAAK,IAAIwE,EAAUvI,EAAOjK,EAAMlC,EAAIuU,CAAK,CAAC,EAClDrE,EAAK,WACPA,EAAK,MAAM,CAGjB,CACF,EACA8D,EAAa,UAAU,MAAQ,UAAW,CACxC,KAAK,UAAY,GACjB,IAAIvM,EAAM,KAAK,UACf,GAAI,CAAC,KAAK,WAAY,CACpB,IAAIvF,EAAO,KAAK,OAAO,IAAI,EAC3B,GAAI,CAACA,GAAQ,CAACA,EAAK,MAAO,CACpB,KAAK,UACP,KAAK,KAAK,IAAI,EAEd,KAAK,UAAY,GAEfA,GACFA,EAAK,GAAG,EAEV,MACF,CACAA,EAAK,GAAG,EACR,KAAK,WAAaA,EAAK,MACvBuF,EAAI,IAAMvF,EAAK,IACfuF,EAAI,IAAM,CACZ,CACA,KAAK,aACL,IAAIiD,EACJ,GAAI,CAEF,GADAA,EAAM,KAAK,WAAWjD,CAAG,EACrB,CAACA,EAAI,QAAQ,EACf,MAAM,IAAI,MAAM,iBAAiB,CAErC,OAAS2C,EAAK,CACZ,KAAK,WAAa,EAClB,KAAK,KAAK,QAASA,CAAG,EACtB,MACF,CACA,KAAK,KAAKM,CAAG,CACf,EACA,SAASiK,GAAWlL,EAAQ/G,EAAM,CAChCA,EAAOA,GAAQ,CAAC,EAChBuQ,EAAO,UAAU,KAAK,KAAM,CAC1B,mBAAoB,GACpB,cAAe,EACjB,CAAC,EACD,KAAK,MAAQ3I,EAAM,KAAK,UAAUb,CAAM,EACxC,KAAK,YAAc,SAAShC,EAAKiD,EAAK,CACpC,GAAI,CACF,KAAK,MAAM,OAAOjD,EAAKiD,CAAG,CAC5B,OAASN,EAAK,CACZ,KAAK,KAAK,YAAaA,EAAKM,EAAK,KAAK,KAAK,CAC7C,CACF,EACA,KAAK,KAAO,IAAI3D,EAAIoB,EAAM,UAAUzF,EAAK,WAAa,KAAK,CAAC,EAC5D,KAAK,GAAG,YAAa,SAAS0H,EAAK,CACjC,KAAK,KAAK,QAASA,CAAG,CACxB,CAAC,CACH,CACA5I,EAAK,SAASmT,GAAY1B,EAAO,SAAS,EAC1C0B,GAAW,UAAU,WAAa,SAASjK,EAAKqJ,EAAU/T,EAAI,CAC5D,IAAIyH,EAAM,KAAK,KACXT,EAAMS,EAAI,IACVrE,EAAMqE,EAAI,IAEd,GADA,KAAK,YAAYA,EAAKiD,CAAG,EACrB,CAACjD,EAAI,QAAQ,EAAG,CACdrE,GACF,KAAK,KAAKwR,GAAWnN,EAAI,IAAK,EAAGrE,CAAG,CAAC,EAEvC,IAAIqC,EAAMgC,EAAI,IAAMrE,EAChBqC,EAAMuB,EAAI,SACZS,EAAI,IAAMU,EAAM,UAAU,EAAI1C,CAAG,GAEnCgC,EAAI,IAAM,EACV,KAAK,YAAYA,EAAKiD,CAAG,CAC3B,CACA1K,EAAG,CACL,EACA2U,GAAW,UAAU,OAAS,SAAS3U,EAAI,CACzC,IAAIyH,EAAM,KAAK,KACXrE,EAAMqE,EAAI,IACVrE,GACF,KAAK,KAAKqE,EAAI,IAAI,MAAM,EAAGrE,CAAG,CAAC,EAEjCpD,EAAG,CACL,EACA,SAAS6U,EAAapL,EAAQ/G,EAAM,CAClCA,EAAOA,GAAQ,CAAC,EAChBuQ,EAAO,OAAO,KAAK,KAAM,CACvB,cAAe,GAEf,mBAAoB,EACtB,CAAC,EACD,IAAIvJ,EA8BJ,GA7BIY,EAAM,KAAK,OAAOb,CAAM,GAC1BC,EAAOD,EACPA,EAAS,QAETC,EAAOY,EAAM,KAAK,UAAUb,CAAM,EAEpC,KAAK,QAAUA,EACf,KAAK,MAAQC,EACb,KAAK,YAAc,SAASjC,EAAKiD,EAAK,CACpC,GAAI,CACF,KAAK,MAAM,OAAOjD,EAAKiD,CAAG,CAC5B,OAASN,EAAK,CACZ,YAAK,KAAK,YAAaA,EAAKM,EAAK,KAAK,KAAK,EACpC,EACT,CACA,MAAO,EACT,EACA,KAAK,WAAahI,EAAK,WAAa,MACpC,KAAK,KAAO,IAAIqE,EAAIoB,EAAM,UAAU,KAAK,UAAU,CAAC,EACpD,KAAK,QAAUzF,EAAK,OACpB,KAAK,OAASA,EAAK,OAAS,OAC5B,KAAK,YAAc,EACnB,KAAK,YAAcA,EAAK,YAAc,IAAIyF,EAAM,IAAI,EAAE,WAAW,EAAE,EACnE,KAAK,OAAS,IAAIA,EAAM,aACxB,KAAK,SAAW,EAChB,KAAK,UAAY,GACjB,KAAK,YAAc,GACnB,KAAK,UAAY,GACjB,KAAK,UAAYzF,EAAK,UAAY,CAAC,EAC/B,CAAC6Q,EAAe,QAAQ,KAAK,SAAS,EACxC,MAAM,IAAI,MAAM,kBAAkB,EAEpC,IAAIuB,EAAQ,KAAK,OAEjB,GADA,KAAK,WAAa,KAAK,SAAWD,EAAa,iBAAiB,GAAGC,CAAK,EACpE,CAAC,KAAK,UACR,MAAM,IAAI,MAAMhT,EAAG,wBAAyBgT,CAAK,CAAC,EAKpD,OAHIpS,EAAK,aAAe,SACtBA,EAAK,YAAcA,EAAK,WAAa,QAAU,QAEzCA,EAAK,YAAa,CACxB,IAAK,GACL,IAAK,QACH,MACF,KAAK,OACL,IAAK,OACH,KAAK,YAAc,GACnB,MACF,QACE,KAAK,aAAa,CACtB,CACA,KAAK,GAAG,SAAU,UAAW,CAC3B,KAAK,UAAY,GACb,KAAK,YACP,KAAK,YAAY,EACR,KAAK,WAAa,KAAK,WAChC,KAAK,KAAK,IAAI,CAElB,CAAC,EACD,KAAK,GAAG,YAAa,SAAS0H,EAAK,CACjC,KAAK,KAAK,QAASA,CAAG,CACxB,CAAC,CACH,CACA5I,EAAK,SAASqT,EAAc5B,EAAO,MAAM,EACzC4B,EAAa,cAAgB,UAAW,CACtC,MAAO,CACL,KAAQ,SAAS7N,EAAKhH,EAAI,CACxBA,EAAG,KAAMgH,CAAG,CACd,EACA,QAAWmM,EAAK,UAClB,CACF,EACA0B,EAAa,iBAAmBA,EAAa,cAC7CA,EAAa,UAAU,aAAe,UAAW,CAC/C,IAAIpL,EAAS,KAAK,UAChB,KAAK,QAAU,KAAK,QAAU,KAAK,MAAM,UAAU,CAAE,YAAa,EAAK,CAAC,CAC1E,EACIsL,EAAO5M,EAAM,kBACf,KAAK,UACL,CAAE,cAAeA,EAAM,WAAWsB,CAAM,EAAG,aAActB,EAAM,WAAW,KAAK,MAAM,CAAE,EACvF,EAEF,EACI6M,EAASxB,EAAY,qBAAqB,EAC1CS,EAAS,IAAIe,EAAOtB,EAAaqB,EAAM,KAAK,WAAW,EAC3D,KAAK,KAAKd,EAAO,SAAS,CAAC,CAC7B,EACAY,EAAa,UAAU,OAAS,SAASnK,EAAKqJ,EAAU/T,EAAI,CACtD,KAAK,cACP,KAAK,aAAa,EAClB,KAAK,YAAc,IAErB,IAAIyH,EAAM,KAAK,KACXrE,EAAMqE,EAAI,IACVwN,EAAW,GACf,GAAI,KAAK,YAAYxN,EAAKiD,CAAG,EAAG,CAC9B,GAAI,CAACjD,EAAI,QAAQ,EAAG,CACdrE,IACF,KAAK,YAAYA,EAAKpD,CAAE,EACxBiV,EAAW,IAEb,IAAIxP,EAAMgC,EAAI,IAAMrE,EAChBqC,EAAM,KAAK,aACb,KAAK,WAAaA,EAAM,GAE1BgC,EAAI,IAAMU,EAAM,UAAU,KAAK,UAAU,EACzCV,EAAI,IAAM,EACV,KAAK,YAAYA,EAAKiD,CAAG,CAC3B,CACA,KAAK,aACP,MACEjD,EAAI,IAAMrE,EAEP6R,GACHjV,EAAG,CAEP,EACA6U,EAAa,UAAU,YAAc,SAASzR,EAAKpD,EAAI,CACrD,IAAIyH,EAAM,KAAK,KACfrE,EAAMA,GAAOqE,EAAI,IACjB,KAAK,UAAUA,EAAI,IAAI,MAAM,EAAGrE,CAAG,EAAG,KAAK,qBAAqBA,EAAKpD,CAAE,CAAC,EACxE,KAAK,YAAc,CACrB,EACA6U,EAAa,UAAU,MAAQ,UAAW,CACxC,IAAI3E,EAAO,KACPhO,EAAO,KAAK,OAAO,IAAI,EAC3B,GAAI,CAACA,EAAM,CACL,KAAK,WAAa,CAAC,KAAK,SAC1B,QAAQ,SAAS,UAAW,CAC1BgO,EAAK,KAAK,IAAI,CAChB,CAAC,EAED,KAAK,UAAY,GAEnB,MACF,CACA,KAAK,KAAKoD,EAAU,SAASpR,EAAK,MAAO,EAAI,CAAC,EAC9C,KAAK,KAAKoR,EAAU,SAASpR,EAAK,IAAI,OAAQ,EAAI,CAAC,EACnD,KAAK,KAAKA,EAAK,GAAG,EAClB,KAAK,KAAK,KAAK,WAAW,EACrB,KAAK,WACRA,EAAK,GAAG,CAEZ,EACA2S,EAAa,UAAU,qBAAuB,SAAS7S,EAAMhC,EAAI,CAC/D,IAAIkQ,EAAO,KACP/D,EAAQ,KAAK,SACboI,EAAQ,KAAK,YACjB,YAAK,WACE,SAASC,EAAOtS,EAAM,CAC3B,GAAIsS,EAAO,CACT,IAAIpK,EAAM,IAAI,MAAMtI,EAAG,6BAA8BoO,EAAK,MAAM,CAAC,EACjE9F,EAAI,MAAQoK,EACZtE,EAAK,KAAK,QAAS9F,CAAG,EACtB,MACF,CACA8F,EAAK,WACLA,EAAK,KAAK,QAAS,IAAIuE,EAAUF,EAAOvS,EAAME,EAAK,MAAM,CAAC,EAC1DgO,EAAK,OAAO,KAAK,IAAIwE,EAAUvI,EAAOjK,EAAMlC,EAAIuU,CAAK,CAAC,EAClDrE,EAAK,YACPA,EAAK,UAAY,GACjBA,EAAK,MAAM,EAEf,CACF,EACA,SAASuE,EAAUF,EAAOW,EAAKC,EAAY,CACzC,KAAK,WAAaZ,EAClB,KAAK,cAAgBW,EACrB,KAAK,qBAAuBC,CAC9B,CACA,SAAST,EAAUvI,EAAOnF,EAAKhH,EAAIuU,EAAO,CACxC,KAAK,MAAQpI,EACb,KAAK,IAAMnF,EACX,KAAK,GAAKhH,EACV,KAAK,MAAQuU,EAAQ,CACvB,CACA,SAASF,EAAa5M,EAAK,CACzB,IAAIrE,EAAMqE,EAAI,IACV2M,EAAQX,GAAW,MAAMhM,CAAG,EAChC,OAAKA,EAAI,QAAQ,EAIV2M,GAHL3M,EAAI,IAAMrE,EACH,KAGX,CACA,SAASyQ,EAAaD,EAAUwB,EAAYzD,EAAY,CACtD,GAAIiC,EACF,OAAuB,SAASyB,EAAS,CACvC,OAAO,SAAS5N,EAAK,CACnB,IAAIrE,EAAMqE,EAAI,IACd,OAAA4N,EAAQ5N,CAAG,EACJA,EAAI,IAAI,MAAMrE,EAAKqE,EAAI,GAAG,CACnC,CACF,EAAE2N,EAAW,KAAK,EACb,GAAIzD,EAAY,CACrB,IAAI3F,EAAW2F,EAAW,eAAeyD,CAAU,EACnD,OAAO,SAAS3N,EAAK,CACnB,OAAOuE,EAAS,MAAMvE,CAAG,CAC3B,CACF,KACE,QAAO,SAASA,EAAK,CACnB,OAAO2N,EAAW,MAAM3N,CAAG,CAC7B,CAEJ,CACA,SAASmN,GAAW5N,EAAK5D,EAAKqC,EAAK,CACjC,IAAI0J,EAAOhH,EAAM,UAAU1C,CAAG,EAC9B,OAAAuB,EAAI,KAAKmI,EAAM,EAAG/L,EAAKA,EAAMqC,CAAG,EACzB0J,CACT,CACAhO,EAAO,QAAU,CACf,WAAAsS,GAEA,YAAAD,EAEA,YAAAE,EAEA,QAAS,CACP,aAAAM,EACA,aAAAa,EACA,WAAAlB,EACA,WAAAgB,EACF,CACF,CACF,CACF,CAAC,EAGGW,GAAmBvV,GAAW,CAChC,oCAAoCmB,EAASC,EAAQ,CACnD,aACA,IAAImJ,EAAQpC,GAAc,EACtBC,EAAQlH,GAAc,EACtBG,EAASC,GACTkU,EAASC,GACTvC,EAASC,GACT1R,EAAOC,GACPC,EAAUN,EAAO,OACjB2F,EAAMoB,EAAM,IACZqB,EAAOc,EAAM,KACbjC,EAAQ7G,EAAK,SAAS,eAAe,EACrCM,EAAKN,EAAK,OACV6R,GAAO,CAAE,UAAW,qBAAsB,EAC1CoC,EAAejM,EAAK,UAAU,UAAW6J,EAAI,EAC7CE,EAAiB/J,EAAK,UAAU,CAAE,KAAM,MAAO,OAAQ,OAAQ,EAAG6J,EAAI,EACtEqC,EAAclM,EAAK,UAAU,SAAU6J,EAAI,EAC3CsC,EAAyBnM,EAAK,UAAU,CAC1C,KAAM,mBACN,KAAM,SACN,OAAQ,CACN,CAAE,KAAM,aAAc,KAAM,CAAE,KAAM,MAAO,KAAM,QAAS,KAAM,EAAG,CAAE,EACrE,CAAE,KAAM,iBAAkB,KAAM,CAAC,OAAQ,QAAQ,EAAG,QAAW,IAAK,EACpE,CAAE,KAAM,aAAc,KAAM,KAAM,EAClC,CAAE,KAAM,OAAQ,KAAM,CAAC,OAAQ+J,CAAc,EAAG,QAAW,IAAK,CAClE,CACF,EAAGF,EAAI,EACHuC,EAA0BpM,EAAK,UAAU,CAC3C,KAAM,oBACN,KAAM,SACN,OAAQ,CACN,CACE,KAAM,QACN,KAAM,CACJ,KAAM,iBACN,KAAM,OACN,QAAS,CAAC,OAAQ,SAAU,MAAM,CACpC,CACF,EACA,CAAE,KAAM,iBAAkB,KAAM,CAAC,OAAQ,QAAQ,EAAG,QAAW,IAAK,EACpE,CAAE,KAAM,aAAc,KAAM,CAAC,OAAQ,KAAK,EAAG,QAAW,IAAK,EAC7D,CAAE,KAAM,OAAQ,KAAM,CAAC,OAAQ+J,CAAc,EAAG,QAAW,IAAK,CAClE,CACF,EAAGF,EAAI,EACHwC,GAAgB,GAChBC,EAAe,IAAIC,EACrB,GAEAvM,EAAK,UAAU,CAAE,KAAM,cAAe,KAAM,SAAU,OAAQ,CAAC,CAAE,EAAG6J,EAAI,EACxE7J,EAAK,UAAU,CAAC,QAAQ,EAAG6J,EAAI,EAC/B7J,EAAK,UAAU,OAAQ6J,EAAI,CAC7B,EACA,SAAS0C,EAAQ7R,EAAM8R,EAASC,EAASC,EAASC,EAAQC,EAAK,CAE7D,GADA,KAAK,KAAOlS,EACR,CAACsF,EAAK,OAAOwM,EAAS,QAAQ,EAChC,MAAM,IAAI,MAAM,sBAAsB,EAGxC,GADA,KAAK,YAAcA,EACf,CAACxM,EAAK,OAAOyM,EAAS,OAAO,GAAK,CAACzM,EAAK,OAAOyM,EAAQ,SAAS,EAAE,CAAC,EAAG,QAAQ,EAChF,MAAM,IAAI,MAAM,oBAAoB,EAGtC,GADA,KAAK,UAAYA,EACbE,IACE,CAAC3M,EAAK,OAAO0M,EAAS,MAAM,GAAKD,EAAQ,SAAS,EAAE,OAAS,GAC/D,MAAM,IAAI,MAAM,gCAAgC,EAGpD,KAAK,aAAeC,EACpB,KAAK,OAAS,CAAC,CAACC,EAChB,KAAK,IAAMC,IAAQ,OAAS,GAAKA,EAAM,OACvC,OAAO,OAAO,IAAI,CACpB,CACAL,EAAQ,UAAY,SAAS7R,EAAMuF,EAAQ/G,EAAM,CAE/C,GADAA,EAAOA,GAAQ,CAAC,EACZ,CAACyF,EAAM,YAAYjE,CAAI,EACzB,MAAM,IAAI,MAAMpC,EAAG,2BAA4BoC,CAAI,CAAC,EAEtD,GAAI,CAAC,MAAM,QAAQuF,EAAO,OAAO,EAC/B,MAAM,IAAI,MAAM3H,EAAG,8BAA+BoC,CAAI,CAAC,EAEzD,IAAImS,EAAavU,EAAG,eAAgBuR,GAAK,UAAWlL,EAAM,WAAWjE,CAAI,CAAC,EACtE8R,EAAUxM,EAAK,UAAU,CAC3B,KAAM6M,EACN,KAAM,SACN,UAAW3T,EAAK,WAAa,GAE7B,OAAQ+G,EAAO,OACjB,EAAG/G,CAAI,EAEP,GADA,OAAOA,EAAK,SAAS2T,CAAU,EAC3B,CAAC5M,EAAO,SACV,MAAM,IAAI,MAAM3H,EAAG,+BAAgCoC,CAAI,CAAC,EAE1D,IAAIgS,EAAU1M,EAAK,UAAUC,EAAO,SAAU/G,CAAI,EAClD,GAAI+G,EAAO,SAAW,QAAU,CAAC,MAAM,QAAQA,EAAO,MAAM,EAC1D,MAAM,IAAI,MAAM3H,EAAG,6BAA8BoC,CAAI,CAAC,EAExD,IAAI+R,EAAUzM,EAAK,UAAU,CAAC,QAAQ,EAAE,OAAOC,EAAO,QAAU,CAAC,CAAC,EAAG/G,CAAI,EACrEyT,EAAS,CAAC,CAAC1M,EAAO,SAAS,EAC/B,OAAO,IAAIsM,EAAQ7R,EAAM8R,EAASC,EAASC,EAASC,EAAQ1M,EAAO,GAAG,CACxE,EACAsM,EAAQ,UAAU,OAASvM,EAAK,UAAU,UAC1CuM,EAAQ,UAAU,OAAS,SAASrT,EAAM,CACxC,IAAI4T,EAAY,KAAK,YAAY,OAAO5T,CAAI,EACxC+G,EAAS,CACX,QAAS6M,EAAU,OACnB,SAAU,KAAK,aAAa,OAAO5T,CAAI,CACzC,EACI6T,EAAS,KAAK,IACdA,IAAW,SACb9M,EAAO,IAAM8M,GAEf,IAAIC,EAAY,KAAK,UAAU,OAAO9T,CAAI,EAC1C,OAAI8T,EAAU,OAAS,IACrB/M,EAAO,OAAS+M,EAAU,MAAM,CAAC,GAE/B,KAAK,SACP/M,EAAO,SAAS,EAAI,IAEfA,CACT,EACAtB,EAAM,qBACJ4N,EACA,CAAC,OAAQ,YAAa,cAAe,cAAc,CACrD,EACAA,EAAQ,UAAU,SAAWvU,EAAK,UAChC,UAAW,CACT,OAAO,KAAK,MACd,EACA,iDACF,EACA,SAASiV,EAAQvS,EAAMwS,EAAUC,EAAQC,EAAMC,EAAQ,CACrD,GAAI,OAAO3S,GAAQ,SACjB,OAAOuS,EAAQ,YAAYvS,EAAMwS,CAAQ,EAE3C,KAAK,KAAOxS,EACZ,KAAK,gBAAkBwS,GAAY,CAAC,EACpC,KAAK,SAAW,OAAO,OAAOvO,EAAM,aAAa,KAAK,eAAe,CAAC,EACtE,KAAK,aAAewO,GAAU,CAAC,EAC/B,KAAK,MAAQ,OAAO,OAAOxO,EAAM,aAAa,KAAK,YAAY,CAAC,EAChE,KAAK,SAAWyO,EAChB,KAAK,SAAWzO,EAAM,QAAQ,KAAK,UAAUyO,CAAI,CAAC,EAAE,SAAS,QAAQ,EACrE,KAAK,IAAMA,EAAK,IAAM,GAAKA,EAAK,IAAM,OACtC,KAAK,QAAUC,GAAU,KAAK,aAAa,CAAE,OAAQ,EAAK,CAAC,EAC3D,OAAO,OAAO,IAAI,CACpB,CACAJ,EAAQ,OAASK,EACjBL,EAAQ,OAASM,GACjBN,EAAQ,WAAa,SAASO,EAAWC,EAAW,CAClD,GAAI,CACFC,GAAcF,EAAWC,CAAS,CACpC,MAAc,CACZ,MAAO,EACT,CACA,MAAO,EACT,EACAR,EAAQ,YAAc,SAASG,EAAMlU,EAAM,CACzCA,EAAOA,GAAQ,CAAC,EAChB,IAAIwB,EAAO0S,EAAK,SAChB,GAAI,CAAC1S,EACH,MAAM,IAAI,MAAM,uBAAuB,EAEzC,GAAI0S,EAAK,YAAc,OACrBlU,EAAK,UAAYkU,EAAK,cACjB,CACL,IAAIjS,EAAQ,gBAAgB,KAAKT,CAAI,EACjCS,IACFjC,EAAK,UAAYiC,EAAM,CAAC,EAE5B,CACAT,EAAOiE,EAAM,QAAQjE,EAAMxB,EAAK,SAAS,EACrCkU,EAAK,OACPA,EAAK,MAAM,QAAQ,SAASnT,EAAK,CAC/B+F,EAAK,UAAU/F,EAAKf,CAAI,CAC1B,CAAC,EAEH,IAAIyU,EACJ,OAAIP,EAAK,WACPO,EAAO,CAAC,EACR,OAAO,KAAKP,EAAK,QAAQ,EAAE,QAAQ,SAASpW,EAAK,CAC/C2W,EAAK3W,CAAG,EAAIuV,EAAQ,UAAUvV,EAAKoW,EAAK,SAASpW,CAAG,EAAGkC,CAAI,CAC7D,CAAC,GAEI,IAAI+T,EAAQvS,EAAMiT,EAAMzU,EAAK,SAAUkU,CAAI,CACpD,EACAH,EAAQ,UAAY,SAAS5K,EAAK,CAChC,MAAO,CAAC,CAACA,GAAOA,EAAI,eAAe,UAAU,CAC/C,EACA4K,EAAQ,UAAU,aAAe,SAAS/T,EAAM,CAC9C,IAAI0U,EAAS,IAAIN,EAAO,KAAMpU,CAAI,EAClC,eAAQ,SAAS,UAAW,CAC1B,GAAIA,GAAQA,EAAK,OAAQ,CACvB,IAAIe,EAAM,CAAE,WAAY,EAAK,EACzB4T,EAAM,CAAC,IAAIpE,EAAO,YAAYxP,CAAG,EAAG,IAAIwP,EAAO,YAAYxP,CAAG,CAAC,EACnEf,EAAK,OAAO,cAAc,CAAE,SAAU2U,EAAI,CAAC,EAAG,SAAUA,EAAI,CAAC,CAAE,EAAG5T,CAAG,EACrE2T,EAAO,cAAc,CAAE,SAAUC,EAAI,CAAC,EAAG,SAAUA,EAAI,CAAC,CAAE,EAAG5T,CAAG,CAClE,MAAWf,GAAQA,EAAK,WACtB0U,EAAO,cAAc1U,EAAK,SAAS,CAEvC,CAAC,EACM0U,CACT,EACAX,EAAQ,UAAU,aAAe,SAAS/T,EAAM,CAC9C,OAAO,IAAIqU,GAAO,KAAMrU,CAAI,CAC9B,EACA,OAAO,eAAe+T,EAAQ,UAAW,OAAQ,CAC/C,WAAY,GACZ,IAAK,UAAW,CACd,OAAOtO,EAAM,WAAW,KAAK,SAAU,QAAQ,CACjD,CACF,CAAC,EACDsO,EAAQ,UAAU,QAAU,SAASvS,EAAM,CACzC,OAAO,KAAK,gBAAgBA,CAAI,CAClC,EACAuS,EAAQ,UAAU,KAAO,SAASvS,EAAM,CACtC,OAAO,KAAK,aAAaA,CAAI,CAC/B,EACAuS,EAAQ,UAAU,QAAU,UAAW,CACrC,OAAO3U,EAAG,eAAgB,KAAK,IAAI,CACrC,EACAqG,EAAM,qBACJsO,EACA,CAAC,UAAW,WAAY,OAAQ,OAAQ,OAAO,CACjD,EACAA,EAAQ,UAAU,cAAgBjV,EAAK,UACrC,SAAS8V,EAAW5U,EAAM,CACxBA,EAAOA,GAAQ,CAAC,EAChB,IAAI0U,EAAS,KAAK,aAAa,CAC7B,MAAO1U,EAAK,MACZ,UAAW,GACX,YAAaA,EAAK,aAClB,QAASA,EAAK,OAChB,CAAC,EACG6U,EAAUH,EAAO,cAAcE,EAAW5U,CAAI,EAClD,OAAA8U,GAAcJ,EAAQG,CAAO,EACtBA,CACT,EACA,qDACF,EACAd,EAAQ,UAAU,eAAiBjV,EAAK,UACtC,SAAS8V,EAAW5U,EAAM,CACxB,GAAIA,GAAQA,EAAK,aACf,MAAM,IAAI,MAAM,gDAAgD,EAElE,OAAO,KAAK,QAAQ,cAAc4U,EAAW5U,CAAI,CACnD,EACA,sEACF,EACA+T,EAAQ,UAAU,KAAOjV,EAAK,UAC5B,SAAS0C,EAAMuT,EAAKF,EAASvX,EAAI,CAC/B,GAAI,CAACuX,GAAW,CAAC,KAAK,OAAOA,EAAQ,OAAO,KAAK,EAC/C,MAAM,IAAI,MAAM,iBAAiB,EAEnC,IAAIH,EAASG,EAAQ,OACrB,OAAAT,EAAO,UAAU,YAAY,KAAKM,EAAQlT,EAAMuT,EAAKzX,GAAMA,EAAG,KAAK,IAAI,CAAC,EACjEuX,EAAQ,WAAW,CAC5B,EACA,6EACF,EACAd,EAAQ,UAAU,OAASjV,EAAK,UAC9B,SAASqK,EAAK,CACZ,OAAO4K,EAAQ,UAAU5K,CAAG,GAAK,KAAK,eAAe,EAAE,OAAOA,EAAI,eAAe,CAAC,CACpF,EACA,kEACF,EACA4K,EAAQ,UAAU,eAAiBjV,EAAK,UACtC,SAASuB,EAAW,CAClB,OAAOoF,EAAM,QAAQ,KAAK,UAAU,KAAK,QAAQ,EAAGpF,CAAS,CAC/D,EACA,4CACF,EACA0T,EAAQ,UAAU,UAAYjV,EAAK,UACjCgI,EAAK,UAAU,UACf,2CACF,EACAiN,EAAQ,UAAU,GAAKjV,EAAK,UAC1B,SAAS0C,EAAMwT,EAAS,CACtB,IAAIxH,EAAO,KACX,YAAK,QAAQ,UAAUhM,EAAM,SAASuT,EAAKzX,EAAI,CAC7C,OAAO0X,EAAQ,KAAKxH,EAAMuH,EAAK,KAAK,QAASzX,CAAE,CACjD,CAAC,EACM,IACT,EACA,sDACF,EACAyW,EAAQ,UAAU,YAAcjV,EAAK,UACnC,UAAW,CACT,IAAImW,EAAS,KAAK,QACdjV,EAAO,CAAE,YAAaiV,EAAO,QAAS,MAAOA,EAAO,MAAO,EAC3Dd,EAAS,IAAIE,GAAOY,EAAO,QAASjV,CAAI,EAC5C,OAAAmU,EAAO,UAAY,OAAO,OAAOc,EAAO,SAAS,EAC1C,IAAIlB,EACT,KAAK,KACL,KAAK,gBACL,KAAK,aACL,KAAK,SACLI,CACF,CACF,EACA,yCACF,EACAJ,EAAQ,UAAU,OAAS,SAAS/T,EAAM,CACxC,IAAIkU,EAAO,CAAE,SAAU,KAAK,IAAK,EAC7BD,EAAS,CAAC,EACd,KAAK,MAAM,QAAQ,SAAShL,EAAG,CAC7B,GAAIA,EAAE,QAAQ,IAAM,OAGpB,KAAIiM,EAAajM,EAAE,OAAOjJ,CAAI,EAC1B,OAAOkV,GAAc,UACvBjB,EAAO,KAAKiB,CAAU,EAE1B,CAAC,EACGjB,EAAO,SACTC,EAAK,MAAQD,GAEf,IAAIkB,EAAW,OAAO,KAAK,KAAK,eAAe,EAC/C,OAAIA,EAAS,SACXjB,EAAK,SAAW,CAAC,EACjBiB,EAAS,QAAQ,SAAS3T,EAAM,CAC9B0S,EAAK,SAAS1S,CAAI,EAAI,KAAK,gBAAgBA,CAAI,EAAE,OAAOxB,CAAI,CAC9D,EAAG,IAAI,GAELA,GAAQA,EAAK,aAAe,KAAK,MAAQ,SAC3CkU,EAAK,IAAM,KAAK,KAEXA,CACT,EACA,SAASkB,EAAiBR,EAAW5U,EAAM1C,EAAI,CACzCA,IAAO,QAAU,OAAO0C,GAAQ,aAClC1C,EAAK0C,EACLA,EAAO,QAET,IAAIqV,EAAM,IAAItB,EAAQ,CAAE,SAAU,OAAQ,EAAGpD,EAAI,EAC7C2E,EACJD,EAAI,aAAa,CAAE,QAASrV,GAAQA,EAAK,OAAQ,CAAC,EAAE,cAAc4U,EAAW,CAC3E,MAAO5U,GAAQA,EAAK,MACpB,YAAa,OAAO4U,GAAa,UAEnC,CAAC,EAAE,KAAK,YAAa,SAASW,EAAMC,EAAM,CACxCF,EAAUE,EAAK,eACf,KAAK,QAAQ,EAAI,CACnB,CAAC,EAAE,KAAK,MAAO,SAASC,EAAS/N,EAAK,CAChCA,GAAO,CAAC,cAAc,KAAKA,CAAG,EAChCpK,EAAGoK,CAAG,EAENpK,EAAG,KAAM,KAAK,MAAMgY,CAAO,CAAC,CAEhC,CAAC,CACH,CACA,SAASlB,EAAOiB,EAAKrV,EAAM,CACzBA,EAAOA,GAAQ,CAAC,EAChB6S,EAAO,aAAa,KAAK,IAAI,EAC7B,KAAK,MAAQwC,EACb,KAAK,WAAa,CAAC,EACnB,KAAK,MAAQ,CAAC,EACd,KAAK,YAAc,CAAC,CAACrV,EAAK,UAC1B,KAAK,QAAUA,EAAK,OAAS,CAAC,EAC9B,KAAK,SAAWA,EAAK,cACrB,KAAK,SAAW,CAAC,CAACA,EAAK,YACvB,KAAK,UAAYyF,EAAM,UAAUzF,EAAM,UAAW,GAAG,EACjDA,EAAK,iBACP0V,GAAsB,KAAK,QAAS1V,EAAK,gBAAiBqV,EAAK,EAAI,EAErE,KAAK,MAAM,SAAS,QAAQ,SAASrG,EAAK,CACxC,KAAKA,EAAI,IAAI,EAAI,KAAK,uBAAuBA,CAAG,CAClD,EAAG,IAAI,CACT,CACAlQ,EAAK,SAASsV,EAAQvB,EAAO,YAAY,EACzCuB,EAAO,UAAU,eAAiB,UAAW,CAC3C,OAAO,KAAK,WAAW,MAAM,CAC/B,EACAA,EAAO,UAAU,cAAgB,SAASQ,EAAW5U,EAAM,CACzD,IAAI2V,EAAa3V,GAAQA,EAAK,WAC1B6U,EACJ,GAAI,OAAOD,GAAa,WAAY,CAClC,IAAIgB,EACAD,EACFC,EAAkBhB,EAElBgB,EAAkB,SAAStY,EAAI,CAC7B,IAAIuY,EAAW,IAAIC,EACfC,EAAYnB,EAAU,SAASlN,EAAKsO,EAAW,CACjD,GAAItO,EAAK,CACPpK,EAAGoK,CAAG,EACN,MACF,CACA,IAAIuO,GAAW,IAAIC,EAAa,EAAE,KAAK,QAAS,SAASC,GAAM,CAC7DtB,EAAQ,QAAQsB,EAAI,CACtB,CAAC,EACD7Y,EAAG,KAAM0Y,EAAU,KAAKC,EAAQ,CAAC,CACnC,CAAC,EACD,GAAIF,EACF,OAAAF,EAAS,KAAKE,CAAS,EAChBF,CAEX,EAEFhB,EAAU,IAAIuB,EAAuB,KAAMR,EAAiB5V,CAAI,CAClE,KAAO,CACL,IAAIqW,EAAUC,EAOd,GANIC,GAAS3B,CAAS,EACpByB,EAAWC,EAAW1B,GAEtByB,EAAWzB,EAAU,SACrB0B,EAAW1B,EAAU,UAEnB,CAACe,EAAY,CACf,IAAIa,EAAU,IAAIC,GAClBJ,EAAWA,EAAS,KAAKG,CAAO,EAChC,IAAIE,EAAU,IAAIC,GAClBD,EAAQ,KAAKJ,CAAQ,EACrBA,EAAWI,CACb,CACA7B,EAAU,IAAI+B,EAAsB,KAAMP,EAAUC,EAAUtW,CAAI,EAC7D2V,IACHd,EAAQ,KAAK,MAAO,UAAW,CAC7BwB,EAAS,OAAOG,CAAO,EACvBE,EAAQ,OAAOJ,CAAQ,CACzB,CAAC,EACDE,EAAQ,KAAK,QAAS,SAAS9O,EAAK,CAClCmN,EAAQ,QAAQnN,CAAG,CACrB,CAAC,EAEL,CACA,IAAImP,EAAW,KAAK,WACpB,OAAAA,EAAS,KAAKhC,CAAO,EACrBA,EAAQ,KAAK,SAAU,UAAW,CAChCgC,EAAS,OAAOA,EAAS,QAAQ,IAAI,EAAG,CAAC,CAC3C,CAAC,EACD,KAAK,YAAc,GACnB,KAAK,KAAK,UAAWhC,CAAO,EACrBA,CACT,EACAT,EAAO,UAAU,gBAAkB,SAASpU,EAAM,CAChD,KAAK,WAAW,QAAQ,SAAS6U,EAAS,CACxCA,EAAQ,QAAQ7U,GAAQA,EAAK,MAAM,CACrC,CAAC,CACH,EACAoU,EAAO,UAAU,YAAc,SAAS5S,EAAMuT,EAAK/U,EAAM1C,EAAI,CAC3D,IAAI0R,EAAM8H,EAAmB,KAAK,MAAOtV,CAAI,EACzCuV,EAAO,IAAIC,EAAehI,EAAK,CAAC,EAAG+F,CAAG,EAC1C,KAAK,cAAcgC,EAAM/W,EAAM1C,CAAE,CACnC,EACA8W,EAAO,UAAU,gBAAkB,UAAW,CAC5C,OAAO6C,GAAmB,KAAK,QAAS,EAAI,CAC9C,EACA,OAAO,eAAe7C,EAAO,UAAW,UAAW,CACjD,WAAY,GACZ,IAAK,UAAW,CACd,OAAO,KAAK,KACd,CACF,CAAC,EACDA,EAAO,UAAU,IAAM,UAAW,CAChC,IAAIzT,EAAGC,EAAGE,EACV,IAAKH,EAAI,EAAGC,EAAI,UAAU,OAAQD,EAAIC,EAAGD,IACvCG,EAAK,UAAUH,CAAC,EAChB,KAAK,MAAM,KAAKG,EAAG,OAAS,EAAIA,EAAG,IAAI,EAAIA,CAAE,EAE/C,OAAO,IACT,EACAsT,EAAO,UAAU,cAAgB,SAAS2C,EAAM/W,EAAM1C,EAAI,CACpD,CAACA,GAAM,OAAO0C,GAAS,aACzB1C,EAAK0C,EACLA,EAAO,QAET,IAAIwN,EAAO,KACPqJ,EAAW,KAAK,WAChBK,EAAcL,EAAS,OAC3B,GAAI,CAACK,EAAa,CAChB,GAAI,KAAK,YACPvR,EAAM,2CAA2C,EACjD,KAAK,KAAK,UAAW,UAAW,CAC9B,KAAK,cAAcoR,EAAM/W,EAAM1C,CAAE,CACnC,CAAC,MACI,CACL,IAAIoK,EAAM,IAAI,MAAM,oBAAoB,EACxC,QAAQ,SAAS,UAAW,CACtBpK,EACFA,EAAG,KAAK,IAAI6Z,EAAYJ,EAAK,IAAI,EAAGrP,CAAG,EAEvC8F,EAAK,KAAK,QAAS9F,CAAG,CAE1B,CAAC,CACH,CACA,MACF,CACA1H,EAAOA,GAAQ,CAAC,EACZA,EAAK,UAAY,SACnBA,EAAK,QAAU,KAAK,WAEtB,IAAI6U,EACJ,GAAIqC,IAAgB,EAClBrC,EAAUgC,EAAS,CAAC,UACX,KAAK,UAEd,GADAhC,EAAU,KAAK,SAAS,KAAK,WAAW,MAAM,CAAC,EAC3C,CAACA,EAAS,CACZlP,EAAM,2CAA2C,EACjD,MACF,OAEAkP,EAAUgC,EAAS,KAAK,MAAM,KAAK,OAAO,EAAIK,CAAW,CAAC,EAE5DrC,EAAQ,MAAMkC,EAAM/W,EAAM,SAASmW,EAAMiB,EAAM,CAC7C,IAAIC,EAAM,KACN9D,EAAU8D,EAAI,QAAQ,UAC1B,GAAIlB,EAAM,CACJ3I,EAAK,WACP2I,EAAO5C,EAAQ,MAAM4C,EAAK,QAAS,CAAE,WAAY,EAAK,CAAC,GAEzDmB,EAAKnB,CAAI,EACT,MACF,CACA,GAAI,CAACiB,EAAM,CACTE,EAAK,EACL,MACF,CACAnB,EAAOiB,EAAK,MACP5J,EAAK,WACJ2I,IAAS,OACXA,EAAO,KAEHrP,EAAK,OAAOyM,EAAS,iBAAiB,EACpC,OAAO4C,GAAQ,WACjBA,EAAO,IAAI,MAAMA,CAAI,GAEdA,GAAQA,EAAK,QAAU,OAAOA,EAAK,QAAU,WACtDA,EAAO,IAAI,MAAMA,EAAK,MAAM,IAIlCmB,EAAKnB,EAAMiB,EAAK,QAAQ,EACxB,SAASE,EAAKC,EAAMlS,EAAK,CACnB/H,EACFA,EAAG,KAAK+Z,EAAKE,EAAMlS,CAAG,EACbkS,GACT/J,EAAK,KAAK,QAAS+J,CAAI,CAE3B,CACF,CAAC,CACH,EACAnD,EAAO,UAAU,uBAAyB,SAASpF,EAAK,CACtD,IAAIZ,EAASY,EAAI,YAAY,UAAU,EACnCzN,EAAQ6M,EAAO,IAAI,SAASzJ,EAAI,CAClC,OAAOA,EAAG,QAAQ,CACpB,CAAC,EACG4F,EAAO,mBAAqByE,EAAI,KAAO,IAC3C,OAAIzN,EAAM,SACRgJ,GAAQhJ,EAAM,KAAK,IAAI,EAAI,MAE7BgJ,GAAQ;AAAA,EACRA,GAAQ,gBACRA,GAAQhJ,EAAM,IAAI,SAASiD,EAAG,CAC5B,OAAOA,EAAI,KAAOA,CACpB,CAAC,EAAE,KAAK,IAAI,EACZ+F,GAAQ;AAAA,EACRA,GAAQ,8BAAgCyE,EAAI,KAAO;AAAA,EACnDzE,GAAQ,KACD,IAAI,SAASA,CAAI,EAAE,CAC5B,EACA,SAAS8J,GAAOgB,EAAKrV,EAAM,CACzBA,EAAOA,GAAQ,CAAC,EAChB6S,EAAO,aAAa,KAAK,IAAI,EAC7B,KAAK,QAAUwC,EACf,KAAK,UAAY,CAAC,EAClB,KAAK,KAAO,CAAC,EACb,KAAK,UAAY,CAAC,EAClB,KAAK,eAAiB,EACtB,KAAK,OAASrV,EAAK,OAAS,CAAC,EAC7B,KAAK,gBAAkBA,EAAK,eAC5B,KAAK,iBAAmBA,EAAK,qBAC7B,KAAK,QAAU,CAAC,CAACA,EAAK,OACtB,KAAK,QAAU,CAAC,CAACA,EAAK,YAClBA,EAAK,iBACP0V,GAAsB,KAAK,OAAQ1V,EAAK,gBAAiBqV,EAAK,EAAK,EAErEA,EAAI,SAAS,QAAQ,SAASrG,EAAK,CACjC,IAAIxN,EAAOwN,EAAI,KACVhP,EAAK,eACRwB,EAAOiE,EAAM,WAAWjE,CAAI,GAE9B,KAAK,KAAOA,CAAI,EAAI,KAAK,sBAAsBwN,CAAG,CACpD,EAAG,IAAI,CACT,CACAlQ,EAAK,SAASuV,GAAQxB,EAAO,YAAY,EACzCwB,GAAO,UAAU,eAAiB,UAAW,CAC3C,OAAO5O,EAAM,aAAa,KAAK,SAAS,CAC1C,EACA4O,GAAO,UAAU,cAAgB,SAASO,EAAW5U,EAAM,CACzD,IAAI2V,EAAa3V,GAAQA,EAAK,WAC1B6U,EACJ,GAAI,OAAOD,GAAa,WAAY,CAClC,IAAI4C,EACA7B,EACF6B,EAAkB5C,EAElB4C,EAAkB,SAASla,EAAI,CAC7B,IAAI2Y,EAAW,IAAIC,EAAa,EAAE,KAAK,QAAS,SAASxO,EAAK,CAC5DmN,EAAQ,QAAQnN,CAAG,CACrB,CAAC,EACD,OAAOkN,EAAU,SAASlN,EAAKqO,EAAW,CACxC,GAAIrO,EAAK,CACPpK,EAAGoK,CAAG,EACN,MACF,CACA,IAAImO,GAAW,IAAIC,EACnBD,GAAS,KAAKE,CAAS,EACvBzY,EAAG,KAAMuY,EAAQ,CACnB,CAAC,EAAE,KAAKI,CAAQ,CAClB,EAEFpB,EAAU,IAAI4C,EAAuB,KAAMD,EAAiBxX,CAAI,CAClE,KAAO,CACL,IAAIqW,EAAUC,EAOd,GANIC,GAAS3B,CAAS,EACpByB,EAAWC,EAAW1B,GAEtByB,EAAWzB,EAAU,SACrB0B,EAAW1B,EAAU,UAEnB,CAACe,EAAY,CACf,IAAIa,EAAU,IAAIC,GAClBJ,EAAWA,EAAS,KAAKG,CAAO,EAChC,IAAIE,EAAU,IAAIC,GAClBD,EAAQ,KAAKJ,CAAQ,EACrBA,EAAWI,CACb,CACA7B,EAAU,IAAI6C,EAAsB,KAAMrB,EAAUC,EAAUtW,CAAI,EAC7D2V,IACHd,EAAQ,KAAK,MAAO,UAAW,CAC7BwB,EAAS,OAAOG,CAAO,EACvBE,EAAQ,OAAOJ,CAAQ,CACzB,CAAC,EACDE,EAAQ,KAAK,QAAS,SAAS9O,EAAK,CAClCmN,EAAQ,QAAQnN,CAAG,CACrB,CAAC,EAEL,CACK,KAAK,UAAU,OAAO,EAAE,QAC3B,KAAK,GAAG,QAAS,KAAK,QAAQ,EAEhC,IAAIiQ,EAAY,KAAK,iBACjBd,EAAW,KAAK,UACpB,OAAAA,EAASc,CAAS,EAAI9C,EAAQ,KAAK,MAAO,UAAW,CACnD,OAAOgC,EAASc,CAAS,CAC3B,CAAC,EACD,KAAK,KAAK,UAAW9C,CAAO,EACrBA,CACT,EACAR,GAAO,UAAU,UAAY,SAAS7S,EAAMwT,EAAS,CACnD,OAAA8B,EAAmB,KAAK,QAAStV,CAAI,EACrC,KAAK,UAAUA,CAAI,EAAIwT,EAChB,IACT,EACAX,GAAO,UAAU,gBAAkB,UAAW,CAC5C,OAAO4C,GAAmB,KAAK,OAAQ,EAAK,CAC9C,EACA5C,GAAO,UAAU,IAAM,UAAW,CAChC,IAAI1T,EAAGC,EAAGE,EACV,IAAKH,EAAI,EAAGC,EAAI,UAAU,OAAQD,EAAIC,EAAGD,IACvCG,EAAK,UAAUH,CAAC,EAChB,KAAK,KAAK,KAAKG,EAAG,OAAS,EAAIA,EAAG,IAAI,EAAIA,CAAE,EAE9C,OAAO,IACT,EACAuT,GAAO,UAAU,sBAAwB,SAASrF,EAAK,CACrD,IAAIxN,EAAOwN,EAAI,KACXZ,EAASY,EAAI,YAAY,OACzB4I,EAAUxJ,EAAO,OACjBT,EAAOS,EAAO,OAAS,KAAOA,EAAO,IAAI,SAASzJ,EAAI,CACxD,MAAO,OAASA,EAAG,IACrB,CAAC,EAAE,KAAK,IAAI,EAAI,GACZ4F,EAAO;AAAA,EACX,OAAAA,GAAQ,0BAA4BqN,EAAU;AAAA,EAC9CrN,GAAQ,8BAAgC/I,EAAO;AAAA,EAC/C+I,GAAQ,iCAAmCoD,EAAO;AAAA,EAClDpD,GAAQ;AAAA,EACRA,GAAQ;AAAA,EACRA,GAAQ,8BAAgC/I,EAAO;AAAA,EAC/C+I,GAAQ,iCAAmCoD,EAAO;AAAA,EAClDpD,GAAQ;AAAA,EACRA,GAAQ;AAAA,EACRA,GAAQ;AAAA,EACD,IAAI,SAASA,CAAI,EAAE,CAC5B,EACA8J,GAAO,UAAU,SAAW,SAAS3M,EAAK,CACpC,CAAC,KAAK,SAAWA,EAAI,UAAY,qBACnC,QAAQ,MAAM,EACVA,EAAI,SACN,QAAQ,MAAMA,EAAI,OAAO,EACzB,QAAQ,MAAMA,EAAI,KAAK,IAEvB,QAAQ,MAAM,uBAAuB,EACrC,QAAQ,MAAMA,CAAG,GAGvB,EACA,SAASmQ,EAAcnD,EAAQ1U,EAAM,CACnCA,EAAOA,GAAQ,CAAC,EAChB6S,EAAO,aAAa,KAAK,IAAI,EAC7B,KAAK,OAAS6B,EACd,KAAK,QAAUjP,EAAM,UAAUzF,EAAM,UAAW0U,EAAO,SAAS,EAChE,KAAK,aAAe,CAAC,CAACjP,EAAM,UAAUzF,EAAM,cAAe,EAAI,EAC/D,KAAK,QAAU8X,GAAiB9X,EAAK,KAAK,EAC1C,IAAI+X,EAAQrD,EAAO,QACfJ,EAAYI,EAAO,MACnBpU,EAAON,EAAK,WACXM,IACHA,EAAOgU,EAAU,MAEnB,IAAI0D,EAAUD,EAAMzX,CAAI,EACnB0X,IACH1X,EAAOgU,EAAU,KACjB0D,EAAUD,EAAMzX,CAAI,EAAI,IAAI2X,EAAQ3D,EAAWA,EAAWhU,CAAI,GAEhE,KAAK,SAAW0X,EAChB,KAAK,UAAY,IAAIE,EAAS,KAAM/E,EAAa,EACjD,KAAK,QAAU,EACf,KAAK,UAAY,GACjB,KAAK,SAAW,GAChB,KAAK,KAAK,OAAQ,SAASsC,EAAS/N,EAAK,CACvC/B,EAAM,oBAAoB,EAC1B,KAAK,UAAY,GACjB,KAAK,KAAK,MAAO8P,EAAS/N,CAAG,CAC/B,CAAC,CACH,CACA5I,EAAK,SAAS+Y,EAAehF,EAAO,YAAY,EAChDgF,EAAc,UAAU,QAAU,SAASM,EAAQ,CACjDxS,EAAM,2BAA2B,EAC5B,KAAK,WACR,KAAK,SAAW,GAChB,KAAK,KAAK,QAAQ,GAEpB,IAAIyB,EAAW,KAAK,UAChBqO,EAAU,KAAK,QACf0C,GACF/Q,EAAS,MAAM,EAEb+Q,GAAU,CAAC1C,EACT2C,GAAQD,CAAM,GAChBxS,EAAM,iCAAkCwS,CAAM,EAC9C,KAAK,KAAK,OAAQ1C,EAAS0C,CAAM,GAEjC,KAAK,KAAK,OAAQ1C,CAAO,EAG3B9P,EAAM,kDAAmD8P,CAAO,CAEpE,EACAoC,EAAc,UAAU,KAAO,SAASQ,EAAS/a,EAAI,CAC/C,CAACA,GAAM,OAAO+a,GAAW,aAC3B/a,EAAK+a,EACLA,EAAU,QAEZ,IAAI7K,EAAO,KACPuJ,EAAO,IAAIC,EAAe5D,CAAY,EAC1C,KAAK,MAAM2D,EAAM,CAAE,QAAAsB,CAAQ,EAAG,SAAS3Q,EAAK,CACtCpK,EACFA,EAAG,KAAKkQ,EAAM9F,CAAG,EACRA,GACT8F,EAAK,QAAQ9F,CAAG,CAEpB,CAAC,CACH,EACAmQ,EAAc,UAAU,wBAA0B,SAASG,EAASM,EAAO,CACzE,IAAIjD,EAAM,KAAK,OAAO,MACtB,MAAO,CACL,WAAYA,EAAI,KAChB,eAAgBiD,EAAQ,KAAO,KAAK,UAAUjD,EAAI,QAAQ,EAC1D,WAAY2C,EAAQ,KACtB,CACF,EACAH,EAAc,UAAU,MAAQ,SAASd,EAAM/W,EAAM1C,EAAI,CACvD,IAAI0R,EAAM+H,EAAK,KACXK,EAAOpI,EAAI,OAAS,OAAS,IAAIuJ,EAAgBvJ,EAAK,CAAC,CAAC,EACxDqI,EAAM,IAAIF,EAAYnI,EAAK,IAAI,EAC/BxB,EAAO,KACX,KAAK,UACL,QAAQ,SAAS,UAAW,CAC1B,GAAI,CAACwB,EAAI,KACPwJ,EAAazB,EAAMK,EAAMqB,CAAY,MAChC,CACLjL,EAAK,KAAK,eAAgB6J,EAAKrX,CAAI,EACnC,IAAI0Y,EAAMlL,EAAK,OAAO,MACtB7H,EAAM,mDAAoD+S,EAAI,MAAM,EACpEC,EAAgB,CACd,IAAAD,EACA,IAAArB,EACA,KAAAN,EACA,KAAAK,EACA,aAAAoB,EACA,aAAAC,EACA,QAAAG,CACF,CAAC,CACH,CACF,CAAC,EACD,SAASJ,EAAaK,EAAOC,EAAOC,EAAM,CACxC,IAAIrR,EAAKsR,EACT,GAAIxL,EAAK,UACP9F,EAAM,IAAI,MAAM,mBAAmB,MAEnC,IAAI,CACFsR,EAASH,EAAM,SAAS,CAC1B,MAAgB,CACdnR,EAAMuR,GACJ7Z,EAAG,qBAAsB4P,EAAI,IAAI,EACjC6J,EACA,CACE,CAAE,KAAM,UAAW,KAAMhI,CAAe,EACxC,CAAE,KAAM,UAAW,KAAM7B,EAAI,WAAY,CAC3C,CACF,CACF,CAEF,GAAItH,EAAK,CACPqR,EAAKrR,CAAG,EACR,MACF,CACA,IAAI2Q,GAAUrY,GAAQA,EAAK,UAAY,OAASA,EAAK,QAAUwN,EAAK,QAChE0L,GAAK1L,EAAK,UAAU,IAAI6K,GAAS,SAASlC,GAAMgD,GAAQnB,GAAS,CACnE,GAAI,CAAC7B,IAAQ,CAACnH,EAAI,OAChB,GAAI,CACFgJ,GAAQ,gBAAgBmB,GAAQL,EAAO9J,CAAG,CAC5C,OAAS8C,GAAO,CACdqE,GAAOrE,EACT,CAEFiH,EAAK5C,EAAI,CACX,CAAC,EACD+C,IAAM1L,EAAK,QACX7H,EAAM,qBAAsBuT,EAAE,EAC9B1L,EAAK,MAAM0L,GAAIF,EAAQ,CAAC,CAAChK,GAAOA,EAAI,MAAM,CAC5C,CACA,SAASyJ,EAAa/Q,EAAK,CACzB8F,EAAK,UACLlQ,EAAG,KAAK+Z,EAAK3P,EAAK0P,CAAI,EAClB5J,EAAK,UAAY,CAACA,EAAK,WAAa,CAACA,EAAK,SAC5CA,EAAK,QAAQ,CAEjB,CACA,SAASoL,EAAQlR,EAAK,CACpB8F,EAAK,OAAO,KAAK,QAAS9F,EAAK8F,CAAI,CACrC,CACF,EACAqK,EAAc,UAAU,YAAc,SAASrC,EAAM,CACnD,IAAIlV,EAAOkV,EAAK,WACZuC,EAAQ,KAAK,OAAO,QACpBC,EAAUD,EAAMzX,CAAI,EACxB,GAAI0X,EACF,OAAOA,EAET,IAAI9D,EAAO,KAAK,MAAMsB,EAAK,cAAc,EACrCjB,EAAYR,EAAQ,YAAYG,CAAI,EACxC,OAAA8D,EAAU,IAAIC,EAAQ,KAAK,OAAO,MAAO1D,EAAWjU,EAAM,EAAI,EACvDyX,EAAMzX,CAAI,EAAI0X,CACvB,EACAH,EAAc,UAAU,eAAiB,SAASqB,EAAI,CACpD,OAAOE,GAAcF,EAAI,KAAK,OAAO,CACvC,EACArB,EAAc,UAAU,MAAQpS,EAAM,iBACtCA,EAAM,qBAAqBoS,EAAe,CAAC,UAAW,SAAS,CAAC,EAChEA,EAAc,UAAU,SAAW/Y,EAAK,UACtC,UAAW,CACT,OAAO,KAAK,OAAO,OACrB,EACA,mDACF,EACA+Y,EAAc,UAAU,YAAc/Y,EAAK,UACzC,UAAW,CACT,OAAO,KAAK,OAAO,KACrB,EACA,4CACF,EACA+Y,EAAc,UAAU,YAAc/Y,EAAK,UACzC,UAAW,CACT,OAAO,KAAK,SACd,EACA,4CACF,EACA,SAASsX,EAAuB1B,EAAQkB,EAAiB5V,EAAM,CAC7D6X,EAAc,KAAK,KAAMnD,EAAQ1U,CAAI,EACrC,KAAK,iBAAmB4V,GACpB,CAAC5V,GAAQ,CAACA,EAAK,UACjB2F,EAAM,uBAAuB,EAC7B,KAAK,KAAK,EAEd,CACA7G,EAAK,SAASsX,EAAwByB,CAAa,EACnDzB,EAAuB,UAAU,MAAQ,SAAS8C,EAAIF,EAAQ,CAC5D,IAAI1b,EAAK,KAAK,UAAU,IAAI4b,CAAE,EAC1BlB,EAAU,KAAK,SACfxK,EAAO,KACX,eAAQ,SAAS6L,CAAI,EACd,GACP,SAASA,EAAKC,EAAO,CACnB,GAAI,CAAA9L,EAAK,UAGT,KAAI+H,EAAO/H,EAAK,wBAAwBwK,EAAS,CAACsB,CAAK,EACnDhD,EAAW9I,EAAK,iBAAiB,KAAKA,EAAM,SAAS9F,EAAK2O,EAAU,CACtE,GAAI3O,EAAK,CACPpK,EAAGoK,CAAG,EACN,MACF,CACA2O,EAAS,GAAG,OAAQ,SAAStV,EAAK,CAChC4E,EAAM,uBAAwB5E,EAAI,EAAE,EACpC,IAAIuD,EAAMtF,EAAQ,OAAO+B,EAAI,OAAO,EACpC,GAAI,CACF,IAAIgB,EAAQwX,GAASrG,EAAyB5O,CAAG,EAC7CkR,EAAOzT,EAAM,KACbyT,EAAK,aACPwC,EAAUxK,EAAK,YAAYgI,CAAI,EAEnC,OAAS1D,GAAO,CACdxU,EAAGwU,EAAK,EACR,MACF,CACA,IAAI7P,GAAQuT,EAAK,MACjB7P,EAAM,sBAAuB1D,EAAK,EAClCuL,EAAK,KAAK,YAAa+H,EAAMC,CAAI,EAC7BvT,KAAU,OACZ,QAAQ,SAAS,UAAW,CAC1BoX,EAAK,EAAI,CACX,CAAC,GAED7L,EAAK,SAAWwK,EAChB1a,EAAG,KAAMyE,EAAM,KAAMiW,CAAO,EAEhC,CAAC,CACH,CAAC,EACD,GAAI,CAAC1B,EAAU,CACbhZ,EAAG,IAAI,MAAM,yBAAyB,CAAC,EACvC,MACF,CACAgZ,EAAS,MAAM,CACb,GAAA4C,EACA,QAAS,CAACjG,EAAuB,SAASsC,CAAI,EAAGyD,CAAM,CACzD,CAAC,EACGxL,EAAK,cACP8I,EAAS,IAAI,EAEjB,CACF,EACA,SAASM,EAAsBlC,EAAQ2B,EAAUC,EAAUtW,EAAM,CAC/D6X,EAAc,KAAK,KAAMnD,EAAQ1U,CAAI,EACrC,KAAK,UAAYqW,EACjB,KAAK,UAAYC,EACjB,KAAK,WAAa,CAAC,EAAEtW,GAAQA,EAAK,QAClC,KAAK,UAAU,GAAG,MAAOwZ,CAAK,EAC9B,KAAK,UAAU,GAAG,SAAUC,CAAQ,EACpC,IAAIjM,EAAO,KACPkM,EAAQ,KACZ,KAAK,KAAK,MAAO,UAAW,CACtBA,IACF,aAAaA,CAAK,EAClBA,EAAQ,MAELlM,EAAK,YACRA,EAAK,KAAK,QAAQ,EAEpB,KAAK,UAAU,eAAe,SAAUiM,CAAQ,EAC5C,KAAK,eACP9T,EAAM,kBAAkB,EACxB,KAAK,UAAU,IAAI,GAErB,KAAK,UAAU,eAAe,OAAQgU,CAAM,EAAE,eAAe,OAAQC,CAAS,EAAE,eAAe,MAAOJ,CAAK,CAC7G,CAAC,EACD,IAAIjE,EACA,KAAK,WACP,KAAK,UAAU,GAAG,OAAQqE,CAAS,GAEnC,KAAK,UAAU,GAAG,OAAQD,CAAM,EAChC,QAAQ,SAASE,CAAI,EACjBrM,EAAK,UACPkM,EAAQ,WAAW,UAAW,CAC5BlM,EAAK,QAAQ,IAAI,MAAM,SAAS,CAAC,CACnC,EAAGA,EAAK,OAAO,IAGnB,SAASqM,EAAKP,EAAO,CACnB,GAAI,CAAA9L,EAAK,UAGT,CAAA+H,EAAO/H,EAAK,wBAAwBA,EAAK,SAAU,CAAC8L,CAAK,EACzD,IAAIQ,EAAU,CACZ7G,EAAuB,SAASsC,CAAI,EACpC9P,EAAM,WAAW,CAAC,EAAG,CAAC,CAAC,CAEzB,EACA+H,EAAK,UAAU,MAAM,CAAE,GAAIA,EAAK,QAAS,QAAAsM,CAAQ,CAAC,EACpD,CACA,SAASH,EAAO5Y,EAAK,CACnB,GAAI,CAACyM,EAAK,eAAezM,EAAI,EAAE,EAAG,CAChC4E,EAAM,qDAAsD5E,EAAI,EAAE,EAClE,MACF,CACA,IAAIuD,EAAMtF,EAAQ,OAAO+B,EAAI,OAAO,EACpC,GAAI,CACF,IAAIyU,EAAO+D,GAASrG,EAAyB5O,CAAG,EAAE,KAC9CkR,EAAK,aACPhI,EAAK,SAAWA,EAAK,YAAYgI,CAAI,EAEzC,OAAS1D,GAAO,CACdtE,EAAK,QAAQsE,EAAK,EAClB,MACF,CACA,IAAI7P,GAAQuT,EAAK,MACjB7P,EAAM,sBAAuB1D,EAAK,EAClCuL,EAAK,KAAK,YAAa+H,EAAMC,CAAI,EAC7BvT,KAAU,OACZ,QAAQ,SAAS,UAAW,CAC1B4X,EAAK,EAAI,CACX,CAAC,GAEDlU,EAAM,wBAAwB,EAC1B+T,IACF,aAAaA,CAAK,EAClBA,EAAQ,MAEVlM,EAAK,UAAU,eAAe,OAAQmM,CAAM,EAAE,GAAG,OAAQC,CAAS,EAClEpM,EAAK,WAAa,GAClBA,EAAK,KAAK,QAAQ,EAClB+H,EAAO,KAEX,CACA,SAASqE,EAAU7Y,EAAK,CACtB,IAAImY,EAAKnY,EAAI,GACb,GAAI,CAACyM,EAAK,eAAe0L,CAAE,EAAG,CAC5BvT,EAAM,iCAAkCuT,CAAE,EAC1C,MACF,CACA,IAAI5b,EAAKkQ,EAAK,UAAU,IAAI0L,CAAE,EAC1B5b,GACF,QAAQ,SAAS,UAAW,CAC1BqI,EAAM,sBAAuBuT,CAAE,EAC/B5b,EAAG,KAAM0B,EAAQ,OAAO+B,EAAI,OAAO,EAAGyM,EAAK,QAAQ,CACrD,CAAC,CAEL,CACA,SAASgM,GAAQ,CACfhM,EAAK,QAAQ,EAAI,CACnB,CACA,SAASiM,GAAW,CAClBjM,EAAK,QAAQ,CACf,CACF,CACA1O,EAAK,SAAS8X,EAAuBiB,CAAa,EAClDjB,EAAsB,UAAU,MAAQ,UAAW,CACjD,GAAI,KAAK,YAAc,KAAK,SAC1BiB,EAAc,UAAU,MAAM,MAAM,KAAM,SAAS,MAC9C,CACLlS,EAAM,iBAAiB,EACvB,IAAIgI,EAAO,CAAC,EACRhN,EAAGC,EACP,IAAKD,EAAI,EAAGC,EAAI,UAAU,OAAQD,EAAIC,EAAGD,IACvCgN,EAAK,KAAK,UAAUhN,CAAC,CAAC,EAExB,KAAK,KAAK,SAAU,UAAW,CAC7B,KAAK,MAAM,MAAM,KAAMgN,CAAI,CAC7B,CAAC,CACH,CACF,EACAiJ,EAAsB,UAAU,MAAQ,SAASsC,EAAIF,EAAQvF,EAAQ,CACnE,GAAIA,EAAQ,CACV,IAAIjG,EAAO,KACX,QAAQ,SAAS,UAAW,CAC1BA,EAAK,UAAU,IAAI0L,CAAE,EAAE,KAAMzT,EAAM,WAAW,CAAC,EAAG,EAAG,CAAC,CAAC,EAAG+H,EAAK,QAAQ,CACzE,CAAC,CACH,CACA,OAAO,KAAK,UAAU,MAAM,CAAE,GAAA0L,EAAI,QAAS,CAACF,CAAM,CAAE,CAAC,CACvD,EACA,SAASe,EAAc5F,EAAQnU,EAAM,CACnCA,EAAOA,GAAQ,CAAC,EAChB6S,EAAO,aAAa,KAAK,IAAI,EAC7B,KAAK,OAASsB,EACd,KAAK,aAAe,CAAC,CAAC1O,EAAM,UAAUzF,EAAM,cAAe,EAAI,EAC/D,KAAK,QAAU8X,GAAiB9X,EAAK,KAAK,EAC1C,IAAI+X,EAAQ5D,EAAO,OACfkB,EAAMlB,EAAO,QACb7T,EAAO+U,EAAI,KACV0C,EAAMzX,CAAI,IACbyX,EAAMzX,CAAI,EAAI,IAAI2X,EAAQ5C,EAAKA,EAAK/U,CAAI,GAE1C,KAAK,SAAW,KAChB,KAAK,UAAY,GACjB,KAAK,SAAW,GAChB,KAAK,QAAU,EACf,KAAK,KAAK,OAAQ,SAASmV,EAAS/N,EAAK,CACvC/B,EAAM,oBAAoB,EAC1B,KAAK,KAAK,MAAO8P,EAAS/N,CAAG,CAC/B,CAAC,CACH,CACA5I,EAAK,SAASib,EAAelH,EAAO,YAAY,EAChDkH,EAAc,UAAU,QAAU,SAAS5B,EAAQ,CAC5C,KAAK,WACR,KAAK,SAAW,GAChB,KAAK,KAAK,QAAQ,IAEhBA,GAAU,CAAC,KAAK,WAClB,KAAK,UAAY,GACbC,GAAQD,CAAM,GAChBxS,EAAM,iCAAkCwS,CAAM,EAC9C,KAAK,KAAK,OAAQ,KAAK,QAASA,CAAM,GAEtC,KAAK,KAAK,OAAQ,KAAK,OAAO,EAGpC,EACA4B,EAAc,UAAU,yBAA2B,SAASrS,EAAK6N,EAAM,CACrE,IAAIF,EAAM,KAAK,OAAO,QAClB/Q,EAAM+Q,EAAI,KACV2E,EAAczE,GAAQA,EAAK,WAAW,OAAOjR,CAAG,EACpD,MAAO,CACL,MAAOoD,EAAM,OAASsS,EAAc,OAAS,SAC7C,eAAgBA,EAAc,KAAO,KAAK,UAAU3E,EAAI,QAAQ,EAChE,WAAY2E,EAAc,KAAO1V,CACnC,CACF,EACAyV,EAAc,UAAU,YAAc,SAASxE,EAAM,CACnD,IAAIjV,EAAOiV,EAAK,WACZyC,EAAU,KAAK,OAAO,OAAO1X,CAAI,EACrC,GAAI0X,EACF,OAAOA,EAET,GAAI,CAACzC,EAAK,eACR,MAAM0E,GAAW,kBAAkB,EAErC,IAAI/F,EAAO,KAAK,MAAMqB,EAAK,cAAc,EACrCjB,EAAYP,EAAQ,YAAYG,CAAI,EACxC,OAAA8D,EAAU,IAAIC,EAAQ3D,EAAW,KAAK,OAAO,QAAShU,EAAM,EAAI,EACzD,KAAK,OAAO,OAAOA,CAAI,EAAI0X,CACpC,EACA+B,EAAc,UAAU,eAAiB,SAASb,EAAI,CACpD,OAAOE,GAAcF,EAAI,KAAK,OAAO,CACvC,EACAa,EAAc,UAAU,SAAW,SAASf,EAAQhB,EAAS1a,EAAI,CAC/D,IAAIkQ,EAAO,KACPuJ,EACJ,GAAI,CACFA,EAAOiB,EAAQ,eAAegB,CAAM,CACtC,OAASlH,EAAO,CACdxU,EAAGkQ,EAAK,mBAAmByM,GAAW,kBAAmBnI,CAAK,CAAC,CAAC,EAChE,MACF,CACA,IAAI9C,EAAM+H,EAAK,KACXK,EAAO,IAAImB,EAAgBvJ,EAAK,CAAC,CAAC,EACtC,GAAI,CAACA,EAAI,KAAM,CACboI,EAAK,SAAW,KAChB9Z,EAAG8Z,EAAK,SAAS,EAAG,EAAK,EACzB,MACF,CACA,IAAIC,EAAM,IAAIF,EAAYnI,EAAK,IAAI,EACnCxB,EAAK,KAAK,eAAgB6J,CAAG,EAC7B,IAAIqB,EAAM,KAAK,OAAO,KACtB/S,EAAM,mDAAoD+S,EAAI,MAAM,EACpElL,EAAK,UACLmL,EAAgB,CACd,IAAAD,EACA,IAAArB,EACA,KAAAN,EACA,KAAAK,EACA,aAAAoB,EACA,aAAAC,EACA,QAAAG,CACF,CAAC,EACD,SAASJ,EAAaK,EAAOC,EAAOC,EAAM,CACxC,IAAI/D,GAAUxH,EAAK,OAAO,UAAUwB,EAAI,IAAI,EAC5C,GAAKgG,GAQE,CACL,IAAIS,GAAU,CAACzG,EAAI,OACnB,GAAI,CACEyG,GACFT,GAAQ,KAAKqC,EAAKwB,EAAM,QAAS,SAASnR,GAAKrC,GAAK,CAClDoQ,GAAU,GACVqD,EAAM,MAAQpR,GACdoR,EAAM,SAAWzT,GACjB0T,EAAK,CACP,CAAC,GAED/D,GAAQ,KAAKqC,EAAKwB,EAAM,OAAO,EAC/BE,EAAK,EAET,OAASrR,GAAK,CACR+N,IACFA,GAAU,GACVsD,EAAKrR,EAAG,GAERkR,EAAQlR,EAAG,CAEf,CACF,KA9Bc,CACZ,IAAIwS,GAAiB1M,EAAK,OAAO,gBACjC,GAAI0M,GACFA,GAAe,KAAK7C,EAAKwB,EAAOC,EAAOC,CAAI,MACtC,CACL,IAAIjH,GAAQ,IAAI,MAAM1S,EAAG,oBAAqB4P,EAAI,IAAI,CAAC,EACvD+J,EAAKkB,GAAW,kBAAmBnI,EAAK,CAAC,CAC3C,CACF,CAuBF,CACA,SAAS2G,EAAa/Q,EAAK,CACzB8F,EAAK,UACL,IAAI2G,EAAS3G,EAAK,OACd2L,EACJ,GAAI,CAACzR,EAAK,CACR,IAAIyS,GAAS/C,EAAK,MACdgD,GAAWjG,EAAO,QACjBiG,KACChC,GAAQ+B,EAAM,EAChB/C,EAAK,MAAQpI,EAAI,UAAU,MAAMmL,GAAO,QAAS,CAAE,WAAY,EAAK,CAAC,EAC5DA,KAAW,OACpBA,GAAS/C,EAAK,MAAQ,QAEpB+C,KAAW,QAAU/C,EAAK,WAAa,QAAUpI,EAAI,aAAa,QAAQ,IAAI,IAChFoI,EAAK,SAAW,OAGpB,GAAI,CACF+B,EAAS/B,EAAK,SAAS,CACzB,MAAgB,CACVA,EAAK,QAAU,OACjB1P,EAAMuR,GACJ7Z,EAAG,mBAAoB4P,EAAI,IAAI,EAE/BoI,EACA,CACE,CAAE,KAAM,UAAW,KAAMvG,CAAe,EACxC,CAAE,KAAM,QAAS,KAAM7B,EAAI,SAAU,CACvC,CACF,EAEAtH,EAAMuR,GACJ7Z,EAAG,sBAAuB4P,EAAI,IAAI,EAClCoI,EACA,CACE,CAAE,KAAM,UAAW,KAAMvG,CAAe,EACxC,CAAE,KAAM,WAAY,KAAM7B,EAAI,YAAa,CAC7C,CACF,CAEJ,CACF,CACKmK,EAEMgB,KAAW,QACpBhG,EAAO,KAAK,QAAS8F,GAAW,oBAAqBE,EAAM,CAAC,EAF5DhB,EAAS3L,EAAK,mBAAmB9F,EAAK0P,EAAK,OAAO,EAIpD9Z,EAAG6b,EAAQnK,EAAI,MAAM,EACjBxB,EAAK,UAAY,CAACA,EAAK,SACzBA,EAAK,QAAQ,CAEjB,CACA,SAASoL,EAAQlR,EAAK,CACpB8F,EAAK,OAAO,KAAK,QAAS9F,EAAK8F,CAAI,CACrC,CACF,EACA/H,EAAM,qBAAqBsU,EAAe,CAAC,SAAS,CAAC,EACrDA,EAAc,UAAU,SAAWjb,EAAK,UACtC,UAAW,CACT,OAAO,KAAK,OAAO,MACrB,EACA,mDACF,EACAib,EAAc,UAAU,YAAcjb,EAAK,UACzC,UAAW,CACT,OAAO,KAAK,OAAO,OACrB,EACA,4CACF,EACAib,EAAc,UAAU,YAAcjb,EAAK,UACzC,UAAW,CACT,OAAO,KAAK,SACd,EACA,4CACF,EACAib,EAAc,UAAU,mBAAqB,SAASrS,EAAK6J,EAAQ,CACjE,IAAI4C,EAAS,KAAK,OAClBA,EAAO,KAAK,QAASzM,EAAK,IAAI,EAC9B,IAAI2S,EACAlG,EAAO,iBACTkG,EAASlG,EAAO,iBAAiB,KAAK,KAAMzM,CAAG,EACtCA,EAAI,UACb2S,EAAS3S,EAAI,SAEf,IAAI4S,EACJ,GAAI/I,EACF,GAAI,CACF+I,EAASzJ,EAAe,SAASU,CAAM,CACzC,OAASO,EAAO,CACdqC,EAAO,KAAK,QAASrC,EAAO,IAAI,CAClC,CAEF,OAAO9S,EAAQ,OAAO,CACpBsb,GAAU7U,EAAM,WAAW,CAAC,CAAC,CAAC,EAC9BA,EAAM,WAAW,CAAC,EAAG,CAAC,CAAC,EAEvBuN,EAAY,SAASqH,GAAU,uBAAuB,CACxD,CAAC,CACH,EACA,SAAS5C,EAAuBtD,EAAQqD,EAAiBxX,EAAM,CAC7D+Z,EAAc,KAAK,KAAM5F,EAAQnU,CAAI,EACrC,KAAK,UAAY,OACjB,IAAIwN,EAAO,KACP6I,EACJ,QAAQ,SAAS,UAAW,CAC1BA,EAAWmB,EAAgB,KAAKhK,EAAM,SAAS9F,EAAK4O,EAAU,CAC5D,QAAQ,SAAS,UAAW,CAC1B,GAAI5O,EAAK,CACP+R,EAAS/R,CAAG,EACZ,MACF,CACA8F,EAAK,UAAY8I,EAAS,GAAG,SAAUmD,CAAQ,EAC/CjM,EAAK,KAAK,WAAW,CACvB,CAAC,CACH,CAAC,EAAE,GAAG,OAAQ+M,CAAS,EAAE,GAAG,MAAOf,CAAK,CAC1C,CAAC,EACD,SAASe,EAAUxZ,EAAK,CACtB,IAAImY,EAAKnY,EAAI,GACTuD,EAAMtF,EAAQ,OAAO+B,EAAI,OAAO,EAChC2G,EACJ,GAAI,CACF,IAAI3F,EAAQwX,GAAStG,EAAwB3O,CAAG,EAC5CiR,EAAOxT,EAAM,KACbiW,EAAUxK,EAAK,YAAY+H,CAAI,CACrC,OAASzD,GAAO,CACdpK,EAAMuS,GAAW,4BAA6BnI,EAAK,CACrD,CACA,IAAI0D,GAAOhI,EAAK,yBAAyB9F,EAAK6N,CAAI,EAClD/H,EAAK,KAAK,YAAa+H,EAAMC,EAAI,EAC7B9N,EACF4P,GAAK9J,EAAK,mBAAmB9F,CAAG,CAAC,EAEjC8F,EAAK,SAASzL,EAAM,KAAMiW,EAASV,EAAI,EAEzC,SAASA,GAAK6B,GAAQ,CACpB,GAAI,CAAC3L,EAAK,UAAW,CACnB,GAAI,CAACA,EAAK,UAAW,CACnBA,EAAK,KAAK,YAAa,UAAW,CAChC8J,GAAK6B,EAAM,CACb,CAAC,EACD,MACF,CACA3L,EAAK,UAAU,MAAM,CACnB,GAAA0L,EACA,QAAS,CAAChG,EAAwB,SAASsC,EAAI,EAAG2D,EAAM,CAC1D,CAAC,CACH,CACI3L,EAAK,WAAaA,EAAK,cACzBA,EAAK,UAAU,IAAI,CAEvB,CACF,CACA,SAASgM,GAAQ,CACfhM,EAAK,QAAQ,CACf,CACA,SAASiM,EAAS/R,EAAK,CACrB2O,EAAS,eAAe,OAAQkE,CAAS,EAAE,eAAe,MAAOf,CAAK,EACtEhM,EAAK,QAAQ9F,GAAO,EAAI,CAC1B,CACF,CACA5I,EAAK,SAAS2Y,EAAwBsC,CAAa,EACnD,SAASrC,EAAsBvD,EAAQkC,EAAUC,EAAUtW,EAAM,CAC/D+Z,EAAc,KAAK,KAAM5F,EAAQnU,CAAI,EACrC,KAAK,SAAW,OAChB,KAAK,UAAYsW,EAAS,GAAG,SAAUmD,CAAQ,EAC/C,KAAK,UAAYpD,EAAS,GAAG,OAAQmE,CAAW,EAAE,GAAG,MAAOhB,CAAK,EACjE,KAAK,KAAK,SAAU,UAAW,CAC7B,KAAK,UAAU,eAAe,OAAQgB,CAAW,EAAE,eAAe,OAAQD,CAAS,EAAE,eAAe,MAAOf,CAAK,CAClH,CAAC,EAAE,KAAK,MAAO,UAAW,CACxB,KAAK,UAAU,eAAe,SAAUC,CAAQ,EAC5C,KAAK,cACP,KAAK,UAAU,IAAI,CAEvB,CAAC,EACD,IAAIjM,EAAO,KACX,SAASgN,EAAYzZ,EAAK,CACxB,IAAImY,EAAKnY,EAAI,GACb,GAAI,CAACyM,EAAK,eAAe0L,CAAE,EACzB,OAEF,IAAI5U,EAAMtF,EAAQ,OAAO+B,EAAI,OAAO,EAChC2G,EACJ,GAAI,CACF,IAAI3F,EAAQwX,GAAStG,EAAwB3O,CAAG,EAC5CiR,EAAOxT,EAAM,KACjByL,EAAK,SAAWA,EAAK,YAAY+H,CAAI,CACvC,OAASzD,GAAO,CACdpK,EAAMuS,GAAW,4BAA6BnI,EAAK,CACrD,CACA,IAAI0D,GAAOhI,EAAK,yBAAyB9F,EAAK6N,CAAI,EAClD/H,EAAK,KAAK,YAAa+H,EAAMC,EAAI,EAC7B9N,EACF4P,GAAK9J,EAAK,mBAAmB9F,CAAG,CAAC,GAEjC8F,EAAK,UAAU,eAAe,OAAQgN,CAAW,EAAE,GAAG,OAAQD,CAAS,EACvE/M,EAAK,SAASzL,EAAM,KAAMyL,EAAK,SAAU8J,EAAI,GAE/C,SAASA,GAAK6B,GAAQ,CAChB3L,EAAK,WAGTA,EAAK,UAAU,MAAM,CACnB,GAAA0L,EACA,QAAS,CAAChG,EAAwB,SAASsC,EAAI,EAAG2D,EAAM,CAC1D,CAAC,CACH,CACF,CACA,SAASoB,EAAUxZ,EAAK,CACtB,IAAImY,EAAKnY,EAAI,GACb,GAAKyM,EAAK,eAAe0L,CAAE,EAG3B,KAAIF,EAASha,EAAQ,OAAO+B,EAAI,OAAO,EACvCyM,EAAK,SAASwL,EAAQxL,EAAK,SAAU,SAAS2L,EAAQ1F,EAAQ,CACxDjG,EAAK,WAAaiG,GAGtBjG,EAAK,UAAU,MAAM,CAAE,GAAA0L,EAAI,QAAS,CAACC,CAAM,CAAE,CAAC,CAChD,CAAC,EACH,CACA,SAASK,GAAQ,CACfhM,EAAK,QAAQ,CACf,CACA,SAASiM,GAAW,CAClBjM,EAAK,QAAQ,EAAI,CACnB,CACF,CACA1O,EAAK,SAAS4Y,EAAuBqC,CAAa,EAClD,SAAS/C,EAAehI,EAAKyL,EAAM1F,EAAK,CACtC,KAAK,KAAO/F,EACZ,KAAK,QAAUyL,GAAQ,CAAC,EACxB,KAAK,QAAU1F,GAAO,CAAC,CACzB,CACAiC,EAAe,UAAU,SAAW,UAAW,CAC7C,IAAIhI,EAAM,KAAK,KACf,OAAOhQ,EAAQ,OAAO,CACpB6R,EAAe,SAAS,KAAK,OAAO,EACpCmC,EAAY,SAAShE,EAAI,IAAI,EAC7BA,EAAI,YAAY,SAAS,KAAK,OAAO,CACvC,CAAC,CACH,EACA,SAASuJ,EAAgBvJ,EAAK0L,EAAKhT,EAAKrC,EAAK,CAC3C,KAAK,KAAO2J,EACZ,KAAK,QAAU0L,EACf,KAAK,MAAQhT,EACb,KAAK,SAAWrC,CAClB,CACAkT,EAAgB,UAAU,SAAW,UAAW,CAC9C,IAAImC,EAAM7J,EAAe,SAAS,KAAK,OAAO,EAC1C8J,EAAW,KAAK,QAAU,OAC9B,OAAO3b,EAAQ,OAAO,CACpB0b,EACA3H,EAAa,SAAS4H,CAAQ,EAC9BA,EAAW,KAAK,KAAK,UAAU,SAAS,KAAK,KAAK,EAAI,KAAK,KAAK,aAAa,SAAS,KAAK,QAAQ,CACrG,CAAC,CACH,EACA,SAASxD,EAAYnI,EAAK6F,EAAS,CACjC,KAAK,QAAUA,EACf,KAAK,OAAS,CAAC,EACf,KAAK,QAAU7F,EACf,OAAO,OAAO,IAAI,CACpB,CACA,SAASkJ,EAASb,EAAKuD,EAAc,CACnC,KAAK,KAAOvD,EACZ,KAAK,MAAQ,MAAQuD,EAAe,GACpC,KAAK,IAAM,EACX,KAAK,GAAK,EACV,KAAK,KAAO,CAAC,CACf,CACA1C,EAAS,UAAU,IAAM,SAASgB,EAAI,CACpC,OAAO,KAAK,KAAKA,EAAK,KAAK,KAAK,CAClC,EACAhB,EAAS,UAAU,IAAM,SAASG,EAASvX,EAAI,CAC7C,KAAK,IAAM,KAAK,IAAM,EAAI,KAAK,MAC/B,IAAI0M,EAAO,KACP0L,EAAK,KAAK,IACVQ,EACJ,OAAIrB,EAAU,IACZqB,EAAQ,WAAW,UAAW,CAC5Bpc,EAAG,IAAI,MAAM,SAAS,CAAC,CACzB,EAAG+a,CAAO,GAEZ,KAAK,KAAKa,CAAE,EAAI5b,EAChB,KAAK,KACE4b,EACP,SAAS5b,GAAK,CACPkQ,EAAK,KAAK0L,CAAE,IAGjB,OAAO1L,EAAK,KAAK0L,CAAE,EACnB1L,EAAK,KACDkM,GACF,aAAaA,CAAK,EAEpB5Y,EAAG,MAAM0M,EAAK,KAAM,SAAS,EAC/B,CACF,EACA0K,EAAS,UAAU,MAAQ,UAAW,CACpC,OAAO,KAAK,KAAK,IAAI,EAAE,QAAQ,SAASgB,EAAI,CAC1C,KAAK,KAAKA,CAAE,EAAE,IAAI,MAAM,aAAa,CAAC,CACxC,EAAG,IAAI,CACT,EACA,SAASjB,EAAQ3D,EAAWC,EAAWjU,EAAMua,EAAU,CACrD,KAAK,WAAavG,EAClB,KAAK,WAAaC,EAClB,KAAK,MAAQjU,EACb,KAAK,UAAY,CAAC,CAACua,EACnB,KAAK,SAAWrG,GAAcF,EAAWC,CAAS,CACpD,CACA0D,EAAQ,UAAU,eAAiB,SAAS3T,EAAK,CAC/C,IAAIS,EAAM,IAAIV,EAAIC,CAAG,EACjBoW,EAAM7J,EAAe,MAAM9L,CAAG,EAC9BvD,EAAOwR,EAAY,MAAMjO,CAAG,EAC5BiK,EAAK+F,EAOT,GANIvT,GACFwN,EAAM,KAAK,WAAW,QAAQxN,CAAI,EAClCuT,EAAM,KAAK,SAASvT,EAAO,GAAG,EAAE,MAAMuD,CAAG,GAEzCiK,EAAMoE,EAEJ,CAACrO,EAAI,QAAQ,EACf,MAAM,IAAI,MAAM3F,EAAG,uBAAwBoC,GAAQ,OAAO,CAAC,EAE7D,OAAO,IAAIwV,EAAehI,EAAK0L,EAAK3F,CAAG,CACzC,EACAkD,EAAQ,UAAU,gBAAkB,SAAS3T,EAAK8S,EAAMpI,EAAK,CAC3D,IAAIjK,EAAM,IAAIV,EAAIC,CAAG,EACrBmB,EAAM,kBAAkBoL,EAAe,MAAM9L,CAAG,EAAGqS,EAAK,QAAS,EAAI,EACrE,IAAI0D,EAAW/H,EAAa,MAAMhO,CAAG,EACjCvD,EAAOwN,EAAI,KACf,GAAIxN,EAAM,CACR,IAAI4N,EAAS,KAAK,SAAS5N,GAAQsZ,EAAW,IAAM,IAAI,EAOxD,GANA9L,EAAM,KAAK,WAAW,QAAQxN,CAAI,EAC9BsZ,EACF1D,EAAK,MAAQhI,EAAO,MAAMrK,CAAG,EAE7BqS,EAAK,SAAWhI,EAAO,MAAMrK,CAAG,EAE9B,CAACA,EAAI,QAAQ,EACf,MAAM,IAAI,MAAM3F,EAAG,wBAAyBoC,CAAI,CAAC,CAErD,MACEwN,EAAMoE,CAEV,EACA,SAAS8C,GAAe,CACtB3F,EAAO,UAAU,KAAK,KAAM,CAAE,mBAAoB,EAAK,CAAC,EACxD,KAAK,IAAM,OACX,KAAK,KAAO9K,EAAM,UAAU,CAAC,EAC7B,KAAK,MAAQ,CAAC,EACd,KAAK,GAAG,SAAU,UAAW,CAC3B,KAAK,KAAK,IAAI,CAChB,CAAC,CACH,CACA3G,EAAK,SAASoX,EAAc3F,EAAO,SAAS,EAC5C2F,EAAa,UAAU,WAAa,SAAS5R,EAAK+M,EAAU/T,EAAI,CAC9DgH,EAAMtF,EAAQ,OAAO,CAAC,KAAK,KAAMsF,CAAG,CAAC,EAErC,QADIyW,EACGzW,EAAI,QAAU,GAAKA,EAAI,SAAWyW,EAAczW,EAAI,YAAY,CAAC,GAAK,GAAG,CAC9E,GAAIyW,EACF,KAAK,MAAM,KAAKzW,EAAI,MAAM,EAAGyW,EAAc,CAAC,CAAC,MACxC,CACL,IAAIC,EAAO,KAAK,MAChB,KAAK,MAAQ,CAAC,EACd,KAAK,KAAK,CAAE,GAAI,KAAM,QAASA,CAAK,CAAC,CACvC,CACA1W,EAAMA,EAAI,MAAMyW,EAAc,CAAC,CACjC,CACA,KAAK,KAAOzW,EACZhH,EAAG,CACL,EACA4Y,EAAa,UAAU,OAAS,SAAS5Y,EAAI,CAC3C,GAAI,KAAK,KAAK,QAAU,KAAK,MAAM,OAAQ,CACzC,IAAI0d,EAAO,KAAK,MAAM,MAAM,EAC5BA,EAAK,QAAQ,KAAK,IAAI,EACtB,IAAItT,EAAMuS,GAAW,eAAe,EACpCvS,EAAI,aAAe1I,EAAQ,OAAOgc,CAAI,EAAE,SAAS,EACjD,KAAK,KAAK,QAAStT,CAAG,CACxB,CACApK,EAAG,CACL,EACA,SAASwY,GAAe,CACtBvF,EAAO,UAAU,KAAK,KAAM,CAAE,mBAAoB,EAAK,CAAC,EACxD,KAAK,GAAG,SAAU,UAAW,CAC3B,KAAK,KAAK,IAAI,CAChB,CAAC,CACH,CACAzR,EAAK,SAASgX,EAAcvF,EAAO,SAAS,EAC5CuF,EAAa,UAAU,WAAa,SAAS/U,EAAKsQ,EAAU/T,EAAI,CAC9D,IAAI0d,EAAOja,EAAI,QACXJ,EAAGC,EAAG0D,EACV,IAAK3D,EAAI,EAAGC,EAAIoa,EAAK,OAAQra,EAAIC,EAAGD,IAClC2D,EAAM0W,EAAKra,CAAC,EACZ,KAAK,KAAKsa,GAAU3W,EAAI,MAAM,CAAC,EAC/B,KAAK,KAAKA,CAAG,EAEf,KAAK,KAAK2W,GAAU,CAAC,CAAC,EACtB3d,EAAG,CACL,EACA,SAASmZ,IAAe,CACtBlG,EAAO,UAAU,KAAK,KAAM,CAAE,mBAAoB,EAAK,CAAC,EACxD,KAAK,IAAM,OACX,KAAK,YAAc,EACnB,KAAK,KAAO9K,EAAM,UAAU,CAAC,EAC7B,KAAK,MAAQ,CAAC,EACd,KAAK,GAAG,SAAU,UAAW,CAC3B,KAAK,KAAK,IAAI,CAChB,CAAC,CACH,CACA3G,EAAK,SAAS2X,GAAclG,EAAO,SAAS,EAC5CkG,GAAa,UAAU,WAAa,SAASnS,EAAK+M,EAAU/T,EAAI,CAE9D,IADAgH,EAAMtF,EAAQ,OAAO,CAAC,KAAK,KAAMsF,CAAG,CAAC,IACxB,CACX,GAAI,KAAK,MAAQ,OAAQ,CACvB,GAAIA,EAAI,OAAS,EAAG,CAClB,KAAK,KAAOA,EACZhH,EAAG,EACH,MACF,CACA,KAAK,IAAMgH,EAAI,YAAY,CAAC,EAC5B,KAAK,YAAcA,EAAI,YAAY,CAAC,EACpCA,EAAMA,EAAI,MAAM,CAAC,CACnB,CAEA,QADIyW,EACG,KAAK,aAAezW,EAAI,QAAU,GAAKA,EAAI,SAAWyW,EAAczW,EAAI,YAAY,CAAC,GAAK,GAC/F,KAAK,cACL,KAAK,MAAM,KAAKA,EAAI,MAAM,EAAGyW,EAAc,CAAC,CAAC,EAC7CzW,EAAMA,EAAI,MAAMyW,EAAc,CAAC,EAEjC,GAAI,KAAK,YAAa,CACpB,KAAK,KAAOzW,EACZhH,EAAG,EACH,MACF,KAAO,CACL,IAAIyD,EAAM,CAAE,GAAI,KAAK,IAAK,QAAS,KAAK,KAAM,EAC9C,KAAK,MAAQ,CAAC,EACd,KAAK,IAAM,OACX,KAAK,KAAKA,CAAG,CACf,CACF,CACF,EACA0V,GAAa,UAAU,OAASP,EAAa,UAAU,OACvD,SAASS,IAAe,CACtBpG,EAAO,UAAU,KAAK,KAAM,CAAE,mBAAoB,EAAK,CAAC,EACxD,KAAK,GAAG,SAAU,UAAW,CAC3B,KAAK,KAAK,IAAI,CAChB,CAAC,CACH,CACAzR,EAAK,SAAS6X,GAAcpG,EAAO,SAAS,EAC5CoG,GAAa,UAAU,WAAa,SAAS5V,EAAKsQ,EAAU/T,EAAI,CAC9D,IAAI0d,EAAOja,EAAI,QACXH,EAAIoa,EAAK,OACT1W,EACJA,EAAMmB,EAAM,UAAU,CAAC,EACvBnB,EAAI,aAAavD,EAAI,GAAI,CAAC,EAC1BuD,EAAI,aAAa1D,EAAG,CAAC,EACrB,KAAK,KAAK0D,CAAG,EACb,IAAI3D,EACJ,IAAKA,EAAI,EAAGA,EAAIC,EAAGD,IACjB2D,EAAM0W,EAAKra,CAAC,EACZ,KAAK,KAAKsa,GAAU3W,EAAI,MAAM,CAAC,EAC/B,KAAK,KAAKA,CAAG,EAEfhH,EAAG,CACL,EACA,SAAS2d,GAAUzW,EAAG,CACpB,IAAIF,EAAMmB,EAAM,UAAU,CAAC,EAC3B,OAAAnB,EAAI,aAAaE,CAAC,EACXF,CACT,CACA,SAASiV,GAASvS,EAAM1C,EAAK,CAC3B,IAAIS,EAAM,IAAIV,EAAIC,CAAG,EACjB4W,EAAOlU,EAAK,MAAMjC,CAAG,EACzB,GAAI,CAACA,EAAI,QAAQ,EACf,MAAM,IAAI,MAAM3F,EAAG,eAAgB4H,EAAK,OAAO,CAAC,CAAC,EAEnD,MAAO,CAAE,KAAAkU,EAAM,KAAMnW,EAAI,IAAI,MAAMA,EAAI,GAAG,CAAE,CAC9C,CACA,SAASoM,GAAagK,EAAOC,EAAO,CAClC,OAAOD,EAAM,OAAOC,CAAK,EAAID,EAAQA,EAAM,eAAeC,CAAK,CACjE,CACA,SAAS5G,GAAcF,EAAWC,EAAW,CAC3C,IAAIxT,EAAM,CAAC,EACX,OAAAuT,EAAU,SAAS,QAAQ,SAASnS,EAAG,CACrC,IAAIqC,EAAIrC,EAAE,KACNxC,EAAI4U,EAAU,QAAQ/P,CAAC,EAC3B,GAAI,CACF,GAAI,CAAC7E,EACH,MAAM,IAAI,MAAMP,EAAG,6BAA8BoF,CAAC,CAAC,EAErD,GAAI7E,EAAE,SAAWwC,EAAE,OACjB,MAAM,IAAI,MAAM/C,EAAG,mCAAoCoF,CAAC,CAAC,EAE3DzD,EAAIyD,EAAI,GAAG,EAAI2M,GAAaxR,EAAE,YAAawC,EAAE,WAAW,EACxDpB,EAAIyD,EAAI,GAAG,EAAI2M,GAAahP,EAAE,UAAWxC,EAAE,SAAS,EACpDoB,EAAIyD,EAAI,GAAG,EAAI2M,GAAahP,EAAE,aAAcxC,EAAE,YAAY,CAC5D,OAASmS,EAAO,CACd,MAAMmI,GAAW,wBAAyBnI,CAAK,CACjD,CACF,CAAC,EACM/Q,CACT,CACA,SAAS2U,GAAsBqC,EAAOsD,EAAOhG,EAAKiG,EAAU,CAC1D,OAAO,KAAKD,CAAK,EAAE,QAAQ,SAAS/a,EAAM,CACxC,IAAI4T,EAAOmH,EAAM/a,CAAI,EACjBgU,EAAWC,EACX+G,GACFhH,EAAYe,EACZd,EAAYR,EAAQ,YAAYG,CAAI,IAEpCI,EAAYP,EAAQ,YAAYG,CAAI,EACpCK,EAAYc,GAEd0C,EAAMzX,CAAI,EAAI,IAAI2X,EAAQ3D,EAAWC,EAAWjU,EAAM,EAAI,CAC5D,CAAC,CACH,CACA,SAAS2W,GAAmBc,EAAOuD,EAAU,CAC3C,IAAID,EAAQ,CAAC,EACb,cAAO,KAAKtD,CAAK,EAAE,QAAQ,SAASwD,EAAI,CACtC,IAAIvD,EAAUD,EAAMwD,CAAE,EACtB,GAAIvD,EAAQ,UAAW,CACrB,IAAI3C,EAAMiG,EAAWtD,EAAQ,WAAaA,EAAQ,WAClDqD,EAAME,CAAE,EAAIlG,EAAI,QAClB,CACF,CAAC,EACMgG,CACT,CACA,SAASjD,GAAQjP,EAAK,CACpB,MAAO,CAAC,CAACA,GAAO,OAAO,UAAU,SAAS,KAAKA,CAAG,IAAM,gBAC1D,CACA,SAAS2L,GAAc1T,EAAKC,EAAK,CAC/B,OAAOD,EAAI,GAAG,QAAS,SAASsG,EAAK,CACnCrG,EAAI,KAAK,QAASqG,EAAKtG,CAAG,CAC5B,CAAC,CACH,CACA,SAASoa,GAAQxM,EAAK8C,EAAO,CAC3B,IAAIpK,EAAM,IAAI,MAAMsH,CAAG,EACvB,OAAAtH,EAAI,MAAQoK,EACLpK,CACT,CACA,SAASuS,GAAWwB,EAAS3J,EAAO,CAClC,IAAIpK,EAAM8T,GAAQC,EAAQ,YAAY,EAAE,QAAQ,KAAM,GAAG,EAAG3J,CAAK,EACjE,OAAApK,EAAI,QAAUoK,GAASA,EAAM,QAAUA,EAAM,QAAU2J,EAChD/T,CACT,CACA,SAASuR,GAAmBjK,EAAKjO,EAAKqN,EAAQ,CAC5C,IAAIsN,EAAU,CAAC,EACX/a,EAAGC,EAAG+L,EACV,IAAKhM,EAAI,EAAGC,EAAIwN,EAAO,OAAQzN,EAAIC,EAAGD,IACpCgM,EAAQyB,EAAOzN,CAAC,EAChBgM,EAAM,KAAK,QAAQ5L,EAAI4L,EAAM,IAAI,EAAG,CAAE,UAAA1C,CAAU,CAAC,EAEnD,IAAI0R,EAAaD,EAAQ,IAAI,SAAS5M,EAAM,CAC1C,OAAO1P,EAAG,0BAA2B0P,EAAK,KAAMA,EAAK,MAAOA,EAAK,IAAI,CACvE,CAAC,EAAE,KAAK,IAAI,EACRpH,EAAM,IAAI,MAAMtI,EAAG,UAAW4P,EAAK2M,CAAU,CAAC,EAClD,OAAAjU,EAAI,QAAUgU,EACPhU,EACP,SAASuC,EAAUlI,EAAOoH,EAAKnC,EAAM,CACnC,IAAI4U,EAAO,CAAC,EACR1X,EAAIgB,GAAIrD,GACZ,IAAKqC,EAAK,EAAGgB,GAAKnD,EAAM,OAAQmC,EAAKgB,GAAIhB,IACvCrC,GAAOE,EAAMmC,CAAE,EACX,MAAMrC,EAAI,EACZ+Z,EAAK,KAAK,IAAM/Z,EAAI,EAEpB+Z,EAAK,KAAK,IAAM/Z,GAAO,GAAG,EAG9B6Z,EAAQ,KAAK,CACX,KAAM/O,EAAM,KAAOiP,EAAK,KAAK,EAAE,EAC/B,MAAOzS,EACP,KAAAnC,CACF,CAAC,CACH,CACF,CACA,SAAS8Q,GAAiB+D,EAAO,CAC/B,OAAOA,EAAQpW,EAAM,QAAQoW,CAAK,EAAE,YAAY,CAAC,GAAK,GAAK1I,GAAgB,CAC7E,CACA,SAASiG,GAAcF,EAAI4C,EAAQ,CACjC,OAAQ5C,EAAK4C,IAAW,GAAK3I,KAAkB,CACjD,CACA,SAASoD,GAASpN,EAAK,CACrB,MAAO,CAAC,EAAEA,GAAOA,EAAI,KACvB,CACA,SAAS2N,EAAmBzB,EAAK7T,EAAM,CACrC,IAAIwN,EAAMqG,EAAI,QAAQ7T,CAAI,EAC1B,GAAI,CAACwN,EACH,MAAM,IAAI,MAAM5P,EAAG,sBAAuBoC,CAAI,CAAC,EAEjD,OAAOwN,CACT,CACA,SAAS2J,EAAgBoD,EAAQ,CAC/B,IAAIpO,EAAO,CAACoO,EAAO,KAAMA,EAAO,IAAI,EAChCC,EAAM,CAAC,EACPlK,EACJmK,EAAQ,CAAC,EACT,SAASA,EAAQvb,EAAK,CACpB,IAAIwb,EAAS,GACTxb,EAAMqb,EAAO,IAAI,OACnBA,EAAO,IAAIrb,CAAG,EAAE,MAAMqb,EAAO,IAAKpO,EAAK,OAAO,SAASjG,EAAKpK,EAAI,CAC9D,GAAI4e,EAAQ,CACVH,EAAO,QAAQP,GAAQ,oCAAqC9T,CAAG,CAAC,EAChE,MACF,CAEA,GADAwU,EAAS,GACLxU,GAAOqU,EAAO,OACjBA,EAAO,KAAK,QAAU,QAAUA,EAAO,KAAK,WAAa,QAAS,CACjEjK,EAAQpK,EACRyU,EAAS,EACT,MACF,CACI7e,GACF0e,EAAI,KAAK1e,CAAE,EAEb2e,EAAQ,EAAEvb,CAAG,CACf,CAAC,CAAC,EAEFqb,EAAO,aAAa,MAAMA,EAAO,IAAKpO,EAAK,OAAO,SAASjG,EAAK,CAC9D,GAAIwU,EAAQ,CACVH,EAAO,QAAQP,GAAQ,yBAA0B9T,CAAG,CAAC,EACrD,MACF,CACAwU,EAAS,GACTpK,EAAQpK,EACR,QAAQ,SAASyU,CAAQ,CAC3B,CAAC,CAAC,CAEN,CACA,SAASA,GAAW,CAClB,IAAI7e,EAAK0e,EAAI,IAAI,EACjB,GAAI1e,EAAI,CACN,IAAI4e,EAAS,GACb5e,EAAG,KAAKye,EAAO,IAAKjK,EAAO,SAASpK,EAAK,CACvC,GAAIwU,EAAQ,CACVH,EAAO,QAAQP,GAAQ,qCAAsC9T,CAAG,CAAC,EACjE,MACF,CACAoK,EAAQpK,EACRwU,EAAS,GACTC,EAAS,CACX,CAAC,CACH,MACEJ,EAAO,aAAa,KAAKA,EAAO,IAAKjK,CAAK,CAE9C,CACF,CACArT,EAAO,QAAU,CACf,QAAAwZ,EACA,uBAAAhF,EACA,wBAAAC,EACA,QAAAG,EACA,SAAA6E,EACA,QAAAnE,EACA,iBAAAqB,EACA,QAAS,CACP,aAAAc,EACA,aAAAJ,EACA,aAAAW,GACA,aAAAE,EACF,CACF,CACF,CACF,CAAC,EAGGyF,GAAgB/e,GAAW,CAC7B,iCAAiCmB,EAASC,EAAQ,CAChD,aACA,IAAI4d,EAAKC,GACLnS,EAAOoS,GACX,SAASC,GAAmB,CAC1B,IAAIC,EAAU,CAAC,EACf,OAAO,SAASC,EAAOC,EAAMrf,EAAI,CAE/B,GADAof,EAAQvS,EAAK,QAAQuS,CAAK,EACtBD,EAAQC,CAAK,EAAG,CAClB,QAAQ,SAASpf,CAAE,EACnB,MACF,CACAmf,EAAQC,CAAK,EAAI,GACjBL,EAAG,SAASK,EAAO,CAAE,SAAU,MAAO,EAAGpf,CAAE,CAC7C,CACF,CACA,SAASsf,GAAuB,CAC9B,IAAIH,EAAU,CAAC,EACf,OAAO,SAASC,EAAOC,EAAMrf,EAAI,CAC/Bof,EAAQvS,EAAK,QAAQuS,CAAK,EACtBD,EAAQC,CAAK,EACfpf,EAAG,GAEHmf,EAAQC,CAAK,EAAI,GACjBpf,EAAG,KAAM+e,EAAG,aAAaK,EAAO,CAAE,SAAU,MAAO,CAAC,CAAC,EAEzD,CACF,CACAje,EAAO,QAAU,CACf,iBAAA+d,EACA,qBAAAI,EAEA,WAAYP,EAAG,WACf,aAAcA,EAAG,YACnB,CACF,CACF,CAAC,EAGGQ,GAAgBxf,GAAW,CAC7B,iCAAiCmB,EAASC,EAAQ,CAChD,aACA,IAAIqe,EAAQV,GAAc,EACtB3W,EAAQlH,GAAc,EACtB4L,EAAOoS,GACPzd,EAAOC,GACPK,EAAKN,EAAK,OACVie,EAAY,CACd,KAAM,CAAE,KAAM,MAAO,YAAa,MAAO,EACzC,QAAS,CAAE,KAAM,QAAS,YAAa,SAAU,EACjD,QAAS,CAAE,KAAM,OAAQ,YAAa,aAAc,EACpD,aAAc,CAAE,KAAM,OAAQ,YAAa,kBAAmB,CAChE,EACA,SAASC,EAAiBN,EAAO1c,EAAM1C,EAAI,CACrC,CAACA,GAAM,OAAO0C,GAAQ,aACxB1C,EAAK0C,EACLA,EAAO,QAETA,EAAOA,GAAQ,CAAC,EACXA,EAAK,aACRA,EAAK,WAAa8c,EAAM,iBAAiB,GAE3CG,EAAWP,EAAO,SAAShV,EAAKwV,EAAU,CACxC,GAAIxV,EAAK,CACPpK,EAAGoK,CAAG,EACN,MACF,CACA,GAAI,CAACwV,EAAU,CACb5f,EAAG,IAAI,MAAM,mBAAmB,CAAC,EACjC,MACF,CACA,IAAI6f,EAAUD,EAAS,MACvB,GAAIC,EAAS,CACX,IAAIvb,EAAYwb,GAAkBF,CAAQ,GAAK,GAC/CC,EAAQ,QAAQ,SAASpW,EAAQ,CAC3BA,EAAO,YAAcnF,GACvB,OAAOmF,EAAO,SAElB,CAAC,CACH,CACAzJ,EAAG,KAAM4f,CAAQ,CACnB,CAAC,EACD,SAASD,EAAWI,EAAQC,EAAK,CAC/Btd,EAAK,WAAWqd,EAAQ,MAAO,SAAS3V,EAAKtH,EAAK,CAChD,GAAIsH,EAAK,CACP4V,EAAI5V,CAAG,EACP,MACF,CACA,GAAItH,IAAQ,OAAQ,CAClBkd,EAAI,EACJ,MACF,CACA,GAAI,CACF,IAAIlO,EAAS,IAAImO,EAAOnd,EAAKJ,CAAI,EAC7Be,GAAMqO,EAAO,cAAchP,EAAKJ,CAAI,CAC1C,OAASmW,EAAM,CACbA,EAAK,KAAOkH,EACZC,EAAInH,CAAI,EACR,MACF,CACAqH,EAAazc,GAAI,SAAUA,GAAI,QAASoJ,EAAK,QAAQkT,CAAM,EAAGC,CAAG,CACnE,CAAC,CACH,CACA,SAASE,EAAaN,EAAUT,EAASgB,EAAOH,EAAK,CACnD,IAAII,EAAoB,CAAC,EACzBC,GAAK,EACL,SAASA,IAAO,CACd,IAAIC,EAAOnB,EAAQ,MAAM,EACzB,GAAI,CAACmB,EAAM,CACTF,EAAkB,QAAQ,EAC1B,GAAI,CACFA,EAAkB,QAAQ,SAASG,EAAU,CAC3CC,GAAYZ,EAAUW,CAAQ,CAChC,CAAC,CACH,OAASnW,EAAK,CACZ4V,EAAI5V,CAAG,EACP,MACF,CACA4V,EAAI,KAAMJ,CAAQ,EAClB,MACF,CACA,IAAIa,EAAa5T,EAAK,KAAKsT,EAAOG,EAAK,IAAI,EACvCA,EAAK,OAAS,MAChBX,EAAWc,EAAY,SAASrW,EAAKmW,EAAU,CAC7C,GAAInW,EAAK,CACP4V,EAAI5V,CAAG,EACP,MACF,CACImW,GACFH,EAAkB,KAAKG,CAAQ,EAEjCF,GAAK,CACP,CAAC,EAED3d,EAAK,WAAW+d,EAAYH,EAAK,KAAM,SAASlW,EAAKtH,EAAK,CACxD,GAAIsH,EAAK,CACP4V,EAAI5V,CAAG,EACP,MACF,CACA,OAAQkW,EAAK,KAAM,CACjB,IAAK,WACL,IAAK,SACH,GAAIxd,IAAQ,OAAQ,CAClBud,GAAK,EACL,MACF,CACA,GAAI,CACF,IAAI5c,EAAM,KAAK,MAAMX,CAAG,CAC1B,OAAS+V,EAAM,CACbA,EAAK,KAAO4H,EACZT,EAAInH,CAAI,EACR,MACF,CACA,IAAI0H,EAAWD,EAAK,OAAS,SAAW,CAAE,MAAO,CAAC7c,CAAG,CAAE,EAAIA,EAC3D2c,EAAkB,KAAKG,CAAQ,EAC/BF,GAAK,EACL,OACF,QACEL,EAAI,IAAI,MAAMle,EAAG,0BAA2Bwe,EAAK,IAAI,CAAC,CAAC,CAC3D,CACF,CAAC,CAEL,CACF,CACA,SAASE,GAAYZ,EAAUW,EAAU,CACvC,IAAIV,EAAUU,EAAS,OAAS,CAAC,EACjCV,EAAQ,QAAQ,EAChBA,EAAQ,QAAQ,SAASpW,EAAQ,CAC1BmW,EAAS,QACZA,EAAS,MAAQ,CAAC,GAEhBnW,EAAO,YAAc,SACvBA,EAAO,UAAYqW,GAAkBS,CAAQ,GAAK,IAEpDX,EAAS,MAAM,QAAQnW,CAAM,CAC/B,CAAC,EACD,OAAO,KAAK8W,EAAS,UAAY,CAAC,CAAC,EAAE,QAAQ,SAASrc,EAAM,CAI1D,GAHK0b,EAAS,WACZA,EAAS,SAAW,CAAC,GAEnBA,EAAS,SAAS1b,CAAI,EACxB,MAAM,IAAI,MAAMpC,EAAG,wBAAyBoC,CAAI,CAAC,EAEnD0b,EAAS,SAAS1b,CAAI,EAAIqc,EAAS,SAASrc,CAAI,CAClD,CAAC,CACH,CACF,CACA,SAASwc,EAAK5d,EAAK,CACjB,IAAI2G,EACJ,GAAI,OAAO3G,GAAO,UAAY,CAACA,EAAI,QAAQ+J,EAAK,GAAG,GAAK2S,EAAM,WAAW1c,CAAG,EAAG,CAC7E,IAAI6d,EAAWnB,EAAM,aAAa1c,EAAK,CAAE,SAAU,MAAO,CAAC,EAC3D,GAAI,CACF,OAAO,KAAK,MAAM6d,CAAQ,CAC5B,MAAc,CACZ,IAAIje,EAAO,CAAE,WAAY8c,EAAM,qBAAqB,CAAE,EACtDE,EAAiB5c,EAAKJ,EAAM,SAASmW,GAAM+H,EAAgB,CACzDnX,EAASoP,GAAO8H,EAAWC,CAC7B,CAAC,CACH,CACF,MACEnX,EAAS3G,EAEX,GAAI,OAAO2G,GAAU,UAAYA,IAAW,OAC1C,OAAOA,EAET,GAAI,CACF,OAAO,KAAK,MAAMA,CAAM,CAC1B,MAAc,CACZ,GAAI,CACF,OAAOwW,EAAO,aAAaxW,CAAM,CACnC,MAAe,CACb,GAAI,CACF,OAAOwW,EAAO,WAAWxW,CAAM,CACjC,MAAe,CACb,OAAOA,CACT,CACF,CACF,CACF,CACA,SAASwW,EAAOnd,EAAKJ,EAAM,CACzBA,EAAOA,GAAQ,CAAC,EAChB,KAAK,IAAM,IAAIme,EAAU/d,CAAG,EAC5B,KAAK,iBAAmB,CAAC,CAACJ,EAAK,gBAC/B,KAAK,cAAgB,CAACA,EAAK,qBAC3B,KAAK,UAAYA,EAAK,UAAY+c,CACpC,CACAQ,EAAO,aAAe,SAASnd,EAAKJ,EAAM,CACxC,IAAIoP,EAAS,IAAImO,EAAOnd,EAAKJ,CAAI,EAC7Bkd,EAAW9N,EAAO,cAAc,EACpC,GAAI8N,EAAS,QAAQ,OACnB,MAAM,IAAI,MAAM,qBAAqB,EAEvC,OAAOA,EAAS,QAClB,EACAK,EAAO,WAAa,SAASnd,EAAKJ,EAAM,CACtC,IAAIoP,EAAS,IAAImO,EAAOnd,EAAKJ,CAAI,EAC7B0T,EAAMtE,EAAO,aAAa,EAC1BrI,EAASqI,EAAO,UAAUsE,IAAQ,OAAS,CAAC,EAAI,CAAE,IAAAA,CAAI,EAAG,EAAI,EACjE,OAAAtE,EAAO,IAAI,KAAK,CAAE,GAAI,OAAQ,CAAC,EACxBrI,CACT,EACAwW,EAAO,UAAU,cAAgB,UAAW,CAC1C,IAAIa,EAAK,KAAK,IACV3B,EAAU,CAAC,EACX7U,EAAQ,CAAC,EACToM,EAAW,CAAC,EACZtT,EACJ,KAAK,aAAa+b,CAAO,EACzB,IAAIyB,GAAiB,CAAC,EAClBG,EAAkB,KAAK,aAAa,EAUxC,IATIA,IAAoB,SACtBH,GAAe,IAAMG,GAEvB,KAAK,iBAAiBH,EAAc,EACpCE,EAAG,KAAK,CAAE,IAAK,UAAW,CAAC,EACtBA,EAAG,KAAK,CAAE,IAAK,IAAK,OAAQ,EAAK,CAAC,IACrCF,GAAe,SAAWE,EAAG,KAAK,CAAE,GAAI,MAAO,CAAC,EAAE,IAClDA,EAAG,KAAK,CAAE,IAAK,GAAI,CAAC,GAEf,CAACA,EAAG,KAAK,CAAE,IAAK,IAAK,OAAQ,EAAK,CAAC,GACxC,GAAI,CAAC,KAAK,aAAa3B,CAAO,EAAG,CAC/B,IAAI6B,EAAU,KAAK,aAAa,EAC5BpJ,EAAa,KAAK,UAAU,CAAC,EAAG,EAAI,EACpCqJ,EAAa,KAAK,aAAa9B,EAAS,EAAI,EAC5C+B,EAAU,OAEd,GADA9d,EAAM0d,EAAG,IACL,CAACG,IAAeC,EAAU,KAAK,aAAatJ,CAAU,GAAI,CACxDoJ,IAAY,QAAUE,EAAQ,OAAO,MAAQ,SAC/CA,EAAQ,OAAO,IAAMF,GAEvB,IAAI7K,GAAS,GAYb,IAXI+K,EAAQ,OAAO,WAAa,QAAUA,EAAQ,OAAO,SAAS,OAAS,UACzE/K,GAAS,CAAC,KAAK,kBAAoB,CAAC+K,EAAQ,OAAO,OAC/CA,EAAQ,OAAO,WAAa,OAC9BA,EAAQ,OAAO,SAAW,OAE1BA,EAAQ,OAAO,SAAS,KAAO,QAG/B/K,KACF+K,EAAQ,OAAO,SAAS,EAAI,IAE1BxK,EAASwK,EAAQ,IAAI,EACvB,MAAM,IAAI,MAAMpf,EAAG,wBAAyBof,EAAQ,IAAI,CAAC,EAE3DxK,EAASwK,EAAQ,IAAI,EAAIA,EAAQ,MACnC,MACMF,IACE,OAAOpJ,GAAc,SACvBA,EAAa,CAAE,IAAKoJ,EAAS,KAAMpJ,CAAW,EACrCA,EAAW,MAAQ,SAC5BA,EAAW,IAAMoJ,IAGrB1W,EAAM,KAAKsN,CAAU,EACrBkJ,EAAG,IAAM1d,EACT0d,EAAG,KAAK,CAAE,IAAK,IAAK,OAAQ,EAAK,CAAC,EAEpCE,EAAU,MACZ,CAEF,OAAAF,EAAG,KAAK,CAAE,GAAI,OAAQ,CAAC,EACnBxW,EAAM,SACRsW,GAAe,MAAQtW,GAErB,OAAO,KAAKoM,CAAQ,EAAE,SACxBkK,GAAe,SAAWlK,GAErB,CAAE,SAAUkK,GAAgB,QAAAzB,CAAQ,CAC7C,EACAc,EAAO,UAAU,iBAAmB,SAASxW,EAAQ,CAEnD,QADIqX,EAAK,KAAK,IACPA,EAAG,KAAK,CAAE,IAAK,IAAK,OAAQ,EAAK,CAAC,GAAG,CAE1C,QADIrc,EAAQ,CAAC,EACN,CAACqc,EAAG,KAAK,CAAE,IAAK,IAAK,OAAQ,EAAK,CAAC,GACxCrc,EAAM,KAAKqc,EAAG,KAAK,EAAE,GAAG,EAE1BrX,EAAOhF,EAAM,KAAK,EAAE,CAAC,EAAIqc,EAAG,KAAK,CAAE,GAAI,MAAO,CAAC,EAAE,IACjDA,EAAG,KAAK,CAAE,IAAK,GAAI,CAAC,CACtB,CACF,EACAb,EAAO,UAAU,aAAe,SAASkB,EAAgB,CACvD,IAAIL,EAAK,KAAK,IACVrX,EAAS,CAAE,QAAS,CAAC,EAAG,SAAU0X,CAAe,EACrD,KAAK,iBAAiB1X,CAAM,EAC5B,IAAIvF,EAAO4c,EAAG,KAAK,EAAE,IACrB,GAAIA,EAAG,KAAK,EAAE,MAAQ,IAGtB,IAAI,CAACA,EAAG,KAAK,CAAE,IAAK,IAAK,OAAQ,EAAK,CAAC,EACrC,GACErX,EAAO,QAAQ,KAAK,KAAK,WAAW,CAAC,QAC9B,CAACqX,EAAG,KAAK,CAAE,IAAK,IAAK,OAAQ,EAAK,CAAC,GAAKA,EAAG,KAAK,CAAE,IAAK,GAAI,CAAC,GAEvE,IAAIM,EAAQN,EAAG,KAAK,EACpB,OAAQM,EAAM,IAAK,CACjB,IAAK,SACH3X,EAAO,OAAS,CAAC,EACjB,GACEA,EAAO,OAAO,KAAK,KAAK,UAAU,CAAC,QAC5B,CAACqX,EAAG,KAAK,CAAE,IAAK,IAAK,OAAQ,EAAK,CAAC,GAAKA,EAAG,KAAK,CAAE,IAAK,GAAI,CAAC,GACrE,MACF,IAAK,SACHrX,EAAO,SAAS,EAAI,GACpBqX,EAAG,KAAK,CAAE,IAAK,GAAI,CAAC,EACpB,MACF,IAAK,IACH,MACF,QACE,MAAMA,EAAG,MAAM,yBAA0BM,CAAK,CAClD,CACA,MAAO,CAAE,KAAAld,EAAM,OAAAuF,CAAO,EACxB,EACAwW,EAAO,UAAU,aAAe,UAAW,CACzC,IAAImB,EAAQ,KAAK,IAAI,KAAK,CAAE,GAAI,UAAW,YAAa,GAAM,OAAQ,EAAK,CAAC,EAC5E,GAAIA,EACF,OAAOA,EAAM,GAEjB,EACAnB,EAAO,UAAU,WAAa,UAAW,CACvC,IAAIa,EAAK,KAAK,IACVE,EAAU,KAAK,aAAa,EAC5BvX,EAAS,CAAE,KAAM,KAAK,UAAU,CAAE,EACtC,OAAIuX,IAAY,QAAUvX,EAAO,MAAQ,SACvCA,EAAO,IAAMuX,GAEf,KAAK,iBAAiBvX,CAAM,EAC5BA,EAAO,KAAOqX,EAAG,KAAK,CAAE,GAAI,MAAO,CAAC,EAAE,IAClCA,EAAG,KAAK,CAAE,IAAK,IAAK,OAAQ,EAAK,CAAC,IACpCrX,EAAO,QAAaqX,EAAG,KAAK,CAAE,GAAI,MAAO,CAAC,EAAE,KAEvCrX,CACT,EACAwW,EAAO,UAAU,UAAY,SAASxW,EAAQ4X,EAAK,CAIjD,OAHA5X,EAASA,GAAU,CAAC,EACpB,KAAK,iBAAiBA,CAAM,EAC5BA,EAAO,KAAO,KAAK,IAAI,KAAK,CAAE,GAAI,MAAO,CAAC,EAAE,IACpCA,EAAO,KAAM,CACnB,IAAK,SACL,IAAK,QACH,OAAO,KAAK,YAAYA,CAAM,EAChC,IAAK,QACH,OAAO,KAAK,WAAWA,CAAM,EAC/B,IAAK,OACH,OAAO,KAAK,UAAUA,EAAQ4X,CAAG,EACnC,IAAK,MACH,OAAO,KAAK,SAAS5X,CAAM,EAC7B,IAAK,QACH,OAAO,KAAK,WAAWA,CAAM,EAC/B,IAAK,QACH,GAAI,OAAO,KAAKA,CAAM,EAAE,OAAS,EAC/B,MAAM,IAAI,MAAM,qCAAqC,EAEvD,OAAO,KAAK,WAAW,EACzB,QACE,IAAI6X,EAAM,KAAK,UAAU7X,EAAO,IAAI,EACpC,OAAI6X,IACF,OAAO7X,EAAO,KACdtB,EAAM,kBAAkBmZ,EAAK7X,CAAM,GAE9B,OAAO,KAAKA,CAAM,EAAE,OAAS,EAAIA,EAASA,EAAO,IAC5D,CACF,EACAwW,EAAO,UAAU,WAAa,SAASxW,EAAQ,CAC7C,IAAIqX,EAAK,KAAK,IACd,OAAKA,EAAG,KAAK,CAAE,IAAK,IAAK,OAAQ,EAAK,CAAC,IACrCrX,EAAO,KAAOqX,EAAG,KAAK,CAAE,GAAI,MAAO,CAAC,EAAE,IACtCA,EAAG,KAAK,CAAE,IAAK,GAAI,CAAC,GAEtBrX,EAAO,KAAO,SAASqX,EAAG,KAAK,CAAE,GAAI,QAAS,CAAC,EAAE,GAAG,EACpDA,EAAG,KAAK,CAAE,IAAK,GAAI,CAAC,EACbrX,CACT,EACAwW,EAAO,UAAU,SAAW,SAASxW,EAAQ,CAC3C,IAAIqX,EAAK,KAAK,IACVS,EAAS,KAAK,cACdC,EAAeV,EAAG,KAAK,CAAE,IAAK,IAAK,OAAAS,CAAO,CAAC,IAAM,OACrD,OAAA9X,EAAO,OAAS,KAAK,UAAU,EAC/BqX,EAAG,KAAK,CAAE,IAAK,IAAK,OAAQU,CAAa,CAAC,EACnC/X,CACT,EACAwW,EAAO,UAAU,WAAa,SAASxW,EAAQ,CAC7C,IAAIqX,EAAK,KAAK,IACVS,EAAS,KAAK,cACdC,EAAeV,EAAG,KAAK,CAAE,IAAK,IAAK,OAAAS,CAAO,CAAC,IAAM,OACrD,OAAA9X,EAAO,MAAQ,KAAK,UAAU,EAC9BqX,EAAG,KAAK,CAAE,IAAK,IAAK,OAAQU,CAAa,CAAC,EACnC/X,CACT,EACAwW,EAAO,UAAU,UAAY,SAASxW,EAAQ4X,EAAK,CACjD,IAAIP,EAAK,KAAK,IACTA,EAAG,KAAK,CAAE,IAAK,IAAK,OAAQ,EAAK,CAAC,IACrCrX,EAAO,KAAOqX,EAAG,KAAK,CAAE,GAAI,MAAO,CAAC,EAAE,IACtCA,EAAG,KAAK,CAAE,IAAK,GAAI,CAAC,GAEtBrX,EAAO,QAAU,CAAC,EAClB,GACEA,EAAO,QAAQ,KAAKqX,EAAG,KAAK,EAAE,GAAG,QAC1B,CAACA,EAAG,KAAK,CAAE,IAAK,IAAK,OAAQ,EAAK,CAAC,GAAKA,EAAG,KAAK,CAAE,IAAK,GAAI,CAAC,GACrE,OAAIO,GAAOP,EAAG,KAAK,CAAE,IAAK,IAAK,OAAQ,EAAK,CAAC,IAC3CrX,EAAO,QAAUqX,EAAG,KAAK,EAAE,IAC3BA,EAAG,KAAK,CAAE,IAAK,GAAI,CAAC,GAEfrX,CACT,EACAwW,EAAO,UAAU,WAAa,UAAW,CACvC,IAAIa,EAAK,KAAK,IACV5d,EAAM,CAAC,EACX4d,EAAG,KAAK,CAAE,IAAK,GAAI,CAAC,EACpB,GACE5d,EAAI,KAAK,KAAK,UAAU,CAAC,QAClB,CAAC4d,EAAG,KAAK,CAAE,IAAK,IAAK,OAAQ,EAAK,CAAC,GAAKA,EAAG,KAAK,CAAE,IAAK,GAAI,CAAC,GACrE,OAAO5d,CACT,EACA+c,EAAO,UAAU,YAAc,SAASxW,EAAQ,CAC9C,IAAIqX,EAAK,KAAK,IAMd,IALKA,EAAG,KAAK,CAAE,IAAK,IAAK,OAAQ,EAAK,CAAC,IACrCrX,EAAO,KAAOqX,EAAG,KAAK,CAAE,GAAI,MAAO,CAAC,EAAE,IACtCA,EAAG,KAAK,CAAE,IAAK,GAAI,CAAC,GAEtBrX,EAAO,OAAS,CAAC,EACV,CAACqX,EAAG,KAAK,CAAE,IAAK,IAAK,OAAQ,EAAK,CAAC,GACxCrX,EAAO,OAAO,KAAK,KAAK,WAAW,CAAC,EACpCqX,EAAG,KAAK,CAAE,IAAK,GAAI,CAAC,EAEtB,OAAOrX,CACT,EACAwW,EAAO,UAAU,aAAe,SAASd,EAASsC,EAAc,CAI9D,QAHIX,EAAK,KAAK,IACVG,EAAa,EACb7d,EAAM0d,EAAG,IACNA,EAAG,KAAK,CAAE,IAAK,SAAU,OAAQ,EAAK,CAAC,GAAG,CAC/C,GAAI,CAACG,GAAcQ,GAAgBX,EAAG,KAAK,CAAE,IAAK,IAAK,OAAQ,EAAK,CAAC,EAAG,CACtEA,EAAG,IAAM1d,EACT,MACF,CACA,IAAIic,GAAOyB,EAAG,KAAK,CAAE,GAAI,MAAO,CAAC,EAAE,IAC/BY,EAAQ,KAAK,MAAMZ,EAAG,KAAK,CAAE,GAAI,QAAS,CAAC,EAAE,GAAG,EACpDA,EAAG,KAAK,CAAE,IAAK,GAAI,CAAC,EACpB3B,EAAQ,KAAK,CAAE,KAAAE,GAAM,KAAMqC,CAAM,CAAC,EAClCT,GACF,CACA,OAAOA,CACT,EACA,SAASJ,EAAU/d,EAAK,CACtB,KAAK,KAAOA,EACZ,KAAK,IAAM,CACb,CACA+d,EAAU,UAAU,KAAO,SAASne,EAAM,CACxC,IAAI0e,EAAQ,CAAE,IAAK,KAAK,IAAK,GAAI,OAAQ,IAAK,MAAO,EACjDJ,EAAU,KAAK,MAAMte,GAAQA,EAAK,WAAW,EACjD,GAAI,OAAOse,GAAW,SACpBI,EAAM,GAAK,UACXA,EAAM,IAAMJ,MACP,CACL,IAAI5d,EAAM,KAAK,IACXN,EAAM,KAAK,KACX+B,GAAI/B,EAAI,OAAOM,CAAG,EACtB,GAAI,CAACyB,GACHuc,EAAM,GAAK,gBAEP1e,GAAQA,EAAK,KAAO,QACtB0e,EAAM,GAAK,OACX,KAAK,IAAM,KAAK,WAAW,GAClBvc,KAAM,KACfuc,EAAM,GAAK,SACX,KAAK,IAAM,KAAK,aAAa,GACpB,QAAQ,KAAKvc,EAAC,GACvBuc,EAAM,GAAK,SACX,KAAK,IAAM,KAAK,OAAO,OAAO,GACrB,cAAc,KAAKvc,EAAC,GAC7Buc,EAAM,GAAK,OACX,KAAK,IAAM,KAAK,OAAO,gBAAgB,IAEvCA,EAAM,GAAK,WACX,KAAK,IAAMhe,EAAM,GAEnBge,EAAM,IAAMte,EAAI,MAAMM,EAAK,KAAK,GAAG,EAC/Bge,EAAM,KAAO,OACf,GAAI,CACFA,EAAM,IAAM,KAAK,MAAMA,EAAM,GAAG,CAClC,MAAe,CACb,MAAM,KAAK,MAAM,eAAgBA,CAAK,CACxC,MACSA,EAAM,KAAO,SACtBA,EAAM,IAAMA,EAAM,IAAI,QAAQ,KAAM,EAAE,EAG5C,CACA,IAAIhX,EAMJ,GALI1H,GAAQA,EAAK,IAAMA,EAAK,KAAO0e,EAAM,GACvChX,EAAM,KAAK,MAAMtI,EAAG,iBAAkBY,EAAK,EAAE,EAAG0e,CAAK,EAC5C1e,GAAQA,EAAK,KAAOA,EAAK,MAAQ0e,EAAM,MAChDhX,EAAM,KAAK,MAAMtI,EAAG,oBAAqBY,EAAK,GAAG,EAAG0e,CAAK,GAEtDhX,EAEE,GAAI1H,GAAQA,EAAK,OAAQ,CAC9B,KAAK,IAAM0e,EAAM,IACjB,MACF,KACE,OAAMhX,MALN,QAAOgX,CAOX,EACAP,EAAU,UAAU,MAAQ,SAASc,EAAQC,EAAS,CACpD,IAAIC,EAAU,OAAOD,GAAW,SAC5Bxe,EAAMye,EAAUD,EAAQ,IAAMA,EAC9B9e,EAAM,KAAK,KACXgf,GAAU,EACVC,EAAY,EACZ1e,EACJ,IAAKA,EAAI,EAAGA,EAAID,EAAKC,IACfP,EAAI,OAAOO,CAAC,IAAM;AAAA,IACpBye,KACAC,EAAY1e,GAGhB,IAAIqO,EAAMmQ,EAAU/f,EAAG,uBAAwB8f,EAASD,CAAM,EAAIA,EAC9DvX,EAAM,IAAI,MAAMsH,CAAG,EACvB,OAAAtH,EAAI,MAAQyX,EAAUD,EAAU,OAChCxX,EAAI,QAAU0X,GACd1X,EAAI,OAAShH,EAAM2e,EACZ3X,CACT,EACAyW,EAAU,UAAU,MAAQ,SAASmB,EAAa,CAIhD,QAHIlf,EAAM,KAAK,KACXmf,EAAY,GACZ7e,EAAKyB,GACDA,EAAI/B,EAAI,OAAO,KAAK,GAAG,IAAM,KAAK,KAAK+B,CAAC,GAC9C,KAAK,MAGP,GADAzB,EAAM,KAAK,IACPyB,IAAM,IACR,OAAQ/B,EAAI,OAAO,KAAK,IAAM,CAAC,EAAG,CAChC,IAAK,IAEH,IADA,KAAK,KAAO,GACJ+B,EAAI/B,EAAI,OAAO,KAAK,GAAG,IAAM+B,IAAM;AAAA,GACzC,KAAK,MAEP,OAAO,KAAK,MAAMmd,CAAW,EAC/B,IAAK,IAKH,IAJA,KAAK,KAAO,EACRlf,EAAI,OAAO,KAAK,GAAG,IAAM,MAC3Bmf,EAAY,IAEPpd,EAAI/B,EAAI,OAAO,KAAK,KAAK,GAC9B,GAAI+B,IAAM,KAAO/B,EAAI,OAAO,KAAK,GAAG,IAAM,IAExC,OADA,KAAK,MACDmf,GAAaD,EACRE,EAAepf,EAAI,MAAMM,EAAM,EAAG,KAAK,IAAM,CAAC,CAAC,EAEjD,KAAK,MAAM4e,CAAW,EAGjC,MAAM,KAAK,MAAM,uBAAwB5e,CAAG,CAChD,CAEJ,EACAyd,EAAU,UAAU,OAAS,SAASsB,EAAK,CAGzC,QAFI/e,EAAM,KAAK,IACXN,EAAM,KAAK,KACRqf,EAAI,KAAKrf,EAAI,OAAOM,CAAG,CAAC,GAC7BA,IAEF,OAAOA,CACT,EACAyd,EAAU,UAAU,aAAe,UAAW,CAI5C,QAHIzd,EAAM,KAAK,IAAM,EACjBN,EAAM,KAAK,KACX+B,EACGA,EAAI/B,EAAI,OAAOM,CAAG,GAAG,CAC1B,GAAIyB,IAAM,IACR,OAAOzB,EAAM,EAEXyB,IAAM,KACRzB,GAAO,EAEPA,GAEJ,CACA,MAAM,KAAK,MAAM,sBAAuBA,EAAM,CAAC,CACjD,EACAyd,EAAU,UAAU,WAAa,UAAW,CAC1C,IAAIzd,EAAM+E,EAAM,QAAQ,KAAK,KAAM,KAAK,GAAG,EAC3C,GAAI/E,EAAM,EACR,MAAM,KAAK,MAAM,eAAgBA,CAAG,EAEtC,OAAOA,CACT,EACA,SAAS8e,EAAepf,EAAK,CAI3B,QAHIsf,EAAQtf,EAAI,QAAQ,mBAAoB,EAAE,EAAE,MAAM;AAAA,CAAI,EAAE,IAAI,SAASuf,EAAMhf,EAAG,CAChF,OAAOA,EAAIgf,EAAK,QAAQ,YAAa,EAAE,EAAIA,CAC7C,CAAC,EACMD,EAAM,QAAU,CAACA,EAAM,CAAC,GAC7BA,EAAM,MAAM,EAEd,KAAOA,EAAM,QAAU,CAACA,EAAMA,EAAM,OAAS,CAAC,GAC5CA,EAAM,IAAI,EAEZ,OAAOA,EAAM,KAAK;AAAA,CAAI,CACxB,CACA,SAAStC,GAAkBF,EAAU,CACnC,GAAIA,EAAS,UACX,OAAOA,EAAS,UAElB,IAAIjb,EAAQ,gBAAgB,KAAKib,EAAS,QAAQ,EAClD,OAAOjb,EAAQA,EAAM,CAAC,EAAI,MAC5B,CACAxD,EAAO,QAAU,CACf,UAAA0f,EACA,iBAAAnB,EACA,KAAAgB,EACA,aAAcT,EAAO,aACrB,WAAYA,EAAO,UACrB,CACF,CACF,CAAC,EAGGqC,GAAcviB,GAAW,CAC3B,iCAAiCmB,EAASC,EAAQ,CAChD,aACA,IAAIohB,EAAavP,GAAmB,EAChCwP,EAAWlN,GAAiB,EAC5BmN,EAAQlD,GAAc,EACtBjV,EAAQpC,GAAc,EACtBC,EAAQlH,GAAc,EACtBG,EAASC,GACT0d,EAAKC,GACLxd,EAAOC,GACPC,EAAUN,EAAO,OACrB,SAASshB,EAAO7W,EAAKnJ,EAAM,CACzB,IAAIigB,EAAmBF,EAAM,KAAK5W,CAAG,EACrC,OAAO8W,EAAiB,SAAWH,EAAS,QAAQ,YAAYG,EAAkBjgB,CAAI,EAAI4H,EAAM,KAAK,UAAUqY,EAAkBjgB,CAAI,CACvI,CACA,SAASkgB,EAAkB/V,EAAMnK,EAAM,CACrCA,EAAOA,GAAQ,CAAC,EAChB,IAAImgB,EAASngB,EAAK,SAAW,OAAS,GAAO,CAAC,CAACA,EAAK,OAChDV,EAAO,KAAK,IAAIU,EAAK,MAAQ,KAAM,CAAC,EACpCsE,GAAMmB,EAAM,UAAUnG,CAAI,EAC1B8gB,EAAK/D,EAAG,SAASlS,EAAM,GAAG,EAC9B,GAAI,CACF,IAAIzJ,EAAM2b,EAAG,SAAS+D,EAAI9b,GAAK,EAAGhF,CAAI,EACtC,GAAIoB,EAAM,GAAK,CAACmf,EAAW,YAAY,OAAOvb,GAAI,MAAM,EAAG,CAAC,CAAC,EAC3D,OAAO,KAET,IAAIS,EAAM,IAAIU,EAAM,IAAInB,EAAG,EACvBiN,EAAS,KACb,GACEA,EAASsO,EAAW,YAAY,MAAM9a,CAAG,QAClC,CAACsb,GAAQ,GAClB,GAAIF,IAAW,GAAO,CACpB,IAAI9N,EAAOd,EAAO,KAClBc,EAAK,aAAa,EAAI,KAAK,MAAMA,EAAK,aAAa,EAAE,SAAS,CAAC,EAC3DA,EAAK,YAAY,IAAM,SACzBA,EAAK,YAAY,EAAIA,EAAK,YAAY,EAAE,SAAS,EAErD,CACA,OAAOd,CACT,QAAE,CACA8K,EAAG,UAAU+D,CAAE,CACjB,CACA,SAASC,IAAU,CACjB,GAAItb,EAAI,QAAQ,EACd,MAAO,GAET,IAAIhC,EAAM,EAAIgC,EAAI,IAAI,OAClBsE,EAAO5D,EAAM,UAAU1C,CAAG,EAC9B,OAAAA,EAAMsZ,EAAG,SAAS+D,EAAI/W,EAAM,EAAGtG,CAAG,EAClCgC,EAAI,IAAM/F,EAAQ,OAAO,CAAC+F,EAAI,IAAKsE,CAAI,CAAC,EACxCtE,EAAI,IAAM,EACH,EACT,CACF,CACA,SAASub,GAAkBnW,EAAMnK,EAAM,CACrC,OAAOqc,EAAG,iBAAiBlS,CAAI,EAAE,KAAK,IAAI0V,EAAW,QAAQ,aAAa7f,CAAI,CAAC,CACjF,CACA,SAASugB,EAAkBpW,EAAMpD,EAAQ/G,EAAM,CAC7C,IAAI0W,EAAU,IAAImJ,EAAW,QAAQ,aAAa9Y,EAAQ/G,CAAI,EAC9D,OAAA0W,EAAQ,KAAK2F,EAAG,kBAAkBlS,EAAM,CAAE,gBAAiB,QAAS,CAAC,CAAC,EAC/DuM,CACT,CACAjY,EAAO,QAAU,CACf,QAASqhB,EAAS,QAClB,KAAMlY,EAAM,KACZ,iBAAkBmY,EAAM,iBACxB,kBAAAO,GACA,kBAAAC,EACA,iBAAkBT,EAAS,iBAC3B,kBAAAI,EACA,MAAOF,EACP,aAAcD,EAAM,aACpB,WAAYA,EAAM,WAClB,QAASF,EAAW,QACpB,MAAOjY,EAAM,SAEb,SAAUkY,EAAS,QACnB,SAAUhhB,EAAK,UACbihB,EAAM,iBACN,gCACF,EACA,QAASjhB,EAAK,UACZ8I,EAAM,KAAK,SACX,4BACF,EACA,MAAO9I,EAAK,UACV8I,EAAM,KAAK,SACX,6BACF,CACF,CACF,CACF,CAAC,EAGG4Y,GAAI,mBACJC,GAAI,eACJC,GAAI,KACJC,GAAI,IACJC,GAAI,mBACJC,GAAI,2BACJC,GAAI,kBACJC,GAAI,mBACJC,GAAI,CAAC,cAAe,kBAAmB,eAAgB,UAAU,EACjEC,GAAI,uBACJC,GAAI,aACJC,GAAI,OACJC,GAAI,gBACJC,GAAI,eACJC,GAAI,iBACJC,GAAI,OACJC,GAAI,gBACJC,GAAI,yBACJC,GAAK,GAAGD,EAAC,yCACTE,GAAK,GAAGF,EAAC,6CACTG,GAAK,GAAGH,EAAC,sCACTI,GAAK,GAAGJ,EAAC,wCACTK,GAAI,GAAGL,EAAC,iCACRM,GAAI,GAAGN,EAAC,sCACRO,GAAI,GAAGP,EAAC,kCACRQ,GAAI,GAAGR,EAAC,8DACRS,GAAI,GAAGT,EAAC,kCACRU,GAAI,GAAGV,EAAC,0BACRW,GAAI,GAAGX,EAAC,qCACRY,GAAI,GAAGZ,EAAC,6BACRa,GAAI,OAAO,aAAe,KAAM,QAAO,aAAa,GAAG,WACvDC,GAAI,OAAO,aAAe,KAAM,QAAO,aAAa,GAAG,WAC3D,OAAOD,GAAI,KAAO,OAAOC,GAAI,KAAO,QAAQ,MAAM,iKAAiK,EACnN,IAAIC,GAAK,CAAE,SAAU,EAAK,EACtBC,GAAMC,GAAM,IAAIA,EAAE,WAAW,CAAC,EAAE,SAAS,EAAE,EAAE,YAAY,CAAC,GAC1DC,GAAKD,GAAM,mBAAmBA,CAAC,EAAE,QAAQ,WAAYD,EAAE,EACvDG,GAAKF,GAAMC,GAAED,CAAC,EAAE,QAAQ,OAAQ,GAAG,EACnCG,GAAI,KAAM,CACZ,YAAY,CAAE,YAAaC,EAAG,gBAAiB7Z,EAAG,SAAU8Z,EAAG,WAAYve,EAAG,OAAQiJ,EAAI,OAAQ,sBAAuB9M,EAAI,QAAS,oBAAqBwC,EAAI,OAAQ,OAAQhB,EAAI,MAAO,EAAG,CAC3L,KAAK,cAAgB,IAAM,KAAK,WAAY,KAAK,cAAiBxC,GAAM,CACtE,KAAK,WAAaA,CACpB,EAAG,KAAK,UAAY,IAAM,KAAK,OAAQ,KAAK,UAAaA,GAAM,CAC7D,KAAK,OAASA,CAChB,EAAG,KAAK,YAAc,IAAM,KAAK,SAAU,KAAK,YAAeA,GAAM,CACnE,KAAK,SAAWA,CAClB,EAAG,KAAK,yBAA2B,IAAM,KAAK,sBAAuB,KAAK,yBAA4BA,GAAM,CAC1G,KAAK,sBAAwBA,CAC/B,EAAG,KAAK,aAAgBA,GAAMqjB,GAAErjB,CAAC,EAAG,KAAK,SAAW,KAAO,CAAE,YAAa,KAAK,YAAa,gBAAiB,KAAK,gBAAiB,OAAQ,KAAK,OAAQ,OAAQ,KAAK,WAAY,SAAU,KAAK,SAAU,sBAAuB,KAAK,sBAAuB,oBAAqB,KAAK,oBAAqB,OAAQ,KAAK,MAAO,GAAI,KAAK,SAAYA,GAAM,CACzV,KAAK,2BAA2BA,EAAE,YAAaA,EAAE,gBAAiBA,EAAE,WAAYA,EAAE,QAAQ,EAAG,KAAK,YAAcA,EAAE,YAAa,KAAK,gBAAkBA,EAAE,gBAAiB,KAAK,OAASA,EAAE,QAAU,OAAQ,KAAK,WAAaA,EAAE,WAAY,KAAK,SAAWA,EAAE,SAAU,KAAK,sBAAwBA,EAAE,uBAAyB,QAAS,KAAK,oBAAsBA,EAAE,oBAAqB,KAAK,OAASA,EAAE,MAC5Y,EAAG,KAAK,2BAA2BmjB,EAAG7Z,EAAG8Z,EAAGve,CAAC,EAAG,KAAK,YAAcse,EAAG,KAAK,gBAAkB7Z,EAAG,KAAK,SAAW8Z,EAAG,KAAK,WAAave,EAAG,KAAK,OAASiJ,EAAG,KAAK,sBAAwB9M,EAAG,KAAK,oBAAsBwC,EAAG,KAAK,OAAShB,CACvO,CACA,2BAA2B2gB,EAAG7Z,EAAG8Z,EAAGve,EAAG,CACrC,GAAI,OAAOse,GAAK,UAAYA,EAAE,KAAK,EAAE,SAAW,EAAG,MAAM,IAAI,UAAUpB,EAAE,EACzE,GAAI,OAAOzY,GAAK,UAAYA,EAAE,KAAK,EAAE,SAAW,EAAG,MAAM,IAAI,UAAU0Y,EAAE,EACzE,GAAI,OAAOoB,GAAK,UAAYA,EAAE,KAAK,EAAE,SAAW,EAAG,MAAM,IAAI,UAAUnB,EAAE,EACzE,GAAI,OAAOpd,GAAK,UAAYA,EAAE,KAAK,EAAE,SAAW,EAAG,MAAM,IAAI,UAAUqd,EAAE,CAC3E,CACA,qBAAqBiB,EAAG,CACtB,GAAIA,IAAM,OAASA,IAAM,OAAQ,MAAM,KAAK,KAAK,QAAS,GAAGrB,EAAC,mCAAmC,EAAG,IAAI,MAAM,mCAAmC,CACnJ,CACA,UAAUqB,EAAG,CACX,GAAI,OAAOA,GAAK,UAAYA,EAAE,KAAK,EAAE,SAAW,EAAG,MAAM,KAAK,KAAK,QAAShB,EAAC,EAAG,IAAI,UAAUA,EAAC,CACjG,CACA,gBAAgBgB,EAAG,CACjB,GAAI,OAAOA,GAAK,UAAYA,EAAE,KAAK,EAAE,SAAW,EAAG,MAAM,KAAK,KAAK,QAAST,EAAC,EAAG,IAAI,UAAUA,EAAC,CACjG,CACA,aAAaS,EAAG,CACd,GAAI,OAAOA,GAAK,SAAU,MAAM,KAAK,KAAK,QAASX,EAAC,EAAG,IAAI,UAAUA,EAAC,CACxE,CACA,cAAcW,EAAG,CACf,GAAI,OAAOA,GAAK,UAAYA,GAAK,EAAG,MAAM,KAAK,KAAK,QAASV,EAAC,EAAG,IAAI,UAAUA,EAAC,CAClF,CACA,WAAWU,EAAG,CACZ,GAAI,OAAOA,GAAK,SAAU,MAAM,KAAK,KAAK,QAAS,GAAGrB,EAAC,wBAAwB,EAAG,IAAI,UAAU,GAAGA,EAAC,wBAAwB,CAC9H,CACA,KAAKqB,EAAG7Z,EAAG8Z,EAAI,CAAC,EAAG,CACjB,GAAI,KAAK,QAAU,OAAO,KAAK,OAAOD,CAAC,GAAK,WAAY,CACtD,IAAIte,EAAKrB,GAAM,OAAOA,GAAK,UAAYA,IAAM,KAAOA,EAAI,OAAO,KAAKA,CAAC,EAAE,OAAO,CAAChB,EAAGxC,KAAOqhB,GAAE,SAASrhB,EAAE,YAAY,CAAC,EAAIwC,EAAExC,CAAC,EAAI,aAAe,OAAOwD,EAAExD,CAAC,GAAK,UAAYwD,EAAExD,CAAC,IAAM,KAAOwC,EAAExC,CAAC,EAAI6E,EAAErB,EAAExD,CAAC,CAAC,EAAIwC,EAAExC,CAAC,EAAIwD,EAAExD,CAAC,EAAGwC,GAAI,MAAM,QAAQgB,CAAC,EAAI,CAAC,EAAI,CAAC,CAAC,EAAGsK,EAAIjJ,EAAEue,CAAC,EAAGpiB,EAAI,CAAE,UAA4B,IAAI,KAAK,EAAG,YAAY,EAAG,MAAOmiB,EAAG,QAAS7Z,EAAG,GAAGwE,EAAG,QAASjJ,EAAE,CAAE,WAAY,KAAK,WAAY,OAAQ,KAAK,OAAQ,SAAU,KAAK,SAAU,YAAa,KAAK,YAAc,GAAG,KAAK,YAAY,UAAU,EAAG,CAAC,CAAC,MAAQ,MAAO,CAAC,CAAE,EACvgB,KAAK,OAAOse,CAAC,EAAEniB,CAAC,CAClB,CACF,CACA,MAAM,iBAAiBmiB,EAAG,CACxB,KAAK,UAAUA,CAAC,EAChB,IAAI7Z,EAAI,CAAE,CAACgY,EAAC,EAAGL,EAAE,EAAGmC,EAAIH,GAAEE,CAAC,EAAG,CAAE,IAAKte,EAAG,QAASiJ,CAAE,EAAI,MAAM,KAAK,MAAM,OAAQsV,EAAG,CAAC,EAAG9Z,EAAG,EAAE,EAAG9F,GAAK,MAAM,KAAK,aAAaqB,EAAG,OAAQiJ,CAAC,GAAG,QAAQ,IAAI6T,EAAC,EACxJ,OAAOne,EAAI,SAASA,EAAG,EAAE,EAAI,CAC/B,CACA,MAAM,cAAe,CACnB,IAAI2f,EAAI,CAAE,CAAC7B,EAAC,EAAGL,EAAE,EAAG,CAAE,IAAK3X,EAAG,QAAS8Z,CAAE,EAAI,MAAM,KAAK,MAAM,OAAQ,GAAI,CAAC,EAAGD,EAAG,EAAE,EAAGte,EAAI,MAAM,KAAK,aAAayE,EAAG,OAAQ8Z,EAAG,GAAI,CAAC,IAAK,IAAK,GAAG,CAAC,EACnJ,OAAO,KAAK,KAAK,QAAS,oBAAoBve,EAAE,OAAQA,EAAE,UAAU,EAAE,EAAG,CAAC,EAAEA,EAAE,IAAMA,EAAE,SAAW,IACnG,CACA,MAAM,cAAe,CACnB,IAAIse,EAAI;AAAA;AAAA,4BAEgB,KAAK,MAAM;AAAA;AAAA,MAEhC7Z,EAAI,CAAE,CAACoY,EAAC,EAAGP,GAAG,CAACQ,EAAC,EAAG,OAAO,WAAWwB,CAAC,EAAE,SAAS,EAAG,CAAC7B,EAAC,EAAG,MAAMgC,GAAEH,CAAC,CAAE,EAAGC,EAAI,UAAU,EAAE,EAAG,CAAE,IAAKve,EAAG,QAASiJ,CAAE,EAAI,MAAM,KAAK,MAAM,MAAOsV,EAAG,CAAC,EAAG9Z,EAAG,EAAE,EAAGtI,EAAI,MAAM,KAAK,aAAa6D,EAAG,MAAOiJ,EAAGqV,EAAG,CAAC,IAAK,IAAK,GAAG,CAAC,EACxN,MAAO,CAAC,EAAEniB,EAAE,IAAMA,EAAE,SAAW,IACjC,CACA,MAAM,WAAWmiB,EAAG7Z,EAAI,CAAC,EAAG,CAC1B,KAAK,UAAU6Z,CAAC,EAChB,GAAI,CAAE,aAAcC,EAAG,mBAAoBve,CAAE,EAAI,KAAK,iBAAiByE,CAAC,EAAGwE,EAAI,CAAE,CAACwT,EAAC,EAAGL,GAAG,GAAGpc,CAAE,EAAG7D,EAAIiiB,GAAEE,CAAC,EAAG,CAAE,IAAK3f,EAAG,QAAShB,CAAE,EAAI,MAAM,KAAK,MAAM,OAAQxB,EAAGoiB,EAAGtV,EAAG,EAAE,EACxK,GAAI,CACF,IAAI9N,EAAI,MAAM,KAAK,aAAawD,EAAG,OAAQhB,EAAG,GAAI,CAAC,IAAK,IAAK,IAAK,GAAG,CAAC,EACtE,OAAOxC,EAAE,SAAW,IAAM,GAAQA,EAAE,SAAW,KAAOA,EAAE,SAAW,IAAM,KAAOA,EAAE,IAAMA,EAAE,SAAW,IAAM,IAAQ,KAAK,qBAAqBA,CAAC,EAAG,GACnJ,OAASA,EAAG,CACV,IAAIiB,EAAIjB,aAAa,MAAQA,EAAE,QAAU,OAAOA,CAAC,EACjD,MAAM,KAAK,KAAK,QAAS,GAAG8hB,EAAC,mCAAmC7gB,CAAC,EAAE,EAAG,IAAI,MAAM,GAAG6gB,EAAC,mCAAmC7gB,CAAC,EAAE,CAC5H,CACF,CACA,MAAM,MAAMkiB,EAAG7Z,EAAG8Z,EAAI,CAAC,EAAGve,EAAGiJ,EAAG,CAC9B,IAAI9M,EAAqB,IAAI,KAAK,EAAG,YAAY,EAAE,QAAQ,gBAAiB,EAAE,EAAGwC,EAAI,OAAO8F,GAAK,UAAYA,EAAE,OAAS,EAAI,IAAI,IAAIA,EAAG,KAAK,QAAQ,EAAI,IAAI,IAAI,KAAK,QAAQ,EAC7K9F,EAAE,SAAW,IAAI,UAAU,KAAK,UAAU,CAAC,GAAGA,EAAE,QAAQ,GAAIqB,EAAEyc,EAAC,EAAIxT,EAAI,MAAMwV,GAAExV,CAAC,EAAImT,GAAGpc,EAAE0c,EAAC,EAAIvgB,EAAG6D,EAAE2c,EAAC,EAAIhe,EAAE,KAC1G,IAAIhB,EAAI,KAAK,uBAAuBqC,CAAC,EAAG7E,EAAI,OAAO,KAAK6E,CAAC,EAAE,IAAK0e,IAAMA,GAAE,YAAY,CAAC,EAAE,KAAK,EAAE,KAAK,GAAG,EAAGtiB,EAAI,MAAM,KAAK,uBAAuBkiB,EAAG3f,EAAG4f,EAAG5gB,EAAGxC,EAAG8N,CAAC,EAAG/I,EAAI,MAAM,KAAK,mBAAmB/D,EAAGC,CAAC,EAAGiE,EAAI,MAAM,KAAK,oBAAoBlE,EAAG+D,CAAC,EAAGye,EAAI,KAAK,0BAA0BxiB,EAAGhB,EAAGkF,CAAC,EAC/R,OAAOL,EAAE4c,EAAC,EAAI+B,EAAG,CAAE,IAAKhgB,EAAE,SAAS,EAAG,QAASqB,CAAE,CACnD,CACA,uBAAuBse,EAAG,CACxB,OAAO,OAAO,QAAQA,CAAC,EAAE,IAAI,CAAC,CAAC7Z,EAAG8Z,CAAC,IAAM,GAAG9Z,EAAE,YAAY,CAAC,IAAI,OAAO8Z,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK;AAAA,CAClG,CACC,CACA,MAAM,uBAAuBD,EAAG7Z,EAAG8Z,EAAGve,EAAGiJ,EAAG9M,EAAG,CAC7C,MAAO,CAACmiB,EAAG7Z,EAAE,SAAU,KAAK,2BAA2B8Z,CAAC,EAAG,GAAGve,CAAC;AAAA,EAChEiJ,EAAG9M,EAAI,MAAMsiB,GAAEtiB,CAAC,EAAIigB,EAAC,EAAE,KAAK;AAAA,CAC9B,CACC,CACA,MAAM,mBAAmBkC,EAAG7Z,EAAG,CAC7B,IAAI8Z,EAAI,CAACD,EAAE,MAAM,EAAG,CAAC,EAAG,KAAK,OAAQpC,GAAGD,EAAC,EAAE,KAAK,GAAG,EACnD,MAAO,CAACD,GAAGsC,EAAGC,EAAG,MAAME,GAAEha,CAAC,CAAC,EAAE,KAAK;AAAA,CACrC,CACC,CACA,MAAM,oBAAoB6Z,EAAG7Z,EAAG,CAC9B,IAAI8Z,EAAI,MAAM,KAAK,iBAAiBD,EAAE,MAAM,EAAG,CAAC,CAAC,EACjD,OAAOM,GAAEL,EAAG9Z,EAAG,KAAK,CACtB,CACA,0BAA0B6Z,EAAG7Z,EAAG8Z,EAAG,CACjC,IAAIve,EAAI,CAACse,EAAE,MAAM,EAAG,CAAC,EAAG,KAAK,OAAQpC,GAAGD,EAAC,EAAE,KAAK,GAAG,EACnD,MAAO,CAAC,GAAGD,EAAC,eAAe,KAAK,WAAW,IAAIhc,CAAC,GAAI,iBAAiByE,CAAC,GAAI,aAAa8Z,CAAC,EAAE,EAAE,KAAK,IAAI,CACvG,CACA,iBAAiBD,EAAG,CAClB,IAAI7Z,EAAI,CAAC,EAAG8Z,EAAI,CAAC,EAAGve,EAAI,CAAC,WAAY,gBAAiB,oBAAqB,qBAAqB,EAChG,OAAS,CAACiJ,EAAG9M,CAAC,IAAK,OAAO,QAAQmiB,CAAC,EAAGte,EAAE,SAASiJ,CAAC,EAAIsV,EAAEtV,CAAC,EAAI9M,EAAIsI,EAAEwE,CAAC,EAAI9M,EACxE,MAAO,CAAE,aAAcsI,EAAG,mBAAoB8Z,CAAE,CAClD,CACA,MAAM,KAAKD,EAAI,IAAK7Z,EAAI,GAAI8Z,EAAI,IAAKve,EAAI,MAAOiJ,EAAI,CAAC,EAAG,CACtD,KAAK,gBAAgBqV,CAAC,EAAG,KAAK,aAAa7Z,CAAC,EAAG,KAAK,cAAc8Z,CAAC,EAAG,KAAK,qBAAqBve,CAAC,EAAG,KAAK,WAAWiJ,CAAC,EAAG,KAAK,KAAK,OAAQ,sBAAsBxE,CAAC,EAAE,EACnK,IAAItI,EAAI,CAAE,YAAaggB,GAAG,WAAY,OAAOoC,CAAC,EAAG,GAAGtV,CAAE,EACtDxE,EAAE,OAAS,IAAMtI,EAAE,OAASsI,GAC5B,IAAI9F,EAAI,CAAE,CAACke,EAAC,EAAGN,GAAG,CAACE,EAAC,EAAGL,EAAE,EAAGze,EAAI2gB,IAAM,IAAMA,EAAIH,GAAEG,CAAC,EAAG,CAAE,IAAKnjB,EAAG,QAASiB,CAAE,EAAI,MAAM,KAAK,MAAM,MAAOuB,EAAGxB,EAAGwC,EAAG,EAAE,EAAGuB,EAAI,GAAG/E,CAAC,IAAI,IAAI,gBAAgBgB,CAAC,CAAC,GAAIkE,EAAI,MAAM,KAAK,aAAaH,EAAG,MAAO9D,CAAC,EAAGuiB,EAAI,MAAMte,EAAE,KAAK,EACtN,GAAIL,IAAM,OAAQ,CAChB,IAAI6e,EAAIxe,EAAE,QAAQ,IAAIyc,EAAC,EAAGgC,EAAIze,EAAE,QAAQ,IAAI2c,EAAC,EAAG+B,EAAI1e,EAAE,QAAQ,IAAI0c,EAAC,EACnE,MAAO,CAAE,KAAM8B,EAAI,CAACA,EAAI,OAAQ,MAAOC,EAAI,IAAI,KAAKA,CAAC,EAAI,OAAQ,KAAMC,GAAK,MAAO,CACrF,CACA,IAAIL,GAAIM,GAAEL,CAAC,EAAGM,EAAIP,GAAE,kBAAoBA,GAAE,OAASA,GACnD,OAAOO,EAAE,UAAYA,CACvB,CACA,MAAM,qBAAqBX,EAAI,IAAK7Z,EAAI,GAAI8Z,EAAI,MAAOve,EAAI,CAAC,EAAG,CAC7D,IAAIiJ,EAAG9M,EAAGwC,EACV,KAAK,gBAAgB2f,CAAC,EAAG,KAAK,aAAa7Z,CAAC,EAAG,KAAK,qBAAqB8Z,CAAC,EAAG,KAAK,WAAWve,CAAC,EAAG,KAAK,KAAK,OAAQ,gCAAgCyE,CAAC,EAAE,EACtJ,IAAI9G,EAAI,CAAE,QAAS,GAAI,GAAGqC,CAAE,EAAG7E,EAAI,CAAE,CAAC0hB,EAAC,EAAGN,GAAG,CAACE,EAAC,EAAGL,EAAE,EAAGhgB,EAAIkiB,IAAM,IAAMA,EAAIH,GAAEG,CAAC,EAAG,CAAE,IAAKpe,EAAG,QAASG,CAAE,EAAI,MAAM,KAAK,MAAM,MAAOjE,EAAGuB,EAAGxC,EAAG,EAAE,EAAGwjB,EAAI,GAAGze,CAAC,IAAI,IAAI,gBAAgBvC,CAAC,CAAC,GAAI+gB,GAAI,MAAM,KAAK,aAAaC,EAAG,MAAOte,CAAC,EAAG4e,EAAI,MAAMP,GAAE,KAAK,EACjP,GAAIH,IAAM,OAAQ,MAAO,CAAE,KAAM,GAAGtV,EAAIyV,GAAE,QAAQ,IAAI5B,EAAC,KAAO,MAAQ7T,IAAM,OAASA,EAAI,KAAM,MAAO,IAAI,MAAM9M,EAAIuiB,GAAE,QAAQ,IAAI1B,EAAC,KAAO,MAAQ7gB,IAAM,OAASA,EAAI,EAAE,EAAG,MAAOwC,EAAI+f,GAAE,QAAQ,IAAI3B,EAAC,KAAO,MAAQpe,IAAM,OAASA,EAAI,EAAG,EACzO,IAAIkgB,EAAIG,GAAEC,CAAC,EAAGH,EAAID,EAAE,4BAA8BA,EAAE,OAASA,EAC7D,OAAOC,EAAE,SAAWA,CACtB,CACA,MAAM,IAAIR,EAAG7Z,EAAI,CAAC,EAAG,CACnB,KAAK,UAAU6Z,CAAC,EAAG,KAAK,KAAK,OAAQ,kBAAkBA,CAAC,EAAE,EAC1D,GAAI,CAAE,aAAcC,EAAG,mBAAoBve,CAAE,EAAI,KAAK,iBAAiByE,CAAC,EAAGwE,EAAI,CAAE,CAAC4T,EAAC,EAAGN,GAAG,CAACE,EAAC,EAAGL,GAAG,GAAGpc,CAAE,EAAG7D,EAAIiiB,GAAEE,CAAC,EAAG,CAAE,IAAK3f,EAAG,QAAShB,CAAE,EAAI,MAAM,KAAK,MAAM,MAAOxB,EAAGoiB,EAAGtV,EAAG,EAAE,EAAG9N,EAAI,MAAM,KAAK,aAAawD,EAAG,MAAOhB,EAAG,GAAI,CAAC,IAAK,IAAK,IAAK,GAAG,CAAC,EACnP,GAAIxC,EAAE,SAAW,KAAOA,EAAE,SAAW,KAAOA,EAAE,SAAW,IAAK,OAAO,KAAK,KAAK,QAAS,iCAAiCA,EAAE,MAAM,EAAE,EAAG,KACtI,GAAI,CAACA,EAAE,GAAI,MAAM,KAAK,KAAK,QAAS,iCAAiCA,EAAE,MAAM,EAAE,EAAG,IAAI,MAAM,iCAAiCA,EAAE,MAAM,EAAE,EACvI,OAAOA,CACT,CACA,MAAM,kBAAkBmjB,EAAG7Z,EAAI,CAAC,EAAG,CACjC,KAAK,UAAU6Z,CAAC,EAAG,KAAK,KAAK,OAAQ,kBAAkBA,CAAC,EAAE,EAC1D,GAAI,CAAE,aAAcC,EAAG,mBAAoBve,CAAE,EAAI,KAAK,iBAAiByE,CAAC,EAAGwE,EAAI,CAAE,CAAC4T,EAAC,EAAGN,GAAG,CAACE,EAAC,EAAGL,GAAG,GAAGpc,CAAE,EAAG7D,EAAIiiB,GAAEE,CAAC,EAAG,CAAE,IAAK3f,EAAG,QAAShB,CAAE,EAAI,MAAM,KAAK,MAAM,MAAOxB,EAAGoiB,EAAGtV,EAAG,EAAE,EAC/K,GAAI,CACF,IAAI9N,EAAI,MAAM,KAAK,aAAawD,EAAG,MAAOhB,EAAG,GAAI,CAAC,IAAK,IAAK,IAAK,GAAG,CAAC,EACrE,GAAIxC,EAAE,SAAW,KAAOA,EAAE,SAAW,KAAOA,EAAE,SAAW,IAAK,OAAO,KAAK,KAAK,QAAS,iCAAiCA,EAAE,MAAM,EAAE,EAAG,CAAE,KAAM,KAAM,KAAM,IAAK,EAC/J,GAAI,CAACA,EAAE,GAAI,MAAM,KAAK,KAAK,QAAS,iCAAiCA,EAAE,MAAM,EAAE,EAAG,IAAI,MAAM,iCAAiCA,EAAE,MAAM,EAAE,EACvI,IAAIiB,EAAIjB,EAAE,QAAQ,IAAI,MAAM,EAC5B,GAAI,CAACiB,EAAG,MAAM,IAAI,MAAM,oCAAoC,EAC5D,IAAI8D,EAAI,MAAM/E,EAAE,KAAK,EACrB,MAAO,CAAE,KAAMqjB,GAAEpiB,CAAC,EAAG,KAAM8D,CAAE,CAC/B,OAAS/E,EAAG,CACV,MAAM,KAAK,KAAK,QAAS,wBAAwBmjB,CAAC,eAAenjB,CAAC,EAAE,EAAGA,CACzE,CACF,CACA,MAAM,QAAQmjB,EAAG7Z,EAAI,CAAC,EAAG,CACvB,KAAK,UAAU6Z,CAAC,EAAG,KAAK,KAAK,OAAQ,uBAAuBA,CAAC,EAAE,EAC/D,GAAI,CAAE,aAAcC,EAAG,mBAAoBve,CAAE,EAAI,KAAK,iBAAiByE,CAAC,EAAGwE,EAAI,CAAE,CAAC4T,EAAC,EAAGN,GAAG,CAACE,EAAC,EAAGL,GAAG,GAAGpc,CAAE,EAAG7D,EAAIiiB,GAAEE,CAAC,EAAG,CAAE,IAAK3f,EAAG,QAAShB,CAAE,EAAI,MAAM,KAAK,MAAM,OAAQxB,EAAGoiB,EAAGtV,EAAG,EAAE,EAAG9N,EAAI,MAAM,KAAK,aAAawD,EAAG,OAAQhB,EAAG,GAAI,CAAC,IAAK,IAAK,GAAG,CAAC,EAChP,GAAI,KAAK,KAAK,OAAQ,oBAAoBxC,EAAE,OAAQA,EAAE,UAAU,EAAE,EAAGA,EAAE,SAAW,KAAOA,EAAE,SAAW,IAAK,OAAO,KAClH,IAAIiB,EAAIjB,EAAE,QAAQ,IAAI,MAAM,EAC5B,GAAI,CAACiB,EAAG,MAAM,KAAK,KAAK,QAAS,oCAAoC,EAAG,IAAI,MAAM,oCAAoC,EACtH,OAAOoiB,GAAEpiB,CAAC,CACZ,CACA,MAAM,YAAYkiB,EAAG7Z,EAAI,GAAM8Z,EAAI,EAAGve,EAAI,KAAK,sBAAuBiJ,EAAI,CAAC,EAAG,CAC5E,KAAK,UAAUqV,CAAC,EAChB,GAAI,CAAE,aAAcniB,EAAG,mBAAoBwC,CAAE,EAAI,KAAK,iBAAiB,CAAE,GAAGsK,CAAE,CAAC,EAAGtL,EAAI,CAAE,CAACkf,EAAC,EAAGN,GAAG,CAACE,EAAC,EAAGL,GAAG,GAAG3X,EAAI,CAAC,EAAI,CAAE,MAAO,SAAS8Z,CAAC,IAAIve,EAAI,CAAC,EAAG,EAAG,GAAGrB,CAAE,EAAGxD,EAAIijB,GAAEE,CAAC,EAAG,CAAE,IAAKliB,EAAG,QAAS8D,CAAE,EAAI,MAAM,KAAK,MAAM,MAAO/E,EAAGgB,EAAGwB,EAAG,EAAE,EAAG0C,EAAI,GAAGjE,CAAC,IAAI,IAAI,gBAAgBD,CAAC,CAAC,GACzQ,OAAO,KAAK,aAAakE,EAAG,MAAOH,CAAC,CACtC,CACA,MAAM,IAAIoe,EAAG7Z,EAAG,CACd,GAAI,KAAK,UAAU6Z,CAAC,EAAG,EAAE7Z,aAAa,QAAU,OAAOA,GAAK,UAAW,MAAM,KAAK,KAAK,QAASiZ,EAAC,EAAG,IAAI,UAAUA,EAAC,EACnH,KAAK,KAAK,OAAQ,oBAAoBY,CAAC,EAAE,EACzC,IAAIC,EAAI,OAAO9Z,GAAK,SAAW,OAAO,WAAWA,CAAC,EAAIA,EAAE,OAAQzE,EAAI,CAAE,CAAC8c,EAAC,EAAGyB,CAAE,EAAGtV,EAAImV,GAAEE,CAAC,EAAG,CAAE,IAAKniB,EAAG,QAASwC,CAAE,EAAI,MAAM,KAAK,MAAM,MAAOsK,EAAG,CAAC,EAAGjJ,EAAGyE,CAAC,EACtJ,OAAO,KAAK,aAAatI,EAAG,MAAOwC,EAAG8F,EAAG,CAAC,GAAG,CAAC,CAChD,CACA,MAAM,qBAAqB6Z,EAAG7Z,EAAI4X,GAAG,CACnC,GAAI,KAAK,UAAUiC,CAAC,EAAG,OAAO7Z,GAAK,SAAU,MAAM,KAAK,KAAK,QAAS,GAAGwY,EAAC,2BAA2B,EAAG,IAAI,UAAU,GAAGA,EAAC,2BAA2B,EACrJ,KAAK,KAAK,OAAQ,0CAA0CqB,CAAC,EAAE,EAC/D,IAAIC,EAAI,CAAE,QAAS,EAAG,EAAGve,EAAI,CAAE,CAAC6c,EAAC,EAAGpY,EAAG,CAACgY,EAAC,EAAGL,EAAE,EAAGnT,EAAImV,GAAEE,CAAC,EAAG,CAAE,IAAKniB,EAAG,QAASwC,CAAE,EAAI,MAAM,KAAK,MAAM,OAAQsK,EAAGsV,EAAGve,EAAG,EAAE,EAAGrC,EAAI,GAAGxB,CAAC,IAAI,IAAI,gBAAgBoiB,CAAC,CAAC,GAAIniB,EAAI,MAAO,MAAM,KAAK,aAAauB,EAAG,OAAQgB,CAAC,GAAG,KAAK,EAAGuB,EAAI8e,GAAE5iB,CAAC,EAClO,GAAI,OAAO8D,GAAK,UAAYA,IAAM,MAAQ,UAAWA,GAAK,OAAOA,EAAE,OAAS,UAAYA,EAAE,QAAU,MAAQ,YAAaA,EAAE,MAAO,CAChI,IAAIG,EAAI,OAAOH,EAAE,MAAM,OAAO,EAC9B,MAAM,KAAK,KAAK,QAAS,GAAG+c,EAAC,qCAAqC5c,CAAC,EAAE,EAAG,IAAI,MAAM,GAAG4c,EAAC,qCAAqC5c,CAAC,EAAE,CAChI,CACA,GAAI,OAAOH,GAAK,UAAYA,IAAM,KAAM,CACtC,GAAI,CAACA,EAAE,+BAAiC,CAACA,EAAE,8BAA8B,SAAU,MAAM,KAAK,KAAK,QAAS,GAAG+c,EAAC,4DAA4D,EAAG,IAAI,MAAM,GAAGA,EAAC,kEAAkE,EAC/P,OAAO/c,EAAE,8BAA8B,QACzC,KAAO,OAAM,KAAK,KAAK,QAAS,GAAG+c,EAAC,+DAA+D,EAAG,IAAI,MAAM,GAAGA,EAAC,+DAA+D,CACrL,CACA,MAAM,WAAWqB,EAAG7Z,EAAG8Z,EAAGve,EAAGiJ,EAAI,CAAC,EAAG,CACnC,KAAK,0BAA0BqV,EAAG7Z,EAAG8Z,EAAGve,EAAGiJ,CAAC,EAC5C,IAAI9M,EAAI,CAAE,SAAUoiB,EAAG,WAAYve,EAAG,GAAGiJ,CAAE,EAAGtK,EAAI,CAAE,CAACme,EAAC,EAAGrY,EAAE,MAAO,EAAG9G,EAAIygB,GAAEE,CAAC,EAAG,CAAE,IAAKnjB,EAAG,QAASiB,CAAE,EAAI,MAAM,KAAK,MAAM,MAAOuB,EAAGxB,EAAGwC,EAAG8F,CAAC,EAAGvE,EAAI,GAAG/E,CAAC,IAAI,IAAI,gBAAgBgB,CAAC,CAAC,GAAIkE,EAAI,MAAM,KAAK,aAAaH,EAAG,MAAO9D,EAAGqI,CAAC,EAAGka,EAAIH,GAAEne,EAAE,QAAQ,IAAI,MAAM,GAAK,EAAE,EACjQ,MAAO,CAAE,WAAYL,EAAG,KAAM2e,CAAE,CAClC,CACA,0BAA0BL,EAAG7Z,EAAG8Z,EAAGve,EAAGiJ,EAAG,CACvC,GAAI,KAAK,UAAUqV,CAAC,EAAG,EAAE7Z,aAAa,QAAU,OAAOA,GAAK,UAAW,MAAM,KAAK,KAAK,QAASiZ,EAAC,EAAG,IAAI,UAAUA,EAAC,EACnH,GAAI,OAAOa,GAAK,UAAYA,EAAE,KAAK,EAAE,SAAW,EAAG,MAAM,KAAK,KAAK,QAAShB,EAAC,EAAG,IAAI,UAAUA,EAAC,EAC/F,GAAI,CAAC,OAAO,UAAUvd,CAAC,GAAKA,GAAK,EAAG,MAAM,KAAK,KAAK,QAAS,GAAGid,EAAC,uCAAuC,EAAG,IAAI,UAAU,GAAGA,EAAC,uCAAuC,EACpK,KAAK,WAAWhU,CAAC,CACnB,CACA,MAAM,wBAAwBqV,EAAG7Z,EAAG8Z,EAAG,CACrC,GAAI,KAAK,UAAUD,CAAC,EAAG,OAAO7Z,GAAK,UAAYA,EAAE,KAAK,EAAE,SAAW,EAAG,MAAM,KAAK,KAAK,QAAS8Y,EAAC,EAAG,IAAI,UAAUA,EAAC,EAClH,GAAI,CAAC,MAAM,QAAQgB,CAAC,GAAKA,EAAE,SAAW,EAAG,MAAM,KAAK,KAAK,QAASf,EAAC,EAAG,IAAI,UAAUA,EAAC,EACrF,GAAI,CAACe,EAAE,MAAOG,GAAM,OAAOA,EAAE,YAAc,UAAY,OAAOA,EAAE,MAAQ,QAAQ,EAAG,MAAM,KAAK,KAAK,QAASjB,EAAC,EAAG,IAAI,UAAUA,EAAC,EAC/H,KAAK,KAAK,OAAQ,6BAA6BhZ,CAAC,eAAe6Z,CAAC,EAAE,EAClE,IAAIte,EAAI,CAAE,SAAUyE,CAAE,EAAGwE,EAAI,KAAK,iCAAiCsV,CAAC,EAAGpiB,EAAI,CAAE,CAAC0gB,EAAC,EAAGP,GAAG,CAACQ,EAAC,EAAG,OAAO,WAAW7T,CAAC,EAAE,SAAS,EAAG,CAACwT,EAAC,EAAG,MAAMgC,GAAExV,CAAC,CAAE,EAAGtK,EAAIyf,GAAEE,CAAC,EAAG,CAAE,IAAK3gB,EAAG,QAASxC,CAAE,EAAI,MAAM,KAAK,MAAM,OAAQwD,EAAGqB,EAAG7D,EAAG8M,CAAC,EAAG7M,EAAI,GAAGuB,CAAC,IAAI,IAAI,gBAAgBqC,CAAC,CAAC,GAAIK,EAAI,MAAO,MAAM,KAAK,aAAajE,EAAG,OAAQjB,EAAG8N,CAAC,GAAG,KAAK,EAAG0V,EAAIK,GAAE3e,CAAC,EACjU,GAAI,OAAOse,GAAK,UAAYA,IAAM,MAAQ,UAAWA,GAAK,OAAOA,EAAE,OAAS,UAAYA,EAAE,QAAU,MAAQ,YAAaA,EAAE,MAAO,CAChI,IAAID,EAAI,OAAOC,EAAE,MAAM,OAAO,EAC9B,MAAM,KAAK,KAAK,QAAS,GAAG1B,EAAC,qCAAqCyB,CAAC,EAAE,EAAG,IAAI,MAAM,GAAGzB,EAAC,qCAAqCyB,CAAC,EAAE,CAChI,CACA,OAAOC,EAAE,6BACX,CACA,MAAM,qBAAqBL,EAAG7Z,EAAG,CAC/B,GAAI,KAAK,UAAU6Z,CAAC,EAAG,OAAO7Z,GAAK,UAAYA,EAAE,KAAK,EAAE,SAAW,EAAG,MAAM,KAAK,KAAK,QAAS8Y,EAAC,EAAG,IAAI,UAAUA,EAAC,EAClH,KAAK,KAAK,OAAQ,6BAA6B9Y,CAAC,eAAe6Z,CAAC,EAAE,EAClE,IAAIC,EAAI,CAAE,SAAU9Z,CAAE,EAAGzE,EAAI,CAAE,CAAC6c,EAAC,EAAGP,GAAG,CAACG,EAAC,EAAGL,EAAE,EAC9C,GAAI,CACF,IAAInT,EAAImV,GAAEE,CAAC,EAAG,CAAE,IAAKniB,EAAG,QAASwC,CAAE,EAAI,MAAM,KAAK,MAAM,SAAUsK,EAAGsV,EAAGve,EAAG,EAAE,EAAGrC,EAAI,GAAGxB,CAAC,IAAI,IAAI,gBAAgBoiB,CAAC,CAAC,GAAIpjB,EAAI,MAAM,KAAK,aAAawC,EAAG,SAAUgB,CAAC,EAChK,GAAIxD,EAAE,GAAI,CACR,IAAIiB,EAAI,MAAMjB,EAAE,KAAK,EAAG+E,EAAI8e,GAAE5iB,CAAC,EAC/B,GAAI,OAAO8D,GAAK,UAAYA,IAAM,MAAQ,UAAWA,GAAK,OAAOA,EAAE,OAAS,UAAYA,EAAE,QAAU,MAAQ,YAAaA,EAAE,MAAO,CAChI,IAAIG,EAAI,OAAOH,EAAE,MAAM,OAAO,EAC9B,MAAM,KAAK,KAAK,QAAS,GAAG+c,EAAC,qCAAqC5c,CAAC,EAAE,EAAG,IAAI,MAAM,GAAG4c,EAAC,qCAAqC5c,CAAC,EAAE,CAChI,CACA,MAAO,CAAE,OAAQ,UAAW,IAAKie,EAAG,SAAU7Z,EAAG,SAAUvE,CAAE,CAC/D,KAAO,OAAM,KAAK,KAAK,QAAS,GAAG+c,EAAC,oCAAoC9hB,EAAE,MAAM,EAAE,EAAG,IAAI,MAAM,GAAG8hB,EAAC,oCAAoC9hB,EAAE,MAAM,EAAE,CACnJ,OAAS8N,EAAG,CACV,IAAI9M,EAAI8M,aAAa,MAAQA,EAAE,QAAU,OAAOA,CAAC,EACjD,MAAM,KAAK,KAAK,QAAS,GAAGgU,EAAC,4CAA4CqB,CAAC,KAAKniB,CAAC,EAAE,EAAG,IAAI,MAAM,GAAG8gB,EAAC,4CAA4CqB,CAAC,KAAKniB,CAAC,EAAE,CAC1J,CACF,CACA,iCAAiCmiB,EAAG,CAClC,MAAO;AAAA;AAAA,UAEDA,EAAE,IAAK7Z,GAAM;AAAA;AAAA,0BAEGA,EAAE,UAAU;AAAA,oBAClBA,EAAE,IAAI;AAAA;AAAA,SAEjB,EAAE,KAAK,EAAE,CAAC;AAAA;AAAA,KAGjB,CACA,MAAM,OAAO6Z,EAAG,CACd,KAAK,UAAUA,CAAC,EAAG,KAAK,KAAK,OAAQ,mBAAmBA,CAAC,EAAE,EAC3D,IAAI7Z,EAAI,CAAE,CAACoY,EAAC,EAAGN,GAAG,CAACE,EAAC,EAAGL,EAAE,EAAGmC,EAAIH,GAAEE,CAAC,EAAG,CAAE,IAAKte,EAAG,QAASiJ,CAAE,EAAI,MAAM,KAAK,MAAM,SAAUsV,EAAG,CAAC,EAAG9Z,EAAG,EAAE,EAAGtI,EAAI,MAAM,KAAK,aAAa6D,EAAG,SAAUiJ,CAAC,EACnJ,OAAO9M,EAAE,SAAW,KAAOA,EAAE,SAAW,GAC1C,CACA,MAAM,aAAamiB,EAAG7Z,EAAG8Z,EAAGve,EAAGiJ,EAAI,CAAC,EAAG,CACrC,KAAK,KAAK,OAAQ,WAAWxE,CAAC,eAAe6Z,CAAC,cAAc,KAAK,UAAUC,CAAC,CAAC,EAAE,EAC/E,IAAIpiB,EAAI,MAAM,MAAMmiB,EAAG,CAAE,OAAQ7Z,EAAG,QAAS8Z,EAAG,KAAM,CAAC,MAAO,MAAM,EAAE,SAAS9Z,CAAC,EAAI,OAASzE,EAAG,OAAQ,KAAK,sBAAwB,OAAS,YAAY,QAAQ,KAAK,mBAAmB,EAAI,MAAO,CAAC,EACtM,OAAO,KAAK,KAAK,OAAQ,oBAAoB7D,EAAE,OAAQ8M,CAAC,EAAE,EAAG,CAAC9M,EAAE,IAAM,CAAC8M,EAAE,SAAS9M,EAAE,MAAM,GAAK,MAAM,KAAK,qBAAqBA,CAAC,EAAGA,CACrI,CACA,MAAM,qBAAqBmiB,EAAG,CAC5B,IAAI7Z,EAAI,MAAM6Z,EAAE,KAAK,EAAGC,EAAID,EAAE,QAAQ,IAAI,kBAAkB,GAAK,UAAWte,EAAIse,EAAE,QAAQ,IAAI,qBAAqB,GAAKA,EAAE,WAC1H,MAAM,KAAK,KAAK,QAAS,GAAGrB,EAAC,8BAA8BqB,EAAE,MAAM,KAAKC,CAAC,MAAMve,CAAC,cAAcyE,CAAC,EAAE,EAAG,IAAI,MAAM,GAAGwY,EAAC,8BAA8BqB,EAAE,MAAM,KAAKC,CAAC,MAAMve,CAAC,eAAeyE,CAAC,EAAE,CACzL,CACA,2BAA2B6Z,EAAG,CAC5B,OAAO,OAAO,KAAKA,CAAC,EAAE,OAAS,EAAI,GAAK,OAAO,KAAKA,CAAC,EAAE,KAAK,EAAE,IAAK7Z,GAAM,GAAG,mBAAmBA,CAAC,CAAC,IAAI,mBAAmB6Z,EAAE7Z,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,GAAG,CAC3I,CACA,MAAM,iBAAiB6Z,EAAG,CACxB,IAAI7Z,EAAI,MAAMma,GAAE,OAAO,KAAK,eAAe,GAAIN,CAAC,EAAGC,EAAI,MAAMK,GAAEna,EAAG,KAAK,MAAM,EAAGzE,EAAI,MAAM4e,GAAEL,EAAGrC,EAAC,EAChG,OAAO0C,GAAE5e,EAAGic,EAAC,CACf,CACF,EACIwC,GAAI,MAAOP,GAAM,CACnB,IAAII,EAAIP,GAAE,QAAQ,EAClB,OAAOO,EAAE,OAAOJ,CAAC,EAAGI,EAAE,OAAO,KAAK,CACpC,EACIM,GAAI,MAAOV,EAAGI,EAAG7Z,IAAM,CACzB,IAAI8Z,EAAIT,GAAE,SAAUI,CAAC,EACrB,OAAOK,EAAE,OAAOD,CAAC,EAAGC,EAAE,OAAO9Z,CAAC,CAChC,EACI+Z,GAAKN,GAAM,CACb,IAAII,EAAI,CAAE,IAAK,GAAI,SAAU,GAAI,QAAS,GAAI,SAAU,GAAI,WAAY,EAAG,EAC3E,OAAOJ,EAAE,QAAQ,uCAAyCzZ,GAAM6Z,EAAE7Z,CAAC,CAAC,CACtE,EACIua,GAAKd,GAAM,CACb,IAAII,EAAKrV,GAAMA,EAAE,QAAQ,UAAW,GAAG,EAAE,QAAQ,UAAW,GAAG,EAAE,QAAQ,QAAS,GAAG,EAAE,QAAQ,QAAS,GAAG,EAAE,QAAQ,SAAU,GAAG,EAAGxE,EAAI,CAAC,EAAG8Z,EAAI,2DAA4Dve,EAC7M,KAAOA,EAAIue,EAAE,KAAKL,CAAC,GAAK,CACtB,GAAI,CAAC,CAAEjV,EAAG9M,EAAGwC,CAAC,EAAIqB,EAAGrC,EAAIsL,EAAE,YAAY,EAAI9M,EAAGhB,EAAIwD,GAAK,KAAOqgB,GAAErgB,CAAC,EAAI,GACrE,OAAOxD,GAAK,SAAWsJ,EAAE9G,CAAC,EAAI6gB,GAAEF,EAAEnjB,CAAC,CAAC,EAAI,MAAM,QAAQsJ,EAAE9G,CAAC,CAAC,EAAI8G,EAAE9G,CAAC,EAAE,KAAKxC,CAAC,EAAIsJ,EAAE9G,CAAC,EAAI8G,EAAE9G,CAAC,GAAK,KAAO,CAAC8G,EAAE9G,CAAC,EAAGxC,CAAC,EAAI6iB,GAAGrgB,CAAC,EAAI,CAACxC,CAAC,EAAIA,CAC/H,CACA,OAAO,OAAO,KAAKsJ,CAAC,EAAE,OAASA,EAAI6Z,EAAEJ,CAAC,CACxC,EAGIgB,GAAcxlB,GAAQ0hB,GAAY,EAAG,CAAC,EAGtC+D,EAAyB,CAC3B,iBAAkB,mBAClB,kBAAmB,oBACnB,wBAAyB,0BACzB,uBAAwB,yBACxB,wBAAyB,0BACzB,wBAAyB,0BACzB,+BAAgC,iCAChC,qBAAsB,uBACtB,wBAAyB,0BACzB,0BAA2B,4BAC3B,mBAAoB,qBACpB,WAAY,aACZ,eAAgB,iBAChB,gBAAiB,kBACjB,aAAc,eACd,aAAc,eACd,iBAAkB,mBAClB,aAAc,eACd,YAAa,cACb,cAAe,eACjB,EACIC,GAAkB,cAAc,KAAM,CACxC,YAAYpF,EAASqF,EAAOF,EAAuB,cAAe,CAChE,MAAM,oBAAoBnF,CAAO,aAAaqF,CAAI,EAAE,EACpD,KAAK,KAAO,KAAK,YAAY,KAC7B,KAAK,KAAOA,EACZ,MAAM,kBAAkB,KAAM,KAAK,WAAW,CAChD,CACF,EACIC,GAAwB,cAAcF,EAAgB,CACxD,YAAYpF,EAASqF,EAAOF,EAAuB,wBAAyB,CAC1E,MAAMnF,EAASmF,EAAuB,uBAAuB,CAC/D,CACF,EACII,GAA0B,cAAcH,EAAgB,CAC1D,YAAYpF,EAASqF,EAAOF,EAAuB,0BAA2B,CAC5E,MAAMnF,EAASmF,EAAuB,yBAAyB,CACjE,CACF,EACIK,GAAmB,cAAcJ,EAAgB,CACnD,YAAYpF,EAASyF,EAAW,CAC9B,MAAM,MAAMA,CAAS,sBAAsBzF,CAAO,GAAImF,EAAuB,kBAAkB,CACjG,CACF,EAIIO,GAAe,CAACC,EAAUC,IACrB,OAAO,KAAKA,CAAK,EAAE,MAAOtmB,GAAQqmB,EAASrmB,CAAG,IAAMsmB,EAAMtmB,CAAG,CAAC,EAEnEumB,GAAe,SACb,OAAOC,GAAe,KAAe,OAAOA,IAAe,WACtDA,GAAW,EAEhB,OAAO,OAAW,KAAe,OAAO,QAAW,UAAY,OAAO,OAAO,YAAe,WACvF,OAAO,WAAW,EAEpB,uCAAuC,QAAQ,QAAS,SAASniB,EAAG,CACzE,IAAI4gB,EAAI,KAAK,OAAO,EAAI,GAAK,EAAGtiB,EAAK0B,IAAM,IAAM4gB,EAAIA,EAAI,EAAI,EAC7D,OAAOtiB,EAAG,SAAS,EAAE,CACvB,CAAC,EAEC8jB,GAAyBxd,GAAW,CACtC,IAAMyd,EAAU,CACd,KAAM,MACN,KAAM,SACN,KAAM,GACN,YAAa,MACf,EACA,OAAK,OAAOzd,EAAW,KAAeA,IAAW,QAAU,OAAOA,GAAW,UAAY,CAAC,MAAM,QAAQA,CAAM,KAG1G,SAAUA,GAAUA,EAAO,OAAS,UAAY,WAAYA,GAAU,MAAM,QAAQA,EAAO,MAAM,EAChFA,EAAO,OAAO,KAAM4F,GAAUA,EAAM,OAAS,KAAK,GAEnE5F,EAAO,OAAO,QAAQyd,CAAO,EAEtB,SAAUzd,GAAUA,EAAO,OAAS,SAAW,UAAWA,GAAUA,EAAO,QAAU,MAAQ,OAAOA,EAAO,OAAU,UAAY,SAAUA,EAAO,OAASA,EAAO,MAAM,OAAS,UAAY,WAAYA,EAAO,OAAS,MAAM,QAAQA,EAAO,MAAM,MAAM,IAChPA,EAAO,MAAM,OAAO,KAAM4F,GAAUA,EAAM,OAAS,KAAK,GAEzE5F,EAAO,MAAM,OAAO,QAAQyd,CAAO,IAGhCzd,CACT,EAGI0d,GAAW,aACXC,GAAY,IACZC,GAAa,aACbC,GAAa,QACbC,GAAY,KAAO,KACnBC,GAAY,EAAID,GAChBE,GAAa,OAAO,KAAK,GAAI,MAAM,EACnCC,GAAoB,CAACC,EAAYtB,EAAuB,4BAA8B,CACxF,MAAM,IAAII,GAAwB,GAAGU,EAAQ,gCAAgCQ,CAAS,EAAE,CAC1F,EACIC,GAAc,CAACC,EAAU,KAAO,CAClC,GAAIA,EAAQ,KAAK,IAAM,IAAMA,IAAY,MAAQ,OAAOA,EAAY,KAAeA,EAAQ,OAAS,IAClG,MAAM,IAAIvB,GAAgB,gDAAiDD,EAAuB,gBAAgB,CAEtH,EACIyB,GAAa,KAAM,CACrB,YAAYC,EAAS,CACnB,KAAK,WAAc1X,GAAS,CAC1B,IAAM2X,EAAiB,CAAC,cAAe,kBAAmB,WAAY,YAAY,EAClF,QAAW3Y,KAAS2Y,EAClB,GAAI,CAAC3X,EAAKhB,CAAK,EACb,MAAM,IAAIiX,GAAgB,GAAGjX,CAAK,eAAgBgX,EAAuB,gBAAgB,CAG/F,EAKA,KAAK,GAAK,IACD,KAAK,IAEd,KAAK,WAAW0B,CAAO,EACvB,KAAK,SAA2B,IAAI,IACpC,KAAK,IAAM,IAAIxC,GAAEwC,CAAO,EACxB,KAAK,WAAaA,EAAQ,WAAaV,GACvC,KAAK,WAAajB,GAAY,IAChC,CAMA,MAAM,sBAAuB,CAC3B,GAAI,CAEF,MAAO,CAAC,CADO,MAAM,KAAK,IAAI,aAAa,CAE7C,OAAS6B,EAAO,CACd,GAAIA,EAAM,QAAQ,SAAS,WAAW,EACpC,MAAO,GAET,MAAM,IAAI3B,GAAgB,GAAG2B,EAAM,OAAO,GAAI5B,EAAuB,kBAAkB,CACzF,CACF,CAMA,MAAM,eAAgB,CACpB,GAAI,CACF,IAAM6B,EAAS,MAAM,KAAK,qBAAqB,EAC/C,OAAKA,GAEI,CAAC,CADc,MAAM,KAAK,IAAI,aAAa,CAItD,OAASD,EAAO,CACd,MAAIA,aAAiB3B,GACb2B,EAEF,IAAI3B,GAAgB,GAAG2B,EAAM,OAAO,GAAI5B,EAAuB,kBAAkB,CACzF,CACF,CAOA,MAAM,iBAAkB,CACtB,GAAI,CACF,IAAM8B,EAAS,MAAM,KAAK,IAAI,KAAKf,GAAW,KAAK,UAAU,EAC7D,OAAI,MAAM,QAAQe,CAAM,EACfA,EAAO,IAAKC,GAAUA,EAAM,IAAI,MAAM,KAAK,WAAW,OAAS,EAAG,CAACd,GAAW,MAAM,CAAC,EACnF,OAAOa,GAAW,UAAYA,IAAW,MAAQ,aAAcA,GAAUA,EAAO,WAAa,IAC/F,CAAC,EAEH,CAAC,CACV,OAASF,EAAO,CACd,MAAIA,aAAiBvB,GACbuB,EAEF,IAAI3B,GAAgB,GAAG2B,EAAM,OAAO,GAAI5B,EAAuB,sBAAsB,CAC7F,CACF,CAOA,MAAM,iBAAiBwB,EAAU,GAAI,CACnC,GAAI,CACF,OAAAD,GAAYC,CAAO,EAEZ,CAAC,CADO,MAAM,KAAK,IAAI,WAAW,GAAG,KAAK,UAAU,GAAGT,EAAS,GAAGS,CAAO,GAAGP,EAAU,EAAE,CAElG,OAASW,EAAO,CACd,GAAIA,EAAM,QAAQ,SAAS,WAAW,EACpC,MAAO,GAET,MAAM,IAAI3B,GAAgB,GAAG2B,EAAM,OAAO,GAAI5B,EAAuB,oBAAoB,CAC3F,CACF,CASA,MAAM,iBAAiBwB,EAAU,GAAIpe,EAAQvH,EAAO,CAAC,EAAG,CACtD,GAAI,CAGF,GAFA0lB,GAAYC,CAAO,EAEf,CADW,MAAM,KAAK,iBAAiBA,CAAO,EACrC,CACX,GAAI,OAAOpe,EAAW,KAAeA,IAAW,KAC9C,GAAI,CAEF,GADa,KAAK,WAAW,UAAUA,CAAM,EAI3C,KAAK,SAAS,IAAIoe,EAASpe,CAAM,MAFjC,OAAM,IAAI+c,GAAsB,sBAAsB/c,CAAM,GAAI4c,EAAuB,uBAAuB,CAIlH,OAAS4B,EAAO,CACd,MAAM,IAAIzB,GACR,sBAAsByB,EAAM,OAAO,OAAOxe,CAAM,IAChD4c,EAAuB,uBACzB,CACF,CAEF,GAAInkB,EAAK,OAAS,GAAKuH,EAAQ,CAC7B,IAAM4e,EAAc,KAAK,WAAW,UAAU,CAAE,KAAM,QAAS,MAAO5e,CAAO,CAAC,EAC9E,MAAM,KAAK,IAAI,IAAI,GAAG,KAAK,UAAU,GAAG2d,EAAS,GAAGS,CAAO,GAAGP,EAAU,GAAIe,EAAY,SAASnmB,CAAI,CAAC,CACxG,MACE,MAAM,KAAK,IAAI,IAAI,GAAG,KAAK,UAAU,GAAGklB,EAAS,GAAGS,CAAO,GAAGP,EAAU,GAAIG,EAAU,EAExF,OAAO,KAAK,WAAWI,EAASpe,EAAQ,EAAK,CAC/C,CACA,MAAM,IAAI6c,GAAgB,cAAcuB,CAAO,kBAAmBxB,EAAuB,iBAAiB,CAC5G,OAAS4B,EAAO,CACd,MAAIA,aAAiBzB,GACbyB,EAEF,IAAI3B,GAAgB,GAAG2B,EAAM,OAAO,GAAI5B,EAAuB,uBAAuB,CAC9F,CACF,CAOA,MAAM,iBAAiBwB,EAAU,GAAI,CACnC,GAAI,CAGF,GAFAD,GAAYC,CAAO,EACJ,MAAM,KAAK,iBAAiBA,CAAO,EACtC,CACV,MAAM,KAAK,IAAI,OAAO,GAAG,KAAK,UAAU,GAAGT,EAAS,GAAGS,CAAO,GAAGP,EAAU,EAAE,EAC7E,IAAMgB,EAAU,MAAM,KAAK,iBAAiBT,CAAO,EACnD,GAAI,OAAOS,GAAY,UAAW,CAChC,GAAI,CAACA,EACH,YAAK,SAAS,OAAOT,CAAO,EACrB,GAET,MAAM,IAAIvB,GAAgB,+BAA+BuB,CAAO,GAAIxB,EAAuB,kBAAkB,CAC/G,CACA,MAAM,IAAIK,GAAiB,GAAGS,EAAQ,iCAAiCU,CAAO,GAAIxB,EAAuB,kBAAkB,CAC7H,CACA,MAAM,IAAIC,GAAgB,cAAcuB,CAAO,kBAAmBxB,EAAuB,uBAAuB,CAClH,OAAS4B,EAAO,CACd,MAAIA,aAAiBvB,GACbuB,EAEF,IAAI3B,GAAgB,gCAAgC2B,EAAM,OAAO,GAAI5B,EAAuB,uBAAuB,CAC3H,CACF,CASA,MAAM,WAAWwB,EAAU,GAAIpe,EAAQ8e,EAAa,GAAM,CACxD,GAAI,CACFX,GAAYC,CAAO,EACnB,IAAMW,EAAU,GAAG,KAAK,UAAU,GAAGpB,EAAS,GAAGS,CAAO,GAAGP,EAAU,GAErE,GAAI,CADW,MAAM,KAAK,IAAI,WAAWkB,CAAO,EACnC,CACX,GAAI,CAACD,EACH,MAAM,IAAIjC,GAAgB,cAAcuB,CAAO,kBAAmBxB,EAAuB,oBAAoB,EAE/G,MAAM,KAAK,IAAI,IAAImC,EAASf,EAAU,CACxC,CACA,IAAMgB,EAAYhf,GAAU,KAAK,SAAS,IAAIoe,CAAO,GAAK,OAC1D,OAAO,IAAIa,GAAWb,EAASY,EAAW,KAAK,IAAK,KAAK,UAAU,CACrE,OAASR,EAAO,CACd,MAAIA,EAAM,QAAQ,SAAS,cAAc,EACjC,IAAIzB,GAAsB,4BAA4ByB,EAAM,OAAO,GAAI5B,EAAuB,uBAAuB,EAEzH4B,aAAiB3B,GACb2B,EAEF,IAAI3B,GAAgB,GAAG2B,EAAM,OAAO,GAAI5B,EAAuB,oBAAoB,CAC3F,CACF,CACF,EACIqC,GAAa,MAAMC,EAAY,CACjC,YAAYd,EAAU,GAAIpe,EAAQmf,EAAIC,EAAYxB,GAAYyB,EAAY,GAAOC,EAAYvB,GAAW,CACtG,KAAK,SAAW,KAAO,CACrB,QAAS,KAAK,SACd,GAAI,KAAK,IACT,OAAQ,KAAK,QACb,UAAW,KAAK,WAChB,SAAU,KAAK,UACf,UAAW,KAAK,WAChB,UAAW,KAAK,WAChB,UAAW,KAAK,UAClB,GACA,KAAK,SAAYtiB,GAAU,CACzB,KAAK,SAAWA,EAAM,QACtB,KAAK,QAAUA,EAAM,OACrB,KAAK,IAAMA,EAAM,GACjB,KAAK,WAAaA,EAAM,UACxB,KAAK,UAAYA,EAAM,SACvB,KAAK,WAAaA,EAAM,UACxB,KAAK,WAAaA,EAAM,UACxB,KAAK,WAAaA,EAAM,SAC1B,EACA,KAAK,aAAgB4jB,GAAc,CACjC,KAAK,WAAaA,CACpB,EACA,KAAK,aAAe,IACX,KAAK,WAEd,KAAK,cAAgB,IACZ,KAAK,QAEd,KAAK,cAAiBrf,GAAW,CAC/B,GAAI,CACF,KAAK,QAAUwd,GAAsBxd,CAAM,EAC3C,KAAK,UAAY,OAAOA,EAAW,IAAc,KAAO,KAAK,WAAW,UAAUA,CAAM,CAC1F,OAASwe,EAAO,CACd,MAAM,IAAIzB,GAAsB,sBAAsByB,EAAM,OAAO,GAAI5B,EAAuB,uBAAuB,CACvH,CACF,EACA,KAAK,kBAAoB,IAChB,KAAK,UAEd,KAAK,gBAAkB,CAACnkB,EAAMwH,EAAO,WAAa,CAC5C,MAAM,QAAQxH,CAAI,IACpBA,EAAOA,EAAK,CAAC,GAGf,IAAMuH,EADc,KAAK,WAAW,SAASvH,CAAI,EACtB,OAAO,EAClC,OAAO+kB,GAAsBxd,CAAM,CACrC,EACA,KAAK,SAAWoe,EAAQ,KAAK,EAC7B,KAAK,IAAMe,EACX,KAAK,QAAU3B,GAAsBxd,CAAM,EAC3C,KAAK,WAAaof,EAClB,KAAK,WAAaC,EAClB,KAAK,WAAaC,GAAavB,GAC/B,KAAK,IAAI,yBAAyB,KAAK,UAAU,EACjD,KAAK,WAAapB,GAAY,KAC9B,KAAK,UAAY,GACjB,KAAK,WAAa,CAAC,EACnB,KAAK,UAAY,OAAO3c,EAAW,IAAc,KAAO,KAAK,WAAW,UAAUA,CAAM,EACxF,KAAK,KAAO,GAAG,KAAK,UAAU,GAAG2d,EAAS,GAAG,KAAK,QAAQ,GAAGE,EAAU,EACzE,CACA,MAAM,eAAgB,CACpB,GAAI,CACF,KAAK,UAAY,GACjB,IAAMplB,EAAO,MAAM,KAAK,UAAU,EAClC,YAAK,WAAaA,EACX,EACT,OAAS+lB,EAAO,CACd,MAAM,IAAI3B,GAAgB,gCAAgC2B,EAAM,OAAO,GAAI5B,EAAuB,kBAAkB,CACtH,CACF,CACA,MAAM,WAAY,CAChB,GAAI,CACF,GAAI,KAAK,YAAc,MAAQ,OAAO,KAAK,UAAc,IACvD,MAAM,IAAIC,GAAgB,wDAAyDD,EAAuB,uBAAuB,EAEnI,GAAM,CAAE,KAAA2C,EAAM,KAAA9mB,CAAK,EAAI,MAAM,KAAK,IAAI,kBAAkB,KAAK,KAAM,CAAE,gBAAiB,KAAK,SAAU,CAAC,EACtG,GAAIA,IAAS,KACX,OAAO,KAAK,WAEd,KAAK,UAAY8mB,IAAS,KAAO,KAAK,UAAYA,EAClD,IAAMX,EAAc,KAAK,WAAW,UAAU,CAAE,KAAM,QAAS,MAAO,KAAK,SAAU,CAAC,EACtF,GAAInmB,EAAK,OAAS,KAAK,WACrB,YAAK,WAAaA,EAAK,OAAS,EAAImmB,EAAY,WAAW,OAAO,KAAKnmB,EAAM,MAAM,CAAC,EAAI,CAAC,EAClF,KAAK,WAEd,IAAI+mB,EAAS,KAAK,WACdC,EAAY,CAAC,OAAO,KAAKhnB,EAAM,MAAM,CAAC,EACtCinB,EAAS,GACb,KAAOA,GAAQ,CACb,IAAMC,EAAmB,MAAM,KAAK,IAAI,YAAY,KAAK,KAAM,GAAOH,EAAQA,EAAS,KAAK,UAAU,EAChGI,EAAe,MAAMD,EAAiB,KAAK,EACjDF,EAAU,KAAK,OAAO,KAAKG,EAAc,MAAM,CAAC,EAChDJ,GAAU,KAAK,WACO,SAASG,EAAiB,QAAQ,IAAI,gBAAgB,GAAKC,EAAa,OAAO,SAAS,CAAC,EAC3F,KAAK,aACvBF,EAAS,GAEb,CACA,IAAMG,EAAe,OAAO,OAAOJ,CAAS,EAC5C,YAAK,WAAab,EAAY,WAAWiB,CAAY,EAC9C,KAAK,UACd,OAASrB,EAAO,CACd,GAAIA,EAAM,SAAS,EAAE,QAAQ,iCAAiC,EAAI,GAChE,YAAK,WAAa,CAAC,EACZ,KAAK,WAEd,MAAM,IAAIvB,GAAiB,GAAGS,EAAQ,0BAA0Bc,EAAM,OAAO,GAAI5B,EAAuB,kBAAkB,CAC5H,CACF,CACA,MAAM,UAAUnkB,EAAM,CACpB,GAAI,CACF,GAAI,KAAK,YAAc,MAAQ,OAAO,KAAK,UAAc,IACvD,MAAM,IAAIokB,GAAgB,wDAAyDD,EAAuB,uBAAuB,EAEnI,IAAMgC,EAAc,KAAK,WAAW,UAAU,CAAE,KAAM,QAAS,MAAO,KAAK,SAAU,CAAC,EAChFkB,EAAarnB,EAAK,OAAS,EAAImmB,EAAY,SAASnmB,CAAI,EAAIulB,GAClE,GAAI,KAAK,YAAc,KAAK,YAAc,GAAI,CAC5C,IAAM+B,EAAc,MAAM,KAAK,IAAI,QAAQ,KAAK,IAAI,EACpD,GAAIA,IAAgB,MAAQA,IAAgB,KAAK,UAC/C,MAAO,EAEX,CACA,IAAMC,EAAO,MAAM,KAAK,IAAI,IAAI,KAAK,KAAMF,CAAU,EACrD,GAAI,OAAOE,GAAS,UAAY,WAAYA,GAAQA,EAAK,SAAW,IAClE,MAAM,IAAI/C,GAAiB,GAAGS,EAAQ,wBAAyBd,EAAuB,kBAAkB,EAE1G,IAAMqD,EAAUD,EAAK,SAAS,IAAI,MAAM,GAAK,GAC7C,OAAIC,GAAWA,EAAQ,OAAS,IAC9B,KAAK,UAAY,KAAK,IAAI,aAAaA,CAAO,EAC9C,KAAK,WAAaxnB,GAEb,EACT,OAAS+lB,EAAO,CACd,MAAIA,aAAiBvB,IAAoBuB,aAAiB3B,GAClD2B,EAEF,IAAI3B,GAAgB,GAAG2B,EAAM,OAAO,GAAI5B,EAAuB,eAAe,CACtF,CACF,CAQA,MAAM,OAAOjQ,EAAK3M,EAAQ,CACxB,GAAI,CACF,GAAsB2M,GAAQ,KAC5B,MAAM,IAAIkQ,GAAgB,kCAAmCD,EAAuB,YAAY,EAElG,GAAI,OAAOjQ,GAAQ,UAAY,CAAC,MAAM,QAAQA,CAAG,EAC/C,MAAM,IAAIqQ,GACR,GAAGU,EAAQ,2CACXd,EAAuB,yBACzB,EAEF,IAAM9f,EAAS,MAAM,QAAQ6P,CAAG,EAAYA,EAAR,CAACA,CAAG,EAClCuT,EAAelgB,EAASwd,GAAsBxd,CAAM,EAAI,KAAK,SAAW,KAAK,gBAAgBlD,EAAM,CAAC,CAAC,EACrGqjB,EAAW,KAAK,WAAW,UAAUD,CAAY,EACvD,GAAI,CAACC,EACH,MAAM,IAAIpD,GACR,0DACAH,EAAuB,uBACzB,EAEF,KAAK,UAAYuD,EACjB,IAAM1nB,EAAO,MAAM,KAAK,UAAU,EAClC,QAASoE,KAAQC,EAAO,CACtB,GAAI,OAAOD,GAAS,UAAYA,IAAS,KACvC,MAAM,IAAImgB,GACR,GAAGU,EAAQ,kEACXd,EAAuB,yBACzB,EAOF,GALA/f,EAAK,IAAMA,EAAK,KAAO,MAAMygB,GAAa,EACtB,KAAK,UAAU,QAAQzgB,EAAM,CAC/C,UAAWohB,GACX,mBAAoB,EACtB,CAAC,IACmB,GAClBxlB,EAAK,KAAKoE,CAAI,MAEd,OAAM,IAAImgB,GAAwB,GAAGU,EAAQ,+BAAgCd,EAAuB,yBAAyB,CAEjI,CAEA,GAAI,CADY,MAAM,KAAK,UAAUnkB,CAAI,EAEvC,MAAM,IAAIwkB,GAAiB,GAAGS,EAAQ,8BAA+Bd,EAAuB,kBAAkB,EAEhH,YAAK,cAAcsD,CAAY,EACxBpjB,CACT,OAAS0hB,EAAO,CACd,MAAIA,EAAM,QAAQ,SAAS,cAAc,EACjC,IAAIzB,GAAsB,4BAA4ByB,EAAM,OAAO,GAAI5B,EAAuB,uBAAuB,EAEzH4B,aAAiB3B,GACb2B,EAEF,IAAI3B,GAAgB,4BAA4B2B,EAAM,OAAO,GAAI5B,EAAuB,YAAY,CAC5G,CACF,CAUA,MAAM,KAAKS,EAAQ,CAAC,EAAGiB,EAAU,CAAC,EAAG,CACnC,GAAI,CACF,GAAwBjB,GAAU,KAChC,MAAM,IAAIR,GAAgB,+BAAgCD,EAAuB,gBAAgB,EAEnG,IAAMnkB,EAAO,MAAM,KAAK,UAAU,EAC5B8D,EAAQ+hB,EAAQ,OAAS,OAAS,SAAS,OAAOA,EAAQ,IAAI,EAAG,EAAE,EAAI,EACvE9hB,EAAM8hB,EAAQ,QAAU,OAAS/hB,EAAQ,SAAS,OAAO+hB,EAAQ,KAAK,EAAG,EAAE,EAAI,OAErF,OADqB7lB,EAAK,OAAQkU,GAAQwQ,GAAaxQ,EAAK0Q,CAAK,CAAC,EAAE,MAAM9gB,EAAOC,CAAG,CAEtF,OAASgiB,EAAO,CACd,MAAM,IAAI3B,GAAgB,0BAA0B2B,EAAM,OAAO,GAAI5B,EAAuB,UAAU,CACxG,CACF,CAOA,MAAM,QAAQS,EAAQ,CAAC,EAAG,CACxB,GAAI,CACF,GAAIA,IAAU,KACZ,MAAM,IAAIR,GAAgB,GAAGa,EAAQ,yBAA0Bd,EAAuB,gBAAgB,EAGxG,OADe,MAAM,KAAK,KAAKS,EAAO,CAAE,MAAO,CAAE,CAAC,GACpC,CAAC,GAAK,IACtB,OAASmB,EAAO,CACd,MAAIA,aAAiB3B,GACb2B,EAEF,IAAI3B,GAAgB,GAAGa,EAAQ,+BAA+Bc,EAAM,OAAO,GAAI5B,EAAuB,cAAc,CAC5H,CACF,CAWA,MAAM,OAAOS,EAAQ,CAAC,EAAG+C,EAAS,CAAC,EAAG9B,EAAU,CAAC,EAAG,CAClD,GAAI,CACF,GAAwBjB,GAAU,MAAQ+C,IAAW,QAAUA,IAAW,KACxE,MAAM,IAAIvD,GAAgB,kDAAmDD,EAAuB,gBAAgB,EAEtH,GAAI,CAAC,KAAK,UACR,MAAM,IAAIG,GAAsB,4CAA6CH,EAAuB,uBAAuB,EAE7H,IAAMnkB,EAAO,MAAM,KAAK,UAAU,EAClC,GAAIA,EAAK,SAAW,EAAG,MAAO,GAC9B,IAAI4nB,EAAe,EACnB,QAASzmB,EAAI,EAAGA,EAAInB,EAAK,OAAQmB,IAC/B,GAAIujB,GAAa1kB,EAAKmB,CAAC,EAAGyjB,CAAK,EAAG,CAChC,IAAMiD,EAAa,CAAE,GAAG7nB,EAAKmB,CAAC,EAAG,GAAGwmB,CAAO,EAK3C,GAJgB,KAAK,UAAU,QAAQE,EAAY,CACjD,UAAWrC,GACX,mBAAoB,EACtB,CAAC,IACe,GACdxlB,EAAKmB,CAAC,EAAI0mB,EACVD,QAEA,OAAM,IAAIrD,GAAwB,GAAGU,EAAQ,+BAAgCd,EAAuB,yBAAyB,CAEjI,CAEF,GAAIyD,EAAe,GAEjB,GAAI,CADY,MAAM,KAAK,UAAU5nB,CAAI,EAEvC,MAAM,IAAIwkB,GAAiB,GAAGS,EAAQ,8BAA+Bd,EAAuB,kBAAkB,UAEvG0B,GAAW,WAAYA,GAAWA,EAAQ,OAAQ,CAE3D,GAAI,CADY,MAAM,KAAK,OAAO8B,CAAM,EAEtC,MAAM,IAAInD,GAAiB,GAAGS,EAAQ,8BAA+Bd,EAAuB,kBAAkB,EAEhHyD,EAAe,CACjB,CACA,OAAOA,CACT,OAAS7B,EAAO,CACd,MAAIA,aAAiBvB,GACbuB,EAEF,IAAI3B,GAAgB,4BAA4B2B,EAAM,OAAO,GAAI5B,EAAuB,YAAY,CAC5G,CACF,CAaA,MAAM,UAAUS,EAAQ,CAAC,EAAG+C,EAAS,CAAC,EAAG9B,EAAU,CAAC,EAAG,CACrD,GAAI,CACF,GAAwBjB,GAAU,MAAQ+C,IAAW,QAAUA,IAAW,KACxE,MAAM,IAAIvD,GAAgB,oBAAqBD,EAAuB,gBAAgB,EAExF,GAAI,CAAC,KAAK,UACR,MAAM,IAAIG,GAAsB,4CAA6CH,EAAuB,uBAAuB,EAE7H,IAAMnkB,EAAO,MAAM,KAAK,UAAU,EAClC,GAAIA,EAAK,SAAW,EAAG,MAAO,GAC9B,IAAM8nB,EAAW9nB,EAAK,UAAWkU,GAAQwQ,GAAaxQ,EAAK0Q,CAAK,CAAC,EACjE,GAAIkD,IAAa,GAAI,CACnB,IAAMD,EAAa,CAAE,GAAG7nB,EAAK8nB,CAAQ,EAAG,GAAGH,CAAO,EAKlD,GAJgB,KAAK,UAAU,QAAQE,EAAY,CACjD,UAAWrC,GACX,mBAAoB,EACtB,CAAC,IACe,GAAM,CAGpB,GAFAxlB,EAAK8nB,CAAQ,EAAID,EAEb,CADY,MAAM,KAAK,UAAU7nB,CAAI,EAEvC,MAAM,IAAIwkB,GAAiB,GAAGS,EAAQ,8BAA+Bd,EAAuB,kBAAkB,EAEhH,MAAO,EACT,KACE,OAAM,IAAII,GAAwB,GAAGU,EAAQ,+BAAgCd,EAAuB,yBAAyB,CAEjI,CACA,GAAI0B,GAAW,WAAYA,GAAWA,EAAQ,OAAQ,CAEpD,GAAI,CADY,MAAM,KAAK,OAAO8B,CAAM,EAEtC,MAAM,IAAInD,GAAiB,GAAGS,EAAQ,8BAA+Bd,EAAuB,kBAAkB,EAEhH,MAAO,EACT,CACA,MAAO,EACT,OAAS4B,EAAO,CACd,MAAIA,aAAiB3B,GACb2B,EAEF,IAAI3B,GAAgB,+BAA+B2B,EAAM,OAAO,GAAI5B,EAAuB,gBAAgB,CACnH,CACF,CAQA,MAAM,OAAOS,EAAQ,CAAC,EAAG,CACvB,GAAI,CACF,GAAwBA,GAAU,KAChC,MAAM,IAAIR,GAAgB,oBAAqBD,EAAuB,gBAAgB,EAExF,IAAMnkB,EAAO,MAAM,KAAK,UAAU,EAClC,GAAIA,EAAK,SAAW,EAAG,MAAO,GAC9B,IAAM+nB,EAAgB/nB,EAAK,OACrBgoB,EAAUhoB,EAAK,OAAQkU,GAAQ,CAACwQ,GAAaxQ,EAAK0Q,CAAK,CAAC,EAE9D,GAAI,CADY,MAAM,KAAK,UAAUoD,CAAO,EAE1C,MAAM,IAAIxD,GAAiB,GAAGS,EAAQ,8BAA+Bd,EAAuB,kBAAkB,EAEhH,OAAO4D,EAAgBC,EAAQ,MACjC,OAASjC,EAAO,CACd,MAAIA,aAAiBvB,GACbuB,EAEF,IAAI3B,GAAgB,4BAA4B2B,EAAM,OAAO,GAAI5B,EAAuB,YAAY,CAC5G,CACF,CAOA,MAAM,WAAY,CAChB,GAAI,CAEF,IAAM4D,GADO,MAAM,KAAK,UAAU,GACP,OAE3B,GAAI,CADY,MAAM,KAAK,UAAU,CAAC,CAAC,EAErC,MAAM,IAAIvD,GAAiB,GAAGS,EAAQ,8BAA+Bd,EAAuB,kBAAkB,EAEhH,OAAO4D,CACT,OAAShC,EAAO,CACd,MAAIA,aAAiBvB,GACbuB,EAEF,IAAI3B,GAAgB,4BAA4B2B,EAAM,OAAO,GAAI5B,EAAuB,YAAY,CAC5G,CACF,CAOA,MAAM,MAAMS,EAAQ,CAAC,EAAG,CACtB,GAAI,CAEF,OADa,MAAM,KAAK,KAAKA,CAAK,GACtB,MACd,OAASmB,EAAO,CACd,MAAM,IAAI3B,GAAgB,2BAA2B2B,EAAM,OAAO,GAAI5B,EAAuB,WAAW,CAC1G,CACF,CACA,MAAM,iBAAiB8D,EAAYC,EAAY,KAAK,QAAS,CAC3D,GAAI,CAGF,GAFAxC,GAAYuC,CAAU,EACP,MAAM,KAAK,IAAI,WAAW,GAAG,KAAK,UAAU,GAAG/C,EAAS,GAAG+C,CAAU,GAAG7C,EAAU,EAAE,EAEjG,MAAM,IAAIhB,GAAgB,GAAGa,EAAQ,gBAAgBgD,CAAU,kBAAmB9D,EAAuB,iBAAiB,EAE5H,IAAM5c,EAAS2gB,GAAa,KAAK,cAAc,EACzCloB,EAAO,MAAM,KAAK,UAAU,EAC5BmoB,EAAY,IAAI1B,GAAYwB,EAAY1gB,EAAQ,KAAK,IAAK,KAAK,WAAY,KAAK,WAAY,KAAK,UAAU,EACjH,aAAM4gB,EAAU,UAAUnoB,CAAI,EAC9B,MAAM,KAAK,IAAI,OAAO,GAAG,KAAK,UAAU,GAAGklB,EAAS,GAAG,KAAK,QAAQ,GAAGE,EAAU,EAAE,EAC5E+C,CACT,OAASpC,EAAO,CACd,MAAIA,aAAiB3B,GACb2B,EAEF,IAAI3B,GAAgB,6BAA6B2B,EAAM,OAAO,GAAI5B,EAAuB,uBAAuB,CACxH,CACF,CACF", + "names": ["__import_BUFFER", "__import_CRYPTO", "__import_UTIL", "__import_STREAM", "__import_ZLIB", "__import_EVENTS", "__import_FS", "__import_PATH", "randomUUID", "__create", "__defProp", "__getOwnPropDesc", "__getOwnPropNames", "__getProtoOf", "__hasOwnProp", "__commonJS", "cb", "mod", "__getOwnPropNames", "__copyProps", "to", "from", "except", "desc", "key", "__hasOwnProp", "__defProp", "__getOwnPropDesc", "__toESM", "isNodeMode", "target", "__create", "__getProtoOf", "require_utils", "exports", "module", "buffer", "__import_BUFFER", "crypto2", "__import_CRYPTO", "util", "__import_UTIL", "Buffer2", "POOL", "BufferPool", "NAME_PATTERN", "f2", "newBuffer", "size", "bufferFrom", "data", "enc", "capitalize", "s", "compare", "n1", "n2", "getOption", "opts", "def", "value", "getHash", "str", "algorithm", "hash", "singleIndexOf", "arr", "v2", "pos", "i", "l", "toMap", "fn", "obj", "elem", "objectValues", "hasDuplicates", "copyOwnProperties", "src", "dst", "overwrite", "names", "name", "descriptor", "isValidName", "qualify", "namespace", "part", "unqualify", "parts", "impliedNamespace", "match", "jsonEnd", "c", "depth", "literal", "abstractFunction", "addDeprecatedGetters", "props", "proto", "prop", "getter", "createGetter", "prop2", "delegate", "len", "maxLen", "Lcg", "seed", "a", "m2", "state", "start", "end", "flags", "mask", "result", "OrderedQueue", "item", "items", "j2", "first", "mid", "i1", "i2", "c1", "c2", "Tap", "buf", "b2", "n", "k2", "h", "f3", "fk", "d", "fixed", "tap", "l1", "p1", "l2", "p2", "b1", "res", "neg", "invert", "require_types", "utils", "SlowBuffer", "debug", "TYPES", "ArrayType", "BooleanType", "BytesType", "DoubleType", "EnumType", "RecordType", "FixedType", "FloatType", "IntType", "LongType", "MapType", "NullType", "StringType", "RANDOM", "TAP", "LOGICAL_TYPE", "UNDERLYING_TYPES", "Type", "schema", "type", "Hash", "maybeQualify", "isPrimitive", "registry", "UnionType2", "wrapUnions", "WrappedUnionType", "UnwrappedUnionType", "DerivedType", "err", "logicalType", "types", "isAmbiguous", "typeName", "Type2", "val", "fieldNames", "expanded", "numWrappedUnions", "isValidWrappedUnion", "branchTypes", "branchType", "unionType", "bucketized", "bucket", "getTypeBucket", "bucketTypes", "buckets", "augmented", "combineNumbers", "combineStrings", "combineBuffers", "t", "combineObjects", "any", "buf1", "buf2", "resolver", "Resolver", "resolvers", "index", "resolver2", "readValue", "canon", "schemaStr", "noCheck", "className", "getClassName", "errorHook", "hook", "path", "Branch", "derefedSchema", "attr", "body", "asBranch", "PrimitiveType", "noFreeze", "throwInvalidError", "tap1", "tap2", "isSafeLong", "methods", "noUnpack", "mapping", "AbstractLongType", "isJsonBuffer", "UnionType", "branch", "getValueBucket", "logicalBranches", "typeResolver", "coerce", "wrap", "keys", "val1", "val2", "index1", "index2", "firstType", "name1", "name2", "symbol", "symbols", "hasCompatibleName", "values", "readArraySize", "rsv", "copy", "ns", "field", "Field", "errorStack", "plainRecords", "outerArgs", "innerArgs", "ds", "innerBody", "defaultValue", "hasDefault", "stackField", "outerBody", "Record", "self", "o", "field2", "args", "rFields", "wFields", "wFieldsMap", "matches", "fieldResolver", "getAliases", "lazyIndex", "uname", "fields", "order", "fieldType", "fieldSchema", "fieldOrder", "fieldAliases", "fieldDoc", "LogicalType", "_fromValue", "obj1", "obj2", "isVisited", "msg", "readerType", "lazy", "aliases", "reader", "writer", "strict", "alias", "unqualified", "typeNames", "superIndex", "superType", "typeSymbols", "allTypes", "fieldTypes", "fieldDefaults", "isValidRecord", "fieldDefault", "fieldName", "fieldType2", "fieldDefault2", "unionTypes", "require_containers", "stream", "__import_STREAM", "zlib", "__import_ZLIB", "OPTS", "LONG_TYPE", "MAP_BYTES_TYPE", "HEADER_TYPE", "BLOCK_TYPE", "MAGIC_BYTES", "RawDecoder", "noDecode", "createReader", "chunk", "encoding", "BlockDecoder", "header", "codecs", "nBlocks", "block", "tryReadBlock", "chunkCb", "count", "cause", "BlockInfo", "BlockData", "RawEncoder", "copyBuffer", "BlockEncoder", "codec", "meta", "Header", "flushing", "raw", "compressed", "writerType", "skipper", "require_services", "events", "__import_EVENTS", "BOOLEAN_TYPE", "STRING_TYPE", "HANDSHAKE_REQUEST_TYPE", "HANDSHAKE_RESPONSE_TYPE", "PREFIX_LENGTH", "PING_MESSAGE", "Message", "reqType", "errType", "resType", "oneWay", "doc", "recordName", "reqSchema", "msgDoc", "errSchema", "Service", "messages", "types2", "ptcl", "server", "Client", "Server", "clientSvc", "serverSvc", "createReaders", "msgs", "client", "pts", "transport", "channel", "forwardErrors", "req", "handler", "parent", "typeSchema", "msgNames", "discoverProtocol", "svc", "ptclStr", "hreq", "hres", "pending", "insertRemoteProtocols", "objectMode", "writableFactory", "encoder2", "FrameEncoder", "writable2", "readable2", "decoder2", "FrameDecoder", "err2", "StatelessClientChannel", "readable", "writable", "isStream", "decoder", "NettyDecoder", "encoder", "NettyEncoder", "StatefulClientChannel", "channels", "getExistingMessage", "wreq", "WrappedRequest", "getRemoteProtocols", "numChannels", "CallContext", "wres", "ctx", "done", "err3", "readableFactory", "StatelessServerChannel", "StatefulServerChannel", "channelId", "numArgs", "ClientChannel", "normalizedPrefix", "cache", "adapter", "Adapter", "Registry", "noWait", "isError", "timeout", "noSvc", "WrappedResponse", "onTransition", "onCompletion", "fns", "chainMiddleware", "onError", "wreq2", "wres2", "prev", "reqBuf", "serializationError", "id", "resBuf", "matchesPrefix", "emit", "retry", "readHead", "onEnd", "onFinish", "timer", "onPing", "onMessage", "ping", "payload", "ServerChannel", "serverMatch", "toRpcError", "defaultHandler", "resErr", "isStrict", "errStr", "hdrBuf", "onRequest", "onHandshake", "hdrs", "hdr", "hasError", "prefixLength", "isRemote", "isError2", "frameLength", "bufs", "intBuffer", "head", "rtype", "wtype", "ptcls", "isClient", "hs", "toError", "rpcCode", "details", "detailsStr", "strs", "scope", "prefix", "params", "cbs", "forward", "isDone", "backward", "require_files", "fs", "__import_FS", "__import_PATH", "createImportHook", "imports", "fpath", "kind", "createSyncImportHook", "require_specs", "files", "TYPE_REFS", "assembleProtocol", "importFile", "protocol", "schemas", "protocolNamespace", "fpath2", "cb2", "Reader", "fetchImports", "dpath", "importedProtocols", "next", "info", "imported", "mergeImport", "importPath", "read", "contents", "protocolSchema", "Tokenizer", "tk", "protocolJavadoc", "javadoc", "numImports", "message", "responseSchema", "token", "top", "ref", "silent", "implicitTags", "maybeMessage", "fname", "reason", "context", "isToken", "lineNum", "lineStart", "emitJavadoc", "isJavadoc", "extractJavadoc", "pat", "lines", "line", "require_lib", "containers", "services", "specs", "parse2", "schemaOrProtocol", "extractFileHeader", "decode", "fd", "isValid", "createFileDecoder", "createFileEncoder", "N", "K", "O", "v", "f", "W", "q", "w", "X", "E", "Z", "V", "J", "m", "R", "P", "M", "u", "ee", "te", "se", "re", "L", "$", "j", "k", "U", "B", "F", "G", "z", "Q", "ne", "oe", "p", "C", "y", "x", "e", "r", "I", "A", "_", "g", "H", "T", "S", "Y", "b", "D", "import_avsc", "lowstorage_ERROR_CODES", "lowstorageError", "code", "SchemaValidationError", "DocumentValidationError", "S3OperationError", "operation", "matchesQuery", "document", "query", "generateUUID", "randomUUID", "ensureIdFieldInSchema", "idField", "MOD_NAME", "DELIMITER", "DIR_PREFIX", "COL_SUFFIX", "CHUNK_1MB", "CHUNK_5MB", "EMPTY_DATA", "errorValidationFn", "errorCode", "_hasColName", "colName", "lowstorage", "options", "requiredFields", "error", "exists", "listed", "entry", "wrapperType", "exists2", "autoCreate", "colPath", "colSchema", "Collection", "_Collection", "s3", "dirPrefix", "safeWrite", "chunkSize", "etag", "offset", "bufferArr", "repeat", "nextDataResponse", "nextDataBody", "bufferedData", "dataBuffer", "currentETag", "resp", "newETag", "schemaWithId", "avroType", "update", "updatedCount", "updatedDoc", "docIndex", "initialLength", "newData", "newColName", "newSchema", "createNew"] } diff --git a/lib/errors.js b/lib/errors.js index 0607dfe..f15901c 100644 --- a/lib/errors.js +++ b/lib/errors.js @@ -3,6 +3,7 @@ const lowstorage_ERROR_CODES = { MISSING_ARGUMENT: 'MISSING_ARGUMENT', COLLECTION_EXISTS: 'COLLECTION_EXISTS', CREATE_COLLECTION_ERROR: 'CREATE_COLLECTION_ERROR', + LIST_COLLECTIONS_ERROR: 'LIST_COLLECTIONS_ERROR', RENAME_COLLECTION_ERROR: 'RENAME_COLLECTION_ERROR', REMOVE_COLLECTION_ERROR: 'REMOVE_COLLECTION_ERROR', UPDATE_COLLECTION_SCHEMA_ERROR: 'UPDATE_COLLECTION_SCHEMA_ERROR', diff --git a/lib/errors.js.map b/lib/errors.js.map index a61bda1..fc15fdf 100644 --- a/lib/errors.js.map +++ b/lib/errors.js.map @@ -1 +1 @@ -{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,MAAM,sBAAsB,GAA2B;IACtD,gBAAgB,EAAE,kBAA2B;IAC7C,iBAAiB,EAAE,mBAA4B;IAC/C,uBAAuB,EAAE,yBAAkC;IAC3D,uBAAuB,EAAE,yBAAkC;IAC3D,uBAAuB,EAAE,yBAAkC;IAC3D,8BAA8B,EAAE,gCAAyC;IACzE,oBAAoB,EAAE,sBAA+B;IACrD,uBAAuB,EAAE,yBAAkC;IAC3D,yBAAyB,EAAE,2BAAoC;IAC/D,kBAAkB,EAAE,oBAA6B;IACjD,UAAU,EAAE,YAAqB;IACjC,cAAc,EAAE,gBAAyB;IACzC,eAAe,EAAE,iBAA0B;IAC3C,YAAY,EAAE,cAAuB;IACrC,YAAY,EAAE,cAAuB;IACrC,gBAAgB,EAAE,kBAA2B;IAC7C,YAAY,EAAE,cAAuB;IACrC,WAAW,EAAE,aAAsB;IACnC,aAAa,EAAE,eAAwB;CACvC,CAAC;AAIF,MAAM,eAAgB,SAAQ,KAAK;IAElC,YAAY,OAAe,EAAE,OAAkB,sBAAsB,CAAC,aAAa;QAClF,KAAK,CAAC,oBAAoB,OAAO,aAAa,IAAI,EAAE,CAAC,CAAC;QACtD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;QAClC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IACjD,CAAC;CACD;AAED,MAAM,uBAAwB,SAAQ,eAAe;IACpD,YAAY,cAAmB,EAAE,OAAkB,sBAAsB,CAAC,oBAAoB;QAC7F,KAAK,CAAC,cAAc,cAAc,YAAY,EAAE,sBAAsB,CAAC,oBAAoB,CAAC,CAAC;IAC9F,CAAC;CACD;AAED,MAAM,qBAAsB,SAAQ,eAAe;IAClD,YAAY,OAAe,EAAE,OAAkB,sBAAsB,CAAC,uBAAuB;QAC5F,KAAK,CAAC,OAAO,EAAE,sBAAsB,CAAC,uBAAuB,CAAC,CAAC;IAChE,CAAC;CACD;AAED,MAAM,uBAAwB,SAAQ,eAAe;IACpD,YAAY,OAAe,EAAE,OAAkB,sBAAsB,CAAC,yBAAyB;QAC9F,KAAK,CAAC,OAAO,EAAE,sBAAsB,CAAC,yBAAyB,CAAC,CAAC;IAClE,CAAC;CACD;AAED,MAAM,gBAAiB,SAAQ,eAAe;IAC7C,YAAY,OAAe,EAAE,SAAiB;QAC7C,KAAK,CAAC,MAAM,SAAS,sBAAsB,OAAO,EAAE,EAAE,sBAAsB,CAAC,kBAAkB,CAAC,CAAC;IAClG,CAAC;CACD;AAED,OAAO,EACN,sBAAsB,EACtB,eAAe,EACf,uBAAuB,EACvB,qBAAqB,EACrB,uBAAuB,EACvB,gBAAgB,GAChB,CAAC"} \ No newline at end of file +{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,MAAM,sBAAsB,GAA2B;IACtD,gBAAgB,EAAE,kBAA2B;IAC7C,iBAAiB,EAAE,mBAA4B;IAC/C,uBAAuB,EAAE,yBAAkC;IAC3D,sBAAsB,EAAE,wBAAiC;IACzD,uBAAuB,EAAE,yBAAkC;IAC3D,uBAAuB,EAAE,yBAAkC;IAC3D,8BAA8B,EAAE,gCAAyC;IACzE,oBAAoB,EAAE,sBAA+B;IACrD,uBAAuB,EAAE,yBAAkC;IAC3D,yBAAyB,EAAE,2BAAoC;IAC/D,kBAAkB,EAAE,oBAA6B;IACjD,UAAU,EAAE,YAAqB;IACjC,cAAc,EAAE,gBAAyB;IACzC,eAAe,EAAE,iBAA0B;IAC3C,YAAY,EAAE,cAAuB;IACrC,YAAY,EAAE,cAAuB;IACrC,gBAAgB,EAAE,kBAA2B;IAC7C,YAAY,EAAE,cAAuB;IACrC,WAAW,EAAE,aAAsB;IACnC,aAAa,EAAE,eAAwB;CACvC,CAAC;AAIF,MAAM,eAAgB,SAAQ,KAAK;IAElC,YAAY,OAAe,EAAE,OAAkB,sBAAsB,CAAC,aAAa;QAClF,KAAK,CAAC,oBAAoB,OAAO,aAAa,IAAI,EAAE,CAAC,CAAC;QACtD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;QAClC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IACjD,CAAC;CACD;AAED,MAAM,uBAAwB,SAAQ,eAAe;IACpD,YAAY,cAAmB,EAAE,OAAkB,sBAAsB,CAAC,oBAAoB;QAC7F,KAAK,CAAC,cAAc,cAAc,YAAY,EAAE,sBAAsB,CAAC,oBAAoB,CAAC,CAAC;IAC9F,CAAC;CACD;AAED,MAAM,qBAAsB,SAAQ,eAAe;IAClD,YAAY,OAAe,EAAE,OAAkB,sBAAsB,CAAC,uBAAuB;QAC5F,KAAK,CAAC,OAAO,EAAE,sBAAsB,CAAC,uBAAuB,CAAC,CAAC;IAChE,CAAC;CACD;AAED,MAAM,uBAAwB,SAAQ,eAAe;IACpD,YAAY,OAAe,EAAE,OAAkB,sBAAsB,CAAC,yBAAyB;QAC9F,KAAK,CAAC,OAAO,EAAE,sBAAsB,CAAC,yBAAyB,CAAC,CAAC;IAClE,CAAC;CACD;AAED,MAAM,gBAAiB,SAAQ,eAAe;IAC7C,YAAY,OAAe,EAAE,SAAiB;QAC7C,KAAK,CAAC,MAAM,SAAS,sBAAsB,OAAO,EAAE,EAAE,sBAAsB,CAAC,kBAAkB,CAAC,CAAC;IAClG,CAAC;CACD;AAED,OAAO,EACN,sBAAsB,EACtB,eAAe,EACf,uBAAuB,EACvB,qBAAqB,EACrB,uBAAuB,EACvB,gBAAgB,GAChB,CAAC"} \ No newline at end of file diff --git a/lib/helpers.js b/lib/helpers.js index 6ff7fb3..cc4788b 100644 --- a/lib/helpers.js +++ b/lib/helpers.js @@ -22,7 +22,7 @@ const ensureIdFieldInSchema = (schema) => { size: 16, logicalType: 'UUID', }; - if (typeof schema === 'undefined' || schema === null) { + if ((typeof schema === 'undefined' || schema === null) && (typeof schema !== 'object' || !Array.isArray(schema))) { return schema; } if ('type' in schema && schema.type === 'record' && 'fields' in schema && Array.isArray(schema.fields)) { diff --git a/lib/helpers.js.map b/lib/helpers.js.map index 693a58b..16b3176 100644 --- a/lib/helpers.js.map +++ b/lib/helpers.js.map @@ -1 +1 @@ -{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/lib/lowstorage.d.ts b/lib/lowstorage.d.ts index 5d3ddea..5b7a3ec 100644 --- a/lib/lowstorage.d.ts +++ b/lib/lowstorage.d.ts @@ -61,8 +61,8 @@ declare class lowstorage { * @param {string} options.bucketName - S3 bucket name. * @param {string} [options.region='auto'] - S3 region. * @param {Object} [options.logger=null] - Logger object. - * @param {string} [options.dirPrefix=PROJECT_DIR_PREFIX] - Directory prefix for collections. - * @param {Number} [options.maxRequestSizeInBytes=CHUNG_5MB] - Chunk size for reading and writing data. AWS S3 has a minimum of 5MB per object. + * @param {string} [options.dirPrefix=DIR_PREFIX] - Directory prefix for collections. + * @param {Number} [options.maxRequestSizeInBytes=CHUNK_5MB] - Chunk size for reading and writing data. AWS S3 has a minimum of 5MB per object. * @returns {lowstorage} A new lowstorage instance. */ private _schemas; @@ -87,6 +87,7 @@ declare class lowstorage { * List all collections. * @returns {Promise} An array of collection names. * @throws {S3OperationError} If there's an error during S3 operation. + * @throws {lowstorageError} If there's an error. */ listCollections(): Promise; /** @@ -158,9 +159,9 @@ declare class Collection { * @param {string} colName - The name of the collection. * @param {Object} [schema] - The Avro schema for the collection. * @param {S3} s3 - The S3 instance. - * @param {string} [dirPrefix=PROJECT_DIR_PREFIX] - The directory prefix for the collection. + * @param {string} [dirPrefix=DIR_PREFIX] - The directory prefix for the collection. * @param {boolean} [safeWrite=false] - Whether to perform a safe write operation. It doublechecks the ETag of the object before writing. False = overwrites the object, True = only writes if the object has not been modified. - * @param {Number} [chunkSize=CHUNG_5MB] - The chunk size for reading and writing data. AWS S3 has a maximum of 5MB per object. + * @param {Number} [chunkSize=CHUNK_5MB] - The chunk size for reading and writing data. AWS S3 has a maximum of 5MB per object. * @returns {Collection} A new Collection instance. */ private _colName; diff --git a/lib/lowstorage.js b/lib/lowstorage.js index ea623c1..91f0a79 100644 --- a/lib/lowstorage.js +++ b/lib/lowstorage.js @@ -10,19 +10,19 @@ import { S3 } from 'ultralight-s3'; import { Type as parse } from 'avsc'; import { lowstorage_ERROR_CODES, lowstorageError, SchemaValidationError, DocumentValidationError, S3OperationError } from 'errors'; import { matchesQuery, generateUUID, ensureIdFieldInSchema } from 'helpers'; -const MODULE_NAME = 'lowstorage'; -const DEFAULT_DELIMITER = '/'; -const PROJECT_DIR_PREFIX = 'lowstorage'; +const MOD_NAME = 'lowstorage'; +const DELIMITER = '/'; +const DIR_PREFIX = 'lowstorage'; const COL_SUFFIX = '.avro'; -const CHUNG_1MB = 1024 * 1024; -const CHUNG_5MB = 5 * CHUNG_1MB; +const CHUNK_1MB = 1024 * 1024; +const CHUNK_5MB = 5 * CHUNK_1MB; const EMPTY_DATA = Buffer.from('', 'utf8'); const errorValidationFn = (errorCode = lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR) => { - throw new DocumentValidationError(`${MODULE_NAME}: Invalid document or schema ${errorCode}`); + throw new DocumentValidationError(`${MOD_NAME}: Invalid document or schema ${errorCode}`); }; const _hasColName = (colName = '') => { - if (colName.trim() === '' || colName === null || typeof colName === 'undefined' || colName.length > 255 || colName === null) { - throw new lowstorageError(`${MODULE_NAME}: Collection name is required, null or too long`, lowstorage_ERROR_CODES.MISSING_ARGUMENT); + if (colName.trim() === '' || colName === null || typeof colName === 'undefined' || colName.length > 255) { + throw new lowstorageError(`Collection name is required, null or too long`, lowstorage_ERROR_CODES.MISSING_ARGUMENT); } }; /** @@ -62,7 +62,7 @@ class lowstorage { const requiredFields = ['accessKeyId', 'secretAccessKey', 'endpoint', 'bucketName']; for (const field of requiredFields) { if (!args[field]) { - throw new lowstorageError(`${MODULE_NAME}: ${field} is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT); + throw new lowstorageError(`${field} is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT); } } }; @@ -76,7 +76,7 @@ class lowstorage { this._checkArgs(options); this._schemas = new Map(); this._s3 = new S3(options); - this._dirPrefix = options.dirPrefix || PROJECT_DIR_PREFIX; + this._dirPrefix = options.dirPrefix || DIR_PREFIX; this._avroParse = parse; } /** @@ -93,7 +93,7 @@ class lowstorage { if (error.message.includes('Not Found')) { return false; } - throw new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); + throw new lowstorageError(`${error.message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); } } /** @@ -106,26 +106,26 @@ class lowstorage { const exists = await this.checkIfStorageExists(); if (!exists) { const createdBucket = await this._s3.createBucket(); - return createdBucket; + return !!createdBucket; } return exists; - throw new lowstorageError(`${MODULE_NAME}: Bucket already exists`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); } catch (error) { if (error instanceof lowstorageError) { throw error; } - throw new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); + throw new lowstorageError(`${error.message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); } } /** * List all collections. * @returns {Promise} An array of collection names. * @throws {S3OperationError} If there's an error during S3 operation. + * @throws {lowstorageError} If there's an error. */ async listCollections() { try { - const listed = await this._s3.list(DEFAULT_DELIMITER, this._dirPrefix); + const listed = await this._s3.list(DELIMITER, this._dirPrefix); if (Array.isArray(listed)) { return listed.map((entry) => entry.key.slice(this._dirPrefix.length + 1, -COL_SUFFIX.length)); } @@ -135,7 +135,10 @@ class lowstorage { return []; } catch (error) { - throw new S3OperationError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); + if (error instanceof S3OperationError) { + throw error; + } + throw new lowstorageError(`${error.message}`, lowstorage_ERROR_CODES.LIST_COLLECTIONS_ERROR); } } /** @@ -147,14 +150,14 @@ class lowstorage { async collectionExists(colName = '') { try { _hasColName(colName); - const exists = await this._s3.fileExists(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`); + const exists = await this._s3.fileExists(`${this._dirPrefix}${DELIMITER}${colName}${COL_SUFFIX}`); return !!exists; } catch (error) { if (error.message.includes('Not Found')) { return false; } - throw new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND); + throw new lowstorageError(`${error.message}`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND); } } /** @@ -174,32 +177,32 @@ class lowstorage { try { const type = this._avroParse.forSchema(schema); if (!type) { - throw new SchemaValidationError(`${MODULE_NAME}: Schema is invalid: ${schema} ${lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR}`); + throw new SchemaValidationError(`Schema is invalid: ${schema}`, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR); } else { this._schemas.set(colName, schema); } } catch (error) { - throw new SchemaValidationError(`${MODULE_NAME}: Schema is invalid: ${schema}`, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR); + throw new SchemaValidationError(`Schema is invalid: ${error.message} in ${schema} `, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR); } } if (data.length > 0 && schema) { const wrapperType = this._avroParse.forSchema({ type: 'array', items: schema }); - await this._s3.put(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`, wrapperType.toBuffer(data)); + await this._s3.put(`${this._dirPrefix}${DELIMITER}${colName}${COL_SUFFIX}`, wrapperType.toBuffer(data)); } else { - await this._s3.put(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`, EMPTY_DATA); + await this._s3.put(`${this._dirPrefix}${DELIMITER}${colName}${COL_SUFFIX}`, EMPTY_DATA); } return this.collection(colName, schema, false); } - throw new lowstorageError(`${MODULE_NAME}: Collection ${colName} already exists`, lowstorage_ERROR_CODES.COLLECTION_EXISTS); + throw new lowstorageError(`Collection ${colName} already exists`, lowstorage_ERROR_CODES.COLLECTION_EXISTS); } catch (error) { - if (error instanceof lowstorageError) { + if (error instanceof SchemaValidationError) { throw error; } - throw new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.CREATE_COLLECTION_ERROR); + throw new lowstorageError(`${error.message}`, lowstorage_ERROR_CODES.CREATE_COLLECTION_ERROR); } } /** @@ -213,24 +216,24 @@ class lowstorage { _hasColName(colName); const exists = await this.collectionExists(colName); if (exists) { - await this._s3.delete(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`); + await this._s3.delete(`${this._dirPrefix}${DELIMITER}${colName}${COL_SUFFIX}`); const exists2 = await this.collectionExists(colName); if (typeof exists2 === 'boolean') { if (!exists2) { this._schemas.delete(colName); return true; } - throw new lowstorageError(`${MODULE_NAME}: Failed to delete collection ${colName}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); + throw new lowstorageError(`Failed to delete collection ${colName}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); } - throw new S3OperationError(`${MODULE_NAME}: Failed to delete collection ${colName}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); + throw new S3OperationError(`${MOD_NAME}: Failed to delete collection ${colName}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); } - throw new lowstorageError(`${MODULE_NAME}: Collection ${colName} does not exist`, lowstorage_ERROR_CODES.REMOVE_COLLECTION_ERROR); + throw new lowstorageError(`Collection ${colName} does not exist`, lowstorage_ERROR_CODES.REMOVE_COLLECTION_ERROR); } catch (error) { if (error instanceof S3OperationError) { throw error; } - throw new lowstorageError(`${MODULE_NAME}: Failed to remove collection: ${error.message}`, lowstorage_ERROR_CODES.REMOVE_COLLECTION_ERROR); + throw new lowstorageError(`Failed to remove collection: ${error.message}`, lowstorage_ERROR_CODES.REMOVE_COLLECTION_ERROR); } } /** @@ -244,11 +247,11 @@ class lowstorage { async collection(colName = '', schema, autoCreate = true) { try { _hasColName(colName); - const colPath = `${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`; + const colPath = `${this._dirPrefix}${DELIMITER}${colName}${COL_SUFFIX}`; const exists = await this._s3.fileExists(colPath); if (!exists) { if (!autoCreate) { - throw new lowstorageError(`${MODULE_NAME}: Collection ${colName} does not exist`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND); + throw new lowstorageError(`Collection ${colName} does not exist`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND); } // TODO: check if this is the right way to handle empty data await this._s3.put(colPath, EMPTY_DATA); @@ -259,9 +262,12 @@ class lowstorage { catch (error) { // check if error message contains "unknown type" and if so, throw a schema validation error if (error.message.includes('unknown type')) { - throw new SchemaValidationError(`${MODULE_NAME}: Schema input is invalid: ${error.message}`, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR); + throw new SchemaValidationError(`Schema input is invalid: ${error.message}`, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR); } - throw new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND); + if (error instanceof lowstorageError) { + throw error; + } + throw new lowstorageError(`${error.message}`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND); } } } @@ -291,7 +297,7 @@ class lowstorage { * */ class Collection { - constructor(colName = '', schema, s3, dirPrefix = PROJECT_DIR_PREFIX, safeWrite = false, chunkSize = CHUNG_5MB) { + constructor(colName = '', schema, s3, dirPrefix = DIR_PREFIX, safeWrite = false, chunkSize = CHUNK_5MB) { this.getProps = () => ({ colName: this._colName, s3: this._s3, @@ -327,7 +333,7 @@ class Collection { this._avroType = typeof schema === 'undefined' ? null : this._avroParse.forSchema(schema); } catch (error) { - throw new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR); + throw new SchemaValidationError(`Schema is invalid: ${error.message}`, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR); } }; this.getCollectionETag = () => { @@ -346,13 +352,13 @@ class Collection { this._schema = ensureIdFieldInSchema(schema); this._dirPrefix = dirPrefix; this._safeWrite = safeWrite; - this._chunkSize = chunkSize || CHUNG_5MB; + this._chunkSize = chunkSize || CHUNK_5MB; this._s3.setMaxRequestSizeInBytes(this._chunkSize); this._avroParse = parse; this._lastETag = ''; this._dataCache = []; this._avroType = typeof schema === 'undefined' ? null : this._avroParse.forSchema(schema); - this._key = `${this._dirPrefix}${DEFAULT_DELIMITER}${this._colName}${COL_SUFFIX}`; + this._key = `${this._dirPrefix}${DELIMITER}${this._colName}${COL_SUFFIX}`; } async forceLoadData() { try { @@ -362,13 +368,13 @@ class Collection { return true; } catch (error) { - throw new lowstorageError(`${MODULE_NAME}: Failed to force update data: ${error.message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); + throw new lowstorageError(`Failed to force update data: ${error.message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); } } async _loadData() { try { if (this._avroType === null || typeof this._avroType === 'undefined') { - throw new lowstorageError(`${MODULE_NAME}: Missing type definition. Configure before operations `, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR); + throw new lowstorageError(`Missing type definition. Configure before operations `, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR); } const { etag, data } = await this._s3.getObjectWithETag(this._key, { 'if-none-match': this._lastETag }); if (data === null) { @@ -402,13 +408,13 @@ class Collection { this._dataCache = []; return this._dataCache; } - throw new S3OperationError(`${MODULE_NAME}: Failed to load data: ${error.message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); + throw new S3OperationError(`${MOD_NAME}: Failed to load data: ${error.message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); } } async _saveData(data) { try { if (this._avroType === null || typeof this._avroType === 'undefined') { - throw new lowstorageError(`${MODULE_NAME}: Missing type definition. Configure before operations `, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR); + throw new lowstorageError(`Missing type definition. Configure before operations `, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR); } const wrapperType = this._avroParse.forSchema({ type: 'array', items: this._avroType }); const dataBuffer = data.length > 0 ? wrapperType.toBuffer(data) : EMPTY_DATA; // TODO: check if this is the right way to handle empty data @@ -421,7 +427,7 @@ class Collection { } const resp = await this._s3.put(this._key, dataBuffer); if (typeof resp === 'object' && 'status' in resp && resp.status !== 200) { - throw new S3OperationError(`${MODULE_NAME}: Failed to save data`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); + throw new S3OperationError(`${MOD_NAME}: Failed to save data`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); } // Update the cached ETag const newETag = resp.headers?.get('etag') || ''; @@ -432,10 +438,10 @@ class Collection { return true; } catch (error) { - if (error instanceof S3OperationError) { + if (error instanceof S3OperationError || error instanceof lowstorageError) { throw error; } - throw new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.SAVE_DATA_ERROR); + throw new lowstorageError(`${error.message}`, lowstorage_ERROR_CODES.SAVE_DATA_ERROR); } } /** @@ -448,22 +454,22 @@ class Collection { async insert(doc, schema) { try { if (doc === undefined || doc === null) { - throw new lowstorageError(`${MODULE_NAME}: Document is required for insert`, lowstorage_ERROR_CODES.INSERT_ERROR); + throw new lowstorageError(`Document is required for insert`, lowstorage_ERROR_CODES.INSERT_ERROR); } if (typeof doc !== 'object' && !Array.isArray(doc)) { - throw new DocumentValidationError(`${MODULE_NAME}: Document must be an object or an array`, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR); + throw new DocumentValidationError(`${MOD_NAME}: Document must be an object or an array`, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR); } const items = !Array.isArray(doc) ? [doc] : doc; const schemaWithId = schema ? ensureIdFieldInSchema(schema) : this._schema || this.inferAvroSchema(items[0]); const avroType = this._avroParse.forSchema(schemaWithId); if (!avroType) { - throw new SchemaValidationError(`${MODULE_NAME}: Schema is required - Pass a schema to the insert method`, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR); + throw new SchemaValidationError(`Schema is required - Pass a schema to the insert method`, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR); } this._avroType = avroType; const data = await this._loadData(); for (let item of items) { if (typeof item !== 'object' || item === null) { - throw new DocumentValidationError(`${MODULE_NAME}: Invalid input: input must be an object or an array of objects`, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR); + throw new DocumentValidationError(`${MOD_NAME}: Invalid input: input must be an object or an array of objects`, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR); } item._id = item._id || (await generateUUID()); const validBuffer = this._avroType.isValid(item, { @@ -474,24 +480,24 @@ class Collection { data.push(item); } else { - throw new DocumentValidationError(`${MODULE_NAME}: Invalid document or schema`, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR); + throw new DocumentValidationError(`${MOD_NAME}: Invalid document or schema`, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR); } } const success = await this._saveData(data); if (!success) { - throw new S3OperationError(`${MODULE_NAME}: Failed to insert document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); + throw new S3OperationError(`${MOD_NAME}: Failed to insert document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); } this.setAvroSchema(schemaWithId); return items; } catch (error) { if (error.message.includes('unknown type')) { - throw new SchemaValidationError(`${MODULE_NAME}: Schema input is invalid: ${error.message}`, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR); + throw new SchemaValidationError(`Schema input is invalid: ${error.message}`, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR); } if (error instanceof lowstorageError) { throw error; } - throw new lowstorageError(`${MODULE_NAME} Insert operation failed: ${error.message}`, lowstorage_ERROR_CODES.INSERT_ERROR); + throw new lowstorageError(`Insert operation failed: ${error.message}`, lowstorage_ERROR_CODES.INSERT_ERROR); } } /** @@ -506,7 +512,7 @@ class Collection { async find(query = {}, options = {}) { try { if (query === undefined || query === null) { - throw new lowstorageError(`${MODULE_NAME}: Query is required for update`, lowstorage_ERROR_CODES.MISSING_ARGUMENT); + throw new lowstorageError(`Query is required for update`, lowstorage_ERROR_CODES.MISSING_ARGUMENT); } const data = await this._loadData(); const start = options.skip !== undefined ? parseInt(String(options.skip), 10) : 0; @@ -517,7 +523,7 @@ class Collection { return filteredData; } catch (error) { - throw new lowstorageError(`${MODULE_NAME}: Find operation failed: ${error.message}`, lowstorage_ERROR_CODES.FIND_ERROR); + throw new lowstorageError(`Find operation failed: ${error.message}`, lowstorage_ERROR_CODES.FIND_ERROR); } } /** @@ -529,7 +535,7 @@ class Collection { async findOne(query = {}) { try { if (query === null) { - throw new lowstorageError(`${MODULE_NAME}: Query cannot be null`, lowstorage_ERROR_CODES.INVALID_ARGUMENT); + throw new lowstorageError(`${MOD_NAME}: Query cannot be null`, lowstorage_ERROR_CODES.INVALID_ARGUMENT); } const result = await this.find(query, { limit: 1 }); return result[0] || null; @@ -538,7 +544,7 @@ class Collection { if (error instanceof lowstorageError) { throw error; } - throw new lowstorageError(`${MODULE_NAME}: FindOne operation failed: ${error.message}`, lowstorage_ERROR_CODES.FIND_ONE_ERROR); + throw new lowstorageError(`${MOD_NAME}: FindOne operation failed: ${error.message}`, lowstorage_ERROR_CODES.FIND_ONE_ERROR); } } /** @@ -554,10 +560,10 @@ class Collection { async update(query = {}, update = {}, options = {}) { try { if (query === undefined || query === null || update === undefined || update === null) { - throw new lowstorageError(`${MODULE_NAME}: Query and update values are required for update`, lowstorage_ERROR_CODES.MISSING_ARGUMENT); + throw new lowstorageError(`Query and update values are required for update`, lowstorage_ERROR_CODES.MISSING_ARGUMENT); } if (!this._avroType) { - throw new SchemaValidationError(`${MODULE_NAME}: Schema is not defined for this collection`, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR); + throw new SchemaValidationError(`Schema is not defined for this collection`, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR); } const data = await this._loadData(); if (data.length === 0) @@ -575,21 +581,21 @@ class Collection { updatedCount++; } else { - throw new DocumentValidationError(`${MODULE_NAME}: Invalid document or schema`, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR); + throw new DocumentValidationError(`${MOD_NAME}: Invalid document or schema`, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR); } } } if (updatedCount > 0) { const success = await this._saveData(data); if (!success) { - throw new S3OperationError(`${MODULE_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); + throw new S3OperationError(`${MOD_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); } } else if (options && 'upsert' in options && options.upsert) { // If upsert is true, we need to insert the document const success = await this.insert(update); if (!success) { - throw new S3OperationError(`${MODULE_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); + throw new S3OperationError(`${MOD_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); } updatedCount = 1; } @@ -599,7 +605,7 @@ class Collection { if (error instanceof S3OperationError) { throw error; } - throw new lowstorageError(`${MODULE_NAME}: Update operation failed: ${error.message}`, lowstorage_ERROR_CODES.UPDATE_ERROR); + throw new lowstorageError(`Update operation failed: ${error.message}`, lowstorage_ERROR_CODES.UPDATE_ERROR); } } /** @@ -617,10 +623,10 @@ class Collection { async updateOne(query = {}, update = {}, options = {}) { try { if (query === undefined || query === null || update === undefined || update === null) { - throw new lowstorageError(`${MODULE_NAME}: Query is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT); + throw new lowstorageError(`Query is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT); } if (!this._avroType) { - throw new SchemaValidationError(`${MODULE_NAME}: Schema is not defined for this collection`, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR); + throw new SchemaValidationError(`Schema is not defined for this collection`, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR); } const data = await this._loadData(); if (data.length === 0) @@ -636,19 +642,19 @@ class Collection { data[docIndex] = updatedDoc; const success = await this._saveData(data); if (!success) { - throw new S3OperationError(`${MODULE_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); + throw new S3OperationError(`${MOD_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); } return 1; } else { - throw new DocumentValidationError(`${MODULE_NAME}: Invalid document or schema`, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR); + throw new DocumentValidationError(`${MOD_NAME}: Invalid document or schema`, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR); } } if (options && 'upsert' in options && options.upsert) { // If upsert is true, we need to insert the document const success = await this.insert(update); if (!success) { - throw new S3OperationError(`${MODULE_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); + throw new S3OperationError(`${MOD_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); } return 1; } @@ -658,7 +664,7 @@ class Collection { if (error instanceof lowstorageError) { throw error; } - throw new lowstorageError(`${MODULE_NAME}: UpdateOne operation failed: ${error.message}`, lowstorage_ERROR_CODES.UPDATE_ONE_ERROR); + throw new lowstorageError(`UpdateOne operation failed: ${error.message}`, lowstorage_ERROR_CODES.UPDATE_ONE_ERROR); } } /** @@ -671,7 +677,7 @@ class Collection { async delete(query = {}) { try { if (query === undefined || query === null) { - throw new lowstorageError(`${MODULE_NAME}: Query is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT); + throw new lowstorageError(`Query is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT); } const data = await this._loadData(); if (data.length === 0) @@ -680,7 +686,7 @@ class Collection { const newData = data.filter((doc) => !matchesQuery(doc, query)); const success = await this._saveData(newData); if (!success) { - throw new S3OperationError(`${MODULE_NAME}: Failed to delete document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); + throw new S3OperationError(`${MOD_NAME}: Failed to delete document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); } return initialLength - newData.length; } @@ -688,7 +694,7 @@ class Collection { if (error instanceof S3OperationError) { throw error; } - throw new lowstorageError(`${MODULE_NAME}: Delete operation failed: ${error.message}`, lowstorage_ERROR_CODES.DELETE_ERROR); + throw new lowstorageError(`Delete operation failed: ${error.message}`, lowstorage_ERROR_CODES.DELETE_ERROR); } } /** @@ -703,7 +709,7 @@ class Collection { const initialLength = data.length; const success = await this._saveData([]); if (!success) { - throw new S3OperationError(`${MODULE_NAME}: Failed to delete document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); + throw new S3OperationError(`${MOD_NAME}: Failed to delete document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); } return initialLength; } @@ -711,7 +717,7 @@ class Collection { if (error instanceof S3OperationError) { throw error; } - throw new lowstorageError(`${MODULE_NAME}: Delete operation failed: ${error.message}`, lowstorage_ERROR_CODES.DELETE_ERROR); + throw new lowstorageError(`Delete operation failed: ${error.message}`, lowstorage_ERROR_CODES.DELETE_ERROR); } } /** @@ -726,28 +732,28 @@ class Collection { return data.length; } catch (error) { - throw new lowstorageError(`${MODULE_NAME}: Count operation failed: ${error.message}`, lowstorage_ERROR_CODES.COUNT_ERROR); + throw new lowstorageError(`Count operation failed: ${error.message}`, lowstorage_ERROR_CODES.COUNT_ERROR); } } async renameCollection(newColName, newSchema = this._schema) { try { _hasColName(newColName); - const exists = await this._s3.fileExists(`${this._dirPrefix}${DEFAULT_DELIMITER}${newColName}${COL_SUFFIX}`); + const exists = await this._s3.fileExists(`${this._dirPrefix}${DELIMITER}${newColName}${COL_SUFFIX}`); if (!!exists) { - throw new lowstorageError(`${MODULE_NAME}: Collection ${newColName} already exists`, lowstorage_ERROR_CODES.COLLECTION_EXISTS); + throw new lowstorageError(`${MOD_NAME}: Collection ${newColName} already exists`, lowstorage_ERROR_CODES.COLLECTION_EXISTS); } const schema = newSchema || this.getAvroSchema(); const data = await this._loadData(); const createNew = new Collection(newColName, schema, this._s3, this._dirPrefix, this._safeWrite, this._chunkSize); await createNew._saveData(data); - await this._s3.delete(`${this._dirPrefix}${DEFAULT_DELIMITER}${this._colName}${COL_SUFFIX}`); + await this._s3.delete(`${this._dirPrefix}${DELIMITER}${this._colName}${COL_SUFFIX}`); return createNew; } catch (error) { if (error instanceof lowstorageError) { throw error; } - throw new lowstorageError(`${MODULE_NAME}: Rename collection failed: ${error.message}`, lowstorage_ERROR_CODES.RENAME_COLLECTION_ERROR); + throw new lowstorageError(`Rename collection failed: ${error.message}`, lowstorage_ERROR_CODES.RENAME_COLLECTION_ERROR); } } } diff --git a/lib/lowstorage.js.map b/lib/lowstorage.js.map index 753cf2f..e2c8b4a 100644 --- a/lib/lowstorage.js.map +++ b/lib/lowstorage.js.map @@ -1 +1 @@ -{"version":3,"file":"lowstorage.js","sourceRoot":"","sources":["../src/lowstorage.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"lowstorage.js","sourceRoot":"","sources":["../src/lowstorage.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAwBb,6BAA6B;AAC7B,kBAAkB;AAClB,mBAAmB;AACnB,KAAK;AAEL,yBAAyB;AACzB,qBAAqB;AACrB,KAAK;AAEL,OAAO,EAAE,EAAE,EAAE,MAAM,eAAe,CAAC;AACnC,OAAO,EAAE,IAAI,IAAI,KAAK,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,sBAAsB,EAAE,eAAe,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAC;AACnI,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAE5E,MAAM,QAAQ,GAAW,YAAY,CAAC;AACtC,MAAM,SAAS,GAAW,GAAG,CAAC;AAC9B,MAAM,UAAU,GAAW,YAAY,CAAC;AACxC,MAAM,UAAU,GAAW,OAAO,CAAC;AACnC,MAAM,SAAS,GAAW,IAAI,GAAG,IAAI,CAAC;AACtC,MAAM,SAAS,GAAW,CAAC,GAAG,SAAS,CAAC;AACxC,MAAM,UAAU,GAAW,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;AAEnD,MAAM,iBAAiB,GAAG,CAAC,YAAoB,sBAAsB,CAAC,yBAAyB,EAAQ,EAAE;IACxG,MAAM,IAAI,uBAAuB,CAAC,GAAG,QAAQ,gCAAgC,SAAS,EAAE,CAAC,CAAC;AAC3F,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,UAAkB,EAAE,EAAQ,EAAE;IAClD,IAAI,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;QACzG,MAAM,IAAI,eAAe,CAAC,+CAA+C,EAAE,sBAAsB,CAAC,gBAAgB,CAAC,CAAC;IACrH,CAAC;AACF,CAAC,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,MAAM,UAAU;IAmBf,YAAY,OAAkB;QAQ9B,eAAU,GAAG,CAAC,IAAe,EAAQ,EAAE;YACtC,MAAM,cAAc,GAAG,CAAC,aAAa,EAAE,iBAAiB,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC;YACpF,KAAK,MAAM,KAAK,IAAI,cAAc,EAAE,CAAC;gBACpC,IAAI,CAAC,IAAI,CAAC,KAAwB,CAAC,EAAE,CAAC;oBACrC,MAAM,IAAI,eAAe,CAAC,GAAG,KAAK,cAAc,EAAE,sBAAsB,CAAC,gBAAgB,CAAC,CAAC;gBAC5F,CAAC;YACF,CAAC;QACF,CAAC,CAAC;QAiMF;;;WAGG;QACH,OAAE,GAAG,GAAO,EAAE;YACb,OAAO,IAAI,CAAC,GAAG,CAAC;QACjB,CAAC,CAAC;QArND,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QACzB,IAAI,CAAC,QAAQ,GAAG,IAAI,GAAG,EAAE,CAAC;QAC1B,IAAI,CAAC,GAAG,GAAG,IAAI,EAAE,CAAC,OAAO,CAAC,CAAC;QAC3B,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,SAAS,IAAI,UAAU,CAAC;QAClD,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;IACzB,CAAC;IAWD;;;;OAIG;IACH,KAAK,CAAC,oBAAoB;QACzB,IAAI,CAAC;YACJ,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;YAC7C,OAAO,CAAC,CAAC,MAAM,CAAC;QACjB,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACrB,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;gBACzC,OAAO,KAAK,CAAC;YACd,CAAC;YACD,MAAM,IAAI,eAAe,CAAC,GAAG,KAAK,CAAC,OAAO,EAAE,EAAE,sBAAsB,CAAC,kBAAkB,CAAC,CAAC;QAC1F,CAAC;IACF,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,aAAa;QAClB,IAAI,CAAC;YACJ,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,oBAAoB,EAAE,CAAC;YACjD,IAAI,CAAC,MAAM,EAAE,CAAC;gBACb,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;gBACpD,OAAO,CAAC,CAAC,aAAa,CAAC;YACxB,CAAC;YACD,OAAO,MAAM,CAAC;QACf,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACrB,IAAI,KAAK,YAAY,eAAe,EAAE,CAAC;gBACtC,MAAM,KAAK,CAAC;YACb,CAAC;YACD,MAAM,IAAI,eAAe,CAAC,GAAG,KAAK,CAAC,OAAO,EAAE,EAAE,sBAAsB,CAAC,kBAAkB,CAAC,CAAC;QAC1F,CAAC;IACF,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,eAAe;QACpB,IAAI,CAAC;YACJ,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;YAC/D,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC3B,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;YAC/F,CAAC;iBAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,UAAU,IAAI,MAAM,IAAI,MAAM,CAAC,QAAQ,KAAK,GAAG,EAAE,CAAC;gBAC7G,OAAO,EAAE,CAAC;YACX,CAAC;YACD,OAAO,EAAE,CAAC;QACX,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACrB,IAAI,KAAK,YAAY,gBAAgB,EAAE,CAAC;gBACvC,MAAM,KAAK,CAAC;YACb,CAAC;YACD,MAAM,IAAI,eAAe,CAAC,GAAG,KAAK,CAAC,OAAO,EAAE,EAAE,sBAAsB,CAAC,sBAAsB,CAAC,CAAC;QAC9F,CAAC;IACF,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,gBAAgB,CAAC,UAAkB,EAAE;QAC1C,IAAI,CAAC;YACJ,WAAW,CAAC,OAAO,CAAC,CAAC;YACrB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,UAAU,GAAG,SAAS,GAAG,OAAO,GAAG,UAAU,EAAE,CAAC,CAAC;YAClG,OAAO,CAAC,CAAC,MAAM,CAAC;QACjB,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACrB,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;gBACzC,OAAO,KAAK,CAAC;YACd,CAAC;YACD,MAAM,IAAI,eAAe,CAAC,GAAG,KAAK,CAAC,OAAO,EAAE,EAAE,sBAAsB,CAAC,oBAAoB,CAAC,CAAC;QAC5F,CAAC;IACF,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,gBAAgB,CAAC,UAAkB,EAAE,EAAE,MAAe,EAAE,OAAc,EAAE;QAC7E,IAAI,CAAC;YACJ,WAAW,CAAC,OAAO,CAAC,CAAC;YACrB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;YACpD,IAAI,CAAC,MAAM,EAAE,CAAC;gBACb,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;oBACtD,IAAI,CAAC;wBACJ,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;wBAC/C,IAAI,CAAC,IAAI,EAAE,CAAC;4BACX,MAAM,IAAI,qBAAqB,CAAC,sBAAsB,MAAM,EAAE,EAAE,sBAAsB,CAAC,uBAAuB,CAAC,CAAC;wBACjH,CAAC;6BAAM,CAAC;4BACP,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;wBACpC,CAAC;oBACF,CAAC;oBAAC,OAAO,KAAU,EAAE,CAAC;wBACrB,MAAM,IAAI,qBAAqB,CAC9B,sBAAsB,KAAK,CAAC,OAAO,OAAO,MAAM,GAAG,EACnD,sBAAsB,CAAC,uBAAuB,CAC9C,CAAC;oBACH,CAAC;gBACF,CAAC;gBACD,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,EAAE,CAAC;oBAC/B,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;oBAChF,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,UAAU,GAAG,SAAS,GAAG,OAAO,GAAG,UAAU,EAAE,EAAE,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;gBACzG,CAAC;qBAAM,CAAC;oBACP,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,UAAU,GAAG,SAAS,GAAG,OAAO,GAAG,UAAU,EAAE,EAAE,UAAU,CAAC,CAAC;gBACzF,CAAC;gBACD,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;YAChD,CAAC;YACD,MAAM,IAAI,eAAe,CAAC,cAAc,OAAO,iBAAiB,EAAE,sBAAsB,CAAC,iBAAiB,CAAC,CAAC;QAC7G,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACrB,IAAI,KAAK,YAAY,qBAAqB,EAAE,CAAC;gBAC5C,MAAM,KAAK,CAAC;YACb,CAAC;YACD,MAAM,IAAI,eAAe,CAAC,GAAG,KAAK,CAAC,OAAO,EAAE,EAAE,sBAAsB,CAAC,uBAAuB,CAAC,CAAC;QAC/F,CAAC;IACF,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,gBAAgB,CAAC,UAAkB,EAAE;QAC1C,IAAI,CAAC;YACJ,WAAW,CAAC,OAAO,CAAC,CAAC;YACrB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;YACpD,IAAI,MAAM,EAAE,CAAC;gBACZ,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,UAAU,GAAG,SAAS,GAAG,OAAO,GAAG,UAAU,EAAE,CAAC,CAAC;gBAC/E,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;gBACrD,IAAI,OAAO,OAAO,KAAK,SAAS,EAAE,CAAC;oBAClC,IAAI,CAAC,OAAO,EAAE,CAAC;wBACd,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;wBAC9B,OAAO,IAAI,CAAC;oBACb,CAAC;oBACD,MAAM,IAAI,eAAe,CAAC,+BAA+B,OAAO,EAAE,EAAE,sBAAsB,CAAC,kBAAkB,CAAC,CAAC;gBAChH,CAAC;gBACD,MAAM,IAAI,gBAAgB,CAAC,GAAG,QAAQ,iCAAiC,OAAO,EAAE,EAAE,sBAAsB,CAAC,kBAAkB,CAAC,CAAC;YAC9H,CAAC;YACD,MAAM,IAAI,eAAe,CAAC,cAAc,OAAO,iBAAiB,EAAE,sBAAsB,CAAC,uBAAuB,CAAC,CAAC;QACnH,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACrB,IAAI,KAAK,YAAY,gBAAgB,EAAE,CAAC;gBACvC,MAAM,KAAK,CAAC;YACb,CAAC;YACD,MAAM,IAAI,eAAe,CAAC,gCAAgC,KAAK,CAAC,OAAO,EAAE,EAAE,sBAAsB,CAAC,uBAAuB,CAAC,CAAC;QAC5H,CAAC;IACF,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,UAAU,CAAC,UAAkB,EAAE,EAAE,MAAe,EAAE,aAAsB,IAAI;QACjF,IAAI,CAAC;YACJ,WAAW,CAAC,OAAO,CAAC,CAAC;YACrB,MAAM,OAAO,GAAG,GAAG,IAAI,CAAC,UAAU,GAAG,SAAS,GAAG,OAAO,GAAG,UAAU,EAAE,CAAC;YACxE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YAClD,IAAI,CAAC,MAAM,EAAE,CAAC;gBACb,IAAI,CAAC,UAAU,EAAE,CAAC;oBACjB,MAAM,IAAI,eAAe,CAAC,cAAc,OAAO,iBAAiB,EAAE,sBAAsB,CAAC,oBAAoB,CAAC,CAAC;gBAChH,CAAC;gBACD,4DAA4D;gBAC5D,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;YACzC,CAAC;YACD,MAAM,SAAS,GAAG,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,SAAS,CAAC;YACpE,OAAO,IAAI,UAAU,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QACtE,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACrB,4FAA4F;YAC5F,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;gBAC5C,MAAM,IAAI,qBAAqB,CAAC,4BAA4B,KAAK,CAAC,OAAO,EAAE,EAAE,sBAAsB,CAAC,uBAAuB,CAAC,CAAC;YAC9H,CAAC;YACD,IAAI,KAAK,YAAY,eAAe,EAAE,CAAC;gBACtC,MAAM,KAAK,CAAC;YACb,CAAC;YAED,MAAM,IAAI,eAAe,CAAC,GAAG,KAAK,CAAC,OAAO,EAAE,EAAE,sBAAsB,CAAC,oBAAoB,CAAC,CAAC;QAC5F,CAAC;IACF,CAAC;CASD;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,UAAU;IAsBf,YACC,UAAkB,EAAE,EACpB,MAAW,EACX,EAAM,EACN,YAAoB,UAAU,EAC9B,YAAqB,KAAK,EAC1B,YAAoB,SAAS;QAgB9B,aAAQ,GAAG,GAAoB,EAAE,CAAC,CAAC;YAClC,OAAO,EAAE,IAAI,CAAC,QAAQ;YACtB,EAAE,EAAE,IAAI,CAAC,GAAG;YACZ,MAAM,EAAE,IAAI,CAAC,OAAO;YACpB,SAAS,EAAE,IAAI,CAAC,UAAU;YAC1B,QAAQ,EAAE,IAAI,CAAC,SAAS;YACxB,SAAS,EAAE,IAAI,CAAC,UAAU;YAC1B,SAAS,EAAE,IAAI,CAAC,UAAU;YAC1B,SAAS,EAAE,IAAI,CAAC,UAAU;SAC1B,CAAC,CAAC;QAEH,aAAQ,GAAG,CAAC,KAAsB,EAAQ,EAAE;YAC3C,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC;YAC9B,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC;YAC5B,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC,EAAE,CAAC;YACpB,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,SAAS,CAAC;YAClC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,QAAQ,CAAC;YAChC,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,SAAS,CAAC;YAClC,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,SAAS,CAAC;YAClC,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,SAAS,CAAC;QACnC,CAAC,CAAC;QAEF,iBAAY,GAAG,CAAC,SAAkB,EAAQ,EAAE;YAC3C,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAC7B,CAAC,CAAC;QAEF,iBAAY,GAAG,GAAY,EAAE;YAC5B,OAAO,IAAI,CAAC,UAAU,CAAC;QACxB,CAAC,CAAC;QAEF,kBAAa,GAAG,GAAW,EAAE;YAC5B,OAAO,IAAI,CAAC,OAAO,CAAC;QACrB,CAAC,CAAC;QAEF,kBAAa,GAAG,CAAC,MAAc,EAAQ,EAAE;YACxC,IAAI,CAAC;gBACJ,IAAI,CAAC,OAAO,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;gBAC7C,IAAI,CAAC,SAAS,GAAG,OAAO,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YAC3F,CAAC;YAAC,OAAO,KAAU,EAAE,CAAC;gBACrB,MAAM,IAAI,qBAAqB,CAAC,sBAAsB,KAAK,CAAC,OAAO,EAAE,EAAE,sBAAsB,CAAC,uBAAuB,CAAC,CAAC;YACxH,CAAC;QACF,CAAC,CAAC;QAEF,sBAAiB,GAAG,GAAW,EAAE;YAChC,OAAO,IAAI,CAAC,SAAS,CAAC;QACvB,CAAC,CAAC;QAEF,oBAAe,GAAG,CAAC,IAA2D,EAAE,IAAI,GAAG,QAAQ,EAAE,EAAE;YAClG,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;gBACzB,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YAChB,CAAC;YACD,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACnD,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC;YACpC,OAAO,qBAAqB,CAAC,MAAM,CAAC,CAAC;QACtC,CAAC,CAAC;QApED,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;QAC/B,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;QACd,IAAI,CAAC,OAAO,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;QAC7C,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAC5B,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAC5B,IAAI,CAAC,UAAU,GAAG,SAAS,IAAI,SAAS,CAAC;QACzC,IAAI,CAAC,GAAG,CAAC,wBAAwB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACnD,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QACxB,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;QACpB,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;QACrB,IAAI,CAAC,SAAS,GAAG,OAAO,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAC1F,IAAI,CAAC,IAAI,GAAG,GAAG,IAAI,CAAC,UAAU,GAAG,SAAS,GAAG,IAAI,CAAC,QAAQ,GAAG,UAAU,EAAE,CAAC;IAC3E,CAAC;IA0DD,KAAK,CAAC,aAAa;QAClB,IAAI,CAAC;YACJ,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;YACpB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;YACpC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;YACvB,OAAO,IAAI,CAAC;QACb,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACrB,MAAM,IAAI,eAAe,CAAC,gCAAgC,KAAK,CAAC,OAAO,EAAE,EAAE,sBAAsB,CAAC,kBAAkB,CAAC,CAAC;QACvH,CAAC;IACF,CAAC;IAED,KAAK,CAAC,SAAS;QACd,IAAI,CAAC;YACJ,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,IAAI,OAAO,IAAI,CAAC,SAAS,KAAK,WAAW,EAAE,CAAC;gBACtE,MAAM,IAAI,eAAe,CAAC,uDAAuD,EAAE,sBAAsB,CAAC,uBAAuB,CAAC,CAAC;YACpI,CAAC;YACD,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,eAAe,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;YACxG,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;gBACnB,OAAO,IAAI,CAAC,UAAU,CAAC;YACxB,CAAC;YACD,IAAI,CAAC,SAAS,GAAG,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;YACvD,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;YACxF,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;gBACnC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC3F,OAAO,IAAI,CAAC,UAAU,CAAC;YACxB,CAAC;YACD,IAAI,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC;YAC7B,IAAI,SAAS,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;YAC5C,IAAI,MAAM,GAAG,IAAI,CAAC;YAClB,OAAO,MAAM,EAAE,CAAC;gBACf,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;gBACxG,MAAM,YAAY,GAAG,MAAM,gBAAgB,CAAC,IAAI,EAAE,CAAC;gBACnD,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC;gBAClD,MAAM,IAAI,IAAI,CAAC,UAAU,CAAC;gBAC1B,MAAM,aAAa,GAAG,QAAQ,CAAC,gBAAgB,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,YAAY,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;gBACjH,IAAI,aAAa,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;oBACrC,MAAM,GAAG,KAAK,CAAC;gBAChB,CAAC;YACF,CAAC;YACD,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAC9C,IAAI,CAAC,UAAU,GAAG,WAAW,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;YACvD,OAAO,IAAI,CAAC,UAAU,CAAC;QACxB,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACrB,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,iCAAiC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;gBACtE,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;gBACrB,OAAO,IAAI,CAAC,UAAU,CAAC;YACxB,CAAC;YACD,MAAM,IAAI,gBAAgB,CAAC,GAAG,QAAQ,0BAA0B,KAAK,CAAC,OAAO,EAAE,EAAE,sBAAsB,CAAC,kBAAkB,CAAC,CAAC;QAC7H,CAAC;IACF,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,IAAc;QAC7B,IAAI,CAAC;YACJ,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,IAAI,OAAO,IAAI,CAAC,SAAS,KAAK,WAAW,EAAE,CAAC;gBACtE,MAAM,IAAI,eAAe,CAAC,uDAAuD,EAAE,sBAAsB,CAAC,uBAAuB,CAAC,CAAC;YACpI,CAAC;YACD,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;YACxF,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,4DAA4D;YAE1I,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,SAAS,KAAK,EAAE,EAAE,CAAC;gBAC9C,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACtD,qEAAqE;gBACrE,IAAI,WAAW,KAAK,IAAI,IAAI,WAAW,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC;oBAC5D,OAAO,KAAK,CAAC;gBACd,CAAC;YACF,CAAC;YAED,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;YACvD,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,QAAQ,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBACzE,MAAM,IAAI,gBAAgB,CAAC,GAAG,QAAQ,uBAAuB,EAAE,sBAAsB,CAAC,kBAAkB,CAAC,CAAC;YAC3G,CAAC;YAED,yBAAyB;YACzB,MAAM,OAAO,GAAI,IAAY,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YACzD,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACnC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;gBAChD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;YACxB,CAAC;YACD,OAAO,IAAI,CAAC;QACb,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACrB,IAAI,KAAK,YAAY,gBAAgB,IAAI,KAAK,YAAY,eAAe,EAAE,CAAC;gBAC3E,MAAM,KAAK,CAAC;YACb,CAAC;YACD,MAAM,IAAI,eAAe,CAAC,GAAG,KAAK,CAAC,OAAO,EAAE,EAAE,sBAAsB,CAAC,eAAe,CAAC,CAAC;QACvF,CAAC;IACF,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,MAAM,CAAC,GAA2B,EAAE,MAAe;QACxD,IAAI,CAAC;YACJ,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;gBACvC,MAAM,IAAI,eAAe,CAAC,iCAAiC,EAAE,sBAAsB,CAAC,YAAY,CAAC,CAAC;YACnG,CAAC;YACD,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;gBACpD,MAAM,IAAI,uBAAuB,CAChC,GAAG,QAAQ,0CAA0C,EACrD,sBAAsB,CAAC,yBAAyB,CAChD,CAAC;YACH,CAAC;YACD,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;YAEhD,MAAM,YAAY,GAAG,MAAM,CAAC,CAAC,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7G,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;YACzD,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACf,MAAM,IAAI,qBAAqB,CAC9B,yDAAyD,EACzD,sBAAsB,CAAC,uBAAuB,CAC9C,CAAC;YACH,CAAC;YACD,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;YAC1B,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;YACpC,KAAK,IAAI,IAAI,IAAI,KAAK,EAAE,CAAC;gBACxB,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;oBAC/C,MAAM,IAAI,uBAAuB,CAChC,GAAG,QAAQ,iEAAiE,EAC5E,sBAAsB,CAAC,yBAAyB,CAChD,CAAC;gBACH,CAAC;gBACD,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,YAAY,EAAE,CAAC,CAAC;gBAC9C,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE;oBAChD,SAAS,EAAE,iBAAiB;oBAC5B,kBAAkB,EAAE,IAAI;iBACxB,CAAC,CAAC;gBACH,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;oBAC1B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACjB,CAAC;qBAAM,CAAC;oBACP,MAAM,IAAI,uBAAuB,CAAC,GAAG,QAAQ,8BAA8B,EAAE,sBAAsB,CAAC,yBAAyB,CAAC,CAAC;gBAChI,CAAC;YACF,CAAC;YACD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YAC3C,IAAI,CAAC,OAAO,EAAE,CAAC;gBACd,MAAM,IAAI,gBAAgB,CAAC,GAAG,QAAQ,6BAA6B,EAAE,sBAAsB,CAAC,kBAAkB,CAAC,CAAC;YACjH,CAAC;YACD,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;YACjC,OAAO,KAAK,CAAC;QACd,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACrB,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;gBAC5C,MAAM,IAAI,qBAAqB,CAAC,4BAA4B,KAAK,CAAC,OAAO,EAAE,EAAE,sBAAsB,CAAC,uBAAuB,CAAC,CAAC;YAC9H,CAAC;YACD,IAAI,KAAK,YAAY,eAAe,EAAE,CAAC;gBACtC,MAAM,KAAK,CAAC;YACb,CAAC;YACD,MAAM,IAAI,eAAe,CAAC,4BAA4B,KAAK,CAAC,OAAO,EAAE,EAAE,sBAAsB,CAAC,YAAY,CAAC,CAAC;QAC7G,CAAC;IACF,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,IAAI,CAAC,QAAgB,EAAE,EAAE,UAAkB,EAAE;QAClD,IAAI,CAAC;YACJ,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBAC3C,MAAM,IAAI,eAAe,CAAC,8BAA8B,EAAE,sBAAsB,CAAC,gBAAgB,CAAC,CAAC;YACpG,CAAC;YACD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;YACpC,MAAM,KAAK,GAAI,OAA6B,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAE,OAA6B,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAChI,MAAM,GAAG,GACP,OAA8B,CAAC,KAAK,KAAK,SAAS;gBAClD,CAAC,CAAC,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAE,OAA8B,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;gBACrE,CAAC,CAAC,SAAS,CAAC;YACd,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YACtF,OAAO,YAAY,CAAC;QACrB,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACrB,MAAM,IAAI,eAAe,CAAC,0BAA0B,KAAK,CAAC,OAAO,EAAE,EAAE,sBAAsB,CAAC,UAAU,CAAC,CAAC;QACzG,CAAC;IACF,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,OAAO,CAAC,QAAgB,EAAE;QAC/B,IAAI,CAAC;YACJ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBACpB,MAAM,IAAI,eAAe,CAAC,GAAG,QAAQ,wBAAwB,EAAE,sBAAsB,CAAC,gBAAgB,CAAC,CAAC;YACzG,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;YACpD,OAAO,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;QAC1B,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACrB,IAAI,KAAK,YAAY,eAAe,EAAE,CAAC;gBACtC,MAAM,KAAK,CAAC;YACb,CAAC;YACD,MAAM,IAAI,eAAe,CAAC,GAAG,QAAQ,+BAA+B,KAAK,CAAC,OAAO,EAAE,EAAE,sBAAsB,CAAC,cAAc,CAAC,CAAC;QAC7H,CAAC;IACF,CAAC;IAED;;;;;;;;;OASG;IACH,KAAK,CAAC,MAAM,CAAC,QAAgB,EAAE,EAAE,SAAiB,EAAE,EAAE,UAAkB,EAAE;QACzE,IAAI,CAAC;YACJ,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;gBACtF,MAAM,IAAI,eAAe,CAAC,iDAAiD,EAAE,sBAAsB,CAAC,gBAAgB,CAAC,CAAC;YACvH,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;gBACrB,MAAM,IAAI,qBAAqB,CAAC,2CAA2C,EAAE,sBAAsB,CAAC,uBAAuB,CAAC,CAAC;YAC9H,CAAC;YACD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;YACpC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,CAAC,CAAC;YAChC,IAAI,YAAY,GAAG,CAAC,CAAC;YACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACtC,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC;oBAClC,MAAM,UAAU,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,CAAC;oBAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,EAAE;wBAClD,SAAS,EAAE,iBAAiB;wBAC5B,kBAAkB,EAAE,IAAI;qBACxB,CAAC,CAAC;oBACH,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;wBACtB,IAAI,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC;wBACrB,YAAY,EAAE,CAAC;oBAChB,CAAC;yBAAM,CAAC;wBACP,MAAM,IAAI,uBAAuB,CAAC,GAAG,QAAQ,8BAA8B,EAAE,sBAAsB,CAAC,yBAAyB,CAAC,CAAC;oBAChI,CAAC;gBACF,CAAC;YACF,CAAC;YAED,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;gBACtB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;gBAC3C,IAAI,CAAC,OAAO,EAAE,CAAC;oBACd,MAAM,IAAI,gBAAgB,CAAC,GAAG,QAAQ,6BAA6B,EAAE,sBAAsB,CAAC,kBAAkB,CAAC,CAAC;gBACjH,CAAC;YACF,CAAC;iBAAM,IAAI,OAAO,IAAI,QAAQ,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;gBAC7D,oDAAoD;gBACpD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBAC1C,IAAI,CAAC,OAAO,EAAE,CAAC;oBACd,MAAM,IAAI,gBAAgB,CAAC,GAAG,QAAQ,6BAA6B,EAAE,sBAAsB,CAAC,kBAAkB,CAAC,CAAC;gBACjH,CAAC;gBACD,YAAY,GAAG,CAAC,CAAC;YAClB,CAAC;YACD,OAAO,YAAY,CAAC;QACrB,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACrB,IAAI,KAAK,YAAY,gBAAgB,EAAE,CAAC;gBACvC,MAAM,KAAK,CAAC;YACb,CAAC;YACD,MAAM,IAAI,eAAe,CAAC,4BAA4B,KAAK,CAAC,OAAO,EAAE,EAAE,sBAAsB,CAAC,YAAY,CAAC,CAAC;QAC7G,CAAC;IACF,CAAC;IAED;;;;;;;;;;;OAWG;IACH,KAAK,CAAC,SAAS,CAAC,QAA6B,EAAE,EAAE,SAA8B,EAAE,EAAE,UAA+B,EAAE;QACnH,IAAI,CAAC;YACJ,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;gBACtF,MAAM,IAAI,eAAe,CAAC,mBAAmB,EAAE,sBAAsB,CAAC,gBAAgB,CAAC,CAAC;YACzF,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;gBACrB,MAAM,IAAI,qBAAqB,CAAC,2CAA2C,EAAE,sBAAsB,CAAC,uBAAuB,CAAC,CAAC;YAC9H,CAAC;YACD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;YACpC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,CAAC,CAAC;YAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;YAEnE,IAAI,QAAQ,KAAK,CAAC,CAAC,EAAE,CAAC;gBACrB,MAAM,UAAU,GAAG,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,MAAM,EAAE,CAAC;gBACpD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,EAAE;oBAClD,SAAS,EAAE,iBAAiB;oBAC5B,kBAAkB,EAAE,IAAI;iBACxB,CAAC,CAAC;gBACH,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;oBACtB,IAAI,CAAC,QAAQ,CAAC,GAAG,UAAU,CAAC;oBAC5B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;oBAC3C,IAAI,CAAC,OAAO,EAAE,CAAC;wBACd,MAAM,IAAI,gBAAgB,CAAC,GAAG,QAAQ,6BAA6B,EAAE,sBAAsB,CAAC,kBAAkB,CAAC,CAAC;oBACjH,CAAC;oBACD,OAAO,CAAC,CAAC;gBACV,CAAC;qBAAM,CAAC;oBACP,MAAM,IAAI,uBAAuB,CAAC,GAAG,QAAQ,8BAA8B,EAAE,sBAAsB,CAAC,yBAAyB,CAAC,CAAC;gBAChI,CAAC;YACF,CAAC;YACD,IAAI,OAAO,IAAI,QAAQ,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;gBACtD,oDAAoD;gBACpD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBAC1C,IAAI,CAAC,OAAO,EAAE,CAAC;oBACd,MAAM,IAAI,gBAAgB,CAAC,GAAG,QAAQ,6BAA6B,EAAE,sBAAsB,CAAC,kBAAkB,CAAC,CAAC;gBACjH,CAAC;gBACD,OAAO,CAAC,CAAC;YACV,CAAC;YACD,OAAO,CAAC,CAAC;QACV,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACrB,IAAI,KAAK,YAAY,eAAe,EAAE,CAAC;gBACtC,MAAM,KAAK,CAAC;YACb,CAAC;YACD,MAAM,IAAI,eAAe,CAAC,+BAA+B,KAAK,CAAC,OAAO,EAAE,EAAE,sBAAsB,CAAC,gBAAgB,CAAC,CAAC;QACpH,CAAC;IACF,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,MAAM,CAAC,QAAgB,EAAE;QAC9B,IAAI,CAAC;YACJ,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBAC3C,MAAM,IAAI,eAAe,CAAC,mBAAmB,EAAE,sBAAsB,CAAC,gBAAgB,CAAC,CAAC;YACzF,CAAC;YACD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;YACpC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,CAAC,CAAC;YAChC,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC;YAElC,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;YAChE,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YAC9C,IAAI,CAAC,OAAO,EAAE,CAAC;gBACd,MAAM,IAAI,gBAAgB,CAAC,GAAG,QAAQ,6BAA6B,EAAE,sBAAsB,CAAC,kBAAkB,CAAC,CAAC;YACjH,CAAC;YACD,OAAO,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC;QACvC,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACrB,IAAI,KAAK,YAAY,gBAAgB,EAAE,CAAC;gBACvC,MAAM,KAAK,CAAC;YACb,CAAC;YACD,MAAM,IAAI,eAAe,CAAC,4BAA4B,KAAK,CAAC,OAAO,EAAE,EAAE,sBAAsB,CAAC,YAAY,CAAC,CAAC;QAC7G,CAAC;IACF,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,SAAS;QACd,IAAI,CAAC;YACJ,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;YACpC,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC;YAClC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;YACzC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACd,MAAM,IAAI,gBAAgB,CAAC,GAAG,QAAQ,6BAA6B,EAAE,sBAAsB,CAAC,kBAAkB,CAAC,CAAC;YACjH,CAAC;YACD,OAAO,aAAa,CAAC;QACtB,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACrB,IAAI,KAAK,YAAY,gBAAgB,EAAE,CAAC;gBACvC,MAAM,KAAK,CAAC;YACb,CAAC;YACD,MAAM,IAAI,eAAe,CAAC,4BAA4B,KAAK,CAAC,OAAO,EAAE,EAAE,sBAAsB,CAAC,YAAY,CAAC,CAAC;QAC7G,CAAC;IACF,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,KAAK,CAAC,QAAgB,EAAE;QAC7B,IAAI,CAAC;YACJ,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACpC,OAAO,IAAI,CAAC,MAAM,CAAC;QACpB,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACrB,MAAM,IAAI,eAAe,CAAC,2BAA2B,KAAK,CAAC,OAAO,EAAE,EAAE,sBAAsB,CAAC,WAAW,CAAC,CAAC;QAC3G,CAAC;IACF,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,UAAkB,EAAE,YAAoB,IAAI,CAAC,OAAO;QAC1E,IAAI,CAAC;YACJ,WAAW,CAAC,UAAU,CAAC,CAAC;YACxB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,UAAU,GAAG,SAAS,GAAG,UAAU,GAAG,UAAU,EAAE,CAAC,CAAC;YACrG,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;gBACd,MAAM,IAAI,eAAe,CAAC,GAAG,QAAQ,gBAAgB,UAAU,iBAAiB,EAAE,sBAAsB,CAAC,iBAAiB,CAAC,CAAC;YAC7H,CAAC;YACD,MAAM,MAAM,GAAG,SAAS,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACjD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;YACpC,MAAM,SAAS,GAAG,IAAI,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;YAClH,MAAM,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YAChC,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,UAAU,GAAG,SAAS,GAAG,IAAI,CAAC,QAAQ,GAAG,UAAU,EAAE,CAAC,CAAC;YACrF,OAAO,SAAS,CAAC;QAClB,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACrB,IAAI,KAAK,YAAY,eAAe,EAAE,CAAC;gBACtC,MAAM,KAAK,CAAC;YACb,CAAC;YACD,MAAM,IAAI,eAAe,CAAC,6BAA6B,KAAK,CAAC,OAAO,EAAE,EAAE,sBAAsB,CAAC,uBAAuB,CAAC,CAAC;QACzH,CAAC;IACF,CAAC;CACD;AAED,6BAA6B;AAC7B,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,sBAAsB,EAAE,CAAC"} \ No newline at end of file diff --git a/package.json b/package.json index 1453cd5..c18bede 100644 --- a/package.json +++ b/package.json @@ -41,11 +41,7 @@ "engines": { "node": ">=20.0.0" }, - "jest": { - "collectCoverageFrom": [ - "src/lowstorage.js" - ] - }, + "jest": {}, "devDependencies": { "esbuild": "^0.23.0", "jest": "^29.7.0", diff --git a/src/errors.ts b/src/errors.ts index 436e61c..b84e19c 100644 --- a/src/errors.ts +++ b/src/errors.ts @@ -4,6 +4,7 @@ const lowstorage_ERROR_CODES: Record = { MISSING_ARGUMENT: 'MISSING_ARGUMENT' as const, COLLECTION_EXISTS: 'COLLECTION_EXISTS' as const, CREATE_COLLECTION_ERROR: 'CREATE_COLLECTION_ERROR' as const, + LIST_COLLECTIONS_ERROR: 'LIST_COLLECTIONS_ERROR' as const, RENAME_COLLECTION_ERROR: 'RENAME_COLLECTION_ERROR' as const, REMOVE_COLLECTION_ERROR: 'REMOVE_COLLECTION_ERROR' as const, UPDATE_COLLECTION_SCHEMA_ERROR: 'UPDATE_COLLECTION_SCHEMA_ERROR' as const, diff --git a/src/helpers.ts b/src/helpers.ts index 3d0d5a3..0158f04 100644 --- a/src/helpers.ts +++ b/src/helpers.ts @@ -27,7 +27,7 @@ const ensureIdFieldInSchema = (schema: Object): Object => { size: 16, logicalType: 'UUID', }; - if (typeof schema === 'undefined' || schema === null) { + if ((typeof schema === 'undefined' || schema === null) && (typeof schema !== 'object' || !Array.isArray(schema))) { return schema; } diff --git a/src/lowstorage.ts b/src/lowstorage.ts index 2016388..a92a262 100644 --- a/src/lowstorage.ts +++ b/src/lowstorage.ts @@ -36,21 +36,21 @@ import { Type as parse } from 'avsc'; import { lowstorage_ERROR_CODES, lowstorageError, SchemaValidationError, DocumentValidationError, S3OperationError } from 'errors'; import { matchesQuery, generateUUID, ensureIdFieldInSchema } from 'helpers'; -const MODULE_NAME: string = 'lowstorage'; -const DEFAULT_DELIMITER: string = '/'; -const PROJECT_DIR_PREFIX: string = 'lowstorage'; +const MOD_NAME: string = 'lowstorage'; +const DELIMITER: string = '/'; +const DIR_PREFIX: string = 'lowstorage'; const COL_SUFFIX: string = '.avro'; -const CHUNG_1MB: number = 1024 * 1024; -const CHUNG_5MB: number = 5 * CHUNG_1MB; +const CHUNK_1MB: number = 1024 * 1024; +const CHUNK_5MB: number = 5 * CHUNK_1MB; const EMPTY_DATA: Buffer = Buffer.from('', 'utf8'); const errorValidationFn = (errorCode: string = lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR): void => { - throw new DocumentValidationError(`${MODULE_NAME}: Invalid document or schema ${errorCode}`); + throw new DocumentValidationError(`${MOD_NAME}: Invalid document or schema ${errorCode}`); }; const _hasColName = (colName: string = ''): void => { - if (colName.trim() === '' || colName === null || typeof colName === 'undefined' || colName.length > 255 || colName === null) { - throw new lowstorageError(`${MODULE_NAME}: Collection name is required, null or too long`, lowstorage_ERROR_CODES.MISSING_ARGUMENT); + if (colName.trim() === '' || colName === null || typeof colName === 'undefined' || colName.length > 255) { + throw new lowstorageError(`Collection name is required, null or too long`, lowstorage_ERROR_CODES.MISSING_ARGUMENT); } }; @@ -95,8 +95,8 @@ class lowstorage { * @param {string} options.bucketName - S3 bucket name. * @param {string} [options.region='auto'] - S3 region. * @param {Object} [options.logger=null] - Logger object. - * @param {string} [options.dirPrefix=PROJECT_DIR_PREFIX] - Directory prefix for collections. - * @param {Number} [options.maxRequestSizeInBytes=CHUNG_5MB] - Chunk size for reading and writing data. AWS S3 has a minimum of 5MB per object. + * @param {string} [options.dirPrefix=DIR_PREFIX] - Directory prefix for collections. + * @param {Number} [options.maxRequestSizeInBytes=CHUNK_5MB] - Chunk size for reading and writing data. AWS S3 has a minimum of 5MB per object. * @returns {lowstorage} A new lowstorage instance. */ private _schemas: Map; @@ -108,7 +108,7 @@ class lowstorage { this._checkArgs(options); this._schemas = new Map(); this._s3 = new S3(options); - this._dirPrefix = options.dirPrefix || PROJECT_DIR_PREFIX; + this._dirPrefix = options.dirPrefix || DIR_PREFIX; this._avroParse = parse; } @@ -116,7 +116,7 @@ class lowstorage { const requiredFields = ['accessKeyId', 'secretAccessKey', 'endpoint', 'bucketName']; for (const field of requiredFields) { if (!args[field as keyof S3Options]) { - throw new lowstorageError(`${MODULE_NAME}: ${field} is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT); + throw new lowstorageError(`${field} is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT); } } }; @@ -134,7 +134,7 @@ class lowstorage { if (error.message.includes('Not Found')) { return false; } - throw new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); + throw new lowstorageError(`${error.message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); } } @@ -148,15 +148,14 @@ class lowstorage { const exists = await this.checkIfStorageExists(); if (!exists) { const createdBucket = await this._s3.createBucket(); - return createdBucket; + return !!createdBucket; } return exists; - throw new lowstorageError(`${MODULE_NAME}: Bucket already exists`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); } catch (error: any) { if (error instanceof lowstorageError) { throw error; } - throw new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); + throw new lowstorageError(`${error.message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); } } @@ -164,10 +163,11 @@ class lowstorage { * List all collections. * @returns {Promise} An array of collection names. * @throws {S3OperationError} If there's an error during S3 operation. + * @throws {lowstorageError} If there's an error. */ async listCollections(): Promise { try { - const listed = await this._s3.list(DEFAULT_DELIMITER, this._dirPrefix); + const listed = await this._s3.list(DELIMITER, this._dirPrefix); if (Array.isArray(listed)) { return listed.map((entry) => entry.key.slice(this._dirPrefix.length + 1, -COL_SUFFIX.length)); } else if (typeof listed === 'object' && listed !== null && 'keyCount' in listed && listed.keyCount === '0') { @@ -175,7 +175,10 @@ class lowstorage { } return []; } catch (error: any) { - throw new S3OperationError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); + if (error instanceof S3OperationError) { + throw error; + } + throw new lowstorageError(`${error.message}`, lowstorage_ERROR_CODES.LIST_COLLECTIONS_ERROR); } } @@ -188,13 +191,13 @@ class lowstorage { async collectionExists(colName: string = ''): Promise { try { _hasColName(colName); - const exists = await this._s3.fileExists(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`); + const exists = await this._s3.fileExists(`${this._dirPrefix}${DELIMITER}${colName}${COL_SUFFIX}`); return !!exists; } catch (error: any) { if (error.message.includes('Not Found')) { return false; } - throw new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND); + throw new lowstorageError(`${error.message}`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND); } } @@ -215,30 +218,31 @@ class lowstorage { try { const type = this._avroParse.forSchema(schema); if (!type) { - throw new SchemaValidationError( - `${MODULE_NAME}: Schema is invalid: ${schema} ${lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR}`, - ); + throw new SchemaValidationError(`Schema is invalid: ${schema}`, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR); } else { this._schemas.set(colName, schema); } - } catch (error) { - throw new SchemaValidationError(`${MODULE_NAME}: Schema is invalid: ${schema}`, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR); + } catch (error: any) { + throw new SchemaValidationError( + `Schema is invalid: ${error.message} in ${schema} `, + lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR, + ); } } if (data.length > 0 && schema) { const wrapperType = this._avroParse.forSchema({ type: 'array', items: schema }); - await this._s3.put(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`, wrapperType.toBuffer(data)); + await this._s3.put(`${this._dirPrefix}${DELIMITER}${colName}${COL_SUFFIX}`, wrapperType.toBuffer(data)); } else { - await this._s3.put(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`, EMPTY_DATA); + await this._s3.put(`${this._dirPrefix}${DELIMITER}${colName}${COL_SUFFIX}`, EMPTY_DATA); } return this.collection(colName, schema, false); } - throw new lowstorageError(`${MODULE_NAME}: Collection ${colName} already exists`, lowstorage_ERROR_CODES.COLLECTION_EXISTS); + throw new lowstorageError(`Collection ${colName} already exists`, lowstorage_ERROR_CODES.COLLECTION_EXISTS); } catch (error: any) { - if (error instanceof lowstorageError) { + if (error instanceof SchemaValidationError) { throw error; } - throw new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.CREATE_COLLECTION_ERROR); + throw new lowstorageError(`${error.message}`, lowstorage_ERROR_CODES.CREATE_COLLECTION_ERROR); } } @@ -253,26 +257,23 @@ class lowstorage { _hasColName(colName); const exists = await this.collectionExists(colName); if (exists) { - await this._s3.delete(`${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`); + await this._s3.delete(`${this._dirPrefix}${DELIMITER}${colName}${COL_SUFFIX}`); const exists2 = await this.collectionExists(colName); if (typeof exists2 === 'boolean') { if (!exists2) { this._schemas.delete(colName); return true; } - throw new lowstorageError(`${MODULE_NAME}: Failed to delete collection ${colName}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); + throw new lowstorageError(`Failed to delete collection ${colName}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); } - throw new S3OperationError(`${MODULE_NAME}: Failed to delete collection ${colName}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); + throw new S3OperationError(`${MOD_NAME}: Failed to delete collection ${colName}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); } - throw new lowstorageError(`${MODULE_NAME}: Collection ${colName} does not exist`, lowstorage_ERROR_CODES.REMOVE_COLLECTION_ERROR); + throw new lowstorageError(`Collection ${colName} does not exist`, lowstorage_ERROR_CODES.REMOVE_COLLECTION_ERROR); } catch (error: any) { if (error instanceof S3OperationError) { throw error; } - throw new lowstorageError( - `${MODULE_NAME}: Failed to remove collection: ${error.message}`, - lowstorage_ERROR_CODES.REMOVE_COLLECTION_ERROR, - ); + throw new lowstorageError(`Failed to remove collection: ${error.message}`, lowstorage_ERROR_CODES.REMOVE_COLLECTION_ERROR); } } @@ -287,11 +288,11 @@ class lowstorage { async collection(colName: string = '', schema?: object, autoCreate: boolean = true): Promise { try { _hasColName(colName); - const colPath = `${this._dirPrefix}${DEFAULT_DELIMITER}${colName}${COL_SUFFIX}`; + const colPath = `${this._dirPrefix}${DELIMITER}${colName}${COL_SUFFIX}`; const exists = await this._s3.fileExists(colPath); if (!exists) { if (!autoCreate) { - throw new lowstorageError(`${MODULE_NAME}: Collection ${colName} does not exist`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND); + throw new lowstorageError(`Collection ${colName} does not exist`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND); } // TODO: check if this is the right way to handle empty data await this._s3.put(colPath, EMPTY_DATA); @@ -301,13 +302,13 @@ class lowstorage { } catch (error: any) { // check if error message contains "unknown type" and if so, throw a schema validation error if (error.message.includes('unknown type')) { - throw new SchemaValidationError( - `${MODULE_NAME}: Schema input is invalid: ${error.message}`, - lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR, - ); + throw new SchemaValidationError(`Schema input is invalid: ${error.message}`, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR); + } + if (error instanceof lowstorageError) { + throw error; } - throw new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND); + throw new lowstorageError(`${error.message}`, lowstorage_ERROR_CODES.COLLECTION_NOT_FOUND); } } @@ -315,7 +316,7 @@ class lowstorage { * Get the S3 instance associated with the lowstorage instance. * @returns {S3} The S3 instance. Use this to perform S3 operations. Check for ultralight-s3 for more details. */ - s3 = () => { + s3 = (): S3 => { return this._s3; }; } @@ -351,9 +352,9 @@ class Collection { * @param {string} colName - The name of the collection. * @param {Object} [schema] - The Avro schema for the collection. * @param {S3} s3 - The S3 instance. - * @param {string} [dirPrefix=PROJECT_DIR_PREFIX] - The directory prefix for the collection. + * @param {string} [dirPrefix=DIR_PREFIX] - The directory prefix for the collection. * @param {boolean} [safeWrite=false] - Whether to perform a safe write operation. It doublechecks the ETag of the object before writing. False = overwrites the object, True = only writes if the object has not been modified. - * @param {Number} [chunkSize=CHUNG_5MB] - The chunk size for reading and writing data. AWS S3 has a maximum of 5MB per object. + * @param {Number} [chunkSize=CHUNK_5MB] - The chunk size for reading and writing data. AWS S3 has a maximum of 5MB per object. * @returns {Collection} A new Collection instance. */ private _colName: string; @@ -371,22 +372,22 @@ class Collection { colName: string = '', schema: any, s3: S3, - dirPrefix: string = PROJECT_DIR_PREFIX, + dirPrefix: string = DIR_PREFIX, safeWrite: boolean = false, - chunkSize: number = CHUNG_5MB, + chunkSize: number = CHUNK_5MB, ) { this._colName = colName.trim(); this._s3 = s3; this._schema = ensureIdFieldInSchema(schema); this._dirPrefix = dirPrefix; this._safeWrite = safeWrite; - this._chunkSize = chunkSize || CHUNG_5MB; + this._chunkSize = chunkSize || CHUNK_5MB; this._s3.setMaxRequestSizeInBytes(this._chunkSize); this._avroParse = parse; this._lastETag = ''; this._dataCache = []; this._avroType = typeof schema === 'undefined' ? null : this._avroParse.forSchema(schema); - this._key = `${this._dirPrefix}${DEFAULT_DELIMITER}${this._colName}${COL_SUFFIX}`; + this._key = `${this._dirPrefix}${DELIMITER}${this._colName}${COL_SUFFIX}`; } getProps = (): CollectionProps => ({ @@ -428,7 +429,7 @@ class Collection { this._schema = ensureIdFieldInSchema(schema); this._avroType = typeof schema === 'undefined' ? null : this._avroParse.forSchema(schema); } catch (error: any) { - throw new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR); + throw new SchemaValidationError(`Schema is invalid: ${error.message}`, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR); } }; @@ -452,17 +453,14 @@ class Collection { this._dataCache = data; return true; } catch (error: any) { - throw new lowstorageError(`${MODULE_NAME}: Failed to force update data: ${error.message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); + throw new lowstorageError(`Failed to force update data: ${error.message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); } } async _loadData() { try { if (this._avroType === null || typeof this._avroType === 'undefined') { - throw new lowstorageError( - `${MODULE_NAME}: Missing type definition. Configure before operations `, - lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR, - ); + throw new lowstorageError(`Missing type definition. Configure before operations `, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR); } const { etag, data } = await this._s3.getObjectWithETag(this._key, { 'if-none-match': this._lastETag }); if (data === null) { @@ -495,17 +493,14 @@ class Collection { this._dataCache = []; return this._dataCache; } - throw new S3OperationError(`${MODULE_NAME}: Failed to load data: ${error.message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); + throw new S3OperationError(`${MOD_NAME}: Failed to load data: ${error.message}`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); } } async _saveData(data: Object[]): Promise { try { if (this._avroType === null || typeof this._avroType === 'undefined') { - throw new lowstorageError( - `${MODULE_NAME}: Missing type definition. Configure before operations `, - lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR, - ); + throw new lowstorageError(`Missing type definition. Configure before operations `, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR); } const wrapperType = this._avroParse.forSchema({ type: 'array', items: this._avroType }); const dataBuffer = data.length > 0 ? wrapperType.toBuffer(data) : EMPTY_DATA; // TODO: check if this is the right way to handle empty data @@ -520,7 +515,7 @@ class Collection { const resp = await this._s3.put(this._key, dataBuffer); if (typeof resp === 'object' && 'status' in resp && resp.status !== 200) { - throw new S3OperationError(`${MODULE_NAME}: Failed to save data`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); + throw new S3OperationError(`${MOD_NAME}: Failed to save data`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); } // Update the cached ETag @@ -531,10 +526,10 @@ class Collection { } return true; } catch (error: any) { - if (error instanceof S3OperationError) { + if (error instanceof S3OperationError || error instanceof lowstorageError) { throw error; } - throw new lowstorageError(`${MODULE_NAME}: ${error.message}`, lowstorage_ERROR_CODES.SAVE_DATA_ERROR); + throw new lowstorageError(`${error.message}`, lowstorage_ERROR_CODES.SAVE_DATA_ERROR); } } @@ -548,11 +543,11 @@ class Collection { async insert(doc: Object | Array, schema?: Object): Promise { try { if (doc === undefined || doc === null) { - throw new lowstorageError(`${MODULE_NAME}: Document is required for insert`, lowstorage_ERROR_CODES.INSERT_ERROR); + throw new lowstorageError(`Document is required for insert`, lowstorage_ERROR_CODES.INSERT_ERROR); } if (typeof doc !== 'object' && !Array.isArray(doc)) { throw new DocumentValidationError( - `${MODULE_NAME}: Document must be an object or an array`, + `${MOD_NAME}: Document must be an object or an array`, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR, ); } @@ -562,7 +557,7 @@ class Collection { const avroType = this._avroParse.forSchema(schemaWithId); if (!avroType) { throw new SchemaValidationError( - `${MODULE_NAME}: Schema is required - Pass a schema to the insert method`, + `Schema is required - Pass a schema to the insert method`, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR, ); } @@ -571,7 +566,7 @@ class Collection { for (let item of items) { if (typeof item !== 'object' || item === null) { throw new DocumentValidationError( - `${MODULE_NAME}: Invalid input: input must be an object or an array of objects`, + `${MOD_NAME}: Invalid input: input must be an object or an array of objects`, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR, ); } @@ -583,26 +578,23 @@ class Collection { if (validBuffer === true) { data.push(item); } else { - throw new DocumentValidationError(`${MODULE_NAME}: Invalid document or schema`, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR); + throw new DocumentValidationError(`${MOD_NAME}: Invalid document or schema`, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR); } } const success = await this._saveData(data); if (!success) { - throw new S3OperationError(`${MODULE_NAME}: Failed to insert document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); + throw new S3OperationError(`${MOD_NAME}: Failed to insert document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); } this.setAvroSchema(schemaWithId); return items; } catch (error: any) { if (error.message.includes('unknown type')) { - throw new SchemaValidationError( - `${MODULE_NAME}: Schema input is invalid: ${error.message}`, - lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR, - ); + throw new SchemaValidationError(`Schema input is invalid: ${error.message}`, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR); } if (error instanceof lowstorageError) { throw error; } - throw new lowstorageError(`${MODULE_NAME} Insert operation failed: ${error.message}`, lowstorage_ERROR_CODES.INSERT_ERROR); + throw new lowstorageError(`Insert operation failed: ${error.message}`, lowstorage_ERROR_CODES.INSERT_ERROR); } } @@ -618,7 +610,7 @@ class Collection { async find(query: Object = {}, options: Object = {}): Promise { try { if (query === undefined || query === null) { - throw new lowstorageError(`${MODULE_NAME}: Query is required for update`, lowstorage_ERROR_CODES.MISSING_ARGUMENT); + throw new lowstorageError(`Query is required for update`, lowstorage_ERROR_CODES.MISSING_ARGUMENT); } const data = await this._loadData(); const start = (options as { skip?: number }).skip !== undefined ? parseInt(String((options as { skip?: number }).skip), 10) : 0; @@ -629,7 +621,7 @@ class Collection { const filteredData = data.filter((doc) => matchesQuery(doc, query)).slice(start, end); return filteredData; } catch (error: any) { - throw new lowstorageError(`${MODULE_NAME}: Find operation failed: ${error.message}`, lowstorage_ERROR_CODES.FIND_ERROR); + throw new lowstorageError(`Find operation failed: ${error.message}`, lowstorage_ERROR_CODES.FIND_ERROR); } } @@ -642,7 +634,7 @@ class Collection { async findOne(query: Object = {}): Promise { try { if (query === null) { - throw new lowstorageError(`${MODULE_NAME}: Query cannot be null`, lowstorage_ERROR_CODES.INVALID_ARGUMENT); + throw new lowstorageError(`${MOD_NAME}: Query cannot be null`, lowstorage_ERROR_CODES.INVALID_ARGUMENT); } const result = await this.find(query, { limit: 1 }); return result[0] || null; @@ -650,7 +642,7 @@ class Collection { if (error instanceof lowstorageError) { throw error; } - throw new lowstorageError(`${MODULE_NAME}: FindOne operation failed: ${error.message}`, lowstorage_ERROR_CODES.FIND_ONE_ERROR); + throw new lowstorageError(`${MOD_NAME}: FindOne operation failed: ${error.message}`, lowstorage_ERROR_CODES.FIND_ONE_ERROR); } } @@ -667,16 +659,10 @@ class Collection { async update(query: Object = {}, update: Object = {}, options: Object = {}): Promise { try { if (query === undefined || query === null || update === undefined || update === null) { - throw new lowstorageError( - `${MODULE_NAME}: Query and update values are required for update`, - lowstorage_ERROR_CODES.MISSING_ARGUMENT, - ); + throw new lowstorageError(`Query and update values are required for update`, lowstorage_ERROR_CODES.MISSING_ARGUMENT); } if (!this._avroType) { - throw new SchemaValidationError( - `${MODULE_NAME}: Schema is not defined for this collection`, - lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR, - ); + throw new SchemaValidationError(`Schema is not defined for this collection`, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR); } const data = await this._loadData(); if (data.length === 0) return 0; @@ -692,10 +678,7 @@ class Collection { data[i] = updatedDoc; updatedCount++; } else { - throw new DocumentValidationError( - `${MODULE_NAME}: Invalid document or schema`, - lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR, - ); + throw new DocumentValidationError(`${MOD_NAME}: Invalid document or schema`, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR); } } } @@ -703,13 +686,13 @@ class Collection { if (updatedCount > 0) { const success = await this._saveData(data); if (!success) { - throw new S3OperationError(`${MODULE_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); + throw new S3OperationError(`${MOD_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); } } else if (options && 'upsert' in options && options.upsert) { // If upsert is true, we need to insert the document const success = await this.insert(update); if (!success) { - throw new S3OperationError(`${MODULE_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); + throw new S3OperationError(`${MOD_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); } updatedCount = 1; } @@ -718,7 +701,7 @@ class Collection { if (error instanceof S3OperationError) { throw error; } - throw new lowstorageError(`${MODULE_NAME}: Update operation failed: ${error.message}`, lowstorage_ERROR_CODES.UPDATE_ERROR); + throw new lowstorageError(`Update operation failed: ${error.message}`, lowstorage_ERROR_CODES.UPDATE_ERROR); } } @@ -737,13 +720,10 @@ class Collection { async updateOne(query: Record = {}, update: Record = {}, options: Record = {}): Promise { try { if (query === undefined || query === null || update === undefined || update === null) { - throw new lowstorageError(`${MODULE_NAME}: Query is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT); + throw new lowstorageError(`Query is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT); } if (!this._avroType) { - throw new SchemaValidationError( - `${MODULE_NAME}: Schema is not defined for this collection`, - lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR, - ); + throw new SchemaValidationError(`Schema is not defined for this collection`, lowstorage_ERROR_CODES.SCHEMA_VALIDATION_ERROR); } const data = await this._loadData(); if (data.length === 0) return 0; @@ -759,18 +739,18 @@ class Collection { data[docIndex] = updatedDoc; const success = await this._saveData(data); if (!success) { - throw new S3OperationError(`${MODULE_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); + throw new S3OperationError(`${MOD_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); } return 1; } else { - throw new DocumentValidationError(`${MODULE_NAME}: Invalid document or schema`, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR); + throw new DocumentValidationError(`${MOD_NAME}: Invalid document or schema`, lowstorage_ERROR_CODES.DOCUMENT_VALIDATION_ERROR); } } if (options && 'upsert' in options && options.upsert) { // If upsert is true, we need to insert the document const success = await this.insert(update); if (!success) { - throw new S3OperationError(`${MODULE_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); + throw new S3OperationError(`${MOD_NAME}: Failed to update document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); } return 1; } @@ -779,7 +759,7 @@ class Collection { if (error instanceof lowstorageError) { throw error; } - throw new lowstorageError(`${MODULE_NAME}: UpdateOne operation failed: ${error.message}`, lowstorage_ERROR_CODES.UPDATE_ONE_ERROR); + throw new lowstorageError(`UpdateOne operation failed: ${error.message}`, lowstorage_ERROR_CODES.UPDATE_ONE_ERROR); } } @@ -793,7 +773,7 @@ class Collection { async delete(query: Object = {}): Promise { try { if (query === undefined || query === null) { - throw new lowstorageError(`${MODULE_NAME}: Query is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT); + throw new lowstorageError(`Query is required`, lowstorage_ERROR_CODES.MISSING_ARGUMENT); } const data = await this._loadData(); if (data.length === 0) return 0; @@ -802,14 +782,14 @@ class Collection { const newData = data.filter((doc) => !matchesQuery(doc, query)); const success = await this._saveData(newData); if (!success) { - throw new S3OperationError(`${MODULE_NAME}: Failed to delete document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); + throw new S3OperationError(`${MOD_NAME}: Failed to delete document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); } return initialLength - newData.length; } catch (error: any) { if (error instanceof S3OperationError) { throw error; } - throw new lowstorageError(`${MODULE_NAME}: Delete operation failed: ${error.message}`, lowstorage_ERROR_CODES.DELETE_ERROR); + throw new lowstorageError(`Delete operation failed: ${error.message}`, lowstorage_ERROR_CODES.DELETE_ERROR); } } @@ -825,14 +805,14 @@ class Collection { const initialLength = data.length; const success = await this._saveData([]); if (!success) { - throw new S3OperationError(`${MODULE_NAME}: Failed to delete document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); + throw new S3OperationError(`${MOD_NAME}: Failed to delete document`, lowstorage_ERROR_CODES.S3_OPERATION_ERROR); } return initialLength; } catch (error: any) { if (error instanceof S3OperationError) { throw error; } - throw new lowstorageError(`${MODULE_NAME}: Delete operation failed: ${error.message}`, lowstorage_ERROR_CODES.DELETE_ERROR); + throw new lowstorageError(`Delete operation failed: ${error.message}`, lowstorage_ERROR_CODES.DELETE_ERROR); } } @@ -847,31 +827,28 @@ class Collection { const data = await this.find(query); return data.length; } catch (error: any) { - throw new lowstorageError(`${MODULE_NAME}: Count operation failed: ${error.message}`, lowstorage_ERROR_CODES.COUNT_ERROR); + throw new lowstorageError(`Count operation failed: ${error.message}`, lowstorage_ERROR_CODES.COUNT_ERROR); } } async renameCollection(newColName: string, newSchema: Object = this._schema): Promise { try { _hasColName(newColName); - const exists = await this._s3.fileExists(`${this._dirPrefix}${DEFAULT_DELIMITER}${newColName}${COL_SUFFIX}`); + const exists = await this._s3.fileExists(`${this._dirPrefix}${DELIMITER}${newColName}${COL_SUFFIX}`); if (!!exists) { - throw new lowstorageError(`${MODULE_NAME}: Collection ${newColName} already exists`, lowstorage_ERROR_CODES.COLLECTION_EXISTS); + throw new lowstorageError(`${MOD_NAME}: Collection ${newColName} already exists`, lowstorage_ERROR_CODES.COLLECTION_EXISTS); } const schema = newSchema || this.getAvroSchema(); const data = await this._loadData(); const createNew = new Collection(newColName, schema, this._s3, this._dirPrefix, this._safeWrite, this._chunkSize); await createNew._saveData(data); - await this._s3.delete(`${this._dirPrefix}${DEFAULT_DELIMITER}${this._colName}${COL_SUFFIX}`); + await this._s3.delete(`${this._dirPrefix}${DELIMITER}${this._colName}${COL_SUFFIX}`); return createNew; } catch (error: any) { if (error instanceof lowstorageError) { throw error; } - throw new lowstorageError( - `${MODULE_NAME}: Rename collection failed: ${error.message}`, - lowstorage_ERROR_CODES.RENAME_COLLECTION_ERROR, - ); + throw new lowstorageError(`Rename collection failed: ${error.message}`, lowstorage_ERROR_CODES.RENAME_COLLECTION_ERROR); } } }